Vous êtes sur la page 1sur 138

ACQUÉRIR LES

BASES DE
L’ALGORITHMIQUE
SOMMAIRE

PARTIE 2 : DÉFINIR UN ALGORITHME PARTIE 3 : APPRENDRE À FORMULER UN


TRAITEMENT
PARTIE 1 : MODELISER UN PROBLEME Chapitre 1 : Apprendre la convention d’écriture d’un
organigramme Chapitre 1 : Connaître les bases
Chapitre 1 : Définir le périmètre du problème
Chapitre 2 : Modéliser un traitement en Chapitre 2 : Savoir structurer les données
Chapitre 2 : Définir le périmètre du problème organigramme Chapitre 3 : Identifier les paradigmes algorithmiques
Chapitre 3 : Reconnaître la structure d’un algorithme

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

Le développement d’un logiciel est la transformation d’une


idée ou d’un besoin (problème) en un logiciel fonctionnel.

Le processus de résolution d’un problème peut être décrit


en 3 phases :

Analyse du problème

Résolution du problème (conception et réalisation de la


solution)

Evaluation de la solution

Apprendre à formuler un Traduire son algorithme dans un 5


Modéliser un problème Définir un algorithme
traitement langage de programmation
Problème

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

Apprendre à formuler un Traduire son algorithme dans un 6


Modéliser un problème Définir un algorithme
traitement langage de programmation
Problème

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 :

▪ c’est la première étape cruciale du processus de la modélisation d’un problème;


▪ cela aide à clarifier et à préciser les problèmes pour qu’ils puissent être résolus efficacement ;
▪ cela peut aider à comprendre que tous

Apprendre à formuler un Traduire son algorithme dans un 7


Modéliser un problème Définir un algorithme
traitement langage de programmation
Spécification d’un problème
Tout problème peut se décrire par un ensemble d'éléments de ces quatre types :

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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 8
traitement langage de programmation
Spécification d’un problème

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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 9
traitement langage de programmation
Analyse du Problème

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.

L’analyse des problèmes s’intéresse aux éléments suivants :

· Les résultats souhaités (sorties),

· Les traitements (actions réalisées pour atteindre le résultat),

· Les données nécessaires aux traitements (entrées)

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 10
traitement langage de programmation
Analyse du Problème

L’objectif de cette étape est de :


· Bien comprendre l’énoncé du problème,
· Déterminer les dimensions du problème (entrées et sorties)
· Déterminer la méthode de de sa résolution par décomposition et raffinements successifs
· Déterminer les formules de calculs, les règles de gestion,…..

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 11
traitement langage de programmation
Bien comprendre le problème à résoudre

Le problème posé est souvent en langue naturelle et comporte plusieurs ambiguïtés d’où la
nécessité de:

· Lecture entière et itérative pour comprendre et délimiter le problème à résoudre.

· Reformulation du problème sous la forme d'une question ou bien en utilisant un modèle


mathématique

il est impératif de relire ensuite le sujet pour bien vérifier qu'il n'y manque rien
d'important.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 12
traitement langage de programmation
Bien comprendre le problème à résoudre
Exemple

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 13
traitement langage de programmation
Bien comprendre le problème à résoudre
Données d’entrée :
· concernent le jeu de données sur lequel on souhaite résoudre le problème
· représente l’ensemble des données en entrée, à partir desquelles on doit calculer puis
afficher un résultat.

Conseil:

Décrire précisément et d'avoir bien en tête les valeurs qu'elles peuvent prendre.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 14
traitement langage de programmation
Bien comprendre le problème à résoudre
Exemple 1:

Exemple 2:

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 15
traitement langage de programmation
Bien comprendre le problème à résoudre

Les résultats ou sorties :


Ils correspondent à ce que l'on demande de calculer ou de déterminer pour pouvoir
obtenir le résultat

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 16
traitement langage de programmation
Bien comprendre le problème à résoudre
Exemple 1:

