Utilitaires Tableau [tb01] - Outils Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 9 avril 2015 Table des matières 1 Utilitaires Tableau / tb01outils1 (C++) 1 1.1 Procédure affichertab (affichage d un tableau)............... 2 1.2 Procédure afficherlntab (affichage par ligne)................ 2 1.3 Procédure copiertab (copie d un tableau).................. 2 1.4 d :....................................... 3 1.5 Fonction identiquestab (égalité de tableaux)................ 3 1.6 f :........................................ 3 1.7 Fonction sommetab (somme d un tableau)................. 3 1.8 h : prévu pour somme sioux......................... 3 1.9 Procédure initialisertab (initialisation d un tableau)............ 3 1.10 Procédure aleatoiretab (initialisation aléatoire).............. 4 1.11 Fonction indicemaxtab (indice du maximum)............... 4 1.12 Fonction indicemintab (indice du minimum)................ 5 1.13 Fonction maximumtab (maximum d un tableau)............. 5 1.14 Fonction minimumtab (minimum d un tableau).............. 5 1.15 o :....................................... 5 1.16 Fonction permutationtab (test de permutation).............. 5 1.17 q : prévu pour partitionner (neg à gauche, pos à droite).......... 6 1.18 Procédure renversertab (renverse un tableau)............... 6 1.19 Procédure saisirtab (saisie d un tableau).................. 6 1.20 Fonction nsuperieurstab (nombre de supérieurs).............. 7 1.21 Fonction ninferieurstab (nombre d inférieurs)............... 7 1.22 Procédure minmaxtab (vmin et vmax d un tableau)........... 8 1.23 Procédure extrmstab (extremums d un tableau).............. 8 1.24 Procédure extrairetab (extraction d un sous-tableau)........... 9 1.25 Fonction tabpositifs (test d entiers positifs)................. 9 1.26 Fonction tabnegatifs (test d entiers négatifs)................ 9 1 Utilitaires Tableau / tb01outils1 (C++) Mots-Clés Tableau unidimensionnel, Algorithmique, Programmation, C++. 1
Unisciel algoprog Utilitaires Tableau / tb01outils1 2 Requis Structures de base, Structures conditionnelles, Algorithmes paramétrés, Structures répétitives, Schéma itératif, Tableau unidimensionnel. On suppose les définitions suivantes : Constante NMAX <-... Typedef Tableau = Entier [ NMAX ] Ce document contient un ensemble d utilitaires «Tableau» sous forme de problèmes externalisés. 1.1 Procédure affichertab (affichage d un tableau) Écrivez une procédure affichertab(t,n) qui affiche les n éléments d un Tableau t. Affichez les éléments à la queue-leu-leu séparés par un espace, le tout entre crochet. Exemple : [45 54... -27] C++ @[affichertaba1.cpp] 1.2 Procédure afficherlntab (affichage par ligne) Écrivez une procédure afficherlntab(t,n) qui affiche les n éléments d un Tableau t. Affichez une valeur par ligne, le tout entre crochet. Exemple : [45 54... -27] C++ @[afficherlntaba1.cpp] 1.3 Procédure copiertab (copie d un tableau) Écrivez une procédure copiertab(t,n,copie) qui copie les n éléments d un Tableau t dans un Tableau copie.
Unisciel algoprog Utilitaires Tableau / tb01outils1 3 C++ @[copiertaba1.cpp] 1.4 d : 1.5 Fonction identiquestab (égalité de tableaux) On dira que deux Tableau sont identiques s ils ont les mêmes valeurs en même position. Écrivez une fonction identiquestab(t1,t2,n) qui teste et renvoie Vrai si les Tableau t1 et Tableau t2 sont identiques (mêmes valeurs en j), Faux sinon. C++ @[identiquestaba1.cpp] 1.6 f : 1.7 Fonction sommetab (somme d un tableau) Écrivez une fonction sommetab(t,n) qui calcule et renvoie la somme des n éléments d un Tableau t. C++ @[sommetaba1.cpp] 1.8 h : prévu pour somme sioux 1.9 Procédure initialisertab (initialisation d un tableau) Écrivez une procédure initialisertab(t,n,val) qui initialise les n éléments d un Tableau t à la valeur val (entier).
Unisciel algoprog Utilitaires Tableau / tb01outils1 4 C++ @[initialisertaba1.cpp] 1.10 Procédure aleatoiretab (initialisation aléatoire) Soit la fonction aleatoire(n) qui renvoie un entier pseudo-aléatoire dans [0..n-1]. C++ @[aleatoirea1.cpp] Outil C++ La fonction rand() est définie dans la bibliothèque <cstdlib>. Elle renvoie un entier pseudo-aléatoire dans [0..RAND_MAX]. Le modulo projete l entier dans l intervalle [0..n-1] d où l expression : rand()%n De plus, dans votre programme principal, ajoutez l instruction : srand(time(0)); Elle initialise le germe du générateur de nombres pseudo-aléatoires avec l horloge système. La fonction time est définie dans la bibliothèque <ctime>. Écrivez une procédure aleatoiretab(t,n,vmax) qui initialise les n éléments d un Tableau t avec des entiers pseudo-aléatoires choisis au hasard dans l intervalle d entiers ]-vmax..vmax[. Aide simple En appelant la fonction de génération d un entier pseudo-aléatoire deux fois de suite et en faisant la différence des deux entiers, ceci fournit effectivement un entier dans ]-vmax..vmax[. C++ @[aleatoiretaba1.cpp] 1.11 Fonction indicemaxtab (indice du maximum) Écrivez une fonction indicemaxtab(t,n) qui calcule et renvoie l indice de l élément contenant la plus grande valeur parmi les n éléments d un Tableau t. En cas d ex-aequo, c est l indice le plus petit qui sera renvoyé.
Unisciel algoprog Utilitaires Tableau / tb01outils1 5 C++ @[indicemaxtaba1.cpp] 1.12 Fonction indicemintab (indice du minimum) Écrivez une fonction indicemintab(t,n) qui calcule et renvoie l indice de l élément contenant la plus petite valeur parmi les n éléments d un Tableau t. En cas d ex-aequo, c est l indice le plus petit qui sera renvoyé. C++ @[indicemintaba1.cpp] 1.13 Fonction maximumtab (maximum d un tableau) Écrivez une fonction maximumtab(t,n) qui calcule et renvoie la valeur la plus grande des n éléments d un Tableau t. C++ @[maximumtaba1.cpp] 1.14 Fonction minimumtab (minimum d un tableau) Écrivez une fonction minimumtab(t,n) qui calcule et renvoie la valeur la plus petite des n éléments d un Tableau t. C++ @[minimumtaba1.cpp] 1.15 o : 1.16 Fonction permutationtab (test de permutation) Une n-permutation est l ensemble des entiers {1, 2,..., n}.
Unisciel algoprog Utilitaires Tableau / tb01outils1 6 Écrivez une fonction permutationtab(t,n) qui teste et renvoie Vrai si les n éléments d un Tableau t est une n-permutation, Faux sinon. Aide méthodologique Utilisez un vecteur de booléens afin de vérifier que chaque entier de t est dans [1..n] et qu il n y est qu une unique fois. C++ @[permutationtaba1.cpp] 1.17 q : prévu pour partitionner (neg à gauche, pos à droite) 1.18 Procédure renversertab (renverse un tableau) Soit la procédure permuter2i(a,b) qui permute les contenus des entiers a et b. C++ @[permuter2ia1.cpp] Écrivez une procédure renversertab(t,n) qui renverse les n éléments d un Tableau t en utilisant la procédure permuter2i. C++ @[renversertaba1.cpp] 1.19 Procédure saisirtab (saisie d un tableau) Écrivez l en-tête d une procédure saisirtab(t,n) qui demande et saisit le nombre de valeurs dans n (entier) puis effectue la saisie de n valeurs entières dans un Tableau t. Écrivez la boucle de saisie de n qui doit être compris entre 1 et NMAX (entier). Affichez l invite (où [x] désigne le contenu de x) : Nombre d éléments dans [1..[NMAX]]?
Unisciel algoprog Utilitaires Tableau / tb01outils1 7 Écrivez la boucle de saisie des éléments. Affichez les invites comme dans l extrait d exécution suivant : Nombre d éléments dans [1..[NMAX]]? 10 t[1]? 45 t[2]? 54... t[10]? -27 C++ @[saisirtaba1.cpp] 1.20 Fonction nsuperieurstab (nombre de supérieurs) Ce problème calcule, pour chaque case d un Tableau, le nombre de cases suivantes qui contiennent un élément strictement supérieur. Écrivez une fonction nsuperieurstab(t,k,n,val) qui calcule et renvoie le nombre d éléments de t[k..n] supérieur à val (entier), où t est un Tableau. Déduisez une procédure calculernsuperieurs(t,n,trs) qui calcule, dans un Tableau trs, le nombre de valeurs successeurs supérieures à t[ix] pour chaque case ix des n éléments d un Tableau t. Validez votre fonction et procédure avec la solution. C++ @[nsuperieurstaba1.cpp] 1.21 Fonction ninferieurstab (nombre d inférieurs) Ce problème calcule, pour chaque case d un Tableau, le nombre de cases suivantes qui contiennent un élément strictement inférieurs. Écrivez une fonction ninferieurstab(t,k,n,val) qui calcule et renvoie le nombre d éléments de t[k..n] inférieur à val (entier), où t est un Tableau.
Unisciel algoprog Utilitaires Tableau / tb01outils1 8 Déduisez une procédure calculerninferieurs(t,n,trs) qui calcule, dans un Tableau trs, le nombre de valeurs successeurs inférieures à t[ix] pour chaque case ix des n éléments d un Tableau t. Validez votre fonction et procédure avec la solution. C++ @[ninferieurstaba1.cpp] 1.22 Procédure minmaxtab (vmin et vmax d un tableau) Écrivez une procédure minmaxtab(t,n,vmin,vmax) qui calcule (algorithme naïf) à la fois le minimum dans vmin (entier) et le maximum dans vmax (entier) des n éléments d un Tableau t. C++ @[minmaxtaba1.cpp] 1.23 Procédure extrmstab (extremums d un tableau) L idée pour améliorer l algorithme de recherche des extremums (minimum et maximum) d un Tableau t est de regrouper les éléments à comparer par paires, c.-à-d. à chaque tour de boucle : 1. de comparer t[2k] et t[2k+1], puis 2. de comparer un seul des deux au minimum vmin et l autre au maximum vmax. On distinguera donc le cas où le nombre d éléments du tableau est pair, du cas où il est impair. Écrivez une procédure extrmstab(t,n,vmin,vmax) qui calcule à la fois le minimum dans vmin (entier) et le maximum dans vmax (entier) des n éléments d un Tableau t, en regroupant les éléments à comparer par paires.
Unisciel algoprog Utilitaires Tableau / tb01outils1 9 C++ @[extrmstaba1.cpp] Commentaires La procédure initialise vmin et vmax aux deux premiers éléments (ou au premier élément s il en existe qu un seul). Elle assure ensuite que vmin est effectivement inférieur à vmax (sinon elle permute les deux valeurs). Le test du modulo initialise l indice ix de sorte que les éléments du tableau puissent être traités par paire. La répétitive TantQue traite les éléments par paire et actualise les valeurs de vmin et vmax si besoin. 1.24 Procédure extrairetab (extraction d un sous-tableau) Écrivez une procédure extrairetab(t,ndebut,nfin,trs,ntrs) qui copie les valeurs d un Tableau t de l indice ndebut (entier) à l indice exclus nfin (entier) dans un Tableau trs. L entier ntrs désigne le nombre d éléments de trs. Aide simple La procédure devra actualiser ntrs de sorte qu il représente toujours le nombre d éléments de trs. C++ @[extrairetaba1.cpp] 1.25 Fonction tabpositifs (test d entiers positifs) Écrivez une fonction tabpositifs(t,n,pos) qui teste et renvoie Vrai si aucun entier négatif n a été détecté dans les n éléments d un Tableau t, Faux sinon et restitue alors l indice du premier élément négatif de t dans l entier pos. C++ @[tabpositifsa1.cpp] 1.26 Fonction tabnegatifs (test d entiers négatifs) Écrivez une fonction tabnegatifs(t,n,pos) qui teste et renvoie Vrai si aucun entier positif n a été détecté dans les n éléments d un Tableau t, Faux sinon et restitue alors l indice du premier élément positif de t dans l entier pos.
Unisciel algoprog Utilitaires Tableau / tb01outils1 10 C++ @[tabnegatifsa1.cpp]