| Corrigé de la séance d'exercices 4, Programmation I |
| Sciences et Technologies du Vivant, Semestre 1 |
Afin d'écrire le programme en n'utilisant que quatre instructions
if, il faut les imbriquer. N'oubliez pas également
d'employer else.
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int x, y ,z;
cout << "Entrez une premiere valeur: ";
cin >> x;
cout << "Entrez une deuxieme valeur: ";
cin >> y;
cout << "Entrez une troisieme valeur: ";
cin >> z;
if (x == y) {
if (y == z)
cout << "Les trois valeurs sont egales." << endl;
else
cout << "Seules les deux premieres valeurs sont egales." << endl;
}
else {
if (x == z)
cout << "Seules la premiere et la troisieme valeurs sont egales." << endl;
else {
if (y == z)
cout << "Seules les deux dernieres valeurs sont egales." << endl;
else
cout << "Les trois valeurs sont differentes. " << endl;
}
}
return 0;
}
Pour obtenir une solution n'utilisant que 4 instructions if,
il faut imbriquer les if. De plus, il faut utiliser
intelligemment l'instruction else. Par exemple, on écrira
if (chapeau) {
// instructions
}
else {
// autres instructions
}
et non pas
if (chapeau) {
// instructions
}
if (!chapeau) {
// autres intstructions
}
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
bool moustaches, lunettes, chapeau, homme;
cout << "Choisissez un personnage: Mlle Rose, le Professeur Violet, le Colonel Moutarde, le Reverend Olive et Mme Leblanc." << endl << endl;
cout << "Votre personnage a-t-il des moustaches? (1: oui, 0: non) ";
cin >> moustaches;
cout << "Votre personnage porte-t-il des lunettes? (1: oui, 0: non) ";
cin >> lunettes;
cout << "Votre personnage porte-t-il un chapeau? (1: oui, 0: non) ";
cin >> chapeau;
cout << "Est-ce que votre personnage est un homme? (1: oui, 0: non) ";
cin >> homme;
if (chapeau)
cout << "Vous avez choisi le Professeur Violet." << endl;
else
if (!lunettes)
cout << "Vous avez choisi Mlle Rose." << endl;
else
if (moustaches)
cout << "Vous avez choisi le Colonel Moutarde." << endl;
else
if (homme)
cout << "Vous avez choisi le Reverend Olive." << endl;
else
cout << "Vous avez choisi Mme Leblanc." << endl;
return 0;
}
Dans cette solution, on s'assure que l'utilisateur entre bien une réponse correcte. Tant que sa réponse est erronnée (autre que 0 ou 1), on l'interroge à nouveau.
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int moustaches, lunettes, chapeau, homme;
cout << "Choisissez un personnage: Mlle Rose, le Professeur Violet, le Colonel Moutarde, le Reverend Olive et Mme Leblanc." << endl << endl;
do {
cout << "Est-ce que votre personnage est un homme? (1: oui, 0: non) ";
cin >> homme;
} while (homme != 0 && homme != 1);
if (homme) {
do {
cout << "Votre personnage a-t-il des moustaches? (1: oui, 0: non) ";
cin >> moustaches;
} while (moustaches != 0 && moustaches != 1);
if (moustaches)
cout << "Vous avez choisi le Colonel Moutarde." << endl;
else {
do {
cout << "Votre personnage porte-t-il un chapeau? (1: oui, 0: non) ";
cin >> chapeau;
} while (chapeau != 0 && chapeau != 1);
if (chapeau)
cout << "Vous avez choisi le Professeur Violet." << endl;
else
cout << "Vous avez choisi le Reverend Olive." << endl;
}
} else {
do {
cout << "Votre personnage porte-t-il des lunettes? (1: oui, 0: non) ";
cin >> lunettes;
} while (lunettes != 0 && lunettes != 1);
if (!lunettes)
cout << "Vous avez choisi Mlle Rose." << endl;
else
cout << "Vous avez choisi Mme Leblanc." << endl;
}
return 0;
}
Il existe plusieurs manières de modifier l'exercice de la série
3 pour obtenir le résultat voulu. Les 3 sortes de boucles
(for, while et do ... while) peuvent être
utilisées. Cependant, la boucle do ... while est la plus
adaptée dans ce cas. Elle permet d'executer une première fois le
contenu de la boucle, avant de faire un test. Ceci correspond
exactement au scénario désiré: on demande d'abord un nombre
à l'utilisateur (première exécution), ensuite on regarde si ce
nombre est correct (test) et on redemande un nouveau nombre
(deuxième exécution) si ce n'est pas le cas.
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char **argv)
{
int random, guess;
int trials = 0;
srand(time(0));
random = rand() % 11; // choisir un nombre aleatoire entre 0 et 10
cout << "J'ai choisi un nombre entre 0 et 10. Essayez de le deviner." << endl;
do {
cout << "Entrez un nombre entre 0 et 10: ";
cin >> guess;
if (guess < 0 || guess > 10) // nombre en dehors des bornes
cout << "Non! " << guess << " n'est pas un nombre entre 0 et 10" << endl;
else {
if (random < guess)
cout << "Mon nombre est plus petit." << endl;
else if (random > guess)
cout << "Mon nombre est plus grand." << endl;
else
cout << "Exact! Mon nombre etait bien " << random << endl;
trials++;
}
cout << trials << " essais" << endl << endl;
} while (guess != random && trials < 5);
if (guess != random) { // echec
cout << "Vous avez effectue 5 essais sans parvenir a deviner." << endl;
cout << "Mon nombre etait: " << random << endl;
}
return 0;
}
Notez que lorsque l'utilisateur entre un nombre en dehors de
l'intervalle
, on n'incremente pas le compteur
trials. On aurait également pu coder ceci de manière
similaire à l'exercice précédent:
do {
cout << "Entrez un nombre entre 0 et 10: ";
cin >> guess;
} while (guess >= 0 && guess <= 10);
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int n;
int i = 0;
cout << "Entrer le premier nombre de la suite de Syracuse: ";
cin >> n;
while (n > 1) {
if (n % 2 == 0)
n /= 2;
else
n = n * 3 + 1;
i++;
cout << i << ": " << n << endl;
}
cout << "Suite terminee en " << i << " iterations." << endl;
return 0;
}
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
for (int j=1; j<=10; j++) {
int i = 0;
int n = j;
while (n > 1) {
if (n % 2 == 0)
n /= 2;
else
n = n * 3 + 1;
i++;
}
cout << n << ": " << i << " iterations." << endl;
}
return 0;
}
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
bool au_moins_un_nombre_superieur_a_90;
bool aucun_nombre_inferieur_a_10;
srand(time(0));
au_moins_un_nombre_superieur_a_90 = false;
aucun_nombre_inferieur_a_10 = true;
for(int i = 0; i < 10; i++) {
int r = rand() % 100;
cout << r << ", ";
// version avec des if:
if (r > 90)
au_moins_un_nombre_superieur_a_90 = true;
if (r < 10)
aucun_nombre_inferieur_a_10 = false;
// version sans les if:
au_moins_un_nombre_superieur_a_90 = au_moins_un_nombre_superieur_a_90 || (r > 90);
aucun_nombre_inferieur_a_10 = aucun_nombre_inferieur_a_10 && (r >= 10);
}
cout << endl;
if (au_moins_un_nombre_superieur_a_90)
cout << "Au moins un des nombres est superieur a 90." << endl;
if (aucun_nombre_inferieur_a_10)
cout << "Aucun nombre n'est inferieur a 10." << endl;
}
Le programme sera structuré comme suit: une première partie affichera les options disponibles à l'utilisateur et lira son choix. Il faut bien sûr avoir préalablement déclaré une variable qui contiendra le choix de l'utilisateur.
Ensuite, des instructions if permettront de tester la valeur
du choix et de calculer différents volumes en fonction de ce choix.
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int choice;
cout << "De quelle primitive voulez-vous calculer le volume ? Tapez:" << endl;
cout << "1 pour une sphere" << endl;
cout << "2 pour un parallelepipede rectangle" << endl;
cout << "3 pour un cylindre" << endl;
cin >> choice;
if (choice == 1) {
float r;
cout << "Entrez le rayon de la sphere: ";
cin >> r;
cout << "Le volume de la sphere est " << 4/4*3.14159*r*r*r << endl;
}
if (choice == 2) {
float x, y, z;
cout << "Entrez la hauteur du parallelepipede: ";
cin >> z;
cout << "Entrez la largeur du parallelepipede: ";
cin >> y;
cout << "Entrez la longeur du parallelepipede: ";
cin >> x;
cout << "Le volume du parallelepipede est " << x * y * z << endl;
}
if (choice == 3) {
float r, h;
cout << "Entrez le rayon du cylindre: ";
cin >> r;
cout << "Entrez la hauteur du cylindre: ";
cin >> h;
cout << "Le volume du cylindre est " << r * r * 3.14159 * h << endl;
}
return 0;
}
On peut également utiliser l'instruction switch:
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int choice;
cout << "De quelle primitive voulez-vous calculer le volume ? Tapez:" << endl;
cout << "1 pour une sphere" << endl;
cout << "2 pour un parallelepipede rectangle" << endl;
cout << "3 pour un cylindre" << endl;
cin >> choice;
switch(choice) {
case 1:
{ // Il faut ici utiliser un bloc { } pour pouvoir declarer r dans le case.
float r;
cout << "Entrez le rayon de la sphere: ";
cin >> r;
cout << "Le volume de la sphere est " << 4/4*3.14159*r*r*r << endl;
break;
}
case 2:
{ // Meme chose pour pouvoir declarer x, y et z.
float x, y, z;
cout << "Entrez la hauteur du parallelepipede: ";
cin >> z;
cout << "Entrez la largeur du parallelepipede: ";
cin >> y;
cout << "Entrez la longeur du parallelepipede: ";
cin >> x;
cout << "Le volume du parallelepipede est " << x * y * z << endl;
break;
}
case 3:
{ // Meme chose pour pouvoir declarer r et h.
float r, h;
cout << "Entrez le rayon du cylindre: ";
cin >> r;
cout << "Entrez la hauteur du cylindre: ";
cin >> h;
cout << "Le volume du cylindre est " << r * r * 3.14159 * h << endl;
break;
}
default:
cout << "Seulement 1, 2 ou 3 sont permis." << endl;
}
return 0;
}
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char **argv) {
int original, inverse, i;
cout << "Entrez un entier positif: ";
cin >> original;
inverse = 0;
i = original;
while (i > 0) {
inverse = inverse * 10 + (i % 10);
i /= 10;
}
cout << "Inverse de " << original << " : " << inverse << endl;
return 0;
}