Exemple 2:

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 17
traitement langage de programmation
Introduction

L’analyse d’un problème se base sur sa formulation à travers :

§ La définition de ses données, en les caractériser par leurs natures, leurs propriétés et leurs domaines.

§ La définition de ses résultats,

§ 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.

Apprendre à formuler un Traduire son algorithme dans un 18


Modéliser un problème Définir un algorithme
traitement langage de programmation
CHAPITRE 1
1 - Identification du problème réel
Définir le périmètre du 2 - Traitement des données
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 :

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 20
traitement langage de programmation
Traitement des données

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.

Contraste : recherche des différences, des oppositions, des arguments antagonistes.

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

Apprendre à formuler un Traduire son algorithme dans un 21


Modéliser un problème Définir un algorithme
traitement langage de programmation
Méthodes d’Analyse

Appliquer une méthode revient à:

§ décomposer la réflexion en étapes

§ poser des jalons permettant de résoudre des problèmes bien plus difficiles que ceux que vous êtes capable
de résoudre naturellement

Apprendre à formuler un Traduire son algorithme dans un 22


Modéliser un problème Définir un algorithme
traitement langage de programmation
Méthodes d’Analyse

Chaque étape est appelée action.

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.

Il existe 2 types d’action :

Action primitive : l’action que peut executer un processeur

Action complexe : une action non primitive qui doit être décomposée en actions primitives.

En général le processeur respecte la séquence des actions

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 23
traitement langage de programmation
Approche descendante

L’approche descendante divise un problème complexe


en plusieurs parties plus simples et plus petites
(modules) pour organiser le traitement de manière
efficace

Ces modules sont ensuite décomposés jusqu'à ce que le


module résultant constitue l’action primitive comprise
et ne peut plus être décomposée

Apprendre à formuler un Traduire son algorithme dans un 24


Modéliser un problème Définir un algorithme
traitement langage de programmation
Approche descendante

Une pièce rectangulaire de 4 sur 3 mètres


doit être carrelée. Le carrelage d’un m2
nécessite 1 sac de ciment. 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

Apprendre à formuler un Traduire son algorithme dans un 25


Modéliser un problème Définir un algorithme
traitement langage de programmation
Approche ascendante

L’approche ascendante fonctionne de manière inverse, les


actions primitives étant d'abord conçues puis poursuivis au
niveau supérieur.

Conception ses pièces les plus fondamentales qui sont ensuite


combinées pour former le module de niveau supérieur.

Intégration de sous-modules et de modules dans le module de


niveau supérieur est répétée jusqu'à l'obtention de la solution
complète requise

Apprendre à formuler un Traduire son algorithme dans un 26


Modéliser un problème Définir un algorithme
traitement langage de programmation
Approche ascendante
Exemple : analyse ascendante du problème précédent

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 27
traitement langage de programmation
Types de Traitement

Tout traitement est effectué par l’exécution séquencée d’opérations appelées instructions.

selon la nature du problème, un traitement est classé en 4 catégories:

· Traitement séquentiel

· Traitement conditionnel

· Traitement itératif

· Traitement récursif

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 28
traitement langage de programmation
Traitement séquentiel
Exemple
Le traitement est décrit à travers
l’enchaînement d’une suite d’actions
primitives.

La séquence des actions sera


exécutée dans l’ordre

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 29
traitement langage de programmation
Traitement conditionnel
Le traitement est utilisé pour résoudre des problèmes dont la solution ne peut être décrite par une

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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 30
traitement langage de programmation
Traitement conditionnel
L’action « Calculer la valeur de la remise » aura un résultat différent selon la valeur de
la donnée « montant de l’achat »

Cette action sera réalisée à travers un traitement conditionnel:

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 31
traitement langage de programmation
Traitement itératif
L’analyse d’un problème peut révéler le besoin de répéter un même traitement plus
d’une fois.

