2017-04-07 15:28:36 +02:00
|
|
|
|
Avant propos
|
2017-04-10 12:25:40 +02:00
|
|
|
|
============
|
2017-03-18 16:37:36 +01:00
|
|
|
|
|
2017-04-10 12:25:40 +02:00
|
|
|
|
Introduction
|
|
|
|
|
~~~~~~~~~~~~
|
2017-03-18 16:37:36 +01:00
|
|
|
|
|
2017-04-12 10:22:44 +02:00
|
|
|
|
| "**Que nul n'entre ici s'il n'est géomètre**"
|
|
|
|
|
| Maxime apposée au porche d'entrée de l'École de Platon
|
2017-04-11 16:40:26 +02:00
|
|
|
|
|
|
|
|
|
|
2017-03-20 10:21:52 +01:00
|
|
|
|
- L'accent est mis sur l'approche **algorithmique scientifique**, dite algorithmique
|
|
|
|
|
algébrique. L'algorithmique est un sous-domaine de l'algèbre et des
|
|
|
|
|
approches modulaires (arithmétique modulaire...)
|
|
|
|
|
|
2017-04-07 15:28:36 +02:00
|
|
|
|
- Le point de vue mathématique étant assez exigeant, **aucun formalisme fort** de
|
2017-03-22 09:13:07 +01:00
|
|
|
|
l'algorithmique mathématique ne sera présenté. Aucun symbole mathématique donc, et
|
2017-03-20 10:21:52 +01:00
|
|
|
|
seulement du pseudo-code.
|
2017-03-22 09:13:07 +01:00
|
|
|
|
L'approche mathématique forte utilisant le formalisme mathématique de
|
|
|
|
|
l'algorithmique algébrique est en général enseignée en France uniquement aux cours
|
2017-03-20 10:21:52 +01:00
|
|
|
|
des grandes écoles.
|
|
|
|
|
|
|
|
|
|
- L'algorithmique présentée ici est donc délibérément pseudo-scientifique mais en revanche
|
2017-04-07 15:28:36 +02:00
|
|
|
|
ouverte au **multi-paradigme**. En général l'évocation d'un algorithme en pseudo code est toujours
|
2017-03-20 10:21:52 +01:00
|
|
|
|
réducteur car limité au style de programmation le plus à la mode actuellement, c'est-à-dire le
|
2017-04-07 15:28:36 +02:00
|
|
|
|
**style impératif**. Nous présenterons un éventail des plus grands paradigmes de programmation
|
|
|
|
|
existants. Nous nous limiterons à la **programmation impérative, fonctionnelle, modulaire,
|
|
|
|
|
générique et objet**. Nous envisagerons les structures de données et les structures de contrôle
|
2017-03-20 10:21:52 +01:00
|
|
|
|
spécifiques à chacun des styles évoqués.
|
|
|
|
|
|
2017-04-07 15:28:36 +02:00
|
|
|
|
- Et parce qu'un honnête programmeur doit avoir une vue d'ensemble de **l'état de son art**,
|
2017-03-20 10:21:52 +01:00
|
|
|
|
nous évoquerons un panorama des différents langages existants -- historiques et contemporains --
|
|
|
|
|
en les comparants les uns aux autres.
|
|
|
|
|
|
2017-04-11 16:40:26 +02:00
|
|
|
|
- Durant tout le cours, nous souhaitons proposer une pédagogie par l'exemple, et nous
|
2017-04-07 15:28:36 +02:00
|
|
|
|
limiterons l'exposé à deux langages d'implémentation des algorithmes : le **Python** pour la programmation
|
2017-04-11 16:40:26 +02:00
|
|
|
|
impérative modulaire et objet, et le **OCaml**, car nous évoquerons aussi certains points
|
|
|
|
|
de programmation fonctionnelle et modulaire, polymorphe et teintée de généricité.
|
|
|
|
|
|
|
|
|
|
Intérêt
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
|
2017-04-12 10:22:44 +02:00
|
|
|
|
| "**Il ne suffit pas d'avoir les mains propres, il faut avoir l'esprit pur.**"
|
|
|
|
|
| Thalès de Milet ; Sentences - VIe s. av. J.-C.
|
2017-04-11 16:40:26 +02:00
|
|
|
|
|
2017-04-12 10:22:44 +02:00
|
|
|
|
L'algorithmique en tant que rapport à la vérité et à la pensée juste et vraie,
|
2017-04-11 16:40:26 +02:00
|
|
|
|
en tant qu'art de découper un problème complexe en tâches élémentaires,
|
|
|
|
|
en tant qu'énoncés de compréhension et de sémantique,
|
|
|
|
|
est la seule chose vraiment profonde dans l'informatique. Le reste n'est que 0 ou 1.
|
|
|
|
|
Cette notion d'algorithme est profondément enracinée dans le désir humain de
|
|
|
|
|
transmettre des méthodes pour comprendre des problématiques,
|
2017-04-12 10:22:44 +02:00
|
|
|
|
qu'il s'agisse de processus scientifiques ou mathématiques, de secrets,
|
2017-04-11 16:40:26 +02:00
|
|
|
|
de philosophie ou de divination au sens des anciens Grecs.
|
|
|
|
|
De règles linguistiques, aussi, chez les Romains.
|
2017-04-10 12:25:40 +02:00
|
|
|
|
|
|
|
|
|
Objectifs de ce cours
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Il s'agit de :
|
|
|
|
|
|
2017-04-12 10:22:44 +02:00
|
|
|
|
- maîtriser et concevoir un algorithme de base,
|
|
|
|
|
- choisir une représentation appropriée des données,
|
2017-04-10 12:25:40 +02:00
|
|
|
|
- décomposer en sous-problèmes et affinements successifs,
|
2017-05-12 11:55:30 +02:00
|
|
|
|
- savoir organiser son code en fonctions et en modules.
|
2017-04-10 12:25:40 +02:00
|
|
|
|
|
|
|
|
|
Le développement raisonné d’algorithmes et leur implantation
|
|
|
|
|
permet d'acquérir les qualités suivantes :
|
|
|
|
|
|
2017-04-12 10:22:44 +02:00
|
|
|
|
+ Analyser et modéliser un problème, spécifier,
|
|
|
|
|
+ Exprimer une problématique, une solution ou un algorithme,
|
2017-04-10 12:25:40 +02:00
|
|
|
|
+ Traduire un algorithme dans un langage de programmation,
|
2017-04-12 10:22:44 +02:00
|
|
|
|
+ Concevoir une réponse à un problème précisément posé.
|