Vous êtes sur la page 1sur 71

Cours dalgorithmique

Auteur : Madani BOUKEBECHE 1


Introduction

Le mtier de linformatique est linformatisation


totale ou partielle de procdures/processus pour
optimiser (simplifier/acclrer) leur excution.

Linformatisation dune procdure/processus


consiste mettre en uvre un programme (en
utilisant un langage de programmation ex. Java,
C#, ) qui, une fois excut, produit le rsultat
attendu.

2
12-2017 Madani Boukebeche - esic
Introduction

Lcriture de programmes informatiques passe


par une tape de conception (de la solution)
Lors de cette tape, les programmes sont conus sous
forme dalgorithmes
Un algorithme exprime un raisonnement
logique/mathmatique pour solutionner un
problme donn
Lalgorithmique est lactivit dexprimer les instructions
rsolvant un problme donn indpendamment de
tel ou tel langage de programmation

3
12-2017 Madani Boukebeche - esic
Introduction

Un algorithme est donc, une suite


dinstructions, qui une fois excute
correctement, conduit un rsultat donn

Pour fonctionner, un algorithme doit contenir


uniquement des instructions
comprhensibles par celui qui devra
lexcuter :
Le coder
Le vrifier

4
12-2017 Madani Boukebeche - esic
Conventions dcriture
Un algorithme est crit en pseudo-code
Pseudo-code : ressemble un langage de
programmation authentique (C, Pascal, Java, )
avec beaucoup de simplification.
Gnralement dans une langue de communication ex.
Franais

NB : Il est possible dcrire un algorithme


au moyen dorganigrammes :
reprsentation graphique avec des
carrs, des losanges, etc.

5
12-2017 Madani Boukebeche - esic
Ingrdients dalgorithmes
Pour crire un algorithme on utilise :
Variables
Expressions & oprations
Bloc dinstructions
Affectation
Oprations
Fonctions et Appels de fonctions
Structures de contrle :
Conditions,
Boucles,

6
12-2017 Madani Boukebeche - esic
Les Variables
Dans un programme informatique, on va avoir
en permanence besoin de stocker
provisoirement des valeurs de types diffrents :
Utilisation de variables

Une variable est une bote identifie par un nom,


dans laquelle on stocke/retrouve/restocke des
valeurs

7
12-2017 Madani Boukebeche - esic
Dclaration des variables
Cest mentionner lintention dutiliser une variable
en lassociant le cas chant un type et
linitialiser, optionnellement, avec une valeur

Le nom de la variable obit des impratifs des


identifiants des langages de programmation :
Cest une suite alpha-numerique et _ ne commenant
pas par un chiffre

NB : certains langages comme XML autorisent dautres caractres.


8
12-2017 Madani Boukebeche - esic
Dclaration des variables
Le type permet de dterminer la taille et
appliquer les contrles ncessaires :
Types numriques : Entier, Rel,
Type caractres : a, "ab2 cdef5"
Type boolen : vrai, faux

Syntaxe pour dclarer une variable :


Type nomVariable ou bien nomVariable Type
Exemples ou bien
Entier x x entier
Chaine de caractres str str chane de caractres
9
12-2017 Madani Boukebeche - esic
Linstruction daffectation
Affecter une variable cest lui attribuer une valeur
Symbole utilis
Comptabilit entre le contenant et le contenu
De prfrence, une variable assigne doit tre au
pralable dclare
Exemple 1 :
i 24
Attribue la valeur 24 la variable i

Exemple 2 : affectation lors de la dclaration (initialisation)


Booleen bool vrai
10
12-2017 Madani Boukebeche - esic
Commentaires
Texte libre (non-codable) qui explique des
parties de lalgorithme

/* Voici un commentaire qui nest pas


destiner tre cod */

11
12-2017 Madani Boukebeche - esic
Exercice
Exercice
Quelles seront les valeurs des variables A, B et C aprs
excution des instructions suivantes ?

Dbut
Entier A, B, C
A5
B3
CA+B
A2
CBA
Fin 12
12-2017 Madani Boukebeche - esic
Corrig
Aprs La valeur des variables est :
A5 A=5 B=? C=?
B3 A=5 B=3 C=?
CA+B A=5 B=3 C=8
A2 A=2 B=3 C=8
CBA A=2 B=3 C=1

13
12-2017 Madani Boukebeche - esic
Exercice
Exercice 2
Un classique absolu, quil faut absolument
matriser :
Ecrire un algorithme permettant dchanger
(permuter) les valeurs de 2 variables A et B, et ce
quelque soit leur contenu pralable.

14
12-2017 Madani Boukebeche - esic
Corrig
Dbut

CA
AB
BC
Fin

On est oblig de passer par une variable dite


temporaire (la variable C).

15
12-2017 Madani Boukebeche - esic
Expressions et oprateurs
Une expression est un ensemble doprandes,
relies par des oprateurs, et quivalent
(valuable) une seule valeur
Exemples doprateurs :
+, *, ET,

Exemples dexpressions :
7
5+4
123-45+844
oto-12+5-Riri

16
12-2017 Madani Boukebeche - esic
Oprateurs
Oprateurs arithmtiques

17
12-2017 Madani Boukebeche - esic
Oprateurs
Oprateurs de comparaison

18
12-2017 Madani Boukebeche - esic
Oprateurs
Oprateurs logiques (boolens)
A B A ou B
0 0 0
0 1 1
1 0 1
1 1 1

A B A ET B
0 0 0
0 1 0
1 0 0
1 1 1
A NON A
0 1
1 0 19
12-2017 Madani Boukebeche - esic
Oprateurs
Oprateur alphanumrique : + (ou bien &)
Dbut
Chaines de caractres A, B, C
A "Algo"
B "rithme"
CA+B /* C contiendra "Algorithme" */
Fin

20
12-2017 Madani Boukebeche - esic
Instructions
Une instruction est un ordre compos dune ou
plusieurs expressions
Affectation par une valeur ou une expression
x5 / * instruction daffectation de x avec une valeur 5 */
y x*2+1 / * instruction daffectation de y avec une expression
value 11 */
Expression de calcul
x+y
Appel de fonction
.

Un bloc dinstructions est form dune ou plusieurs


instructions pouvant tre excutes conjointement
21
12-2017 Madani Boukebeche - esic
Fonctions / Appel de fonctions
Une fonction est un bloc dinstructions nomm
dfini une fois
Dtaille plus loin
excut chaque besoin, par appel

Sortie : Ecrire Appel de la fonction


Ex. Ecrire ("Saisissez votre nom" ) Ecrire. Le texte/le contenu
Ecrire (x) /* x est une variable */ de la variable entre
parenthses est affich
Entre : Lire
Ex. Lire (x) /* x est une variable */
Appel de la fonction Lire.
Lit ce qui est saisi en
Autres : entre (clavier) et le met
Racine_carree (x) dans la variable entre
Majuscule(s) parenthses
22
12-2017 Madani Boukebeche - esic
Structures de contrle :
Si
Si
Si (condition) Alors Si (x=3) Alors
action1 Ecrire ("x vaut 3") ;
FinSi FinSi

Si-Sinon Si (condition) Alors Entier x 0 ;


action1 Si (x>0) Alors
Sinon Ecrire ("x positif" );
action 2 Sinon
FinSi Ecrire ("x non positif" );
FinSi
23
12-2017 Madani Boukebeche - esic
Structures de contrle :
Si
Exercice
Ecrire un algorithme qui lit 3 valeurs et affiche la
plus petite des trois

24
12-2017 Madani Boukebeche - esic
Structures de contrle :
TantQue
Boucle Tant que

Forme 1
TantQue (condition) faire Entier x 0 ;
action1 TantQue (x10) faire
FinTantQue xx+1;
FinTantQue

Forme 2
Faire Entier x 0 ;
action1 Faire
TantQue (condition) xx+1;
TantQue (x10)
25
12-2017 Madani Boukebeche - esic
Structures de contrle :
TantQue
Exercice
Ecrire un algorithme qui lit un entier et affiche le
factoriel de cet entier

26
12-2017 Madani Boukebeche - esic
Structures de contrle :
Rpter
Boucle Rpter

Entier x 0 ;
Rpter Rpter
action1 xx+1;
Jusqu (condition) Jusqu (x=10)

27
12-2017 Madani Boukebeche - esic
Structures de contrle :
Rpter
Exercice
Ecrire un algorithme qui lit un entier et affiche le
factoriel de cet entier

28
12-2017 Madani Boukebeche - esic
Structures de contrle :
Pour
Boucle Pour
Pour variable valeur 1 A Pour i1 A 10 Faire
valeur 2 Faire afficher(i * i);
action1 Fin Pour
Fin Pour
Pas, par dfaut, 1

Pour variable valeur 1 A Pour i1 A 10 Pas 2 Faire


valeur 2 Pas valeur 3 Faire afficher(i*i);
action1 Fin Pour
Fin Pour
Si le Pas est ngatif,
valeur 1 doit tre valeur 2
29
12-2017 Madani Boukebeche - esic
Structures de contrle :
Pour
Exercice
Ecrire un algorithme qui lit un entier et affiche le
factoriel de cet entier

30
12-2017 Madani Boukebeche - esic
Fonctions & procdures
A quoi a sert ?
Avoir un bloc de traitement appeler selon les besoins
Une fonction est compose :
Nom (identifiant)
de paramtre(s) (ou argument)
du type de la variable renvoye par la fonction
une procdure ne renvoie pas de retour
du corps de la fonction
Fonction NomFonction (var1,,varN) Fonction auCarre (Entier x)
Retourne: type Retourne: Entier
corps de la fonction xx*x;
Retourner var ; Retourner x ;
FinFonction FinFonction 31
12-2017 Madani Boukebeche - esic
Fonctions & procdures
Dans certains langages de programmation on
distingue entre fonction et procdure :
Une fonction renvoie une valeur de retour
Une procdure (routine) ne renvoie pas de valeur de retour
La procdure peut utiliser les paramtres pour transmettre des rsultats

Procedure nomProcedure (var1,,varN) Entier y


Procedure auCarre (Entier x)
corps de la procedure yx*x;
FinProcedure FinProcedure

Dans certains langages de programmation une procdure 32


12-2017 Madani Boukebeche - esic
Fonctions & procdures
Appel dune fonction :
NomFonction (valeurVar1, valeurVarN)
Ou bien
variable NomFonction (valeurVar1, valeurVarN)

Exemples :
auCarre (4) ;
Entier z auCarre (4) ; //ici z=16
On peut utiliser des noms de fonctions des langages
de programmation ou leur traduction : split,
startWidth, uppercase, indexOf, .
33
12-2017 Madani Boukebeche - esic
Fonctions & procdures
Une fonction / procdure peut soulever des erreurs
au moyen dun mcanisme dit Exception
Fonction factoriel (Entier n) Retourne Entier
Si (n < 0) Alors
Exception("Pas de factoriel")
FinSi Dbut
Entier n, f
Lire (n)
. f factoriel(n)
Fin Fonction Si (exception) Alors
Afficher (exception)
Sinon
Afficher ("Factoriel de " + n + " = "+f)
FinSI
Fin
34
12-2017 Madani Boukebeche - esic
Fonctions & procdures
Exercice
Ecrire un algorithme pour une fonction factoriel
qui prend comme argument un entier et retourne
le factoriel de cet entier.
Ecrire un algorithme qui lit un entier, calcul le
factoriel de cet entier en appelant la fonction
Factoriel et affiche le rsultat retourn par la
fonction.
Rappel : 0! = 1
1! = 1
n! = n*(n-1)
Pas de factoriel pour les ngatives
35
12-2017 Madani Boukebeche - esic
Fonctions & procdures
Fonction factoriel (Entier n) Retourne Entier
Entier i 1, f 1
Si (n < 0) Alors
Exception("Pas de factoriel")
FinSi Dbut
TantQue (i n) Faire Entier n, f
f f*i Lire (n)
i i+1 f factoriel(n)
FinTantQue
Si (exception) Alors
Retourner f
Afficher (exception)
Fin Fonction
Sinon
Afficher ("Factoriel de " +n + "="+f)
FinSI
Fin

36
12-2017 Madani Boukebeche - esic
Structures de donnes
Tableaux
Tableau
Variable pouvant stocker plusieurs valeurs en mme temps
Possde une taille = nombre des valeurs pouvant tre stockes
Les valeurs sont toutes du mme type
Chaque valeur est accessible via un indice allant de 0 taille -1
Pour un tableau tab, sa taille est obtenue par tabTaille

Exemple :
Entier tab[10]
Entier i 3
tab[0] 15 /* Affecte 15 dans la cellule 0 du tableau) */
Lire (tab[i]) /* Lit la cellule 3 (i vaut 3) */
tab [i] tab [i] x 2 / Affecte la cellule 3 avec le double de sa valeur 15x2 = 30 */
Pour i 0 tabTaille 1 Faire /* Affiche tous les lments du tableau un par un */
Afficher (tab[i])
Fin Pour PS : Il est possible dutiliser plusieurs
dimensions : 2 (matrice), 3, ... 37
12-2017 Madani Boukebeche - esic
Structures de donnes
Tableaux
Exercice 1
Ecrire un algo qui :
Dfinit un tableau de 10 entiers
Lit (par boucle) dans le tableau
Calcule la somme des lments du tableau

38
12-2017 Madani Boukebeche - esic
Structures de donnes
Tableaux
Corrig de lexercice 1 Ecrire un algo qui :
- Dfinit un tableau de 10 entiers
Dbut - Lit (par boucle) dans le tableau
Entier t[10], i, somme 0 - Calcule la somme des lments
Pour i 0 9 Faire du tableau
Lire(t[i])
FinPour
Pour i 0 tTaille-1 Faire
somme somme+t[i]
FinPour
Afficher (somme)
Fin

39
12-2017 Madani Boukebeche - esic
Structures de donnes
Tableaux
Exercice 2
Ecrire un algo qui :
Dfinit un tableau de 10 entiers
Lit (par boucle) dans le tableau
Dtermine le min parmi les lments dans le tableau

40
12-2017 Madani Boukebeche - esic
Structures de donnes
Tableaux
Corrig de lexercice 2 Ecrire un algo qui :
Dfinit un tableau de 10 entiers
Dbut Lit (par boucle) dans le tableau
Entier t[10], i, min Dtermine le min parmi les
Pour i 0 tTaille-1 Faire lments dans le tableau
Lire(t[i])
FinPour
min t[0]
Pour i 1 tTaille-1 Faire
Si (min > t[i] ) Alors
min t[i]
FinSI
FinPour
Afficher (min)
Fin
41
12-2017 Madani Boukebeche - esic
Structures de donnes
Tableaux et fonctions
Exercice 3 : Tableau en paramtre de fonction
Complter la fonction produit qui :
Calcule et renvoie le produit des lments dans le tableau pass en
paramtre

Fonction produit (Entier tableau[]) Retourne Entier


Entier taille_tableau tableauTaille Permet de rcuprer la
Entier pdt taille du tableau
.
.
Retourner pdt
FinFonction

42
12-2017 Madani Boukebeche - esic
Structures de donnes
Tableaux associatifs
Tableau associatif : dictionnaire
Variable pouvant stocker plusieurs valeurs en mme temps
Chaque valeur est accessible via une cl (chaine de caractres)

Exemple :
Dictionnaire tab;
tab["un"] 1
tab["dix"] "blanc"

Afficher (tab["un"] )

43
12-2017 Madani Boukebeche - esic
Autres structures de donnes
Listes & arbres
Liste

Arbre

44
12-2017 Madani Boukebeche - esic
Fonctions rcursives
Fonction rcursive = fonction qui fait appel elle mme
Autre forme de boucler
Convient pour les traitements sur des structures
rcursives comme les arbres
Exemple :
Fonction Somme(Entier n) retourne Entier
Si n = 0 alors
Retourner 0
FinSi
Retourner n + Somme (n-1)
Fin Fonction

45
12-2017 Madani Boukebeche - esic
Fonctions rcursives
Exercice
Ecrire un algorithme pour une fonction rcursive
factoriel qui prend comme argument un entier et
retourne le factoriel de cet entier.
Ecrire un algorithme qui lit un entier, calcul le
factoriel de cet entier en appelant la fonction
Factoriel et affiche le rsultat retourn par la
fonction.

12-2017 Madani Boukebeche - esic


Fonctions rcursives
Fonction factoriel (Entier n) Retourne Entier
Si (n < 0) Alors
Exception("Pas de factoriel")
Finsi
Si (n 1) Alors Dbut
Retourner 1 Entier n, f
FinSi Lire (n)
Retourner n * factoriel (n-1) f factoriel(n)
Fin Fonction Si (Exception) Alors
Afficher (Exception)
Sinon
Afficher ("Factoriel de " +n + "="+f)
FinSi
Fin

47
12-2017 Madani Boukebeche - esic
Fonctions rcursives
Exercice
Sur le mme principe de la fonction Factoriel,
crivez un algorithme pour la fonction Fibbonacci
Fibo (0) = 0
Fibo (1) = 1
Fibo (n) = Fibo (n-1) + Fibo (n-2)

48
12-2017 Madani Boukebeche - esic
Fonctions rcursives
Fonction Fibbo(Entier n) retourne Entier
Si (n < 0) Alors
Exception("Valeur positive requise")
FinSi
Si (n 1) Alors
Retourner n
FinSi Dbut
Entier n, f
Retourner Fibbo (n-1)+Fibbo(n-2)
Lire (n)
Fin Fonction
f Fibbo(n)
Si (Exception) Alors
Afficher (Exception)
Sinon
Afficher ("Fibbo de " +n + "="+f)
FinSi
Fin
49
12-2017 Madani Boukebeche - esic
Recherche dans des tableaux
Tableau non tri (recherche aveugle)
Ecrire une fonction Rechercher qui effectue une
recherche dans un tableau dune valeur passe en
paramtre et renvoie son index si la valeur est
trouve dans le tableau ou -1 sinon.
Fonction rechercher(Entier tab[], Entier v) : Retourne Entier

Fin Fonction

50
12-2017 Madani Boukebeche - esic
Recherche dans des tableaux
Tableau non tri Corrig 1
Fonction rechercher(Entier tab[], Entier v) : Retourne Entier
Entier i 0
Entier taille_tab tab->Taille
TantQue (i < taille_tab ET tab[i] v) Faire
ii+1
FinTantQue

Si (i < taille_tab) Alors


Retourner i
FinSi
Retourner -1
Fin Fonction

51
12-2017 Madani Boukebeche - esic
Recherche dans des tableaux
Tableau non tri Corrig 2
Autre version :

Fonction rechercher(Entier tab[], Entier v) : Retourne Entier


Entier i 0
Entier taille_tab tabTaille
Pour (i 0 A taille_tab 1)) Faire
Si (tab[i] = v) Alors
Retourner i
FinSi
FinPour
Retourner -1
Fin Fonction