▪ Recours à des outils permettant d’exécuter ce traitement un certain nombre de fois sans
pour autant le réécrire autant de fois

Exemple: Considérons le problème qui consiste de calculer la somme de 10 entiers positifs


donnés

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 32
traitement langage de programmation
Traitement récursif

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.

On peut formuler le problème de cette manière :

Apprendre à formuler un Traduire son algorithme dans un 33


Modéliser un problème Définir un algorithme
traitement langage de programmation
CHAPITRE 2 FORMALISER LE PROBLÈME

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 35
traitement langage de programmation
PARTIE 2

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

Un organigramme de programmation est une représentation graphique normalisée de l’enchainement des


opérations (traitements) et des décisions effectués permettant de donner la réponse à un problème.

Nomenclature

Un organigramme de programmation est appelé aussi:


• Algorigramme

• Logigramme ou

• Ordinogramme (plus rarement)

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Symboles d’un organigramme

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Symboles d’un organigramme
Symboles de traitement

Symbole Désignation Exemples


Symbole général de « traitement »
opération sur des données, instruction, etc.

Entrée/ Sortie
Mise à disposition ou enregistrement d’une
information/donnée

Sous-programme
Portion de programme

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Symboles d’un organigramme

▪ Symbole logique

Symbole Désignation Exemple


Test ou Branchement conditionnel
décision d’un choix parmi d’autres en
fonction d’une condition testée

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Symboles d’un organigramme
Symboles auxiliaires

Symbole Désignation Exemples


Début, Fin ou Interruption
Symbole utilisé au début et à la fin d’un organigramme ou en cas
d’interruption
Liaison
Sens conventionnel des liaisons :
- de haut en bas
- de gauche à droite.
Un cheminement différent est indiqué à l’aide d’une flèche.

Renvoi
Symbole utilisé deux fois pour assurer la continuité lorsqu'une partie
de ligne de liaison n'est pas représentée.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
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

43
Processus d’un organigramme

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Structures 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é

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Exemple de structure linéaire

Une pièce rectangulaire de longueur L et de largeur l doit être carrelée.

Le carrelage d’un m2 nécessite 1 sac de ciment.

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Exemple de structure linéaire:

Traduction du cahier des charges :


Entrée : Saisie de L et l
Sortie : prix de revient du carrelage
Traitements à réaliser :
Séquentialité des
1. calculer la surface traitements
2. calculer le prix des carreaux
3. Calculer prix de ciment
4. Calculer prix de revient

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Structures d’un organigramme

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:

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Exemple de structure alternative:
Traduction du cahier des charges :
Entrée : Saisie de L et l
Sortie : prix de revient du carrelage

Traitements à réaliser :
1. Calculer la surface

2. Définir la remise sur l’achat des carreaux (dépend de la surface)

3. Calculer le prix des carreaux


4. Calculer prix de ciment
5. Calculer prix de revient

Vrai
Condition 2.1 remise prend 20%
Surface > 100 m2 Faux 2.2 remise prend 5%

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Structures d’un organigramme

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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Exemple de structure itérative

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
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

52
Définition d’un algorithme
▪ Exemple introductif
Ingrédients

• Un litre de lait cru,


• Un yaourt grec,
• 4 gouttes de présure le résultat

1
2
.
+ .
les étapes …

Outils • Thermomètre
& • Fouet de cuisine
Récipients • Casserole … du fromage
• Bol
processus de fabrication

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Définition d’un algorithme

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)

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Définition de la méthode de résolution

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Objets informatiques

Un algorithme manipule des objets (données) pour obtenir un résultat.

