B › 9 - Fonctions

Pour réaliser une fonction il est nécessaire de déterminer :
  • si la fonction renvoie ou non une valeur, et le cas échéant, le type de la valeur retournée,
  • si la fonction nécessite des paramètres d'entrée, et le cas échéant, le type de chacun des paramètres.

Ellipses emboîtées

On considère la fonction suivante :

float maxi(float x, float y, float z) {

  if (x>=y && x>=z) {

    return x;

  }

  else if (y>=z) {

    return y;

  }

  else return z;

}

Que réalise cette fonction ? Que renvoie-t-elle ?

On souhaite tracer trois ellipses dont les "largeurs" sont trois réels aléatoires compris entre 1 et 150.

La plus "large" sera tracée en blanc, la moins "large" en bleu et la 3e en vert.

Le programme ci-dessous utilise la fonction maxi() vue précédemment, ainsi que deux autres fonctions permettant de connaître soit le minimum de trois réels soit le nombre médian parmi trois réels.

Compléter ce programme, dont l'exécution fournit une succession d'images du type de l'illustration ci-contre, réactualisée chaque seconde.

void setup(){

  size(200,200);

  frameRate(1);

}

void draw(){

  background(240,240,240);

  float nb1=random(1, 150);

  float nb2=random(1, 150);

  float nb3=random(1, 150);

  fill(255, 255, 255); // blanc

  ellipse (width/2, height/2, maxi(nb1, nb2, nb3), 50);

  fill(90, 150, 100); // vert

  ellipse (... , ... , medi(nb1, nb2, nb3), ...);// à compléter

  fill(50, 100, 180); // bleu

  ellipse (... , ... , mini(nb1, nb2, nb3), ...);// à compléter

}

float maxi(float x, float y, float z) { // définition de la fonction maxi

  if (x>=y && x>=z) {

    return x;

  }

  else if (y>=z) {

    return y;

  }

  else return z;

}

... mini(...){ // définition de la fonction mini()

  // à compléter

}

float medi(float x, float y, float z) { // définition de la fonction medi

return (x+y+z-maxi(x, y, z)-mini(x, y, z)); // la fonction medi() appelle les fonctions maxi() et mini()

}

Tracer des croix

On souhaite créer une fonction qui "trace une croix" en une position variable de l'écran et avec une taille variable.

La fonction traceCroix() prend ainsi trois paramètres (l'abscisse et l'ordonnée du centre de la croix et la taille) et ne renvoie aucune valeur.

Le reste du programme est fourni ci-dessous, et son exécution, une fois la définition de la fonction traceCroix() complétée, doit produire un affichage similaire à l'affichage ci-contre.

void setup(){

  size(200,200);

  strokeWeight(3);

}

void draw(){

  background(240,240,240);

  stroke(150,50,50); // rouge

  traceCroix(50,60,80); // appel de la fonction traceCroix()

  stroke(50,50,150); // bleu

  traceCroix(180,180,40); // appel de la fonction traceCroix()

  for(int i=0;i<10;i++){

    stroke(i*25,100,100); // couleur dont le niveau de rouge est variable

    traceCroix(10+20*i,150,8); // appel de la fonction traceCroix()

  }

}

... traceCroix(int x, int y, int taille){ // définition de la fonction

  // à compléter

}

Placer des pions sur une grille

Un jeu à deux joueurs nécessite d'afficher deux types de marques sur une grille 3x3.

Ecrire les fonctions traceGrille(), afficheCroix() et afficheCercle(), qui permettent de faire fonctionner le programme ci-dessous.

La fonction traceGrille(), qui trace la grille de jeu, ne prend aucun paramètre et ne renvoie aucune valeur. Les fonctions afficheCroix() et afficheCercle() prennent en paramètres les numéros de ligne et de colonne de la case où le symbole (croix ou cercle) doit aparaître, et ne renvoient aucune valeur.

Le reste du programme est fourni ci-dessous, et son exécution, une fois les définitions des fonctions complétées, doit produire un affichage similaire à l'affichage ci-contre.

void setup(){

  size(200,200);

  noFill();

  strokeWeight(3);

}

void draw(){

  background(240,240,240);

  traceGrille(); // appel de la fonction tracegrille()

  afficheCercle(2,2); // appel de la fonction afficheCercle()

  afficheCroix(1,1); // appel de la fonction afficheCroix()

  afficheCercle(1,3);

  afficheCroix(3,1);

}

... traceGrille(){ // définition de la fonction traceGrille()

  // à compléter

}

... afficheCercle(...){ // définition de la fonction afficheCercle()

  // à compléter

}

... afficheCroix(...){ // définition de la fonction afficheCroix()

  // à compléter

}

Pour aller plus loin

Modifier le programme précédent pour qu'un clic de souris sur l'une des zones de la grille déclenche l'affichage d'une marque sur la zone cliquée, en alternant les croix et les cercles.