149
Introduction Chap. 1 AP1 - Algorithmique IUT d'Amiens, département Informatique année universitaire 2012/2013 AP1 Algo

Chap. 1 Introductionarnaud-clerentin.e-monsite.com/medias/files/cours-ap1.pdf · avec de l'eau bouillante ... JavaScript Jovial LabVIEW Lagoona LaTeX Leda Limbo Lisp Logo Lua m4 Maple

  • Upload
    vophuc

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

IntroductionChap. 1

AP1 - Algorithmique

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 o

Le mathématicien perse Al Khuwarizmi

« Abrégé du calcul par la restauration et la comparaison »

T3

Plan

A. Introduction

B. Décomposition en sous problèmes

C. Le langage algorithmique

T4

A. Introduction

● L'algorithmique, on la pratique tous les jours et depuis longtemps...

Briques de LEGO

Camion de pompiers

suite de dessins

Meuble en kit Cuisine équipéenotice de montage

Laine Pull irlandaismodèle

Farine, oeufs, chocolat, etc...

Forêt noirerecette

T5

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

Données Résultatsalgorithme

● Algorithmique : science qui étudie l’application des algorithmes à l’informatique

T6

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

T7

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

T8

Plan

A. Introduction

B. Décomposition en sous problèmes

C. Le langage algorithmique

T9

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 »

T10

Exemple

● Fabrication de brownies – premier raffinement

Algorithme : recette du brownie1. Mélanger les sucres semoule et vanillé, les oeufs et la farine tamisée2. Faire fondre le beurre3. Mélanger le beurre à la pâte4. Faire fondre le chocolat5. Mélanger le chocolat à la pâte6. Mélanger les noix de Pécan et la poudre d'amande à la pâte7. Verser la pâte dans un moule à gâteau beurré8. Mettre à cuire 35 minutes dans le four préchauffé à 170°.

T11

Exemple (II)

● Fabrication de brownies – second raffinement

Algorithme : recette du brownie1. Mélanger les sucres semoule et vanillé, les oeufs et la farine tamisée2. Faire fondre le beurre3. Mélanger le beurre à la pâte

4. Faire fondre le chocolat

5. Mélanger le chocolat à la pâte6. Mélanger les noix de Pécan et la poudre d'amande à la pâte7. Verser la pâte dans un moule à gâteau beurré8. Mettre à cuire 35 minutes dans le four préchauffé à 170°.

4.1 placer le chocolat dans un récipient4.2 placer ce récipient dans une casserole avec de l'eau bouillante4.3 mélanger avec une cuillère4.4 attendre que le chocolat soit fondu

T12

Exemple (III)● Fabrication de brownies – troisième raffinementAlgorithme : recette du brownie1. Mélanger les sucres semoule et vanillé, les oeufs et la farine tamisée2. Faire fondre le beurre3. Mélanger le beurre à la pâte

4. Faire fondre le chocolat

5. Mélanger le chocolat à la pâte6. Mélanger les noix de Pécan et la poudre d'amande à la pâte7. Verser la pâte dans un moule à gâteau beurré8. Mettre à cuire 35 minutes dans le four préchauffé à 170°.

4.1 placer le chocolat dans un récipient

4.2 placer ce récipient dans une casserole avec de l'eau bouillante

4.3 mélanger avec une cuillère4.4 attendre que le cho-colat soit fondu

4.2.1 mettre une casserole sous le robinet4.2.2 ouvrir l'eau4.2.3 remplir à moitié d'eau4.2.4 fermer le robinet4.2.5 mettre la casserole sur la plaque chauffante4.2.6 allumer la plaque4.2.7 attendre l'ébullition

T13

Plan

A. Introduction

B. Décomposition en sous problèmes

C. Le langage algorithmique

T14

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 problème

Algorithme(universel)

Programme(lié à une machine)

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

T15

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 problème

Algorithme(universel)

Programme(lié à une machine)

T16

Quelques langages de

program-mation

