Vous êtes sur la page 1sur 26

Algorithmique Tableaux [tb]

Cours, 25 juin 2012

Table des mati`res e


1 Tableaux / tb00acours1 1.1 Quest-ce quun tableau ? . . . . . . . . . . . . . . . 1.2 Dclaration dun tableau . . . . . . . . . . . . . . . e 1.3 Exemple : Dclaration de tableaux . . . . . . . . . e 1.4 Acc`s indiciel . . . . . . . . . . . . . . . . . . . . . e 1.5 Exemple : Acc`s indiciel . . . . . . . . . . . . . . . e 1.6 Procdure et fonction : Cas particulier dun tableau e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 4 5 5 6 7 7 7 8 9 9 9 10 12 14 14 14 14 15 15 16 16 17 18 19 20 20 21 22

2 Exemple : Saisie et achage dun tableau / tb00acours2 2.1 Lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Procdure saisirTableau (saisie dun tableau) . . . . . . . . . . . . . . . . e 2.3 Procdure acherTableau (achage dun tableau) . . . . . . . . . . . . . e 3 Parcours dun tableau / tb00acours3 3.1 Parcours complet, partiel, imbriqu dun tableau . . . . . . . . . . e 3.2 Exemple de parcours complet : Somme dun tableau dentiers . . . 3.3 Exemple de parcours partiel : Tableau dentiers . . . . . . . . . . 3.4 Exemple de parcours imbriqu : Nombre de successeurs suprieurs e e

. . . .

. . . .

. . . .

. . . .

4 Tableaux multidimensionnels / tb00acours4 4.1 Dclaration dun tableau multidimensionnel . . . . . . . . . . . . . . . . e 4.2 Exemple : Dclaration de tableaux . . . . . . . . . . . . . . . . . . . . . e 4.3 Acc`s indiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 5 Parcours dun tableau multidimensionnel / tb00acours5 5.1 Exemple de parcours complet : Calcul de la somme dune matrice . . . . 6 Exercices : Apprhender le cours e 6.1 Achage dun tableau / tb51exerc1-alg, tbacherA1 . . . . . . . . 6.2 Saisie dun tableau / tb52exerc1-alg, tbsaisirA1 . . . . . . . . . . . 6.3 Initialisation dun tableau / tb53exerc1-alg, tbinitialiserA1 . . . . . 6.4 Initialisation alatoire dun tableau / tb54exerc1-alg, tbaleatoireA1 e

. . . .

. . . .

. . . .

7 Exercices : Appliquer le cours 7.1 Maximum dun tableau / tb61exerc1-alg, tbmaximumA1 . . . . . . . . . 7.2 Minimum dun tableau / tb62exerc1-alg, tbminimumA1 . . . . . . . . . . 7.3 Extremums dun tableau, Algorithme naif / tb63exerc1-alg, tbminmaxA1

Unisciel algoprog tb00cours, June 25, 2012

8 Exercices : Approfondir le cours 23 8.1 Extraction / tb71exerc1-alg, tbextraireA1 . . . . . . . . . . . . . . . . . 23 8.2 Extremums dun tableau, Algorithme rus / tb72exerc1-alg, tbextremumsA1 24 e 9 Exercices : Complments e 9.1 Nombre dlments infrieurs / tb82exerc1-alg, tbninferieursA1 . . . . . . ee e 26 26

Unisciel algoprog tb00cours, June 25, 2012

Tableaux Algorithmique
Mots-Cls Algorithmique, Tableaux, Tableaux unidimensionnels, Saisie et achage e dun tableau unidimensionnel, Parcours dun tableau unidimensionnel, Tableaux multidimensionnels, Parcours dun tableau multidimensionnel, Vue linaire dun tableau mule tidimensionnel. Requis Structures de base, Structures conditionnelles, Algorithmes paramtrs, Structures rptitives, Schma itratif. e e e e e e

Introduction
Les tableaux sont omniprsents en algorithmique de par leur praticit : une variable e e regroupant sous le mme nom plusieurs valeurs de mme type accessibles par leur position. e e Ce module traite du tableau quil soit simple (sur une dimension) ou non. La division Cours dcrit le tableau unidimensionnel, les parcours dun tableau unidie mensionnel, le tableau multidimensionnel, les parcours dun tableau multidimensionnel et la vue linaire dun tableau multidimensionnel. Lexemple ralise les utilitaires de saisie e e et dachage dun tableau unidimensionnel. Le rsum donne une br`ve synth`se des e e e e notions introduites. Les divisions Apprhender / Appliquer / Approfondir le cours et Complments ape e pliquent les notions introduites a travers lcriture dutilitaires de parcours de tableaux. ` e

Conclusion
Tableaux Les tableaux sont utiliss pour regrouper sous un mme nom un nombre e e donn de valeurs de mme type. Un tableau est dni par un nom, un type, le nombre e e e de dimensions et une taille pour chacune des dimensions. Acc`s indiciel En algorithmique, un tableau est indic sur N de 1 (par dfaut) a NMAX e e e ` o` NMAX est la taille physique dni a la dclaration. u e ` e Parcours de tableaux La rptitive Pour est le moyen le plus simple de parcourir e e compl`tement un tableau. Le parcours partiel est le plus souvent bas sur une rptitive e e e e conditionnelle (TantQue ou Rpter). Les boucles imbriques combinent gnralement e e e e e une rptitive Pour externe avec une rptitive conditionnelle interne. e e e e

