Vous êtes sur la page 1sur 149

AP1 - Algorithmique

Chap. 1 Introduction

IUT d'Amiens, département Informatique  année universitaire 2012/2013  AP1 Algo


Le mathématicien perse Al Khuwarizmi

« 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

Meuble en kit notice de montage


Cuisine équipée

Laine modèle
Pull irlandais

Farine, oeufs, recette


Forêt noire
chocolat, etc...

T4
Définition

● Algorithme : ensemble de règles opératoires dont


l'exécution permet de résoudre un problème donné
– Exécution logique mais non intelligente

algorithme
Données Résultats

● Algorithmique : science qui étudie l’application des


algorithmes à l’informatique

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

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. Faire fondre le chocolat
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°.

T10
Exemple (II)
● Fabrication de brownies – second 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 placer ce récipient dans une casserole
4. Faire fondre le chocolat avec de l'eau bouillante
4.3 mélanger avec une cuillère
4.4 attendre que le chocolat 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°.

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

Énoncé du Algorithme Programme


problème (universel) (lié à une machine)

Attention. Ne pas se laisser aveugler par l'objectif final : le codage !


T14
Pourquoi un langage algorithmique ?

● Séparer les difficultés :


– Inhérentes au problème à résoudre
– Propres au langage de programmation
● Plus abstrait, plus lisible, plus concis...
→ Met en avant l’essence de l’algorithme

Énoncé du Algorithme Programme


problème (universel) (lié à une machine)

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

Correct, mais pas très


scanf("%d",&i) ;
lisible

Saisir i Clair, concis, lisible

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

Afficher : affiche à l'écran un


message à destination de l'utilisateur

T18
AP1 - Algorithmique

Chap. 2 Les variables

IUT d'Amiens, département Informatique  année universitaire 2012/2013  AP1 Algo


Plan
A. Définition
B. Type d'une variable
C. Utilisation et affectation
D. Saisie utilisateur
E. Constantes
F. Exercices

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

Attention. Toujours donner


un nom significatif à une
variable !
PrixHT 56.80 Pas de toto, pouet, zk142...
De type réel

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 ?

● Pour augmenter la lisibilité du programme

● Afin d'économiser en espace mémoire


– Par exemple, en langage C# :
● Un entier est codé sur 32 bits
● Un réel est codé sur 64 bits
● Un booléen est codé sur 8 bits

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

– Exercice : comment savoir si un entier x est pair ?


Si x mod 2 = 0, l'entier est pair, sinon il est impair. T25
Les opérateurs de comparaison
● Ils sont :
=, ≠, ≤, <, ≥, >

● Une expression contenant un de ces opérateurs


renvoie un booléen
– « 2 = 5 » vaut faux
– « 10 > 8 » vaut vrai

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 :

CONSTANTE (nom_variable : type) ← expression

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

Chap. 3 Les schémas conditionnels

IUT d'Amiens, département Informatique  année universitaire 2012/2013  AP1 Algo


Plan
A. Introduction
B. Schéma conditionnel SI
C. Schéma conditionnel CAS PARMI
D. Connecteurs logiques

T40
A. Introduction

● Jusqu'à présent a été vu le schéma séquentiel


– Toutes les instructions de l'algorithme sont exécutées les
unes après les autres

● Il est possible de conditionner l'exécution d'instructions


– Par l'intermédiaire d'un schéma conditionnel
– Exemple : « s’il pleut, je prends mon parapluie et je mets
mes bottes, sinon je mets mes sandales. »

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

ALGORITHME monsieur-madame, version 2


VARIABLES :
abréviation : chaîne de caractères
DEBUT
Saisir abréviation
CAS abréviation PARMI
"M" : Afficher " Monsieur"
"Mme" : Afficher " Madame"
"Mlle" : Afficher " Mademoiselle"
autre : Afficher " Monsieur, Madame"
FINCAS
FIN