52
12-2017 Madani Boukebeche - esic
Recherche dans des tableaux
Par hachage de tableau tri (recherche guide)
Ecrire une fonction Rechercher qui effectue une
recherche dans un tableau dune valeur passe en
paramtre et renvoie son index si la valeur est trouve
dans le tableau ou -1 sinon.
La fonction utilise le principe de hachage :
tableau scind en 2 parties, on ne considre que la partie
susceptible de contenir la valeur recherche,
La moiti retenue est son tour scinde en 2 parties,

Fonction rechercher(Entier tab[], Entier borneInf, Entier borneSup, Entier v) : Retourne Entier

Fin Fonction
53
12-2017 Madani Boukebeche - esic
Recherche dans des tableaux
Par hachage de tableau tri - Corrig
Fonction rechercher(Entier tab[], Entier borneInf, Entier borneSup, Entier v) : Retourne Entier
Entier i
Si (borneSup < borneInf OU tab[borneSup] < v OU tab[borneInf] > v ) Alors
Retourner -1
FinSi
Si (tab[borneSup] = v) Alors
Retourner borneSup
FinSi
Si (tab[borneInf] = v ) Alors 1er appel
Retourner borneInf .
FinSi
Entier idx
i (borneSup + borneInf)/2
Si (tab[i] = v) Alors
idx rechercher(tab, 0, tabtaille - 1, v)
Retourner i
FinSi
Si (tab[i] > v) Alors
Retourner Rechercher(tab, borneInf+1, i-1, v)
FinSi
Retourner Rechercher (tab, i+1, borneSup-1, v)
54
Fin Fonction
12-2017 Madani Boukebeche - esic
Tri des tableaux
Par slection
Rechercher le plus grand lment du tableau pour le
placer la fin du tableau,
Puis de chercher le plus grand lment dans le reste
(en excluant le dernier lment) et de le mettre en
avant dernier, etc
On suppose que le premier/dernier lment du tableau considr est
le plus grand (en mmorisant son indice dans une variable)
On parcourt le tableau considr pour chercher si un lment est plus
grand que lui
Si c'est le cas on met jour la variable indice
A la fin du parcours si lindice est diffrent de celui de la fin du tableau
considr, on permute les deux contenus et on rduit la taille du
tableau restant trier de 1
55
12-2017 Madani Boukebeche - esic
Tri des tableaux
Par slection
Indication de Solution