Un objet est caractérisé par :

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Objets informatiques
Un objet est caractérisé aussi par :
Une valeur (contenu de l'objet) unique.

Identificateur : QteLait Mémoire


Type : Réel
Valeur : 2,5
QteLait
2,5

Identificateur : Y
Type : Entier Y 37
Valeur : 37

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 57
traitement langage de programmation
Objets informatiques
Les objets sont de deux types: 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.

• Une variable est un objet dont le contenu (sa valeur) peut être modifié par une action

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Types des objets
Type Numérique (Entier/ Réel)

Entier: Pour représenter les nombres entiers

Les opérations applicables 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 : <, >, =, etc.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Types des objets
Type Numérique (Entier/ Réel)

Entier: Pour représenter les nombres entiers

Les opérations applicables 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 : <, >, =, etc.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Types des objets
Pour les opérateurs arithmétiques donnés, l'ordre de priorité est le suivant (du plus prioritaire au
moins prioritaire) :

• ^ : (é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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Types des objets

Réel : Pour représenter les nombres réels.


Les opérations applicables 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 : Réel

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Types des objets
Type logique ou booléen
Une variable de type logique (booléen) peut prendre deux valeurs Vraie ou Fausse.

• Les opérations principales les plus utilisées sont les opérateurs logiques: NON, ET , O
Tables de vérité :

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Types des objets
Exemple :
A , B , TROUVE :Booléen
TROUVE :=(A ET B)

• Opérateurs de comparaison : = , ≤ , ≥ , ≠
X,Y :Réel
SUP :BOOLEEN
SUP := ( X > Y)

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Types des objets

▪ 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'

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Déclaration d’une variable/ constante

▪Déclaration d’une variable


Toute variable utilisée dans un programme doit avoir fait l’objet d’une déclaration préalable
• En pseudo-code, la déclaration de variables est effectuée par la forme suivante :

Var liste d'identificateurs : type


Exemple:
Var
i, j, k : Entier x, y : Réel
OK: Booléen
C1, C2 : Caractère

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Déclaration d’une variable/ constante

▪ Déclaration d’une constante


En pseudo-code, la déclaration des constante est effectuée par la forme suivante :

Const identificateur=valeur : type


(par convention, les noms de constantes sont en majuscules)

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Structure d’un algorithme

<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

L’affectation consiste à attribuer une valeur à une variable (c’est-à-dire


Instruction
remplir d’affectation
ou modifier le contenu d'une zone mémoire)

En pseudo-code, l'affectation est notée par le signe :=

Var:= e : attribue la valeur de e à la variable Var

▪e peut être une valeur, une autre variable ou une expression


▪Var et e doivent être de même type ou de types compatibles
▪l’affectation ne modifie que ce qui est à gauche de la flèche
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme
traitement langage de programmation
Traitement Séquentiel
Exemples valides:
Instruction
i :=1 j ←i k :=d’affectation
i+j x := 10.3 OK := FAUX ch1 := "SMI" ch2 := ch1 x := 4 x := j
(avec i, j, k : entier; x :réel; ok :booléen; ch1,ch2 :chaine de caractères)

Exemples non valides:


i := 10.3 OK := "SMI" j := x

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Traitement Séquentiel

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)

• la machine affiche le contenu de la zone mémoire var


• Conseil: Avant de lire une variable, il est fortement conseillé d’écrire des messages à l’écran,
afin de prévenir l’utilisateur de ce qu’il doit frapper
Exemple : Ecrire(a, b+2, "Message")

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
Complexité d’un algorithme

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme
traitement langage de programmation
PARTIE 3

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

• Schéma conditionnel généralisé ou multiple

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 76
traitement langage de programmation
Traitement alternatif

§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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 77
traitement langage de programmation
Traitement alternatif

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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 78
traitement langage de programmation
Traitement alternatif

§Schéma conditionnel généralisé ou multiple

La structure cas permet d'effectuer tel ou tel traitement en fonction de la valeur des conditions 1ou 2 ou ..n

En pseudo-code

Cas <var> de:


<valeur 1> : <action 1>
< valeur 2> : <action 2>
...
< valeur n> : <action n>
la partie action-sinon est facultative
Sinon : <action_sinon>
FinCas

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 79
traitement langage de programmation
Traitement alternatif

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 :

Valeur de choix Tâche à exécuter


1 Commande
2 Livraison
3 Facturation
4 Règlement
5 Stock
Autre valeur ERREUR

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 80
traitement langage de programmation
Traitement alternatif

§Alternative Si-Alors-Sinon §Structure à choix multiples


si choix = 1
alors Commande
sinon si choix = 2
Cas choix de:
alors Livraison
sinon si choix = 3 1: Commande
alors Facturation 2: Livraison
sinon si 3: Facturation
choix = 4 4: Règlement
alors sinon ecrire (‘’Erreur’’)
Règlement
sinon si
finCas
choix = 5

alors Stock

sinon ecrire (‘’Erreur’’) L’emboîtement de si en cascade est fastidieux à écrire


fsi
fsi
fsi
fsi
fsi

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 81
traitement langage de programmation
CHAPITRE 1
1 - Le traitement alternatif (conditions)
CONNAITRE LES BASES 2 - Le traitement itératif (boucles)

82
Traitement itératif

§Instruction itérative « pour »

§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

Pour <compt> de <VI> à <VF> [pas <VP>] faire Trainements


instructions
Fpour Comptßcompt+VP
Faux

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

Exemple: un algorithme permettant de lire N entiers, de calculer et d’afficher leur moyenne

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 84
traitement langage de programmation
Le traitement itératif

§Instruction itérative « Tant que »

Répéter une suite d’instructions tant que la condition est vraie

Faux
Condition
Tant que <condition> faire
Instructions Vrai
Fait
Traitements

Traitements après
la boucle Tant que

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 85
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
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

§Instruction itérative « Répéter »

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 88
traitement langage de programmation
Le traitement itératif

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)

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 90
traitement langage de programmation
Choix de la structure itérative

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 91
traitement langage de programmation
CHAPITRE 2
1 – Les tableaux
SAVOIR STRUCTURER 2 - Les chaînes de caractères
LES DONNEES 3 - Les fichiers

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.