ABC Ada ADL Algol 60 Algol 68 APL AppleScriptARB Assembly Awk BASIC Befunge BETABigwig Bistro Blue Brainfuck C C++ C# CamlCecil Cg CHILL Clarion Clean Clipper CLUCobol CobolScript Cocoa ComponentPascal C-sharp Curl D DATABUS Delphi DOSBatch Dylan E Eiffel ElastiC Erlang EuphoriaForth Fortran Fortress FP Frontier GLSL GoedelGroovy Haskell HLSL HTML HTMLScriptHyperCard ICI Icon IDL Intercal Io Jal JavaJavaScript Jovial LabVIEW Lagoona LaTeXLeda Limbo Lisp Logo Lua m4 MapleMathematica MATLAB Mercury Miranda MivaML Modula-2 Modula-3 Moto Mumps OberonObjective Caml Objective-C ObliqOccam Oz Pascal Perl PHP Pike PL Pliant PL-SQLPOP-11 PostScript PowerBuilder PrographProlog Proteus Python R REBOL Refal Rexx RigalRPG Ruby SAS Sather Scheme Self SETL SGMLSimkin Simula Sisal S-Lang Smalltalk SnobolSQL Squeak TADS Tcl-Tk Tempo TeX TOM TRACTranscript Turing T3X UML VBScript Verilog VHDLVisual Basic Visual DialogScript VisualFoxPro Water XML XOTcl YAFL Yorick Z

T17

Un exemple

● Demander la saisie d'un entier au clavier en langage C

Scan('%d',i)Cinq fautes de syntaxe !!!

scanf("%d",&i) ; Correct, mais pas très lisible

Saisir i Clair, concis, lisible

T18

Mon premier algorithme

● Afficher la chaîne de caractères « Vive Unix »

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

Titre

Commentaire

Les variablesChap. 2

AP1 - Algorithmique

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 o

T20

PlanA. Définition

B. Type d'une variable

C. Utilisation et affectation

D. Saisie utilisateur

E. Constantes

F. Exercices

T21

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

56.80PrixHT

De type réel

Attention. Toujours donner un nom significatif à une variable !Pas de toto, pouet, zk142...

T22

PlanA. Définition

B. Type d'une variable

C. Utilisation et affectation

D. Saisie utilisateur

E. Constantes

F. Exercices

T23

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

T24

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

T25

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

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

4 4 3141 4

2

Si x mod 2 = 0, l'entier est pair, sinon il est impair.

T26

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

T27

PlanA. Définition

B. Type d'une variable

C. Utilisation et affectation

D. Saisie utilisateur

E. Constantes

F. Exercices

T28

C. Utilisation d'une variable

● Toujours déclarer une variable avant utilisation !

● Syntaxe :

Nom_variable : type

ALGORITHME UnAutreAlgoVARIABLES :

PrixHT : réelDEBUT

...FIN

T29

Affecter un contenu à une variable : ←

● Syntaxe :

● Exemple :

nom_variable ← nom_variablenom_variable ← expressionnom_variable ← constante

ALGORITHME CalculPrixTTCVARIABLES :

PrixHT : réelPrixTTC : réel

DEBUTPrixHT 5.4←PrixTTC PrixHT x 1.196←

FINPrixTTC contient 6.4584

T30

Attention au type !

● L'expression de droite doit être de même type que la variable de gauche !

● Mauvais exemple :

Nom_variable ← Nom_variableNom_variable ← ExpressionNom_variable ← Constante

ALGORITHME GrosProblèmeVARIABLES :

PrixHT : réelDEBUT

PrixHT « Vive Unix »←...

FIN

T31

PlanA. Définition

B. Type d'une variable

C. Utilisation et affectation

D. Saisie utilisateur

E. Constantes

F. Exercices

T32

D. Saisie utilisateur

● Il est possible de demander à l'utilisateur de saisir la valeur d'une variable

● Syntaxe :

Exemple :

Saisir nom_variable

ALGORITHME SaisieVARIABLES :

PrixHT : réelDEBUT

Saisir PrixHT...

FIN

T33

PlanA. Définition

B. Type d'une variable

C. Utilisation et affectation

D. Saisie utilisateur

E. Constantes

F. Exercices

T34

E. Les constantes

● Ce sont des variables dont le contenu ne varie pas !

● Syntaxe :

Exemple :

CONSTANTE (nom_variable : type) ← expression

ALGORITHME UneConstanteCONSTANTE (TauxTVA : réel) 19.6←VARIABLES :

PrixHT : réelDEBUT

...FIN

T35

PlanA. Définition

B. Type d'une variable

C. Utilisation et affectation

D. Saisie utilisateur

E. Constantes

F. Exercices

T36

F. Exercice 1 ● Que contiennent les variables ABCD à l'issue de

l'algorithme ?

ALGORITHME Exercice1VARIABLES :

A, B, C, D : entiersDEBUT

A 1←B 2←C 3←D A←A A + 1←B D + C←C D + 1←

FIN

A :B :C : D :

T37

F. Exercice 2

● Relever les instructions incorrectes contenues dans l'algorithme ci-dessous.

ALGORITHME Exercice2VARIABLES :

