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 :

que pensez vous de mon code source ecrit en c++(je debute)


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut que pensez vous de mon code source ecrit en c++(je debute)
    j'avais realise un programme ecris en c,et j ai voulu essaye le c++
    qu'en pensez vous???
    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
    #include <iostream>
    #include <math.h>
     
    //declaration et creation de la fonction pour calculer delta
     
     
    int fonctiondelta(int a,int b,int c);
    int fonctiondelta(int a,int b,int c)
    {
    	return (b*b-(4*a*c));
    }
     
     
    //definition et creation de la fonction solureel
    	void solureel(int a,int b,int delta);
     
        void solureel(int a,int b,int delta)
    	{
    		double solution1,solution2;
    		solution1=(-b+sqrt(delta))/(2*a);
    		solution2=(-b-sqrt(delta))/(2*a);
    		std::cout<<"solution1= "<<solution1<<"\net solution2= "<<solution2;
    	}
     
    //definition et creation de la fonction 1 1 solution
    	void solune(int a,int b);
    	void solune(int a,int b)
    	{
    		double seulsolution;
    		seulsolution=-b/2*a;
    		std::cout<<"\nla solution de l'equation est: "<< seulsolution;
    	}
     
     
    //definition et declaration de la fonction solutionimaginaire
    	void soluima(int a,int b,int delta);
    	void soluima(int a,int b,int delta)
    	{
    		//parceque je n 'arrive pas faire le calcul directement de (-b/2*a)???!!!je cree une variable t
    		//a laquelle j'affecte -b,puis je dis que t devient t/(2*a) :-)
    		double t;
    		t=-b;
    		t=t/(2*a);
     
    		std::cout<<"\nsolution1= " << t << "+" << (sqrt(-delta))/(2*a)  << "i\n";
     
            std::cout<<"\nsolution2= " << t << "-" << (sqrt(-delta))/(2*a) << "i\n";
    	}
     
     
     
     
    //fonction qui verifie si delta est >0 =0 ou <0 et appel une autre fonction en consequence
    void verifdelta(int a,int b,int delta);
    void verifdelta(int a,int b, int delta)
    {
    	if (delta==0)
    	{
    		std::cout<<"il y a une solution reelle\n";
    		solune(a,b);
    	}
    	if (delta>0)
    	{
    		std::cout<<"il y a deux solutions reelles\n";
    		solureel(a,b,delta);
    	}
    	if (delta<0)
    	{
    		std::cout<<"il y a deux solutions imaginaires\n";
    		soluima(a,b,delta);
    	}
    }
     
     
     
    //definition et creation de la fonction  maitresse
    void maitresse(void);
    void maitresse(void)
    {
        int a,b,c,delta;
    	std::cout<<"\nce petit programme resoud des equations du second degre\n";
    	std::cout<<"\ny = ax² + bx +c = 0\n";
    	std::cout<<"\nVeuillez entrer une valeur pour a : \n";
    	std::cin>>a;
    	std::cout<<"\nVeuillez entrer une valeur pour b : \n";
    	std::cin>>b;
    	std::cout<<"\nVeuillez entrer une valeur pour c : \n";
    	std::cin>>c;
    	//appel de la fonction delta et affectation du resultat a la variable local delta
        delta=fonctiondelta(a,b,c);
    	std::cout<<"delta= "<< delta <<"\n";
    	verifdelta(a,b,delta);
     
     
     
    }
     
     
     
     
    //et voici la fonction main qui est obligatoir et qui est presque vide :-))))
    int main()
    {
    maitresse();
     
    	return 0;
    }
    Comment l'ameliorer et ajoute de nouvelle fonctionnalite?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 34
    Points : 40
    Points
    40
    Par défaut
    Je pense qu'en dehors de l'utilisation de cin/cout, ton programme n'utilise aucune des caratéristiques de C++ qui est... un langage OBJET n'oublie pas. Donc tu feras vraiment de la programmation objet lorsque tu utiliseras les classes, l'héritage, la surcharge, etc. Vas-y progressivement, tu trouveras plein de tutoriels et de docs sur le site.

    EDIT: Oui, j'ai déjà oublié que moi aussi j'ai surement du commencer le C++ avec cin/cout... alors...

    C'est pas mal pour un début

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    C'est pas trop mal pour un début
    Pour l'améliorer, vérifie la validité des valeurs entrées:
    http://c.developpez.com/faq/cpp/?pag...#SL_cin_verify
    et soigne un peu ton indentation.
    L'utilisation de std:: allourdit ton code aussi.
    http://c.developpez.com/faq/cpp/?pag...sing_namespace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //definition et declaration de la fonction solutionimaginaire 
       void soluima(int a,int b,int delta); 
       void soluima(int a,int b,int delta)
    2 remarques:
    - la définition ne sert à rien à part à allourdir dans ce cas. C'est justifié dans un .h, ou si tu utilises la fonction avant de la définir. Dans ton cas, tu peux virer toutes les déclarations
    - tes commentaires ne sont pas utiles, ils encombrent même le programme. Je m'explique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // on déclare un entier appelé nb
    // et on lui affecte la valeur 5
    int nb = 5;
    ce genre de commentaire est mauvais, car il duplique le code, et n'apporte rien. Un commentaire doit expliquer à quoi sert le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // nb est le nombre de valeurs à saisir
    int nb = 5;
    Ainsi, je te propose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // affiche la solution imaginaire 
       void soluima(int a,int b,int delta)

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       void soluima(int a,int b,int delta) 
       { 
          //parceque je n 'arrive pas faire le calcul directement de (-b/2*a)???!!!je cree une variable t 
          //a laquelle j'affecte -b,puis je dis que t devient t/(2*a) :-) 
          double t; 
          t=-b; 
          t=t/(2*a);
    problème classique de typage.
    a et b sont des int. Donc b/a ça donne un int! Toi tu veux un double, il suffit de rajouter un double dans l'équation:
    changer 2 (int) en 2.0 (double) devrait corriger le problème.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Pour les commentaires des fonctions, une bonne habitude consiste à utiliser les commentaires doxygen.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //! affiche la solution imaginaire
    void soluima(int a,int b,int delta)

  6. #6
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Quelques critiques (on est là pour ça et c'est ce que tu demandes ) :
    Sur la fonction main :
    quelle différence entre la fonction main et la fonction maitresse ? Cette dernière ne semble pas utile. Il est souhaitable que main reflète le déroulement du programme. C'est bien qu'il ne soit pas trop encombré de code, sinon on ne voit pas clairement ce que le programme veut faire, mais là c'est excessif.
    Sur les données :
    il faut soigneusement choisir le type des données. Le type détermine les opérations qui peuvent s'effectuer sur une grandeur. Ce n'est pas parce que la valeur d'une grandeur est 5 , par exemple, que son type doit être un entier mais parce que elle doit être manipulée comme un entier. D'où les difficultés signalées par Aurelien car tes grandeurs utilisent les opérateurs qui s'appliquent aux entiers. Change le type de a,b,c, delta
    Sur les prototypes :
    Placés comme ils sont, ils ne servent effectivement à rien. Place les tout en tête du fichier après les includes ou dans un fichier .h
    Sur la structure du programme:
    Tu mélanges souvent le calcul et l'exploitation des résultats (affichage des valeurs). Ceci rend ton code moins souple : si tu décides par exemple de stocker les résultats sur fichier ou de les utiliser pour un autre calcul, il te faudra revisiter et modifier toutes ces fonctions. Je verrai plutôt solureel(),solune(), soluima() calculer et renvoyer le résultat. verifdelta() tester et renvoyer le résultat du test (>0,=0 ou<0) et une fonction calcul() qui appelle fonctiondelta() puis verifdelta() puis, en fonction de sa réponse appelle solureel() ou solune() ou soluima() et renvoie la solution. La fonction maitresse() lit les valeurs des coefficients, appelle calcul et exploite le résultat en l'affichant.
    Sur le C++ :
    C'est vrai que ton programme n'est pas très objet et plutôt de caractère procédural.(c'est souvent le cas pour les programmes de calcul pur). En exercice, essaie de le teinter objet en créant par exemple une classe Equation2degre. A la construction spécifie a,b,c. Définit des méthodes permettant d'avoir les solutions, leur nombre, si elles sont réelles ou complexes...
    En général :
    Bel effort pour produire un code structuré et clair. Peut certainement mieux faire (comme tout le monde d'ailleurs)

    Bonne continuation
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Merci a tous pour vos remarque:-)

Discussions similaires

  1. que pensez vous de ce code (Création source ODBC)
    Par aimer_Delphi dans le forum Débuter
    Réponses: 1
    Dernier message: 26/05/2010, 14h47
  2. Que pensez-vous de mon code?
    Par vincs72 dans le forum Langage
    Réponses: 16
    Dernier message: 20/08/2007, 20h07
  3. [Avis] Que pensez-vous de mon C.V.
    Par skynet dans le forum CV
    Réponses: 22
    Dernier message: 30/09/2006, 18h49
  4. Réponses: 11
    Dernier message: 09/09/2006, 15h54
  5. [SGBD/MLD]Que pensez vous de mon MLD?
    Par Bils dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 29/03/2006, 16h50

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