Salut ! On m'a déjà aidé un peu sur cet exercice (j'avais une sortie foireuse) et maintenant, je bute sur l'affichage, je pense devoir utiliser un vector pour recette, mais je ne vois pas du tout comment.
Quelqu'un pourrait-il m'aider ?
Voici l'énoncé, j'ai peut-être mal compris une instruction (notamment la partie des .tostring...)
_25969c922aac5c4bf23d7a06fc79f599_asgnmt-05-cpp-fr.pdf

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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
#include <vector>
#include <sstream>
 
using namespace std;
 
/*****************************************************
  * Compléter le code à partir d'ici
 *****************************************************/
class Produit{
protected:
    string nom;
    string unite;
public:
    Produit(string nom="",string unite=""): nom(nom), unite(unite) {} //initialize and assignement's difference
    string getNom() const{return nom;}
    string getUnite() const{return unite;}
 
    virtual string toString() const{return nom;}
 
    virtual const Produit* adapter(double n) const{
        return this;
    }
};
 
class Ingredient{
private:
    Produit p;//Changed to refernce
    double quantite;
 
public:
    Ingredient(Produit p,double quantite): p(p),quantite(quantite) {}
 
    Produit const & getProduit() const{return p;}//return une reference??
    double getQuantite() const{return quantite;}
 
    string descriptionAdaptee() const{
        stringstream ss;
        const Produit* ptr = p.adapter(quantite);
        ss << fixed << quantite << " " << p.getUnite() << " de " << ptr->toString();
        return ss.str();
    }
};
 
class Recette{
private:
    vector<Ingredient> lst;
    string nom;
    double nbFois_;
public:
    Recette(string nom, double nbFois_ = 1.0): nom(nom), nbFois_(nbFois_) {}
 
    void ajouter( Produit& p, double quantite ){
        Ingredient a(p, quantite*nbFois_);
        lst.push_back(a);
    }
 
    double quantiteTotale(string nom) const{
        for (auto const i : lst){
            if (i.getProduit().getNom() == nom){return i.getQuantite();}
        }return 0.0;
    }
 
    const Recette adapter(double n) const{
        double newNbFois = nbFois_ * n;
        Recette x(nom, newNbFois);
        for (auto const i : lst){
            const Produit & tmp = i.getProduit();
            x.lst.push_back(Ingredient(tmp,i.getQuantite()*n));//get the thing the pointer points at.
        }
        return x;
    }
 
    virtual string toString() const{
        stringstream ss;
        //for (vector<Ingredient>::size_type j=0;j<lst.size();j++){
            ss << " Recette \"" << nom << "\" x " << nbFois_<< ":\n";
            unsigned int i = 1;
            for (auto const & ingredient : lst){
                ss << " " << i << ". " << ingredient.descriptionAdaptee();//getProduit().toString();
                if (i != lst.size()){
                    ss << endl;
                }
                i += 1;
            }
        //    ss << endl;
        //}
        string s = ss.str();
        return s;
    }
 
};
 
class ProduitCuisine: public Produit{
private:
    Recette r;
public:
    ProduitCuisine(string nom): Produit(nom,"portion(s)"),r(nom) {}
 
    void ajouterARecette(Produit& produit, double quantite){
        r.ajouter(produit,quantite);
    }
    const Produit* adapter(double n) const override{
        ProduitCuisine *p = new ProduitCuisine(nom);
        p->r = r.adapter(n);
        return this;
    }
 
    string toString() const override{
        stringstream ss;
        ss << Produit::toString() << "\n" << r.toString();
        return ss.str();
    }
 
};
/*******************************************
 * Ne rien modifier après cette ligne.
 *******************************************/
void afficherQuantiteTotale(const Recette& recette, const Produit& produit)
{
  string nom = produit.getNom();
  cout << "Cette recette contient " << recette.quantiteTotale(nom)
       << " " << produit.getUnite() << " de " << nom << endl;
}
 
int main()
{
  // quelques produits de base
  Produit oeufs("oeufs");
  Produit farine("farine", "grammes");
  Produit beurre("beurre", "grammes");
  Produit sucreGlace("sucre glace", "grammes");
  Produit chocolatNoir("chocolat noir", "grammes");
  Produit amandesMoulues("amandes moulues", "grammes");
  Produit extraitAmandes("extrait d'amandes", "gouttes");
 
  ProduitCuisine glacage("glaçage au chocolat");
  // recette pour une portion de glaçage:
  glacage.ajouterARecette(chocolatNoir, 200);
  glacage.ajouterARecette(beurre, 25);
  glacage.ajouterARecette(sucreGlace, 100);
  cout << glacage.toString() << endl;
 
  ProduitCuisine glacageParfume("glaçage au chocolat parfumé");
  // besoin de 1 portions de glaçage au chocolat et de 2 gouttes
  // d'extrait d'amandes pour 1 portion de glaçage parfumé
 
  glacageParfume.ajouterARecette(extraitAmandes, 2);
  glacageParfume.ajouterARecette(glacage, 1);
  cout << glacageParfume.toString() << endl;
 
  Recette recette("tourte glacée au chocolat");
  recette.ajouter(oeufs, 5);
  recette.ajouter(farine, 150);
  recette.ajouter(beurre, 100);
  recette.ajouter(amandesMoulues, 50);
  recette.ajouter(glacageParfume, 2);
 
  cout << "===  Recette finale  =====" << endl;
  cout << recette.toString() << endl;
  afficherQuantiteTotale(recette, beurre);
  cout << endl;
 
  // double recette
  Recette doubleRecette = recette.adapter(2);
  cout << "===  Recette finale x 2 ===" << endl;
  cout << doubleRecette.toString() << endl;
 
  afficherQuantiteTotale(doubleRecette, beurre);
  afficherQuantiteTotale(doubleRecette, oeufs);
  afficherQuantiteTotale(doubleRecette, extraitAmandes);
  afficherQuantiteTotale(doubleRecette, glacage);
  cout << endl;
 
  cout << "===========================\n" << endl;
  cout << "Vérification que le glaçage n'a pas été modifié :\n";
  cout << glacage.toString() << endl;
 
  return 0;
}
La sortie correspondante :
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
glaçage au chocolat
 Recette "glaçage au chocolat" x 1:
 1. 200.000000 grammes de chocolat noir
 2. 25.000000 grammes de beurre
 3. 100.000000 grammes de sucre glace
