Table des matières
Dans cette page, nous proposons d’expliquer les principes de fonctionnement du logiciel AlgoTouch. Comment les actions de l’utilisateur sont-elles transformées en programme? Comment le programme ainsi produit peut-il s’exécuter?
Pour comprendre le fonctionnement d’AlgoTouch, il faut rappeler les principes de base du fonctionnement d’un ordinateur. Un ordinateur de base comprend essentiellement 4 entités :
Les ordinateurs modernes possèdent également d’autres éléments : de la mémoire sur disque, des connecteurs (USB, prise réseau, prise HDMI, prise casque), microphone, caméra, etc.
La mémoire est un dispositif électronique capable de stocker de grandes quantités de données codées sous forme de 8 chiffres binaires appelés octets. Chaque octet est stocké à un endroit précis de la mémoire appelé adresse. L’unité de mémoire ne possède que 2 commandes :
Le rôle de la mémoire est double. Elle permet d’une part de stocker des données en quantité importante : des milliards d’octets (giga). D’autre part, elle contient des programmes codés sous forme d’octets.
L’unité centrale est un composant électronique appelé aussi processeur. Son rôle est d’exécuter les instructions d’un programme. Le processeur contient une unité de calculs et quelques emplacements mémoire (appelés registres) pour stocker des résultats intermédiaires. Puisque le programme se trouve en mémoire, l’unité centrale répète la séquence suivante :
Globalement les instructions sont de 5 types :
L’écran sert à envoyer des informations compréhensibles par l’utilisateur. En effet, les informations codées en mémoire ne sont pas directement accessibles. Les programmes transforment les données, par exemple les nombres, sous une forme lisible. Un nombre étant codé sous forme binaire, il faut le transformer en une suite de caractères (des chiffres).
Par exemple, l’instruction qui affiche le contenu de la variable Nbre de valeur 4839 doit d’abord coder cette valeur dans une chaîne de caractères ASCII, ici le tableau Ch.
Cette transformation peut donner lieu à un exercice!
Le clavier sert à communiquer avec la machine. En effet, lorsqu’un programme s’exécute, il demande parfois des informations à l’utilisateur. Chaque frappe sur le clavier transmet un code qui est analysé par le programme.
Par exemple, le programme demande un nombre qu’il va ranger dans une variable (age). L’utilisateur frappe les caractères 1 puis 9 et valide par la touche Entrée. Les codes ASCII de ces deux caractères, respectivement 49 et 57, sont récupérés par le programme qui construit le nombre 19 (00010011 en binaire) qu’il range dans la variable age.
Cette transformation peut donner lieu à un exercice!
AlgoTouch étant basé sur la manipulation directe des données d’un programme, la partie principale de l’interface graphique représente d’une certaine manière la mémoire d’une machine. Mais au lieu de représenter des milliards d’octets, l’interface visualise uniquement certaines données sous une forme plus facilement interprétable. Ce sont les variables, les tableaux, les macros (unités de programme).
L’utilisateur interagit avec le logiciel principalement avec la souris sur un ordinateur ou avec son doigt lorsqu’il utilise un tableau interactif. Il peut, d’une part, de façon classique, activer des menus et d’autre part, agir directement sur la partie graphique. Le logiciel réagit aux différentes actions effectuées avec la souris. Ce sont principalement :
L’utilisateur utilise aussi, de temps en temps, le clavier pour saisir des informations comme par exemples, les nom et rôle d’une variable ou d’une macro, des valeurs, le nom d’un fichier, etc.
Illustrons sur un exemple simple, comment Agt analyse les gestes de l’utilisateur pour construire les instructions de programme associées. Considérons le cas où l’utilisateur veut affecter la valeur de la variable val dans la variable cpt.
Pour exécuter un programme AlgoTouch, Agt simule le fonctionnement d’un ordinateur très simple. Comme cet ordinateur n’existe pas, on parle de machine virtuelle notée MV par la suite.
Sa mémoire contient les variables, constantes, index, tableaux ainsi que les programmes codés de chaque macro. Son unité centrale est composée d’une unité de calcul ainsi que d’une petite mémoire locale particulière appelée pile d’exécution. Contrairement à la mémoire centrale, les données de cette pile ne sont pas repérées par une adresse. Mais la pile fonctionne sur le modèle d’une “pile d’assiettes”. Lorsqu’on ajoute une donnée, opération d’écriture, elle est placée au sommet de la pile. A l’inverse la lecture d’une donnée consiste à prendre la valeur en sommet de pile.
La machine virtuelle AlgoTouch possède un jeu d’instruction spécifique très limité. Il est constitué de quelques instructions seulement. Un programme doit donc être traduit en une suite de ces instructions.
Les instructions, classées par catégories évoquées plus haut, sont les suivantes :
Les opérations sont soit des opérations arithmétiques (+, -, x, /, %), soit des comparaisons (==, !=, >, >=, <, <=). Dans ce dernier cas, le résultat vaut 0 si la comparaison rend faux ou 1 si vrai.
Voici quelques exemples de code illustrant le rôle des différentes instructions.
Détaillons le programme produit.
Détaillons le code produit.
Considérons l’exemple très simple d’une macro qui compare deux entiers x et y puis affiche le minimum.
Considérons l’exemple très simple d’une macro qui affiche les entiers de 0 à 9.
Une partie du code associé à ce programme est illustré ci-dessous. En particulier, le code correspondant à la partie Loop est surligné.
Call macro Exist
Le déroulement de l’appel de la macro Exist dans le programme Double est le suivant. Lorsque la machine virtuelle charge l’instruction à l’adresse 17, elle décode une instruction de type appel de macro. Comme après l’exécution de la macro Exist, le programme Double doit reprendre en séquence, la machine virtuelle conserve l’adresse 18 et le nom de la macro Double en sommet de pile. Ensuite, la machine virtuelle définit l’adresse de la prochaine instruction à exécuter comme étant l’adresse 0 du code Exist.
16: Continue 17: Call macro Exist 18: PushVariable i
Les instructions de la macro Exist s’exécutent normalement jusqu’à la dernière à l’adresse 37 :
EndBloc End algorithm
Cette instruction vient chercher au sommet de pile consécutivement le nom de la macro en attente puis l’adresse de redémarrage. Dans le cas présent la macro Double et l’adresse 18. C’est à cet endroit que la machine virtuelle va exécuter la prochaine instruction.
Extraits du code de la macro Exist, le début et la fin :
0 : Continue 1 : PushVariable i 2 : PushVariable 1 3 : TwoOp ADD 4 : Assign j ... 33 : Continue 34 : EndBloc End core loop 35 : Branch always : 8 36 : Continue 37 : EndBloc End algorithm