valouz Posted February 27, 2021 Posted February 27, 2021 Bonjour !! Je comprends pas ce programme : https://www.casimages.com/i/210227055405541339.png.html A la ligne 11 on fait 64/2 donc 32 puis ligne d'après 32/2 donc 16 donc on fait le motif de la ligne 5 à 8 et après on va à la ligne 13 rediviser par 2 ce qui donne 8 et je ne comprends pas du coup pourquoi le programme marche alors qu'il faudrait qu'il y ait 16 encore. Je sais pas si c'est clair ? Merci d'avance ! Quote
Solution Phagocytose Posted February 27, 2021 Solution Posted February 27, 2021 @valpass3112 Salut ! Alors je sais pas si j'ai bien compris mais en gros pour moi ça marche parce qu'il y a le return donc on sort de la fonction du coup la longueur vaut 32 à nouveau Par contre je comprends pas pourquoi à la fin du programme, au niveau du "gauche(90)" le programme retourne à la ligne 12, pour moi c'était fini ^^ Quote
valouz Posted February 27, 2021 Author Posted February 27, 2021 Ah oui peut-être merci pour ton aide @Phagocytose et je peux pas te dire pour la ligne 12, j'ai pas tout compris à 100% dans ce programme désolé ! Quote
Shrex Posted February 27, 2021 Posted February 27, 2021 Il y a 1 heure, Phagocytose a dit : Par contre je comprends pas pourquoi à la fin du programme, au niveau du "gauche(90)" le programme retourne à la ligne 12, pour moi c'était fini ^^ En fait c'est de la réclusion et c'est très complexe à se représenter... A chaque fois que dans ta fonction tu as croix(longueur // 2), tu "recommences" ta fonction avec la nouvelle valeur de longueur, et ainsi de suite, pour qu'une fois exécutée complètement tu reviennes à ta fonction initiale... à l'étape où tu avais "recommencé avec la nouvelle valeur" ... (je sais, on dirait que ça veut rien dire, mais pourtant si) Par exemple tu commences avec longueur = 64, puis tu croises un croix(64//2) du coup tu recommences ta fonction avec longueur = 32, jusqu'à croiser un croix(32//2), et là tu "re-recommences" avec longueur = 16, et là tu valides ta condition longueur == 16 qui se termine par un return (en fait ça lui dit "terminus, retourne d'où tu viens"). Cela fait, tu reviens dans ton code de croix(32) à l'étape où tu t'étais arrêté, qui va reprendre par un nouveau croix(32//2), et ainsi de suite... jusqu'à revenir à croix(64), recommencer avec un nouveau croix(32) parce que c'est l'étape juste après celle où tu t'étais arrêté, etc... etc... jusqu'à terminer complètement ta fonction croix(64)... Dsl c'est assez bordélique mais c'est dur à expliquer (surtout que je suis un peu fatigué), je te conseille d'exécuter le programme étape par étape pour essayer de mieux comprendre... Quote
Odontoboulot Posted February 27, 2021 Posted February 27, 2021 il y a 5 minutes, Shrex a dit : En fait c'est de la réclusion et c'est très complexe à se représenter... A chaque fois que dans ta fonction tu as croix(longueur // 2), tu "recommences" ta fonction avec la nouvelle valeur de longueur, et ainsi de suite, pour qu'une fois exécutée complètement tu reviennes à ta fonction initiale... à l'étape où tu avais "recommencé avec la nouvelle valeur" ... (je sais, on dirait que ça veut rien dire, mais pourtant si) Par exemple tu commences avec longueur = 64, puis tu croises un croix(64//2) du coup tu recommences ta fonction avec longueur = 32, jusqu'à croiser un croix(32//2), et là tu "re-recommences" avec longueur = 16, et là tu valides ta condition longueur == 16 qui se termine par un return (en fait ça lui dit "terminus, retourne d'où tu viens"). Cela fait, tu reviens dans ton code de croix(32) à l'étape où tu t'étais arrêté, qui va reprendre par un nouveau croix(32//2), et ainsi de suite... jusqu'à revenir à croix(64), recommencer avec un nouveau croix(32) parce que c'est l'étape juste après celle où tu t'étais arrêté, etc... etc... jusqu'à terminer complètement ta fonction croix(64)... Dsl c'est assez bordélique mais c'est dur à expliquer (surtout que je suis un peu fatigué), je te conseille d'exécuter le programme étape par étape pour essayer de mieux comprendre... tu pourrais m'expliquer pourquoi à 16, il s'arrête et renvoi 32 ? normalement, vu qu'on fait croix(32) -> croix(32//2) -> croix(16), là on tombe pile sur 16, notre longueur ça devrait être 16 pas 32 en gros croix(32) -> croix(32//2), sauf que longueur là il vaut 32 pas 16, c'est plutôt longueur//2 qui vaut 16, on devrait rentrer dans une nouvelle boucle avant de remplir la condition, en gros croix(32//2) -> croix(16) : if longueur==16 et là STOP : return, longueur = 16 Quote
Shrex Posted February 27, 2021 Posted February 27, 2021 (edited) il y a 21 minutes, Soul a dit : u pourrais m'expliquer pourquoi à 16, il s'arrête et renvoi 32 ? normalement, vu qu'on fait croix(32) -> croix(32//2) -> croix(16), là on tombe pile sur 16, notre longueur ça devrait être 16 pas 32 en gros croix(32) -> croix(32//2), sauf que longueur là il vaut 32 pas 16, c'est plutôt longueur//2 qui vaut 16, on devrait rentrer dans une nouvelle boucle avant de remplir la condition, en gros croix(32//2) -> croix(16) : if longueur==16 et là STOP : return, longueur = 16 Je suis pas sûr de comprendre ce que tu demandes... j'ai l'impression que t'as compris mais qu'un truc t'échappes (ou plutôt qui m'échappe...)... Du coup je vais détailler l'ordre des fonctions principales avec les dernières à chaque fois : Croix(64) Croix(32) Croix(16) return Croix(16) return Croix(16) return Gauche(90) Croix(32) Croix(16) return Croix(16) return Croix(16) return Gauche(90) Croix(32) Croix(16) return Croix(16) return Croix(16) return Gauche(90) Gauche(90) et tu fais ça 4 fois en tout (en rouge c'est ce qui se fait dans les Croix(64), en bleu dans Croix(32) et vert dans Croix(16), et j'ai enlevé les étapes intermédiaires comme avancer, reculer, etc..., du coup quand je mets Croix(16) suivi de return, entre temps y a eu avancer, reculer et droite ) Edit : @Soulj'ai peut être compris le pb, en fait quand le croix(16) s'arrête avec return, il renvoie pas 32... il renvoie rien, la fonction croix(16) se termine, et c'est la fonction qui la précède qui reprend où elle s'était arrêtée, et cette fonction c'est croix(32) Edited February 27, 2021 by Shrex Odontoboulot 1 Quote
Odontoboulot Posted February 27, 2021 Posted February 27, 2021 il y a 1 minute, Shrex a dit : Je suis pas sûr de comprendre ce que tu demandes... j'ai l'impression que t'as compris mais qu'un truc t'échappes (ou plutôt qui m'échappe...)... Du coup je vais détailler l'ordre des fonctions principales avec les dernières à chaque fois : Croix(64) Croix(32) Croix(16) return Croix(16) return Croix(16) return Gauche(90) Croix(32) Croix(16) return Croix(16) return Croix(16) return Gauche(90) Croix(32) Croix(16) return Croix(16) return Croix(16) return Gauche(90) Gauche(90) et tu fais ça 4 fois en tout (en rouge c'est ce qui se fait dans les Croix(64), en bleu dans Croix(32) et vert dans Croix(16), et j'ai enlevé les étapes intermédiaires comme avancer, reculer, etc..., du coup quand je mets Croix(16) suivi de return, entre temps y a eu avancer, reculer et droite ) mec tu gères Merci Shrex 1 Quote
Phagocytose Posted February 28, 2021 Posted February 28, 2021 @Shrex Salut ! Alors désolée mais il y a toujours quelque chose qui m'échappe.. Je comprends en théorie ce que ça doit faire mais quand j'exécute le programme je comprends pas ses "va et vient"... Du coup pour moi ça fait ça : avancer (64) gauche (90) croix (32) avancer (64) gauche(16) croix (16) --> avance (16), reculer(16) droite(16) return puis là on voit que le programme va à l'autre ligne du croix (32) du coup il fait son croix (16) puis va à l'autre ligne croix (32), il fait croix(16) puis avancer (32) et gauche (90) => Du coup j'ai compris en effectuant ce programme que dès qu'il a fini croix(16) il va à la ligne d'après du croix (32), donc je comprends toujours pas pourquoi c'est pas fini après le gauche(90) à la fin ^^ Je comprends le programme que tu as détaillé mais je comprends pas comment il s'effectue vu ce que fait le programme pas à pas J'espère que c'est clair Quote
Shrex Posted February 28, 2021 Posted February 28, 2021 (edited) il y a 25 minutes, Phagocytose a dit : Du coup j'ai compris en effectuant ce programme que dès qu'il a fini croix(16) il va à la ligne d'après du croix (32), donc je comprends toujours pas pourquoi c'est pas fini après le gauche(90) à la fin ^^ Parce que le Croix(32) est compris dans le Croix(64) En fait le return ne sert que si tu veux que le programme se finisse sans faire toutes les instructions qui sont après le return (ou alors à renvoyer une valeur mais là on s'en fout), mais si la fonction se finit (donc ici avec gauche(90)), c'est comme si après y avait un return (mais vide) et du coup on revient à la fonction d'avant, et ici c'est le Croix(64) du début Edited February 28, 2021 by Shrex Quote
Phagocytose Posted February 28, 2021 Posted February 28, 2021 il y a une heure, Shrex a dit : En fait le return ne sert que si tu veux que le programme se finisse sans faire toutes les instructions qui sont après le return (ou alors à renvoyer une valeur mais là on s'en fout), mais si la fonction se finit (donc ici avec gauche(90)), c'est comme si après y avait un return (mais vide) et du coup on revient à la fonction d'avant, et ici c'est le Croix(64) du début Toujours pas En fait c'est le return qui me pose problème je pense parce qu'il renvoie aux crois (32) d'après du coup ça m'embrouille.. Malgré ton explication je comprends pas ce qu'il fait Quote
Shrex Posted February 28, 2021 Posted February 28, 2021 il y a 1 minute, Phagocytose a dit : En fait c'est le return qui me pose problème je pense parce qu'il renvoie aux crois (32) d'après du coup ça m'embrouille.. Malgré ton explication je comprends pas ce qu'il fait Le return met juste fin à ta fonction, et le return tu le croises que quand t'es dans Croix(16), et Croix(16) se lance à l'intérieur de Croix(32), donc quand tu croises return dans Croix(16) tu mets fin à la fonction Croix(16) pour reprendre Croix(32) là où tu t'étais arrêté... Je sais pas vraiment comment t'expliquer autrement, c'est le but de la réclusion et le plus dur c'est de comprendre le principe... Quote
Phagocytose Posted February 28, 2021 Posted February 28, 2021 @Shrex J'ai écrit le programme avec des couleurs et des flèches de partouttttt et je crois que j'ai compris ! Merci beaucoup ! Shrex 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.