Logo ÉTS
Session
Cours
Responsable(s) Pierre Bélisle

Se connecter
 

Sauvegarde réussie
Echec de sauvegarde
Avertissement
École de technologie supérieure

Responsable(s) de cours : Pierre Bélisle


PLAN DE COURS

Automne 2024
INF147 : Programmation procédurale (4 crédits)





Préalables
Aucun préalable requis
Unités d'agrément
Total d'unités d'agrément : 64,8 100,0 %




Qualités de l'ingénieur

Qn
Qualité visée dans ce cours  
Qn
  Qualité visée dans un autre cours  
  Indicateur enseigné
  Indicateur évalué
  Indicateur enseigné et évalué



Descriptif du cours
Acquérir les notions et l’expérience de programmation procédurale nécessaires pour solutionner efficacement des problèmes reliés au génie électrique.

Étude du langage C en appliquant les notions de programmation structurée à la résolution de problèmes de base reliés au génie électrique. Programmation de base : syntaxe, constantes, variables, types, conversion de types, opérateurs et expressions, structures de contrôle et décision, fonctions et passage de paramètres, macros-fonctions, construction de modules, gestion dynamique de la mémoire, pointeurs, entrées-sorties, fichiers. Introduction aux structures de données imbriquées : listes, chaînage dynamique, tableaux, piles, files. Introduction aux algorithmes de tri et de fouille. Sensibilisation au développement de programmes portables de qualité. Introduction aux environnements de programmation et aux tests unitaires.

Séances de laboratoire axées sur l'application des notions de programmation.



Objectifs du cours

Ce cours a pour objectif de procurer une connaissance moderne de la programmation afin qu’une étudiante ou un étudiant puisse solutionner des problèmes reliés à sa discipline.

Le langage de programmation utilisé est le C ANSI 99.

De façon plus spécifique, ce cours devra permettre à l’étudiante ou l'étudiant de :

  • acquérir les notions de programmation de base;
  • acquérir une connaissance du langage C;
  • utiliser et implémenter des types de données abstraits (pile, file et liste).



Stratégies pédagogiques

3 heures de présentation par semaine sous forme de cours magistral (théorie et exemple de code).

3 heures de laboratoire par semaine.

Les laboratoires visent :

  • l'assimilation des notions vues au cours à l’aide d’exercices;
  • la mise au point des programmes donnés en travaux pratiques (si les exercices sont finis).



Utilisation d’appareils électroniques

Ordinateur portable.




Horaire
Groupe Jour Heure Activité
01 Mardi 13:30 - 16:30 Laboratoire
Mercredi 09:00 - 12:30 Activité de cours
02 Mardi 13:30 - 17:00 Activité de cours
Mercredi 09:00 - 12:00 Laboratoire



Coordonnées du personnel enseignant le cours
Groupe Nom Activité Courriel Local Disponibilité
01 Pierre Bélisle Activité de cours Pierre.Belisle@etsmtl.ca B-2524
01 Pierre Bélisle Laboratoire Pierre.Belisle@etsmtl.ca B-2524
01 Olivier Arteau Laboratoire olivier.arteau@etsmtl.ca
02 Alaidine Ben Ayed Activité de cours alaidine.benayed@etsmtl.ca
02 Alaidine Ben Ayed Laboratoire alaidine.benayed@etsmtl.ca



Cours

Ce tableau est donné à titre indicatif. Il se peut que votre enseignante ou enseignant modifie l’ordre de présentation des notions pour des raisons pédagogiques.

 

COURS

MATIÈRE

1 à 4

Description première de la qualité de programmation attendue : commentaires de spécifications et de stratégie, aération, indentation, utilisation de constantes symboliques et choix des identificateurs, portabilité.

Philosophie du programmeur : Le moins couteux en temps machine, en espace mémoire et en répétition de code sans nuire à sa clarté. 

Notions élémentaires de programmation : types de base du C avec leurs opérateurs et conversions automatiques, variables, entrées/sorties de base, instructions conditionnelles et itérativescomparaison et compatibilité des types numériques, opérateurs binaires.

