#include <cstdlib>
#include <iostream>

using namespace std;
void additionEnDur();
void additionAvecSaisieClavier();
void sommeNpremiersEntiers();
void max2();
void divisiblePar2Et3();
void decompositionEnFacteursPremiers();

int main()
{
    int choix;
    
    
    do {
       cout << "1 ..................... Addition en dur" << endl;
       cout << "2 ..... Addition avec saisie au clavier" << endl;
       cout << "3 ........ Somme des n premiers entiers" << endl;
       cout << "4 ........... Le maximum de deux nombre" << endl;
       cout << "5 ................ Divisible par 2 et 3" << endl;
       cout << "6 .. Décomposition en facteurs premiers" << endl;
       cout << "100 ............................ Sortir" << endl;
       cout << endl << "Faites votre choix ";
       cin >> choix;
       switch(choix) {
          case 1 :
               additionEnDur();
               break;
          case 2 :
               additionAvecSaisieClavier();
               break;
          case 3 :
               sommeNpremiersEntiers();
               break;
          case 4 :
               max2();
               break;
          case 5 :
               divisiblePar2Et3();
               break;
          case 6 :
               decompositionEnFacteursPremiers();
               break;
          case 100 :
               break;
          default :
               cout << "Mauvais choix " << endl;
               break;
       } 
       cout << endl;
    } while (choix != 100);   
    system("PAUSE");
    return EXIT_SUCCESS;
}

void additionEnDur() {
    // a, b, c : Entier
    int a, b, c;
    
    // a <-- 2
    a = 2;
    
    // b <-- 4
    b = 4;
    
    // c <-- a + b
    c = a + b;
    
    // ecrire (a & ' + ' & b & ' = ' & c)
    cout << a << " + " << b << " = " << c << endl;
}

void additionAvecSaisieClavier() {
    // a, b, c : Entier
    int a, b, c;
    
    // ecrire('Donner a ')
    cout << "Donner a ";
    // lire(a)
    cin >> a;
    
    // ecrire('Donner b ')
    cout << "Donner b ";
 
    // lire(b)
    cin >> b;
    
   // c <-- a + b
    c = a + b;
    
    // ecrire (a & ' + ' & b & ' = ' & c)
    cout << a << " + " << b << " = " << c << endl;
}

void sommeNpremiersEntiers() {
    
    // Le pseudo code
    /*    
    res, i, n : Entier
    
    ecrire('Donner la valeur de n ')
    lire(n)
    res <-- 0
    Pour i <-- 1 à n Pas 1
         res <-- res + i
    Fin Pour
    ecrire('la sommme des ', n , 
               ' premiers entiers vaut ',res)
                
    */
    
    // Traduction en C++
    int res, i, n;
    
    cout << "Donner la valeur de n ";
    cin >> n;
    res = 0;
    for(i = 1; i <= n; i = i + 1)  
    {
       res = res + i;         
    }
    cout << "la sommme des " << n 
         << " premiers entiers vaut " << res 
         << endl;
    
}

void max2() {
    // Le pseudo code
    /*
    a, b, c : Entier
    
    ecrire('Donner a ')
    lire(a)
    ecrire('Donner b ')
    lire(b)
    Si a < b Alors
       c <-- b
    Sinon 
       c <-- a
    Fin Si
    ecrire('Le max de ',a, ' et ', b, '  vaut ',c)
    */
    
    // Traduction en C++
    int a, b, c;
    
    cout << "Donner a ";
    cin >> a;
    cout << "Donner b ";
    cin >> b;
    if(a < b)
    {
         c = b;
    }
    else
    {
        c = a;
    }
    cout << "La max de " << a << " et " <<
    b << " vaut " << c << endl;
}

void divisiblePar2Et3() {
     // Le pseudo code
    /* 
    a : Entier

    ecrire('Donner la valeur de a ')
    lire(a)
    
    Si ((a mod 2) = 0) et ((a mod 3) = 0) Alors
       ecrire(a, ' est divisible par 2 et 3')
    Sinon 
          ecrire(a, ' n'est pas divisible par 2 et 3 simultanément')
    Fin Si
    */

    // Traduction en C++
    int a;

    cout << "Donner la valeur de a ";
    cin >> a;
    if( ((a % 2) == 0) && ((a % 3) == 0))
    {
       cout << a << " est divisible par 2 et 3" << endl; 
    }
    else
    {
        cout << a << " n'est pas divisible par 2 et 3 simultanément" << endl; 
    }
}

void decompositionEnFacteursPremiers() {
     // 60 = 2 * 2 * 3 * 5
    
    
    // Traduction en C++
    int a, dividende, quotient, reste;
    cout << "Donner a ";
    cin >> a;
    
    quotient = 2;
    dividende = a;
    reste = dividende % quotient;
    while( dividende > 1) 
    {
           cout << "dividende " << dividende 
           << "  quotient " << quotient << endl; 
           if(reste == 0)
           {
                cout << quotient 
                << " * " << endl;
                dividende = 
                          dividende / quotient; 
           }
           else 
           {
                quotient = quotient + 1;
           }
           reste = dividende % quotient;
    }
}