glaçage au chocolat parfumé
 Recette "glaçage au chocolat parfumé" x 1:
 1. 2.000000 gouttes de extrait d'amandes
 2. 1.000000 portion(s) de glaçage au chocolat
===  Recette finale  =====
 Recette "tourte glacée au chocolat" x 1:
 1. 5.000000  de oeufs
 2. 150.000000 grammes de farine
 3. 100.000000 grammes de beurre
 4. 50.000000 grammes de amandes moulues
 5. 2.000000 portion(s) de glaçage au chocolat parfumé
Cette recette contient 100 grammes de beurre
 
===  Recette finale x 2 ===
 Recette "tourte glacée au chocolat" x 2:
 1. 10.000000  de oeufs
 2. 300.000000 grammes de farine
 3. 200.000000 grammes de beurre
 4. 100.000000 grammes de amandes moulues
 5. 4.000000 portion(s) de glaçage au chocolat parfumé
Cette recette contient 200 grammes de beurre
Cette recette contient 10  de oeufs
Cette recette contient 0 gouttes de extrait d'amandes
Cette recette contient 0 portion(s) de glaçage au chocolat
 
===========================
Vérification que le glaçage n'a pas été modifié :
glaçage au chocolat
 Recette "glaçage au chocolat" x 1:
 1. 200.000000 grammes de chocolat noir
 2. 25.000000 grammes de beurre
 3. 100.000000 grammes de sucre glace
Sachant que je DOIS obtenir ceci :
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
 
glaçage au chocolat
Recette "glaçage au chocolat" x 1:
1. 200.000000 grammes de chocolat noir
2. 25.000000 grammes de beurre
3. 100.000000 grammes de sucre glace
glaçage au chocolat parfumé
Recette "glaçage au chocolat parfumé" x 1:
1. 2.000000 gouttes de extrait d’amandes
2. 1.000000 portion(s) de glaçage au chocolat
Recette "glaçage au chocolat" x 1:
1. 200.000000 grammes de chocolat noir
2. 25.000000 grammes de beurre
3. 100.000000 grammes de sucre glace
=== Recette finale =====
Recette "tourte glacée au chocolat" x 1:
1. 5.000000 de oeufs
2. 150.000000 grammes de farine
3. 100.000000 grammes de beurre
4. 50.000000 grammes de amandes moulues
5. 2.000000 portion(s) de glaçage au chocolat parfumé
Recette "glaçage au chocolat parfumé" x 2:
1. 4.000000 gouttes de extrait d’amandes
2. 2.000000 portion(s) de glaçage au chocolat
Recette "glaçage au chocolat" x 2:
1. 400.000000 grammes de chocolat noir
2. 50.000000 grammes de beurre
3. 200.000000 grammes de sucre glace
Cette recette contient 150 grammes de beurre
=== Recette finale x 2 ===
Recette "tourte glacée au chocolat" x 2:
1. 10.000000 de oeufs
2. 300.000000 grammes de farine
3. 200.000000 grammes de beurre
4. 100.000000 grammes de amandes moulues
6
5. 4.000000 portion(s) de glaçage au chocolat parfumé
Recette "glaçage au chocolat parfumé" x 4:
1. 8.000000 gouttes de extrait d’amandes
2. 4.000000 portion(s) de glaçage au chocolat
Recette "glaçage au chocolat" x 4:
1. 800.000000 grammes de chocolat noir
2. 100.000000 grammes de beurre
3. 400.000000 grammes de sucre glace
Cette recette contient 300 grammes de beurre
Cette recette contient 10 de oeufs
Cette recette contient 8 gouttes de extrait d’amandes
Cette recette contient 4 portion(s) de glaçage au chocolat
===========================
Vérification que le glaçage n’a pas été modifié :
glaçage au chocolat
Recette "glaçage au chocolat" x 1:
1. 200.000000 grammes de chocolat noir
2. 25.000000 grammes de beurre
3. 100.000000 grammes de sucre glace
Je dois donc être en mesure de répéter les différentes recettes ... Seulement je n'ai de vecteurs que pour les ingrédients... Je bloque encore =/
J'ai essayé d'utiliser un vector<Recette> mais ça me plante d'autres fonctions qui utilisait Recette r

Merci infiniment à ceux qui m'aideront à corriger ce code, juste pour situer, je ne suis pas programmeur.
Je dois simplement valider cette formation pour confirmer des acquis Erasmus non validé (...9/20, haha) et comme vous le savez surement, en Erasmus on voit des choses nouvelles pour le côté découverte.. J'ai choppé le sujet le plus difficile, c'était le jeu !