A, B, C, moyMath : entiersDEBUT

B 5←A B / 3←saisir moyMathC C + 2←

FIN

T38

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 : entierB : entier

DEBUTA 1←B 2←

FIN

Les schémas conditionnelsChap. 3

AP1 - Algorithmique

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 o

T40

PlanA. Introduction

B. Schéma conditionnel SI

C. Schéma conditionnel CAS PARMI

D. Connecteurs logiques

T41

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

T42

PlanA. Introduction

B. Schéma conditionnel SI

C. Schéma conditionnel CAS PARMI

D. Connecteurs logiques

T43

B. Schéma conditionnel SI

● Exécuter une suite d'instructions si une condition est vérifiée

● Syntaxes :

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

SI condition ALORSsuite-1

SINONsuite-2

FINSI

SI condition ALORSsuite-1

FINSI

T44

Schéma conditionnel SI – exemple 1

ALGORITHME DivisionVARIABLES :

a, b : entiersDEBUT

Saisir a, bSI b != 0 ALORS

Afficher « La division vaut », a/bSINON

Afficher « Division impossible »FINSI

FIN

T45

Schéma conditionnel SI – exemple 2

ALGORITHME baccalauréat{ Indique la mention obtenue au bac }VARIABLES :

note : réelDEBUT

Saisir noteSI note ≥ 12 ALORS

Afficher "Reçu avec mention"SINON SI note ≥ 10 ALORS

Afficher "Passable"SINON

Afficher "Insuffisant"FINSI

FINSIFIN

Il est possible d'imbriquer plusieurs enchaînements alternatifs

Penser à indenter un algorithme !

T46

Schéma conditionnel SI – exemple 3

ALGORITHME monsieur-madameVARIABLES :

abréviation : chaîne de caractèresDEBUT

Saisir abréviationSI 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"FINSI

FINSIFINSI

FIN

Il est possible d'imbriquer plusieurs enchaînements alternatifs

Lourd et peu lisible...

T47

PlanA. Introduction

B. Schéma conditionnel SI

C. Schéma conditionnel CAS PARMI

D. Connecteurs logiques

T48

B. Schéma conditionnel CAS PARMI

● Pour comparer une variable à une énumération de valeurs connues à l’avance

● Syntaxe :

→ 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

CAS variable PARMIvaleur-1 : suite-1valeur-2 : suite-2

valeur-3 : suite-3…AUTRE : suite

FINCAS

T49

Exemple 3-version 2

ALGORITHME monsieur-madame, version 2VARIABLES :

abréviation : chaîne de caractèresDEBUT

Saisir abréviationCAS abréviation PARMI

"M" : Afficher " Monsieur""Mme" : Afficher " Madame""Mlle" : Afficher " Mademoiselle" autre : Afficher " Monsieur, Madame"

FINCASFIN

T50

PlanA. Introduction

B. Schéma conditionnel SI

C. Schéma conditionnel CAS PARMI

D. Connecteurs logiques

T51

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

T52

NON logique

● Table de vérité :

● 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 »

A NON Avrai fauxfaux vrai

T53

OU logique

● Table de vérité :

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

A B A OU Bfaux faux fauxfaux vrai vraivrai faux vraivrai vrai vrai

T54

ET logique

● Table de vérité :

● 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

A B A ET Bfaux faux fauxfaux vrai fauxvrai faux fauxvrai vrai vrai

T55

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

T56

Exercice

ALGORITHME exerciceVARIABLES :

A, B, C, D : booléenDEBUT

...SI A = vrai ALORS

SI B = vrai ALORSAfficher « burp »

FINSIFINSI

SI C = faux ALORSAfficher « slurp »

FINSISI D = vrai ALORS

Afficher « slurp »FINSI

FIN

Réécrire plus simplement les structures condition­nelles ci dessous.

Les schémas itératifsChap. 4

AP1 - Algorithmique

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 o

T58

Plan

A. Introduction

B. La boucle TANTQUE

C. La boucle REPETER JUSQU'A

D. La boucle POUR

E. Synthèse

T59

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

T60

Plan

A. Introduction

B. La boucle TANTQUE

C. La boucle REPETER JUSQU'A

D. La boucle POUR

E. Synthèse

T61

B. Enchaînement répétitif TANTQUE

● Syntaxe :

→ 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

TANTQUE condition FAIREsuite-instructions

FINTANTQUE

T62

Enchaînement TANTQUE – exemple 1

ALGORITHME tantque{ Saisir un entier supérieur à 20 }VARIABLES :

nb : entierDEBUT

