POO tp1

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 8

Université Paris Diderot Programmation Orientée Objet

L2/L3 Année 2014-2015

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.

Le TP est censé occuper tout le monde toutes les 3 heures, ne soyez


donc pas surpris de ne pas pouvoir le finir. Si les exercices 1 à 5 sont
fait correctement - indenté, commenté et testé - c’est déjà très bien.

Révisions sur les structures de bases


Exercice 1 [boucle while]
Aide : La méthode

public static double Math.random()

retourne une valeur flottante pseudo-aléatoire supérieure à 0 et strictement inférieure


à 1.
Pour obtenir la partie entière d’un flottant, on utilisera le cast (conversion de
type) : (int)unflottant.
Écrivez un programme qui choisit deux nombres entre 1 et 9 et demande à
l’utilisateur le résultat de leur multiplication, si la réponse est mauvaise le pro-
gramme repose la question. (Pour la lecture au clavier, reportez-vous à Annexe :
lecture au clavier)
Exemple d’exécution :

> java TableMultiplication


Quel est le resultat de 2 X 6 ? 10
Faux !
Recommencez:2 X 6 = ? 18
Faux !
Recommencez:2 X 6 = ? 12
Bravo !!!

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.

Exercice 3 [String, lecture de la ligne de commande] Écrivez un programme


qui réécrit les chaı̂nes de caractères données en argument de la ligne de commande
en les tronquant de leur première et dernière lettre.
Exemple d’exécution :
>java Tronque Il fait beau aujourd’hui
ai ea ujourd’hu
Aide : La méthode s.substring(i,j) retournera la sous-chaı̂ne constituée des
caractères de i à j-1. Voir l’annexe pour l’explication de la lecture de la ligne de
commande.

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é !

(0) Pierre (1) Paul (2) Jacques


Nourrir quel tamagotchi ? 1

Paul : je n’ai pas faim !!

-------Cycle no 2 -------
Pierre : je suis affamé !
Paul : tout va bien !
Jacques : je suis affamé !

(0) Pierre (1) Paul (2) Jacques


Nourrir quel tamagotchi ? 0

Pierre : Merci !

-------Cycle no 3 -------
Pierre : tout va bien !
Paul : je suis affamé !

3
Jacques : je suis affamé !

(0) Pierre (1) Paul (2) Jacques


Nourrir quel tamagotchi ? 1

Paul : Merci !

-------Cycle no 4 -------
Pierre : je suis affamé !
Paul : tout va bien !
Jacques : je suis affamé !

(0) Pierre (2) Jacques


Nourrir quel tamagotchi ? 2

Jacques : Merci !

-------Cycle no 5 -------

Pierre : je meurs... Arrrggh !

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

2. Implémenter les méthodes


— void union(Ensemble A)
— void inter(Ensemble A)
— void diff(Ensemble A)

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)

Exercices plus difficiles


Exercice 7 [String] Modifiez le programme de l’exercice 2 de telle sorte que l’on
ait une méthode

String sequenceADN(int longueur)

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 +.

Exercice 8 [String] Reprenez la méthode sequenceADN de l’exercice 7. Créez


une méthode

String modification(String sequence)

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

1 Documentation Java en ligne


— Tutorial Java de Sun (racheté par Oracle depuis peu)(en anglais) :
http://download.oracle.com/javase/tutorial/
— Documentation : API http://download-llnw.oracle.com/javase/6/docs/api/

Avec un éditeur (emacs) et la ligne de commande


— Tapez la classe Machin dans un fichier appelé Machin.java.
— Compilez-le : javac Machin.java
Le fichier Machin.class est créé.
— Lancez le programme avec java Machin.
Remarque : Si votre programme comporte plusiseurs classes, vous devrez faire
autant de fichiers que de classes publiques.

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 :

import java.util.Scanner; //on va utiliser la classe Scanner

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();

System.out.println("Vous avez donné l’entier "+ r);


}
}

La ligne

import java.util.Scanner;

doit être mise en début de fichier.


La ligne

Scanner sc = new Scanner(System.in);

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.

Les arguments de la ligne de comande


Lorsqu’on lance un programme java de la manière suivante :

>java Prog Il fait beau

Le tableau de String donné comme argument du main (dans nos exemples, il


s’appelle args) reçoit le tableau {"Il", "fait", "beau"}.

Sous eclipse : Pour exécuter, Run/Run Configurations et, dans l’onglet Arguments,
ajoutez les arguments, ici, “Il fait beau”.

Vous aimerez peut-être aussi