[ Foro de Pascal ]

Problema De Salida

07-Sep-2015 01:27
Javier Perez
3 Respuestas

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.


14-Sep-2015 23:05
Nacho Cabanes (+84)

Es que si quieres eso, deberás llevar un contador de cuántas veces has conseguido dividir.


15-Sep-2015 03:47
Javier Perez

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.


19-Sep-2015 19:25
Luis Torres (+18)

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.)