Exercice — dans l'esprit des sujets du bac
Soit `T = [4, 7, 2, 7, 9, 3, 7, 1]` (N=8).
- Écrire une fonction `Maximum(T, N)` qui retourne la valeur maximale et l'indice de sa première occurrence.
- Appliquer cette fonction à T. Quel est le résultat ?
- Modifier la fonction pour retourner l'indice de la dernière occurrence du maximum.
- Écrire une fonction `NbOccurrences(T, N, val)` qui retourne le nombre d'occurrences de `val` dans T. Combien de fois `7` apparaît-il ?
- Écrire une procédure `DecalageGauche(T, N)` qui effectue un décalage circulaire vers la gauche (le premier élément va en dernière position).
- Donner le contenu de T après un appel à cette procédure.
- Comment effectuer un décalage de k positions ?
Voir la correction commentéeAprès avoir posé votre démarche
1. Maximum et première occurrence. Idée : initialiser `max ← T[1]`, `indMax ← 1`, puis parcourir et mettre à jour si T[i] > max.
TDOL — objets locaux :
- `i`, `max`, `indMax` : entier — compteur, valeur maximale, indice de la première occurrence
- `T` : tableau d'entiers ; `N` : entier — paramètres (Type/Nature)
```
DEF FN Maximum(T : tableau ; N : entier) : entier
Variables i, max, indMax : entier
Début
max ← T[1] ; indMax ← 1
Pour i de 2 à N faire
Si T[i] > max alors
max ← T[i] ; indMax ← i
FinSi
FinPour
Retourner indMax { ou max selon l'énoncé }
Fin
```
Application sur `T = [4, 7, 2, 7, 9, 3, 7, 1]` (N=8) : max=9, indMax=5. On retourne la valeur 9 et l'indice 5. Pour la dernière occurrence, utiliser `≥` au lieu de `>`.
2. Nombre d'occurrences de val.
```
DEF FN NbOccurrences(T : tableau ; N, val : entier) : entier
Variables i, c : entier
Début
c ← 0
Pour i de 1 à N faire
Si T[i] = val alors c ← c + 1 FinSi
FinPour
Retourner c
Fin
```
Pour `val = 7` : On retourne 3.
3. Décalage circulaire gauche.
```
DEF PROC DecalageGauche(var T : tableau ; N : entier)
Variables i, sauv : entier
Début
sauv ← T[1]
Pour i de 1 à N-1 faire
T[i] ← T[i+1]
FinPour
T[N] ← sauv
Fin
```
Après un décalage : `[7, 2, 7, 9, 3, 7, 1, 4]`. Contrainte : indices i dans [1..N] ; sauvegarder T[1] avant d'écraser.
Équivalent Python (extrait).
```python
from array import array
def maximum(T, N):
m, ind = T[0], 0
for i in range(1, N):
if T[i] > m:
m, ind = T[i], i
return m, ind
print(maximum([4,7,2,7,9,3,7,1], 8))
```