Fonction TriSelection (Entier tableau[]) Retourne Entier[]


Entier taille_tableau tableauTaille

Pour i taille_tableau -1 A 1 Pas -1 Faire
.
FinPour
Retourner tableau
FinFonction

56
12-2017 Madani Boukebeche - esic
Tri des tableaux
Par slection
Fonction TriSelection (Entier tableau[]) Retourne Entier[]
Solution Entier i, i_max, j, temp
Entier taille_tableau tableauTaille
Pour i taille_tableau -1 A 1 Pas -1 Faire
i_max i
Pour j 1 A i Faire
Si (tableau[j] > tableau[i_max]) Alors
i_max j
FinSi
FinPour
Si (i_max i) Alors
temp tableau[i]
tableau[i] tableau[i_max]
tableau[i_max] temp
FinSi
FinPour
Retourner tableau
FinFonction 57
12-2017 Madani Boukebeche - esic
Tri des tableaux
Par slection
Solution 2
Fonction getMaxIdx(Entier tableau[], Entier borne) retourne Entier
i_max 0
Pour j 1 A borne Faire
Si (tableau[j] > tableau[i_max]) Alors
i_max j Fonction TriSelection (Entier tableau[]) Retourne Entier[]
FinSi
FinPour Entier i, i_max, j, temp
Retourner i_max Entier taille_tableau tableauTaille
Fin Fonction Pour i taille_tableau -1 A 1 Pas -1 Faire
i_max getMaxIdx(tableau, i)
Si (i_max i) Alors
temp tableau[i]
tableau[i] tableau[i_max]
tableau[i_max] temp
FinSi
FinPour 58
12-2017 Madani Boukebeche - esic
Tri des tableaux
Par slection Fonction Trier(Entier tab[], Entier taille_tableau)
Retourne Entier []
Autre solution Entier j, i_max, temp
Si (taille_tableau 1) Alors
rcursive Retourner tab
FinSi
i_max 0
Pour j 1 A taille_tableau -1 Faire
Si (tableau[j] > tableau[i_max]) Alors
i_max j
Dbut FinSi
Entier tab[10], tab2[10], i FinPour
Pour i 0 tabTaille Faire Si (i_max taille_tableau-1) Alors
Lire (tab[i]) temp tableau[taille_tableau-1]
FinPour tableau[taille_tableau-1] tableau[i_max]
tab2 Trier (tab, tabTaille) tableau[i_max] temp
Fin FinSi
Retourner Trier(tab, taille_tableau -1)
Fin Fonctiion 59
12-2017 Madani Boukebeche - esic
Tri des tableaux
Par bulle
Parcourt le tableau, et compare les couples
d'lments successifs.
Lorsque deux lments successifs ne sont pas dans
l'ordre croissant/dcroissant, ils sont permuts.
Aprs chaque parcours complet du tableau,
l'algorithme recommence l'opration.
Lorsqu'aucun change n'a lieu pendant un parcours,
cela signifie que le tableau est tri.

