• Aucun résultat trouvé

08févie2008 É ieS Bi Uiveiédei eShia Ai

N/A
N/A
Protected

Academic year: 2022

Partager "08févie2008 É ieS Bi Uiveiédei eShia Ai"

Copied!
49
0
0

Texte intégral

(1)

Sébastien Verel

vereli3s.unie.fr

www.i3s.unie.fr/

verel

ÉquipeSoBi-UniversitédeNieSophia-Antipolis

08 février2008

(2)

Objetifs de la séane 4

1

Connaîtrele prinipe de séparationde ode

2

Erire orretement unefontion maple

3

Comprendre et alulerle résultatd'un algorithmedonné

4

Modierunalgorithme donné

5

Utiliserune partied'algorithme donné

6

Corrigerun algorithmedonné

Question prinipaledujour :

Comment érireréutiliserlesalgorithmespourmoinsse fatiguer?

(3)

Choses enore mystérieuses

Vousavez éritdepuis quelquestempsmaintenant e genre de

programme Maple :

moyenne := pro(n)

loal a, m, i;

m := 0;

for i from 1 to n do

a := readstat(`taper un nombre `);

m := m + a;

od

m := m / n;

RETURN(m);

(4)

Choses enore mystérieuses

Ou enore :

deviner := pro(b)

loal a;

a := readstat(`tenter un nombre `);

while a <> b do

a := readstat(`tenter un autre nombre `);

od;

print(`gagne`)

end;

(5)

Choses mystèrieuses

Le oeur du programme vous estbien familier(!),mais ilreste

surement duoupour leontour

moyenne := pro(n)

loal a, m, i;

...

RETURN(m);

end;

ou enore

deviner := pro(b)

loal a;

end;

(6)

De même plus généralement

Nous allons donnerunsens pluspréisau ontour des

algorithmes:

Algorithme moyenne(n :entier) :réel

début

variable m,a:réel

variable i :entier

...

retournerm

n

(7)

Quelques préisions

Nous allons étudier:

les paramètres:à quoiservent-ils?ommentlesutiliser?

les valeurs retournées:quelstypesutiliser?

les variablesloales:ommentles utiliser?

Pour allerplusloin :laSéparationde ode

(8)

Plan

1

Paramètrerlesalgorithmes

Paramètres

Variables loales

Valeurs de sorties

2

Séparationde ode

3

Itérationsmultiples

(9)

Problématique

aluler lamoyenne de 10 notes

aluler lamoyenne de 20 notes

aluler lamoyenne de 100 notes

aluler lamoyenne de 3 notes

aluler lamoyenne de 0 notes

(10)

Problématique

Ne surtoutpas érireunalgorithmepourhaque situation :

m

0

pour i de 1 à10 faire

lire(a )

m

m

+

a

npour

m

m

/

n

Mais généraliseren introduisantunnombren à déterminerau

moment de l'exéution de l'algorithme.

(11)

Problématique

On voudrait pouvoir érireunalgorithmeplus général

m

0

pour i de 1 àn faire

lire(a )

m

m

+

a

npour

m

m

/

n

(12)

Solutions

2 solutionspossibles :

Demander lavaleurde n dansl'algorithmemoyenne :

érire(Taperle nombrede nombres )

lire(n)

Ce n'estpas unebonne solutionpuisquemaintenant l'algorithme

moyenne eetuedeux hoses: demanderlenombrede notes ET

aluler lamoyenne.

Mettre n en paramètre de l'algorithmemoyenne :

Algorithme moyenne(n :entier):réel

(13)

Autre problème

Erire unalgorithme quidétermineleplusgros gâteau(en kg)

parmi3

si a<balors

sib<alors

retourner

sinon

retourner b

nsi

sinon

sia <alors

retourner

sinon

retourner a

nsi

n si

(14)

Autre problème

2possiblitésd'algorithme

Algorithme plusGros():réel

début

variable a, b,:réel

lire(a)lire(b) lire()

si a<balors

sib<alors

retourner

sinon

retourner b

n si

sinon

sia <alors

retourner

sinon

retourner a

n si

n si

SébastienVerel Séparationdeodesetfontions

