Aller au contenu

Avant-Propos¤

À qui s'adresse cet ouvrage ?¤

Conçu comme un résumé du savoir nécessaire à l'ingénieur pour s'initier à la programmation et prendre en main le langage C, cet ouvrage n'est pas un manuel de référence. Il se réfère à de nombreuses ressources internet et livres que le lecteur pourra consulter au besoin pour approfondir certains concepts.

Chaque chapitre est composé d'exercices, mais à des fins pédagogiques, l'intégralité des solutions n'est pas fournie ; certains exercices sont destinés à être faits en études.

Cet ouvrage est destiné aux étudiants futurs ingénieurs de première année n'ayant aucune expérience en programmation.

Cours d'informatique cursus bachelor¤

Ce cours d'informatique à la HEIG-VD est donné par le département TIN dans les cours du cursus Bachelor en Génie Électrique. Il concerne tout particulièrement les étudiants des cours suivants :

  • Informatique 1 (INFO1) - 101 Première année
  • Informatique 2 (INFO2) - 102 Première année
  • Microinformatique (MICROINFO) - 101 Première année

Quel programmeur êtes-vous ?¤

Les études en écoles d'ingénieurs sont souvent cloisonnées. On observe, entre les différentes facultés (électronique, informatique, etc.), que l'enseignement de l'informatique s'inscrit dans une culture distincte avec un langage spécifique. Les informaticiens, dotés d'un esprit d'abstraction remarquable, acquièrent des connaissances approfondies du fonctionnement interne des systèmes d'exploitation et possèdent une expertise étendue en programmation. Néanmoins, ils manquent parfois d'une expérience pratique avec le matériel électronique et les contraintes imposées par des architectures matérielles légères (systèmes embarqués, microcontrôleurs, etc.). Les électroniciens, quant à eux, disposent d'une compréhension approfondie des systèmes à bas niveau. Ils ont une vision pragmatique des systèmes et des contraintes matérielles. Cependant, ils manquent souvent de connaissances poussées en programmation et en algorithmique.

Ces deux profils, bien que complémentaires, ont souvent du mal à se comprendre. Les informaticiens perçoivent les électroniciens comme trop terre-à-terre, tandis que les électroniciens jugent les informaticiens trop abstraits. Des divergences d'opinions peuvent émerger de ces différences culturelles, notamment dans des notions communes dont les définitions varient. Par exemple, la notion de temps réel diffère pour un informaticien et un électronicien. Pour un informaticien, le temps réel désigne un système qui répond dans un délai déterminé pour un utilisateur (environ 100 ms). Pour un électronicien, le temps réel désigne un système qui répond dans un délai déterminé et qui est déterministe (environ 100 µs).

Un autre exemple est la complexité algorithmique. Pour un informaticien, la complexité algorithmique mesure la performance d'un algorithme en termes généraux. Un accès à un dictionnaire est en \(O(1)\), même s'il implique le calcul d'un sha256, une opération triviale sur un ordinateur. Pour un électronicien, il est impossible de réaliser un sha256 sur un microcontrôleur 8 bits, ce qui l'incite à rechercher des optimisations profondes de l'algorithme, quitte à le rendre moins générique et modulaire.

Cet ouvrage a pour objectif de rapprocher ces deux cultures en fournissant aux électroniciens les bases de la véritable informatique, de la programmation et de sa culture, en rendant accessibles des concepts complexes tels que les arbres et les graphes.

Organisation de l'ouvrage¤

Recherche¤

Pour faciliter la recherche d'informations, vous pouvez utiliser la barre de recherche en haut à droite de la page. Vous pouvez également utiliser les raccourcis clavier pour naviguer plus rapidement (voir ci-dessous). Notez que recherche est instantanée et vous permet de trouver des informations dans le texte, les titres et les liens.

Theme¤

Selon votre préférence, vous pouvez choisir entre deux thèmes pour la lecture de ce livre (clair ou sombre ). Pour changer de thème, cliquez sur l'icône à gauche de la barre de recherche.

Raccourcis clavier¤

Pour améliorer votre navigation sur ce site, voici quelques raccourcis clavier que vous pouvez utiliser :

F, S, /

Ouvre la barre de recherche

P, ,

Va à la page précédente

N, .

Va à la page suivante

B

Afficher/cacher les tables des matières

M

Afficher/cacher le menu

H

Afficher/cacher la table des matières

Cookies¤

Ce site utilise des cookies pour sauvegarder vos préférences de thème ainsi que votre progression dans les exercices.

Des information d'analyse de fréquentation sont également collectées pour améliorer le contenu de ce livre.

Conventions d'écriture¤

Encodage de caractère¤

Il sera souvent fait mention dans cet ouvrage la notation du type 1F4A9, il s'agit d'une notation Unicode qui ne dépend pas d'un quelconque encodage. Parler du caractère ASCII 234 est incorrect, car cela dépend de la table d'encodage utilisée ; en revanche, la notation Unicode est plus précise.

