You are on page 1of 6

IFT 1969 : Programmation scientifique en C (et un

peu de C++)

TP # 2 : corrigé sur 35 points (Hiver


2005)
Do you have advice for beginning computer
science student?
- Keep things simple. Find real problems and solve
them in the
simplest possible way.
Most of all, have fun with everything you do and
make sure
everyone around you is having fun!
Radia Perlman
Sun Microsystem (U.S.A.)

Chargé de cours: Le Van N. levan@iro.umontreal.ca bureau : 2197


(A.A. : Math-Info)

Préparation: chez-vous, à partir de la semaine du 07 février


2005.
Réalisation: durant vos démonstrations, les périodes de Pratique Libre
(P.L.)de Consultation Théorique (C.T.) au campus UDM et/ou campus
Longueuil.
Dépannage : par vos démonstrateurs (lors des démonstrations), les
surveillants des périodes de Pratique Libre, les surveillants des périodes
de consultation théorique.
Questions sur le TP2 : envoyez un courriel aux démonstrateurs du
cours IFT 1969
dift1969@IRO.UMontreal.CA
en vous identifiant (cours IFT 1969, section A ou
B, TP2, etc …).
Date de remise: Au plus tard le dimanche 13 mars 2005, avant 22:30.
Pénalité de retard: Chaque jour de retard entraînera une pénalité de 7
points (sur 35) par jour.
Note: Le travail en équipe de deux (au maximum) est permis. Vous ne
remettez alors qu'un seul travail par équipe. Les équipes de 3 étudiants
ou plus sont interdites.

IFT 1969, hiver 2005 : TP2 (corrigé sur 35 points) 1


Barème: corrigé sur 35 points.
Conseil amical: N’attendez pas la semaine précédant la remise avant de
commencer... vous n’aurez pas le temps!

Matières exercées: fichier de type texte, statistiques de base, tableaux


à un seul indice, le tri,
calcul de probabilité, calcul scientifique, ….
Modalités de remise : les mêmes que le TP2.
Assurez-vous d’avoir écrit vos coordonnées (nom et nom d’usager) ainsi
que ceux de votre coéquipier (s’il y a lieu) en commentaires au début de
chaque programme. Les équipes de 2 personnes ne doivent remettre
qu’une seule copie du T.P.

Le T.P. doit être remis en version papier et en version électronique.


Varia: Pas de remise électronique - 10 points pour le TP2
Remise sur papier:

• Remplissez une feuille de remise de T.P. (disponible aux laboratoires


ou sur la page Web du cours à partir du site
http://www.iro.umontreal.ca/~dift1969 en cliquant sur le lien
Page de garde pour la remise des TPs).
• Imprimez votre programme ainsi que les résultats affichés à l’écran
(vous pouvez mettre les résultats en commentaires à la fin de votre
programme).
• Brochez le tout et déposez-le dans une boîte de remise de T.P. (au
fond du laboratoires
S-118, entre les salles X-115 et X-117 du Pavillon Principal OU en face
du local 2197
du pavillon André-Aisenstadt).

Les T.P. en retard (avec pénalité) peuvent aussi être déposés dans une
boîte de remise.

• Allez dans votre dossier Documents personnels (R) situé sur le bureau
et créer le dossier remise-tp2 (faites bien attention de ne pas mettre
de majuscules ou d’espaces blancs dans le nom du dossier).
• Déposez vos programmes en langage C (suffixe .c) dans ce nouveau
dossier. Vérifiez que les noms de vos fichiers ne contiennent ni
accents, ni espaces blancs, ni caractères spéciaux (autrement dit, les
noms ne contiennent que des lettres et/ou des chiffres).

IFT 1969, hiver 2005 : TP2 (corrigé sur 35 points) 2


• Double-cliquez sur l’icône Branchement sur UNIX situé dans le dossier
« Raccourcis DESI »sur le bureau. Branchez-vous sur Unix; c’est-à-
dire entrez votre nom d’usager et votre mot de passe Unix. À
l’incitation, tapez la commande:

