38206835-Algorithmique-et-structure-de-donnees-I (2)

download 38206835-Algorithmique-et-structure-de-donnees-I (2)

of 34

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