Académique Documents
Professionnel Documents
Culture Documents
U.E :
ALGORITHME I
Par
Ass2. SAMSON-KAMBALE
2022-2023
1
2
0. INTRODUCTION
Cette Unité d’Enseignement sur l’algorithmique est destiné à toute
personne qui s’intéresse au développement d’applications informatiques et qui
souhaite s’initier ou retrouver les bases fondamentales de la programmation
plus particulièrement les étudiants de L1 LMD en Informatique de l’ISC-
ISIRO. Il ne s’agit pas ici de programmer avec un langage, mais bien de
raisonner sur un problème pour concevoir une solution abstraite. Ce travail
de réflexion et de conception prépare le stade ultime de l’implémentation et
du cycle de vie du programme concret.
0.0 Plan de l’Unité d’Enseignement
INTRODUCTION
CHAPITRE I. LES VARIABLES
CHAPITRE II. LECTURE ET ECRITURE (Fonctions d’entrée-sortie)
CHAPITRE III. LES TESTS
CHAPITRE IV. LES BOUCLES
2
3
3
4
4
5
5
6
– Oui bien sûr : vous allez tout droit jusqu’au prochain carrefour, vous prenez
à gauche au carrefour et ensuite la troisième à droite, et vous verrez la gare
juste en face de vous.
– Merci.
Dans ce dialogue, la réponse de l’autochtone est la description d’une suite
ordonnée d’instructions (allez tout droit, prenez à gauche, prenez la
troisième à droite) qui manipulent des données (carrefour, rues) pour
réaliser la tâche désirée (aller à la gare). Ici encore, chacun a déjà été
confronté à ce genre de situation et donc, consciemment ou non, a déjà
construit un algorithme dans sa tête
Dans ce cours, nous devrons apprendre à définir des algorithmes pour qu’ils
soient compréhensibles et donc exécutables par un ordinateur.
b. Traitement : Est une opération qui fait subir aux éléments en forme
initiale (comme des données brutes), une transformation en vue de produire
une forme finale appelée ‘’Résultat’’.
Si les opérations d'un algorithme s’exécutent les unes après les autres, c'est
un algorithme séquentiel, si elles s’exécutent en parallèle, c'est un algorithme
parallèle.
6
7
7
8
n'emploiera pas le terme d'ordre, mais plutôt celui d'instructions). Ces quatre
familles d'instructions sont :
l’affectation de variables
la lecture / écriture
les tests
les boucles
8
9
b. Elaboration d’Algorithme
C’est une notion que tout le monde connait. En effet, toute personne
voulant résoudre un problème complexe, pensera à le ramener à des
problèmes les plus simples auxquels il apportera une solution suivant un
ordre logique ordonné.
9
10
10
11
par ces deux valeurs. Le résultat est 162 et l’état final est représenté par les trois valeurs 127, 35 et
162. La figure ci-dessous représente les deux états et la transition qui fait passer de l’un à l’autre.
Boucle
Il arrive qu’il faut exécuter les mêmes commandes à un nombre de reprises
variable, et ce, en fonction des entrées de l’algorithme. Pour cette catégorie, le
processus s’exécute à répétition en respectant des conditions précises. Elle se
traduit par des problèmes sous forme de « oui » et de « non ». Il faut cependant
veiller à ce que le processus aboutisse après avoir effectué le nombre de
boucles requis par la condition. Cette forme d’algorithme est aussi appelée «
type de répétition ».
Branchement
Cette forme est illustrée par la condition « Si ». Si la condition de départ est
correcte, la sortie correspondra à A. Dans le cas contraire, le résultat sera B.
Ce genre d’algorithme s’appelle également « modèle de sélection ».
Séquence
La séquence constitue le type le plus simple pour enchaîner les instructions
qui composent une fonction. Cette forme se distingue par des séries
d’étapes, qui seront exécutées les unes après les autres.
11
12
12
13
Exemple concret :
Créer un algorithme pour calculer la moyenne de 3 notes.
Solution :
Algo moyenne
Variables note1, note2, note3, moyenne : entier
Début
Ecrire ("entrer les notes")
Lire (note1, note2, note3)
Moyenne= (note1+note2+note3)/3
Ecrire ("la moyenne est :" ; moyenne)
Fin
13
14
14
15
15
16
16
17
On peut considérer qu’il est représenté par un réel. Il ne peut alors prendre
que ce type de valeurs. De la même manière la quantité, ne peut prendre que
des valeurs entières et le nom est une chaîne de caractères. On dira
respectivement que le type de prix_unitaire est Réel, le type de quantité est
Entier et le type de nom est Chaîne.
sa valeur : la variable contient une information qui peut varier au cours de
l’exécution d’un programme. C’est cette information que l’on appelle valeur
de la variable. La valeur d’une variable doit correspondre au type de la
variable.
2. DECLARATION DES VARIABLES
La première chose à faire avant de pouvoir utiliser une variable est de
créer la boîte et de lui coller une étiquette. Ceci se fait tout au début de
l’algorithme, avant même les instructions proprement dites. C’est ce qu’on
appelle la déclaration des variables.
Le nom de la variable (l’étiquette de la boîte) obéit à des impératifs
changeant selon les langages. Toutefois, une règle absolue est qu’un nom de
variable peut comporter des lettres et des chiffres, mais qu’il exclut la
plupart des signes de ponctuation, en particulier les espaces. Un nom de
variable correct commence également impérativement par une lettre. Quant
au nombre maximal de signes pour un nom de variable, il dépend du langage
utilisé.
Lorsqu’on déclare une variable, il ne suffit pas de créer une boîte (réserver
un emplacement mémoire) ; encore doit-on préciser ce que l’on voudra mettre
dedans, car de cela dépendent la taille de la boîte (de l’emplacement mémoire)
et le type de codage utilisé.
En bref, Le nom d’une variable permet d’identifier de manière unique la
variable au cours de l’exécution de l’algorithme. On l’appelle aussi identifiant
de la variable. Le nom de la variable ne comporte pas d’espace et s’il est
compose de plusieurs mots, il faut faire commencer chacun d’eux par une
majuscule(Ex : SalaireDeBase).
Le type (domaine de définition) d’une variable indiquel’ensemble de valeurs
qu’une variable peut prendre. Les variables peuvent appartenir a plusieurs
17
18
nbre1 1 7;
resultat nbr1 * 2;
ecrire (“resultat”);
Fin
18
19
19
20
20
21
revanche sans aucun problème attribuer à une variable la valeur d’une autre
variable, telle quelle ou modifiée. Par exemple :
Tutu ← Toto
Signifie que la valeur de Tutu est maintenant celle de Toto.
Notez bien que cette instruction n’a en rien modifié la valeur de Toto : une
instruction d’affectation ne modifie que ce qui est situé à gauche de la
flèche.
Tutu ← Toto + 4
Si Toto contenait 12, Tutu vaut maintenant 16. De même que
précédemment, Toto vaut toujours 12.
Tutu ← Tutu + 1
Si Tutu valait 6, il vaut maintenant 7. La valeur de Tutu est modifiée,
puisque Tutu est la variable située à gauche de la flèche.
Pour revenir à présent sur le rôle des guillemets dans les chaînes de
caractères et sur la confusion numéro 2 signalée plus haut, comparons
maintenant deux algorithmes suivants :
Exemple n°1
Début
Riri ← "Loulou"
Fifi ← "Riri"
Fin
Exemple n°2
Début
Riri ← "Loulou"
Fifi ← Riri
Fin
La seule différence entre les deux algorithmes consiste dans la présence ou
dans l’absence des guillemets lors de la seconde affectation. Et l'on voit que
cela change tout !
Dans l'exemple n°1, ce que l'on affecte à la variable Fifi, c'est la suite de
caractères R – i – r - i. Et à la fin de l’algorithme, le contenu de la variable Fifi
est donc « Riri ».
21
22
Exemple 2
Variable A en Numérique
Début
A ← 12
A ← 48
Fin
Il est clair que dans le premier cas la valeur finale de A est 12, dans l’autre
elle est 48.
22
23
Il est tout aussi clair que ceci ne doit pas nous étonner. Lorsqu’on indique
le chemin à quelqu’un, dire « prenez tout droit sur 1km, puis à droite » n’envoie
pas les gens au même endroit que si l’on dit « prenez à droite puis tout droit
pendant 1 km ».
Enfin, il est également clair que si l’on met de côté leur vertu pédagogique,
les deux algorithmes ci-dessus sont parfaitement idiots ; à tout le moins ils
contiennent une incohérence. Il n’y a aucun intérêt à affecter une variable
pour l’affecter différemment juste après. En l’occurrence, on aurait tout aussi
bien atteint le même résultat en écrivant simplement :
Exemple 1
Variable A en Numérique
Début
A ← 12
Fin
Exemple 2
Variable A en Numérique
Début
A ← 48
Fin
Tous les éléments sont maintenant en votre possession pour que ce soit à
vous de jouer !
4. LES OPERATEURS
Un opérateur est un signe qui relie deux valeurs, pour produire un
résultat.
Les opérateurs possibles dépendent du type des valeurs qui sont en jeu.
Allons-y, faisons le tour, c’est un peu fastidieux, mais comme dit le sage au
petit scarabée, quand c’est fait, c’est plus à faire.
Opérateurs numériques :
Ce sont les quatre opérations arithmétiques tout ce qu’il y a de classique.
+ : addition
- : soustraction
* : multiplication
/ : division
23
24
Opérateurs de Comparaison
≤ (<=) : Inférieur ou égal
≥ (>=) : Supérieur ou égal
> : Supérieur
< : Inferieur
≠ (<>) : Différent
= (= =) : Egal
=! : Ne pas égal
24
25
25
26
Si l’un des trois points énumérés ci-dessus n’est pas respecté, la machine
sera incapable d’exécuter l’affectation, et déclenchera une erreur (est-il besoin
de dire que si aucun de ces points n’est respecté, il y aura aussi erreur !)
EXERCICES
Exercice 1.1
Variables A, B en Entier
Début
A ← 34
B←A+3
A←3
Fin
Exercice 1.2
Variables A, B, C en Entier
Début
A←5
B ← 13
C←A+B
A←2
C←B–A
Fin
Exercice 1.3
Variables A, B enEntier
Début
A←5
B←A+4
26
27
A←A+1
B←A–4
Fin
Exercice 1.4
Variables A, B, C en Entier
Début
A←3
B ← 10
C←A+B
B←A+B
A←C
Fin
Exercice 1.5
Variables A, B, C enCaractères
Début
A ← "423"
B ← "12"
C←A+B
Fin
Exercice 1.6
Variables A, B, C en Caractères
Début
A ← "423"
B ← "12"
C←A&B
Fin
27
28
28
29
Les algorithmes ont pour vocation de nous faire réfléchir sur papier. Il
est nécessaire de simuler le déroulement de notre algorithme.
Les programmes utilisent fréquemment des instructions permettant
l’affichage à l’écran et la saisie de valeurs au clavier par l’utilisateur.
1. La fonction Ecrire
Cette instruction a pour rôle de nous fournir des résultats sous une
forme directement compréhensible. Plus précisément, elle Ecrit sur un
périphérique les valeurs d’une ou de plusieurs variables.
L’instruction d’affichage à l’écran (périphérique de sortie) d’une expression est
:Ecrire (‘’expression’’) ;
Exemple : Algorithme qui affiche Premier message
Algorithme Message
Début
Ecrire (‘’Premier message’’) ;
Fin
2. La fonction Lire
Cette instruction permet au programme de nous communiquer des
résultats, de manière analogue, l’instruction de lecture va nous permettre de
fournir de valeurs à notre programme.
L’exécution de cette instruction consiste à demander à l’utilisateur de saisir
une valeur sur le périphérique d’entrée et de modifier la valeur de la variable
passée.
En effet, Imaginons que nous ayons fait un programme pour calculer le
carré d’un nombre, mettons 12. Si on a fait au plus simple, on a écrit un truc
du genre :
Variable A en Numérique
Début
A ← 12^2
Fin
29
30
D’une part, ce programme nous donne le carré de 12. C’est très gentil à lui.
Mais si l’on veut le carré d’un autre nombre que 12, il faut réécrire le
programme.
D’autre part, le résultat est indubitablement calculé par la machine. Mais
elle le garde soigneusement pour elle, et le pauvre utilisateur qui fait exécuter
ce programme, lui, ne saura jamais quel est le carré de 12.
C’est pourquoi, heureusement, il existe des instructions pour permettre à
la machine de dialoguer avec l’utilisateur.
Dans un sens, ces instructions permettent à l’utilisateur de rentrer des
valeurs au clavier pour qu’elles soient utilisées par le programme. Cette
opération est la lecture.
Dans l’autre sens, d’autres instructions permettent au programme de
communiquer des valeurs à l’utilisateur en les affichant à l’écran. Cette
opération est l’écriture.
30
31
Dans le sens inverse, pour écrire quelque chose à l’écran, c’est aussi simple
que :
Ecrire Toto
Avant de Lire une variable, il est très fortement conseillé d’écrire des libellés
à l’écran, afin de prévenir l’utilisateur de ce qu’il doit frapper (sinon, le pauvre
utilisateur passe son temps à se demander ce que l’ordinateur attend de lui…
et c’est très désagréable !) :
Ecrire "Entrez votre nom : "
LireNomFamille
Ces deux instruction permettent donc un dialogue (homme → machine, ou
machine ← homme).
Exercice 2.1
Exercice 2.2
Exercice 2.3
31
32
Exercice 2.5
32
33
1. DE QUOI S’AGIT-IL ?
33
34
Si booléen Alors
Instructions 1
Sinon
Instructions 2
Finsi
Pour être plus clair
Si (condition) alors
{
Bloc d’instructions n°1 // exécutée si condition est
vraie
}
Sinon
{
Bloc d’instructions n°2 // exécutée si condition est
Fausse
}
Le bloc d’instruction exécuté dépend de la valeur booléenne. Si la condition
vaut vrai, seul le bloc numéro 1 est exécuté, le bloc numéro 2 ne sera pas
exécuté. Si la condition vaut faux, seul le bloc d’instructions numéro 2 est
exécuté.
3. QU’EST CE QU’UNE CONDITION ?
une valeur
un opérateur de comparaison
une autre valeur
34
35
Exercice 3.1
Exercice 3.1
5. TESTS IMBRIQUES
35
36
36
37
Exercices 3.4
TP
"Poussin" de 6 à 7 ans
"Pupille" de 8 à 9 ans
"Minime" de 10 à 11 ans
"Cadet" après 12 ans
7. VARIABLES BOOLEENNES
Jusqu’ici, pour écrire nos tests, nous avons utilisé uniquement des
conditions. Mais vous vous rappelez qu’il existe un type de variables (les
booléennes) susceptibles de stocker les valeurs VRAI ou FAUX. En fait, on
peut donc entrer des conditions dans ces variables, et tester ensuite la valeur
de ces variables.
Reprenoqns l’exemple de l’eau. On pourrait le réécrire ainsi :
VariableTemp en Entier
Variables A, B en Booléen
Début
Ecrire "Entrez la température de l’eau :"
LireTemp
A ← Temp =< 0
B ← Temp< 100
Si A Alors
Ecrire "C’est de la glace"
SinonSi B Alors
Ecrire "C’est du liquide"
Sinon
37
38
Exercice 4.2
Il lira au clavier l’heure et les minutes, et il affichera l’heure qu’il sera une
minute plus tard. Par exemple, si l'utilisateur tape 21 puis 32, l'algorithme
doit répondre :
NB : on suppose que l'utilisateur entre une heure valide. Pas besoin donc de
la vérifier.
Exercice 4.3
Par exemple, si l'utilisateur tape 21, puis 32, puis 8, l'algorithme doit répondre
: "Dans une seconde, il sera 21 heure(s), 32 minute(s) et 9 seconde(s)".
38
39
39
40
FinSi
Fin
C’est impeccable. Du moins tant que l’utilisateur a le bon goût de ne se
tromper qu’une seule fois, et d’entrer une valeur correcte à la deuxième
demande. Si l’on veut également bétonner en cas de deuxième erreur, il
faudrait rajouter un SI. Et ainsi de suite, on peut rajouter des centaines de SI,
et écrire un algorithme aussi lourd, on n’en sortira pas, il y aura toujours
moyen qu’un acharné flanque le programme par terre.
La solution consistant à aligner des SI… en pagaille est donc une impasse.
La seule issue est donc de flanquer une structure de boucle, qui se présente
ainsi :
TantQue booléen
Instructions
…
FinTantQue
On utilisera une boucle tant_que quand l’algorithme doit effectuer
plusieurs fois le même traitement, lorsqu’il doit répéter un ensemble
d’instructions. C’est la seule instruction qui permette en quelque sorte de
revenir en arrière dans l’algorithme pour exécuter une même série
d’instructions.
Exemple : Affichons à l’écran les entiers de 1 a 4.
Algorithme affichage_entier
Variables : compteur : entier ;
Debut
compteur 1 ; //initialisation
tant_que (compteur < = 5) faire //condition de poursuite
{ //debut du bloc
ecrire (compteur) ; //traitement
40
41
41
42
42
43
VariableRep en Caractère
Début
Ecrire "Voulez vous un café ? (O/N)"
LireRep
TantQue Rep<> "O" et Rep<> "N"
Ecrire "Vous devez répondre par O ou N. Recommencez"
LireRep
FinTantQue
Ecrire "Saisie acceptée"
Fin
Exercice 4.1
Exercice 4.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.
43
44
Exercice 5.3
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite affiche
les dix nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le
programme affichera les nombres de 18 à 27.
Dans le dernier exercice, vous avez remarqué qu’une boucle pouvait être
utilisée pour augmenter la valeur d’une variable. Cette utilisation des boucles
est très fréquente, et dans ce cas, il arrive très souvent qu’on ait besoin
d’effectuer un nombre déterminé de passages. Or, à priori, notre structure
TantQue ne sait pas à l’avance combien de tours de boucle elle va effectuer
(puisque le nombre de tours dépend de la valeur d’un booléen).
C’est pourquoi une autre structure de boucle est à notre disposition :
Variable Truc en Entier
Début
Truc ← 0
TantQue Truc < 15
Truc ← Truc + 1
Ecrire "Passage numéro : ", Truc
FinTantQue
Fin
Equivaut à :
Variable Truc en Entier
Début
Pour Truc ← 1 à 15
Ecrire "Passage numéro : ", Truc
Truc Suivant
Fin
44
45
Cette boucle est utilisée lorsqu’on connait le nombre de fois que les
instructions vont s’exécuter.
La boucle Pour permet de boucler en comptant. Le seul intérêt du « Pour »
est d’épargner un peu de fatigue au programmeur, en lui évitant de gérer lui-
même la progression de la variable qui lui sert de compteur (on parle
d’incrémentation, encore un mot qui fera forte impression sur votre
entourage).
D’une autre manière, la structure « Pour … Suivant » est un cas particulier
de TantQue : celui où le programmeur peut dénombrer à l’avance le nombre
de tours de boucles nécessaires.
Il faut noter que dans une structure « Pour … Suivant », la progression du
compteur est laissée à votre libre disposition. Dans la plupart des cas, on a
besoin d’une variable qui augmente de 1 à chaque tour de boucle. On ne
précise alors rien à l’instruction « Pour » ; celle-ci, par défaut, comprend qu’il
va falloir procéder à cette incrémentation de 1 à chaque passage, en
commençant par la première valeur et en terminant par la deuxième.
Mais si vous souhaitez une progression plus spéciale, de 2 en 2, ou de 3 en
3, ou en arrière, de –1 en –1, ou de –10 en –10, ce n’est pas un problème : il
suffira de le préciser à votre instruction « Pour » en lui rajoutant le mot « Pas »
et la valeur de ce pas (Le « pas » dont nous parlons, c’est le « pas » du
marcheur, « step » en anglais).
Naturellement, quand on stipule un pas négatif dans une boucle, la valeur
initiale du compteur doit être supérieure à sa valeur finale si l’on veut que la
boucle tourne ! Dans le cas contraire, on aura simplement écrit une boucle
dans laquelle le programme ne rentrera jamais.
Nous pouvons donc maintenant donner la formulation générale d’une
structure « Pour ». Sa syntaxe générale est :
45
46
Les structures TantQue sont employées dans les situations où l’on doit
procéder à un traitement systématique sur les éléments d’un ensemble dont
on ne connaît pas d’avance la quantité, comme par exemple :
le contrôle d’une saisie
la gestion des tours d’un jeu (tant que la partie n’est pas finie, on
recommence)
la lecture des enregistrements d’un fichier de taille inconnue
Les structures Pour sont employées dans les situations où l’on doit procéder
à un traitement systématique sur les éléments d’un ensemble dont le
programmeur connaît d’avance la quantité.
46
47
Dans cet exemple, le programme écrira une fois "il est passé par ici" puis
six fois de suite "il repassera par là", et ceci quinze fois en tout. A la fin, il y
aura donc eu 15 x 6 = 90 passages dans la deuxième boucle (celle du milieu),
donc 90 écritures à l’écran du message « il repassera par là ». Notez la
différence marquante avec cette structure :
47
48
Truc Suivant
Fin
Vous remarquerez que nous faisons ici gérer « en double » la variable Truc,
ces deux gestions étant contradictoires. D’une part, la ligne Pour…augmente
la valeur de Truc de 1 à chaque passage. D’autre part la ligne
Truc ← Truc * 2
double la valeur de Truc à chaque passage. Il va sans dire que de telles
manipulations perturbent complètement le déroulement normal de la boucle,
et sont causes, sinon de plantages, tout au moins d’exécutions erratiques.
Exercice 5.1
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite écrit
la table de multiplication de ce nombre, présentée comme suit (cas où
l'utilisateur entre le nombre 7) :
Table de 7 : 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 … 7 x 10 = 70
Exercice 5.2
Ecrire un algorithme qui demande un nombre de départ, et qui calcule la
somme des entiers jusqu’à ce nombre. Par exemple, si l’on entre 5, le
programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
NB : on souhaite afficher uniquement le résultat, pas la décomposition du
calcul.
Exercice 5.3 TP
Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa
factorielle.
NB : la factorielle de 8, notée 8 !, vaut
1x2x3x4x5x6x7x8
48
49
REFERENCES BIBLIOGRAPHIQUES
49