Hola!
bueno es que necesito hacer un programa que me de el factorial de n numero.
ya lo hice con el bucle while, pero me falta con repeat y for, ojala alguien me pudiese dar los codigos o explicarme como hacerlo, por que ya lo eh buscado pero no entiendo bn como hacerlo.
muchas gracias!
Copyright © 2024 Q2A.ES - All rights reserved.
Answers & Comments
Verified answer
mira es casi lo mismo q con el while
aqui te dejo el codigo con FOR
program factorial;
uses crt;
var
n,i,mul:integer;
begin
mul:=1;
writeln ('introduzca el numero a sacarle el factorial');
readln (n);
for i:=1 to n do
mul:=mul*i; // vas llevando la multiplicacion
writeln ('el factorial es ',mul); // y mul es tu factorial
readln;
end.
y aqui con el REPEAT
program factorial;
uses crt;
var
n,i,mul:integer;
begin
mul:=1;
i:=1;
writeln ('introduzca el numero a sacarle el factorial');
readln (n);
repeat
mul:=mul*i; // vas llevando el factorial
i:=i+1; //el siguiente numero a multiplicar
until (i>n); // salida para q no pase el numero al q se le quiere sacar factorial
writeln ('el factorial es ',mul); // mul es tu factorial
readln;
end.
saludos....espero haberte ayudado
Hola iCookie,
Espero no molestarte pero considero que si te doy el código de lo que pides no te ayuda, más bien te facilita la tarea del hoy, pero no garantizará la del mañana.
Espero que comprendas que en lo posible evito llegar a esas instancias. Yo prefiero más bien aportar guías, consejos, sugerencias, y/o pistas. Si estás cómoda con esta manera de ayudar, entonces bienvenida sea.
Primeramente sería bueno repasar lo que implica o significa el ciclo REPEAT. El ciclo repeat-until posee una evaluación o condición que se evalúa al FINAL de las sentencias que componen al ciclo. Una vez que se cumple la condición el ciclo termina y se continúa con la siguiente instrucción fuera de éste. Es decir que el ciclo se ejecuta HASTA cumplir dicha condición, o dicho de otro modo cuando Condición = TRUE. De otro modo seguirá iterando. Como es de apreciar, esto es inverso a WHILE, donde para salir del ciclo la condición es falsa.
Naturalmente, entre las sentencias debe haber alguna que haga cambiar el valor de la condición y poder salir del ciclo (de otro modo tendríamos un bucle infinito). En el caso del REPEAT de una evaluación FALSE debemos llegar a una evaluación TRUE.
Si analizamos REPEAT podemos concluir que AL MENOS UNA VEZ se ejecutarán TODAS las sentencias que hacen al ciclo.
Su sintaxis, como seguramente sabes, es:
repeat
<sentencias>
until <condicion>;
Veamos tu caso: el factorial.
El factorial es la productoria de un número por su anterior, hasta llegar a la unidad.
5! = 5 x 4 x 2 x 1
3! = 3 x 2 x 1
En gral:
n! = n x n - 1x n - 2 x .... x 1
Analiza la situación, ¿Que criterio de evaluación pondrías para satisfacer el problema? Nota que hay dos extremos por los cuales podemos analizar el problema: N y 1.
Entonces:
1. O se va multiplicando HASTA llegar a N. Lo cual implica INCREMENTAR alguna variable que lleve la cuenta hasta N. O bien,
2: O se va multiplicando HASTA llegar a 1. Lo que implicaria DECREMENTAR una variable que se iniciaría en N hasta llegar a 1.
De cualquier forma, llegas a algo como:
Producto = Producto x Nro;
Ahora respecto a FOR: se sabe que este necesita de una variable que va incrementándose (o decrementándose si se emplea downto), en una unidad, en cada ejecución. Requiere de un valor inicial y un valor final.
Observa que el planteamiento es bastante similar al que podríamos encargar con REPEAT. Tenemos ambos extremos, un valor inicial (1/N) y un valor final (N/1) para el ciclo for-to y for-downto respectivamente.
Te invito a analizarlo, date tiempo para pensarlo con calma. Prueba y si tienes dudas puntuales aquí estaremos, agrega detalles a la pregunta por favor.
Saludos,
function factorial (n : integer):word;
begin
if(n = 0)then
factorial:=1
else
factorial:= n*factorial(n-1)
end;
Que es un factorial?