Autor
|
Tema: Programacion en C. Fallo codificar numeros primos (Leído 10,061 veces)
|
nenito_sevillista
Desconectado
Mensajes: 1
|
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"); }
|
|
|
En línea
|
|
|
|
Mr.Blue
|
#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); SugerenciasAlgunas 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
|
|
« Última modificación: 23 Noviembre 2010, 20:55 pm por Sr.Blanco »
|
En línea
|
|
|
|
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.
|
|
|
En línea
|
|
|
|
Akai
Desconectado
Mensajes: 823
|
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.
|
|
|
En línea
|
|
|
|
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.
|
|
|
En línea
|
|
|
|
piou
Desconectado
Mensajes: 25
|
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.
|
|
|
En línea
|
|
|
|
Darioxhcx
Desconectado
Mensajes: 2.294
|
#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
|
|
|
En línea
|
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
Beakman
|
¡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. ERROR: Dice que 4 es un numero primo. y no lo es. Este es mi codigo: #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; }
|
|
« Última modificación: 24 Noviembre 2010, 08:51 am por qily »
|
En línea
|
|
|
|
|
|