• Aucun résultat trouvé

09févie2009 É ieS Bi Uiveiédei eShia Ai

N/A
N/A
Protected

Academic year: 2022

Partager "09févie2009 É ieS Bi Uiveiédei eShia Ai"

Copied!
55
0
0

Texte intégral

(1)

Sébastien Verel

vereli3s.unie.fr

www.i3s.unie.fr/

verel

ÉquipeSoBi-UniversitédeNieSophia-Antipolis

09 février2009

(2)

Objetifs de la séane 4

1

Connaîtrele prinipe de séparationde ode

2

Erire orretement uneméthode java

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 quelquestempse genre de programme:

float moyenne(int n) {

float a, m

int i;

m = 0;

for(i = 0; i < n; i++) {

a = lire("taper un nombre ");

m = m + a;

}

m = m / n;

return m;

}

(4)

D'ailleurs méthode "lire"

import javax.swing.JOptionPane;

/*****************************************

* Lit un nombre entier au lavier

*

* entree :

* - message : message d'invite

*

* sortie :

* - nombre de type int

*****************************************/

int lire(String message) {

String str = JOptionPane.showInputDialog(null, message);

return Integer.parseInt(str) ;

}

(5)

Choses enore mystérieuses

void deviner(int n) {

int rep;

rep = n - 1;

while (rep != n) {

rep = lire("Proposer un nombre entier");

}

println("Gagné !");

}

(6)

Choses enore mystérieuses

float u100() {

float u = 1;

for(int i = 0; i < 101; i++)

u = 0.5 * u + 2;

return u;

}

void setup() {

println(u100());

}

(7)

Choses enore mystérieuses

void setup() {

size(500, 200);

smooth();

strokeWeight(20.0);

stroke(0, 100);

x = 0;

}

void draw() {

bakground(226);

point(x, height / 2);

x = x + 1;

}

(8)

Choses mystèrieuses

"oeur" duprogramme:faile (!)

"ontour" :surement ou(pour l'instant)

float moyenne(int n) {

float a, m

int i;

...

return m;

}

ou enore

void deviner(int n) {

int rep;

...

}

(9)

De même plus généralement

But :donnerunsens pluspréis au"ontour":

Algorithme moyenne(n :entier) :réel

début

variable m,a:réel

variable i :entier

...

retournerm

n

(10)

Les éléments de l'étude

Méthodes(fontions):ommentles dénir?Commentles

utiliser?

Paramètres:àquoiservent-ils?omment lesutiliser?

Valeurnale:ommentladénir?quelstypesutiliser?

Variablesloales/globales:ommentles utiliser?

Prinipede Séparationde ode

(11)

Plan

1

Paramètrerlesalgorithmes

Paramètres

Variables loales

Valeurs nales

2

Séparationde ode

(12)

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

(13)

Problématique

m

0

pour i de 1 à10 faire

a

lire("entrereune note") m

m

+

a

npour

m

m

/

10

Mauvaiseidée :1 situationpartiulière=1 algorithme

Généraliser:introduireunnombre n àxerau moment de

l'exéution de l'algorithme.

(14)

Problématique : proposition

n

10

m

0

pour i de 1 àn faire

a

lire("entrerune note") m

m

+

a

npour

m

m

/

n

Mieux puisqu'un seulhangement àfaire

Mais toujours:1situation partiulière=1algorithme

(15)

Problématique

Généraliser:introduireunnombre n àxerau moment de

l'exéution de l'algorithme.

m

0

pour i de 1 àn faire

a

lire("Entrer unenote") m

m

+

a

npour

m

m

/

n

(16)

Fixer la valeur de n à l'exéution

2 solutionspossibles :

Demander lavaleurde n dansl'algorithme"moyenne" :

n

lire("Taperlenombre de nombres")

−→

mauvaisesolution:

algorithme"moyenne"eetue deuxhoses :demanderle nombre

de notesETalulerlamoyenne.

Mettre n en paramètre de l'algorithme"moyenne" :

Algorithme moyenne(n :entier):réel

(17)

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

n

(18)

Autre problème

2possiblitésd'algorithme

Algorithme plusGros():réel

début

variable a, b,:réel

a

lire("poidsA")b

lire("poidsB")

lire("poidsC") 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éparationdeodesetméthodes

(19)

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

n

(20)

Algorithme plusGros à préfèrer

Seond algorithme:meilleurpuisqu'ilorrespond ànotreattente :

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

données.

et nonréaliseren pluslatahe de saisie de espoids

(21)

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

(22)

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,...)

(23)

Exemple

Caluler lalongueur de l'hypothénused'un triangleretangle

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

début

...

n

(24)

Paramètres eetifs et formels

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

début

...

n

Les valeurs desparamètressontxéslorsde l'exéution de

l'algorithme:

