====== Recherche dans un tableau ======
===== Exemple de formulation =====
Programmer la fonction ''recherche'', prenant en paramètre un tableau non vide ''tab'' (type ''list'') d'entiers et un entier ''n'', et qui renvoie l'indice de la dernière occurrence de l'élément cherché. Si l'élément n'est pas présent, la fonction renvoie la longueur du tableau.
Exemples :
>>> recherche([5, 3],1)
2
>>> recherche([2,4],2)
0
>>> recherche([2,3,5,2,4],2)
3
===== Variantes =====
* ''recherche(caractere:str, mot:str)'',\\ ''caractere'' est un caractère et ''mot'' une chaîne. Renvoie le nombre d'occurrence de ''caractere'' dans ''mot''.
* ''maxi(tableau)'',\\ Renvoie une ''tuple'' contenant le rang de la première occurrence du maximum 'élément maximum et la valeur du maximum
* Les sujets omettent parfois de dire quoi faire si le tableau est vide ou si l'élément cherché n'est pas présent.
* Le plus souvent, quand une paire est demandée en sortie, le sujet demande de renvoyer cette paire sous forme d'un ''list'' mais ''tuple'' serait préférable.
* ''recherche(item, tableau)'',\\ renvoie un ''list'' contenant les rangs des occurrences de ''item'' dans ''tableau''
* ''recherche_min_max(tableau)'',\\ renvoie un dictionnaire de forme ''%%{"min":valeur_min, "max":valeur_max}%%''
* ''recherche_min(tableau)'',\\ renvoie le rang de la première occurrence du minimum de ''tableau''
* ''recherche_min(tableau)'',\\ renvoie le rang de la **dernière** occurrence du minimum de ''tableau''
* ''recherche_sup(seuil, tableau)'',\\ renvoie le nombre d'items de ''tableau'' supérieurs à ''seuil''
* ''recherche_sup(seuil, tableau)'',\\ renvoie la ''list'' des rangs des items de ''tableau'' supérieurs à ''seuil''
* ''recherche_sup(seuil, tableau)'',\\ renvoie le rang de la première occurrence d'un item de ''tableau'' supérieur à ''seuil''
* ''recherche_sup(seuil, tableau)'',\\ renvoie la ''list'' des items de ''tableau'' supérieurs à ''seuil''.
* recherche **dichotomique** sur tableau trié
Comme vous pouvez le voir, on peut varier facilement, le principe reste toujours le même.
===== Cas particuliers =====
==== Consécutifs ====
Écrire une fonction ''recherche'' qui prend en paramètre un tableau de nombres entiers ''tab'', et qui renvoie la liste (éventuellement vide) des couples d'entiers consécutifs successifs qu'il peut y avoir dans ''tab''.
**Exemples :**
>>> recherche([1, 4, 3, 5])
[]
>>> recherche([1, 4, 5, 3])
[(4, 5)]
>>> recherche([7, 1, 2, 5, 3, 4])
[(1, 2), (3, 4)]
>>> recherche([5, 1, 2, 3, 8, -5, -4, 7])
[(1, 2), (2, 3), (-5, -4)]
===== Cas plus élaboré =====
On peut imaginer des variantes légèrement plus développés.
**Exemple un peu plus élaboré**
Soit un fichier ''data.csv'' dont le contenu a la forme suivante :
nom;prénom;age
Dupont;Jean;63
Konte;Fatoumata;37
Nguyen;Marc;32
Smith;Alicia;19
Amadi;Ahmed;29
...
import csv
with open("data.csv", 'r') as file:
reader = csv.DictReader(file, delimiter=',')
tableau = [dict(row) for row in reader]
# on travaille ensuite avec tableau
Il faut écrire une fonction ''find_age_inf(tableau, seuil)'' qui renvoie les rangs des items de ''tableau'' dont l'age est inférieur à ''seuil''.
===== Recherche dans deux tableaux parallèles =====
On se donne deux tableaux ''A'' et ''B'' de même longueur de sorte que l'item ''A[i]'' va de paire avec ''B[i]''. Par exemple ''A'' contient des années, ''B'' contient des températures moyennes. À l'indice ''2'' on trouve par exemple ''A[2] = 2018'' et ''B[2] = 19'' ce qui signifie que la température moyenne en 2018 est de 19.
On demande d'implémenter une fonction ''recherche_min(A,B)'' qui renvoie la valeur de ''B'' correspondant à la valeur de ''A'' minimum.
> Si le minimum de ''A'' se trouve au rang ''3'', alors il faut renvoyer ''B[3]''.