(15)

Autre problème

2possiblitésd'algorithme

Algorithme plusGros(a:réel,b:réel,: réel):réel

début

si a<balors

sib<alors

retourner

sinon

retourner b

n si

sinon

sia <alors

retourner

sinon

retourner a

n si

n si

(16)

Algorithme plusGros à préfèrer

Le seond algorithme estmeilleurpuisqu'il orrespondànos

attentes:

Seulement déterminerle plusgrosgâteau (enkg) àpartirde

données.

et nonréaliseren pluslatahe de saisiede espoids

(17)

Quand utiliser un (des) paramètre(s)?

L'algorithmedoit-ilrésoudreunensemble de problèmes

dépendantde paramètres?

Peut-on généraliserl'algorithmeàl'aidede variables?

Larésolutionduproblème néessite-t-elledesdonnées

externes?

Si oui àmoinsunedesquestions:

−→

utiliserun algorithmeparamètréà l'aidede variables

(18)

Comment érire un algorithme paramètré?

Algorithme nomAlgo(nom1:type1,nom2 :type2,nom3 :

type3,...) :type

début

...

n

nom1,nom2,nom3 sontdesnomsde variables

type1,type2,type3 sont lestypesdesvariables

orrespondantes (booléen, entier,réel,mot,...)

(19)

Exemple

Caluler lalongueur de l'hypothénused'un triangleretangle

Algorithme hypothenuse(a :réel, b:réel) :réel

début

...

n

(20)

Paramètres eetifs et formels

Algorithme hypothenuse(a :réel, b:réel) :réel

début

...

n

Les valeurs desparamètressontdéterminéslors de l'algorithme:

hypothenuse(3,4)

aet b sontdesParamètresformels:ilsreprésentent des

nombres quelonques.

3 et4 sontdesParamètreseetifs :valeurs des paramètres

réellement utilisés.

(21)

En Maple...

Maple est unlangage faiblementtypé,

e quisignie quelaprésene destypespour haque variablen'est

pas néessaire, voire impossible.

nomAlgo := pro(nom1, nom2, nom3)

...

end;

nom1,nom2,nom3 sontdesnomsde variablesquipeuvent être

de typequelonque

Remarques:

ily aun ; après leend

(22)

En Maple

Pour larierl'utilisationde vosprogrammeset éviterles erreurs,je

vous onseille trèsfortement d'ajouterdes ommentairespour

indiquer letype etlasigniation desvariablesparamètres

nomAlgo := pro(a, b, )

# a : reel, poids du premier gateau

# b : reel, poids du deuxième gateau

# : reel, poids du troisième gateau

...

end;

le "

" permetd'érire unommentaire,lereste de laligne n'est pas exéutée

(23)

Utilisation de variables dans un algorithme

Il est souvent néessaired'enregistrerdes résultatsintermédiaresau

ours d'un algorithme:

Algorithme moyenne(n :entier) :réel

début

variable m,a:réel

variable i :entier

...

retournerm

n

m,aet i sontdesvariables loales àl'algorithme.

Remarque :

(24)

Porté des variables loales

Les valeurs desvariablesloales(m,aet i) ne sontaessiblesque

dans etalgorithme,'est-à-dire entredébut et n.

Algorithme moyenne(n :entier) :réel

début

variable m,a:réel

variable i :entier

...

retournerm

n

moyenne(5)

m

m

+

3

Cette dernièrelignen'apas de sens,m n'existepasà l'extérieurde

l'algorithme.

(25)

Porté des variables loales

Les valeurs desvariablesloalesn'altèrentpas les valeurs des

variablesportant lemême nom àl'extérieurde l'algorithme.

variable m:réel

m

2

moyenne(5)

m

m

+

3

érire(m)

(26)

Variables loales et paramètres

Les variablesdélarées en paramètre desalgorithmessontdes

variablesloales àl'algorithmeaveles mêmespropriétés.

Remarquesdans e ours :

les valeurs initialesdesvariablesen paramètresontelles

donnéesen appelant l'algorithme(passageparvaleur)

iln'est pas possiblede modierla valeurd'unevariablepar

