Autor
|
Tema: ejercicio de numeros primos (Leído 3,718 veces)
|
el gusanillo
Desconectado
Mensajes: 20
|
Buenos días, necesito un poco de ayuda: El ejercicioes el siguiente:
Escribid un programa que dado un array de 10 enteros (introducidos a mano en el código), cuente cuantos números primos tiene.
#include <iostream> using namespace std; int Primo (int n) { int x,i; for (int i=2; i<10; i++) //Recorro el arreglo { bool primo=true; int max=x/2; for (int x=2;x<=max;x++) { if(x%i==0) // Si es divisor, no es primo { primo=false; break; } } if (primo) // Si es primo, lo saco por pantalla { cout <<x<< " "; } } cin.get();cin.get(); return 0; }
Esto es lo que tengo. Gracias
|
|
|
En línea
|
|
|
|
moncker94
Desconectado
Mensajes: 5
|
Muy buenas gusanillo,
0. Tabulo tu código para hacerlo más legible:
{ int x,i; for (int i=2; i<10; i++) //Recorro el arreglo -> Consideras i, por lo tanto, un idexador del arreglo { bool primo=true; int max=x/2; for (int x=2;x<=max;x++) // Muy correcto, solo es necesario ver hasta la mitad de él { if(x%i==0) // Si es divisor, no es primo -> Aquí es dónde chirría más -> [Veáse anotación 1] { primo=false; // Estructura lógica compleja -> [Veáse anotación 2] break; } } if (primo) // Si es primo, lo saco por pantalla { cout <<x<< " "; } }
cin.get();cin.get(); return 0; }
1. Anotaciones sobre tu código
[Anotación 1]. El concepto de primo no es "no ser divisor", es "no ser divisible"
7 no es divisor de 13, pero sí de 14. Aun así es primo porque no existe un {k € R} tal que lo divida con resto cero quitando él mismo y el uno.
[Anotación 2]. Analiza correctamente si es mejor partir de que es falso o es verdadero.
Fíjate que queda más sencillo, sí, es pseudocódigo:
for( valores_anteriores_a_la_mitad_del_número_inclusive ){ // Partimos de la idea de que no lo es if( es divisible por uno de estos valores){ esPrimo = true; break; } }
2. Conclusión
Analiza de nuevo tu código con las anotaciones que te he propuesto, si ves que aun tienes problema. ¡Aquí estamos!
Saludos, moncker94
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Si con i recorres el array de números y con x buscas los divisores entonces debería ser i%x, no al revés.
|
|
|
En línea
|
|
|
|
el gusanillo
Desconectado
Mensajes: 20
|
Lo primero es agradecer toda la ayuda recibida. Por otra parte he echo alguna modificación para que me funcione en Dev c++ Cambié # <include iostream> a <stdio.h> Cambié using namespace por # include <stdlib.h>
Pero: bool primo= true NO ME LO ACEPTA, Y CREO QUE ESTÁ BIEN
¿Qué tengo que hacer para que " bool " sea aceptado por el programa?
Gracias
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Estas cambiando de C++ a C y este último hasta su estándar C99 no acepta bool,, además de que debes incluir stdbool. Por tanto: debes indicar al compilador que use C99 o superior e incluyendo la librería mencionada. O cambias bool por int e indicas falsedad con el número 0 y trueno con cualquier número diferente a 0.
|
|
|
En línea
|
|
|
|
CalgaryCorpus
|
Si tienes un arreglo, i representa el índice, no el dato guardado en el arreglo. Si quieres detener el ciclo interior, no tienes que llegar a la mitad del número, sino a la raíz cuadrada del mismo
|
|
|
En línea
|
|
|
|
|
|