TP 11 - Parcours séquentiel d'un tableau ter
| TD n°11 : Parcours séquentiel d'un tableau ter | Thème 4 : Langages et Programmation |
|---|---|
| EXERCICES TYPE EPREUVE PRATIQUE en Terminale | EXERCICES |
Exercice n°1 :
Compléter la fonction prem_match ci-dessous qui prend en paramètres deux tableaux tab_a et tab_b de même longueur et qui :
- renvoie le plus petit indice
ipour lequeltab_a[i] == tab_b[i]si cet indice existe, - renvoie
-1sinon.
def match(tab_a, tab_b):
pass
def match(tab_a, tab_b):
for i in range(len(tab_a)):
if tab_a[i] == tab_b[i] :
return i
return -1
Tester votre fonction grâce au jeu de tests ci-dessous.
assert match([77, 5, 8, 9, 3, 9], [77, 1, 9, 8, 5, 6]) == 0
assert match([1, 77, 8, 9, 3, 9], [2, 77, 9, 8, 5, 6]) == 1
assert match([3, 9, 7, 2, 5, 4], [33, 99, 77, 2, 5, 4]) == 3
assert match([3, 9, 7, 2, 5, 4], [33, 99, 77, 22, 55, 4]) == 5
assert match([1, 5, 8, 9, 3, 9, 7, 12, 5, 4], [5, 1, 9, 8, 5, 6, 3, 2, 1, 4]) == 9
assert match([6, 7, 8, 9], [1, 2, 3, 4]) == -1
assert match([], []) == -1
Exercice n°2 : Tableaux et extremums : plus grand dénivelé
En randonnée cycliste, pédestre ou à skis, on différencie les dénivelés positif et négatif. Ici nous ne ferons pas la différence.
Par exemple avec ce tableau :
[7, 4, 3, 6, 7, 4, 3, 1, 8]
Plus formellement, dans un tableau tab de taille n le dénivelé à l'indice i est égal à tab[i+1] - tab[i] (à condition que l'indice i+1 existe).
Voici le schéma d'un tableau tab de taille n :
---------------------------------------------
| indices | 0 | 1 | 2 | 3 | ... | n-2 | n-1 |
---------------------------------------------
| valeurs | . | . | . | . | ... | . | . |
---------------------------------------------
n-1.
Pour avoir le droit d'écrire tab[i+1] - tab[i] avec un tableau tab de taille n, quelle est alors la plus grande valeur de i possible : n-2, n-1, n ou n+1 ?
Compléter la fonction plus_grand_denivele ci-dessous qui prend en paramètre un tableau tabde plus de deux nombres et renvoie le plus grand dénivelé qui existe dans ce tableau.
def plus_grand_denivele(tab):
pass
Tester votre fonction en utilisant le jeu de tests ci-dessous.
assert plus_grand_denivele([2, 5, 8, 3, -2, 13, 17, 18, 16, 13, 11, 5]) == 15
assert plus_grand_denivele([17, 18, 16, 13, 11, 5, 2, -1, -14, -15]) == 1
assert plus_grand_denivele([22, 16, 13, 11, 5, 2, -1, -14, -19]) == -2
assert plus_grand_denivele([22, 28]) == 6
Compléter la fonction plus_petit_denivele ci-dessous qui prend en paramètre un tableau tabde plus de deux nombres et renvoie le plus petit dénivelé qui existe dans ce tableau.
def plus_petit_denivele(tab):
assert len(tab) >= 2, "Le tableau doit contenir au moins deux valeurs."
pass
Tester votre fonction modifiée en utilisant le jeu de tests ci-dessous.
assert plus_petit_denivele([2, 5, 8, 3, -2, 13, 17, 18, 16, 13, 11, 5]) == -6
assert plus_petit_denivele([17, 18, 16, 13, 11, 5, 2, -1, -14, -15]) == -13
assert plus_petit_denivele([5, 28, 54, 103, 187, 218]) == 23
assert plus_petit_denivele([22, 28]) == 6
def plus_grand_denivele(tab):
denivele_max = tab[1] - tab[0]
for i in range(1, len(tab)-1) :
if tab[i+1] - tab[i] > denivele_max :
denivele_max = tab[i+1] - tab[i]
return denivele_max
def plus_petit_denivele(tab):
assert len(tab) >= 2, "Le tableau doit contenir au moins deux valeurs."
denivele_min = tab[1] - tab[0]
for i in range(1, len(tab)-1) :
if tab[i+1] - tab[i] < denivele_min :
denivele_min = tab[i+1] - tab[i]
return denivele_min
Exercice n°3 : tableaux et accumulation : dénivelés
En randonnée cycliste, pédestre ou à skis, on différencie les dénivelés positif et négatif cumulés : - le dénivelé positif cumulé correspond au «nombre de mètres en hauteur» qui ont été montés du début à la fin du parcours, - le dénivelé négatif cumulé correspond au «nombre de mètres en hauteur» qui ont été descendus du début à la fin du parcours.
On peut faire la même chose avec un tableau de nombres. Par exemple avec ce tableau :
[7, 4, 3, 6, 7, 4, 3, 1, 8]
soit un dénivelé positif cumulé de +11.
Et le dénivelé négatif cumulé vaut quant à lui : -3-1-3-1-2 = -10.
Plus formellement, dans un tableau tab de taille n le dénivelé à l'indice i est égal à tab[i+1] - tab[i] (à condition que l'indice i+1 existe).
Remarque : on considérera que dans un tableau vide ou de taille 1, le dénivelé cumulé est égal à zéro.
Voici le schéma d'un tableau tab de taille n :
---------------------------------------------
| indices | 0 | 1 | 2 | 3 | ... | n-2 | n-1 |
---------------------------------------------
| valeurs | . | . | . | . | ... | . | . |
---------------------------------------------
n-1.
Pour avoir le droit d'écrire tab[i+1] - tab[i] avec un tableau tab de taille n, quelle est alors la plus grande valeur de i possible : n-2, n-1, n ou n+1 ?
Compléter la fonction compter_deniveles ci-dessous qui prend en paramètre un tableau tab de nombres et renvoie un 2-uplet des dénivelés positif cumulé et négatif cumulé.
Le parcours de tab sera fait par indice.
def compter_deniveles(tab):
cumul_plus = ...
cumul_moins = ...
pass
Tester votre fonction grâce au jeu de tests ci-dessous.
tab = [1, 2, 3, 4, 5]
assert compter_deniveles(tab) == (4, 0)
tab = [5, 4, 3, 2, 1]
assert compter_deniveles(tab) == (0, -4)
tab = [0, 10, 0, 10]
assert compter_deniveles(tab) == (20, -10)
tab = [0, 10, 0, 10, 10, 10, 10, 0]
assert compter_deniveles(tab) == (20, -20)
tab = [3, 7, 8, 9, 1, 0, 7, 8, 9, 3, 7, 8, 9, 4, 6, 1, 0, 0, 9, 5, 7, 34, 4, 5, 6, 7, 8, 9]
assert compter_deniveles(tab) == (66, -60)
tab = []
assert compter_deniveles(tab) == (0, 0)
tab = [5]
assert compter_deniveles(tab) == (0, 0)
def compter_deniveles(tab):
cumul_plus = 0
cumul_moins = 0
for i in range(len(tab)-1):
denivele = tab[i+1] - tab[i]
if denivele > 0 :
cumul_plus = cumul_plus + denivele
else:
cumul_moins = cumul_moins + denivele
return cumul_plus, cumul_moins
Exercice n°4 : tableaux et accumulation : moyenne coefficientée
On dispose ici de deux tableaux de même longueur : un tableau de notes (sur 20) et un tableau de coefficients. Il s'agit de calculer la moyenne coefficientée correspondante. Par exemple avec :
notes = [12, 15, 14, 18]
coeffs = [1, 2, 1, 4 ]
(12*1 + 15*2 + 14*1 + 18*4)/(1 + 2 + 1 + 4)
num (pour numérateur) ce qui correspond à (12*1 + 15*2 + 14*1 + 18*4) et denom (pour dénominateur) ce qui correspond à (1 + 2 + 1 + 4).
Compléter la fonction moyenne_coefficientee ci-dessous qui prend en paramètre deux tableaux non vides notes et coeffs et renvoie la moyenne coefficientée correspondante.
def moyenne_coefficientee(notes, coeffs):
pass
Tester votre fonction grâce au jeu de tests ci-dessous.
notes = [10, 10, 20]
coeffs = [1, 3, 1]
assert moyenne_coefficientee(notes, coeffs) == 12.0
notes = [15, 17, 13, 19, 15, 11]
coeffs = [2, 3, 5, 5, 3, 8]
assert moyenne_coefficientee(notes, coeffs) == 14.384615384615385
notes = [8, 8, 8, 8, 12]
coeffs = [1, 1, 1, 1, 4]
assert moyenne_coefficientee(notes, coeffs) == 10.0
def moyenne_coefficientee(notes, coeffs):
num = 0
denom = 0
for i in range(len(notes)) :
num = num + coeffs[i] * notes[i]
denom = denom + coeffs[i]
moyenne = num / denom
return moyenne
Exercice n°5 : tableaux et accumulation : produit des valeurs
Il s'agit ici de faire le produit (la multiplication) de tous les nombres présents dans le tableau.
Compléter la fonction produit ci-dessous qui prend en paramètre un tableau tab et renvoie le produit de tous les nombres présents dans le tableau tab.
Par convention, si le tableau est vide on considérera que le produit est égal à 1.
On réfléchira à la valeur initiale de la variable produit.
def produit(tab):
pass
Tester votre fonction grâce au jeu de tests ci-dessous.
tab = [2, 3, 2]
assert produit(tab) == 12
tab = [1, 2, 3, 4, 5, 6]
assert produit(tab) == 720
tab = [1, 1, 1, 1, 1, 1]
assert produit(tab) == 1
tab = [1, 14, 32, 0, 15, 6]
assert produit(tab) == 0
tab = []
assert produit(tab) == 1
tab = [7]
assert produit(tab) == 7
tab = [12, 11, 3, 21, 5, 41, 4, 6, 4, 7]
assert produit(tab) == 1145612160
def produit(tab):
prod = 1
for elt in tab :
prod = prod * elt
return prod
Exercice n°6 :
Écrire une fonction Python smul à deux paramètres, un nombre et une liste de nombres, qui multiplie chaque élément de la liste par le nombre et renvoie une nouvelle liste :
>>> smul(2, [1, 2, 3])
[2, 4, 6]
def smul(n,tab):
nv_tab=[]
for elt in tab:
nv_tab.append(n*elt)
return nv_tab
Exercice n°7 :
Écrire une fonction Python vsom qui prend en paramètre deux listes de nombres de même longueur et qui renvoie une nouvelle liste constituée de la somme terme à terme de ces deux listes :
>>> vsom([1, 2, 3], [4, 5, 6])
[5, 7, 9]
def vsom(tab1,tab2):
nv_tab=[]
for indice in range(len(tab1)):
nv_tab.append(tab1[indice]+tab2[indice])
return nv_tab
Exercice n°8 : tableaux et mutations : écrêtage
On dit qu'on écrête un signal lorsqu'on limite l'amplitude du signal entre deux valeurs a et b. On peut également appliquer cela à des tableaux de valeurs. Voici par exemple un tableau tab que l'on a écrêté entre - 150 et 150 pour donner le tableau tab_ec :
tab = [34, 56, 89, 134, 152, 250, 87, -34, -187, -310]
tab_ec = [34, 56, 89, 134, 150, 150, 87, -34, -150, -150]
L'écrêtage consiste à :
Soit un nombre entier n ainsi que deux entiers a et b avec a <= b :
nsinest compris entreaetb,asinest plus petit quea,bsinest plus grand queb.
Ecrire une fonction ecrete_v2 qui prend en paramètres un tableau d'entiers tab de longueur quelconque ainsi que deux entiers a et b avec a <= b et renvoie un nouveau tableau nv_tab correspondant à tab avec toutes ses valeurs écrêtées entre a et b
def ecrete(tab):
pass
Tester votre fonction en utilisant le jeu de tests ci-dessous.
assert ecrete([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 5, 10) == [5, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 10, 10, 10]
assert ecrete([-13, -4, 6, 5, 8, -3, -12, -3, 0, 6, 7], -10, -5) == [-10, -5, -5, -5, -5, -5, -10, -5, -5, -5, -5]
assert ecrete([7, 8, 3, 9, 8, 7, 2, 4, 8, 9, 0, 1, 5, 8, 8, 8, 4, 5, 4, 5], 0, 10) == [7, 8, 3, 9, 8, 7, 2, 4, 8, 9, 0, 1, 5, 8, 8, 8, 4, 5, 4, 5]
assert ecrete([], 0, 10) == []
def ecrete(tab, a, b):
for i in range(len(tab)):
if tab[i]<a:
tab[i] = a
elif tab[i]>b:
tab[i] = b
return tab