Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: estudiante_1 en 14 Enero 2016, 23:26 pm



Título: factorización de un número
Publicado por: estudiante_1 en 14 Enero 2016, 23:26 pm
Hola,  he hecho un programa que me factoriza un número. Me da error, y yo creo que el error está en dónde poner la función return.
Código:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

     int divide(int n,int divisores){
         divisores=2;
     while(n>=divisores){
        while(n%divisores==0){
            n=n/divisores;


        } divisores++;

     }

      return(divisores);
     }







     int main(void){
         int n,divisores;
     printf("dime el numero\n");
     scanf("%d",&n);
    printf("%d\n",divide(n,divisores));

     system("pause");
     return(0);

     }


Título: Re: factorización de un número
Publicado por: MAFUS en 15 Enero 2016, 00:25 am
A ver:

Presentas el código muy desordenado. Para ti, si haces pruebas y lo puedes entender sigue con él, pero cuándo vayas a presentarlo a más gente ordenalo. Sigue algunas reglas de estructuración. Sé coherente.

Por otra parte pasas como argumentos a las funciones variables que después resultan ser locales de la función.

Estos errores los vas repitiendo post tras post y creo que te los han a corregido numerosas veces.


Título: Re: factorización de un número
Publicado por: fary en 15 Enero 2016, 14:18 pm
El código compila correctamente  :rolleyes: no sé que problema tienes con el...

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int divide(int n,int divisores)
  6. {
  7.    divisores = 2;
  8.    while(n >= divisores)
  9.    {
  10.        while(n%divisores == 0)
  11.        {
  12.            n /= divisores;
  13.        }
  14.        divisores++;
  15.     }
  16.    return(divisores);
  17. }
  18.  
  19. int main()
  20. {
  21.    int n,divisores;
  22.    printf("dime el numero\n");
  23.    scanf("%d",&n);
  24.    printf("%d\n",divide(n, divisores));
  25.  
  26.    system("PAUSE");
  27.    return(0);
  28. }

Ordena el código porque eso que as puesto es un desastre, normal que no encuentres los errores.

saludos.


Título: Re: factorización de un número
Publicado por: MAFUS en 15 Enero 2016, 16:50 pm
Código
  1. #include <stdio.h>
  2.  
  3. unsigned divide(unsigned n) {
  4.    unsigned divisores = 1;
  5.    unsigned divisor = 2;
  6.  
  7.    while(n > 1) {
  8.        if(n % divisor == 0) {
  9.            n /= divisor;
  10.            divisores++;
  11.        }
  12.        else
  13.            divisor++;
  14.     }
  15.    return(divisores);
  16. }
  17.  
  18. int main() {
  19.    unsigned n;
  20.  
  21.    printf("Dime el número: ");
  22.    scanf("%u", &n);
  23.    printf("%d\n", divide(n));
  24.  
  25.    return 0;
  26. }


Título: Re: factorización de un número
Publicado por: Yoel Alejandro en 18 Enero 2016, 17:23 pm
Bueno, al margen de que todas las respuestas anteriores están muy bien y el programa corre perfectamente, tengo una pequeña pregunta respecto al propósito del problema.

¿Se trata de todos los divisores (enteros) del número, o sólo de los divisores primos?

Por ejemplo, probando el programa para el número 24 daría 4 divisores, a saber:

2, 2, 2, 3

Estos divisores así calculados serán primos, pero en realidad son sólo dos divisores distintos: 2 y 3. Faltarían las combinaciones:

1, 2, 3, 4, 6, 12, 24

Entonces, divisores distintos son 7 (5 si se excluyen la unidad y el propio 24), y primos son sólo 2. ¿Qué es lo que se quiere?