0% ont trouvé ce document utile (0 vote)
186 vues105 pages

TD 1

Transféré par

Ali Ts
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
186 vues105 pages

TD 1

Transféré par

Ali Ts
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TD1 :

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

■ Initialisation : est une instruction (ou bloc


d’instructions) exécutée avant le premier tour de la
boucle .
■ Condition: Tant que cette condition est vraie , la
boucle for continue.
■ Incrémentation : cette instruction est exécutée à la
fin de chaque tour de boucle pour mettre à jour la
variable .
Les structures répétitives
■ Boucle while ◦ Boucle do-while
Cette boucle permet de répéter un bloc d’instructions tant Cette boucle permet de répéter un bloc d’instructions tant
qu’une condition est vraie qu’une condition est vraie

■ 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.

d) Laquelle des trois variantes est la plus naturelle pour ce problème?

■ Exercice 9

Complétez la 'meilleure' des trois versions de l'exercice 8 :

Répétez l'introduction du nombre N jusqu'à ce que N ait une valeur entre 1 et 15.

Quelle structure répétitive utilisez-vous? Pourquoi?


while Do-while
For

■ La structure for est celle qui exprime le


mieux l'idée de l'algorithme.
■ Elle permet d'intégrer très confortablement
l'initialisation et l'incrémentation des
variables dans la structure.
Exercice 9

Complétez la 'meilleure' des trois versions de l'exercice 8 :

Répétez l'introduction du nombre N jusqu'à ce que N ait une valeur entre 1 et 15.

Quelle structure répétitive utilisez-vous? Pourquoi?

29/12/2021
Ex9

■ Comme l'introduction du nombre de données


doit toujours être exécuté (au moins une fois), le
plus naturel sera l'utilisation de la structure do -
while.

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

■ n! = n*(n-1)*(n-2)* ... * 1 (pour n>0)

■ 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

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
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

◦ Boucle 2 : permet d’afficher les étoiles

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
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

■ Affiche la table des produits pour N variant de 1 à 10 :

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) :

a) EXP1 retourne la valeur XN comme résultat.

b) EXP2 affecte la valeur XN à X.

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

fonctions MIN et MAX pour déterminer affiche le tableau.

le minimum et le maximum de quatre ◦ Calculer et afficher ensuite la somme et la


nombres réels entrés au clavier. moyenne des éléments du tableau.

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.

◦ Calculer et afficher ensuite la somme et la moyenne des éléments du 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.

■ Ecrire un petit programme qui teste la fonction NCHIFFRES:

■ Exemple:

Introduire un nombre entier : 6457392

Le nombre 6457392 a 7 chiffres.

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.

Ex Bonus (Avant l’ex 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 tous ses éléments.

29/12/2021
29/12/2021
Ex Bonus (Avant l’ex 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 tous ses
éléments.

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:

■ P(X) = AnXn + An-1Xn-1 + ... + A1X + A0

■ 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.

■ a) Utilisez la fonction pow() pour le calcul.

■ b) Utilisez le schéma de Horner qui évite les opérations d'exponentiation:

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(X) = 2X4 + 3X3 + 4X2 + 5X + 10

Pour X= -1 : P(-1)= 2*(-1)4 + 3 *(-1)3 + 4 *(-1)2 + 5 *(-1)1 + 10= 8

1ère itération : i=0 ,P=0

• P=P+A[0]*pow (-1,0)=10* *(-1)0 =10

2ème itération : i=1 ,P=10

• 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

P(X) = 2X4 + 3X3 + 4X2 + 5X + 10

Calcul de Horner :

P(X) =A4X4 + A3X3 + A2X2 + A1X + A0 = ( ( (A4 *X + A3)* X+A2)*X+A1)*X+A0

1ère itération : i=0 ,P=0

• P=P *(-1) +A[4-0]=A[4]=2

2ème itération : i=1 ,P=2

• P=P *(-1) +A[4-1]=-2+A[3]=-2+3=1

3ème itération : i=2 ,P=1

• P=P *(-1) +A[4-2]=-1+A[2]=-1+4=3

4ème itération : i=3 ,P=3

• P=P *(-1) +A[4-3]=-3+A[1]=-3+5=2

