Discuss Scratch
- Discussion Forums
- » Français
- » en 2 mots : dites moi qu'est ce que "ajouter bloc"
- MatteoCosmos
-
100+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
je sais que “ajouter blocs” c'est pour créer son bloc mais quel en est l'intéret : peut on faire ce qu'on veut avec ? ou autres choses, je ne sais pas si un de vous sais qu'il m le dise svp ![](//cdn.scratch.mit.edu/scratchr2/static/__f2ec443e250c727d3eec8ad7eb245ecb__/djangobb_forum/img/smilies/smile.png)
![](http://cdn.scratch.mit.edu/scratchr2/static/__f2ec443e250c727d3eec8ad7eb245ecb__/djangobb_forum/img/smilies/smile.png)
![](http://i.cubeupload.com/9LE2uv.gif)
- Lolipopcorn
-
1000+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
pour que le script soit plus petit je sais que “ajouter blocs” c'est pour créer son bloc mais quel en est l'intéret : peut on faire ce qu'on veut avec ? ou autres choses, je ne sais pas si un de vous sais qu'il m le dise svp
ooooooooooooooooooooooooooo000000000000000000000000000000000000000OOOOOOOOOOOOOO
- MatteoCosmos
-
100+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
merci à vous 2 ca permet e créer une partie de sript que l'on va utiliser de manière répétitive dans le projet. on l'utilise aussi car elle est paramétrable et on peut donc augmenter la vitesse de calcul ou d'affichage avec ça
![](http://i.cubeupload.com/9LE2uv.gif)
- spirou201
-
500+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Il y a personne qui y pense, mais ces blocs la servent aussi à faire des fonctions recursives, qui en gros s'appellent elles-memes pour faire des programmes tres puissants mais aussi tres lents et qui ne vont pas toujours marcher.
- ma15fo43
-
1000+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
“Fonctions récursives”, tu peux en dire plus stp ça m'intéresse Il y a personne qui y pense, mais ces blocs la servent aussi à faire des fonctions recursives, qui en gros s'appellent elles-memes pour faire des programmes tres puissants mais aussi tres lents et qui ne vont pas toujours marcher.
![](http://cdn.scratch.mit.edu/scratchr2/static/__93875f549aa013f523ffde7e9cfe2ced__/djangobb_forum/img/smilies/smile.png)
No longer active on Scratch, I build stuff with TypeScript and Kotlin nowadays. (#3 all-time poster in French forums)
- frouvera
-
100+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Hello , un petit exemple :
https://scratch.mit.edu/projects/144403908/#editor
et une application
https://scratch.mit.edu/projects/103471726/
@+
https://scratch.mit.edu/projects/144403908/#editor
et une application
https://scratch.mit.edu/projects/103471726/
@+
Last edited by frouvera (Sept. 1, 2017 09:52:15)
- spirou201
-
500+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Si je definie une “poupée russe” comme ca: “une poupée russe est une poupée qui contient une poupée russe” C'est une definition récursive car j'explique ce qu'est une poupée russe en utilisant le mot poupée russe. D'un point de vue mathématiques, c'est pas si simple que ca, mais ca marche aussi. On a alors des fonctions qui vont s'auto-appeler. ![](//cdn.scratch.mit.edu/scratchr2/static/__93875f549aa013f523ffde7e9cfe2ced__/djangobb_forum/img/smilies/smile.png)
![](http://cdn.scratch.mit.edu/scratchr2/static/__93875f549aa013f523ffde7e9cfe2ced__/djangobb_forum/img/smilies/smile.png)
- ma15fo43
-
1000+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Ok, merci Si je definie une “poupée russe” comme ca: “une poupée russe est une poupée qui contient une poupée russe” C'est une definition récursive car j'explique ce qu'est une poupée russe en utilisant le mot poupée russe. D'un point de vue mathématiques, c'est pas si simple que ca, mais ca marche aussi. On a alors des fonctions qui vont s'auto-appeler.
![](http://cdn.scratch.mit.edu/scratchr2/static/__93875f549aa013f523ffde7e9cfe2ced__/djangobb_forum/img/smilies/smile.png)
No longer active on Scratch, I build stuff with TypeScript and Kotlin nowadays. (#3 all-time poster in French forums)
- zelda_64
-
1000+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Si je definie une “poupée russe” comme ca: “une poupée russe est une poupée qui contient une poupée russe” C'est une definition récursive car j'explique ce qu'est une poupée russe en utilisant le mot poupée russe. D'un point de vue mathématiques, c'est pas si simple que ca, mais ca marche aussi. On a alors des fonctions qui vont s'auto-appeler.
ha ok, je vois. Mais, euh, ça fait une boucle, non, du coup ? X) Ou alors une infinité de scripts s'exécutent en même temps ? J'ai toujours évité cette solution.
Salut toi !
Je m'appelle Zelda (mais pas dans la vraie vie, hein) et j'ai actuellement 15ans derrière moi ! (argh, je suis aussi proche de ma naissance que de mes 30ans O.O)
Donc cette signature est provisoire, c'est juste le temps d'en créer une autre, plus au goût du jour
![](http://cdn.scratch.mit.edu/scratchr2/static/__7d6814356cfe3d348f17cb8f70911279__/djangobb_forum/img/smilies/tongue.png)
- TitouanB29
-
100+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Si je definie une “poupée russe” comme ca: “une poupée russe est une poupée qui contient une poupée russe” C'est une definition récursive car j'explique ce qu'est une poupée russe en utilisant le mot poupée russe. D'un point de vue mathématiques, c'est pas si simple que ca, mais ca marche aussi. On a alors des fonctions qui vont s'auto-appeler.
ha ok, je vois. Mais, euh, ça fait une boucle, non, du coup ? X) Ou alors une infinité de scripts s'exécutent en même temps ? J'ai toujours évité cette solution.
et bein non car tu peux mètre un
si <> alors
end
Last edited by TitouanB29 (Sept. 1, 2017 14:45:57)
- zelda_64
-
1000+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Si je definie une “poupée russe” comme ca: “une poupée russe est une poupée qui contient une poupée russe” C'est une definition récursive car j'explique ce qu'est une poupée russe en utilisant le mot poupée russe. D'un point de vue mathématiques, c'est pas si simple que ca, mais ca marche aussi. On a alors des fonctions qui vont s'auto-appeler.
ha ok, je vois. Mais, euh, ça fait une boucle, non, du coup ? X) Ou alors une infinité de scripts s'exécutent en même temps ? J'ai toujours évité cette solution.
et bein non car tu peux mètre unsi <> alors
end
Je vois pas ce que ça change ^^ je parle de ce script :
définir blabla
avancer de (10)
blabla :: custom
dire [Azertyuiop] // oui je savais pas quoi mettre
Salut toi !
Je m'appelle Zelda (mais pas dans la vraie vie, hein) et j'ai actuellement 15ans derrière moi ! (argh, je suis aussi proche de ma naissance que de mes 30ans O.O)
Donc cette signature est provisoire, c'est juste le temps d'en créer une autre, plus au goût du jour
![](http://cdn.scratch.mit.edu/scratchr2/static/__7d6814356cfe3d348f17cb8f70911279__/djangobb_forum/img/smilies/tongue.png)
- SBissay
-
500+ posts
en 2 mots : dites moi qu'est ce que "ajouter bloc"
Dans ce cas, tu auras effectivement une boucle infinie.
Une “bonne” fonction récursive est définie de manière assez standardisée : elle dépend d'un ou de plusieurs paramètres, avec les conditions suivantes :
- il existe au moins une combinaison de paramètres où la fonction s'arrête (et où donc elle cessera de s'auto-appeler, évitant la boucle infinie)
- les paramètres passés dans l'appel de la fonction par elle-même se rapprochent de la combinaison d'arrêt (et donc, même si ça peut être très long, on finit par s'arrêter).
Bon là, c'est assez abstrait, donc on va sortir un exemple classique : la fonction factorielle, qui a un entier naturel n associe n!, où n! = 1 x 2 x 3 x … x (n - 1) x n.
Quelques exemples : 1! = 1, 2! = 2 x 1 = 2, 3! = 3 x 2 x 1 = 6, 4! = 4 x 3 x 2 x 1 = 24, …, 10! = 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 3628800. (Oui, ça grossit vite (plus vite qu'une exponentielle même, pour ceux qui savent ce que c'est)).
Bref, une approche récursive permet de coder cette fonction de la façon suivante :
En l'appelant en mettant résultat à 1 avant.
Quand on étudie le code, on voit que ça s'arrête quand n vaut 1, donc il y a bien une condition de fin, et que les appels successifs se font en réduisant de 1 à chaque fois, donc on finira par atteindre 1 et la fonction terminera. Tout est donc OK.
Maintenant, les gros problèmes du récursif :
- ça devient vite compliqué à mettre en oeuvre quand la récursivité se fait sur plusieurs paramètres ou sur des appels multiples (exemple : la suite de Fibonacci, où le n-ième terme (pour n >1) vaut la somme du (n-1)ème terme et du (n-2)ème terme)
- Dans Scratch, vu qu'on n'a pas de valeur de retour d'une fonction, on est obligés de passer par une variable pour stocker les résultats intermédiaires. Dans tous les cas, que ce soit en stockant les résultats dans une variable ou dans la mémoire (autres langages), si le nombre de récursions devient trop grand, on peut saturer la mémoire et donc planter le pc, bien qu'en théorie le programme fonctionne.
- C'est une horreur à débugger.
Et il y a des cas extrêmes : la fonction d'Ackermann par exemple, se définit de manière récursive mais fait TRES TRES TRES vite exploser les temps de calcul (ack(4,1) prend quelques minutes sur un bon pc, ack(5, 1) demanderait plus de temps de calcul que l'âge de l'univers …).
Une “bonne” fonction récursive est définie de manière assez standardisée : elle dépend d'un ou de plusieurs paramètres, avec les conditions suivantes :
- il existe au moins une combinaison de paramètres où la fonction s'arrête (et où donc elle cessera de s'auto-appeler, évitant la boucle infinie)
- les paramètres passés dans l'appel de la fonction par elle-même se rapprochent de la combinaison d'arrêt (et donc, même si ça peut être très long, on finit par s'arrêter).
Bon là, c'est assez abstrait, donc on va sortir un exemple classique : la fonction factorielle, qui a un entier naturel n associe n!, où n! = 1 x 2 x 3 x … x (n - 1) x n.
Quelques exemples : 1! = 1, 2! = 2 x 1 = 2, 3! = 3 x 2 x 1 = 6, 4! = 4 x 3 x 2 x 1 = 24, …, 10! = 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 3628800. (Oui, ça grossit vite (plus vite qu'une exponentielle même, pour ceux qui savent ce que c'est)).
Bref, une approche récursive permet de coder cette fonction de la façon suivante :
définir Factorielle (n)
si <(n) = [1]> alors
dire (résultat)
sinon
mettre [résultat v] à ((résultat) * (n))
Factorielle ((n) - [1])
end
En l'appelant en mettant résultat à 1 avant.
Quand on étudie le code, on voit que ça s'arrête quand n vaut 1, donc il y a bien une condition de fin, et que les appels successifs se font en réduisant de 1 à chaque fois, donc on finira par atteindre 1 et la fonction terminera. Tout est donc OK.
Maintenant, les gros problèmes du récursif :
- ça devient vite compliqué à mettre en oeuvre quand la récursivité se fait sur plusieurs paramètres ou sur des appels multiples (exemple : la suite de Fibonacci, où le n-ième terme (pour n >1) vaut la somme du (n-1)ème terme et du (n-2)ème terme)
- Dans Scratch, vu qu'on n'a pas de valeur de retour d'une fonction, on est obligés de passer par une variable pour stocker les résultats intermédiaires. Dans tous les cas, que ce soit en stockant les résultats dans une variable ou dans la mémoire (autres langages), si le nombre de récursions devient trop grand, on peut saturer la mémoire et donc planter le pc, bien qu'en théorie le programme fonctionne.
- C'est une horreur à débugger.
Et il y a des cas extrêmes : la fonction d'Ackermann par exemple, se définit de manière récursive mais fait TRES TRES TRES vite exploser les temps de calcul (ack(4,1) prend quelques minutes sur un bon pc, ack(5, 1) demanderait plus de temps de calcul que l'âge de l'univers …).
- Discussion Forums
- » Français
-
» en 2 mots : dites moi qu'est ce que "ajouter bloc"