Directives et modèle de l'examen Intra (20 %) - igt.net
Faire et comprendre les TP1, (une grande partie du) TP2 malgré que la remise
du TP2 ... Rabah ou Yasser durant leurs périodes de P.L. avant l'examen intra).
Part of the document
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 : levan@iro.umontreal.ca 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 sections L+M. Les deux auxiliaires vont mettre la solution vers samedi le 28 mai sur le
site Web
de notre cours (lien Révision).
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
nouveauté ?
4) Écrire une fonction et les appels de cette fonction pour afficher
à l'écran le prix le plus élevé de chacun des types d'immeubles
(3 réels à afficher).
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
exactement nbRect 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() {
. . .
}
}; struct Element {
Personne pers ;
Element * suivant;
}; typedef Element * Pointeur;
. . .
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. 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
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) É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
Bonne chance et bon succès!
Équipe du IFT 1166, été 2005