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.