Calculo del factorial en C

Programa para Calcular el Factorial de un Numero en C/C++

Para continuar en el proceso de aprender a programar en C/C++ y específicamente a utilizar ciclos, bucles o estructuras repetitivas, hoy vamos a realizar el algoritmo para calcular el factorial de un número entero positivo, este es uno de los ejercicios de programación que más comúnmente se emplean en las universidades tanto en clases durante las explicaciones como en evaluaciones o exámenes, ya que aun cuando su extensión en número de instrucciones es corta, representa un pequeño nivel de dificultad para estudiantes noveles, pues el poder idear la solución adecuada al problema, requiere de una buena lógica de programación y una correcta comprensión de la sintaxis del lenguaje de programación empleado.

Creo que siempre que se está estudiando algo, lo debemos relacionar con su propósito concreto en el campo de trabajo, lo que yo suelo llamar el “mundo real”, para de este modo saber con cual intención necesitamos aprender eso que estemos estudiando, en este caso el factorial de un número es un cálculo matemático que nos permite determinar la cantidad de combinaciones diferentes que se pueden dar a un determinado número de elementos distintos, es decir la cantidad de permutaciones que pueden darse a un determinado conjunto. Esto puede ser útil en programas tan complejos como por ejemplo en videojuegos o aplicaciones estadísticas.


Yo recomiendo a los estudiantes de programación, que intenten resolver por si solos este tipo de ejercicios como el cálculo del factorial, antes de recibir la explicación de cómo solucionar el problema por parte de un profesor, obviamente primero deben estudiar y practicar las estructuras repetitivas y haber recibido clases sobre ello, pero el gran desafío para quien lo realiza y el gran potencial que tiene este ejercicio como acelerador del aprendizaje, radica en que sea el propio estudiante quien analice la situación planteada y busque lógicamente como aplicar sus conocimientos para solucionarlo, de este modo puede resultar muy útil para el estudiante, sin embargo lo más común es que los profesores lo explican antes de que el estudiante luche por sí mismo para resolverlo y esto destruye casi por completo su eficacia como catalizador del adiestramiento del futuro programador (según mi opinión).

Enunciado para el ejercicio del Factorial en C++

Un enunciado sencillo y completo seria: Desarrollar el código fuente en lenguaje de programación C++ (también lo resolveremos en lenguaje C) para un programa que sea capaz de recibir por teclado un número entero positivo y posteriormente muestre en pantalla el valor correspondiente al factorial del número introducido por el usuario.

En cambio un enunciado más picante y de un profesor algo malvado (como yo) seria así: Realizar un programa en lenguaje de programación C++, que dada por el usuario la cantidad de jugadores que conforman un equipo de fútbol (football) para un juego de video en 3D del campeonato mundial de este deporte, determine y muestre en pantalla el número de opciones distintas que existen para ordenar a estos jugadores durante la reproducción del himno nacional de su país previo al inicio del partido.

Análisis sobre cómo se calcula el factorial de un número

Siempre al responder a un ejercicio de este tipo, lo más importante será leer adecuadamente el enunciado del problema y extraer realmente que es lo que se necesita solucionar y que cosas son simplemente entorno o relleno, en este caso sabemos que es el cálculo del factorial lo que debemos efectuar.

Por supuesto para poder realizar un programa que determine el factorial de un número, primero debemos conocer el concepto matemático de Factorial y para ello podemos revisar lo que nos explica la enciclopedia libre, Wikipedia. Luego resumiendo podemos definir al factorial de un determinado número como la multiplicación de cada uno de los números naturales entre cero y ese número al que realizamos la operación, sin incluir al cero, pero si incluyendo al número del cálculo. Por ejemplo el valor del factorial de 5, el cual se expresa acompañado de un signo de exclamación como 5!, es 120 que a su vez es el producto de 1x2x3x4x5.

Como es obvio, lo primero que necesitaremos en nuestro algoritmo para calcular el factorial de un número es leer mediante el teclado un número entero positivo que será al que se le obtendrá el factorial, ese número deberá almacenarse en una variable entera, luego comienza el verdadero desafío del problema, que es encontrar la forma de multiplicar un numero con sus anteriores consecutivos mayores que cero.

Como ya debemos saber, un bucle nos permite repetir una operación cuantas veces necesitemos, solo es cuestión de saber adaptarlo a nuestras necesidades o mejor dicho a las características del problema que deseamos resolver, por lo tanto debemos crear un ciclo repetitivo y colocar en el la operación de multiplicación para que se realice un número de veces, pero ¿cuantas veces? Todo dependerá del número introducido por el usuario, entonces tenemos dos opciones para determinar la parada del ciclo, una seria ir contando regresivamente desde el numero leído hasta llegar al cero y la otra seria incrementar a un contador hasta alcanzar el valor del número leído.

Para almacenar el valor del factorial, es decir de las sucesivas multiplicaciones, será necesaria una variable, a la que en programación se le conoce como acumulador y hacer uso de un concepto al que se le denomina recursividad, el cual consiste en asignar a una variable su propio valor luego de aplicarle a ese valor una operación matemática como la adición o la multiplicación, por ejemplo si tenemos una variable x, podemos asignarle a esa variable su propio valor más uno (1) de la siguiente forma x = x +1 y colocándolo dentro de un bucle se obtiene una variable contador, pero si en vez de sumarle un valor constante le sumamos otra variable, por ejemplo x = x + y, entonces obtenemos lo que se conoce como un acumulador, en este caso necesitamos que la operación que se acumula no sea una suma sino el producto de varios números consecutivos, por lo que la expresión podría ser así: f = f * i; donde la variable f es el valor del factorial y la variable i corresponde al contador que almacena el número de la iteración en que se encuentra el ciclo.

Ejercicio del Factorial resuelto en C++

Si empleamos la opción de incrementar la variable contador, entonces debemos inicializarla a uno, es decir que debemos asignarle inicialmente el valor uno (1), ya que el elemento neutro de la multiplicación es uno y si se inicializa a cero (0) al realizar una multiplicación por cero obtendremos otro cero, lo que arruinaría el valor del factorial, en cambio si utilizamos la opción de decrementar el contador deberemos inicializar el contador del bucle con el valor del número leído, por otra parte el valor leído debe estar incluido entre los números a multiplicar, por lo que en la condición de parada usaremos “menor o igual que” dicho número si la opción elegida es la de incremento de la variable.

Ejercicio del Factorial resuelto en lenguaje C

El procedimiento para resolver el ejercicio del factorial en lenguaje C es esencialmente el mismo, solo algunas variantes sintácticas deben ser aplicadas, como lo son la declaración de la variable contador que debe colocarse al inicio de la función mal (zona de declaración de variables del lenguaje c), la inclusión de las librerías correspondientes a este lenguaje y por ende la utilización de las funciones scanf y printf para leer desde el teclado e imprimir en pantalla.

Finalmente es importante aclarar que este programa por estar destinado meramente a fines didácticos, solo realiza su función correctamente para los primeros números naturales hasta el 12, pero luego de este rango sus resultados son erróneos debido a que los valores del factorial son muy grandes y rebosan las capacidades del tipo de datos que se emplea en este algoritmo, para solucionar este problema tendríamos que emplearnos más a fondo en la programación y eso lo dejaremos para un artículo más avanzado.

Califica este artículo...
[Total: 8 Average: 4.6]

Autor: Néstor Gómez

Académicamente: Ingeniero de Sistemas y TSU en Informática. Empíricamente: Profesor Universitario, Desarrollador de Software, Webmaster/Blogger, Diseñador Digital, Generalista 3D, Freelancer y Emprendedor Online.