Ceux qui aiment les maths seront servis. Vous verrez comment avec quelques blocs il est possible d'effectuer n'importe quelle opération.
N'oubliez pas que le NXT est d'abord un calculateur, aussi sachez vous en servir dans les programmes.
Nous allons d'ailleurs les examiner; d'abord pour des opérations simples, puis en combinaison avec d'autres blocs faisant intervenir quelques notions particulières.
Voici à quoi ressemble ces blocs. Vous les trouverez dans la palette Complète, en survolant l'icône Données
Fig.1

Calculs basiques:
Rappelons d'abord une règle fondamentale:
* 3ème règle: Un bloc ne peut accomplir qu'une seule tâche à la fois. Il faut autant de blocs que de tâches à accomplir.
Cela signifie un bloc pour chaque opération.
addition, soustraction, multiplication et division
Bloc MATH
Fig.2

Le type d'opération est sélectionné à partir du champ de saisie dans la zone Opération. Ils se comportent tous de la même façon.
Ce bloc emploie 2 valeurs numériques A et B. Ces valeurs peuvent être positives, négatives et seulement en entier. Cela signifie que les valeurs décimales ne sont pas acceptées. Si vous tentez d'écrire une valeur comme -5,3 ou 8,7, le bloc MATH arrondira cette valeur à la valeur entière la plus proche soit -4 et 9 pour notre exemple.
Le menu déroulant permettant de choisir l'opération donne ceci:
Addition: A et B sont additionnés.
Soustraction: B est soustrait à A
Multiplication: A est multiplié par B
Division: A est divisé par B.
Vous remarquerez que les plots de données acceptent deux entrée pour A et B, et trois sortie pour A, B et le résultat de l'opération; toutes les valeurs sont numériques. Rien d'autre; ce bloc est très simple et facile à utiliser.
Si aucune valeur est saisie dans les champs A et B, le zéro (0) est la valeur de défaut. Ces nombres peuvent être saisie à la main ou fournis par un autre bloc, à l'aide d'un fil de données raccordé à cet autre bloc. En voici un exemple:
Fig.3

Vous devez comprendre que vous ne pouvez rien faire avec le bloc MATH si les plots de données ne sont pas accessibles. La raison est simple; quel que soit le type d'opération à effectuer, le résultat se trouve dans le plot de sortie, et si vous voulez l'utiliser, vous avez besoin d'un fil de données à raccorder à un bloc qui vous permettra ensuite de lire le résultat sur un écran d'affichage par exemple.
Calculs aléatoires
Imaginons un jeu de 52 cartes battues et étalées, faces cachées sur une table, et que vous en choisissiez une au hasard. Vous avez 1 chance sur 52 de tirer celle que vous avez en main. Si vous recommencez la même opération, vous avez toujours 1 chance sur 52 de tirer n'importe quelle autre carte, y compris celle déjà tirée (puisqu'elle n'a pas été retirée du jeu).
Voyons autrement à l'aide d'une paire de dés à jouer. Chaque dé en roulant, a la faculté de montrer sur chacune de ses faces une valeur de 1 à 6. Quand vous lancez une paire de dés sur un tapis, les valeurs qui apparaissent sont quelconques. Les chances d'avoir un 3 sur un dé sont les mêmes que celles d'avoir un 6. Elles ont toutes la même probabilité. Aléatoire: c'est ainsi que l'on désigne ce phénomène de probabilité. Il ne suit aucune règle, aucune logique; il est imprévisible.
Votre robot est lui aussi capable de générer des nombres aléatoires. Vous pouvez construire un robot succeptible de lancer une paire de dés virtuels, ou de tirer au hasard un nombre entre 1 et 1000. C'est ce que nous allons voir maintenant.
Bloc ALEATOIRE
C'est un bloc d'usage très simple, avec peu de paramètres de configuration, mais importants.
Fig.4

Dans la zone Plage, vous remarquerez la présence de 2 champs de saisie: Minimum (A) et Maximum (B). Dans ces champs vous préciserez les valeurs haute et basse de la plage dans laquelle le bloc "piochera" d'une manière aléatoire. La valeur minimum peut être inférieure à zéro (0), et la valeur maximum ne peut dépasser 32 737.
Une autre façon de choisir ces les limites minimale et maximale est de tirer les deux glissières. La limite supérieure de la glissière est fixée à 100 ; toutefois, si vous entrez une valeur dans la zone de saisie, vous pouvez fixer la limite supérieure au-delà de 100. Vous pouvez également entrer un nombre négatif dans la zone de la limite minimale ; ce nombre supplantera la valeur de la glissière.
Pour fixer les limites minimale et maximale de manière dynamique, branchez des fils de données en entrée au plot de données du bloc.
Exemple:
Nous allons maintenant écrire un pseudo-code:
LEO

Et voilà à quoi ressemble le programme NXT-G.
Fig.5

