Académique Documents
Professionnel Documents
Culture Documents
BASES DE
L’ALGORITHMIQUE
SOMMAIRE
2
PARTIE 1
MODELISER UN PROBLEME
3
CHAPITRE 1
1 - Identification du problème réel
Définir le périmètre du 2 - Traitement des données
problème
4
Introduction
Analyse du problème
Evaluation de la solution
Pour le dictionnaire, le problème se définit comme une question à résoudre, qui prête à discussion, qui fait
difficulté. Il est soumis à des critères bien définis et à des
Certains considèrent qu'un problème, est un écart entre ce qui est et ce qui devrait ou pourrait être
Il est important d’apprendre à identifier le problème parce que :
Entrées : Pré-condition :
Les informations fournies qui Une condition que doivent vérifier les
caractérisent les données du entrées; en dehors de cette condition, le
problème. problème n'a pas de sens.
Sorties Post-condition
Les informations qui caractérisent la Une condition que doivent vérifier les
solution du problème ; en d'autre entrées et les sorties ; en dehors de cette
terme, c'est un élément de la condition, la solution apportée au
réponse au problème. problème n'est pas correcte.
L'analyse d'un problème est une étape préalable indispensable dans le processus de
résolution de problème. En effet, Un problème bien analysé est un problème à moitié
résolu.
Le problème posé est souvent en langue naturelle et comporte plusieurs ambiguïtés d’où la
nécessité de:
il est impératif de relire ensuite le sujet pour bien vérifier qu'il n'y manque rien
d'important.
Conseil
Se consacrer entièrement à la compréhension du sujet
Eviter de chercher des idées de résolution (le comment faire ?)
Identifier les données d’entré et les résultats attendus
Conseil:
Décrire précisément et d'avoir bien en tête les valeurs qu'elles peuvent prendre.
Exemple 2:
Exemple 2:
§ La définition de ses données, en les caractériser par leurs natures, leurs propriétés et leurs domaines.
§ La spécification de toutes les relations liant les résultats aux données et éventuellement les résultats
entre eux.
§ La spécification des relations est la partie liée au traitement à développer afin de résoudre le problème.
19
Traitement des données
Le traitement est décrit à travers une suite finie et ordonnées de règles opératoires à suivre en vue
de résoudre un problème.
Exemple :
Le traitement des données est donc la formulation d’une solution imaginée par :
Analogie : recherche des ressemblances, des rapprochements à partir d'idées déjà trouvées pour un problème
précédent plus ou moins similaire.
Contigüité : recherche des faits se produisant en même temps, des parallélismes, des simultanéïtés et autres
concomitances.
Il est nécessaire d’avoir du bon sens, d’adopter une démarche rigoureuse et d’utiliser des outils adaptés
§ poser des jalons permettant de résoudre des problèmes bien plus difficiles que ceux que vous êtes capable
de résoudre naturellement
Une action est un événement qui modifie l’environnement. L’énoncé d’une même action peut apparaître
plusieurs fois dans la description d’un traitement.
Action complexe : une action non primitive qui doit être décomposée en actions primitives.
Tout traitement est effectué par l’exécution séquencée d’opérations appelées instructions.
· Traitement séquentiel
· Traitement conditionnel
· Traitement itératif
· Traitement récursif
simple séquence d’actions mais implique un ou plusieurs choix entre différentes possibilités
Exemple
Un magasin accorde une remise sur les achats de ses clients. Le taux de la remise est de 5% si le
montant de l’achat est inférieur à 50Dh et de 10% si le montant dépasse 50Dh. Connaissant le
montant d’achat d’un client on souhaite déterminer la valeur de la remise et calculer le montant à
payer.
▪ Recours à des outils permettant d’exécuter ce traitement un certain nombre de fois sans
pour autant le réécrire autant de fois
Un problème peut être exprimé en fonction d’un ou de plusieurs sous-problèmes tous de même nature que lui
mais de complexité moindre
Exemple: Considérons le problème qui consiste à calculer la factorielle d’un entier N positif ou nul.
34
Un problème n’est pas toujours simple à résoudre
Formaliser un problème consiste à le reformuler pour en abstraire les éléments inutiles
pouvoir plus facilement proposer des solutions pour sa résolution
DÉFINIR UN ALGORITHME
36
CHAPITRE 1
1 - Symboles d’un organigramme
Apprendre la 2 - Modéliser un traitement en organigramme
convention d’écriture 3 - Reconnaître la structure d’un algorithme
d’un organigramme
37
Organigramme: définition et nomenclature
Nomenclature
• Logigramme ou
Pour le construire, un ensemble de symboles sont utilisés. Ces symboles sont de différents types à savoir :
• Symbole de traitement
• Symbole logique
• Symboles auxiliaires
Entrée/ Sortie
Mise à disposition ou enregistrement d’une
information/donnée
Sous-programme
Portion de programme
▪ Symbole logique
Renvoi
Symbole utilisé deux fois pour assurer la continuité lorsqu'une partie
de ligne de liaison n'est pas représentée.
43
Processus d’un organigramme
Structure Linéaire
La structure linéaire se caractérise par une suite de traitements à exécuter successivement dans l'ordre de leur
énoncé
On cherche le prix de revient du carrelage de cette pièce sachant que le prix des carreaux est de 58 Dh / m2 et le
prix d’un sac de ciment est de 75 Dh
Structure alternative
Dans une structure alternative une condition est testée. En fonction du résultat du test soit le traitement 1, soit
le traitement 2 est réalisé
Une condition est une expression booléenne quelconque (vraie ou fausse) qui utilise les opérateurs suivants:
Traitements à réaliser :
1. Calculer la surface
Vrai
Condition 2.1 remise prend 20%
Surface > 100 m2 Faux 2.2 remise prend 5%
Structure itérative
Dans cette structure la condition est testée, si elle est vraie alors le traitement est exécuté, puis la condition est
testée de nouveau.
Considérons le problème qui consiste de calculer la somme des 10 premiers entiers positifs.
Traduction du cahier des charges :
Sortie : Somme des 10 premiers entiers positifs.
Traitements à réaliser :
1. Initialiser la Somme à 0
2. Initialiser le nombre d’entiers (nb) à 0
3. Incrémenter par 1 nb
4. Tester si nb est > 10
Faux
4.1 Refaire les traitements à partir de 3
Vrai 4.2 Afficher Somme
52
Définition d’un algorithme
▪ Exemple introductif
Ingrédients
1
2
.
+ .
les étapes …
Outils • Thermomètre
& • Fouet de cuisine
Récipients • Casserole … du fromage
• Bol
processus de fabrication
Un algorithme est une suite d'instructions détaillées qui, si elles sont correctement exécutées, conduit à un
résultat donné.
En algorithmique, nous utiliserons un langage situé à mi-chemin entre le langage courant et un langage
de programmation appelé pseudo-code
"détaillées" signifie que les instructions sont suffisamment précises pour pouvoir être
mises en œuvre correctement par l'exécutant (homme ou machine)
un identificateur (son nom) : pour le Un type: nature de l'objet simple( entier, caractère...) ou
désigner composé (tableau,…).
Cet identificateur doit être parlant: Un type détermine en particulier les valeurs possibles de
l'objet, la taille mémoire réservée à l’objet et les opérations
Exemple: QteLait pour désigner la primitives applicables à l'objet.
Quantité du lait
Exemple: QteLait : Réel
Identificateur : Y
Type : Entier Y 37
Valeur : 37
• Une constante est un objet dont l'état reste inchangé durant toute l'exécution d'un programme.
On ne peut jamais modifier sa valeur et celle-ci doit donc être précisée lors de la définition de
l'objet.
• Une variable est un objet dont le contenu (sa valeur) peut être modifié par une action
• ^ : (élévation à la puissance)
• * , / (multiplication, division)
• % (modulo)
• + , - (addition, soustraction)
Exemple: 2 + 3 * 7 vaut 23
En cas de besoin, on utilise les parenthèses pour indiquer les opérations à effectuer en priorité
Exemple: (2 + 3) * 7 vaut 35
Exemples
◦ Var
◦ Classement : Entier
◦ Moyenne : Réel
• Les opérations principales les plus utilisées sont les opérateurs logiques: NON, ET , O
Tables de vérité :
• Opérateurs de comparaison : = , ≤ , ≥ , ≠
X,Y :Réel
SUP :BOOLEEN
SUP := ( X > Y)
▪ Type Caractère
Il s'agit du domaine constitué des caractères alphabétiques et numériques .
• Une variable de ce type ne peut contenir qu'un seul et unique caractère.
• Les opérations élémentaires applicables sont les comparaisons : <, >, =, ...
Exemple :
Var
C : Caractère
C :=‘A'
Exemple : pour calculer la surface des cercles, la valeur de pi est une constante mais le rayon est une
variable.
Const
PI=3.14 : réel
Une constante doit toujours recevoir une valeur dès sa déclaration
<NOM_ALGORITHME>
Const
Const1= val1 : type Liste des constantes
Const2=val2 : type
………
Var
Liste des variables
v1 : type
v2 : type
………
Début Corps de l’algorithme
Instruction 1
Instruction 2
…..; Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme
Fin traitement langage de programmation
Traitement Séquentiel
Remarque:
• Les instructions d'un algorithme sont habituellement exécutées une à la suite de
l'autre, en séquence (de haut en bas et de gauche à droite).
L'ordre est important
L'écriture permet
Instruction d'afficher des résultats à l'écran (ou de les écrire dans un fichier)
d’écriture
En pseudo-code, on note:
Ecrire (var)
APPRENDRE À FORMULER
UN TRAITEMENT
74
CHAPITRE 1
1 - Le traitement alternatif (conditions)
CONNAITRE LES BASES 2 - Le traitement itératif (boucles)
75
Traitement alternatif
Rappel: Les instructions conditionnelles servent à n'exécuter une instruction ou une séquence d'instructions
que si une condition est vérifiée.
• Alternative Si-Alors-Sinon
§Alternative Si-Alors-Sinon
• Elle permet d'effectuer tel ou tel traitement en fonction de la valeur d'une condition
Organigramme En pseudo-code
Si condition Alors
<Actions_alors>
Sinon
<Actions_sinon>
Fsi
Exemple 1: Exemple 2:
si ( a≠0 )
si ( a – b ≠ c )
alors alors
a := 0 a := c
sinon
sinon a := d
a := b fsi
c := d
fsi
si la condition est vraie, la seule instruction qui sera exécutée
est l’instruction
si la condition est vraie c.à.d. la variable a est différente de 0 alors ond’affectation
lui affecte laavaleur
:= c. Sinon la seule
0, sinon instruction
on exécute le
qui sera exécutée est l’instruction d’affectation a := d.
bloc sinon.
La structure cas permet d'effectuer tel ou tel traitement en fonction de la valeur des conditions 1ou 2 ou ..n
En pseudo-code
Exemple 1:
On dispose d’un ensemble de tâches que l’on souhaite exécuter en fonction de la valeur d’une
variable choix de type entier, conformément au tableau suivant :
alors Stock
82
Traitement itératif
§Répéter N fois une suite d’instructions à l’aide d’une variable entière servant de compteur
Valeur ComptßVI
Valeur finale
initiale
Valeur à ajouter
à compt à chaque passage Compt>VF
dans la boucle
Vrai
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 83
traitement langage de programmation
Le traitement itératif
moyenne
var n, i, x, s : entier
Début
lire( n )
s := 0
pour i de 1 à n faire
lire( x )
s := s + x
fpour Traitement itératif
ecrire( “la moyenne est :”, s / n )
Fin
Faux
Condition
Tant que <condition> faire
Instructions Vrai
Fait
Traitements
Traitements après
la boucle Tant que
Exemple: un algorithme permettant de lire une suite d’entiers positifs, de calculer et d’afficher leur moyenne.
moyenne
var i, x, s : entier
Début
lire( x )
s := 0
i := 0
tant que x > 0 faire
i := i + 1
s := s + x
lire( x ) Condition obligatoire pour éviter de diviser par 0 si
fait le premier entier lu est 0
si i ≠ 0
alors écrire( “la moyenne est :”, s / i )
fsi
Fin
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 86
traitement langage de programmation
Le traitement itératif
Exemple: un algorithme permettant de lire une suite d’entiers positifs, de calculer et d’afficher leur
moyenne. moyenne
var i, x, s : entier
Début
lire( x )
s := 0
i := 0
tant que x > 0 faire
i := i + 1
s := s + x Condition obligatoire pour éviter de diviser par 0 si le
lire( x ) premier entier lu est £ 0
fait
si i ≠ 0
alors écrire( “la moyenne est :”, s / i )
fsi
Fin Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 87
traitement langage de programmation
Le traitement itératif
Répéter une suite d’instructions jusqu’à que la condition soit évaluée à Faux
Traitements
Répéter
instructions
Faux
Jusqu’à <condition>
Condition
Vrai
Traitements après la
boucle Répéter
Exemple: un algorithme permettant de lire deux entiers, de calculer et d’afficher le résultat de la division
du premier par le second (quotient)
quotient
var x, y : entier
Début
un contrôle obligatoire doit être
lire( x ) effectué lors de la lecture de la
répéter deuxième valeur
lire( y )
jusqu’à y > 0
écrire( x / y )
Fin
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 89
traitement langage de programmation
Passage d’une structure itérative à une autre
(*) : Le passage d’une boucle « répéter » ou « tantque » à une boucle « pour » n’est possible que si le nombre de
parcours est connu à l’avance
(**) : Lors du passage d’une boucle « pour » ou « tantque » à une boucle « répéter », faire attention aux cas
particuliers (le traitement sera toujours exécuté au moins une fois)
92
Structure de données
une structure de données est une manière particulière de stocker et d’organiser des données dans un
ordinateur de façon à pouvoir être utilisées efficacement.
nom_tableau[indice]
§Caractéristiques
• Un tableau vecteur possède un nombre maximal d’éléments défini lors de l’écriture de l’algorithme (les
bornes sont des constantes explicites, par exemple MAX, ou implicites, par exemple 10)
• Le nombre d’éléments maximal d’un tableau est différent du nombre d’éléments significatifs dans un
tableau
j de 1 à 8
LectutreTabMatrice indices
Var i , j : entier
T: tableau[1..12 , 1..8] de Réel
Debut
Pour i de 1 à 12 faire
Pour j de 1 à 8 faire i
Lire(T[i , j]) de 1 à 12
Fpour
Fpour
Fin .
.
Il existe plusieurs méthodes de tri qui se différencient par leur complexité d’exécution et leur complexité de
compréhension pour le programmeur.
• Tri à bulle
• Parcourir les éléments du tableau de 1 à (n–1) ; si l’élément i est supérieur à l’élément (i+1), alors on les
permute
• chercher l’indice du plus petit élément du tableau T[1..n] et permuter l’élément correspondant avec
l’élément d’indice 1
• chercher l’indice du plus petit élément du tableau T[2..n] et permuter l’élément correspondant avec
l’élément d’indice 2
• ……………………………………………..
• chercher l’indice du plus petit élément du tableau T[n-1..n] et permuter l’élément correspondant avec
l’élément d’indice (n-1).
Cette méthode consiste à prendre les éléments de la liste un par un et insérer chacun dans sa bonne place de
façon que les éléments traités forment une sous-liste triée.
• comparer et permuter si nécessaire T[1] et T[2] de façon à placer le plus petit dans la case d’indice 1
• comparer et permuter si nécessaire l’élément T[3] avec ceux qui le précèdent dans l’ordre (T[2] puis T[1])
afin de former une sous-liste triée T[1..3]
• ………………………………………………….
• comparer et permuter si nécessaire l’élément T[n] avec ceux qui le précèdent dans l’ordre (T[n-1], T[n-2],
…) afin d’obtenir un tableau trié.
106
Chaines de caractères
• Une chaine de caractères (en anglais : string) est un type structuré similaire à un tableau de caractères, et
représentant une suite de caractères.
• Cette structure est prédéfinie dans la plupart des langages de programmation et associé à des fonctions
S : chaîne
Exemple:
Var c:=‘’Saleh’’
Length(c) à 5
108
Fichiers
Un fichier est une structure de données formée de cellules contiguës permettant l’implantation d’une suite de
données en mémoire secondaire (disque, disquette, CD-ROM, bande magnétique, etc.)
Exemples :
On appelle nom interne d’un ficher le nom sous lequel un fichier est identifié dans un programme.
On appelle nom externe d’un fichier le nom sous lequel le fichier est identifié en mémoire secondaire.
• l’identifiant du support
• une extension (ou suffixe) qui précise le genre du fichier (donnée, texte, programme, etc.)
Exemple: « A:nombres.DAT » désigne un fichier de données stocké sur la disquette et qui s’appelle nombres.
• On appelle tampon ou buffer d’un fichier, une zone de la mémoire principale pouvant contenir un
enregistrement du fichier.
• Un fichier possède toujours un enregistrement supplémentaire à la fin appelé marque de fin de fichier (FDF)
permettant de le borner
Un fichier à organisation séquentielle (F.O.S) ne permet que l’accès séquentiel : pour atteindre l’article de rang
n, il est nécessaire de parcourir les (n-1) articles précédents.
• soit en utilisant le rang de l’enregistrement (cas de l’organisation relative) comme dans les tableaux,
• soit en utilisant une clé permettant d’identifier de façon unique chaque enregistrement (cas de
l’organisation séquentielle indexée et sélective).
• le nom du fichier
Exemple
1- Ouverture du fichier :
Un fichier peut être ouvert en mode lecture (L) ou en mode écriture (E).
2- Traitement du fichier :
Lire(NomFichier, fenêtre)
Cette primitive a pour effet de copier l’enregistrement actuel dans la fenêtre du fichier. Après chaque opération
de lecture, le pointeur passe à l’enregistrement suivant.
Ecrire(NomFichier, fenêtre)
Cette primitive a pour effet de copier le contenu de la fenêtre sur le fichier en mémoire secondaire. Dans un
fichier à organisation séquentielle, l’ajout d’un nouveau article se fait toujours en fin de fichier.
3- Fermeture du fichier :
Fermer(NomFichier)
La fonction booléenne FDF(NomFichier) permet de tester si la fin du fichier est atteinte. Sa valeur est
déterminée par le dernier ordre de lecture exécuté.
Les fichiers de texte sont des fichiers séquentiels qui contiennent des caractères organisés en lignes. La
présentation sous forme de « ligne » est obtenue grâce à la présence des caractères de contrôle :
Var:
Ftext: Fichier de Caractère
Ou
Var :
Ftext:Fichier Texte
• Un fichier de type texte peut être traité ligne par ligne ou caractère par caractère
• Dans un fichier de type texte, la primitive Lire_Lig(NomFichier,Fenêtre) permet de lire une ligne du fichier
• De même, la fonction booléenne FDL(NomFichier) permet de vérifier si le pointeur a atteint la fin d’une
ligne
Exemple: l’algorithme d’une procédure qui lit et affiche le contenu d’un fichier de type texte.
119
Programmation structurée
La résolution d’un problème complexe peut engendrer des milliers de lignes de code
• algorithme long,
• difficile à écrire,
• difficile à interpréter
• difficile à maintenir.
Solution :
méthodologie de résolution :
Programmation Structurée
Avantages:
• clarté de l’algorithme
• facilité de maintenance
• une variable
• une constante
• un appel de fonction
• Le paramètre formel et le paramètre effectif correspondant doivent avoir le même type ou être de types
compatibles.
• La correspondance entre paramètres formels et paramètres effectifs se fait selon l’ordre de leurs apparitions
dans la définition et dans l’utilisation de la procédure ou la fonction.
<Nom_proc>(<liste_par_form>)
Var <declarat_var_locales>
- <Nom_proc> : désigne le nom de la procédure.
Debut
<liste_par_form> : la liste des paramètres formels. Un
<Corps_procédure> paramètre résultat ou donnée/résultat doit être précédé
Fin par le mot clé var.
- <declarat_var_locales> : la liste des variables
- <Corps_procédure> : la suite des instructions décrivant le
traitement à effectuer
Lors de l’appel d’un sous algorithme (procédure ou fonction) à partir d’un algorithme appelant, on utilisera le
nom de la procédure ou la fonction suivi par la liste de ses paramètres effectifs
<Nom>(<liste_par_effectif>)
- <liste_par_effectif> : une suite d’objets désignant les paramètres effectifs séparés par des virgules (‘,’).
• Les paramètres effectifs et les paramètres formels doivent être compatible en nombre et en type.
Exemple: On souhaite écrire un algorithme qui lit un entier N supérieur à 3, puis saisit N valeurs entières et
affiche la plus petite et la plus grande parmi ces N valeurs. Les entiers saisis doivent être supérieurs à 0 et
inférieurs à 100. lire_nombre( ) : entier Min_Max( N : entier ; var min: entier) : entier
Var N : entier Var i, x, max : entier
Affiche_min_max Début Début
Var N, min, max : entier Appel de procédure min := 100
Répéter
max := 0
Début Lire ( N ) pour i de 1 à N faire
lire_nombre( N ) Jusqu’à ( N > 3) Répéter
lire_nombre := N Lire ( x )
Fin Jusqu’à (x > 0) et (x < 100)
max := Min_Max(N, min) Si x < min
Alors min := x
écrire( ‘’la plus grande valeur est :’’, max) Appel de la fonction Fsi
Si x > max
écrire( ‘’la plus petite valeur est :’’, min)
Alors max := x
Fsi
Fin Fpour
Min_Max := max
Fin
paramètre donnée
p.formel p.effectif
p.formel p.effectif
Exemple
134
Définition
Exemple:
0!=1
• La récursivité s’avérer inefficace si elle est mal utilisée. Il est déconseillé d’utiliser la récursivité quand il
existe une définition itérative évidente pour le problème.
Pour écrire un algorithme récursif permettant de résoudre un problème P sur des données D, nous suivrons
l’approche suivante :
1. décomposer le problème P en un ou plusieurs sous problèmes tous de même nature que P mais de
complexité moindre
3. déterminer un ou plusieurs cas particuliers pour lesquels la solution est évidente et tel qu’on ne peut pas
appliquer la règle de décomposition
4. définir une règle de combinaison qui détermine le résultat du problème P à partir des résultats des sous
problèmes
Selon cette démarche, le principe d’une analyse récursive d’un problème est basé sur 3 critères:
- une règle de combinaison pour générer le résultat du problème initial à partir des résultats
intermédiaires (résultats des sous problèmes).
2. récursivité multiple , si l’un des cas traité se résout avec plusieurs appels récursifs.
3. récursivité croisée ou mutuelle , deux algorithmes sont mutuellement récursifs si l’un fait appel à l’autre et
vice-versa.