Absence au final : veuillez vous adresser à votre département (pas à la DESI).
http://www.desi.umontreal.ca/varia/absence_examens.html IFT 1969 A+B – Hiver 2005
Examen Final (40 %)
Veuillez fermer, s’il y a lieu, votre cellulaire.
Directives pédagogiques:
Date: jeudi 14 avril 2004 (à confirmer vers jeudi le 07 avril) Consultez le site Web du cours avant l’examen au cas où l’Université de Montréal décide des mesures qui pourront modifier cette date et le lieu du final.
Durée: 2 heures et 45 minutes (de 16:30 à 19:15) Local : Z-310 (section A) et Z-305 (section B) Toute documentation sur papier permise.
Ordinateurs personnels prohibés.
Calculatrice permise mais non nécessaire.
Notes :
- Répondre directement sur ce questionnaire.
- L’examen compte xx pages incluant celle-ci.
- Utilisez le verso comme brouillon (si nécessaire)
A) Questions relatives au numéro 1 du TP3 : total de 30 points B) Questions relatives au numéro 2 du TP3 : total de 30 points C) Questions relatives aux notions de pointeurs : total de 20 points D) Questions relatives aux notions de fonctions : total de 20 points
Rabah fera la solution de certaines questions de ce modèle les 31 mars et 07 avril.
Bonne chance et bon succès!
Équipe du IFT 1969, hiver 2005
A) Questions relatives au numéro 1 du TP3 : total de 30 points
Soient les déclarations des matrices suivantes :
#define MAX_LIGNE 10 /* au maximum, 10 lignes */
#define MAX_COL 8 /* au maximum 8 colonnes */
/* définir un nouveau type nommé Matrice : c'est un tableau à deux indices
*/
typedef float Matrice[MAX_LIGNE] [MAX_COL];
. . .
void main() {
Matrice A, B, C;
int m, n, p;
. . . }
Q.1) Écrivez une fonction permettant de construire la
matrice d’identité I d’ordre n ( des 1 sur la diagonale principale et des zéros ailleurs).
Écrivez un appel de cette fonction.
Solution
- Écriture de la fonction :
void identite(Matrice A , int dim){
int i , j;
for(i=0; i<dim; i++) for(j=0; j<dim; j++)
if(i == j) A[i][j] = 1;
else A[i][j] = 0;
}
- Son appel(pour construire une matrice carrée d’ordre 5 par exemple) :
identite(A ,5);
Q.2) Supposons qu’on a déjà lu les données d’une matrice
carrée C de dimension n x n.
Écrivez au complet une fonction permettant de calculer et de retourner la somme des valeurs sur la diagonale principale de C.
Solution
int sommeDiag(Matrice A , int dim){
int i , somme = 0;
for(i=0; i<dim; i++) somme += A[i][i];
return somme;
}
Q.3) Supposons qu’on a déjà lu les données d’une matrice carrée C de dimension n x n.
Écrivez au complet une fonction permettant de calculer et de transmettre via pointeurs deux résultats :
a) Oui ou non si tous les éléments sur la diagonale principale sont strictement positifs;
b) La pluspetite valeur des éléments sur cette diagonale.
Solution
Void traiterDiag(Matrice A,int dim,int* diagNulle,int* minDiag){
int i ;
*minDiag = A[0][0];
*diagNulle = 1;
for(i=0; i<dim; i++){
if(A[i][i] != 0) *diagNulle = 0;
if(A[i][j] < *minDiag) *minDiag = A[i][j];
} }
B) Questions de révision sur structure, tableau de structure : 30 points
( au final, on posera des questions relatives au numéro 2 du TP3) Soit la déclaration du type structure nommé Employe :
typedef struct { float salHebdo;
char sexe;
float nbHr;
} Employe;
Soient les déclartions d’un tableau d’employés :
Employe emp[] = { {1234.56, 'M', 42.50}, { 999.75, 'M', 36.75}, {2222.11, 'F', 40.00}, {1175.25, 'M', 40.60}, {1789.00, 'M', 37.00}, {1500.00, 'F', 30.25}};
int nbEmp = sizeof(emp) / sizeof(Employe);
Écrivez un programme permet de :
- déclarer et initialiser les informations de qq employés (voir Employe et main) - compter et afficher le nombre d'employés
a) de sexe masculin qui gagnent plus de 1500.00$
b) de sexe feminin qui gagnent plus de 1200.50$
- déterminer et d'afficher :
a) le salaire hebdo le plus eleve b) le nb. d'heures de travail maximum
- déterminer et d'afficher les informations
a) de l'employe dont le salaire hebdo est le plus petit
b) de l'employe dont le nombre d'heures de travail est le moins eleve
Solution
Voir pointeur3.c et structure3.c (semaine 13 sur le calendrier).