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
    Membre averti
    �tudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    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 confirm�
    Inscrit en
    Avril 2002
    Messages
    180
    D�tails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 180
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    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 confirm�
    Avatar de Mat.M
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    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 539
    Par d�faut
    Pas mieux que Loulou24 ( std::map) mais ue BDD SQL genre MySQL j e crois serais plus adapt�

  5. #5
    Membre averti
    �tudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    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
    Invit�
    Invit�(e)
    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 confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    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
    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...

  8. #8
    Membre averti
    �tudiant
    Inscrit en
    Octobre 2006
    Messages
    46
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 46
    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