Adaptations de Blockly
En général, Blockly nous a semblé tout à fait adéquat comme base pour p5Visuel. Mais, à de râres occasions, il nous a semblé que les choix faits par Blockly visaient une clientèle plus jeune et plus débutante que celle que nous avions en tête. Nous nous sommes donc permis de réviser certains de ces choix...
Catégorie : Boucles
Dans le Blockly original,il y a plusieurs mesures de protection pour éviter certaines erreurs dans les structures de boucles, ce qui est bénéfique pour les utilisateurs débutants. Mais les utilisateurs plus avancés utilisent parfois des boucles générales qui peuvent, dans certains cas, ne jamais s'exécuter : c'est une structure de contrôle que permettent plusieurs langages, dont JavaScript. Nous avons donc modifié Blockly afin de permettre de telles boucles «vides», tout en continuant de le protéger contre certaines boucles infinies.
Boucles avec test à la fin
Paramètres
• une suite d'instructions
• une option (soit "jusqu'à", soit "tant que")
• une condition d'arrêt ou de poursuite de la boucle
Fonctionnement
• on exécute tout d'abord la suite d'instructions
• on teste ensuite la condition
• si l'option choisie est "jusqu'à", la boucle se termine si et seulement si la condition est vraie
• si l'option choisie est "tant que", la boucle se poursuit si et seulement si la condition est vraie
Remarques
• notez que la suite d'instructions est toujours exécutée au moins une fois
Boucles ascendantes avec indice
Paramètres
• une variable («i» dans le bloc ci-dessus, mais qui peut
être quelconque)
• une valeur minimum (1 ci-dessus, mais qui peut être une
expression numérique quelconque)
• une valeur maximum (10 ci-dessus, mais qui peut être une
expression numérique quelconque)
• une valeur pas (1 ci-dessus, mais qui peut être une
expression numérique quelconque)
Fonctionnement
• on donne tout d'abord à la variable la valeur minimum
• on teste si la valeur de la variable est plus petite ou
égale à la valeur maximum
• si oui, on exécute les instructions incluses (après le
«faire»),
puis on ajoute la valeur pas à la variable,
et on refait le test ci-dessus
• si non, le bloc se termine
Remarques
• pour éviter certaines boucles infinies, on remplace toujours la
valeur de pas par sa valeur absolue
Boucles descendantes avec indice
Paramètres
• une variable («i» dans le bloc ci-dessus, mais qui peut
être quelconque)
• une valeur maximum (10 ci-dessus, mais qui peut être une
expression numérique quelconque)
• une valeur minimum (1 ci-dessus, mais qui peut être une
expression numérique quelconque)
• une valeur pas (1 ci-dessus, mais qui peut être une
expression numérique quelconque)
Fonctionnement
• on donne tout d'abord à la variable la valeur maximum
• on teste si la valeur de la variable est plus grande ou
égale à la valeur minimum
• si oui, on exécute les instructions incluses (après le
«faire»),
puis on soustrait la valeur pas à la variable,
et on refait le test ci-dessus
• si non, le bloc se termine
Remarques
• pour éviter certaines boucles infinies, on remplace toujours la
valeur de pas par sa valeur absolue
Catégorie : Math
Longueur d'un vecteur 2D
Paramètres
• les coordonnées x et y du vecteur (1 ci-dessus, mais qui peut
être une expression numérique quelconque)
Fonctionnement
• retourne la longueur du vecteur en question
Remarques
• la longueur est calculée en pixels
Orientation d'un vecteur 2D
Paramètres
• les coordonnées x et y du vecteur (1 ci-dessus, mais qui peut
être une expression numérique quelconque)
Fonctionnement
• retourne l'angle que le vecteur en question fait avec la direction de l'axe des x
Remarques
• l'angle est calculé en degrés, dans le sens des aiguilles d'une montre (car l'axe des y pointe vers le bas)
Créer un grand entier
Paramètres
• un entier standard
Fonctionnement
• retourne le grand entier associé à l'entier ordinaire spécifié en entrée
Remarques
• un grand entier est un entier dont le nombre de décimales n'est pas limité (sauf par la mémoire de l'ordinateur)
• les opérateurs arithmétiques usuels (addition, soustraction, multiplication, division, mais pas exponentiation - voir bloc suivant)
ainsi que les opérateurs «reste de ... ÷ ...» et «créer un texte avec ...» fonctionnent avec les grands entiers;
mais les deux arguments doivent être des grands entiers
Notez que l'opérateur de division effectuera une division entière (sans partie décimale)
• par contre, tous les opérateurs de comparaison (égal, différent, plus petit [ou égal], plus grand [ou égal]) fonctionnent
correctement, que leurs arguments soient des nombres ordinaires ou des grands entiers
• notez aussi que les autres blocs compatibles avec les entiers standards ne sont pas nécessairement compatibles avec
les grands entiers : dans le doute, vérifiez!
Exposant grand entier
Paramètres
• un entier ou un grand entier a servant de base
• un entier ou un grand entier b servant d'exposant
Fonctionnement
• retourne le grand entier ab
Remarques
• ce bloc a été créé car l'opérateur usuel pour l'exponentiation n'accepte pas les grands entiers
Activer SAGE (calcul formel)
Paramètres : aucun
Fonctionnement
• insère dans la page web d'exécution un cadre SAGE invisible, dont l'ID est cadreSAGEp5Visuel
• ce cadre SAGE rendra possible l'exécution de calculs symboliques (via le bloc suivant) dans p5Visuel
Remarques
• suivre les liens suivants pour plus de renseignements sur SAGE
et sur SageMathCell
• vous pouvez aussi consulter la documentation de SAGE
Question pour SAGE
Paramètres
• une commande SAGE (un texte)
• une fonction à un paramètre, qui servira à SAGE pour retourner sa réponse à la question posée
Fonctionnement
• transmet la commande SAGE au cadre SAGE (créé via le bloc précédent)
• comme SAGE prend parfois du temps pour ses calculs, la réponse ne pourra être retournée immédiatement
• la réponse de SAGE sera plutôt transmise en paramètre à la fonction spécifiée
Remarques
• voir les exemples donnés lors de l'annonce correspondante
• l'utilisation des blocs SAGE demande un certain degré d'expertise (gestion d'appels asynchrones, commandes SAGE)
• exemples de commandes SAGE
• calculs exacts : 99!
• approximation de π : (16*atan(1/5)-4*atan(1/239)).n(digits=100)
• factorisation de polynômes : (x^22-1).factor()
• développement de polynômes : var('a','b');((a+b)^17).expand()
• résolution d'équations : (2*x^2-3*x+4==0).solve(x)
Catégorie : Listes
Dans le Blockly original, la numérotation des éléments d'une liste commence à un, ce qui semble plus naturel pour les utilisateurs débutants. Par contre, il y a des avantages à ce que cette numération commence à zéro pour des utilisateurs plus avancés, ne serait-ce que parce que c'est comme cela que JavaScript fonctionne. Après mûre réflexion, nous avons opté pour une numération commençant à zéro.
Tester si la liste est vide
Paramètres
• une expression produisant une liste (possiblement une
variable)
Fonctionnement
• retourne vrai si la liste est vide et faux sinon
Remarques
• vide est ici synonyme de longueur zéro
Obtenir un élément d'une liste
Paramètres
• une valeur de position (0 ci-dessus, mais qui peut
être une expression numérique quelconque)
• une expression produisant une liste (possiblement une
variable)
Fonctionnement
• retourne l'élément de la liste placé dans la position
spécifiée
Remarques
• la numérotation des éléments d'une liste commence en position
zéro, et non en position un
Définir un élément d'une liste
Paramètres
• une valeur de position (0 ci-dessus, mais qui peut
être une expression numérique quelconque)
• une expression produisant une liste (possiblement une
varaible)
• une expression produisant une valeur (qui peut être un
nombre, un objet web, une autre liste, etc.)
Fonctionnement
• place la valeur donnée à la position
spécifiée de la liste
Note : si nécessaire, la liste est prolongée de
fasçon à pouvoir accueillir un élément à la position
spécifiée
Remarques
• la numérotation des éléments d'une liste commence en position
zéro, et non en position un
Enlever un élément spécifique d'une liste
Paramètres
• une liste
• un choix dans un menu comportant premier et dernier
Fonctionnement
• retourne une liste obtenue de la liste initiale en enlevant l'élément à la position indiquée par le
choix
Remarques
• la liste initiale reste inchangée
Ajouter un élément spécifique d'une liste
Paramètres
• une liste
• une valeur quelconque
• un choix dans un menu comportant au début et à la fin
Fonctionnement
• retourne une liste obtenue de la liste initiale en insérant la valeur à la position indiquée par le
choix
Remarques
• la liste initiale reste inchangée
Obtenir un élément spécifique d'une liste
Paramètres
• un choix dans un menu comportant premier et dernier
• une liste
Fonctionnement
• retourne l'élément situé à la position indiquée par le choix<
Remarques
• la liste initiale reste inchangée
Ajouter un élément à une liste
Paramètres
• une liste
• une valeur quelconque
• un nombre indiquant une position dans la liste
Fonctionnement
• crée un nouvelle liste en insérant une valeur dans la liste initiale à la position spécifiée
Remarques
• la liste initiale reste inchangée
Enlever un élément d'une liste
Paramètres
• une liste
• un nombre indiquant une position dans la liste
Fonctionnement
• crée un nouvelle liste en supprimant de la liste initiale l'élément situé à la position spécifiée
Remarques
• la liste initiale reste inchangée
Copie de la liste
Paramètres
• une expression produisant une liste (possiblement une
varaible)
Fonctionnement
• retourne une liste qui est une copie de la liste
originale
Remarques
•les deux listes (liste originale et liste produite) sont alors
disjointes : on peut modifier l'une sans pour autant modifier
l'autre
Catégorie : Texte
Tester si le texte est vide
Paramètres
• une expression produisant un texte (possiblement une
variable)
Fonctionnement
• retourne vrai si le texte est vide et faux sinon
Remarques
• vide est ici synonyme de longueur zéro
Occurence d'une chaîne dans un texte
Paramètres
• le texte dans lequel se fera la recherche
• la position (première / dernière) recherchée
• la chaîne à rechercher
Fonctionnement
• retourne la position du début de la chaîne (de caractères) dans le texte
Remarques
• la position de départ est 0
• retourne -1 si la chaîne n'est pas trouvée.
Lettre à une position donnée dans un texte
Paramètres
• le texte en question
• la position recherchée
Fonctionnement
• retourne la lettre se trouvant en position spécifiée dans le texte
Remarques
• la position de départ est 0
• si position est un nombre négatif, on lui ajoute la longueur du texte
Donc -1 correspond à la dernière lettre, -2 à l'avant-dernière, etc.
Sous-chaîne à une position donnée dans un texte
Paramètres
• le texte en question
• la position du début
• la position de la fin
Fonctionnement
• retourne la sous-chaîne se trouvant entre les positions spécifiées (début et fin) dans le texte
• la lettre en position fin n'est pas incluse dans la sous-chaîne retournée.
Remarques
• la position de départ est 0
• si debut ou fin est un nombre négatif, on lui ajoute la longueur du texte.