Vous êtes sur la page 1sur 8

Algorithme, Tableaux, Structures, fichiers et bdd

Note prliminaire : le formalisme des instructions utilis ici approche le formalisme utilis dans l'interprteur Alg'Exec. Mais il ne lui correspond pas exactement car Alg'Exec est contraignant sur certains points o son formalisme est inadapt l'algorithmique. Dans certains cas, il sera fait rfrence d'autre formalismes, ce sera alors explicitement indiqu.

Introduction
es !aria"les que nous a!ons !ues sont #usqu' prsent lmentaires. Elles ne contiennent qu'une seule !aleur d'un t$pe simple. %ependant, il arri!e que nous so$ons o"ligs de traiter des donnes groupes en ta"le et des donnes diffrentes appartenant un m&me groupe. Dans le premier cas, nous o"ser!erons les ta"leaux de donnes, dans le second, de donne de t$pe structur !us con#ointement aux fichiers et ta"les de 'DD. (ous trou!ere), enfin, des exemples mix de donnes structures, de ta"leaux, de fichiers ou ta"les de "ases de donnes.

Tableaux
es ta"leaux sont une suite de cases de t$pe lmentaire, assem"les en un seul "loc *comme des cu"es colles les uns aux autres, ou une range d'al!oles+ ,ous allons !oir comment lire, modifier, modifier, rechercher, inter!ertir des lments.

2.1

Dclaration d un tableau
ors de la dclaration, on indique le nom"re total d'lments du ta"leau *que ceux-ci soient affects ou non+. %e nom"re sera le nom"re d'lments maximum que l'on pourra mettre dans le ta"leau. Dans la partie dclaration on crit : monTableau[1 : 10] : tableau de entier 'Dclaration de mon tableau Dcortiquons : mon.a"leau : nom de la !aria"le !" : indication d'inter!alle d'indices / : indice minimum *facultatif, / par dfaut+ /0 : indice maximum *o"ligatoire 1 les indices min et max sont spars par un : + Tableau : t$pe ta"leau de : mot de sparation du t$pe ta"leau et du t$pe des lments entier : t$pe de chaque lment.

2emarques : 'indice maximum indique le nom"re maximum d'lments. Dpasser ce nom"re pro!oque une erreur. 3n ta"leau dclar de cette fa4on sera homog5ne. .ous les lments ont tou#ours le m&me t$pe.

2.2

Acc#s aux lments


6our reprer un lment parmi les autre, on utilise un index, nom"re entier qui permet d'accder un lment *imagine) un ascenseur et ne n7 des tages+. 6our lire un lment ou le modifier, on indiquera la !aleur de l'indice : a <- monTableau[1] monTableau[5] <- 3 5! monTableau[3] <- [1"3# 5!] // a prend la valeur de l'lment n1 // l'lment n5 prend la valeur 3 5! // le$ lment$ n3 et n prennent re$pectivement le$ valeur$ "3 et 5!

b <- 3 a <- monTableau[b]

// a prend la valeur de la cellule n 3

2.$

%ecture s&uentielle d un tableau


6our lire tout un ta"leau, on utilisera alors une "oucle 'pour' et non un '.ant8ue' ou '2pter' : pour indice de 1 10 faire Traitement$ finPour exemple : fonction somme%tab&ntier[] : tableau de entier# i'a( : entier) : entier /* +aire la $omme du tableau d'entier$ donn# le nombre d'lment$ e$t au$$i donn, */ var // Dclaration$ i : entier ' indice de travail $omme : entier ' r$ultat de la $omme dbut // -orp$ $omme <- 0 pour i de 1 i'a( $omme <- $omme.tab&ntier[i] finPour retourner $omme // attention# retourner n'e(i$te pa$ dan$ /l0'&(ec Fin 'emar&ue : pas "esoin d'indiquer indiceMin et indiceMax dans la dfinition du ta"leau transmis en param5tre. Note : dans Alg'Exec, la place de 9retourner9, il faut utiliser une !aria"le prdfinie 9!alret9 qui permet de retourner une !aleur dans les fonctions. :ex, la place de 9retourner somme9 il faudrait crire 9!alret ;-somme9. %'est ce qui me fait dire qu'Alg'Exec n'est pas la panace et en D<=. 6A> &tre la rfrence en terme de formalisation algorithmique.

