# Algorithmique impérative/Avant-propos
## Introduction

« Les ordinateurs sont inutiles, ils ne savent que donner des réponses. » (Pablo Picasso).

## À qui s'adresse ce livre ?

Ce livre s'adresse aux étudiants démarrant une formation autour de l'informatique théorique, c'est à dire principalement dans un cadre universitaire, en début de premier cycle.
Ce livre n'a pas pour objectif d'enseigner la programmation vite fait bien fait, à des lecteurs qui voudraient obtenir des résultat rapidement. Si vous souhaitez apprendre à programmer et être vite opérationnel, la présente lecture vous ennuiera et ne vous mènera pas là où vous voulez aller. Nous vous recommandons particulièrement de vous tourner vers un ouvrage tel que « Programmation Python » qui devrait parfaitement convenir.

## Conseils de lecture

Selon vos motivations, vous n'aborderez pas le sujet de la même façon :

### aux étudiants débutant une licence universitaire en informatique

    il s'agit ici d'aborder les fondations du savoir que vous allez acquérir tout au long de votre cursus. Ne le négligez à aucun prix (au niveau international, on peut parler des formations en Computer sciences)

### aux étudiants débutant une formation d'ingénieur ou une préparation aux écoles d'ingénieurs

    pour ces étudiants : l'importance de notre sujet dépend de la proximité de la formation avec l'informatique.

### aux étudiants universitaires des formations scientifiques "pures"

    mathématiciens, physiciens, chimistes, biologistes... : vous aborderez peut-être ce sujet comme première approche de l'informatique. Il ne vous sera pas familier de prime abord mais c'est néanmoins un sujet scientifique qui ne devrait donc pas vous dérouter étant donné votre bagage mathématique. Il y a sûrement des étudiants en informatique sur votre lieu de formation (UFR, faculté...) : profitez de leur caractère habituellement accueillant ; vous pourrez sûrement trouver des étudiants informaticiens qui seront ravis de vous aider. Si vous avez accès à une bibliothèque universitaire, elle contient sûrement des ouvrages qui peuvent vous servir. Conseil : certains problèmes posés seront peut-être trop « matheux » pour vous. Travaillez plutôt les exercices proposés dans votre formation qui traiteront de notions plus familières.

### aux linguistes

    vous allez surement être rebutés par ces lectures bien éloignées de votre littérature habituelle. Néanmoins, sachez qu'il n'y a que peu de prérequis à cette étude et que vos « faibles » acquis mathématiques (disons de niveau baccalauréat Série L pour la France) seront suffisants. Conseil : jetez un œil aux premiers problèmes posés mais ne vous souciez pas des suivants trop « matheux » pour vous. Attachez-vous cependant à bien comprendre ce nouveau langage, sa syntaxe et sa sémantique en insistant sur la partie « Théorie de l'algorithmique impérative ».

### aux étudiants de formations professionalisantes BTS, DUT en rapport direct avec l'informatique

    vous allez en fait apprendre un (plusieurs ?) langage(s) impératif(s) dans votre formation. Cependant, vous allez surtout aborder l'aspect « pratique » des choses. Ce wikilivre vous permettra de prendre de la hauteur par rapport à vos programmes et de les voir de façon plus abstraite. Concrètement, vous utiliserez votre langage au mieux parce que vous verrez mieux les simplifications possibles : cela allégera d'autant votre travail. Conseil : ne vous concentrez pas trop sur la syntaxe du langage théorique qui sera présenté dans cette ouvrage (vous aurez tôt fait de l'oublier). En effet, vous apprendrez sûrement un ou plusieurs langages dans votre formation (apprenez-les bien, car buter sur des questions de syntaxe est aussi tragique que buter sur des fautes de français au cours d'une dissertation de philosophie). Concentrez-vous donc plutôt sur l'aspect algorithmique des problèmes : comment cela se déroule, comment obtient-on le résultat (...simplement) sans vous soucier du langage que nous allons utiliser. Prenez quand même le temps de faire le parallèle entre les deux langages : cela ne devrait pas prendre trop de temps ni être trop difficile, étant donné que les langages reprennent des concepts les uns aux autres (concepts que nous avons généralisés ici dans notre langage théorique : les similitudes devraient être assez flagrantes).

## À propos de cet ouvrage

L'algorithmique impérative est souvent la première forme d'algorithmique que l'on aborde car elle est la plus intuitive. C'est en fait l'abstraction des concepts propres aux langages de programmation impératifs. L'étude de l'algorithmique impérative permet donc d'aborder les langages typiquement impératifs d'une façon plus rigoureuse.
Afin d'aborder le sujet de façon complète, ce document se compose de trois parties :
* Une partie théorique qui présente les divers aspects de l'algorithmique impérative et la façon de les exploiter.
* Une partie sur les outils de travail de l'algorithmicien.
* Des problématiques concrètes, une analyse simple puis approfondie du problème et de ses solutions.

## Petit historique

Comme dans tout cours scientifique qui se respecte, il serait judicieux de contextualiser ce que nous allons aborder dans cet ouvrage. L'étude étant assez fastidieuse, nous allons la réduire au strict minimum. Surtout pour une science si jeune et si vieille à la fois. Ce que nous abordons exploite des concepts dont le plus récent est la Programmation structurée, concept d'Edsger Dijkstra qui publia à ce sujet en 1968. La justesse de ses conclusions rendit la programmation structurée populaire dès 1970. Bien qu'aujourd'hui de nouveaux concepts soient apparus, les conclusions d'Edsger Dijkstra n'ont jamais été remises en cause et ces principes sont encore en œuvre dans les langages de programmation actuels. Nous voici satisfaits pour la partie humaine, quitte à ne retenir qu'une date et un nom, en voici de bons.
Pour la partie technique maintenant, le langage de programmation Pascal, que nous aborderons tout au long de l'ouvrage, a été développé par Niklaus Wirth dans les années 1970 pour suivre dans les faits les théories de Dijkstra. Il a été créé avant tout, à des fins pédagogiques, afin d'éviter d'enseigner la programmation structurée avec un langage de l'époque, qui ne respecterait pas ces concept alors nouveaux. Pour l'anecdote, vous vous en doutiez sûrement, ce nom a été choisi en hommage au mathématicien français Blaise Pascal.
Désolé d'avoir fait si court, nous vous invitons à lire les articles Programmation impérative et Pascal sur Wikipédia.