[ Foro de Pascal ]
Hola, se me planteo la tarea de crear un programita que dado un numero entero se le realizara su descomposicion en producto de factores primos.
El codigo que use para ello es el siguiente:
program Factores_Primos;
var contador, numero, divisor, resto : Integer;
begin
contador:=0;
writeln('Introduzca el numero: ');
readln(numero);
divisor:=2;
while numero>1 do
begin
resto:=numero mod ddivisor;
if resto=0 then
begin
contador:=contador+1;
numero:=numero div divisor;
writeln(divisor, ' ^', contador);
end
else
divisor:=divisor+1;
end;
WriteLn('Pulse Enter Para Terminar');
readln();
end.
El problema es que al compilarlo, si por ejemplo le doy a numero el valor 25, lo que se despliega como salida es:
5^1
5^2
y yo solo quiero que se despliegue el 5^2
Si alguien sabe que cambar para arreglarlo se lo agradesco.
Es que si quieres eso, deberás llevar un contador de cuántas veces has conseguido dividir.
La cuention es que el contador esta, lo que no sirve es que aparezca el 5^1 que aparece antes, ese no me sirve... por eso necesito que me digan como sacarlo.
El contador existe, pero tienes que tener en cuenta que en algún momento debe resetearse (ponerse a cero) para el siguiente primo divisor.
En cuanto al problema de que se imprima cada vez el número divisor con cada exponente, tienes que buscar el modo de restringirlo, tienes que buscar la condición que haga que solo se imprima el divisor exacto con el valor máximo alcanzado por el contador. Yo pienso que esa condición sería: el resto de la variable número entre la variable divisor sean distinto de cero; esto deberás incluirlo dentro de un if.
En realidad los cambios que deberás hacer son muy pocos. Yo modifiqué un poco tu código y obtuve lo siguiente (lo ejecuté en Turbo Pascal 7), y aquí te lo dejo:
program Factores_Primos;
var contador, numero, divisor, resto : Integer;
begin
contador:=0;
writeln('Introduzca el numero: ');
readln(numero);
divisor:=2;
while numero>1 do
begin
resto:=numero mod divisor;
if resto=0 then
begin
contador:=contador+1;
numero:=numero div divisor;
if (numero mod divisor <>0) then
begin
writeln(divisor, ' ^', contador);
contador:= 0;
end
end
else
divisor:=divisor+1;
end;
WriteLn('Pulse Enter Para Terminar');
readln;
end.
Espero haberte ayudado.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)