IFT 1170 – toutes les sections (UDM + LONGUEUIL)

publicité
A)
Programmation des notions de base
/ 60 points
Pour les questions de 1.1) à 1.5) (total de 5 x 4 points) dans cette section, le mot terme
désigne un mot ou quelques mots et liste désigne une liste (LinkedList) des personnes
( exemple Liste2.java expliqué en classe et disponible sur le site du cours ).
1.1) Écrivez les trois termes les plus appropriés associés à l’instruction :
System.out.println("Contenu de la liste de personnes : \n" + liste);
Réponse :
1) toString() de l’hiérarchie LinkedList
redéfinition
2) toString() de Personne 3)
1.2) Écrivez les trois termes les plus appropriés associés à liste.getFirst() :
System.out.println("\nPremière personne : " + liste.getFirst());
Réponse :
1) liste.get(0)
2) liste.element()
3) liste.peek()
1.3) Écrivez les trois termes les plus appropriés associés à la méthode indexOf … :
Personne aChercher = new Personne("Dube Francoise", ' ', 0.0, 0.0, 0) ;
int k = liste.indexOf(aChercher);
Réponse :
1) redéfinition de equals
2) vs lastIndexOf 3) recherche séquentielle
1.4) Écrivez les trois termes les plus appropriés associés à la méthode equals de
Personne :
Réponse :
1)
indexOf()
2) lastIndexOf
3) contains(…)
1.5) Écrivez les trois termes les plus appropriés associés à l’instruction :
Collections.sort(liste);
Réponse :
1) Interface Comparable
2) implémenter compareTo 3) binarySearch
fonctionnelle
IFT 1170 A, modèle d’un examen final ( 40 % )
1
2) Récursivité ( 15 points )
static void afficher(int n)
{
if(n == 1)
System.out.printf("Go\n");
else
{ System.out.print("Saute ");
afficher(n-1);
}
}
static void afficher2(int n)
{
for (int i = 1; i < n ; i++)
System.out.print("Saute ");
System.out.printf("Go\n");
}
3) Fichier Binaire, LinkedList ( 25 points )
Dans Binaire2.java, vous travaillez avec deux fichiers binaires Femme.Bin et
Homme.Bin
Écrivez le code permettant de
3.1) créer deux «LinkedList» listeFem : liste des femmes
et listeHom : liste des hommes ;
3.2) trier listeFem selon les numéros ;
3.3) ajouter 4 cm à la taille de la dernière personne de listeHom.
3.1)
Appels :
LinkedList<Personne> listeFem = relire("Femmes.Bin"),
listeHom = relire("Hommes.Bin");
Méthode :
static LinkedList<Personne> relire(String nomALire)
throws IOException{
System.out.println("On lit le fichier binaire du nom " + nomALire);
LinkedList<Personne> uneListe = new LinkedList<Personne> ();
DataInputStream aLire = new DataInputStream
( new FileInputStream(nomALire));
boolean finFichier = false ;
char sexe = ' ';
IFT 1170 A, modèle d’un examen final ( 40 % )
2
while ( ! finFichier ) {
try {
sexe = aLire.readChar();
} catch ( EOFException e ) {
finFichier = true;
}
if (!finFichier) {
double taille = aLire.readDouble(),
poids = aLire.readDouble();
int numero = aLire.readInt();
String nomPre = "";
for (int i = 0; i < 30; i++)
nomPre += aLire.readChar();
Personne pers = new Personne(nomPre, sexe, taille, poids, numero);
uneListe.add(pers);
}
}
aLire.close();
return uneListe;
}
3.2) trier listeFem selon les numéros :
class Personne
implements Comparable<Personne>
{ . . . etc . . .
public int compareTo(Personne autre)
{
return numero - autre.numero;
}
}
Dans main(…) :
Collections.sort(listeFem);
IFT 1170 A, modèle d’un examen final ( 40 % )
3
3.3) ajouter 4 cm à la taille de la dernière personne de listeHom.
Personne lastHom = listeHom.getLast();
lastHom.setTaille( lastHom.getTaille() + 0.04);
Dans Personne, on écrit des méthodes d’accès et de modifications nécessaires.
B)
LinkedList, Interface Comparable …
/ 40 points
Données : Fichier de type texte Personne.txt
0123456789012345678901234567890123456789012345678901234567890123456789
ROY CHANTAL
F
1.63
54.9
2754
MOLAISON CLAUDE
M
1.57
62.2
1848
ROBITAILLE SUZANNE
F
1.79
72.3
2007
etc . . .
Écrire le code permettant de :
- concevoir la classe Personne pour répondre aux questions
ci-dessous;
- lire le fichier texte, de créer une liste (LinkedList)
des personnes;
- faire une démonstration de Collections.min,
Collections.max, Collections.sort, recherche
séquentielle, recherche dichotomique
- etc . . .
Voir Liste2.java disponible sur le site du cours.
/* Fichier Liste2.java (liste des personnes)
* Données Personne.txt
*
* Lire le fichier, créer une liste des personnes
* Démonstration de Collections.min, Collections.max,
*
Collections.sort, recherche séquentielle,
*
recherche dichotomique
*
* Fin de matières pour le final
* Préparé par LVN pour IFT 1170
*/
import java.io.*;
import java.util.*;
class Personne
implements Comparable<Personne>
{
private String nomPre;
private char
sexe;
private double taille, poids;
IFT 1170 A, modèle d’un examen final ( 40 % )
4
private int
numero;
public Personne(String nomPre, char sexe, double taille,
double poids, int numero)
{
this.nomPre = nomPre;
this.sexe = sexe;
this.taille = taille;
this.poids = poids;
this.numero = numero;
}
public String toString() {
return
String.format("%-30s %8.2f %7.1f %10d %s", nomPre,
taille, poids, numero,
(sexe == 'F'? "feminin":"masculin"));
}
// implémenter l'interface Comparable
public int compareTo(Personne autre) {
return nomPre.toUpperCase().trim().compareTo(
autre.nomPre.toUpperCase().trim() );
}
public int getNumero()
{
return numero;
}
public boolean equals(Object obj)
{
if (this == obj)
return true;
else
if ( ! (obj instanceof Personne))
return false;
else
{
Personne autre = (Personne) obj;
return
nomPre.trim().equalsIgnoreCase(autre.nomPre.trim());
}
}
}
public class Liste2
{
// lire un fichier, remplir et retourner une liste des personnes
static LinkedList<Personne> lireCreer(String nomFichier)
throws IOException
{ LinkedList<Personne> liste = new LinkedList<Personne>(); //
liste vide au début
boolean existeFichier = true ; // à ajuster après
IFT 1170 A, modèle d’un examen final ( 40 % )
5
FileReader fr = null; // initialiser pour Java
// essayer de LOCALISER le fichier à partir de son nom
try {
fr = new FileReader (nomFichier) ;
}
// intercepter l'erreur si le fichier n'existe pas
catch ( java.io.FileNotFoundException erreur) {
System.out.println("Probleme d'ouvrir le fichier " +
nomFichier);
existeFichier = false ; // ajuster
}
if (existeFichier) {
// construire l'objet d'entrée qui va permettre
// d'appliquer la lecture d'une ligne de texte
BufferedReader entree = new BufferedReader(fr);
boolean finFichier = false ;
while ( !finFichier ) {
// lire une ligne
String uneLigne = entree.readLine();
if (uneLigne == null)
finFichier = true ;
else {
/*
0123456789 123456789 123456789 123456789 123456789
123456789 123456789
MICHAUD NORMAND
M
1.73
103.7
3428
*/
String nomPre = uneLigne.substring(0, 30);
char
sexe
= uneLigne.charAt(30);
double taille =
Double.parseDouble(uneLigne.substring(37, 41));
double poids =
Double.parseDouble(uneLigne.substring(51, 56).trim());
int
numero =
Integer.parseInt(uneLigne.substring(64).trim());
liste.add(new Personne(nomPre, sexe, taille,
poids, numero));
}
}
entree.close();
}
return liste;
}
IFT 1170 A, modèle d’un examen final ( 40 % )
6
static void afficher(LinkedList<Personne> liste, int debut, int
fin, String message) {
System.out.println("\nListes des " + debut + " premieres
et " +
fin + " dernieres
personnes " + message + " :\n");
for (int i = 0, n = liste.size(); i < n ; i++)
if ( (i < debut && i < n ) || i >= n - fin )
System.out.printf("%2d) %s\n",i,
liste.get(i));
else
if ( i == debut )
System.out.printf("%2d) etc . .
.\n", i);
System.out.println();
}
static void demoRechercheSequentielle(LinkedList<Personne>
liste) {
System.out.println("\nRecherche séquentielle (grâce à la
redéfinition de equals) : ");
String[] nomPre = { "Dube Francoise", "Tremblay Marc",
"Olivier Jean" };
for(int i = 0; i < nomPre.length; i++)
{
Personne aChercher = new Personne(nomPre[i], ' ',
0.0, 0.0, 0) ;
int k = liste.indexOf(aChercher);
System.out.printf("\nDans la recherche de %s, k vaut %d\n",
nomPre[i], k);
System.out.printf("liste.contains(aChercher) vaut %s\n\n",
liste.contains(aChercher));
}
}
static void demoRechercheDichotomique(LinkedList<Personne>
liste) {
System.out.println("\nRecherche dichotomique (interface
Comparable) : ");
String[] nomPre = { "Dube Francoise", "Tremblay Marc",
"Olivier Jean" };
for(int i = 0; i < nomPre.length; i++)
{
Personne aChercher = new Personne(nomPre[i], ' ',
0.0, 0.0, 0) ;
int k = Collections.binarySearch(liste, aChercher);
System.out.printf("\nDans la recherche dichotomique de %s,
k vaut %d\n", nomPre[i], k);
}
}
public static void main (String[] args)throws IOException
{
LinkedList<Personne> liste = lireCreer("Personne.txt");
System.out.println("On vient de creer une liste de "
IFT 1170 A, modèle d’un examen final ( 40 % )
7
+ liste.size()
personnes\n");
afficher(liste, 7, 8, "apres la création");
+ "
demoRechercheSequentielle(liste);
System.out.println("Premiere personne en ordre alphabetique
:\n" +
Collections.min(liste));
System.out.println("Derniere personne en ordre alphabetique
:\n" +
Collections.max(liste));
Collections.sort(liste);
afficher(liste, 7, 11, "apres le tri selon les noms des
personnes");
demoRechercheDichotomique(liste);
}
}
/* Exécution:
--------------------Configuration: <Default>-------------------On vient de creer une liste de 24 personnes
Listes des 7 premieres et 8 dernieres personnes apres la création :
0)
1)
2)
3)
4)
5)
6)
7)
16)
17)
18)
19)
20)
21)
22)
23)
ROY CHANTAL
MOLAISON CLAUDE
ROBITAILLE SUZANNE
BEDARD MARC-ANDRE
MONAST STEPHANE
JALBERT LYNE
DUBE FRANCOISE
etc . . .
BERGEVIN GUILLAUME
DUMITRU PIERRE
ROBITAILLE MICHEL
FILLION ERIC
DESMARAIS DENISE
TREMBLAY MARC
TREMBLAY SYLVAIN
ROBITAILLE SUZANNE
1,63
1,57
1,79
1,43
1,65
1,63
1,68
54,9
62,2
72,3
80,5
61,7
52,6
67,5
2754
1848
2007
2636
1750
2168
4612
feminin
masculin
feminin
masculin
masculin
feminin
feminin
1,84
1,92
1,78
1,78
1,75
1,79
1,83
1,58
86,4
99,4
85,1
75,7
58,7
64,9
86,2
60,2
2277
3629
6002
2630
3215
3529
1538
4119
masculin
masculin
masculin
masculin
feminin
masculin
masculin
feminin
Recherche séquentielle (grâce à la redéfinition de equals) :
Dans la recherche de Dube Francoise, k vaut 6
liste.contains(aChercher) vaut true
Dans la recherche de Tremblay Marc, k vaut 21
liste.contains(aChercher) vaut true
IFT 1170 A, modèle d’un examen final ( 40 % )
8
Dans la recherche de Olivier Jean, k vaut -1
liste.contains(aChercher) vaut false
Premiere personne en ordre alphabetique :
BEDARD MARC-ANDRE
1,43
Derniere personne en ordre alphabetique :
TREMBLAY SYLVAIN
1,83
80,5
2636 masculin
86,2
1538 masculin
Listes des 7 premieres et 11 dernieres personnes apres le tri selon les
noms des personnes :
0)
1)
2)
3)
4)
5)
6)
7)
13)
14)
15)
16)
17)
18)
19)
20)
21)
22)
23)
BEDARD MARC-ANDRE
BEGIN MARIE-LUCE
BERGEVIN GUILLAUME
COUTU PIERRE
DESMARAIS DENISE
DUBE FRANCOISE
DUMITRU PIERRE
etc . . .
MONAST STEPHANE
RICHER AGATHE
RIVERIN HELENE
ROBITAILLE MICHEL
ROBITAILLE SUZANNE
ROBITAILLE SUZANNE
ROBITAILLE SUZANNE
ROBITAILLE SUZANNE
ROY CHANTAL
TREMBLAY MARC
TREMBLAY SYLVAIN
1,43
1,62
1,84
1,72
1,75
1,68
1,92
80,5
49,0
86,4
62,1
58,7
67,5
99,4
2636
4101
2277
4008
3215
4612
3629
masculin
feminin
masculin
masculin
feminin
feminin
masculin
1,65
1,65
1,71
1,78
1,79
1,72
1,48
1,58
1,63
1,79
1,83
61,7
53,1
60,8
85,1
72,3
65,4
61,5
60,2
54,9
64,9
86,2
1750
3563
2340
6002
2007
2325
4371
4119
2754
3529
1538
masculin
feminin
feminin
masculin
feminin
feminin
feminin
feminin
feminin
masculin
masculin
Recherche dichotomique (interface Comparable) :
Dans la recherche dichotomique de Dube Francoise, k vaut 5
Dans la recherche dichotomique de Tremblay Marc, k vaut 22
Dans la recherche dichotomique de Olivier Jean, k vaut -15
Process completed.
*/
IFT 1170 A, modèle d’un examen final ( 40 % )
9
Téléchargement