12-2017 Madani Boukebeche - esic 60


Tri des tableaux
Par bulle
Solution
Fonction tri(Entier tableau[]) retourne Entier[]
Entier i, tampon
Entier taille_tableau tableau->Taille
Booleen inversion
Faire
inversion faux
Pour i 0 A taille_tableau -2 Faire
Si (tableau[i] > tableau[i + 1]) alors
tampon tableau[i]
tableau[i] tableau[i + 1]
tableau[i + 1] tampon
inversion vrai
FinSi
FinPour
TantQue (inversion) // cd : inversion = vrai
Retourner tableau
Fin fonction
12-2017 Madani Boukebeche - esic 61
Tri des tableaux
Par permutation
On parcourt le tableau jusqu' ce que l'on trouve un
lment plus petit que le prcdent donc mal plac.
On prend cet lment et on le range sa bonne
place dans le tableau puis on continue la lecture.
On s'arrte la fin du tableau.

62
12-2017 Madani Boukebeche - esic
Tri des tableaux
Par permutation
Solution Fonction tri(Entier tab[]) Retourne Entier[]
Entier i,j,k,save
Entier taille_tab tabTaille
Pour i 1 A taille_tab - 1 Faire
Si (tab[i] < tab[i-1]) Alors
save tab[i]
j0
TantQue (tab[j]<tab[i]) Faire
j j+1
FinTantQue
Pour k i A j+1 PAS -1 Faire
tab[k] tab[k-1]
FinPour
tab[j] save;
FinSi
FinPour
Retourner tab
63
12-2017 Madani Boukebeche - esic FinFonction
Structures dynamiques

