• Aucun résultat trouvé

Solution du modèle du final (IFT1170 - Hiver 2005)

N/A
N/A
Protected

Academic year: 2022

Partager "Solution du modèle du final (IFT1170 - Hiver 2005)"

Copied!
1
0
0

Texte intégral

(1)

Solution du modèle du final (IFT1170 - Hiver 2005)

1.1) Réalisez la classe Informaticien avec :

2 champs privés: NAS (une chaîne du genre "123 456 789") pour le numéro d’assurance sociale et sexe (un caractère).

1 constructeur à votre imagination.

1 méthode abstraite pour le calcul du salaire hebdomadaire.

la redéfinition de la méthode toString() afin d’afficher le NAS, le sexe et le salaire hebdomadaire d’un employé.

class Informaticien { private String NAS;

private char sexe;

public Informaticien(String NAS, char sexe) { this.NAS = NAS;

this.sexe = sexe;

}

public abstract double salaireHebdo();

public String toString() {

return "NAS: " + NAS + ", sexe: " + sexe;

} }

1.2) Réalisez la sous classe Analyste avec:

le champ privé : anciennete (un entier représentant le nombre d’années d’ancienneté)

deux constructeurs appropriés à votre imagination dont l’utilisation du polymorphisme sera évaluée.

l’implémentation de la méthode salaireHebdo sachant que le salaire d’un analyste est déterminé par 1200$ comme salaire de base et un bonus de 200$ pour chaque année d’ancienneté.

class Analyste extends Informaticien { private int anciennete;

public Analyste(String NAS, char sexe, int anciennete) { super(NAS, sexe);

this.anciennete = anciennete;

}

public Analyste(String NAS, char sexe) { this(NAS, sexe, 0);

}

public double salaireHebdo() {

return 1200 + (200 * anciennete);

}

public String toString() { return super.toString() +

", anciennete: " + anciennete + " an(s)";

} }

(2)

1.3) Réalisez la sous classe Programmeur qui implémente l’interface Comparable.

Le calcul du salaire hebdomadaire d’un programmeur est basé sur la formule : "on paye en double les heures supplémentaires (qui dépassent 40 heures par semaine)". Supposons que nomPre est un champ privé de Programmeur représentant le nom et prénom. Implémentez la méthode plusPetit de l’interface Comparable afin de trier plus tard les programmeurs selon le champ nomPre.

class Programmeur extends Informaticien implements Comparable { private String nomPre;

private double nbHeures;

private double taux;

public Programmeur (String NAS, char sexe, String nomPre, double nbHeures, double taux) {

super(NAS, sexe);

this.nomPre = nomPre;

this.nbHeures = nbHeures;

this.taux = taux;

}

public double salaireHebdo() {

double heuresExtra = (nbHeures > 40 ? nbHeures – 40 : 0);

return nbHeures + heuresExtra * 2) * taux;

}

public String toString() {

return super.toString() + ", nom: " + nomPre +

", heures: " + nbHeures + " h, taux: " + taux + " $/h;

}

public plusPetit(Object obj) {

return nomPre.compareTo(((Programmeur) obj).nomPre) < 0;

} }

1.4) On dispose d’un fichier de type texte du nom "C:\\Infor.txt". Chaque ligne contient les informations d’un analyste ou d’un programmeur :

A 123 456 789 M 7

P 555 444 123 F 46.5 27.50 Tremblay Jacqueline etc.

analyste, NAS : 123 456 789, sexe masculin, 7 ans d’ancienneté

programmeur, NAS 555 444 123, sexe féminin, travaille 46.5 heures par semaine au taux de 27.50$ / heure, nom et prénom : Tremblay Jacqueline)

Il y a au maximum 120 programmeurs dans le fichier.

a) Écrivez une méthode permettant de lire le fichier et :

d’afficher les analystes lus.

de créer le tableau des programmeurs. On compte aussi le nombre effectif de programmeurs lus.

(3)

int lireFichier(String nomFichier, Programmeur prog[]) {

BufferedReader entree = new BufferedReader(new FileReader(nomFichier));

int nbProg = 0;

String ligne = entree.readLine();

while (ligne != null) {

char type = ligne.charAt(0);

String NAS = ligne.substring(3, 14);

char sexe = ligne.charAt(16);

if (type == 'A') {

int anciennete = Integer.parseInt(ligne.substring(20));

System.out.println(new Analyste(NAS, sexe, anciennete));

} else {

double nbHeures =

Double.parseDouble(ligne.substring(20, 24).trim());

double nbTaux =

Double.parseDouble(ligne.substring(27, 31).trim());

String nomPre = ligne.substring(34);

prog[nbProg++] =

new Programmeur(NAS, sexe, nomPre, nbHeures, taux);

}

ligne = entree.readLine();

}

entree.close();

return nbProg;

}

Dans le main, ajouter:

final int MAX_PROG = 120;

Programmeur prog = new Programmeur[MAX_PROG];

int nbProg = lireFichier("C:\\Infor.txt", prog);