Une structure de données regroupe :


• Un certain nombre de données à gérer,
• Un ensemble d’opérations pouvant être appliquées à ces données

Dans la plupart des cas, il existe:


• Plusieurs manières de représenter les données et
• Différents algorithmes de manipulation.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 93
traitement langage de programmation
Structure Tableau Vecteur

• Stocker à l’aide d’une seule variable un ensemble de valeurs de même type

• Un tableau unidimensionnel est appelé vecteur

Type vecteur = tableau [1..MAX] de type des éléments


avec MAX est le nombre maximum d’éléments pour le type vecteur

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 94
traitement langage de programmation
Structure Tableau Vecteur

• Exemple de tableau de 5 cases

T : tableau [1..5] d’entier

• Accès à un élément du tableau

nom_tableau[indice]

Exemple : T[2] correspond à la case ayant la valeur 32

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 95
traitement langage de programmation
Structure Tableau Vecteur

§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

Exemple: un algorithme permettant de LectutreTabVecteur


lire un tableau vecteur de 12 entiers
Var i : entier
T : tableau[1..12] de Réel
Debut
Pour i de 1 à 12 faire
Lire(T[i])
Fpour
Fin
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 96
traitement langage de programmation
Structure de tableau multi-dimensions

• Par extension, on peut définir et utiliser des tableaux à n dimensions

tableau [intervalle1,intervalle2,…,intervallen] de type des éléments

• Les tableaux à deux dimensions permettent de représenter les matrices

tableau [intervalle1,intervalle2] de type des éléments

T : tableau [1..2,1..M] d’entier

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 97
traitement langage de programmation
Structure de tableau multi-dimensions

Exemple: un algorithme permettant de lire un tableau matrice d’ entiers de 12 lignes et 8 colonne

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 .
.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 98
traitement langage de programmation
Tri d’un tableau

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.

Parmi les méthodes de Tri d’un tableau on cite:

• Tri à bulle