T49
Plan
A. Introduction
B. Schéma conditionnel SI
C. Schéma conditionnel CAS PARMI
D. Connecteurs logiques

T50
D. Connecteurs logiques

● Ils permettent de manipuler une expression formée de


plusieurs conditions
– Exemple : s'il pleut ou s'il neige, alors je mets ma capuche

● Il existe trois connecteurs logiques de base :


– NON
– OU
– ET

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

● Exercice. Donner la valeur des expressions booléennes


suivantes avec A valant vrai, B et C valant faux
– NON C
– A OU C
– NON C ET A
– A OU B ET C
– (A OU B) ET C
T55
Exercice
ALGORITHME exercice Réécrire plus simplement 
VARIABLES : les structures condition­
A, B, C, D : booléen nelles ci dessous.
DEBUT
...
SI A = vrai ALORS
SI B = vrai ALORS
Afficher « burp »
FINSI
FINSI

SI C = faux ALORS
Afficher « slurp »
FINSI
SI D = vrai ALORS
Afficher « slurp »
FINSI
FIN T56
AP1 - Algorithmique

Chap. 4 Les schémas itératifs

IUT d'Amiens, département Informatique  année universitaire 2012/2013  AP1 Algo


Plan
A. Introduction
B. La boucle TANTQUE
C. La boucle REPETER JUSQU'A
D. La boucle POUR
E. Synthèse

T58
A. Introduction
● But des schémas itératifs : exécuter plusieurs fois une
même suite d'instructions

● Il existe trois types de schéma itératif :


– Boucle TANTQUE
– Boucle REPETER JUSQU'A
– Boucle POUR... FINPOUR

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

→ suite-instructions est exécutée tant que l'expression


booléenne condition vaut vrai.
– Dès que condition vaut faux, on quitte la boucle

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

On ne rentre jamais dans la boucle TANTQUE :


la condition est fausse dès le départ !
→ Il est donc possible de ne faire aucune
itération dans une boucle TANTQUE
T63
Enchaînement TANTQUE – exemple 3

ALGORITHME encore-un-bug-tantque
VARIABLES :
nb : entier
DEBUT
nb ← 6
TANTQUE nb < 10 FAIRE
Afficher « AP1 c'est vraiment bien »
FINTANTQUE
FIN

Boucle infinie : nb n'est pas modifié dans


le corps de la boucle TANTQUE !
→ Veiller à ce que la condition devienne
fausse au bout d'un certain temps
T64
Plan
A. Introduction
B. La boucle TANTQUE
C. La boucle REPETER JUSQU'A
D. La boucle POUR
E. Synthèse

T65
C. Enchaînement répétitif REPETER
● Syntaxe :
REPETER
suite-instructions
JUSQU'A condition

→ suite-instructions est exécutée tant que l'expression


booléenne condition vaut faux.
– Dès que condition vaut vrai, on quitte la boucle

condition est évaluée après le


passage dans la boucle. Donc suite-
instructions est au moins exécutée
une fois !
T66
Comparaison TANTQUE – JUSQU'A
ALGORITHME tantque
VARIABLES : Ces deux
nb : entier algorithmes
DEBUT
Afficher « Entrer un entier supérieur à 20 » sont
Saisir nb équivalents
TANTQUE nb < 20 FAIRE
Afficher « Entrer un entier supérieur à 20 »
Saisir nb
FINTANTQUE ALGORITHME jusqu'a
FIN VARIABLES :
nb : entier
DEBUT
REPETER
Afficher « Entrer un entier supérieur à 20 »
Saisir nb
JUSQU'A nb ≥ 20
FIN
T67
Plan
A. Introduction
B. La boucle TANTQUE
C. La boucle REPETER JUSQU'A
D. La boucle POUR
E. Synthèse

T68
D. Enchaînement répétitif POUR
● Syntaxe :
POUR variable ALLANT DE val-deb A val-fin FAIRE
suite-instructions
FINPOUR

→ variable prend successivement par pas de 1 les


