Ejercicio propuesto: La criba de Eratóstenes

Ir abajo

Ejercicio propuesto: La criba de Eratóstenes

Mensaje por santiago padilla el Miér Dic 18, 2013 12:27 pm

Hola, les dejo este código para que puedan comentarlo, proponer mejoras. El ejercicio diría, realizar un programa que permita introducir números del 1 a 1000 , de los cuales se calcula los numeros primos y se muestran por pantalla.




#include <stdio.h>
#include <conio.h>
#include <math.h>



int PulsaTecla();
int F_MaxList(int num[],int tam );


int main(){
/*Programa que calcula los numeros primos de una lista ingresada por el usuario, tienen
que ser entre 0 y tam*/  

 

//Declaracion de Variables

int tam=1000; // <--- Numero maximo hasta el que puede calcular el primo
int num[tam];
int aux[tam];

int i; // <--- variable contador
int j=-1; // <--- variable contador
int k=2; // <--- variable contador
int max; // <--- Maximo de los numeros ingresados
int raiz; // <--- variable que almacena la raíz cuadrada del numero máximo ingresado
int l;
   
//Asignacion de Variables
for(i=0;i<tam;i++){aux[i]=0;}  // Inicializa a 0 cada subindice de aux[]

printf("PROGRAMA QUE INDICA SI UN NUMERO ES PRIMO\n");
printf("___________________________________________________________________");
printf( "\n\nIngresar numeros entre 1 y %i -  Pulsar 0 salir.\n\n",tam);

do{j++;                
 scanf("%i",&num[j]);  // <-- Ciclo en el que el usuario ingresa sus valores
 }while(num[j]!=0);    
num[j]='\0';
aux[j]='\0';


//cuerpo

max=F_MaxList(num,j); // <-- Calcula el máximo de los valores ingresado por el usuario
raiz=sqrt(max); // Calcula la raíz cuadrada del maximo ingresado


l=k; // <--- con esto, el siguiente for, a causa de if(l!=i), se saltará la primera iteración.
aux[0]=1;
aux[1]=1;
while(k<=raiz){
   for(i=k;i<=max;i=i+k){              
                       if(l!=i){aux[i]=1;}} //<--- vemos que, la primera iteración l == i
   for(i=2;i<=max;i++){ //<--- i Se inicializa en 2, porque aux[0] y aux[1] ya estan definidos.
   if(aux[i]==0){k++;
                 break;} //<--- Uso el break porque no me interesa que incremente k nuevamente.
}
l=k;
} //fin while



//salida
printf("\n___________ Estos son tus primos ingresados... _____________ \n\n");
for(i=0;i<j;i++){
 if(aux[num[i]]==0){printf("\n%i es primo",num[i]);}              
}
     


  PulsaTecla();
 
}

// Funcion que calcula el maximo de una lista de numeros enteros.
int F_MaxList(int num[],int tam ){
   int max;
   int i;
   
                                    max=num[0];
                                    for(i=1;i<tam;i++){
                                    if (max<num[i]){max=num[i];}
                                   
                                    }
  return max;    
}  


//Funcion PulsaTecla que espera a que el usuario pulse una tecla
int PulsaTecla(){
  printf("\n\n Pulsa una tecla");
  getch();
}

santiago padilla

Mensajes : 5
Fecha de inscripción : 28/11/2013

Ver perfil de usuario

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.