Beruflich Dokumente
Kultur Dokumente
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
2.$
2.(
2.)
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.+
2.-
2./
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
$.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).
$.$
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
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.
(.(
(.)
>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