Buenas a todos, tengo un problema al ejecutar el código de un programa, resulta que se queda colgado y dice "Factorizar.exe" dejó de funcionar, y no tengo ni idea de por qué, ya que no veo nada en el código mal :huh: . El enunciado del ejercicio es el siguiente:
- Descomponer un número entero en sus factores primos.
Y mi solución esta:
#include<stdio.h>
#include<stdlib.h>
int Factor(int a){
int b=2;
while (a%b!=0) b++;
return (b);
}
int main(void){
int x,y,cociente;
printf("Introduzca un numero entero: ");
scanf("%d",x);
y=Factor(x);
while(y>1){
printf("%d\n",y);
cociente=x/(Factor(x));
y=Factor(cociente);
}
system("pause");
return 0;
}
Puesto que todavía no sabemos hacer que una función devuelva más de un valor, he creado una función que me devuelve el primer factor primo, y con un bucle la voy llamando varias veces, cambiando el valor del parámetro de entrada por el siguiente cociente, hasta que el factor que me devuelva sea igual o menor a 1.
¿Qué problema hay? Seguramente esté en el código... :|
Un saludo y gracias por adelantado.
scanf("%d",&x); le falta el & delante de la x.
Aún que hay mas errocillos, pero esos lo arreglas tu, ya no se cuerga XD
Muchas gracias !! Me lleve media hora viendo que era y no me dí cuenta jaja!! Además ya solucioné el resto del código (tenía un par de cosas mal en mi algoritmo), os lo dejo por si me podéis dar alguna mejora.
#include<stdio.h>
#include<stdlib.h>
int Factor(int a){
int b=2;
while (a%b!=0) b++;
if(a==1) b=1;
return (b);
}
int main(void){
int x,y;
printf("Introduzca un numero entero: ");
scanf("%d",&x);
if(x==1||x==-1) printf("1\n");
else{
y=Factor(x);
while(Factor(x)>1){
printf("%d\n",y);
x=x/(Factor(x));
y=Factor(x);
}
}
system("pause");
return 0;
}
Gracias de nuevo!!
Einstein92
para publicar codigo usa las etiquetas GeSHi que hay arriba de los emoticonos a la derecha, si no, se más dificil de leer
#include<stdio.h>
#include<stdlib.h>
int Factor(int a){
int b=2;
while (a%b!=0) b++;
if(a==1) b=1;
return (b);
}
int main(void){
int x,y;
printf("Introduzca un numero entero: ");
scanf("%d",&x);
if(x==1||x==-1) printf("1\n");
else{
y=Factor(x);
while(Factor(x)>1){
printf("%d\n",y);
x=x/(Factor(x));
y=Factor(x);
}
}
system("pause");
return 0;
}
El algoritmo es sencillo aunque se puede hacer más eficiente (hablo de la función Factor).
Aquí hay un hilo sobre los números primos, también te sirve para calcular divisores:
http://foro.elhacker.net/programacion_cc/codigo_para_calcular_los_numeros_primos-t405451.0.html
Cita de: engelx en 25 Enero 2014, 20:03 PM
para publicar codigo usa las etiquetas GeSHi que hay arriba de los emoticonos a la derecha, si no, se más dificil de leer
Perdona, tomo nota para la próxima :)
Cita de: amchacon en 25 Enero 2014, 20:49 PM
El algoritmo es sencillo aunque se puede hacer más eficiente (hablo de la función Factor).
Aquí hay un hilo sobre los números primos, también te sirve para calcular divisores:
http://foro.elhacker.net/programacion_cc/codigo_para_calcular_los_numeros_primos-t405451.0.html
Le he echado un vistazo, aunque hay conceptos que me superan jajaja. Curiosamente, el ejercicio anterior a este era el de realizar una función que calcule si un número es primo. No le vi aparente dificultad al algoritmo, pero no me ha llegado a funcionar mi código (y eso que no veo fallo alguno), ya que siempre me da que es primo o si cambio una cosa, que no es primo :huh:
Les dejo el código aqui por si ven el fallo..
int Primo1(int a){
int b=2;
while((a%b!=0)&&(b<=(a/2))) b++;
if(a%(b-1)==0) return(-1);
else return(1);
}
int main(void){
int x,y;
printf("Introduzca x: ");
scanf("d%",&x);
y=Primo1(x);
if(y==1) printf("Es primo \n");
else printf("No es primo \n");
system("pause");
return 0;
}
Un saludo !!