valeurs comprises entre val-deb et val-fin
→ suite-instructions est exécutée pour chacune de ces
valeurs

L'utilisation de cette boucle POUR


suppose connu le nombre
d'itérations

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

… voire un pas négatif


T71
Attention !
Ne pas modifier la variable de contrôle de la
boucle dans la boucle !

POUR nb ALLANT DE 1 A 5 FAIRE


nb ← 4 Boucle infinie !

FINPOUR

POUR nb ALLANT DE 1 A 5 FAIRE


nb ← 12
Sortie forcée :
… interdit !
12345
FINPOUR

POUR nb ALLANT DE 1 A 5 FAIRE Sortie


Saisir nb incontrôlée :

FINPOUR interdit !
T72
Comparaison POUR / TANTQUE
ALGORITHME pour
VARIABLES : Ces deux
nb : entier algorithmes sont
DEBUT
POUR nb ALLANT DE 1 A 5 FAIRE
équivalents
Afficher nb
FINPOUR
FIN ALGORITHME tantque
VARIABLES :
nb : entier
DEBUT
→ La boucle 12345
nb ← 1
TANTQUE est TANTQUE nb ≤ 5 FAIRE
universelle : les Afficher nb
boucles POUR et nb ← nb + 1
REPETER en FINTANTQUE
découlent FIN

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

Chap. 5 Les tableaux

IUT d'Amiens, département Informatique  année universitaire 2012/2013  AP1 Algo


Plan
A. Définition
B. Déclaration et utilisation
C. Quelques algorithmes

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

→ Solution : utiliser un tableau


Jan Fév Mars Avr Déc

Tab 4.8 5.2 7.6 9.1 ... 4.2


T78
A. Définition
● Un tableau est un regroupement de variables de même
type
– Il est identifié par un nom
– Chaque case du tableau est numérotée par un indice.
→ Chaque case du tableau est donc caractérisée par le nom
du tableau et son indice suivant la notation nom[indice]

Exemple : tab[4] vaut 2 T79


Plan
A. Définition
B. Déclaration et utilisation
C. Quelques algorithmes

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 : tableau [1..8] de réels

Indices Type des


min et max éléments

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 :

T : tableau [1..2] [1..7] d'entiers

lignes colonnes

A noter. Il est possible de généraliser pour des tableaux à N


dimensions (3 en pratique) T82
Tableau à 2 dimensions - exemples

T
36

● Qu'affiche à l'écran l'instruction : afficher T[1] [7]


8

● Que produit l'instruction : T[2] [4] ← 36

● Que produit l'instruction : T ← 458


Incorrect : impossible d'affecter globalement un 
tableau T83
Plan
A. Définition
B. Déclaration et utilisation
C. Quelques algorithmes

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

Chap. 6 Les structures

IUT d'Amiens, département Informatique  année universitaire 2012/2013  AP1 Algo


Plan
A. Introduction
B. Les structures
C. Les tableaux de structures

04/12/13 T94
A. Introduction
● Les variables → stocker une valeur d'un type donné
● Les tableaux → stocker plusieurs valeurs de même
type

● Problème : comment représenter


– Un étudiant, avec ses nom, prénom, âge, moyenne_AP1 ?
● De types différents !
– Une promotion ?
● Un « tableau d'étudiants » !

Une solution : les structures

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

● Exemple : TYPE étudiant = STRUCTURE


nom: chaîne de caractères
prénom : chaîne de caractères
age : entier
moyenne_AP1 : réel
FINSTRUCTURE

04/12/13 T97
Imbrication de structures
● Il est possible d'imbriquer une structure dans une autre
structure

TYPE adresse = STRUCTURE


numero: entier
rue: chaîne de caractères
ville: chaîne de caractères
FINSTRUCTURE

TYPE étudiant = STRUCTURE


nom: chaîne de caractères
prénom : chaîne de caractères
coordonnées : adresse
age : entier
moyenne_AP1 : réel
FINSTRUCTURE

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

