[C] Crible d'Eratosthène

Voir le sujet précédent Voir le sujet suivant Aller en bas

[C] Crible d'Eratosthène

Message par Julien le Mar 6 Nov - 0:10

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
Administrateur

Sexe:Masculin
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  (0/0)

Revenir en haut Aller en bas

Re: [C] Crible d'Eratosthène

Message par Julien le Mar 6 Nov - 0:35

Pour le remplissage initial du tableau avec tous les entiers jusqu'à N, j'ai créé une fonction à part d'où le nouveau code :

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
Administrateur

Sexe:Masculin
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  (0/0)

Revenir en haut Aller en bas

Re: [C] Crible d'Eratosthène

Message par le_duche le Ven 16 Nov - 13:12

t'as un problème avec tes for là Laughing
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...

le_duche
Membre
Membre

Sexe:Masculin
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  (4/7)

Revenir en haut Aller en bas

Re: [C] Crible d'Eratosthène

Message par le_duche le Ven 16 Nov - 13:14

sinon autres commentaires en passant:

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...

le_duche
Membre
Membre

Sexe:Masculin
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  (4/7)

Revenir en haut Aller en bas

Re: [C] Crible d'Eratosthène

Message par Julien le Ven 16 Nov - 13:50

le_duche a écrit:t'as un problème avec tes for là Laughing
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
Administrateur

Sexe:Masculin
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  (0/0)

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum