2
12-2017 Madani Boukebeche - esic
Introduction
3
12-2017 Madani Boukebeche - esic
Introduction
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
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
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
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
.
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
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
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
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.
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
51
12-2017 Madani Boukebeche - esic
Recherche dans des tableaux
Tableau non tri Corrig 2
Autre version :
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
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.
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
64
12-2017 Madani Boukebeche - esic
Structures dynamiques
Structures 1/2
Une structure est un ensemble de donnes
Elle est dfinie comme un type
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* 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
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
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
Fin Fonction