Afficher « Entrer un entier supérieur à 20 »Saisir nbTANTQUE nb < 20 FAIRE

Afficher « Entrer un entier supérieur à 20 »Saisir nb

FINTANTQUEFIN

T63

Enchaînement TANTQUE – exemple 2

ALGORITHME bug-tantqueVARIABLES :

nb : entierDEBUT

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

T64

Enchaînement TANTQUE – exemple 3

ALGORITHME encore-un-bug-tantqueVARIABLES :

nb : entierDEBUT

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

T65

Plan

A. Introduction

B. La boucle TANTQUE

C. La boucle REPETER JUSQU'A

D. La boucle POUR

E. Synthèse

T66

C. Enchaînement répétitif REPETER

● Syntaxe :

→ 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

REPETERsuite-instructions

JUSQU'A condition

condition est évaluée après le passage dans la boucle. Donc suite-instructions est au moins exécutée une fois !

T67

Comparaison TANTQUE – JUSQU'A

ALGORITHME tantqueVARIABLES :

nb : entierDEBUT

Afficher « Entrer un entier supérieur à 20 »Saisir nbTANTQUE nb < 20 FAIRE

Afficher « Entrer un entier supérieur à 20 »Saisir nb

FINTANTQUEFIN

ALGORITHME jusqu'aVARIABLES :

nb : entierDEBUT

REPETER Afficher « Entrer un entier supérieur à 20 »Saisir nb

JUSQU'A nb ≥ 20FIN

Ces deux algorithmes

sont équivalents

T68

Plan

A. Introduction

B. La boucle TANTQUE

C. La boucle REPETER JUSQU'A

D. La boucle POUR

E. Synthèse

T69

D. Enchaînement répétitif POUR

● Syntaxe :

→ 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

POUR variable ALLANT DE val-deb A val-fin FAIREsuite-instructions

FINPOUR

L'utilisation de cette boucle POUR suppose connu le nombre d'itérations

T70

Enchaînement POUR – exemple 1

ALGORITHME pourVARIABLES :

nb : entierDEBUT

POUR nb ALLANT DE 1 A 5 FAIREAfficher nb

FINPOURFIN

1 2 3 4 5

T71

Enchaînement POUR – exemple 2

ALGORITHME unautrepourVARIABLES :

nb : entierDEBUT

POUR nb ALLANT DE 0 A 8 PAR PAS DE 2 FAIREAfficher nb

FINPOURFIN

0 2 4 6 8

Il est possible d'utiliser un pas supérieur à 1...

… voire un pas négatif

T72

Attention !

POUR nb ALLANT DE 1 A 5 FAIRE nb 4←…

FINPOUR

1 2 3 4 5

Boucle infinie !

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

POUR nb ALLANT DE 1 A 5 FAIRE nb 12←…

FINPOUR

POUR nb ALLANT DE 1 A 5 FAIRE Saisir nb…

FINPOUR

Sortie forcée : interdit !

Sortie incontrôlée : interdit !

T73

Comparaison POUR / TANTQUE

ALGORITHME pourVARIABLES :

nb : entierDEBUT

POUR nb ALLANT DE 1 A 5 FAIREAfficher nb

FINPOURFIN

1 2 3 4 5

ALGORITHME tantqueVARIABLES :

nb : entierDEBUT

nb 1←TANTQUE nb ≤ 5 FAIRE

Afficher nbnb nb + 1←

FINTANTQUEFIN

Ces deux algorithmes sont équivalents

→ La boucle TANTQUE est universelle : les boucles POUR et REPETER en découlent

T74

Plan

A. Introduction

B. La boucle TANTQUE

C. La boucle REPETER JUSQU'A

D. La boucle POUR

E. Synthèse

T75

E. Synthèse : choisir POUR / TANTQUE / REPETER

oui

Nombre d'itérations

connu ?

Traitementexécuté au

moins 1fois ?

Boucle POUR

non

oui

non

BoucleREPETER

Boucle TANTQUE

Les tableauxChap. 5

AP1 - Algorithmique

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 o

T77

PlanA. Définition

B. Déclaration et utilisation

C. Quelques algorithmes

T78

A. Introduction

● On souhaite manipuler les températures moyennes des 12 mois d'une année.

ALGORITHME TempératuresVARIABLES :

Tjan, Tfev, Tmar, Tavr, Tmai, Tjuin, Tjuil, Taout,Tsep, Toct, Tnov, Tdec : réels

DEBUT...

FINLourd !

Jan Fév Mars Avr Déc

4.8 5.2 7.6 9.1 4.2...Tab

