TD n 1 - Correction. Premières classes. Licence Informatique Année Exercice 1 Qu affiche le programme suivant?

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

ACTIVITÉ DE PROGRAMMATION

Java Licence Professionnelle CISII,

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

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

Package Java.util Classe générique

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Programme Compte bancaire (code)

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

Programmation par les Objets en Java

Projet de programmation (IK3) : TP n 1 Correction

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

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

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

TP, première séquence d exercices.

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

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

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Utilisation d objets : String et ArrayList

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

Corrigé des exercices sur les références

Programmer en JAVA. par Tama

Auto-évaluation Programmation en Java

Corrigés des premiers exercices sur les classes

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Algorithmique I. Algorithmique I p.1/??

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

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Cours de Systèmes d Exploitation

Un ordonnanceur stupide

Solutions du chapitre 4

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

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

Les arbres binaires de recherche

Programmation avec des objets : Cours 7. Menu du jour

Flux de données Lecture/Ecriture Fichiers

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation Orientée Objet

as Architecture des Systèmes d Information

Généralités sur le Langage Java et éléments syntaxiques.

Programmation C++ (débutant)/instructions for, while et do...while

STAGE IREM 0- Premiers pas en Python

TP1 : Initiation à Java et Eclipse

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Langage Java. Classe de première SI

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Threads. Threads. USTL routier 1

Exercices sur les interfaces

Initiation à la programmation en Python

Programmation Objet I

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)

Une introduction à Java

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

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Examen Médian - 1 heure 30

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

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

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Recherche dans un tableau

INF 321 : mémento de la syntaxe de Java

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation Par Objets

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Cours 1: Java et les objets

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

Les bases de l informatique et de la programmation. École polytechnique

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Chapitre VI- La validation de la composition.


2. Comprendre les définitions de classes

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

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

RMI le langage Java XII-1 JMF

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

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

Algorithmique, Structures de données et langage C

TD/TP PAC - Programmation n 3

TD2 Programmation concurrentielle

Java DataBaseConnectivity

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Java 1.5 : principales nouveautés

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

Algorithmes récursifs

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

Synchro et Threads Java TM

OpenPaaS Le réseau social d'entreprise

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation en Java IUT GEII (MC-II1) 1

1 Recherche en table par balayage

Transcription:

