• Aucun résultat trouvé

Programmation Concurrente en JAV A

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation Concurrente en JAV A"

Copied!
4
0
0

Texte intégral

(1)

Programmation Concurrente en J AV A

T M

Document ´elabor´e par J. Charles et I. Sau.

TP3 : Les tours de Hano¨ı

7 Mars 2007

1 Description du probl`eme

Le probl`eme des tours de Hano¨ı est un jeu de r´eflexion imagin´e par le math´ematicien franc¸ais ´Edouard Lucas (1842-1891) en 1883, et consistant `a d´eplacer des disques de diam`etres diff´erents d’une tour de d´epart (tourD) `a une tour d’arriv´ee (tourA) en passant par une tour interm´ediaire (tourI) et ceci en un minimum de coups, tout en respectant les r`egles suivantes:

• on ne peut d´eplacer plus d’un disque `a la fois,

• on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide.

On suppose que la derni`ere r`egle est ´egalement respect´ee dans la configuration de d´epart.

Voici un example avec8disques:

Dans ce TP on va programmer un algorithme pour r´esoudre le probl`eme des tours de Hano¨ı pour un nombre quelconque de disques.

Corrig´e du TP2: http://www-sop.inria.fr/mascotte/personnel/Ignasi.Sauvalls/Ignasi Sau.html#teaching

1

(2)

2 R´esolution

2.1 Relation de r´ecurrence

Une possible fac¸on de r´esoudre le probl`eme est en utilisant la notion de r´ecurrence:

• Supposons qu’on aitN disques1, . . . , N, num´erot´es de telle fac¸on que sii > j le disqueiest plus grand que le disquej.

• A un moment donn´e, on devra d´eplacer le disque le plus grand (c’est a dire, le disque num´eroN) de la tourD`a la tourA. Pour pouvoir faire ce mouvement, les autresN −1disques devront ˆetre bien plac´es dans la tourI.

• Maintenant le probl`eme consiste `a d´eplacerN −1disques de la tourI vers la tourAen utilisant la tourDcomme tour interm´ediaire.

Supposons qu’on dispose d’une m´ethode Solve avec 4 arguments (N et les 3 tours). Alors on peut exprimer cette m´ethode de la fac¸on suivante:

S o l v e ( N , S r c , Aux , D s t ) i f N i s 0 e x i t

S o l v e ( N−1 , S r c , Dst , Aux ) Move f r o m S r c t o D s t

S o l v e ( N−1 , Aux , S r c , D s t )

En fait, avec cette r´ecurrence on vient de d´efinir explicitement la m´ethode Solve. Par exemple, si on a 3 disques la solution est:

1 . Move f r o m S r c t o D s t 2 . Move f r o m S r c t o Aux 3 . Move f r o m D s t t o Aux 4 . Move f r o m S r c t o D s t 5 . Move f r o m Aux t o S r c 6 . Move f r o m Aux t o D s t 7 . Move f r o m S r c t o D s t

Essayez de r´efl´echir `a cet algorithme pendant quelques minutes...

On peut aussi prouver que le nombre de mouvements n´ecessaires est 2N −1, ´etant N le nombre de disques.

2

(3)

2.2 Impl´ementation en Java

Pour impl´ementer la solution du probl`emes des tours de Hano¨ı en Java, on va utiliser deux classes princi- pales:

• Une classe Tour avec au moins cettes 4 m´ethodes:

– void moveTo(Tour dest, Tour tmp, int n) – void push(Disque d)

– Disque pop() – Disque head()

• Une classe Disque avec au moins cettes 2 m´ethodes:

– void goTo(Tour from, Tour to) – int size()

3 L’interface graphique

On se propose d’ajouter un interface graphique `a l’algorithme des tours de Hanoi. L’interface sera compos´ee de deux ´el´ements:

• Un autre panneau montrant la trace qui avait ´et´e g´en´er´ee par l’algorithme au d´epart

• Un panneau graphique montrant `a proprement parler les disques et les pˆoles et un voilet de trace

3.1 Fichier HanoiGUI.java

La classe principale qui devra ˆetre ajout´ee est la classe HanoiGUI; elle contiendra la m´ethode main qui configurera et affichera la Frame principale de l’interface graphique. La trace sera inscrite dans un objet de type TextArea. Les disques seront dessin´es dans un Canvas.

Pour plus d’information sur l’API, ne pas h´esiter `a aller voir le site de Sunhttp://java.sun.com/

j2se/1.5.0/docs/api/. Les classes n´ecessaires sont java.awt.Frame, java.awt.Panel, java.awt.TextArea et java.awt.Canvas.

3

(4)

3.2 Les dessins des disques

Fichier PlateauGUI.java Cette classe ´etend la classe Canvas et sert `a dessiner l’ensemble des tours, en surchargeant la m´ethodepublic void paint(Graphics). La m´ethodepublic void repaint() de la classe Canvas servira `a mettre `a jour l’affichage en cas de modification par l’algorithme.

Fichiers TourGUI.java et DisqueGUI.java Ces deux classes ´etendent respectivement les classes Tour.java et Disque.java et ont une m´ethodepublic void draw(Graphics g, int x, int y)qui sert `a dessiner les ´el´ements `a un emplacement donn´e.

4

Références

Documents relatifs

Nous observerons maintenant qu un point de concours ou aboutissent plus de trois lignes de demarcation peut etre rem- place par un certain nombre de points de concours ou se

Lucas ´etablit enfin le th´eor`eme qualifi´e de vraie r´eciproque du th´eor`eme de Fermat. La primeur de ce r´esultat th´eorique d’importance est offerte `a l’AFAS :

Toutes les justifications doivent figurer sur votre copie, mais la r´edaction doit rester sobre.. Vous pouvez admettre un r´esultat, `a condition de le signaler

On remarque que, si j est un nombre pair entre deux nombres premiers impairs (appel´ es nombres premiers jumeaux), alors pour tout q premier impair inf´ erieur ` a √.. 2j, f(2j, q) =

Mais on voit que, la ligne de pli “tombant” selon le cas entre deux caract` eres (dans le cas d’un mot de longueur paire) ou “sur” un caract` ere (dans le cas des mots de

Soit elle n’est pas chez elle, soit elle ne r´ epond pas au t´ el´ ephone. Mais si elle n’est pas chez elle, alors, elle a ´ et´ e kidnapp´ ee. Et si elle ne r´ epond pas au

Soit Pierre aime Marie, soit Marie aime Pierre. Mais si Marie n’aime pas Pierre, alors Pierre n’est pas content. Une fois Pierre n’est pas content, il n’aime pas Marie. Donc Pierre

– L'objet représentant la thread qui est actuellement en train d'exécuter du code peut être obtenu par la méthode.