# 121a - TD5 - AM 05-03-21 ```cpp= //EXERCICE 2: // retrancher : void retrancher (int& a, int& b) { a = a - b; } void retrancher (int& a, int b) { a = a - b; } void retrancher (int &a, int b) {a -= b;} // qu'est-ce qui se passe si a > b ? on ne devrait pas //ne pas retrancher dans ce cas ? // je ne comprends pas l'intérêt de la fonction retrancher // si c'est juste une soustraction et comme on va faire un modulo avec je pensais // qu'il fallait faire un test // modulo: int modulo(int a, int b) { while(a >= b) retrancher(a, b); return a; } //il faut verifier que b != 0 sinon c'est une boucle infini non ? // on le fait dans main // main: int main() { do { std::cout << "Entrez un premier entier positif a:" << std::endl; std::cin >> a; } while(a <= 0); do { std::cout << "Entrez un deuxième entier positif b:" << std::endl; std::cin >> b; } while(b <= 0); std::cout << "a % b = " << modulo(a, b) << std::endl; return 0; } int main () { int u,v, m; do { cout << "Entrer 2 valeurs positives u, v telles que u>=v" <<endl; cin >> u >> v; } while( (v <= 0) or (u<v)); m = modulo(u,v); cout << "le modulo de " << u << " par " << v << " est " << m << endl; return 0; } //fonctions qui peuvent prendre en compte des négatifs : void retrancher(int &a, int b) { (abs(a - b) < abs(a)) ? a -= b : a += b; } int modulo(int a, int b){ while(abs(a) >= abs(b)) retrancher(a, b); return a; } //Exercice 4 #include <iostream> #include <cmath> #include <string.h> #include <vector> using namespace std; struct Fourniture{ string libelle; float prix; int code, nbAchat, nbVendu; }; void litFourniture(Fourniture &f){ cout << "libellé : "; cin >> f.libelle; cin >> f.prix; cin >> f.code; cin >> f.nbAchat; cin >> f.nbVendu; } void litFourniture(Fourniture &f){ cout << "entrez le code, le libelle et le prix "<< endl; cin >> f.code >> f.libelle >> f.prix ; do { cout << "nb achetes et nb vendus " << endl; cin >> f.nbAchat >> f.nbVendu ; } while ((f.nbAchat < 0) or (f.nbVendu > f.nbAchat) ); } void ecritFourniture(Fourniture f){ cout << "la fourniture " << f.libelle << " de code " << f.code << " commandee " << f.nbAchat <<" fois, a ete vendue " << f.nbVendu <<" fois" <<endl; } void maj(Fourniture &f, int n){f.nbVendu+=n; } void stock(Fourniture f,int &n, float &montant){ n = f.nbAchat-f.nbVendu; montant = n * f.prix; } Fourniture f1= {"ciseaux", 1.10, 101, 20, 4}; Fourniture f2= {"stylo", 0.50,1024, 20, 7}; void ajouteAuCatalogue(vector<Fourniture> &c, Fourniture f){ c.push_back(f); } void bilan(vector<Fourniture> c){ Fourniture f; int n; float montant; float vtotale=0.0; for(int i = 0; i < c.size(); i++){ f = c[i]; cout << f.libelle; stock(f, n, montant); cout << "nombre d'items : " << n << " " << montant << " euros"; vtotale += montant; } cout << " Valeur totale " << vtotale << "euros" << endl; } void retireCatalogue(vector<Fourniture> &c, int code){ } void bilan(vector<Fourniture> c) { float vtotale = 0; for(Fourniture f : vector<Fourniture> c) { std::cout << "libellé : " << f.libelle << std::endl; int n; float montant; stock(f, n, montant) std::cout << "stock : " << n << std::endl; std::cout << "montant : " << montant << std::endl; vtotale += montant; } std::cout << "valeur totale : " << vtotale << std::endl; } void retireCatalogue(vector<Fourniture> &c, int code){ int i=0; while (i <c.size() and c[i].code != code) {i++;} // ici i vaut soit la valeur de la Fourniture dans c ; soit c.size() if (i==c.size()) { cout << "la fourniture de code " << code << "n existe pas "; } else { for(int j=i; j+1<c.size(); j++) c[j] = c[j+1]; c.pop_back(); } } void retire catalogue(vector<Fourniture> &c, int code) { for(size_t i = 0; i < c.size(); i++) if(c[i].code == code) c.erase(i) } typedef vector<Fourniture> Catalogue; void demoAffiche(){ ecritFourniture(f1); } void demoMaj(){ maj(f1,2); ecritFourniture(f1); } void demoStock(){ float m;int n; stock(f1,n,m); cout <<"stock de f1:" << n << " en euro, ca represente " << m << endl; } void demoBilan(){ vector<Fourniture> c; ajouteAuCatalogue(c, f1); ajouteAuCatalogue(c, f2); bilan(c); } void demoRetire(){ vector<Fourniture> c; ajouteAuCatalogue(c, f1); ajouteAuCatalogue(c, f2); bilan(c); retireCatalogue(c, 1024); bilan(c); } int main(){ demoAffiche(); demoMaj() ; demoStock() ; demoRetire(); return 0; } ```