Travaux Dirigés Java

Documents pareils
Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Java Licence Professionnelle CISII,

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

TP, première séquence d exercices.

Premiers Pas en Programmation Objet : les Classes et les Objets

TD3: tableaux avancées, première classe et chaînes

Utilisation d objets : String et ArrayList

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Programmer en JAVA. par Tama

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Chapitre 10. Les interfaces Comparable et Comparator 1

Tp 1 correction. Structures de données (IF2)

Une introduction à Java

Gestion distribuée (par sockets) de banque en Java

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programmation par les Objets en Java

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programme Compte bancaire (code)

Exercices sur les interfaces

Projet de programmation (IK3) : TP n 1 Correction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmation avec des objets : Cours 7. Menu du jour

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP1 : Initiation à Java et Eclipse

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Programmation Objet Java Correction

Corrigé des exercices sur les références

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Solutions du chapitre 4

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Bases de programmation. Cours 5. Structurer les données

Corrigés des premiers exercices sur les classes

Package Java.util Classe générique

Cours 1: Java et les objets

Génie Logiciel avec Ada. 4 février 2013

Java DataBaseConnectivity

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Auto-évaluation Programmation en Java

PROGRAMMATION PAR OBJETS

RMI le langage Java XII-1 JMF

Le langage C. Séance n 4

Utiliser Java sans BlueJ

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Cours d initiation à la programmation en C++ Johann Cuenin

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Synchro et Threads Java TM

Langage à objets : JAVA (1)

Bases Java - Eclipse / Netbeans

Chapitre I Notions de base et outils de travail

1. Langage de programmation Java

Plan du cours. Historique du langage Nouveautés de Java 7

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Flux de données Lecture/Ecriture Fichiers

INF 321 : mémento de la syntaxe de Java

as Architecture des Systèmes d Information

Java Licence professionnelle CISII,

IRL : Simulation distribuée pour les systèmes embarqués

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

TD/TP PAC - Programmation n 3

Remote Method Invocation (RMI)

TP3 : Manipulation et implantation de systèmes de fichiers 1

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

TP1. Outils Java Eléments de correction

Arguments d un programme

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TD/TP PAC - Programmation n 3

Conventions d écriture et outils de mise au point

Programmation Par Objets et Langage Java

INITIATION AU LANGAGE JAVA

Le prototype de la fonction main()

Langage Java. Classe de première SI

ACTIVITÉ DE PROGRAMMATION

Manuel d'installation de GESLAB Client Lourd

Classe Interne, Anonyme & Enumération

Programmation système I Les entrées/sorties

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

OpenPaaS Le réseau social d'entreprise

Compression de Données - Algorithme de Huffman Document de Conception

Héritage presque multiple en Java (1/2)

Un ordonnanceur stupide

Objets et Programmation. origine des langages orientés-objet

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Travaux Dirigés n 1 : chaînes de caractères

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Transcription:

Travaux Dirigés Java Séance 1 M. Safey El Din 19 janvier 2004 1 Premiers exercices Sommes de carrés : écrire un programme qui calcule la somme des 100 premiers entiers et indique à l écran le résultat. Rappel : Si n est une variable de type entier (int) l instruction System.out.println(n); provoque l écriture du contenu de la variable n; alors que l instruction System.out.println( voila + n); provoque l écriture du mot voila suivi du contenu de la variable n. Factorielle : Il s agit d écrire un programme qui calcule la factorielle des n premiers entiers et indique à l écran le résultat. Le nombre n doit être lu sur la ligne de commande. Rappels : La classe Integer du paquetage java.lang possède la méthode : public int static parseint(string s) throws NumberFormatException; qui retourne l int correspondant à la chaîne de caractères donnée en paramètre. Par ailleurs, le premier argument envoyé sur la ligne de commandes après le nom du programme est enregistré à l indice zéro du tableau de chaîne de caractères de l argument de la méthode main. Calculer la racine carrée positive d un double : Il s agit d écrire une classe servant à calculer la racine carrée positive d un nombre réel de type double. Ce nombre sera envoyé comme argument après le nom de la classe contenant la méthode main. On ne traitera pas le cas où on demanderait d extraire la racine carrée d un nombre négatif. La classe Racine proposée ci-dessous contient un attribut privé (déclaré private), l attribut nommé precision, ce qui entraîne que cet attribut n est pas directement accessible depuis une autre classe. Compléter le programme ci-dessous. class Racine private double precision; Racine(double precision) this.precision=precision; //calcule de la racine carree de operande //avec la precision "precision" //on supposera operande positif double racine(double operande) double solution=0; /*utiliser une méthode qui recherche par dichotomie la racine carree de l operande. On initialisera l intervalle sur lequel sera recherchee la solution avec l intervalle [0, operande] et la premiere solution dont le carre sera compare a l operande sera le milieu de cet intervalle*/ return solution; 1

