Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ALONSOQ en 15 Junio 2012, 11:29 am



Título: NUMEROS PRIMOS
Publicado por: ALONSOQ en 15 Junio 2012, 11:29 am
Buenos días,

Soy nuevo en el foro, llevo muy poco tiempo estudiando el lencuaje C, y estoy tratando de hacer un programa que ingresando 2 numeros diga los primos que hay entre ambos. Esto es lo que he hecho. Podeis reiros.... no os corteis; pero por favor alguien me puede decir que falla?

/*Escribir un programa que nos pida por pantalla dos números enteros y nos muestre los números primos que hay entre ellos.*/

#include <stdio.h>
#include <conio.h>

main ()
{
int  x, c, y;


     printf(" dime un número");
     scanf("%i", &c);
     
     printf(" dime otro número mayor");
     scanf("%i", &y);
     
 
     
     while (c<=y)
     {
              for (x=2;x=c/2;x++)
           if ((c%x!=0))
       
     
     printf("%i",c);
     
   
     c++;
     getch();
     }
     
     
}

Muchas gracias


Título: Re: NUMEROS PRIMOS
Publicado por: Saberuneko en 15 Junio 2012, 11:50 am
Primero, debes recordar que '=' asigna valores y '==' los compara.

Por otro lado, tu problema radicaba del bucle for.

La condición hacía que tu programa no entrase en el bucle para comprobar el resto de la división.

Código:
for (x=2;x=c/2;x++)

La condición que necesitas es:
Código:
for (x=2;x<=c/2;x++)

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. main ()
  5. {
  6. int  x, c, y, p;
  7.  
  8. printf(" Dime un numero: ");
  9. scanf("%i", &c);
  10.  
  11. printf(" Dime otro numero mayor: ");
  12. scanf("%i", &y);
  13.  
  14. while (c<=y)
  15. {
  16. for (x=2;x<=c/2;x++)
  17. {
  18. if (c%x==0)
  19. p = 0;
  20. }
  21.  
  22. if(p==1)
  23. printf("%i",c);
  24.  
  25. p = 1;
  26. c++;
  27. getch();
  28. }
  29. }

En resumen, lo tenías casi todo hecho, sólo te equivocaste con un bucle.

Para la próxima, te sugiero que cuides un poco más la identación y utilices los tags GESHI de code para que se vea mejor la estructura.


Título: Re: NUMEROS PRIMOS
Publicado por: ALONSOQ en 15 Junio 2012, 14:04 pm
Muchísimas gracias por tu ayuda; sin embargo hay ciertas cosas que no me quedan claras:

if ((c%x!=0))  : Me has modificado!= por ==. Sin embargo yo haía puesto esa instrución con el fin de pedirle que cuando al dividir por un número fuera distinto de 0 entonces lo imprimiese ( es primo). ( Ese comando de tosas formas es incompleto pues puede ocurrir que por ejemplo el 13 dividido por si mismo de igual a 0 y sin embargo sí es primo.

Por otro lado no entiendo porqué has puesto p=1.

Lo he compilado y no me ejecuta el programa
¿ que te parece?

un saludo
       


Título: Re: NUMEROS PRIMOS
Publicado por: maxim_o en 15 Junio 2012, 15:10 pm
Una forma de encontrar numeros primos es encontrar un divisor >1 y < que la mitad de ese numero...
Si por ejemplo pones el 7.
Dividirias entre 2,3 no da de resto 0 es primo
el 8 entre 2 ya encuentra un divisor, no es primo...

while (c<=y)
   {
      for (x=2;x<=c/2;x++)
      {
         if (c%x==0)
            p++;
      }
                if (p==1)
                    printf("%i es primo /n" , c) ;
      c++;
      p = 1;
      getch();
   }


Título: Re: NUMEROS PRIMOS
Publicado por: Saberuneko en 15 Junio 2012, 17:58 pm
Lo he editado y dejado como estaba antes de estropearlo.

Había puesto una booleana p, que me olvidé quitar
Eso también explica el uso de == en vez de !=.

Al intentar desaparecer dicha booleana lo dejé mal.
Lo siento, es que a veces soy imbécil...

Si funciona, ¿para qué lo toqué? Te lo dejo como lo tenía cuando funcionó.

Pruébalo ahora.


Título: Re: NUMEROS PRIMOS
Publicado por: ALONSOQ en 16 Junio 2012, 18:13 pm
Muchas gracias por tu ayuda; me lo has explicado clarísimo

un saludo