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