Rfrences gnrales ee e e

Unisciel algoprog tb00cours, June 25, 2012

== Activits Cours == e 1
1.1

Tableaux / tb00acours1
Quest-ce quun tableau ?

Dnition Un tableau unidimensionnel ou tableau linaire est une variable ine e dice permettant de stocker n valeurs de mme type. Le nombre maximal dlments, qui e e ee est prcis a la dclaration, sappelle la dimension (ou capacit ) du tableau. Le type e e` e e du tableau est le type de ses lments. La position dun lment sappelle indice ou ee ee rang de llment. ee Remarque La dnition indique que : e Tous les lments dun tableau portent le mme nom (celui du tableau). ee e Tous les lments dun tableau ont le mme type ; on parlera dun tableau dentiers, ee e dun tableau de caract`res, etc. e Un tableau poss`de une taille xe, connue d`s le dpart de lalgorithme. Cette taille e e e ne pourra plus changer au cours du droulement de lalgorithme. e Un tableau peut ne pas tre enti`rement rempli mais il ne pourra jamais contenir e e plus dlments que le nombre prvu lors de la dclaration. ee e e

1.2

Dclaration dun tableau e

Syntaxe Variable nomVariable : TypeVariable [ dimension ]

Figure 1 Dclaration dun tableau e Explication Dclare une variable dimensionne nomVariable, la dimension tant ine e e dique entre crochets apr`s le type de la variable. e e

1.3

Exemple : Dclaration de tableaux e

Variable tab : Entier [ 8 ] Constante NTEMPMAX <- 366 Variable temp : Rel [ NTEMPMAX ] e Explication tab est un tableau de 8 cases de type entier et temp un tableau de rel e de NTEMPMAX cases.

Unisciel algoprog tb00cours, June 25, 2012

1.4

Acc`s indiciel e

Syntaxe nomVariable[ k ]

Figure 2 Acc`s indiciel e Explication Acc`de a la case indice k dune variable dimensionne nomVariable. e ` e

En fait, on dira plutt quun tableau poss`de un ensemble dindices. A chaque valeur o e de lindice ne correspond quune et une seule case du tableau, donc un lment. Le temps ee dacc`s a llment dun tableau est xe. e ` ee Remarque En algorithmique, les cases sont numrotes de 1 a NMAX (dimension du e e ` tableau) et chaque langage de programmation poss`de sa propre convention pour indicer e un tableau : les langages C, C++ et Java commencent a indicer un tableau ` partir de ` a 0 ; le langage Basic ` partir de 1 ou 0 ; le langage ADA a partir dune valeur quelconque. a ` Attention La plupart des langages contrlent le dbordement (dpassement des lio e e mites) dun tableau et dclenchent une erreur qui gnralement arrte le programme, e e e e mais le langage C, par exemple, neectue aucun contrle. o

1.5

Exemple : Acc`s indiciel e

Soient les dclarations e Constante NMAX <- ??? Variable tab : Entier[NMAX] Variable x : Entier tab[2] tab[k] tab[2]<-5 x<-tab[k] tab[2]<-a

la case indice 2 du tableau tab la case indice k de tab. Lentier k doit tre compris entre 1 et NMAX e la case indice 2 de tab reoit la valeur 5 c la variable x reoit le contenu de la case indice k (entier entre 1 et NMAX) de tab c erreur, type non compatible. Cest un tableau dentiers et non un tableau de caract` e Table 1 Exemples dacc`s indiciel e

Unisciel algoprog tb00cours, June 25, 2012

1.6

Procdure et fonction : Cas particulier dun tableau e

