Agorithmique V3 - S1
Agorithmique V3 - S1
Comment
? Algorithme
Codification Pseudo-code
ces étapes
sont liées à
l’exécution Interprétation Langage de programmation (code)
Programme
10/21/2024 3
DÉFINITIONS
Qu’est-ce qu’un Pseudo-code ?
Aucune règle « officielle » ou norme n'est définie pour écrire du pseudo-code. Il n'y a donc pas de
« mauvaise » syntaxe, ni d'écriture meilleure qu'une autre (vous pouvez constater cela en cherchant
sur internet). Mais dans un soucis de compréhension et d’adaptation facile aux future langages qui
vont être étudiés, nous allons adopter les notations proposées dans ce cours.
La clarté et la
Nombre de calculs, temps
compréhensibilité
d’exécution, complexité
de l’algorithme
Il s’agit de l’évaluation du temps
La clarté des instructions et
que peut prendre l’exécution
leur enchainement.
d’un algorithme lorsqu’il est
L’accompagnement par des
traduit en programme.
commentaire.
Le choix significatif des noms
de variables.
10/21/2024 6
MISE EN FORME D’UN ALGORITHME
Le Modèle à respecter
10/21/2024 7
LES VARIABLES 1/3
Définition des variables
Déclaration
10/21/2024 8
LES VARIABLES 2/3
Les types de variables Exemple de déclaration de variables
10/21/2024 9
LES VARIABLES 3/3
Les identificateurs
Un identificateur est un nom donné à une variable pour la différencier de toutes les autres. Et ce nom, c’est au
programmeur de le choisir. Cependant, il y a quelques limitations à ce choix :
1. On ne peut utiliser que les 26 lettres de l’alphabet latin, les chiffres et le caractère underscore ( _ ) : pas
d’accents, pas de ponctuation ni d’espaces.
2. Un identificateur ne peut pas commencer par un chiffre.
3. Deux variables ne peuvent avoir le même identificateur (le même nom)
4. Certains noms sont réservés pour les compilateurs des langages de programmation et ne doivent pas être
donnés à des identificateurs de variables
5. Les identificateurs peuvent être aussi longs que l’on désire, toutefois certains compilateurs ne tiendra
compte que des 32 premiers caractères.
6. Le nom d'un variable doit être significatif. On devrait savoir immédiatement, à partir de son nom, à quoi
sert la variable ou la constante, et quel sens donner à sa valeur
10/21/2024 10
AFFECTATION
Règles d’affectation ALGORITHME : Prix_du_pain
Nom : CHAINE
L'instruction d'affectation est l'opération qui consiste à
Car : CARACTERE
attribuer une valeur à une variable pendant l'exécution
Nb : ENTIER
du programme. Prx, Qt, Tot, Tot1 : REEL
DEBUT
10/21/2024 11
LECTURE / AFFICHAGE
Définition ALGORITHME : Prix_du_pain
10/21/2024 12
LES COMMENTAIRES
Définition
ALGORITHME : Prix_du_pain
Les commentaires servent à donner des explications
Prx, Qt, Tot : REEL
à une partie de votre pseudo-code.
DEBUT
AFFICHER("donner la quantité de pains" )
Un commentaire doit être mis entre /* et */, tous ce
LIRE(Qt)
qui se trouve entre ces deux symboles est considéré Prx 10.25 /* le prix d’unité*/
comme un commentaire. Tot Prx* Qt /* ici nous calculons le
prix totale*/
AFFICHER ("le prix total est :",Tot)
Un commentaire n’affecte pas les instructions de
FIN
votre algorithme.
10/21/2024 13
LES OPÉRATIONS 1/5
Les opérations arithmétiques
a+b Addition
Correct Incorrect
a-b Soustraction
pi ← 3.14159 π ← 3,14159
a*b Produit y ← 2 * x y ← 2(x+y)
a./b per ← 2*r*pi vol ← 4/3π×rayon^3
Division réelle 5./3 vaut 2.5
a/b Division entière 5/3 vaut 2
a%b Modulo
10/21/2024 14
LES OPÉRATIONS 2/5
Les opérations relationnelles
Les opérateurs relationnelles permettent d’exprimer des comparaisons entre deux variables ou expressions.
10/21/2024 15
LES OPÉRATIONS 3/5
Les opérations logiques
Les opérateurs logiques permettent d ’exprimer des conditions composées de plusieurs opérateurs relationnelles.
Il est possible de composer plusieurs conditions avec des opérateurs logiques différents :
((x>=0)ET(x<=10))OU (x>100) 0<x ET x<10
Les opérateurs logiques admis sont les suivants :
10/21/2024 16
LES OPÉRATIONS 4/5
Priorité des opérations
Il existe une priorité à respecter entre les différents opérateurs que nous venons de voir :
Exemples
Opérations Expression Résultat
NON
Priorité croissante
17
LES OPÉRATIONS 5/5
Usage de parenthèses
Pourquoi avoir défini une règle de priorité ? C'est pour pouvoir écrire les expressions complexes de manière plus simple,
plus lisible. En effet, on peut très bien se passer de ces règles et utiliser systématiquement des parenthèses pour bien
rendre compte de l'ordre dans lequel les opérations doivent être effectuées.
Si nous voulons forcer l'ordinateur à commencer par un opérateur avec une priorité plus faible, nous devons (comme en
mathématiques) entourer le terme en question par des parenthèses.
L’exécution conditionnelle permet de faire deux choses différentes selon le cas qui se produit. L’instruction ne sera exécutée
que sous certaines conditions. Plus précisément, le programme teste une condition, si la condition est satisfaite le
programme fait une chose, dans le cas contraire, le programme fait une autre chose. Une instruction conditionnelle peut
avoir plusieurs formes.
Condition si-alors
Supposons que l’on ait une condition (par exemple que l’âge du capitaine soit inférieur à 30
ans). Si la condition est vérifiée, on fait quelque chose, dans le cas contraire, on ne fait rien.
En algorithmique, cela s’écrit :
SI (condition) ALORS
Instructions 1
FINSI
19
EXÉCUTION CONDITIONNELLE 2/12
Exemple
10/21/2024
20
EXÉCUTION CONDITIONNELLE 3/12
Condition alternative : si-alors sinon
Une seconde forme plus intéressant est constituée d’un second bloc
d’instructions qui seront exécutées lorsque la condition n’est pas
vérifiée. Elle aura pour forme :
SI (condition) ALORS
Instructions 1
SINON
Instructions 2
FINSI
Instructions 3 /* suite d’instructions du
programme hors condition*/
21
EXÉCUTION CONDITIONNELLE 4/12
Exemple
Prenons l’exemple d’un algorithme qui donne l’état de l’eau en fonction de sa température. Il prend en entrée une variable
Temp qui représente la température de l’eau et puis il affiche des messages:
Si la température est inférieure a 0 degrés alors il affiche que l’eau est Gelé.
Si Temp est entre 0 et 12 degrés alors il affiche que l’eau est Froid.
Si Temp est entre 12 et 25 degrés alors il affiche que l’eau est Confortable.
Si Temp est entre 25 et 75 degrés alors il affiche que l’eau est Chaud.
Si Temp est entre 75 et 100 degrés alors il affiche que l’eau est Très chaud.
Si Temp est supérieure à 100 degrés alors il affiche que l’eau est Brûlant.
23
EXÉCUTION CONDITIONNELLE 6/12
Conditions imbriquées
Organigramme de l’algorithme
24
EXÉCUTION CONDITIONNELLE 7/12
Conditions imbriquées
Organigramme de l’algorithme
27
EXÉCUTION CONDITIONNELLE 10/12
Conditions imbriquées
28
EXÉCUTION CONDITIONNELLE 11/12
L’instruction SELON - CAS
Lorsque nous somme dans une situation ou l’algorithme doit régler un SELON variable
CAS valeur 3 :
Il est possible d’utiliser SI-ALORS plusieurs fois, mais il existe une
Instructions 3
structure qui permet de résoudre ce problème plus efficacement. …
SINON :
Instructions
Voir ci-contre la structure SELON-CAS
FINSELON
29
EXÉCUTION CONDITIONNELLE 12/12
L’instruction SELON - CAS ALGORITHME Operations
Choix : ENTIER
a,b,C : REEL
L’exemple de l’algorithme suivant DEBUT
AFFICHER("donner Deux Valeurs a et b")
présente l’utilisation de SELON-CAS LIRE(a,b)
AFFICHER("Taper 1 pour Additionner, 2 pour multiplier 3 pour le
pour présenter à l’utilisateur une liste modulo de a et b")
LIRE(Choix)
choix d’opération. SELON Choix
CAS 1 :
Il y’a 3 valeurs (1,2,3) que l’utilisateur C ← a+b
AFFICHER("le resultat de l’operation choisie =",C)
doit tapé chacun dirige l’exécution CAS 2 :
C ← a*b
vers le cas sélectionné. Noter que AFFICHER("le resultat de l’operation choisie =",C)
CAS 3 :
dans le cas ou l’utilisateur introduit C ← a%b
AFFICHER("le resultat de l’operation choisie =",C)
une valeur outre que les cas traité SINON :
AFFICHER("Vous avez tapé un mauvais choix")
l’exécution se dirige directement au
FINSELON
bloc SINON FIN
30
EXÉCUTION REPETITIVE - ITÉRATION
Boucle POUR
Si nous désirons que l’algorithme répète un bloc d’instructions un certain nombre de fois (bien déterminé). Nous utilisons la
boucle POUR. En pseudo-code cela s’exprime comme suivant :
.
instructions 1 /* début du programme */
POUR (ide initial, condition sur ide, changement de ide)
instructions 2 /* instructions répétées */
FINPOUR
instructions 3 /* suite du programme */
Lorsque le nombre de fois où un bloc d’instructions doit être exécuté est connu à l’avance, la boucle POUR est préférable.
L’usage principal de la boucle POUR est de faire la gestion d’un compteur (ide de type entier) qui évolue d’une valeur à une
autre. La variable ide est initialisé par une valeur, ensuite nous mettons une condition sur ide, le changement de ide consiste
la plupart du temps à incrémenter ou décrémenter la valeur de ide pour que la condition change au fur et à mesure de
l’avancement des calculs.
31
EXÉCUTION REPETITIVE - ITÉRATION
Boucle POUR
ALGORITHME factoriel
n,i,F :ENTIER
L’exemple ci-contre présente l’algorithme qui DEBUT
permet de calcul le factoriel de n. AFFICHER("Donner la valeur de n")
l’idée est d’effectuer des multiplications LIRE(n)
F ← 1 /* initialisation obligatoire */
successives jusqu’à ce que la variable i arrive à POUR (i ← 1, 1 i<=n , 3 i ← i+1)
la valeur de n la variable i change 2 F ← F*i
progressivement avec l’instruction i ← i+1. FINPOUR
AFFICHER("le factoriel =", F)
FIN
32
EXÉCUTION REPETITIVE - ITÉRATION
Boucle POUR : Fonctionnement
33
EXÉCUTION REPETITIVE - ITÉRATION
Boucle TANT QUE
Si nous voulons répété un bloc d’instructions cette fois sans savoir explicitement le nombre de fois que cela va se répéter.
Mais plutôt nous avons une condition lorsqu’elle vrai, on répète les instructions de ce bloc.
Une autre forme de structure de contrôle itérative est proposée : C’est La boucle TANT QUE
34
EXÉCUTION REPETITIVE - ITÉRATION
Boucle TANT QUE
35
EXÉCUTION REPETITIVE - ITÉRATION
Boucle TANT QUE
36
EXÉCUTION REPETITIVE - ITÉRATION
Boucle TANT QUE
38
EXÉCUTION REPETITIVE - ITÉRATION
Boucle FAIRE - TANT QUE
L’algorithme ci-contre calcul le PGCD de 2 nombre es introduit par l’utilisateur en utilisant la boucle FAIRE - TANT QUE
ALGORITHME PGCD
a,b,r :ENTIER
DEBUT
AFFICHER("Donner deux nombres m et n ")
LIRE(a,b)
FAIRE
r ← a%b
a ← b
b ← r
TANTQUE (b != 0)
AFFICHER("le PGCD =", a)
FIN
39
EXÉCUTION REPETITIVE - ITÉRATION
Boucle FAIRE - TANT QUE
40
EXÉCUTION REPETITIVE - ITÉRATION
Boucle FAIRE - TANT QUE
41
Les tableaux ALGORITHME Moy_note_1
DEBUT
N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,Moy: REEL
Moy ← (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10)/10
• La déclaration d’un tableau de variables s’effectue par N[10] : REEL (10 le nombre d’éléments est
obligatoire dans la déclaration).
• L’accès au contenus des éléments du tableau s’effectue par l’indice (un nombre entier) entre les crochets
[ ].
• Les indices des éléments d’un tableau commence toujours par 0 et le dernier élément dans cet
algorithme est N[9] (puisque nous avons déclaré exactement 10 éléments).
• Il ne faut pas confondre la valeur notée entre crochets lors de la déclaration du tableau (la taille
maximale) et la valeur notée entre crochets lors des instructions (l’indice).
Indice 0 1 2 3 4 5 6 7 8 9
14 12.5 8.5 5 16 18 10.5 11 17 12
N
N[0] N[1] N[2] N[3] N[4] N[5] N[6] N[7] N[8] N[9]
ALGORITHME recherche_max
maxi :ENTIER /* stocke la valeur du maximum*/
Les boucles sont extrêmement tablval[50] :ENTIER /* un tableau stockant des valeurs*/
utiles pour les algorithmes Nb,i,j: ENTIER /* la taille utile du tableau et les indices de
parcourt*/
associés aux tableaux. En effet, de DEBUT
nombreux algorithmes relatifs au AFFICHER("entrez le nombre d’elements du tableau ( taille max 50) ")
tableau nécessitent de parcourir LIRE(Nb)
les éléments du tableau dans un POUR (i ← 0 , i< Nb , i ← i+1) FAIRE
certain ordre, le plus souvent dans AFFICHER("entrez une valeur dans le tableau : ")
le sens des indices croissant. Le LIRE(tablval[i])
FINPOUR
traitement de chacun des maxi ← tablval[0] /* pour l’instant, le plus grand est dans la case 0
éléments étant souvent le même, cherchons case par case (de l’indice 1 à Nb)*/
seule la valeur de l’indice est POUR (j ← 1 , j< Nb , j ← j+1) FAIRE
amenée à changer. Une boucle est SI (tablval[j] > maxi) ALORS
donc parfaitement adaptée à ce maxi ← tablval[j] /* la valeur est mémorisée dans maxi*/
genre de traitements. FINSI
FINPOUR
AFFICHER("la valeur maximal de ce tableau: ", maxi)
FIN
45
Les tableaux
Multi-dimension
Tableau à deux dimensions
Déclaration du tableau
Il est possible de définir des tableaux à de taille 5x5
plusieurs dimensions en les indiquant
dans des crochets successifs lors de la
définition du tableau. Pour des propos
d’illustration l’exemple se limitera à deux
dimensions, la généralisation à N
dimensions est immédiate. Certains
problèmes (notamment le calcul
matriciel) ont une représentation
naturelle en deux dimensions avec un
repérage en lignes/colonnes ou L’élément tab[3][2]
abscisse/ordonnée.
46
Les tableaux
Multi-dimension
ALGORITHME Moy_note_2
L’exemple ci-contre, montre tab[10][10],S : REEL /*déclaration d’un tableaux 2 dimensions de 10x10 valeurs réels*/
comment manipuler les élément d’in i,j,N,M : ENTIER
DEBUT
tableau dans le but de remplir un AFFICHER("entrez le nombre de lignes et le nombre de colonnes ")
tableau de 2 dimensions, puis de LIRE(N,M)
l’afficher et ensuite calculer la POUR(i ← 0, i<N, i ← i+1) /* Double boucle 1 :parcourt des éléments pour
POUR(j ← 0, j<M, j ← j+1) remplir le tableau tab*/
somme de ses éléments. LIRE(tab[i][j])
FINPOUR
• Note que Pour parcourir les FINPOUR
éléments du tableau tab nous
avons besoin de deux boucles POUR(i ← 0, i<N, i ← i+1) /* Double boucle 2 : parcourt des éléments pour
POUR(j ← 0, j<M, j ← j+1) afficher le tableau tab*/
imbriquées, chacune a son propre AFFICHER(tab[i][j])
indice de parcourt (i et j), il faut FINPOUR
faire attention au sens des indices FINPOUR
S ← 0
pour ils ne soient pas mélangés POUR(i ← 0, i<N, i ← i+1) /* Double boucle 3 : parcourt des éléments pour
dans les boucles imbriquées. POUR(j ← 0, j<M, j ← j+1) calculer la somme des éléments du tableau tab*/
S ← S+tab[i][j])
• Noter aussi que nous pourront FINPOUR
FINPOUR
réutiliser les indices dans les AFFICHER(“la somme des elements = ”,S)
autres Double boucles, car ils sont FIN
indépendantes cette fois-ci. 47
Les tableaux
Multi-dimension
ALGORITHME Moy_note_2
L’exemple ci-contre, montre tab[10][10],S : REEL /*déclaration d’un tableaux 2 dimensions de 10x10 valeurs réels*/
comment manipuler les élément d’in i,j,N,M : ENTIER
DEBUT
tableau dans le but de remplir un AFFICHER("entrez le nombre de lignes et le nombre de colonnes ")
tableau de 2 dimensions, puis de LIRE(N,M)
l’afficher et ensuite calculer la POUR(i ← 0, i<N, i ← i+1) /* Double boucle 1 :parcourt des éléments pour
POUR(j ← 0, j<M, j ← j+1) remplir le tableau tab*/
somme de ses éléments. LIRE(tab[i][j])
FINPOUR
• Note que Pour parcourir les FINPOUR
éléments du tableau tab nous
avons besoin de deux boucles POUR(i ← 0, i<N, i ← i+1) /* Double boucle 2 : parcourt des éléments pour
POUR(j ← 0, j<M, j ← j+1) afficher le tableau tab*/
imbriquées, chacune a son propre AFFICHER(tab[i][j])
indice de parcourt (i et j), il faut FINPOUR
faire attention au sens des indices FINPOUR
S ← 0
pour ils ne soient pas mélangés POUR(i ← 0, i<N, i ← i+1) /* Double boucle 3 : parcourt des éléments pour
dans les boucles imbriquées. POUR(j ← 0, j<M, j ← j+1) calculer la somme des éléments du tableau tab*/
S ← S+tab[i][j])
• Noter aussi que nous pourront FINPOUR
FINPOUR
réutiliser les indices dans les AFFICHER(“la somme des elements = ”,S)
autres Double boucles, car ils sont FIN
indépendantes cette fois-ci. 48
LES SOUS-PROGRAMMES OU FONCTIONS
Définition
49
LES SOUS-PROGRAMMES OU FONCTIONS
Intérêt des sous-algorithmes
Factorisation du code
Les sous-algorithmes permettent de réutiliser des parties d'un algorithme. Par exemple, pour calculer le
factoriel de plusieurs nombres, on peut écrire une fonction pour ce calcul. Cela rend le code plus simple et
évite la répétition.
Mise au point
Une fois qu'un sous-algorithme est écrit, il doit être testé. Cela permet de vérifier chaque partie séparément,
facilitant l'identification des erreurs et de leur origine, contrairement à un test de l'algorithme entier d'un
seul coup.
Amélioration de la maintenance
Comme la compréhension d’un algorithme, la maintenance est automatiquement améliorée, car il sera plus
facile d’identifier les parties de l’algorithme à modifier et d’en évaluer l’impact. L’idéal est bien entendu que
la modification puisse être limitée à un petit nombre de sous-algorithmes.
50
LES SOUS-PROGRAMMES OU FONCTIONS
Définir une fonction
Une fonction doit être définie avant d’être utilisée, c’est-à-dire que l’on doit indiquer quelles sont les
instructions qui la composent : il s’agit de la définition de la fonction, où l’on associe les instructions à
l’identification de la fonction.
La fonction doit être définie et comporter : un en-tête, pour l’identifier et un corps contenant ses
instructions, pour la définir.
51
LES SOUS-PROGRAMMES OU FONCTIONS
Définir une fonction
Une fonction doit être définie avant d’être utilisée, c’est-à-dire que l’on doit indiquer quelles sont les
instructions qui la composent : il s’agit de la définition de la fonction, où l’on associe les instructions à
l’identification de la fonction.
La fonction doit être définie et comporter : un en-tête, pour l’identifier et un corps contenant ses
instructions, pour la définir.
52
LES SOUS-PROGRAMMES OU FONCTIONS
L’entête d’une fonction et la valeur retourner
L’entête de la fonction : comporte le nom de la fonction qui doit être significatif en vérifiant les mêmes règles de
nomination des variables.
Entre les parenthèses : nous mettons la liste des variables requises pour que la fonction réalise les tâches désirées.
Pour chaque variable de cette liste on doit écrire sont type. (NB : une fonction peut avoir plusieurs variables dans ses
arguments, il se peut aussi que la fonction n’ai aucun paramètre, dans se cas on écrit VIDE pour signaler qu’elle ne
récupère aucune valeur de l’extérieur. )
Après les parenthèses : on écrit le type de la valeur que la fonction doit retourner avec l’instruction RETOURNER()
(NB : Une fonction ne peut retourner qu’une seule valeur, ou dans certain cas elle ne retourne rien, dans ce cas on ne
met pas le type de retour et on ne met pas l’instruction RETOURNER. )
une fonction nommée « factoriel » qui prend un entier n en paramètre et retourne son factoriel
54