Bonjour je bloque sur ça besoin d’aide s’il vous plaît c’est en nsi (terminal) Avec ce programme : def chercher(T,n,i,j): if i < 0 or ??? : print(Erreur) return
Question
Avec ce programme :
def chercher(T,n,i,j):
if i < 0 or ??? :
print("Erreur")
return None
if i > j :
return None
m = (i+j) // ???
if T[m] < ??? :
return chercher(T, n, ??? , ???)
elif ??? :
return chercher(T, n, ??? , ??? )
else :
return ???
L’exécution du code doit donner :
>>> chercher([1,5,6,6,9,12],7,0,10)
Erreur
>>> chercher([1,5,6,6,9,12],7,0,5)
>>> chercher([1,5,6,6,9,12],9,0,5)
4
>>> chercher([1,5,6,6,9,12],6,0,5)
2
1 Réponse
-
1. Réponse ClementCg
Bonsoir
Cet exercice n'est pas forcément facile à résoudre car on aurait tendance à utiliser une boucle for pour faire la fonction mais ici avec les fragments donnés, on n'en est interdit.
Code complet ci-joint
Le principe du code
Si le i (début) < 0 ou si le j (fin) < que la longueur totale du tableau:
Alors print Erreur et retourner None
Si le début (i) > que la fin (j):
Alors retourner None
Définir m comme l'index de la valeur centrale du tableau (longueur totale (i+j) divisé (//) par 2)
Si la valeur centrale du tableau, correspondant à l'index m (T[m]) est < à la valeur recherchée (n):
Alors retourner la fonction (donc la relancer) en augmentant la valeur de départ (i) de 1
Sinon, Si la valeur centrale du tableau, correspondant à l'index m (T[m]) est > à la valeur recherchée (n):
Alors retourner la fonction (donc la relancer) en diminuant la valeur de fin (i) de 1
Sinon (donc si T[m] = n) :
Retourner m (donc l'index du chiffre recherché)
Explications
Je pense que le pseudo-code du dessus suffit à comprendre mais si ce n'est pas le cas, je précise:
- Pour trouver m on additionne i + j pour obtenir la "longueur" qu'on va parcourir dans le tableau, on divise cette valeur pour tomber sur la valeur centrale du tableau, celle qui se trouve au milieu.
- Quand on compare que T[m] < n et qu'on finit par renvoyer la fonction avec i+1, c'est pour diminuer la plage de valeur qu'on va englober dans le tableau
- Quand on compare T[m] > n et qu'on renvoi la fonction avec j-1, c'est comme au dessus, pour diminuer la plage de valeur. On fait ca jusqu'à ce que la plage analysée n'englobe plus qu'une seule valeur.
J'espère que ces explications t'aurons aidé à comprendre, si tu as mal compris quelque chose ou que je l'ai mal expliqué tu peux me demander dans les commentaires ;)
Bonne soirée & bonne chance !
Autres questions