Le bloc NOMBRE EN TEXTE permet l'affichage de la valeur aléatoire en passant par le bloc TEXTE (qui lui contient une description en A et la valeur convertie en B). Un top sonore ponctue l'affichage du résultat. La boucle recommence la même opération avec une autre valeur aléatoire, jusqu'à ce que la flèche droite soit appuyée. On termine alors le programme.
Autre application: si vous souhaitez faire évoluer votre robot d'une manière indépendante de votre volonté, vous programmerez en utilisant ce bloc qui fournira justement une valeur fruit du hasard, qui conditionnera ses mouvements (voir leçon n°8).
Comparaison
Vous connaissez le vieil adage: "on ne mélange pas les torchons avec les serviettes!". Mais parfois cela pourrait être utile de comparer des objets dissemblables. Comme par exemple: qui est plus lourd, qui est plus grand?
Votre robot peut aussi faire de même; non pas comparer des objets, mais des nombres. Et cela grâce à une particularité des bloc NXT-G qui manipules des valeurs Logiques.
Supposons que je vous dise: "5 est-il plus grand que 3?". Votre réponse est sans aucun doute OUI. Lorsque vous programmez votre robot de la même manière (5 est plus grand que 3), la réponse ne peut-être que VRAI ou FAUX; VRAI dans notre cas.
De même, si je vous demande: "la lune est-elle de forme cubique?", votre réponse serait NON et votre robot répondrait FAUX à la même question.
Aussi, n'oubliez pas qu'un robot répond à des ordres (des instructions) par VRAI ou par FAUX.
Avant de présenter le bloc COMPARER, nous allons écrire un pseudo-code pour tester les connaissances de BONG.
LEO

Je vais donc commencer par glisser 2 blocs ALEATOIRE et les configurer d'une manière identique (A=1 et B=9).
Après avoir convertis les valeurs en mode texte (à l'aide de 2 blocs NOMBRE EN TEXTE identiques), je les regroupe dans un bloc TEXTE unique. Enfin, je les affiche sur l'écran du NXT (ligne 3, x=2 et y=40). J'aurai donc une expression sous la forme; (valeur A) Plus grand que (valeur B).
Fig.6

Remarque: dans le champ B, taper ">" précédé d'un espace (le texte de la fig.6 est trop long; il "mange" la suite.
Nous allons maintenant faire dire par BONG si l'expression est VRAI ou FAUX, et nous sommes prêt pour cela à utiliser le bloc COMPARER.
Désolé d'avoir été si long pour expliquer ce bloc (qui par lui-même est incapable de faire quoi que ce soit), mais un bon exemple en situation est nécessaire pour comprendre le mécanisme.
Bloc COMPARER
Je vais à présent créer un autre RAYON DE SEQUENCE en parallèle avec ce dernier. Je rappelle à cet effet que vous pouvez utiliser le point de départ pour créer des rayons de séquence supplémentaires qui permettent à votre programme d'accomplir des tâches simultanées (pour créer un rayon supplémentaire voir le menu AIDE du logiciel NXT-G).
Sur ce rayon je glisse un bloc COMPARER (pour comparer les valeurs A et B). Rappelez-vous: je veux vérifier l'expression A Plus grand que B et m'assurer que le résultat est VRAI ou FAUX.
Fig.7

Observons le panneau de configuration.
Fig.8

Ce bloc dispose d'un menu déroulant dans la zone Opération. Trois options sont visibles. Si vous choisissez l'option "Inférieur à", le bloc COMPARER déterminera si A est Inférieur à B et traduira l'expression par VRAI ou FAUX. Il procédera de même si vous choisissez une autre option.
J'ai choisi cette option, et le bloc fournira la réponse par le plot de sortie du résultat.
Vous remarquerez aussi que le bloc COMPARER dispose de 2 plots d'entrée. Je vais raccorder par un fil de données chacun de ces 2 plots a un plot de chaque bloc NOMBRE EN TEXTE.
Si nous revenons maintenant au pseudo-code, BONG doit m'afficher le mot VRAI ou FAUX (selon les valeurs fournies par le bloc ALEATOIRE) et vérifier l'expression "A plus grand que B". Pour accomplir cette tâche, je vais ajouter un bloc COMMUTATEUR.
Fig.9

Dans le panneau de configuration, j'ai choisi "Valeur" et "Logique", et décoché "Vue à plat". J'ai de plus tiré un fil de données entre le plot de sortie du bloc COMPARER et le plot d'entrée du bloc COMMUTATEUR.
Je dois maintenant décider de ce qu'il adviendra lorsque le bloc COMMUTATEUR recevra un signal VRAI ou FAUX du bloc COMPARER.
Je veux lire le mot VRAI , si l'expression est vérifiée. Je vais donc placer un bloc TEXTE contenant le mot "VRAI".
Mais, pour rendre ce mot visible sur l'écran, je vais ajouter un autre bloc AFFICHER (en décochant "Effacer") en bout du rayon de séquence principal, puis tirer un fil de données vers le bloc TEXTE.
Pour compléter l'exemple, je procéderai de la même manière dans le cas où l'expression n'est pas vérifiée:
Dans le bloc COMMUTATEUR je sélectionne l'onglet X , je positionne un nouveau bloc TEXTE contenant le mot "FAUX"; j'ajoute un autre bloc AFFICHER sur le rayon de séquence principal relié à son tour par un fil de données au dernier bloc TEXTE (FAUX).
Et pour terminer, Un bloc ATTENDRE pour afficher durant un temps nécessaire à la lecture.
Fig.10

Je vous conseille d'écrire vous-même et de tester ce programme. Il est recommandé pour une meilleure compréhension et une bonne pratique des fils de données. Modifiez-le à votre guise; changez également les conditions par "Supérieur à" ou "Egal à", et observez comment les résultats se modifient.
A suivre …