Master MIMSE - Spécialité 3-1ère Année J0MS7301 : Algorithmique et Programmation Objet Feuille d'exercices 1 Prise en main Exercice 0 : Ecrire un programme qui ache la phrase Bonjour le monde! à l'écran. Types, conversions, problèmes d'arrondis Exercice 1 : Ecrire un programme qui ache le résultat de 1/3 avec : 1 et 3 écrit en valeur constante entière, 1 ou 3 écrit en valeur constante réelle, Commenter les résultats achés (format d'achage, résulat). Exercice 2 : Ecrire et executer le programme suivant #include <iostream> using namespace::std; int main(){ int n,p; double x,y; bool ok; n = 4; x = 0.9; p = n * x; y = n * x; cout << p << endl; cout << y << endl; p = (int)(n*x); y = (int)(n*x); cout << p << endl; cout << y << endl; ok = (n<6) && (n>3); cout << ok << endl; ok = ((int)(n*x) == n-1); cout << ok << endl; 1
return 0; } Pour chacun des achages, indiquer le résultat mathématique attendu et le résultat aché. Expliquer les diérences. Exercice 3 : Ecrire et executer le programme suivant #include <iostream> using namespace::std; int main(){ double a = 3.6; double b = 4.5; double c = 8.1; if (a+b == c){ cout << "a+b=c" << endl; } else { cout << "a+b!=c" << endl; } if (a == c-b){ cout << "a=c-b" << endl; } else { cout << "a!=c-b" << endl; } } return 0; Que peut-on observer? Comment remédier à ce problème? Exercice 4 : On peut utiliser la notation scientique dans un programme C++. Par exemple, 10000 peut s'écrire 1e4 et 0.001 peut s'écrire 1e-3. Ecrire un programme C++ qui : initialise un entier à la valeur 10 9, multiplie cet entier par 3, 2
Est-ce le résultat attendu? Que s'est-il passé? Exercice 5 : Ecrire un programme C++ qui : initialise un réel x du type float à la valeur 10 10, Ache 1 == 0 si x = x + 1 et ache 1!= 0 sinon. Est-ce le résultat attendu? Que se passe-t-il si on déclare x du type double? Un peu de calcul Exercice 6 : Ecrire un programme C++ qui : lit un horaire au format heure, minute, seconde (lire d'abord les heures, ensuite les minutes, et enn les secondes), transforme cet horaire en secondes, Exercice 7 : Ecrire un programme C++ qui lit un nombre de secondes le transforme en un horaire au format heure, minute, seconde, Exercice 8 : Ecrire un programme en C++ qui lit un horaire de départ (format heure, minute, seconde), lit un horaire d'arrivée (format heure, minute, seconde), calcule le temps de trajet (indice : faire le calcul en secondes) ache le résultat (format heure, minute, seconde), Les alternatives Exercice 9 : Ecrire un programme en C++ qui indique si un entier entré au clavier est positif ou nul, ou strictement négatif. Exercice 10 : 3
Ecrire un programme en C++ qui indique si un entier entré au clavier est compris entre 5 et 10. Exercice 11 : Ecrire un programme en C++ qui calcule la racine carré d'un réel si celui-ci est strictement positif. Exercice 12 : Ecrire un programme en C++ qui lit une date au clavier et qui vérie sa validité. Rappel : une année bissextile est soit une année divisible par 4 et non divisible par 100, soit une année divisible par 400. (2000 est une année bissextile tandis que 1900 ne l'est pas.) Les boucles nies Exercice 13 : Ecrire un programme en C++ qui calcule les n premiers termes (n donné par l'utilisateur) de la suite harmonique dénie par u n = 1 + 1 2 + 1 3 + 1 4 +... + 1 n. Exercice 14 : Ecrire un programme en C++ qui calcule, sans les stocker, la somme de n entiers (n fourni par l'utilisateur) lus au clavier. Exercice 15 : Ecrire un programme en C++ qui trouve le maximum et le minimum de n entiers (n fourni par l'utilisateur) lus au clavier. Cet algorithme ne doit pas stocker les entiers. Exercice 16 : Ecrire un programme en C++ qui calcule le énième terme (n fourni par l'utilisateur) de la suite de Fibonacci dénie par u 1 = 1 u 2 = 1 u n = u n 1 + u n 2 pour n > 2. Exercice 17 : 4
Ecrire un programme en C++ qui calcule les n premiers termes (n donné par l'utilisateur) des suites U n+1 = U n M U n + (N V n ) U n V n+1 = V n (M U n ) V n + N V n qui représentent l'évolution respective de la population de Lynx et de la population de lièvres dans la baie d'hudson. On prendra M = 0, 03 N = 0, 0002 M = 0, 001 N = 0, 05 U 0 = 50 V 0 = 200. Déterminer en même temps quelle est la population maxi et mini de lynx et de lièvre sur la période étudiée. Les boucles innies Exercice 18 : Ecrire un programme en C++ qui demande une valeur à l'utilisateur de rentrer un entier jusqu'à ce qu'il soit compris entre 1 et 100. Exercice 19 : Ecrire un programme en C++ qui fait la somme de valeurs réelles entrées au clavier jusqu'à ce quela somme dépasse 100. Exercice 20 : Ecrire un programme en C++ qui demande à l'utilisateur de rentrer une note de contrôle continu (coecient 1/3) et une note d'examen (coecient 2/3) et qui calcule la moyenne pondérée de ces deux notes. Le programme devra, après chaque calcul, demander à l'utilisateur s'il désire recommencer et ainsi boucler jusqu'à ce qu'il souhaite s'arrêter. Exercice 21 : Ecrire un programme en C++ qui : lit un ensemble de nombres réels non nuls tapés au clavier (le nombre de terme n'est pas connu à l'avance, la saisie s'arrête par la frappe de la valeur 0), ache en n de saisie le nombre, la moyenne, le maximum et le minimum de ces nombres. 5
Réaliser cela sans stocker les nombres réels dans un tableau. Exercice 22 : Ecrire un programme en C++ permettant : de lire au clavier une valeur entière x, de remplacer x par x div 2 si x est pair, par 3 x + 1 sinon, de recommencer l'opération précédente jusqu'à l'obtention du nombre 1. Le programme devra acher les valeurs successives de n et le nombre d'itérations qui ont été nécessaire pour obtenir 1. Les tableaux statiques Exercice 23 : Ecrire un programe en C++ qui : déclare un tableau de 10 entiers, lit dix entiers au clavier et les stocke dans le tableau, ache le tableau. Exercice 24 : Ecrire un programme en C++ qui : déclare deux tableaux de 5 entiers, lit 10 entiers et les stocke dans les deux tableaux, fait le produit membre à membre des deux tableaux dans un troisième tableau, Exercice 25 : Ecrire un programme en C++ qui : déclare deux tableaux de 100 entiers, demande à l'utilisateur la taille des vecteurs qu'il désire sommer lit les valeurs des deux vecteurs et les stocke dans les deux tableaux, fait la somme membre à membre des deux vecteurs, Attention, vérier que la taille entrée par l'utilisateur ne dépasse pas la taille maximale du tableau. Remarque : noter que la déclaration du vecteur (tableau) se faisant avant la lecture de sa taille (déclaration statique), il sera nécessaire de : déclarer un tableau d'une taille xe assez grande, travailler sur une sous-partie de ce tableau, vérier que la taille entrée par l'utilisateur ne dépasse pas la taille maximale du tableau déclaré. 6
Exercice 26 : Ecrire un programme en C++ qui demande à l'utilisateur de rentrer la taille d'un vecteur et le vecteur lui-même, puis qui : eectue la somme des éléments du vecteur, cherche la position de l'élément minimum et celle de l'élément maximum du vecteur, ache le vecteur et les résultats précédents. Exercice 27 : Ecrire un programme en C++ qui lit une matrice n m de réels (n, m et les valeurs de la matrice étant donnés par l'utilisateur). Tester les diérentes manières d'acher cette matrice : print *,mat print *.mat(:n,:m) double boucle pour acher les éléments un par un, une boucle qui ache chaque ligne de la matrice. Exercice 28 : Ecrire un programme en C++ qui fasse le produite scalaire de deux vecteurs de taille m (la taille et le vecteur étant dénies par l'utilisateur). Exercice 29 : Ecrire un programme en C++ qui fasse le produit d'un vecteur ligne de taille m et d'une matrice m n (m et n ainsi que le vecteur et la matrice seront donnés par l'utilisateur). Exercice 30 : Ecrire un programme en C++ qui fasse le produit d'une matrice m n et d'une matrice n p (m, n et p ainsi que les deux matrices seront donnés par l'utilisateur). Exercice 31 : Ecrire un programme en C++ qui : lit une taille n au clavier, lit un tableau de n entiers au clavier, trie ce tableau en utilisant le tri par sélection, ache ce tableau à l'écran. Pour rappel, le tri par sélection consiste, à chaque itération k = 1,..., n 1, à considérer que le sous-tableau allant de 1 à k 1 est trié et contient les k 1 plus petites valeurs, 7
chercher la plus petite valeur dans le sous-tableau allant de k à n, échanger cette valeur avec la valeur se trouvant en position k. 8