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 :

Débutant cherche commentaire sur son code


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut Débutant cherche commentaire sur son code
    Bonjour à tous,

    comme dit dans le titre je débute (et je ne suis pas étudiant mais autodidacte )et dans le code ci-dessous j'aurais 2 questions :

    Objectif de mon code :
    • déterminer si le nombre est un nombre premier
    • Saisir un autre nombre pour sinon 'Q' pour quitter


    Questions
    1. Quelle différence dans les include, la façon dont je l'ai fait et les '.h' (j'ai vu les deux formulations) ?
    2. J’essaie à la fin de tester si c'est un nombre qui est saisie ou si 'Q' et j'ai un problème de conversion char > int
    3. Y a-t-il un moyen de faire plus propre pour le test de sortie/nouveau test ?


    Je sais, j'avais di 2

    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
    49
    50
    51
    52
    53
     
    #include<cctype>
    #include<cstdlib> 
    #include<cstring> 
    #include<cmath>
    #include<iostream>
    using namespace std;
     
    int main()
    {
        int nb;
        int div;
        int res;// res=1 > pas premier / res = 2 > premier
        char encore;
     
        /* Première demande */
        cout << "Saisissez un nombre entier : "; cin >> nb;
     
        do
        {
            /* Test nombre premier */
            if (nb==1 || nb==2 || nb==3 || nb==5)
                res=1;
            else if (nb%2==0 || nb%3==0 )
                res=0;
            else 
                {
                    div=5;
                     while ( sqrt(nb) <= div  && res == 0) 
                        {
                            if(nb%div==0) { res=1; }
                            div = div + 2;
                        }
                }
     
            /* Affichage résultat */
            if (res==1)
                cout<<"C'est un nombre premier" << endl;
            else
                cout<<"Ce n'est pas un nombre premier" << endl;
     
            /* Nouvel essai ... ou pas */
            cout<<"Tapez [Q] pour quitter sinon saisissez un autre nombre : "; 
            cin >> encore;
     
            if (!isalpha(encore)) nb=atoi(encore.c_str());
     
        }
        /* Si pas 'Q' on boucle */
        while (encore!='Q' && nb!=0);
     
        return 0;
    }
    Si tu as lu jusqu'ici soit remercié.
    Si tu as un bout de réponse soit vénéré !

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    1) Pour les include, en c++ les include n'ont pas besoin de point h en general sauf si tu veux inclure un .h bien particulier, en general les include sans ".h" vont inclure plusieurs autre include (regarde dans tes dossier d'include et ouvres-en un au pif tu verras )

    2) un char n'a pas de propriete c_str(), c'est les std::string.
    Utilise plutot un std::string plutot qu'un char. explication:

    Si un utilisateur rentre 36, tu stockera dans ton char 3 et non pas 36 (char=un caractere) dans le cas d'un std::string tu stockera bien 36 et la fonction c_str fonctionnera bien et par consequent la fonction atoi

    3) Sinon pour le test de sorti il me semble correct bien que je prefere utiliser la structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (condition)
    {
      //code
    }
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Skeud tu viens d'obtenir ma vénération

    Question supplémentaire : dans ce que j'ai écris, y a-t-il une réelle différence entre C et C++ ?

    En tout cas :
    Pour le point 1, ok je crois comprendre. En C++ c'est la différence entre importer une bibliothèque complète ou juste un fichier de la bibliothèque

    Pour le point 2, c'était évident Mais je viens de langage à typage faible et j'ai assimilé char à string, mea culpa

    Pour le 3, habituellement je retiens la même structure que toi mais j'ai voulu essayer celle-ci. Peu adapté dans ce contexte j'en conviens.

    Bref, ce soir je corrige ma source, je re-compile et grâce à toi, je poursuivrais ma découverte du monde étrange de C++ par les strings

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Le gros avantage du c++ est (pour moi) l'utilisation de std::string.

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::string toto="oui";
    if (toto == "oui")
      return (0);
    else
      return (1);
    tu peux tester directement comme en php plus besoin du strcmp en C

    Un autre gros (enorme) avantage du c++, c'est les classes, mais la je te laisse consulter le tuto c++ pour comprendre comment sa fonctionne, un peu trop long pour tout expliquer dans un message
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par m51_2000 Voir le message
    1. Quelle différence dans les include, la façon dont je l'ai fait et les '.h' (j'ai vu les deux formulations) ?
    Réponse en plusieurs temps :

    Ni le langage C ni le langage C++ n'imposent rien en terme d'extension pour les fichiers sources ou les fichiers d'en-têtes.

    L'usage a consacré les extension .h, .hpp, .hxx, .hh comme extension des fichiers d'en-têtes C++. et .cpp, .cxx, .cc, .C pour les fichiers sources C++.

    Le C utilise plutôt les extensions .h pour les en-têtes et .c pour les fichiers sources.

    Les bibliothèques C (et en particulier les bibliothèques standards) ont donc des extensions en .h

    C++ a aussi des bibliothèques standards. Pour éviter les confusions avec les extensions des bibliothèques standards C, ces en-têtes n'ont pas d'extension. Celle qui reprennent des éléments des bibliothèques C construisent le nom comme suite : on prend le nom de la bibliothèque C, on rajoute 'c' devant et on enlève le .h. Par exemple, <math.h> en C devient <cmath> en C++

    Citation Envoyé par m51_2000 Voir le message
    1. J’essaie à la fin de tester si c'est un nombre qui est saisie ou si 'Q' et j'ai un problème de conversion char > int
    Outre la remarque de skeud, je te renvois sur la F.A.Q. : Entrées / sorties avec les flux et Comment convertir une string en un entier ? (oublies atoi et autres cochonneries).

    Citation Envoyé par m51_2000 Voir le message
    1. Y a-t-il un moyen de faire plus propre pour le test de sortie/nouveau test ?
    Oui : F.A.Q. : en adaptant Comment vérifier les valeurs saisies avec cin ?

  6. #6
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Effectivement atoi est une cochonnerie mais pour debuter ou commencer a tester un programme je le trouve bien utile, ensuite plutot s'orienter vers sa pour convertir une string en nombre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int convert(std::string str)
    {
      std::istringstream stream(str);
      int ret;
      stream >> ret;
      return (ret);
    }
    On m'a d'ailleur conseiller d'eviter de melanger du c avec du c++ donc eviter de faire des appel a des fonction c type atoi (et surtout pas malloc)
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Les bibliothèques C (et en particulier les bibliothèques standards) ont donc des extensions en .h

    C++ a aussi des bibliothèques standards. Pour éviter les confusions avec les extensions des bibliothèques standards C, ces en-têtes n'ont pas d'extension. Celle qui reprennent des éléments des bibliothèques C construisent le nom comme suite : on prend le nom de la bibliothèque C, on rajoute 'c' devant et on enlève le .h. Par exemple, <math.h> en C devient <cmath> en C++
    Toutes vos réponses m'apportent, mais celle-ci m'éclaire

    Bon je passe ce sujet à RESOLU même si j'ai d'autres questions.
    Je préfère découper chaque problèmes en petit morceaux

    Merci à tous et à tout de suite sur un autre fil ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Commentaires sur le code
    Par sikarce dans le forum VHDL
    Réponses: 2
    Dernier message: 17/10/2011, 12h28
  2. Ajouter des commentaires sur son site
    Par zanys dans le forum 1&1
    Réponses: 0
    Dernier message: 26/11/2010, 23h09
  3. [débutant] cherche doc sur BO Data Integrator
    Par krimo22 dans le forum BODI
    Réponses: 1
    Dernier message: 19/06/2008, 16h27
  4. cherche explication sur du code
    Par abdoulzak dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2006, 10h23
  5. commentaire sur un code
    Par Bibouda dans le forum C
    Réponses: 10
    Dernier message: 25/11/2005, 23h12

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