ejercicio de numeros primos

Iniciado por el gusanillo, 6 Diciembre 2017, 09:18 AM

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

el gusanillo

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


moncker94

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

MAFUS

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.

el gusanillo

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

MAFUS

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.

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
Aqui mi perfil en LinkedIn, invitame un cafe aqui