Vous êtes sur la page 1sur 9

Les principes de lAlgorithmique et Programmation

Introduction
: traitement automatis e de linformation.

Informatique

Algorithme : ensemble de r` egles op eratoires dont lapplication permet de r esoudre un probl` eme en un nombre ni dop erations. Programme : s equences dinstructions et de donn ees enregistr ees sur un support et susceptibles d etre trait ee par un ordinateur. Donn ees : objets manipul es par le programme. Structures de Donn ees : organisation des donn ees dans des structures ayant une repr esentation x ee et des op erations dacc` es, modication,. . . Le programme est la traduction dun algorithme et des structures de donn ees dans un langage de programmation qui impose une syntaxe rigoureuse. Objectif de lanalyste programmeur : Ecrire un programme dans un langage donn e dont lex ecution permet de r esoudre un probl` eme. Exercice 1 Donner les avantages dun algorithme sur un programme. Donner les avantages dun programme sur un algorithme.

Exercice 2 Citer des exemples dalgorithmes.

Exercice 3 Le texte suivant est-il un algorithme ? Recette de la pate ` a choux : Ingr edients : 1/4 litre deau, 100g de beurre, 125g de farine, 4 oeufs,1 pinc ee de sel, 1 cuill er ee de sucre. Dans une casserole, faire bouillir leau avec le beurre, le sel le sucre. A la premi` ere ebullition, retirer la casserole du feu, et verser la farine. Tourner rapidement avec un ecuill` ere en bois en travaillant sur le feu jusqu` a ce quelle se d etache compl` etement de la casserole. Hors du feu ajouter les oeufs un ` a un en travaillant chaque fois la pr eparation avec la cuill` ere.

2
2.1

Les Langages
Constituants
Une langue : Syntaxe : cat egories de mots (noms, verbes, adjectifs,. . .), r` egles de grammaire ... Analyse lexicale permet de reconnaitre les mots de la langue. Analyse syntaxique permet de reconnaitre les phrases bien form ees. S emantique : une phrase bien form ee na pas toujours un sens. Cat egories de langages : langue naturelle : syntaxe et s emantique assez laxistes mais souple demploi. On peut se comprendre m eme avec des phrases peu orthodoxes et incorrectes. S emantique intuitive mais pouvant etre ambigue. Le r ecepteur est un etre humain intelligent et r eactif. langage informatique : syntaxe rigoureuse et rigide. La s emantique nest pas intuitive et met en oeuvre des cadres complexes (meme si les principes sont simples) et diciles ` a bien apprehender. Le r ecepteur est une machine denu ee dintelligence. langage de description dalgorithme : une syntaxe moins rigide mais assez stricte pour ne pas donner dambiguit e sur la s emantique de ce qui est d ecrit.

2.2

Un exemple

Probl` eme : Donner la table de conversion de franc en euro de 100 en 100 depuis 0 jusqu` a 1000 en utilisant un coecient de conversion de 6.56 Donn ees : somme en franc et euros Algorithme : r ep etition du calcul de conversion de 100 en 100 MIN=0 MAX=1000 INTER=100 COEF=6.56 franc=MIN Tant que franc <=MAX faire euro=franc/COEF afficher euro franc=franc+INTER fait Programmes C : /* File: conver.c Auteurs: Prof cree le 08 02 04 modifie le: 08 02 04 */ /* conversion des sommes en francs en euros */ /* affichage de 0 a 1000 par intervalle de 100 */ #include <stdio.h> 2

#define MIN 0 /*somme minimale a convertir */ #define MAX 1000 /*somme maximale a convertir */ #define INTER 100 /*intervalle entre deux sommes*/ #define COEF 6.56 /*coefficient de conversion */ int main () { float franc, euro; franc=MIN; while (franc <= MAX) { euro = franc / COEF; printf("somme: en franc %4.0f en euro %6.2f\n",franc, euro); franc=franc+INTER; } return 0; } Programme Python : def franc2euro(): " conversion des sommes en francs en euros \ affichage de 0 a 1000 par intervalle de 100" MIN=0 MAX=1000 INTER=100 COEF=6.56 franc=MIN while (franc<=MAX): euro=franc/COEF print "somme en franc: ",franc, "en euro: ",euro franc=franc+INTER Les deux programmes sont similaires mais di erents : lun est plus simple que lautre. Tous les deux sont d ecrits dans un langage imp eratif 1 et impl ementent un m eme algorithme de conversion qui repose sur la r ep etition dune op eration simple. Dans ce cours dinitiation, nous allons apprendre ` a ecrire des programmes en Python. Exercice 4 Trouver les exemples dalgorithmes les plus anciens connus. Calcul de surface (carr e, triangle,..), algorithme deuclide (1er siecle), des restes chinois. Exercice 5 D ecrire lalgorithme de r esolution dune equation du second degr e.