Lors du passage en param`tre dun tableau, le passage par valeur a pour consquence e e de crer une copie de lentit pass en param`tre eectif avec la mme taille puis dy e e e e e transfrer toutes les valeurs de ce dernier. Cette opration est coteuse en temps et en e e u mmoire. e Lalgorithmique ne se proccupe pas de cet aspect technique. Par contre il convient de e tenir compte des caractristiques du langage de programmation pour raliser le passage e e des param`tres le plus adquat. Exemple : en langage C++, le passage par rfrence e e ee constant permet de raliser un passage par rfrence avec vrication par le compilateur e ee e que le param`tre nest accd quen lecture. Ceci garantit ecacit et scurit. e e e e e e Lautre point particulier des tableaux est quils ne disposent pas de fonction permettant den conna leur taille physique. Par consquent, toute gestion de tableau devra tre e prciser le nombre dlments ` considrer. Do` len-tte suivante e ee a e u e action ssprg ( DR tab : T [ NMAX ] ; n : entier ... ) Le param`tre tab est un tableau dlments de type T de taille maximale NMAX pass e ee e par DR (pour viter la recopie) et lentier n indique la taille logique (c.-`-d. le nombre e a dlments ` considrer de tab). ee a e

Unisciel algoprog tb00cours, June 25, 2012

Exemple : Saisie et achage dun tableau / tb00acours2

La saisie et lachage sont deux oprations de base dun tableau. Nous allons donc e crire deux procdures utiles saisirTableau et afficherTableau. e e

2.1

Lalgorithme

Voici dabord lalgorithme. Constante NMAX <- 20 Algorithme pg_tbcompletA1 Variable tab : Entier [ NMAX ] Variable nelems : Entier Dbut e | saisirTableau ( tab , nelems , NMAX ) | afficherTableau ( tab , nelems ) Fin Inclure "tbafficherA1.alg" Inclure "tbsaisirA1.alg" @[pg-tbsaisirA1.alg] Explication Lalgorithme dclare un tableau dentiers tab de taille maximale NMAX e et un entier nelems qui stocke(ra) la taille logique de tab. La procdure saisirTableau e a pour eet de demander le nombre dlments nelems puis de saisir les lments dans ee ee tab. La procdure afficherTableau ache les nelems lments de tab. e ee Voici un exemple dexcution. e Nombre dlments dans [1..20]? 10 e e t[1]? 45 t[2]? 54 t[3]? 1 t[4]? -56 t[5]? 22 t[6]? 134 t[7]? 49 t[8]? 12 t[9]? 90 t[10]? -27 [ 45 54 1 -56 22 134 49 12 90 -27 ]

2.2

Procdure saisirTableau (saisie dun tableau) e

La procdure saisirTableau demande le nombre dlments n (dans [1..nmax]) puis e ee saisit un ` un les n lments dun tableau t. a ee

Unisciel algoprog tb00cours, June 25, 2012

Remarque Demande n dans [1..nmax] puis saisit n elments dans t e Action saisirTableau ( R t : Entier [ NMAX ] ; R n : Entier ; nmax : Entier ) Variable j : Entier Dbut e | Rpter e e | | Afficher ( "Nombre dlments dans [1.." , nmax , "]? " ) e e | | Saisir ( n ) | Jusqu` ( 1 <= n Et n <= nmax ) a | Pour j <- 1 a n Faire ` | | Afficher ( "t[" , j , "]? " ) | | Saisir ( t [ j ] ) | FinPour Fin @[tbsaisirA1.alg]

2.3

Procdure acherTableau (achage dun tableau) e

