Cours Algorithmique Complet
Cours Algorithmique Complet
Cours Algorithmique Complet
CHAPITRE 5: ALGORITHMIQUE
1
Mlle S.FELLAH
Cours N° 1
Plan
Introduction
Algorithme
Représentation d’un Algorithme
Organigramme
Langage algorithmique
Variables et constantes
Instructions
2
Expression
INTRODUCTION
3
INTRODUCTION
Enoncé formel :
Consiste à poser le problème. On définit tous les éléments du
problème : les données, les résultats, les opérations à effectuer. En
revanche, on ne se préoccupe pas de l’ordre dans lequel ces tâches Analyse
seront exécutées.
Algorithme :
On détermine une méthode de résolution du problème qui consiste à
fixer l’ordre dans lequel doivent être effectuées les opérations.
Programmation
Programme :
On va confier l’algorithme à un ordinateur. Il faut donc le traduire 4
dans un langage qui pourra être pris en compte par la machine : un
langage de programmation qui suit des règles de syntaxe très strictes.
INTRODUCTION
5
ALGORITHMES
Définition
Procédure de calcul bien définie qui prend en entrée une valeur, ou un
ensemble de valeurs, et qui donne en sortie une valeur, ou un ensemble
de valeurs.
6
ETAPES D’UN ALGORITHME
Préparation du traitement
données nécessaires à la résolution du problème
Traitement
résolution pas à pas, après décomposition en sous-problèmes si
nécessaire.
Edition des résultats impression à l’écran, dans un fichier, etc.
7
REPRÉSENTATION D’UN ALGORITHME
Un algorithme peut être :
représenté graphiquement par un organigramme,
Organigramme
Définition: un organigramme de programmation (quelquefois nommé
algorigramme ou ordinogramme) est une représentation graphique
normalisée de l'enchaînement des opérations et des décisions effectuées par un
programme d'ordinateur.
Oui
Lecture,
Mise à disposition d'une information à traiter ou
Ecriture enregistrement d'une information traitée.
10
ORGANIGRAMME
11
LANGAGE ALGORITHMIQUE
Langage algorithmique :
Un langage algorithmique (pseudo-langage) permet la description de la
résolution d'un problème en utilisant des opérations et des enchaînements
d'opérations qui sont ceux des ordinateurs sans toutefois être particulier à
un ordinateur précis.
Règles:
Il faut avoir une écriture rigoureuse
Un algorithme opère sur des objets. A tout objet est associé un nom qui permet de
l'identifier de façon unique. C'est une suite de caractères alphanumériques dont le premier
est alphabétique.
14
VARIABLES ET CONSTANTES
On peut répartir l'ensemble des objets en sous ensembles appelés classe ou type.
Il existe 4 types standards :
ENTIER : l’ensemble des entiers relatifs
BOOLEEN : les valeurs Vrai et Faux. Le type booléen est très économique
en termes de place mémoire occupée, puisque pour stocker une telle
information binaire, un seul bit suffit.
CARACTÈRE : l’ensemble des caractères.
15
DÉCLARATION DES DONNÉES
En langage algorithmique, on définit les objets comme suit :
variable <nom de donnée>: type
variables Nom1, Nom2, … : Type //Déclaration de plusieurs variables
• Instruction permettant de réserver de l’espace mémoire pour stocker des données.
Exemples
Variables val, unNombre: entiers
nom, prénom : chaînes de caractères
Instruction d’écriture
Une instruction d’écriture permet au programme de communiquer des valeurs à
l’utilisateur en les affichant à l’écran :
Ecrire (paramètre1,paramètre2…)
paramètre = variable | expression | constante
Exemple:
17
Ecrire(" La valeur de 3*2 est égale à ", 3*2)
Ecrire(" La moyenne est = ", MOY)
LES INSTRUCTIONS
Instruction d’affectation
Affecter une variable c’est lui attribuer une valeur.
variable valeur ou expression
Exemple : note18
note A+B
moyenne (note1+note2)/2
Remarques :
Comptabilité entre le contenant et le contenu
18
LES INSTRUCTIONS
Question1 : Quelles seront les valeurs des variables A et B après exécution des
instructions suivantes ?
Algorithme affectation
variables A, B : Entier
Début
A←2
B ← 14
C←A+B
B←A+B
A←C
Fin
Réponse1 : A = 16 B = 16 C = 16
19
LES INSTRUCTIONS
Question2 : écrire un algorithme permettant d’échanger les valeurs de deux
variables A et B, et ce quel que soit leur contenu préalable.
Réponse2 :
Algorithme Permutation
variables A, B, C : Entier
Début
lire(A,B)
C←A
A← B
B←C
Fin
On est obligé de passer par une variable dite temporaire (la variable C).
20
EXPRESSIONS
Expressions
Expression sur les objets : Une expression est une suite d’opérandes reliés par des opérateurs.
Une expression peut être
arithmétique : on utilisera les opérateurs +,-,/, *, ^
logique : les opérateurs utilisés sont ET, OU, et NON
relationnelle : les opérateurs utilisés sont <, <=, >, >=, =, <>
Ordre de priorité
Les opérateurs suivants sont ordonnés du plus prioritaire au moins prioritaire dans
l'évaluation
d'une expression arithmétique.
1- Les parenthèses
2- "- " un aire
3- Les fonctions
4- Les opérateurs de multiplication " * " et de division " / " 21
5- Les opérateurs d'addition " + " et de soustraction " - "
EXPRESSIONS
Remarque
Si l'ordre entre les opérateurs dans une expression est le même, on évalue
l'expression de gauche à droite.
Exemples
• 3*2+4 = 6+4=10
22
EXPRESSIONS
Remarques Importantes
Toute variable utilisée dans un algorithme doit être déclarée au début de l'algorithme,
une fois et une seule.
L'affectation de valeur à une variable peut être effectuée autant de fois que l'on veut au
cours d'un algorithme. La valeur de la variable sera alors modifiée à chaque affectation.
Lorsqu'une variable apparaît en partie droite d'une action d'affectation, c'est que l'on
suppose qu'elle contient obligatoirement une valeur. Cette valeur devra lui avoir été
affectée auparavant (par initialisation ou saisie), sinon l'on dira que la valeur est
indéfinie, et le résultat de l'affectation ne sera pas défini.
La variable réceptrice d'une affectation doit être de même type que de la valeur à
affecter ou de type compatible. Le type est dit compatible s'il est inclus dans le type de
la variable réceptrice.
Exemple : REEL ¬ ENTIER est possible mais pas l'inverse.
23
EXERCICE
Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et
affiche le carré de ce nombre.
Algorithme carré
Variables nb, carr : Entier
Début
Ecrire (”Entrez un nombre :”)
Lire nb
carr nb * nb
Ecrire (”Son carré est : ”, carr)
Fin
En fait, on pourrait tout aussi bien économiser la variable carr en remplaçant les
deux avant-dernières lignes par :
Ecrire ”Son carr´e est : ”, nb*nb
24
Cours N° 2
Plan
Structure alternative
Les structures répétitives (boules)
25
LA STRUCTURE ALTERNATIVE
L’instruction Si …alors ... Fin Si
Si condition Alors
Instruction (ou suite d'instructions)
Fin si
Exemple
Algorithme égalité
Variables nb1, nb2 : Entier
Début
Ecrire (”Entrez deux nombres :”)
Lire (nb1, nb2)
si nb1=nb2 alors
Ecrire (”égalité”)
Fin si
Fin
Réponse:
Algorithme max2
variables a , b, m: Entier
Début
lire(a,b)
si a>b alors
m a
sinon
m b
fin si
écrire(m) 27
Fin
L'INSTRUCTION CAS
Lorsque l’on doit comparer une même variable avec plusieurs valeurs, comme par
exemple :
si a=1 alors
instructions1
sinon
si a=2 alors
instructions2
sinon
si a=4 alors
instructions3
sinon
...
finsi
finsi
finsi
28
v1,. . . ,vn sont des constantes de type scalaire (entier, naturel, enuméré,
ou caractère)
actioni est exécutée si v = vi (on quitte ensuite l’instruction cas)
29
L'INSTRUCTION CAS
Exemple
Algorithme
Variables c : caractère
Début
Ecrire(”entrer un caractère”)
Lire (c)
Si( (c>=’A’) et (c<=‘Z’) ) alors
cas où c vaut
‘A’,’E’, ‘I’, ‘O’, ‘U’, ‘Y’ : ecrire(c, ”est une voyelle majuscule”)
autre : ecrire(c, ”est une consonne majuscule”)
fincas
sinon ecrire(c, ”n’est pas une lettre majuscule”)
Finsi
Fin 30
LES STRUCTURES RÉPÉTITIVES
La structure Pour
pour compteur val_initial à val_final faire
Instructions à répéter
Fin pour
Exemple
Ecrire un algorithme qui demande un nombre, et qui calcule la somme des entiers jusqu'à ce
nombre. Si l'on tape 4, le résultat= 1+2+3+4=10
Algorithme Somme_Nombres
variables i, val, s : Entier
Début
Ecrire (" entrer un nombre entier:")
Lire (val)
s 0
pour i 1 à val faire
s s+i
31
Finpour
Ecrire (" la somme des nombres de 1 à ", val, "est ", s)
Fin
LES STRUCTURES RÉPÉTITIVES
La structure tant que
Tantque condition de continuation Faire
Instructions à répéter
FinTantque
Exemple
Contrôle de saisie d'une lettre alphabétique jusqu’à ce que le caractère entré soit valable.
Algorithme lettre
Variable C : caractère
Début
Écrire (" Entrez une lettre majuscule ")
Lire (C)
TantQue (C < 'A' ou C > 'Z')
Ecrire ("Saisie erronée. Recommencez")
Lire (C)
FinTantQue 32
33
LES STRUCTURES RÉPÉTITIVES
La structure répéter
Répéter
Instruction à répéter
Jusqu’à 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'à)
Algorithme somme
Variables som, i : entier
Début
som ← 0
i←0
Répéter
i ← i+1
som ← som+i
34
Jusqu'à ( som > 100)
Ecrire (" La valeur cherchée est N= ", i)
Fin
DIFFÉRENCES ENTRE LES BOUCLES TANT QUE ET RÉPÉTER JUSQU'
35
CHOIX D'UN TYPE DE BOUCLE
Si on peut déterminer le nombre d'itérations avant l'exécution de la boucle,
il est plus naturel d'utiliser la boucle Pour
36
LES STRUCTURES RÉPÉTITIVES
Exercice
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
37
LES STRUCTURES RÉPÉTITIVES
R1 :
Algorithme Somme
variables nombre, s : Entier
Début
lire(nombre)
s 0
pour i 1 à nombre faire
s s + i
fin pour
Fin
--------------------------------------------------------------------------------------------------------------
R2 :
Algorithme Somme
variables nombre , s, i: Entier
Début
lire(nombre)
s 0
i0
tant que i <= nombre faire
38
s s + i
fin tant que
Fin
LES STRUCTURES RÉPÉTITIVES
R3 :
Algorithme Somme
variables nombre , s, i: Entier
Début
lire(nombre)
s 0
i 1
répéter
s s + i
jusqu’à i = nombre
Fin
39
Cours N° 3
Plan
Les tableaux
Les enregistrements
40
TABLEAUX INTRODUCTION
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
42
DÉCLARATION D'UN TABLEAU
Une variable de type tableau est déclarée selon la syntaxe suivante :
Type-elem nom-tableau[borne_inf . . borne_sup]
Variables de
type entier
Exemple
entier tab1[1..10] tab1: 21 100 6 ....
réel tab2[12..44] 1 2 .... 8 9 10
indices
Variables de
type réel
indices
44
ACCÈS À UN ÉLÉMENT DU TABLEAU
tab1[8] : désigne l'élément d'indice 8 dans le tableau tab1, autrement dit le
8ème élément du tableau.
tab2[14] désigne l'élément d'indice 14 dans le tableau tab2, autrement dit le
3ème élément du tableau.
tab1: 21 43 6 ....
1 2 .... 8 9 10
45
PARCOURS DES ÉLÉMENTS D'UN TABLEAU
Algorithme InitTableau
Variables i : entier
entier tab[0..19]
Début
pour i de 0 à 19 faire
tab[i] ← i
Ecrire(tab[i] )
fpour
Fin
0 1 2 3 .. .. 19
46
TABLEAU
Exercice
Ecrire un algorithme qui demande à l’utilisateur de saisir 30 valeurs pour initialiser un tableau et
calcule la somme des ses éléments.
Algorithme tableau_somme
Variables i,S : entier
entier tab[1..30]
Début
//Chargement du tableau
pour i ← 1 à 30 faire
ecrire("saisir la valeur numero", i)
lire(tab[i])
Fpour
//Calcul de la somme des éléments du tableau
S← 0
pour i ← 1 à 30 faire
S ← S+tab[i]
fpour
ecrire(S) 47
Fin
LES TABLEAUX À DEUX DIMENSIONS
0 1 2 3
0 34 3 67 76
1 7 67 33 56
2 89 12 133 75
Déclaration de la matrice:
Type-elem nom-tableau[Première dimension, Deuxième dimension]
Exemple:
entier Tab[3,4]
Tab[2, 1] = 12 48
LES TABLEAUX À DEUX DIMENSIONS
Algorithme InitTableau2D
Variables i , j : entier
entier tab[2,4]
Début
pour i de 0 à 1 faire
pour j de 0 à 3 faire
tab[i,j] ← 0
Ecrire(tab[i,j])
fpour
fpour
Fin
Algorithme tri
variables
entier tableau[100], i
trié : booléen
début
triévrai
i0
tant que (trié = vrai) et (i < 99) faire
Si (tableau[i ] > tableau[i+1]) alors
trié faux
finsi
i i +1
finTantQue
Si (trié=vrai) alors
écrire ("vrai, le tableau est trié du plus petit nombre au plus grand")
Sinon écrire ("tableau non trié" )
51
finsi
fin
EXERCICES TABLEAUX A UNE DIMENSION
Ecrire un algorithme permettant de résoudre le problème suivant :
– Données : un tableau tableau contenant 100 entiers
– Résultat : “vrai” si les entiers sont consécutifs et “faux” sinon
Rappel : deux entiers x et y sont consécutifs si et seulement si y= x+1.
Algorithme Consécutifs
variables
entier tableau[100]
i: entier
Consécutifs : booléen
début
Consécutifs vrai
i0
tant que (Consécutifs = vrai) et (i < 99) faire
Si (tableau[i +1] ≠ tableau[i ] + 1) alors
Consécutifs faux
finsi
i i +1
finTantQue
Si (Consécutifs = vrai) alors
écrire (‘‘vrai, les entiers sont consécutifs’’)
Sinon écrire (‘‘faux’’)
finsi 52
fin
ENREGISTREMENT (VARIABLES STRUCTURÉES)
Définition
Un enregistrement(appelé aussi article ou record en englais) est une structure composée d’un
nombre fixe d’éléments qui peuvent être de types différents.les éléments d’un enregistrement
sont appelés champs, et peuvent être à leur tour des structures(tableaux, enregistrements…)
Déclaration de l’enregistrement
Type
Nom_type = Enregistrement
Champ_1 : Type_ Champ_1
: :
Champ_n : Type_ Champ_n
Fin Nom_type
53
ENREGISTREMENT
Exemple: déclaration d’un enregistrement ‘étudiant’ et des variables ‘étudiant1’ et ‘étudiant2’.
Enregistrement
Type
étudiant = enregistrement
nom, prénom : Chaîne
sexe : Caractère
numéro : Entier
moyenne : Réel
Fin étudiant
Objet (variable)
Variables
étudiant1 : étudiant
étudiant2 : étudiant 54
ENREGISTREMENT
Accès aux champs d'un enregistrement
les champs d'un enregistrement sont accessibles à travers leur nom, grâce à
l'opérateur '.'
nom_enregistrement.nom_champ : représente la valeur mémorisée dans le champ
de l'enregistrement
Pour accéder au nom de la variable étudiant2, on utilise l'expression:
étudiant2.nom
55
ENREGISTREMENT
Exemple
Type
Etud = enregistrement
Nom, prénom:chaine
Notes [1..9] : réel { le champ notes est de type tableau }
Moy_générale :réel
Resutat: (admis,ajourné) { variable de type énuméré}
FinEtud
Variable
PV: tableau[1..600] de ETUD {exemple de tableau dont les éléments sont des
enregistrements}
56
ENREGISTREMENT
Exemple: algorithme de saisie des données concernant les personnes pers1 et pers2, puis affichage de la différence
d'âge entre ces deux personnes.
Algorithme âge
Type
tpersonne=enregistrement
nom : chaîne
prénom : chaîne
âge : entier
Fintpersonne
Variables
pers1, pers2 : tpersonne
Début
écrire ("Entrez le nom puis l‘âge de la personne 1")
lire (pers1.nom, pers1.age) {il est impossible d'écrire lire pers1}
écrire ("Entrez le nom puis l'âge de la personne 2")
lire (pers2.nom , pers2.age)
écrire ("La différence d'âge entre ", pers1.nom, " et ", pers2.nom , " est de " )
Si (pers1.age > pers2.age) Alors
écrire (pers1.age – pers2.age , " ans ")
Sinon 57
écrire(pers2.age– pers1.age , " ans ")
FinSi
Fin
ENREGISTREMENT
Un type structuré peut être utilisé comme type pour des champs d'un autre type structuré
TYPE
date = enregistrement
jour: entier
mois: chaîne Une autre manière de
année: entier déclarer le type
enregistrement
Findate
personne = enregistrement
nom: chaîne
ddn: date
Finpersonne
Pour accéder à l'année de naissance d'une personne, il faut utiliser deux fois l'opérateur '.'
pers1.ddn.année
Il faut lire une telle variable de droite à gauche : l'année de la date de naissance de la
personne 1. 58
UN TABLEAU COMME CHAMP D’UN ENREGISTREMENT
Il est possible aussi qu'un champ de type structuré soit de type tableau,
voire tableau structuré !
59
UN TABLEAU COMME CHAMP DE STRUCTURE
Algorithme
Type
Écrire("Veuillez entrer successivement les
Ville= enregistrement températures moyennes sur les 12 mois" )
Nom : chaîne //on utilise une boucle pour remplir le tableau des
Alt : entier //Altitude moyenne températures
Climat : Chaîne //type de climat Pour i de 1 jusqu'à 12 Faire
Temp : tableau[1..12] de réel //température écrire("mois ", i )
moyenne par mois lire MaVille.Temp[i]
Précip : tableau[1..12] de réel //précipitations FinPour
moyennes par mois
//idem pour les précipitations
FinVille
Fin
variable
Si on veut afficher par exemple la température
MaVille : Ville moyenne au mois de juillet de MaVille, on
Début écrit tout simplement :
écrire("Nom de la ville? " )
lire MaVille.Nom écrire MaVille.Temp[7] // vu que le tableau
//idem pour l'altitude et le climat commence à 1, 7 est l'indice de juillet
LES TABLEAUX D'ENREGISTREMENTS (OU TABLES)
Il arrive souvent que l’on veuille traiter non pas un seul enregistrement mais plusieurs.
Par exemple, on veut pouvoir traiter un groupe de personne. On ne va donc pas créer autant
de variables du type personne qu’il y a de personnes.
On va créer un tableau regroupant toutes les personnes du groupe.
Il s’agit alors d’un tableau d’enregistrements, autrement appelé « table ». Une table en
algorithmique a beaucoup de points communs avec une table d’une base de donnée. Les
colonnes sont appelées champs et les lignes enregistrements.
Exemple
Type
Structure personne
nom: chaîne
age: entier
FinStruct
Var
groupe: tableau[1..20] de personnes
Chaque élément du tableau est un enregistrement, contenant plusieurs variables de type
différent.
61
LES TABLEAUX D'ENREGISTREMENTS (OU TABLES)
On accède à un enregistrement par son indice dans le tableau.
groupe[2] représente la deuxième personne du groupe
groupe[2].nom représente le nom de la deuxième personne du groupe
Attention!
groupe.nom[3] n'est pas valide.
Pour accéder au nom de la troisième personne du tableau, il faut écrire 62
groupe[3].nom