Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Programa Descomposición en factores primos

Estas en el tema de Programa Descomposición en factores primos en el foro de C/C++ en Foros del Web. Hola buenas, tengo que realizar este programa con procedimientos y funciones y diseño descendente. Lo que tengo es lo siguiente, pero no me acaba de ...
  #1 (permalink)  
Antiguo 05/12/2011, 05:18
 
Fecha de Ingreso: octubre-2011
Mensajes: 15
Antigüedad: 12 años, 6 meses
Puntos: 1
Programa Descomposición en factores primos

Hola buenas, tengo que realizar este programa con procedimientos y funciones y diseño descendente.

Lo que tengo es lo siguiente, pero no me acaba de salir:

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void leernumero(unsigned& n){
  5.     do{
  6.     cout << "Introduzca un numero n>0 para hallar su descomposición en factores primos: ";
  7.     cin >> n;
  8.     }while (n<=0);
  9. }
  10.  
  11. unsigned factores(unsigned n){
  12.     unsigned cont=2;
  13.     if (n>1) {
  14.     while (n%cont==0){
  15.         if (n%cont!=0){
  16.             cont=cont+1;
  17.             }
  18.         n=n%cont;
  19.         cout << cont <<"·";
  20.         }
  21.  
  22.     }else if (n==1){
  23.     cout << "1";
  24.     }
  25.  
  26. }
  27. int main(){
  28.     unsigned n;
  29.  
  30. leernumero(n);
  31.  
  32. cout << "Los primos divisores de " << n <<" son: " << factores(n);
  33.  
  34.  
  35. return 0;
  36. }

En la línea 26 da el siguiente error: control reaches end of non-void function
Si alguien me puede ayudar se lo agradecería.
Saludos.

Lo he modificado y ahora tengo esto:

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void leernumero(int& n){
  5.     do{
  6.     cout << "Introduzca un numero n>0 para hallar su descomposición en factores primos: ";
  7.     cin >> n;
  8.     }while (n<=0);
  9. }
  10.  
  11. unsigned factores(unsigned n){
  12.     unsigned cont=2;
  13.     if (n>1) {
  14.     while (n%cont==0){
  15.         if (n%cont!=0){
  16.             cont=cont+1;
  17.  
  18.         }
  19.         n=n/cont;
  20.         cout << cont << "·";
  21.         }
  22.  
  23.     }else if (n==1){
  24.     cout << "1";
  25.     }
  26.  
  27.     return cont;
  28. }
  29.  
  30. int main(){
  31.     int n;
  32.  
  33. leernumero(n);
  34.  
  35. cout << "Los primos divisores de " << n <<" son: ";
  36. factores(n);
  37.  
  38. return 0;
  39. }

Ya no me da error pero no me resuelve bien el problema; por ejemplo en el caso de que introduzca el numero 10 sale:

Introduzca un numero n>0 para hallar su descomposición en factores primos: 10
Los primos divisores de 10 son: 2·

Hay termina el programa; creo que es por el return de la linea 27.
Muchas gracias.

Última edición por juangebeboz; 05/12/2011 a las 07:24
  #2 (permalink)  
Antiguo 17/12/2011, 02:27
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 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

Etiquetas: factores, funcion, primos, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:58.