Académique Documents
Professionnel Documents
Culture Documents
Cours Algorithmique
Cours Algorithmique
ii
Cours Algorithmique Auteur : Christophe Darmangeat
PARTIE 1
4. Expressions et oprateurs------------------------------------------------------------------------------------------------ 19
4.1. Oprateurs numriques : ---------------------------------------------------------------------------------------------------------- 20 4.3. Oprateurs logiques (ou boolens) : --------------------------------------------------------------------------------------------- 21
PARTIE
2 (LECTURE ET CRITURE)------------------------------------------------------------------------------- 23
PARTIE 3
1. De quoi sagit-il ? ---------------------------------------------------------------------------------------------------------- 26 2. Structure dun test -------------------------------------------------------------------------------------------------------- 27 3. Quest ce quune condition ? -------------------------------------------------------------------------------------------- 28 4. Conditions composes ---------------------------------------------------------------------------------------------------- 29 5. Tests imbriqus ------------------------------------------------------------------------------------------------------------ 31 6. De laiguillage la gare de tri------------------------------------------------------------------------------------------- 32 7. Variables Boolennes ----------------------------------------------------------------------------------------------------- 34
PARTIE 4
(ENCORE DE LA LOGIQUE)----------------------------------------------------------------------------- 35
iii
Cours Algorithmique Auteur : Christophe Darmangeat
PARTIE 5
1. A quoi cela sert-il donc ?------------------------------------------------------------------------------------------------- 40 2. Boucler en comptant, ou compter en bouclant ---------------------------------------------------------------------- 43 3. Des boucles dans des boucles-------------------------------------------------------------------------------------------- 45 4. Et encore une btise ne pas faire ! ----------------------------------------------------------------------------------- 46
PARTIE 6
1. Utilit des tableaux -------------------------------------------------------------------------------------------------------- 49 2. Notation et utilisation algorithmique---------------------------------------------------------------------------------- 49 3. Tableaux dynamiques ---------------------------------------------------------------------------------------------------- 52
PARTIE 7
1. Tri dun tableau : le tri par insertion --------------------------------------------------------------------------------- 55 2. Un exemple de flag : la recherche dans un tableau----------------------------------------------------------------- 56 3. Tri de tableau + flag = tri bulles ------------------------------------------------------------------------------------- 58 4. La recherche dichotomique --------------------------------------------------------------------------------------------- 60
PARTIE 8
(TABLEAUX MULTIDIMENSIONNELS)----------------------------------------------------------------- 62
1. Pourquoi plusieurs dimensions ?--------------------------------------------------------------------------------------- 62 2. Tableaux deux dimensions -------------------------------------------------------------------------------------------- 63 3. Tableaux n dimensions------------------------------------------------------------------------------------------------- 66
PARTIE 9
1. Structure gnrale des fonctions --------------------------------------------------------------------------------------- 67 2. Les fonctions de texte ----------------------------------------------------------------------------------------------------- 68 3. Trois fonctions numriques classiques -------------------------------------------------------------------------------- 70 4. Les fonctions de conversion --------------------------------------------------------------------------------------------- 73
PARTIE 10
1.
2. Structure des enregistrements ------------------------------------------------------------------------------------------ 75 3. Types daccs --------------------------------------------------------------------------------------------------------------- 76 4. Instructions (fichiers texte en accs squentiel) --------------------------------------------------------------------- 77 5. Stratgies de traitement -------------------------------------------------------------------------------------------------- 80 6. Donnes structures------------------------------------------------------------------------------------------------------- 81
6.1. Donnes structures simples------------------------------------------------------------------------------------------------------ 81 6.2. Tableaux de donnes structures------------------------------------------------------------------------------------------------- 83
7. Rcapitulatif gnral------------------------------------------------------------------------------------------------------ 84
PARTIE 11
(PROCDURES ET FONCTIONS)--------------------------------------------------------------------- 87
1. Fonctions personnalises------------------------------------------------------------------------------------------------- 87
1.1. De quoi s'agit-il ? ------------------------------------------------------------------------------------------------------------------ 87 1.2. Passage d'arguments --------------------------------------------------------------------------------------------------------------- 89
2. Sous-Procdures ----------------------------------------------------------------------------------------------------------- 91
iv
Cours Algorithmique Auteur : Christophe Darmangeat
PARTIE 12
1. Programmation structure --------------------------------------------------------------------------------------------- 101 2. Interprtation et compilation ------------------------------------------------------------------------------------------ 102 3. Une logique vicelarde : la programmation rcursive ------------------------------------------------------------- 103
ANNEXE
1
Cours Algorithmique Auteur : Christophe Darmangeat
Les ordinateurs sont comme les dieux de lAncien Testament : avec beaucoup de rgles, et sans piti.
Joseph Campbell
Compter en octal, cest comme compter en dcimal, si on nutilise pas ses pouces
Tom Lehrer
Cest bien connu, les ordinateurs sont comme le gros rock qui tche : ils sont binaires. Mais ce qui est moins connu, cest ce que ce qualificatif de binaire recouvre exactement, et ce quil implique. Aussi, avant de nous plonger dans les arcanes de lalgorithmique proprement dite, ferons-nous un dtour par la notion de codage binaire. Contrairement aux apparences, nous ne sommes pas loigns de notre sujet principal. Tout au contraire, ce que nous allons voir prsent constitue un ensemble de notions indispensables lcriture de programmes. Car pour parler une machine, mieux vaut connatre son vocabulaire
2
Cours Algorithmique Auteur : Christophe Darmangeat
Ne donnons pas derniers exemples au hasard : ce sont prcisment ceux dont se sert un ordinateur pour stocker lensemble des informations quil va devoir manipuler. En deux mots, la mmoire vive (la RAM ) est forme de millions de composants lectroniques qui peuvent retenir ou relcher une charge lectrique. La surface dun disque dur, dune bande ou dune disquette est recouverte de particules mtalliques qui peuvent, grce un aimant, tre orientes dans un sens ou dans lautre. Et sur un CD-ROM, on trouve un long sillon troit irrgulirement perc de trous. Toutefois, la coutume veut quon symbolise une information binaire, quel que soit son support physique, sous la forme de 1 et de 0. Il faut bien comprendre que ce nest l quune reprsentation, une image commode, que lon utilise pour parler de toute information binaire. Dans la ralit physique, il ny a pas plus de 1 et de 0 qui se promnent dans les ordinateurs quil ny a crit, en lettres gantes, Ocan Atlantique sur la mer quelque part entre la Bretagne et les Antilles. Le 1 et le 0 dont parlent les informaticiens sont des signes, ni plus, ni moins, pour dsigner une information, indpendamment de son support physique. Les informaticiens seraient-ils des gens tordus, possdant un got immodr pour labstraction, ou pour les jeux intellectuels alambiqus ? Non, pas davantage en tout cas que le reste de leurs contemporains non-informaticiens. En fait, chacun dentre nous pratique ce genre dabstraction tous les jours, sans pour autant trouver cela bizarre ou difficile. Simplement, nous le faisons dans la vie quotidienne sans y penser. Et force de ne pas y penser, nous ne remarquons mme plus quel mcanisme subtil dabstraction est ncessaire pour pratiquer ce sport. Lorsque nous disons que 4+3=7 (ce qui reste, normalement, dans le domaine de comptence mathmatique de tous ceux qui lisent ce cours !), nous manions de pures abstractions, reprsentes par de non moins purs symboles ! Un tre humain dil y a quelques millnaires se serait demand longtemps quest-ce que cest que quatre ou trois , sans savoir quatre ou trois quoi ? . Mine de rien, le fait mme de concevoir des nombres, cest--dire de pouvoir considrer, dans un ensemble, la quantit indpendamment de tout le reste, cest dj une abstraction trs hardie, qui a mis trs longtemps avant de simposer tous comme une vidence. Et le fait de faire des additions sans devoir prciser des additions de quoi ? , est un pas supplmentaire qui a t encore plus difficile franchir. Le concept de nombre, de quantit pure, a donc constitu un immense progrs (que les ordinateurs nont quant eux, toujours pas accompli). Mais si concevoir les nombres, cest bien ; possder un systme de notation performant de ces nombres, cest encore mieux. Et l aussi, lhumanit a mis un certain temps (et essay un certain nombre de pistes qui se sont rvles tre des impasses) avant de parvenir au systme actuel, le plus rationnel. Ceux qui ne sont pas convaincus des progrs raliss en ce domaine peuvent toujours essayer de rsoudre une multiplication comme 587 x 644 en chiffres romains, on leur souhaite bon courage !
3
Cours Algorithmique Auteur : Christophe Darmangeat
connaissons plus les rgles. Mais ce nest pas trs compliqu de les reconstituer Et cest l que nous mettons le doigt en plein dans la deuxime caractristique de notre systme de notation numrique : son caractre dcimal. Lorsque nous crivons 9562, de quel nombre est-ce que nous parlons ? Dcomposons la lecture chiffre par chiffre, de gauche droite : 9562, cest 9000 + 500 + 60 + 2. Allons plus loin, mme si cela parat un peu bbte : 9000 500 60 2 cest 9 x 1000 cest 5 x 100 cest 6 x 10 cest 2 x 1 parce que le 9 est le quatrime chiffre en partant de la droite parce que le 5 est le troisime chiffre en partant de la droite parce que le 6 est le deuxime chiffre en partant de la droite parce que le 2 est le premier chiffre en partant de la droite
On peut encore crire ce mme nombre dune manire lgrement diffrente. Au lieu de : 9 562 = 9 x 1 000 + 5 x 100 + 6 x 10 + 2, On crit que : 9 562 = (9 x 10 x 10 x 10) + (5 x 10 x 10) + (6 x 10) + (2) Arrivs ce stade de la comptition, toutes nos excuses aux allergiques, mais il nous faut employer un petit peu de jargon mathmatique. Ce nest pas grand-chose, et on touche au but. Alors, courage ! En fait, ce jargon se rsume au fait que les matheux notent la ligne ci-dessus laide du symbole de puissance . Cela donne : 9 562 = 9 x 103 + 5 x 102 + 6 x 101 + 2 x 100 Et voil, nous y sommes. Nous avons dgag le mcanisme gnral de la reprsentation par numrotation de position en base dcimale. Alors, nous en savons assez pour conclure sur les consquences du choix de la base dcimale. Il y en a deux, qui nen forment en fin de compte quune seule : parce que nous sommes en base dcimale, nous utilisons un alphabet numrique de dix symboles. Nous nous servons de dix chiffres, pas un de plus, pas un de moins. toujours parce nous sommes en base dcimale, la position dun de ces dix chiffres dans un nombre dsigne la puissance de dix par laquelle ce chiffre doit tre multipli pour reconstituer le nombre. Si je trouve un 7 en cinquime position partir de la droite, ce 7 ne reprsente pas 7 mais 7 fois 104, soit 70000. Un dernier mot concernant le choix de la base dix. Pourquoi celle-l et pas une autre ? Aprs tout, la base dix ntait pas le seul choix possible. Les babyloniens, qui furent de brillants mathmaticiens, avaient en leur temps adopt la base 60 (dite sexagsimale). Cette base 60 impliquait certes dutiliser un assez lourd alphabet numrique de 60 chiffres. Mais ctait somme toute un inconvnient mineur, et en retour, elle possdait certains avantages non ngligeables. 60 tant un nombre divisible par beaucoup dautres (cest pour cette raison quil avait t choisi), on pouvait, rien quen regardant le dernier chiffre, savoir si un nombre tait divisible par 2, 3, 4, 5, 6, 10, 12, 15, 20 et 30. Alors quen base 10, nous ne pouvons immdiatement rpondre la mme question que pour les diviseurs 2 et 5. La base sexagsimale a certes disparu en tant que systme de notation des nombres. Mais Babylone nous a laiss en hritage sa base sexagsimale dans la division du cercle en soixante parties (pour compter le temps en minutes et secondes), et celle en 6 x 60 parties (pour les degrs de la gomtrie et de lastronomie).
4
Cours Algorithmique Auteur : Christophe Darmangeat
Alors, pourquoi avons-nous adopt la base dcimale, moins pratique bien des gards ? Nul doute que cela tienne au dispositif matriel grce auquel tout tre humain normalement constitu stocke spontanment une information numrique : ses doigts !
Une information binaire (symbolise couramment par 0 ou 1) sappelle un bit. Un groupe de huit bits sappelle un octet (en anglais, byte)
Combien dtats diffrents un octet possde-t-il ? Le calcul est assez facile (mais il faut nanmoins savoir le refaire). Chaque bit de loctet peut occuper deux tats. Il y a donc dans un octet : 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 28 = 256 possibilits. Cela signifie quun octet peut servir coder 256 nombres diffrents : ce peut tre la srie des nombres entiers de 1 256, ou de 0 255, ou de 127 +128. Cest une pure affaire de convention, de choix de codage. Mais ce qui nest pas affaire de choix, cest le nombre de possibilits : elles sont 256, pas une de plus, pas une de moins, cause de ce quest, par dfinition, un octet. Si lon veut coder des nombres plus grands que 256, ou des nombres ngatifs, ou des nombres dcimaux, on va donc tre contraint de mobiliser plus dun octet. Ce nest pas un problme, et cest trs souvent que les ordinateurs procdent ainsi. En effet, avec deux octets, on a 256 x 256 = 65 536 possibilits. En utilisant trois octets, on passe 256 x 256 x 256 = 16 777 216 possibilits. Et ainsi de suite, on ne mattardera pas davantage sur les diffrentes manires de coder les nombres avec des octets. On abordera de nouveau brivement le sujet un peu plus loin. Cela implique galement quun octet peut servir coder autre chose quun nombre : loctet est trs souvent employ pour coder du texte. Il y a 26 lettres dans lalphabet. Mme en comptant diffremment les minuscules et les
5
Cours Algorithmique Auteur : Christophe Darmangeat
majuscules, et mme en y ajoutant les chiffres et les signes de ponctuation, on arrive un total infrieur 256. Cela veut dire que pour coder convenablement un texte, le choix dun caractre par octet est un choix pertinent. Se pose alors le problme de savoir quel caractre doit tre reprsent par quel tat de loctet. Si ce choix tait librement laiss chaque informaticien, ou chaque fabricant dordinateur, la communication entre deux ordinateurs serait un vritable casse-tte. Loctet 10001001 serait par exemple traduit par une machine comme un T majuscule, et par une autre comme une parenthse fermante ! Aussi, il existe un standard international de codage des caractres et des signes de ponctuation. Ce standard stipule quel tat de loctet correspond quel signe du clavier. Il sappelle lASCII (pour American Standard Code for Information Interchange). Et fort heureusement, lASCII est un standard universellement reconnu et appliqu par les fabricants dordinateurs et de logiciels. Bien sr, se pose le problme des signes propres telle ou telle langue (comme les lettres accentues en franais, par exemple). LASCII a par le problme en rservant certains codes doctets pour ces caractres spciaux chaque langue. En ce qui concerne les langues utilisant un alphabet non latin, un standard particulier de codage a t mis au point. Quant aux langues non alphabtiques (comme le chinois), elles payent un lourd tribut linformatique pour navoir pas su voluer vers le systme alphabtique Revenons-en au codage des nombres sur un octet. Nous avons vu quun octet pouvait coder 256 nombres diffrents, par exemple (cest le choix le plus spontan) la srie des entiers de 0 255. Comment faire pour, partir dun octet, reconstituer le nombre dans la base dcimale qui nous est plus familire ? Ce nest pas sorcier ; il suffit dappliquer, si on les a bien compris, les principes de la numrotation de position, en gardant lesprit que l, la base nest pas dcimale, mais binaire. Prenons un octet au hasard : 11010011 Daprs les principes vus plus haut, ce nombre reprsente en base dix, en partant de la gauche : 1 x 27 + 1 x 2 6 + 0 x 2 5 + 1 x 2 4 + 0 x 2 3 + 0 x 2 2 + 1 x 2 1 + 1 x 2 0 = 1 x 128 + 1 x 64 + 1 x 16 + 1 x 2 + 1 x 1 = 128 + 64 + 16 + 2 + 1 = 211 Et voil ! Ce nest pas plus compliqu que cela ! Inversement, comment traduire un nombre dcimal en codage binaire ? Il suffit de rechercher dans notre nombre les puissances successives de deux. Prenons, par exemple, 186. Dans 186, on trouve 1 x 128, soit 1 x 27. On retranche 128 de 186 et on obtient 58. Dans 58, on trouve 0 x 64, soit 0 x 26. On ne retranche donc rien. Dans 58, on trouve 1 x 32, soit 1 x 25. On retranche 32 de 58 et on obtient 26. Dans 26, on trouve 1 x 16, soit 1 x 24. On retranche 16 de 26 et on obtient 10. Dans 10, on trouve 1 x 8, soit 1 x 23. On retranche 8 de 10 et on obtient 2. Dans 2, on trouve 0 x 4, soit 0 x 22. On ne retranche donc rien.
6
Cours Algorithmique Auteur : Christophe Darmangeat
Dans 2, on trouve 1 x 2, soit 1 x 21. On retranche 2 de 2 et on obtient 0. Dans 0, on trouve 0 x 1, soit 0 x 20. On ne retranche donc rien.
Il ne nous reste plus qu reporter ces diffrents rsultats (dans lordre !) pour reconstituer loctet. On crit alors quen binaire, 186 est reprsent par : 10111010
4. Le codage hexadcimal
Pour en finir avec ce prambule (sinon, cela deviendrait de la gourmandise), on va voquer un dernier type de codage, qui constitue une alternative pratique au codage binaire. Il sagit du codage hexadcimal, autrement dit en base seize. Pourquoi ce choix bizarre ? Tout dabord, parce que le codage binaire, ce nest tout de mme pas trs conomique, ni trs lisible. Pas trs conomique : pour reprsenter un nombre entre 1 et 256, il faut utiliser systmatiquement huit chiffres. Pas trs lisible : parce que dinterminables suites de 1 et de 0, on a dj vu plus folichon. Alors, une alternative toute naturelle, ctait de reprsenter loctet non comme huit bits (ce que nous avons fait jusque l), mais comme deux paquets de 4 bits (les quatre de gauche, et les quatre de droite). Voyons voir cela de plus prs. Avec 4 bits, nous pouvons coder 2 x 2 x 2 x 2 = 16 nombres diffrents. En base seize, 16 nombres diffrents se reprsentent avec un seul chiffre (de mme quen base 10, dix nombres se reprsentent avec un seul chiffre).
Quels symboles choisir pour les chiffres ? Pour les dix premiers, on na pas t chercher bien loin : on a recycl les dix chiffres de la base dcimale. Les dix premiers nombres de la base seize scrivent donc tout btement 0, 1, 2, 3, 4, 5, 6, 7, 8, et 9. L, il nous manque encore 6 chiffres, pour reprsenter les nombres que nous crivons en dcimal 10, 11, 12, 13, 14 et 15. Plutt quinventer de nouveaux symboles (ce quon aurait trs bien pu faire), on a recycl les premires lettres de lalphabet. Ainsi, par convention, A vaut 10, B vaut 11, etc. jusqu F qui vaut 15.
Or, on saperoit que cette base hexadcimale permet une reprsentation trs simple des octets du binaire. Prenons un octet au hasard : 10011110 Pour convertir ce nombre en hexadcimal, il y a deux mthodes : lune consiste faire un grand dtour, en repassant par la base dcimale. Cest un peu plus long, mais on y arrive. Lautre mthode consiste faire le voyage direct du binaire vers lhexadcimal. Avec lhabitude, cest nettement plus rapide ! Premire mthode : On retombe sur un raisonnement dj abord. Cet octet reprsente en base dix : 1 x 27 + 0 x 2 6 + 0 x 2 5 + 1 x 2 4 + 1 x 2 3 + 1 x 2 2 + 1 x 2 1 + 0 x 2 0 = 1 x 128 + 1 x 16 + 1 x 8 + 1 x 4 + 1 x 2 + 0 x 1 =
7
Cours Algorithmique Auteur : Christophe Darmangeat
128 + 16 + 8 + 4 + 2 = 158 De l, il faut repartir vers la base hexadcimale. Dans 158, on trouve 9 x 16, cest--dire 9 x 161. On retranche 144 de 158 et on obtient 14. Dans 14, on trouve 14 x 1, cest--dire 14 x 160. On y est. Le nombre scrit donc en hexadcimal : 9 E
Deuxime mthode : Divisons 1 0 0 1 1 1 1 0 en 1 0 0 1 (partie gauche) et 1 1 1 0 (partie droite). 1 0 0 1, cest 8 + 1, donc 9 1 1 1 0, cest 8 + 4 + 2 donc 14 Le nombre scrit donc en hexadcimal : 9 E. Cest la mme conclusion quavec la premire mthode. Encore heureux !
Le codage hexadcimal est trs souvent utilis quand on a besoin de reprsenter les octets individuellement, car dans ce codage, tout octet correspond seulement deux signes.
Allez, assez bavard, on passe aux choses srieuses : les arcanes de lalgorithmique
8
Cours Algorithmique Auteur : Christophe Darmangeat
INTRODUCTION A LALGORITHMIQUE
Un langage de programmation est une convention pour donner des ordres un ordinateur. Ce nest pas cens tre obscur, bizarre et plein de piges subtils. a, ce sont les caractristiques de la magie.
Dave Small
Lalgorithmique est un terme dorigine arabe, comme algbre, amiral ou znith. Ce nest pas une excuse pour massacrer son orthographe, ou sa prononciation. Ainsi, lalgo nest pas rythmique , la diffrence du bon rockn roll. Lalgo nest pas non plus lagglo .
Alors, ne confondez pas lalgorithmique avec lagglo rythmique, qui consiste poser des parpaings en cadence.
Un algorithme, cest une suite dinstructions qui, une fois excute correctement, conduit un rsultat donn. Si lalgorithme est juste, le rsultat est le rsultat voulu, et le touriste se retrouve l o il voulait aller. Si lalgorithme est faux, le rsultat est, disons, alatoire, et dcidment, cette saloperie de rpondeur ne veut rien savoir.
Compltons toutefois cette dfinition. Aprs tout, en effet, si lalgorithme, comme on vient de le dire, nest quune suite dinstructions menant celui qui lexcute rsoudre un problme, pourquoi ne pas donner comme instruction unique :
9
Cours Algorithmique Auteur : Christophe Darmangeat
rsous le problme , et laisser linterlocuteur se dbrouiller avec a ? A ce tarif, nimporte qui serait champion dalgorithmique sans faire aucun effort. Pas de a, ce serait trop facile. Le malheur (ou le bonheur, tout dpend du point de vue) est que justement, si le touriste vous demande son chemin, cest quil ne le connat pas. Donc, si on nest pas un goujat intgral, il ne sert rien de lui dire de le trouver tout seul. De mme les modes demploi contiennent gnralement (mais pas toujours) un peu plus dinformations que dbrouillez vous pour que a marche .
Pour fonctionner, un algorithme doit donc contenir uniquement des instructions comprhensibles par celui qui devra lexcuter. Cest dailleurs lun des points dlicats pour les rdacteurs de modes demploi : les rfrences culturelles, ou lexicales, des utilisateurs, tant variables, un mme mode demploi peut tre trs clair pour certains et parfaitement abscons pour dautres.
En informatique, heureusement, il ny a pas ce problme : les choses auxquelles on doit donner des instructions sont les ordinateurs, et ceux-ci ont le bon got dtre tous strictement aussi idiots les uns que les autres.
La matrise de lalgorithmique requiert deux qualits, trs complmentaires dailleurs : il faut avoir une certaine intuition, car aucune recette ne permet de savoir a priori quelles instructions permettront dobtenir le rsultat voulu. Cest l, si lon y tient, quintervient la forme dintelligence requise pour lalgorithmique. Alors, cest certain, il y a des gens qui possdent au dpart davantage cette intuition que les autres. Cependant, les rflexes, cela sacquiert. Et ce quon appelle lintuition nest finalement que de lexprience tellement rpte que le raisonnement, au dpart laborieux, finit par devenir spontan . il faut tre mthodique et rigoureux. En effet, chaque fois quon crit une srie dinstructions quon croit justes, il faut systmatiquement se mettre la place de la machine qui va les excuter, pour vrifier si le rsultat obtenu est bien celui que lon voulait. Cette opration ne requiert pas la moindre once dintelligence. Mais elle reste nanmoins indispensable, si lon ne veut pas crire laveuglette. Et petit petit, force de pratique, vous verrez que vous pourrez faire de plus en plus souvent lconomie de cette dernire tape : lexprience fera que vous verrez le rsultat produit par vos instructions, au fur et mesure que vous les crirez. Naturellement, cet apprentissage est long, et demande des heures de travail patient. Aussi, dans un premier temps, vitez de sauter les tapes : la vrification de chacun de vos algorithmes doit tre considre comme la moiti du travail accomplir.
10
Cours Algorithmique Auteur : Christophe Darmangeat
Lunivers lexical Shadok, cest bien connu, se limite aux termes Ga , Bu , Zo , et Meu . Ce qui leur a tout de mme permis de formuler quelques fortes maximes, telles que : Mieux vaut pomper et quil ne se passe rien,
Enfin, les ordinateurs, quels quils soient, ne sont fondamentalement capables de comprendre que quatre catgories d'ordres (en programmation, on n'emploiera pas le terme d'ordre, mais plutt celui d'instructions). Ces quatre familles d'instructions sont : laffectation de variables ; la lecture / criture ; les tests ; les boucles.
Un algorithme informatique se ramne donc toujours au bout du compte la combinaison de ces quatre petites briques de base. Il peut y en avoir quelques unes, quelques dizaines, et jusqu plusieurs centaines de milliers dans certains programmes de gestion. Rassurez-vous, nous nirons pas jusque l (cependant, la taille dun algorithme ne conditionne pas en soi sa complexit : de longs algorithmes peuvent tre finalement assez simples, et de petits trs compliqus).
4. Algorithmique et programmation
Pourquoi apprendre lalgorithmique pour apprendre programmer ? En quoi a-t-on besoin dun langage spcial, distinct des langages de programmation comprhensibles par les ordinateurs ? Parce que lalgorithmique exprime les instructions rsolvant un problme donn indpendamment des particularits de tel ou tel langage. Pour prendre une image, si un programme tait une dissertation, lalgorithmique serait le plan, une fois mis de ct la rdaction et lorthographe. Or, vous savez quil vaut mieux faire dabord le plan et rdiger ensuite, que linverse
Apprendre lalgorithmique, cest apprendre manier la structure logique dun programme informatique. Cette dimension est prsente quelle que soit le langage de programmation ; mais lorsquon programme dans un langage (en C, en Visual Basic, etc.) on doit en plus se colleter les problmes de syntaxe, ou de types dinstructions, propres ce langage. Apprendre lalgorithmique de manire spare, cest donc srier les difficults pour mieux les vaincre.
11
Cours Algorithmique Auteur : Christophe Darmangeat
A cela, il faut ajouter que des gnrations de programmeurs, souvent autodidactes (mais pas toujours, hlas !), ayant directement appris programmer dans tel ou tel langage, ne font pas mentalement clairement la diffrence entre ce qui relve de la structure logique gnrale de toute programmation (les rgles fondamentales de lalgorithmique) et ce qui relve du langage particulier quils ont appris. Ces programmeurs, non seulement ont beaucoup plus de mal passer ensuite un langage diffrent, mais encore crivent bien souvent des programmes qui mme sils sont justes, restent laborieux. Car on nignore pas impunment les rgles fondamentales de lalgorithmique Alors, autant lapprendre en tant que telle !
12
Cours Algorithmique Auteur : Christophe Darmangeat
A lorigine de toute erreur attribue lordinateur, vous trouverez au moins deux erreurs humaines. Dont celle consistant attribuer lerreur lordinateur.
Anonyme
Les langages informatiques plus volus (ce sont ceux que presque tout le monde emploie) se chargent prcisment, entre autres rles, dpargner au programmeur la gestion fastidieuse des emplacements mmoire et de leurs adresses. Et, comme vous commencez le comprendre, il est beaucoup plus facile demployer les tiquettes de son choix, que de devoir manier des adresses binaires.
13
Cours Algorithmique Auteur : Christophe Darmangeat
En pseudo-code algorithmique, on est bien sr libre du nombre de signes pour un nom de variable, mme si pour des raisons purement pratiques, on vite gnralement les noms rallonge. Lorsquon dclare une variable, il ne suffit pas de crer une bote (rserver un emplacement mmoire) ; encore doit-on prciser ce que lon voudra mettre dedans, car de cela dpendent la taille de la bote (de lemplacement mmoire) et le type de codage utilis.
Bref, le type de codage (autrement dit, le type de variable) choisi pour un nombre va dterminer : les valeurs maximales et minimales des nombres pouvant tre stocks dans la variable la prcision de ces nombres (dans le cas de nombres dcimaux).
Tous les langages, quels quils soient offrent un bouquet de types numriques, dont le dtail est susceptible de varier lgrement dun langage lautre. Grosso modo, on retrouve cependant les types suivants : Type Numrique Byte (octet) Entier simple Entier long Rel simple Plage 0 255 -32 768 32 767 -2 147 483 648 2 147 483 647 -3,40x1038 -1,40x1045 pour les valeurs ngatives 1,40x10-45 3,40x1038 pour les valeurs positives 1,79x10308 -4,94x10-324 pour les valeurs ngatives 4,94x10-324 1,79x10308 pour les valeurs positives
Rel double
Pourquoi ne pas dclarer toutes les variables numriques en rel double, histoire de btonner et dtre certain quil ny aura pas de problme ? En vertu du principe de lconomie de moyens. Un bon algorithme ne se contente pas de marcher ; il marche en vitant de gaspiller les ressources de la machine. Sur certains programmes de grande taille, labus de variables surdimensionnes peut entraner des ralentissements notables lexcution, voire un plantage pur et simple de lordinateur. Alors, autant prendre ds le dbut de bonnes habitudes dhygine.
En algorithmique, on ne se tracassera pas trop avec les sous-types de variables numriques. On se contentera donc de prciser qu'il s'agit d'un nombre, en gardant en tte que dans un vrai langage, il faudra tre plus prcis.
14
Cours Algorithmique Auteur : Christophe Darmangeat
Ou encore
Variables PrixHT, TauxTVA, PrixTTC en Numrique