POO tp1
POO tp1
POO tp1
TP n◦ 1
Révisions - Évaluation
N’oubliez pas de vous inscrire sur DidEL ! Les groupes sont créés,
pensez par conséquent à vous iscrire dans VOTRE groupe. Si vous
n’avez pas le même groupe de TD et TP, inscrivez vous dans les deux.
Exercice 2 [boucle for, switch case] Une séquence d’ADN est représentée
par un mot sur l’alphabet constitué des 4 lettres A, C, G et T. Par exemple,
ACCTGTTA.
1
Écrivez un programme qui affiche au hasard une séquence d’ADN. La longueur
de la séquence est donnée par l’utilisateur (cf. Annexe : lecture au clavier) et
on suppose que la probabilité de chaque lettre est identique.
Pour cela, vous écrirez d’abord une méthode
public static char baseADN()
qui tirera une lettre au hasard de la manière suivante : on engendrera un nombre
au hasard entre 1 et 4 et, à l’aide d’un switch case, on en déduira la lettre.
Un peu d’objet
Exercice 4 [Tamagotchis] Le Tamagotchi est un animal de compagnie virtuel
japonais. Ce nom est un mot-valise créé à partir des mots tamago (“œuf”) et de
l’abréviation de watchi qui vient du mot anglais watch (“montre”). Le jeu consiste
à simuler l’éducation d’un animal à l’aide d’une petite console miniature, de la
taille d’une montre, dotée d’un programme informatique.
Un tamagotchi va donc être un objet qui vit (perd de l’énergie) et qui doit être
alimenté pour survivre (augmenter son énergie). Le but est donc ici de réaliser un
petit programme qui consiste à faire interagir l’utilisateur dans le but de maintenir
en vie une petite colonie de tamagotchis ayant un comportement basique.
1. Écrivez une classe Tamagotchi qui contient les attributs privés suivants :
maxEnergie, energie de type entier et nom de type String. Le constructeur
prend comme paramètre une chaı̂ne de caractères pour le nom du tamagot-
chi et initialise les autres attributs, de façon aléatoire : maxEnergie entre 5
et 9 et energie entre 2 et 5.
2. Écrivez une méthode de signature public void parler() qui écrit à l’écran
le nom du tamagotchi et son état de forme : “heureux”, si l’attribut energie
est supérieur à 5, ou “affamé” dans le cas contraire.
3. Écrivez une méthode de signature public void manger() qui augmente
d’une valeur aléatoire, comprise entre 1 et 2, la valeur de l’attribut energie
et affiche ensuite à l’écran un message de satisfaction. Si energie est déjà
à son niveau maximum (maxEnergie) alors le tamagotchi n’a pas faim et
un message doit montrer son mécontentement.
2
4. Écrivez une méthode de signature public boolean vivre() qui fonctionne
suivant deux cas :
(a) si energie <= 0, affiche un message de fin (”MON NOM : je meurs ! ! !”)
et retourne false.
(b) si energie > 0, réduit energie et retourne true.
5. Écrivez un programme (méthode main située dans une classe SimulTamagotchis)
qui crée n tamagotchis, la valeur n étant fournie par l’utilisateur. Le pro-
gramme exécute en boucle les actions suivantes :
— la méthode vivre() est appliquée à tous les tamagotchis.
— l’utilisateur a la possibilité de choisir le tamagotchi qu’il souhaite nourrir
pour ce cycle.
On sort de la boucle uniquement si un tamagotchi est mort de faim.
Exemples d’exécution
>java SimulTamagotchis 3
Quel nom pour le nouveau tamagotchi : Pierre
Quel nom pour le nouveau tamagotchi : Paul
Quel nom pour le nouveau tamagotchi : Jacques
-------Cycle no 1 -------
Pierre : je suis affamé !
Paul : tout va bien !
Jacques : je suis affamé !
-------Cycle no 2 -------
Pierre : je suis affamé !
Paul : tout va bien !
Jacques : je suis affamé !
Pierre : Merci !
-------Cycle no 3 -------
Pierre : tout va bien !
Paul : je suis affamé !
3
Jacques : je suis affamé !
Paul : Merci !
-------Cycle no 4 -------
Pierre : je suis affamé !
Paul : tout va bien !
Jacques : je suis affamé !
Jacques : Merci !
-------Cycle no 5 -------
Ensemble de rationnels
Exercice 5 On va créer un classe Ratio qui implémentera les nombres rationnels.
Pour représenter un nombre rationnel on utilise deux attributs entiers numera et
denomi qui seront respectivement le numérateur et le dénominateur d’un rationnel.
De plus le dénominateur est toujours strictement positif.
Implémenter les méthodes publiques :
— Ratio(int numera,int denomi)
— Ratio produit(Ratio a)
— Ratio addition(Ratio a)
— boolean egale(Ratio a)
— boolean plusGrand(Ratio a)
— String toString()
Les méthodes produit et addition renvoient respectivement le produit et la
somme de deux rationnels. La méthode egale renvoie true si les deux rationnels
sont égaux (et renvoie false sinon) et la méthode plusGrand renvoie true si le
rationel a est strictement plus grand que this. La méthode toString renvoie une
représentation du rationnel, par exemple 13/7.
Nous rappelons que ab + dc = ad+bc a c ac a c
bd , b × d = bd , que b < d si et seulement si
ad < bc et ab = dc si et seulement si ad = bc.
Exercice 6 Dans cet exercice, on veut construire une classe Ensemble qui représente
un ensemble de rationnels. C’est à vous de choisir votre implémentation.
4
En sachant que :
— Il ne peut y avoir deux fois la même valeur dans l’ensemble (c’est à dire pas
de doublon).
— L’ensemble doit pouvoir contenir au minimum 1000 rationnels.
— Il faut que cette implémentation soit relativement efficace. (on peut, par
exemple uitliser un tableau trié ou une liste chaı̂née (LinkedList) trié, pour
les plus courageeux et ceux qui connaisent, il est possible d’utiliser un arbre
de recherche)
1. Écrire la classe Ensemble qui contiendra les méthodes publiques
— Ensemble()
— void ajoute(int a)
— boolean retire(int a)
— boolean est dans(int a)
— String toString()
La fonction toString() renvoie une chaı̂ne de caractères qui affiche les
éléments d’une instance de type Ensemble.
Exemple d’utilisation :
Ensemble E = new Ensemble();
System.out.prinln(E.toString())
>>>> {}
E.ajoute(new Ratio(1,4));
System.out.prinln(E.toString())
>>>> {1/4}
E.ajoute(new Ratio(3,1));
E.ajoute(new Ratio(3568,6));
System.out.prinln(E.toString())
>>>> {1/4,3/1,1789/3}
E.ajoute(new Ratio(3,1));
System.out.prinln(E.toString())
>>>> {1/4,3/1,1789/3}
System.out.prinln(E.est_dans(new Ratio(3,1)))
>>>> true
System.out.prinln(E.retire(new Ratio(3,1)))
>>>> true
System.out.prinln(E.est_dans(new Ratio(3,1)))
>>>> false
5
union ajoute tous les éléments de A à this. inter retire de this tous les
éléments qui ne sont pas dans l’ensemble A. diff retire de this tous les
éléments qui sont dans l’ensemble A. (Un conseil : Réutilisez du code)
qui engendre une séquence aléatoire de longueur longueur. Cette méthode sera
récursive.
On rappelle que l’on peut concaténer 2 chaı̂nes de caractères, ou une chaı̂ne et
un caractère, grâce à l’opérateur +.
qui à partir d’une séquence d’ADN applique aléatoirement une des trois modifica-
tions suivantes :
1. suppression d’une base (probabilité 20%) ;
2. insertion d’une base (probabilité 30%) ;
3. remplacement d’une base (probabilité 50%) ;
L’indice de la base supprimée, insérée ou remplacée est choisi aléatoirement avec
une égale probabilité et la nouvelle lettre également.
6
Annexe
Docummentation
Avec Eclipse
1. Depuis un terminal, tapez eclipse & ou sélectionnez Demarrer/Developpement/Eclipse
Eclipse va vous demander de sélectionner votre espace de travail, qui est
le dossier qui stockera vos projets.
Il est possible de changer de perspective en sélectionnant Window/Open perspective.
Pour écrire un programme en Java, choisissez la perspective Java.
2. (a) Allez à File/New/Java Project (ou File/New/Projet/Java/Java Project,
puis entrez le nom du projet, par example, “Premiers programmes”.
Dans le cadre JRE, choisissez use a project specific JRE et java-6-sun-1.6-0.20.
(b) Maintenant, vous pouvez écrire un programme java : allez à File/New/Class,
entrez le nom de la classe, par exemple, “Multiplicationjava”, cochez la
case public static void main(String[] args) si vous voulez ajou-
ter la fonction main dans votre classe.
(c) Compilation : par défaut, lorsque vous rédigez un programme, Eclipse
le compile automatiquement.
(d) Pour l’exécuter, Allez à Run/Run As/Java Application ou utilisez le
bouton en forme de flèche blanche sur rond vert.
Lire au clavier
Voici un exemple de lecture au clavier :
7
public class LireEntiers{
public static void main(String [] args) {
// initialisation lecture
Scanner sc = new Scanner(System.in);
System.out.print("Donner un entier");
//lecture de la reponse
int r = sc.nextInt();
La ligne
import java.util.Scanner;
doit être mise dans la méthode qui va utiliser la lecture, elle sert à récupérer un
“lecteur sur le clavier”.
Pour lire un double, on utilisera sc.nextDouble(), pour un boolean, sc.nextBoolean(),
etc.
Pour lire un mot sc.next(), le retour à la ligne ou un espace étant considéré
comme une fin de mot.
Sous eclipse : Pour exécuter, Run/Run Configurations et, dans l’onglet Arguments,
ajoutez les arguments, ici, “Il fait beau”.