Modèle d'un examen final (40 %)

Veuillez fermer, s'il y a lieu, votre cellulaire. Directives pédagogiques pour
automne 2014 : Date : jeudi le 11 décembre 2014. Durée: 2 heures 45 minutes (
de ...

Part of the document


Nom de famille:____________________ Prénom :
_______________________________ Code permanent :___________________ Signature:
_______________________________
IFT 1969 - Automne 2014 Modèle d'un examen final (40 %) Veuillez fermer, s'il y a lieu, votre cellulaire.
Directives pédagogiques pour automne 2014 : Date : jeudi le 11 décembre 2014
Durée: 2 heures 45 minutes (de 16:30 à 19:15)
Local : Z-330 Toute documentation sur papier permise.
Ordinateurs personnels prohibés.
Calculatrice permise mais non nécessaire. Notes :
- Répondre directement sur ce questionnaire.
- Utilisez le verso s'il manque de place . Partie A (5 questions x 3 points): Répondez par Vrai (ou V) si l'énoncé est correct ou par Faux (ou F) si
l'énoncé est
incorrect. Si vous répondez Faux (et seulement dans ce cas), expliquez
brièvement
votre réponse. Chaque question vaut trois (3) points. L'explication
appropriée
(lorsqu'exigée) vaut deux (2) points sur trois. Au numéro A du TP3, vous aviez travaillé avec les 3 tableaux suivants :
poste : tableaux des caractères avec les valeurs 'A', 'P', 'P', 'O',
'P', 'O', 'A', 'P'
( 'A' pour analyste, 'P' pour programmeur, 'O' pour
opérateur) nbCafe : tableau des entiers avec les valeurs 3, 0, 2, 1, 6, 4, 0, 5
age : tableau des entiers avec les valeurs 25, 18, 40, 22, 19, 24, 26,
29 et nbPers est le nombre de personnes traitées. 1) Les instructions suivantes : int * p = age ;
printf("%d", *p);
affichent la valeur 18
|Réponse : |
|Faux, c'est 25 | 2) Pour afficher le contenu du tableau nbCafe :
afficher(nbCafe, nbPers) ;
l'en-tête de la fonction suivante est correcte :
void afficher (int * p, int nbPers) |Réponse : |
|Vrai | 3) Les instructions suivantes : int * p = age ;
printf("%d", *(p+2));
affichent la valeur 18
|Réponse : |
|Faux c'est 40 | etc .... Partie B ( tableaux, fonctions, pointeurs) : 25 points
Q. 6) 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++)
{
if (age[i] < x)
x = age[i];
if (age[i] > y)
y = age[i];
}
*p1 = x;
*p2 = y;
} Cette fonction fonctionne-t-elle pour tous les tableaux d'entiers ? Si
non, écrivez
une version plus appropriée.
Réponse :
Cette fonction détermine et transmet via pointeur l'âge minimum et
l'âge
Maximum Elle ne fonctionne pas pour tous les tableaux d'entiers.
La version appropriée est : void determiner(int tableau[], int nbElem, int *p1,
int *p2)
{
int i;
int x = INT_MAX, y = INT_MIN;
for (i = 0; i < nbElem; i++)
{
if (tableau[i] < x)
x = tableau [i];
if (tableau [i] > y)
y = tableau [i];
}
*p1 = x;
*p2 = y;
} Q. 7) 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 : Appels :
float tailleMoy, poidsMoy;
int nombre1, nombre2;
. . .
determiner( taille, nbPers, &tailleMoy, &nombre1, 1.78);
printf("%3d %6.2f\n", nombre1, tailleMoy); determiner( poids, nbPers, &poidsMoy, &nombre2, 78.9);
printf("%3d %6.2f\n", nombre2, poidsMoy); Écriture : void determiner( float tableau[], int nbElem, float * ptrMoy,
int * ptrCompteur, float
borne)
{
int n = 0, i ;
float somme = 0.0 ;
for ( i = 0 ; i < nbElem ; i++)
{
somme += tableau[i];
if ( tableau[i] > borne ) n++;
}
*ptrCompteur = n ;
*ptrMoy = somme / nbElem ; }
Partie C ( tableau à 2 indices ) : 20 points
/* 45 étudiants ou moins */
#define MAX_ETUD 45 /* 7 notes (intra, final, tp1, tp2, tp3,
tps et globale) */
#define NB_NOTES 7 float note [MAX_ETUD] [NB_NOTES] ;
int nbEtud ; /* le nombre d'étudiants lus */ 1. (5 points)
Écrire seulement l'en-tête d'une fonction et son appel pour lire le
fichier "notes1969.txt", remplir le tableau note, compter le nombre
d'étudiants lus.
Appel : lireRemplir("notes1969.txt", note, &nbEtud); L'en-tête de la fonction : void lireRemplir(char nomFichier[],
float note [MAX_ETUD] [NB_NOTES], int *p)
2. (15 points)
Écrire le code pour afficher à l'écran : - la meilleure et la plus faible note globale (indice 6)
- la meilleure et la plus faible note finale (indice 1)
Appels dans main : float globMax, globMin, finMax, finMin; determiner(note, nbEtud, 6, &globMax, &globMin);
determiner(note, nbEtud, 1, &finMax, &finMin); printf("La meilleure note globale : %.2f\n", globMax) ;
printf("La + faible note globale : %.2f\n", globMin) ;
printf("La meilleure note ex. final : %.2f\n", finMax) ;
printf("La + faible note ex. final : %.2f\n", finMin) ; Écriture de la fonction : void determiner(float note [MAX_ETUD] [NB_NOTES], int nbEtud,
int indNote, float * pMax, float * pMin)
{
float mini = FLT_MAX, maxi = FLT_MIN;
int i ;
for( i = 0; i < nbEtud; i++)
{
if (note[i] [indNote] < mini) mini = note[i] [indNote] ; if (note[i] [indNote] > maxi) maxi = note[i] [indNote] ; } *pMin = mini ;
*pMax = maxi ; }
void determiner(float note [MAX_ETUD] [NB_NOTES], int nbEtud,
int indNote, float * pMax, float * pMin)
{
float mini = FLT_MAX, maxi = FLT_MIN;
int i ;
for( i = 0; i < nbEtud; i++)
{
if (note[i] [indNote] < mini) mini = note[i] [indNote] ; if (note[i] [indNote] > maxi) maxi = note[i] [indNote] ; } *pMin = mini ;
*pMax = maxi ; } Partie D ( le type structure, . . . ) : 40 points Au numéro C du TP3, vous aviez travaillé avec le tableau des personnes
(pers), de compter et de transmettre via pointeur le nombre de personnes
lues (nbPers). Écrire le code permettant : 1. de calculer et d'afficher
a) la taille moyenne des femmes;
b) la taille moyenne des hommes;
c) le poids moyen des femmes ;
d) le poids moyen des hommes.
Appels :
calculerAfficher(pers, nbPers, 'F', "femmes"); calculerAfficher(pers, nbPers, 'M', "hommes") ; Fonction : void calculerAfficher(Personne[] pers, int nbPers,
char sexeVoulu, char mess[])
{
int nombre = 0, i ;
float somTaille = 0.0, sommePoids = 0.0 ;
for(i = 0 ; i < nbPers ; i++)
if (pers[i].sexe == sexeVoulu)
{ nombre++;
somTaille += pers[i].taille;
somPoids += pers[i].poids;
} if (nombre > 0)
{ printf("Pour les %s:\n", mess);
printf(" - taille moyenne : %.2f metre\n",
somTaille/nombre);
printf(" - poids moyen : %.2f kg\n",
somPoids/nombre);
}
else
printf("Pas de %s => pas de moyennes\n", mess); }