CH 1
CH 1
CH 1
Description du module
Ce module est constitué de deux volets : un premier volet qui s’intéresse à l’algorithmique et un
deuxième qui se focalise sur la programmation. Le premier volet est lui-même constitué de deux
parties. La première couvre l’algorithmique de base et est enseignée en parallèle avec la partie
programmation. La deuxième quant à elle s’intéresse à des notions d’algorithmique plus
avancées englobant les structures de données séquentielles et arborescentes.
Objectifs du module
Les objectifs du volet Algorithmique de ce module sont essentiellement les suivants :
Expliquer aux étudiants l’importance d’avoir des connaissances solides en algorithmique, le
lien entre l’algorithmique et la programmation ainsi que les règles d’écriture d’un
algorithme ;
Etudier, assimiler et maîtriser les notions de base nécessaires pour la résolution de tout
problème d’algorithmique ;
Introduire et expliquer la notion de Types Abstraits de Données en insistant sur leur intérêt
ainsi que la manière de les définir ;
Utiliser la démarche de définition de TAD pour introduire les types : « Liste », « Pile » et
« File » permettant l’organisation séquentielle de données aussi bien que les « Arbres
Binaires » et les « Arbres Binaires de Recherche » permettant l’organisation arborescente de
données ;
Proposer, comparer et mettre en œuvre les différentes représentations permettant
d’implémenter les TAD déjà introduits.
Evaluation du module
L’évaluation est constituée d’un ou de plusieurs tests, de travaux pratiques à rendre, d’un devoir
surveillé et d’un examen.
Sommaire
CORMEN, Thomas H., LEISERSON, Charles Eric, RIVEST, Ronald L., et al. Introduction
à l’algorithmique. Dunod, 1997.
_____________________________________________________________________________________
Préparé par Raoudha CHEBIL Page 1
Chapitre I Les objets simples et les opérations de base
Dans ce qui suit, nous présentons un exemple d’algorithme :
Supposons qu’on veut calculer la moyenne des notes d’un élève dans une matière donnée et
qu’on dispose de 3 notes : N1, N2 et N3.
Algorithme Moyenne
CONST
c1=2
c2=3
c3=4
VAR
Moyenne, N1, N2, N3 : réel
DEBUT
Ecrire( Donnez les trois notes dans l’ordre)
Lire (N1,N2,N3)
Moyenne (N1*c1+N2*c2+N3*c3)/( c1+ c2 + c3)
Ecrire ( La moyenne est : , Moyenne)
FIN
3. Types de données
Dès que l’on a besoin de stocker une information au cours d’un algorithme, on utilise
une variable.
a. Types de base
i. Booléen
Valeurs : Vrai, Faux.
Opérations
Opérations relationnelles (Faux < Vrai)
Opérations logiques : négation (non), conjonction (et ), disjonction (ou)
A B Non A A et B A ou B
V V F V V
V F F F V
F V V F V
F F V F F
_____________________________________________________________________________________
Préparé par Raoudha CHEBIL Page 2
Chapitre I Les objets simples et les opérations de base
ii. Caractère
Valeurs : c’est un ensemble fini de symboles totalement ordonnés. Un code ASCII est associé à
chaque caractère.
Opérations
Opérations relationnelles par exemple : ‘a’<’b’ ; ‘a’>’A’
Concaténation
iii. Entier
Valeurs : c’est un sous ensemble de Z. Il s’agit d’une représentation en machine des entiers
relatifs.
Opérations
Opérations relationnelles : = ; < ; > ; ≤ ; ≥ ; <>
Opérations arithmétiques : +, -, *, /
DIV : division entière
MOD : reste de la division entière
PUISSANCE
iv. Réel
Valeurs : un sous ensemble de R. Il s’agit d’une représentation en machine des réels.
Opérations
Opérations relationnelles : = ; < ; > ; ≤ ; ≥ ; <>
Opérations arithmétiques : +, -, *, /
Puissance
Autres opérations comme cos, sin…
Outre les types définis ci-dessus ; il est possible de définir de nouveaux types comme suit.
_____________________________________________________________________________________
Préparé par Raoudha CHEBIL Page 3
Chapitre I Les objets simples et les opérations de base
Exemple :
Type
t_couleur = (blanc, bleu, rouge)
Var
cl : t_couleur
cl blanc
Opérations
Opérations relationnelles
Ord( ) : rang dans le domaine.
Succ( ) : successeur dans le domaine
Pred( ) : prédécesseur dans le domaine
Inc (v,n) : incrémenter v de n
Exemples : ord(bleu)=1, succ(bleu)=rouge, pred(bleu)= blanc.
c. Type intervalle
Le type intervalle permet de restreindre le groupe de valeurs d’un type scalaire (entier, réel,
booléen, caractère ou type énuméré).
Définition du type :
Type nom_intervalle = borne_inf…borne_sup
Avec borne_inf<borne_sup.
Les opérations que nous pouvons effectuer sont celles du type des variables contenues dans
l’intervalle.
Exp :
Type
T_chiffre=0..9
T_majuscule=’A’..’Z’
4. Opérations de base
Dans un schéma séquentiel, on distingue deux types d’instructions :
Des instructions simples, élémentaires permettant de faire un traitement ;
Des instructions permettant de commander le déroulement de l’exécution, appelées structures
de contrôle.
a. Affectation
_____________________________________________________________________________________
Préparé par Raoudha CHEBIL Page 4
Chapitre I Les objets simples et les opérations de base
Le rôle de cette instruction est de placer une valeur dans une variable (associer une valeur à une
variable).
<nom variable><expression>
<expression> : constante | variable | expression
La variable et l’expression doivent être de même type ou de types compatibles (Exp : il est
possible d’affecter un entier à une variable réelle).
Exemple
Test()
var
i,j : entier
Debut
i 10
j 20
i 2*j
Fin
b. Lecture
L’utilisateur introduit des valeurs qui seront affectées à des variables réservées par le
programmeur. L’utilisateur doit respecter le type des éléments à introduire.
Lire (< liste variables >)
<liste variables > : <variable1>, … <variable n>
Exemple
Var
i : entier
j : réel
Debut
Lire(i,j)
Fin
c. Ecriture
Cette instruction permet aussi bien l’affichage d’un texte que l’affichage des valeurs d’une liste
de variables (une ou plusieurs).
Ecrire (<texte>)
Exemple
_____________________________________________________________________________________
Préparé par Raoudha CHEBIL Page 5
Chapitre I Les objets simples et les opérations de base
Var
i, j : entier
Debut
Ecrire (“Bonjour”)
Lire (i, j)
i i*j
Ecrire (i)
Fin
Remarque
On peut regrouper dans la syntaxe de l’instruction Ecrire, la liste des variables et le texte. Par
exemple : Ecrire ("La valeur de i est", i, " la valeur de j est ", j)
5. Algorithmique et programmation
La mise en œuvre d’un algorithme consiste en l’écriture des opérations qui le composent dans un
langage de programmation et constitue alors la brique de base d’un programme informatique.
Un algorithme exprime les instructions permettant de résoudre un problème donné
indépendamment des langages de programmation. Lors du passage de l’algorithmique à la
programmation, le travail revient à résoudre des problèmes de syntaxe, ou de types d’instructions
propres à ce langage.
Afin d’écrire un algorithme, on se base généralement sur une série de conventions désignée par
« pseudo-code », qui est comparable à un langage de programmation dont on aurait évacué la
plupart des problèmes de syntaxe. Puisqu’il est purement conventionnel, ce pseudo-code peut
varier légèrement d’une référence à une autre.
Pour être compréhensible, un algorithme doit être présenté de manière lisible ; il ne doit pas être
trop long, ce qui nécessite parfois de le décomposer en modules. Certaines formes de
programmation telles que les branchements sont à éviter ; par contre la récursivité permet une
expression concise des algorithmes et facilite leur analyse.
Si <condition> alors
<Traitement>
Fsi
_____________________________________________________________________________________
Préparé par Raoudha CHEBIL Page 6
Chapitre II Les structures de contrôle
Si <condition> est vraie alors on exécute le bloc <traitement 1> et on continue en séquence à
l’instruction qui suit <Fsi>.
Si <condition> est fausse, on exécute les instructions du bloc <traitement 2> et on passe à
l’instruction qui suit immédiatement <Fsi>.
c. Schéma conditionnel à choix multiple
i. Syntaxe
Selon<v>
<v1> : <Traitement 1>
<v2> : < Traitement 2>
<vn> : < Traitement n>
Sinon : <Traitement >
Fin selon
ii. Sémantique
13
Chapitre II Les structures de contrôle
Remarque
L’instruction selon peut être ramenée à un enchaînement de « Si » imbriquées.
Exemple d’utilisation
Exp( )
Var
k, x : entier
Debut
x0
lire(k)
Selon k
5 : x x+6
6..10 : x x+18
2. Structures itératives
Les structures itératives sont des instructions qui permettent de répéter l’exécution d’une même
séquence d’instructions un nombre fini de fois.
On distingue deux types de répétitions :
L’itération : quand on connait le nombre de fois que l’on va répéter une instruction ou
une séquence d’instructions.
La répétition conditionnelle : quand la poursuite d’une répétition dépend d’une
condition à résultat booléen.
8
Chapitre II Les structures de contrôle
a. Boucle « Pour »
Pour <compteur>de<valeur initiale>à<valeur finale>pas<incrément>faire
<Traitement>
Fpour
<compteur> : l’identificateur d’une variable de type scalaire.
<valeur initiale>, <valeur finale>, <incrément> : une variable de même type que le compteur ou
une constante de même type que le compteur ou une expression dont le résultat est de même type
que le compteur.
<Traitement> : une ou plusieurs instructions quelconques.
Exemple :
var
i, j, n : entier
Debut
n5
j1
Pour i de j à n pas (2) faire
Ecrire(i)
Fpour
Fin
Remarques
Il est interdit de modifier : <compteur>, <valeur initiale>, <valeur finale> et <incrément>.
<valeur initiale> <= <valeur finale> Ssi <incrément>>0
<valeur initiale> >= <valeur finale> Ssi <incrément><0
<incrément> ne doit jamais être nul.
Lorsque la valeur de <incrément> n’est pas précisée elle est considérée comme étant égale à 1.
L’instruction Pour est utilisée lorsque le nombre d’itérations est connu.
b. Boucle « Tant que »
Tant que<condition>faire
<Traitement>
Fin tant que
_____________________________________________________________________________________
Préparé par Raoudha CHEBIL Page 9
Chapitre I Rappel et conventions syntaxiques
Exercice
Ecrire un algorithme permettant de saisir une suite d’entiers positifs ou nuls se terminant par une
valeur négative, de faire la somme de ces entiers et de l’afficher.
c. Boucle « Répéter »
Répéter
<Traitement>
Jusqu’à <condition>
Remarque
Cette instruction ne peut être utilisée que si on est sûrs que le traitement est exécuté au moins
une fois.
La boucle précédente peut être remplacée par la boucle suivante :
Tant que non <condition> faire
<Traitement>
FTQ
13
Chapitre I Rappel et conventions syntaxiques
7. Décomposition modulaire
1. Introduction
Lors de la conception d’un programme résolvant un problème général, il est nécessaire de
décomposer le problème en différents sous-problèmes moins complexes à résoudre.
Ces différents sous-problèmes peuvent être résolus grâce à des modules ou sous-programmes.
L’utilisation des sous-programmes présente de nombreux avantages. Nous citons :
La possibilité de réutilisation ;
La facilité de la résolution de problèmes en ne s’intéressant qu’à l’écriture d’un module à
la fois ;
La factorisation du code : les sous-programmes permettent de ne pas répéter plusieurs
fois une même séquence d’instructions au sein de l’algorithme.
En algorithmique, il existe deux types de sous-programmes :
Les procédures
Les fonctions
Lors de la conception d’un programme deux aspects apparaissent :
La définition de la procédure ou de la fonction ;
L’appel de la procédure ou de la fonction dans le programme.
Une fois explicité (l'algorithme défini), un sous programme peut être utilisé dans d'autres
programmes ou sous-programmes. Le (sous-) programme qui utilise un sous-programme est
désigné par (sous-) programme appelant.
2. Procédures
a. Déclaration
Procédure<Nom procédure> (<Liste-paramètres>)
var
<variables-locales>
Début
<Traitement>
Fin
<Nom procédure> : identificateur
<var2> : <Type2>
14
Chapitre I Rappel et conventions syntaxiques
Une variable définie dans un sous-programme est appelée variable locale. La portée d'une
variable locale est uniquement le sous-programme qui la déclare.
b. Appel de procédure
Un appel de procédure se fait de la façon suivante :
c. Exemple de procédure
Algo Exp1
Var
A, B : entier
Lire(A,B)
AfficheMax(A,B)
Fin
15
Chapitre I Rappel et conventions syntaxiques
3. Fonctions
a. Déclaration
Fonction<Nom fonction> (<Liste-paramètres>) : <type>
var
<variables-locales>
Début
<Traitement>
Fin
b. Appel de fonction
Une fonction est utilisée dans une instruction :
16
Chapitre I Rappel et conventions syntaxiques
Algo Max
Var
A, B, C : entier
Fonction Max(X, Y : entier) : entier
Var
W : entier
Début
Si (X>Y) alors
W X
Sinon
W Y
Fsi
Max W
Fin
Début (Algorithme principal : algorithme appelant)
Lire (A, B)
C Max(A, B)
Fin
Lors de l’utilisation des sous-programmes, une transmission de données et de résultats est mise
en jeu. On distingue :
17
Chapitre I Rappel et conventions syntaxiques
Le paramètre effectif doit avoir le même type ou un type compatible avec le paramètre formel
correspondant.
La correspondance entre paramètres effectifs et paramètres formels se fait dans l’ordre de leur
apparition dans les deux listes.
Donnée : dans ce mode de passage, le paramètre doit porter une valeur significative avant
l’exécution, il est nécessaire aux calculs effectués dans le sous-programme mais il ne sera
pas modifié par celui-ci. C'est le seul mode de passage de paramètre qui admet l'utilisation
d'une constante. Ce mode de passage est exprimé par le mot clé : Don
Résultat : dans ce mode de passage, le paramètre est destiné à recevoir un résultat. Les
instructions du sous-programme affectent obligatoirement une valeur à ce paramètre qui n’a
pas nécessairement une valeur significative avant l’exécution. Par contre, après l’exécution
du sous-programme, il doit comporter une valeur significative. Ce mode de passage de
paramètre est exprimé par le mot clé : Res
Donnée-résultat : dans ce mode de passage, le paramètre est utilisé dans les calculs faits
dans le sous-programme. Il est en même temps utilisé pour recevoir un résultat. Il doit donc
avoir une valeur significative avant et après exécution. Ce mode de passage de paramètre est
exprimé par le mot clé : DonRes
Exemples :
1/
Procédure AfficheMax (X :entier, Y :entier)
Utilisation : AfficheMax (A,B)
Les paramètres formels sont : X et Y.
Les paramètres effectifs sont : A et B.
X et Y sont des paramètres données. Donc on déclarera la procédure AfficheMax comme suit :
18
Chapitre I Rappel et conventions syntaxiques
2/
Fonction Max(X, Y : entier) : entier
Utilisation : C Max(A, B)
Les paramètres formels sont : X et Y.
Les paramètres effectifs sont : A et B.
X et Y sont des paramètres données. Donc on déclarera la fonction Max comme suit :
Fonction Max(Don X, Y : entier) : entier
3/
Soit la procédure Permute qui permute deux entiers X et Y.
Procédure Permute (DonRes X, Y :entier)
19