Ciao a tutti, in questi giorni ho implementato la mia versione del Crivello di Eratostene in un programma che visualizza il procedimento in un modo secondo me abbastanza carino, quindi lo posto qui di seguito (i sorgenti sono due ma possono facilmente essere uniti):
| Codice: | Espandi/Riduci |
| // File1.cpp
#include <iostream>
#include <ctime>
using namespace std;
void print_setaccio(int nums[10][10]);
void wait(int seconds);
int main() {
int div = 2;
register int t;
register int i;
int value = 1;
bool b;
int nums[10][10];
for(i=0; i<10; i++) {
for(t=0; t<10; t++) {
nums[i][t] = value;
value++;
}
}
system("color f0");
cout << "\n Crivello di Eratostene\n"
<< " -----------------------------------------------------------------\n\n"
<< " Questo programma trova i numeri primi compresi tra 1 e 100\n"
<< " utilizzando il crivello di Eratostene... Quando sei pronto,\n"
<< " si comincia!\n\n ";
system("pause");
print_setaccio(nums);
do {
system("cls");
print_setaccio(nums);
cout << "\t\t Divisione per " << div << "...";
wait(2);
for(i=0; i<10; i++) {
for(t=0; t<10; t++) {
if(nums[i][t] != div && nums[i][t] != 0)
if(!(nums[i][t] % div))
nums[i][t] = 0;
}
}
system("cls");
print_setaccio(nums);
cout << "\t\t Divisione per " << div << "...Fatto!";
wait(1);
for(i=0; i<10; i++) {
b = true;
for(t=0; t<10; t++) {
if(nums[i][t]!=0 && nums[i][t] > div) {
div = nums[i][t];
b = false;
break;
}
}
if(!b)
break;
}
} while((div*div)<100);
cout << " Ho finito!" << "\n\n" << "\t\t ";
system("pause");
return 0;
}
// File2.cpp
#include <iostream>
#include <ctime>
using namespace std;
void print_setaccio(int nums[10][10])
{
cout << "\n";
for(int i=0; i<10; i++) {
cout << "\t\t ";
for(int t=0; t<10; t++) {
if(nums[i][t]==1 || nums[i][t]== 0)
cout << " ";
else if(nums[i][t]>1 && nums[i][t]<10)
cout << " " << nums[i][t];
else if(nums[i][t]>=10 && nums[i][t]<100)
cout << " " << nums[i][t];
else if(nums[i][t]==100)
cout << " " << nums[i][t];
}
cout << "\n\n";
}
}
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
} |
Nel primo file c'è il programma vero e proprio, nel secondo vengono definite le funzioni print_setaccio e wait (quest'ultima l'ho presa da cplusplus.com, lo ammetto
).
Spero sia di vostro gradimento e magari che possa essere utile a qualcuno 