Université Paris 7 Java Licence Informatique Année 2005-2006 TD n - Correction Premières classes Exercice Qu affiche le programme suivant? public class Ex { int a = 0 ; public void f() { a++ ; public void affiche() { System.out.println(a); public static void main(string [] args) { Ex p = new Ex(); Ex q = new Ex(); p.affiche(); q.affiche(); p.f(); p.affiche(); q.affiche(); p = q; p.f(); p.affiche(); q.affiche(); 0 0 0 On rappelle que p et q sont des references sur des objets instances de la classe Ex.

Exercice 2 Qu affiche le programme suivant? public class Ex2 { int a = 0 ; public static void f(ex2 o) { o.a++ ; o.affiche(); public void affiche() { System.out.println(a); public static void main(string[] args) { Ex2 obj = new Ex2(); obj.affiche(); f(obj) ; obj.affiche(); 0 Exercice 3 Qu affiche le programme suivant? public class Ex3 { int a = 0 ; public void f(int a) { System.out.println(a) ; public static void main(string[] args) { Ex3 p = new Ex3(); p.f(2); Dans la fonction f, comment faire si on veut également afficher la valeur de l attribut a? 2 Pour afficher la valeur de l attribut a dans la méthode f qui a un parametre formel a, on doit utiliser le mot clé this qui désigne une référence sur l objet qui appelle la méthode. La nouvelle méthode f est donc : public void f(int a) { System.out.println(a); System.out.println(this.a); 2

Exercice 4 Soit le programme suivant : // Fichier Point.java class Point { // deux attributs de type int int abscisse; int ordonnee; // constructeur Point(){ abscisse = 0 ; ordonnee = 0 ; // méthode permettant de changer les coordonnées d un point void set( int u, int v ){ abscisse = u ; ordonnee = v ; // méthode permettant de translater un point void translate( int u, int v ){ abscisse = abscisse + u ; ordonnee = ordonnee + v ;. Ajouter à la classe Point la méthode affiche, de type de retour void, de sorte que p.affiche() affiche à l ecran l abscisse et l ordonnée de p. void affiche(){ System.out.println( "abscisse = " + abscisse + " ordonnee = " + ordonnee ) ; 2. Ajouter à la classe Point la méthode origine, de type de retour boolean qui teste si les coordonnées du point sont nulles. Ajouter également une méthode egale telle que p.egale(q) renvoie true si et seulement si les abscisses et ordonnées des points p et q sont égaux. boolean origine(){ return ( ( abscisse == 0 ) && ( ordonnee == 0 ) ) ; boolean egale( Point q ){ return ( ( abscisse == q.abscisse ) && ( ordonnee == q.ordonnee ) ) ; 3. Écrire un deuxième constructeur de la classe Point, dont le prototype est Point( int u, int v ) qui permet d initialiser l abscisse et l ordonnée avec u et v. Écrire une seconde méthode set, prenant en argument un objet de la classe Point, et qui recopie les attributs de ces arguments. 3

Point( int u, int v ){ abscisse = u ; ordonnee = v ; void set( Point q ){ abscisse = q.abscisse ; ordonnee = q.ordonnee ; 4. Ajouter à la classe Point une méthode symetrie telle que p.symetrie() renvoie un nouvel objet Point qui représente le symétrique du point p, dans une symétrie centrale par rapport à l origine du repère. Point symetrie(){ Point q = new Point(0-abscisse,0-ordonnee) ; return q ; 5. On veut numéroter les points au fur et à mesure de leur création. On ajoute donc les variables suivantes : static int nombre ; int numero ; où l attribut numero indique le numero du point et où la variable de classe nombre indique combien d objets ont été créés. Réécrire les constructeurs Point en conséquence. Réécrire également la méthode affiche pour observer la valeur de ces nouveaux attributs. Point(){ abscisse = 0 ; ordonnee = 0 ; nombre++ ; numero = nombre ; Point( int u, int v ){ abscisse = u ; ordonnee = v ; nombre++ ; numero = nombre ; void affiche(){ System.out.println( "abscisse = " + abscisse + " ordonnee = " + ordonnee + " nombre de points = " + nombre + " numero = " + numero) ; 4

Exercice 5 Ecrire une classe implémentant une paire d entier :. Définir une classe Paire dont le constructeur initialise les attributs privés de la paire. Définir une méthode affiche et une fonction main pour tester cette classe. 2. Définir un deuxième constructeur, qui initialisera à 0 les composants de la paire. 3. Définir un troisième constructeur, qui initialisera une paire à l aide d une autre paire. 4. Définir des fonctions permettant d accéder et de modifier chaque élément de la paire. public class Paire{ private int first ; private int second ; public Paire( int first, int second ){ this.first = first ; this.second = second ; public Paire(){ this.first = 0 ; this.second = 0 ; public Paire( Paire p ){ this.first = p.first ; this.second = p.second ; public int getfirst(){ return first ; public int getsecond(){ return second ; public void setfirst( int x ){ first = x ; public void setsecond( int y ){ second = y ; public void affiche(){ System.out.print( "("+ first + ","+ second +")" ) ; public static void main( String[] args ){ Paire p = new Paire(, 2 ) ; Paire p2 = new Paire() ; Paire p3 = new Paire( p ) ; p.affiche() ; p2.affiche() ; p3.affiche() ; p3.setfirst(6) ; System.out.println( "(" + p3.getfirst() + ","+ p3.getsecond() + ")" ) ; Exercice 6 Algorithmes de tri naïfs, sur des Paires d entiers : 5

. Enrichir la classe Paire d une méthode définissant quand une paire est inférieure à une autre selon la règle lexicographique suivante : (x,y) < (x2,y2) ssi (x < x2) ou (x = x2 et y < y2). public boolean strictinf( Paire q ){ return ( (this.first < q.first) (this.first == q.first && this.second < q.second) ) ; 2. Le principe du tri bulle est de parcourir un tableau jusqu à ce qu il soit trié. A chaque parcours, on compare deux à deux les éléments consécutifs et on les permute s ils ne sont pas dans l ordre. Si lors d un parcours on n a permuté aucun élément, le tableau est trié. Créer une classe Tri, et une methode statique Tribulle qui trie un tableau de paires. 3. Le principe du tri par insertion consiste à considérer une à une les valeurs du tableau, et à les insérer au bon endroit dans le tableau constitué des valeurs précédemment considérées et triées. Le tableau est donc parcouru de droite à gauche, dans l ordre décroissant. Les éléments sont donc décalés vers la droite tant que l élément à insérer est plus petit qu eux. Dès que l élément à insérer est plus grand qu un des éléments du tableau trié, il n y a plus de décalage et on insère l élément dans la case laissée vacante. Créer une méthode statique TriInsertion qui trie un tableau de paires. 4. Le principe du tri fusion suit la stratégie diviser pour régner : on divise le tableau à trier en deux parties, on trie (récursivement) chacune d entre elle, et on fusionne le résultat. Créer une méthode statique TriFusion qui trie un tableau de paires. 5. Pour les trois algorithmes de tri que vous avez implémenté, et pour les deux tableaux suivants : {(3,3),(2,2),(, ),(0,0) {(0,0),(,),(2, 2),(3,3) Combien de comparaisons de paire ont été effectuées? Combien de références vers des objets de la classe Paire ont été déclarées lors du tri? public class Tri{ /******************************************************************************/ // Tri bulle public static void tribulle( Paire [] tabpaire ){ // booleen qui sera vrai a la fin d une boucle seulement si on n a // pas trouve de permutation a faire c est a dire si le tableau est trie boolean trifini ; // dernier indice du tableau int borne = tabpaire.length -; // tampon pour la permutation de deux paires su tableau Paire temp ; do{ trifini = true ; for ( int i = 0 ; i < borne ; i++ ) // si deux elements successifs ne sont pas dans l ordre // croissant if ( ( tabpaire[i+] ).strictinf( tabpaire[i] ) ){ // le tableau n est pas dans l ordre trifini = false ; // on permute ces deux éléments dans le tableau 6

temp = tabpaire[i] ; tabpaire[i] = tabpaire[i+] ; tabpaire[i+] = temp ; // on sort de la boucle si le tableau est dans l ordre croissant while(!trifini ) ; /******************************************************************************/ // Tri Insertion public static void triinsertion( Paire [] tabpaire ){ int longueur = tabpaire.length; // La partie gauche du tableau (jusqu a i-) est triee for ( int i = ; i < longueur ; i++ ){ // on cherche a placer aplacer dans la partie triee Paire aplacer = tabpaire[i]; // parcours de droite a gauche de la partie triee int parcourstrie = i-; // drapeau indiquant si on a trouve la place de aplacer boolean placenontrouvee; // boucle de parcours de la partie triee droite a gauche // on s arrete quand on a trouve le premier element inferieur // ou egal a aplacer. Tant qu on ne le trouve pas, on decale // les elements de la partie triee vers la droite pour lui // faire une place. do{ placenontrouvee = false ; if ( aplacer.strictinf( tabpaire[parcourstrie] ) ){ // decalage de l element courant vers la droite tabpaire[parcourstrie+]=tabpaire[parcourstrie]; parcourstrie--; placenontrouvee = true ; // on est au debut de la partie triee if ( parcourstrie < 0 ) placenontrouvee = false ; while ( placenontrouvee ) ; tabpaire[parcourstrie+] = aplacer ; /******************************************************************************/ //Tri Fusion public static void trifusion ( Paire tableau[]){ int longueur = tableau.length; if ( longueur > 0 ){ trifusionpartiel( tableau, 0, longueur- ); // tri de la partie du tableau de l indice debut a l indice fin private static void trifusionpartiel ( Paire tableau[], int debut, int fin ){ 7

if ( debut!= fin ){ int milieu = ( fin + debut ) / 2; // tri de la moitie gauche trifusionpartiel( tableau, debut, milieu ); // tri de la moitie droite trifusionpartiel( tableau, milieu +, fin ); // fusion des deux parties triees fusion( tableau, debut, milieu, fin ); // fusion en partie triee des parties de debut a milieu et de milieu // a fin du tableau private static void fusion ( Paire tableau[], int debut, int milieu, int fin ){ //on recopie les éléments de la premiere partie a trier dans // un nouveau tableau pour ne pas ecraser de valeur originale Paire table[] = new Paire [milieu - debut + ]; for ( int i = debut ; i <= milieu ; i++ ){ table[i-debut] = tableau[i]; // compteurs pour les deplacements dans les deux parties triées int compteur = debut ; int compteur2 = milieu+ ; // on parcours la partie a fusionner pour y placer les elements // des deux sous parties triees si compteur atteint milieu, // c est qu on a place tous les elements de la premiere partie // et les suivants sont deja dans l ordre dans le tableau for ( int i = debut ; ( ( i <= fin ) && ( compteur <= milieu ) ) ; i++ ){ // la deuxieme partie du tableau est placee, on fini // de placer les elements de la premiere if ( compteur2 == ( fin + ) ){ tableau[i] = table[compteur-debut]; compteur++; // l element courant dans la premiere partie du tableau doit // etre place avant l element courant de la deuxieme partie else if ( ( table[compteur-debut] ).strictinf( tableau[compteur2] ) ){ tableau[i] = table[compteur-debut]; compteur++ ; // l element courant dans la deuxieme partie du tableau doit // etre place avant l element courant de la premiere partie else{ tableau[i] = tableau[compteur2]; compteur2++; 8