Environnements de programmation : chaine de compilation-assemblage-exécution, présentation de divers environnements de programmation (Éclipse et Visual Studio).

Commandes au préprocesseur : #define, #include, et #if..#endif.

Procédures, fonctions : déclaration, commentaires standards de déclaration et d’implémentation, paramètres effectifs et paramètres formels, valeur de retour, passage par valeur, portée et durée de vie des variables, factorisation (découpage en sous-programmes) définition, avantages, création de tests (données et cas limites).

introduction aux tests unitaires avec printf et assert : (assert favorisé)

Passage par adresse : Introduction aux variables pointeurs (déclaration, assignation et utilisation).

Macros-fonctions : avantages, déclaration, utilisation et tests.

Tableaux : déclaration, initialisation, accès aux éléments, passage en paramètres, algorithmes de base (ex. : min, max, etc.), déclarations de type (avec typedef). 

Utilisation de modules externes : inclusion et utilisation de modules externes dans un projet.

Semaine 5 (3h00) Couverture des semaines 1 à 4

5 à 8

Algorithmes de base  (suite sur tableau) : tris (sélection, insertion et bulle) et fouilles (linéaires et binaires).

Introduction aux enregistrements (struct) : déclaration, accès aux champs, affectation et passage en paramètre.

Implémentation de modules externes de type (#ifndef-#define) : modules de déclarations (.h) et de définitions (.c), définitions de type, passage par référence (const ou pas const) et implémentations des fonctions nécessaires.

Pointeurs et adresses : arithmétique des adresses (démontrer l’utilisation de sizeof) et pointeurs génériques (void *).

Classes d’allocation : auto: pile (stack) et  static : tas (heap).

Allocation dynamique : : utilisation des fonctions d’allocation dynamique (malloc, calloc, realloc et free), allocation de tableaux et d'enregistrements dynamiques.

Chaînes de caractères: chaînes littérales et fonctions standard, différence entre char* versus char[] et tests.

Type de données abstraits : introduction aux piles (t_pile) et aux files (t_file).  Première implémentation sur tableaux de ces modules de type et tests.

Semaine 9 (3h00) Couverture des semaines 5 à 8

9 à 13

Type de données abstraits (suite) :  Introduction aux listes (t_liste), implémentation sur tableaux et tests.

Chaînage dynamique efficace : références chainées (nœud), chainage simple et chaînage double et tests.

Piles et files : implémentations version chaînage dynamique et tests.

Listes chaînées (simple et double) : intérêt, fonctionnement et implémentations avec une position numérique en paramètre (avec position courante implicite ((obligatoirement))), encapsulation des données et des traitements privés et tests.

Fichiers textes et binaires : le FILE * et ses fonctions classiques (fopen, fclose, feof, fseek, ftell,  fread, fwrite, fprintf, fscanf, fgets) et tests.




Laboratoires et travaux pratiques

3 heures de cours par semaine.

3 heures de laboratoire par semaine.

Les laboratoires visent :

  • l’assimilation par l’expérience des notions vues au cours;
  • la mise au point de programmes donnés en travaux pratiques.

La séance de laboratoire pourra être parfois jumelée avec celle du cours de façon à ce que chaque rencontre hebdomadaire se compose d’une période de théorie et d’une période de laboratoire. Veuillez apporter votre ordinateur.




Utilisation d'outils d'ingénierie

Nous utiliserons principalement le compilateur Visual C++ en évitant soigneusement toute librairie et toute fonction qui ne sont pas ANSI et en mettant l’accent sur la portabilité du code. L'utilisation de l'environnement Eclipse devra être démontrée par l'étudiante ou l'étudiant durant la session.




Évaluation

Les dates de remise des travaux pratiques dans ce tableau sont données à titre indicatif. En cours de session, votre enseignante ou votre enseignant vous fera part à l’avance de tout changement à l’horaire d’évaluation en ce qui concerne les travaux pratiques.

Évaluation

Pondération

Semaine

Groupe 01

Groupe 02

Présence aux laboratoires   6% 1 à 12 - -

Examen intra 1
(3 heures)

24%

7 22 octobre 22 octobre

Examen intra 2
(3 heures)

30%

10 13 novembre 12 novembre

Examen final
(3 heures)

40%

Période des examens finaux (p)

À propos des travaux pratiques :

  • Les séances de laboratoire sont obligatoires. Toute absence doit être justifiée conformément au règlement du premier cycle relatif aux absences lors des évaluations. La totalité de la séance doit être consacrée au sujet du cours.

  • Trois (3) travaux pratiques sont fournis pour être réalisés et remis, bien qu'ils ne soient pas évalués. Une solution sera distribuée avant l'examen aux  étudiantes et  aux étudiants qui auront soumis un travail sérieux.

  • Les évaluations porteront aussi sur les travaux qui visent à mettre en application, dans le cadre d'un problème réaliste, les concepts et les méthodes de programmation enseignés pendant les cours théoriques. Il est attendu des étudiantes et des étudiants de produire des travaux qui permettent de résoudre le problème de l'énoncé MAIS SURTOUT de les réaliser selon les standards de qualité et les bonnes pratiques enseignés (respect des normes, décomposition en sous-programme/modules, etc.) en programmation moderne. La cohérence et l'optimalité des algorithmes implémentés constituent également des critères importants qui seront considérés. 

À propos des examens :

  •  Les examens ont lieu en présence sur papier avec réponse dans Moodle sur enaquiz.

À propos de l'examen final :

  • Aucune documentation et aucun accès Internet n'est permis.
  • Aucun appareil électronique (téléphone tablette,etc.) n'est permis autre qu'un ordinateur personnel lorsque l'examen est sur ordinateur.

Double seuil : 

  • Une note moyenne pondérée de 50 % est exigée pour l’ensemble des évaluations à caractère individuel. Ce seuil est une condition nécessaire à la réussite du cours mais ne la garantit pas.

À propos de la langue utilisée

  • Afin de respecter les exigences relatives à la langue française telles que stipulées à la Politique linguistique de l’École, le code et les commentaires de code doivent être principalement en français tel que c'est le cas pour tous les exemples et documents qui seront fournis aux étudiantes et étudiants.



Double seuil
Note minimale : 50



Dates des examens intra
# Intra Groupe(s) Date
1 1, 2 22 octobre 2024
2 1 13 novembre 2024
2 2 12 novembre 2024



Date de l'examen final
Votre examen final aura lieu pendant la période des examens finaux, veuillez consulter l'horaire à l'adresse suivante : https://www.etsmtl.ca/programmes-et-formations/horaire-des-examens-finaux


Politique de retard des travaux
Tout travail (devoir pratique, rapport de laboratoire, rapport de projet, etc.) remis en retard sans motif valable, c’est-à-dire autre que ceux mentionnés dans le Règlement des études (1er cycle, article 7.2.5/ cycles supérieurs, article 6.5.2) se verra attribuer la note zéro, à moins que d’autres dispositions ne soient communiquées par écrit par l’enseignante ou l’enseignant dans les consignes de chaque travail à remettre ou dans le plan de cours pour l’ensemble des travaux.



Absence à une évaluation

Afin de faire valider une absence à une évaluation en vue d’obtenir un examen de compensation, l’étudiante ou l’étudiant doit utiliser le formulaire prévu à cet effet dans son portail MonÉTS pour un examen final qui se déroule durant la période des examens finaux ou pour tout autre élément d’évaluation surveillé de 15% et plus durant la session. Si l’absence concerne un élément d’évaluation de moins de 15% durant la session, l’étudiant ou l’étudiante doit soumettre une demande par écrit à son enseignante ou enseignant.

Toute demande de validation d’absence doit se faire dans les cinq (5) jours ouvrables suivant la tenue de l’évaluation, sauf dans les cas d’une absence pour participation à une activité prévue aux règlements des études où la demande doit être soumise dans les cinq (5) jours ouvrables avant le jour de départ de l’ÉTS pour se rendre à l’activité.

Toute absence non justifiée par un motif majeur (voir articles 7.2.6.1 du RÉPC et 6.5.2 du RÉCS) entraînera l’attribution de la note zéro (0).




Infractions de nature académique
Les clauses du « Règlement sur les infractions de nature académique de l’ÉTS » s’appliquent dans ce cours ainsi que dans tous les cours du département. Les étudiantes et les étudiants doivent consulter le Règlement sur les infractions de nature académique (www.etsmtl.ca/a-propos/gouvernance/secretariat-general/cadre-reglementaire/reglement-sur-les-infractions-de-nature-academique) pour identifier les actes considérés comme étant des infractions de nature académique ainsi que prendre connaissance des sanctions prévues à cet effet. À l’ÉTS, le respect de la propriété intellectuelle est une valeur essentielle et tous les membres de la communauté étudiante sont invités à consulter la page Citer, pas plagier ! (www.etsmtl.ca/Etudiants-actuels/Baccalaureat/Citer-pas-plagier).

Systèmes d’intelligence artificielle générative (SIAG)
L’utilisation des systèmes d’intelligence artificielle générative (SIAG) dans les activités d’évaluation constitue une infraction de nature académique au sens du Règlement sur les infractions de nature académique, sauf si elle est explicitement autorisée par l’enseignante ou l’enseignant du cours.



Documentation obligatoire

S.O.




Ouvrages de références

Le choix d’un livre est laissé à la discrétion de l’étudiante ou de l'étudiant. Voici quelques livres portant sur le langage C et diverses références plus spécialisées

 

MANUEL RECOMMANDÉ :

MILLER, Lawrence H. & Alexander E. QUILICI. The Joy of C – Programming in C, Wiley, 1997.

Excellent manuel sur le C complet. Rien n’est laissé au hasard. Tou.tes les étudiant.es auraient avantage à connaître ce bouquin. Très longuement utilisé dans le cours INF125.

 

RÉFÉRENCES PLUS SPÉCIALISÉES :

  • DRIX, Philippe. Le langage C ANSI – Vers une pensée objet en Java, 3e éd., InterEditions, 1993. Ce livre s’adresse à un lecteur connaissant déjà la programmation (préférablement en Pascal) et l’amène aux portes de la programmation orientée objet. Son approche et ses objectifs correspondent très bien à la mentalité du cours. Son seul défaut est qu’il n’aborde pas les structures de données.
  • HARBISON III, Samuel P. & Guy L STEELE JR. C – A reference manual, 5e éd., Prentice Hall, 2002. Ce livre décrit le langage C et un style de programmation axé sur la portabilité et la maintenance. Il ne se veut pas un guide d’apprentissage de la programmation en C. En plus d’être extrêmement précis, il discute de la norme C99, ce qui est rare dans les livres de C pour l’instant.
  • BRASSARD, Gilles & Paul BRATLEY. Algorithmique – Conception et analyse, Masson, 1987. Un manuel avancé dépassant largement les objectifs de notre cours. Son intérêt se situe au niveau des algorithmes touchant les arbres et les graphes. Si vous souhaitez approfondir ces sujets ou étudier la notion d’algorithmie, alors ce livre devrait vous intéresser.
  • KOENIG, Andrew. C traps and pitfalls, 5e édition, Addison-Wesley, 1989. Un tout petit livre qui aborde les embûches courantes rencontrées par le programmeur en C. Bien que notre cours dépasse largement les notions présentées dans ce livre, celui-ci recèle des informations que tout étudiant doit savoir à la fin du cours.



Adresse internet du site de cours et autres liens utiles

L'enseignante ou l'enseignant informera les étudiantes et étudiants s'il y a lieu.




Autres informations

Les séances de cours et de travaux pratiques des cours-groupes dont le mode d'enseignement est hybride sont offertes entièrement à distance. L'étudiante ou l'étudiant inscrit à un tel cours-groupe n'a donc pas besoin de se déplacer à l'École durant la session, sauf lors des évaluations en présence identifiées à la section "Évaluation".