Université de Versailles Vanessa Vitse IUT de Vélizy - Algorithmique 2006/2007 TP2 : Initiation à l algorithmique - 2ème partie (1 séance) 1 Rappels sur le TP1 Si cela n a pas été fait durant la première séance, avant de commencer à programmer : 1. Vous devez vous placer dans le sous-répertoire TP2 afin d y mettre tous les fichiers et dossiers utilisés par la suite. télécharger les packages antlr.jar et V235.jar à l adresse suivante : http ://www.kafarnaum.net/mulot/download.html 2. Vous pouvez alors lancer une application en tapant l instruction suivante java -cp antlr.jar:v235.jar MlTappli Attention à bien respecter la casse (minuscules et majuscules). 3. Vous obtenez alors une interface graphique constituée de trois zones : La zone d édition qui permet la saisie des programmes. La zone graphique Terrain de jeu pour mulots où l on retrouve les tracés des mulots. La zone d affichage des erreurs où apparaissent des messages d erreurs (lorsque votre programme est incorrect et que vous cliquez sur le bouton Run!). Règles du jeu Un programme en est constitué par des instructions encadrées par les mots clés et. Pour créer un mulot s appelant hector, il suffit d écrire hector = new (100,100,BLUE) Le mulot hector se place alors sur l écran aux coordonnées (100,100). Il tracera un trait de couleur bleue. Vous avez d autres couleurs possibles : BLACK (défaut), WHITE, RED, YELLOW, PINK, GREEN, ORANGE, CYAN, MAGENTA, GRAY, DARKGRAY et LIGHT- GRAY. Notre mulot hector sait faire 4 actions élémentaires : Baisser/Lever le stylo : hector.baisse() ; hector.leve() ; Avancer d un certain nombre de pixels : hector.avance(200) ; Tourner d un certain angle (en degré et dans le sens trigonométrique) : hector.tourne(45) ; Pour effacer la zone graphique entre deux dessins, penser à utiliser le bouton Clear.
2 Syntaxe du langage La syntaxe du langage MULOT est très proche de celle adoptée en algorithmique. Pour que le mulot puisse faire plusieurs actions consécutivement, on utilise le séquencement d instructions. Chaque instruction se termine par un ; ex : hector.tourne() ; hector.avance(200) ; Le mulot peut prendre des décisions différentes suivant la situation dans laquelle il se trouve grâce aux conditionnelles. Il s agit d une instruction ayant la syntaxe suivante : Si (condition) Alors instructions1 ; Sinon instructions2 ; Si la condition est réalisée, alors les instructions1 seront exécutées, sinon les instructions2 le seront. ex : suivant la valeur de l entier decision, hector décidera soit d avancer de 100 pixels (dans le cas où decision vaut 0), soit de faire demi-tour et d avancer de 100 pixels (dans le cas où decision n est pas égal à 0). Si (decision == 0) Alors hector.avance(100) ; Sinon hector.tourne(180) ; hector.avance(100) ; Enfin, le mulot peut répéter un certain nombre de fois un bloc d instructions à l aide d une itération. On dispose alors de deux types de boucles : La boucle TantQue ayant la syntaxe suivante : TantQue (condition) ex : tant que la variable decision sera égale à 0, hector décidera d avancer de 10 pixels. TantQue (decision==0) hector.avance(10) ; La boucle Pour ayant la syntaxe suivante : Pour affectation a expression ex : pour qu Hector avance de 100 pixels en 5 étapes, on pourra écrire Auteur : Vanessa Vitse 2
Pour i=0 a 4 hector.avance(20) ; Attention : l affectation des variables se fait avec le symbole = La comparaison d égalité est représentée par == Exercices Exercice 1. Saisissez dans la zone d édition le programme suivant : m = new ( 120,120 ) ; m.baisse() ; Pour i=0 a 5 m.avance(50) ; m.tourne(60) ; Lancez l exécution de ce programme. Décrivez ce qu il se passe. Exercice 2. A l aide des instructions Pour et Si, faites tracer au mulot 6 segments de longueur 100 pixels, en le faisant tourner de 90 les trois premières fois, et de 240 les fois suivantes. Décrivez ce qu il se passe. 3 Les procédures Au début du programme, vous pouvez inclure la définition de procédures et/ou de fonctions. Les procédures sont définies selon le schéma suivant : Proc nom (liste de parametres) Une procédure peut être appelée plusieurs fois à l intérieur d un programme. Cela permet de réduire considérablement la longueur du code. Exercice 3. Saisissez dans la zone d édition le programme suivant : Proc Carre (int longueur, m) i=0 ; TantQue (i<4) m.avance(longueur) ; m.tourne(90) ; i=i+1 ; hector = new ( 120,120 ) ; hector.baisse() ; Auteur : Vanessa Vitse 3
Carre(200,hector) ; Carre(100,hector) ; Carre(50,hector) ; Carre(25,hector) ; Lancez l exécution de ce programme. Décrivez ce qu il se passe. Détaillez ce que fait la procédure Carre. Exercice 4. Ecrivez un programme qui fait dessiner une maison au mulot. Transformez-le en une procédure prenant en paramètres le mulot et la taille de la maison, puis écrivez un programme utilisant cette procédure pour dessiner un lotissement. Pour le lotissement, deux programmes différents seront donnés : le premier utilisera un seul mulot pour dessiner tout le lotissement le deuxième utilisera plusieurs mulots dessinant chacun sa propre maison Le lotissement obtenu pourra avoir la forme suivante : Vous détaillerez dans le compte rendu les outils mathématiques utilisés par les mulots pour avoir un toit étanche. 4 Récursivité Il est bien sûr possible d appeler une autre procédure dans une procédure. Mais une procédure peut aussi s appeler elle-même! Une telle procédure est dite récursive. Exercice 5. Saisissez dans la zone d édition le programme suivant : Proc Spi ( m, int longueur) Auteur : Vanessa Vitse 4
Si (longueur>1) Alors m.avance(longueur) ; m.tourne(45) ; Spi(m,9*longueur/10) ; hector = new ( 120,120 ) ; hector.baisse() ; Spi(hector,100) ; Lancez l exécution de ce programme. Décrivez ce qu il se passe. Détaillez ce que fait la procédure Spi et expliquez le fonctionnement du programme. 5 Autres exercices Exercice 6. Ecrivez un programme qui réalise le dessin suivant : Vous utiliserez pour cela une procédure qui dessine un carré et deux boucles Pour imbriquées. Exercice 7. Modifiez le programme précédent pour obtenir le dessin suivant : Auteur : Vanessa Vitse 5