Ejercicio propuesto: La criba de Eratóstenes
FP DAM 2013-2015 :: Programación :: Ejercícios :: Dev C++
Página 1 de 1.
Ejercicio propuesto: La criba de Eratóstenes
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();
}
#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
FP DAM 2013-2015 :: Programación :: Ejercícios :: Dev C++
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.