Cours Algo
Cours Algo
Cours Algo
Prof. A. BOUZIDI
1 Introduction ..................................................................................................................................... 2
1.1 Définition 2
1.2 Etapes de résolution informatique d’un problème 2
1.3 Propriétés d’un algorithme 2
1.4 Représentation d’un algorithme : 2
1.4.1 Organigramme ................................................................................................................. 3
1.4.2 Pseudo-code..................................................................................................................... 3
2 Notion de base de l’algorithme: ...................................................................................................... 4
2.1 Les entrés et les sorties : 4
2.2 Les variables 4
2.2.1 Types de d’une variable................................................................................................... 5
2.2.2 Une constante : ................................................................................................................ 5
2.2.3 Affectation : ..................................................................................................................... 5
2.2.4 Expression et Opérateurs ................................................................................................. 6
2.2.5 Exercice : ......................................................................................................................... 7
2.3 Instruction de contrôle : 8
2.3.1 La séquence : ................................................................................................................... 8
2.3.2 La sélection : ................................................................................................................... 9
2.3.3 Choix multiple ............................................................................................................... 11
2.3.4 Les structures itératives ................................................................................................. 11
2.4 Les boucles : 12
2.5 Les Tableaux : 14
2.5.1 Problématique ................................................................................................................ 14
2.5.2 Exemple : ....................................................................................................................... 14
2.6 Les Procédures et les Fonctions : 16
2.7 Les Procédures 16
2.8 Les Fonctions 17
2.8.1 Récursivité ..................................................................................................................... 18
1
1 Introduction
1.1 Définition
• Le terme algorithme prend sa racine du mot algorisme, qui définit le processus de faire
l’arithmétique en utilisant les chiffres arabes.
• Le mot algorisme est issu de la transcription phonétique du nom du célèbre mathématicien AL-
Khawarizmi (785 - 850).
• Un algorithme est une suite logique d’opérations élémentaires à traiter dans un ordre déterminé.
Son implémentation permet de résoudre un problème déterminé.
• L’algorithmique est la logique d’écrire des algorithmes.
2
1.4.1 Organigramme
Un organigramme représente le traitement de l’algorithme par l’utilisation de 4 formes
géométriques, dont chacune à un rôle définit :
Le cercle est utilisé pour le début et la fin d’un organigramme, et on écrit le nom début où fin à
l’intérieur du cercle
Le parallélogramme représente (toutes les interactions avec l’extérieur) les instructions d’entrée
et de sortie, par exemple pour calculer le périmètre l’algorithme va vous demander de saisir la valeur du
rayon du cercle, c’est l’entrée. La sortie sera la valeur du périmètre si le rayon est égal à 15 cm.
Le rectangle représente l’action à réaliser par le système.
Un losange inscrit les conditions du système, par la considération du problème du calcule du
périmètre d’un cercle, il faut que le rayon soit supérieur à 0.
Vous pouvez maintenant déduire que l’organigramme offre une vue d’ensemble de
l’algorithme.
1.4.2 Pseudo-code
C’est une représentation textuelle avec une série d’instructions et structures de contrôle.
• La structure générale d’un pseudo code est :
Algorithme nom_algorithme
Début
<<instructions>>
Fin
3
2 Notion de base de l’algorithme:
2.1 Les entrés et les sorties :
Pour chaque algorithme, les entrées et les sorties sont définies, dont les:
● Entrées : Sont les données saisies par l’utilisateur de programme.
Lire(<<donnée>>)
● Sorties : sont les données affichées par le programme.
Écrire(<<expression>>)
Par la représentation par organigramme, c’est le parallélogramme qui représente toutes les
interactions avec l’extérieur du système.
2.1.1.1 Exemple
Ecrire un algorithme nommé Mon_algorithme qui affiche à l’écran le texte:
"Bonjour tout le monde"
La solution:
Pseudo-code Organigramme
Début
Algorithme Mon_algorithme
Début
Écrire(" Bonjour tout le monde ")
Ecrire("Bonjour tout le monde")
Fin
Fin
4
Exemple : prix_TVA, A_B, A-B
● Pour la lisibilité du code, le choix nom doit être significatif
Exemple : somme_totale, prix_TVA, note_generale, …
2.2.2.1 Exemple :
TVA =0.2
Pi=3.14
g =9.8
2.2.3 Affectation :
L’affectation consiste à attribuer une valeur à une variable, que ça soit remplir ou modifier le
contenu de la zone mémoire utilisée.
Le pseudo code de l’affectation se note avec le signe flèche :.
Notation : «← ».
On affecte une variable par une expression du même type. Il faut noter qu’une expression du
style : x ← expression, ne se lit que dans un seul sens : la variable x prend la valeur de l’expression à
droite.
Exemples :
● X← -2.56 , signifie que la variable X reçoit la valeur -2.56 (sa valeur actuelle). Son type
est réel.
● Y1 ← VRAI. Son type est booléen {vrai, faux}.
● Z ← "Bonjour". Son type est chaîne de caractères.
5
● Variable ← constante.
● Variable ← variable (ex. T ← Z et donc la valeur de la variable T est "Bonjour").
● Variable ← expression composée, arithmétique ou logique (ex. M ← (x2 +1)/2).
Supposons que x est de type réel et que n est de type entier. L’affectation x←n est valide
Pour les opérateurs arithmétiques donnés ci-dessus, l'ordre de priorité est le suivant (du plus
prioritaire au moins prioritaire) :
^ (élévation à la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)
exemple 4+ 2* 5 vaut 14
En cas de besoin (ou de doute), on utilise les parenthèses pour indiquer les opérations à effectuer en
priorité
6
2.2.4.2 Les opérateurs logiques
Ce sont les expressions dont le résultat est vrai ou faux
2.2.5 Exercice :
Quel est le résultat de l’algorithme suivant?
Algorithme Algo1
Variable
a,b,c : entier;
Début
a ← 12
7
b ← 3
c ← a
a ← b
b ← c
Écrire(‘ a =’,a, ‘ b =’, b, ‘ c =’,c)
Fin
Exemple
L’algorithme suivant lit les variables x et y, en fait la somme z et affiche le résultat :
Algorithme Somme
Variables
x ,y : entier
Debut
Ecrire(" X= ")
Lire(x)
Ecrire("y= ")
Lire(y)
8
z ← x+y
Ecrire(" z = ", z)
Fin
2.3.2 La sélection :
Elle comporte les instructions conditionnelles : c’est à dire qu’une instruction (simple ou
composée) ne sera exécutée qu’après remplissage (satisfaction) de certaines conditions.
Dans ce qui suit <condition> a comme type les booléens {vrai, faux}; c’est une expression
construite à partir des variables booléennes et des connecteurs (opérateurs) logiques ET , OU, NON.
Notation 1 :
Si la condition <condition> est vraie, alors exécuter les instructions; sinon on ne fait rien. On
passe à l’exécution de l’instruction suivante (qui est juste après FSI)
Notation 2 :
Algorithme AffichageValeurAbsolue
Variable x : Entier
Début
Ecrire (" Entrez svp une valeur entiere : “)
Lire (x)
Si(x<0) alors
Ecrire ("la valeur absolue de ", x, "est:",(-1)*x)
Sinon
9
Ecrire ("la valeur absolue de ", x, "est:",x)
Finsi
Fin
Remarque:
L’instruction après ALORS ou SINON est quelconque et peut être une instruction SI. Dans ce
cas, on dit qu’on a des SI imbriqués.
Exemple :
SI (a = 0) ALORS
SI (b = 0) ALORS
x = x/2 ;
FinSI
SINON
x = 2*x ;
FinSI
10
2.3.3 Choix multiple
C’est une généralisation de la sélection qui permettra de choisir un traitement entre plusieurs
alternatives (plus de deux).
Exemple :
Ecrire un algorithme permettant la correspondance entre une couleur et un code. L’algorithme
demande à l'utilisateur de saisir un code (une valeur entière) entre 1 et 6 et affiche la couleur
correspondante. Le tableau suivant montre les couleurs possibles et les codes correspondants.
Couleur code
rouge 1
vert 2
bleu 3
jaune 4
blanc 5
noir 6
Solution :
Algorithme couleur
variables
code : ENTIER
début
Ecrire("Saisir svp le code")
lire(code)
Selon (code)
1: écrire(″rouge″)
2: écrire(″vert″)
3: écrire(″bleu″)
4: écrire(″jaune″)
5: écrire(″blanc″)
6: écrire(″noir″)
autrement : écrire(″couleur
inconnue″)
finselon
fin
11
⮚ Soit le nombre de répétition (itération)
⮚ Soit la condition d’arrêt qui est une expression logique qu’on vérifie avant ou après
chaque répétition.
⮚ On distingue trois sortes de boucles en langages de programmation :
⮚ Les boucles tant que : on y répète des instructions tant qu'une certaine condition est
réalisée
⮚ Les boucles jusqu'à : on y répète des instructions jusqu'à ce qu'une certaine condition
soit réalisée
⮚ Les boucles pour ou avec compteur : on y répète des instructions en faisant évoluer un
compteur (variable particulière) entre une valeur initiale et une valeur finale
REPETER
instructio
ns
JUSQU’A <condition>
Exemple : un algorithme qui détermine le premier nombre entier N tel que la somme de 1 à N dépasse
strictement 100 (version avec répéter jusqu'à)
12
Algorithme Exemple_repeter
Variables
som, i : ENTIER
Debut
som ← 0
i←0
Répéter
i ← i+1
som ← som+i
Jusqu'à ( som > 100)
Ecrire (" La valeur cherchée est N= ", i)
Fin
TANTQUE <condition>
FAIRE
instruc
tions
13
2.4.1.3.1 Notation :
P
s
e POUR i allant de val_init jusqu’à val_final
u faire
d instructions
o
- FPour
c
o
d
e
o
r
g
a
n
i
g
r
a
m
m
e
Exemple :
Calcul de x à la puissance n où x est un réel non nul et n un entier positif
Algorithme ExemplePour
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez la valeur de x ")
Lire (x)
Ecrire (" Entrez la valeur de n ")
Lire (n)
puiss ← 1
Pour i allant de 1 à n faire
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
2.5.2 Exemple :
Supposons que l'on veuille conserver les notes d'une classe de 100 élèves pour en extraire
quelques informations. Exemple : Comptez le nombre d'élèves ayant des notes supérieures à 10.
La seule façon dont nous disposons actuellement est de déclarer 100 variables, disons N1,...,10.
Après avoir lu 100 instructions, nous devons écrire 100 instructions SI pour faire le calcul
nbre ← 0
14
Si (N1 >10) alors nbre ←nbre+1 FinSi
….
Si (N100>10) alors nbre ←nbre+1 FinSi
Heureusement, les langages de programmation offrent la possibilité de rassembler toutes ces
variables dans une structure de données appelée tableau.
Un tableau est un groupe d'éléments du même type spécifié par un identifiant unique. Une
variable entière nommée index utilisée pour indiquer la position d'un élément donné dans le tableau et
déterminer sa valeur
Un tableau est créé en spécifiant le type de ses éléments et leur dimension (nombre de ses
éléments).
Notation en Pseudo Code
Variables
Tableau identificateur[<<dimension>>] : <<Type_elements>>
Exemple :
Variables Tableau score[30] : Réel
Vous pouvez définir les éléments du tableau comme pour les variables : tableaux entiers, de
nombres réels, de caractères, de booléens, de chaînes.
L'accès aux éléments du tableau se fait par indexation. Par exemple, score[i] donne la valeur de
l'élément à la position i dans ce tableau, et le premier indice du tableau est 0 ou 1, selon la langue. La
plupart du temps c'est 0 (c'est ce qu'on va faire en pseudocode). Dans ce cas, score[i] représente l'élément
i+1 du tableau score.
Un grand avantage des tableaux est qu'on peut traiter les données qui y sont stockées de façon
simple en utilisant des boucles.
Exemple :
Écrire un algorithme qui déclare un tableau notes d’une taille 50 dont on demande par la suite
la saisie des notes par l’utilisateur, à la fin l’algorithme va afficher le nombre d’étudiants ayant la note
supérieure ou égale à 10.
Algorithme nbr_valider
Variables
i ,nbre : entier
tableau notes[50] : réel
Debut
Pour i allant de 0 jusqu’à 49 faire
Ecrire("Note[",i,"]=")
Lire(note[i])
FinPour
Pour i allant de 0 jusqu’à 49 faire
Si (notes[i] >=10) alors
nbre ←nbre+1
FinSi
FinPour
Ecrire ("le nombre de notes supérieures à 10 est : ", nbre)
Fin
15
2.6 Les Procédures et les Fonctions :
Jusqu’à maintenant vous avez appris pas mal de notions de programmation. Mais lors de la
réalisation de votre code, vous avez remarquez quelque limitation frustrante, et une certaine lourdeur
lorsqu’il s’agit de répéter quelque bloc d’instruction.
Pour cela vous pouvez envisager un sous-programme qui sera lancé par le programme principal.
Les algorithmes que nous avons étudiés jusqu’à maintenant se composent d’un seul bloc
d’instructions appelé l’algorithme principal.
Pour éviter la répétition d’un ensemble d’instructions, on les répartit sous forme de Module où
sous-programme.
Les procédures et les fonctions sont des modules (groupe d'instructions) indépendants désignés
par un nom. Elles ont plusieurs intérêts :
✔ Permettent de "factoriser" les programmes, c-à-d de mettre en commun les parties qui se répètent
✔ Clarté dans la programmation: les fonctions et les procédures permettent de réaliser des
programmes bien structurés, lisibles et faciles à écrire et à comprendre.
✔ Facilitent la maintenance du code (il suffit de le modifier une seule fois)
✔ Réduction de la taille des programmes: l'ensemble des instructions concernant le traitement
réalisé par une fonction ou une procédure est écrit une seule fois dans le code d'un programme
d'où l'élimination des duplications d'un même code.
Variable
<<variables>>
Début
<<instructions>>
FinProcedure
Exemple :
Écrire la procédure Fill qui permet de demander les éléments d'entrée d'un tableau d'éléments
réels de taille entière n.
16
Procedure Fill(Tableau T[]:Réel, n: Entier)
Variable
i: Entier
Début
Ecrire("T[" , i , "]=")
Lire(T[i])
FinPour
FinProcedure
Écrire une procédure Display pour afficher les éléments d'un tableau d'éléments réels
Procedure Display(Tableau T[]:Réel, n: Entier)
Variable
i: Entier
Début
FinPour
FinProcedure
Écrire un algorithme qui déclare un tableau T de 20 éléments de type réel, dont on fait ensuite
saisir les valeurs par l’utilisateur, à la fin l’algorithme affichera les éléments du tableau par l’utilisation
des procédures FILL et Display.
Algorithme exemple_procedure_tableau
Variables
tableau notes[20] : réel
Debut
Fill(T,20)
Display()
Fin
17
Fonction nom_fonction(parametre1:typeP1,…, parametren:typePn): Type_retour
Variable
<<variables>>
Début
<<instructions>>
retourne valeur
FinFonction
Exemple :
Écrire la fonction somme permettant de calculer et afficher la somme de deux réels fournis en
argument
Fonction somme (val1 : Réel, val2 :Réel): Réel
Variable
resultat :Réel
Début
retourne resultat
FinFonction
L'utilisation de la fonction se fera en écrivant simplement son nom dans l'algorithme principal.
Lors de l'appel, tous les paramètres doivent être définis. L'ordre, le nombre et les types des paramètres
d'appel doivent correspondre aux paramètres d'ordre et formels et à leurs types. Le résultat est une valeur
qui doit être affectée ou utilisée dans les expressions, l'écriture...
Exemple :
Algorithme exemple_somme
Variables
result: entier
Debut
result ← somme(3,5)
Ecrire ("le somme = ", result)
Fin
Lors de l'appel somme(3,5) le paramètres formel val1 est remplacé par le paramètre effectif 3 et le
paramètres formel val2 est remplacé par le paramètre effectif 5.
2.8.1 Récursivité
Une fonction est visible par elle-même; ce qui permet d'utiliser le nom d'une fonction dans le
corps de cette fonction. Ceci est possible puisque à chaque appel de la fonction, de nouvelles variables
locales sont créées. Ce mécanisme s'appelle la récursivité. Il faut toujours utiliser une condition pour
arrêter les appels récursifs. Cette condition s'appelle condition d'arrêt.
Une fonction qui peut s'appeler lui-même est dite fonction récursive et toute fonction récursive
doit posséder un cas limite (cas trivial) qui arrête la récursivité.
18
Exemple :
⮚ La factorielle Un=n! Avec u1=1 et un=n×un-1
Fonction factorielle(n : Entier) : Entier
//----------initialisation
Si(n==1) alors
retourne 1
Sinon
//----------Hérédité
retourne n * factorielle(n-1)
FinFonction
Dans cette fonction, les calculs s’effectuent au retour des appels récursifs
19