NUMEROS PRIMOS

Iniciado por ALONSOQ, 15 Junio 2012, 11:29 AM

0 Miembros y 1 Visitante están viendo este tema.

ALONSOQ

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

Saberuneko

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

for (x=2;x=c/2;x++)

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

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <conio.h>

main ()
{
int  x, c, y, p;

printf(" Dime un numero: ");
scanf("%i", &c);

printf(" Dime otro numero mayor: ");
scanf("%i", &y);

while (c<=y)
{
for (x=2;x<=c/2;x++)
{
if (c%x==0)
p = 0;
}

if(p==1)
printf("%i",c);

p = 1;
c++;
getch();
}
}


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.

ALONSOQ

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
       

maxim_o

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();
   }

Saberuneko

#4
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.

ALONSOQ

Muchas gracias por tu ayuda; me lo has explicado clarísimo

un saludo