Programa que factorize números enteros

Iniciado por Einstein92, 25 Enero 2014, 13:21 PM

0 Miembros y 2 Visitantes están viendo este tema.

Einstein92

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.


vangodp

#1
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

Einstein92

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!!

engel lex

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

Código (cpp) [Seleccionar]
#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 problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

amchacon

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
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Einstein92

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 !!