2.(

'echercher dans un tableau


6our rechercher un lment dans un ta"leau, on ne peut plus utiliser de "oucle pour car on ne sait pas quel moment on s'arr&tera. Exemple : rechercher le plus grand lment d'un ta"leau

2.)

*ffacement dans un tableau


6our effacer un lment du ta"leau, on a le choix entre diffrentes solutions : /. <n attend que l'lment soit cras par une nou!elle !aleur. ?. <n met l'lment une !aleur signifiant 9lment !ide9 par con!ention. @. <n compresse les lments et on note le nom"re d'lment 9!alides9 dans une !aria"le associe au ta"leau. A. Autres solutions B a solution / est facile mettre en Cu!re, mais on ne sait pas, priori quelles sont les lments que l'on peut craser. E!entuellement, la !aria"le indice peut $ &tre lie. a seconde solution est d# un peu meilleure mais on se pri!e d'une !aleur possi"le et on est o"lig de rechercher les lments !ides a!ant de pou!oir mettre un nou!el lment. a troisi5me solution ncessite un traitement chaque suppression mais, connaissant l'indice du dernier lment *ou du premier disponi"le+ il est facile d'a#outer un lment.

A noter que si les lments d'un ta"leau doi!ent &tre tris, cela complique le pro"l5me car il faut rechercher la #uste place de l'lment a#outer et l'insrer dans le ta"leau, ce qui ncessite de lui faire de la place en dcalant tous les lments a!ant de l'a#outer ou le mettre la fin et re-trier le ta"leau. es autres solutions sont d'utiliser autre chose qu'un ta"leau pour faire une liste d'lments. ,ous n'tudierons pas cette autre chose dans ce cours. Exemple : Daire un extrait des algorithmes permettant d'illustrer chacune des trois solutions

2.+

,ompresser les lments d un tableau


es lment du ta"leau sont tous des entiers naturels *positifs+. a !aleur E/ marque un trou dans le ta"leau. a+ faire l'algorithme d'initialisation du ta"leau "+ Daire l'algorithme pour com"ler tous les trous dans le ta"leau.

2.-

Inter.ertir des lments


A!ec le ta"leau de caract5res sui!ant : "on#ourFGH qui contiendra I''', '<', ',', 'J', '<', '3', '2'K. <n utilisera la procdure ini'on#our*es "on#ourFH : ta"leau de caract5re+ pour initialiser le ta"leau et afficher'on#our*"on#ourFH : ta"leau de caract5re+ pour afficher le contenu du ta"leau. a+ "+ faire l'algorithme pour inter!ertir les lments deux deux, o"ser!e) le rsultat. faire l'algorithme qui in!erse le sens des lments *ruo#no"+.

2./

Tableaux et fonctions ou procdures


<n peut transmettre un ta"leau aux fonctions ou procdures dans les param5tres. =llustration : Fonction sommeTableau%tableau&ntier[1,,10] : tableau de entier) : entier /* 1onction 2ui renvoie la $omme de$ lment$ d'un tableau */ var // Dclaration$ i# $omme : entier ' re$pectivement indice et $omme du tableau dbut // -orp$ pour i de 1 10 faire $omme <- $omme.tableau&ntier[i] finPour retourner $omme fin // +in de l'al0orit3me De m&me, il est possi"le de retourner un ta"leau : Procdure insrerElment%es ancienTab[1,,10] tableau de caractre; lment : caractre) /* 4rocdure 2ui in$5re un lment dan$ un tableau tri, Attention, le tableau est modifi ! 6i le tableau ori0inal e$t plein# $oit le dernier lment e$t perdu : %['a'# 'c'# 'd']# 'b') 78 ['a'# 'b'# 'c'] $oit l'lment 9 in$rer e$t i0nor : %['a'# 'c'# 'd']# 'e') 78 ['a'# 'b'# 'd'] */ var // Dclaration$ i# : : entier ' re$pectivement indice$ du nouveau et de l'ancien tableau nouvTab : tab[1,,10] de caractre dbut // -orp$ :<-1 pour i de 1 10 si %lment;n$r 7 '<=;' ou tableau[:] < lment) alors nouvTab[i] <- ancienTab[:] i <- i.1 // pa$$er 9 l'lment $uivant de l'ancien tableau

