Cours Algorithme
Cours Algorithme
IIR1
ANNEE 2020-2021
INTRODUCTION
Le mot algorithme est issu de la transcription phonétique de al-Kwharizmi.Al-Kwharizmi, (783-
850) est un grand mathématicien et astronome perse.
Son apport en mathématiques fut tel qu'il est également surnommé « le père de l'algèbre »
I. DEFINITION
Selon le LAROUSSE, la définition d'algorithme est « un ensemble de règles opératoires dont
l'enchaînement permet de résoudre un problème au moyen d'un nombre fini d'opérations. »
Quelques points importants :
Un algorithme décrit un traitement sur un ensemble fini de données de nature simple (nombres
ou caractères), ou plus complexes (données structurées)
Un algorithme est constitué d'un ensemble fini d'actions composées d'opérations ou actions
élémentaires. Ces actions élémentaires doivent être effectives (réalisable par la machine), non
ambiguës.
Un algorithme doit toujours se terminer après un nombre fini d'opérations.
L'expression d'un algorithme nécessite un langage
clair (compréhension) structuré (enchaînements d'opérations) non
ambiguë, universel (indépendants du langage de programmation choisi)
Syntaxe
STRUCTURE D'UN ALGORITHME
Un algorithme est constitué
d'un entête composé du MOT Réservé ALGORITHME et d'un nom de l'algorithme à réaliser
d'une zone de déclaration des identificateurs (variables) utilisés dans l'algorithme
et d'un corps délimité par deux mots réservés DEBUT et FIN. C'est ici qu'on écrit les actions de
l'algorithme
ALGORITHME <NOM>
<Déclaration des variables>
DEBUT
<Actions>
FIN
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
II. NOTIONS D'OBJETS
Un algorithme ou une action manipule des données pour obtenir un résultat.
Pour cela on manipule des objets simples ou structurés.
Un objet va être caractérisé par :
un identificateur (son nom) : pour le désigner cet identificateur doit être parlant : q=quotient;
Moy=Moyenne; ADR=Adresse...
Un type (nature de l'objet : entier, caractère...) simple ou structuré. Un type détermine en
particulier les valeurs possibles de l'objet et les opérations primitives applicables à l'objet.
Exemple q: ENTIER ; Moy :REEL;
CAR : CARACTERE ; Adresse: CHAINE (‘suite de caractères')
Une valeur (contenu de l'objet) unique. Cette valeur peut varier au cours de l'algorithme ou d'une
exécution à l'autre : ces objets sont des variables.
Dans les cas contraires (valeur fixe) ce sont des constantes.
Tous les objets manipulés par un algorithme doivent être clairement définis :
Mots clefs
VAR a, b : ENTIER
x, y : CARACTERE
a, b, x, y sont des identificateurs
1 Constantes et variables
On sépare les objets en deux classes : les constantes et les variables.
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.
CONST PI=3.14
NOM="PASCAL"
Une variable est un objet dont le contenu peut être modifié par une action.
Les types les plus utilisées sont:
ENTIER: Pour représenter les nombres entiers
Les opérations utilisables sur les entiers sont :
les opérateurs arithmétiques classiques : + (addition), - (soustraction), * (produit)
la division entière, notée ÷ ou DIV : n DIV p donne la partie entière du quotient de la division
entière de n par p
le modulo, (MOD) : n MOD p donne le reste de la division entière de n par p
les opérateurs de comparaison classiques : <, >, =, ...
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
REEL : Pour représenter les nombres réels.
Les opérations utilisables sur les réels sont :
les opérations arithmétiques classiques : + (addition), - (soustraction), * (produit), / (division)
les opérateurs de comparaison classiques : <, >, =, ...
Exemples
VAR Classement : ENTIER
Moyenne : REEL
2. TYPE LOGIQUE
Une variable de type logique (booléen) peut prendre deux valeurs VRAIE ou FAUSSE.
Exemple :
VAR EXISTE : BOOLEEN
EXISTE VRAIE
Les opérations principales les plus utilisées sont :
A B A ET B A OU B NON A
FAUX FAUX FAUX FAUX VRAI
FAUX VRAI FAUX VRAI VRAI
VRAI FAUX FAUX VRAI FAUX
VRAI VRAI VRAI VRAI FAUX
3. Type CARACTERE
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 réalisables sont les comparaisons : <,
>, =, ...
Exemple :
Var C : CARACTERE
C ‘A'
Ensemble de définition : la table ASCII
COMPLEMENT:
NB: il existe d'autre Opérations sur les caractères :
SUCC(c) : caractère suivant dans la table ASCII ;
PRED(c) : caractère précédent dans la table ASCII.
6. Type intervalles
Un type intervalle est un type dont les objets prennent leur valeur dans une portion de l'intervalle des
valeurs d'un autre type (entier, énuméré ou caractère).
Exemple : NBRE=0..99
OUVRABLE=lundi..vendredi
7. Type structurés
Une structure est un objet contenant un ensemble d'objets de types différents, appelés champs. Un
type doit donc décrire l'ensemble des champs contenus dans ses objets.
Syntaxe :
La principale opération définie sur ce type STRUCTURE est l'accès aux champs qui le compose.
8. Type pointeur
Un pointeur est une adresse mémoire: il permet de désigner directement une zone de la mémoire et
donc l'objet dont la valeur est rangée à cet endroit.
Un pointeur est souvent typé de manière à préciser quel type d'objet il désigne dans la mémoire.
Un type pointeur est défini par le symbole ^ suivi par le nom du type de l'objet pointé:
VAR P1: ^ENTIER ! ! ! ! ! !
ET1: ^ETUDIANT
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Variable valeur
A 28 « reçoit » Si A avait une valeur auparavant, cette valeur disparaît : elle est écrasé par 28
Format général :
<id_variable> <expression>
A 28+13
A « l'exécution » : l'expression est évaluée (calculée) et sa valeur est rangée dans la variable.
Donc les types <id_variable> et <expression> doivent être compatibles.
Exemple
Attention : A B+3
B doit avoir une valeur. Or au début d'une action, les variables ont une valeur indéterminée . B doit
avoir été initialisé.
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Remarque :
La notion de littéral : A 28
28 est un objet caractérisé par son type (entier [numérique]), son nom (sa valeur), et sa valeur (28)
Le littéral est l'objet « constante », le nom est sa valeur
On note les littéraux de type caractère entre quotte ‘A'.
On note les littéraux de type chaîne de caractères entre double quotte : ‘'bonjour''
Définition
Elles permettent de récupérer une valeur venant de l'extérieur (lecture) ou de transmettre une valeur à
l'extérieur (écriture).
Exemple :
Lecture : saisie (entrée) par clavier fonction LIRE(VARIABLES) ou SAISIR(VARIABLES)
Ecriture : Affichage sur écran (Moniteur) fonction ECRIRE ou AFFICHER
Exemple
VAR A, B, C : ENTIER VAR A, B : ENTIER
DEBUT DEBUT
SAISIR (A, B) OU
LIRE (A, B)
C A+B (Variable C en moins ! !)→ AFFICHER(A+B)
ECRIRE(C) FIN
FIN
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Introduction
Une action décrit un enchaînement d'actions élémentaires. L'enchaînement est décrit par les
structures de contrôle.
Il existe trois types (3) de structures de contrôle :
Les structures séquentielles
Les structures alternatives conditionnelles
Les structures répétitives ou itératives
A. Les structures séquentielles
Dans cette structure les instructions sont exécutées les une à la suite des autres
VAR A, B, C : ENTIER
DEBUT
LIRE (A)
LIRE (B)
C 2*A + B
ECRIRE(C)
FIN
La plupart des autres structures de contrôle utilise la notion de condition (expression booléenne) :
Une condition a une valeur qui est, soit vraie, soit fausse.
Pour déterminer la réalité de cette valeur on utilise :
les opérateurs de comparaisons =, ≤, ≥, ≠(<>)
les opérateurs booléens (logique) : ET, OU, NON
B. Les structures alternatives ou conditionnelles
Définition
Elle permet d'effectuer tel ou tel traitement en fonction de la valeur d'une condition.
Alternative SI_ALORS :
Syntaxe :
SI <condition>
ALORS < action _alors>
FINSI
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Altérnative SI_ALORS_SINON:
Syntaxe :
SI <condition>
ALORS < action _alors>
SINON < action _SINON>
FINSI
Exemple :
ALGORITHME resultat
VAR note :REEL
DEBUT
LIRE (note)
SI note ≥ 10 ALORS
ECRIRE(‘'Admis'' )
SINON
ECRIRE(‘'Ajourné'')
FINSI
FIN
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Méthode
Principe de fonctionnement :
1 : la condition est évaluée
2 : Si la condition a la valeur vraie on exécute <action_alors>
Si la condition a la valeur fausse on exécute <action_sinon>
Remarque :
Les <action_alors> ou <action_sinon> peuvent être soit :
des actions élémentaires
des composées (bloc)
Dans ce cas on utilise les structures imbriquées.
Exemple de structure imbriquée:
SI (A ≥ 10) ALORS
SI ( A ≥ 12) ALORS
ECRIRE (‘'Admis mention'')
SINON ECRIRE (‘'Admis passable'')
FINSI
SINON ECRIRE (‘'Ajourné'')
FINSI
2. Structure à choix multiples SELON-QUE
La structure SELONQUE permet d'effectuer tel ou tel traitement en fonction de la valeur des
conditions 1ou 2 ou..n.
Syntaxe :
SELONQUE
<condition 1> : <action 1>
<condition 2> : <action 2>
Méthode de Fonctionnement :
1 : la condition 1 est évaluée :
• Si la condition 1 est vraie, alors on exécute l'action correspondante et on quitte la structure selon-que
• Si la condition 1 est fausse, on évalue la condition 2...et ainsi de suite.
2. Si aucune n'est vraie on effectue l'action sinon (au cas où l'action sinon n'existe pas alors aucune action
n'est exécutée !).
SELONQUE
Note ≥ 16 : ECRIRE (‘'TB'')
Note ≥ 14 : ECRIRE (‘'B'')
Note ≥ 12 : ECRIRE (‘'AB'')
Note ≥ 10 : ECRIRE (‘'Passable'')
SINON : ECRIRE (‘'ajourné'')
FINSELONQUE
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Exercices
Q1 : Ecrire un algorithme qui permet de saisir deux réels a et b puis calcule la somme a+b si a est
supérieur ou égal à b et b-a dans le cas contraire.
Q2 : Ecrire un algorithme qui permet de saisir trois réels puis affiche-le plus grand de ces trois réels
Q3 : Soit l'algorithme suivant
ALGORITHME essai
VAR X, Y : REEL
DEBUT
LIRE(X)
SI X ≥ 0 ALORS
Y X
SINON
Y -X
ECRIRE(Y)
FINSI
FIN
Que fait cet algorithme ?
Q4 : Ecrire un programme qui permet de résoudre une équation ax2 + bx + c = 0 dans R.
i. Structure TANTQUE
Elle permet de répéter un traitement tant qu’une condition est vérifiée
Syntaxe :
TANTQUE <condition>
FAIRE
<actions>
FINTANTQUE
Ces actions peuvent être simples ou composées ! !
ALGORITHME calcul
VAR i : entier
DEBUT
i 1
TANTQUE ( i≤5)
FAIRE
ECRIRE (i*i)
i i+1
FINTANTQUE
FIN
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Remarque :
Le contenu de la structure TANTQUE peut ne jamais être exécuté. Donc cette structure permet en
réalité de répéter un traitement 0, 1 ou plusieurs fois.
La condition étant évaluée au début, les variables utilisées dans la condition doivent avoir été
initialisées.
On doit s'assurer de la terminaison (sinon le programme ne se termine jamais)
Pour cela, il faut nécessairement que dans le corps de la structure, la condition soit modifiée
quelque part.
Syntaxe :
REPETER
<actions simples>
JUSQU'A <condition>
Fonctionnement :
1. on exécute le corps
2. si on évalue la condition , puis
si la condition est vraie : on quitte le
REPETER
si la condition est fausse on recommence
Remarques :
Il y a toujours au moins une exécution du corps. La structure REPETER permet de répéter un
traitement 1 ou plusieurs fois.
Pour choisir entre REPETER et tant que il faut se poser la question : faut-il éventuellement ne jamais
faire le traitement ? Si oui : il faut utiliser tant que, sinon utiliser la structure REPETER qui exécute
au moins une fois l'action.
NB: Attention, en C/C++ JAVA :
La structure est do...while : c'est à dire Faire...TANTQUE . Alors que la structure algorithmique est
répéter...jusqu'à.
C'est à dire qu'en C/C++ JAVA on exécute l'action tant qu'une condition est vraie alors qu'en
algorithme on exécute une action tant que la condition est fausse, c'est à dire jusqu'à ce que la condition
inverse soit vraie.
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Il est fréquent que le nombre de répétitions soit connu à l'avance, et que l'on ait besoin d'utiliser le
numéro de l'itération afin d'effectuer des calculs ou des tests. Le mécanisme permettant cela est la boucle
POUR.
Cette boucle permet de parcourir un intervalle en répétant un traitement pour chacune des valeurs de
cet intervalle
Syntaxe :
POUR <id_variable> DE <val_inférieure> A <val_supérieure>
[ PAR PAS de <val_pas>] →facultatif
FAIRE <actions>
FINPOUR
Les actions peuvent être simples ou composées.
Fonctionnement :
1 : Automatiquement, on a id_variable ≤ val_inférieure
Donc, on n'a pas besoin d'initialiser, la structure se charge de la faire
2 : id_variable > val_supérieure ? :
Si oui alors STOP, on quitte la structure
Sinon :
on exécute le programme
automatiquement, l'incrémentation se fait (+1 ou + pas si l'on a définit un pas particulier, par
défaut, le Pas est 1)
on remonte au début du 2 pour tester la condition id_variable > val_supérieure ?
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
Remarques :
Il est possible que l'action ne soit jamais exécutée.
Il est possible aussi d'avoir un intervalle inversé à condition d'avoir un pas négatif.
IMPORTANT : Il est absolument interdit de modifier <id_variable>, <val_inférieure>,
<val_supérieure>, <val_pas> dans le corps de boucle.
En programmation on le traduit par l’instruction for
Boucle pour
Utilisation du POUR :
On s'en sert dès que l'on connaît au début de la boucle le nombre de répétitions à effectuer.
Dans les cas contraire, on utilisera des TANTQUE ou des REPETER
Exercices
Introduction
Lorsque l'on développe un programme et que le problème à résoudre est complexe, le nombre
d'instruction devient vite important. Il est nécessaire de l'organiser. Il suffit de regrouper sous un même
nom les instructions agissant dans le même but.
On distingue :
les Procédures qui réalisent un traitement (lecture d'un complexe, tri du fichier étudiant)
les Fonctions qui effectuent un calcul et retournent un résultat
Les fonctions et les procédures peuvent être appelées plusieurs fois à partir du programme principal
ou à partir d'autres fonctions en recevant à chaque fois des paramètres ayant des valeurs différentes.
Les Fonctions et les Procédures sont donc des moyens de réutilisation de portions de code.
Les Fonctions et les procédures sont parfois appelées des sous-programmes
Exemple:
FONCTION perimetre_rectangle (largeur, longueur : ENTIER) : ENTIER
DEBUT
RETOURNER (2*(largeur+longueur))
FIN
IV. Récursivité
La récursivité consiste à remplacer une boucle par un appel à la fonction elle-même.
Exemple :
Considérons la suite factorielle, elle est définie par :
0!=1
n!=n(n-1)!
La fonction peut s'écrire simplement:
CFPT/SENEGAL-JAPON
IIR1
ANNEE 2020-2021
INTRODUCTION
Un tableau est un ensemble de même type indicé par un ensemble non vide d'indices, permettant un
accès direct à chacun des objets.
La contrepartie de cette possibilité d'accès direct est que le tableau doit être contigu en mémoire:
L'adresse d'un objet peut alors facilement être calculée à partir de l'adresse de départ du tableau, de
l'indice de l'objet et de la taille de chaque objet.
I. DECLARATION D’UN TABLEAU A UNE DIMENSSION
Syntaxe:
nom_tableau : TABLEAU[min_indice..max_indice] DE <type_predefini>;
• ce qui signifie que les éléments ont pour type le type_predefini
• les indices des éléments vont de min_indice à max_indice,
• avec min_indice < max_indice,
NB: on peut déclarer un tableau de N valeurs comme ceci:
nom_tableau: TABLEAU[ N ] DE <type_predefini>
TD ALGORITHME