next up previous index
Next: Programmes et algorithmes Up: No Title Previous: No Title


Table des matières

Avant-propos



Computers in the future may weigh no more than 1.5 tons.

Popular Mechanics (1949)


There is no reason anyone would want a computer in their home.

Ken Olson, president, chairman and founder of Digital Equipment Corp. (1977)


We know that the most advanced computer in the world does not have a brain as sophisticated as that of an ant. True, we could say that of many of our relatives, but we only have to put up with them at weddings or special occasions.

Woody Allen





Les informaticiens, quand ils se font linguistes, distinguent la syntaxe, la sémantique, et la pragmatique d'un langage de programmation.

La syntaxe regroupe les règles lexicales et grammaticales de formation des programmes, qui permettent de décider si un texte est un << programme syntaxiquement correct >>, ou plus simplement, est un << programme >>, ou bien s'il comporte des << erreurs de syntaxe >>. Tout débutant doit se sentir rebuté par cette forme d'écriture et sa rigidité qui ne pardonne pas la moindre faute de frappe ; la connaissance des règles syntaxiques facilitera surtout le travail du compilateur. L'idéal serait d'appliquer ces règles sans jamais devoir les apprendre, en utilisant un éditeur de texte bien configuré (c'est-à-dire Emacs) en lisant beaucoup de programmes bien écrits et en procédant par imitation.

En matière de syntaxe, un souci de non-exhaustivité a été résolument appliqué. On ne trouvera pas certaines constructions de C qui sont désormais obsolètes ; d'autres constructions, qui ne sont à la portée que de programmeurs avertis, et pour des usages spécifiques, sont hors du propos de ce cours ; enfin, quelques-unes, qui ne présentent pas plus d'intérêt -- sinon de confort -- que de difficulté, ont été écartées pour préserver la légèreté de ce cours. On trouvera cependant en annexe la grammaire complète de C et du préprocesseur, à titre de référence.

La sémantique explicite la signification des programmes : quelle est la valeur d'une expression, quel est l'effet d'une instruction. C'est ici que résident les concepts réellement importants de la programmation, qui s'appliquent également à d'autres langages : évaluation, portée des déclarations, appel de fonction, modes d'allocation, etc. Les objectifs de sûreté et d'efficacité des programmes nécessitent une connaissance précise de la sémantique : celle-ci sera donc traitée dans ce cours, de façon très informelle mais assez complète. S'il arrive que le compilateur détecte de probables << erreurs de sémantique >>, c'est plutôt en recourant à un debugger que l'on constatera un comportement inattendu qui est le symptôme de ce type d'erreurs. On n'oubliera pas que la programmation est une science expérimentale.

Formes (syntaxiques) et concepts (sémantiques) ne suffisent pas pour apprendre à programmer. La pragmatique désigne la mise en pratique de ces formes et concepts : quelle construction utiliser dans tel contexte, comment l'utiliser, etc. La pragmatique est aux langages de programmation ce que la rhétorique fut au langage parlé pendant des siècles : un ensemble de règles de l'art, de recettes, d'exemples et d'usages que reconnaissent les programmeurs. L'ambition de ce cours est de faire partager des éléments, nécessairement disparates, de cette pragmatique de C.

Il faut encore avoir quelque chose à dire, pour écrire des programmes qui ont du sens. Les programmes de ce cours satisfont un unique objectif, qui est de résoudre des problèmes, au moyen d'algorithmes . Ceux-ci sont conçus, parfois par des informaticiens, et souvent par des spécialistes de la discipline dont émane le problème posé, qui maîtrisent des techniques de résolution spécifiques (par exemple en mathématiques appliquées). Ce cours ne serait qu'une carcasse décharnée s'il n'était ponctué de ces algorithmes, qui attestent du rôle de l'informatique dans le champ technique. Le lecteur est renvoyé à d'autres cours (probabilités, calcul scientifique, recherche opérationnelle, etc) pour leur élaboration. À l'exception de quelques résultats élémentaires, les algorithmes ne feront l'objet d'aucune étude (preuve de propriétés, analyse de complexité) : ce cours n'aborde donc pas l'algorithmique .


À une organisation hiérarchisée en chapitres, sections et sous-sections, j'ai préféré une structure linéaire en 90 sections[*], chacune assez courte. Le lecteur aura la liberté de suivre cette ligne du début à la fin, ou bien de parcourir des chemins jalonnés qui s'entrecroisent. Voici les principaux thèmes de cheminement :


Mes remerciements à Laurent Bouaziz, Gilbert Caplain, Jean-Philippe Chancelier, Daniel Hirschkoff, Mathieu Jaume, Renaud Keriven, Bernard Lapeyre et Thierry Salset pour leur relecture de ce texte et leurs nombreuses corrections et suggestions. L'annexe sur Pascal et C a été rédigée par Thierry Salset, et le guide pratique Unix par Daniel Hirschkoff. L'installation des logiciels et de l'environnement de travail a été effectuée par Renaud Keriven. La traduction de ce texte, de LATEX en HTML, et son installation sur le Web ont été réalisées par Jean-Philippe Chancelier.


René Lalement
Noisy-le-Grand, 16 septembre 1996


La deuxième édition avait vu l'apparition de compléments sur la syntaxe de C, l'allocation dynamique et les structures chaînées, et l'introduction de quelques notions de théorie de l'information, avec des applications à la compression.

Pour cette troisième édition, quelques additions ont encore été apportées à ce texte : la notion d'automate fini, de langage et d'expression rationnelle et d'analyse lexicale (§ 96, 25, 97), les graphes de jeu et les algorithmes minimax et $\alpha\beta$ (§ 80, 81, 82), des précisions sur la lecture et l'écriture sur fichiers, les différents modes d'accès et les flots d'octets (§ 104, 106, 107), et quelques indications sur la programmation orientée-objet (§ 108). Certaines de ces nouvelles sections proviennent de sujets de projet ou de travaux dirigés des membres de l'équipe enseignante, que je remercie pour leurs idées et leurs conseils.

Champs-sur-Marne, 11 août 1998


next up previous index
Next: Programmes et algorithmes Up: No Title Previous: No Title
Jean-Philippe Chancelier
9/29/1998