b) Comment trier les programmeurs selon leurs noms et prénoms ? public static void trier(Comparable tab[], int nb) {

for (int i = 0; i < nb – 1; i++) { int min = i;

for (int j = i + 1; j < nb; j++)

if (tab[j].plusPetit(tab[min])) min = j;

if (i != min) {

Comparable temp = tab[i];

tab[i] = tab[j];

tab[j] = temp;

} }

}

(4)

B) Vector, Stack, LinkedList, fichiers:

Dans le TP3, vous avez lu le fichier binaire des pays « pays.bin » et avez créé une pile des pays d’Europe dont l’identificateur est « pile ».

Soit Nation, la classe représentant les informations et les méthodes pour traiter un pays. On suppose que les constructeurs, les méthodes d’accès et de modifieurs ont été écrits dans Nation. Vous pouvez les utiliser sans avoir besoin de les écrire.

Écrivez des méthodes et leurs appels pour : 1) afficher, en parcourant la pile :

- les pays d’Europe où on a plus de 1500 habitants par km2 - les pays d’Europe où on a plus de 8000 habitants par km2

public static void afficherPays(Stack pile , double seuil , char contVoulu){

for(int i=0; i<pile.size(); i++){

Nation nat = (Nation) pile.get(i) ;

if(nat.getCont() == contVoulu && nat.getPop() / nat.getSup() > seuil) System.out.println(nat);

} }

afficherPays(pile , 1500.0 , ‘5’);

afficherPays(pile , 8000.0 , ‘5’);

2) créer, à partir de la pile, une liste linéaire chaînée des pays d’Europe dont le nom du pays et le nom de la capitale se commencent par la même lettre (exemple : SUEDE dont la capitale est STOCKHOLM)

static LinkedList creerListe(Stack pile , char contVoulu){

LinkedList liste = new LinkedList();

for(int i=0; i<pile.size(); i++){

Nation nat = (Nation) pile.get(i) ;

if(nat.getCont() == contVoulu && nat.getNom().charAt(0) == nat.getCap().charAt(0)) liste.add(nat);

} return liste;

}

(5)

LinkedList laListe = creerListe(pile , ‘5’);

parcourir la liste et afficher le premier pays de la liste où la superficie est inférieure à 10 000 km2.

for( int i=0; i<laListe.size(); i++){

Nation nat = (Nation) laListe.get(i) ; if( nat.getSup() < 10000)

System.out.println(nat);

}

3) créer, à partir de cette liste linéaire chaînée (question 2), un vecteur des pays dont le nom de la capitale est identique au nom du pays (exemple MONACO).

public static Vector creerVecteur(LinkedList liste){

Vector vect = new Vector ();

for(int i=0; i<liste.size(); i++){

Nation nat = (Nation) liste.get(i) ; if(nat.getNom().equals(nat.getCap())) vect.add(nat);

} return vect;

}

Vector leVecteur = creerVecteur(laListe);

- créer un fichier binaire nommé « Fin.bin » à partir de ce vecteur.

public static void creerBinaire(vector vect , String nomFic){

DataOutputStream aCreer = new DataOutputStream

( new FileOutputStream(nomFic));

for(int i=0; i<vect.size(); i++){

Nation nat = (Nation) vect.get(i) ; aCreer.writeChar(nat.getCont());

(6)

aCreer.writeChars(nat.getNom());

aCreer.writeChars(nat.getCap());

aCreer.writeInt(nat.getSup());

aCreer.writeInt(nat.getPop());

}

}//Fin de la méthode

creerBinaire(leVecteur, "Fin.bin");

Références

Documents relatifs

— des anciennes colonies africaines de- venues départements portugais ! M. Cae- tano, qui avait pris la succession de Salazar, s'occupait à la résoudre sur le, terrain potitique.

II s'agit donc d'un embargo général sur tous les paiements à destination de l'Espagne avec l'obligation pour tous les débiteurs suisses de s'acquitter en mains de la Banque

croissante de cette industrie aux mesures d'assainisse- ment prises par les groupements patronaux, avec l'ap- pui de l'autorité fédérale. Les trois arrêtés visant la protection

Il peut refuser ce 2e CDD, il percevra sa prime de précarité (qui sera très faible) et dans la mesure où il refuse le 2e CDD, il ne pourra prétendre à aucune indemnité des

Dix neuf (19) personnes ont été blessées à différents degrés dans un accident de la route survenu ce lundi, dans le territoire de la commune d’Aïn Beida,daïra de Sidi

Lors de la commission mixte paritaire de la convention collective des laboratoires d’analyses médicales extra-hospitaliers réunie le 18 juin 2008, il a été décidé une augmentation

Le calcul du salaire hebdomadaire d’un programmeur est basé sur la formule : on paye en double les heures supplémentaires (qui dépassent 40 heures par

période précédente donc au mois précédent et si en novembre vous avez effectué des heures supplémentaires, vous devez percevoir la même rémunération que si vous étiez présent