Cours d`Algorithmique d`Algorithmique

publicité
Introduction à l’Algorithmique
Cours
d’Algorithmique
Préparé par:
• Inès El Korbi
• Mouna Ayari
Définition d’un algorithme
• Caractéristiques d’un algorithmique
• Élaboration d’un algorithmique
• Nomenclature d’un algorithme
•
([email protected])
([email protected])
ISAMM 2005-2006
1
Définition d’un algorithme
Un algorithme doit être:
Lisible
Est une suite finie d’actions (instructions) q’un automate
(ordinateur) devra effectuer pour trouver une solution à un
problème donné.
Consiste à trouver une solution informatique automatisable à
un problème réel.
L’algorithme ne peut pas être exécuté par la machine:
ISAMM 2005-2006
3
Chaque élément de l'algorithme ne doit pas porter à
confusion.
Structuré
Traduire l'algorithme dans un langage de programmation.
Phase de programmation.
Traductible en n'importe quel langage de
programmation.
Précis
Identifier le problème et spécifier les besoins des utilisateurs.
Conception d’une solution informatique décrite dans un
langage semi-formel compréhensible par un non-informaticien.
compréhensible même par un non-informaticien
De haut niveau
L’élaboration d’un algorithme comprend les étapes
suivantes:
2
Caractéristiques d’un algorithmique
Un algorithme:
ISAMM 2005-2006
un algorithme doit être composé de différentes parties
facilement identifiables.
ISAMM 2005-2006
4
Élaboration d’un algorithmique
Nomenclature d’un algorithme
Pour élaborer un algorithme, il faut
Analyser le problème
Formuler le problème.
Définir les données du problème et les résultats attendus
Un algorithme contient
Un en-tête
Un bloc de déclaration
Le corps de l’algorithme
Concevoir la solution
Expliquer les différentes solutions possibles.
Préciser la meilleure méthode de résolution choisie (justifier le
choix).
Écrire l’algorithme.
Un algorithme est une suite d’actions manipulant des objets.
Un objet peut être une constante ou une variable.
ISAMM 2005-2006
5
ISAMM 2005-2006
6
Caractéristiques d’un objet
Un algorithme manipule un certain
nombre d’objets:
Objets simples et traitements
simples
Un objet est caractérisé par:
Les types d’objets
• Les expressions
• Les instructions
•
ISAMM 2005-2006
7
Constantes
Variables
Un identificateur : suite de caractères α-numériques
(lettres, chiffres, quelques caractères), commençant
par une lettre.
Une classe: constante, variable.
Un type : donne le domaine des valeurs possibles et
les opérations possibles.
ISAMM 2005-2006
8
Déclaration d’un objet et types d’objets
Déclaration d’un objet:
Constante Identificateur=valeur
Exp: Constante Pi=3.14
Variable
Identificateur : Type de variable
A: entier
Les types de base sont:
Constante
Le type booléen
Le type booléen.
Les types numériques: entier, réel.
Le type caractère.
Les types construits:
Intervalle.
Énuméré.
La table du Non
ISAMM 2005-2006
Le type Entier:
Type scalaire : type qu’on peut énumérer ses valeurs.
Type ordonné (Scalaire+ordonné type ordinal).
Sous ensemble de Z : [-32 768, 32 767]
Opération arithmétiques : +, -, *, div, mod
Caractère
Exp : 7 div 2 = 3
7 mod 2 = 1
Exp : delta >= 0
Le type Réel:
Type ordonné mais pas scalaire.
Sous ensemble de R : [-3.40*10^(38) à -1.40*10^(45)].
Exp : 3.14
Opérations arithmétiques : +, -, *, /, ^ (opérateur de puissance).
Opérations de comparaison: =, ≠, <, >, <=, >=.
Représentation d’un caractère α-numérique par
un code ASCII.
opérations de comparaison: =, ≠, <, >, <=, >=
Exp : 3.0/2 = 1.5, 3.40*10^(38)
11
Code ASCII
(Binaire)
Code ASCII
(Décimal)
‘A’
0100 000
65
‘B’
0100 0010
66
‘3’
0011 0011
51
fonctions prédéfinies :
Chr (valeur): renvoie le caractère de la valeur entière
Rang(caractere): renvoie le code ASCII d’un caractère
Fonctions prédéfinies : sin, cos, log, P
ISAMM 2005-2006
10
ISAMM 2005-2006
Le type caractère
La table du Ou
La table du ET
9
Les types numériques
Il ne peut prendre que deux valeurs
(vrai ou faux).
Opérations possibles: Non (négation), Et
(conjonction), Ou (Disjonction)
Tables de vérités
Exp: Chr(65) = A , Rang(‘A’)=65, Chr(Rang(‘A’))=‘A’
ISAMM 2005-2006
12
Les expressions
Les types construits
Extension d’un domaine de valeurs
Déclaration
Une expression est un ensemble d’opérandes reliées
par des opérateurs, et équivalente à une seule valeur.
Type énuméré:
T-énuméré = (valeur 1, valeur 2, P, valeur n)
Exp :
JOURS = (Lun, Mar, Merc, Jeu, Vend, Sam, Dim)
COULEURS = (bleu, blanc, vert, rouge)
Exp: Succ (Jeu) = Vend, Rang (Lun) = 0, Pred (mar) = Lun
Sous ensemble d’un type ordinal.
Déclaration: t-intervalle = val-Min .. val-Max
L’intervalle hérite du type de base de ses bornes.
ISAMM 2005-2006
ISAMM 2005-2006
L’instruction d’affectation consiste à attribuer une valeur
à une variable donnée.
ISAMM 2005-2006
Exp:
Exp: (1 + 2 )* 3 = 9
15
A←B
Exp: A ← B+4
Si B valait 12, A vaut 16 et B vaut toujours 12.
On peut utiliser des parenthèses explicites pour forcer un
ordre.
Exp:
Les variables de part et d’autre de la flèche d’affectation
doivent être de même type.
A ← 24
Une instruction d’affectation ne modifie que ce qui est à
gauche de la flèche.
Exp: 1 + 2 * 3 = 7 (et non pas 9)
Exp:
On peut attribuer à une variable le contenu d’une autre
variable.
14
Instruction d’affectation
Une expression est évaluée de gauche à droite.
Les opérateurs ont des priorités prédéfinies (4 niveaux
de priorités).
Les opérateurs arithmétiques: +, -, *, /, div, mod, (-) unaire.
Les opérateurs logiques: Non, Et, Ou.
Les opérateurs de comparaison: =, <, >, <=, >=, <> (≠).
13
Évaluation d’une expression
Syntaxe: opérande opérateur opérande
+, -, /, et, ou, P
Exp: 12+3, A Ou B; 1.3*2.5
Il existe 3 types d’opérateurs:
Exp : Minuscule = ‘a’ .. 'z’
WE = Sam ..Dim
Syntaxe: opérateur opérande
(-) unaire, Non
Exp: -6, Non A
Bianires
Type intervalle
Unaires:
Opération spécifiques: successeur, rang, prédécesseur
Exp: 5+4; 123-45+844 ; (X < 4) Et (X >9)
Les opérateurs peuvent être:
A: entier; B: entier
B ← 12; A ← B+4; (correct)
A: entier; B: réel
B ← 3.14; A ← B+4; (erreur)
ISAMM 2005-2006
16
Ordre des instructions d’affectation
Instructions d’entrée/sortie
Le résultat final d’une algorithme dépend de l’ordre
d’exécution de ses instructions.
VARIABLE : A : Entier
Début
A ←0
B ← 12
A ←B+4
B ← A+2
Fin
Assurer le dialogue entre la machine et l’utilisateur.
Opération de lecture (Lire):
VARIABLE : A :
Entier
Début
A ←0
B ← 12
L’utilisateur rentre des valeurs au clavier exploitées par l’algorithme.
Opération d’écriture (Ecrire):
L’algorithme fournit des valeurs à l’utilisateur.
B ← A+2
Variable :
A : entier
N : entier
Debut
Lire (N)
A ← N^2
Ecrire (A)
Fin
A ←B+4
Fin
Exp 1
Valeurs finales
Exp 2
Exp 1: A=16, B=18
Exp 2: A=18, B=14
Il n’ay a pas d’intérêt à affecter une variable, pour l’affecter
différemment toute suite après.
A ←12
A ← 34
A ←34
ISAMM 2005-2006
/*Affiche la valeur 4 sur l’écran*/
Écrire des libellés à l’écran pour prévenir l’utilisateur de ce qu’il
doit frapper.
Peut être réécrit
/*L’utilisateur entre la valeur 2*/
Exp: Ecrire ("Entrez un nombre :")
Lire (N)
17
18
ISAMM 2005-2006
Structure conditionnelle simple
Les structures conditionnelles
La structure conditionnelle permet d’évaluer une expression
logique (condition).
Si l’expression est vraie, une séquence précise sera exécutée.
Cette séquence sera sautée dans le cas contraire.
Si (Cond 1) /* La condition est une expression
logique*/
Alors
A1
A2
K
An
Fin Si
Structure conditionnelle simple
• Structure conditionnelle alternative
• Structures conditionnelles imbriquées
• Structure conditionnelle à choix multiples
•
ISAMM 2005-2006
/* A1, A2, Ket An seront exécutées
uniquement
si Cond 1 est vraie * /
/* Marque de fin des actions à exécuter
si Cond 1 est vraie*
Schéma de la
conditionnelle simple
19
ISAMM 2005-2006
Algorithme Algo1
Variable
A, B: entier
Debut
Lire(A,B)
Si (A<B)
Alors
Ecrire(A)
Fin Si
Fin
Exemple
20
Structure conditionnelle alternative
Structures conditionnelles imbriquées
Une première séquence d’actions est exécutée si la condition
est vraie.
Une deuxième séquence est exécutée si la condition n’est
pas vérifiée.
Les deux séquences ne peuvent pas s’exécuter en parallèle.
Si (Cond 1)
Alors
I1
P
In
Sinon
J1
P
Jm
Fin Si
/* La condition est une expression
logique*/
/* I1,K, In seront exécutées uniquement
lorsque la condition est vérifiée */
/* Marque de fin des actions à exécuter si
Cond 1 est vérifiée */
/* J1, K, Jm seront exécutées uniquement
si Cond 1 n’est pas vérifiée */
/* Marque de fin des actions à exécuter
si Cond 1 n’est pas vérifiée */
Dans un algorithme, une structure conditionnelle peut être
elle même une structure conditionnelle.
Si (Cond 1)
Alors
A1
A2
Si (Cond 2)
Alors
B1
P
Bm
FinSi
A3
P
An
FinSi
Algorithme Minimum
Variable
A, B: Entier
Debut
Lire(A,B)
Si (A<B)
Alors
Ecrire(A)
Sinon
Ecrire(B)
Fin Si
Fin
Exemple
*/ A1, K, An seront exécutées
lorsque la Cond 1 est vérifiée */
*/ De plus B1, K, Bm seront
exécutée uniquement si Cond 2
est vérifiée */
Schéma des conditionnelles
imbriquées
Schéma de la conditionnelle alternative
21
ISAMM 2005-2006
Algorithme Temperature
Variable
Temp: Entier
Début
Ecrire ("Entrez la température de
l’eau :")
Lire(Temp)
Si (Temp <= 0) Alors
Ecrire("C’est de la glace" )
FinSi
Si (Temp > 0) Et (Temp < 100)
Alors
Ecrire("C’est du liquide")
Finsi
Si (Temp > 100) Alors
Ecrire("C’est de la vapeur")
Finsi
Fin
ISAMM 2005-2006
Exemple
22
Structure conditionnelle à choix multiples
Utilisation: plusieurs tests sur une même variable
Structures conditionnelles simples et alternatives:
Structure conditionnelle à choix multiples:
Les structures itératives
Un algorithme lourd en écriture et difficile à lire
Exécution d’une séquence d’actions selon la valeur d’une
variable.
Algorithme Semaine
Type
JOURS = (Lun, Mar, Merc, Jeu,
Vend, Sam, Dim)
Variable
J :JOURS
Debut
Choisir selon J
Lun .. Vend:
Ecrire (« Jour Ouvrable »)
Sam..Dim :
Ecrire (« Jour Ferier »)
Fin Choix
Fin
Choisir selon (Critere)
e1 : traitement 1
P.
P.
en : traitement n
sinon: traitement par défaut
Fin Choix
Schéma de la conditionnelle
à choix multiples
La boucle Pour
• La boucle Tant que
• La boucle Répéter jusqu’à
•
Exemple
ISAMM 2005-2006
23
ISAMM 2005-2006
24
La boucle Pour
Les structures itératives
Les structures itératives (boucle):
A la fin de chaque itération, compt est incrémentée d’une
quantité P (pas d’incrémentation).
Début est la valeur initiale du compteur.
Fin est sa valeur finale.
Répéter un certain nombre de fois des instructions
semblables les unes aux autres.
Bloc d’instructions exécuté une fois dans une boucle.
Les boucles sont:
La boucle Pour
La boucle Tant que
Le nombre d’itérations est fini et connu.
Le nombre d’itérations est donné par une condition
Arrêt si condition fausse.
La boucle Répéter jusqu’à
Le nombre d’itérations est donné par une condition
Arrêt si condition vraie.
ISAMM 2005-2006
25
ISAMM 2005-2006
Au début de l’exécution de la boucle Tant que, évaluer la
condition :
Au début de l’exécution de la boucle Répéter jusqu’à:
La condition est ignorée
Exécution du bloc d’instructions.
Évaluer la condition à la rencontre du mot jusqu’à:
Si la condition est vraie Exécuter les instructions entre
les mots Début et Fin.
Si la condition est fausse Aller directement au mot Fin.
26
La boucle Répéter jusqu’à
La boucle Tant que
Répéter N fois une suite d’instructions à l’aide d’une
variable entière servant de compteur.
Une itération
Si condition fausse: Retourner au mot clé Répéter et
recommencer à exécuter le bloc d’instructions.
Si condition vraie: Aller à la suite de l’algorithme.
Le corps de la boucle Tant que peut ne jamais être exécutée
si la condition n’est pas vérifiée.
ISAMM 2005-2006
27
ISAMM 2005-2006
28
Inversion de tests
Transformer une boucle Répéter en une boucle Tant
que:
Les tableaux
Le test d’arrêt de la boucle Tant que doit être la négation
de celui de la boucle Répéter Algorithmes équivalents.
Transformer une boucle Tant que en une boucle
Répéter:
Le test d’arrêt de la boucle Répéter doit être la négation
de celui de la boucle Tant que Algorithmes équivalents.
Déclaration d’un tableau
Opérations de base
• Tri d’un tableau
•
•
Définition et déclaration
Représenter une suite de variables de même type (entier,
réel, booléen, caractère) en mémoire.
Un tableau est défini par:
Le type d’indice (ordinal) qui permet de définir le nombre
d’éléments dans le tableau.
Le type des composants.
La variable Nmax
On peut déclarer des variables tableaux V[1..N] du type
vecteur (N <=Nmax).
Exemple
Le nombre maximum d’éléments pour le type vecteur.
Déclaration d’un tableau
T_Ident : Tableau [type d’indice] de type-composants.
Exp: V : Tableau[1..4] d’entiers
E1
E2
E3
V
indices
1
2
3
Constante
Nmax=100
Type
Vecteur = Tableau [1..Nmax]
d’entiers
Variable
N : entier
V [1..N] : vecteur
E4
4
Les indices d’un tableau commencent à partir de 1.
L’accès à un élément d’un tableau:
Nom_Tableau[indice] (ex: V[1]=E1).
ISAMM 2005-2006
Un tableau unidimensionnel est appelé vecteur.
Déclaration :
Constante Nmax=100
Type vecteur = tableau [1.. Nmax] de type composants
30
Tableau unidimensionnel ou vecteur
Les tableaux:
ISAMM 2005-2006
29
ISAMM 2005-2006
31
ISAMM 2005-2006
32
Remplissage, lecture et écriture d’un vecteur
Parcours d’un vecteur
Accès à un élément d’un vecteur:
Nom_Vecteur[indice]; Exp: V[i]
Pour i de 1 à N Faire
Ecrire («Donnez le », i, « eme element de V »)
Lire(V[i])
Fin Pour
Parcours d’un vecteur par ordre croissant de ses indices.
Chaque élément est traité à part.
Algortithme Parcours
Constante
Nmax=100
Type
Vecteur = Tableau [1..Nmax] d’entiers
Variable
N : entier
V [1..N] : vecteur
Debut
/* Saisir la taille du vecteur N, 1=<N<=Namx */
Répéter
Lire (N)
Jusqu’à ((N+1 >=1 ) et (N+1<=Nmax))
Pour i de 1 à N Faire
/* Traiter V[i] */
Fin pour
Fin
ISAMM 2005-2006
Écriture: Afficher chacune des valeurs du vecteur.
Pour i de 1 à N Faire
Ecrire («Le », i, « eme element de V est : »)
Ecrire(V[i])
Fin Pour
33
ISAMM 2005-2006
34
Insertion d’un élément dans un vecteur
Trouver l’élément V[i] dans le tableau V selon un critère
de recherche bien déterminé.
Algortithme Recherche /* Rechercher le premier élément égal à X*/
Constante
Nmax=100
Type
Vecteur = Tableau [1..Nmax] d’entiers
Variable
N : entier; V [1..N] : vecteur
Debut
/* Saisir la taille et les éléments du tableau*/
i 1
Ecrire (« Donnez X »)
Lire (X)
Tant que ((V[i] <>X) et (i<=N)) /* Critère de recherche (V[i]=X) */
i i+1
Fin Tant que
Si ( V[i] =X) Alors
Ecrire («X apparait pour la premiere fois dans V à la position » , i)
Sinon
Ecrire («X ne se trouve pas dans le tableau V »)
Fin Si
Fin
ISAMM 2005-2006
Remplissage: Affecter une valeur à chacun des
éléments du vecteur.
Pour i de 1 à N Faire
V[i]Valeur_i
Fin Pour
Recherche d’un élément dans un vecteur
Lecture: Saisir chacun des éléments du vecteur.
Décaler d’une position vers la droite les éléments se trouvant aux
positions N à i (pas -1).
Affecter la nouvelle valeur à l’élément se trouvant à la position i.
Augmenter le nombre d’éléments de 1.
Algortithme Insertion_position_i
Constante Nmax=100
Type
Vecteur = Tableau [1..Nmax] d’entiers
Variable
X, N : entier ; V [1..N] : vecteur
Debut
/* Saisir la taille et les éléments du tableau*/
Ecrire («Donnez une position d’insertion i et un entier X»)
Lire (i, X)
Si (i>=1 et i<=N et N<Nmax ) Alors
Pour j de N à (i+1) pas -1 Faire
V[j+1]  V[j] /*Décalage des éléments du tableau vers la droite */
Fin pour
V[i]  X; N N+1
Fin Si
Fin
35
ISAMM 2005-2006
36
Suppression d’un élément d’un vecteur
Tri d’un vecteur
Décaler d’une position vers la gauche les éléments se trouvant
aux positions (i+1) à N (pas 1).
Diminuer le nombre d’éléments de 1.
Algortithme Suppression_position_i
Constante Nmax=100
Type
Vecteur = Tableau [1..Nmax] d’entiers
Variable
X, N : entier ; V [1..N] : vecteur
Debut
/* Saisir la taille et les éléments du tableau*/
Ecrire («Donnez l’indice de l’element à supprimer»)
Lire (i)
Si (i>=1 et i<=N et N>0) Alors
Pour j de (i+1) à N Faire
V[j-1]  V[j] /*Décalage des éléments du tableau vers la gauche */
Fin pour
N N-1
Fin Si
Fin
ISAMM 2005-2006
Permuter V[1] et V[Min]
Le plus petit élément du tableau se trouve à la position 1
Rechercher l’indice Min parmi les éléments restants (indices 2..N).
V[Min]=minimum(V[j]), j=2..N
Permuter V[2] et V[Min]
Les éléments V[1] et V[2] sont ordonnés.
P.
Rechercher l’indice Min parmi les 2 derniers éléments (indices N-1..N).
V[Min]=minimum(V[j]), j=N-1..N
3
1
7
5
4
1
3
4
5
7
Vecteur trié
Vecteur non trié
Algorithmes de tri:
tri par sélection, tri par insertion, tri à bulles.
38
ISAMM 2005-2006
39
5
7
1
3ème étape:
4
1ère étape:
V[5]=minimum(V[j]),j=3..N
Permuter V[5] et V[3]
1
3
4
5
7
V[4]=minimum(V[j]),j=1..N
Permuter V[1] et V[4]
1
5
7
3
4
V[4]=minimum(V[j]),j=2..N
Permuter V[2] et V[4]
3
4ème étape:
V[4]=minimum(V[j]),j=4..5
Ne rien Faire (Min=4)
2ème étape:
1
Permuter V[N-1] et V[Min]
Tous les éléments de V sont ordonnés.
ISAMM 2005-2006
Exemple (Tri d’un vecteur par ordre croissant)
3
V[Min]=minimum(V[j]), j=1..N
Si i<j Alors V[i] >= V[j]
Vecteur initial V (N=5):
Rechercher l’indice Min du plus petit élément du tableau.
Trier V par ordre décroissant ordonner ses éléments de
sorte que pour tout (i,j) appartenant à [1,N] :
Exemple de tri par sélection d’un vecteur
Trier les éléments du vecteur par ordre croissant:
Si i<j Alors V[i] <= V[j]
37
Principe du tri par sélection
Trier V par ordre croissant ordonner ses éléments de sorte
que pour tout (i,j) appartenant à [1,N] :
7
5
1
4
3
4
5
7
Un tableau de taille N est
trié en (N-1) étapes.
ISAMM 2005-2006
40
Principe du tri par insertion
Algorithme de tri par sélection
Algortithme Tri_Selection
Constante
Nmax=100
Type
Vecteur = Tableau [1..Nmax] d’entiers
Variable
N, i, j, Min, Aux : entier
V [1..N] : vecteur
Debut
Pour i de 1 à (N -1) Faire
Min  i
Pour j de (i+1) à N Faire
Si (V[j] < V[Min]) Alors
Min  j
Fin Si
Rechercher le minimum
Fin pour
Parmi les éléments V[i]..V[N]
Si (Min <> i) Alors
Aux  V[i]
V[i]  V[Min]
Permuter V[i] et V[Min]
V[Min] Aux
Fin Si
Fin pour
Fin
3
5
7
1
4
1ère étape:
Les éléments V[1] et V[2] sont triés
3
5
7
1
4
2ème étape:
Les éléments V[1]PV[3] sont triés
3
5
7
1
4
3
5
7
3
4
5
4
7
Un tableau de taille N est
trié en (N-1) étapes.
ISAMM 2005-2006
Nous voulons insérer l’élément V[i+1] dans le tableau
déjà trié.
Rechercher l’indice p du premier élément du tableau V[1]...V[i]
qui soit supérieur à V[i+1].
Sauvegarder V[i+1] dans une variable auxiliaire.
ISAMM 2005-2006
42
Algortithme Tri_Insertion
Constante
Nmax=100
Type
Vecteur = Tableau [1..Nmax] d’entiers
Variable
N, i, j, Min, Aux : entier
V [1..N] : vecteur
Rechercher l’indice p du
Debut
premier élément de V[1]..V[i]
Pour i de 1 à (N -1) Faire
qui soit supérieur à V[i+1]
p1
Tant que (V[p] <V[i+1] et p<=i) Faire
pp+1
Fin tant que
Si (p<=i) Alors
Aux  V[i+1]
Décaler les éléments
Pour k de i à p pas -1 Faire
V[p] ..V[i] d’une position
V[k+1] V[k]
Vers la droite
Fin pour
V[p] Aux
Insérer V[i+1] à la position p
Fin Si
Fin
4ème étape:
AuxV[5]
Décaler les éléments V[3]..V[4] d’une
position vers la droite
V[3] Aux
1
Algorithme de tri par insertion
3ème étape:
AuxV[4]
Décaler les éléments V[1]..V[3] d’une
position vers la droite
V[1] Aux
1
On suppose triés les éléments du tableau V[1]..V[i].
Décaler tous les éléments V[i] à V[p] (pas -1) d’une position
vers la droite.
Insérer V[i+1] à la position p.
Exemple de tri par insertion d’un vecteur
Vecteur initial V (N=5):
41
ISAMM 2005-2006
Pour i de 1 à N-1:
43
ISAMM 2005-2006
44
Principe du tri à bulles
Exemple de tri à bulles d’un vecteur
Tri à bulles:
Vecteur initial V (N=5):
Rechercher le minimum sur le tableau V[1..N] par permutations
successives:
3
1
Permuter V[3] et V[4]
4
étape:
Permuter V[3] et V[4]
3
5
1
1
3
4
5
7
3ème étape:
Ne rien Faire (vecteur trié)
7
4
1
3
4
5
7
Permuter V[2] et V[3]
3
A la fin de cette étape, on est sûrs que V[1] est le plus petit
élément du tableau V[1..N].
Reprendre la recherche par permutations successives du minimum
sur le tableau V[2..N]
Ainsi de suite jusqu’à trouver le minimum sur le tableau V[N-1..N]
Le tableau est ainsi trié
1
Algorithme du tri à bulles
5
7
4
4ème étape:
Ne rien Faire (vecteur trié)
Permuter V[1] et V[2]
1
3
5
7
4
1
2ème étape:
Permuter V[4] et V[5]
1
3
45
ISAMM 2005-2006
5
4
7
3
4
5
7
Un tableau de taille N est
trié en (N-1) étapes.
ISAMM 2005-2006
46
Tableau multidimensionnel
Déclaration d’un tableau multidimensionnel
Ident : Tableau [type indice1, type indice 2, P, type indice n]
de type-composants.
Cas particulier: tableau à deux dimensions ou matrice
Déclaration d’un tableau à deux dimensions
Ident : Tableau [type indice1, type indice 2] de type-composants.
Rechercher le minimum par
Permutations successives
sur le tableau V[i]..V[N]
Constante Nmax =100
Mmax =100
Type
Matrice = Tableau [1..Nmax, 1..Mmax] d’entiers
Variable
N , M: entier
Mat[1..N, 1..M] : Matrice
Permuter V[j-1] et V[j] si
V[j-1]>V[j]
Accès à un élément d’une matrice:
ISAMM 2005-2006
7
1ère
Pour i de N à 2 pas -1 faire
Si V[j-1] >V[j] alors
Permuter V[j-1] et V[j]
Fin Si
Fin Pour
Algortithme Tri_Bulles
Constante
Nmax=100
Type
Vecteur = Tableau [1..Nmax] d’entiers
Variable
N, i, j, Aux : entier
V [1..N] : vecteur
Debut
Pour i de 1 à (N -1) Faire
Pour j de N à i+1 pas -1 Faire
Si (V[j-1] > V[j]) Alors
Aux  V[j-1]
V[j-1]  V[j]
V[j] Aux
Fin Si
Fin pour
Fin pour
Fin
5
47
Nom_Matrice[indice_1, indice_2]; Exp: Mat[i,j]
ISAMM 2005-2006
48
Remplissage, lecture et écriture d’une matrice
Lecture: Saisir chacun des éléments de la matrice.
Pour i de 1 à N Faire
Pour j Pour i de 1 à N Faire 1 à M Faire
Ecrire («Donnez l’element se trouvant aux indices », i , «et», j)
Lire(Mat[i,j])
Fin Pour
Fin Pour
Les procédures et les fonctions
Remplissage: Affecter une valeur à chaque élément de la matrice.
Pour i de 1 à N Faire
Pour j de 1 à M
Mat[i,j]  Valeur_ij
Fin Pour
Fin Pour
Portée et visibilité
• Paramètres des procédures et des fonctions
• Chaînes de caractères
• Récursivité
•
Écriture: Afficher chaque valeur de la matrice.
Pour i de 1 à N Faire
Pour j de 1 à M
Ecrire(Mat[i,j])
Fin Pour
Fin Pour
ISAMM 2005-2006
Modularité et sous-algorithmes
ISAMM 2005-2006
49
Les procédures
Principe de la décomposition modulaire
Un problème difficile est décomposé en plusieurs sous-problèmes
plus faciles à résoudre séparément.
Inétérêt de la modularité:
La réutilisation: Un groupe d’instructions d’un algorithme peut être
utilisé par un autre algorithme.
Améliorer la lisibilité et faciliter la maintenance de l’algorithme.
50
La procédure permet d’exécuter une action bien
déterminée.
Appel de la procédure par son nom déclenchement
des instructions contenues dans la procédure.
Syntaxe :
Procédure Ident (liste des paramètres formels)
< Corps de la procédure >
Un sous-algorithme est:
Une solution algorithmique à un sous problème.
Un morceau de l’algorithme (principal) qui a reçu un nom.
2 types de sous- algorithmes:
Les valeurs passées par l’action appelante exploitées
par la procédure.
Les résultats transmis par à l’action appelante.
Les procédures
Les fonctions.
ISAMM 2005-2006
Les paramètres de la procédure sont:
51
ISAMM 2005-2006
52
Les fonctions
Algorithme modulaire
Une fonction retourne un résultat et un seul.
Une fonction est appelée dans une expression.
Syntaxe :
Un algorithme modulaire a le format suivant:
Sous algorithmes
Procédure A1(paramètres formels) : Action appelée
< Corps de A1>
Fonction A2(paramètres formels) : type
< Corps de A2>
Algorithme principal
Debut
P.
A1(paramètres effectifs) : Action appelante
Ecrire (A2(paramètres effectifs ) : Action appelante
P.
Fin
Fonction Ident (liste des paramètres formels) : type
< Corps de la fonction >
Une fonction est un groupe d’instructions, dotée d’un nom et
qui exécute une action bien déterminée.
Les paramètres de la fonction sont:
Les valeurs passées par l’action appelante exploitées
par la fonction.
L’identificateur d’une fonction a un type et retourne une valeur
en fin d’exécution.
ISAMM 2005-2006
ISAMM 2005-2006
Les paramètres formels n’ont de signification qu’au
moment de l’écriture du sous algorithme.
Ils déterminent le type des objets communiqués.
Ils se substituent aux paramètres formels lors de l’appel
du sous-algorithme.
Il y a une bijection entre paramètres formels et effectifs.
Trois types de paramètres formels :
les paramètres données (passage par valeur):
Les valeurs sont envoyées de l’action appelante à
l’action appelée.
les paramètres résultats (passage par adresse):
Les paramètres données-résultats :
Les résultats sont envoyés de l’action appelée à l’action appelante.
paramètres données qui peuvent être modifiés.
ISAMM 2005-2006
54
Les paramètres effectifs
Communication entre actions appelantes et actions appelées.
2 types de paramètres: formels et effectifs
53
Les paramètres formels
Les paramètres:
55
Nombre de paramètres formels = Nombre de paramètres effectifs.
Les types des paramètres formels et effectifs doivent être compatibles.
Exemple
Sous algorithmes
Fonction Minimum (DON A,B: entier) :entier
Debut
Si (A<B) Alors
Paramètres formels
Retourner (A)
données
Sinon
Retourner (B)
Fin Si
Fin
Paramètres effectifs
Algorithme principal
Debut
Ecrire (« Le minimum de 2 et 3 est », Minimum(2,3) ) :
Fin
ISAMM 2005-2006
56
Identificateurs locaux et globaux
Portée et visibilité
Les identificateurs peuvent des constantes, des type, des
variables, des procédures, des fonctions.
Ils sont classés dans deux catégories :
les identificateurs globaux
Visibilité d'une entité :
Toute entité déclarée dans un sous-algortihme:
Ils sont déclarés dans l’algorithme principal.
les identificateurs locaux
57
Une chaîne de caractères est un tableau de caractères
dont le nombre maximum est fixé à la déclaration.
Le nombre effectif de caractères dans une chaîne peut
varier dans un algorithme.
La fin d’une chaîne est détectée par le caractère de fin
de chaîne: ‘\0’.
Syntaxe:
58
Longueur : La longueur d’une chaîne est à grâce à une
fonction prédéfinie : Long (Nom_chaine).
Longueur(« hello »)=5
La chaîne vide notée par « » est de longueur 0.
Affectation, lecture et écriture
Exemple:
Ident_chaîne [position]
Exp: S1[1] = ‘A’.
59
Nom_chaine  « hello »
Lire (Nom_chaine)
Ecrire (Nom_chaine)
Concaténation de deux chaînes: La fonction Strcat .
Accès à un caractère de la chaîne:
ISAMM 2005-2006
Bloc i+2
Opérations sur les chaînes de caractères
S1 : chaîne [3] ; S1  « AB ».
Bloc i+1
ISAMM 2005-2006
Ident_caîne : chaîne [longueur]
Bloc i
Reprise de la visibilité
de B du bloc i
Chaîne de caractères
n'est visible que dans ce sous-algortihme.
disparaît une fois le sous-algortihme terminé.
Visibilité de B du bloc
i cachée par B du
bloc i+2
Ce nom désigne deux objets différents suivant l’endroit où il
est utilisé.
ISAMM 2005-2006
Partie du code où l'entité est accessible.
Visibilité
de B dans les bloc i et i+1
On peut donner le même nom à un identificateur local et global.
Partie du code où sa déclaration est effective, c'est à dire où
l'entité existe.
Ils ne peuvent être utilisés qu’à l’intérieur du sous algorithme dans
lequel ils sont définis.
Portée d'une entité (type, variable, constanteP) :
Strcat ( Ch1, Ch2): Ajoute le contenu de la chaine Ch2 à la fin
de Ch1.
Strcat (« he », « ello ») donne Ch1= hello , Ch2=ello
Les opérateurs relationnels: = , ≠, <, ≤, >, ≥
ISAMM 2005-2006
60
Récursivité (2)
Récursivité (1)
La récursivité est un concept puissant qui permet de
décomposer un problème en un ou plusieurs sous
problèmes de même nature.
Un sous programme est dit récursif s’il fait appel à lui-même.
La récursivité a pour avantage de programmer facilement
certains problèmes complexes.
Exemple:
Dans le code du sous-algorithme:
61
63
Il doit y avoir une alternative qui ne relance pas un appel récursif.
sinon la récursivité est infinie (saturation de la mémoire
de la machine).
Pour traiter un problème récursivement:
«Initiation à l’algorithmique et aux structures de
données, Volume 1 », J. Courtin, I. Kowarski,
Editions DUNOD, 2ème édition, 1998.
«L’algorithmique, votre passeport informatique pour
la programmation », B. Warin, Ellipses, 2002.
www.loria.fr/~tabbone/COURS/Algo/Cours_algo1.ppt
ftp://ftp.discip.crdp.accaen.fr/discip/crgelec/Cours/algo.pdf
sylvain.berbiqui.org/ALGO-T1.pdf
graal.ens-lyon.fr/~yrobert/algo/poly-algo.ps
ISAMM 2005-2006
Références
Chaque niveau d'appel récursif crée sa propre copie des
paramètres formels et des variables locales.
Fonction factoriel (N: entier): entier
Debut
Si (N=0) alors
Retourner(1)
Sinon
Retourner( factoriel(N-1))
Fin Si
Fin
ISAMM 2005-2006
Il faut déterminer sur quelle "variable" (ex: N) on fait la
récurrence.
Il faut avoir une solution d'arrêt de la récursivité (sur N).
Supposons avoir la solution au rang N-1, trouver ce qu'il faut
faire pour passer au rang N.
ISAMM 2005-2006
62
Téléchargement