5ème itération : i=4 ,P=2


• P=P *(-1) +A[4-4]=-2+A[0]=-2+10=8

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.

■ 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 demi-tableau à droite de la position actuelle.

Ecrire le programme pour le cas où le tableau A est trié par ordre croissant.

■ Question: Quel est l'avantage de la recherche dichotomique? Expliquer brièvement.

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')

Exemple : A trié, N=8


On souhaite chercher Val=30 se trouvant à la position 6.
Indice INF=0 et l’indice SUP = N-1=7
1ère itération: INF<=SUP (verifié)
Indice du milieu :MIL=(SUP+INF)/2= 3
• VAL< A[3] (Faux)
• VAL > A[3] (vrai : 30> 15) donc on va chercher encore dans le tableau à droite qui commence
de l’indice INF=MIL+1=4
2ème itération : : INF<=SUP (vérifié: INF=4,SUP=7)
Indice du milieu :MIL=(SUP+INF)/2= 5
• VAL< A[5] (Faux)
• VAL > A[5] (vrai : 30> 25) donc on va chercher encore dans le tableau à droite qui commence
de l’indice INF=MIL+1=5
3ème itération : : INF<=SUP (vérifié: INF=5,SUP=7)
Indice du milieu :MIL=(SUP+INF)/2= 6
• VAL< A[5] (Faux) , VAL > A[5] (faux)
• La valeur qu’on cherche est 30 qui est A[6] donc on doit retenir que POS=MIL=6
• Break va nous permettre de sortir de la boucle car on a trouvé l ’élément et sa position.
29/12/2021
Quel est l'avantage de la recherche dichotomique? Expliquer brièvement

■ Prenons l’exemple du même tableau : pour cherche l’élément VAL=30


Avec la recherche séquentielle:
On doit parcourir le tableau en comparant VAL avec A[0], A[1] , A[2], A[3], A[4], A[5] et enfin avec A[6] pour dire que 30 se trouve dans la position 6
Donc on a fait 7 itérations
Avec la recherche dichotomique:
On a fait 3 itérations pour trouver la position de VAL .

→ 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 :

Ce qu’il faut faire :


■ V[0]=M[0][0] / V[1]=M[0][1] / V[2]=M[1][0]
■ V[3]=M[1][1] / V[4]=M[2][0] / V[5]=M[2][1]
1ère itération: i=0 3ème itération: i=2
• 1ère itération: j=0
• 1ère itération: j=0
i*C+j= 0
i*C+j= 4
V[0]= M[0][0]
• 2ème itération: j=1
V[4]= M[2][0]
i*C+j= 1 • 2ème itération: j=1
V[1]= M[0][1] i*C+j= 5
2ème itération: i=1 V[5]= M[2][1]
• 1ère itération: j=0
i*C+j= 2
V[2]= M[1][0] La difficulté de cet exercice
• 2ème itération: j=1 consiste essentiellement à
i*C+j= 3
trouver Les indices de V
V[3]= M[1][1]
i*C+j

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]

On peut constater qu’on aura besoin d’une

boucle de i allant de 0 à 2 et affecter 0 aux

é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.

b) La matrice A sera transposée par permutation des éléments.

/ \ / \

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.

A matrice , N=3,M=2 3ème itération: i=2


DMAX=3 1ère itération: j=0

1ère itération: i=0 AIDE=A[2][0]


A[2][0] =A[0][2]
Rien à permuter puisque A[0][0] restera le même
A[0][2] =AIDE
2ème itération: j=1
AIDE=A[2][1]
2ème itération: i=1 A[2][1] =A[1][2]
1ère itération: j=0 A[1][2] =AIDE
AIDE=A[1][0]
A[1][0] =A[0][1]
A[0][1] =AIDE

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:

A(N,M) * B(M,P) = C(N,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:

/ \ / \ / \

|abc| |pq| | a*p + b*r + c*t a*q + b*s + c*u |

| e f g | * | r s | = | e*p + f*r + g*t e*q + f*s + g*u |

|hij| |tu| | h*p + i*r + j*t h*q + i*s + j*u |

|klm| \ / | k*p + l*r + m*t k*q + l*s + m*u |

\ / \ /
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

Vous aimerez peut-être aussi