DEBUT etud1 est une variable


... de type structure etudiant

04/12/13 T99
Accès aux champs d'une structure
● Syntaxe : nom_variable • nom_champ

● 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 Affectation de la valeur Julie
etud1 : étudiant dans le champ prénom de
la structure étudiant etud1
DEBUT
etud1.prénom ← Julie
saisir etud1.age
04/12/13 … T100
Plan
A. Introduction
B. Les structures
C. Les tableaux de structures

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

Chap. 7 Sous programmes

04/12/13 I U T d ' A m i e n s , d é p a r t e m e n t I n f o r m a t i q u e  a n n é e u n i v e r s i t a i r e 2 0 1 2 / 2 0 1 3  A P 1 A l g oT104


Plan
A. Introduction
B. Fonction
C. Procédure
D. Portée d'une variable
E. Synthèse

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.

● On distingue deux types de sous programmes :


– Les fonctions
– Les procédures

04/12/13 T108
Avantages des sous programmes

● Ré-utilisabilité d'algorithmes déjà existants


– Un sous programme peut être utilisé dans beaucoup
d'algorithmes

● Facilitent la décomposition en sous problèmes :


– Un sous programme par sous problème
→ grande lisibilité des algorithmes

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

FONCTION moy_int(x, y) : réel


PARAMETRES : x , y  : entiers
VARIABLE : z : réel
DEBUT
z ← (x+y) / 2
retourner z
FIN
Quitter la fonction et
retourner z au programme appelant
04/12/13 T113
Appel d'une fonction
ALGORITHME un_algo

FONCTION moy_int( x , y ) : réel


PARAMETRES : x , y  : entiers
VARIABLE : z : réel
DEBUT
z ← (x+y) / 2
retourner z
FIN

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

FONCTION moy_int(x, y) : réel


PARAMETRES : x , y  : entiers
VARIABLE : z : réel
DEBUT Ordre d'exécution
z ← (x+y) / 2 3
retourner z 4
FIN

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

DEBUT i1 et i2 sont appelés


paramètres réels

aff_somme( i1 , i2 )
...
04/12/13 T121
Exemple 1 : procédure « aff_somme » (IV)
ALGORITHME un_algo
PROCEDURE aff_somme( a , b )
PARAMETRE : a, b : entiers 2. a vaut 2, b vaut 3
VARIABLE : som : entier
DEBUT
som ← a + b 3. som vaut 5
Afficher som
FIN
VARIABLES
i1, i2 : entiers
DEBUT

i1 ← 2
i2 ← 3
aff_somme( i1 , i2 ) 1. i1 vaut 2, i2 vaut 3
04/12/13
... T122
Exemple 2 : procédure « som_sous »
Paramètres

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

● Pourquoi ? Car les paramètre formels sont une copie


des paramètres réels.

A retenir. On utilise le passage par va-


leur quand les paramètres réels ne doivent pas
être modifiés par la procédure

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

● Pourquoi ? Car les paramètre formels reçoivent


l'adresse mémoire des paramètres réels.

A retenir. On utilise le passage par adresse


quand les paramètres réels doivent être modifiés
par la procédure

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

PROCEDURE moy_int(x, y,m)


PARAMETRES par VALEUR : x , y  : entiers
PARAMETRES par ADRESSE : m : réel
DEBUT
Mais l'usage d'une m ← (x+y) / 2
fonction est FIN
conseillé
04/12/13 T131
Plan
A. Introduction
B. Fonction
C. Procédure
D. Portée d'une variable
E. Synthèse

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)

● Une variable définie au niveau d'une procédure ou d'une


fonction est appelée locale
– Sa portée est uniquement la procédure ou la fonction qui la
déclare

● Une variable globale possède une portée totale


– elle est connue de toutes les fonctions et procédures de
l'algorithme
– À n'utiliser qu'en cas d'absolue nécessité !!! Sinon,
04/12/13
risque d'effets de bord T133
Exemple ALGORITHME un_algo
VARIABLE GLOBALE : Z
PROCEDURE p(a , b)
Portée de PARAMETRE par VALEUR : a, b : entiers
a et b DEBUT
...
FIN