remise ift1969 tp2 remise-tp2/*

Faites bien attention de respecter les majuscules et les minuscules.

À tout moment, vous pouvez vérifier quels fichiers vous avez remis en
tapant la commande:
remise -v ift1969 tp2

La liste des fichiers remis sera alors affichée. Si tout c’est bien passé,
faites exit, puis fermez la fenêtre de Telnet.

La remise électronique prend note du jour de la remise; les T.P. peuvent


donc être remis en retard (avec pénalité).

Vous pouvez faire une remise électronique autant de fois que vous le
voulez, mais respectez la règle suivante: remettez toujours votre T.P. du
même compte. Chaque nouveau fichier remis écrase le fichier du même
nom remis auparavant; seule la dernière version sera alors conservée et
corrigée.

La correction des travaux :

Suite à une recommandation de la direction de la DESI et du DIRO, la


qualité de l'algorithme et de la programmation occupent une place
importante dans l'évaluation d'un travail.
Un programme qui fonctionne est bien mais insuffisant pour
mériter une meilleure note!
Veuillez consulter les critères de correction de chacun des numéros d'un
travail.

Numéro 1 (total de 15 points )


Matières prévues pour ce numéro : fichiers, tableaux et statistiques de base.
Ces matières sont présentées en classe le 03 février 2004.

IFT 1969, hiver 2005 : TP2 (corrigé sur 35 points) 3


Pour ce numéro, on n’exige pas de sous-programmes (fonctions en C).

On dispose du fichier de type texte nommé "patinart.txt". Chaque ligne


contient les 9 notes obtenues lors d’un concours de patinage artistique
(sujet d’un numéro du TP1 cet hiver).

Écrivez un programme en langage C permettant de lire le fichier.


Pour chaque patineur, on lit et mémorise ses notes lues dans
un tableau de 9 notes ( note[0] : la note donnée par le juge numéro 1,
note[1] : la note donnée par le juge numéro 2, etc ...).
On calcule la note du patineur selon les mêmes règles que le TP1
et mémorise dans un tableau :
note_pat[0] : la note calculée pour le premier patineur
note_pat[1] : la note calculée pour le deuxième patineur
etc ...
Il y a au maximum 110 patineurs (110 lignes) dans le fichier des
données.

Le programme permet aussi :


1. de compter et d’afficher le nombre exact de patineurs dans
le fichier;
2. de compter et d’afficher le nombre de patineurs qui ont
5.8 ou plus comme note finale
3. de déterminer et d’afficher la plus faible et la plus forte
note finale;
4. de calculer et d’afficher la note moyenne de tous les patineurs;
5. de calculer et d’afficher l’écart-type des notes de tous les
patineurs

On crée aussi un nouveau fichier nommé "patinart.res" dont chaque ligne


contient les 9 notes et la note finale d’un patineur.

Critères de correction du numéro 1 (total de 10 points) :

1. Bon fonctionnement : 8 points de départ


2. Qualité du codage : 4 points
3. Commentaires raisonnables : 1.5 points
4. Présentation du programme et des résultats : 1.5 point
Remarques sur la lecture du fichier "patinart.txt" :

Chaque ligne du fichier contient exactement 9 notes (9 réels). On vous


suggère d’adapter la lecture selon le modèle suivant :

Tant que ( non fin du fichier à lire )


Début
. . .
Pour i varie de 0 à 8 Faire
lire (sans quitter de ligne) dans le fichier note[i]
Quitter la ligne de lecture avec fscanf(aLire, "\n");
. . .
Fin

IFT 1969, hiver 2005 : TP2 (corrigé sur 35 points) 4


Numéro 2 (total de 10 points )(tableaux et
fonctions) :
(calcul de probabilité, etc …)
Dans le jeu de roulette française, on lance une bille et elle va tomber
sur un des numéros entre 0 et 36.
Les 18 numéros suivants sont de couleur rouge :
1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36
Les autres numéros (sauf 0) sont de couleur noir.
La colonne 1 contient 12 numéros:1,4,7,10,13,16,19,22,25,28,31,34
La colonne 2 contient 12 numéros:2,5,8,11,14,17,20,23,26,29,32,35
La colonne 3 contient les autres numéros (sauf 0).

Écrivez un programme en C permettant :

1) de lancer une bille 100 000 fois et mémoriser les numéros


dans un tableau
2) d’afficher les résultats de 15 premiers lancements selon
le modèle suivant :

Lancement Noir Rouge Col1 Col2 Col3


1. 28 x
2. 20 x
3. –-0-- --0—
4. 18 x
etc . . .
3) de calculer et d’afficher la probabilité obtenue un numéro
a) de couleur rouge
b) sur la colonne numéro 2

Notes : Voici la méthode pour obtenir des valeurs aléatoires fournies


par l’ordinateur :

#include <stdlib.h> /* pour utiliser srand, rand, … */


#include <time.h> /* pour utiliser le fonction time … */

/* Cette fonction retourne un nombre arbitraire entre 2 bornes */


int aleatoire(int borneInf, int borneSup) {

return rand() % (borneSup - borneInf + 1) + borneInf;


}

......

/* initialiser le germe pour la génération des nombres aléatoires


(à faire 1 seule fois dans main
*/

srand(time(NULL));
......

numero = aleatoire(0, 36); /*un nombre arbitraire entre 0 et 36*/

IFT 1969, hiver 2005 : TP2 (corrigé sur 35 points) 5


......

Critères de correction du numéro 2 (total de 10 points) :

1. Bon fonctionnement : 5 points de départ


2. Bonne utilisation de fonctions : 3 points
2. Utilisation de tableau à un seul indice : 2 points

Numéro 3 (total de 10 points) :


Complétez le programme du fichier jo.c (disponible sur Web).

Critères de correction du numéro 3 (total de 10 points) :

Bon fonctionnement utilisant de fonctions : 2 x 5 points

IFT 1969, hiver 2005 : TP2 (corrigé sur 35 points) 6