• Tri par sélection

• Tri par insertion

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 99
traitement langage de programmation
Tri à bulle

Soit T un tableau de n entiers.

La méthode de tri à bulles nécessite deux étapes :

• 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

• Le programme s’arrête lorsqu’aucune permutation n’est réalisable après un parcours complet du


tableau.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 100
traitement langage de programmation
Tri à bulle

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 101
traitement langage de programmation
Tri par sélection

C’est la méthode de tri la plus simple, elle consiste à :

• 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).

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 102
traitement langage de programmation
Tri par sélection

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 103
traitement langage de programmation
Tri par insertion

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.

Pour ce faire, on procède de la façon suivante :

• 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é.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 104
traitement langage de programmation
Tri par insertion

[Pas = -1] signifie que le parcours se fait dans le sens


décroissant
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 105
traitement langage de programmation
CHAPITRE 2
1 – Les tableaux
SAVOIR STRUCTURER 2 - Les chaînes de caractères
LES DONNEES 3 - Les fichiers

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

• Le nombre de caractères d’une chaine est accessible via la fonction length(<NomVar>)

Exemple:
Var c:=‘’Saleh’’
Length(c) à 5

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 107
traitement langage de programmation
CHAPITRE 2
1 – Les tableaux
SAVOIR STRUCTURER 2 - Les chaînes de caractères
LES DONNEES 3 - Les fichiers

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.)

Chaque élément de la suite est appelé article

Exemples :

§ liste des étudiants d’une institution

§ état des produits stockés dans un magasin

§ liste des employés d’une entreprise.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 109
traitement langage de programmation
Eléments attachés à un fichier

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.

Ce nom est composé de trois parties:

• l’identifiant du support

• le nom du fichier proprement dit

• 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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 110
traitement langage de programmation
Eléments attachés à un fichier

• 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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 111
traitement langage de programmation
Eléments attachés à un fichier

Chaque fichier est caractérisé par :

• un mode d’organisation : séquentielle, séquentielle indexée, relative ou sélective.

• un mode d’accès : séquentiel ou direct

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.

L’accès direct se fait:

• 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).

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 112
traitement langage de programmation
Déclaration d’un fichier à organisation séquentielle

Pour déclarer une variable de type fichier, il faut spécifier :

• le nom du fichier

• le type des éléments du fichier

Exemple

Déclaration d’un fichier de texte Déclaration d’un fichier d’enregistrement

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 113
traitement langage de programmation
Manipulation des fichiers à organisation séquentielle

1- Ouverture du fichier :

Un fichier peut être ouvert en mode lecture (L) ou en mode écriture (E).

Après l’ouverture, le pointeur pointe sur le premier enregistrement du fichier.

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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 114
traitement langage de programmation
Manipulation des fichiers à organisation séquentielle

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é.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 115
traitement langage de programmation
Fichiers de type texte

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 :

• retour chariot (noté souvent CR), de code ASCII 13

• saut de ligne (noté souvent LF) de code ASCII 10

Un fichier texte peut être déclaré de 2 façons différentes

Var:
Ftext: Fichier de Caractère

Ou

Var :
Ftext:Fichier Texte

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 116
traitement langage de programmation
Fichiers de type 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

et la transférer dans la fenêtre.

• De même, la fonction booléenne FDL(NomFichier) permet de vérifier si le pointeur a atteint la fin d’une

ligne

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 117
traitement langage de programmation
Fichiers de type texte

Exemple: l’algorithme d’une procédure qui lit et affiche le contenu d’un fichier de type texte.

ParcoursFichText(ftext : Fichier texte)