→ Solution : utiliser un tableau

T79

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

T80

PlanA. Définition

B. Déclaration et utilisation

C. Quelques algorithmes

T81

B. Déclaration d'un tableau à 1 dimension

● Il s'agit des tableaux à 1 ligne

● Exemple : tableau de réels tab à 8 cases

● Généralement, l'indice de départ vaut 1, voire 0 (en langage C)

tab : tableau [1..8] de réels

Indicesmin et max

Type deséléments

tab

T82

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

T

A noter. Il est possible de généraliser pour des tableaux à N dimensions (3 en pratique)

T83

Tableau à 2 dimensions - exemples

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

T

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

● Que produit l'instruction : T ← 458

8

36

Incorrect : impossible d'affecter globalement un tableau

T84

PlanA. Définition

B. Déclaration et utilisation

C. Quelques algorithmes

T85

C. Un algorithme essentiel

ALGORITHME AfficherTab_v1{ afficher un tableau à 1 dimension }VARIABLES :

tab : tableau [1..10] de réelsDEBUT

{ On suppose que tab est déjà rempli }afficher tab[1]afficher tab[2]afficher tab[3]afficher tab[4]afficher tab[5]afficher tab[6]afficher tab[7]afficher tab[8]afficher tab[9]afficher tab[10]

FIN

Comment afficher le contenu d'un tableau tab à 1 dimension ?

Lourd !

T86

Un algorithme essentiel

ALGORITHME AfficherTab_v2{ afficher un tableau à 1 dimension }VARIABLES :

tab : tableau [1..10] de réelsDEBUT

{ On suppose que tab est déjà rempli }

FIN

Comment afficher le contenu d'un tableau tab à 1 dimension ?

T87

Un algorithme essentiel

ALGORITHME AfficherTab_v2{ afficher un tableau à 1 dimension }VARIABLES :

tab : tableau [1..10] de réelsi : entier

DEBUT{ On suppose que tab est déjà rempli }POUR i ALLANT DE

FIN

Comment afficher le contenu d'un tableau tab à 1 dimension ?

T88

Un algorithme essentiel

ALGORITHME AfficherTab_v2{ afficher un tableau à 1 dimension }VARIABLES :

tab : tableau [1..10] de réelsi : entier

DEBUT{ On suppose que tab est déjà rempli }POUR i ALLANT DE 1 à 10 FAIRE

Afficher tab[i]FINPOUR

FIN

Comment afficher le contenu d'un tableau tab à 1 dimension ?

T89

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

Un dernier exemple

T90

Comment afficher le contenu du tableau T ? T

ALGORITHME AfficherTab2D{ afficher un tableau à 2 dimensions }VARIABLES :

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

DEBUT{ On suppose que T est déjà rempli }POUR lig ALLANT DE 1 à 2 FAIRE

POUR

FIN

Un dernier exemple

T91

Comment afficher le contenu du tableau T ? T

ALGORITHME AfficherTab2D{ afficher un tableau à 2 dimensions }VARIABLES :

T : tableau [1..2][1..7] d'entierslig, 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

Un dernier exemple

T92

Comment afficher le contenu du tableau T ? T

ALGORITHME AfficherTab2D{ afficher un tableau à 2 dimensions }VARIABLES :

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

DEBUT{ On suppose que T est déjà rempli }POUR lig ALLANT DE 1 à 2 FAIRE

POUR col ALLANT DE 1 à 7 FAIREAfficher T[lig][col]

FINPOURFINPOUR

FIN

Un dernier exemple

Les structuresChap. 6

AP1 - Algorithmique

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 o

04/12/13 T94

Plan

A. Introduction

B. Les structures

C. Les tableaux de structures

04/12/13 T95

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 T96

Plan

A. Introduction

B. Les structures

C. Les tableaux de structures

04/12/13 T97

B. Les structures● Syntaxe :

● Exemple :

TYPE nom_du_type = STRUCTUREChamp_1 : typeChamp_2 : type…Champ_n : type

FINSTRUCTURE

TYPE étudiant = STRUCTUREnom: chaîne de caractèresprénom : chaîne de caractèresage : entiermoyenne_AP1 : réel

FINSTRUCTURE

04/12/13 T98

Imbrication de structures

● Il est possible d'imbriquer une structure dans une autre structure

TYPE adresse = STRUCTUREnumero: entierrue: chaîne de caractèresville: chaîne de caractères

FINSTRUCTURE

TYPE étudiant = STRUCTUREnom: chaîne de caractèresprénom : chaîne de caractèrescoordonnées : adresseage : entiermoyenne_AP1 : réel

