• Aucun résultat trouvé

algo-prog Prepa INSA 1: Paramètres d'un Sous-Programme et variables locales

N/A
N/A
Protected

Academic year: 2022

Partager "algo-prog Prepa INSA 1: Paramètres d'un Sous-Programme et variables locales"

Copied!
34
0
0

Texte intégral

(1)

Paramètres

d'un sous-programme et variables locales

ici : uniquement paramètre "en entrée"

(type simple, passage "par valeur")

(2)

PROCEDURE nomProc(param1 : type,

param2 : type …) // objectif du SP

// rôle des paramètres VARIABLES (locales) varA : <typeA>

varB : <typeB>

DEBUT

<instructions>

FIN PROCEDURE

(3)

en commentaire :

rôle du SP et des paramètres

• permet à l'utilisateur de savoir comment

appeler le SP (sans galérer, sans lire le SP, …)

• doit décrire ce que fait le SP (pas le comment)

Règle de qualité :

Dire ce que l'on fait

et Faire ce que l'on dit

(4)

Passage de paramètres

PROCEDURE triangle(c : entier, coul : chaine) // dessine un triangle équilatéral de

coté c et colorié en couleur coul en tournant vers la gauche

VARIABLES (locales) i : entier

DEBUT baisse()

POUR i de 1 à 3 avance(c) gauche(120) FIN POUR

colorier avec la couleur coul FIN PROCEDURE

// progr. Princ. Dessine étoile jaune ALGORITHME

VARIABLES (du programme princ.) DEBUT

// 1er triangle pointe en haut triangle(30, "jaune")

// se placer sur la pointe du bas avance (10)

droite(60) avance (10) gauche (120)

// 2ème triangle pointe en bas triangle(30, "jaune")

FIN

Appel du SP Définition du SP

(5)

Passage de paramètres

PROCEDURE triangle(c : entier, coul : chaine) // dessine un triangle équilatéral de

coté c et colorié en couleur coul en tournant vers la gauche

VARIABLES (locales) i : entier

DEBUT baisse()

POUR i de 1 à 3 avance(c) gauche(120) FIN POUR

colorier avec la couleur coul FIN PROCEDURE

// progr. Princ. Dessine étoile jaune ALGORITHME

VARIABLES (du programme princ.) DEBUT

// 1er triangle pointe en haut triangle(30, "jaune")

// se placer sur la pointe du bas avance (10)

droite(60) avance (10) gauche (120)

// 2ème triangle pointe en bas triangle(30, "jaune")

FIN

Appel du SP Définition du SP

Quand le SP est appelé,

le 1er paramètre prend la 1ère valeur : c 30

Le 2ème paramètre prend la 2ème valeur : coul "jaune"

(6)

Passage de paramètres

PROCEDURE triangle(c : entier, coul : chaine) // dessine un triangle équilatéral de

coté c et colorié en couleur coul en tournant vers la gauche

VARIABLES (locales) i : entier

DEBUT baisse()

POUR i de 1 à 3 avance(c) gauche(120) FIN POUR

colorier avec la couleur coul FIN PROCEDURE

// progr. Princ. Dessine étoile jaune ALGORITHME

VARIABLES (du programme princ.) DEBUT

// 1er triangle pointe en haut triangle(30, "jaune")

// se placer sur la pointe du bas avance (10)

droite(60) avance (10) gauche (120)

// 2ème triangle pointe en bas triangle(30, "jaune")

FIN

Appel du SP Définition du SP

Quand le SP est appelé,

les instructions du SP sont exécutées avec les valeurs reçues

Avance(30)

Colorie en

"jaune"

(7)

Attention (retenez)

• Un SP ne peut utiliser QUE :

– Ses variables locales – Ses paramètres

• N'utilisez JAMAIS dans un SP une variable du programme principal

– Bien que ce soit possible sous certaines conditions – Les risques :

– SP difficilement réutilisable

– difficile à comprendre, à corriger, à maintenir, …

(8)

Exemple : les paramètres de la procédure write de turtle

