Directives et modèle de l’examen Intra (20 %)
IFT 1166, été 2005
Veuillez fermer, s’il y a lieu, votre cellulaire.
Directives pédagogiques:
Les matières vues
au mois de mai
( sections A+B : 4 semaines x 3 heures, sections L+M : 5 semaines x 2.5 heures = 12.50 heures) font partie de l’examen intra.Malgré que la remise du TP2 aura lieu dimanche le 19 juin (après l’intra!), toutes les matières du TP2 seront demandées à l’intra. Il est préférable alors de passer à travers les questions du TP2 avant l’intra quitte à finaliser, polir le TP2 plus tard pour la remise.
Dates de l’examen intra :
sections A+B : jeudi le 02 juin durant l’heure de cours (11 :30 à 13 :30 au Z-317) sections L+M: mardi le 07 juin de 19:30 à 21:30 à la salle 15 après un cours « réduit » de 17 :30 à 19:00 suivi d’une pause de 30 minutes.
Si vous avez un motif sérieux, vous pouvez faire l’intra dans les sections que vous n’êtes pas inscrits à la condition de m’écrire, par courriel, une semaine avant la date de l’examen à passer : [email protected]
Toute documentation sur papier permise.
Ordinateurs personnels prohibés.
Calculatrice permise mais non nécessaire.
Veuillez répondre dans le cahier d’examen et remettre obligatoirement l’énoncé
Partie 1 : quelques nouveautés de C++ (total de 35 points) Partie 2 : quelques notions de la POO (total de 35 points)
Partie 3 : liste linéaire chaînée des personnes (total de 30 points)
Vous trouverez dans les pages suivantes un modèle pour l’examen intra. Ce modèle est aussi disponible au Calendrier du site Web de notre cours.
L’auxiliaire Rabah présentera une séance de révision reliée à la solution de ce modèle, jeudi le 26 mai, de 14:30 à 16:30, salle Z-200 (campus UDM). Mardi soir le 31 mai, de 20:00 à 22:00, à la salle # 15 du campus Longueuil, l’auxiliaire Wissam fera la même chose pour les
Partie 1 : quelques nouveautés de C++ (total de 35 points)
Question 1)
La fonction suivante, écrite en langage C, permet de vérifier et de retourner vrai (1) ou faux (0) selon que deux tableaux des entiers sont identiques (les deux contiennent le même nombre d’éléments et les éléments correspondants sont égaux) ou non.
int estIdentique(int tableau1[], int n1, int tableau2[], int n2) { int i;
if (n1 != n2) return 0;
else {
for (i = 0 ; i < n1 ; i++)
if ( tableau1[i] != tableau2[i] ) return 0;
return 1;
} }
Ré-écrivez la fonction estIdentique, en utilisant les nouveautés possibles du C++ et écrivez les instructions pour tester et afficher les résultats des tests des tableaux suivants :
age1 vs age2, age1 vs age3 où :
int age1[10] = { 50, 27, 62, 14, 58, 40 }, age2[15] = { 50, 27, 62, 14, 58, 40, 70 }, age3[10] = { 50, 72, 62, 14, 58, 40 };
et : sexe1 vs sexe2 où :
char sexe1[5] = { 'F', 'F', 'M', 'M', 'M' },
sexe2[7] = { 'F', 'F', 'M', 'M', 'M' };
Question 2)
Soit la fonction principale incomplète suivante : void main() {
char ville[20] = "laval";
int age[15] = { 5, 25, 12, 12, 25, 5 };
// à compléter : …….
}
La ville "laval" est symétrique car ville[0] == ville[4], ville[1] == ville[3].
Le tableau age est aussi symétrique car age[0] == age[5], age[1] == age[4], age[2] == age[3].
Écrivez une ou plusieurs fonctions (à votre jugement) et leurs appels pour tester la symétrie de la chaîne ville et du tableau age.
Question 3)
Pour la gestion la plus simple des immeubles à vendre (au maximum 25), un courtier doit avoir les informations suivantes reliées à chaque immeuble :
- année de construction (un entier, exemple 1989) - type de l'immeuble : un caractère
'P' : résidence privée 'C' : immeuble commercial 'A' : immeuble d'autre type
- prix évalué par la ville : un réel (exemple 123456.75 $) 1) Écrire les déclarations d'un tableau dynamique des immeubles;
2) Écrire :
a) seulement l’en-tête d’une fonction permettant de lire le fichier
"Im.txt", de remplir le tableau dynamique des immeubles,
de compter et transmettre par référence le nombre exact d’immeubles lus;
b) un appel (une utilisation) approprié de cette fonction.
3) Écrire une fonction permettant d'afficher un seul immeuble;
Écrire une autre fonction portant le même nom qui permet d'afficher tous les immeubles d’un type donné.
Quelle est la nouveauté de C++ vs C dans ces deux écritures ?
Quel genre de fonctions membres d'une classe qui utilisent souvent cette
Partie 2 : quelques notions de la POO (total de 35 points)
Question 2.1) : réaliser la partie d’implémentation de la classe :
class Rectangle { private :
int longueur, largeur;
public :
Rectangle(int = 5, int = 3);
Rectangle (const Rectangle&);
void afficher(char *);
// fonction constante!
int surface() const { return longueur * largeur ; } // surcharger l'opérateur < (plus petit selon la surface) bool operator < (const Rectangle & );
// surcharger l'opérateur l'addition. Pour cet exemple, la somme // de 2 rectangles est un rectangle avec la longueur qui est la // somme des 2 longueurs et la même chose pour la largeur Rectangle operator + (const Rectangle &);
// fonction amie
friend void afficher(const Rectangle & r, char * message) ;
// fonction amie permettant de surcharger l'opérateur * (produit de deux // rectangles selon la définition (pédagogique) semblable à l'addition friend Rectangle operator * (const Rectangle & r1,const Rectangle & r2) ; };
Question 2.2)
Supposons que vous disposez d’un tableau dynamique des rectangles (
rect
) qui contient exactementnbRect
rectangles.a) Supprimez le 3ième élément du tableau avant le tri sachant que nbRect > 3 b) Triez le tableau selon les surfaces de ses éléments
c) Supprimez le 2ième élément du tableau après le tri
Partie 3 : liste linéaire chaînée des personnes (total de 30 points)
En classe, on a déjà expliqué un exemple sur une liste linéaire chaînée des personnes (ListePers.cpp)::
const int LONG_NP = 30; // 30 caractères pour nom et prénom
class Personne { private:
string nomPre;
char sexe;
double taille, poids;
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;
}
Personne() { }
string getNomPre() { return nomPre; } char getSexe() { return sexe ; } void setSexe(char nouvSexe) {
sexe = nouvSexe;
}
void setTaille(double nouvTaille) { taille = nouvTaille;
}
void afficher() { . . .
} };
. . .
Pointeur liste ; . . .
Pour l’intra, on suppose qu’on a déjà lu un fichier, rempli la liste linéaire chaînée des personnes. Cette liste est nommée liste pour l’examen intra.
3.1) Écrivez une fonction permettant de compter et d’afficher : a) le nombre de femmes dans cette liste ;
b) le nombre d’hommes dans cette liste
3.2) Écrivez des fonctions et leurs appels afin de permuter les informations a) de la première .et de la deuxième personne
b) de la 6ième et 12ième personne
3.3) Écrivez des fonctions et leurs appels pour supprimer (s’il existe) : a) la personne ayant le numéro 4371
b) la personne ayant le numéro 2754