• Aucun résultat trouvé

Examen Final (40 %)Veuillez fermer, s’il y a lieu, votre cellulaire.Directives pédagogiques:

N/A
N/A
Protected

Academic year: 2022

Partager "Examen Final (40 %)Veuillez fermer, s’il y a lieu, votre cellulaire.Directives pédagogiques:"

Copied!
1
0
0

Texte intégral

(1)

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

(2)

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

(3)

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];

} }

(4)

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).

C) Pointeurs et paramètres transmis via pointeurs :

Q. 1) Décrivez brièvement, en quelques lignes et en français, le but global de la partie suivante d’un programme :

void faire(int age[], int nbPers, int *p1, int *p2) {

int i;

int x = 5000, y = 0;

for (i = 0; i < nbPers; i++)

{

(5)

if (age[i] < x) x = age[i];

if (age[i] > y) y = age[i];

}

*p1 = x;

*p2 = y;

} Solution

La fonction calcule les valeurs minimale et maximale du tableau age et les transmet via deux pointeurs.

Q. 2) Supposons que vous disposiez de deux tableaux des réels : taille et poids et que nbPers est le nombre effectif de personnes dans ces deux tableaux.

Écrivez une ou des fonctions (à votre jugement) et ses (leurs) appels afin de transmettre via pointeurs quelques résultats et d’afficher :

- la taille moyenne et le nombre de personnes dont la taille dépasse 1.78 mètre - le poids moyen et le nombre de personnes dont le poids dépasse 78.9 kgs Solution

void stats(float tab[], int nbElem, float * moyenne, int * nbCherche, float seuil){

int i , compteur = 0 ; float somme = 0.0f;

for(i=0; i<nbElem; i++) if(tab[i][j] > seuil){

compteur++;

somme += tab[i];

}

*moyenne = somme/compteur;

*nbCherche = compteur;

}

-Appels :

float moyenne ;

int leNombre;

(6)

stats(taille , nbPers , &moyenne , &leNombre , 1.78);

printf("la taille moyenne : %4.2f .le nombre de personnes dont la taille dépasse 1.78 mètre :

%d",

moyenne , leNombre);

stats(poids , nbPers , &moyenne , &leNombre , 78.9);

printf("Le poids moyen : %4.2f .le nombre de personnes dont le poids dépasse 78.9 kgs :

%d",

moyenne , leNombre);

D) Questions relatives aux notions de fonctions : total de 20 points

Essayez de les deviner!!!!

Références

Documents relatifs

le nouveau cours IFT 1169 (suite de IFT 1166) sera offert la première fois à l’hiver 2006?.

de réaliser seulement le constructeur, les fonctions ajouterElement (question 2.), modifierA (question 7.)... 3.2) Écrivez les déclarations d’une liste des objets Personne1.

un tableau, nommé nbEnfant, capable de mémoriser le nombre d’enfants (des entiers) un tableau, nommé nbVoiture, capable de mémoriser le nombre de voitures utilisées

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

Veuillez consulter lea avis (sur 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 les lieux du

Vous pouvez poser des questions sur cette solution vers samedis les 21 ou 28 février ou durant mes périodes de consultation.. Directives de l’intra du IFT 1170,

déterminer et afficher les informations du joueur ayant la taille la plus grande entre joueur2 et

Q.. 2) Supposons que vous disposiez de deux tableaux des réels : taille et poids et que nbPers est le nombre effectif de personnes dans ces deux tableaux. Écrivez une