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 :

[aire et rayon]


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2007
    Messages : 1
    Par défaut [aire et rayon]
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include<iostream>
    #include<iomanip>
    #include<cmath>
     
    using namespace std;
    int main()
     
    {
    	double Aire;
    	double Volume;
    	double rayon = 0;
     
     
    	/*Calculer l'aire d'une sphère de rayon*/
     
    	cout << "Entrez le rayon(en centimetre(s) de la  sphere?"  << setw(10) << "cm" <<endl;
    	cin >> rayon;
     
        Aire = 4 * 3.14159 * pow(rayon,2);
        cout  << "L'aire du sphere est:"  << setw(12) << Aire  << endl << endl;
     
    	/*Calculer le volume d'une sphère  de rayon*/
     
        Volume = 4 * 3.14159 * pow(rayon,3)/3; 
    	cout << "Le volume de la  sphere est:" <<  setw(10) << Volume <<  endl << endl;
     
    }
      int menu();
     
            void calculeAire(); 
            void calculeVolume(); 
    		{
     
     
              int choix = menu();
     
              switch(choix)
    		  {
     
               case 1: calculeAir(); 
               break;
               case 2: calculeVolume();
               break;
               default:cout << ("Quitter") << endl;;
     
     
                }
     
    	}
     
     
    int menu()
     
         {
     
             int choix;
             cout << " 1: calculeAire" << endl;
             cout << " 2: calculeVolume " << endl;
             cout << " 0: Quitter " << endl;
             cout << " votre choix " << endl;
             cin >> choix;
     
             return (choix);
     
           }
    bonjour
    il me manque quelque chose pour executer mon programme,je ne trouve pas
    pouvez-vous m'aider s.v.p?
    merci

  2. #2
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Par défaut
    Je vois pas trop comment tes fonctions sont définies et où elles sont utilisées. Il n'y a aucun appel de fonction dans ton main donc elles ne te servent à rien.

    Et puis void calculeVolume(); { c'est une erreur de syntaxe.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Il y a plusieurs choses, qui toutes me font meme douter du fait que le code compile

    D'abord, il faut savoir que le compilateur va lire le code un peu comme toi, tu lirais un livre ou un journal: de haut en bas et de gauche à droite...

    Comme toi, il est incapable de savoir ce qui se passe à la page dix alors qu'il n'a lu que les huit premières... (et c'est meme pire: il ne peut pas savoir ce qui se passe à la ligne 10 alors qu'il n'a parcourru que les 8 premières )

    Il ne peut donc connaitre une fonction, meme si elle est définie plus loin, que si elle a au minimum été déclarée au préalable (en fournissant son prototype)

    Ensuite, quand le programme est compilé et lancé, tout ce qu'il fait, c'est chercher la fonction int main() et effectuer ce qu'elle contient...

    Cela signifie que, tu aurais beau créer 1500 fonctions différentes, si la fonction main n'en appelle pas au minimum une qui en appelle une (ou plusieures) autre(s), toutes celles qui seraient créées mais non appelées dans l'ordre d'exécution logique peuvent etre considérées comme perte de temps car inutiles

    Bref (outre le fait que ton indentation ne soit pas des plus lisibles)...

    Tu déclares une fonction "menu"... apres avoir défini main, sans jamais l'appeler dans main (une chance)... mais, en plus, tu déclares une fonction calculeAire() et une autre claculeVolume() sans jamais les définir, et, par chance, sans jamais les appeler (vu que les seuls appels qui sont fait de ces deux fonctions le sont dans... menu... qui n'est jamais appelée)

    Et le gros problème réside, justement, dans ton indentation, qui t'empeche de voir les différentes étapes

    Voyons un peu le code, correctement indenté (mais pas encore corrigé ), avec quelques commentaires
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include<iostream>
    #include<iomanip>
    #include<cmath>
     
    using namespace std;
    int main()
    {
    // ce qui se trouve entre cette accolade et sa fermeture est effectuée
    //dans la fonction principale
        double Aire;
        double Volume;
        double rayon = 0;
     
        /*Calculer l'aire d'une sphère de rayon*/
    //Soit, mais n'est-ce pas, justement, le but de calculeAire???
    // NB calculeaire n'est pas connu de main :P
        cout<< "Entrez le rayon(en centimetre(s) de la  sphere?"  << setw(10)
            << "cm" <<endl;
        cin >> rayon;
        Aire = 4 * 3.14159 * pow(rayon,2);
        cout<< "L'aire du sphere est:"  << setw(12) << Aire  
           << endl << endl;
        /*Calculer le volume d'une sphère  de rayon*/
    //soit, mais n'est-ce pas, justement, le but de calculeVolume
    //(inconnu de main)??
        Volume = 4 * 3.14159 * pow(rayon,3)/3; 
        cout<< "Le volume de la  sphere est:" <<  setw(10) << Volume
            <<endl << endl;
    }
    //Tu déclares menu... mais pour pas grand chose: main ne le connait pas
    int menu();
    //idem pour calculeAire et pour claculeVolume
    void calculeAire(); 
    void calculeVolume(); 
    {
    //ceci, ce n'est pas claculeVolume... mais ca aurait sa place
    // dans la fonction principale, non ???
        int choix = menu();
        switch(choix)
        {    
            case 1: 
                calculeAir(); 
                break;
            case 2:
                calculeVolume();
                break;
           default:
                cout << ("Quitter") << endl;;
        }
    }
    // La définition de la fonction menu (la seule chose à peu pres correcte :P)        
    int menu()
    {
        int choix;
        cout << " 1: calculeAire" << endl;
        cout << " 2: calculeVolume " << endl;
        cout << " 0: Quitter " << endl;
        cout << " votre choix " << endl;
        cin >> choix;
        return (choix);
    }
    Les commentaires devraient te mettre sur la voie des erreurs commises, mais voici la correction (les commentaires t'indiqueront ce qui est fait )
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    // inclusions des fichiers d'entete nécessaires
    #include<iostream>
    #include<iomanip>
    #include<cmath>
    // je n'aime personnellement que médiocrement l'utilisation
    // de using namespace... mais bon, c'est valide ;)
    // cela indique que l'on utilise ce qui se trouve dans l'espace de nommage
    // std (en gros, l'espace de nommage de la STL ;))
    using namespace std;
    //Pour que main connaisse les différentes fonctions, il faut les déclarer
    // avant d'entrer dans main (ce pourrait aussi etre fait par 
    // inclusion d'un fichier d'entete qui contiendrait les déclarations ;) )
    // ou, carrément, il est envisageable de définir directement les
    // fonctions (quoi que moins lisible :P)
    //la fonction menu
    int menu();
    //NOTA: la déclaration (ou la définition) des fonctions de calcule d'aire
    // et de volume aurait pu etre retardée jusquà au plus tard avant 
    // la définition de menu (vu que c'est elle qui doit les connaitre)
    // mais il est toujours bon de déclarer toutes les fonctions ensemble
    //la fonction de calcul de l'aire
    void calculeAire();
    //la fonction de calcule du volume
    void calculeVolume();
    // la définition de la fonction principale
    //Si possible, on préfère définire les valeurs constantes une bonne fois
    //pour toutes pour éviter les "valeurs magiques" 
    //PI a peu de chances de devoir etre modifié, mais ce n'est pas forcément
    //le cas de toutes les valeurs constantes ;)
    #define PI=3.14151926
    int main()
    {
        //TIP: Tant qu'à faire, il est préférable de ne déclarer
        // les variables que quand on peut leur donner une valeur valide ;)
        // on peut très bien initialiser une variable avec le résultat d'une
        // fonction... 
        // Ce menu n'aura un sens que si on a la possibilité d'effectuer plusieurs
        // fois le test, raison de la boucle "do while"
        do
        {
            //la boucle do...while est effectuée au minimum une fois, et on teste,
            //apres l'exécution s'il est nécessaire d'y retourner
            int choix=menu();
            switch (choix)
            {
                case 1: //l'utilisateur a choisi de calculer la surface
                    calculeAire();
                    break;
                case 2: //l'utilisateur a choisi de calculer le volume
                    calculeVolume();
                    break;
                case 0: //l'utilisateur a choisi de quitter
                    cout<<"on quitte"<<endl;
            }while(choix!=0);//force à retourner dans la boucle tant que
                             // l'utilisateur n'a pas choisi de quitter
        //renvoie le code "succes" et quitte
        return 0;
    }
    int menu()
    {
        //Cette fonction affiche le menu...
        //comme l'utilisateur doit toujours etre considéré comme
        // un imbécile distrait, il y a lieu de prendre des mesures pour s'assurer
       // qu'il a effectué un bon choix ;)
       int choix;
       do
       {
            cout << " 1: calculeAire" << endl;
            cout << " 2: calculeVolume " << endl;
            cout << " 0: Quitter " << endl;
            cout << " votre choix " << endl;
            cin >> choix;
            // cette boucle sera effectuée jusqu'à ce que le choix soit valide
            // on commence par s'assurer que l'utilisateur introduit bien un
            // chiffre
            if(!(cin>>choix))
            {
                //l'utilisateur n'a pas introduit un chiffre
                cout<<"veuillez introduire un chiffre, uniquement"<<endl;
                //par sécurité, on force choix à une valeur erronée
                choix=10;//aurait pu etre n'importe quoi sauf 0,1 ou 2 ;)
            }
            else if(choix<0 ||choix>2)
            {
                //l'utilisateur a introduit un chiffre, mais autre que 0,1 ou 2 :P
                cout<<"veuilez choisir entre 0, 1 ou 2 uniquement"<<endl;
            }
        }while(choix>=0 && choix <=2);//Tant qu'on n'est pas dans la bonne
                           //fourchette, on recommence :P
        return choix;
    }
    //définition de la fonction qui calcule la sufrace
    void calculeAire()
    {
    // la fonction gere l'affichage et l'introduction du rayon...
    // d'autres possibilités étaient envisageables ;)
        cout << "Entrez le rayon (en centimetres) de la  sphere?"  
             << setw(10) << "cm" <<endl;
        double rayon
        cin >> rayon;
        //on aurait pu éviter l'utilisation de la variable aire, mais bon...
        double aire= 4 * PI * pow(rayon,2);
        cout  << "L'aire du sphere est:"  << setw(12) << aire  << endl << endl;
    }
    //définition de la fonction qui calcule le volume
    void calculeVolume()
    {
        cout << "Entrez le rayon (en centimetres) de la  sphere?"  
             << setw(10) << "cm" <<endl;
       double rayon
       cin >> rayon;
       //idem que pour aire ;) 
        double volume = 4 * PI * pow(rayon,3)/3; 
        cout << "Le volume de la  sphere est:" <<  setw(10) << volume 
            <<  endl << endl;
    }
    Tu remarqueras, entre autres, l'utilisation de la directive préprocesseur #define PI 3.1415926...

    Bien qu'il y ai peu de chance que l'on veille un jour modifier la valeur de PI (quoi, que...), le fait de définir une bonne fois pour toutes les valeurs constantes utilisées tout au long de l'application permet de faciliter les modifications ultérieures...

    Si, je voulais un jour changer la précision de pi (passer à 3.141592635, par exemple) je n'aurais alors qu'à changer la valeur dans la directive pour qu'elle soit prise, lors de la recompilation, en compte partout, au lieu de devoir parcourrir l'ensemble du code à la recherche de tous les endroits où il est utilisé...

    Bien sur, dans cet exemple, l'intéret de la chose est minime, mais, dans les projets plus importants, pour lesquels une meme valeur "constante" est utilisée dans plusieurs (dizaines de) fichiers, ca facilite grandement le travail de modification

    De plus, il est plus facilement compréhensible d'avoir affaire à un terme qui indique clairement de quoi il est question que d'avoir affaire à une valeur "tombée du ciel" dont seul le concepteur du programme sait, au moment où il décide de l'utiliser, ce qu'elle représente effectivement...

    Enfin, et dieu sait que je fais partie de ceux qui se battent à ce sujet, n'oublie jamais que, si un code peut te parraitre limpide aujourd'hui, il risque de te parraitre bien plus opaque dans une semaine ou dans un mois...

    N'hésite donc jamais à placer un petit commentaire sur ce qui est censé etre fait...

    Le code que je fournis est un exemple excessif concernant les commentaires, mais ils ne font jamais de tord

    NOTA: j'ai écrit ce code "à la volée" sans prendre la peine de tenter la compilation... une ou l'autre faute de frappe peut donc s'être glissée par inadvertance
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par koala01
    Tu remarqueras, entre autres, l'utilisation de la directive préprocesseur #define PI 3.1415926...
    Je l'ai remarquée, et préférerais l'alternative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double const PI = 3.14159263;
    Qui a l'avantage d'être plus typée
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Aussi...

    Cependant, tu remarqueras sans doute que, dans de tres nombreux projets, et non des moindres, le define est plus souvent utilisé... Je n'ai d'ailleurs jamais vraiment compris pourquoi...

    Serait-ce parce que la directive préprocesseur ne déclare en réalité pas une variable comme le fait double const PI mais se contente de définir une chaine de caractères qui sera remplacée par sa valeur avant meme d'en arriver à la compilation proprement dite
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Citation Envoyé par koala01
    Aussi...

    Cependant, tu remarqueras sans doute que, dans de tres nombreux projets, et non des moindres, le define est plus souvent utilisé... Je n'ai d'ailleurs jamais vraiment compris pourquoi...
    des vieilles habitudes du C

    Serait-ce parce que la directive préprocesseur ne déclare en réalité pas une variable comme le fait double const PI mais se contente de définir une chaine de caractères qui sera remplacée par sa valeur avant meme d'en arriver à la compilation proprement dite
    oui, et c'est mal faire un const permet tout de suite de voir les eventuelles erreurs, et on peut même utiliser son adresse si on a envie: c'est une variable comme les autres.

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par koala01
    Aussi...

    Cependant, tu remarqueras sans doute que, dans de tres nombreux projets, et non des moindres, le define est plus souvent utilisé... Je n'ai d'ailleurs jamais vraiment compris pourquoi...
    Je n'ai jamais regardé ce genre de statistiques. A mon avis, si tel est le cas, les raisons peuvent être de plusieurs ordres :
    - Compatibilité de certains headers avec le C
    - Vieilles habitudes des développeurs


    Citation Envoyé par koala01
    Serait-ce parce que la directive préprocesseur ne déclare en réalité pas une variable comme le fait double const PI mais se contente de définir une chaine de caractères qui sera remplacée par sa valeur avant meme d'en arriver à la compilation proprement dite
    C'est à mon avis un inconvénient plutôt qu'autre chose : Problèmes pour visualiser la valeur lors du debugage, non respect des règles de visibilité du C++, manque de typage. Vraiment, à part pour des headers partagés avec le C, je ne vois aucun avantages à cette méthode.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. [W3C] Aires cliquables : compatibilité Mozilla
    Par Nicomart dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/09/2005, 18h18
  2. Lancer de Rayon
    Par Wyatt dans le forum OpenGL
    Réponses: 3
    Dernier message: 05/05/2005, 13h51
  3. Problème spécification - Schéma relationel n-aire
    Par Invité dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 13/04/2005, 11h05
  4. arbre n-aire delete
    Par Fry dans le forum C++
    Réponses: 13
    Dernier message: 19/10/2004, 21h22
  5. Aire client MDI
    Par nicolas.pissard dans le forum MFC
    Réponses: 3
    Dernier message: 18/01/2003, 20h39

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