Langage et Machine

Pour commencer nous donnons la syntaxe des langages que nous utilisons. Nous donnons ` a la fois la syntaxe dun vrai langage informatique : Python et un langage de description dalgorithme.

3.1

Commentaires

Les commentaires servent ` a expliquer le comportement du programmes (en langue naturelle) et ne jouent aucun role dans le comportement du langage. #ce programme calcule la surface dun cercle
1. en fait python est un langage objet, mais on ne le verra que sous son aspect imp eratif

3.2

Les expressions

Les noms appel es identicateurs : d esignent des variables, fonctions,. . . eres (commen cant par une lettre Usuellement x, y, pi, taux de change,. . ., i.e. suite de caract` en g en eral) Les expressions : combinaisons de noms, valeur d enies, avec des op erateurs (pr ed enis dans le langage et fabriqu es par le concepteur du programme). pi*(r**2), x+z,. . . Exp ::= C | Idf | Exp op Exp |

Ici seuls des op erateurs binaires not es de mani` ere inx ee sont utilis es. La d enition s etend si on a des op erateurs unaires, ternaires,. . ., des appels de fonctions f (exp1 , . . . , expn ) (si f est lidenticateur notant une fonction qui a une arit e n). Certaines suites de caract` eres ne sont pas autoris ees comme identicateurs car ce sont des mots r eserv es : leur sens est pr ed eni et correspond ` a des constructions du langage. Exemple if, while, for,. . . Op erateurs classiques : Arithm etique :+,-,*,/, % Op erateur de comparaison (` a r esultat bool een V ou F) <, >, ==, <=, >= Op erateur bool een and, or (` a arguments et r esultat bool een) Ambiguit e : que signie 4+3*2 ? Pour lever les ambiguit es on utilise le parenth esage (4+3)*2 ou 4+(3*2) ou bien les r` egles de priorit e pr ed enies : **plus fort que *,/ plus forts que +,-. Sinon l evaluation se fait de Gauche ` a Droite en cas de m eme priorit e : 5*10/6 Exercice 6 Donner le r esultat de l evaluation de : 2**3*3-1, 8/2+3, 1-2*3+1

3.3

Constructions de base

Remarque : en python, lindentation fait partie de la syntaxe (elle remplace lutilisation de parenth` ese ou de mots cl e begin end). Instructions de base aectation : var=exp Python var=exp Sens intuitif : Donne la valeur de exp ` a var condition : si cond alors Ins1 sinon Ins2 fsi Python if cond: Ins1 else: Ins2 avec la variante elif en cas de suite de conditions Sens intuitif : si l evaluation de cond donne vrai on evalue Ins1 sinon on evalue Ins2. It eration : Tant que cond faire Inst fait Python : while cond: Inst Sens intuitif : Tant que evaluer cond donne vrai on eectue Inst Sequence : Ins1 Ins2 Python Ins1 Ins2 Sens intuitif : Ins1 est eectu ee suivie de Ins2 (si Ins1 termine). 4

Entree/sortie : x=input() output(x) Python x=input() ou x=raw_input() print x Appel de fonction : f (x1 , . . . , xn ) (si f est une fonction darit e n qui ne renvoie pas de r esultat, comme print ou read). Python x=f(x1,..;,xn) Si on veut utiliser une fonction qui renvoie une valeur, cela se fera en utilisant laectation x = f (exp1 , . . . , expn ). Notation graphique : elle permet de repr esenter la structure de contr ole du programme de mani` ere visuelle. Lobjet repr esent e est appel e le graphe de contr ole du programme.

true Affectation x:=exp x:=exp Conditionnelle if cond then Inst1 else Inst2 fi cond

false

While cond do Inst Inst1; Inst2 cond false true Inst Inst2 Inst1

Langage correspond ` a une syntaxe rigoureuse (/= langue nat). Un programme est source est une phrase de ce langage. Il reste une suite de caract` eres pouvant etre ecrite par un editeur et compr ehensible par lhumain. Un programme appel e compilateur traduit ce texte en un programme ex ecutable (binaire ou code objet) qui est un ensemble dinstructions machine (compr ehensible par la machine mais pas lhumain). Dans un langage interpret e le source est traduit ` a la vol ee en instruction machine. Source Python > compil e > bytecode > interpr et e > r esultat

3.4

Typage

Chaque variable a un type. Un type est un ensemble de valeurs (les entiers, les r eels,..) et chaque type correspond une repr esentation machine. Le type int correspond aux entiers repr esent es sur 32 bits (ou 64) de -2**31 ` a 2**31-1. Le type long correspond aux entiers de taille sup erieure. Le type oat correspond aux r eels repr esent es selon la norme IEEE sur 64 bits. Les types simples sont les types int long oat. Les autres types sont les types composites (ou complexes) chaines, listes,... Ils seront d ecrits plus en d etail ult erieurement. En Python le typage est dynamique : linterpr eteur calcule le type des variables ` a la vol ee sans que celui-ci doive etre d eclar e (comme en C, Java). Dans ces langage le typage est statique car il est calcul e` a la compilation du programme.

4
4.1

Mod` ele dex ecution


M emoire
M emoire dune machine adresse 0 1 ... 999 1000 case m emoire Environnement nom de variable x1 ... xn adresse 0 1 ... n ... 1000 case m emoire r eserv ee val1 valn

Le lien entre nom et adresse se fait lors de la compilation. Lex ecution du programme correspond se d enit en d ecrivant comment lenvironnement est modi e par les instructions du programme et comment les expressions sont calcul ees dans lenvironnement courant.

4.2

S emantique op erationnelle

Le s emantique op erationnelle est un mod` ele abstrait qui permet dassocier un sens pr ecis ` a un langage. On mod elise lenvironnement par une suite (x1 , v1 ), . . . , (xn , vn ) avec x1 , . . . , xn les variables du programme et v1 , . . . , vn des valeurs. E nv est lensemble des environnements et I lensemble des programmes (vus comme une suite dinstructions). Dans ce qui suit E d esigne un environnement (E E nv ). R` egle devaluation dune expression On consid` ere les expressions donn ees par la grammaire : Exp ::= C | Idf | Exp op Exp | avec C une valeur constante (dans R ou Z). La fonction eval(E,e) d ecrit comment donner une valeur ` a une expression e Exp dans un environnement E E nv . eval(E, C ) = C eval(E, xi ) = vi eval(E, e1 op e2 ) = v1 op v2 v1 = eval(E, e1 ), v2 = eval(E, e2 )

S emantique dun programme Le s emantique dun programme (suite dinstructions I ) est une fonction E nv, I E nv qui d ecrit comment calculer un environnement E se transforme en un environnement E quand on ex ecute I . eval(E, e) v (E, x = e) E[xv] Exemple : E = {(x, 1), (y, 1)} et I = x = y + x alors eval(E, x + y ) donne 0 et donc (E, x = y + x) {(x, 0), (y, 1)} eval(E, cond) = T rue E, I1 E (E, if cond then : I1 else I2 ) E eval(E, cond) = F alse E, I2 E (E, if cond then : I1 elseI2 ) E eval(E, cond) = T rue E, I E (E, while cond : I ) (E , while cond : I ) 6

eval(E, cond) = F alse (E, while cond : I ) E Une mani` ere compliqu ee dexprimer des choses naturelles ? Le mod` ele est plus int eressant quand on cherche ` a d enir fonctions du premier ordre ou dordre sup erieur, m ecanisme dexceptions,. . .ou quon veut d enir la s emantique dun langage objet. Dans ce mod` ele on voit qu evaluer une expression sans aecter le r esultat ne modie pas lenvironnement donc cest une op eration inutile. Mod` ele concret : voir cours dinitiation. Le compilateur ou linterpr eteur traduit le programme en instructions machine ex ecutables par le processeur. Les donn ees et les instructions sont charg ees dans les registres du CPU, registre compteur ordinal, compteur instruction, le registre et lUAL ex ecute. Ici tout est repr esentation binaire 0 ou 1.

De lAnalyse au Programme

Une fois d eni le probl` eme, on commence par identier et structurer les objets qui interviennent (les donn ees), puis on d etermine la m ethode permettant de r esoudre le probl` eme (lalgorithme), et enn on combine le tout en un programme. Ce processus se d ecrit par Programme= Structure de Donn ees + Algorithme (Loi de Wirth, dapr` es Niklaus Wirth) Poser et analyser le probl` eme. Cette etape sert ` a bien comprendre ce qui est ` a faire, permet de pr eciser certains points. Cela correspond ` a lanalyse du cahier des charges. Ecrire un programme permettant de trouver le cout du trajet le plus court entre deux stations de m etro Quels objets et quelles structures de donn ees ? Identier la mani` ere dont les objets intervenant dans le programme sont structur es et se repr esentent ` a laide de donn ees informatiques classiques : variables, chaines, listes, arbres, graphes,. . .qui correspondent ` a une repr esentation et des op erations sur ces repr esentations. Graphe des lignes de m etro avec op eration successeur, pr edeceseur, cout dune arete,. . . Un station est un noeud, sil y a un ligne passant entre deux stations on ajoute une ar ete (non-orient ee, c.a.d. quon peut la prendre dans chaque sens). La SD donne pour chaque station la liste des stations accessibles. Elle donne egalement pour chaque ar ete le cout de cette ar ete 2 . Quel Algorithme ? Quel est le m ecanisme de calcul qui va permettre de r esoudre le probl` eme (formule de calcul des solutions dune equation, exploration dun arbre de recherche,...). Il y a des techniques danalyse (descendante, ascendante, objet,...) qui permettent daner lanalyse jusqu` a obtenir une m ethode nutilisant que des constructions el ementaires qui se transposent facilement en des instructions de programmation. graphe,. . .) ` a partir des objets repr esent es dans les SD choisies. Ici on cherche une fonction trajetmin(s,t) qui renvoie le cout minimal entre s et t. Id ee de d epart : Partir de si et pour chaque successeur s calculer cout(si , s) + trajetmin(s, sf ) et garder la valeur minimale. Cette id ee doit etre ran ee : 1. Cas darr et du calcul (cas terminal) : s = t 2. Transformer garder la valeur minimale en une it eration calculant cette valeur. 3. Il ne faut pas tourner en rond : n ecessit e de marquer les sommets pour signaler quon ne doit pas revenir sur un sommet d ej` a visit e.
2. pour un graphe orient e, les ar etes ne sont pas sym etriques, (s,t) peut exister mais pas (t,s) et le co ut peut etre di erent entre (s,t) et (t,s)

4. Enlever le marquage une fois le calcul termin e. Cette premi` ere approche de lalgorithme impose de modier la structure de donn ee en ajoutant pour chaque sommet une marque (Vrai, Faux ou 0,1 ou ..) pour savoir si le sommet peut etre utilis e. Une version plus pr ecise de lalgorithme est : trajetmin(s,t) : # calcul du plus court chemin entre s et t #le graphe est suppos e connexe si s==t alors renvoyer le r esultat 0 sinon marquer s cout=+inni pour chaque successeur non marqu e s de s faire cout=min(cout, coutarete(s,s)+trajetmin(s,t)) fait demarquer(s) renvoyer le r esultat cout fsi Validation de lalgorithme Une fois un algorithme d etermin e il faut r epondre ` a plusieurs questions qui peuvent entrainer une remise en question de lalgorithme. Lalgorithme est il correct : Donne-t-il la bonne r eponse dans tous les cas ? R epondre ` a cette question est dicile et on se limitera ` a des preuves informelles dans le cadre de ce cours. Voir comment il traite les cas limite, faire un raisonnement informel pour prouver la correction sont essentiels ici. Est-ce que lalgorithme est susamment ecace : cela demande une analyse de complexit e. On se limitera aux cas facile dans ce cours. Est-ce que lalgorithme est facile a ` impl ementer ? Un algorithme simple est toujours pr ef erable. Passage au programme En utilisant une impl ementation des structures de donn ees et lalgorithme choisi, on peut passer aux instructions dans le langage de programmation choisi. Dans le cas pr ec edent, limpl ementation des structures de donn ees choisies se fera avec des listes qui permettront de r ealiser tous les op erations utilis ees dans lalgorithme. Validation du programme Une fois le programme ecrit, on le valide par un jeu de tests qui permet de constater que son comportement est conforme ` a la sp ecication (l enonc e du probl` eme). Eventuellement on corrige et on recommence. Les tests doivent aussi permettre de v erier que la solution trouv ee est acceptable en temps de calcul et place m emoire demand ee. Par exemple, lalgorithme d ecrit ci-dessus se rev` elera rapidement inecace pour des graphes de grande taille et il est n ecessaire den trouver de plus rapide (ce quon fera plus tard en utilisant des algorithmes reposant sur le principe de programmation dynamique).

Que retenir ?
Voici des questions auxquelles il faut savoir r epondre sans h esiter et qui portent sur les points importants ` a comprendre et retenir. Une r eponse syntaxiquement correcte ne sut pas, il faut aussi comprendre la question et savoir expliquer sa r eponse. Quel est le principe de fonctionnement dune machine Pourquoi doit-on apprendre un langage de programmation ? Quest-ce quun algorithme ? Quest-ce quun langage de programmation ? Quelle est la di erence entre langage de programmation et algorithme ?

A quoi sert un compilateur ? Quelle di erence entre un compilateur et un editeur de texte ? Quest-ce quun programme source ? Quest-ce quun ex ecutable ? Quest-ce quune donn ee ? une structure de donn ee ? Quelles sont les instructions de bases dun langage imp eratif ? Commment d ecrire un algorithme ?

Vous aimerez peut-être aussi