Discuss Scratch

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

Lolipopcorn
Scratcher
1000+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"

MatteoCosmos wrote:

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
pour que le script soit plus petit

ooooooooooooooooooooooooooo000000000000000000000000000000000000000OOOOOOOOOOOOOO


el15617
Scratcher
1000+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"

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


Vendeur de brouettes depuis 1895 :p
MatteoCosmos
Scratcher
100+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"

el15617 wrote:

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
merci à vous 2

spirou201
Scratcher
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
Scratcher
1000+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"

spirou201 wrote:

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.
“Fonctions récursives”, tu peux en dire plus stp ça m'intéresse

No longer active on Scratch, I build stuff with TypeScript and Kotlin nowadays. (#3 all-time poster in French forums)
frouvera
Scratcher
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/


@+

Last edited by frouvera (Sept. 1, 2017 09:52:15)

spirou201
Scratcher
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.
ma15fo43
Scratcher
1000+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"

spirou201 wrote:

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.
Ok, merci

No longer active on Scratch, I build stuff with TypeScript and Kotlin nowadays. (#3 all-time poster in French forums)
zelda_64
Scratcher
1000+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"

spirou201 wrote:

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
TitouanB29
Scratcher
100+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"


zelda_64 wrote:

spirou201 wrote:

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
Scratcher
1000+ posts

en 2 mots : dites moi qu'est ce que "ajouter bloc"

TitouanB29 wrote:

zelda_64 wrote:

spirou201 wrote:

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

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
SBissay
Scratcher
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 :

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 …).

Generative art :              Pivot  :               Sudoku :

Powered by DjangoBB