Débogage sous CaRMetal

mercredi 28 octobre 2009
par  Alain BUSSER

Les outils de débogage (pause, points d’arrêt, mode pas-à-pas) ne servent pas seulement à déboguer. Ils peuvent servir à parcourir une boucle au rythme de l’utilisateur (l’élève : Peut aider à percevoir le fonctionnement de la boucle). On peut aisément les simuler dans des CarScripts.

Exemple

On voudrait par une boucle, calculer la somme des 10 premiers nombres entiers. Par exemple, en initialisant une somme avec la valeur zéro, puis en lui ajoutant la valeur courante de l’indice à chaque passage dans la boucle. Voici la version AlgoBox :

Version AlgoBox
Tester l'algorithme :


(cliquer sur le bouton ci-dessus pour lancer ou relancer l'exécution de l'algorithme)
Remarque : si les messages "Algorithme lancé" et "Algorithme terminé" n'apparaissent pas au bout d'un moment dans la zone ci-dessous, c'est que l'algorithme contient une erreur.

Résultats :

Code de l'algorithme :
1     VARIABLES
2       indice EST_DU_TYPE NOMBRE
3       somme EST_DU_TYPE NOMBRE
4     DEBUT_ALGORITHME
5       POUR indice ALLANT_DE 1 A 10
6         DEBUT_POUR
7         somme PREND_LA_VALEUR somme+indice
8         FIN_POUR
9       AFFICHER somme
10    FIN_ALGORITHME

Et maintenant la version JavaScript (sous CaRMetal) :

somme=0;
for(indice=1;indice<=10;indice=indice+1){
        somme=somme+indice;
}
Println(somme);

L’ennui c’est que beaucoup d’élèves réalisent que la boucle est parcourue 10 fois mais ne perçoivent pas bien ce qui se passe lors de chacun de ces 10 passages. Dans ce cas il est souhaitable

  1. qu’ils essayent avec le papier-crayon, de simuler le fonctionnement de la boucle, ce qu’ils seront de toute façon bien obligés de faire le jour du contrôle ;
  2. à défaut, qu’ils aient le temps de voir ce qui se passe à l’intérieur de la boucle.

Pour cela il faut un affichage des variables pertinentes, mais aussi un moyen de ralentir l’exécution du programme.


Affichage des variables

En plaçant l’instruction d’affichage « Println » à l’intérieur de la boucle, on peut visualiser son fonctionnement, surtout si on sait concaténer des chaînes de caractères :

somme=0;
for(indice=1;indice<=10;indice=indice+1){
        somme=somme+indice;
        Println("L'indice vaut "+indice+" et la somme vaut "+somme);
}

L’exécution de ce script ouvre une fenêtre d’affichage dans laquelle CaRMetal écrit presque instantanément ceci :

L’indice vaut 1 et la somme vaut 1
L’indice vaut 2 et la somme vaut 3
L’indice vaut 3 et la somme vaut 6
L’indice vaut 4 et la somme vaut 10
L’indice vaut 5 et la somme vaut 15
L’indice vaut 6 et la somme vaut 21
L’indice vaut 7 et la somme vaut 28
L’indice vaut 8 et la somme vaut 36
L’indice vaut 9 et la somme vaut 45
L’indice vaut 10 et la somme vaut 55

qui donne une vision synthétique et statique de l’exécution du programme. Une vision dynamique est préférable, car la boucle étant parcourue plusieurs fois, l’exécution revêt forcément un caractère dynamique (le temps est mesuré par la valeur de l’indice).


Affichage séquentiel dans la figure

D’une part, il est tout-à-fait possible de dessiner un tableau en CarScript, avec l’instruction « Expression » dont les deux dernières variables sont des coordonnées. Mais pour afficher séquentiellement des variables (pour voir comment elles varient dans le temps), il est plus simple de les utiliser comme alias de points : En créant deux points I (comme indice) et S (comme somme) et en ajoutant dans la boucle une instruction « Pause(1000) », les valeurs de I et S sont actualisées toutes les secondes :

somme=0;
for(indice=1;indice<=10;indice=indice+1){
        somme=somme+indice;
        SetAlias("I",indice);
        SetAlias("S",somme);
        Pause(1000);
}

Las ! On ne voit les valeurs de I et S qu’à la fin (10 et 55). La fonction « Pause » est donc plus utile avec des objets graphiques (mise à jour de coordonnées). Et de toute façon, si le temps d’attente est toujours le même, la méthode manque de souplesse, certains élèves ayant besoin de réfléchir plus longtemps que d’autres à ce qui se passe.


La meilleure façon de marcher, c’est de mettre un pied devant l’autre...

Alors on a besoin d’un mode pas-à-pas où l’exécution de la boucle s’arrête jusqu’à ce que l’utilisateur décide de la relancer. Pour ce faire, on a besoin d’un bouton « OK » à cliquer pour passer à la boucle suivante. En CarScript on peut faire ça avec l’instruction « Alert » mais aussi en créant un point qui s’appelle « OK » et qui ne sert qu’à être sélectionné. La figure ressemble à ceci :

Le script précédent est assez facile à modifier, il suffit de remplacer la ligne avec « Pause » par celle avec « InteractiveInput » :

somme=0;
for(indice=1;indice<=10;indice=indice+1){
        somme=somme+indice;
        SetAlias("I",indice);
        SetAlias("S",somme);
        v=InteractiveInput("Cliquer sur OK","Point");
}

Pour passer à la valeur suivante, l’utilisateur du programme n’a qu’à cliquer sur le point « OK » comme c’est demandé dans la barre qui est au bas de la fenêtre. En cours d’exécution (après avoir cliqué 6 fois sur « OK ») l’utilisateur voit ceci :

qui évoque un peu les programmes sous Scratch.

On est très proche de la perfection (un mode pas-à-pas facile à créer et fonctionnel). Cependant pour passer à la valeur suivante de l’indice, l’utilisateur peut cliquer sur n’importe quel point, pas nécessairement sur « OK ». Ce n’est d’ailleurs absolument pas gênant mais on peut quand même exiger que le point cliqué soit « OK » et pas un autre.


... et de recommencer

Il suffit pour cela d’initialiser (et de réinitialiser régulièrement) la variable v à une chaîne vide, et d’exiger que non seulement elle soit le nom d’un point sélectionné, mais aussi que ce nom soit « OK » :

var somme=0, v="";
for(indice=1;indice<=10;indice=indice+1){
        somme=somme+indice;
        SetAlias("I",indice);
        SetAlias("S",somme);
        while (v!="OK"){
                v=InteractiveInput("Cliquer sur OK","Point");
        }
        v="";
}

Commentaires

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 3 mai 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mardi 13 juin 2017, 14h-18h, campus du Tampon
- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6


Brèves

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

samedi 27 mai 2017

Publication

745 Articles
Aucun album photo
131 Brèves
11 Sites Web
127 Auteurs

Visites

504 aujourd'hui
593 hier
2025214 depuis le début
31 visiteurs actuellement connectés