FINSTRUCTURE

04/12/13 T99

Déclaration d'un variable de type structure

● Exemple

ALGORITHME machinTYPE étudiant = STRUCTURE

nom: chaîne de caractèresprénom : chaîne de caractèresage : entiermoyenne_AP1 : réel

FINSTRUCTURE

VARIABLESetud1 : etudiant

DEBUT...

etud1 est une variablede type structure etudiant

04/12/13 T100

Accès aux champs d'une structure

● Syntaxe :

● Exemple : ALGORITHME machinTYPE étudiant = STRUCTURE

nom: chaîne de caractèresprénom : chaîne de caractèresage : entiermoyenne_AP1 : réel

FINSTRUCTURE

VARIABLESetud1 : étudiant

DEBUTetud1.prénom Julie←saisir etud1.age…

Affectation de la valeur Juliedans le champ prénom de la structure étudiant etud1

nom_variable • nom_champ

04/12/13 T101

Plan

A. Introduction

B. Les structures

C. Les tableaux de structures

04/12/13 T102

C. Tableau de structures

● Exemple

ALGORITHME machinTYPE étudiant = STRUCTURE

nom: chaîne de caractèresprénom : chaîne de caractèresage : entiermoyenne_AP1 : réel

FINSTRUCTURE

VARIABLESpromotion : tableau [1..160] d'étudiant

DEBUT...promotion[3].prénom Stéphanie←…

Affectation de la valeur Stéphanie dans le champ

prénom de la structure étudiant contenue dans

la 3ème case du tableau etud

04/12/13 T103

Exercice : Calculer la moyenne de promotion d'AP1

ALGORITHME moyenne_AP1TYPE étudiant = STRUCTURE

nom: chaîne de caractèresprénom : chaîne de caractèresage : entiermoyenne_AP1 : réel

FINSTRUCTUREVARIABLES

promotion : tableau [1..160] d'étudiant

DEBUT { on suppose que promotion  est déjà rempli }

FIN

04/12/13 T104

Sous programmesChap. 7

AP1 - Algorithmique

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 o

04/12/13 T105

Plan

A. Introduction

B. Fonction

C. Procédure

D. Portée d'une variable

E. Synthèse

04/12/13 T106

Exemple (I)

ALGORITHME un_super_méga_gros_algoVARIABLES

...N, i, fact : entier...

DEBUT... ...saisir nfact 1←POUR i allant de 2 à N FAIRE

fact fact ← × iFINPOUR......

FIN

Déléguer ce calcul à un sous-algorithme

04/12/13 T107

Exemple (II)

ALGORITHME un_super_méga_gros_algo… factorielle(...)DEBUT…FIN

VARIABLES...n, fact : entier…

DEBUT... ...saisir nfact ← factorielle(n)......

FIN

On dit que l'algorithme appelle le sous programme factorielle

04/12/13 T108

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 T109

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 T110

Plan

A. Introduction

B. Fonction

C. Procédure

D. Portée d'une variable

E. Synthèse

04/12/13 T111

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

Fonction

x

z=f(x,y)y

Para

mètr

es

Retour

04/12/13 T112

FONCTION moy_int(x, y) : réelPARAMETRES : x , y  : entiersDEBUT …FIN

Exemple 1 : fonction « moy_int »

moy_int

X : entier

z=(X+Y)/2 : réelY : entier

Para

mètr

es

Retour

Type de la donnéerenvoyée par la fonction

Paramètres d'entréede la fonction

04/12/13 T113

FONCTION moy_int(x, y) : réelPARAMETRES : x , y  : entiersVARIABLE : z : réelDEBUT

z (x+y) / 2←retourner z

FIN

Exemple 1 : fonction « moy_int »

moy_int

X : entier

z=(X+Y)/2 : réelY : entier

Para

mètr

es

Retour

Quitter la fonction et retourner z au programme appelant

04/12/13 T114

ALGORITHME un_algo

FONCTION moy_int( x , y ) : réelPARAMETRES : x , y  : entiersVARIABLE : z : réelDEBUT

z (x+y) / 2←retourner z

FIN

VARIABLESa, b : entiersres : réel

DEBUT…res ← moy_int( a , b )...

Appel d'une fonction

a et b sont appelésarguments

04/12/13 T115

ALGORITHME un_algo

FONCTION moy_int(x, y) : réelPARAMETRES : x , y  : entiersVARIABLE : z : réelDEBUT

z (x+y) / 2← 3retourner z 4

FIN

VARIABLESa, b : entiersres : réel

