[C] Crible d'Eratosthène
Page 1 sur 1•
[C] Crible d'Eratosthène
- Code:
#include
int main()
{
int i,j,diviseur,N;
int tab[256];
tab[0]=2; //le premier nombre premier est 2
printf("Jusqu'où voulez-vous aller ? (tapez un nombre entre 2 et 256)\n");
scanf("%i",&N);
for (i=1;i
{
tab[i]=i+2;
}
for (i=1;i
{
if(tab[i-1]!=-1)
{
diviseur=tab[i-1];
for(j=i;j
{
if(tab[j]%diviseur==0)
{
tab[j]=-1;
}
}
printf("%i ", tab[i-1]); //affiche la liste des nombres premiers jusqu'à N
}
}
}
Bon, ce code marche mais j'aimerais le simplifier en utilisant des fonctions, surtout pour diminuer le nombre d'imbrications de boucles dans le main. Je n'y arrive pas et je demande alors de l'aide !


Julien- Administrateur


- Messages : 6290
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [C] Crible d'Eratosthène
Pour le remplissage initial du tableau avec tous les entiers jusqu'à N, j'ai créé une fonction à part d'où le nouveau code :
C'est surtout les imbrications que je veux améliorer mais déjà, même si le code fonctionne, est-ce-qu'il est propre ?
- Code:
#include
int* remplissage(int* tab, int N) //remplissage du tableau avec tous les entiers de 2 à N+1
{
int i;
for (i=1;i
{
tab[i]=i+2;
}
}
int main()
{
int i,j,diviseur,N;
int tab[256];
tab[0]=2; //le premier nombre premier est 2
printf("Jusqu'où voulez-vous aller ? (tapez un nombre entre 2 et 256)\n");
scanf("%i",&N);
int* a=remplissage(tab, N);
for (i=1;i
{
if(tab[i-1]!=-1)
{
diviseur=tab[i-1];
for(j=i;j
{
if(tab[j]%diviseur==0)
{
tab[j]=-1;
}
}
printf("%i ", tab[i-1]); //affiche la liste des nombres premiers jusqu'à N
}
}
}
C'est surtout les imbrications que je veux améliorer mais déjà, même si le code fonctionne, est-ce-qu'il est propre ?


Julien- Administrateur


- Messages : 6290
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [C] Crible d'Eratosthène
t'as un problème avec tes for là 
tu les écrits pas complètement ^^
Il est sensé faire quoi ton programme ?
trouver des nombres premiers ?
tu les écrits pas complètement ^^
Il est sensé faire quoi ton programme ?
trouver des nombres premiers ?
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
Re: [C] Crible d'Eratosthène
sinon autres commentaires en passant:
pourquoi
et pas
???
pourquoi
- Code:
int* remplissage(int* tab, int N)
et pas
- Code:
void remplissage(int* tab,int N)
???
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
Re: [C] Crible d'Eratosthène
le_duche a écrit:t'as un problème avec tes for là
tu les écrits pas complètement ^^
Il est sensé faire quoi ton programme ?
trouver des nombres premiers ?
La balise code n'écrit pas tout j'ai l'impression... Sinon, mon programme affiche les N premiers nombres premiers. Et il marche bien maintenant que je l'ai arrangé !
Sinon t'as raison pour le void, vu que ça ne renvoie rien...


Julien- Administrateur


- Messages : 6290
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)