Une structure dynamique est une


structure dont la taille nest pas fige
la taille sadapte au contenu
Cest un enchainement de structures composites

Ex. Tableaux dynamiques, Listes, arbres, piles, ...

64
12-2017 Madani Boukebeche - esic
Structures dynamiques
Structures 1/2
Une structure est un ensemble de donnes
Elle est dfinie comme un type

Structure TypeStructure Structure StructPoint


Type1 champs1, Entier x,
Type2 champs2, Entier y
Fin Structure
Fin Structure
TypeStructure struct1 StructPoint p

65
12-2017 Madani Boukebeche - esic
Structures dynamiques

Structures 2/2
Les champs dans une structure sont appels membres
Laccs aux membres de la structure se fait par
TypeStructure struct1 StructPoint p
Struct1champs1 valeur
Type2 var2 Struct1champs1 px 5
Entier i px
Structure TypeStructure
Type1 champs1, Structure StructPoint
Type2 champs2, Entier x,
Entier y
Fin Structure Fin Structure

66
12-2017 Madani Boukebeche - esic
Structures dynamiques
Listes
Une liste est obtenue par chainage de structures
Pour chainer une structure avec une autre structure,
Les structures doivent possder Structure TypeStructure
un champ pour le chainage Type1 champs1,
Dont le type est le type de la Type2 champs2,
structure suivi de *
TypeStructure * suivant
Fin Structure
Pointeur
La valeur du champ de chainage TypeStructure struct1, struct2
pour la premire structure est struct1suivant & struct2
ladresse de la deuxime structure
& oprateur adresse
La valeur du champ de chainage
pour le dernier lment est NULL struct2suivant NULL
La liste est dsigne par sa tte qui TypeStructure * liste1
contient ladresse du premier lment liste1 & struct1
67
12-2017 Madani Boukebeche - esic
Structures dynamiques
Exemple de parcours de listes