La notation est cliquable et vous redirigera vers le site symbl.cc.

Expressions régulières¤

Les expressions régulières sont utilisées pour décrire des motifs de texte. Elles sont utilisées pour rechercher, remplacer ou valider des chaînes de caractères. Les expressions régulières sont utilisées dans de nombreux langages de programmation, d'outils de recherche et de traitement de texte.

Aussi dans cet ouvrage, les expressions régulières sont mises en évidence avec /regex/. Le lien mène au site regex101.com. Pour tester les expressions régulières, il vous suffit alors d'ajouter votre propre texte pour tester l'exemple donné.

Symbole d'égalité¤

Nous verrons que le signe d'égalité = peut aisément être confondu avec l'opérateur d'affectation du langage C qui s'écrit de la même manière. Dans certains exemples où l'on montre une égalité entre différentes écritures, le signe d'égalité triple 2261 sera utilisé pour dissiper toute ambiguïté éventuelle :

'a' ≡ 0b1100001 ≡ 97 ≡ 0x61 ≡ 00141

Symbole de remplissage¤

Dans les exemples qui seront donnés, on pourra voir while (condition) { } ou le caractère 3030 indique une continuité logique d'opération. Le symbole exprime ainsi ... (points de suspension ou ellipsis). Or, pour ne pas confondre avec le symbole C ... utilisé dans les fonctions à arguments variables tels que printf.

Types de données¤

Les conventions C s'appliquent à la manière d'exprimer les grandeurs suivantes :

Encadrés¤

Des encadrés sont utilisés pour mettre en avant des informations complémentaires ou des astuces. Ils sont également utilisés pour donner des informations sur des concepts avancés ou des détails techniques.

Info

Fait historique où information complémentaire pour ceux qui voudraient en savoir plus.

Avertissement

Point important à faire attention qui source d'erreur fréquente.

Danger

Note importante qui comporte des risques à considérer.

Exemple

Exemple pratique pour illustrer un concept.

Note

Corollaire à retenir.

Astuce

Truc ou Astuce pour faciliter la compréhension.

Bogue

Limitations ou bugs possibles d'une méthode proposée.

Exercice 1 : Quelle icône ?

Quelle icône est utilisée pour les exercices ?

Anglicismes¤

Parler l'informatique ou de technologies sans utiliser d'anglicismes est un exercice difficile. Il est parfois moins lourd de parler de hardware que de matériel informatique. Certains termes n'ont pas de traduction en français. Par exemple, le terme set appliqué à un ensemble de données n'a pas de traduction crédible en français. La table ci-dessous montre quelques termes qui seront utilisés dans cet ouvrage :

Anglicismes
Anglais Français Préférence
byte octet byte
debug déverminer debug
hardware matériel informatique hardware
listing extrait de code listing
pipe tube pipe
process processus processus
seekable positionnable seekable
set ensemble set
software logiciel informatique software
stream flux de données stream

Notons que byte et octet ne sont pas exactement synonymes. Un byte est un ensemble généralement admis de 8 bits mais dont la taille a pu varier selon les années, alors qu'un octet est un ensemble de 8 bits sans exception. En pratique, les deux termes sont souvent utilisés de manière interchangeable. En anglais il n'existe pas de mot pour octet.

Les termes anglais sont généralement indiqués en italique.

Le contenu de ce livre est sous licence Creative Commons. Vous êtes libre de partager et d'adapter ce contenu pour toute utilisation, même commerciale, à condition de citer l'auteur et de partager vos travaux dérivés sous la même licence.

De nombreuses références et sources de ce livre sont issues de Wikipedia, de la documentation officielle de la norme C, de StackOverflow, de forums de discussion et de blogs.

Comment contribuer ?¤

Vous avez remarqué une erreur, une faute de frappe ou une information manquante ? Vous auriez désiré une explication plus détaillée sur un sujet ? Vous pouvez contribuer à l'amélioration de ce livre en soumettant une issue. Alternativement, vous pouvez faire un fork du projet et proposer une pull request. Ce travail est donc une œuvre vivante qui évolue avec le temps et les contributions de chacun.

La version imprimée sera néanmoins figée à un moment donné, mais la version en ligne sera toujours mise à jour.

Colophon¤

Ce livre est écrit en Markdown et généré en HTML par MkDocs. Le thème utilisé est Material for MkDocs. Les sources sont disponibles sur GitHub et l'hébergement est assuré par GitHub Pages.

La plupart des illustrations sont réalisées avec Draw.io, un outil de dessin vectoriel en ligne. Les schémas sont rendus dans le navigateur avec GraphViewer. Les diagrammes utilisent la technologie Mermaid. Les autres sources d'images sont issues en grande partie de Wikimedia Commons et Wikipedia.

La génération de l'ouvrage en PDF utilise son propre convertisseur vers LaTeX. Les extraits de code sources sont colorés avec Pygments en utilisant le paquet minted.

L'orthographe et la grammaire ont été revues avec Antidote.