Jump to content

Fractale niveau 3


Go to solution Solved by Phagocytose,

Recommended Posts

Posted

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 ! 

 

  • Solution
Posted

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

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

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

Posted (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 by Shrex
Posted
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 👌

Posted

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

 

Posted (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 by Shrex
Posted
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 

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

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...