Var
ligne : Chaîne
Début
Ouverture fichier pour lecture
Ouvrir(ftext,L)
Lire(ftext,ligne)
Lecture d’un caractère et le
TantQue Non(FDF(ftext)) Faire
transférer vers la fenêtre ligne
Ecrire(ligne)
Lire(ftext,ligne)
Fait Test de la fin du fichier
Fermer(ftext)
Fin Fermeture fichier après la
boucle de lecture

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 118
traitement langage de programmation
CHAPITRE 3
1 - Les procédures et les fonctions
IDENTIFIER LES
PARADIGMES 2 – La récursivité
ALGORITHMIQUES

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 120
traitement langage de programmation
Programmation structurée

Idée: découpage d’un problème en des sous problèmes moins complexes

Avantages:
• clarté de l’algorithme

• lisibilité de la lecture d’un algorithme

• facilité de maintenance

• réutilisation des sous algorithmes

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 121
traitement langage de programmation
Procédures et fonctions

2 types de sous algorithmes :


• procédure
• fonction

Communication entre sous algorithmes:

paramètres données : les entrées

paramètres résultats : les sorties

paramètres données/résultats : à l’appel des données transformés par la procédure/fonction en résultats

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 122
traitement langage de programmation
Procédures et fonctions

paramètres formels: objets utilisés pour la description d’un sous algorithme

paramètres effectifs: objets utilisés lors de l’appel d’un sous algorithme

Un paramètre formel est toujours une variable.

Un paramètre effectif peut être :

• une variable

• une constante

• une expression arithmétique

• un appel de fonction

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 123
traitement langage de programmation
Procédures et fonctions

• Pour tout paramètre formel on fait correspondre un paramètre effectif.

• 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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 124
traitement langage de programmation
Syntaxe Définition d’une procédure

Pour définir une procédure on adoptera la syntaxe suivante :

<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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 125
traitement langage de programmation
Syntaxe Définition d’une procédure
Min_Max( N : entier ; var min, max : entier)
Exemple1 : Var i, x : entier
Début
La procédure suivante permet de lire N valeurs entières et de calculer la plus petite et la plus grande parmi ces
min := 100
N valeurs. Les entiers saisis doivent être supérieurs à 0 et inférieurs à 100.max := 0
pour i de 1 à N faire
Répéter
• Le nom de cette procédure est Min_Max
Lire ( x )
Jqa (x > 0) et (x < 100)
• Les paramètres formels sont : l’entier N comme paramètre donné, les entiers min et max comme paramètres
Si x < min
résultats (précédés par le mot clé var). Alosr min := x
Fsi
• 2 variables locales de type entier : i et x Si x > max
Alors max := x
Fsi
Fpour
Fin

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 126
traitement langage de programmation
Syntaxe Définition d’une fonction

définir une fonction on adoptera la syntaxe suivante

<Nom_fonction>(<liste_par_form>) : <Type-fonction> - <Nom_fonction> , <liste_par_form> ,


<declarat_var_locales> définissent les mêmes concepts
Var <declarat_var_locales> que pour la procédure
Debut
- <Type-fonction> : est un type simple.
<Corps_fonction>
<Nom_fonc> := <valeur> - En effet, l’un des résultats calculés par la fonction est
porté par elle-même. Un type est associé à la fonction
Fin caractérisant ainsi ce résultat.

- <Corps_fonction> : en plus des instructions décrivant le


traitement à effectuer, une instruction d’affectation du
résultat que devrait porter la fonction au nom de la
fonction elle-même.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 127
traitement langage de programmation
Syntaxe Définition d’une fonction

Nous reprenons le problème de l’exemple 1 décrit sous la forme d’une fonction :


Min_Max( N : entier ; var min: entier) : entier
Var i, x, max : entier
Début
min := 100
max := 0
pour i de 1 à N faire
Répéter
Lire ( x )
Jusqu’à (x > 0) et (x < 100)
Si x < min
Alors min := x
Fsi
Si x > max
Alors max := x
Fsi
Fpour
Min_Max := max
Fin
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 128
traitement langage de programmation
Syntaxe Utilisation

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>)

- <Nom> : est le nom de la procédure ou la fonction

- <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.

