Algorithmique Et Structures de Donnees 1
Algorithmique Et Structures de Donnees 1
Matière :
Algorithmiques & structures de données 1
Mots-clés du Support
Algorithme, programme, Structure de données, Actions de base, Variables, Structures de
données conditionnelles, chaînes de caractères, Structures de données itératives, les
Fonctions, les Procédures, les Enregistrements, le Tri, les Algorithmes de tri, etc.
Réalisé par :
Nooman MAHJOUB (ISET Beja)
1. INTRODUCTION........................................................................................................................................ 14
2. L’ACTION D’AFFECTATION ..................................................................................................................... 14
2.1. Syntaxe............................................................................................................................................ 14
2.2. Traitement....................................................................................................................................... 14
2.3. Compatibilité de types ..................................................................................................................... 14
2.3.1 Les expressions arithmétiques .................................................................................................................... 15
2.3.2 Les expressions logiques ............................................................................................................................. 15
3. EXERCICES D’APPLICATION.................................................................................................................... 16
4. CORRECTION DES EXERCICES................................................................................................................. 18
5. L’ACTION DE LECTURE OU D’ENTREE .................................................................................................... 19
5.1 Syntaxe............................................................................................................................................ 19
5.2 Traitement....................................................................................................................................... 20
6. L’ACTION D’ECRITURE OU DE SORTIE .................................................................................................... 20
6.1 Syntaxe............................................................................................................................................ 20
6.2 Traitement....................................................................................................................................... 21
6.2.1 Exemple............................................................................................................................................. 21
6.2.2 Exercice d’application .................................................................................................................... 21
7. APPLICATIONS ......................................................................................................................................... 21
8. CORRECTIONS DES EXERCICES ............................................................................................................... 23
1. INTRODUCTION........................................................................................................................................ 26
2. L’ACTION CONDITIONNELLE SIMPLE ..................................................................................................... 26
2.1. Exemple .......................................................................................................................................... 26
2.2. Exercices d’application .................................................................................................................. 27
3. L’ACTION CONDITIONNELLE A CHOIX MULTIPLE .................................................................................. 28
4. EXERCICES D’APPLICATION.................................................................................................................... 30
5. CORRECTIONS DES APPLICATIONS ......................................................................................................... 30
1. INTRODUCTION........................................................................................................................................ 33
2. L’ACTION "TANT QUE" .......................................................................................................................... 33
2.1. Syntaxe............................................................................................................................................ 33
2.2. Traitement....................................................................................................................................... 33
2.3. Exemple .......................................................................................................................................... 33
2.4. Exercice d’application .................................................................................................................... 34
3. L’ACTION "REPETER" ............................................................................................................................ 34
3.1. Syntaxe............................................................................................................................................ 34
3.2. Traitement....................................................................................................................................... 34
3.3. Exemple .......................................................................................................................................... 35
3.4. Exercice d’application .................................................................................................................... 35
4. L’ACTION "POUR" .................................................................................................................................. 35
4.1. Syntaxe............................................................................................................................................ 35
4.2. Traitement....................................................................................................................................... 36
4.3. Exemple .......................................................................................................................................... 36
4.4. Exercices d’application .................................................................................................................. 36
5. EXERCICES D’APPLICATION.................................................................................................................... 37
6. CORRECTION EXERCICES D’APPLICATION ............................................................................................. 38
1. INTRODUCTION........................................................................................................................................ 41
2. DEFINITION D’UN TABLEAU .................................................................................................................... 41
3. TABLEAUX A UNE DIMENSION ................................................................................................................. 41
3.1. Déclaration ..................................................................................................................................... 41
3.2. Accès à un élément du tableau ....................................................................................................... 41
4. TABLEAUX A DEUX DIMENSION ............................................................................................................... 42
4.1. Déclaration ..................................................................................................................................... 42
4.2. Accès à un élément d’une matrice ................................................................................................. 42
5. EXEMPLES ............................................................................................................................................... 43
5.1. Exemple 1 ......................................................................................................................................... 43
5.2. Exemple2 .......................................................................................................................................... 43
5.3. Exemple 3 ......................................................................................................................................... 44
6. RECHERCHE SEQUENTIELLE................................................................................................................... 44
7. EXERCICES .............................................................................................................................................. 44
1. INTRODUCTION........................................................................................................................................ 48
2. DEFINITION D’UNE CHAINE DE CARACTERES ......................................................................................... 48
3. DECLARATION ......................................................................................................................................... 48
4. ACCES A UNE CASE .................................................................................................................................. 48
5. FONCTIONS PREDEFINIES SUR LES CHAINES DE CARACTERES ............................................................... 48
5.1. La fonction Longueur .................................................................................................................... 48
5.2. La fonction ASC ............................................................................................................................. 48
5.3. La fonction CHR ............................................................................................................................ 49
6. EXERCICES D’APPLICATION.................................................................................................................... 49
1. INTRODUCTION........................................................................................................................................ 57
2. DEFINITION.............................................................................................................................................. 57
3. DECLARATION ......................................................................................................................................... 57
4. ACCES A UN CHAMP D’UN ENREGISTREMENT......................................................................................... 57
5. EXERCICES D’APPLICATION.................................................................................................................... 58
5.1. Exercice 1 ....................................................................................................................................... 58
5.2. Exercice 2 ....................................................................................................................................... 59
1. INTRODUCTION........................................................................................................................................ 60
2. TRI PAR SELECTION ORDINAIRE ............................................................................................................. 60
2.1 Principe ........................................................................................................................................... 60
2.2 Algorithme de tri par sélection ....................................................................................................... 60
3. TRI PAR INSERTION SEQUENTIELLE........................................................................................................ 61
3.1 Principe ........................................................................................................................................... 61
3.2 Algorithme de tri par insertion séquentielle .................................................................................. 62
3.3 Exemple .......................................................................................................................................... 62
4. TRI PAR INSERTION DICHOTOMIQUE ...................................................................................................... 63
4.1. Principe ........................................................................................................................................... 63
4.2. Algorithme de tri par insertion dichotomique ............................................................................... 63
5. ALGORITHME DE TRI RAPIDE.................................................................................................................. 64
5.1 Présentation .................................................................................................................................... 64
5.2 Choix du pivot................................................................................................................................. 64
5.3 Exemple .......................................................................................................................................... 65
5.4 Algorithme ...................................................................................................................................... 65
6. TRI PAR TAS ............................................................................................................................................. 66
6.1 Définition ........................................................................................................................................ 66
6.2 Exemple .......................................................................................................................................... 66
6.3 Utilisation d’un tas pour le tri ........................................................................................................ 66
6.4 Algorithme de tri par tas ................................................................................................................ 67
ISET Zaghouan Cours Algorithmique 1
Objectifs du cours
Fournir aux étudiants des bases rigoureuses en algorithmique, en insistant sur l'aspect
scientifique de la discipline.
Acquérir les notions fondamentales d’algorithmique (variables, constates, affectation, entrées
sorties, structures conditionnelles, structures itératives, tableaux, procédures, fonctions, tri et
recherche, ...)
Savoir écrire des algorithmes pour résoudre des problèmes,
Maîtriser le raisonnement algorithmique
Formuler les algorithmes de quelques types de tri à savoir le tri par tas, le tri par insertion…
Comprendre la notion de complexité et apprendre la méthode d’estimation de la complexité
des algorithmes.
Stimuler la créativité des étudiants en les encourageant à exploiter les solutions vues au cours
pour en élaborer de nouvelles.
Evaluation
Contrôle continu : il est compté comme 38% de la note finale du candidat et regroupe les notes
suivantes :
Cours ASD 1 5
ISET Zaghouan Cours Algorithmique 1
La note de mini projet : chaque candidat est appelé à participer avec un autre binôme
dans un mini projet. Chaque deux binômes sont appelés à présenter leur travail à la fin
du semestre.
Les notes de tests : un nombre variable de tests au cours des séances de cours.
Une note pour l’assiduité des candidats
La note du devoir surveillé : un examen partielle possible de le faire à partir de la
cinquième semaine de cours.
Examen Final : il s’agit d’un examen de synthèse qui aura lieu à la fin du semestre. Cet
examen est compté comme 62% de la note finale du candidat.
Moyens Pédagogiques
Support de cours papier.
Support de cours numérique.
Série de travaux dirigés : à la fin de chaque chapitre on doit avoir une série d’exercices.
Sujets d’examens antérieurs.
Cours ASD 1 6
ISET Zaghouan Cours Algorithmique 1
N° Titre Semaine(s)
1 Introduction S1 – S2
2 Action Simples S3
3 Actions Conditionnelles S4
4 Actions Itératives S5 – S6
5 Les Tableaux S6 – S7
Le programme est planifié sur 14 semaines seulement. Nous avons décidé de laisser une dernière
semaine pour remédier les problèmes de décalage. Si tout va bien, cette semaine sera réservée pour une
révision à l’examen final.
[4] Introduction au langage C norme iso / ansi , Bernard Cassagne, 2.1 de juin 1998
[6] Initiation au Langage C Niveau 1, M . Berthomier Eric, Version 1.1 du 13 Mars 2000
Cours ASD 1 7
ISET Zaghouan Cours Algorithmique 1
[9] Support de cours : Programmation C – II, Niveau 2 Par BEN ROMDHAN Mourad
[11] The C programming language , Second Edition Dennis Ritchie & Brian W. Kernighan,
Edition PRENTICE HALL Informatique, 1988.
[12] Le langage C, Dominique GALLAND, Édition DUNOD Informatique, 1989.
Cours ASD 1 8
ISET Zaghouan Cours Algorithmique 1
Chapitre 1 Introduction
1. Les étapes de résolution d’un problème en informatique
La première étape de la démarche consiste à analyser le problème, définir les données et leurs
caractéristiques et notamment leurs types, définir les résultats et les relations entre résultats-données et
résultats entre eux. Cette étape définie le cahier des charges du problème.
Supposons par exemple que nous avons à ordonner (ou trier) une suite de nombres entiers.
Les données sont les entiers à ordonner. Le résultat en sortie sera une suite constituée par les
mêmes nombres en entrée mais mis en ordre.
La sortie est donc le résultat d'une permutation ou réorganisation des données en entrée.
Un algorithme est une séquence d'étapes de calcul qui utilise des données en entrée pour arriver à des
résultats en sortie.
Exemple
La sortie : suite de n nombres (b1, b2,... bn) tel que {b1,... bn}={al,…an} et b1<b2<b3...<bn
Remarque
Un algorithme est correct lorsque, pour chaque donnée en entrée (dite instance), il se termine en
produisant la bonne sortie, c'est-à-dire qu'il résout le problème posé.
Cours 1 : Introduction 9
ISET Zaghouan Cours Algorithmique 1
Un programme est un ensemble d'instructions décrivant les différentes actions d'un algorithme en
respectant des règles d'écriture du langage (syntaxe). On obtient ainsi un fichier (programme source).
C'est un fichier texte créé et modifié par un éditeur de texte.
La compilation consiste à traduire le programme source écrit dans un langage de haut niveau en un
programme exécutable écrit dans un langage binaire de bas niveau.
Au cours de cette traduction, le compilateur détecte des éventuelles erreurs (lexicales et/ou
syntaxiques).
Le concepteur de l'algorithme doit s'assurer que le programme donne un résultat correct dans tous
les cas et dans toutes les éventualités. Il faut ainsi valider et tester le programme construit.
On construit des jeux d'assai, c.-à-d. des échantillons de données de base correspondant
aux différents cas,
-Si tous les résultats sont valides, Alors, il faut Accepter le programme (Jusqu'à preuve du
contraire) et le documenter.
Une partie corps de l'algorithme qui consiste en une séquence d'actions faisant appel à des
opérations de base de l'ordinateur.
Cours 1 : Introduction 10
ISET Zaghouan Cours Algorithmique 1
Constantes
<liste des constantes avec leurs valeurs>
Partie déclarative
Types
<définition des types définis par l'utilisateur>
Variables
<liste des variables suivies de leur type>
Début
Partie corps de
< séquence d’actions>
l'algorithme
Fin
Action d'affectation,
Action d'entrée/sortie,
Une variable est un emplacement mémoire capable de contenir des valeurs de type défini au
préalable. Elle peut être définie comme une boite. Cette boite admet un nom, une taille, un contenu
(valeur) et une adresse. Le nom de la variable s'appelle "identificateur de variable". La taille dépend du
type de la variable (2 octets pour le type entier, 1 octet pour le type caractère, 4 octets pour le type réel,
...etc.).
Cours 1 : Introduction 11
ISET Zaghouan Cours Algorithmique 1
Exemple
Var x, y : entier
La définition d'une constante est identique à celle d'une variable, à la différence que la valeur
d'une constante, reste inchangée dans l'algorithme.
identificateurConstante2 = valeur 2
identificateurConstante i = valeur i
Exemples
const pi = 3.14
const N = 30
A une variable est attribué un type. Ce type indique l'espace mémoire qui peut être réservé à cette
variable aussi bien d'un point de vu taille que contenu. Il existe des types simples qui sont prédéfinis tels
que les types entier, réel, caractère ou booléen :
Cours 1 : Introduction 12
ISET Zaghouan Cours Algorithmique 1
Le type caractère : désigne l'ensemble de tous les symboles. Exemples : 'a', 'b 'c', 'A', 'B', '*', '+',
';'...
Il existe aussi des types composés définis à partir des types de base tels que les tableaux, les
enregistrements, les chaînes de caractères, etc.
Traitement :
- Afficher le résultat
Algorithme Max
var x, y : entier
Début
Ecrire ("Donner deux entiers")
Lire(x, y)
Si x > y alors
Ecrire (X)
Sinon
Ecrire (Y)
Fin si
Fin
Remarque
Cours 1 : Introduction 13
ISET Zaghouan Cours Algorithmique 1
1. Introduction
Ce chapitre présente les actions simples utilisant les opérations de base d'un ordinateur. Ces actions sont :
L'action d'affectation qui permet d'affecter à une variable (enregistrer dans un emplacement
mémoire) une valeur qui peut être donnée ou calculée à partir d'une expression.
L'action de lecture qui met en œuvre l'opération de lecture d'une valeur à partir de l'entrée standard
d'un ordinateur et de l'enregistrer dans un emplacement mémoire.
L'action d'écriture qui permet d'afficher, sur la sortie standard d'un ordinateur, un résultat qui peut
être alphabétique ou numérique.
2. L’action d’affectation
L'action d'affectation a pour effet d'écrire la valeur d'une variable dans la zone mémoire réservée à la
variable en question.
2.1. Syntaxe
Une action d'affectation a la forme suivante :
2.2. Traitement
L'exécution d'une action d'affectation consiste d'abord à évaluer la valeur de l'expression et ensuite à
écrire cette valeur dans l'espace mémoire correspondant à la variable en question.
Une constante
Une variable
S ← 3*a + (b*8)
Une expression logique exp_log est une expression qui peut avoir comme valeur « vrai » ou « faux ».
Elle peut être :
Remarque
L'expression (x >17) ET (y = 306) vaut vrai si x>17 et y=306. Dans le cas contraire elle vaut faux.
3. Exercices d’application
3.1 Exercice 1
Quelles seront les valeurs des variables a et b après exécution des actions suivantes ?
Algorithme Ex1
var a,b : entier
Début
a←1
b←a+3
a←3
Fin
3.2 Exercice 2
Quelles seront les valeurs des variables a, b et c après exécution des instructions suivantes ?
Algorithme Ex2
var a, b, c : entier
début
a←5
b←3
c←a+b
a←2
c←b–a
fin
3.3 Exercice 3
Quelles seront les valeurs des variables a et b après exécution des instructions suivantes ?
Algorithme Ex3
var a, b : entier
début
a←5
b←a+4
a←a+1
b←a–4
fin
3.4 Exercice 4
Quelles seront les valeurs des variables a, b et c après exécution des instructions suivantes ?
Algorithme Ex4
var a,b,c :entier
début
a←3
b ← 10
c←a+b
b←a+b
a←c
fin
3.5 Exercice 5
Quelles seront les valeurs des variables a et b après exécution des instructions suivantes ?
Algorithme Ex5
var a,b :entier
début
a←5
b←2
a←b
b←a
fin
Les deux dernières actions permettent-elles d’échanger les deux valeurs de a et b ? Si l’on inverse l’ordre
est-ce que le résultat final change ?
3.6 Exercice 6
a←5 a=5 b= ? c= ?
b ← 10 a=3 b = 10 c=?
c←a+b a=3 b = 10 c = 13
b←a+b a=3 b = 13 c = 13
a←c a = 13 b = 13 c = 13
Les deux dernières instructions ne permettent donc pas d’échanger les deux valeurs de b et a,
puisque l’une des deux valeurs (celle de a) est ici écrasée.
Si l’on inverse les deux dernières instructions, cela ne changera rien du tout. En effet, dans ce cas
c’est la valeur de b qui sera écrasée.
4.6 Correction exercice 6
Algorithme Ex5
var x,y,z :entier
début
x←5
y←2
z←x
x←y
y←z
fin
5.1 Syntaxe
L'action de lecture a la forme :
Ou plus généralement :
Cette action permet de lire une ou plusieurs valeurs à partir des périphériques d'entrées (par défaut : c'est
le clavier) et puis les ranger dans les cases mémoires associées aux variables identifiées dans l'action.
5.2 Traitement
L'action lire (x) renferme trois opérations internes:
Remarque
L'action lire (x, y) permet de lire deux valeurs à partir du clavier : la première valeur est pour x et la
deuxième pour y.
6.1 Syntaxe
L'action d'écriture est de la forme :
Ecrire (expression)
Ou plus généralement :
6.2 Traitement
L'action Ecrire (expression 1, expression2, ..., expression n) amène l'ordinateur, pour chaque i de {1, ...,
n}, à évaluer tout d'abord l'expression numéro i et ensuite à afficher la valeur obtenue.
6.2.1 Exemple
Considérons la séquence suivante d'actions :
Lire(s)
Lire(n)
Ecrire ('La moyenne est: ', s/n)
Pour des valeurs en entrée : 120 et 10, le résultat qui sera affiché est le suivant :
Algorithme calcul
var x, y, p,s : entier
debut
ecrire('donner la valeur de x= ')
lire(x)
ecrire('donner la valeur de y= ')
lire(y)
s←x+y
p←x*y
ecrire('La somme= ',s)
ecrire('Le produit= ',p)
fin
7. Applications
7.1 Exercice 1
Algorithme ex1
var x, y : entier
début
x ← 20
y←x*2
ecrire (x)
ecrire (y)
fin
7.2 Exercice 2
Ecrire un algorithme qui demande un nombre à l’utilisateur, puis qui calcule et affiche le carré de ce
nombre.
7.3 Exercice 3
Ecrire un algorithme permettant de calculer et d’afficher le prix d’une marchandise sachant que son prix
hors réduction et le taux de réduction sont saisies au clavier.
7.4 Exercice 4
Ecrire un algorithme permettant de calculer la surface et le périmètre d’un rectangle et de les afficher
sachant que sa longueur et sa largeur sont saisies au clavier.
7.5 Exercice 5
Ecrire un algorithme permettant de calculer et d’afficher la surface et le périmètre d’un cercle sachant que
son rayon est saisi au clavier.
7.6 Exercice 6
7.7 Exercice 7
Ecrire un algorithme qui calcule et affiche la résistance équivalente à trois résistances branchées en série
puis en parallèle. Sachant que :
Rsérie R1 R 2 R3
R1 R 2 R3
R parallèle
R1 R 2 R1 R3 R 2 R3
7.8 Exercice 8
Ecrire un algorithme qui permettant d’échanger le contenu de deux variables entières x et y saisies au
clavier sans utiliser de variables intermédiaires.
Algorithme carré
var n ,r :entier
Début
Ecrire("Donner un entier:")
Lire(n)
r←n*n
Ecrire("Son carré est : ", r)
Fin
8.3 Correction exercice 3
Algorithme calculPrix
var p ,phr ,taux :réel
Début
Ecrire("Donner le prix hors réduction: ")
Lire(phr)
Ecrire("Donner le taux de réduction: ")
Lire(taux)
p ← (1-taux/100)*phr
Ecrire("Le prix à payer est: ", p)
Fin
Algorithme rectangle
var l,L,s,p :réel
Début
Ecrire("Donner la longueur du rectangle: ")
Lire(L)
Ecrire("Donner la largeur du rectangle: ")
Lire(l)
s←l*L
p ← (l + L)*2
Ecrire("La surface du rectangle vaut: ",s )
Ecrire("Le périmètre du rectangle vaut: ",p )
Fin
8.5 Correction exercice 5
Cours2 : Les actions simples Page 23
ISET Zaghouan Cours Algorithmique 1
Algorithme cercle
const pi=3.14
var r,s,p :réel
Début
Ecrire("Donner le rayon du cercle: ")
Lire(r)
s ← pi*r*r
p ← 2*r*pi
Ecrire("La surface du cercle vaut: ",s )
Ecrire("Le périmètre du cercle vaut: ",p )
Fin
8.6 Correction exercice 6
Algorithme calcul
var r,q,a,b :entier
Début
Ecrire("Donner la valeur de a: ")
Lire(a)
Ecrire("Donner la valeur de b: ")
Lire(b)
q ← a div b
r ← a mod b
Ecrire("Le quotient vaut: ",q )
Ecrire("Le reste vaut: ",r)
Fin
8.7 Correction exercice 7
Algorithme calculRésistance
var r1,r2,r3,rs,rp :réel
Début
Ecrire("Donner la valeur de la résistance r1: ")
Lire(r1)
Ecrire("Donner la valeur de la résistance r2: ")
Lire(r2)
Ecrire("Donner la valeur de la résistance r3: ")
Lire(r3)
rs ← (r1+r2+r3)
rp ← (r1*r2*r3)/(r1*r2+r1*r3+r2*r3)
Ecrire("La valeur de la résistance équivalente s’il sont branchées en série est : ",rs )
Ecrire("La valeur de la résistance équivalente s’il sont branchés en parallèle est : ",rp )
fin
Algorithme saisie5vars
var a1,a2,a3,a4,S: entier
Début
Ecrire("Donner la valeur de l’entier n°1: ")
Lire(a1)
Ecrire("Donner la valeur de l’entier n°2: ")
Lire(a2)
Algorithme saisie2vars
var a,S: entier
Début
Ecrire("Donner la valeur de l’entier n°1: ")
Lire(a)
s←a
Ecrire("Donner la valeur de l’entier n°2: ")
Lire(a)
s ← s+a
Ecrire("Donner la valeur de l’entier n°3: ")
Lire(a)
s ← s+a
Ecrire("Donner la valeur de l’entier n°4: ")
Lire(a)
s ← s+a
Ecrire("La somme vaut: ", s)
Fin
8.9 Correction exercice 9
Algorithme échange
var x,y: entier
Début
Ecrire("Donner la valeur de x: ")
Lire(x)
Ecrire("Donner la valeur de y: ")
Lire(y)
Ecrire("Avant échange, x= ",x," et y= ",y)
x←x+y
y←x-y
x←x-y
Ecrire("Après échange, x= ",x," et y= ",y)
Fin
L'action conditionnelle simple qui consiste à évaluer une condition (expression logique à valeur
vrai ou faux) et d'effectuer le traitement relatif à la valeur de vérité trouvée.
L'action conditionnelle à choix multiple qui consiste à évaluer une expression qui n'est pas
nécessairement à valeur booléenne (elle peut avoir plus de deux valeurs) et selon la valeur
trouvée, effectue un traitement.
Forme 1
Si condition Alors
action(s)
Fin si
Dans cette forme, la condition est évaluée. Si elle vaut vrai alors c'est la séquence d'actions qui est
exécutée sinon c'est l'action qui suit l'action conditionnelle dans l'algorithme qui est exécutée.
Forme 2
Si condition Alors
action(s)1
Sinon
action(s)2
Fin si
Dans cette forme, la condition est évaluée. Si elle vaut vrai alors c'est la première séquence d'actions
qui est exécutée sinon c'est la deuxième qui est exécutée.
2.1. Exemple
Ecrire un algorithme qui lit un nombre entier et qui affiche sa valeur absolue.
Algorithme absolue
var n, a : entier
Début
Ecrire("Donner un entier:")
Lire(n)
si (n>0)
alors
a←n
sinon
a ← -n
Ecrire("la valeur absolue de ",n," est : ",a)
Fin
Ecrire un algorithme qui lit trois nombres entiers et qui affiche leur maximum.
Algorithme max3Ver1
var x,y,z,m :entier
Début
Ecrire("Donner la valeur de l’entier n°1: ")
Lire(x)
Ecrire("Donner la valeur de l’entier n°2: ")
Lire(y)
Ecrire("Donner la valeur de l’entier n°3: ")
Lire(z)
si (x>y et x>z) alors
m←x
finsi
si (y>x et y>z) alors
m←y
finsi
si (z>y et z>x) alors
m←z
finsi
Ecrire("Le maximum est: ",m)
Fin
Algorithme max3Ver2
var x,y,z,m :entier
Début
Ecrire("Donner la valeur de l’entier n°1: ")
Lire(x)
Ecrire("Donner la valeur de l’entier n°2: ")
Lire(y)
Exercice 2
Ecrire un algorithme pour la résoudre une équation du premier degré de la forme ax+b=0.
Algorithme equationPremierDegré
var a, b, x : réel
Début
Ecrire ("Donner la valeur de a: ")
Lire(a)
Ecrire ("Donner la valeur de b: ")
Lire(b)
Si (a=0) Alors
Si (b=0) Alors
Ecrire ("L’ensemble des solutions est toute |R")
Sinon
Ecrire ("L’ensemble des solutions est Ø ")
Finsi
Sinon
x ← -b/a
finsi
fin
valeurn : action(s)
Sinon action(s) /* facultative */
Fin selon
Le préfixe sinon peut ou non apparaître et il regroupe les valeurs qui n'ont pas été explicitement
spécifiées. Il constitue le dernier choix.
Exemple 1
Ecrire un algorithme qui saisit un entier compris entre 0 et 9 et affiche cet entier en toute lettre.
Algorithme entierLettre
var n : entier
Début
Ecrire("Donner la valeur de l’entier: ")
Lire(n)
Selon (n) faire
1 : Ecrire("L’entier saisie est: un")
2 : Ecrire("L’entier saisie est: deux")
3 : Ecrire("L’entier saisie est: trois")
4 : Ecrire("L’entier saisie est: quatre")
5 : Ecrire("L’entier saisie est: cinq")
6 : Ecrire("L’entier saisie est: six")
7 : Ecrire("L’entier saisie est: sept")
8 : Ecrire("L’entier saisie est: huit")
9 : Ecrire("L’entier saisie est: neuf")
Fin selon
fin
Exemple 2
Algorithme arc-en-ciel
var c : entier
Début
Ecrire("Donner l’ordre de la couleur: ")
Lire(c)
Selon (c) faire
1 : Ecrire("La couleur correspondante est: rouge")
2 : Ecrire("La couleur correspondante est: orangé")
3 : Ecrire("La couleur correspondante est: jaune")
4 : Ecrire("La couleur correspondante est: vert")
5 : Ecrire("La couleur correspondante est: bleu")
6 : Ecrire("La couleur correspondante est: indigo")
7 : Ecrire("La couleur correspondante est: violet")
fin selon
fin
4. Exercices d’application
4.1 Exercice 1
Ecrire un algorithme qui saisit un entier relatif et permettant de déterminer s’il est positif, négatif ou nul.
4.2 Exercice 2
Ecrire un algorithme qui demande la saisie de deux nombres à l’utilisateur et affiche le signe de leur
produit.
4.3 Exercice 3
Ecrire un algorithme qui demande l’âge d’un enfant à l’utilisateur. Ensuite, il l’informe de sa catégorie :
"Poussin" de 6 à 7 ans
"Pupille" de 8 à 9 ans
"Minime" de 10 à 11 ans
"Cadet" après 12 ans
4.4 Exercice 4
Algorithme signe
var n : entier
Début
Finsi
fin
5.2 Correction exercice 2
Algorithme Signeproduit
var a,b : entier
Début
Ecrire("Donner la valeur de l’entier a: ")
Lire(a)
Ecrire("Donner la valeur de l’entier b: ")
Lire(b)
Si (a>0 et b>0) ou (a<0 et b<0) Alors
Ecrire("le signe du produit est positif")
Sinon
Ecrire("le signe du produit est négatif")
Finsi
fin
5.3 Correction exercice 3
Algorithme catégorie
var a : entier
Début
Ecrire("Donner l’âge de l’enfant: ")
Lire(a)
Si (a>=12) Alors
Ecrire("Catégorie Cadet")
Sinon Si (age>=10) Alors
Ecrire("Catégorie Minime")
Sinon Si (age>=8) Alors
Ecrire("Catégorie Pupille")
Sinon Si (age>=6) Alors
Ecrire("Catégorie Poussin")
Finsi
Finsi
Finsi
Finsi
fin
Algorithme equationSecondDegré
var a,b,c,x1,x2,d :réel
Début
Ecrire("Donner la valeur de a: ")
Lire(a)
Ecrire("Donner la valeur de b: ")
Lire(b)
Ecrire("Donner la valeur de c: ")
Lire(c)
Si (a=0) Alors
Si (b=0) Alors
Si (c=0) Alors
Ecrire("L’ensemble des solutions est toute |R")
Sinon
Ecrire("L’ensemble des solutions est Ø")
Finsi
Sinon
x1 ← -c/b
Ecrire("solution unique x=",x1)
Finsi
Sinon
d ← b*b-4*a*c
Si (d=0) Alors
x1 ← -b/(2*a)
Ecrire("solution double x=",x1)
Sinon Si (d>0) Alors
x1 ← (-b-sqrt(d))/(2*a)
x1 ← (-b+sqrt(d))/(2*a)
Ecrire("solution distinctes x1=",x1," et x2= ",x2)
Sinon
Ecrire("pas de solutions dans |R")
Finsi
Finsi
Finsi
fin
On trouve ainsi, pour le nombre de fois inconnu à l'avance, les actions suivantes :
Tant que qui permet de répéter un traitement tant qu'une condition est vraie.
Répéter qui permet de répéter un traitement jusqu'à ce qu'une condition devienne vraie.
2.1. Syntaxe
Elle a la syntaxe suivante :
action (s)
2.2. Traitement
Tant que la condition fournit la valeur vrai, le bloc d'actions est exécuté et on revient pour répéter la
même chose. Si la condition fournit la valeur faux alors c'est l'action qui suit l'action tant que dans
l'algorithme est exécutée.
2.3. Exemple
Algorithme saisiePositif
var n : entier
Début
n ← -1
3. L’action "Répéter"
L'action itérative (répétitive ou de répétition) répéter permet de répéter l'exécution d'un bloc d'actions une
ou plusieurs fois.
3.1. Syntaxe
L'action Répéter a la forme générale suivante :
Répéter
action (s)
Jusqu’à condition
3.2. Traitement
Le bloc d'actions est exécuté la première fois. Ensuite la condition est évaluée. Tant que la condition
fournit la valeur vraie, le bloc d'actions est exécuté.
Autrement dit le bloc d'actions continu à s'exécuter au moins une fois et jusqu'à ce que la condition
devienne fausse.
La condition est évaluée avant le bloc d'actions La condition est évaluée après le bloc d'actions
Le bloc d'actions est exécuté au moins 0 fois Le bloc d'actions est exécuté au moins 1 fois
3.3. Exemple
Algorithme saisiePositif
var n : entier
Début
Répéter
Ecrire("Donner une valeur positive de n: ")
Lire(n)
jusqu’à (n>0)
Ecrire("Bravo, vous avez saisie l’entier positif : ",n)
fin
4.1. Syntaxe
L'action Pour a la forme générale suivante :
action (s)
Fin pour
4.2. Traitement
Un compteur identifié par un identificateur de variable est initialisé à <valeurInitiales> et qui
s'incrémente jusqu'à atteindre <valeur finale>.
Le traitement est répété de <valeur compteur> égale à <valeur initiales> jusqu'à <valeur compteur> égale à
<valeur finale>.
Initialement le compteur reçoit <valeur initiale>. Ensuite les actions suivantes sont répétées
Évaluer la condition <valeur compteurs> <= <valeur finale> si le pas est positif, et <valeur
compteur> >= <valeur finale> si le pas est négatif.
la valeur du compteur est mise à jour avec le pas d'incrémentation et cette étape est répétée.
Une fois la condition devient fausse, l'action suivante à exécuter est celle qui suit l'action pour.
Remarque
[Pas valeur] est optionnel. Il explicite le pas d'incrémentation quand il est positif et de
décrémentation quand il est négatif.
Le pas d'incrémentation est un nombre entier relatif (quand il est négatif, c'est une
décrémentation). Par défaut le pas d'incrémentation est égale à 1, dans quel cas on n'a pas à
spécifier <pas valeurs>.
4.3. Exemple
Algorithme message
var i : entier
Début
Pour i de 1 à n faire
Ecrire("Bonjour ",i," fois")
Fin pour
fin
Algorithme SommeEntier
var n,s : entier
Début
s←0
Répéter
Ecrire("Donner une valeur positive de n: ")
Lire(n)
jusqu’à (n>0)
Pour i de 1 à n faire
s ← s+i
Fin pour
Ecrire("La somme vaut: ",s)
Fin
5. Exercices d’application
5.1 Exercice 1
Ecrire un algorithme pour calculer la factorielle d’un entier en s'assurant que l'entier est > 0.
5.2 Exercice 2
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la réponse convienne. En cas
de réponse supérieure à 20, on fera apparaître un message : « Plus petit ! », et inversement, « Plus grand ! » si le
nombre est inférieur à 10.
5.3 Exercice 3
Ecrire un algorithme qui calcul et affiche la moyenne des notes d'une classe
5.4 Exercice 4
Ecrire un algorithme permettant de vérifier si un entier saisi au clavier est premier ou non.
5.6 Exercice 6
C’une suite d'entiers dans laquelle chaque terme est la somme des deux termes qui le précèdent.
5.7 Exercice 7
U1 1
1 n
U n1 (U n )
2 Un
Cette suite converge vers racine carrée de n.
Ecrire un algorithme permettant de calculer la racine carrée d’un entier positif saisi au clavier en utilisant
cette suite.
Algorithme factorielle
var n,f : entier
Début
f←1
Répéter
Ecrire("Donner une valeur positive de n: ")
Lire(n)
jusqu’à (n>0)
Pour i de 1 à n faire
f ← f*i
Fin pour
Ecrire("La factorielle de ",n," est: ",f)
fin
6.2 Correction exercice 2
Algorithme saisieIntervalle
var n : entier
Début
Répéter
Ecrire("Donner un entier compris entre 10 et 20: ")
Lire(n)
Si (n<10) Alors
Ecrire("Plus grand !")
Sinon
Si (n>20) Alors
Ecrire("Plus petit !")
FinSi
Finsi
jusqu’à (n>=10 et n<=20)
fin
6.3 Correction exercice 3
Algorithme saisieIntervalle
const N 30
var note,i,s : entier
m :réel
Début
s←0
pour i de 1 à N faire
Ecrire("Donner la note de l’étudiant n°",i, ": ")
Lire(note)
s ← s + note
fin pour
m ← m/N
Ecrire("La moyenne de la classe est: ",m)
fin
6.4 Correction exercice 4
Algorithme tableMultiplication
var n,i,p : entier
Début
Ecrire("Donner la valeur de n= ")
Lire(n)
pour i de 1 à n faire
p ← n*i
Ecrire(n,"*",i,"= ",p)
fin pour
fin
6.5 Correction exercice 5
Algorithme premier
var n,i : entier
p : booléen
Début
Répéter
Ecrire("Donner un entier positif: ")
Lire(n)
Jusqu’à (n>0)
p ← vrai
Si (n=0 ou n=1) alors
p ← faux
finsi
pour i de 2 à (n/2) faire
si (n mod i =0) alors
p ← faux
finsi
finpour
si (p=vrai) alors
ecrire("L’entier ",n," est premier")
sinon
ecrire("L’entier ",n," est non premier")
finsi
fin
Algorithme Fibonacci
var u,v,w,n : entier
Début
Répéter
Ecrire("Donner l’ordre de la suite : ")
Lire(n)
Jusqu’à (n>=3)
u←1
v←1
pour i de 1 à (n-2) faire
w ← u+v
U←v
v←w
fin pour
ecrire("la suite à l’ordre ",n," vaut: ",w)
fin
Algorithme racineCarrée
var n: entier
u,v :réel
conv : booléen
Début
Répéter
Ecrire("Donner un entier strictement supérieur à 1: ")
Lire(n)
Jusqu’à (n>1)
u←1
conv ← faux
Répéter
v ← 1/2(u+n/u)
si (abs(u-v)>0,01) alors
u←v
sinon
conv ← vrai
finsi
jusqu’à (abs(u-v)<=0,01) et conv=vrai)
Pour chacun des types, nous présentons la déclaration, la manipulation et quelques exemples
d'utilisation.
En mémoire, est associé à cette variable un espace mémoire dimensionné à un nombre fini de cases
consécutives pouvant contenir ces éléments. La variable identifiée est de type tableau.
Nous distinguons deux types de tableau : les tableaux à une dimension et les tableaux à deux dimensions.
3.1. Déclaration
var identificateur : Tableau [indice 1.. indice2] de type_contenu
Exemple
Tab[expression] désigne une case du tableau Tab. Le numéro de la case est donné par la valeur de
l'expression.
Exemple
T[i] désigne la case numéro i du tableau T avec i une variable devant avoir une valeur entre 1 et 10.
4.1. Déclaration
Exemple:
Le premier indice doit être entre indice_lig_1 et indice_lig_2 et le deuxième doit être entre
indice_col_1 et indice_col_2.
M[exp1, exp2] désigne la case du tableau M. Le numéro de ligne de cette case est la valeur de exp1 et
le numéro de la colonne est la valeur de exp2.
Exemple
M[i, j], désigne la case de la ligne i et de la colonne j du tableau à deux dimensions M avec i (resp. j) une variable
ayant des valeurs entre 1 et 5 (resp. entre 1 et 3).
5. Exemples
5.1. Exemple 1
On désire calculer la moyenne des notes de 8 étudiants.
Dans le cas de cet exemple l'utilisation de la structure de données tableau n'est pas nécessaire comme on n'a
pas besoin de garder une trace des nombres saisis pour un traitement qui suit. On peut avoir une version en utilisant
une seule variable réelle Note.
Algorithme moyenne_8_etu_version2_sans_tableau
var Note, S, M : réel
i : entier
Début
S←0
Pour i de 1 à 8 faire
Ecrire ('Note de l'étudiant numéro ',i,' :')
Lire (Note)
S ← S + Note
Fin pour
M = S/8
Ecrire ( La moyenne de la classe est : ',M)
Fin
5.2. Exemple2
Ecrire un algorithme qui calcule la moyenne des notes de 8 étudiants et affichage du nombre d'étudiants ayant une
note supérieure ou égale à cette moyenne. Cet exemple nécessite un enregistrement des notes saisies.
Algorithme moyenne_affichage_nombre
var Note : Tableau [1.. 8] de réels
S, M, i : entier
Cours 5 : Les Tableaux Page 43
ISET Zaghouan Cours Algorithmique 1
Début
S←0
Pour i de 1 à 8 faire
Ecrire ('Note de l'étudiant numéro ',i,' :')
Lire (Note[i])
S ← S+N[i]
Fin pour
M=S/8
Ecrire ('La moyenne de la classe est ', M)
S←0
Pour i de 1 à 8 faire
Si (Note[i]>=M) Alors
S←S + 1
Fin Si
Fin pour
Ecrire('Le nombre d'étudiants ayant une note supérieure ou égale à la moyenne : ', M, 'est :',S)
Fin
5.3. Exemple 3
Ecrire un algorithme pour calculer le produit scalaire de deux vecteurs de taille 10.
Algorithme produit_scalaire
Type Tab: tableau [1 ...10] de entier
Var v1, v2: Tab
S, i : entier
Début
S←0
Pour i de 1 à 10 faire
Ecrire ('entrer élément num',i,' du vecteur V1 : ')
Lire (v1[i])
Ecrire ('entrer élément num',i , ' du vecteur V2 : ')
Lire (v2[i])
S ← S + v1[i]*v2[i]
Fin pour
Ecrire ('Le produit scalaire des deux vecteurs est : ', S)
Fin
6. Recherche séquentielle
La recherche séquentielle d'un élément dans un tableau consiste à parcourir les cases du tableau du début jusqu'à
la fin, et de comparer à chaque fois l'élément contenu dans la case à l'élément recherché.
Une fois l'élément est trouvé, l'algorithme s'arrête et affiche une réponse positive. Si le tableau a été entièrement
parcouru sans que l'élément soit trouvé, une réponse négative est, dans ce cas, affichée.
7. Exercices
Exercice 1
Ecrire un algorithme permettant de remplir un tableau d’entier de taille N et permettant de vérifier si un entier
saisie existe dans le tableau ou pas.
Algorithme recherche_séquentielle
const N = 10
var x,i : entier
T : Tableau[1..N] de entier
Début
i←1
Tant que (i<=N) faire
Ecrire('Donner l'élément numéro ', i)
Lire(T[i])
i←i+1
Fin Tant que
Ecrire('Donner la valeur à chercher: ')
Lire (X)
i←1
Tant que (T[i]<>x et i<=N) faire
i ← i+1
Fin Tantque
Si (i>N) Alors
Ecrire (x," n’existe pas dans ce tableau")
Sinon
Ecrire (x," est un élément du tableau")
Fin si
fin
Exercice 2
Algorithme sommeTab
const N = 10
var i,S : entier
T : Tableau[1..N] de entier
Début
S←0
pour i de 1 à N faire
Ecrire('Donner l'élément n°', i,': ')
Lire(T[i])
S ← S + T[i]
Fin Tant que
Ecrire('Somme= ', S)
fin
Exercice 3
Ecrire un algorithme calculant le produit des valeurs d’un tableau d’entiers.
Algorithme produitTab
const N = 10
var i,p : entier
T:Tableau[1..N] de entier
Début
p←1
pour i de 1 à N faire
Ecrire('Donner l'élément n°', i,': ')
Lire(T[i])
p ← p * T[i]
Fin Tant que
Ecrire('produit= ', p)
fin
Exercice 4
Algorithme sommeMatrice
const N = 10
var i,j : entier
A,B,S:Tableau[1..N,1..N] de entier
Début
pour i de 1 à N faire
pour j de 1 à N faire
Ecrire('Donner l'élément A[', i,',',j, ']: ')
Lire(A[i][j])
Ecrire('Donner l'élément B[', i,',',j, ']: ')
Lire(B[i][j])
S[i][j] ← A[i][j]+B[i][j]
Fin pour
Fin pour
Ecrire('la matrice somme=')
pour i de 1 à N faire
pour j de 1 à N faire
Ecrire(S[i][j], ' ')
Fin pour
Ecrire('') //retour à la ligne
finpour
fin
Exercice 5
Algorithme transposéeMatrice
const N = 10
var i,j : entier
A,T:Tableau[1..N,1..N] de entier
Début
pour i de 1 à N faire
pour j de 1 à N faire
Ecrire('Donner l'élément A[', i,',',j, ']: ')
Lire(A[i][j])
T[j][i] ← A[i][j]
Fin pour
Fin pour
Ecrire('la matrice transposée=')
pour i de 1 à N faire
pour j de 1 à N faire
Ecrire(T[i][j], ' ')
Fin pour
Ecrire('') //retour à la ligne
Fin pour
fin
3. Déclaration
var identificateur : chaine
Exemple
Exemple :
nom[1], nom[8]
Exemple :
Exemple:
Exemple:
CHR('65') renvoie A.
6. Exercices d’application
Exercice 1
Ecrire un algorithme qui demande un mot à l’utilisateur et qui affiche le nombre de lettres de ce mot.
Réponse
Algorithme Nb_lettre
var mot: chaîne
n: entier
Début
Ecrire('Donner un mot: ')
Lire(mot)
n ← Longueur(mot)
Ecrire('Ce mot contient ',n,' lettres')
Fin
Exercice 2
Ecrire un algorithme permettant de lire une chaîne de caractères et d'afficher le nombre d'occurrences d'un caractère
donné.
Réponse
Algorithme Nb_occurrences
var ch: chaîne
c: caractère
n, i: entier
Début
Ecrire('Donner une chaîne de caractères: ')
Lire(ch)
Ecrire('Donner le caractère recherché: ')
Lire(c)
n←0
i←1
Tant que (i<=Longueur(ch)) Faire
Si (ch[i]=c) Alors
n←n+1
Fin Si
i←i+1
Fin Tant que
Ecrire ("Le nombre d'occurrences du caractère: " , c, " dans la chaîne " , ch, , " est: " ,n)
Fin
Exercice 3
Ecrire un algorithme qui demande une phrase à l’utilisateur et qui affiche à l’écran le nombre de
mots de cette phrase. On suppose que les mots ne sont séparés que par des espaces.
Réponse
Algorithme Nb_mots
var ph: chaîne
n,i: entier
Début
Ecrire('Donner votre phrase: ')
Lire(ph)
n←0
pour de 1 à Longueur(ph) Faire
Si (ph[i]=" ") Alors
n←n+1
Fin Si
Fin Pour
Ecrire ("votre phrase contient: ", n+1, " mots")
Fin
Exercice 4
Ecrire un algorithme qui demande une phrase à l’utilisateur et qui affiche à l’écran le nombre de voyelles
(a,e,i,o,u,y) contenues dans cette phrase.
Réponse
Algorithme Nb_voyelles
var ph: chaîne
n,i: entier
Début
Ecrire('Donner votre phrase: ')
Lire(ph)
n←0
pour de 1 à Longueur(ph) Faire
Si (ph[i]="a" ou ph[i]="e" ou ph[i]="i" ou ph[i]="o" ou ph[i]="u" ou ph[i]="y") Alors
n←n+1
Fin Si
Fin Pour
Ecrire ("votre phrase contient: ", n, " voyelles")
Fin
Un sous-programme est spécifié par un nom et éventuellement une liste de paramètres formels (paramètres
déclaratifs). Les paramètres formels, s'ils existent, ils spécifient des données et/ou des résultats du sous problème à
résoudre.
2. Les procédures
L'action itérative (ou répétitive ou de répétition) Tant que permet de répéter l'exécution d'un bloc
d'actions 0 ou plusieurs fois.
2.1. Déclaration
Une procédure a la forme générale suivante :
Procédure Nom (liste de paramètres formels avec leurs types séparés par des ',')
Déclaration des variables locale de la procédure
Début
Liste des actions de la procédure
Fin
Paramètres données : ils ne changent pas de valeur dans le sous-programme. Leurs valeurs sont
plutôt utilisées.
Paramètres données / résultats : ils ont une valeur avant l'exécution du sous-programme et qui
peut changer après l'exécution.
Passage par valeur : (paramètres données) le paramètre formel représente une variable locale au
sous-programme et tout changement de paramètre n'a pas d'effet sur le paramètre effectif. A
l'appel, les valeurs des paramètres effectifs sont récupérés dans les paramètres formels sur lesquels
le traitement s'effectue.
procedure test(p1:type1, p2:type2,…, pn:typen) les paramètres p1,p2,…, pn sont passés par valeur.
les paramètres p11,p12,…, p1n sont passés par valeur et les paramètres p21,p22,…, p2n sont passés par
adresse.
Remarque
Les paramètres passés par adresse sont précédés du mot clé var.
Dans un algorithme principal, une procédure est appelée dans une action en spécifiant son nom et ses
paramètres qui deviennent des paramètres effectifs avec le mode de passage respectif (ou réels).
test(q11,…,q1n,&q21,…,&q2n)
Remarque
Les paramètres formels et les paramètres effectifs peuvent porter le même nom.
Ecrire une procédure pour le calcul et l'affichage de la somme des n premiers entiers.
Un algorithme principal qui fait appel à cette procédure effectue la saisie d'une valeur pour n et
fait appel à la procédure dans une action en spécifiant le nom de la procédure et une valeur de n qui
devient un paramètre effectif
Algorithme calculSommeN_premiers_Entiers
Var n : entier
Début
Ecrire ('Donner une valeur pour n ')
Lire(n)
Somme(n)
Fin
Ecrire une procédure qui permet de calculer la factorielle d'un entier positif n.
Un algorithme principal qui fait appel à cette procédure pour calculer et afficher la factorielle d'un
nombre entier saisi au clavier peut être le suivant :
Algorithme factoriel_principal
Var i, n, fact : entier
Début
Répéter
Ecrire ('Entrer un entier :')
Cours 7 : Les Procédures et les Fonctions Page 53
ISET Zaghouan Cours Algorithmique 1
Lire (n)
Jusqu'à (n>= 0)
factoriel(n,fact)
Ecrire (' La factorielle de ',n,' est = ', fact )
Fin
Exercice 2
Ecrire une procédure qui permet d’échanger le contenu de deux variables entières x et y reçu en
paramètre.
Algorithme echange_principal
Var x,y : entier
Début
Ecrire('Donner la valeur de x:')
Lire(x)
Ecrire('Donner la valeur de y:')
Lire(y)
Ecrire('avant appel de la procédure x= ',x,' et y= ',y)
Echange(x,y)
Ecrire('après appel de la procédure x= ',x,' et y= ',y)
Fin
3. Les fonctions
Une fonction est un sous-programme qui rend un résultat unique de type scalaire (entier, réel,
caractère, booléen).
3.1. Déclaration
Une fonction a la forme générale suivante :
Fonction Nom (liste de paramètres formels avec leurs types séparés par des ',') : type_résultat
Déclaration des variables locale de la Fonction
Début
Liste des actions de la fonction
Fin
Remarque
Les paramètres formels de la fonction ne peuvent être que des paramètres donnés.
Identificateur ← Nom_fonction(listeDeParamètresEffectifs)
Remarque
Algorithme calculSommeN_premiers_Entiers
var n,S:entier
Début
Ecrire('Donner une valeur pour n ')
Lire(n)
S ← Somme(n)
Ecrire('la somme des ',n,' premiers entiers est: ',S)
Fin
4. Exercices d’application
4.1. Exercice 1
Ecrire une procédure qui affiche la table de multiplication d’un entier reçu en paramètre.
procédure tableMulti(n:entier)
var n,i,p : entier
Début
pour i de 1 à n faire
p ← n*i
Ecrire(n,"*",i,"= ",p)
fin pour
fin
4.2. Exercice 2
Ecrire une fonction qui reçoit en paramètre deux entiers a et b et permettant de calculer ab.
4.3. Exercice 3
4.4. Exercice 4
2. Définition
Un enregistrement est une structure de données qui sert à stocker, dans une même variable, un nombre fini
d'éléments de types hétérogènes. En mémoire, cette variable est associée à un espace mémoire dimensionné à un
nombre fini de cases de dimensions hétérogènes pouvant contenir ces éléments. Une variable de type enregistrement
est dite une variable composée.
3. Déclaration
Une variable de type enregistrement est déclarée ainsi :
Exemple
Exemple
etudiant.nom
etudiant.adresse
Etant donné que les champs d'un enregistrement correspondent à un espace consécutif d'octets, ils jouent le rôle de
variables. On peut ainsi les utiliser dans des actions d'affectation, de lecture, d'écriture, … etc.
Exemple:
Etudiant.CIN ← 02895275
Lire (etudiant.nom)
Ecrire (etudiant.nom)
5. Exercices d’application
5.1. Exercice 1
On considère que la fiche d’un étudiant est définie par les informations suivantes: nom, prénom, age, cin, tel et
adresse.
Ecrire un algorithme permettant de remplir un tableau de N étudiants, de rechercher un étudiant de cin donnée et
afficher son nom, prénom et adresse.
Réponse
Algorithme ficheEtudiant
const N=10
Type personne = Enregistrement
nom: chaîne
prenom: Chaîne
age: entier
cin: entier
tel: chaine
adresse: chaîne
Fin
var E : tableau[1..N] de personne
i : entier
x : chaine
trouve : booléen
debut
pour i de 1 à N faire
ecrire("Donner le nom de l’étudiant n°",i,": ")
lire(E[i].nom)
ecrire("Donner le prénom de l’étudiant n°",i,": ")
lire(E[i].prenom)
ecrire("Donner le l’âge de l’étudiant n°",i,": ")
lire(E[i].age)
ecrire("Donner le cin de l’étudiant n°",i,": ")
lire(E[i].cin)
ecrire("Donner le tel de l’étudiant n°",i,": ")
lire(E[i].tel)
ecrire("Donner l’adresse de l’étudiant n°",i,": ")
lire(E[i].adresse)
fin pour
ecrire("Donner le cin de l’étudiant à rechercher: ")
lire(x)
trouve ← faux
i←1
répéter
si (x=E[i].cin) alors
ecrire("Etudiant trouvé)
ecrire("Nom : ",E[i].nom," prénom : ",E[i].prenom, "adresse : ",E[i].adresse)
trouve ← vrai
finsi
i←i+1
jusqu’à (i>N ou trouve=vrai)
si (trouve=faux) alors
ecrire("Etudiant non trouvable")
fin si
fin
5.2. Exercice 2
Sachant qu’un nombre complexe est défini par sa partie réelle et sa partie imaginaire.
Ecrire un algorithme permettant de remplir un tableau de nombre complexe, calculer leur somme et afficher le
résultat à l’écran.
Réponse
Algorithme sommeComplexe
const N=10
Type complexe = Enregistrement
re: réel
im: réel
Fin
var C : tableau[1..N] de complexe
z : complexe
debut
z.re ← 0
z.im ← 0
pour i de 1 à N faire
ecrire("Donner la partie réelle du complexe n°",i,": ")
lire(C[i].re)
ecrire("Donner la partie imaginaire du complexe n°",i,": ")
lire(C[i].im)
z.re ← z.re + C[i].re
z.im ← z.im + C[i].im
fin pour
ecrire("La somme vaut: ",z.re, "+ i",z.im)
fin
On désigne par "tri" l'opération consistant à ordonner un ensemble d'éléments en fonction de clés
sur lesquelles est définie une relation d'ordre.
Les algorithmes de tri ont une grande importance pratique. Ils sont fondamentaux dans certains
domaines, comme l'informatique de gestion où l'on tri de manière quasi-systématique des données
avant de les utiliser.
2.1 Principe
L’algorithme initialise un vecteur V formé de N entiers par les valeurs initiales du tableau à trier.
Et il utilise un autre vecteur VT (vecteur trié) formé aussi de N entiers, qui va servir pour le stockage
des valeurs du tableau V ordonnées dans l’ordre ascendant. Au départ le tableau VT n’est pas initialisé
ensuite, on remplit les N cases de la 1ère vers la dernière et dans chaque case on met la bonne valeur.
En appliquant les étapes suivantes :
Initialisation : Chercher le plus grand élément dans le vecteur initial V, le stocker dans une
variable MAX.
Itération : Pour i (l’indice de parcourt de VT) allant de 1 à N-1 faire les 3 étapes suivantes :
Etape 1 : Chercher le plus petit élément dans le vecteur V.
Etape 2 : Le mettre dans le vecteur VT dans la case d’indice i.
Etape 3 : Le remplacer par le plus grand élément dans le vecteur V (pour qu'il ne sera plus le
minimum).
Etape finale : mettre le MAX de V dans la Nième case de VT.
Evaluations Page 60
ISET Zaghouan Cours Algorithmique 1
ALGORITHME TRI_SELECTION
CONST N = 100
VAR
V, VT : Tableau [1..N] de entier
i, j, i_min, MIN, MAX : entier
DEBUT
Lire_vecteur (V)
MAX Max_vecteur (V)
POUR i de 1 à N-1 FAIRE
{Recherche du MIN de V}
MIN V [1]
i_min 1
Pour j de 2 à N faire
Si MIN > V[j] ALORS
MIN V[j]
i_min j
FinSi
FinPour
{Mettre le MIN dans VT[i]}
VT[i] MIN
V [i_min] MAX
FinPour
{Remplir la case N de VT par MAX}
VT [N] MAX
{Affichage du résultat}
Pour i de 1 a N Faire
Ecrire (VT[i])
FinPour
FIN
3.1 Principe
L’algorithme lit une suite de N entier et les insère dans un tableau V formé de N entier de telle sorte
qu’après chaque insertion d’une valeur le tableau reste toujours trié. Cet algorithme utilise un seul
tableau et non pas 2 comme l’algorithme de tri par sélection.
Evaluations Page 61
ISET Zaghouan Cours Algorithmique 1
Pour chaque valeur lue on l’insère dans le tableau en suivant les étapes suivantes :
On cherche la position p d’insertion qui est la position du 1er élément > la valeur lu.
On décale d’une case tous les éléments du tableau à partir de l’indice p.
On met la valeur lue dans la case N° p.
ALGORITHME TRI_insertionS
CONST N = 100
VAR
V : Tableau [1..N] de entier
e, i, j, k, p : entier
trouve : booleen
DEBUT
Pour i de 1 à N Faire
Lire(e)
{chercher la position d'insertion p}
j 1
trouve faux
pi
Tantque (j < i) et (trouve = faux) Faire
Si (V[j] > e) Alors
pj
trouve vrai
FinSi
jj+1
FinTantque
{decaler les cases entre p et i}
Pour k de i a p+1 Pas (-1) Faire
V[k] V[K-1]
FinPour
{mettre la valeur lu dans la case p}
V[p] e
FinPour
{affichage du résultat}
Pour i de 1 a N Faire
Ecrire (V[i])
FinPour
FIN
3.3 Exemple
Les grandes étapes d’évolution du tableau au fil de l'algorithme. En bleu, le tableau trié, en rouge, la
valeur de la mémoire qui contient la valeur à insérer.
Evaluations Page 62
ISET Zaghouan Cours Algorithmique 1
4.1. Principe
L’algorithme lit une suite de N entier et les insère dans un tableau V formé de N entier de telle sorte
qu’après chaque insertion d’une valeur le tableau reste toujours trié.
Pour chaque valeur lue on l’insère dans le tableau en suivant les étapes suivantes :
On fait une recherche dichotomique de la position p d’insertion qui est la position du 1 er élément >
la valeur lu.
On décale d’une case tous les éléments du tableau à partir de l’indice p.
On met la valeur lue dans la case N° p.
Sinon
jj+1
bs bi
bi bs DIV 2
FinSi
FinSi
FinTantque
{decaler les cases entre p et i}
Pour k de i a p+1 Pas (-1) Faire
V[k] V[K-1]
FinPour
{mettre la valeur lu dans la case p}
V[p] e
FinPour
{affichage du résultat}
Pour i de 1 a N Faire
Ecrire (V[i])
FinPour
FIN
5. Algorithme de tri rapide
5.1 Présentation
L'algorithme de tri rapide, "quick sort" en anglais, est un algorithme de type dichotomique. Son
principe consiste à séparer l'ensemble des éléments en deux parties. Pour effectuer la séparation,
une valeur pivot est choisie. Les valeurs sont réparties en deux ensembles suivant qu'elles sont
plus grandes ou plus petites que le pivot. Ensuite, les deux ensembles sont triés séparément,
suivant la même méthode. L'algorithme, est récursif, mais il n'est pas nécessaire de fusionner les
deux ensembles. Le résultat du tri est égal au tri de l'ensemble dont les valeurs sont inférieures au
pivot concaténé à l'ensemble des valeurs supérieures au pivot.
Le choix du pivot est le problème central de cet algorithme. En effet, l'idéal serait de pouvoir
répartir les deux ensembles en deux parties de taille à peu près égales. Cependant, la recherche du
pivot qui permettrait une partition parfaite de l'ensemble en deux parties égales aurait un coût trop
important. C'est pour cela que le pivot est choisi de façon aléatoire parmi les valeurs de
l'ensemble. Dans la pratique, le pivot est le premier ou le dernier élément de l'ensemble à
fractionner. En moyenne, les deux ensembles seront donc de taille sensiblement égale.
Evaluations Page 64
ISET Zaghouan Cours Algorithmique 1
5.3 Exemple
Les grandes étapes de l'évolution du tableau au fil de l'algorithme : En bleu, les valeurs déja
positionnées, en rose, les valeurs qui servent de pivot pour passer à la ligne suivante.
5.4 Algorithme
Fonction Partition (var T : tableau [1..N] de entier, deb, fin : entier) : entier
Var
i, j, v, p: entier
Debut
i deb-1
j fin
p T[fin]
Repeter
Repeter
i i+1
Jusqu'à ( T[i] ≥ p )
Repeter
j j-1
Jusqu'à ( T[j] ≤ p )
Si ( i< j) Alors
v T[i]
T[i] T[j]
T[j] v
FinSi
Jusqu'à ( i ≥ j )
T[fin] T[i]
T[i] p
Retourner (i)
Fin
Evaluations Page 65
ISET Zaghouan Cours Algorithmique 1
6.1 Définition
Un tas est un arbre binaire complet dans lequel il existe un ordre entre un nœud et ses
descendant.
Un arbre binaire complet est un arbre dont le ième niveau contient 2^i nœuds sauf éventuellement
le dernier niveau où les feuilles sont regroupés à gauche. Ainsi au niveau de la racine qui représente le
niveau 0 on a 2^0 c'est-à-dire 1 seul nœud, au niveau 1 on a 2^1 c'est-à-dire 2 nœuds, et ainsi de suite
jusqu’à l’avant dernier niveau, le seul niveau qui respecte pas cette règle et peut contenir moins de 2^i
éléments est le dernier niveau.
Un tas est un arbre binaire complet qui respecte la relation d’ordre suivante : pour chaque nœud
on a une valeur ≥ aux valeurs de chacun de ses fils.
Remarque :
Les éléments qui se trouvent au dernier niveau sont placés dans les feuilles les plus à gauches.
6.2 Exemple
10
8 7
2 3 6
Evaluations Page 66
ISET Zaghouan Cours Algorithmique 1
Les 2 opérations de base qu’on va faire sur un tas sont l’ajout d’un élément et la suppression du
nœud ayant la valeur maximale dans le tas.
Pour l’ajout dans un tas, on ajoute l'élément sur la première feuille libre de manière à ce que l'arbre
binaire reste toujours complet. Et on rétablit la propriété d’ordre en échangeant l'élément avec son père
si la valeur de ce dernier est inférieure, et en propageant ce type d'échange aussi loin qu'il le faut
jusqu’à ce qu’on atteint la racine.
Pour la suppression du maximum, on remplace l'élément racine qui contient le maximum par le
dernier élément (dernière feuille) de manière à ce que l'arbre binaire reste toujours complet. Et on
rétablit la propriété d’ordre en effectuant si nécessaire des échanges des pères avec le plus grand de
leurs fils, en partant de la racine de l'arbre vers les feuilles.
Ainsi l’algorithme de tri par tas est basé sur l’utilisation d’une procédure appelée Insert qui fait les
insertions successives dans le tas et d’une fonction appelé SuppMax qui fait les suppressions
successives des éléments des plus grands vers les plus petits.
Remarque :
On peut représenter un tas par un tableau T à une dimension à condition que les propriétés suivantes
restent vérifiées sur le tableau :
T [1] désigne la racine du tas.
T [i div 2] désigne le père de T[i].
T [2i] et T [2i + 1] sont les fils de T[i].
Si le tas a N nœuds avec N = 2i, alors T[i] n'a qu'un seul fils qui est T[p].
Si i > N div 2, alors T[i] est une feuille.
Evaluations Page 67
ISET Zaghouan Cours Algorithmique 1
V, j : entier
Debut
V T [k]
j k DIV 2
Tantque ( j > 0 et T [j] <= V) Faire
T [k] T [j]
k k DIV 2
j k DIV 2
FinTantque
T [k] V
Fin
------------------------------------****************************-----------------------------------
ALGORITHME TRI_TAS
CONST N = 100
VAR
S, T : tableau [1..N] de entier
N, i : entier
DEBUT
Lire_vecteur (S)
Pour i de 1 a N Faire
T[i] S[i]
Insert (i)
FinPour
Pour i de N a 1 PAS (-1) Faire
T[i] SuppMax (i)
FinPour
Affiche_vecteur(T)
FIN
Evaluations Page 68