Académique Documents
Professionnel Documents
Culture Documents
Chap. 1 Introduction
« Abrégé du calcul par la restauration et la comparaison »
Plan
A. Introduction
B. Décomposition en sous problèmes
C. Le langage algorithmique
T3
A. Introduction
● L'algorithmique, on la pratique tous les jours et
depuis longtemps...
Briques de suite de dessins
Camion de
LEGO pompiers
Laine modèle
Pull irlandais
T4
Définition
algorithme
Données Résultats
T5
Qualités attendues des algorithmes
● Lisibilité
– Un algorithme illisible peut être considéré comme faux !
● Exactitude
– Aptitude d’un programme à fournir le résultat voulu et à
répondre ainsi aux spécifications
● Robustesse
– Aptitude à bien réagir lorsque l’on s’écarte des
conditions normales d’utilisation
● Réutilisabilité
– Reprise possible par un autre programmeur
T6
Quelques problèmes fondamentaux
● Complexité
– En combien de temps un algorithme va-t-il atteindre le
résultat escompté ?
– De quelles ressources a-t-il besoin ?
● Calculabilité :
– Existe-t-il un algorithme qui résolve le problème ?
● Correction
– L'algorithme fournit-il une solution correcte ?
● Utilisation de preuves de programme ou de tests
unitaires
T7
Plan
A. Introduction
B. Décomposition en sous problèmes
C. Le langage algorithmique
T8
B. La décomposition en sous problèmes
→ Décomposer le problème jusqu'à aboutir à des
instructions simples exécutables par l'ordinateur
– « ...diviser chacune des difficultés que j’examinerais en
autant de parties qu’il se pourrait et qu’il serait requis pour
les mieux résoudre. » Descartes
– On parle aussi d' « analyse descendante »
T9
Exemple
● Fabrication de brownies – premier raffinement
T10
Exemple (II)
● Fabrication de brownies – second raffinement
T11
Exemple (III)
● Fabrication de brownies – troisième raffinement
Algorithme : recette du brownie
1. Mélanger les sucres semoule et vanillé, les oeufs et la farine tamisée
2. Faire fondre le beurre
3. Mélanger le beurre à la pâte
4.1 placer le chocolat dans
un récipient 4.2.1 mettre une casserole
sous le robinet
4.2 placer ce récipient 4.2.2 ouvrir l'eau
dans une casserole avec 4.2.3 remplir à moitié d'eau
4. Faire fondre de l'eau bouillante 4.2.4 fermer le robinet
le chocolat 4.2.5 mettre la casserole sur la
4.3 mélanger avec une plaque chauffante
cuillère 4.2.6 allumer la plaque
4.4 attendre que le cho- 4.2.7 attendre l'ébullition
colat soit fondu
5. Mélanger le chocolat à la pâte
6. Mélanger les noix de Pécan et la poudre d'amande à la pâte
7. Verser la pâte dans un moule à gâteau beurré
8. Mettre à cuire 35 minutes dans le four préchauffé à 170°. T12
Plan
A. Introduction
B. Décomposition en sous problèmes
C. Le langage algorithmique
T13
C. Le langage algorithmique
● Un algorithme est décrit en langage algorithmique
« universel »
– Comporte les instructions de base présentes dans les
langages de programmation
– Ne dépend pas :
● du langage de programmation dans lequel il
sera implanté
● de l'ordinateur qui exécutera le programme
correspondant
T15
ABC Ada ADL Algol 60 Algol 68 APL AppleScript
Quelques ARB Assembly Awk BASIC Befunge BETA
langages de Bigwig Bistro Blue Brainfuck C C++ C# Caml
Cecil Cg CHILL Clarion Clean Clipper CLU
program- Cobol CobolScript Cocoa Component
Pascal C-sharp Curl D DATABUS Delphi DOS
mation Batch Dylan E Eiffel ElastiC Erlang Euphoria
Forth Fortran Fortress FP Frontier GLSL Goedel
Groovy Haskell HLSL HTML HTMLScript
HyperCard ICI Icon IDL Intercal Io Jal Java
JavaScript Jovial LabVIEW Lagoona LaTeX
Leda Limbo Lisp Logo Lua m4 Maple
Mathematica MATLAB Mercury Miranda Miva
ML Modula-2 Modula-3 Moto Mumps Oberon
Objective Caml Objective-C Obliq
Occam Oz Pascal Perl PHP Pike PL Pliant PL-SQL
POP-11 PostScript PowerBuilder Prograph
Prolog Proteus Python R REBOL Refal Rexx Rigal
RPG Ruby SAS Sather Scheme Self SETL SGML
Simkin Simula Sisal S-Lang Smalltalk Snobol
SQL Squeak TADS Tcl-Tk Tempo TeX TOM TRAC
Transcript Turing T3X UML VBScript Verilog VHDL
Visual Basic Visual DialogScript Visual
FoxPro Water XML XOTcl YAFL Yorick Z
T16
Un exemple
● Demander la saisie d'un entier au clavier en langage C
Cinq fautes de
Scan('%d',i) syntaxe !!!
T17
Mon premier algorithme
● Afficher la chaîne de caractères « Vive Unix »
Titre
Commentaire
ALGORITHME UnChouetteAlgo
{ Un commentaire sur le rôle de l'algorithme }
DEBUT
Afficher « Vive Unix »
FIN
T18
AP1 - Algorithmique
T20
A. Définition
● Une variable est un emplacement mémoire réservé qui
permet de stocker une valeur d’un certain type
– La valeur peut varier !
– Le type de la variable détermine les valeurs qu’elle peut
contenir.
– Une variable possède un nom qui permet de la
référencer
T21
Plan
A. Définition
B. Type d'une variable
C. Utilisation et affectation
D. Saisie utilisateur
E. Constantes
F. Exercices
T22
B. Type d'une variable
● Une variable est toujours typée.
● Il existe quatre types principaux :
– Entier : les entiers relatifs
● Ex : -534, 0, 1543
– Réel : les réels
● Ex : -75.64, 745.6, 5.0
– Chaîne de caractères
● Ex : « Vive Unix », « oui »
– Booléen : vrai, faux
T23
Pourquoi typer une variable ?
T24
Les opérateurs
● Sur les entiers et les réels, par ordre de priorité :
1. « × » (multiplication) et « / » (division)
2. « + » (addition) et « - » (soustraction)
● Sur les entiers : mod
– mod donne le reste de la division entière
– Exemple : 44 mod 3 = 2
44 3
1 4 14
2
T26
Plan
A. Définition
B. Type d'une variable
C. Utilisation et affectation
D. Saisie utilisateur
E. Constantes
F. Exercices
T27
C. Utilisation d'une variable
● Toujours déclarer une variable avant utilisation !
● Syntaxe :
Nom_variable : type
ALGORITHME UnAutreAlgo
VARIABLES :
PrixHT : réel
DEBUT
...
FIN
T28
Affecter un contenu à une variable : ←
● Syntaxe :
nom_variable ← nom_variable
nom_variable ← expression
nom_variable ← constante
● Exemple :
ALGORITHME CalculPrixTTC
VARIABLES :
PrixHT : réel
PrixTTC : réel
DEBUT
PrixHT ← 5.4
PrixTTC ← PrixHT x 1.196
FIN
PrixTTC contient 6.4584
T29
Attention au type !
● L'expression de droite doit être de même type que la
variable de gauche !
Nom_variable ← Nom_variable
Nom_variable ← Expression
Nom_variable ← Constante
● Mauvais exemple :
ALGORITHME GrosProblème
VARIABLES :
PrixHT : réel
DEBUT
PrixHT ← « Vive Unix »
...
FIN
T30
Plan
A. Définition
B. Type d'une variable
C. Utilisation et affectation
D. Saisie utilisateur
E. Constantes
F. Exercices
T31
D. Saisie utilisateur
● Il est possible de demander à l'utilisateur de saisir la
valeur d'une variable
● Syntaxe :
Saisir nom_variable
Exemple :
ALGORITHME Saisie
VARIABLES :
PrixHT : réel
DEBUT
Saisir PrixHT
...
FIN
T32
Plan
A. Définition
B. Type d'une variable
C. Utilisation et affectation
D. Saisie utilisateur
E. Constantes
F. Exercices
T33
E. Les constantes
● Ce sont des variables dont le contenu ne varie pas !
● Syntaxe :
Exemple :
ALGORITHME UneConstante
CONSTANTE (TauxTVA : réel) ← 19.6
VARIABLES :
PrixHT : réel
DEBUT
...
FIN
T34
Plan
A. Définition
B. Type d'une variable
C. Utilisation et affectation
D. Saisie utilisateur
E. Constantes
F. Exercices
T35
F. Exercice 1
● Que contiennent les variables ABCD à l'issue de
l'algorithme ?
ALGORITHME Exercice1
VARIABLES : A :
A, B, C, D : entiers B :
DEBUT C :
A←1 D :
B←2
C←3
D←A
A←A+1
B←D+C
C←D+1
FIN
T36
F. Exercice 2
● Relever les instructions incorrectes contenues dans
l'algorithme ci-dessous.
ALGORITHME Exercice2
VARIABLES :
A, B, C, moyMath : entiers
DEBUT
B←5
A←B/3
saisir moyMath
C←C+2
FIN
T37
Exercice 3 : fondamental !
● On souhaite échanger le contenu des variables A et B.
Compléter l'algorithme.
ALGORITHME Echange
{ permuter le contenu des variables A et B }
VARIABLES :
A : entier
B : entier
DEBUT
A←1
B←2
FIN
T38
AP1 - Algorithmique
T40
A. Introduction
T41
Plan
A. Introduction
B. Schéma conditionnel SI
C. Schéma conditionnel CAS PARMI
D. Connecteurs logiques
T42
B. Schéma conditionnel SI
● Exécuter une suite d'instructions si une condition est
vérifiée
● Syntaxes :
SI condition ALORS SI condition ALORS
suite-1 suite-1
SINON FINSI
suite-2
FINSI
→ Si l'expression booléenne condition est vraie, alors la
suite d'instructions suite-1 est exécutée, sinon c'est suite-
2 (si elle existe)
T43
Schéma conditionnel SI – exemple 1
ALGORITHME Division
VARIABLES :
a, b : entiers
DEBUT
Saisir a, b
SI b != 0 ALORS
Afficher « La division vaut », a/b
SINON
Afficher « Division impossible »
FINSI
FIN
T44
Schéma conditionnel SI – exemple 2
Il est possible d'imbriquer plusieurs enchaînements alternatifs
ALGORITHME baccalauréat
{ Indique la mention obtenue au bac }
VARIABLES :
note : réel
DEBUT
Saisir note
SI note ≥ 12 ALORS
Afficher "Reçu avec mention"
SINON SI note ≥ 10 ALORS
Afficher "Passable"
Penser à indenter
SINON
un algorithme !
Afficher "Insuffisant"
FINSI
FINSI
FIN
T45
Schéma conditionnel SI – exemple 3
Il est possible d'imbriquer plusieurs enchaînements alternatifs
ALGORITHME monsieur-madame
VARIABLES :
abréviation : chaîne de caractères
DEBUT
Saisir abréviation
SI abréviation = "M" ALORS
Afficher "Monsieur"
SINON SI abréviation = "Mme" ALORS
Afficher "Madame"
SINON SI abréviation = "Mlle" ALORS
Afficher "Mademoiselle"
SINON afficher "Monsieur,Madame" Lourd et peu
FINSI lisible...
FINSI
FINSI
FIN
T46
Plan
A. Introduction
B. Schéma conditionnel SI
C. Schéma conditionnel CAS PARMI
D. Connecteurs logiques
T47
B. Schéma conditionnel CAS PARMI
● Pour comparer une variable à une énumération de
valeurs connues à l’avance
● Syntaxe :
CAS variable PARMI
valeur-1 : suite-1
valeur-2 : suite-2
valeur-3 : suite-3
…
AUTRE : suite
FINCAS
→ suite-i est exécutée si variable vaut valeur-i.
→ suite est exécutée si variable ne prend aucune des
valeurs listées
T48
Exemple 3-version 2
T49
Plan
A. Introduction
B. Schéma conditionnel SI
C. Schéma conditionnel CAS PARMI
D. Connecteurs logiques
T50
D. Connecteurs logiques
T51
NON logique
● Table de vérité :
A NON A
vrai faux
faux vrai
● Exemples :
– Si A vaut « il pleut », NON A vaut « il ne pleut pas »
– Si A vaut « il ne pleut pas », NON A vaut « il pleut »
T52
OU logique
● Table de vérité :
A B A OU B
faux faux faux
faux vrai vrai
vrai faux vrai
vrai vrai vrai
● Exemple : S'il pleut ou s'il fait froid, alors je reste chez moi
– Je reste chez moi dans trois cas : si il pleut ou si il fait froid
ou les deux !
T53
ET logique
● Table de vérité :
A B A ET B
faux faux faux
faux vrai faux
vrai faux faux
vrai vrai vrai
● Exemple : S'il pleut et s'il gèle, alors il y a du verglas
– Il y a du verglas dans un seul cas : il pleut et il gèle en même
temps
T54
Priorité des connecteurs logiques
● En l'absence de parenthèse, les priorités sont :
1. NON
2. ET
3. OU
SI C = faux ALORS
Afficher « slurp »
FINSI
SI D = vrai ALORS
Afficher « slurp »
FINSI
FIN T56
AP1 - Algorithmique
T58
A. Introduction
● But des schémas itératifs : exécuter plusieurs fois une
même suite d'instructions
T59
Plan
A. Introduction
B. La boucle TANTQUE
C. La boucle REPETER JUSQU'A
D. La boucle POUR
E. Synthèse
T60
B. Enchaînement répétitif TANTQUE
● Syntaxe :
TANTQUE condition FAIRE
suite-instructions
FINTANTQUE
T61
Enchaînement TANTQUE – exemple 1
ALGORITHME tantque
{ Saisir un entier supérieur à 20 }
VARIABLES :
nb : entier
DEBUT
Afficher « Entrer un entier supérieur à 20 »
Saisir nb
TANTQUE nb < 20 FAIRE
Afficher « Entrer un entier supérieur à 20 »
Saisir nb
FINTANTQUE
FIN
T62
Enchaînement TANTQUE – exemple 2
ALGORITHME bug-tantque
VARIABLES :
nb : entier
DEBUT
nb ← 30
TANTQUE nb < 10 FAIRE
...
FINTANTQUE
FIN
ALGORITHME encore-un-bug-tantque
VARIABLES :
nb : entier
DEBUT
nb ← 6
TANTQUE nb < 10 FAIRE
Afficher « AP1 c'est vraiment bien »
FINTANTQUE
FIN
T65
C. Enchaînement répétitif REPETER
● Syntaxe :
REPETER
suite-instructions
JUSQU'A condition
T68
D. Enchaînement répétitif POUR
● Syntaxe :
POUR variable ALLANT DE val-deb A val-fin FAIRE
suite-instructions
FINPOUR
T69
Enchaînement POUR – exemple 1
ALGORITHME pour
VARIABLES :
nb : entier
DEBUT
POUR nb ALLANT DE 1 A 5 FAIRE
Afficher nb
FINPOUR
FIN
12345
T70
Enchaînement POUR – exemple 2
Il est possible d'utiliser un pas supérieur à 1...
ALGORITHME unautrepour
VARIABLES :
nb : entier
DEBUT
POUR nb ALLANT DE 0 A 8 PAR PAS DE 2 FAIRE
Afficher nb
FINPOUR
FIN
02468
T73
Plan
A. Introduction
B. La boucle TANTQUE
C. La boucle REPETER JUSQU'A
D. La boucle POUR
E. Synthèse
T74
E. Synthèse : choisir POUR / TANTQUE /
REPETER
Boucle
Traitement
oui REPETER
exécuté au
moins 1
non fois ? non Boucle
Nombre
d'itérations
TANTQUE
connu ? oui
Boucle POUR
T75
AP1 - Algorithmique
T77
A. Introduction
● On souhaite manipuler les températures moyennes des
12 mois d'une année.
ALGORITHME Températures
VARIABLES :
Tjan, Tfev, Tmar, Tavr, Tmai, Tjuin, Tjuil, Taout,
Tsep, Toct, Tnov, Tdec : réels
DEBUT
... Lourd !
FIN
T80
B. Déclaration d'un tableau à 1 dimension
● Il s'agit des tableaux à 1 ligne
● Exemple : tableau de réels tab à 8 cases
tab
● Généralement, l'indice de départ vaut 1, voire 0 (en langage C)
T81
Déclaration d'un tableau à 2 dimensions
● Il s'agit des tableaux à plusieurs lignes et plusieurs
colonnes
● Exemple d'un tableau T de 2 lignes et 7 colonnes :
lignes colonnes
T
36
T84
C. Un algorithme essentiel
Comment afficher le contenu d'un tableau tab à 1 dimension ?
ALGORITHME AfficherTab_v1
{ afficher un tableau à 1 dimension }
VARIABLES :
tab : tableau [1..10] de réels
DEBUT
{ On suppose que tab est déjà rempli }
afficher tab[1]
afficher tab[2]
afficher tab[3]
afficher tab[4]
afficher tab[5] Lourd !
afficher tab[6]
afficher tab[7]
afficher tab[8]
afficher tab[9]
afficher tab[10]
FIN T85
Un algorithme essentiel
Comment afficher le contenu d'un tableau tab à 1 dimension ?
ALGORITHME AfficherTab_v2
{ afficher un tableau à 1 dimension }
VARIABLES :
tab : tableau [1..10] de réels
DEBUT
{ On suppose que tab est déjà rempli }
FIN
T86
Un algorithme essentiel
Comment afficher le contenu d'un tableau tab à 1 dimension ?
ALGORITHME AfficherTab_v2
{ afficher un tableau à 1 dimension }
VARIABLES :
tab : tableau [1..10] de réels
i : entier
DEBUT
{ On suppose que tab est déjà rempli }
POUR i ALLANT DE
FIN
T87
Un algorithme essentiel
Comment afficher le contenu d'un tableau tab à 1 dimension ?
ALGORITHME AfficherTab_v2
{ afficher un tableau à 1 dimension }
VARIABLES :
tab : tableau [1..10] de réels
i : entier
DEBUT
{ On suppose que tab est déjà rempli }
POUR i ALLANT DE 1 à 10 FAIRE
Afficher tab[i]
FINPOUR
FIN
T88
Un dernier exemple
Comment afficher le
contenu du tableau T ? T
ALGORITHME AfficherTab2D
{ afficher un tableau à 2 dimensions }
VARIABLES :
T : tableau [1..2][1..7] d'entiers
DEBUT
{ On suppose que T est déjà rempli }
FIN T89
Un dernier exemple
Comment afficher le
contenu du tableau T ? T
ALGORITHME AfficherTab2D
{ afficher un tableau à 2 dimensions }
VARIABLES :
T : tableau [1..2][1..7] d'entiers
lig, col : entiers
DEBUT
{ On suppose que T est déjà rempli }
POUR lig ALLANT DE 1 à 2 FAIRE
POUR
FIN T90
Un dernier exemple
Comment afficher le
contenu du tableau T ? T
ALGORITHME AfficherTab2D
{ afficher un tableau à 2 dimensions }
VARIABLES :
T : tableau [1..2][1..7] d'entiers
lig, col : entiers
DEBUT
{ On suppose que T est déjà rempli }
POUR lig ALLANT DE 1 à 2 FAIRE
POUR col ALLANT DE 1 à 7 FAIRE
FIN T91
Un dernier exemple
Comment afficher le
contenu du tableau T ? T
ALGORITHME AfficherTab2D
{ afficher un tableau à 2 dimensions }
VARIABLES :
T : tableau [1..2][1..7] d'entiers
lig, col : entiers
DEBUT
{ On suppose que T est déjà rempli }
POUR lig ALLANT DE 1 à 2 FAIRE
POUR col ALLANT DE 1 à 7 FAIRE
Afficher T[lig][col]
FINPOUR
FINPOUR
FIN T92
AP1 - Algorithmique
04/12/13 T94
A. Introduction
● Les variables → stocker une valeur d'un type donné
● Les tableaux → stocker plusieurs valeurs de même
type
04/12/13 T95
Plan
A. Introduction
B. Les structures
C. Les tableaux de structures
04/12/13 T96
B. Les structures
● Syntaxe :
TYPE nom_du_type = STRUCTURE
Champ_1 : type
Champ_2 : type
…
Champ_n : type
FINSTRUCTURE
04/12/13 T97
Imbrication de structures
● Il est possible d'imbriquer une structure dans une autre
structure
04/12/13 T98
Déclaration d'un variable de type structure
● Exemple
ALGORITHME machin
TYPE étudiant = STRUCTURE
nom: chaîne de caractères
prénom : chaîne de caractères
age : entier
moyenne_AP1 : réel
FINSTRUCTURE
VARIABLES
etud1 : etudiant
04/12/13 T99
Accès aux champs d'une structure
● Syntaxe : nom_variable • nom_champ
04/12/13 T101
C. Tableau de structures
● Exemple
ALGORITHME machin
TYPE étudiant = STRUCTURE
nom: chaîne de caractères
prénom : chaîne de caractères
age : entier
moyenne_AP1 : réel
FINSTRUCTURE
VARIABLES
promotion : tableau [1..160] d'étudiant
DEBUT Affectation de la valeur
... Stéphanie dans le champ
promotion[3].prénom ← Stéphanie prénom de la structure
étudiant contenue dans
…
la 3ème case du tableau etud
04/12/13 T102
Exercice : Calculer la moyenne de promotion d'AP1
ALGORITHME moyenne_AP1
TYPE étudiant = STRUCTURE
nom: chaîne de caractères
prénom : chaîne de caractères
age : entier
moyenne_AP1 : réel
FINSTRUCTURE
VARIABLES
promotion : tableau [1..160] d'étudiant
DEBUT { on suppose que promotion est déjà rempli }
FIN
04/12/13 T103
AP1 - Algorithmique
04/12/13 T105
Exemple (I)
ALGORITHME un_super_méga_gros_algo
VARIABLES
...
N, i, fact : entier
...
DEBUT
...
...
saisir n
fact ← 1
POUR i allant de 2 à N FAIRE Déléguer ce
calcul à un sous-
fact ← fact × i algorithme
FINPOUR
...
...
FIN
04/12/13 T106
Exemple (II)
ALGORITHME un_super_méga_gros_algo
… factorielle(...)
DEBUT
…
FIN
VARIABLES
...
n, fact : entier
…
DEBUT On dit que l'algorithme
...
...
appelle le sous
saisir n programme factorielle
fact ← factorielle(n)
...
...
FIN
04/12/13 T107
A. Introduction
● Un sous-programme est un « morceau » d'algorithme
conçu pour faire un traitement :
– bien défini
– bien délimité
– si possible indépendant du contexte particulier de
l’algorithme appelant.
04/12/13 T108
Avantages des sous programmes
04/12/13 T109
Plan
A. Introduction
B. Fonction
C. Procédure
D. Portée d'une variable
E. Synthèse
04/12/13 T110
B. Notion de fonction
● Fonction : boîte noire qui
– Prend en entrée des valeurs (paramètres)
– Applique un traitement sur ces valeurs
– Retourne un (et un seul) résultat en sortie
Paramètres
x Retour
z=f(x,y)
Fonction
y
04/12/13 T111
Exemple 1 : fonction « moy_int »
Paramètres
X : entier
z=(X+Y)/2 : réel
moy_int
Y : entier
Retour
Type de la donnée
renvoyée par la fonction
FONCTION moy_int(x, y) : réel
PARAMETRES : x , y : entiers
DEBUT
… Paramètres d'entrée
FIN de la fonction
04/12/13 T112
Exemple 1 : fonction « moy_int »
Paramètres
X : entier
z=(X+Y)/2 : réel
moy_int
Y : entier
Retour
VARIABLES
a, b : entiers
res : réel
a et b sont appelés
DEBUT arguments
…
res ← moy_int( a , b )
04/12/13 ... T114
Ordre d'exécution des instructions
ALGORITHME un_algo
VARIABLES
a, b : entiers
res : réel
DEBUT
… 1
res ← moy_int( a , b ) 2
04/12/13 ... 5 T115
Un exemple d'exécution
ALGORITHME un_algo
FONCTION moy_int( x , y ) : réel 2. x vaut 5, y vaut 8
PARAMETRES : x , y : entiers
VARIABLE : z : réel
DEBUT
z ← (x+y) / 2
retourner z 3. z vaut 6.5
FIN
VARIABLES
a, b : entiers
res : réel
DEBUT
…
a←5
b←8
res ← moy_int( a , b ) 1. a vaut 5, b vaut 8
04/12/13
... 4. res vaut 6.5 T116
Plan
A. Introduction
B. Fonction
C. Procédure
D. Portée d'une variable
E. Synthèse
04/12/13 T117
C. Notion de procédure
● Procédure: sous programme qui ne retourne pas
directement de résultat
– Prend en entrée des valeurs
– … qui peuvent servir à retourner un résultat
Paramètres
y Procédure
04/12/13 T118
Exemple 1 : procédure « aff_somme » (I)
Paramètres
a : entier
aff_somme
b : entier Affiche a+b
PROCEDURE aff_somme(a, b)
{ affiche la somme de a et b }
PARAMETRES : a, b : entiers
DEBUT
…
FIN
04/12/13 T119
Exemple 1 : procédure « aff_somme » (II)
Paramètres
a : entier
aff_somme
b : entier Affiche a+b
PROCEDURE aff_somme(a, b)
PARAMETRES : a, b : entiers
VARIABLE : som : entier
DEBUT
som ← a + b
Afficher som
FIN
04/12/13 T120
Exemple 1 : procédure « aff_somme » (III)
a et b sont appelés
ALGORITHME un_algo paramètres formels
PROCEDURE aff_somme( a , b )
PARAMETRES : a, b : entiers
VARIABLE : som : entier
DEBUT
som ← a + b
Afficher som
FIN
VARIABLES
i1, i2 : entiers
a : entier →
← a+b som_sous On souhaite renvoyer
b : entier → Calculer a+b et a-b deux valeurs au
← a-b
programme appelant
PROCEDURE som_sous(a, b)
PARAMETRES : a, b : entiers
DEBUT
…
FIN
04/12/13 T123
Exemple 2 : procédure « som_sous »
Paramètres
a : entier →
← a+b som_sous
b : entier → Calculer a+b et a-b
← a-b
PROCEDURE som_sous(a, b)
PARAMETRE : a, b : entiers
VARIABLES : temp : entier
DEBUT
temp ← a+b
b ← a-b
a ← temp
FIN
04/12/13 T124
Exemple 2 : procédure « som_sous » (IV)
ALGORITHME un_algo
PROCEDURE som_sous(a, b)
PARAMETRES : a, b : entiers 2. a vaut 2, b vaut 3
VARIABLES : temp : entier
DEBUT
temp ← a+b
b ← a-b 3. b vaut -1
a ← temp 4. a vaut 5
FIN
VARIABLES
i1, i2 : entiers
DEBUT
…
i1 ← 2
i2 ← 3
som_sous( i1 , i2 ) 1. i1 vaut 2, i2 vaut 3
04/12/13 ... 5. i1 vaut 2, i2 vaut 3
T125
Passage par valeur
● Les arguments de som_sous sont passés par valeur
→ Les modifications réalisées dans la procédure sur
les paramètres formels ne se répercutent pas sur les
paramètres réels du programme appelant
04/12/13 T126
Passage par adresse
● La solution : passer les arguments de som_sous par
adresse
→ Les instructions de la procédure peuvent modifier
les paramètres réels
04/12/13 T127
Exemple 2 : procédure « som_sous »
ALGORITHME un_algo
PROCEDURE som_sous(a, b)
PARAMETRES par ADRESSE : a, b : entiers 2. a vaut 2, b vaut 3
VARIABLES : temp : entier
DEBUT
temp ← a+b
b ← a-b 3. b vaut -1
a ← temp 4. a vaut 5
FIN
VARIABLES
i1, i2 : entiers
DEBUT
…
i1 ← 2
i2 ← 3
som_sous( i1 , i2 ) 1. i1 vaut 2, i2 vaut 3
...
04/12/13 5. i1 vaut 5, i2 vaut -1
T128
Exemple 2 : procédure « som_sous » améliorée
ALGORITHME un_algo
PROCEDURE som_sous(a, b, som, sous)
PARAMETRES par VALEUR : a, b : entiers
PARAMETRES par ADRESSE : som, sous : entiers
DEBUT
som ← a+b
sous ← a-b
FIN
VARIABLES
i1, i2, res1, res2 : entiers
DEBUT
…
i1 ← 2
i2 ← 3
som_sous(i1, i2, res1, res2 )
...
04/12/13 i1 vaut 2, i2 vaut 3, res1 vaut 5, res2 vaut -1 T129
Retour à « aff_somme »
ALGORITHME un_algo
PROCEDURE aff_somme(a, b)
PARAMETRE par VALEUR : a, b : entiers
VARIABLE : som : entier
DEBUT
som ← a + b
Afficher som
FIN
VARIABLES
i1, i2 : entiers
DEBUT
…
i1 ← 2
i2 ← 3
aff_somme( i1 , i2 )
04/12/13
... T130
Retour à « moy_int »
FONCTION moy_int(x, y) : réel
Est équivalent à
PARAMETRES : x , y : entiers
VARIABLE : z : réel
DEBUT
z ← (x+y) / 2
retourner z
FIN
04/12/13 T132
D. Portée d'une variable
● La portée d'une variable est l'ensemble des procédures et
fonctions où cette variable est connue (et peut donc être
utilisée)
04/12/13 T136
E. Synthèse : structure d'un algorithme
ALGORITHME nom_de_l'algo
DEBUT
… Instructions du prog. prin.
FIN
04/12/13 T137
AP1 - Algorithmique
04/12/13 T139
A. Introduction
● Un sous-programme récursif est un sous-programme qui
s'appelle lui-même un certain nombre de fois
04/12/13 T140
Plan
A. Introduction
B. Exemple : factorielle
C. Synthèse
D. Exercice
04/12/13 T141
B. Exemple : factorielle
● Formulation classique :
→ N ! = 1 × 2 × 3 × 4 × … × N-1 × N
● Formulation récursive:
→ N ! = (N – 1) ! × N Avec 0 ! = 1
Point d'arrêt
0 ! = 1 Indispensable !!!
04/12/13 T143
B. Exemple : factorielle
● L'algorithme :
04/12/13 T144
Plan
A. Introduction
B. Exemple : factorielle
C. Synthèse
D. Exercice
04/12/13 T145
C. Synthèse
04/12/13 T146
C. Synthèse (II)
● La programmation récursive :
– Est très économique pour le programmeur
● Permet de résoudre élégamment un problème en très peu
d'instructions
– Est gourmande en ressource machine
● Création de variables temporaires à chaque « tour » de
fonction
● Problème de stack overflow (dépassement de pile) si
appel récursif à l'infini
– Mais les compilateurs modernes optimisent et la
programmation récursive est aussi efficace que la
programmation itérative
04/12/13 T148
D. Exercice : fonction puissance
●
Donner une définition récursive de an
→
FINSI
FIN
04/12/13 T149