DEBUT… 1res ← moy_int( a , b ) 2... 5

Ordre d'exécution des instructions

Ordre d'exécution

04/12/13 T116

ALGORITHME un_algo

FONCTION moy_int( x , y ) : réelPARAMETRES : x , y  : entiersVARIABLE : z : réelDEBUT

z (x+y) / 2←retourner z

FIN

VARIABLESa, b : entiersres : réel

DEBUT…a 5←b 8←res ← moy_int( a , b )...

Un exemple d'exécution

1. a vaut 5, b vaut 8

2. x vaut 5, y vaut 8

3. z vaut 6.5

4. res vaut 6.5

04/12/13 T117

Plan

A. Introduction

B. Fonction

C. Procédure

D. Portée d'une variable

E. Synthèse

04/12/13 T118

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

Procédure

x

y

Para

mètr

es

04/12/13 T119

Exemple 1 : procédure « aff_somme » (I)

aff_sommeAffiche a+b

a : entier

b : entier

Para

mètr

es

PROCEDURE aff_somme(a, b){ affiche la somme de a et b }PARAMETRES : a, b : entiersDEBUT …FIN

04/12/13 T120

Exemple 1 : procédure « aff_somme » (II)

aff_sommeAffiche a+b

a : entier

b : entier

Para

mètr

es

PROCEDURE aff_somme(a, b)PARAMETRES : a, b : entiersVARIABLE : som : entierDEBUT

som a + b←Afficher som

FIN

04/12/13 T121

ALGORITHME un_algo

PROCEDURE aff_somme( a , b ) PARAMETRES : a, b : entiers VARIABLE : som : entier DEBUT

som a + b←Afficher som

FIN

VARIABLESi1, i2 : entiers

DEBUT…aff_somme( i1 , i2 )...

Exemple 1 : procédure « aff_somme » (III)

i1 et i2 sont appelésparamètres réels

a et b sont appelésparamètres formels

04/12/13 T122

ALGORITHME un_algo

PROCEDURE aff_somme( a , b )PARAMETRE : a, b : entiersVARIABLE : som : entierDEBUT

som a + b←Afficher som

FIN

VARIABLESi1, i2 : entiers

DEBUT…i1 2←i2 3←aff_somme( i1 , i2 )...

Exemple 1 : procédure « aff_somme » (IV)

1. i1 vaut 2, i2 vaut 3

2. a vaut 2, b vaut 3

3. som vaut 5

04/12/13 T123

Exemple 2 : procédure « som_sous »

som_sousCalculer a+b et a-b

a : entier →

b : entier →

Para

mètr

es

PROCEDURE som_sous(a, b)PARAMETRES : a, b : entiersDEBUT …FIN

← a+b

← a-b

On souhaite renvoyerdeux valeurs au

programme appelant

04/12/13 T124

Exemple 2 : procédure « som_sous »

som_sousCalculer a+b et a-b

a : entier →

b : entier →

Para

mètr

es

PROCEDURE som_sous(a, b)PARAMETRE : a, b : entiersVARIABLES : temp : entierDEBUT temp a+b←

b a-b←a temp←

FIN

← a+b

← a-b

04/12/13 T125

ALGORITHME un_algo

PROCEDURE som_sous(a, b)PARAMETRES : a, b : entiersVARIABLES : temp : entierDEBUT

temp a+b←b a-b←a temp←

FIN

VARIABLESi1, i2 : entiers

DEBUT…i1 2←i2 3←som_sous( i1 , i2 )...

Exemple 2 : procédure « som_sous » (IV)

1. i1 vaut 2, i2 vaut 3

2. a vaut 2, b vaut 3

3. b vaut -14. a vaut 5

5. i1 vaut 2, i2 vaut 3

04/12/13 T126

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 T127

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 T128

ALGORITHME un_algo

PROCEDURE som_sous(a, b)PARAMETRES par ADRESSE : a, b : entiersVARIABLES : temp : entierDEBUT

temp a+b←b a-b←a temp←

FIN

VARIABLESi1, i2 : entiers

DEBUT…i1 2←i2 3←som_sous( i1 , i2 )...

Exemple 2 : procédure « som_sous »

1. i1 vaut 2, i2 vaut 3

2. a vaut 2, b vaut 3

3. b vaut -14. a vaut 5

5. i1 vaut 5, i2 vaut -1

04/12/13 T129

ALGORITHME un_algo

PROCEDURE som_sous(a, b, som, sous)PARAMETRES par VALEUR : a, b : entiersPARAMETRES par ADRESSE : som, sous : entiersDEBUT