l'appeld'un algorithme (pasde passageparadresse)

(27)

En Maple...

Les variablesloalessedélarent àl'aidedumotlé loal :

deviner := pro(b)

loal a;

...

end;

Enore unefois,iln'est pas possiblede délarer letype et donil

est fortementonseillé d'ériredesommentairespour indiquerla

sémantique de lavariableetsontype.

(28)

En Maple

Les variablesdélarées en paramètre ne peuvent êtremodiées.

deviner := pro(b)

loal a;

...

b := b + 2;

end;

−→

InterditparMaple

La valeurde b ne peut êtremodiée

(29)

Variable globale Maple

Une proédure maplepeutmodierlavaleurd'unevariabledélarée

à l'extérieurede laproédure.

n := 5;

plus1 := pro()

n := n + 1;

end;

print(n);

m apour valeur6

On parlealors devariableglobale paroppositionàvariableloale.

(30)

Variable globale Maple

Il faut évitere genre de proéder pouréviter les modiations

malheureuses et inattendues.

Il vaut mieuxérire:

n := 5;

plus1 := pro(n)

RETURN(n + 1);

end;

n := plus1(n);

print(n);

(31)

Valeur de sortie

Il existe deuxpossibilitéspourles algorithmes :

retournerune valeurdont letypeest déterminé

Algorithme moyenne(n :entier) :réel

début

ne retournerauune valeur :on noteraletype de retourrien

Algorithme deviner(n :entier) :rien

début

On indique lavaleur retournéeà l'aidede l'opération:

retournervaleur

Auune opérationne s'exéute aprèsette opération.

(32)

En Maple

Il n'y pas depossibilitépourindiquer letypede retour.

On ne peut donseulement quel'indiquer en ommentaire