sinon nouvTab[i] <- lment lment;n$r <- '<=;' // l'lment a t in$r fin i finPour ancienTab <- nouvTab fin Note0 la prsence de l indicateur 1es1 a.ant le param#tre modifiable dans la procdure . e cas le plus frquent de modification du contenu d'un param5tre concerne les ta"leaux.

2ariables structures
>i on manipule des personnes, rien n'est plus g&nant de de!oir tou#ours utiliser plusieurs !aria"les pour la m&me personne. Exemple : >aisir les nom, prnom et Lge de /0 personnes >olution / : on utilise un ta"leau pour chaque donne enre0i$trer4er$%) var // Dclaration$ i : entier ' indice commun au( tableau( t>om# t4rnom[1,,10] : tableau de c!a"ne ' nom$ ? prnom$ de$ per$onne$ t/0e[1,,10] : tableau de entier ' @0e$ de$ per$onne$ dbut // -orp$ pour i de 1 9 10 +aire a++ic3er%Aper$onne n A# i) $ai$ir%Anom 7B A# t>om[i]) $ai$ir%Aprnom 7B A# t4renom[i]) $ai$ir %A@0e 7B A# t/0e[i]) +in4our +in 8uels pro"l5mes pose cet algorithme M il faut traiter autant de ta"leaux que de donnes, chaque ta"leau est trait sparment pour une m&me personne les indices doi!ent correspondre, sinon risque de traiter une donne d'une personne et une autre d'une autre personne simultanment il n'est pas possi"le de retourner le ta"leau car on ne peut retourner qu'une seule donne la fois

une fausse solution serait d'utiliser un ta"leau deux dimensions, mais toutes les donnes seraient alors du m&me t$pe et l'algorithme de!iendrai difficile lire. >olution ?, utiliser un ta"leau d'lments structurs : enre#istrerPers%) var // Dclaration$ i : entier ' indice commun au( tableau( t4er$[1,,10] : tableau de structure personne nom : c3aCne ' nom de per$onne prnom : c3aCne ' prnom de per$onne @0e : entier ' @0e de per$onne Fin tructure dbut // -orp$ pour i de 1 9 10 +aire ecrire%Aper$onne n A# i) lire%Anom 7B A# t4er$[i],nom) lire%Aprnom 7B A# t4er$[i],prnom)

lire%A@0e 7B A# t4er$[i],@0e) +in4our fin 8uels sont les a!antages de cet algo M lisi"ilit *m&me si ce n'est pas tr5s !ident ici+ reprsentation indi!iduelle de chaque personne : chaque lment du ta"leau t6ers correspond une et une seule personne on peut retourner ce ta"leau *en une fois+

$.1

'utiliser une structure 3 t4pe structur


pour rutiliser une structure, on construit un t4pe personnalis : T$pe Personne // dclaration du tDpe $tructur nom : c3aCne prnom : c3aCne @0e : entier finT$pe var une4er$onne : Personne // dclaration d'une variable de tDpe 4er$onne unTabDe4er$[1,,10] : tableau de Personne // et d'un tableau de 4er$onne$ E une4er$onne,nom <- nomFu // utili$ation d'une variable de tDpe 4er$onne unTabDe4er$[indice],nom <- nomFu // utili$ation d'un tableau de 4er$onne$ unTabDe4er$[indice] <- une4er$onne // a++ectation directe car mGme tDpe$

$.2

*xemples
>i chaque personne est enregistre a!ec son nom et son prnom. 2dige) les algorithmes rechercher*!ar : nom2echerch+ et in!erser*!ar : pos/, pos?+ selon la mthode a!ec ta"leaux puis a!ec un t$pe structur de donnes *rutilise) les ta"leaux et t$pes !us ci-dessus+. %onclue).

