Logo ÉTS
Session
Cours
Responsable(s) Iannick Gagnon

Se connecter
 

Sauvegarde réussie
La notification a été envoyée
Echec de sauvegarde
Avertissement
École de technologie supérieure

Responsable(s) de cours : Iannick Gagnon


PLAN DE COURS

Été 2025
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 vise à doter les étudiantes et étudiants de compétences fondamentales en algorithmique et en programmation, afin qu'elles et ils soient capables de résoudre des problèmes scientifiques liés à leur discipline.

Au terme de ce cours, l'étudiant(e) sera en mesure de:

  • Identifier les étapes nécessaires à la résolution d'un problème scientifique.
  • Adapter une ou plusieurs solutions algorithmiques simples afin de résoudre un problème scientifique lié à leur discipline.
  • Implémenter des algorithmes dans un langage de programmation en respectant des normes de programmation.
  • Utiliser adéquatement des algorithmes connus, selon les besoins du problème.
  • Reformuler un problème complexe en sous-problèmes plus simples.



Stratégies pédagogiques

Organisation des séances:

  • 3 heures de cours par semaine;
  • 3 heures de laboratoire par semaine.

Le matériel disponible sur la page Moodle du cours est accessible à l'adresse suivante : https://ena.etsmtl.ca. Du matériel pédagogique supplémentaire pourrait vous être fourni par l'enseignant(e).

 

Les laboratoires ont pour principaux objectifs de:

  • consolider l'assimilation des concepts à travers des activités pratiques;
  • développer des compétences en programmation en réalisant des programmes dans le cadre des travaux pratiques.



Utilisation d’appareils électroniques

S.O.




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



Coordonnées du personnel enseignant le cours
Groupe Nom Activité Courriel Local Disponibilité
01 Éric Thé Activité de cours Eric.The@etsmtl.ca B-2568
01 Éric Thé Laboratoire Eric.The@etsmtl.ca B-2568
02 Hugues Saulnier Activité de cours Hugues.Saulnier@etsmtl.ca B-2568
02 Hugues Saulnier Laboratoire Hugues.Saulnier@etsmtl.ca B-2568



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

Conventions d'écriture: Commentaires de spécification et de stratégie, aération du code, indentation cohérente, utilisation de constantes symboliques, choix pertinents des identificateurs, portabilité du code.

Principes de programmation: Chercher à minimiser le temps d’exécution, l’utilisation de la mémoire et la répétition de code, sans compromettre la clarté du programme.

Notions élémentaires: Types de base du langage C avec leurs opérateurs et conversions automatiques, déclaration de variables, entrées et sorties de base, instructions conditionnelles et itératives, types numériques, opérateurs binaires.

Environnement de programmation: Chaîne de compilation, d’assemblage et d’exécution, présentation de divers environnements de développement (ex. : Eclipse, Visual Studio, etc.).

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

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

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

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. : minimum, maximum, etc.), déclarations de type à l’aide de typedef.

Modules externes: Inclusion, intégration et utilisation de modules externes dans un projet.

5 à 8

Algorithmes de base sur tableau (suite): Tris (sélection, insertion, bulle) et recherches (linéaire et binaire).

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

