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 :

Autres méthodes pour remplacer des If


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut Autres méthodes pour remplacer des If
    Bonjour à vous tous. Je suis en ce moment en train de faire un programme et il est presque terminé. J'essaye maintenant d'améliorer mon code. Dans ce module, vous pouvez voir qu'il y a une série de plusieurs If imbriqués. J'aimerais savoir si se serais possible de remplacer tout ces if par quelques choses de mieux. Un autre module. Je ne sais pas. J’attends vos suggestions.

    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
    void ObtenirInfosProduit (int p_codeVecteur, string p_code, 
    						  vector<TypeProduit>& p_s_produit)
    	{
    	p_s_produit[p_codeVecteur].code= p_code;
    	cout << "Veuillez entrer le nom du nouveau produit? ";
    	getline(cin, p_s_produit[p_codeVecteur].nom);
    	do
    		{
    		cout << "Choisisez le catégorie de ce produit? "
    			 << "(biscuits, boisson, chocolat, croustilles, fruit, gâteau ou autre)";
    		string catégorie;
    		cin >> catégorie;
    		cin.ignore();
     
    		if (catégorie == "biscuits")
    			p_s_produit[p_codeVecteur].catégorie= BISCUITS;
    		else
    			if (catégorie == "boisson")
    				p_s_produit[p_codeVecteur].catégorie= BOISSON;
    			else
    				if (catégorie == "chocolat")
    					p_s_produit[p_codeVecteur].catégorie= CHOCOLAT;
    				else
    					if (catégorie == "croustilles")
    						p_s_produit[p_codeVecteur].catégorie= CROUSTILLES;
    					else
    						if (catégorie == "fruits")
    							p_s_produit[p_codeVecteur].catégorie= FRUIT;
    						else
    							if (catégorie == "gâteau")
    								p_s_produit[p_codeVecteur].catégorie= GÂTEAU;
    							else
    								if (catégorie == "autre")
    									p_s_produit[p_codeVecteur].catégorie= AUTRE;
     
    		}
    	while (p_s_produit[p_codeVecteur].catégorie != BISCUITS && 
    		   p_s_produit[p_codeVecteur].catégorie != BOISSON &&
    		   p_s_produit[p_codeVecteur].catégorie != CHOCOLAT && 
    		   p_s_produit[p_codeVecteur].catégorie != CROUSTILLES &&
    		   p_s_produit[p_codeVecteur].catégorie != FRUIT &&
    		   p_s_produit[p_codeVecteur].catégorie != GÂTEAU &&
    		   p_s_produit[p_codeVecteur].catégorie != AUTRE);
     
    		if (p_s_produit[p_codeVecteur].catégorie == AUTRE)
    			{
    			do
    				{
    				cout << "Quelles taxes(TPS, TVQ, TPS&TVQ, AUCUNE) s'appliquent\n"
    					 << "à ce produit? ";
    				string taxe;
    				cin >> taxe;
    				cin.ignore();
    				if (taxe == "TPS")
    					p_s_produit[p_codeVecteur].taxe= TPS;
    				else
    					if (taxe == "TVQ")
    						p_s_produit[p_codeVecteur].taxe= TVQ;
    					else
    						if (taxe == "TPS&TVQ")
    							p_s_produit[p_codeVecteur].taxe= TPSETTVQ;
    						else
    							if (taxe == "AUCUNE")
    								p_s_produit[p_codeVecteur].taxe= AUCUNE;
    							else
    								cout << "Veuillez écrire le type de taxe en MAJUSCULE\n";
    				}
    			while (p_s_produit[p_codeVecteur].taxe != TPS && 
    				   p_s_produit[p_codeVecteur].taxe != TVQ && 
    				   p_s_produit[p_codeVecteur].taxe != TPSETTVQ && 
    				   p_s_produit[p_codeVecteur].taxe != AUCUNE);
    			}
    		else
    			{
    			switch (p_s_produit[p_codeVecteur].catégorie)
    				{
    				case BISCUITS :
    				case BOISSON :
    				case CHOCOLAT :
    				case CROUSTILLES :
    				case GÂTEAU : p_s_produit[p_codeVecteur].taxe= TPSETTVQ; break;
    				case FRUIT : p_s_produit[p_codeVecteur].taxe= AUCUNE; break;
    				default : assert(false);
    				}
    			}

  2. #2
    Membre habitué
    Inscrit en
    Avril 2002
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    Points : 157
    Points
    157
    Par défaut
    en c++ on utilise le else if sans identation

    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
     
    if(condition)
    {
       ...
    }
    else if(condition)
    {
       ...
    }
    else if(condition)
    {
       ...
    }
    else //sinon
    {
       ...
    }
    ca va ameliorre un peut la lisibilite

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu peux utiliser des tables associatives (std::map), les remplir une fois à l'init, et ensuite remplacer tous tes if par un accès à l'élément dans la table.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 385
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 385
    Points : 20 462
    Points
    20 462
    Par défaut
    Pas mieux que Loulou24 ( std::map) mais ue BDD SQL genre MySQL j e crois serais plus adapté

  5. #5
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    J'ai réussi à faire quelques chose avec ces if. Mais comme je n'ait pas assez de difficulter comme sa j'ai des erreurs. Voici mon module avec les erreurs et la ligne d'Appelle du module a la fin. Veuillez m'écrire votre solution clairement avec un exemple sa serais aprécié. Merci

    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
    ------ Build started: Project: tp4essai, Configuration: Debug Win32 ------
    Compiling...
    tp4essai.cpp
    c:\travail\tp4essai\tp4essai\tp4essai.cpp(157) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    c:\travail\tp4essai\tp4essai\tp4essai.cpp(161) : warning C4390: ';' : empty controlled statement found; is this the intent?
    c:\travail\tp4essai\tp4essai\tp4essai.cpp(161) : error C2440: 'return' : cannot convert from 'std::string' to 'int'
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    c:\travail\tp4essai\tp4essai\tp4essai.cpp(162) : error C2617: 'TypeCatégorieSelonString' : inconsistent return statement
            c:\travail\tp4essai\tp4essai\tp4essai.cpp(156) : see declaration of 'TypeCatégorieSelonString'
    c:\travail\tp4essai\tp4essai\tp4essai.cpp(177) : warning C4553: '==' : operator has no effect; did you intend '='?
    Build log was saved at "file://c:\Travail\tp4essai\tp4essai\Debug\BuildLog.htm"
    tp4essai - 3 error(s), 2 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
     
    TypeCatégorieSelonString(string catégorie)
    	{
    	if (catégorie == "biscuit" || catégorie == "boisson" || catégorie == "chocolat"
    		|| catégorie == "croustilles" || catégorie == "fruits" || catégorie == "gâteau"
    		|| catégorie == "autre");
    	return catégorie;
    	}
     
    	p_s_produit[p_codeVecteur].catégorie == TypeCatégorieSelonString(catégorie);

  6. #6
    Membre confirmé Avatar de toxcct
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 434
    Points : 511
    Points
    511
    Par défaut
    le premier message d'erreur est pourtant clair !

    quand tu définis une fonction, tu dois lui préciser le type de retour (en C, tu avais le droit de ne pas le faire, auquel cas, le type int etait implicite).

    donc remplace la premiere ligne de ton exemple par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string TypeCatégorieSelonString(string catégorie)

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    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 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Extraits tes fonctions de convertion chaine <-> énuméré.

    Ensuite, tu pourras :
    - y aller bourrinement comme là avec des if interminables
    - utiliser des tableaux triés (tant qu'à faire, s tu as beacoup d'énumérés) dans lesquels tu réaliseras des recherches
    - utiliser des "bibliothèques" ou des outils qui facilitent la définition d'énumérés ainsi que leur fonctions de convertion

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    Points : 26
    Points
    26
    Par défaut
    toxcct: merci à toi pour ton aide. Effectivement j'avais oublié mon string au commencement de mon module.

    Autre: merci aussi pour votre aide mais les termes que vous utiliser sont des éléments que je n'est pas encore apris car je n'ait fait que ma première session au cégep.

    Mais j'ai encore un petit problème. La condition du if dans le module TypeCatégorieSelonStringest pour le comment "biscuits". Mais j'Aimerais changer ce "biscuit" car quelque chose d'autre car l'utilisateur à la choix de choisir plusieur catégorie fesant partie de l'énum TypeCatégorie{biscuits, boisson, chocolat, croustilles, fruit, gâteau, autre}. Mais je ne sais pas quoi marquer pour que lorsque l'utilisateur entre une de ses catégories, que cette catégories soit enregistrée dans le vector.

Discussions similaires

  1. Fonction pour remplacer des motifs de mots par d'autre
    Par keketteboy dans le forum VBA Word
    Réponses: 2
    Dernier message: 22/08/2008, 15h16
  2. Réponses: 1
    Dernier message: 03/07/2008, 20h48
  3. Meilleure méthode pour faire des coins arrondis
    Par kodokan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 17/09/2006, 15h08
  4. Parser une page pour remplaçer des mots par d'autres
    Par HALOMOTO dans le forum Langage
    Réponses: 13
    Dernier message: 13/07/2006, 22h58
  5. Méthode pour traiter des commandes
    Par Kr00pS dans le forum C
    Réponses: 17
    Dernier message: 15/06/2006, 17h58

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