IFT 1170 – toutes les sections (UDM + LONGUEUIL)
Examen Final (40 %)
Veuillez fermer, s’il y a lieu, votre cellulaire.
Date: samedi 13 décembre 2003
Durée: 2 heures 45 minutes (de 10:30 à 13:15)
Local : Z-310 (UDM : pour toutes les sections A,B,C et D).
Salle 12 au Campus Longueuil pour les sections L et M Toute documentation sur papier permise.
Ordinateurs personnels prohibés.
Calculatrice permise.
La répartition des matières est prévue comme la suivante :
Simuler « un seul tour » du tri rapide (voir Web) : 10 points Héritage, polymorphisme, interfaces, … : 40 points
Vector, Stack, LinkedList : 40 points Fichiers binaires : 10 points
Conseils pour préparer le final :
1. faites vous-mêmes et comprenez toutes les questions du TP3 2. faites et mesurez le temps de faire le modèle du final
3. relisez les conseils lors de votre intra
Modèle du Final
A) Héritage, polymorphisme, interfaces, etc … :
On dispose du schéma suivant représentant la classe abstraite Informaticien et ses deux sous-classes concrètes Analyste, Programmeur.
classe abstraite : Informaticien
classe concrète
Analyste Classe concrète Programmeur
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é.
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é.
1.3) Réalisez la sous classe Programmeur qui implémente l’interface Comparable interface Comparable
{
public abstract boolean plusPetit(Object obj);
}
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.
Voir la question 1.4 au cas où on doit ajouter d’autres méthodes.
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.
b) Comment trier les programmeurs selon leurs noms et prénoms ?
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 informatiions 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
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)
parcourir la liste et afficher le premier pays de la liste où la superficie est inférieure
à 10 000 km2.
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).
créer un fichier binaire nommé « Fin.bin » à partir de ce vecteur.
C) méthode “partitionner” du tri rapide :
Vous disposez du tableau des âges suivants :
int[] age = { 45, 20, 17, 50, 12, 90 };
Quel est l’indice du pivot et quels sont les éléments du tableau des âges après avoir exécuté la première fois la méthode partitionner du tri rapide ?