//ajouter des methodes getprecision et setprecision class UtiliseRacine public static void main(string[] argv) double operande= (Double.valueOf(argv[0])).doubleValue(); double valeurracine; Racine extracteur = new Racine(0.01); valeurracine=extracteur.racine(operande); System.out.println(valeurRacine); System.out.println("A COMPLETER" +(valeurracine-math.sqrt(operande))); //extracteur.setprecision(0.00001); valeurracine=extracteur.racine(operande); System.out.println(valeurRacine); System.out.println("A COMPLETER" +(valeurracine-math.sqrt(operande))); /* On obtient pour : java UtiliseRacine 64: 8.00390625 precision 0.01, erreur =0.00390625 8.000003814697266 precision 1.0E-5, erreur =3.814697265625E-6 et pour : java UtiliseRacine -64-32.0 precision 0.01, erreur =NaN -32.0 precision 1.0E-5, erreur =NaN */ 2 Palindrome Un palindrome est une chaîne de caractères égale à elle-même lorsqu on la retourne. Par exemple, la chaîne laval est un palindrome, alors que la chaîne bonjour n en est pas un. Il s agit d écrire un programme qui, étant donnée une chaîne de caractères : calcule la chaîne inverse, indique s il s agit d un palindrome. Premier temps. Dans un premier temps, la chaîne à traîter ne comportera pas de caractère d espacement et sera indiquée sur la ligne de commandes. On définira une seule classe qui n aura aucun attribut et deux méthodes statiques : une méthode dont l en-tête sera : static String inverse(string s) qui retournera un objet de type String contenant la chaîne inverse de la chaîne s. Cette méthode aura entre autres variables locales une variable nommée envers, de type char[], pour référencer un tableau de caractères comportant autant de case que le nombre de caractères de la chaîne s. Ce tableau est destiné à contenir les caractères de s en sens inverse de s. Une méthode main : dans cette méthode, on récupérera la chaîne par la ligne de commande, on calculera son inverse grâce à la méthode inverse, on affichera cet inverse dans la fenêtre de commandes, on indiquera dans cette même fenêtre si la chaîne est un palindrome ou non. 2

Indications : Supposons que le paramètre de la méthode main s appelle arg, le premier argument envoyé par la ligne de commande (derrière le nom du programme) est arg[0]; si la classe contenant la méthode main s appelle Palindrome, et si la commande est : java Palindrome bonjour alors, dans la méthode main, arg[0] vaut bonjour. La classe String possède une méthode length() qui retourne le nombre de caractères de la chaîne concernée. Par exemple, si on a : String s = "java"; s.length() vaut 4. La classe String possède une méthode charat(int i) qui retourne le (i + 1)-ième caractère de la chaîne concernée. Par exemple, si on a : String s = "java"; s.charat(2) vaut v. La classe String possède une méthode equals(string c) qui retourne true si la chaîne concernée est identique à la chaîne c et false sinon. Par exemple, si on a : String s = "java"; t = "lundi"; u = "ja" + "va"; s.equals(t) vaut false et s.equals(u) vaut true. La classe String possède un constructeur ayant un paramètre de type char[] et retourne un objet de type String correspondant au tableau reçu en paramètre. Par exemple, si on a : char[] table = j, a, v, a ; s = new String(table) revient à s = "java". Deuxième temps. Désormais on souhaite traîter la chaîne de caractères après le lancement du programme. Cela permettra d avoir des espacements dans la chaîne de caractères à traîter. Indications : Pour effectuer une saisie par la fenêtre d exécution, on peut utiliser l instruction suivante : BufferedReader entree = new BufferedReader(new InputStreamReader(System.in)); La classe BufferedReader se trouvant dans le paquetage java.io, on ajoutera en haut du fichier source : import java.io.*; L objet nommé ci-dessus entree permet de faire des saisies, en particulier, l instruction String chaine = entree.readline(); met dans chaine le contenu de la ligne indiquée dans la fenêtre d exécution par l utilisateur (et envoyée par la touche entrée). Cette méthode risquant de lancer des exceptions du type IOException, on rajoutera throws IOException à la fin de l en-tête de la méthode main. 3 Une classe pour modéliser un segment Il s agit de modéliser un segment de droite dont les valeurs des deux extrémités sont entières. Si on échange les deux extrémités, on considère qu il s agit encore du même segment. Les opérations que l on souhaite faire sur ce segment sont : calculer sa longueur; savoir si un entier donné se trouve sur le segment (c est-à-dire s il est compris entre la plus petite et la plus grande des valeurs des extrémités du segment). Écrire un programme qui contient : une classe Segment comportant : deux attributs de type int : extr1 et extr2, représentant les coordonnées (entières) des extrémités d un segment sur un axe; un constructeur de ce segment recevant en argument les deux valeurs entières des extrémités du segment que l on veut construire; une méthode nommée ordonne échangeant éventuellement les valeurs des extrémités du segment de telle sorte que la valeur de extr1 soit inférieure à celle de extr2; une méthode retournant la longueur du segment; une méthode dont le prototype est : boolean appartient(int x) indiquant si l entier x appartient ou non au segment; 3