Implémentation de modules externes de type (#ifndef et #define): Séparation en modules de déclaration (.h) et de définition (.c), définitions de types, passage par référence (avec ou sans const), implémentation des fonctions nécessaires.

Pointeurs et adresses: Arithmétique des adresses (avec démonstration de l’utilisation de sizeof), utilisation de pointeurs génériques (void *).

Classes d’allocation: La pile (stack) et le tas (heap).

Allocation dynamique et gestion de la mémoire: Utilisation des fonctions d’allocation dynamique (malloc, calloc, realloc, free), allocation de tableaux et d’enregistrements dynamiques.

Chaînes de caractères: Chaînes littérales (const char *) et fonctions standard, distinction entre char * et char[], utilisation et tests.

Type de données abstraits : Introduction aux piles (t_pile) et aux files (t_file), première implémentation de ces modules à l’aide de tableaux, utilisation et tests.

9 à 13

Type de données abstraits (suite):  Introduction aux listes (t_liste), implémentation à l’aide de tableaux, utilisation et tests.

Chaînage dynamique: Références chaînées (nœuds), chaînage simple et chaînage double, implémentation et tests.

Piles et files dynamiques: Implémentation à l’aide du chaînage dynamique, utilisation et tests.

Listes chaînées (simple et double): Intérêt, fonctionnement, différentes implémentations (avec, obligatoirement, et sans position courante implicite), encapsulation des données et des traitements, utilisation et tests.

Fichiers textes et binaires: Utilisation du type FILE * et des fonctions classiques (fopen, fclose, feof, etc.), manipulation et tests.




Laboratoires et travaux pratiques

Trois heures de laboratoire par semaine pour un total de 36 heures.




Utilisation d'outils d'ingénierie

Nous utiliserons principalement le compilateur Visual C++, en évitant soigneusement toute bibliothèque ou fonction non conforme à la norme 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 au cours de la session.




Évaluation

Les dates de tenue des laboratoires notés indiquées dans ce tableau sont fournies à titre indicatif. En cours de session, votre enseignante ou enseignant vous informera à l’avance de tout changement apporté à l’horaire d’évaluation des laboratoires notés.

                     

Évaluation

Pondération

Semaine

Groupe 01

  Groupe 02

Examen intra 1

15%

5

29 mai 29 mai

Travail #1

10%

5 8 juin 8 juin

Examen intra 2

15%

9 7 juillet 3 juillet

Travail #2

12%

9 13 juillet 13 juillet

Travail #3

13%

13 7 août 7 août

Examen final
(3 heures)

35%

Période des examens finaux (p)

 

À propos des travaux pratiques:

  • Les travaux pratiques ont pour objectif de mettre en application, dans le cadre de problèmes réalistes, les concepts et méthodes de programmation enseignés en cours. Les étudiantes et étudiants doivent non seulement résoudre le problème posé, mais surtout respecter les standards de qualité et les bonnes pratiques vus en classe : normes de codage, décomposition en sous-programmes ou modules, lisibilité, cohérence et portabilité.
  • La cohérence des choix algorithmiques et l’optimalité des solutions mises en œuvre feront partie des critères d’évaluation. Il est important de noter que la simple exécution correcte du programme ne comptera pour au plus 40% de la note globale d’un travail pratique.
  • Pour chaque travail, l’enseignante ou l'enseignant précisera dans l’énoncé s’il doit être réalisé en équipe et, le cas échéant, la taille de l’équipe autorisée. Une seule remise de travail est attendue par équipe.
  • Dans le cas d’un travail en équipe, chaque membre se verra attribuer une note inférieure ou égale à celle de l’équipe, en fonction de son implication réelle. L’évaluation de cette implication est laissée à la discrétion de l’enseignante ou de l'enseignant.

À propos des examens:

  • Les examens se déroulent en présence.

À propos de l'examen final:

  • Il se fait sur papier.
  • Il est d'une durée de 3 heures.
  • Il se fait sans documentation et sans accès à Internet.

Double seuil: 

  • Une moyenne pondérée d'au moins 50?% est exigée pour l'ensemble des évaluations individuelles. Ce seuil constitue une condition nécessaire à la réussite du cours, mais il n’est pas suffisant à lui seul pour l’assurer.

À 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 29 mai 2025
2 1 7 juillet 2025
2 2 3 juillet 2025



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 manuel est laissé à la discrétion de l’étudiant(e). Voici toutefois quelques ouvrages portant sur le langage C, ainsi que certaines références plus spécialisées.

 

MANUEL RECOMMANDÉ:

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

Un excellent manuel, complet et rigoureux. Aucun aspect du langage n’est laissé au hasard. Tou(te)s les étudiant(e)s auraient avantage à se familiariser avec cet ouvrage qui fut utilisé pendant de nombreuses années dans le cadre du cours INF125.

 

RÉFÉRENCES SPÉCIALISÉES:

  • DRIX, Philippe. Le langage C ANSI – Vers une pensée objet en Java, 3e éd., InterÉditions, 1993.
    Destiné à un lectorat ayant déjà une certaine expérience en programmation (de préférence en Pascal), cet ouvrage mène progressivement vers la programmation orientée objet. Son approche et ses objectifs correspondent bien à l’esprit du cours. Son seul défaut est l’absence de contenu sur les structures de données.

  • HARBISON III, Samuel P. & STEELE JR., Guy L. C – A Reference Manual, 5e éd., Prentice Hall, 2002.
    Un manuel de référence précis et rigoureux, axé sur la portabilité et la maintenance du code en C. Il ne s’agit pas d’un guide d’apprentissage du langage, mais plutôt d’un ouvrage technique couvrant notamment la norme C99 — une rareté parmi les livres disponibles à ce jour.

  • BRASSARD, Gilles & BRATLEY, Paul. Algorithmique – Conception et analyse, Masson, 1987.
    Ce manuel avancé dépasse les objectifs du cours, mais présente un grand intérêt pour celles et ceux qui souhaitent approfondir les algorithmes sur les arbres et les graphes, ou explorer davantage les fondements de l’algorithmique.

  • KOENIG, Andrew. C Traps and Pitfalls, 5e éd., Addison-Wesley, 1989.
    Un petit ouvrage concis sur les erreurs courantes commises par les programmeurs en C. Bien que les notions présentées dépassent le contenu du cours, ce livre regorge d’informations essentielles que tout·e étudiant(e) devrait maîtriser à l’issue de la session.




Adresse internet du site de cours et autres liens utiles

S.O.




Autres informations

Les séances de cours et de travaux pratiques des cours-groupes offerts en mode hybride sont dispensées entièrement à distance. L’étudiant(e) inscrit à un tel cours-groupe n’a donc pas à se déplacer à l’École pendant la session, à l’exception des évaluations en présence indiquées dans la section « Évaluation ».