Macros

Chapitres

Exercice d'application

Le programme à réaliser doit saisir une valeur comprise en 0 et 20 et la stocker dans une variable note. Pour réaliser ce programme nommé Saisir0a20, il est possible d’utiliser la macro Saisir0 qui oblige la saisie d’une valeur supérieure à 0 dans note. Cette macro est la copie exacte de la macro SaisirNote vue dans ce tutoriel. Saisir une valeur positive dans la variable note est défini ainsi:
Define Saisir0
From
  Read "Saisir une note supérieure à 0 " note ;
  // ...
Until
  note >= 0
  // ...
Loop
  Read "Saisir une note supérieure à 0 " note ;
  // ...
Terminate
  // ...
End
Les données de cet exercice sont accessibles sur https://algotouch.irisa.fr/agt/
Saisir une valeur entre 0 et 20 dans la variable note est défini ainsi:
Define Saisir0a20
From
  Saisir0 ;
  // ...
Until
  note <= 20
  // ...
Loop
  Saisir0 ;
  // ...
Terminate
  // ...
End
La solution de cet exercice est disponible sur https://algotouch.irisa.fr/agt/

Retour sur la notion de Macro

Création d’une macro

L’utilisateur crée une nouvelle macro en précisant s’il s’agit d’une macro simple ou d’une boucle. Cette macro sera identifiée par un nom unique et l’utilisateur pourra préciser son rôle. Ensuite, l’utilisateur construira le code de la macro comme vu précédemment.

Lors de l’enregistrement des actions d’une macro, l’utilisateur peut exécuter directement le programme d’une autre macro par un simple clic.

Si, par exemple, il incrémente i puis j et ensuite, il exécute la macro Mac, le code produit sera :
   i = i + 1 ;
   j = j + 1 ;
   Mac ;
Mac est devenue une « nouvelle » instruction, d’où le nom de « macro-instruction ».

Exemple d’utilisation de macro

Le problème à résoudre consiste à:

  • saisir une valeur positive (supérieure à 0);
  • saisir une autre valeur positive (supérieure à 0);
  • effectuer la moyenne des deux valeurs;
  • afficher le résultat.

Codage de la macro SaisirNote

La première étape consiste à construire une macro SaisirNote qui saisit une valeur positive, supérieure à 0.
Define SaisirNote
From
  Read "Saisir une note supérieure à 0 " note ;
  // ...
Until
  note >= 0
// ...
Loop
  Read "Saisir une note supérieure à 0 " note ;
  // ...
Terminate
  // ...
End

Utilisation de la macro SaisirNote

Résoudre un problème revient à résoudre des sous problèmes du problème initial. Chacun de ces sous problèmes devient un nouveau problème à résoudre (qui lui-même peut éventuellement se décomposer en sous problèmes!). Pour résoudre un sous problème, on définit un sous programme
  • il possède un nom;
  • il devient une nouvelle instruction (macro instruction) utilisable dans d’autres programmes ou sous programmes.
Define MyNotes
Do
  SaisirNote ;
  somme = note ;
  SaisirNote ;
  somme = somme + note ;
  moyenne = somme / 2 ;
  Write "Valeur de moyenne " moyenne ;
  // ...
End

Autre utilisation de la macro SaisirNote

Le problème à résoudre est plus général. Le programme à réaliser doit saisir 10 notes positives et en calculer la moyenne. Une macro boucle est nécessaire pour ne pas avoir à générer un programme qui répète 10 fois la séquence:
SaisirNote ;
somme = somme + note ;
Define MyNotes
From
  somme = 0 ;
  nb = 0 ;
  // ...
Until
  nb >= NB_NOTES
  // ...
Loop
  SaisirNote ;
  somme = somme + note ;
  nb = nb + 1 ;
  // ...
Terminate
  moyenne = somme / nb ;
  Write "Valeur de moyenne " moyenne ;
  // ...
End