IFT 1969 : Programmation scientifique en C (et un peu de C++)
TP # 1 : corrigé sur 25 points (Hiver 2005)
Do you have advice for beginning computer science student?
- View the computer as a tool, and concentrate on what it can help you
accomplish. PCs can’t change the world. You can.
Anthony Russo
Laboratoire Bell (U.S.A.)
Chargé de cours: Le Van N. [email protected] bureau : 2197 (A.A. : Math-Info)
Préparation: chez-vous, à partir de la semaine du 10 janvier 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 TP1 : envoyez un courriel aux démonstrateurs du cours IFT 1969
en vous identifiant (cours IFT 1969, section A ou B, TP1, etc …).
Date de remise: Au plus tard le dimanche 06 février 2005, avant 22:30.
Pénalité de retard: Chaque jour de retard entraînera une pénalité de 5 points (sur 25) 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.
Barème: corrigé sur 25 points.
Conseil amical: N’attendez pas la semaine précédant la remise avant de
Matières exercées: Instructions d’affichage et de lecture, affectation, opérateurs, la sélection avec if et/ou switch ainsi que les boucles.
Modalités de remise (seront expliquées lors des séances de démonstration durant la semaine
du 24 janvier 2005)
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 - 5
points
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.
Remise électronique (démonstration durant la semaine du 24 janvier) :
Allez dans votre dossier Documents personnels (R) situé sur le bureau et créer le dossier remise-tp1 (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).
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 tp1 remise-tp1/*
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 tp1
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 ( 8 points : lecture, écriture, opérateurs, switch )
(les matières des semaines du 10 et du 17 vous permettent de faire ce
Réaliser un programme en langage C permettant
1) de saisir un seul caractère tapé au clavier qui représente le code d’une figure :
‘c’ ou ‘C’ pour un cercle ‘r’ ou ‘R’ pour un rectangle ‘l’ ou ‘L’ pour un losange 2) dans le cas où la figure traitée :
a) est un cercle, on saisit son rayon, calcule et affiche son périmètre, sa surface ;
b) est un rectangle, on saisit la longueur, la largeur puis calcule et affiche le
périmètre, la surface, la diagonale du rectangle. On détermine et affiche aussi
la circonférence et la surface de l’ellipse l’intérieur du rectangle ;
(veuillez chercher les formules appropriées pour ces calculs).
c) est un losange, on saisit les deux diamètres, calcule et affiche le côté, le périmètre
et la surface ;
d) est imprévue (code erroné), on affiche un message pertinent.
Pour ce numéro, vous remettez deux petits programmes :
- l’un qui utilise la sélection avec if imbriqué (numero1_if.c) - l’autre qui utilise la sélection multiple avec « switch »
(numero1_switch.c)
Données pour la remise : Un cercle de rayon 3.5, un rectangle de longueur 4.8 et de largeur 3.2, un losange de diamètres 4.2 et 2.6, une figure avec le code erroné ‘z’
Suggestions :
On ne demande pas d’utiliser une boucle pour le numéro 1. Vous exécutez et
ré-exécutez avec les données pour la remise et collez les fenêtres d’exécution
associées à la fin de votre programme (sous forme commentaires).
Critères de corrections pour le numéro 1: seulement le
fonctionnement
1. Bon fonctionnement utilisant le if imbriqué ………4 points
2. Bon fonctionnement utilisant le switch ….. ………4 points
Remarque : Si les résultats demandés ne sont pas imprimés : -2 points
Numéro 2 ( 8 points : lecture, écriture, opérateurs, sélection )
(les matières des semaines du 10 et du 17 vous permettent de faire ce numéro).
Lundi le 28 mars 2005 sera une journée fériée : congé de Pâques (dimanche le 27 mars 2005 sera Pâques). Écrire un programme en langage C qui calcule la date de Pâques à partir d'une année tapée au clavier. Évidemment, pour réussir ce calcul, il faut un algorithme approprié. En voici un, trouvé à la fin du 16ième siècle par l'astronome napolitain Aloysius Lilius et le mathématicien allemand Christopher Clavius.
Dans ce qui suit, appelons A l'année pour laquelle on désire connaître la date de Pâques (rappelons que Pâques est défini comme le premier dimanche qui suit la pleine lune arrivant après le 20 mars).
L'algorithme en pseudo-code (langage informel) est le suivant :
E0. Lire A
E1. O A mod 19 + 1 {nombre d'or du cycle métonique (basée sur 19 ans)}
E2. S A / 100 + 1 {calcul du siècle}
E3. B 3S / 4 - 12 {nombre d'années bissextiles perdues}
C (8S+5) / 25 - 5 {correction spéciale pour synchroniser Pâques avec l'orbite de la lune}
E4. D 5A / 4 - B - 10 {pour trouver le dimanche approprié}
E5. P (11O + 20 + C - B) mod 30 {calcul de la pleine lune}
si P < 0 alors P P + 30
si (P = 25 O > 11) P = 24 alors P P + 1 E6. J 44 - P
si J < 21 alors J J + 30
E7. J J + 7 - ((D+J) mod 7) {trouver le dimanche}
E8. si J > 31 alors (J-31) avril est la date recherchée sinon J mars est la date recherchée {trouver le bon mois}
Remarque:
Les symboles indiquent le plancher (partie entière) d’une valeur réelle, donc A / 100 est la division entière (sans reste) de A par 100, le symbole représente le «ET » logique et le symbole représente le
«OU» logique. L’opération mod est le modulo. Le symbole est l’affectation.
Veuillez noter que l’algorithme est le même pour tous les langages (C, Pascal, VB, . . .) par contre, cet algorithme est assez simple à traduire en langage C.
Données pour la remise: Les dix années à partir de 2005.
(Au début, vous faites le programme qui fonctionne avec une année tapée au clavier.
Une fois que les boucles de répétition soient expliquées en classe, vous utiliserez une boucle
appropriée pour déterminer les dates de Pâques des 10 années à partir de 2005).
Critères de corrections pour le numéro 2 :
1. Présentation ...2 points 1.1...Le programme doit être commenté de façon adéquate
(identification des auteurs, description du codage, description des variables, etc).
1.2.choix d’identificateurs plus significatifs que ceux utilisés dans le pseudo-code.
1.3...Indentation et aération du code.
1.4...Lisibilité des résultats.
2. Traduction appropriée de l’algorithme en langage C...3 points 3. Choix de boucle appropriée ……….1
point
4. Bon fonctionnement... 2 points Remarque : Si les résultats demandés ne sont pas imprimés : -2 points
Numéro 3 ( 9 points : boucles de répétition )
(les matières des semaines du 17 et du 24 vous permettent de faire ce numéro).
Suite à certaines scandales aux jeux olympiques d’hiver, en patinage artistique, neuf juges (au lieu de 8 comme dans le passé) accorderont une note réelle entre 0 et 6.La note la plus élevée et la note la plus basse sont éliminées (une seule fois) et la moyenne des 7 notes conservées est alors affichée.
Exemple : Une patineuse a reçu les 9 notes suivantes : 5.8 5.6 5.6 5.9 5.7 5.9 5.4 5.8 5.7
La note la plus basse est 5.4
La note la plus élevée est 5.9 (2 fois)
On élimine ces deux notes pour obtenir la note de la patineuse : 5.8 + 5.6 + 5.6 + 5.7 + 5.9 + 5.8 + 5.7
--- 7
Ce calcul est équivalent à :
( 5.8 + 5.6 + 5.6 + 5.9 + 5.7 + 5.9 + 5.4 + 5.8 + 5.7 ) - ( 5.4 + 5.9)
--- ( formule) 7
Écrire un programme en mode interactif permettant : - de saisir les 9 notes tapées au clavier par l'usager
- de calculer et d'afficher la note du patineur (voir la formule) (Pour le TP1, on ne vous demande pas de valider les données).
Une fois que le programme fonctionne bien avec un seul patineur, vous ajoutez la boucle do … while pour traiter plusieurs patineurs tant que l'usager décide de continuer.
On compte et affiche le nombre total de patineurs traités. On détermine et affiche pour tous les patineurs participants :
- la note finale moyenne ; - la meilleure note finale ; - la plus faible note finale.
Données pour tester et pour remettre votre programme : Les notes suivantes :
du 1er patineur 5.9 5.2 5.9 5.9 5.7 5.6 5.8 5.9 5.7 du 2ième patineur 5.4 5.5 5.3 5.4 5.6 5.4 5.7 5.6 5.1 du 3ième patineur 6.0 5.7 5.9 5.9 6.0. 4.8 5.9 5.8 5.9 du 4ième patineur 5.4 5.1 5.0 5.2 5.9 5.1 5.3 5.1 4.9
Critères de corrections pour le numéro 3:
1. bon fonctionnement
- pour un seul patineur : 3 points - pour plusieurs patineurs : 2 points
- compter et afficher le nombre de patineurs traités : 1 point
Remarque : Si les résultats demandés ne sont pas imprimés : -2 points
Bonne chance et bon succès ! Équipe du IFT 1969, hiver 2005
Horaire des laboratoires :
http://www.desi.umontreal.ca/cours/horaire/horaire.htm
Les auxiliaires qui dépannent facilement vos tps durant les périodes de Pratique Libre :
Rabah, Latifa Senh., Wissam, Youssef Z, Youssef Kadri, Fathya Z, Mechfaoui, Eugene L, Fortin Guillaume, etc ….
Faites appel à vos démonstrateurs, en écrivant à leur adresse de courriel :