Promenades aléatoires

vendredi 26 février 2010
par  Monique GIRONCE

Le javascript implémenté dans CaRMetal permet de programmer des déplacements aléatoires sur un damier par exemple. En voici deux illustrations : la première (celle du robot) n’est qu’un pur amusement, la seconde (celle du pion) est la traduction en carscripts du sujet n°118 de l’épreuve expérimentale 2009 en terminale S.
Aux journées nationales de l’APMEP à Rouen en octobre 2009, lors d’un exposé sur la programmation dans CaRMetal, on entendit parler entre autres du petit robot ...

Le robot.

En juin dernier, lorsqu’Eric a intégré le JavaScript au code de CaRMetal, il a annoncé la nouvelle aux aficionados en disant que c’était une version bêta. Mais il envoyait aussi quelques scripts de sa fabrication, « des idées pour vous amuser ». Et là, moi qui n’avais jamais programmé, qui savais juste lire des programmes simples sur calculatrice … pour les élèves, je me suis prise au jeu. Je me souvenais d’une situation que je voulais transformer en macro : un pion qui se déplace au hasard sur un damier, soit à droite (ou à gauche), soit vers le haut (ou vers le bas), jusqu’à ce qu’il atteigne le bord d’un carré ; avec en plus un compteur. En macro, ce n’est pas possible, alors pourquoi pas en javascript ? Sans rien demander à personne, en galérant un peu, mais uniquement par mimétisme, c’est à dire en copiant-collant des bouts de code (dans les scripts « pour vous amuser ») et en les adaptant (mais sans tout comprendre évidemment), j’y suis arrivée !

Évidemment, le script initial a été beaucoup simplifié et amélioré depuis : la lecture du pdf d’Yves Martin m’a aidé à nettement mieux comprendre les différentes syntaxes.

Voici une image de ce qu’a donné une partie du jeu du robot :

Et le script correspondant

//Avant de lancer le script, ouvrir FichierRobot.zir

t=GetExpressionValue("a");
//Pour récupérer les éléments de la figure

m=Point(0,0);
N=0;
//initialisation d'un compteur

while ((X(m)<t)&&
(X(m)>-t)&&
(Y(m)<t)&&
(Y(m)>-t)){

	p=m;SetPointType(p,"circle");SetThickness(p,"thin");
	b=Math.ceil(4*Math.random());

	if (b==1){
		m=Point(X(m)+1,Y(m));
	} else {
		if (b==2){
			m=Point(X(m),Y(m)+1);
		} else {
			if (b==3){
				m=Point(X(m)-1,Y(m));
			} else {
				m=Point(X(m),Y(m)-1);
			}
		}
	}
	SetThickness(m,"thick");SetColor(m,"blue");
	//	le point a avancé d'une case au hasard
	o=Segment(p,m);

	N=N+1;
	//	on ajoute 1 au compteur
	Pause(500);
}

Prompt("Gagné en "+N+" coups ! ");

Remarque : ce script fonctionne à condition d’avoir ouvert au préalable le fichier FichierRobot.zir (l’ensemble « fichier+script » est dans l’archive robot.zip proposée en téléchargement en fin d’article)

Le pion sur damier.

L’écriture d’un script avec CaRMetal est particulièrement agréable (instructions pré-écrites, indentation automatique etc). C’est pourquoi il peut être intéressant non seulement de disposer du script tout fait, mais bien plus encore de le voir en train de se construire, tout simplement en regardant le film de l’opération ! Comme ces petits films sont longs à fabriquer, plutôt que de filmer la fabrication du script relatif au mouvement de notre robot, il m’a semblé plus judicieux d’en filmer un autre : le contexte est très semblable (un mouvement aléatoire d’un pion sur un damier), mais il est plus riche en sorties numériques. Il s’agit en fait du sujet 118 de l’épreuve expérimentale 2009 en terminale S :

L’énoncé :

L’énoncé :

Voici une image de ce qu’on peut obtenir après la simulation de 100 parties :

Et voici le lien qui permet de visionner le film :
http://db-maths.nuxit.net/CARzine/a...

Comme précédemment, le script se lance après l’ouverture d’un fichier déjà construit : tout se trouve dans l’archive « LePion.zip ».


Documents joints

robot.zip
LePion.zip

Commentaires

Logo de Alain BUSSER
jeudi 18 mars 2010 à 14h57 - par  Alain BUSSER

Le corrigé de l’exercice du bac présenté ci-dessus se trouve sur cette page