$.$

5our la petite histoire


>i on pou!ait utiliser un langage permettant de masquer les proprits *!aria"les+ d'un t$pe et qu'on pou!ait $ dclarer aussi des "outs d'algo pour effectuer des traitements propres au t$pe structur, on aurai un langage B orient o"#et N e t$pe s'appellerai alors une classe et les !aria"les de ce t$pe ob6ets ou instances. %'est le cas a!ec les langages #a!a, %OO, %P, B

%ecture de fichiers et bases de donnes


(.1 Introduction, algorithme t4pe
ire un li!re, faire une recherche dans un dictionnaire sont des algorithmes similaires la lecture de fichiers ou l'extraction de donnes d'une "ase. 'algorithme glo"al de la lecture d'un li!re est de lire chaque page, du d"ut la fin du li!re : dbut // -orp$ //E 2uivalent pour +ic3ier ou table de HDD %uvrir livre<uvert pour le lire // ouverture +ic3ier ou HDD %conne(ion.ouverture) &ire%pa0e) // 15re lecture# permet de contrIler $'il D a 22c3, Tant'ue %non +in de livre<uvert) // Tant 2ue non +in de +ic3ier ou de table Traitements%pa0e) // traiter la lecture courante &ire%pa0e) // lire $uivant FinTant'ue // 1TJ Fermer%livre<uvert) // +ermer +ic3ier ou HDD %+ermer et dconnecter) Fin //,, ire un fichier se fait de la m&me fa4on, on ou!re le fichier, on lit chaque ligne #usqu' la fin et on le referme : dbut // -orp$ %uvrir +ic3ierTrait en lecture &ire enre0i$trementDu1ic3ier Tant'ue non +in du +ic3ier +ic3ierTrait

Traitements%enre0i$trementDu1ic3ier) &ire enre0i$trementDu1ic3ier FinTant'ue Fermer +ic3ierTrait Fin Enfin, lire une "ase de donne est peu pr5s effectu de la m&me fa4on : dbut // -orp$ (onne)ion%'$erveur'# 'utili$ateur'# 'motDe4a$$e') %uvrir*ase%'nomDeFaHa$e') %uvrir+e,u-te%'re2uGteK6JF') &ire enre0i$trementDeFaTable Tant'ue non +in de la table Traitements%enre0i$trementDeFaTable) &ire enre0i$trementDeFaTable FinTant'ue Fermer*ase%'nomDeFaHa$e') .conne)ion Fin

(.2

%a lecture de fichier et table, l criture de fichiers 7*ntres8sorties9


a lecture et l'criture *les entres:sorties+ des fichiers utilisent les instructions lire*+ et crire*+. =mplicitement, on utilisera lire et crire pour un fichier et saisir et afficher pour le cla!ier et l'cran. %es instructions traitent un enregistrement complet *tous les champs de la ligne en une seule fois+ &ire enre01ic3ier Ecrire enre01ic3ier A la lecture de l'enregistrement, les !aria"les affectes sont celles dclares dans l'enregistrement *ici enregDichier+ la dclaration du fichier et sont directement exploita"les. D'o la ncessit de dcrire l'enregistrement d'un fichier ou une structure de donnes pour les ta"les. 6our effacer un enregistrement dans un fichier, on utilise l'instruction supprimer upprimer enre01ic3ier %ette fonction ne supprime que l'enregistrement lu en dernier. 6our modifier un enregistrement dans un fichier, on utilise l'instruction modifier /odifier enre01ic3ier %ette fonction ne modifie que l'enregistrement lu en dernier, mais tout l'enregistrement *annule et remplace+. ,ote : dans certains langages, on ne peut pas effacer dans un fichier *ouilleN+. 6our faire quelque chose qui $ ressem"le, on !a copier un fichier !ers un autre en omettant *9ou"liant9+ les lments effacer *c'est similaire com"ler les 9trous9 dans un ta"leau, !oir l'exemple correspondant+. (.2.1 %ire dans une table de :DD >i lire est utilisa"le pour les ta"les comme pour les fichiers, on ne peut pas utiliser crire, ni supprimer, ni modifier a!ec les ta"les. =l faut passer par une requ&te qui fait le "oulot. (oir les exemples. (.2.2 Autres con.entions d criture de l instruction lire79 Dans certains cas nous utiliserons lire*+ sous les formes sui!antes : %ertains langages demandent d'indiquer la source et la destination comme suit : &ire%nom;denti+iantFe1ic3ier<uFaTable# variableLecevantFeL$ultat) Ecrire%nom;denti+iantFe1ic3ier# variable&nre0i$trement/&crire) ou lire / ligne du fichier Q l'affecter la !aria"le enreg.

enre0 <- &ire%nom;denti+iantFe1ic3ier<uFaLe2uGte) ou enre0 <- &ire%nom;denti+iantFe1ic3ier<uFaLe2uGte# lon0ueur&nre0) =dem ci dessus, mais on indique la longueur de l'enregistrement *!ar. longueurEnreg+ sous-entendant que lire ne sait pas dterminer automatiquement la longueur d'un enregistrement.

