Académique Documents
Professionnel Documents
Culture Documents
Fondamentaux
d’Algorithmique
ZOUAOUI Saad
11/2021
Objectif et plan du cours
Objectif:
2
Etapes de réalisation d’un programme
Langage Langage de
Langage algorithmique programmation
courant
Enoncé du problème
Spécification
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme exécutable
Tests et modifications
Version finale et résultats
5
Environnement de
programmation
Programme s’écrit dans un fichier texte
On écrit les commandes les unes à la suite des autres
Le compilateur
vérifie la syntaxe du fichier texte
Avaancer au lieu de avancer
traduit en langage machine (100101100101001011…)
6
Programmation
Un programme est réalisé dans le but d’effectuer un ensemble de
traitements particuliers sur un ensemble de données
7
Analyse du problème
Décomposer la tâche
Exemple simple : moyenne de 10 notes
8
Langages de Programmation
9
Langages de Programmation
Fortran.
COBOL.
BASIC.
Java.
Langage C.
C++
C#
PHP.
Python.
Ruby.
…
10
Algorithmique
Le terme algorithme vient du nom du mathématicien arabe
Al-Khawarizmi (820 après J.C.)
12
Algorithmique
Recette de cuisine
Monter un jeu
13
14
15
Introduction à l’algorithmique
Qu’est ce qu’un algorithmique?
Les structures algorithmiques
Les structures algorithmiques sont réparties en 3
catégories :
structures linéaires d'opérations / Séquence
Structure
alternative
Structure
itérative
Caractéristiques d’un algorithme
lisible
de haut niveau **
précis
concis
Structuré
Cas de base pour concevoir un algorithme
Début
A0
B2
CA+B
Afficher C
Fin
Cas de base pour concevoir un algorithme
Début
X5
Si X < 10
alors
XX–2
Sinon
X0
Fin de Si
Fin
Cas de base pour concevoir un algorithme
Début
Tant que le clou PAS enfoncé
Répéter
Frapper le clou
Fin répéter
Fin
Représentation d’un algorithme
26
1. Notion de variable
un nom (Identificateur)
Identificateur
un type (entier, réel, caractère, chaîne de caractères, …)
27
Choix des identificateurs (1)
Le choix des noms de variables est soumis à quelques règles qui
varient selon le langage, mais en général:
28
Choix des identificateurs (2)
Conseil: pour la lisibilité du code choisir des noms significatifs
qui décrivent les données manipulées
exemples: TotalVentes2018, Prix_TTC, Prix_HT
29
Types des variables
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut
prendre, les types offerts par la plus part des langages sont:
Type numérique (entier ou réel)
Entier
Réel
Mémoire centrale
(mémoire vive)
Identificateur : X
Type : entier
Valeur : 25
X 25
Identificateur : Y
Type : réel
Valeur : 3,7 Y 3,7
31
Déclaration des variables
Rappel: toute variable utilisée dans un programme doit avoir fait
l’objet d’une déclaration préalable
En pseudo-code, on va adopter la forme suivante pour la
déclaration de variables
Variables liste d'identificateurs : type
Exemple:
Variables i, j,k : entier
x, y : réel
OK: booléen
ch1, ch2 : chaîne de caractères
En pseudo-code, l'affectation se note avec le signe ←
Var ← e : attribue la valeur de e à la variable Var
Ex valides: i ←1 j ←i k ←i+j
x ←10.3 OK ←FAUX ch1 ←"SMI"
ch2 ←ch1 x ←4 x ←j
(voir la déclaration des variables dans le transparent précédent)
non valides: i ←10.3 OK ←"SMI" j ←x
33
Exercices simples sur l'affectation (1)
Algo ex1
Variables A, B, C: Entier
Début
A←3
B←7
A←B
B ← A+5
C←A+B
C←B–A
Fin 34
Exercices simples sur l'affectation (2)
Variables A, B : Entier
Début
A←1
B←2
A←B
B←A
Fin
Fin
36
Exercices simples sur l'affectation (3)
Algorithme echange
Variables A, B , C : Entier
Début
A←3
B←7
CA
AB
BC
Fin
Fin
37
Expressions et opérateurs
Une expression peut être une valeur, une variable ou une opération
constituée de variables reliées par des opérateurs , …
38
Priorité des opérateurs
^ : (élévation à la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)
exemple: 2+3*7 vaut 23
40
Les instructions d'entrées-sorties:
lecture et écriture (2)
41
Les instructions d'entrées-sorties:
lecture et écriture (2)
Variables A : entier
A 10
Écrire (A)
Écrire ("A")
42
Structure d’un Algorithme
Algorithme Nom_Algo
Déclaration de Variables
Début
Instruction 1
Instruction 2
.
Instruction n
Fin
43
Exo 1
Ecrire un algorithme qui calcule et affiche
le total et la moyenne des trois nombre
saisis.
Algorithme
44
Algorithme Calcul_
variables A, B,C,Som,Moy :reel
Début
écrire(« PROGRAMME MOYENNE DE 3 NOMBRES : ")
écrire("entrer la 1ere valeur : ")
lire(A)
écrire("entrer le nombre 2 : ")
lire(B)
écrire("entrer le nombre 3 : ")
lire(C)
Som A+B+C
Moy Som / 3
écrire(" La Somme est : ")
écrire(Som)
écrire(" La moyenne est : ")
écrire(Moy) 45
Fin
Exemple (lecture et écriture)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui calcule
et affiche le double de ce nombre
Algorithme Calcul_double
variables A, B : entier
Début
écrire("entrer le nombre ")
lire(A)
B ← 2*A
écrire("le double de ", A, "est :", B)
écrire("le double de ", A, "est :", 2*A)
Fin
46
Exercice (lecture et écriture)
Ecrire un algorithme qui vous demande de saisir votre nom puis votre
prénom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chaîne de caractères
Début
écrire("entrez votre nom")
lire(Nom)
écrire("entrez votre prénom")
lire(Prenom)
Nom_Complet ← Nom & Prenom
écrire("Votre nom complet est : ", Nom_Complet)
Fin
47
2 – Les Structures conditionnelles ou
Tests
49
Tests: instructions conditionnelles (2)
La partie Sinon n'est pas obligatoire, quand elle n'existe pas et que
la condition est fausse, aucun traitement n'est réalisé
Si condition alors
instruction ou suite d'instructions1
Finsi
50
Exemple (Si…Alors…Sinon)
Fin
51
Exemple (Si…Alors)
52
Exercice (tests)
Exemples :
x compris entre 2 et 6 : (x > 2) ET (x < 6)
0 0 0
1 0 0
0 1 0
1 1 1
55
Opérateur OR
OR = OU en français. Le résultat sera VRAI si la valeur A OU la
valeur B sont vraies.
0 0 0
1 0 1
0 1 1
1 1 1
56
Opérateur XOR
XOR = OU eXclusif Le résultat sera VRAI si la valeur A est vraie OU si la
valeur B est vraie, mais pas les 2 en même temps.
0 0 0
1 0 1
0 1 1
1 1 0
57
Tables de vérité
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI VRAI VRAI
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX
C1 C2 C1 XOR C2 C1 NON C1
VRAI VRAI FAUX VRAI FAUX
VRAI FAUX VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX
58
Ecrire un algorithme qui demande deux nombres à
l’utilisateur et l’informe ensuite si leur produit est
négatif ou positif (on laisse de cote le cas où le
produit est nul).
59
Algorithme Produit
Variables m, n : Entier
Début
Ecrire (”Entrez deux nombres : ” )
Lire (m, n )
Si (m > 0 ET n > 0) OU (m < 0 ET n < 0) Alors
Ecrire (”Leur produit est positif” )
Sinon
Ecrire (”Leur produit est négatif”)
Finsi
Fin
60
Tests imbriqués
Les tests peuvent avoir un degré quelconque d'imbrications
Si condition1 alors
Si condition2 alors
instructionsA
Sinon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi
61
Tests imbriqués: exemple (version 1)
Algorithme Nb_Pos_Neg
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors
Ecrire ("Ce nombre est négatif")
Sinon
Si (n = 0) alors
Ecrire ("Ce nombre est nul")
Sinon
Ecrire ("Ce nombre est positif")
Finsi
Finsi
Fin
62
Tests imbriqués: exemple (version 2)
Algorithme Nb_Pos_Neg
Variable n : entier
Début
Ecrire ("entrez un nombre : ")
Lire (n)
Si (n < 0) alors Ecrire ("Ce nombre est négatif")
Finsi
Si (n = 0) alors Ecrire ("Ce nombre est nul")
Finsi
Si (n > 0) alors Ecrire ("Ce nombre est positif")
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systématiquement alors que dans
la version 1, si le nombre est négatif on ne fait qu'un seul test
Conseil : utiliser les tests imbriqués pour limiter le nombre de tests et placer
d'abord les conditions les plus probables
63
Ecrire un Algorithme qui permet de Saisir la température de
l’eau et affiche son état.
64
Algorithme Etat_eau
Variables Temp : Reel
Début
Ecrire ("Entrez la température de l’eau :" )
Lire (Temp)
Si (Temp =< 0) Alors
Ecrire ("C’est de la glace")
Sinon
Si (Temp < 100) Alors
Ecrire ("C’est du liquide")
Sinon
Ecrire ("C’est de la vapeur")
Finsi
Finsi
Fin
65
Tests imbriqués: exercice
66
Tests imbriqués: corrigé de l'exercice
Algorithme Prix
Variables copies : entier
prix : réel
Début
Ecrire ("Nombre de photocopies : ")
Lire (copies)
Si (copies < 10) Alors
prix ← copies*0.5
Sinon
Si (copies) < 20 Alors
prix ← copies*0.4
Sinon
prix ← copies*0.3
Finsi
Finsi
Ecrire (“Le prix à payer est : ”, prix)
Fin
67
Variante de la structure alternative
68
Lire (Mois)
Selon Mois
Cas 1 : Ecrire (" JANVIER ")
Cas 2 : Ecrire (" FEVRIER ")
Cas 3 : Ecrire (" MARS ")
.
.
.
Cas Sinon
Ecrire (" MOIS INEXISTANT ")
Fin Selon
69
Instructions itératives: les boucles
Les boucles tant que : on y répète des instructions tant qu'une certaine
condition est réalisée
(
70
Les boucles Tant que
instructions
FinTantQue
si la condition est fausse, on sort de la boucle et on exécute l'instruction qui est après
FinTantQue
71
Les boucles Tant que : remarques
Le nombre d'itérations dans une boucle TantQue n'est pas connu
au moment d'entrée dans la boucle. Il dépend de l'évolution de la
valeur de condition
72
Exemples
X3
V12
TantQue X>V faire
X 2*X
FinTantQue
X 3
V12
TantQue X faire
X 2*X
FinTantQue
X3
V2
TantQue X<10 faire
X X+V
FinTantQue
73
Boucle Tant que : exemple1
Contrôle de saisie d'une lettre majuscule jusqu’à ce que le caractère
entré soit valable
Variable C : caractère
Debut
Ecrire (" Entrez une lettre majuscule ")
Lire (C)
TantQue (C < 'A' ou C > 'Z')
Ecrire ("Saisie erronée. Recommencez")
Lire (C)
FinTantQue
Ecrire ("Saisie valable")
Fin
74
Boucle Tant que : exemple2
75
Un algorithme qui demande un et calcule la somme des entiers jusqu’à ce
Nombre
Algorhitme Som
Variables N,som, i : entier
Debut
Ecrire (" Entrez la valeur de n ")
Lire (N)
som ← 0
i←1
TantQue (i =<N)
som ← som + i
i ← i+1
FinTantQue
Ecrire (" La valeur cherchée est ")
Ecrire (som) 76
Fin
Lien entre Pour et TantQue: exemple 3
version avec TantQue)
TantQue
Algorithme puiss
Variables x, puiss : réel
n, i : entier
Début
puiss ← 1
i←1
TantQue (i<=n)
puiss← puiss*x
i ← i+1
FinTantQue
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
77
Les boucles Pour
instructions
FinPour
78
Les boucles Pour
Remarque : le nombre d'itérations dans une boucle Pour est connu
avant le début de la boucle
Compteur est une variable de type entier (ou caractère). Elle doit être
déclarée
Pas est un entier qui peut être positif ou négatif. Pas peut ne pas être
mentionné, car par défaut sa valeur est égal à 1. Dans ce cas, le
nombre d'itérations est égal à finale - initiale+ 1
Initiale et finale peuvent être des valeurs, des variables définies avant
le début de la boucle ou des expressions de même type que compteur
79
Déroulement des boucles Pour
a) Si la valeur du compteur est > à la valeur finale dans le cas d'un pas
positif (ou si compteur est < à finale pour un pas négatif), on sort de la
boucle et on continue avec l'instruction qui suit FinPour
b) Si compteur est <= à finale dans le cas d'un pas positif (ou si compteur est
>= à finale pour un pas négatif), instructions seront exécutées
80
Boucle Pour : exemple1
Calcul de x à la puissance n où x est un réel non nul et n un entier
positif ou nul
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
puiss← puiss*x
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
81
Boucle Pour : exemple1 (version 2)
Calcul de x à la puissance n où x est un réel non nul et n un entier positif
ou nul (version 2 avec un pas négatif)
négatif
83
La table de mutiplication : 3
écrire(3*i)
Finpour
84
Boucle Tant que : exemple2
85
Une Entreprise propose un salaire annuel
de 100 000 Dhs avec une augmentation de
5% par an.
Quel sera le salaire annuel au bout de
10ans
86
Lien entre Pour et TantQue
La boucle Pour est un cas particulier de Tant Que (cas où le nombre d'itérations
est connu et fixé) . Tout ce qu'on peut écrire avec Pour peut être remplacé
avec TantQue (la réciproque est fausse)
instructions
FinPour
peut être remplacé par : compteur ← initiale
(cas d'un pas positif) TantQue compteur <= finale
instructions
compteur ← compteur+pas
FinTantQue
87
Lien entre Pour et TantQue: exemple
Calcul de x à la puissance n où x est un réel non nul et n un entier positif ou nul
(version avec TantQue)
TantQue
puiss ← 1
i←1
TantQue (i<=n)
puiss← puiss*x
i ← i+1
FinTantQue
Ecrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin 88
Boucles imbriquées
Les instructions d'une boucle peuvent être des instructions
itératives. Dans ce cas, on aboutit à des boucles imbriquées
Variables i, j entier
Pour i allant de 1 à 10
Écrire ("Première boucle") ;
Pour j allant de 1 à 6
Écrire(«Deuxième boucle") ;
Finpour
Finpour
89
Dans cet exemple, le programme écrira une fois "Première boucle" puis six fois de suite
"Deuxième boucle", et ceci dix fois en tout.
A la fin, il y aura donc eu 10 x 6 = 60 passages dans la deuxième boucle (celle du milieu).
90
Boucles imbriquées
Pour i allant de 1 à 10
écrire("Première boucle")
Finpour
Pour j allant de 1 à 6
écrire("Deuxième boucle")
Finpour
Ici, il y aura dix écritures consécutives de "Première boucle", puis six
écritures
consécutives de "Deuxième boucle" , et ce sera tout.
91
Les boucles Répéter … jusqu’à …
Répéter
instructions
Jusqu'à condition
les instructions entre Répéter et jusqu’à sont exécutées au moins une fois et leur
exécution est répétée jusqu’à ce que condition soit vrai (tant qu'elle est fausse)
92
Boucle Répéter jusqu’à : exemple
Algorhitme Som
Variables N,som, i : entier
Debut
Ecrire (" Entrez la valeur de n ")
Lire (N)
som ← 0
i←0
repeter
i ← i+1
som ← som + i
Jusqu’à N>= i
Ecrire (" La valeur cherchée est ", som)
Fin
93
Choix d'un type de boucle
95
Exemple introductif
Supposons qu'on veut conserver les notes d'une classe de 30 étudiants pour
extraire quelques informations. Par exemple : calcul du nombre d'étudiants
ayant une note supérieure à 10
nbre ← 0
Si (N1 >10) alors nbre ←nbre+1 FinSi
….
Si (N30>10) alors nbre ←nbre+1 FinSi
c'est lourd à écrire
Heureusement, les langages de programmation offrent la possibilité de
rassembler toutes ces variables dans une seule structure de donnée appelée
tableau /Liste
96
Tableaux
Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus
souvent c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce cas,
notes[i] désigne l'élément i+1 du tableau notes
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
98
Tableaux : saisie et affichage
Algorithmes qui permettent de saisir les éléments d'un tableau :
Algorhitme SaisieTab
variable i: entier
tableau T[10] : réel
Debut
Pour i allant de 0 à 9
écrire ("Saisie de l'élément ", i + 1)
lire (T[i] )
FinPour
Fin
99
Tableaux : saisie et affichage
Algorithmes qui permettent d'afficher les éléments d'un tableau :
Debut
Pour i allant de 0 à 9
écrire (T[i])
FinPour
Fin
100
Ecrire un algorithme qui permet de Saisir 10 Notes ,
puis augmentent ces notes de 2 points et affiche le
résultat Final
101
Tableaux : exemples (1)
Pour le calcul du nombre d'étudiants ayant une note supérieure à 10
avec les tableaux de 10 notes, on peut écrire :
Algorhitme MoyTab
Principe
Lecture du tableau
Max T[0]
Algorithme 1
Algorithme Exemple1
Variable i, Max : entier
Variable Tableau T : [10] Reel
Début
Pour i allant de 0 à 9
Lecture du tableau
Lire( T[i] )
FinPour
…
Algorithme 1
…
Max T[0]
Pour i allant de 1 à 9
Si T[i] > Max Alors
Max T[i] Recherche de
FinSij la valeur
FinPour maximale
Ecrire(Max )
Fin Affichage de la
valeur
maximale
Algorithme 1
Algorithme Exemple2
Variable i, Max : entier
tableau T [10] : entier
Début
Max T[0]
Pour i allant de 1 à 9
Si T[i] > Max Alors
Max T[i]
FinSi
FinPour
Ecrire(Max)
Fin
Algorithme 2
Algorithme Ex2
Variable i, iMax : entier
Variable T : tableau[10] d’entiers
Début Noter que iMax
Lire(T(1)) ne représente
iMax T(1) 1 plus la valeur
Pour i = 2 à 10 maximale mais
Lire( T(i) )
l’indice de la
Si T(i) > Max Alors
valeur maximale
Max T(i) i
FinSi
FinPour
Ecrire(Max)
Fin
Tri d'un tableau
114
Le tri par sélection
Le principe du tri par sélection/échange
(ou tri par extraction) est d'aller chercher
le plus petit élément du vecteur pour le
mettre en premier, puis de repartir du
second élément et d'aller chercher le plus
petit élément du vecteur pour le mettre en
second, etc..
115
Algorithme de tri par échange
Algorithme Tri_echange
Variables i, j, echange : entier
Tableau [10] : entier
Début
Pour i Allant de 0 à 8 Faire
Pour J Allant de i+1 à 9 Faire
Si T[i] > T[j] Alors
echange ← T[i]
T[i] ← T[j]
T[j] ← echange
FinSi
FinPour
FinPour
Fin 11
6
117
Tableaux à deux dimensions
Algorithme AffichMatrice
tableau M [3][4]: réel
variables i,j : entier
Pour i allant de 0 à 2
Pour j allant de 0 à 3
écrire (" M[",i, "] [",j,"]=", M[i][j])
FinPour
FinPour
Fin
120
Exemples : somme de deux matrices
Algorithme qui calcule la somme de deux matrices déjà saisies :
Algorithme AffichMatrice
tableau M1[3][4],M2 [3][4],M3 [3][4] : réel
variables i,j : entier
Début
Pour i allant de 0 à 2
Pour j allant de 0 à 3
M3[i][j] ← M1[i][j]+M2[i][j]
FinPour
FinPour
Pour i allant de 0 à 2
Pour j allant de 0 à 3
écrire ( M3[i][j])
FinPour
FinPour
Fin
121
ALGORITHMIQUE
Fonctions
122
Fonctions
FinFonction
125
Utilisation des fonctions
L'utilisation d'une fonction se fera par simple écriture de son nom dans
le programme principale. Le résultat étant une valeur, devra être
affecté ou être utilisé dans une expression, une écriture, ...
variables { Globales)
A,F,E,D :entiers;
---
Début
Instructions 1
Appel Fonction
Appel Fonction
Instructions n
Exemple
Algorithme calcul;
Début
Lire (A)
Lire (B)
Ecrire (" la somme est de …. " , Som_deux(A,B) )
Fin.
La récursivité
Factorielle (4) = 4 * 3 * 2 * 1
4* Factorielle (3)
3 * 2 * 1
3* Factorielle (2)
2*1
2* Factorielle (1)
1 * Factorielle (0)
1 * 1 ( Condition d’Arret)
La récursivité : Exemple
Lire (A)
F Factoriel (A)
Fin
Ecrire la fonction Puissance de façon récursive :
134
Les Enregistrements
Définition :
Un enregistrement est un type de données défini par l'utilisateur et
qui permet de grouper un nombre fini d'éléments (ou champs) de
types éventuellement différents.
Fin Nom_Type
Exemple
Type
Etudiant = enregistrement
nom : Chaine Caractère
prénom : Chaine Caractère
numéro : Entier
moyenne : Réel
num_cin : Chaine Caractère
Fin Etudiant
Affectation de valeurs à cette
variable :
Variable E : Etudiant
E.nom 'Swidi'
E.prenom 'Basma'
E.numero 18
E.moyenne 13.25
E.num_cin T12345678
Saisie
Ecrire ("Entrer le nom de l'élève : ")
Lire (E.nom)
Affichage
Ecrire ("Nom : ", E.nom)
Structure Avec .. Faire
Variables
A : Etudiant
B: Entier
C : Boolean
Pour i allant de 0 a 29
Avec Tab[i] Faire
Ecrire ("Entrer le nom de l‘eleve : ")
Lire (nom)
Ecrire ("Entrer le prenom de l‘eleve : ")
Lire (prenom)
Ecrire ("Entrer le numero de l‘eleve : ")
Lire (numero)
Ecrire ("Entrer la moyenne de l‘eleve : ")
Lire (moyenne)
Ecrire ("Entrer la Cin de l‘eleve : ")
Lire (num_cin)
Fin Avec
Finpour
Affichage
Pour i allant de 0 a 29
Avec Tab[i] Faire
Ecrire ("le nom de l‘eleve est : ", nom)
Ecrire ("le prenom de l‘eleve : " , prenom)
Ecrire ("le numero de l‘eleve : " , numero)
Ecrire ("la moyenne de l‘eleve : " , moyenne)
Ecrire ("la Cin de l‘eleve : " , num_cin)
Fin Avec
Finpour