Informatique

Question

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 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
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
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

1 Réponse

  • 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 !

    Image en pièce jointe de la réponse ClementCg