hypothenuse(3,4)

aet b sontdesParamètresformels:

ilsreprésentent desnombresquelonques.

3 et4 sontdesParamètreseetifs :

valeurs desparamètresréellementutilisés.

(25)

En Java...

type nomAlgo(type1 nom1, type2 nom2, type3 nom3,...) {

...

}

nom1,nom2,nom3 sontdesnomsde variablesquisontde type

type1 ,type2,type3

Autant de variables quenéessaire

Sans paramètre:

type nomAlgo() {

...

}

(26)

Commentaires

Néessaire pour:

larierl'utilisationde vosméthodessansonnaitre leur

fontionnement

indiquerla signiationdes variables paramètres

éviter les erreurs

/*****************************************

* Lit un nombre entier au lavier

*

* entree :

* - message : message d'invite

*

* sortie :

* - nombre de type int orrespondant à la valeur saisie

*****************************************/

int lire(String message) {

String str = JOptionPane.showInputDialog(null, message);

return Integer.parseInt(str) ;

SébastienVerel Séparationdeodesetméthodes

(27)

En Proessing

Proessing simpliationorientéegraphique de java

setup et draw :méthodesexéutées automatiquementpar

Proessing

méthodes"événementielles" :exéutéeslorsde l'apparitionde

l'événement

keypressed,onMouse...

(28)

En Proessing

Proessing simpliationorientéegraphique de java

Lorsqu'on dénitsespropresméthodes, ladénitionde la

méthode setup est néessaire

(29)

Utilisation de variables dans un algorithme

Enregistrer desrésultats intermédiares auours 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 :

Toutevariableutiliséedansunalgorithmedoitêtre délarée.

(30)

Portée des variables loales

les variablesloales(m,aet i) ne sontaessiblesquedanset

algorithme, 'est-à-direentredé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.

(31)

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)

(32)

Variables loales et paramètres

Les variablesdélarées en paramètre desalgorithmessontdes

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

Remarquesdans e ours :

valeurs initialesdes variables en paramètre :ellesdonnées

eetivementen exéutantl'algorithme(passage parvaleur)

impossiblede modierla valeurd'unevariableparl'exéution

d'un algorithme(pasde passageparadresse)

(33)

En Java...

void deviner(int n) {

int rep;

rep = n - 1;

while (rep != n) {

rep = lire("Proposer un nombre entier");

}

println("Gagné !");

}

variablesdélarées et aessiblesseulemententre

{

et

}

de la

méthode

(34)

Variable globale Java (Proessing)

Une méthode deproessing peut modierlavaleur d'unevariable

délarée àl'extérieurede laméthode

int n = 5;

void plus1() {

n := n + 1;

}

void setup() {

plus1();

print(n);

}

n apourvaleur 6

On parlealors devariableglobale paroppositionàvariableloale.

(35)

Variable globale Java

Eviter lesvariablesglobalespour éviterles modiations

malheureuses et inattendues

Il vaut mieuxérire:

int plus1(int n)

return n + 1 ;

}

void setup() {

int n = 5;

n = plus1(n);

print(n);

}

(36)

Valeur nale de l'algorithme

Il existe deuxpossibilités:

donner unevaleur nalesde type déterminé

Algorithme moyenne(n :entier) :réel

début

ne donner auunevaleur nale:on noterale typede retour

"rien" (void)

Algorithme deviner(n :entier) :rien

début

On donne lavaleur naleàl'aidede :

retournervaleur

Auune instrutionne s'exéute après retourner

(37)

En Java

Avevaleur nale:

type nomAlgo(type1 nom1, type2 nom2, type3 nom3,...) {

type var;

...

return var;

}

type estle typede lavaleur nale

Sans valeur nale:

void nomAlgo() {

...

}

(38)

En Java : une seule valeur nale

Attention:1 seulevaleur nale

return x, y ; // impossible !

Il faudraitutiliserdestypesomposés:voirplus tard...

(39)

En Java : ommentaires!

/*****************************************

* Lit un nombre entier au lavier

*

* entree :

* - message : message d'invite

*

* sortie :

* - nombre orrespondant à la valeur saisie

*****************************************/

int lire(String message) {

String str = JOptionPane.showInputDialog(null, message);

return Integer.parseInt(str) ;

}

(40)

Quoi t'est-e?

Maintenantnous avonsdes algorithmesave:

desdonnées en entrée,

desvaleurs nales de sortie

untraitementloalbiendéni

Méthode analytique(diviserpour régner):

Déouperle"gros" problème etdon leode en méthodes

indépendantes simples

Résolutionde l'ensembleduproblème par l'assemblageles

méthodes:réation de "gros"algorithmes

(41)

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

Suit laméthode de Desartes de larésolutionde problème

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

(42)

Démarhe analytique (rappels)

