Sorell Stratège
Nombre de messages : 521 Localisation : Quel part où le sang coule. Date d'inscription : 01/05/2008
Feuille de personnage Surnom dans la team: Sénéchal Noir Victoire/défaite: (0/0)
| Sujet: TP1 Exercice 6 - Choix entre les exercices Lun 26 Nov - 17:08 | |
| - Code:
-
/** * * @file ChoixEntreExos.cxx * * @author D. Mathieu * * @date 07/12/2011 * **/ #include <iostream> #include <iomanip> // setw() #include <string>
using namespace std;
namespace { void Bonjour (void) { cout << "Bonjour" << endl;
} // Bonjour()
void _10PremiersEntiers (void) { cout << "Les dix premiers entiers naturels : " << endl;
cout << 0; for (unsigned i = 1; i <= 9; ++i) { cout << '\t' << i; } cout << endl;
} // _10PremiersEntiers()
void _200PremiersEntiers (void) { cout << "Les 200 premiers entiers naturels à 10 par ligne" << endl;
unsigned ValDebutLigne = 0;
for (unsigned NbLignes = 0; NbLignes < 20; NbLignes = NbLignes + 1) { cout << setw (4) << ValDebutLigne;
for (unsigned ValAffichee = ValDebutLigne + 1; ValAffichee < ValDebutLigne + 10; ValAffichee = ValAffichee + 1) { cout << '\t' << setw (4) << ValAffichee; } cout << endl; ValDebutLigne = ValDebutLigne + 10; }
} // _200PremiersEntiers()
unsigned SaisirEntierPositif (string Invite, string MsgErr) { unsigned N;
for ( ; ; ) { cout << Invite; cin >> N; if (N > 0) break; cout << MsgErr << endl; } return N;
} // SaisirEntiePositif()
void AffichTabInt (unsigned Tableau [], unsigned NbElem, unsigned NbParLigne, unsigned Width, char Separateur) { // Affichage du tableau
unsigned RgFirstElem = 0; unsigned NbLignesCompletes = NbElem / NbParLigne;
// Affichage de toutes les lignes complètes
for (unsigned NbLignes = 0; NbLignes < NbLignesCompletes; NbLignes = NbLignes + 1) { cout << setw (Width) <<Tableau [RgFirstElem];
// Affichage d'une ligne (forcément complète)
for (unsigned RgElem = RgFirstElem + 1; RgElem < RgFirstElem + NbParLigne; RgElem = RgElem + 1) { cout << Separateur << setw (Width) << Tableau [RgElem]; } cout << endl; RgFirstElem = RgFirstElem + NbParLigne; } // Affichage de la dernière ligne SI ELLE EST INCOMPLETE
if (RgFirstElem < NbElem) { for (unsigned RgElem = RgFirstElem; RgElem < NbElem - 1; RgElem = RgElem + 1) { cout << setw (Width) <<Tableau [RgElem] << Separateur; } // Affichage du dernier nombre de la dernière ligne
cout << setw (Width) <<Tableau [NbElem - 1] << endl; }
} // AffichTabInt()
void SP_NPremiersEntiers (void) { unsigned N = SaisirEntierPositif ( "Taper le nombre d'entiers voulus, " "puis <entrée> : ", "Le nombre doit être POSITIF !!!\n");
unsigned NbParLigne = SaisirEntierPositif ( "Taper le nombre de valeurs par ligne, " "puis <entrée> : ", "Le nombre doit être POSITIF !!!\n");
unsigned Largeur = SaisirEntierPositif ( "Taper la largeur d'affichage, " "puis <entrée> : ", "Le nombre doit être POSITIF !!!\n");
cout << "Taper le caractère de séparation " "puis <entrée> : "; char Separ; cin >> Separ;
unsigned TabInt [N];
// Génération du tableau
for (unsigned i = 0; i < N; i = i + 1) { TabInt [i] = i; } // Affichage du tableau
cout << "Les " << N << " premiers entiers naturels à " << NbParLigne << " par ligne" << endl;
AffichTabInt (TabInt, N, NbParLigne, Largeur, Separ);
} // SP_NPremiersEntiers()
void ClearScreen (void) { cout << "\033[2J\033[1;1H";
} // ClearScreen()
char ChoixDansMenu (const string & Invite) { ClearScreen();
cout << Invite;
char Choix; cin >> Choix;
ClearScreen();
return Choix;
} // ChoixDansMenu()
void Pause (void) { cout << "\n\n\nPour continuer, taper un caractère non espace " "suivi de <entrée> "; char Bidon; cin >> Bidon;
} // Pause()
void TraiterCommande (char Cmd) { switch (Cmd) { case 'A' : case 'a' : Bonjour(); break;
case 'B' : case 'b' : _10PremiersEntiers(); break;
case 'C' : case 'c' : _200PremiersEntiers(); break;
case 'D' : case 'd' : SP_NPremiersEntiers(); break;
default : cout << "Commande " << Cmd << " invalide"; }
} // TraiterCommande()
void ChoixEntreExos (void) { const string KInvite ( "A : Bonjour\n" "B : Les dix premiers entiers naturels\n" "C : Les 200 premiers entiers naturels à 10 par ligne\n" "D : Les N premiers entiers naturels\n" "Q : Quitter\n\n" "Votre choix (suivi de <entrée>) : ");
for ( ; ; ) { char Commande = ChoixDansMenu (KInvite);
if ('Q' == Commande) break; if ('q' == Commande) break;
TraiterCommande (Commande); Pause (); }
} // ChoixEntreExos()
} // namespace
int main () { ChoixEntreExos();
return 0;
} // main()
| |
|