Algorithmes TDI
Algorithmes TDI
Algorithmes TDI
CHAPITRE I Introduction
INTRODUCTION I.Introduction
1.
a.
Dfinitions
Linformation Linformation est le support formel dun lment de connaissance humaine susceptible dtre reprsente laide de conventions (codages) afin dtre conserve, traite ou communique. b. La donne Une donne est la reprsentation dune information conventionnelle (code) destine faciliter son traitement. sous une forme
c. Traitement de linformation Le traitement de linformation consiste appliquer un ou plusieurs oprations sur une information en entre pour gnrer des rsultats en sortie
d. Lordinateur Un ordinateur est une machine lectronique programmable destine au traitement de linformation. e. Linformatique Linformatique est la science du traitement de linformation dans les domaines scientifiques, techniques, conomiques et sociaux.
Exemples de traitements de linformation par informatique :
-dmontrer un thorme (mathmatique) -faire jouer aux checs (intelligence artificielle) -dpouiller un sondage (conomie) -grer un robot industriel (atelier) -facturation de produits (entreprise) -traduire un texte (linguistique) -imagerie mdicale (mdecine) -formation distance (ducation) -Internet (grand public)...etc 1/23
TDI
CHAPITRE I Introduction
f. Le systme informatique Ensemble de matriels (ordinateurs, rseaux) et de logiciels permettant d'acqurir, de stocker, de traiter, de communiquer des donnes pour rpondre aux besoins en information de ses utilisateurs. g. Le systme dinformation En tlcommunications et en informatique, le terme systme d'information (ou SI) possde les significations suivantes :* Un systme, automatis ou manuel, qui comprend des hommes, des machines et des mthodes organiss pour assembler, transmettre et rpandre des donnes qui reprsentent de l'information pour les utilisateurs. ... h. Les rseaux informatique Un rseau informatique est un ensemble d'quipements interconnects qui servent acheminer un flux d'informations. Sa naissance est le fruit du mariage entre Informatique et Tlcommunications.
2/23
TDI
2.
- Un algorithme dcrit un traitement sur un certain nombre, fini, de donnes (ventuellement aucune). - Un algorithme est la composition d'un ensemble fini d'tapes, chaque tape tant forme d'un nombre fini d'oprations dont chacune est : - dfinie de faon rigoureuse et non ambigu; - effective, c'est--dire pouvant tre effectivement ralise par une machine: cela correspond une action qui peut tre ralise avec un papier et un crayon en un temps fini; par exemple la division entire est une opration effective, mais pas la division avec un nombre infini de dcimales. - Quelle que soit la donne sur laquelle il travaille, un algorithme doit toujours se terminer aprs un nombre fini d'oprations, et fournir un rsultat. Un algorithme doit rpondre aux 5 caractristiques suivantes : La finitude La prcision Le domaine des entres Le domaine des sorties Lexcutabilit
Notion dalgorithme
3.
Historiquement, plusieurs types de notations ont reprsent des algorithmes. Il y a eu notamment une reprsentation graphique, avec des carrs, des losanges, etc. quon appelait des organigrammes. Aujourdhui, cette reprsentation est quasiment abandonne, pour deux raisons. Dabord, parce que ds que lalgorithme commence grossir un peu, ce nest plus pratique du tout. Ensuite 3/23
Organigramme et pseudo-code
TDI
parce que cette reprsentation favorise le glissement vers un certain type de programmation, dite non structure (voir les chapitres suivants), que lon tente au contraire dviter. Cest pourquoi on utilise gnralement une srie de conventions appele pseudo-code , qui ressemble un langage de programmation authentique dont on aurait vacu la plupart des problmes de syntaxe. Ce pseudo-code est susceptible de varier lgrement dun livre (ou dun enseignant) un autre. Cest bien normal : le pseudo-code, encore une fois, est purement conventionnel; aucune machine nest cense le reconnatre.
4.
Algorithmique et programmation
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 :
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 (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). 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. Il 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.
TDI
a. Les types de donnes Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement des valeurs. Il peut sagir de donnes issues du disque dur, fournies par lutilisateur (frappes au clavier), ou autres. Il peut aussi sagir de rsultats obtenus par le programme, intermdiaires ou dfinitifs. Ces donnes peuvent tre de plusieurs types : elles peuvent tre des nombres, du texte, etc. On peut dire quun type de donnes est lensemble de valeurs de mme nature quune variable peut avoir b. Les variables Pour employer une image, une variable est une bote, que le programme (lordinateur) va reprer par une tiquette (Nom de variable). Pour avoir accs au contenu de la bote, il suffit de la dsigner par son tiquette. Dans lordinateur, physiquement, il y a un emplacement de mmoire, repr par une adresse binaire. Si on programmait dans un langage directement comprhensible par la machine, on devrait dsigner nos donnes par des chiffres binaires (0 et 1). 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. Il est beaucoup plus facile demployer des noms de variables de son choix, que de devoir manier des adresses binaires. La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de lui coller une tiquette. Ceci se fait tout au dbut de lalgorithme, avant mme les instructions proprement dites. Cest ce quon appelle la dclaration des variables Le nom de la variable (ltiquette de la bote) obit des impratifs changeant selon les langages. Toutefois, une rgle absolue est quun nom de variable peut comporter des lettres et des chiffres, mais quil exclut la plupart des signes de ponctuation, en particulier les espaces. Un nom de variable correct commence galement imprativement par une lettre. Quant au nombre maximal de signes pour un nom de variable, il dpend du langage utilis. En pseudo-code algorithmique, on est bien sr libre du nombre de signes pour un nom de variable. 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.
2.
Une expression est un ensemble de valeurs, relies par des oprateurs, et quivalent une seule valeur Par exemple, voyons quelques expressions de type numrique. Ainsi :
Expression et oprateur
5/23
TDI
7 5+4 123-45+844 T-12+5-R sont toutes des expressions valides, condition que T et R soient bien des nombres. Car dans le cas contraire, la quatrime expression na pas de sens. En loccurrence, les oprateurs employs sont laddition (+) et la soustraction (-). Un oprateur est un signe qui relie deux valeurs, pour produire un rsultat. Les oprateurs possibles dpendent du type des valeurs qui sont en jeu. On peut avoir : a. Oprateurs numriques : Ce sont les quatre oprations arithmtiques : + : addition - : soustraction * : multiplication / : division Mentionnons galement le ^ qui signifie puissance . 45 au carr scrira donc 45 ^ 2. Enfin, on a le droit dutiliser les parenthses, avec les mmes rgles quen mathmatiques. La multiplication et la division ont naturellement priorit sur laddition et la soustraction. Les parenthses ne sont ainsi utiles que pour modifier cette priorit naturelle. Cela signifie quen informatique, 12 * 3 + 5 et (12 * 3) + 5 valent strictement la mme chose, savoir 41. Pourquoi ds lors se fatiguer mettre des parenthses inutiles ? En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96. Rien de difficile l-dedans, que du normal. b. Oprateur alphanumrique : & ou + Cet oprateur permet de concatner, autrement dit dagglomrer, deux chanes de caractres. Par exemple : Variables A, B, C en Caractre Dbut A "Salut " B "tout le monde" CA&B Fin La valeur de C la fin de lalgorithme est "Salut tout le monde" c. Oprateurs logiques (ou boolens) : Il sagit du ET, du OU, du NON et du mystrieux (mais rarissime XOR : le ou exclusif). 6/23
TDI
3.
Consiste mettre la valeur dune variable dans une autre variable Pseudo-code : Variable1 Variable2 Exemple x10 ; yx
Laffectation
4.
Lecture et criture
La lecture permet dattribuer une valeur un objet en allant lire sur un priphrique dentre (exemple clavier) et elle range cette valeur dans lobjet. Pseudo-code lire(Nom de variable) Exemple : Lire(x) Organigramme lire(Nom de variable)
La lecture permet dcrire sur un priphrique de sortie linformation spcifie (exemple affichage lcran) Pseudo-code Organigramme
crire(Nom de variable) crire(Nom de variable) Exemple : crire( salut ) En organigramme les instructions de lecture criture sont mises dans un losange
5.
Chaque programme possde un dbut et une fin Pseudo-code Organigramme Dbut . . Fin dbut
fin
6.
a. Linstruction SI Linstruction si permet de faire un traitement si la condition est vrai un autre traitement sinon
7/23
TDI
Pseudo-code Si condition alors Bloc dinstructions Sinon Bloc dinstructions Fin si Exemple : si x>=0 alors Ecrire (x, est positif ) Sinon Ecrire(x, est ngatif ) Fin si
Organigramme
Fausse
condition
Vrai
b. Linstruction SELON Linstruction selon permet dvaluer plusieurs cas pour des valeurs dune variable de type simple tel que caractre ou entier. Cest une structure que lon trouve dans tous les langages de programmation et qui permet dviter des si imbriqus
2.
Les structures itratives permettent de rpter un traitement zro ou plusieurs fois. a. La boucle tant que La boucle Tant que permet de rpter un traitement Tant que la condition est vrai Pseudo-code Organigramme Tant que condition faire Bloc dinstructions Fin Tq Exemple : X10 Tant que x>=0 Faire Xx-1 Fin Tq
Fausse
condition
Vrai
Traitement de la boucle
b. La boucle rpter. jusqu' La boucle Rpter jusqu' permet de rpter un traitement au moins une fois jusqu' ce que la condition est vrai la condition est vrifie la fin de la boucle Pseudo-code Organigramme
8/23
TDI
Rpter Bloc dinstructions Jusqu' condition Exemple : X10 Rpter Xx-1 Jusqu' x=0
Traitement
Vrai
condition
Fausse
c. La boucle pour La boucle pour est une structure qui existe dans la majorit des langages de programmation et qui permet de rpter un traitement un certain nombre de fois, le nombre de rptition est connu lavance. La boucle pour utilise une variable compteur qui sera incrmente ou dcrmente automatiquement selon la valeur du pas Pseudo-code Pour variable=valeur initiale valeur finale pas valeurs Traitement de la boucle Fin pour Exemple Dbut Pour i=5 100 pas 5 Ecrire (i, est un multiple de 5 ) Fin pour d. La boucle rpter tant que La boucle rpter tant que est semblable celle de rpter jusqu' sauf que le traitement est rpt tant que la condition est vraie Pseudo-code Organigramme Rpter Bloc dinstructions Tant que condition Exemple : X10 Rpter Xx-1 Tant que x>0
Traitement
Fausse
condition
Vrai
9/23
TDI
10/23
TDI
CHAPITRE II
11/23
TDI
b. Chargement par traitement Soit T un tableau de N lments crire lalgorithme qui rempli le tableau T par les N multiples de 10 Dbut I0 Rpter I I+1 T(I) I*10 Jusqu' I=10 Fin
1. La recherche squentielle :
La recherche squentielle consiste balayer le tableau squentiellement en partant du 1er lment ou du dernier jusqu' trouver llment recherch ou arriver la fin du tableau. Exemple : soit chercher dans une liste de 20 lments rangs dans un tableau T un lment X donn. Afficher la position de llment sil existe et le message non trou sil nexiste pas. Algorithme : recherche de llment x dans un tableau N lments Dbut Lire (X) I1 Tant que I< N et T(I)X II+1 Fin Tq Si T(I)=X alors crire lment trouv la position ; I) sinon crire non trouv . Fin si 12/23
TDI
Fin
13/23
TDI
Par exemple trier des donnes selon un ordre alphabtique croissant ou dcroissant. Le tri est une des oprations des plus importantes des traitements sur ordinateur. Diffrentes mthodes peuvent tre envisages suivant la nature du problme traiter. En informatique, on distingue deux grandes catgories de tri: le tri interne, le tri externe. Par tri interne, on comprend les mthodes de tri qui gardent l'ensemble des lments trier en mmoire centrale au moment de l'excution de l'algorithme de tri. Si cela ne pouvait se faire, soit parce que le nombre d'lments trier est trop grand, soit parce que les lments sont d'une taille trop importante, il faudrait faire appel des mthodes de tri externe. Les mthodes de tri externe ne gardent en mmoire centrale qu'une partie des lments trier, les autres tant par consquent temporairement mmoriss sur des fichiers externes. Comme certaines mthodes de tri externe utilisent aussi en partie des mthodes de tri interne, nous tudierons dans ce chapitre quelques algorithmes classiques de tri interne.
14/23
TDI
-Algorithme : Soit trier un tableau T de N lments dans lordre croissant Dbut Pour i=1 N-1 Mini Pour j=i+1 N Si T(j)<T(min) alors Minj Fin si Fin pour XT(i) T(i)T(min) T(min)x Fin pour Fin b. Tri par insertion -Mthode : on considre les lments les uns aprs les autres en insrant chacun sa place parmi les lments dj tris. 2 6 1 3 1 7 0 6 2 1 3 1 7 0 1 6 2 3 1 7 0 1 3 6 2 1 7 0 1 1 3 6 2 7 0 1 1 3 6 7 20 Il faut : 1 boucle pour parcourir le tableau et slectionner llment insrer ; 1 boucle pour dcaler les lments plus grands que llment insrer ; insrer llment. -Algorithme Dbut Pour i=2 N PT(i) Ji Tant que j>1 et T(j-1)>p T(j)T(j-1) Jj-1
15/23
TDI
Fin Tq T(j)p Fin pour Fin c. Tri bulle -Mthode : En commenant du 1er lment on compare chaque lment son suivant si cest suprieur on permute et on passe llment suivant aprs avoir compt le nombre de permutation on continu jusqu' la fin du tableau, on rpte ce traitement jusqu' ce que le nombre de permutation est nul. -Algorithme Dbut Rpter Permuter=faux I1 Rpter Si T(i)>T(i+1) alors Permutervrai X<-T(i) T(i)T(i+1) T(i+1)x Fin si Ii+1 Jusqu' i=N Jusqu' permuter=faux Fin d. Tri par permutation -Mthode : En commence au 1er lment du tableau on compare chaque lment avec son successeur si ce dernier est infrieur on permute et on revient au dbut de la liste sinon on continu jusqu' ce quon arrive lavant dernier lment. -Algorithme Dbut I1 Tant que i<N Si T(i)>T(i+1) alors XT(i) T(i)T(i+1) T(i+1)x I1
16/23
TDI
17/23
TDI
CHAPITRE III
18/23
TDI
Procdure ligneEtoile( ) Var i : entier Dbut Pour i = 1 jusqu' 10 Faire Ecrire ('*') FinPour Ecrire('\n') //retour la ligne FinProc Cette procdure permet d'afficher une ligne de 10 toiles puis passe la ligne. APPEL d'une procdure Pour dclencher l'excution d'une procdure dans un programme, il suffit de l'appeler, c'est--dire d'indiquer son nom suivi de parenthses. Programme RectangleEtoile Var nlignes: entier cpt : entier Dbut Ecrire("Ce programme dessine un rectangle d'toiles. Combien voulez-vous de lignes?") Lire(nlignes) Pour cpt=1 jusqu' nlignes Faire ligneEtoile ( ) Appel de la procdure ligneEtoile
FinPour Fin Lorsque le processeur rencontre l'appel d'une procdure, il arrte momentanment l'excution du programme appelant pour aller excuter les instructions de la procdure. Quand il a termin l'excution de la procdure, le processeur reprend l'excution du programme appelant l o il s'tait arrt. Une procdure peut tre appele soit par un programme, soit par un autre sousprogramme (qui lui mme a t appel). Les appels de sous-programmes peuvent s'imbriquer autant qu'on le dsire.
Les variables dclares dans une procdure ne sont pas utilisables dans le programme appelant. Chaque sous-programme a son propre espace de variables, inaccessible par les autres. On dit que les variables sont LOCALES. 19/23
TDI
Procdure ligneEtoile( ) Var i : entier Dbut Pour i=1 jusqu' 10 Faire Ecrire('*') FinPour Ecrire('\n') FinProc Dans notre exemple, on ne pourrait pas saisir ou afficher la variable i dans le programme principal, car i est une variable de la procdure, utilisable seulement dans celle -ci. Le programme principal n'a pas le droit de l'utiliser. Une question qui se pose alors est de savoir comment procdures et programmes vont pouvoir communiquer des donnes. Par exemple, on pourrait vouloir que le programme principal communique la procdure combien d'toiles afficher par ligne. Cela est possible grce aux paramtres. Un paramtre est une variable particulire qui sert la communication entre programme appelant et sous -programme. Exemple : Dans notre exemple, nous allons mettre le nombre d'toiles par lignes en paramtre. Pour cela, nous indiquons entre parenthses la dclaration du paramtre (qui est une variable de la rocdure !). La valeur de ce paramtre est communique l'appel, par le programme appelant. Procdure ligneEtoile(nombre : entier ) //sous-programme Var cpt : entier paramtre formel Dbut Pour cpt=1 jusqu' nombre Faire Ecrire('*') FinPour Ecrire('\n') FinProc
Programme RectangleEtoile //programme appelant Var nlignes, netoiles: entier //nombre de lignes et nombre d'toiles par ligne
20/23
TDI
i : entier Dbut Ecrire("Ce programme dessine un rectangle d'toiles.") Ecrire("Combien voulez-vous d'toiles par ligne?") Lire(netoiles) Ecrire("Combien voulez-vous de lignes?") Lire(nlignes) Pour i=1 jusqu' nlignes Faire ligneEtoile (netoiles) FinPour paramtre effectif Fin
21/23
TDI
Exemple :
Fonction factorielle(n: entier) : entier /*Cette fonction retourne la factorielle du nombre n pass en paramtre*/ Var i : entier fact : entier Dbut fact 1 Si n ? 0 Alors Pour i=1 jusqu' n faire fact fact * n instruction de retour FinPour FinSi Retourne fact FinFonction Fonction saisie_nb_positif( ) : entier
22/23
TDI
/*Cette fonction permet de faire saisir l'utilisateur un nombre positif qui est alors retourn*/ Var nb_saisi :entier Dbut Ecrire( "Veuillez entrer un nombre positif") Lire( nb_saisi) Tantque nb_saisi < 0 Faire Ecrire( "Erreur. Saisissez un nombre suprieur 0 s'il vous plait !") Lire( nb_saisi) FinTantque Retourne nb_saisi FinFonction Exemple de programme appelant utilisant ces deux fonctions: Programme affiche_factorielle Var appel de la fonction saisie_nb_positif nombre: entier et affectation de sa valeur retourne la variable nombre rep : chane Dbut paramtre effectif Rpter nombre saisie_nb_positif( ) Ecrire( "La factorielle de ", nombre, " est ", factorielle(nombre)) Ecrire( "Voulez-vous recommencez? (oui/non)") appel de la fonction Lire( rep) factorielle et affichage de sa Jusqu' rep = "non" valeur retourne Ecrire( "A bientt") Fin Remarque : Les paramtres d'une fonction sont toujours de type donne. La valeur des paramtres effectifs l'appel est recopie dans les paramtres formels qui servent raliser le traitement de la fonction. Remarque sur le passage des paramtres: Le passage de paramtre par valeur ne permet pas la modification de la variable passe en paramtre. un autre type de passage de paramtre, est le passage de paramtre par adresse ou (rfrence), dans ce type de passage de paramtre la procdure peut modifie la valeur de la variable passe en paramtre. Chaque langage de programmation propose sa propre technique pour raliser ce type de passage de paramtre.
23/23