38206835-Algorithmique-et-structure-de-donnees-I (2)
-
Upload
prencess-meriixxa -
Category
Documents
-
view
313 -
download
2
Transcript of 38206835-Algorithmique-et-structure-de-donnees-I (2)
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
1/34
REPUBLIQUE TUNISIENNE
MMIINNIISSTTEERREE DDEE LLEENNSSEEIIGGNNEEMMEENNTT SSUUPPEERRIIEEUUR ET DE
LA RECHERCHE SCIENTIFIQUES ET TECHNOLOGIQUES
UUNNIIVVEERRSSIITTEE DDEE JJEENNDDOOUUBBAAFFAACCUULLTTEE DDEESS SSCCIIEENNCCEESS JJUURRIIDDIIQQUUEESS,, EECCOONNOOMMIIQQUUEESS EETT DDEE GGEESSTTIIOONN DDEE JJEENNDDOOUUBBAA
FASCICULE DE TDs
Algorithmique et structure dedonnes I
Adress aux tudiants de 1re anne Licence Fondamentale enInformatique Applique la Gestion
Equipe pdagogique :
Riadh IMED FEREH Riadh BOUSLIMIMatre-Assistant en Informatique Assistant en Informatique
Anne Universitaire : 2006-2007
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
2/34
2/34
FFIICCHHEE MMAATTIIRREE
Objectifs gnrauxIl s'agit d'une srie de TDs d'algorithmique et structure de donnes I.
Ils ont pour but de : Apprendre concevoir des algorithmes efficaces indpendamment des
langages ou environnements dexcution. tudier les types de donnes et
leurs utilisations courantes, laide dalgorithmes adapts et optimiss.
Acqurir des Bases algorithmiques (affectation, entres - sorties, structures
conditionnelles, structures itratives et boucles), notion demplacementmmoire (Tableaux), procdures, fonctions, passage des paramtres,
recherche, tris.
Pr-requisArchitecture des ordinateurs
Public-cibleCes TDs sont destin essentiellement aux tudiants de la premire anne licence
fondamentale en informatique applique la Gestion, semestre1
Volume horaireCe cours de ce module est prsent, de manire hebdomadaire, comme suit:
- 1h30mn de cours- 1h30mn de Travaux dirigs pour chaque groupe
Soit en total : 42h
Moyens pdagogiques
-
Tableau- Salle de TD- Polycopies des Travaux dirigs
Evaluation- Coefficient : 1.5- Note du contrle continu : 30%- Note d'examen : 70%
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
3/34
3/34
TTaabbllee ddeess mmaattiirreess
TD n 1 : Les actions lmentaires simples ............................................................................ 4Correction du TD 1................................................................................................................... 6TD n 2 : Les structures conditionnelles ................................................................................. 8Correction du TD 2................................................................................................................... 9TD n 3 : Les structures itratives ........................................................................................ 11Correction du TD 3................................................................................................................. 13TD n 4 : Les chaines de caractres ...................................................................................... 18Correction du TD 4................................................................................................................. 19TD n 5 : Les procdures et les fonctions ............................................................................. 22Correction du TD 5................................................................................................................. 23TD n 6 : Les Tableaux .......................................................................................................... 26
Correction du TD 6................................................................................................................. 27
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
4/34
4/34
TD n 1(Les actions lmentaires simples)
Objectifs
Connaitre le vocabulaire de base de programmation (constante, variable, expression,...)
Comprendre la dmarche de programmation
Comprendre les actions algorithmiques simples
Connaitre la structure gnrale d'un algorithme
Exercice 11. Quel est lordre de priorit des diffrents oprateurs de lexpression suivante :
((3 * a) x ^ 2) (((c d) / (a / b)) / d)
2. Evaluer lexpression suivante :
5 + 2 * 6 4 + (8 + 2 ^3) / (2 4 + 5 * 2)
3. Ecrire la formule suivante sous forme dune expression arithmtique :
x
acxy
2
4)3( 2
Exercice 2
Sachant que a = 4, b = 5, c = -1 et d = 0, valuer les expressions logiques suivantes :
1. (a < b) ET (c >= d)
2. NON (a < b) OU ( c # b )
3. NON (a # b ^ 2) OU (a * c < d))
Exercice 3
Donner toutes les raisons pour lesquelles l'algorithme suivant est incorrect :
Algoritme Incorrect
x,y : Entier
z : Rel
Dbut
z x + 2
y z
x * 2 3 + z
y 5y + 3
Fin.
Facult des Sciences Juridiques, Economiqueset de Gestion de Jendouba
Anne Universitaire : 2006/2007 Semestre 1
Module : Algorithmique et structure de donnes
Classe : 1re LFIAG
Enseignants: Riadh IMED FEREH- Riadh BOUSLIMI
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
5/34
5/34
Exercice 4
Ecrire un algorithme qui lit deux entiers au clavier et qui affiche ensuite leur somme et leur
produit.
Exercice 5
Ecrire un algorithme qui calcule et affiche la rsistance d'un composant lectronique en
utilisant la loi d'Ohm :
U : Tension en V
U = R x I avec R : Rsistance en
I : Intensit en A
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
6/34
6/34
Correction du TD 1
Exercice 1
1. ((3 * a) x ^ 2) (((c d) / (a / b)) / d)
1 3 2 8 4 6 5 7
2. 5 + 2 * 6 4 + ( 8 + 2 ^ 3) / ( 2 - 4 + 5 * 2) = 15
3. (( 3 x * y) ^ 2 4 * a * c) / (2 * x z)
Exercice 2
1. Faux
2. Vrai
3. Faux
NB : le rsultat d'une expression logique est toujours Vrai ou Faux.
Exercice 3123456789
10
Algoritme Incorrectx,y : Entier
z : Rel
Dbutz x + 2
y z
x * 2 3 + z
y 5y + 3
Fin.
Cet algorithme est incorrect pour plusieurs raisons:
Ligne 1 : le mot Algorithme s'crit avec un "h" au milieu.
Ligne 2 : la dclaration des variables commence par le mot "Var".
Ligne 5 : la valeur de x est indtermine.
Ligne 6 : incompatibilit de type (un rel affect une variable de type entier).
Ligne 7 : le membre gauche d'une affectation doit tre une variable.
Ligne 8 : il faut crire 5 *y et non 5y.
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
7/34
7/34
Exercice 4 : calcul de la somme et du produit de deux entiers
Algorithme Som_ProdVar
a , b , s , p : Entier
DbutEcrire("Entrer la valeur de a="), Lire(a)
Ecrire("Entrer la valeur de b="), Lire(b)s a + b
p a * b
Ecrire("Somme=",s)
Ecrire("Produit=",p)
Fin.
Exercice 5 : calcul de la rsistance d'un composant lectrique
Algorithme RsistanceVar
U, I , R : RelDbut
Ecrire("Entrer la tension="), Lire(U)
Ecrire("Entrer l'intensit="), Lire(I)
R U / I (* on suppose toujours I # 0 *)Ecrire("Rsistance =",R," Ohms")
Fin.
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
8/34
8/34
TD n 2(Les structures conditionnelles)
Objectif
Construire des algorithmes comportant des traitements conditionnels.
Exercice 1
Ecrire un algorithme qui calcule et affiche la valeur absolue d'un entier quelconque luau clavier.
Exercice 2
Ecrire un algorithme qui calcule et affiche la valeur absolue d'un entier quelconque lu
au clavier.
Exercice 3
Ecrire un algorithme permettant de rsoudre dans R une quation du second degr de
la forme ax2+bx+c=0.
Exercice 4
Ecrire un algorithme permettant de simuler une calculatrice 4 oprations(+, -, *, et /).
Utiliser la structure "selon" pour le choix de l'opration affecter.
Exercice 5
Ecrire un algorithme qui lit un caractre au clavier puis affiche s'il s'agit d'une lettre
minuscule, d'une lettre majuscule, d'un chiffre ou d'un caractre spcial.
Exercice 6
Une anne bissextile (contient 366 jours) si elle est multiple de 4, sauf les annes de
dbut de sicle (qui se terminent par 00) qui ne sont bissextiles que si elles sont
divisibles par 400.Exemples
1980 et 1996 sont bissextiles car elles sont divisibles par 4
2000 est une anne bissextile car elle est divisible par 400
2100 et 3000 ne sont pas bissextiles car elles ne sont pas divisibles par 400.
Ecrire un algorithme qui permet de dterminer si un entier positif donn correspond
une anne bissextile ou non.
Facult des Sciences Juridiques, Economiqueset de Gestion de Jendouba
Anne Universitaire : 2006/2007 Semestre 1
Module : Algorithmique et structure de donnes
Classe : 1re LFIAG
Enseignants: Riadh IMED FEREH- Riadh BOUSLIMI
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
9/34
9/34
Correction du TD 2
Exercice 1
Algorithme Val_AbsVar
x, va : EntierDbut
Ecrire("Entrer un entier="), Lire(x)
Si ( x >= 0 ) Alorsva x
Sinonva -x
FinSiEcrire("|",x,"|=",va)
Fin.
Exercice 2
Algorithme pair_impairVar
x : Entier
DbutEcrire("Entrer un entier="), Lire(x)
Si ( x Mod 2 = 0 ) AlorsEcrire("c'est un entier pair")
SinonEcrire("c'est un entier impair")
FinSi
Fin.
Exercice 3
Algorithme equa2dVar
a,b,c,delta : Rel
DbutEcrire("Entrer la valeur de a(non nulle)="), Lire(a)
Ecrire("Entrer la valeur de b="), Lire(b)
Ecrire("Entrer la valeur de c="), Lire(c)
delta b^2 4*a*cSi ( delta
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
10/34
10/34
Exercice 4
Algorithme calculatriceVar
val1,val2 : Rel
opration: caractre
Dbut
Ecrire("Premire oprande="), Lire(val1)Ecrire("Opration="), Lire(opration)
Ecrire("Deuxime oprande="), Lire(val2)
Selon opration Faire"+" : Ecrire("Rsultat =", val1 + val2)
"-" : Ecrire("Rsultat =", val1 - val2)
"*" : Ecrire("Rsultat =", val1 * val2)
"/" : Si ( val2 # 0) AlorsEcrire("Rsultat =", val1 / val2)
SinonEcrire("Division par zro!")
FinSiSinon
Ecrire("oprateur erron")
FinSiFin.
Exercice 5
Algorithme Nature_CaractreVar
c: caractre
DbutEcrire("Entrer un caractre="), Lire(c)
Selon c Faire"a".."z" : Ecrire("C'est une lettre miniscule")
"A".."Z" : Ecrire("C'est une lettre majuscule")
"0".."9" : Ecrire("C'est un chiffre")
SinonEcrire("c'est un caractre spcial")
FinSiFin.
Exercice 6Algorithme BissextileVar
n : Entier
DbutEcrire("Entrer l'anne="), Lire(n)
Si ( n Mod 400 = 0) OU (( n Mod 100 # 0) ET (n Mod 4) = 0))
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
11/34
11/34
TD n 3(Les structures itratives)Objectif
Construire des algorithmes comportant des traitements itratifs.
Exercice 1
Ecrire un algorithme qui lit un entier positif n puis affiche tous ses diviseurs.
Exercice 2Ecrire un algorithme avec trois versions qui lit un entier positif n puis calcule et
affiche son factoriel selon la formule n! = 1 x 2 x x n.
PourFaire
Tant que Faire Rpter Jusqu'
Exercice 3
Ecrire un algorithme permettant de :
Lire un nombre fini de notes comprises entre 0 et 20.
Afficher la meilleure note, la mauvaise note et la moyenne de toutes les notes.
Exercice 4
Calculer ab avec a rel et b entier par multiplication successives.
Exercice 5
Ecrire un algorithme qui lit un entier positif et vrifie si ce nombre est premier ou non.
Remarque : un nombre premier n'est divisible que par 1 ou par lui-mme.
Exercice 6
Ecrire un algorithme qui lit deux entiers positifs A et B puis calcule et affiche leur
PGCD en utilisant la mthode suivante:
Si A = B; PGCD(A,B) = A
Si A>B; PGCD(A,B) = PGCD(A-B,B)
Si A
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
12/34
12/34
Exercice 7
Ecrire un algorithme qui calcule le PPCM (Plus Petit Commun Multiple) de 2 entiers
positifs A et B en utilisant la mthode suivante :
Permuter, si ncessaire, les donnes de faon ranger dans A le plus grand des
2 entiers;
Chercher le plus petit multiple de A qui est aussi mutiple de B.
Exemple: PPCM(6,8) = PPCM(8,6) = 24.
Exercice 8
Ecrire un algorithme qui calcule et affiche les 10 premiers termes de la suite de
Fibonacci.
La suite de Fibonacci est dfinie par :
F0 = 1
F1 = 1
Fn = Fn -2 + Fn -1 pour n > 1.
Exercice 9
Ecrire un algorithme qui calcule la somme harmonique s = =
n
i i1
1; n est un entier
positif lu partir du clavier
Exemple: Pour n = 3, s = 1 + 1/2 + 1/3 = 1.83
Exercice 10
Parmi tous les entiers suprieurs 1, seuls 4 peuvent tre reprsents par la somme des
cubes de leurs chiffres.
A titre d'exemple, 153 = 13 + 53 + 33 est un nombre cubique.
Ecrire un algorithme permettant de dterminer les 3 autres.
Note : les 4 nombres sont compris entre 150 et 410.
Exercice 11Un nombre parfait est un nombre prsentant la particularit d'tre gal la somme de
tous ses diviseurs, except lui-mme.
Le premier nombre parfait est 6 = 3 + 2 + 1.
Ecrire un algorithme qui affiche tous les nombres parfais infrieurs 1000.
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
13/34
13/34
Correction du TD 3
Exercice 1
Algorithme Diviseurs
Varn,i : Entier
DbutEcrire("Entrer un entier positif="), Lire(n)
Pour i de 1 n FaireSi ( n Mod i = 0 ) Alors (* Si le reste de la valeur de n est gale 0 *)
Ecrie(i)
Fin SiFin Pour
Fin.
Exercice 2 VersionPour Faire
Algorithme FactoVar
n,i,f : Entier
DbutEcrire("Entrer un entier positif="), Lire(n)
f 1 (* initialisation de la factorielle 1 puisque 1!=1 *)
Pour i de 2 n Fairef f * i (* Pour chaque parcours on multiplie l'ancienne valeur de f par i*)
Fin PourEcrire(n,"!=",f)Fin.
Version Tant que FaireAlgorithme FactoVar
n,i,f : Entier
DbutEcrire("Entrer un entier positif="), Lire(n)
f 1 (* initialisation de la factorielle 1 puisque 1!=1 *)
i2 (* initialisation du compteur i *)Tant que(in) Fairef f * i (* Pour chaque parcours on multiplie l'ancienne valeur de f par i*)
i i + 1 (* incrmentation du compteur i *)
Fin PourEcrire(n,"!=",f)
Fin.
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
14/34
14/34
VersionRpter Jusqu'Algorithme FactoVar
n,i,f : Entier
DbutEcrire("Entrer un entier positif="), Lire(n)
f
1 (* initialisation de la factorielle 1 puisque 1!=1 *)i2 (* initialisation du compteur i *)
Rpterf f * i (* Pour chaque parcours on multiplie l'ancienne valeur de f par i*)
i i + 1 (* incrmentation du compteur i *)
Jusqu' (i=n)Ecrire(n,"!=",f)
Fin.
Exercice 3
Algorithme NotesVarn, i: Entier
note, min, max, s : Rel
DbutEcrire("Entrer le nombre de notes=")
Lire(a) (* On suppose que n est toujours suprieur zro *)
s 0
min 0 (* initialisation de la note minimale 0 *)max 20
Pour i de 1 n Faire
Ecrire("Entrer une note="), Lire(note)s s + note (* additionner la nouvelle note *)
Si ( note < min ) Alorsmin note (* mmorisation de la nouvelle valeur minimale *)
Fin SiFin PourEcrire("Meilleur note = ",max)
Ecrire("Mauvaise note = ",max)
Ecrire("Moyenne des notes = ",s/n)
Fin.
Exercice 4
Algorithme PuissanceVar
a,c : Rel
b,i: Entier
DbutEcrire("Entrer la valeur de a="), Lire(a)
Ecrire("Entrer la valeur de b="), Lire(b)
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
15/34
15/34
c 1 (* initialisation du rsultat du produit *)
Pour i de 1 Abs(b) Fairec c * a (*produit de axa b fois *)
Fin PourSi ( b < 0 ) Alors (* si b est ngative alors le rsultat sera 1/c *)
c 1 / c
Fin SiEcrire(a," la puissance ",b,"=",c)Fin.
Exercice 5
Algorithme PremierVar
n,i,nb_div: Entier
DbutEcrire("Entrer un entier possitif="), Lire(n)
nb_div 0 (* initialisation du nombre de diviseurs*)i 1
Tant que (i
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
16/34
16/34
Exercice 7
Algorithme PPCMVar
a,b,i,x: Entier
DbutEcrire("Entrer la valeur de a ="), Lire(a)
Ecrire("Entrer la valeur de b ="), Lire(b)
Si ( a < b ) Alorsx a (*-------------------*)a b (* Permutation *)
b x (*------------------*)
FinSii 1
Tant que (((i*a) Mod b) # 0) Fairei i +1
Fin Tant que
Ecrire("PPCM =",i*a)Fin.
Exercice 8
Algorithme FiboVar
f0,f1,f,i: Entier
Dbutf0 1
Ecrire("f0 = ",f0)
f1 1Ecrire("f1 = ",f1)
Pour i de 2 9 Fairef f0 + f1
Ecrire("f",i," = ",f)
f0 f1
f1 f
Fin PourFin.
Exercice 9
Algorithme SommeVarn,i: Entier
s : Rel
DbutEcrire("Entrer la valeur de n = "), Lire(n)
s 0 (* initialisation de la somme *)
Pour i de 1 n Faires s + 1/i (* incrmenter la somme avec la nouvelle valeur de 1/i *)
Fin PourEcrire("somme=",s)
Fin.
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
17/34
17/34
Exercice 10
Algorithme cubiqueVar
i, centaine, dizaine, unite: Entier
DbutPour i de 150 410 Faire
centaine i Div 100 (* ex : i=150 centaine = 1 *)dizaine ( i Mod 100) Div 10 (* ex : i=150 dizaine = 5 *)
unite (i Mod 100) Mod 10 (* ex : i=150 unite = 0 *)
Si (( centaine^3 + dizaine^3+unite^3) = i) AlorsEcrire(i," est un nombre cubique")
Fin SiFin Pour
Fin.Remarque : les nombres cubiques sont : 153, 370, 371 et 407
Exercice 11Algorithme parfaitsVar
i, n, s, j: Entier
DbutPour i de 1 1000 Faire
s0
Pour j de 1 ( i Div 2 ) FaireSi (i Mod j = 0) Alors
s s + j
Fin SiPour
Fin PourSi ( s= i) Alors
Ecrire(i, " est un nombre parfait")
Fin SiFin.Remarque : les nombres parfait infrieurs 1000 sont : 6, 28, 496.
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
18/34
18/34
TD n 4(Les chanes de caractres)
Objectif
Construire des algorithmes qui traitent des caractres et des chanes de caractres.
Exercice 1
Ecrire un algorithme qui lit un caractre au clavier puis affiche son prdcesseur, son
successeur et le code ASCII de son quivalent en majuscule.
Exercice 2
Ecrire un algorithme qui lit une lettre au clavier puis affiche s'il s'agit d'une consonne
ou d'une voyelle.
Remarque :Les voyelles sont :"A", "a", "E", "e", "I", "i", "O", "o", "U", "u", "Y", "y".
Exercice 3
Ecrire un algorithme "Palind" qui lit une chane de caractres et vrifie si cette chaineest un palindrome ou non.
Un palindrome est un mot qui peut tre lu indiffremment de droite gauche ou de
gauche droite (Exemple: "AZIZA", "LAVAL", "RADAR",).
Exercice 4Ecrire un algorithme qui lit une chane de caractres puis affiche son inverse.
Exemple: Si la chane entre est "algo", l'algorithme doit afficher "ogla"
Exercice 5
Ecrire un algorithme qui lit une chane de caractres et renvoie son quivalent en
majuscules.
Exercice 6
Ecrire un algorithme qui permet de compter le nombre de mots dans une phrase.
La phrase commence obligatoirement par une lettre et les mots sont spars par des
espaces.
Exercice 7
Ecrire un algorithme qui dtermine et affiche le mot le plus long dans une phase
donne.
Exercice 8
Ecrire un algorithme qui lit :
Un mot (chane de caractre forme uniquement de lettres)
Une lettrePuis affiche le nombre d'apparitions de la lettre dans le mot.
Facult des Sciences Juridiques, Economiqueset de Gestion de Jendouba
Anne Universitaire : 2006/2007 Semestre 1
Module : Algorithmique et structure de donnes
Classe : 1re LFIAG
Enseignants: Riadh IMED FEREH- Riadh BOUSLIMI
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
19/34
19/34
Correction du TD 4
Exercice 1
Algorithme CaractVar
c : Caractre
DbutEcrire("Entrer un caractre="), Lire(c)
Ecrire(pred(c)) (* affichage du prdcesseur du caractre c *)Ecrire(succ(c)) (* affichage du successeur du caractre c *)Ecrire(asc(majus(c)) (* affichage du code ASCII du majuscule de caractre c *)
Fin.
Exercice 2
Algorithme Cons_VoyVar
c : Caractre
DbutRpter
Ecrire("Entrer une lettre:"), Lire(c) (* saisie contrler d'une lettre *)
Jusqu' ( c >= "A" ET c = "a" ET c
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
20/34
20/34
Si (Pal) AlorsEcrire(ch, " est un palindrome")
SinonEcrire(ch, " n'est pas un palindrome")
Fin SiFin.
Exercice 4Algorithme inverseVar
i,L : Rel
ch1,ch2: Chaine
DbutEcrire("Entrer une chaine :"), Lire(ch1)
L Long(ch1) (* Longueur de la chane *)ch2 "" (* initialisation de la chane inverse *)
Pour i de 1 L Fairech2ch1[i] + ch2 (* insertion du caractre au dbut la chane *)
Fin PourEcrire("Inverse de la chane=", ch2)
FinExercice 5Algorithme MajusculeVar
i,L : Entier
ch1,ch2: Chane
DbutEcrire("Entrer une chane :"), Lire(ch1)
L Long(ch1) (* Longueur de la chane *)ch2 "" (* initialisation de la nouvelle chane au vide *)
Pour i de 1 L Fairech2ch2 + Majus(ch1[i]) (* conversion de chaque lettre en majuscule *)
Fin PourEcrire("Chane en majuscule=", ch2)
Fin
Exercice 6Algorithme Comptage_MotsVar
i,L,nb_mot : Entierphase: Chane
DbutEcrire("Entrer une phrase non vide :"), Lire(phrase)
L Long(phrase) (* longueur de la phrase *)
Nb_mot 1 (* initialisation du compteur de mot // par dfaut on un seul mot *)
Pour i de 1 L FaireSi (phrase[i] = " ") Alors
nb_mot nb_mot + 1 (* si on trouve on espace on incrmente le Nb_mot *)
Fin SiFin PourEcrire("Nombre de mots =", nb_mot)
Fin
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
21/34
21/34
Exercice 7Algorithme Plus_Long_MotVar
i,j,L: Entier
phase, mot, motpl: Chane
Dbut
Ecrire("Entrer une phrase:"), Lire(phrase)L Long(phrase)
motpl "" (* initialisation du mot le plus long *)
i 1
Tant que ( i
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
22/34
22/34
TD n 5(Procdures et fonctions)
Objectifs Appliquer la dmarche de programmation modulaire pour construire des algorithmes
structurs en procdures et fonctions
Savoir le mode de passage de paramtre d'une procdure et une fonction Apprendre et distinguer l'appel d'une procdure et une fonction
Exercice 1Ecrire une procdurepuissance qui calcule c = ab = a x a x a x x a (b fois); a et b
tant des entiers positifs. Tester cette procdure
Exercice 2
Ecrire une procdure permut qui permet d'changer les valeurs de 2 entiers a et b.
Tester cette procdure
Exercice 3
Ecrire une fonction minimum qui retourne le minimum de 2 entiers a et b.
Tester cette fonctionExercice 4
1. On appelle bigramme une suite de deux lettres. Ecrire une procdure qui calculele nombre d'occurrences d'un bigramme dans une chane de caractres.
2. Peut-on transformer cette procdure en fonction? Si oui crire cette fonction.
Exercice 5
Ecrire une fonction Triangle qui permet de vrifier si les 3 nombres a,b et c peuvent
tre les mesures des cts d'un triangle rectangle.
Remarque: D'aprs le thorme de Pythagore, si a, b et c sont les mesures des ctsd'un rectangle, alors a2 = b2 + c2 ou b2 = a2 + c2 = a2 + b2
Facult des Sciences Juridiques, Economiqueset de Gestion de Jendouba
Anne Universitaire : 2006/2007 Semestre 1
Module : Algorithmique et structure de donnes
Classe : 1re LFIAG
Enseignants: Riadh IMED FEREH- Riadh BOUSLIMI
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
23/34
23/34
Correction du TD 5
Exercice 1
Procdure Puissance(a,b : Entier, var c : Entier)Var
i : Entier
Dbutc1
Pour i de 1 b Faire
c c * a
Fin PourFin
Algorithme Test {programme principal}Var
x,y,r : Entier
DbutEcrire("Entrer un entier x="), Lire(x)
Ecrire("Entrer un entier y="), Lire(y)
Puissance(x,y,r) //appel de la procdureEcrire(x," la puissance de ",y, " =",r)
Fin.Exercice 2
Procdure Permut(var a,b : Entier)Var
aux : Entier
Dbutaux a
A bb aux
Fin
Algorithme Test {programme principal}Var
x,y : Entier
DbutEcrire("Entrer un entier x="), Lire(x)
Ecrire("Entrer un entier y="), Lire(y)
Permut(x,y) //appel de la procdureEcrire(La nouvelle valeur de x=",x, " et de y=",y)
Fin.
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
24/34
24/34
Exercice 3
Fonction Minimum(a,b : Entier) : EntierVar
min : Entier
DbutSi ( a
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
25/34
25/34
Exercice 5
Fonction triangle(a,b,c : Rel) : BoolenDbut
Si ( a^2=b^2+c^2) OU (b^2=a^2+c^2) OU (c^2=a^2+b^2) Alorstriangle Vrai
Sinon
triangle FauxFin Si
Fin
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
26/34
26/34
TD n 6(Les Tableaux)
Objectifs Matriser la manipulation des tableaux une ou deux dimensions.
Traitement des problmes de recherche dans un tableau (Recherche squentielle, Recherchedichotomique;
Savoir les principaux algorithmes de tri d'un tableau.
Exercice 1
Ecrire une procdureRemplirpermettant le remplissage d'un tableau de n entiers.
Exercice 2
Ecrire une procdureAfficherpermettant l'afficher les lments d'un tableau de n entiers.
Exercice 3
Ecrire une fonction Minimum permettant de chercher le minimum dans un tableau T
de n entiers.
Exercice 4
Ecrire une fonction Recherche_seq qui permet de cherche un lment x dans un
tableau T. La fonction renvoie Vrai s'il est existant et Faux sinon.
Exercice 5
Mme exercice que n 3 mais on suppose que le tableau est tri.
Exercice 6
Donner le principe et l'algorithme de tri de :
Tri bulle
Tri par slection
Tri par insertion
Exercice 7
Ecrire une procdure qui permet de fusionner deux tableaux tris A et B contenantrespectivement n et m lments. Le rsultat est un tableau tri C (n+m) lments.
Exemple:A 1 20 41 B 19 23 27 54 91
C 1 20 41 19 23 27 54 91
Exercice 8
1. Ecrire une procdure permettant de remplir une matrice;2. Ecrire une procdure permettant d'afficher une matrice;
3. Ecrire une fonction qui renvoie la somme de deux matrices M1 et M2;4. Ecrire une fonction qui renvoie le produit de deux matrices M1 et M2;
Facult des Sciences Juridiques, Economiqueset de Gestion de Jendouba
Anne Universitaire : 2006/2007 Semestre 1
Module : Algorithmique et structure de donnes
Classe : 1re LFIAG
Enseignants: Riadh IMED FEREH- Riadh BOUSLIMI
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
27/34
27/34
Correction du TD 6
Exemple de dclaration d'un tableau
Constantesn = 100
TypeTab = Tableau[1..n] de Entier
VarT : Tab
Exemple de dclaration d'une matrice
Constantesn = 100m= 100
TypeMat = Tableau[1..n,1..m] de Entier
VarMatrice : Mat
Exercice 1
Procdure Remplir (var T : Tab; n: Entier)Var
i : Entier
DbutPour i de 1 n Faire
Ecrire("T[",i,"]="),Lire(T[i])
Fin PourFin
Exercice 2
Procdure Afficher (T : Tab; n: Entier)Var
i : Entier
DbutPour i de 1 n Faire
Ecrire(T[i], " ")
Fin PourFinExercice 3
Fonction Minimum(T : Tab) : EntierVar
min : Entier
Dbutmin T[1]
Pour i de 1 n FaireSi ( min> T[i] ) Alors
min a
Fin SiFin Pour
Fin
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
28/34
28/34
Exercice 4
Principe de la recherche squentielle :
Comparer x aux diffrents lments du tableau jusqu' trouver x ou atteindre la fin du tableau.
Version avec Rpter jusqu'
Fonction Recherche_seq (T:Tab; n,x:Entier) : EntierVar
i, : Entier
Dbuti 0
Repeterii+1
Jusqu' (T[i]=x) OU (i = n)
Si(T[i]=x) AlorsRecherche_seq VraiSinon
Recherche_seq Faux
Fin SiFin
Version avec Tant que Faire
Fonction Recherche_seq (T:Tab; n,x:Entier) : EntierVar
i, : Entier
Dbut i 1Tant que (T[i] # x) ET (i
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
29/34
29/34
Il y a trois cas possibles :
x < T[m] : l'element x, s'il existe, se trouve dans l'intervalle [premier..m-1].
x > T[m] : l'lment x, s'il existe, se trouve dans l'intervalle [m+1...dernier].
x = T[m] : l'lment de valeur x est trouv, la recherche est termine.
La recherche dichotomique consiste itrer ce processus jusqu' ce que l'on trouve x ou que
l'intervalle de recherche soit vide.
Fonction Recherche_dich(T:Tab; n,x:Entier) : EntierVar
premier, m, dernier : Entier
trouve : Boolen
Dbutpremier 1
dernier n
trouve Faux
Rpterm(premier + dernier) Div 2
(1)
Si ( x < T[m] ) Alorsdernier m 1
SinonSi ( x > T[m] ) Alorspremier m + 1
Sinontrouve Vrai
Fin SiJusqu' (trouve=vrai) OU (premier>dernier)Recherche_dich trouve
Fin
(2)Exercice 6
Tri bulle
Principe :
On rpte le traitement suivant :
Parcourir les lments du tableau de 1 (n-1); si l'lment i est suprieur l'lment
(i+1), alors on permute.
Le programme s'arrte lorsque aucune permutation n'est ralisable.
Procdure Tri_Bulles( var T: Tab; n: Entier)Var
i, aux : Entier
change : Boolen
DbutRpter
change Faux
Pour i de 1 (n-1) FaireSi(T[i] > T[i+1]) Alors
aux T[i]
T[i] T[i+1]
T[i+1] aux
change Vrai
Fin SiFin Pour
Jusqu' (change = Faux)FinOptimisation de la procdure du Tri bulleProcdure Tri_Bulles( var T: Tab; n: Entier)Var
i, aux : Entier
change : Boolen
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
30/34
30/34
DbutRpter
change Faux
Pour i de 1 (n-1) FaireSi(T[i] > T[i+1]) Alors
aux T[i]
T[i]
T[i+1]T[i+1] aux
change Vrai
Fin SiFin Pournn-1
Jusqu' (change = Faux) OU (n = 1)Fin
Trace d'excutionTableau initial 6 4 2 1 4
Aprs la 1 re itration 4 2 1 4 6
Aprs la 2 me itration 2 1 4 4 6Aprs la 3
meitration 1 2 4 4 6
Aprs la 4me
itration 1 2 4 4 6
Tri par slction
Principe :Cette mthode consiste :
chercher l'indice du plus petit lment du tableau T[1..n] et permuter l'lmentcorrespondant avec l'lment d'indice 1;
chercher l'indice du plus petit lment du tableau T[2..n] et permuter l'lmentcorrespondant avec l'lment d'indice 2;
chercher l'indice du plus petit lment du tableau T[n-1..n] et permuter
l'lment correspondant avec l'lment d'indice (n-1);
Procdure Tri_Selection( var T: Tab; n: Entier)Var
i,j,aux,indmin: Entier
DbutPour i de 1 (n-1) Faire
indmin iPour j de (i+1) n Faire
Si(T[j] < T[indmin]) Alorsindmin j
Fin SiFin Pouraux T[i]
T[i] T[indmin]
T[indmin]aux
Fin PourFin
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
31/34
31/34
Trace d'excution
Tableau initial 6 4 2 1 4
Aprs la 1re
itration 1 4 2 6 4
Aprs la 2 me itration 1 2 4 6 4
Aprs la 3me
itration 1 2 4 6 4
Aprs la 4me
itration 1 2 4 4 6
Tri par insertion
Principe :Cette mthode consiste prendre les lments de la liste un par un et insrer chacun
dans sa bonne place de faon que les lments traits forment une sous-liste trie.Pour ce faire, on procde de la faon suivante :
comparer et permuter si ncessaire T[1] et T[2] de faon placer le plus petit
dans la case d'indice 1
comparer et permuter si ncessaire l'lment T[3] avec ceux qui le prcdent
dans l'ordre (T[2] puis T[1]) afin de former une sous-liste trie T[1..3]
comparer et permuter si ncessaire l'lment T[n] avec ceux qui le prcdent
dans l'ordre (T[n-1] , T[n-2],) afin d'obtenir un tableau tri.
Procdure Tri_Insertion( var T: Tab; n: Entier)
Vari,j,x,pos: Entier
DbutPour i de 2 n Faire
pos i -1
Tant que (pos >=1) ET (T[pos] >T[i]) Fairepos pos- 1
Fin Tant quepos pos + 1x T[i]
Pour j de (i-1) pos [pas = -1] FaireT[j+1] T[j]
Fin PourT[pos]x
Fin PourFin
Trace d'excutionTableau initial 6 4 2 1 4
Aprs la 1re
itration 4 6 2 6 4
Aprs la 2me
itration 2 4 6 6 4
Aprs la 3 me itration 1 2 4 6 4Aprs la 4
meitration 1 2 4 4 6
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
32/34
32/34
Exercice 7
Procdure Fusion (A : Tab; B:Tab; var C:Tab; n, m:Entier; var k :Entier)Var
i,j : Entier
DbutTant que (i
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
33/34
33/34
Exercice 8
1. Remplissage d'une matriceProcdure Remplir (var matrice : Mat; n,m: Entier)Var
i,j : Entier
DbutPour i de 1 n Faire
Pour j de 1 m FaireEcrire("Entrer un entier : "),Lire(T[i,j])
Fin PourFin Pour
Fin
2. Affichage d'une matriceProcdure Afficher (matrice : Mat; n,m: Entier)Var
i,j : EntierDbutPour i de 1 n Faire
Pour j de 1 m FaireEcrire(T[i,j])
Fin PourFin Pour
Fin
3. Somme de deux matrices
Principe:Soient M1 et M2 deux matrices n ligne et m colonnes.
M3 = M1 + M2
Exemple
M1= M2=M3=
Procdure SomMat (M1,M2 : Mat ; var M3 : Mat; n,m: Entier)
Vari,j : Entier
DbutPour i de 1 n Faire
Pour j de 1 m FaireM3[i,j]M1[i,j] + M2[i,j]
Fin PourFin Pour
Fin
1 2 34 5 6
2 5 33 0 1
3 7 67 5 7
-
8/3/2019 38206835-Algorithmique-et-structure-de-donnees-I (2)
34/34
4. Produit de deux matrices
Principe:Soient M1 et M2 deux matrices n ligne et m colonnes.
M3 = M1 * M2
M3i,j = M1i,1*M21,j + M1i,2*M22,j + + M1i,n*M2m,j
Exemple
M1= M2=M3=
Procdure ProdMat (M1,M2 : Mat ; var M3 : Mat; n,m: Entier; var k : Entier)Var
i,j : Entier
Dbut Pour i de 1 n FairePour j de 1 m Faire
M3[i,j] 0
Pour kde 1 m FaireM3[i,j] M3[i,j] + M1[i,k] * M2[k,j]
Fin PourFin Pour
Fin PourFin
1 2 34 0 5
2 13 01 4
11 1313 24