• La correspondance entre les 2 types de paramètres se fait selon l’ordre d’apparition.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 129
traitement langage de programmation
Syntaxe Utilisation

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 130
traitement langage de programmation
Passage de paramètre

Passage par valeur : valeur du paramètre effectif transmise au paramètre formel.

paramètre donnée

Passage par adresse : l’adresse du paramètre effectif transmise au paramètre formel

paramètre résultat ou donnée/résultat

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 131
traitement langage de programmation
Passage de paramètre

Appelant Appelé Appelant Appelé


Passage par valeur
v Passage par adresse
v

p.formel p.effectif
p.formel p.effectif

• Une copie est transmise Zone mémoire


• Toute modification sur le paramètre formel
n’altère pas le paramètre effectif
• Une adresse est transmise
• Toute modification sur le paramètre formel
altère pas le paramètre effectif

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 132
traitement langage de programmation
Passage de paramètre

Exemple

Passage de paramètres par valeur Passage de paramètres par adresse


ajoute_un(a : entier) inc(var x : entier)
Debut Debut
a := a+1 x := x+1
Fin Fin
Appel : Appel :
Programme Principal Programme Principal
var y : entier
var x : entier
Debut
Debut
y := 100
x := 9
inc(y)
ajoute_un(x) ecrire(y)
ecrire(x) Fin
Fin Valeur affichée 101
Valeur affichée 9
Apprendre à formuler un Traduire son algorithme dans un
Modéliser un problème Définir un algorithme 133
traitement langage de programmation
CHAPITRE 3
1 - Les procédures et les fonctions
IDENTIFIER LES
PARADIGMES 2 – La récursivité
ALGORITHMIQUES

134
Définition

• Une construction est récursive si elle se définit à partir d'elle-même.

• On appelle récursive toute fonction ou procédure qui s’appelle elle même.

Exemple:

0!=1

n! = n * [(n − 1) * (n − 2) · · · * 2 * 1] pour n > 0 factorielle( n : entier ) : entier


Debut
(n-1) ! si n = 0 alors factorielle := 1
sinon factorielle := n * factorielle ( n-1 )
En effet, fsi
Fin
(n-1) ! = (n − 1) * · · · * 2 * 1
Version récursive de la procédure factorielle
D’où, on peut exprimer n ! avec : n! = n*(n-1) !

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 135
traitement langage de programmation
Généralités

Pourquoi étudier la récursivité?

1. La récursivité est un moyen simple pour résoudre un problème

2. La récursivité s’apprête à la preuve formelle de correction d’un algorithme

3. La récursivité représente le mécanisme de base pour de nombreux langages de programmation

Quand Utilise_t_on la récursivité?

• la récursivité quand le problème à résoudre se décompose en 2 ou plusieurs sous problèmes de même


nature que lui mais de complexité moindre.

• 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.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 136
traitement langage de programmation
Analyse récursive

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

2. résoudre chaque sous problème de manière indépendante en suivant la même démarche

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

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 137
traitement langage de programmation
Analyse récursive

Selon cette démarche, le principe d’une analyse récursive d’un problème est basé sur 3 critères:

- une formule de récurrence utilisée lors de la décomposition

- une condition d’arrêt pour la terminaison de la décomposition

- 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).

Dans l’exemple de la factorielle,

- la formule de récurrence est : n! = n*(n-1)!

- Une seule condition d’arrêt qui correspond au cas particulier n=0

- La règle de combinaison est de multiplier la donnée n par le résultat du sous problème.

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 138
traitement langage de programmation
Différents types de récursivité

Il existe plusieurs types de récursivité:

1. récursivité terminale, la fonction se termine avec l’unique appel récursif.

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.

4. récursivité imbriquée, si la fonction contient comme paramètre un appel à elle-même

Apprendre à formuler un Traduire son algorithme dans un


Modéliser un problème Définir un algorithme 139
traitement langage de programmation

Vous aimerez peut-être aussi