Lorsque des lignes de code se répètent à plusieurs endroits du programme on va les mettre en ...facteur ou plutôt en ...fonction
Ainsi dans le programme ci-dessous on répète deux fois l'affichage des 4 dés
void setup(){
int de1,de2,de3,de4;
de1 = int(random(6)+ 1;
de2 = int(random(6)+ 1;
de3 = int(random(6)+ 1;
de4 = int(random(6)+ 1;
if((de1 != 6) && (de2 != 6) && (de3 != 6) && (de4 != 6)){
println("dé 1 vaut "+de1);
println("dé 2 vaut "+de2);
println("dé 3 vaut "+de3);
println("dé 4 vaut "+de4);
println("*************");
println("Perdu");
else{
println("dé 1 vaut "+de1);
println("dé 2 vaut "+de2);
println("dé 3 vaut "+de3);
println("dé 4 vaut "+de4);
println("*************");
println("Gagné");
}
}
On va donc créer une fonction afficher4D() et par la même occasion créer une fonction lancer4D()
int de1,de2,de3,de4;
void lancer4D(){
de1 = int(random(6)+ 1;
de2 = int(random(6)+ 1;
de3 = int(random(6)+ 1;
de4 = int(random(6)+ 1;
}
void afficher4D(){
println("dé 1 vaut "+de1);
println("dé 2 vaut "+de2);
println("dé 3 vaut "+de3);
println("dé 4 vaut "+de4);
}
void setup(){
lancer4D();
if((de1 != 6) && (de2 != 6) && (de3 != 6) && (de4 != 6)){
afficher4D();
println("*************");
println("Perdu");
else{
afficher4D();
println("*************");
println("Gagné");
}
}
On peut encore augmenter la lisibilité du programme en créant une fonction testerResultat()
Voilà le programme
int de1,de2,de3,de4;
//------------------------------------------------------------------------
void lancer4D(){
de1 = int(random(6))+ 1;
de2 = int(random(6))+ 1;
de3 = int(random(6))+ 1;
de4 = int(random(6))+ 1;
}
//------------------------------------------------------------------------
void afficher4D(){
println("dé 1 vaut "+de1);
println("dé 2 vaut "+de2);
println("dé 3 vaut "+de3);
println("dé 4 vaut "+de4);
}
//------------------------------------------------------------------------
void testerResultat(){
if((de1 != 6) && (de2 != 6) && (de3 != 6) && (de4 != 6)){
afficher4D();
println("*************");
println("Perdu");
}
else{
afficher4D();
println("*************");
println("Gagné");
}
}
//--------------------fonction principale--------------------------------
void setup(){
lancer4D();
testerResultat();
}
Une fonction en mathématique prend une ou plusieurs variables en entrée et retourne une valeur
Nous avons vu que la fonction abs() de Processing ne fonctionne que pour les variables de type float. Nous allons étendre cette fonction au type double, en créant notre fonction nommée valAbs qui prend en paramètre un double et retourne un double
Ceci nous permettra d'étendre le programme de calcul d'une valeur approchée de racine de 2 aux double
double valAbs(double x){
if(x < 0) return -x;
else return x;
}
void setup(){
//deux termes consécutifs de la suite
double racine1;
double racine2;
/*on utilise une variable intermédiaire racine
pour mettre le contenu de racine2 dans racine1
et recalculer une nouvelle valeur de racine2
à partir de racine1 sans perdre ni la valeur
de racine1 ni la valeur de racine2*/
double racine;
double precision = pow(10,-10);
racine1 = 2;
racine2 = 1.5;
/* On arrête la répétition lorsque la distance
entre deux termes consécutifs racine1 et racine2
est inférieure à une precision fixée au départ ici 10^(-6)*/
while (valAbs(racine1 - racine2) > precision){
racine = racine2;
racine2 = 0.5*(racine2+2/racine2);
racine1 = racine;
}
println("Une valeur approchée de la racine carrée de 2 est"
+racine2+" à "+ precision +" près");
}
Déjà chez le philosophe français René Descartes on trouve une méthode d' analyse :
"...au lieu de ce grand nombre de préceptes dont la logique est composée, je crus que j'aurais assez des quatre suivants, pourvu que je pris une ferme et constante résolution de ne manquer pas une seule fois à les observer.
Le premier était de ne recevoir jamais aucune chose pour vraie que je ne la connusse évidemment être telle; c'est à dire d'éviter soigneusement la précipitation et la prévention; et de ne comprendre rien de plus en mes jugements que ce qui se présenterait si clairement et si distinctement à mon esprit que je n'eusse aucune occasion de le mettre en doute.
Le second, de : diviser chacune des difficultés que j'examinerais en autant de parcelles qu'il se pourrait et qu'il serait requis pour les mieux résoudre.
Le troisième, de conduire par ordre mes pensées, en commençant par les objets les plus simples et les plus aisés à connaître, pour monter peu à peu, comme par degrés, jusques à la connaissance des plus composés; et supposant même de l'ordre entre ceux qui ne se précédent point naturellement les uns les autres.
Et le dernier, de faire partout des dénombrements si entiers, et des revues si générales, que je fusse assuré de ne rien omettre." (Discours de la méthode).Par conséquent dès le début de la conception du programme il faut décomposer le problèmes en sous-problèmes suffisamment élémentaires
Créer une fonction qui trace dans la fenêtre graphique un cercle tangent à un des bords de la fenêtre
(Balle rebondissante) (/10 points)
Il s'agit de faire un programme qui fait déplacer une balle blanche sur un fonds noir. Cette balle rebondit sur les parois de la fenêtre
Le mouvement de la balle est une illusion : la balle est redessinée 60 fois par seconde. Autrement dit si la position du centre de la balle est un couple d'entiers $(n_0;m_0)$ à un instant donné alors sa nouvelle position après $\dfrac{1}{60}$ s est $(n;m)$ tel que $n= n_0+v_x$ et $m=m_0+v_y$
La balle est repérée par ses coordonnées (x,y) et a un vecteur vitesse de coordonnées (vx,vy)
On déclare quatre variables globales de type int x,y,vx,vy et RAYON intialisé à 20
(1 point) Créer une fonction generationBalle() qui crée une balle blanche de rayon 20 pixels au centre du terrain et qui appelle initialisationVitesse()
Tester la fonction
(2 points) Créer la fonction miseAJourPosition(int a,int b) et l'insérer dans draw() pour que la position de la balle soit mise à jour 60 fois par seconde
Si vous testez le programme la balle va disparaître il faut à présent gérer les rebonds
(2 points) Créer une fonction toucheBord() qui retourne vrai si la balle touche le bord de la fenêtre (tenir compte de la variable RAYON)
Cette fonction sera appelée dans draw()
(2 points) Créer une fonction reflexion() qui change vx et vy lorsque la balle touche le bord
Cette fonction sera appelée dans draw()