TypeStructure* elt liste1


TantQue (elt NULL) Faire
eltchamps1 valeur Tel que
/*** **/ Structure TypeStructure
elt eltsuivant Type1 champs1,
FinTantQue Type2 champs2,

TypeStructure * suivant
Fin Structure

TypeStructure* liste1

68
12-2017 Madani Boukebeche - esic
Structures dynamiques
Exercice
Ecrire un algorithme dune fonction inserer qui prend en
argument une liste de StructPoint et un lment de type
StructPoint et qui insre llment en tte de la liste

Fonction inserer(StructPoint* liste, StructPoint p) Retourne StructPoint*

Fin Fonction

Structure StructPoint
La structure StructPoint doit tre
Entieradapte
x, y pour tre chaine
dans une liste StructPoint* suivant
Fin Structure
69
12-2017 Madani Boukebeche - esic
Structures dynamiques
Exercice
Ecrire un algorithme dune fonction ajouter qui prend en
argument une liste de StructPoint et un lment de type
StructPoint et qui ajoute llment en queue de la liste

Fonction ajouter(StructPoint* liste, StructPoint p) Retourne StructPoint *

Fin Fonction

70
12-2017 Madani Boukebeche - esic
Structures dynamiques
Exercice
Ecrire un algorithme dune fonction ajouterN qui prend en
argument une liste de StructPoint, une position entire et un
lment de type StructPoint et qui ajoute llment la position
dans la liste
Si jamais la position dpasse le nombre dlments de la liste, llment est
ajout la fin

Fonction ajouterN(StructPoint* liste, StructPoint p, Entier position)


Retourne StructPoint*

Fin Fonction

12-2017 Madani Boukebeche - esic 71