Write text - the string representation of arg - at the current turtle position according to align ("left",

"center" or right") and with the given font.

If move is true, the pen is moved to the bottom-right

corner of the text. By default, move is False

(9)

certains SP acceptent différents jeux

de paramètres

(10)

Paramètres d'un sous-programme

Voici quelques procédures du module turtle

sans

paramètre

avec un paramètre avec deux apramètres up()

down() clear()

forward(nbPixels) left(angle)

backward(nbPixels) right(angle)

circle(rayon)

goto(x,y)

(11)

Paramètres d'un sous-programme (SP)

• placés entre parenthèses après le nom du SP

• le SP utilise la valeur du paramètre (ds le corps du SP)

• le programme appelant transmet au SP la valeur des paramètres

• les paramètres d'un SP existent uniquement DANS ce SP.

– un paramètre d'un SP-A ne peut pas être utilisé dans

un SP-B (sauf si SP_A appelle SP_B avec le même param.)

(12)

Paramètres d'un sous-programme (SP)

lors de la définition du SP lors de l'appel du SP pour chaque paramètre on

précise : - son nom - son type - son rôle

pour chaque paramètre on donne sa valeur :

- valeur directe

- valeur d'une variable - valeur d'une expression même nombre de paramètres (*)

même ordre des paramètres (*) même type des paramètres

(*) sauf si une valeur par défaut a été définie pour un paramètre et autre exception

(13)

Paramètres d'un sous-programme (SP)

• n est un paramètre du SP affichSiMult3

• le SP utilise le paramètre n

• le SP ne modifie pas le paramètre n

PROCEDURE affichSiMult3 (n : entier)

// affiche si le nombre n est multiple de 3

VARIABLES

// pas de variable locale ici

DEBUT

SI (n MOD 3) =? 0 ALORS

afficher (n, " est multiple de 3") FIN SI

FIN PROCEDURE

(14)

PROGRAMME comprendre les parametres

// affiche si des nombres sont multiples de 3

VARIABLES

(variables du progr. principal)

n1, i, p : entier // nombres à tester pour mult de 3

DEBUT

affichSiMult3 (111)

afficher ("entrer un nb entier SVP") saisir(n1)

affichSiMult3 (n1) POUR i de 77 à 88

affichSiMult3 (i) FIN POUR

p  2222

affichSiMult3 (p) FIN

le progr.

appelant le SP pourrait être

un autre SP

(15)

PROGRAMME comprendre les parametres

// affiche si des nombres sont multiples de 3

VARIABLES

(variables du progr. principal)

n1, i, p : entier // nombres à tester pour mult de 3

DEBUT

affichSiMult3 (111)

afficher ("entrer un nb entier SVP") saisir(n1)

affichSiMult3 (n1) POUR i de 77 à 88

affichSiMult3 (i) FIN POUR

p  2222

affichSiMult3 (p) FIN

appel du SP avec la valeur

111

(16)

Lorsqu'un SP avec paramètre est appelé …

PROCEDURE affichSiMult3 (111)

// affiche si le nombre n est multiple de 3

VARIABLES

// pas de variable locale ici

DEBUT

SI (111 MOD 3) =? 0 ALORS

afficher (111, " est multiple de 3") FIN SI

FIN PROCEDURE

• le paramètre prend la valeur qui lui est donnée

• le SP est exécuté avec cette valeur

(17)

PROGRAMME comprendre les parametres

// affiche si des nombres sont multiples de 3

VARIABLES

(variables du progr. principal)

n1, i, p : entier // nombres à tester pour mult de 3

DEBUT

affichSiMult3 (111)

afficher ("entrer un nb entier SVP") saisir(n1)

affichSiMult3 (n1) POUR i de 77 à 88

affichSiMult3 (i) FIN POUR

p  2222

affichSiMult3 (p) FIN

SI (111 MOD 3) =? 0 ALORS

afficher (111, " est multiple de 3") FIN SI

(18)

PROGRAMME comprendre les parametres

// affiche si des nombres sont multiples de 3

VARIABLES

(variables du progr. principal)

n1, i, p : entier // nombres à tester pour mult de 3

DEBUT

affichSiMult3 (111)

afficher ("entrer un nb entier SVP") saisir(n1)

affichSiMult3 (n1) POUR i de 77 à 88

affichSiMult3 (i) FIN POUR

p  2222

affichSiMult3 (p) FIN

appel du SP avec la valeur

de la variable n1

n1 a une

valeur

(19)

PROGRAMME comprendre les parametres

// affiche si des nombres sont multiples de 3

VARIABLES

(variables du progr. principal)

n1, i, p : entier // nombres à tester pour mult de 3

DEBUT

affichSiMult3 (111)

afficher ("entrer un nb entier SVP") saisir(n1)

affichSiMult3 (n1) POUR i de 77 à 88

affichSiMult3 (i) FIN POUR

p  2222

affichSiMult3 (p) FIN

appel du SP avec la valeur

de la variable p

p est une var

du prog

appelant.

(20)

Paramètres d'un sous-programme (SP)

Dans la définition du SP avec un paramètre

• le nom du paramètre est "muet", (formel), cela ne change rien lors de l'appel du SP

PROCEDURE affichSiMult3 (n : entier)

// affiche si le nombre n est multiple de 3

VARIABLES

// pas de variable locale ici

DEBUT

SI (n MOD 3) =? 0 ALORS

afficher (n, " est multiple de 3") FIN SI

FIN PROCEDURE

(21)

Paramètres d'un sous-programme (SP)

que le paramètre s'appelle p ou n ne change RIEN

PROCEDURE affichSiMult3 (p : entier)

// affiche si le nombre p est multiple de 3

VARIABLES

// pas de variable locale ici

DEBUT

SI (p MOD 3) =? 0 ALORS

afficher (p, " est multiple de 3") FIN SI

FIN PROCEDURE

(22)

PROGRAMME comprendre les parametres

// affiche si des nombres sont multiples de 3

VARIABLES n1, i, p : entier // nombres à tester

DEBUT

affichSiMult3 (111) saisir(n1)

affichSiMult3 (n1) p  2222

affichSiMult3 (p) FIN

PROCEDURE affichSiMult3 (p : entier)

// affiche si le nombre p est multiple de 3

VARIABLES // pas de variable locale ici

DEBUT

SI (p MOD 3) =? 0 ALORS

afficher (p, " est multiple de 3") FIN SI

FIN PROCEDURE

le param du SP n'est connu QUE dans le SP.

(ce p n'est pas le même que la var p du progr.

principal

les var du prog.

principal ne doivent être utilisées QUE dans le progr. princ.

ici le progr. principal donne

(transmet) la valeur 2222 au SP

(23)

Retenez

Une variable utilisée dans un SP est :

• soit un paramètre

• soit une variable locale Dans la définition d'un SP :

• utiliser les paramètres

• ne pas modifier la valeur des paramètres

Remarque : dans cette partie du cours

on ne considère que les paramètres en entrée

(24)

PROCEDURE test()

// affiche si des nombres au choix sont pairs ou multiples de 3

VARIABLES (déclaration des variables locales)

n1, n2 : entier // nombre à tester pour mult de 3

DEBUT

affichSiPair() affichSiPair()

afficher ("entrer 2 nb entiers et enter à chaque fois") saisir(n1)

saisir(n2)

affichSiMult3(n1)

affichSiMult3(n2)

FIN PROCEDURE

(25)

PROCEDURE affichSiPair () // pas de paramètre // saisit un nombre entier et affiche s'il est pair

VARIABLES (déclaration des variables locales)

n: entier // nombre saisit par l'utilisateur DEBUT

afficher("Entrer un nb svp") saisir(n)

SI (n MOD 2) =? 0 ALORS afficher (n, " est pair") SINON

afficher (n, " est impair") FIN SI

FIN PROCEDURE

n est une variable locale du SP

donc on donne une

valeur à n dans le SP

(26)

PROCEDURE nomProc(param1 : type,

param2 : type …)

// objectif du SP et rôle des paramètres

VARIABLES (déclaration des variables locales)

var1 : type // rôle de la variable var2 : type // rôle de la variable

DEBUT

<instructions>

FIN PROCEDURE

(27)

Paramètres (*) Variables locales

définis entre les ( ) après le nom du SP

définies après l'entête du SP valeur transmise par le progr.

appelant

valeur initialisée dans le SP ne pas modifier sa valeur dans le SP

le progr. appelant doit les connaitre (nom, type et rôle)

le progr. appelant ignore tout de leur existence leur rôle est décrit dans le

commentaire qui décrit le SP

utilisés dans la définition du SP

ne sont utilisables que dans le corps du SP

(*) dans cette partie du cours, on ne considère que les paramètres en entrée

(28)

Paramètres d'un sous-programme (SP)

• Est-ce qu'on peut utiliser le même nom de paramètre dans plusieurs SP ?

– OUI, aucune conséquence

• Est-ce qu'on peut utiliser le même nom de variable locale dans plusieurs SP ?

– OUI, aucune conséquence

(29)

Exercices rapides sur les paramètres d'un SP

PROCEDURE testA (a : réel) // bla bla

VARIABLES i : entier DEBUT

POUR i de 1 à 10

afficher ("voila ", i) FIN POUR

afficher ("c'est fini") FIN

• Que dire ?

• Que fait le progr.

suivant ?

testA(10)

testA(0)

(30)

Exercices rapides sur les paramètres d'un SP

PROCEDURE testA (a : réel) // bla bla

VARIABLES i : entier DEBUT

POUR i de 1 à 10

afficher ("voila ", i) FIN POUR

afficher ("c'est fini") FIN

• Que dire ?

• Que fait le prog suivant ?

testA(10) testA(0)

Le paramètre a n'est pas utilisé dans le SP

Les 2 appels de la procédure font

exactement lamême chose

(31)

Exercices rapides sur les paramètres d'un SP

PROCEDURE testB (b : réel) // bla bla

VARIABLES i : entier DEBUT

POUR i de 1 à 10 b  i MOD 3 afficher ( b ) FIN POUR

afficher ("c'est fini") FIN

• Que dire ?

• Que fait le prog suivant ?

testB(10)

testB(0)

(32)

Exercices rapides sur les paramètres d'un SP

PROCEDURE testB (b : réel) // bla bla

VARIABLES i : entier DEBUT

POUR i de 1 à 10 b  i MOD 3 afficher ( b ) FIN POUR

afficher ("c'est fini") FIN

• Que dire ?

• Que fait le prog suivant ?

testB(10) testB(0)

La valeur du paramètre b n'est pas utilisée dans le SP

Les 2 appels de la

procédure font exactement

lamême chose

(33)

Ces deux programmes sont ils identiques ?

PROCEDURE SPA(a : entier)

PROCEDURE SPB(b : entier, r : réel)

PROCEDURE SPC ( ) // bla bla

VARIABLE e : entier DEBUT

e  hasard(100, 999) SPB(e, 99.9)

SPB(e MOD 3, 99.9) SPA (e)

FIN

PROCEDURE SPA(c : entier)

PROCEDURE SPB(c : entier, r : réel)

PROCEDURE SPC ( ) // bla bla

VARIABLE c : entier DEBUT

c  hasard(100, 999) SPB(c, 99.9)

SPB(c MOD 3, 99.9) SPA (c)

FIN

(34)

Ces deux programmes sont ils identiques ?

PROCEDURE SPA(a : entier)

PROCEDURE SPB(b : entier, r : réel)

PROCEDURE SPC ( ) // bla bla

VARIABLE e : entier DEBUT

e  hasard(100, 999) SPB(e, 99.9)

SPB(e MOD 3, 99.9) SPA (e)

FIN

PROCEDURE SPA(c : entier)

PROCEDURE SPB(c : entier, r : réel)

PROCEDURE SPC ( ) // bla bla

VARIABLE c : entier DEBUT

c  hasard(100, 999) SPB(c, 99.9)

SPB(c MOD 3, 99.9) SPA (c)

FIN

Exactement

identiques

Références

Documents relatifs

Pour donner une adresse à une interface, on tape la commande ifconfig : ifconfig eth0 192.168.0.1 netmask 255.255.255.0. Cette commande donne à eth0 l'adresse

L’analyse statistique de l’effet bélier et de la synchronisation n’a pas révélé de différence significative pour la fertilité (p&gt;0.05), alors que, des différences

GROUPE DE DEUXIÈME ESPÈCE DONT LES TRANSFORMATIONS NE SONT PAS TOUTES DEUX A DEUX

Et alors le point où le paramètre du premier des diamètres conjugués égaux coupe ce diamètre, coïncide avec le centre. Chacun«&lt;fes quatre demi-diamètres conjugués égaux est

FONCTION longSuiteTcheque(n:entier)  entier FONCTION estBissextile(an:entier)  booléen FONCTION pourcentPairTcheq(n:entier)  réel... Entêtes

tant qu'on entre une valeur positive, on redemande de saisir alors qu'on voudrait s'arréter. Retenez : TANT QUE + condition de poursuite de

Ecrire une fonction booléenne qui retourne vrai si la position (xJoueur,yJoueur) d'un joueur se situe à l'intérieur d'un terrain rectangle de largeur et longueur données en

En Python, l'instruction &#34;for&#34; répète un bloc d'instructions pour chaque valeur dans une liste donnée, dans l'ordre où elles apparaissent Exemple :. La fonction