som a+b←sous a-b←

FIN

VARIABLESi1, i2, res1, res2 : entiers

DEBUT…i1 2←i2 3←som_sous(i1, i2, res1, res2 )...

Exemple 2 : procédure « som_sous » améliorée

i1 vaut 2, i2 vaut 3, res1 vaut 5, res2 vaut -1

04/12/13 T130

ALGORITHME un_algo

PROCEDURE aff_somme(a, b)PARAMETRE par VALEUR : a, b : entiersVARIABLE : som : entierDEBUT

som a + b←Afficher som

FIN

VARIABLESi1, i2 : entiers

DEBUT…i1 2←i2 3←aff_somme( i1 , i2 )...

Retour à « aff_somme »

04/12/13 T131

FONCTION moy_int(x, y) : réelPARAMETRES : x , y  : entiersVARIABLE : z : réelDEBUT

z (x+y) / 2←retourner z

FIN

Retour à « moy_int »

PROCEDURE moy_int(x, y,m)PARAMETRES par VALEUR : x , y  : entiersPARAMETRES par ADRESSE : m : réelDEBUT

m (x+y) / 2←FIN

Est équivalent à

Mais l'usage d'unefonction est conseillé

04/12/13 T132

Plan

A. Introduction

B. Fonction

C. Procédure

D. Portée d'une variable

E. Synthèse

04/12/13 T133

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, risque d'effets de bord

04/12/13 T134

ALGORITHME un_algo

VARIABLE GLOBALE : Z

PROCEDURE p(a , b)PARAMETRE par VALEUR : a, b : entiersDEBUT

...FIN

FONCTION f(x) : réelPARAMETRE : x : réelDEBUT

...FIN

VARIABLESi1, i2 : entiers

DEBUT…

FIN

Exemple

Portée de a et b

Portée de x

Portée de i1 et i2

Portée de Z

04/12/13 T135

ALGORITHME un_effet_de_bord

VARIABLE GLOBALE : Z

PROCEDURE pr( )DEBUT

…Z 2←...

FIN

VARIABLESi1, i2 : entiers

DEBUTZ 1←pr( ){ ici, contre toute attente, Z vaut 2 }...

FIN

Exemple d'effet de bord

Portée de Z

04/12/13 T136

Plan

A. Introduction

B. Fonction

C. Procédure

D. Portée d'une variable

E. Synthèse

04/12/13 T137

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 principalVARIABLES Variables locales au prog. prin.

DEBUT… Instructions du prog. prin.

FIN

E. Synthèse : structure d'un algorithme

La programmation récursiveChap. 8

AP1 - Algorithmique

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 o

04/12/13 T139

Plan

A. Introduction

B. Exemple : factorielle

C. Synthèse

D. Exercice

04/12/13 T140

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éelPARAMETRES : x  : entiersDEBUT

…Res ← une_fonction(z)

...FIN

04/12/13 T141

Plan

A. Introduction

B. Exemple : factorielle

C. Synthèse

D. Exercice

04/12/13 T142

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=120Avec 4 ! = 4 × 3 ! donc 4!=4×6=24

Avec 3 ! = 3 × 2! donc 3!=3×2=6Avec 2 ! = 2 × 1 ! donc 2!=2×1=2

Avec 1 ! = 1 × 0 ! donc 1!=1×1=1Avec 0 ! = 1

04/12/13 T143

B. Factorielle : N ! = (N-1) ! × N

Exemple : calcul de 5 !

5 ! = 5 × 4 !

4 ! = 4 × 3 !

3 ! = 3 × 2 !

2 ! = 2 × 1 !

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

2 ! = 2 × 1 = 2

3 ! = 3 × 2 = 6

4 ! = 4 × 6 = 24

5 ! = 5 × 24 = 120

0 ! = 1 Point d'arrêtIndispensable !!!

04/12/13 T144

B. Exemple : factorielle

● L'algorithme :

FONCTION facto(n) : entierPARAMETRES : n  : entierDEBUT

SI n = 0 ALORSretourner 1

SINONretourner facto(n-1) × n

FINSIFIN

04/12/13 T145

Plan

A. Introduction

B. Exemple : factorielle

C. Synthèse

D. Exercice

04/12/13 T146

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 T147

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 T148

Plan

A. Introduction

B. Exemple : factorielle

C. Synthèse

D. Exercice

04/12/13 T149

D. Exercice : fonction puissance● Donner une définition récursive de an

FONCTION puissance(a, n) : entierPARAMETRES : a, n  : entierDEBUT

SI

FINSIFIN