Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !

Rejoignez le forum, c'est rapide et facile

Forum d'entraide en sciences
Bienvenue sur le forum d'entraide en sciences ! Inscrivez-vous gratuitement pour accéder à l'intégralité du forum ou connectez-vous si c'est déjà fait !

Bonne visite !
Forum d'entraide en sciences
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Réassort du coffret Pokémon 151 ...
Voir le deal

[C] Crible d'Eratosthène

2 participants

Aller en bas

[C] Crible d'Eratosthène Empty [C] Crible d'Eratosthène

Message par Julien Lun 5 Nov 2007 - 22: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
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

[C] Crible d'Eratosthène Empty Re: [C] Crible d'Eratosthène

Message par Julien Lun 5 Nov 2007 - 22: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
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

[C] Crible d'Eratosthène Empty Re: [C] Crible d'Eratosthène

Message par Duche Ven 16 Nov 2007 - 11: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
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

[C] Crible d'Eratosthène Empty Re: [C] Crible d'Eratosthène

Message par Duche Ven 16 Nov 2007 - 11:14

sinon autres commentaires en passant:

pourquoi
Code:
int* remplissage(int* tab, int N)
et pas
Code:
void remplissage(int* tab,int N)
???
Duche
Duche
Modérateur
Modérateur

Masculin Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006

Revenir en haut Aller en bas

[C] Crible d'Eratosthène Empty Re: [C] Crible d'Eratosthène

Message par Julien Ven 16 Nov 2007 - 11: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
Julien
Administrateur
Administrateur

Masculin Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005

Revenir en haut Aller en bas

[C] Crible d'Eratosthène Empty Re: [C] Crible d'Eratosthène

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser