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