FONCTION f(x) : réel


Portée de PARAMETRE : x : réel Portée
x DEBUT de Z
...
FIN
VARIABLES
i1, i2 : entiers
Portée de
i1 et i2 DEBUT

04/12/13 FIN T134
Exemple
ALGORITHME un_effet_de_bord
d'effet de
VARIABLE GLOBALE : Z
bord
PROCEDURE pr( )
DEBUT

Z←2
...
FIN
VARIABLES
i1, i2 : entiers
Portée de
DEBUT Z
Z←1
pr( )
{ ici, contre toute attente, Z vaut 2 }
...
FIN
04/12/13 T135
Plan
A. Introduction
B. Fonction
C. Procédure
D. Portée d'une variable
E. Synthèse

04/12/13 T136
E. Synthèse : structure d'un algorithme

ALGORITHME nom_de_l'algo

Définitions des constantes

Définition des types (p. ex. structures)

Déclarations des variables globales

Définitions des procédures et fonctions

Définition du programme principal


VARIABLES Variables locales au prog. prin.

DEBUT
… Instructions du prog. prin.
FIN

04/12/13 T137
AP1 - Algorithmique

Chap. 8 La programmation récursive

IUT d'Amiens, département Informatique  année universitaire 2012/2013  AP1 Algo


Plan
A. Introduction
B. Exemple : factorielle
C. Synthèse
D. Exercice

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

FONCTION une_fonction(x) : réel


PARAMETRES : x  : entiers
DEBUT

Res ← une_fonction(z)
...
FIN

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

Exemple : calcul de 5 !

5 ! = 5 × 4 ! donc 5!=24×5=120


Avec 4 ! = 4 × 3 ! donc 4!=4×6=24
Avec 3 ! = 3 × 2! donc 3!=3×2=6
Avec 2 ! = 2 × 1 ! donc 2!=2×1=2
Avec 1 ! = 1 × 0 ! donc 1!=1×1=1
Avec 0 ! = 1
04/12/13 T142
B. Factorielle : N ! = (N-1) ! × N
Exemple : calcul de 5 !

5 ! = 5 × 4 ! 5 ! = 5 × 24 = 120

4 ! = 4 × 3 ! 4 ! = 4 × 6 = 24

3 ! = 3 × 2 ! 3 ! = 3 × 2 = 6

2 ! = 2 × 1 ! 2 ! = 2 × 1 = 2

1 ! = 1 × 0 ! 1 ! = 1 × 1 = 1

Point d'arrêt
0 ! = 1 Indispensable !!!
04/12/13 T143
B. Exemple : factorielle
● L'algorithme :

FONCTION facto(n) : entier


PARAMETRES : n  : entier
DEBUT
SI n = 0 ALORS
retourner 1
SINON
retourner facto(n-1) × n
FINSI
FIN

04/12/13 T144
Plan
A. Introduction
B. Exemple : factorielle
C. Synthèse
D. Exercice

04/12/13 T145
C. Synthèse

● Une fonction récursive valide doit contenir :


– au moins un appel à elle-même avec des paramètres
différents
– au moins un cas où elle ne s’appelle pas (point d'arrêt)
● Pour éviter des appels récursifs à l'infini

→ il faut au moins une structure conditionnelle SI pour


séparer ces deux cas

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

● Tout problème formulé récursivement peut aussi être


formulé itérativement
04/12/13 T147
Plan
A. Introduction
B. Exemple : factorielle
C. Synthèse
D. Exercice

04/12/13 T148
D. Exercice : fonction puissance

Donner une définition récursive de an

FONCTION puissance(a, n) : entier


PARAMETRES : a, n  : entier
DEBUT
SI

FINSI
FIN
04/12/13 T149

Vous aimerez peut-être aussi