une méthode redéfinissant la méthode public String tostring() Celle-ci décrira une instance de Segment sous la forme d une chaîne de caractères (par exemple, le segment d extrémités 35 et 44 pourra être transformé en la chaîne de caractères : "segment : [-35, 44]" (la plus petite extrémité est toujours indiquée à gauche. La méthode retournera cette chaîne. une classe EssaiSegment testant la classe Segment et comportant une méthode main à laquelle on devra fournir trois paramètres entiers par ligne de commande : origine et extrémité d un segment et un point dont on voudra savoir s il appartient ou non à ce segment. On utilisera nécessairement la méthode tostring lorsqu on voudra écrire le segment sur la sortie standard. Version avec des attributs privés Dans une seconde écriture de la classe Segment, on souhaite assurer que extr1 soit toujours plus petit que extr2. Pour cela, on déclare les attributs extr1 et extr2 comme privés (avec le modificateur private); on permettra alors, bien que ces attributs soient privés, leur consultation et leur modification, en définissant quatre méthodes : int getextr1(void) int getextr2(void) int setextr1(int a) int setextr2(int a) Dans le main défini dans la classe EssaiSegment, on ajoutera quelques instructions au choix pour tester ces méthodes supplémentaires. 4 Une classe pour modéliser un vecteur Il s agit de modéliser un vecteur de Z 2 dont l origine est en (0,0) (un tel vecteur est donc caractérisé par deux nombres entiers relatifs). Les opérations que l on souhaite faire sur ce segment sont : calculer sa longueur, par une méthode d instance sans paramètre, nommée longueur, et qui retourne cette longueur sous forme d un double; savoir si le vecteur concerné est ou non plus petit qu un autre vecteur donné; on écrira pour cela une méthode d instance nommée pluspetitque qui recevra en paramètre l autre vecteur et qui retournera une variable de type boolean; additionner au vecteur concerné un autre vecteur; on écrira pour cela une méthode d instance nommée addition qui recevra en paramètre l autre vecteur et qui ne retournera rien; additionner deux vecteurs donnés; on écrira pour cela une méthode statique nommée aussi addition (en utilisant ainsi la possibilité de la surcharge) qui recevra en paramètres les deux vecteurs à additionner et qui retournera le résultat sous forme d un objet de type Vecteur; une méthode redéfinissant la méthode : public String tostring() Celle-ci décrira une instance de Vecteur sous la forme d une chaîne de caractères (par exemple, le vecteur de composantes 1 et 2 pourra être décrit par la chaîne de caractères : "vecteur (1, 2)"). La méthode retournera cette chaîne. On écrira une méthode main pour tester cette classe Vecteur, méthode que l on écrira à l intérieur d une classe nommée EssaiVecteur. Les composantes des vecteurs à traiter dans les tests pourront être indiquées sur la ligne de commande. 5 Gérer une pile d entiers Il s agit de définir une classe modélisant une pile d entiers. Nécessairement, tous les attributs de cette classe auront le modificateur private, ce qui signifie qu on ne peut pas les utiliser directement de l extérieur de la classe (on dit encore qu ils ne sont visibles que de leur propre classe). Cette classe possèdera les trois méthodes suivantes (il faudra reprendre exactement les en-têtes indiquées) : void empiler(int n) Cette méthode empile la valeur int depiler() throws ExceptionPileVide Si la pile est vide, cette méthode lance une exception, ce que vous ferez par l instruction : throw new ExceptionPileVide(); sinon, elle dépile un entier dont elle retourne la valeur. Vous devez télécharger dans votre répertoire courant le fichier ExceptionPileVide.java depuis l URL : http://www-calfor.lip6.fr/~safey/enseignements/java/ 4

boolean estvide() Cette méthode retourne true si la pile est vide et false dans le cas contraire. Vous implanterez une pile de deux façons différentes, en définissant une classe pour chacune de ces deux façons. La première classe, nommée Pile1, utilisera un tableau d entiers. Au départ, ce tableau aura une certaine longueur, petite (par exemple 3); il faudra veiller à agrandir ce tableau lorsqu il est plein et que l on veut empiler un entier; on pourra alors agrandir le tableau d une quantité déterminée (par exemple 2). La seconde classe, nommée Pile2, utilisera une liste chaînée. Il faudra modéliser une classe supplémentaire pour modéliser un maillon de cette liste. On testera les classes, séparément, l une après l autre, en utilisant le fichier InterfacePile.java disponible à l URL mentionnée ci-dessus. Dans ce fichier, il faudra juste changer Pile1 en Pile2 si on veut tester la classe Pile2. Après avoir compilé le fichier, on exécutera la méthode main avec l instruction java InterfacePile. On aura alors une interface graphique qui utilise Pile1 (ou Pile2) et qui permet : d empiler des entiers, en les écrivant dans une petite ligne de texte, un par un, ou plusieurs à la suite séparés par des espaces puis en activant le bouton empiler ou bien en tapant sur la touche d entrée; de dépiler une donnée de la pile; de savoir si la pile est vide ou non. 6 Une classe qui gère un tableau trié d entiers Il s agit de définir une classe représentant un tableau trié d entiers. La classe, appelée TriSimple, aura un attribut privé qui sera un tableau d entiers. Au moment de la construction d une instance de la classe, le tableau aura une capacité qui aura une valeur par défaut donnée par le programmeur et pourra aussi être indiquée par le constructeur. Le tableau initial ne contiendra aucun élément. Les méthodes suivantes seront prévues : void inserer(int entier) : insére un entier dans le tableau en respectant un ordre croissant sur les entiers. void retirer(int entier) : retire un entier donné, si un tel entier est dans le tableau. Si l entier figure plusieurs fois, une seule occurrence est retirée. public String tostring() : retourne une chaîne de caractères décrivant le tableau, et redéfinit la méthode correspondante de la classe Object. Vous pouvez bien sûr ajouter des fonctionnalités. Lorsque le tableau devient trop petit, il faut l agrandir en définissant un tableau plus grand et en recopiant les entiers un à un. La différence entre la capacité de l ancien tableau et celle du nouveau sera fournie par la donnée entière increment dont la valeur pourra être indiquée par le constructeur. Lorsque le nombre de données aura diminué de telle sorte que la capacité inemployée soit au moins égale au double de l incrément, on diminuera le tableau. On récupérera le fichier EssaiTri.java (toujours à la même URL) qui contient une méthode main qui permet de tester la classe TriSimple que vous aurez écrite. Lors de l exécution de ce programme de test, on pourra dans une boucle entrer : la lettre a suivie de données à insérer; la lettre s suivie de données à supprimer; la lette q pour quitter. 7 Écrire un double avec un nombre limité de décimales Il s agit de définir une méthode permettant d écrire un double avec un nombre limité de décimales. Pour cela, on définira une classe contenant une méthode statique, la méthode tronque, ayant deux paramètres : un double x et un entier nbdecimales. La méthode devra retourner une chaîne de caractères donnant le double x éventuellement tronqué de façon à avoir au plus nbdecimales décimales. On ne cherchera pas à arrondir au plus proche, on enlèvera simplement les décimales excédentaires, que x soit positif ou négatif. Si le paramètre nbdecimales transmis à la méthode tronque est négatif ou nul, la chaîne renvoyée sera la partie entière par défaut de x si x est positif et la partie entière par excès si x est négatif. La valeur de x et celle de nbdecimales seront transmis par la ligne de commande. 5

Les méthodes suivantes de la classe String pourraient vous servir : charat(int i) : retourne le caractère de la chaîne concernée se trouvant en position i, le premier caractère de la chaîne étant considéré comme en position 0. substring(int debut, int fin) : retourne la sous-chaîne constituée des caractères qui se trouvent de la position debut jusqu à la position fin-1 incluse (i.e. fin excluse). On pourra utiliser une instance de la classe java.util.stringtokenizer pour découper la chaîne représentant initialement le double en la partie qui précède le. est celle qui le suit. 8 Une classe pour gérer un tas d objets [Exercice noté] Un tas est une structure de données qui est très utile pour trier des données mais aussi lorsque l on veut gérer un ensemble de données en ne faisant qu ajouter des données ou bien retirer de l ensemble de données la plus grande d entre elles. Toujours à la même URL, récupérez le fichier Tas.java, où vous trouverez des explications sur ce qu est la structure de tas, et que vous devrez compléter pour avoir une classe destiner à gérer un tas d objets. Le programme EssaiTas.java vous permettra de tester votre travail. Lorsque vous aurez étudié les classes abstraites, vous verrez une façon plus élégante de procéder. 6