Académique Documents
Professionnel Documents
Culture Documents
Java
1/18
Rappel : méthodes setup et draw
Le code ci-dessous permet de tracer des lignes sans arrêt
(point de départ : le centre de la toile)
1 v o i d setup ( ) {
2 p r i n t l n ( " Salut toto " ) ;
3 size (600 ,600) ;
4 }
5 v o i d draw ( ) {
6 l i n e (300 ,300 , random ( 6 0 0 ) , random ( 6 0 0 ) ) ;
7 p r i n t l n ( " rebonjour toto " ) ;
8 }
On peut dire qu’une méthode permet de donner un nom à
plusieurs lignes de code
1 les lignes 2-3 : un bloc de code appelé setup()
2/18
Rappel : méthodes setup et draw
Le code ci-dessous permet de tracer des lignes sans arrêt
(point de départ : le centre de la toile)
1 v o i d setup ( ) {
2 p r i n t l n ( " Salut toto " ) ;
3 size (600 ,600) ;
4 }
5 v o i d draw ( ) {
6 l i n e (300 ,300 , random ( 6 0 0 ) , random ( 6 0 0 ) ) ;
7 p r i n t l n ( " rebonjour toto " ) ;
8 }
On peut dire qu’une méthode permet de donner un nom à
plusieurs lignes de code
1 les lignes 2-3 : un bloc de code appelé setup()
2/18
Fonctions
3/18
Fonctions
3/18
Exemple de définition de fonction :
i n t calculerCube ( i n t x ) {
r e t u r n x∗x∗ x ; entrée : une variable entière
} sortie : une variable entière
Exemple de définition de fonction qui ne renvoie rien :
v o i d d i r e B o n j o u r ( S t r i n g nomPersonne ) {
p r i n t l n ( " Bonjour " +nomPersonne ) ;
}
Exemples d’appels de fonctions
...
i n t n = calculerCube ( 5 ) ; / / n v a u t 125
d i r e B o n j o u r ( " Toto " ) ; / / A f f i c h e " Bonjour Toto "
...
Exemple de définition de fonction :
i n t calculerCube ( i n t x ) {
r e t u r n x∗x∗ x ; entrée : une variable entière
} sortie : une variable entière
Exemple de définition de fonction qui ne renvoie rien :
v o i d d i r e B o n j o u r ( S t r i n g nomPersonne ) {
p r i n t l n ( " Bonjour " +nomPersonne ) ;
}
Exemples d’appels de fonctions
...
i n t n = calculerCube ( 5 ) ; / / n v a u t 125
d i r e B o n j o u r ( " Toto " ) ; / / A f f i c h e " Bonjour Toto "
...
Exemple de définition de fonction :
i n t calculerCube ( i n t x ) {
r e t u r n x∗x∗ x ; entrée : une variable entière
} sortie : une variable entière
Exemple de définition de fonction qui ne renvoie rien :
v o i d d i r e B o n j o u r ( S t r i n g nomPersonne ) {
p r i n t l n ( " Bonjour " +nomPersonne ) ;
}
Exemples d’appels de fonctions
...
i n t n = calculerCube ( 5 ) ; / / n v a u t 125
d i r e B o n j o u r ( " Toto " ) ; / / A f f i c h e " Bonjour Toto "
...
Définition de fonctions entrées : une chaine de
avec plusieurs entrées : caractères et une lettre
v o i d d i r e S a l u t ( S t r i n g nom , char i n i t i a l e P r e n o m ) {
p r i n t l n ( " S a l u t " + i n i t i a l e P r e n o m + " " +nom) ;
}
Moyenne de 3 entiers : sortie : float pas int
f l o a t calculerMoyenne ( i n t a , i n t b , i n t c ) {
r e t u r n ( f l o a t ) ( a+b+c ) / 3 ; / / c o n v e r s i o n f l o a t
}
Appeler ces fonctions :
... apostrophes pour char
d i r e S a l u t ( " Toto " , ’ T ’ ) ; / / => " S a l u t T Toto "
d i r e S a l u t ( " T i t i " , ’S ’ ) ; / / => " S a l u t S T i t i "
f l o a t m = calculerMoyenne ( 7 , 7 , 8 ) ; / /m=7.33
...
Définition de fonctions entrées : une chaine de
avec plusieurs entrées : caractères et une lettre
v o i d d i r e S a l u t ( S t r i n g nom , char i n i t i a l e P r e n o m ) {
p r i n t l n ( " S a l u t " + i n i t i a l e P r e n o m + " " +nom) ;
}
Moyenne de 3 entiers : sortie : float pas int
f l o a t calculerMoyenne ( i n t a , i n t b , i n t c ) {
r e t u r n ( f l o a t ) ( a+b+c ) / 3 ; / / c o n v e r s i o n f l o a t
}
Appeler ces fonctions :
... apostrophes pour char
d i r e S a l u t ( " Toto " , ’ T ’ ) ; / / => " S a l u t T Toto "
d i r e S a l u t ( " T i t i " , ’S ’ ) ; / / => " S a l u t S T i t i "
f l o a t m = calculerMoyenne ( 7 , 7 , 8 ) ; / /m=7.33
...
Définition de fonctions entrées : une chaine de
avec plusieurs entrées : caractères et une lettre
v o i d d i r e S a l u t ( S t r i n g nom , char i n i t i a l e P r e n o m ) {
p r i n t l n ( " S a l u t " + i n i t i a l e P r e n o m + " " +nom) ;
}
Moyenne de 3 entiers : sortie : float pas int
f l o a t calculerMoyenne ( i n t a , i n t b , i n t c ) {
r e t u r n ( f l o a t ) ( a+b+c ) / 3 ; / / c o n v e r s i o n f l o a t
}
Appeler ces fonctions :
... apostrophes pour char
d i r e S a l u t ( " Toto " , ’ T ’ ) ; / / => " S a l u t T Toto "
d i r e S a l u t ( " T i t i " , ’S ’ ) ; / / => " S a l u t S T i t i "
f l o a t m = calculerMoyenne ( 7 , 7 , 8 ) ; / /m=7.33
...
Processing exécute setup() en premier
La première fonction exécutée est :
setup() sous Processing
main() sous C/C++/Java
6/18
Processing exécute setup() en premier
La première fonction exécutée est :
setup() sous Processing
main() sous C/C++/Java
i n t calculerMin ( i n t a , i n t b) {
i f ( a<b )
return a ;
else
return b ;
}
v o i d setup ( ) {
i n t x = ( i n t ) random ( 2 0 0 ) , y=( i n t ) random ( 3 0 0 ) ;
i n t rayon = c a l c u l e r M i n ( x , y ) ;
size (600 ,600) ;
e l l i p s e ( x , y , 2 ∗ rayon , 2 ∗ rayon ) ;
} / / 2∗ rayon=d i a m è t r e=>t o u c h e r bord
6/18
vu
La fonction draw() déjà
8/18
Mode actif et mode statique déjà vu
Processing connait deux modes :
mode actif On déclare des fonctions et toutes les calculs/affi-
chages sont écrit dans les (corps des) fonctions
mode statique On ne déclare pas de fonction et on écrit une
séquence d’instruction, comme jusqu’à aujourd’hui
Impossible de mélanger les deux modes : comment exécuter le
programme ci-après ?
...
p r i n t l n ( " Toto " ) ;
v o i d setup ( ) {
p r i n t l n ( " Dans l e corps de l a f o n c t . setup " ) ;
}
...
Impossible de savoir quand afficher Toto :
avant ou après l’appel à setup() ?
8/18
Tester le passage des paramètres par valeur
void testModif ( i n t x , i n t y ) {
x = 9;
y = 12 ;
}
v o i d setup ( ) { les valeurs de a et b
i n t a=4 ; sont affectées à x et y
i n t b=5 ;
testModif (a , b) ;
println (a) ;
println (b) ;
}
Qu’affiche ce programme ?
9/18
Tester le passage des paramètres par valeur
void testModif ( i n t x , i n t y ) {
x = 9;
y = 12 ;
}
v o i d setup ( ) { les valeurs de a et b
i n t a=4 ; sont affectées à x et y
i n t b=5 ;
testModif (a , b) ;
println (a) ;
println (b) ;
}
Qu’affiche ce programme ?
Exceptions à la régle plus haute du passage par valeur : les
tableau et les objets (à voir plus tard).
9/18
Une fonction avec un tableau
i n t sommeTab ( i n t [ ] t a b ) {
/ / t a b : v i s i b l e que dans sommeTab ( ) ;
r e t u r n tab [ 0 ] + tab [ 1 ] + tab [ 2 ] ;
}
v o i d setup ( ) {
/ / t : v i s i b l e que dans setup ( )
i n t [ ] t = new i n t [ 3 ] ;
t [0] = 1;
t [1] = 2;
t [2] = 3;
p r i n t l n ( sommeTab ( t ) ) ;
}
10/18
Une autre variable locale s
i n t sommeTabMult2 ( i n t [ ] t a b ) {
int s = 2;
/ / s v i s i b l e que dans sommeTabMult2 ( . . . ) !!!
r e t u r n s ∗( tab [ 0 ] + tab [ 1 ] + tab [ 2 ] ) ;
}
v o i d setup ( ) {
/ / t : v i s i b l e que dans setup ( )
i n t [ ] t = new i n t [ 3 ] ;
t [0] = 1;
t [1] = 2;
t [2] = 3;
p r i n t l n ( sommeTabMult2 ( t ) ) ;
}
11/18
Enchainer l’appel de fonctions
i n t doubler ( i n t x ) {
r e t u r n 2∗x ; 3 appels imbriqués
}
v o i d setup ( ) {
p r i n t l n ( doubler ( doubler ( doubler ( 3 ) ) ) ) ;
}
12/18
Enchainer l’appel de fonctions
i n t doubler ( i n t x ) {
r e t u r n 2∗x ;
3 appels imbriqués
}
v o i d setup ( ) {
p r i n t l n ( doubler ( doubler ( doubler ( 3 ) ) ) ) ;
}
On suppose que int detMin(int, int) est déjà écrite
detMin(...) renvoie la valeur minimale et ne touche pas
aux variables globales ! (travail en équipe)
i n t [ ] x={ 7 ,2 ,19 ,11 } ;
v o i d setup ( ) {
i n t minDesQuatres=detMin ( detMin ( x [ 0 ] , x [ 1 ] ) ,
detMin ( x [ 2 ] , x [ 3 ] ) ) ;
p r i n t l n ( minDesQuatres ) ;
}
12/18
Enchainer l’appel de fonctions
i n t doubler ( i n t x ) {
r e t u r n 2∗x ; 3 appels imbriqués
}
v o i d setup ( ) {
p r i n t l n ( doubler ( doubler ( doubler ( 3 ) ) ) ) ;
}
Ces deux fonctionns renvoient le même résultat :
i n t sommeTabMult2 ( i n t [ ] t a b ) {
int s = 2;
r e t u r n s ∗( tab [ 0 ] + tab [ 1 ] + tab [ 2 ] ) ;
}
i n t sommeTabMult2Bis ( i n t [ ] t a b ) {
r e t u r n d o u b l e r ( sommeTab ( t a b ) ) ;
}
12/18
Variables : globales, locales ou arguments
Comment corriger et lancer ce programme ?
int x; / / x=v a r i a b l e g l o b a l e
i n t detMin ( i n t a , i n t b ) { / / a e t b : arguments
println (x) ; / / x v i s i b l e partout
i f ( a<=b )
return a ;
return b ; / / on a r r i v e i c i s i b<a
p r i n t l n ( " Toto ??? " ) ; / / on a r r i v e j a m a i s i c i
}
v o i d setup ( ) {
x = 8;
int y = 9; / / y : variable locale
y = detMin ( x , y ) ;
println (y) ;
println (a) ; / / e r r e u r : a n ’ e s t pas
} / / déclaré i c i !
13/18
Variables : globales, locales ou arguments
Comment corriger et lancer ce programme ?
int x; / / x=v a r i a b l e g l o b a l e
i n t detMin ( i n t a , i n t b ) { / / a e t b : arguments
println (x) ; / / x v i s i b l e partout
i f ( a<=b )
return a ;
return b ; / / on a r r i v e i c i s i b<a
p r i n t l n ( " Toto ??? " ) ; / / on a r r i v e j a m a i s i c i
} unreachable code
v o i d setup ( ) {
x = 8;
int y = 9; / / y : variable locale
y = detMin ( x , y ) ;
println (y) ;
println (a) ; / / e r r e u r : a n ’ e s t pas
} a can not
/ / dbe
é cresolved
l a r é i cto
i !a variable
13/18
Attention aux variables globales ! ! !
Quel est le résultat/affichage de ce programme ? ? ?
int x; / / x=v a r i a b l e g l o b a l e
i n t detMin ( i n t a , i n t b ) { / / a e t b : arguments
x = x−1 ; / / x v i s i b l e partout
i f ( a<=b )
return a ;
return b ; / / on a r r i v e i c i s i b<a
}
v o i d setup ( ) {
x = 8;
int y = 9; / / y : variable locale
y = detMin ( x , y ) ; / / l ’ appel m o d i f i e x ! ! !
y = detMin ( x , y ) ;
println (y) ;
}
14/18
Le passage des paramètres aux fonctions
int f ( int x, int y) {
r e t u r n x+y ;
}
v o i d setup ( ) {
i n t somme ;
somme = f ( 2 , 3 ) ; / / somme d e v i e n t 5
i n t a=4 , b=5 ;
somme = f ( a , b ) ; / / somme d e v i e n t 9
p r i n t l n (somme) ;
}
x et y sontvisibles/connus uniquement à l’intérieur (du
corps) de la fonction f(...)
a et b sont visibles uniquement à l’intérieur (du corps) de
la fonction setup()
15/18
Le passage des paramètres aux fonctions
int f ( int x, int y) {
r e t u r n x+y ; les valeurs de a et b
} sont affectées à x et y
v o i d setup ( ) {
i n t somme ;
somme = f ( 2 , 3 ) ; / / somme d e v i e n t 5
i n t a=4 , b=5 ;
somme = f ( a , b ) ; / / somme d e v i e n t 9
p r i n t l n (somme) ;
}
x et y sontvisibles/connus uniquement à l’intérieur (du
corps) de la fonction f(...)
a et b sont visibles uniquement à l’intérieur (du corps) de
la fonction setup()
15/18
Arrêter l’appel à draw() après 50 itérations
16/18
Programmation risquée
Soit le même programme en Processing ou C : qu’est ce qu’il
affiche ?
Processing C
i n t f o r t u n e = 100000 ; i n t f o r t u n e = 100000 ;
void direSiJeSuisRiche ( ) { void direSiJeSuisRiche ( ) {
i f ( f o r t u n e>=100000) i f ( f o r t u n e>=100000)
p r i n t l n ( " Riche " ) ; p r i n t f ( " Riche " ) ;
} }
v o i d setup ( ) { v o i d main ( ) {
i n t f o r t u n e = 100 ; i n t f o r t u n e = 100 ;
direSiJeSuisRiche ( ) ; direSiJeSuisRiche ( ) ;
} }
Réponse : fortune 6= fortune
la première est une variable globale, la deuxième est locale
17/18
Programmation risquée
Soit le même programme en Processing ou C : qu’est ce qu’il
affiche ?
Processing C
i n t f o r t u n e = 100000 ; i n t f o r t u n e = 100000 ;
void direSiJeSuisRiche ( ) { void direSiJeSuisRiche ( ) {
i f ( f o r t u n e>=100000) i f ( f o r t u n e>=100000)
p r i n t l n ( " Riche " ) ; p r i n t f ( " Riche " ) ;
} }
v o i d setup ( ) { v o i d main ( ) {
i n t f o r t u n e = 100 ; i n t f o r t u n e = 100 ;
direSiJeSuisRiche ( ) ; direSiJeSuisRiche ( ) ;
} }
Réponse : fortune 6= fortune
la première est une variable globale, la deuxième est locale
17/18
Programmation ultra-risquée
i n t fortune ;
void f ( i n t fortune ) {
f o r t u n e=9 ;
}
void g ( ) {
i n t fortune ;
f o r t u n e = 15 ;
}
void h ( ) {
fortune = 9 ;
} Que affiche ce programme ?
v o i d setup ( ) {
f o r t u n e = 12 ;
f ( fortune ) ;
p r i n t l n ( fortune ) ;
g() ;
p r i n t l n ( fortune ) ;
h() ;
p r i n t l n ( fortune ) ;
} 18/18
Programmation ultra-risquée
i n t fortune ;
void f ( i n t fortune ) {
f o r t u n e=9 ;
} Attention :
void g ( ) {
i n t fortune ; fortune 6= fortune 6= fortune
f o r t u n e = 15 ;
}
void h ( ) { la première est une va-
fortune = 9 ; riable gloable
} visible partout
v o i d setup ( ) {
la deuxème est une va-
f o r t u n e = 12 ;
f ( fortune ) ; riable locale, un argument
p r i n t l n ( fortune ) ; de la fonction f()
g() ; la troisème est une variable
p r i n t l n ( fortune ) ;
locale dans la fonction g()
h() ;
p r i n t l n ( fortune ) ;
} 18/18
Programmation ultra-risquée
i n t fortune ;
void f ( i n t fortuneArg ) {
f o r t u n e A r g=9 ;
}
void g ( ) { Solution : utiliser des noms de
i n t fortuneLocal ; variables différents!!
f o r t u n e L o c a l = 15 ;
}
void h ( ) {
fortune = 9 ;
}
v o i d setup ( ) {
f o r t u n e = 12 ;
f ( fortune ) ;
p r i n t l n ( fortune ) ;
g() ;
p r i n t l n ( fortune ) ;
h() ;
p r i n t l n ( fortune ) ;
} 18/18