%es autres con!entions dpendent du langage a!ec lequel le d!eloppeur pour ha"itude de programmer.

(.$

% ou.erture et la fermeture
A!ant de lire un li!re, il faut l'ou!rir. Apr5s a!oir lu un li!re, il faut le fermer *sous peine de l'a"Rmer+ De la m&me fa4on, on !a dclarer l'ou!erture d'un fichier, le traiter puis le refermer comme suit : %uvrir 'nomKduK+ic3ier' en modeKacc5$ Fermer 'nomKduK+ic3ier' la !aria"le fichier<u!ert contiendra un numro qui permettra d'accder au fichier par lire*+ et crire*+. %e numro est unique pour chaque ou!erture et !ite de confondre le fichiers lors d'une lecture alors que plusieurs fichiers sont ou!erts. Exemple : Procdure copier%nom11 : c3aCne# nom1" : c3aCne) /* De$cription : copie d'un +ic3ier, &es fic!iers F0 et F1 doivent avoir la m-me forme d2enre#istrement &t $ont dclar$ dan$ l'al0o appelant de copier# $i be$oin */ var // Dclaration$ E dbut // -orp$ %uvrir 'nom11' en lecture %uvrir 'nom1"' en criture &ire enre011 Tant'ue non +in de nom11 enre01" <- enre011 Ecrire enre01" &ire enre011 FinTant'ue Fermer 'nom1"' Fermer 'nom11' Fin 2emarque) l'im"rication des ou!ertures et fermetures : ou!rir D/ puis D?, fermer D? puis D/. Attention : lors de l'ou!erture, il faut imprati!ement indiquer le mode d'acc5s au fichier. =l $ en a trois : lecture, criture et lecture:criture.

(.(

*criture dans une base de donnes


Dans une "ase de donnes, on crit, modifie ou supprime l'aide de requ&tes >8 B (oir le cours ? sur le >8 *insert, delete, update+.

(.)

Dclaration d un fichier, d une table de :DD


3n fichier doit &tre dclar et on doit indiquer son contenu, sa structure. Exemple : Fic!ier per$onne$ enre#istrement enre0Kper$onne$

>um : entier >om : c!a"ne 4rnom : c!a"ne E finEnre#istrement e mot cl 9fichier9 peut &tre remplac par 9ta"le9 3ne ta"le de "ase de donnes ne doit pas &tre dclare mais on utilisera une !aria"le structure pour contenir un enregistrement de la ta"le. tructure 4er$onne >um : entier >om : c!a"ne 4rnom : c!a"ne E fin tructure on rcuprera indi!iduellement chaque champ lors de la lecture de chaque ligne de la ta"le, mais une structure simplifiera son utilisation et donnera un code plus 9propre9.

Trucs et astuces
.a"leaux ors de la dclaration d'un ta"leau, pr!oir s$stmatiquement la dclaration de la !aria"le indice de ce ta"leau. :ex. .6ersonnes : .a"leauF/../00H de chaRne =6ersonne : entier '=ndice du ta"leau .6ersonnes