Montre dynamiquement le crible d'Eratosthene, sur 100 nombres (de 1 a 100).
Pour faire l'etape suivante, il faut appuyer sur une touche.
Pour faire automatiquement, appuyer sur 'a'.
Pour quitter, appuyer sur 'q'.
COMPILATEUR: Turbo C (borland)
Le code est bourrin !
Source / Exemple :
#include <conio.h>
#include <dos.h>
/***********************************************/
#define COLOR_TEXT YELLOW
#define BKCOLOR_TEXT BROWN
/***********************************************/
#define ANYTHING 0
#define PRIME 1
#define NO_PRIME 2
/***********************************************/
#define COLOR_ANYTHING BLUE
#define COLOR_PRIME GREEN+BLINK
#define COLOR_NO_PRIME RED
/***********************************************/
#define BKCOLOR_ANYTHING WHITE
#define BKCOLOR_PRIME BLACK
#define BKCOLOR_NO_PRIME BLACK
/***********************************************/
void Fill(int *tab)
{
int i;
for(i=1;i<=100;i++)
{
tab ++;
}
}
/***********************************************/
void Print(int *tab)
{
int i,j;
textbackground(BLACK);
clrscr();
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
gotoxy(1+5*i,1+2*j);
switch(tab[10*j+i])
{
case ANYTHING:
textcolor(COLOR_ANYTHING);
textbackground(BKCOLOR_ANYTHING);
break;
case PRIME:
textcolor(COLOR_PRIME);
textbackground(BKCOLOR_PRIME);
break;
case NO_PRIME:
textcolor(COLOR_NO_PRIME);
textbackground(BKCOLOR_NO_PRIME);
break;
}
cprintf("%3d",10*j+i+1);
}
}
}
/***********************************************/
int main(void)
{
int tabNumber[100];
int n,i;
int boolDrawAll = 0;
int key;
int nbPrime = 0;
Fill(tabNumber);
/*
on ne fait pas le 1, car par la definition
d'un nombre premier, celui-ci peut etre divisible par 1
(meme si tous les nombres le sont !)
/* 1, n'est pas n'est pas un nombre premier */
tabNumber[0] = NO_PRIME;
for(n=2;n<=100;n++)
{
/* si on ne l'a pas ici exclu, c'est un nombre premier */
if(tabNumber[n-1] != NO_PRIME)
{
tabNumber[n-1] = PRIME;
nbPrime ++;
}
/* si i<n, cela ne sert a rien ! */
for(i=n+1;i<=100;i++)
{
/* si 'n' est un diviseur de 'i' */
if(i%n == 0)
{
tabNumber[i-1] = NO_PRIME;
}
}
/* on re-affiche le tableau */
Print(tabNumber);
textcolor(COLOR_TEXT);
textbackground(BKCOLOR_TEXT);
cprintf("\r\n\r\n");
cprintf("Nombre courant : %3d\r\n",n);
cprintf("Nombres premiers (%2d): \r\n",nbPrime);
/* on affiche les nombres premier trouver */
for(i=0;i<n;i++)
{
if(tabNumber[i] == PRIME)
{
cprintf("%d ",i+1);
}
}
/* si on veut quitter ! */
if(!boolDrawAll)
{
key = getch();
/* on quitte */
if(key == 'q')
{
break;
}
/* on dessine tout */
else if(key == 'a')
{
boolDrawAll = 1;
}
}
else
{
/* si on a decteter l'appuye d'une touche, on quitte */
if(kbhit())
{
break;
}
}
}
return 0;
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.