Programacion en C. Fallo codificar numeros primos

Iniciado por nenito_sevillista, 23 Noviembre 2010, 20:36 PM

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

nenito_sevillista

Hola, podrían ayudarme y decimirme qué me falla en este codigo??
gracias.


void main(void)
{
/* DECLARACIÓN DE VARIABLES (Realice la tabla de objetos) */
int i;
int n;
int primo;
/* LECTURA DE DATOS */
printf("Introduzca un numero natural:");
scanf("%d",&n);
/* ALGORITMO DETERMINACIÓN NÚMERO PRIMO */
/*************INICIO CÓDIGO*****************/
i=2;
primo=0;
if(n%i==0)
{
         primo=primo+1;
         }
         else
         {
             i=i+1;
             }
           
             
/***************FIN CÓDIGO ******************/
/* ESCRITURA DE RESULTADOS */
if(primo==1) printf("El numero %d es primo",n);
if(primo==0) printf("El numero %d no es primo",n);
/* BLOQUEO DE PANTALLA*/
printf("\n");
system("pause");
}

Mr.Blue

#1
Código (cpp) [Seleccionar]
#include <stdio.h>
int main(void)
{
/* DECLARACIÓN DE VARIABLES (Realice la tabla de objetos) */
int i;
int n;


int primo;
/* LECTURA DE DATOS */
printf("Introduzca un numero natural:");
scanf("%d",&n);
/* ALGORITMO DETERMINACIÓN NÚMERO PRIMO */
/*************INICIO CÓDIGO*****************/
i=2;
primo=0;
if(n%i==0)
{
primo=primo+1;
}
else
{
i=i+1;
}


/***************FIN CÓDIGO ******************/
/* ESCRITURA DE RESULTADOS */
if(primo==1) printf("El numero %d es primo",n);
if(primo==0) printf("El numero %d no es primo",n);
/* BLOQUEO DE PANTALLA*/
printf("\n");
getchar ();
return 0;
}


No veo ninguna falla, de logica.
Por ahi te falto poner las librerias? o #include <windows.h> para system (PAUSE);
Sugerencias
Algunas cosas para tener encuenta es no usar la llamda al sistema para hacer pausa para eso tenes getchar ();, y la estuctura del main deberia ser int main () con un return al final como se ve ahi, para indicar si hubo un error o no.
declarar i =2; me parece al cohete jeje, pone
if (n%2==0) i es lo mismo y usas menos variables.
otra cosa, porq usar tantos if?

if (n%2==0)

puts ("es primo");

else puts ("no es primo");

y eliminas lineas de codigo

las declaraciones de variables puede ser asi tmb.

int i, n, primo;  separados por coma y punto y coma en la ultima variable declarada

Beakman

Ahi no estas averiguando si el numero es primo.
Estas averiguando si el numero es par.

Para averiguar si es primo tenes que hacer un ciclo desde 1 hasta el numero ingresado y preguntar si es divisible por cada numero.

Akai

Cita de: qily en 23 Noviembre 2010, 22:05 PM
tenes que hacer un ciclo desde 1 hasta el numero ingresado y preguntar si es divisible por cada numero.

Error, Desde 1 hasta el número/2. A partir de numero/2, ya no va a haber más divisores de él.

Beakman


Error, Desde 1 hasta el número/2. A partir de numero/2, ya no va a haber más divisores de él.


Si, estaría de mas hacerlo hasta el numero.

piou

Ahí lo que estás mirando es si el número es divisible por 2. Me parece que querías hacer un bucle e ir subiendo, porque si no lo es le sumas 1 a la variable i, pero te has equivocado.
Tienes que hacer un bucle desde 2 hasta n/2, en cuanto el resto sea 0, activas un bool o algo y sales del bucle, porque significa que no es primo.

Darioxhcx

#include <stdio.h>
int main () {
    int ini,cont,asd;
    printf("ingrese su numero ");
    scanf("%d",&asd);
    cont=asd-1;
    for (ini=2;ini<=cont;ini++) {
            if (asd%ini==0) { goto noprimo; }
            }
    printf("%d es primo",asd);
    getch();
    getchar();
    return 0;
    noprimo:
            printf("%d no es primo",asd);
            getch();
            getchar();
            return 0;

yo lo hice asi hace tiempo y me funciono

Akai

#7
Esto... Darioxhcx... permíteme que mejore un poco tu código.


#include <stdio.h>
int main () {
   int con=2,primo=1,numero;
   printf("ingrese su numero ");
   scanf("%d",&numero);
   while(primo==1 && con < numero/2+1){
       if(numero%con==0)
           primo=0;
       con++;
   }
   if(primo==1)
       printf("%d es primo\n",numero);
   else
       printf("no es primo\n");
   return 0;
}

¿Para qué usar getchar o system pause teniendo esto? -->
http://foro.elhacker.net/programacion_cc/ejecutar_programas_en_windows_sin_necesidad_de_pausas_system_pause_etc-t306837.0.html

do-while

¡Buenas!

Realmente llegar hasta n/2 es perder el tiempo. El mayor de los divisores mas pequeños es la raiz cuadrada, ya que si un divisor sobrepasa la raiz cuadrada es porque el otro factor es menor que la raiz cuadrada:

Si a * b = c y a2 > c entonces b2 < c, ya que de lo contrario a2 * b2) > c * c = c2 y esto impllica, tomando raices, que a * b > c, lo cual es una contradiccion. Por lo tanto b2 < c lo que es lo mismo que b < c1/2

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Beakman

#9
Cita de: do-while en 24 Noviembre 2010, 00:28 AM
¡Buenas!

Realmente llegar hasta n/2 es perder el tiempo. El mayor de los divisores mas pequeños es la raiz cuadrada, ya que si un divisor sobrepasa la raiz cuadrada es porque el otro factor es menor que la raiz cuadrada:

Si a * b = c y a2 > c entonces b2 < c, ya que de lo contrario a2 * b2) > c * c = c2 y esto impllica, tomando raices, que a * b > c, lo cual es una contradiccion. Por lo tanto b2 < c lo que es lo mismo que b < c1/2

¡Saludos!
Claro. Esta bien de cualquiera de esas formas.

Igual no es un un super código. En ESTE caso creo que no influye mucho una cuenta mas o una cuenta menos.


Cita de: Akai en 23 Noviembre 2010, 23:33 PM
Esto... Darioxhcx... permíteme que mejore un poco tu código.


#include <stdio.h>
int main () {
    int con=2,primo=1,numero;
    printf("ingrese su numero ");
    scanf("%d",&numero);
    while(primo==1 && con < numero/2){
        if(numero%con==0)
            primo=0;
        con++;
    }
    if(primo==1)
        printf("%d es primo\n",numero);
    else
        printf("no es primo\n");
    return 0;
}

¿Para qué usar getchar o system pause teniendo esto? -->
http://foro.elhacker.net/programacion_cc/ejecutar_programas_en_windows_sin_necesidad_de_pausas_system_pause_etc-t306837.0.html

ERROR:
Dice que 4 es un numero primo. y no lo es.


Este es mi codigo:
Código (c++) [Seleccionar]

#include<iostream>
using namespace std;

int main()
{
int x; //para el ciclo
int num;
int con=0;

cout << "Ingrese numero: ";
cin >> num;
//aca se puede preguntar si el numero es 1
//el 1 no es primo
for( x=1;x<=num;x++ )
if( num%x == 0 )
con++;

if( con>2 )
cout << "No es primo" << endl;
else
cout << "Si es primo" <<endl;

return 0;
}