IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Nombre Premier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Par défaut Nombre Premier
    Bonjour à tous,

    je cherche à créer un programme en C++, qui affiche les n premiers nombres premiers, n étant donné par l'utilisateur. Par exemple :

    Entrez un nombre : 3
    Les 3 premiers nombres premiers sont :
    2, 3, 5.

    J'ai un problème lors de l'exécution de mon programme. Je rentre un nombre et le prog se ferme. (Je développe sous Dev C++). Aucune erreur n'est détectée lors de la compilation.
    Code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include <iostream.h>
    using namespace std;
     
    bool estPremier (unsigned int nombre);
    int main()
    {
        int nombre,compt,n;
        //nombre : variable dédiée aux tests de primarité
        //n : nombre saisi au clavier
        //compt : compteur de nombres de boucles
     
        cout << "Entrez un nombre : " ;
        cin >> n;
     
        //on initialise les variables avant d'entrer dans la boucle
        nombre = 2;
        compt = 1;
     
        //on ne peut pas afficher 0 nombre premier
        if (n == 0) cout << "Erreur !";
        else {
             cout << "Les " << n << " premiers nombres premiers sont :" << endl;
             do {
                 if (compt == n) cout << nombre << ".";
                 else {
                      if (estPremier(nombre)) cout << nombre << ", ";
                      nombre++;
                      compt++;
                      }
                }
             while (compt <= n);
             }
        return 0;
    }
     
     
    //Fonction qui retourne la primarité d'un nombre
    bool estPremier(unsigned int nombre)
    {
      if (nombre == 2) return true;
      for (int i = 2; i <= (nombre - 1); i++)
      {
        int modulo = (nombre % i);
        if (modulo == 0) return false;
           else return true;
      }
    }
    Pourriez-vous me donnez une piste qui pourrait me faire avancer dans la résolution de mon programme ?
    Merci beaucoup.

    Laurent

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Par défaut
    Veuillez m'excuser pour ce post qui n'avait pas lieu d'être...
    Mais là je ne comprends pas pourquoi même avec la ligne pour attendre avant de quitter, mon prog se ferme quand même...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // attendre avant de quitter
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
    Peut-être qu'il s'agit d'une boucle infinie présente dans le code source qui fait tout planter ?

    Je ne sais pas... Pardonnez mon ignorance en C++, je rame sévère
    Merci d'avance pour vos posts.

    Laurent

  4. #4
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Essaie de remplacer
    par
    je ne comprends pas: si j'entre le nombre 3, ton programme entre ds une boucle sans fin... j'ai une erreur lors de la compil'... tu n'as rien dew tout ça?

  5. #5
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Voici le code qui marche chez moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    #include <iostream>
    using namespace std;
     
     
    bool estPremier(int nombre)
    {
      if (nombre == 2) return true;
      for (int i = 2; i <= (nombre - 1); i++)
      {
        int modulo = (nombre % i);
        if (modulo == 0) return false;
        return true;
      }
    } 
     
    int main()
    {
        int nombre,compt,n;
        //nombre : variable dédiée aux tests de primarité
        //n : nombre saisi au clavier
        //compt : compteur de nombres de boucles
     
        cout << "Entrez un nombre : " ;
        cin >> n;
     
        //on initialise les variables avant d'entrer dans la boucle
        nombre = 2;
        compt = 1;
     
        //on ne peut pas afficher 0 nombre premier
        if (n == 0) cout << "Erreur !";
        cout << "Les " << n << " premiers nombres premiers sont :" << endl;
             do {
                 if (compt == n) cout << nombre << ".";
     
                      if (estPremier(nombre)) cout << nombre << ", ";
                      nombre++;
                      compt++;
     
                }
             while (compt <= n);
     
        system("pause");
        return 0;
    }
    Voila...
    PS: <iostream> et <iostream.h> n'ont rien à voir! -->

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 293
    Par défaut
    Après une lecture avec cin >>, il n'est pas impossible qu'il faille "purger" le buffer d'entrée avant de pouvoir faire la pause de la sorte.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Par défaut
    Ouah merci beaucoup, mon programme s'exécute désormais correctement ! C'est sympa d'obtenir de l'aide si rapide.
    Le seul petit truc qui déconne un peu, c'est lors de l'exécution du prog, je rentre un nombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Entrez un nombre : 3
    Les 3 premiers nombres premiers sont :
    2, 3, 4.
    Appuyez sur une touche pour continuer...
    Or 4 n'est pas premier ! Je ne comprends pas. Le déroulement de l'algo se fait correctement d'après moi. J'ai noté aussi un autre petit hic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Entrez un nombre : 6
    Les 4 premiers nombres premiers sont :
    2, 3, 5, 7.
    7, Appuyez sur une touche pour continuer...
    Ici le prog n'affiche que 4 nombres premiers corrects, ce problème se pose avec n'importe quel nombre entré. J'ai beau changé la boucle (mettre un tant-que a la place du répéter-tant que), le problème persiste...

    Voila ou j'en suis. Peut-être que quelqu'un postera une piste qui pourra m'aider ! En tous cas merci beaucoup pour vos posts précédents.

    Laurent

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Si tu utilises le code de reggae, il y a deux erreurs:
    Dans la fonction estPremier, return true est mal placé (il est DANS la boucle for) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bool estPremier(int nombre) 
    {
      if (nombre == 2) return true;
      for (int i = 2; i <= (nombre - 1); i++)
          if (nombre % i == 0) return false;
      return true ;
    }
    Dans main, compt n'est pas incrémenté au bon endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     do {
            if (estPremier(nombre))
               {
                   cout << nombre << ", ";
                   compt++;
               }
           nombre++;
         }  while (compt <= n);

  9. #9
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Vraiment désolé... mais je devais le faire rapidement avant de partir...
    Je ferais gaffe à l'avenir

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Par défaut
    Merci en tous cas pour toutes ces précisions, c'est très sympa de trouver de l'aide aussi vite.
    Je vais me débrouiller pour terminer mon prog.

    Bon surf à tous et bonne prog
    Laurent

Discussions similaires

  1. Réponses: 24
    Dernier message: 27/09/2005, 21h16
  2. [défi n°8]: premiers nombres premiers
    Par javatwister dans le forum Général JavaScript
    Réponses: 41
    Dernier message: 14/06/2005, 10h22
  3. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57
  4. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 19h10
  5. premier nombre premier superieur à m=10^100+1
    Par azman0101 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 17/04/2003, 03h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo