UNIVERSITÉ DE MONTRÉAL FACULTÉ DES ARTS ET DES SCIENCES DIRECTION DE L ENSEIGNEMENT DE SERVICE EN INFORMATIQUE COURS : IFT 1170 EXAMEN INTRA DATE : 4 juin 2009 CHARGÉ DE COURS : Michel Reid DURÉE : 2 heures NOM et PRÉNOM DE L ÉTUDIANT : CODE PERMANENT : SIGNATURE : TOUTE DOCUMENTATION SUR PAPIER PERMISE ORDINATEURS ET CALCULATRICES PROHIBÉS Pour cet examen, vous disposez de la classe Voiture, incomplète, qui suit : public class Voiture { //autre champ à déclarer ici private String nom; private int nbcylindres; //Nb de cylindres du moteur //Consommation d essence en litres/100km en ville ainsi que sur la route private double consville, consroute; public Voiture(String nom, int nbcylindres, double consville, double consroute) { // À compléter // 2 voitures sont égales si le nom est identique ainsi que le nombre de cylindres public boolean equals(voiture autre){ return nom.equals(autre.nom) && nbcylindres==autre.nbcylindres; //Méthode pour déterminer l égalité utilisée implicitement par Vector public boolean equals(object autre){ //À compléter //Présumez que la method tostring a bien été redéfinie En plus, vous disposez d une classe TestVoiture, contenant la méthode main. Cette classe vous permet de tester votre classe Voiture. Il est fortement conseillé de lire les questions qui suivent et de vous référer à cette page pour les méthodes déjà existantes ainsi que certaines méthodes à compléter. Intra E09 (IFT 1170) 1
PARTIE 1 Vrai ou Faux (9 points) Cochez Vrai si l'énoncé est correct ou Faux si l'énoncé est incorrect. Si vous répondez Faux, et seulement dans ce cas, vous devez justifier votre réponse. Chaque question vaut trois (3) points, si une justification est requise, elle vaut deux (2) points. 1) Si une classe possède un champ entier nommé nombre, la méthode d accès pour ce champ doit absolument être déclarée comme suit : public int getnombre() sinon le compilateur va signaler une erreur. Vrai : Faux : Justification (au besoin) : 2) Dans une classe donnée, une méthode non-statique peut avoir accès à un champ, de la même classe, déclaré static. Vrai : Faux : Justification (au besoin) : 3) Le constructeur suivant va compiler. public Voiture(String nom){ if(nom.length( )>0) this(nom,4,10,10); Vrai : Faux : Justification (au besoin) : Intra E09 (IFT 1170) 2
PARTIE 2 Code, méthodes et compréhension de base du Java et de la POO 4) (4 points) Déclarez un champ, de la classe Voiture, qui sera commun pour tous les objets Voiture, représentant la consommation minimum de l ensemble des voitures. N oubliez pas d initialiser ce champ de façon à ce qu il soit modifié dès la première comparaison. Remarque, il n est pas nécessaire d avoir un objet Voiture pour que le champ existe. 5) (10 points) Complétez le constructeur suivant qui, en plus d initialiser les 4 champs membres (attributs de l objet), va vérifier si la consommation minimum, déclarée en 4), doit changer. Cette valeur devra changer si une des 2 consommations (ville ou route) est >=0 et plus petite que la valeur courante de la consommation minimum. Donc, la consommation minimum déclarée en 4) contiendra la plus petite consommation que ce soit de ville ou de route. public Voiture(String nom, int nbcylindres, double consville, double consroute) { Intra E09 (IFT 1170) 3
6) (6 points) Puisque la comparaison de 2 voiture se fait sur 2 champs seulement, écrivez un constructeur pour créer un objet Voiture en initialisant ces 2 champs. Remarque : vous n êtes pas tenu de faire appel au constructeur précédent, mais si vous le faites, assurez-vous que la consommation minimum déclarée en 4) ne changera pas. Le fichier auto.txt contient des informations sur des voitures, voici un aperçu de son contenu : Kia Rondo 6 11.5 7.7 Subaru Impreza 4 11.5 8.5 Toyota Camry Hybride 4 5.7 5.7 Ford Fusion Hybride 4 4.6 5.4 Les 25 premiers caractères d une ligne représentent le nom de la voiture, les deux suivants, le nombre de cylindres, suivi de 5 caractères pour la consommation en ville et les 5 derniers, la consommation sur la route. Il y a, au plus, 25 lignes dans le fichier Voici le code d une méthode de la classe testvoiture pour lire un fichier (comme auto.txt) et remplir un tableau de Voiture. public static int lirefichier(voiture[] t, String nomfichier) throws IOException{ Voiture auto; int n = 0; Scanner in = new Scanner(new BufferedReader (new FileReader(nomFichier))); while (in.hasnext()) { String ligne = in.nextline(); // une ligne du fichier t[n]=analyseligne(ligne); n++; return n; Intra E09 (IFT 1170) 4
7) (6 points) a) Écrivez la déclaration d un tableau de Voiture, nommé tabauto, suffisamment grand pour recevoir toutes les voitures du fichier, ainsi que la variable nbauto, pour conserver le nombre d éléments du tableau. Écrivez aussi l appel de la fonction lirefichier pour lire le fichier, remplir le tableau et initialiser le nombre d éléments du tableau. b) Dans quelle classe sera déclaré ce tableau? Voiture TestVoiture 8) (15 points) Écrivez la méthode analyseligne, qui est utilisée par le code de la méthode, de la page précédente, pour extraire les informations d une ligne du fichier, et les utiliser pour créer et retourner un nouvel objet Voiture. Vous pouvez utiliser substring, StringTokenizer ou split pour extraire les informations de la ligne. Intra E09 (IFT 1170) 5
9) (14 points) Écrivez une méthode qui va recevoir en paramètre de l information sur un trajet, c est-àdire, le nombre de kilomètres à parcourir en ville et le nombre de kilomètres à parcourir sur la route. Cette méthode va calculer le nombre estimé de litres d essence nécessaires pour compléter le trajet. a) Dans quelle classe sera déclaré cette méthode? Voiture TestVoiture b) Cette méthode sera-t-elle déclarée statique? Oui Non c) Écrivez la méthode. Intra E09 (IFT 1170) 6
10) (16 points) Écrivez une méthode pour parcourir toutes les objets Voiture du tableau tabauto et va retourner la Voiture qui consommera la plus petite quantité d essence pour un trajet dont la portion de ville et la portion de route seront passés en paramètres. Écrivez aussi un appel de cette fonction pour déterminer la voiture qui prendra le moins d essence pour un trajet de 100 km de ville et 2245 km de route. Indiquez clairement dans quelle classe la méthode, ainsi que l appel doivent être écrits. Intra E09 (IFT 1170) 7
11) (10 points) Écrivez les instructions nécessaires pour créer un nouveau vecteur et y insérer les voitures du tableau tabauto ayant 6 cylindres. Présumez que la méthode d accès pour nbcylindres est déjà définie. Écrivez aussi dans quelle classe le bloc d instructions est écrit. Intra E09 (IFT 1170) 8
12) (10 points) Vous voulez chercher dans le vecteur si la voiture suivante existe, Toyota Camry, 6 cylindres. Si oui, affichez ses informations, sinon affichez un message indiquant qu elle n est pas dans le vecteur. a) Écrivez la méthode equals, de la classe Voiture, qui sera utilisée par Vector pour les comparaisons. Ne réécrivez pas inutilement le code de l autre méthode equals, mais utilisez un appel vers celle-ci. Intra E09 (IFT 1170) 9
b) Écrivez les instructions nécessaires pour rechercher la voiture décrite ci-haut et l affichage demandé. Bonne chance et bon succès! Équipe du IFT 1170 Intra E09 (IFT 1170) 10