1/21 Algorithmique et programmation (Licence 1 - S2)
Algorithmique et programmation : introduction
Algorithmique et programmation (Licence 1 - S2) 2/21 Algorithmique et programmation (Licence 1 - S2) Introduction Base fondamentale de linformatique : Comment faire faire des actions com- pliques un ordinateur partir d actions simples ? Faire faire : il sagit dune description des actions, pas des actions elles-mmes ; un ordinateur : lordinateur est trs bte et trs rigoureux : il faut tre prcis, dtaill et intelligent. 3/21 Algorithmique et programmation (Licence 1 - S2) Algorithmique ou programmation Dnitions prliminaires : Lalgorithmique est ltude de la faon de dcrire et dcomposer des actions/calculs complexes en actions/calculs simples. Un algorithme est une telle dcomposition. La programmation est ltude de la traduction des algorithme dans un cadre com- prhensible pour un ordinateur. Un programme est donc une traduction. 4/21 Algorithmique et programmation (Licence 1 - S2) Notes historiques Premiers algorithmes connus : poque babylonienne (calculs commerciaux et scaux) ; Algorithme vient dune dformation latine du nom du mathmaticien musulman Muh . ammad ibn M usa al-Khwarizm (8me sicle), du nom dune province perse (ac- tuellement plutt en Ouzbkistan). Premire machine programmable en 1801 (mtier tisser Jacquard), notion dveloppe ensuite par Charles Babbage. 5/21 Algorithmique et programmation (Licence 1 - S2) Algorithmes ? Exemples dalgorithmes ? 1. Recette de cuisine. 2. Manuel de programmation dun enregistrement sur lecteur DVD. 3. Itinraire pour aller du bureau de la scolarit la salle de TP micro 3.1. 4. Multiplication de nombres dcimaux la main . 5. ... 6/21 Algorithmique et programmation (Licence 1 - S2) Quelques lments dalgorithmiques 1. Squentialit : descendre lescalier puis prendre droite, puis tout droit jusqu la sortie, puis traverser la route, puis... La squentialit permet de dcrire lxcution conscutives dinstructions. 2. Sous-programmes : prparer 250 grammes de pte brise ; regarder le produit des deux chires sur la table de multiplication ; ... Transformation dun bloc dinstructions en une instruction (rutilisable). Note : usage de paramtres. 3. Test : si vous voulez de la haute dnition, choisissez un enregistrement sans perte. 4. Boucle : prendre la 4me porte droite ; mlangez jusqu obtenir une prparation homogne ; rpter lopration pour chaque chire du nombre multiplier. Rptition dinstructions beaucoup de fois, ou un nombre inconnu de fois. 7/21 Algorithmique et programmation (Licence 1 - S2) Ce qui manque pour un algorithme 1. De la rigueur : pas de justication aux actions xcution bte ; aucune ambiguit possible ; excution reproductible. 2. Des donnes manipuler : nombres (entiers, ottants), chanes, ... 3. Un langage strict : le franais est naturellement ambigu... ... et beaucoup trop complexe... ... et beaucoup trop vaste. 8/21 Algorithmique et programmation (Licence 1 - S2) Langage algorithmique Traditionnellement, on crit les algorithmes dans un langage algorithmique (aussi appel pseudo-code ). Cest--dire un machin formalis en simili-langage naturel. Par exemple : lire a affecter 0 s pour i allant de 1 10 faire affecter i+s s afficher s Le langage algorithmique est essentiellement un langage de programmation sans certains dtails techniques utiliss par lordinateur (par exemple, les dclarations de variables). 9/21 Algorithmique et programmation (Licence 1 - S2) Approches de lalgorithmique Il existe plusieurs approches dans la rdaction des algorithmes (et des programmes) : imprative, fonctionnelle, oriente objet, dclarative, ... A savoir : toutes ces approches permettent de rsoudre les mmes problmes. Aucun nest plus expressif quun autre. Les dirences sont donc des questions de commodits. Dans ce cours nous prsenterons la forme classique de la programmation imprative. 10/21 Algorithmique et programmation (Licence 1 - S2) Et les programmes ? Langages de programmation : C, Basic, Java, Pascal, Caml, etc. et tous leurs drivs... Plusieurs milliers de langages de programmation ont t crs. Fonctionnalits direntes, approches direntes, capacits direntes... Choix du C : langage impratif classique, encore largement utilis, avec de nombreux drivs, libre. 11/21 Algorithmique et programmation (Licence 1 - S2) C Langage apparu en 1972 (Dennis Ritchie, Bell Labs), inspir de langages impratifs pr- cdents (B, Algol, FORTRAN...). Initialement li un systme dexploitation, Unix. Standardisations successives : 1978 (C K&R), 1989 (ANSI C), 1990 (C ISO), 1999 (C99). Langage plutt bas-niveau (proche du fonctionnement de la machine), ce qui le rend : + multi-usage, rapide, rpandu, basique (utilis pour crer les compilateurs et extensions dautres langages) ; moyennement portable, peu exible (dans un sens), peu rigoureux (donc demande de la rigueur de la part du programmeur), peu lisible. Certains drivs de C veulent corriger ces aspects (C++), dautres langages sen inspirent pour la syntaxe (Java). 12/21 Algorithmique et programmation (Licence 1 - S2) Un programme en C Un exemple de programme en C : int main() { #include <stdio.h> } return 0; puts("Mon premier programme."); Lecture pralable dun chier nomm stdio.h : permet la dclaration de la fonction puts. principale du programme). le corps de la fonction est entre les accolades. terminer par un point-virgule. Instructions : les instructions doivent se dclaration de la fonction main (fonction 13/21 Algorithmique et programmation (Licence 1 - S2) Compilation dition de lien Que faire du programme C (cas des TPs sous Linux) : int main() { #include <stdio.h> } return 0; puts("Mon premier programme."); monprog.o monprog gcc c monprog.c gcc o monprog monprog.o monprog.c Programme C dition de liens : Fichier objet : dcrit le contenu de la fonction main. Fichier excutable : peut tre directement excut par la machine. Ne dit pas ce quest (ou ce que fait) puts. Compilation (ligne de commande) : 14/21 Algorithmique et programmation (Licence 1 - S2) Commande globale Pour simplier, on peut faire directement lensemble compilation dition de lien en une seule ligne : gcc -Wall -o monprog monprog.c gcc est le nom sous Linux du compilateur (au sens large) C. monprog.c est le nom du chier contenant le programme (extension .c obligatoire). -o monprog indique le nom de lexcutable crer (option -o suivie du nom du pro- gramme). -Wall indique que le compilateur doit acher tout ce qui lui semble bizarre sous forme davertissement (option indispensable en TP). Si la compilation se passe sans problme, gcc nache rien. Sinon, il est obligatoire de regarder les messages (avertissements ou erreurs) gnrs. Comprendre ces messages et (ventuellement) corriger leurs causes sont un objectif des TPs. 15/21 Algorithmique et programmation (Licence 1 - S2) Excution du programme Le chier monprog tant cr dans le rpertoire courant, on tape ./monprog suivi de la touche entre . La rponse donne : Mon premier programme. 16/21 Algorithmique et programmation (Licence 1 - S2) Exemples derreurs/avertissements (1) Programme : int main() { puts("Mon premier programme."); } Rsultat de gcc -Wall : a.c: In function main: a.c:2: attention : dclaration implicite de la fonction puts a.c:3: attention : contrle a atteint la fin non void de la fonction Deux avertissements dans la fonction main : 1. Ligne 2 : il ne connat pas la fonction puts. Cela signie que la ligne #include <stdio.h> est manquante. 2. Ligne 3 : cet avertissement (un peu compliqu) na pas dimportance pour linstant et peut tre ignor (cas unique). Il sera expliqu plus tard. 17/21 Algorithmique et programmation (Licence 1 - S2) Exemples derreurs/avertissements (2) Programme : int main() { putf("Mon premier programme."); } Rsultat de gcc -Wall : a.c: In function main: a.c:2: attention : dclaration implicite de la fonction putf a.c:3: attention : contrle a atteint la fin non void de la fonction /tmp/cc6qdDma.o(.text+0xf): In function main: : undefined reference to putf collect2: ld a retourn 1 code dtat dexcution 18/21 Algorithmique et programmation (Licence 1 - S2) Deux avertissements et une erreur dans la fonction main : 1. Ligne 2 : il ne connat pas la fonction putf. Cette fonction nexiste pas. 2. Ligne 3 : comme la dernire fois, on ignore cet avertissement. 3. Lerreur est crite dans un code bizarre : en fait, cest une erreur de ldition de liens : il ne sait pas ce quest putf. A corriger donc. Les avertissements nempchent pas la gnration du programme mais indiquent que le code est douteux ou bizarre. Les erreurs bloquent la gnration du programme. 19/21 Algorithmique et programmation (Licence 1 - S2) Exemples derreurs/avertissements (3) Autres exemples (erreurs de compilation) : 1. oubli du ; la n de puts : a.c:5: erreur: erreur de syntaxe avant un lment lexical } Cette erreur est donne sur la ligne suivante. Penser vrier le code qui prcde. 2. oubli de laccolade fermante } : a.c:4: erreur: erreur de syntaxe la fin de lentre Erreur donne sur un programme incomplet . Ce type doubli peut tre beaucoup plus complexe trouver, do lintrt de bien prsenter son code. 3. mauvaise orthographe de main (par exemple maan) : /usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/crt1.o(.text+0x21): In function _start: : undefined reference to main collect2: ld a retourn 1 code dtat dexcution Un programme C complet a besoin dune fonction main pour fonctionner. 20/21 Algorithmique et programmation (Licence 1 - S2) Objectifs du cours 1. Connatre les points principaux dun langage algorithmique. 2. Simuler lxcution dun algorithme (drouler un algorithme). 3. crire soi-mme un algorithme. Connatre certains algorithmes classiques (recherches, tris...). 4. Connatre les bases du langage C. 5. Programmer en C. 21/21 Algorithmique et programmation (Licence 1 - S2) Site web Cours sur http://www.lisyc.univ-brest.fr/pages_perso/dmasse.