Ce module de formation est consacré à la programmation impérative structurée en langage C qui constitue l'un des cœurs du métier d'informaticien. Il requiert environ 60 h de cours et 120 h de travaux pratiques.
En termes de contenu, ce module est orienté vers l'informatique embarquée et l'Internet des objets W. Il introduit déjà des éléments de la syntaxe et quelques concepts du langage C++ pour pouvoir comprendre et coder des programmes de cartes à microcontrôleurs – notamment les cartes Arduino et compatibles.
En termes pédagogiques, ce module est conçu pour apporter des bases complètes en programmation impérative compilée (cf. chap. C1‑I ). Exigeant peu de prérequis, il peut aussi convenir à des faux débutants de divers horizons ayant le niveau d'un baccalauréat scientifique, technologique ou professionnel dans le domaine.
Pour des étudiants première année de STS CIEL‑IR , compte tenu du faible volume horaire des séances prévu par le référentiel de formation (cf. la page d'accueil administrative ), il est indispensable de fournir travail personnel :
- l'étude des parties de cours non exposées en détail par l'enseignant ;
- le codage des exercices non traités ou non achevés en séances de TP.
Structuration du module
Panneau latéral de navigation
Le panneau latéral de navigation (à gauche de la page) peut être fermé ou ouvert à volonté en cliquant sur respectivement sur le bouton
ou
(affiché à gauche dans le bandeau supérieur bleu).
Fermer le panneau est utile lorsque l'on travaille sur un écran à faible largeur.
Par défaut, toute page web du module s'ouvre en affichant dans le panneau latéral le sommaire général, c'est‑à‑dire la liste des chapitres de cours et des sujets de travaux pratiques, présentés sous forme d'hyper‑liens.
Alternativement, on peut aussi afficher la liste des sections de la page en cliquant sur le bouton
en haut à gauche.
Pour afficher à nouveau le sommaire général, il suffit de cliquer sur le bouton
.
Quant au bouton
, il affiche des liens utiles (cf. infra ).
Fiches de cours
Les fiches de cours sont hiérarchisées et structurées en grandes parties C1 à C7, conformément au sommaire ci‑contre.
Seules les parties C1 à C5 sont abordées durant la première année de STS CIEL.
Chaque fiche existe en deux versions. On passe de l'une à l'autre en cliquant sur le bouton INITIÉ/DÉBUTANT en haut à droite de la page (dans le bandeau fixe supérieur) :
- la version pour INITIÉ se veut aussi complète que possible ; elle doit servir de référence tout au long de la progression des étudiants (sur les deux années de formation), afin qu'ils soient capables :
- de coder tous les programmes demandés dans le cadre des sujets de TP, des devoirs, des projets… ;
- de comprendre n'importe quel programme qu'ils seraient amenés à lire sur une documentation, un forum ou un autre cours.
- la version pour DÉBUTANT est expurgée de certains détails (comme le paragraphe suivant) pour faciliter la première étude du cours ; elle peut aussi servir de base, mieux que la version complète, pour la recherche des éléments essentiels à retenir.
Bien évidemment, il n'est pas attendu des étudiants qu'ils maîtrisent ni même utilisent immédiatement tous les éléments présentés, même dans la version pour DÉBUTANT. Comme dans toute discipline scientifique et technique, les connaissances et leur compréhension ne s'acquièrent qu'avec beaucoup de pratique.
Pages d'exercices et de travaux pratiques
Pages d'exercices
Dans chaque partie du module, la page d'exercices s'efforce de mettre en application les éléments de cours présentés au fur et à mesure des chapitres. Toutefois, il n'y a pas de correspondance directe entre les numéros d'exercices et des chapitres.
Sauf indication spécifique, les programmes demandés en exercices peuvent être codés dans n'importe quel environnement de développement prenant en charge les langages C et C++. Néanmoins, il est recommandé d'utiliser la chaîne de compilation GCC ou son équivalent MinGW. Des consignes d'installation sont données au chapitre C1‑II.
À défaut de disposer d'un logiciel ou d'une chaîne de compilation installée sur son ordinateur, on peut avoir recours à un environnement de programmation en ligne, comme par exemple OnlineGDB .
Sujets de travaux pratiques
Comme les pages d'exercices, les sujets de travaux pratiques sont associés chacun à une partie du module, et non pas à un chapitre en particulier. Lorsqu'il y a plusieurs sujets, il est recommandé de les traiter dans l'ordre de leur numéro.
Jusqu'à la partie C4 incluses, les sujets de travaux pratiques demandent de créer des programmes de commande de cartes à microcontrôleur Arduino dans l’environnement de simulation en ligne Tinkercad . À une exception près (sujet de TP de la partie C1), aucun matériel électronique n'est alors requis.
Le choix de la simulation présente beaucoup d'intérêts pédagogiques. En particulier :
- la mise en œuvre est facilitée (les composants sont disponibles à volonté et leur câblage est beaucoup plus rapide à effectuer en simulation qu'en réalité) ;
- les risques de casse ou d'accident sont nuls (sachant que l'environnement simule quand même la destruction des circuits en cas d'erreur de branchement) ;
- l'étudiant peut éventuellement effectuer ou prolonger son travail à domicile puisque l'environnement est gratuit d'utilisation.
Mais il faut garder à l'esprit que, si pertinente soit elle, et malgré un bon niveau de réalisme, une telle simulation ne forme pas complètement à la pratique de l'électronique microprogrammée puisque certaines difficultés sont occultées. Les projets de deuxième année seront là pour combler cette lacune.
Prérequis et difficultés
Systématiquement, les prérequis des sujets d'exercices et de TP sont indiqués en haut de page dans un encadré rouge comme ici. De plus, à chaque question un peu technique, des liens de renvois vers les chapitres de cours correspondants ou des pages web d'information sont donnés pour faciliter le travail de recherche.
Les exercices ou questions dont le numéro est précédé par une astérisque * présentent une difficulté. Il faut en avoir conscience pour ne pas se décourager et il ne faut pas hésiter à demander de l'aide pour traiter ce point dans un délai raisonnable.
Spécifications et consignes
Chaque sujet de travaux pratiques fait l'objet de spécifications générales et, en plus, chaque exercice ou question fait l'objet de spécifications particulières (comportement, sortie attendue, etc.). Elles forment ce qu'on appelle le cahier des charges dans un contexte professionnel, c'est‑à‑dire ce que demande le client.
Le respect de toutes ces exigences est donc impératif. En effet, dans un contexte professionnel, en règle générale, aucun client n'accepte de payer pour une solution qu'il n'a pas négociée !
Des consignes supplémentaires sont également données (dans un encadré bleu comme ici), notamment pour le choix des identificateurs, et plus généralement pour inciter à l'adoption des bonnes pratiques de la programmation.
Il est vivement recommandé de les suivre, d'autant plus qu'elles facilitent le travail de l'enseignant pour rechercher d'éventuelles erreurs. En effet, cette tâche est d'autant plus difficile que chaque étudiant nomme différemment les éléments (variables, fonctions, etc.) de son programme.
Recommandations de travail et d'équipement personnel
Pour espérer acquérir de réelles compétences en langage C, en plus des séances en classe, il est indispensable de consacrer un temps personnel significatif – au moins 4 heures hebdomadaires – au codage.
Même en l'absence de demandes explicites sur le cahier de texte, il est impératif de terminer chez soi les programmes non achevés en classe. Il faut savoir faire preuve d'obstination – en particulier, bien lire les éventuels messages d'erreur du compilateurs – et ne surtout pas renoncer à la première difficulté.
En cas d'échec, il faut au moins être capable d'identifier de façon précise les problèmes et solliciter l'enseignant à la séance suivante.
Matériel informatique demandé
Les exigences de travail personnel supposent bien évidemment que l'étudiant dispose à domicile ordinateur personnel sur lequel peut s'exécuter un environnement de programmation (éditeur de code, chaîne de compilation). L'accès à l'Internet est également indispensable, ne serait‑ce que pour consulter très régulièrement ce site web.
Il n'est pas nécessaire que cet ordinateur personnel soit portable. En séances de travaux pratiques, le lycée met à la disposition de chaque étudiant un poste de travail fixe (machine x68‑64 de type tour) avec double système d'exploitation Windows/Linux et relié au réseau pédagogique. La procédure d'installation d'un système Linux à côté d'un système Windows effectuée en séance de travaux pratiques en début d'année est donnée au lien suivant . Il est possible de s'en inspirer pour obtenir un environnement de programmation comparable à domicile.
L'attribution du poste de travail est annuelle et l'étudiant dispose des droits d'administration nécessaires pour installer les logiciels de développement utilisés. Il peut aussi y stocker ses fichiers de programmes.
Il est simplement demandé de venir à chaque séance avec une clef USB personnelle pour sauvegarder les fichiers et pouvoir continuer le travail à domicile.
Pour renforcer ses compétences et se familiariser avec les aspects matériels, il est aussi recommandé de faire l'acquisition d'un kit de démarrage Arduino comme celui en photo ci‑contre, dont le prix plancher est d'environ 30 €. Avec ce matériel, il est alors possible d'expérimenter chez soi presque tous les sujets de travaux pratiques du module. Cela permet non seulement de consolider l'acquisition des compétences pratiques, mais aussi de combler les lacunes de la simulation à refléter la réalité dans toute sa complexité.
Pour éviter les pertes et les détériorations rapides des composants, il est vivement conseillé de disposer de boîtes de rangement, qu'on trouve aisément dans le commerce.
Supports pour la prise de notes
Ce site web tient lieu de documentation pédagogique et aucun tirage imprimé n'est fourni aux étudiants. Pour la prise de notes durant les cours ainsi que les recherches de solutions durant les travaux pratiques, il est vivement recommandé de se munir d'un simple cahier.
- En ce qui concerne les prises de notes en cours, il n'est pas pertinent d'écrire toutes les explications donnée par l'enseignant, mais simplement celles qui apportent un éclairage complémentaire sur telle ou telle notion. Pour retrouver facilement le contexte, il suffit de se référer à la numérotation adoptée sur la page web (par exemple, C2‑V 5.3 pour la syntaxe avancée de la boucle
for). - En ce qui concerne les recherches de solutions en travaux pratiques, le but est de pouvoir dessiner très facilement des schémas explicatifs, tant sur les aspects matériels que logiciels (structure de la mémoires, éléments de la syntaxe, etc. Le fait de travailler sur un cahier plutôt que sur des feuilles volantes leur donne une meilleure pérennité.
Évaluations
De façon dite « sommative », la progression des étudiants est évaluée par des QCM notés (sur 20), implémentés avec le logiciel ProNote. Il est donc impératif de disposer de ses identifiants via l'ENT ou un client ProNote pour pouvoir y participer.
Le but de ces évaluations est avant tout de permettre aux étudiants de mesurer la qualité des connaissances qu'ils ont acquises. Il serait contre‑productif de ne pas en respecter les règles.
Les QCM sont planifiés durant les séances en effectif réduit. Ils se déroulent :
- en temps limité (en général, une heure), mais largement suffisant pour répondre à toutes les questions sans se précipiter ;
- avec des questions tirées au hasard et dans un ordre différent pour chaque étudiant, sans possibilité de revenir en arrière afin d'empêcher quiconque de copier sur son voisin.
Pour chacune des parties C2 à C4 du module, trois QCM sont prévus.
- Deux QCM de connaissances portent exclusivement sur les encadrés sur fond bleu pâle (cf. infra ) d'une moitié des chapitres de la partie, et en version DÉBUTANT seulement.
- Un QCM de réflexion pose des questions techniques de programmation sur l'ensemble des chapitres de la partie. Ces questions nécessitent souvent de faire des calculs sur feuille de brouillon pour trouver la bonne réponse.
Par ailleurs :
- la partie C1, parce qu'elle est plus courte et beaucoup moins technique que les autres, fait l'objet d'un seul QCM de connaissances ;
- la partie C5 fait seulement l'objet de QCM de connaissances car le volume horaire ne permet pas de planifier des séances de travaux pratiques.
Liens hypertextes des pages web
Liens utiles dans le panneau latéral
En alternative du sommaire, une liste de liens est affichable dans le panneau latéral en cliquant sur le bouton
en haut à gauche.
Ils donnent un accès rapide à des tutoriels, des sites de références techniques – notamment les normes – ainsi que des environnements de programmation, certains permettant de tester en ligne des petits programmes.
Liens « au fil de l'eau » dans les pages
Dans les fiches de cours et les sujets de TP, d'autres liens sont donnés au fur et à mesure de la progression pour compléter ou rappeler certains aspects :
- des renvois à un passage du chapitre courant :
- [↑] vers un passage antérieur (supra),
- [↓] vers un passage ultérieur (infra) ;
- des renvois à un autre chapitre :
- [↰] vers un chapitre précédent,
- [↳] vers un chapitre suivant ;
- des renvois entre fiches de cours et sujets de TP :
- [→] vers un sujet de travaux pratiques,
- [←] vers une fiche de cours ;
- des liens externes au module [↗], en particulier :
- [W↗] vers l'encyclopédie libre Wikipedia ou une page du Wiktionnaire ;
- [Y↗] vers la plateforme de vidéo YouTube ;
- [A↗] vers le site d'Arduino ;
- [C↗] / [C++↗] vers un site de référence des langages étudiés ;
- [G↗] vers la plateforme de partage GitHub ;
à propos de cette plateforme, cf. W ; - [F↗] vers des forums spécialisés comme Stack Overflow ;
à propos de ce forum, cf. W.
Mise en forme et mode d'emploi des pages web
Encadrés et autres mises en forme des paragraphes
Dans toutes les pages de ce module de formation, les passages sur fond bleu pâle comme celui‑ci doivent être considérés comme importants, donc indispensables à retenir très rapidement.
Les passages délimités par une bordure gauche bleue pâle comme celui‑ci constituent des compléments nécessaires, parfois très utiles, mais dont il n'est pas possible d'exiger l'assimilation immédiate.
Les exemples sont délimités dans un cadre vert pâle comme celui‑ci pour être :
- repérés très vite, lorsque c'est précisément un exemple que l'on recherche ;
- ou au contraire défilés très vite, lorsqu'on recherche un élément fondamental du cours.
Le même principe vaut pour les remarques, qui sont délimitées dans un cadre marron pâle comme celui‑ci.
Les remarques sont réservées à la version INITIÉ et elles peuvent être survolées lors d'une première lecture. Néanmoins, elles évoquent souvent des aspects indispensable au bon approfondissement du cours. Il faut donc savoir y revenir ultérieurement.
Code des couleurs des éléments de texte
Dans toutes les pages de ce module de formation, des couleurs mettent en relief des éléments de texte avec une convention assez précise.
En règle générale, dans un passage délimité comme supra :
- la couleur bleue indique une portion de texte qui désigne l'objet du paragraphe ;
- la couleur bleue claire indique une portion de texte qui désigne un objet secondaire du paragraphe ;
- la couleur verte indique une portion de texte qui caractérise un objet désigné en couleur ;
- la couleur rouge indique une portion de texte qui appelle à une vigilance particulière ;
- la couleur rose indique une portion de texte qui exprime avantage, un aspect positif ;
- la couleur grise indique une portion de texte qui exprime un inconvénient, un aspect négatif ;
- les autres couleurs (orange, violet, magenta, turquoise, etc.) identifient respectivement divers aspects spéciaux du contexte ;
- tous les autres termes en noir italique gras sont d'une importance remarquable mais inférieure par rapport aux termes en couleur.
Toutefois, insistons sur le fait qu'il ne s'agit que de règles générales, ne présentant aucune intangibilité. Le bon sens pédagogique peut conduire à des adaptations différentes au gré des thèmes abordés.
Considérons le début de la première section du chapitre C2‑I .
Dans un environnement hébergé par un système d'exploitation (hosted environment), l'exécution d'un programme en langage C commence nécessairement par l'appel du code exécutable d'une fonction principale main, laquelle constitue son point d'entrée.
C'est la seule fonction qui n'a pas besoin d'être appelée dans le programme pour être exécutée. Elle est automatiquement appelée par le chargeur de programme du système, au début du processus d'exécution (cf. chap. C4‑IV ).
Remarque : « main » est ici l'adjectif anglais qui signifie justement « principal ».
Dans le cadre d'un programme multi‑fichiers, le fichier source dans lequel cette fonction est enregistrée constitue le fichier principal d'implémentation du programme. Il est souvent d'usage de le nommer main.c et a priori, on constitue un répertoire de projet pour y regrouper tous les fichiers source du programme. Dans ce répertoire, il est alors très facile de repérer où est codée la fonction principale main. C'est la procédure par défaut par certains IDE – notamment Code::Blocks.
Mais lorsqu'un programme n'est constitué que d'un seul fichier source et qu'on le compile « à la volée » dans un terminal de commande, il est plus pertinent de donner à ce fichier un nom plus explicite faisant référence à ce que fait le programme – en gardant néanmoins l'extension .c. Ainsi, on peut copier ce fichier dans un autre répertoire de projet sans crainte qu'il écrase son fichier principal.
▶ L'encadré important est consacré au fichier principal qui se caractérise principalement par une fonction principale, elle-même constituée d'instructions (deuxième niveau de décomposition).
▶ Les notions de point d'entrée et de répertoire de projet sont des aspects spéciaux récurrents qui prendront respectivement les mêmes couleurs dans les encadrés suivants, afin d'être repérés au premier coup d'œil.