La procdure afficherTableau ache a la queue-leu-leu (spars par un espace) les e ` e e n lments dun tableau t. ee Remarque Affiche les n elments de t e Action afficherTableau ( DR t : Entier [ NMAX ] ; n : Entier ) Variable j : Entier Dbut e | Afficher ( "[ " ) | Pour j <- 1 a n Faire ` | | Afficher ( t [ j ] , " " ) | FinPour | Afficher ( "]" ) Fin @[tbacherA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

3
3.1

Parcours dun tableau / tb00acours3


Parcours complet, partiel, imbriqu dun tableau e

La plupart des algorithmes bass sur les tableaux utilisent des itrations permettant e e de faire un parcours complet des dirents lments du tableau. De tels algorithmes e ee tablissent le rsultat recherch par rcurrence en fonction des lments successivement e e e e ee rencontrs. La rptitive Pour est le moyen le plus simple de parcourir compl`tement e e e e un tableau. Certains algorithmes sur les tableaux se contentent de parcourir successivement les dirents lments du tableau jusqu` rencontrer un lment satisfaisant une certaine e ee a ee condition. Un tel parcours partiel est le plus souvent bas sur une rptitive condie e e tionnelle. Enn certains algorithmes sur les tableaux font appel a des boucles imbriques. La ` e boucle principale sert gnralement a parcourir les cases une a une, tandis que le traitee e ` ` ment de chaque case dpend du parcours simple dune partie du tableau (par exemple e toutes les cases restantes) ce qui correspond ` la boucle interne. a

3.2

Exemple de parcours complet : Somme dun tableau dentiers

Lalgorithme demande des entiers et les stocke dans un tableau (via la procdure e saisirTableau), puis il calcule la somme des lments du tableau via la fonction sommeTableau ee et en ache le rsultat. e Constante NMAX <- 20 Algorithme pg_tbcompletA1 Variable tab : Entier [ NMAX ] Variable nelems : Entier Dbut e | saisirTableau ( tab , nelems , NMAX ) | Afficher ( "==> Somme des elments est " , sommeTableau ( tab , nelems ) ) e Fin Inclure "tbsommeA1.alg" Inclure "tbsaisirA1.alg" @[pg-tbcompletA1.alg] Voici un exemple dexcution. e Nombre dlments dans [1..20]? 10 e e t[1]? 45 t[2]? 54 t[3]? 1 t[4]? -56 t[5]? 22 t[6]? 134

Unisciel algoprog tb00cours, June 25, 2012 t[7]? 49 t[8]? 12 t[9]? 90 t[10]? -27 ==> Somme des lments est 324 e e

10

Fonction sommeTableau La fonction calcule et renvoie la somme des n lments dun ee tableau dentiers t. Remarque Calcule la somme des n lments dun tableau t e e Fonction sommeTableau ( DR t : Entier [ NMAX ] ; n : Entier ) : Entier Variable somme : Entier Variable j : Entier Dbut e | somme <- 0 | Pour j <- 1 a n Faire ` | | somme <- somme + t [ j ] | FinPour | Retourner ( somme ) Fin @[tbsommeA1.alg] Explication La fonction dclare une variable somme (le rsultat) et linitialise a zro. e e ` e Puis elle parcourt les n lments du tableau t par la boucle Pour de compteur j et elle ee ajoute la valeur de llment t[j] dans somme. ee

3.3

Exemple de parcours partiel : Tableau dentiers

Lalgorithme demande des entiers et les stocke dans un tableau (procdure saisirTableau) e puis il indique si le tableau dentiers est compos uniquement dentiers positifs. Dans la e ngative, il indique la valeur et la position du premier lment ngatif. e ee e Constante NMAX <- 30 Algorithme pg_tbpartielA1 Variable tab : Entier [ NMAX ] Variable nelems : Entier Variable positif : Boolen e Variable pos : Entier Dbut e | saisirTableau ( tab , nelems | positif <- tableauPositifs ( | Si positif Alors | | Afficher ( "==> Tableau | Sinon | | Afficher ( "==> Tableau | | Afficher ( "==> Premier | FinSi

, NMAX ) tab , nelems , pos ) dentiers positifs" ) dentiers relatifs" ) entier " , tab [ pos ] , " en position " , pos )

Unisciel algoprog tb00cours, June 25, 2012 Fin Inclure "tbpartielA1.alg" Inclure "tbsaisirA1.alg" @[pg-tbpartielA1.alg]

11

Explication La variable tab est un tableau dentiers dau plus NMAX lments, nelems ee est le nombre dlments actifs du tableau, le boolen positif est Vrai si aucun entier ee e ngatif na t dtect et lentier pos est lindice du premier ngatif (sil existe). e ee e e e Fonction tableauPositifs La fonction renvoie Vrai si aucun entier ngatif na t e ee dtect dans les n lments dun tableau t, Faux sinon et restitue alors dans lentier pos e e ee lindice du premier lment ngatif de t. ee e

Remarque Renvoie vrai si le tableau nest compos que dentiers positifs e Fonction tableauPositifs ( DR t : Entier [ NMAX ] ; n : Entier ; R pos : Entier ) : Bo Variable rs : Boolen e Dbut e | rs <- Vrai | pos <- 0 | TantQue ( rs Et pos < n ) Faire | | pos <- pos + 1 | | Si ( tab [ pos ] < 0 ) Alors | | | rs <- Faux | | FinSi | FinTantQue | Retourner ( rs ) Fin @[tbpartielA1.alg] Explication La variable rs est le rsultat. La fonction initialise dabord rs a Vrai et e ` pos a zro (un tableau vide est positif) puis elle traverse le tableau tant que rs reste Vrai ` e et que les n lments non pas t visits. Dans le cas o` llment courant est ngatif, ee ee e u ee e rs est mis a Faux ce qui fait sortir de la boucle et retournera Faux. Sinon la sortie de ` la boucle seectue avec pos valant n indiquant que tous les lments ont t traits et ee ee e quaucun ntait ngatif. e e Remarque Notez que si le tableau contient un lment ngatif, son indice est eectiee e vement pos (incrmentation de lindice avant lacc`s dans le corps de la boucle TantQue). e e Exemple dexcution : tableau dentiers relatifs e Nombre dlments dans [1..30]? 10 e e t[1]? 45 t[2]? 54 t[3]? 1 t[4]? -56

Unisciel algoprog tb00cours, June 25, 2012 t[5]? 22 t[6]? 134 t[7]? 49 t[8]? 12 t[9]? 90 t[10]? -27 ==> Tableau dentiers relatifs ==> Premier entier -56 en position 4 Exemple dexcution : tableau dentiers positifs e Nombre dlments dans [1..30]? 5 e e t[1]? 10 t[2]? 6 t[3]? 3 t[4]? 8 t[5]? 100 ==> Tableau dentiers positifs

12

3.4

Exemple de parcours imbriqu : Nombre de successeurs sue prieurs e

Lalgorithme calcule, pour chaque case dun tableau t de nelems lments, le nombre ee de cases suivantes qui contiennent un lment strictement suprieur. Les rsultats sont plaee e e cs dans le tableau trs puis ce dernier est ach. Il utilise les procdures saisirTableau e e e et afficherTableau. Constante NMAX <- 50 Algorithme pg_tbimbriqueA1 Variable tab : Entier [ NMAX ] Variable trs : Entier [ NMAX ] Variable nelems : Entier Dbut e | saisirTableau ( tab , nelems , NMAX ) | calculerNSuperieurs ( tab , nelems , trs ) | afficherTableau ( trs , nelems ) Fin Inclure "tbimbriqueA1.alg" Inclure "tbsaisirA1.alg" Inclure "tbafficherA1.alg" @[pg-tbimbriqueA1.alg] Procdure calculerNSuperieurs La procdure calculerNSuperieurs calcule dans e e trs le nombre de valeurs successeurs suprieures ` t[j] pour chaque case j des n lments e a ee du tableau dentiers t. Ici plutt que de raliser une boucle imbrique avec j lindice o e e ditration de la boucle principale (parcours pour remplir trs) et k lindice ditration de e e

Unisciel algoprog tb00cours, June 25, 2012

13

la boucle interne (parcours des cases restantes de t), pour des questions decacit et de e structuration, le parcours imbriqu est ralis par la fonction nsuperieurs qui renvoie le e e e nombre dlments de t[j..n] suprieur ` elem. ee e a

Remarque Calcule le nombre de successeurs suprieur e Action calculerNSuperieurs ( DR t : Entier [ NMAX ] ; n : Entier ; R trs : Entier [ NM Variable j : Entier Dbut e | Pour j <- 1 a n Faire ` | | trs [ j ] <- nsuperieurs ( t , j + 1 , n , t [ j ] ) | FinPour Fin

Remarque Renvoie le nombre dlments de t[j..n] suprieur ` elem e e e a Fonction nsuperieurs ( DR t : Entier [ NMAX ] ; j : Entier ; n : Entier ; elem : Entie Variable rs : Entier Variable k : Entier Dbut e | rs <- 0 | Pour k <- j a n Faire ` | | Si ( t [ k ] > elem ) Alors | | | rs <- rs + 1 | | FinSi | FinPour | Retourner ( rs ) Fin @[tbimbriqueA1.alg] Voici un exemple dexcution. e Nombre dlments dans [1..50]? 10 e e t[1]? 45 t[2]? 54 t[3]? 1 t[4]? -56 t[5]? 22 t[6]? 134 t[7]? 49 t[8]? 12 t[9]? 90 t[10]? -27 [ 4 2 5 6 3 0 1 1 0 0 ]

Unisciel algoprog tb00cours, June 25, 2012

14

4
4.1

Tableaux multidimensionnels / tb00acours4


Dclaration dun tableau multidimensionnel e

Syntaxe Variable nomVariable : typeVariable[ dimension1 , dimension2 ...] Explication Dclare une variable multi-dimensionne nomVariable, les dimensions e e tant indiques entre crochets apr`s le type de la variable. e e e

4.2

Exemple : Dclaration de tableaux e

Variable mat : Entier [ 3 , 5 ] Variable cube : Rel [ 10 , 20 , 15 ] e Explication La variable mat est une matrice de 3 lignes et 5 colonnes dentier et cube est un cube de 15 matrices de 10 lignes et 20 colonnes de rel. e

4.3

Acc`s indiciel e

Pour accder a un lment dun tableau multidimensionnel, il sut de prciser entre e ` ee e crochets lindice de la case contenant cet lment, et ce pour chacune des dimensions. ee Exemple : pour accder a llment ligne 2, colonne 1, dune matrice on crit : mat[2,1]. e ` ee e

Unisciel algoprog tb00cours, June 25, 2012

15

Parcours dun tableau multidimensionnel / tb00acours5

Les parcours dun tableau multidimensionnel sont les mmes que ceux dun tableau e unidimensionnel, a savoir, le parcours complet, partiel ou imbriqu. ` e

5.1

Exemple de parcours complet : Calcul de la somme dune matrice

La fonction renvoie la somme des lments dun tableau bi-dimensionnel t de nligs ee lignes et ncols colonnes. Remarque Constante NMAXLIGS <- ... Remarque Constante NMAXCOLS <- ...

Remarque Renvoie la somme des elments de t[1..nligs,1..ncols] e Fonction sommeTableau2d ( DR t : Entier [ NMAXLIGS ] [ NMAXCOLS ] ; nligs : Entier ; n Variable somme : Entier Variable j , k : Entier Dbut e | somme <- 0 | Pour j <- 1 a nligs Faire ` | | Pour k <- 1 a ncols Faire ` | | | somme <- somme + t [ j , k ] | | FinPour | FinPour | Retourner ( somme ) Fin @[tbsomme2dA1.alg] Explication somme est la somme des lments dj` parcourus, j est lindice ditee ea e ration sur les lignes et k lindice ditration sur les colonnes. La fonction initialise le e rsultat somme a zro puis elle parcourt chaque ligne (rptitive Pour de compteur j e ` e e e externe) et chaque colonne (rptitive Pour de compteur k interne) et elle ajoute la vae e leur t[j,k] a la somme actuelle somme. Enn elle renvoie somme, somme des lments ` ee t[1..nligs,1..ncols].

Unisciel algoprog tb00cours, June 25, 2012

16

== Activits Exercices == e 6
6.1

Exercices : Apprhender le cours e


Achage dun tableau / tb51exerc1-alg, tbacherA1

Mots-Cls Tableaux. Import iolib. Utilise Parcours complet. e Lachage dun tableau tant un utilitaire fondamental a conna e ` tre, sans regarder le cours : Question Ecrivez une procdure afficherTableau(t,n) qui ache, ` la queue-leue a leu spars par un espace, le tout entre crochet, les n lments dun tableau dentiers t e e ee de taille maximale NMAX. Exemple dexcution sans tenir compte de la saisie. e Nombre dlments dans [1..20]? 10 e e t[1]? 45 t[2]? 54 t[3]? 1 t[4]? -56 t[5]? 22 t[6]? 134 t[7]? 49 t[8]? 12 t[9]? 90 t[10]? -27 [ 45 54 1 -56 22 134 49 12 90 -27 ] Solution simple Remarque Affiche les n elments de t e Action afficherTableau ( DR t : Entier [ NMAX ] ; n : Entier ) Variable j : Entier Dbut e | Afficher ( "[ " ) | Pour j <- 1 a n Faire ` | | Afficher ( t [ j ] , " " ) | FinPour | Afficher ( "]" ) Fin @[tbacherA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

17

6.2

Saisie dun tableau / tb52exerc1-alg, tbsaisirA1

Mots-Cls Tableaux. Import iolib. Utilise Parcours complet. e Ici aussi, la saisie dun tableau tant un utilitaire fondamental a conna e ` tre, sans regarder le cours : Question Ecrivez une procdure saisirTableau(t,n,nmax) qui demande le nombre e de valeurs (dans n) compris entre 1 et nmax puis eectue la saisie de n valeurs enti`res e dans t de taille maximale NMAX. Exemple dexcution sans tenir compte de lachage. e Nombre dlments dans [1..20]? 10 e e t[1]? 45 t[2]? 54 t[3]? 1 t[4]? -56 t[5]? 22 t[6]? 134 t[7]? 49 t[8]? 12 t[9]? 90 t[10]? -27 [ 45 54 1 -56 22 134 49 12 90 -27 ] Solution simple Remarque Demande n dans [1..nmax] puis saisit n elments dans t e Action saisirTableau ( R t : Entier [ NMAX ] ; R n : Entier ; nmax : Entier ) Variable j : Entier Dbut e | Rpter e e | | Afficher ( "Nombre dlments dans [1.." , nmax , "]? " ) e e | | Saisir ( n ) | Jusqu` ( 1 <= n Et n <= nmax ) a | Pour j <- 1 a n Faire ` | | Afficher ( "t[" , j , "]? " ) | | Saisir ( t [ j ] ) | FinPour Fin @[tbsaisirA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

18

6.3

Initialisation dun tableau / tb53exerc1-alg, tbinitialiserA1

Mots-Cls Tableaux. Utilise Parcours complet. e Question Ecrivez une procdure initialiserTableau(t,n,val) qui initialise les n e lments dun tableau dentiers t de taille maximale NMAX a la valeur val. ee ` Solution simple Remarque Initialise n elments de t a la valeur val e ` Action initialiserTableau ( DR t : Entier [ NMAX ] ; n : Entier ; val : Entier ) Variable j : Entier Dbut e | Pour j <- 1 a n Faire ` | | t [ j ] <- val | FinPour Fin @[tbinitialiserA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

19

6.4

Initialisation alatoire dun tableau / tb54exerc1-alg, tbae leatoireA1

Mots-Cls Tableaux. Utilise Parcours complet. e La fonction alatoire(a) fournie un entier pseudo-alatoire dans [0..a-1]. e e Question Ecrivez une procdure aleatoireTableau(t,n,vmax) qui initialise avec des e entiers choisis au hasard dans ]-vmax..vmax[ les n lments dun tableau dentiers t de ee taille maximale NMAX. Aide simple En appelant la fonction de gnration dun entier pseudo-alatoire deux e e e fois de suite et en faisant la dirence des deux entiers, ceci fournit eectivement un entier e dans ]-vmax..vmax[. Solution simple Remarque Initialise les n elments de t de faon alatoire ; valeur maximum vmax e c e Action aleatoireTableau ( DR t : Entier [ NMAX ] ; n : Entier ; vmax : Entier ) Variable j : Entier Dbut e | Pour j <- 1 a n Faire ` | | t [ j ] <- Alatoire ( vmax ) - Alatoire ( vmax ) e e | FinPour Fin @[tbaleatoireA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

20

7
7.1

Exercices : Appliquer le cours


Maximum dun tableau / tb61exerc1-alg, tbmaximumA1

Mots-Cls Tableaux. Utilise Parcours complet. e Question Ecrivez une fonction maximumElement(t,n) qui renvoie le maximum des n lments dun tableau dentiers t de taille maximale NMAX. ee Solution simple Remarque Calcule le maximum dun tableau t de n elements Fonction maximumElement ( DR t : Entier [ NMAX ] ; n : Entier ) : Entier Variable vmax : Entier Variable j : Entier Dbut e | vmax <- t [ 1 ] | Pour j <- 2 a n Faire ` | | Si ( vmax < t [ j ] ) Alors | | | vmax <- t [ j ] | | FinSi | FinPour | Retourner ( vmax ) Fin @[tbmaximumA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

21

7.2

Minimum dun tableau / tb62exerc1-alg, tbminimumA1

Mots-Cls Tableaux. Utilise Parcours complet. Mme genre Maximum dun tableau. e e Question Ecrivez une fonction minimumElement(t,n) qui renvoie le minimum des n lments dun tableau dentiers t de taille maximale NMAX. ee Solution simple Remarque Calcule le minimum dun tableau t de n elements Fonction minimumElement ( DR t : Entier [ NMAX ] ; n : Entier ) : Entier Variable vmin : Entier Variable j : Entier Dbut e | vmin <- t [ 1 ] | Pour j <- 2 a n Faire ` | | Si ( t [ j ] < vmin ) Alors | | | vmin <- t [ j ] | | FinSi | FinPour | Retourner ( vmin ) Fin @[tbminimumA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

22

7.3

Extremums dun tableau, Algorithme naif / tb63exerc1-alg, tbminmaxA1

Mots-Cls Tableaux. Utilise Parcours complet. e Question Ecrivez une procdure minmaxElement(t,n,vmin,vmax) qui calcule (algoe rithme na a la fois le minimum vmin et le maximum vmax de n lments dun tableau f) ` ee dentiers t de taille maximale NMAX. Solution simple Remarque Calcule le minimum et le maximum de n valeurs de t (algorithme naif) Action minmaxElement ( DR t : Entier [ NMAX ] ; n : Entier ; R vmin : Entier ; R vmax Variable j : Entier Dbut e | vmin <- t [ 1 ] | vmax <- t [ 1 ] | Pour j <- 2 a n Faire ` | | Si ( t [ j ] < vmin ) Alors | | | vmin <- t [ j ] | | Sinon | | | Si ( vmax < t [ j ] ) Alors | | | | vmax <- t [ j ] | | | FinSi | | FinSi | FinPour Fin @[tbminmaxA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

23

8
8.1

Exercices : Approfondir le cours


Extraction / tb71exerc1-alg, tbextraireA1

Mots-Cls Tableaux. Utilise Parcours partiel. e Question Ecrivez une procdure extraireTableau(t,ndebut,nfin,trs,ntrs) qui e copie les valeurs dun tableau dentiers t de lindice ndebut a lindice nfin exclus dans un ` tableau trs de nombre actuel dlments ntrs et actualise ntrs de sorte quil reprsente ee e toujours le nombre eectif dlments de trs. Les tableaux t et trs sont tous deux de ee taille maximale NMAX. Solution simple

Remarque Extrait t[ndebut..nfin[ vers trs[ Action extraireTableau ( DR t : Entier [ NMAX ] ; ndebut : Entier ; nfin : Entier ; DR Variable j : Entier Dbut e | Pour j <- ndebut ` nfin - 1 Faire a | | ntrs <- ntrs + 1 | | trs [ ntrs ] <- t [ j ] | FinPour Fin @[tbextraireA1.alg]

Unisciel algoprog tb00cours, June 25, 2012

24

8.2

Extremums dun tableau, Algorithme rus / tb72exerc1-alg, e tbextremumsA1

Mots-Cls Tableaux. Utilise Parcours complet. e Lide pour amliorer lalgorithme de recherche des extremums (minimum et maxie e mum) dun tableau est de regrouper les lments a comparer par paires, c.-`-d. de comee ` a parer ` chaque tour de boucle t[2k] et t[2k+1], et ensuite de comparer un seul des a deux au minimum vmin et lautre au maximum vmax. On distinguera donc le cas o` le u nombre dlments du tableau est pair du cas o` il est impair. La procdure pourra utiliser ee u e lopration permuter2i(a,b) pour permuter deux entiers a et b. e Question Ecrivez une procdure extremumsElement(t,n,vmin,vmax) qui calcule (ale gorithme un peu plus rus et eectuant moins de comparaisons que lalgorithme na ` e f) a la fois le minimum vmin et le maximum vmax des n lments dun tableau dentiers t de ee taille maximale NMAX. Solution simple

Remarque Calcule le minimum et le maximum de n valeurs de t (algorithme rus) e Action extremumsElement ( DR t : Entier [ NMAX ] ; n : Entier ; R vmin : Entier ; R vm Variable j : Entier Dbut e | vmin <- t [ 1 ] | Si ( n >= 2 ) Alors | | vmax <- t [ 2 ] | Sinon | | vmax <- t [ 1 ] | FinSi | Si ( vmax < vmin ) Alors | | permuter2i ( vmin , vmax ) | FinSi | Si ( Modulo ( n , 2 ) = 0 ) Alors | | j <- 1 | Sinon | | j <- 2 | FinSi | TantQue j < n Faire | | Si ( t [ j ] < t [ j + 1 ] ) Alors | | | Si ( t [ j ] < vmin ) Alors | | | | vmin <- t [ j ] | | | FinSi | | | Si ( vmax < t [ j + 1 ] ) Alors | | | | vmax <- t [ j + 1 ] | | | FinSi | | Sinon | | | Si ( t [ j + 1 ] < vmin ) Alors | | | | vmin <- t [ j + 1 ] | | | FinSi

Unisciel algoprog tb00cours, June 25, 2012 | | | | | | Fin | | Si ( vmax < t [ j ] ) Alors | | | vmax <- t [ j ] | | FinSi | FinSi | j <- j + 2 FinTantQue

25

@[tbextremumsA1.alg] Commentaires La procdure initialise vmin et vmax aux deux premiers lments (ou e ee au premier lment sil en existe quun seul). Elle assure ensuite que vmin est eectivement ee infrieur ` vmax (sinon elle permute les deux valeurs). Le test du modulo initialise lindice e a j de sorte que les lments du tableau puissent tre traits par paire. La rptitive TantQue ee e e e e traite les lments par paire et actualise les valeurs de vmin et vmax si besoin. ee

Unisciel algoprog tb00cours, June 25, 2012

26

9
9.1

Exercices : Complments e
Nombre dlments infrieurs / tb82exerc1-alg, tbninferieursA1 ee e

Mots-Cls Tableaux. Utilise Parcours complet. e Question Ecrivez une fonction ninferieurs(t,n,val) qui renvoie le nombre de valeurs infrieures a une valeur val dans les n valeurs dun tableau dentiers t de taille e ` maximale NMAX. Question Dduisez une procdure calculerNInferieurs(t,n,trs) qui calcule dans e e le tableau dentiers trs le nombre de valeurs successeurs infrieures ` t[j] pour chaque e a case j des n lments du tableau dentiers t. Les deux tableaux sont de taille maximale ee NMAX. Solution simple

Remarque Calcule le nombre de successeurs infrieurs e Action calculerNInferieurs ( DR t : Entier [ NMAX ] ; n : Entier ; R trs : Entier [ NM Variable j : Entier Dbut e | Pour j <- 1 a n Faire ` | | trs [ j ] <- ninferieurs ( t , j + 1 , n , t [ j ] ) | FinPour Fin

Remarque Renvoie le nombre dlments de t[j..n] infrieur ` elem e e e a Fonction ninferieurs ( DR t : Entier [ NMAX ] ; j : Entier ; n : Entier ; elem : Entie Variable rs : Entier Variable k : Entier Dbut e | rs <- 0 | Pour k <- j a n Faire ` | | Si ( t [ k ] < elem ) Alors | | | rs <- rs + 1 | | FinSi | FinPour | Retourner ( rs ) Fin @[tbninferieursA1.alg]