On indique lavaleurretournée (s'ily en a une)par:

RETURN( valeur );

(33)

Quoi t'est-e?

Maintenantque nousavonsdes algorithmesmodulaires ave

desdonnées en entrée,desvaleurs de sortieet untraitement

loalbiendéni

Possibilitéde déouperle ode en modulesindépendants

An d'assemblerles modules en de gros algorithmes

(34)

Avantages à séparer le ode en plusieurs sous-algorithmes?

Limitationsdeserreurs:

plusun algorithmeest ourtmoinsily a d'erreurs

Algorithmesplusfailes àérire:

Coneption desendante(du généraleau partiulier)

Algorithmesréutilisables:

plusfaile àadapter, àreprendrepour d'autrealgorithme

(bibliothèque)

Fatorisation de l'algorithme :

ne pas érirebeauoups de fois lesmêmesalgorithmes

(35)

Sous-algorithme

Un sous-algorithmeest unalgorithme.

Algorithme monAlgo(paramètres) :type

début

...

...

retournervaleur

n

(36)

Exemple

alullasommede deux nombresentiers taperaulavier

Algorithme somme() :entier

début

nombresàsaisir

variable a , b :entier

a

saisir10()

b

saisir10()

retournera

+

b

n

(37)

Exemple

saisirun entierentre 0et 10

Algorithme saisir10( ):entier

début

variable a:entier

lire(a )

tant quea

<

0??10

<

a faire

érire(nombreinorret,veuillezretaperunnombreentre0 et

10)

lire(a )

ntant que

retournera

n

(38)

Exemple

saisirun entierentre 0et 10

Algorithme saisir10( ):entier

début

variable a:entier

lire(a )

tant quea

<

0OU 10

<

afaire

érire(nombreinorret,veuillezretaperunnombreentre0 et

10)

lire(a )

ntant que

retournera

n

(39)

Exemple : mieux

saisirun entierentre infet sup

Algorithme saisir(inf:entier,sup :entier):entier

début

variable a:entier

lire(a )

tant quea

<

inf OUsup

<

a faire

érire(nombreinorret,veuillez retaperunnombre entre,

inf, et ,sup)

lire(a )

ntant que

retournera

n

(40)

Exemple de réutilisation

Petitjeuoùl'ondoitdevinerunnombremystèreentre0et100

Algorithme deviner(n :entier) :rien

début

variable a:entier

a

0

tant quea

6=

n faire

lire(a )

si a

<

n alors

érire(troppetit)

sinon

érire(tropgrand)

nsi

ntant que

érire("gagné")

n

(41)

Exemple de réutilisation

Petitjeuoùl'ondoitdevinerunnombremystère

Algorithme deviner(n :entier) : rien

début

variable a:entier

a

0

tant quea

6=

n faire

a

saisir(0,100)

si a

<

n alors

érire(troppetit)

sinon

érire(tropgrand)

nsi

ntant que

érire("gagné")

(42)

boules imbriquées

Boulesdetype"pour"imbriquées

variable i,j :entier

pour i de 1à n faire

pourj de 1àpfaire

algorithme A

npour

npour

si p ne dépend pas de lavaleurde i

alorsl'algorithmeAs'exéute n

×

p.

si p dépend de i,

alors l'algorithme As'exéute

P

n

i

=

1p

(

i

)

(43)

Itérations multiples

Attention:suessionde 2 boules

6=

boulesimbriquées

variable i,j :entier

pour i de 1à n faire

algorithmeA

npour

pour j de 1 àp faire

algorithmeB

npour

l'algorithmeAs'exéute n fois

Puis,

l'algorithmeB s'exéutep fois

(44)

Que vaut x à la n de haun des algorithmes suivants?

Algo1 :

x

0

pour i de 1à n faire

pour j de 1 à p faire

x

x

+

1

npour

npour

Algo2 :

x

0

pour i de 1à n faire

pour j de 1 à i faire

x

x

+

1

npour

npour

Algo3 :

x

0

pour i de 1à n faire

x

x

+

1

npour

pour j de 1 àp faire

x

x

+

1

npour

(45)

Que vaut x à la n de haun des algorithmes suivants?

Algo1 :

Labouleen "j"ajoutep fois1,

don àhaque exéutionde ette boule en "j",x est

augmenté de p.Labouleen "i" ajouten fois p àx

don après esboulesx

=

n

×

p.

Algo2 :

Labouleen "j"ajoutei fois 1,

don àhaque exéutionde ette boule en "j",x est

augmenté de i.Labouleen "i"aluledon

1

+

2

+

3

+ . . . +

n

don après esboulesx

= P

n

i

=

1i

=

n

(

n

+

1

)

2

(46)

Que vaut x à la n de haun des algorithmes suivants?

Algo3 :

Labouleen "i" ajouten fois 1,

don après ette boule,x estaugmenté de n.Labouleen

"j"ajoutep fois1 àx

don après esboulesx

=

n

+

p.

(47)

Boules imbriquées

Exempleenmaple

tablesMultipliation := pro(n)

loal i, j;

for i from 1 to n do

for j from 1 to n do

print(i, ` fois `, j, ` est égale a `, i*j);

od;

od;

end;

tablesMultipliation(10);

(48)

Objetifs de la séane 4

1

Connaîtrele prinipe de séparationde ode

2

Erire orretement unefontion maple

3

Comprendre et alulerle résultatd'un algorithmedonné

4

Modierunalgorithme donné

5

Utiliserune partied'algorithme donné

6

Corrigerun algorithmedonné

Question prinipaledujour :

Comment ériredeouperles algorithmespour mieuxrégner?

(49)

Travail de doumentation

Trouver de ladoumentationen rapportavel'ensemblede

l'enseignement.

Quels sontvosréférenes?

Références

Documents relatifs

Attention toutefois quelques trus datent3. Et bien sur, les reommandations

Connaître les mots lefs d'un langage impératif simple.. Connaître les opérations de bases

booléen est une expression dont la valeur est soit Vrai soit Faux. Cette expression peut

−→ utiliser un shéma itératif à nombre d'itérations déterminé. −→ appeler aussi souvent

Utilisation d'un aumulateur pour réaliser un alul dans

A l'aide d'un système physique dont l'état est aléatoire :.. Valeur préise d'une résistane, appartition des

les nombres plus petit que le nombre pivot sont à gauhe de

A-t-on besoin d'un traitement séquentiel des données. Le nombre de données est-il déterminé