TD 1
TD 1
PROGRAMMATION C
29/12/2021
TD1 : Les structures répétitives
◦ Les boucles permettent à l’ensemble d’instructions de s’exécuter de manière répétitif jusqu’à ce que la condition devienne vrai.
■ Boucle for
■ La boucle while vérifie la condition au démarrage de la ◦ Dans la boucle do while, la condition est vérifiée après
boucle et si la condition est satisfaite le bloc l’exécution de toutes les instructions du corps de la
d’instructions sera exécuté.
boucle.
■ Si la condition dans une boucle while est fausse, ◦ si la condition dans la boucle do while est fausse, alors
aucune instruction à l’intérieur de la boucle n’est
exécutée . le corps de la boucle est exécuté au moins une fois la
condition testée.
Exercice 8 et 9:
■ Exercice 8 :
Ecrivez un programme qui lit N nombres entiers au clavier et qui affiche leur somme, leur produit et leur moyenne. Choisissez un type
approprié pour les valeurs à afficher. Le nombre N est à entrer au clavier. Résolvez ce problème,
a) en utilisant while,
b) en utilisant do - while,
c) en utilisant for.
■ Exercice 9
Répétez l'introduction du nombre N jusqu'à ce que N ait une valeur entre 1 et 15.
Répétez l'introduction du nombre N jusqu'à ce que N ait une valeur entre 1 et 15.
29/12/2021
Ex9
29/12/2021
Ex 10
■ Calculez par des soustractions successives le quotient entier et le reste de la division entière de
deux entiers entrés au clavier.
29/12/2021
Ex 10
■ Calculez par des soustractions successives le quotient entier et le reste de la division entière de deux
entiers entrés au clavier.
Reste
Condition à vérifier :
Reste >= Dénominateur
29/12/2021
Ex 11
■ Calculez la factorielle N! = 1*2*3...(N-1)*N d'un entier naturel N en respectant que 0!=1.
■ a) Utilisez while,
■ b) Utilisez for.
29/12/2021
Ex 17
■ En mathématiques, on définit la fonction factorielle de la manière suivante:
■ 0! = 1
■ Ecrire une fonction FACT du type double qui reçoit la valeur N (type int) comme paramètre et qui
fournit la factorielle de N comme résultat. Ecrire un petit programme qui teste la fonction FACT.
29/12/2021
29/12/2021
En utilisant les fonctions
29/12/2021
Ex 12
■ Affichez un triangle isocèle formé d'étoiles de N lignes (N est fourni au clavier)
Triangle isocèle :triangle qui possède deux cotés de même longueur
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
On a besoin de: 2 – Deux boucles à l’intérieur de la première boucle
( Pour chaque ligne )
1 – Une boucle qui permet d’itérer les ◦ Boucle 1: permet de tracer les espaces
lignes
29/12/2021
La difficulté de cet exercice consiste
essentiellement à trouver la relation entre le
numéro de ligne et le nombre d'étoiles et
d'espaces
29/12/2021
Ex 13
29/12/2021
On a besoin de:
J allant de 0 à 10
i allant de 0 à 10
29/12/2021
29/12/2021
Ex 14
■ Ecrire deux fonctions qui calculent la valeur XN pour une valeur réelle X (type double) et une
valeur entière positive N (type int) :
Ecrire un programme qui teste les deux fonctions à l'aide de valeurs lues au clavier
29/12/2021
■ a) EXP1 retourne la valeur XN comme résultat.
29/12/2021
■ b) EXP2 affecte la valeur XN à X.
29/12/2021
29/12/2021
Exercice 15
■ Ecrire une fonction MIN et une fonction MAX qui déterminent le minimum et le maximum de
deux nombres réels.
■ Ecrire un programme se servant des fonctions MIN et MAX pour déterminer le minimum et le
maximum de quatre nombres réels entrés au clavier.
29/12/2021
29/12/2021
■ Exercice 15
◦ Exercice 19
■ Ecrire une fonction MIN et une fonction ◦ Ecrire un programme qui lit la dimension N
MAX qui déterminent le minimum et le d'un tableau T du type int (dimension
maximum de deux nombres réels. maximale: 50 composantes), remplit le
■ Ecrire un programme se servant des tableau par des valeurs entrées au clavier et
Exercice bonus :
Ecrire une fonction MIN et une fonction MAX qui déterminent
le minimum et le maximum des éléments du tableau.
29/12/2021
◦ Exercice 19
◦ Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
29/12/2021
29/12/2021
29/12/2021
29/12/2021
(En utilisant les fonctions)
29/12/2021
Exercice bonus :
Ecrire une fonction MIN-MAX qui détermine le minimum et le
maximum des éléments du tableau.
29/12/2021
Exercice 16
■ Ecrire la fonction NCHIFFRES du type int qui obtient une valeur entière N (positive ou négative)
du type long comme paramètre et qui fournit le nombre de chiffres de N comme résultat.
■ Exemple:
29/12/2021
29/12/2021
Exercice 18
■ Ecrire un programme qui construit et affiche le triangle de Pascal en calculant les coefficients
binomiaux:
■ On n'utilisera pas de tableau, c.-à-d. il faudra calculer les coefficients d'après la formule ci-dessous,
tout en définissant et utilisant les fonctions adéquates.
29/12/2021
29/12/2021
Exercice 18
■ Ecrire un programme qui construit et affiche le triangle de Pascal en calculant les coefficients
binomiaux:
■ On n'utilisera pas de tableau, c.-à-d. il faudra calculer les coefficients d'après la formule ci-dessous,
tout en définissant et utilisant les fonctions adéquates.
Exercice bonus :
Ecrire un programme qui construit et affiche le triangle de
Pascal en utilisant un tableau de deux dimension
29/12/2021
Les tableaux à deux dimensions
Exercice 29
■ Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int
(dimensions maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au clavier
et afficher le tableau ainsi que la somme de chaque ligne et de chaque colonne en n'utilisant qu'une
variable d'aide pour la somme.
Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du
type int (dimensions maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au
clavier et afficher le tableau ainsi que la somme de tous ses éléments.
29/12/2021
29/12/2021
Ex Bonus (Avant l’ex 29 )
29/12/2021
Exercice 29
■ Ecrire un programme qui lit les dimensions L et C d'un tableau T à deux dimensions du type int
(dimensions maximales: 50 lignes et 50 colonnes). Remplir le tableau par des valeurs entrées au clavier
et afficher le tableau ainsi que la somme de chaque ligne et de chaque colonne en n'utilisant qu'une
variable d'aide pour la somme.
29/12/2021
29/12/2021
Exercice 18
■ Ecrire un programme qui construit et affiche le triangle de Pascal en calculant les coefficients
binomiaux:
■ On n'utilisera pas de tableau, c.-à-d. il faudra calculer les coefficients d'après la formule ci-dessous,
tout en définissant et utilisant les fonctions adéquates.
Exercice bonus :
Ecrire un programme qui construit et affiche le triangle de
Pascal en utilisant un tableau de deux dimension
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
Résumé
29/12/2021
Exercice bonus :
Ecrire un programme qui construit et affiche le triangle de
Pascal en utilisant un tableau de deux dimension
29/12/2021
TD1 : LES TABLEAUX
À UNE DIMENSION
29/12/2021
Exercice 20
■ Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
■ Effacer ensuite toutes les occurrences de la valeur 0 dans le tableau T et tasser les éléments
restants. Afficher le tableau résultant.
29/12/2021
• On a un compteur i qui va parcourir le tableau T
• j s’incrémente à chaque fois qu’on trouve un élément non nul dans le tableau T .
Exemple:
1ère itération : i=0 ,j=0
• T[0] =T[0]=12
• T[0]!=0 (vrai) donc j=1
2ème itération : i=1,j=1
• T[1] =T[1]=20
• T[1]!=0 (vrai) donc j=2
3ème itération : i=2,j=2
• T[2] =T[2]=0
• T[2]!=0 (faux car on a T[2]=0) donc j ne s’incrémente pas on a alors j=2
4ème itération : i=3,j=2
• T[2] =T[3]=1
• T[3]!=0 (vrai ) donc j=3
5ème itération : i=4,j=3
• T[3] =T[4]=0
• T[4]!=0 (faux car on a T[4]=0) donc j ne s’incrémente pas on a alors j=3
On affiche le nouveau tableau de dimension N=j=3
For(i=0;i<3;i++) donc on aura l’affichage des 3 éléments T[0] , T[1] et T[2]
29/12/2021
Exercice 21
■ Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
■ Ranger ensuite les éléments du tableau T dans l'ordre inverse sans utiliser de tableau d'aide.
Afficher le tableau résultant.
■ Idée: Echanger les éléments du tableau à l'aide de deux indices qui parcourent le tableau en
commençant respectivement au début et à la fin du tableau et qui se rencontrent en son milieu.
29/12/2021
On aura besoin d’une variable aide pour faire l’échange
Exemple:
1ère itération : i=0 ,j=4
• Aide=T[0]
• T[0]= T[4]
• T[4]=aide
• i++ : i=1 et J-- :j=3
2ème itération : i=1 ,j=3
• Aide=T[1]
• T[1]= T[3]
• T[3]=aide
• i++ : i=2 et J-- :j=2
On a i=2, j=2 , voila i et j se rencontrent au milieu du tableau le
T[2] reste le même , on n’a pas avec quoi l’ échanger , la
condition du for : I < J n’est plus vérifié donc on sort de la
boucle et notre nouveau tableau inversé est :
29/12/2021
Exercice 22
■ Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50
composantes), remplit le tableau par des valeurs entrées au clavier et affiche le tableau.
■ Copiez ensuite toutes les composantes strictement positives dans un deuxième tableau TPOS et
toutes les valeurs strictement négatives dans un troisième tableau TNEG. Afficher les tableaux
TPOS et TNEG.
29/12/2021
Dimensions des tableaux (pos et neg)
NPOS=0 et NNEG=0
NPOS doit s’incrémenter si on trouve un élément positif dans T et stoquer cet
élément dans le tableau TPOS
NNEG doit s’incrémenter si on trouve un élément negatif dans T et stoquer cet
élément dans le tableau TNEG
Exemple:
1ère itération : i=0 , NPOS=0 , NNEG=0
• T[0] < 0 donc TNEG[0]= T[0] = -1
• NNEG++ : NNEG=1
2ème itération : i=1 , NPOS=0 , NNEG=1
• T[1] >0 donc TPOS[0]= T[1] =2
• NPOS++ : NPOS=1
3ème itération : i=2 , NPOS=1 , NNEG=1
• T[2] < 0 donc TNEG[1]= T[2]= -3
• NNEG++ : NNEG=2
4ème itération : i=3 , NPOS=1 , NNEG=2
• T[3] < 0 donc TNEG[2]= T[3] = -4
• NNEG++ : NNEG=3
5ème itération : i=4 , NPOS=1 , NNEG=3
• T[4] >0 donc TPOS[1]= T[4] = 5
• NPOS++ : NPOS=2
29/12/2021
Exercice 23
■ Calculer pour une valeur X donnée du type float la valeur numérique d'un polynôme de degré n:
■ Les valeurs des coefficients An, ... , A0 seront entrées au clavier et mémorisées dans un tableau A
de type float et de dimension n+1.
29/12/2021
Prenons comme exemple un polynôme de degré 4
P(X) = A4X4 + A3X3 + A2X2 + A1X + A0
On remplit les coefficients de ce polynôme dans le tableau A
• P=P+A[1]*pow (-1,1)=10+5*(-1)=10-5=5
3ème itération : i=2 ,P=5
• P=P+A[2]*pow (-1,2)=5+4*(-1)2=9
4ème itération : i=3 ,P=9
• P=P+A[3]*pow (-1,3)=9+3*(-1)3=6
5ème itération : i=4 ,P=6
• P=P+A[4]*pow (-1,4)=6+2*(-1)4 =8
29/12/2021
Polynôme de degré 4
P(X) = A4X4 + A3X3 + A2X2 + A1X + A0
Calcul de Horner :
29/12/2021
Exercice 24
■ Un tableau A de dimension N+1 contient N valeurs entières triées par ordre croissant; la (N+1)ième
valeur est indéfinie. Insérer une valeur VAL donnée au clavier dans le tableau A de manière à
obtenir un tableau de N+1 valeurs triées.
29/12/2021
Exemple : un Tableau A trié (N=5)
On souhaite ajouter Val=14 ; val doit être ajouter entre le 10 et le 15 .
Il faut Déplacer les éléments plus grands que VAL d'une position vers l'avant.
1ère itération: i=5
• A[5]= A[4] =20
• A[4]<VAL (faux : 20 >14)
2ème itération : i=4
• A[4]= A[3] =15
• A[3]<VAL (faux : 15 >14)
3ème itération : i=3
• A[3]= A[2] =10
• A[2]<VAL (vrai : 10 <14 ) donc A[3]=VAL=16
• Break va nous permettre de sortir de la boucle
N++ :N=6
29/12/2021
Exercice 25
■ Problème: Rechercher dans un tableau d'entiers A une valeur VAL entrée au clavier. 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.
a) La recherche séquentielle
- 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 demi-tableau à droite de la position actuelle.
Ecrire le programme pour le cas où le tableau A est trié par ordre croissant.
29/12/2021
La recherche séquentielle
Exemple :
On souhaite chercher Val=14 se trouvant à la position 2.
La position initialisé à -1
1ère itération: i=0
• A[0]= =14 (faux)
2ème itération : i=1
• A[1]= =14 (faux)
3ème itération : i=2
• A[2]= =14 (vrai ) donc POS = i = 2
• Break va nous permettre de sortir de la boucle car on a trouvé l ’élément
29/12/2021
La recherche dichotomique ('recherche binaire', 'binary search')
→ Dans le pire des cas d'une recherche séquentielle, il faut traverser tout le tableau avant de trouver la valeur ou avant d'être sûr qu'une valeur
ne se trouve pas dans le tableau.
→ Lors de la recherche dichotomique, on élimine la moitié des éléments du tableau à chaque exécution de la boucle. Ainsi, la recherche se
termine beaucoup plus rapidement.
→ La recherche dichotomique devient extrêmement avantageuse pour la recherche dans de grands tableaux (triés).
29/12/2021
Exercice 26
■ Problème: On dispose de deux tableaux A et B (de dimensions respectives N et M), triés par ordre
croissant. Fusionner les éléments de A et B dans un troisième tableau FUS trié par ordre croissant.
■ 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
29/12/2021
Exemple : A trié, N=5 / B trié , M=3
Compteur de A: IA=0 / Compteur de B: IB=0 / Compteur de FUS : IFUS=0;
On va parcourir les tableau A et B :while ((IA<N) && (IB<M))
1ère itération: (IA<N) && (IB<M) (vérifié)
A[0]<B[0] (vrai : 1<3) donc FUS[IFUS]=A[IA]: FUS[0]=A[0]=1
IFUS++: IFUS=1 / IA++ : IA=1
2ème itération : : (IA<N) && (IB<M) (vérifié)
A[1]<B[0] (Faux : 5 > 3)
A[1] > B[0] donc FUS[IFUS]=B[IB]: FUS[1]=B[0]=3
IFUS++: IFUS=2 / IB++ : IB=1
3ème itération : (IA<N) && (IB<M) (vérifié)
A[1]<B[1] (vrai: 5 < 10) donc FUS[IFUS]=A[IA]: FUS[2]=A[1]=5
IFUS++: IFUS=3 / IA++ : IA=2
4ème itération : (IA<N) && (IB<M) (vérifié)
A[2]<B[1] (vrai: 6 < 10) donc FUS[IFUS]=A[IA]: FUS[3]=A[2]=6
IFUS++: IFUS=4 / IA++ : IA=3
5ème itération : (IA<N) && (IB<M) (vérifié)
A[3]<B[1] (Faux : 15 > 10)
A[3] > B[1] donc FUS[IFUS]=B[IB]: FUS[4]=B[1]=10
29/12/2021
IFUS++: IFUS=5 / IB++ : IB=2
IFUS=5 / IB=2 / IA=3
6ème itération : (IA<N) && (IB<M) (vérifié)
A[3]<B[2] (Faux : 15 > 12)
A[3] > B[2] donc FUS[IFUS]=B[IB]: FUS[5]=B[2]=12
IFUS++: IFUS=6 / IB++ : IB=3
7ème itération : (IA<N) && (IB<M) (non vérifié : le tableau B est épuisé )
On passe à la boucle qui parcourt le tableau A pour copier ses éléments restants
dans le tableau FUS
1ère itération: (IA<N) (vérifié)
FUS[IFUS]=A[IA] : FUS[6]=A[3]=15
IFUS++: IFUS=7 / IA++ : IA=4
2ème itération: (IA<N) (vérifié)
FUS[IFUS]=A[IA] : FUS[7]=A[4]=20
IFUS++: IFUS=8 / IA++ : IA=5
3ème itération: (IA<N) (non vérifié) donc on sort de la boucle et on affiche le
tableau FUS dont la dimension est la somme des dimensions des tableaux A et B
(N+M)
29/12/2021
Exercice 27
■ 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:
29/12/2021
2ème itération: i=1
PMAX=i=1
On parcourt les éléments à droite de A[1]
• 1ère itération: j=2
A[2]>A[1] (vrai) donc PMAX=J=2
On a le tableau A , N=5 • 2 ème itération: j=3
Pour chaque élément de A , on doit chercher à A[3]>A[2] (faux : 5<6)
sa droite l’ élément maximale et faire l’échange • 3ème itération: j=4
de A[4]>A[2] (vrai) donc PMAX=J=4
A[I] et A[PMAX].
De cette façon on aura un tri décroissant. Echange de A[1] avec le maximum
1ère itération: i=0
PMAX=i=0 AIDE=A[1]
On parcourt les éléments à droite de A[0] A[1]=A[4]
• 1ère itération: j=1 A[4]=AIDE
A[1]>A[0] (faux : 2<5)
• 2 ème itération: j=2 3ème itération: i=2
A[2]>A[0] (vrai) donc PMAX=J=2 PMAX=i=2
• 3 ème itération: j=3 On parcourt les éléments à droite de A[2]
A[3]>A[2] (vrai) donc PMAX=J=3 • 1ère itération: j=3
• 4 ème itération: j=4 A[3]>A[2] (faux : 5<6)
A[4]>A[3] (faux : 20<30) • 2 ème itération: j=4
Echange de A[0] avec le maximum A[4]>A[2] (faux : 2<6)
AIDE=A[0] Rien à permuter.
A[0]=A[3] 4ème itération: i=3
A[3]=AIDE On parcourt les éléments à droite de A[2]
• 1ère itération: j=4
A[4]>A[3] (faux : 2<5)
Rien à permuter.
5ème itération: i=4
(condition i<N-1 : i <4 ) non vérifiée donc
29/12/2021
fin de la boucle et fin du tri décroissant
TD1 : LES TABLEAUX À
DEUX DIMENSIONS
29/12/2021
EXERCICE 30
Ecrire un programme qui transfère un tableau M à deux dimensions L et C (dimensions maximales: 10
lignes et 10 colonnes) dans un tableau V à une dimension L*C.
Exemple:
■ Exemple : M matrice , L=3,C=2
■ Le tableau résultat doit être :
29/12/2021
Exercice 31
■ Ecrire un programme qui met à zéro les éléments de la diagonale principale d'une matrice carrée
A donnée.
■ Le but de l’exercice est de mettre à zéro les éléments de la diagonale principale de la
matrice carrée A (Matrice carrée : L=C) , dans notre exemple on a L=C=3
■ Les éléments qui doivent être mis à zéro sont A[0][0], A[1][1] et A[2][2]
élément A[i][i]
Exercice 32
Ecrire un programme qui effectue la transposition tA d'une matrice A de dimensions N et M en une matrice de dimensions M et N.
a) La matrice transposée sera mémorisée dans une deuxième matrice B qui sera ensuite affichée.
/ \ / \
tA = t | a b c d | = | a e i |
|efgh| |bfj|
|i j k l| |cgk|
\ / |dhl|
\ /
a) La matrice transposée sera mémorisée dans une deuxième matrice B
qui sera ensuite affichée.
■ A matrice , N=3,M=2
■ B transposée de A , N=2, M=3
■ Pour faire la transposée de A :
B[0][0]=A[0][0] / B[0][1]=A[1][0] /B[0][2] =A[2][0]
B[1][0]=A[0][1] / B [1][1]=A [1][1] /B [1][2]=A [2][1]
Ce qu’il faut remarquer c’est que les indices de A et B sont inversés
B [J][I]=A [I][J]
29/12/2021
b) La matrice A sera transposée par permutation des éléments.
29/12/2021
Exercice 33
En multipliant une matrice A de dimensions N et M avec une matrice B de dimensions M et P on obtient une matrice C de dimensions N et P:
La multiplication de deux matrices se fait en multipliant les composantes des deux matrices lignes par colonnes:
Ecrire un programme qui effectue la multiplication de deux matrices A et B. Le résultat de la multiplication sera mémorisé dans une troisième matrice C qui
sera ensuite affichée.
Rappel:
/ \ / \ / \
\ / \ /
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021
29/12/2021