# 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;
}
```