Préeptesdelaméthode

l'évidene :

" Lepremier étaitde ne reevoirjamais auunehose pour

vraieque jene laonnusseévidemment êtretelle;'est-à-dire,

d'éviter soigneusementlapréipitationet laprévention, etde

ne omprendre riende plus en mesjugementsque e quise

présenteraitsi lairementet sidistintement àmon esprit,que

jen'eusse auune oasionde le mettreen doute. "

l'analyse :

"Le seond,de diviserhaune desdiultés que

j'examinerais,en autant de parelles qu'ilsepourrait,etqu'il

seraitrequispourles mieuxrésoudre. "

(43)

Démarhe analytique (rappels)

Préeptesdelaméthode

lasynthèse etle raisonnement:

"Le troisième,de onduirepar ordremes pensées,en

ommençant parles objets lesplussimpleset les plusaisésà

onnaître,pour monterpeu àpeu omme pardegrésjusques à

laonnaissanedes plusomposés, etsupposant mêmede

l'ordreentre eux quine sepréèdent pointnaturellementles

uns lesautres."

le dénombrement :

"Etledernier,de fairepartoutdesdénombrements sientiers et

desrevues sigénérales, quejefusse assuréde ne rien omettre.

"

(44)

Sous-algorithme

Un sous-algorithmeest unalgorithme.

Algorithme monAlgo(paramètres) :type

début

...

...

retournervaleur

n

(45)

Exemple

alullasommede deux nombresentiers taperaulavier

Algorithme somme() :entier

début

nombresàsaisir

variable a , b :entier

a

saisir10()

b

saisir10()

retournera

+

b

n

(46)

Exemple

saisirun entierentre 0et 10

Algorithme saisir10( ):entier

début

variable a:entier

a

lire("Taperunnombre") tant quea

<

0??10

<

a faire

a

lire("nombre inorret,veuillezretaper unnombreentre 0 et 10")

ntant que

retournera

n

(47)

Exemple

saisirun entierentre 0et 10

Algorithme saisir10( ):entier

début

variable a:entier

a

lire("taperunnombre") tant quea

<

0OU 10

<

afaire

érire(nombreinorret,veuillezretaperunnombreentre0 et

10)

a

lire("taperunnombre") ntant que

retournera

n

(48)

Exemple : mieux

saisirun entierentre infet sup

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

début

variable a:entier

a

lire("taperunnombre") tant quea

<

inf OUsup

<

a faire

érire("nombreinorret, veuillezretaperunnombreentre ",

inf," et",sup)

a

lire("taperunnombre") ntant que

retournera

n

(49)

Exemple : traduire en JAVA

int saisir(int inf, int sup) {

int a ;

a = lire("taper un nombre");

while ( a < inf || a < sup) {

println("nombre inorret, veuillez retaper un nombre entre " + inf + " et " + sup);

a = lire("taper un nombre");

}

return a;

}

(50)

Exemple : traduire en JAVA

/*****************************************

* Lit un nombre entier au lavier omprise

* dans un interval

*

* entree :

* - inf : borne inférieure de l'interval

* - sup : borne supérieure de l'interval

*

* sortie :

* - nombre orrespondant à la valeur saisie

* appartenant à [inf, sup℄

*****************************************/

int saisir(int inf, int sup) {

int a ;

a = lire("taper un nombre");

while ( a < inf && a < sup) {

println("nombre inorret, veuillez retaper un nombre entre " + inf + " et " + sup);

a = lire("taper un nombre");

}

return a;

SébastienVerel Séparationdeodesetméthodes

(51)

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

a

lire("Taperunnombre") si a

<

n alors

érire(troppetit)

sinon

érire(tropgrand)

nsi

ntant que

érire("gagné")

n

(52)

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é")

n

(53)

Corretion de Point ave séparation de ode

// absisse du point

int x ;

// initilisation de l'absisse et de l'éran

void setup() {

// mise en forme de l'ran

size(500, 200);

smooth();

strokeWeight(20.0);

stroke(0, 100);

// initialisation de l'absisse

x = 0;

}

// dessin et mouvement du point

void draw() {

// effae l'éran

bakground(226);

// dessin du point

point(x, height / 2);

// modifiation de l'absisse

x = x + 1;

SébastienVerel Séparationdeodesetméthodes

(54)

Corretion de Point ave séparation de ode

// dessin et mouvement du point

void draw() {

// effae l'éran

bakground(226);

// dessin du point

point(x, height / 2);

// modifiation de l'absisse

x = x + 1;

}

(55)

Objetifs de la séane 4

1

Connaîtrele prinipe de séparationde ode

2

Erire orretement uneméthode java

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?

Références

Documents relatifs

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

ne retourner auune valeur : on notera le type de retour rien. Algorithme deviner(n : entier)

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é