Table des matières
Lorsqu’on sait quelles opérations effectuer pour mettre en oeuvre un algorithme, on doit envisager d’automatiser ce processus en créant un programme. Avec AlgoTouch, le principe est d’enregistrer la séquence d’opérations de l’algorithme, le logiciel se chargeant de créer le programme associé automatiquement. Avec AlgoTouch, un programme ne sera pas une longue séquence d’instructions mais sera constitué d’un ensemble de séquences courtes appelées macros.
Une macro est donc une séquence d’instructions à laquelle on donne un nomRègle de nommageSuite de lettres, chiffres, caractère souligné (_). Cela devient une nouvelle instruction, d’où le nom de macro instruction. Donc au lieu de répéter cette séquence d’instructions, on peut exécuter directement la macro. Dans ce cas, toutes les instructions qu’elle contient sont exécutées comme une seule opération. Cette façon de faire permet, d’une part, de simplifier la conception d’un programme et d’autre part, de faciliter la compréhension d’un programme à condition que les macros portent des noms significatifs (Echange, Tri, Calcul, etc…).
Avec AlgoTouch, on distingue deux sortes de macros : les macros simples et les macro boucles. Les macros simples sont une suite d’instructions qui s’exécutent en séquence. Ce sont des affectations, des opérations, des conditionnelles (éventuellement imbriquées), des appels de macro. Les macros boucles contiennent une structure pour répéter une séquence d’instructions avec des conditions d’arrêt.
Un algorithme peut être construit avec plusieurs macros. Une macro peut aussi contenir un appel à une autre macro. Par contre, avec AlgoTouch, une macro ne peut pas s’appeler elle-même, et un message d’erreur est affiché à l’utilisateur. A noter que ce mécanisme (appelé récursivité) existe dans les langages de programmation moderne.
Define MyMacro Do instruction ou alternative ... // ... End
Une macro boucle doit permettre de répéter une suite d’instructions, encore faut-il:
La structure d’une telle macro est donc plus complexe qu’une macro simple.
Define MyMacro From instructions ... Until (condition1) (condition2) ... Loop instructions ... Terminate instructions ... End
Cette syntaxe est inspirée du langage Eiffel.
Comment interpréter le fonctionnement de la boucle ? Le terme couramment utilisé est « sémantique de la boucle »:
Cas particulier :
lorsque le bloc Until est vide, le bloc Loop est exécuté une seule fois.
Notes :
Avec AlgoTouch, le principe pour construire un programme est d’enregistrer la séquence d’opérations de l’algorithme, le logiciel se chargeant de créer le programme associé automatiquement.
L’utilisateur crée d’abord une macro puis enregistre successivement le ou les blocs qui la composent, ou simplement des instructions à l’intérieur d’un bloc.
Ensuite, il peut exécuter la séquence ainsi enregistrée pour vérifier son fonctionnement.
L’utilisateur peut enregistrer les blocs Do, From, Loop, Terminate:
Note:
si le bloc n’est pas vide, les nouvelles instructions seront ajoutées au début du bloc. Cependant, on peut enregistrer des instructions n’importe où dans un bloc comme indiqué ci-dessous.
L’utilisateur peut enregistrer des instructions à l’intérieur des blocs. Le principe est sensiblement le même que dans le cas de l’enregistrement d’un bloc:
L’objectif est de comparer le contenu de deux variables (variable, constante, variable index, index). Comparons par exemple x avec y. La procédure est la suivante:
if (x > y){
Suite à l’enregistrement de l’alternative, plusieurs lignes de code sont produites dans le programme. Le programme contient le test, suivi des instructions associées si le test est valide, puis le bloc else associé au test. Ce bloc ne contient pas de code effectif puisque ce cas n’a pas été encore traité.
Comparons x avec y. Si x est strictement supérieur à y, incrémentons x et affectons y avec 2 fois la valeur de x. Le programme associé est le suivant:
if (x > y){ x = x + 1 ; y = x * 2 ; } else { // TODO // x >= y }
Une instruction conditionnelle ou un bloc avec une instruction conditionnelle peut contenir du code manquant dans la partie else. Si le code manquant doit être exécuté:
Notes :
if (condition) { } else { }
Le bloc else contiendra à nouveau du code manquant. L’utilisateur devra trouver un nouveau cas de test pour l’enregistrer.
Si une séquence d’instructions appelle une macro vide soit directement , soit indirectement depuis un appel de macro:
Le programme reprend son cours normal.
Until (i == a.length)
Raccourcis :
Note :
si cette action est effectuée pendant un enregistrement, une instruction dite d’entrée est produite. Par exemple:
Read "Question " x
Raccourci :
Note :
si cette action est effectuée pendant un enregistrement, une instruction dite de sortie est produite. Par exemple:
Write "Message " x
Comme les variables, les constantes, les variables index et les tableaux, les macros peuvent être renommées pour définir un identificateur plus explicite. Le rôle de l’élément peut également être redéfini:
Note : la macro est renommée mais son nom est remplacé également dans les macros où elle est appelée.
Pour exécuter entièrement une macro en mode manuel ou en mode enregistrement:
Raccourci :
effectuer un clic gauche sur l’icône au centre de la macro:
Le code entier de la macro est exécuté en une fois, puis l’affichage est mis à jour. Dans le cas de l’enregistrement d’une séquence, le nom de la macro apparaît dans le programme (c’est un appel).
Lorsqu’on s’aperçoit qu’une macro boucle ne contient pas de condition de sortie, ce n’est donc pas une boucle. On peut alors la transformer en macro simple. Il suffit de choisir le menu Macro → Transformer en macro simple. Le logiciel vérifie qu’il n’y a pas de conditions de sortie sinon il ne fait rien. Ensuite, toutes les instructions des blocs From, Loop, Terminate sont placées en séquence dans le bloc Do d’une macro simple.
Lorsqu’on s’aperçoit qu’une macro simple est en fait le corps d’une macro boucle, on peut alors la transformer en macro boucle. Il suffit de choisir le menu Macro → Transformer en macro boucle. Toutes les instructions du bloc Do sont placées en séquence dans le bloc Loop d’une macro boucle.
Pour voir le code de la macro en cours dans différents langages, choisir le menu Affichage → Afficher la zone d’exportation
Une nouvelle zone apparaît dans la partie droite. Choisir l’onglet associé au langage à afficher (Python, C, Java, C/C++). Le code de la macro est affiché dans le langage choisi.
Un programme est donc généralement constitué d’un ensemble de macros dont l’une, appelée macro principale, ou plus généralement programme principal sert à lancer le programme. AlgoTouch permet de lancer le programme de différentes façons et de contrôler son déroulement dans un mode appelé exécution.
On peut contrôler l’exécution d’un programme et visualiser son déroulement en utilisant les icônes de la barre d’outils.
L’exécution peut s’effectuer soit en mode Ligne, soit en mode Bloc en choisissant ce mode à droite de l’étiquette Exécution:
Exécution détaillée:
Si l’indicateur d’exécution détaillé est actif, toutes les modifications des données effectuées par les instructions sont affichées brièvement à l’écran.
Les icônes ont la signification suivante:
« Préparer l’exécution »: pour passer en mode exécution de programme. Dans ce mode, il n’est plus possible de modifier le programme: les icônes de la partie construction sont inactifs;
« Ligne ou bloc suivant »: le programme exécute la ligne ou le bloc suivant, met à jour l’affichage et positionne le curseur sur la ligne ou le bloc suivant à exécuter;
« Animation »: le programme est exécuté automatiquement mais effectue une pause à la fin de chaque ligne ou bloc. Le curseur, à droite des icônes, permet de ralentir (-) ou d’accélérer (+) le déroulement du programme en jouant sur la durée de la pause;
« Suspendre »: arrête le programme en mode animation. Cliquer sur « Bloc suivant » ou « Animation » pour continuer;
« Exécuter jusqu’à la fin »: le programme s’exécute entièrement sans pause et l’affichage est mis à jour. Si l’indicateur d’exécution détaillé est actif, les modifications de données sont affichées;
« Stop exécution »: quitte le mode exécution. Le système retourne en mode construction. »
Un mauvais choix dans le critère d’arrêt d’une boucle peut entraîner une répétition infinie du corps. On parle de boucle infinie. Afin d’éviter que le programme AlgoTouch soit bloqué en attente de terminaison d’une telle boucle, l’exécution s’arrête automatiquement au bout d’un certain temps. En fait, si le nombre de blocs exécuté dépasse une certaine valeur (quelques milliers), ce qui correspond à quelques secondes d’attente. Le message suivant s’affiche : « Probable boucle infinie ». Ceci ne signifie pas forcément que le programme est erroné. Cependant, ne pas oublier qu’AlgoTouch est un outil à usage pédagogique destiné à mettre en place des algorithmes. Il n’a pas vocation à tester des algorithmes complexes qui nécessitent un temps de calcul important.
Pour voir le code du programme en cours dans différents langages, utiliser l’un des onglets de la zone d’information. Le code du programme dont la macro courante est le point d’entrée, est affiché dans le langage choisi.
En utilisant cet icône, on peut copier ce programme dans le presse papier afin de le coller dans un éditeur de texte par exemple.
AlgoTouch permet de transformer les programmes réalisés dans différents langages de programmation. La procédure est la suivante:
Les programmes produisent des fichiers texte dans les langages suivants:
Les codes produits sont directement exécutables dans les environnements adaptés.
Il est intéressant de pouvoir lancer directement AlgoTouch avec un programme déjà fait. L’idée a été empruntée au système PythonTutor. Elle consiste à utiliser le mécanisme de passage de paramètres associé à une adresse de site. Cela consiste à ajouter à l’adresse du site AlgoTouch, appelée URL pour Uniform Ressource Locator, le code d’un programme dans un format adapté.
Exemple de lancement d’un programme contenant une macro Do vide:
https://algotouch.irisa.fr/agt/?json=[["macroDo",0,0,"Main","Ex",{}]]
Pour créer cette URL, l’utilisateur doit: