next up previous contents index
suivant: Pour avoir un fond monter: Feuille de TP précédent: Exercice II   Table des matières   Index

Corrections

Une solution pour l'exercice I peut être :
objet(a):={
avance(a);
repete(2,avance(2*a),tourne_droite,avance(a),tourne_droite);
recule(a);
};
objetsym(a):={
avance(a);
repete(2,avance(2*a),tourne_gauche,avance(a),tourne_gauche);
recule(a);
};
exo1():={
pas_de_cote(200);
objet(40);
pas_de_cote(-100);
tourne_droite(20);
avance(200);
recule(400);
avance(200);
tourne_droite(110);
saute(100);
tourne_gauche;
objetsym(40);
}
Les procédures de l'exercice II :
miroir():={
avance(200);
recule(400);
avance(200);
};
place_miroir(d):={
pas_de_cote(100);
tourne_gauche(d);
miroir();
}
Le paramètre d représente l'angle du miroir avec l'horizontale.
Le paramètre b représente la distance du départ de l'objet avec le miroir et le paramètre c représente son inclinaison par rapport au miroir.
place_objet(b,c):={
pas_de_cote(-b);
tourne_gauche(c);
};
replace_tortue(b,c):={
tourne_droite(c);
pas_de_cote(b);
};
place_objetsym(b,c):={
pas_de_cote(b);
tourne_droite(c);
}
On remarque que la procédure place_objetsym est inutile puisque :
place_objetsym(b,c)=place_objet(-b,-c).
À la fin pour remettre la tortue sur le miroir on utilisera replace_tortue(-b,-c) On peut aussi écrire la procédure objet2 qui réalise objet (resp objetsym) quand la valeur du deuxième paramètre est 1 (resp -1).
objet2(a,s):={
avance(a);
repete(2,avance(2*a),tourne_droite s*90,avance(a),tourne_droite s*90);
recule(a);
}
et alors objet(a):=objet2(a,1) et objetsym(a):=objet2(a,-1)

On écrit alors :

exo2(a,b,c,d):={
place_miroir(d);
miroir();
place_objet(b,c);
objet(a);
replace_tortue(b,c);
place_objetsym(b,c)
objetsym(a);
replace_tortue(-b,-c);
}
ou encore, si on suppose que le miroir est dessiné et que la tortue est sur le miroir, on peut utiliser la procédure suivante :
finexo2(a,b,c):={
place_objet(b,c);
objet2(a,1);
replace_tortue(b,c);
place_objet(-b,-c)
objet2(a,-1);
replace_tortue(-b,-c);
};
exo2(a,b,c,d):={
place_miroir(d);
miroir();
finexo2(a,b,c);
}
On tape par exemple :
exo2(40,100,20,-10) finexo2(-20,40,30) finexo2(...)

Documentation de giac écrite par Renée De Graeve