---
# System prepended metadata

title: 121a - TD5 - AM 05-03-21

---

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



```


