Tableaux
Énoncé
Pendant cette séance, on va manipuler la structure de donnée tableau statique (qu'on appelle souvent simplement tableau) qui met en œuvre le type abstrait séquence de taille fixe.
Pour rappel, voici la terminologie utilisée en BPI ainsi que le lien vers le document résumant tout ça :
- type abstrait (abstract data type, ADT en anglais) : ensemble d'opérations et ensemble de propriétés ;
- structure de données : mise en œuvre concrète d'un type abstrait ;
- séquence de taille fixe : type abstrait avec 2 opérations :
get(i)
etset(i, v)
; - tableau statique : mise en œuvre du type abstrait séquence de taille fixe à l'aide d'un segment de mémoire contiguë. Les deux opérations
get(i)
etset(i)
s'effectuent en temps constant : la ième case se trouve en partant du début du tableau et en ajoutanti
fois la taille d'une case. Autrement dit, la taille du tableau n'intervient pas quand on cherche à savoir où se trouve la ième case.
Python est un des rares langages à ne pas fournir la structure de données "tableau statique", mais propose par contre les tableaux dynamiques (appelés list dans la spécification en anglais du langage, mais on évitera ce terme pour ne pas confondre avec les listes chaînées que l'on verra bientôt en cours). Dans certains languages, on trouve aussi le terme vecteur (quand le tableau n'a qu'une dimension, ce qui sera très souvent le cas).
La différence entre un tableau statique et un dynamique est qu'un tableau statique a une taille fixe alors qu'un dynamique peut grandir ou rétrécir pendant l'exécution du programme. Pour simuler des tableaux statiques en Python, on s'interdira donc d'utiliser les fonctions permettant de modifier la taille d'un tableau dynamique (notamment append
, insert
, remove
et del
).
Fonction principale
Vous implanterez les fonctions 4 fonctions manquantes du fichier tableaux.py
dont on donne la fonction principale (pour tester au fur et à mesure les fonctions implantées) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
Initialisation du tableau
Implantez une fonction cree(taille)
qui renvoie un tableau de taille
entiers tirés aléatoirement entre 1 et 9. Afin de ne pas utiliser la fonction append
, vous utiliserez la syntaxe des « compréhensions de listes » Python pour initialiser un tableau d'entier : par exemple [x*x for x in range(10)]
crée et remplit un tableau avec les carrés de 0, 1, 2, ... 9 (à adapter bien sûr pour répondre à la question posée).
Pour générer des nombres aléatoires, on utilisera la fonction randint(inf, sup)
qui renvoie un entier aléatoire dans l'intervalle [inf .. sup]
.
On ajoutera la ligne from random import randint
en haut de notre programme pour importer cette fonction.
Recherche d'un élément dans le tableau
Implantez une fonction indice_prem_occ(tab, val)
qui renvoie l'indice de la première occurrence de val
dans le tableau tab
, ou -1 si le tableau ne contient pas val
.
Échange de deux éléments
Implantez une fonction echange(tab, idx1, idx2)
qui échange les éléments d'indices idx1
et idx2
dans le tableau.
Inversion du tableau
Implantez une fonction inverse(tab)
qui inverse les éléments du tableau en utilisant la fonction echange
précédente.
Par exemple, inverser([1,2,3,4,5])
modifie le tableau pour qu'il devienne [5,4,3,2,1]
.
Indices du min et du max
Implantez une fonction min_et_max(tab)
qui renvoie sous la forme d'un tuple les indices de la valeur minimale et de la valeur maximale contenues dans le tableau. Si le tableau contient plusieurs fois la même valeur minimale (ou maximale), on renverra l'indice de la première occurrence. On renvoie (-1, -1) par convention si le tableau est vide.
Correction
Cliquez ici pour révéler la correction.
tableaux.py
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
|