| Corrigé de la séance d'exercices 3, Programmation I |
| Sciences et Technologies du Vivant, Semestre 1 |
rand() retourne un entier entre 0 et
RAND_MAX, où RAND_MAX est un très grand nombre
entier. La manière la plus simple d'obtenir un nombre aléatoire
entre 0 et 9, consiste à prendre le reste de la division entière
par 10 de l'entier retournè par rand(). Comme vous le
savez, le reste de la division entière par rand() en float et
qu'on le divise par RAND_MAX (i.e. la plus grande valeur
possible), le résultat sera un nombre flottant compris entre 0 et
1. Pour obtenir un flottant entre 0 et 10, il suffit simplement de
multiplier ce résultat par 10.
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char **argv)
{
srand(time(NULL));
// entiers entre 0 et 9
cout << rand() % 10 << endl;
// entiers entre 1 et 10
cout << 1 + (rand() % 10) << endl;
// flottants entre 0 et 10
// rand(): entier entre 0 et RAND_MAX
// float(rand()): flottant entre 0 et RAND_MAX
// float(rand()) / RAND_MAX: flottant entre 0 et 1
cout << float(rand()) / RAND_MAX * 10 << endl;
// flottants entre -1 et 1
cout << (float(rand()) / RAND_MAX * 2) - 1 << endl;
return 0;
}
a) Notez l'usage de < ``strictement plus petit'' et <= ``plus
petit ou egal''. N'oubliez pas la différence entre l'affectation (=)
et l'égalité (==). Plusieurs conditions peuvent être testées
dans une seule instruction if, à l'aide des opérateurs &&
(et) et || (ou). Pour tester si un nombre est pair, il
suffit de vérifier s'il est divisible par 2, i.e. si le reste de sa division
entière par 2 est 0.
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int x, y;
cout << "Entrez x: ";
cin >> x;
cout << "Entrez y: ";
cin >> y;
if (x == 2 * y)
cout << "x = 2y" << endl;
if (x % 2 == 0)
cout << "x est pair" << endl;
if ((x % 2 == 0) && (y % 2 == 1))
cout << "x est pair et y est impair" << endl;
if (-15 < x && x < 10)
cout << "x est compris (strictement) entre -15 et +10" << endl;
return 0;
}
b) Afin de ne pas utiliser d'opérateurs logiques (&& et ||),
il faut employer efficacement les instructions de test if et
else. Souvenez-vous que les instructions if peuvent être
suivies d'un bloc d'instructions dans lequel figurent d'autres
instructions if.
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
float x;
cout << "Entrez une valeur: ";
cin >> x;
if (x >= 50)
cout << "x >= 50" << endl;
else { // si x < 50
if (x >= 5)
cout << "5 <= x < 50" << endl;
else { // si x < 5
if (x >= -5)
cout << "-5 <= x < 5" << endl;
else // si x < -5
cout << "x < -5" << endl;
}
}
return 0;
}
a)
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
float U = 1;
cout << "U0 = " << U << endl;
for (int n = 1; n <= 10; n++) {
U = U / n;
cout << "U" << n << " = " << U << endl;
}
return 0;
}
b)
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
float U = 1;
float V = U;
cout << "U0 = " << U << endl;
for (int n = 1; n <= 10; n++) {
U = U / n;
V = V + U;
cout << "U" << n << " = " << U << endl;
cout << "V" << n << " = " << V << endl;
}
return 0;
}
L'affichage d'une ligne se fait à l'aide d'une simple boucle
for. Pour afficher plusieurs lignes, il faudra imbriquer 2
boucles for.
Pour le triangle, la longueur d'une ligne est fonction du numéro
de ligne. Donc, la condition d'arrêt de la boucle écrivant une
ligne dépendra du compteur de la boucle parent (j).
Pour la pyramide inversée, il suffit de rajouter un nombre variable d'espaces avant les nombres.
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
// 1.
for (int i=1; i<=9; i++)
cout << i;
cout << endl << endl;
// 2.
for (int j=1; j<=9; j++) {
for (int i=1; i<=9; i++)
cout << i;
cout << endl;
}
cout << endl;
// 3.
for (int j=1; j<=9; j++) {
for (int i=1; i<=j; i++) // la boucle va de 1 a j !!
cout << i;
cout << endl;
}
cout << endl;
// 4.
for (int j=1; j<=9; j++) {
for (int i=1; i<=(9-j); i++)
cout << " ";
for (int i=1; i<=j; i++)
cout << i;
cout << endl;
}
cout << endl;
return 0;
}
La structure de ce programme est simple:
random);
guess);
Il n'y a que 3 conditions à tester:
random est plus grand que guess;
guess est plus grand que random.
#include <iostream>
#include <time.h>
using namespace std;
int main(int argc, char **argv)
{
int random, guess;
srand(time(NULL));
random = rand() % 11;
cout << "J'ai choisi un nombre entre 0 et 10. Essayez de le deviner: ";
cin >> guess;
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;
return 0;
}
Le but de cet exercice est d'empêcher le programme d'effectuer une
opération impossible - la racine carrée d'un nombre négatif
- à l'aide de l'instruction if. La solution est très
simple: il suffit de vérifier que
est positif
avant de calculer la racine carrée. Si
, on
procède normalement, sinon on écrit un message d'erreur et on ne
calcule pas la racine carrée.
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char **argv)
{
float a, b, c;
float delta;
cout << "Entrez les coefficients:" << endl << "a: ";
cin >> a;
cout << "b: ";
cin >> b;
cout << "c: ";
cin >> c;
delta = b*b-4*a*c;
if (delta < 0)
cout << "Je ne sais pas calculer les racines dans ce cas." << endl;
else {
cout << "Les deux racines sont: " << endl;
cout << "1) " << (-b+sqrt(delta))/2/a << endl;
cout << "2) " << (-b-sqrt(delta))/2/a << endl;
}
return 0;
}