TP2
TP2
TP2
M.K. GUENNOUN
Langage C
TP 2
Exercice 1:
Ecrire un programme qui calcule le produit scalaire de deux vecteurs d'entiers U et V (de même
dimension). La dimension est donnée par l’utilisateur ainsi que les valeurs de chaque vecteur.
Exemple:
| 3 2 4 | * | 2 3 5 | = 3*2+2*(3)+(4)*5 = 20
Exercice 2 :
Ecrire un programme qui détermine la plus grande et la plus petite valeur dans un tableau d'entiers A
dont la dimension et les éléments sont donnés par l’utilisateur. Afficher ensuite la valeur et la position
du maximum et du minimum. Si le tableau contient plusieurs maxima ou minima, le programme
donnera toutes les positions des maximums et des minimums rencontrés.
Exercice 3 :
Rechercher dans un tableau d'entiers A une valeur VAL entrée au clavier. Le tableau A, sa dimension,
ainsi que VAL sont saisis par l’utilisateur. Afficher la position de VAL si elle se trouve dans le
tableau, sinon afficher un message correspondant. La valeur POS qui est utilisée pour mémoriser la
position de la valeur dans le tableau, aura la valeur 1 aussi longtemps que VAL n'a pas été trouvée.
Implémenter deux versions:
a) La recherche séquentielle
Comparer successivement les valeurs du tableau avec la valeur donnée.
b) La recherche dichotomique ('recherche binaire', 'binary search')
Condition: Le tableau A doit être trié
Comparer le nombre recherché à la valeur au milieu du tableau,
s'il y a égalité ou si le tableau est épuisé, arrêter le traitement avec un message correspondant.
si la valeur recherchée précède la valeur actuelle du tableau, continuer la recherche dans le demi
tableau à gauche de la position actuelle.
si la valeur recherchée suit la valeur actuelle du tableau, continuer la recherche dans le demitableau
à droite de la position actuelle.
Exercice 4 :
Problème: Classer les éléments d'un tableau A par ordre décroissant.
Méthode: Parcourir le tableau de gauche à droite à l'aide de l'indice I. Pour chaque élément A[I] du
tableau, déterminer la position PMAX du (premier) maximum à droite de A[I] et échanger A[I] et
A[PMAX].
Exemple:
Exercice 5 :
Soit un tableau A de dimension N+1 (la valeur N étant donnée par l’utilisateur). Ecrire un programme
C qui effectue les opérations suivantes :
1 Saisie de N valeurs qui vont être stockées dans les positions 0 à N1. La position N du tableau
restant indéfinie.
2 Afficher le tableau A
3 Trier le sous tableau de dimension N par ordre décroissant
4 Afficher le tableau A
5 Saisie de la (N+1)ième valeur VAL au clavier.
6 Insérer VAL dans le tableau A de manière à obtenir un tableau de N+1 valeurs triées.
7 Afficher le tableau A
Exercice 6 :
On dispose de deux tableaux A et B (de dimensions respectives N et M). Ecrire un programme qui
réalise les opérations suivantes :
1 Saisie de la taille de M et de N et allocation de la zone mémoire pour A et B
2 Saisie des éléments des tableaux A et B
3 Tri des deux tableaux A et B par ordre croissant.
4 Fusionner les éléments de A et B dans un troisième tableau FUS trié par ordre croissant en
profitant du caractère trié de A et B.
Méthode: Utiliser trois indices IA, IB et IFUS. Comparer A[IA] et B[IB]; remplacer FUS[IFUS] par
le plus petit des deux éléments; avancer dans le tableau FUS et dans le tableau qui a contribué son
élément. Lorsque l'un des deux tableaux A ou B est épuisé, il suffit de recopier les éléments restants de
l'autre tableau dans le tableau FUS.
Exercice 7 :
Ecrire un programme qui lit les notes de N élèves d'une classe dans un devoir noté sur 60 et les
mémorise dans un tableau Notes de dimension N (max. 50).
* Rechercher et afficher:
la note maximale,
la note minimale,
la moyenne des notes.
* A partir des POINTS des élèves, établir un tableau NOTES de dimension 7 qui est composé de la
façon suivante:
NOTES[6] contient le nombre de notes 60
NOTES[5] contient le nombre de notes de 50 à 59
NOTES[4] contient le nombre de notes de 40 à 49
...
NOTES[0] contient le nombre de notes de 0 à 9
Etablir un graphique de barreaux représentant le tableau NOTES. Utilisez les symboles ####### pour
la représentation des barreaux et affichez le domaine des notes en dessous du graphique.
Idée: Déterminer la valeur maximale MAXN dans le tableau NOTES et afficher autant de lignes sur
l'écran. (Dans l'exemple cidessous, MAXN = 6).
Exemple:
6 > #######
+-------+-------+-------+-------+-------+-------+-------+
Exercice 8 :
Introduire maintenant les fonctions relatives au tri par fusion. La fonction triParFusion prend en
paramètre le tableau à trier ainsi que sa taille et renvoie un tableau contenant les éléments de ce
tableau dans l’ordre croissant.
a) void fusionner(int * tab, int p, int q, int r) : permet de fusionner deux sous tableaux de tab
supposés déjà triés. Le premier commence à l’indice p et finit à l’indice q, alors que le
deuxième commence à l’indice q+1 et finit à l’indice r.
b) void trifusion(int * tab, int p, int r) : permet de trier (selon une méthode récursive utilisant la
procédure précédente) un sous tableau de tab. Le sous tableau commence à l’indice p et
termine à l’indice r.
c) int * triParFusion(int * tab, int taille) : permet de trier le tableau complet tab