Cours d'Algorithmique: Concepts de Base
Thèmes abordés
Cours d'Algorithmique: Concepts de Base
Thèmes abordés
1
Objectif:
Apprendre les concepts de base de l'algorithmique et de la
programmation
Être capable de mettre en œuvre ces concepts pour
analyser des problèmes simples et écrire les algorithmes
correspondants
[Link] 2
Plan du cours
Introduction à l’algorithmique
Notion de variable, affectation, lecture et
écriture
Expressions et opérateurs
Instructions conditionnels et instructions
itératives
Les tableaux
[Link] 3
Algorithmique (1)
[Link] 4
Algorithmique (2)
[Link] 5
Algorithmique (3)
[Link] 6
Exemple(1)
Un algorithme peut se comparer à une recette
de cuisine
Le résultat c’est comme le plat à cuisiner
Les données sont l’analogues des ingrédients de
la recette
Les règles de transformations se comparent aux
directives ou instructions de la recette
[Link] 7
Exemple(2)
Robot domestique avec un algorithme de
préparation d’une tasse de café soluble
[Link] 8
Exemple(3)
"Faites prendre la moitié du nombre pair
pensé, puis ajouter 1 et multiplier le résultat
par 6; demandez le quotient par 3 du résultat
obtenu. Ce quotient diminué de 2 est le
nombre pensé."
[Link] 9
Objectifs d’un algorithme
Un algorithme sert à transmettre un savoir faire.
Il décrit les étapes à suivre pour réaliser un
travail.
Il permet d'expliciter clairement les idées de
solution d’un problème indépendamment d'un
langage de programmation.
L'utilisateur d'un algorithme n'aura qu'à suivre
les instructions, dans l'ordre pour arriver au
résultat que doit donner l'algorithme.
[Link] 10
Propriétés d’un algorithme
Un algorithme doit:
avoir un nombre fini d’étapes,
avoir un nombre fini d’opérations par étape,
se terminer après un nombre fini d’opérations,
fournir un résultat.
[Link] 11
Algorithme et programme
L’élaboration d’un algorithme précède l’étape de programmation
Un programme est un algorithme
Un langage de programmation est un langage compris par l'ordinateur
Comment exécuter un algorithme sur ordinateur?
Il faut traduire cet algorithme à l’aide d’un langage de
programmation connu par l’ordinateur.
[Link] 12
Représentation d’un algorithme
Historiquement, deux façons pour représenter un
algorithme:
L’Organigramme: représentation graphique avec des
symboles (carrés, losanges, etc.)
Offre une vue d’ensemble de l’algorithme
Représentation quasiment abandonnée aujourd’hui.
[Link] 13
I. Algorithmique : Notions de base
14
[Link]
Notion de variable (1)
[Link] 15
Choix des identificateurs (1)
Doit être différent des mots réservés du langage (par exemple en Java:
int, float, else, switch, case, default, for, main, return, …)
[Link] 16
Choix des identificateurs (2)
[Link] 17
Types des variables (1)
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
[Link] 18
Types des variables (2)
[Link] 19
Valeur des variables
Une valeur
[Link] 20
Déclaration des variables
[Link] 22
L’instruction d’affectation
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
[Link] 23
Quelques remarques
Certains langages donnent des valeurs par défaut aux variables déclarées.
Pour éviter tout problème il est préférable d'initialiser les variables
déclarées
[Link] 24
Syntaxe générale de l’algorithme (1)
Le moule d’un algorithme
Un algorithme comportera :
• Une partie déclaration
• Une partie encadrée par ’’Début’’ ’’ Fin’’ où sont décrites les actions
Algorithme Nom_de_l_algorithme
Déclaration
Début
Actions
Fin
[Link] 25
Syntaxe générale de l’algorithme(2)
Algorithme exemple
Constantes
Const1=20 : entier
const2="bonjour!" : chaîne de caractères
Variables
var1 : entier
var3, var4 : réel
var5 : chaîne de caractères
Début
/* instructions */
Fin
[Link] 26
Exercices simples sur l'affectation (1)
Variables A, B, C: entier
Début
A ← -3
B←7
A←B
B ← A-5
C←A+B
C←B–A
Fin
[Link] 27
Exercices simples sur l'affectation (2)
Variables A, B : entier
Début
A←4
B←9
A←B
B←A
Fin
[Link] 28
Exercices simples sur l'affectation (3)
[Link] 29
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 exemples: 1, b, a*2, a+
3*b-c, …
L'évaluation de l'expression fournit une valeur unique qui est le résultat de
l'opération
Les opérateurs dépendent du type de l'opération, ils peuvent être :
des opérateurs arithmétiques: +, -, *, /, % (modulo), ^ (puissance)
des opérateurs logiques: NON, OU, ET
des opérateurs relationnels: =,
, <, >, <=, >=
des opérateurs sur les chaînes: & (concaténation)
[Link] 30
Priorité des opérateurs
^ : (élévation à la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)
exemple : 2+3*7 vaut 23
[Link] 31
Les instructions d'entrées-sorties:
lecture et écriture (1)
Considérons l’algorithme suivant :
Variable A : entier
Début
A ← 12 *12
Fin
[Link] 32
Les instructions d'entrées-sorties:
lecture et écriture (1)
Considérons le programme suivant:
Variable A : entier
Début
A ← 12 *12
Fin
Permet de calculer le carré de 12.
Comment faire pour calculer le carré d’un autre nombre que
12 ?, il faut réécrire le programme.
La machine calcule le résultats, mais l’utilisateur qui fait
exécuter ce programme ne saura pas que le résultats
correspond au carré de 12.
[Link] 33
Les instructions d'entrées-sorties: lecture
et écriture (2)
[Link] 34
Les instructions d'entrées-sorties: lecture
et écriture (3)
L'écriture permet d'afficher des résultats à l'écran (ou de les écrire dans un
fichier)
[Link] 35
Exemple 1 (lecture et écriture)
Algorithme Calcul_double
variables A, B : entier
Début
Ecrire("entrer le nombre ")
Lire(A)
B ← 2*A
Ecrire("le double de ", A, "est :", B)
Fin
[Link] 36
Exemple 2 (lecture et écriture)
Exercice
Ecrire un algorithme qui demande deux
nombres entiers à l’utilisateur, puis qui calcule et
affiche la somme de ces nombres.
[Link] 37
Exemple 3 (lecture et écriture)
Solution
Algorithme Calcul_Somme
variables A, B, SOMME : entier
Début
" Ecrire "Entrez le premier nombre
(Lire(A
" Ecrire "Entrez le deuxième nombre
(Lire(B
SOMME ← A + B
Ecrire ("La somme de ces deux nombres est : ")
(Ecrire (SOMME
Fin [Link] 38
Exemple 3 (lecture et écriture)
[Link] 40
Tests: instructions conditionnelles(2)
[Link] 41
Exemple
Titre : Test
Variable X : entier
Début
Écrire (" Saisir un entier X ")
Lire (X)
Si (x > 0) alors
Écrire (" X est un nombre positif ")
Sinon
Écrire (" X est un nombre négatif ou nul ")
Finsi
Fin
[Link] 42
Exercice
[Link] 43
Solution
[Link] 44
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'instructions
Finsi
[Link] 45
Exemple
[Link] 46
Exercice (tests)
[Link] 47
Exercice (tests)
Algorithme Divsible_par3
Variable n : entier
Début
Ecrire " Entrez un entier : "
Lire (n)
Si (n%3=0) alors
Ecrire (n," est divisible par 3")
Sinon
Ecrire (n," n'est pas divisible par 3")
Finsi
Fin
[Link] 48
Conditions composées
Exemples :
x compris entre 2 et 6 : (x > 2) ET (x < 6)
[Link] 49
Tables de vérité
C1 C2 C1 ET C2 C1 C2 C1 OU C2
C1 C2 C1 XOR C2 C1 NON C1
Expression Résultat
(4 <7) ET (9>0) Vrai
(1 < 0) OU (1<>1) Faux
Non(13.4 < 15) Faux
[Link] 51
Tests imbriqués
[Link] 52
Tests imbriqués: exemple (version 1)
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
[Link] 53
Tests imbriqués: exemple (version 2)
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
[Link] 54
Tests imbriqués: exemple (version 2)
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
55
[Link]
Exercice 1
Ecrivez un algorithme qui demande à
l’utilisateur d’entrer la température de l’eau, et
affiche ensuite l’état de l’eau selon la
température (on rappelle que l’état de l’eau est
glace pour une température inférieure ou égale
à 0, est vapeur pour une température
supérieure ou égale à 100 et liquide pour une
température comprise strictement entre 0 et
100).
[Link] 56
Solution
Variable Temp : réel
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
[Link] 57
Exercice 2
Ecrire un algorithme qui lit trois entiers A, B et C,
et affiche le plus grand.
[Link] 58
Solution
Algorithme Plus_grand_nombre
Variables A, B, C : entiers
Début
Ecrire ("Donner A, B et C ") ;
Lire (A, B, C) ;
Si (A > B) alors
Si (A > C) alors
Ecrire ("Le plus grand nombre est : ", A)
Sinon
Ecrire ("Le plus grand nombre est : ", C)
FinSi
Sinon
Si (B > C) alors
Ecrire ("Le plus grand nombre est : ", B)
Sinon
Ecrire ("Le plus grand nombre est : ", C)
FinSi
FinSi
Fin [Link] 59
Tests imbriqués : Autre Forme
La structure alternative peut prendre une autre forme qui permet
d’imbriquer plusieurs conditions.
Selon Expression
Valeur1: action1
Valeur2: action2
• .........
ValeurN: actionN
Sinon : action
FinSelon
Si expression est égale à valeuri, on exécute actioni et on passe à
la suite de l’algorithme. Sinon on exécute action et on passe à la
suite de l’algorithme.
On l’appelle «structure choix»
60
[Link]
Exemple
Variable X : entier
Début
X←1
Selon X
0:X←1
1 : X ← 11
2 : X ← 111
Sinon : écrire (" X n’est pas un entier compris entre 0 et 2")
FinSelon
Fin
[Link] 61
Exercice
Ecrire un algorithme qui affiche selon un
numéro compris entre 1 et 12 le mois équivalent
[Link] 62
Exercice
Algorithme Mois
Variable mois : entier
Début
Ecrire ("Entrez le numéro du mois : ")
Lire (mois)
Selon mois
1 : écrire ("C'est Janvier")
2 : écrire ("C'est Février")
3 : écrire ("C'est Mars")
4 : écrire ("C'est Avril")
5 : écrire ("C'est Mai")
6 : écrire ("C'est Juin")
7 : écrire ("C'est Juillet")
8 : écrire ("C'est Août")
9 : écrire ("C'est Septembre")
10 : écrire ("C'est Octobre")
11 : écrire ("C'est Novembre")
12 : écrire ("C'est Décembre")
Sinon : écrire ("Erreur, Tapez un numéro entre 1 et 12")
FinSelon
Fin [Link] 63
Instructions itératives (les boucles)
[Link] 64
Les boucles Tant que
TantQue (condition)
instructions condition Vrai Instructions
FinTantQue Faux
[Link] 65
Les boucles Tant que : remarques
Variable i : entier
Début
i 0
TantQue (i < 3)
Ecrire ("Bonjour tout le monde ")
i i+1
FinTanTque
Fin
[Link] 67
Boucle Tant que : exemple 2
Variable A : entier
Début
A 10
TantQue (A > 0)
A A-2
FinTantQue
Ecrire (" La valeur de A est : ", A)
Fin
[Link] 68
Les boucles Répéter … jusqu’à …
Répéter Instructions
instructions
Vrai
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)
[Link] 69
Boucle Répéter jusqu’à : exemple(1)
Variables c : entier
Début
Répéter
Lire( c)
c←c*c
Ecrire(c)
Jusqu' à (c= 0)
Ecrire ("Fin")
Fin
[Link] 70
Boucle Répéter jusqu’à : exemple(2)
i initiale
Vrai
i n'a pas atteint finale Instructions i i + pas
Faux
[Link] 72
Les Boucles pour
Remarque : le nombre d'itérations dans une boucle Pour est connu avant
le début de la boucle.
La variable compteur est en général de type entier. 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 .
[Link] 73
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.
[Link] 76
Boucle Pour : remarque
Exemple :
Pour i =1 à 5
i i -1
Ecrire(" i = ", i)
FinPour
[Link] 77
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
[Link] 78
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)
[Link] 79
Boucles imbriquées
• Les instructions d'une boucle peuvent être des instructions itératives. Dans ce cas, on
aboutit à des boucles imbriquées
[Link] 80
Boucles imbriquées
• Les instructions d'une boucle peuvent être des instructions itératives. Dans ce cas, on
aboutit à des boucles imbriquées
Exemple(1): Écrire un carré de 8 fois 8 caractères ’x’
Pour i =1 à 8
Pour j =1 à 8
Ecrire("x")
FinPour
FinPour
[Link] 81
Boucles imbriquées
[Link] 82
Boucles imbriquées
[Link] 83
Choix d'un type de boucle(1)
[Link] 84
Choix d'un type de boucle(2)
Finsi
[Link] 85
II. Algorithmique : Les tableaux
[Link]
86
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
Le seul moyen dont nous disposons actuellement consiste à déclarer 30 variables,
par exemple N1, …, N30. Après 30 instructions lire, on doit écrire 30 instructions Si
pour faire le calcul
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
[Link] 87
Tableaux
[Link] 88
Tableaux : remarques
Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus
souvent (au niveau algorithmique) c'est 1 (c'est ce qu'on va adopter en pseudo-
code).
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.
[Link] 89
Tableaux
Note[1] Note[4]
En considérant le cas où a est une variable de type entier, a ← Note [2] met la valeur de la 2
ème case du tableau dans a, c’est- à- dire 15.
Lire (Note [1]) met l’entier saisi par l’utilisateur dans la première case du tableau.
[Link] 90
Tableaux : saisie et affichage
[Link] 91
Tableaux : saisie et affichage
Algorithme qui permet de saisir et d'afficher les éléments d'un tableau de 30 notes :
Variables i : entier
Tableau notes[30] : réel
Début
Pour i = 1 à 30
Ecrire ("Saisie de l'élément ", i )
Lire (notes[i] )
FinPour
Pour i = 1 à 30
Ecrire (" notes[",i, "] =", notes[i])
FinPour
Fin
[Link] 92
Tableaux : exemples (1)
[Link] 93
Tableaux : exemples (1)
[Link] 94
Tableaux : exemples (2)
[Link] 95
Tableaux : exemples (2)
[Link] 96
Tableaux
Exercice :
Soit T un tableau de N entiers. Ecrire l’algorithme qui détermine le plus grand élément
de ce tableau.
[Link] 97
Tableaux
Solution :
Variables i , max : entier
Tableau T[N] : entier
Début
max ← T[1]
Pour i = 2 à N
Si (T (i) > max) alors
max ← T[i]
Finsi
FinPour
Ecrire(" Le plus grand élément de ce tableau : " , max)
Fin
[Link] 98
Tableaux à deux dimensions
Algorithme qui permet de saisir les éléments d'une matrice de vingt lignes
et cinquante colonnes:
Algorithme Saisie_Matrice
variables i, j : entier
Tableau A [20][50] : réel
Début
Pour i =1 à 20
Ecrire ("saisie de la ligne ", i )
Pour j =1 à 50
Ecrire ("Entrez l'élément de la ligne ", i , " et de la colonne ", j)
Lire (A[i][j])
FinPour
FinPour
Fin
[Link] 100
Exemples:affichage d’une matrice
Algorithme qui permet d'afficher les éléments d'une matrice de vingt lignes
et cinquante colonnes:
Algorithme Affiche_Matrice
Variables i, j : entier
Tableau A [20][50] : réel
Début
Pour i=1 à 20
Pour j=1 à 50
Ecrire ("A[",i, "] [",j,"]=", A[i][j])
FinPour
FinPour
Fin
[Link] 101
Exemples:somme de deux matrice
[Link] 102
Exemples:somme de deux matrice
Algorithme Somme_Matrices
Variables i, j : entier
Tableau A [20][50] , B[20][50] , C [20][50] : réel
Début
Pour i = 1 à 20
Pour j = 1 à 50
C[i][j] ← A[i][j]+B[i][j]
FinPour
FinPour
Fin
[Link] 103