Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/12/2011, 02:27
starfix
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: Programa Descomposición en factores primos

hola "juangebeboz", tu problema está en el bucle while. Tu código es este:

Código C++:
Ver original
  1. while (n%cont==0){
  2.         if (n%cont!=0){
  3.             cont=cont+1;
  4.  
  5.         }
  6.         n=n/cont;
  7.         cout << cont << "·";
  8.         }

Por ejemplo, cuando ingresas el numero 10 en el programa hace lo siguiente:

Linea 1: el resto de 10/2 es cero, por lo tanto es verdadero e ingresa el bucle.
Linea 2: el resto de 10/2 es cero, por lo tanto la condicion da falso y no se ejecuta la linea 3, salta a la 6.
Linea 6: n= 10/2, por lo tanto n ahora toma el valor 5.
Linea 7: se imprime en pantalla el numero 2 que es uno de los factores primos de 10.

ahora vuelve a evaluar la condicion del bucle while la cual da falso porque el resto de 5/2 no es cero.

El problema fue que no se cambio el valor de la variable cont en caso de que ya no sea factor de 10.

para resolver este problema lo unico que tienes que hacer es mover la condicion if que tienes al principio del bucle al final de este, quedando de la siguiente manera:

Código C++:
Ver original
  1. while (n%cont==0)
  2.              n= n/cont;
  3.              cout<< cont<< ".";
  4.  
  5.              if (n%cont!=0){
  6.                      cont= cont+1;
  7.                }

ahora bien, el programa divide a n por el factor y lo guarda, luego comprueba si el nuevo n, en el caso de 10 es 5, se puede dividir nuevamente por cont, en caso contrario aumenta en 1 la variable cont para comenzar el bucle de vuelta y comprobar con 3.

El problema no esta todavia solucionado, porque cuando el bucle se corre por primera vez, se imprimira en pantalla "2." y la variable cont pasa a valer 3 y n vale ahora 5, pero al evaluarse nuevamente la condicion del bucle da falso, por lo que la condicion a evaluar habria que cambiarla de n%cont==0 a n!=1. Esta nueva condicion hara que el bucle termine cuando el numero n valga 1, ya que aqui no podras seguir dividiendo mas.

Ahora habria que agregar una condicion if(n%cont==0) dentro del bucle y que contenga las 2 siguientes lineas de codigo:

Código C++:
Ver original
  1. n=n/cont;
  2. cout<< cont<< ".";

esto hara que la variable n solamente cambie cuando el resto de dividir n y cont de cero.

el codigo resultante es el siguiente (te pongo solamente el bucle while que es lo que cambie):

Código C++:
Ver original
  1. while (n!=1){
  2.            
  3.             if (n%cont==0){
  4.             n=n/cont;
  5.             cout << cont << ".";}
  6.            
  7.             if (n%cont!=0){
  8.                 cont=cont+1;
  9.                
  10.             }
  11.         }

Saludos y espero que hayas entendido lo que hice