Está en la página 1de 4

P03FactN.

1) Objetivo.
Lee un numero "n"(>0 y <= 33) y obtiene el factorial.
Tiene las características:
1) Puede ejecutarse las veces deseadas dentro del mismo proceso.
2) Checa que "n" sea un valor valido.
3) Imprime los valores intermedios hasta obtener el resultado.

2) Interface de usuario. Se refiere a un esquema que ilustra lo que sale en la pantalla


o monitor, al momento de la ejecución del programa.

ALIMENTAR EL NUMERO “n” (>0 Y <= 33): 10 (por ejemplo)

Termino: 1 Resul: 1

Termino: 2 Resul: 2

Termino: 3 Resul: 6

Termino: 4 Resul: 24

Termino: 5 Resul: 120

Termino: 6 Resul: 720

Termino: 7 Resul: 5040

Termino: 8 Resul: 40320

Termino: 9 Resul: 362880

Termino: 10 Resul: 3.6288E+006

EL FACTORIAL ES: 3628800.000000

Otro Proceso (s/n):


3) Diagramas de flujo.
main

limpiarPantalla

ALIMENTAR UN NUMERO “n”

(>0 Y <= 33)

num (xx)

! (num>0 && num<34)

ter=1; ter<=num; ter++

fac *= ter

Termino : ter

Resultad: fac

EL FACTORIAL ES: fac

Otro Proceso (s/n):

sn

! (sn==’s’ || sn==’n’)

sn==’n’ fin
SI
4) Codificación.

/* P03FactN.c
Lee un numero "n"(>0 y <= 33) y obtiene el factorial.
Tiene las caracteristicas:
1) Puede ejecutarse las veces deseadas dentro del mismo proceso.
2) Checa que "n" sea un valor valido.
Ing. Leopoldo Ortega Rios
*/
#include<stdio.h>

int main() {
int num, ter;
float fac=1; //para poder dar un rango mayor
char sn;
while(1){
do{
system("cls");
printf("\nALIMENTAR EL NUMERO \"n\" (>0 Y <= 33):\t");
scanf("%d", &num);
}while(!(num>0 && num<34));

for(ter=1; ter<=num; ter++){


fac*=ter; // fac = fac * ter;
printf("\nTermino: %d\tResul: %g", ter,fac);
//formato %g general (flotante o cientifico/exponencial
}

printf("\n\n\tEL FACTORIAL ES: %f", fac);


do{
printf("\n\nOtro Proceso (s/n): ");
fflush(stdin); //limpia el buffer de entrada. evita se imprima 2 veces.
sn = getchar(); //scanf("%c", &sn);
sn=tolower(sn); //convierte a minusculas el contenido de la variable
}while(!(sn=='s' || sn=='n'));
if(sn=='n')break;
}
//system("pause>nul"); //getch();
return 0;
}

5) Requerimientos:
Enviar al eMail correspondiente del grupo,
1 Archivo tipo “.c” con el código del programa (copia de la codificación del punto 4).
2 Imagen de la pantalla con la ejecución del programa. La captura de una pantalla
se obtiene al digitar simultáneamente las teclas “Windows” e “ImpPt”; el archivo con
la imagen se encuentra en el directorio …\Pictures\CapturaDePantalla (una
aproximación, depende del S.O. instalado y el equipo).

6) Observaciones:
float fac=1; define la variable fac tipo “float” (con punto decimal) y la inicializa con 1.
num y ter son variables int; sn es una variable tipo “char” (carácter).
while(1){ Como “1” en “c” se interpreta como verdadero, todas las instrucciones
delimitadas por su correspondiente “{}” se repiten por siempre. Esto controla se
repita TODO el proceso. Ciclo externo.
do{ repite todas las instrucciones delimitadas por “{“ y }while(!(num>0 &&
num<34)); mientras la expresión sea verdadera. En este caso si alimentamos un
100 a num, la expresión num>0 && num<34 es falsa, con “!” se vuelve verdadera y
se repite el ciclo “interno”; si a num le valor de 20, la expresión es verdadera pero
con “!” se vuelve falsa y se sale del ciclo iterativo.
Con el for se repiten las instrucciones delimitadas por “{}” correspondientes. Dentro
de ellas printf("\nTermino: %d\tResul: %g", ter,fac); imprime resultados intermedios
“%d” para el valor de ter, “%g” para el valor de fac.
De manera similar se controla la repetición o terminación del programa por medio
de la variable “sn” (mnemónicamente para valores “s” o “n”). Se captura su valor, se
convierte a minúsculas se checa que sean valores aceptables y saliendo de “do” se
checa con if(sn=='n')break; con “break” se sale del ciclo iterativo correspondiente y
se termina. En el otro caso llega a “}” y se regresa hasta el “{“ correspondiente (inicio
de proceso “while(1)”

También podría gustarte