GENISTA (1971) : TUTORIEL "BBC BASIC FOR WINDOWS" EN FRANÇAIS : CHAPITRE 05 : TYPES DE DONNÉES NUMÉRIQUES



Logo Genista, fondé en 1971

Guide Tutoriel de BBC BASIC for Windows, Ch. 05

BBC BASIC (BB4W) Tutorial: Numeric Data Types

Types de Données numériques (Tutoriel BBC BASIC, Ch. 05) [Genista]

Par Peter Nairn  •  Traduction : Guy Schaffner (Texte et images) (Genista)

informatique et programmation Vous savez maintenant ce qu'est une variable à virgule flottante ou une variable entière.
Vous savez qu'une chaîne de caractères permet le stockage de mots et de phrases. Vous savez effacer l'écran et lancer un programme.
Dans ce chapitre, vous approfondirez votre connaissance des variables à virgule flottante, et vous étudierez d'autres opérations de calcul et les fonctions mathématiques.
Chapitre 4   •   Chapitre 5   •   Chapitre 6      

Chapitre 5 — Types de Données numériques


Comme nous l'avons noté plus haut, il y a trois types de données qui sont considérées comme numériques. Ce sont :


Les octets

Un octet peut contenir un nombre de 0 à 255. Des nombres entiers seulement, sans aucune décimale, s'il vous plaît. On peut s'en servir pour représenter le code ASCII pour des caractères uniques ou pour économiser la mémoire si vous êtes certain que l'étendue est assez grande pour vos données.


Les entiers

Un entier, comme un octet, ne peut contenir que des nombres sans décimales. À la différence d'un octet, ce peut être un nombre négatif, et l'étendue peut être beaucoup plus grande, comme on l'a vu dans le tableau du chapitre précédent. On conseille de les utiliser chaque fois que c'est possible parce leur accès et leur manipulation sont beaucoup plus rapides.


Les nombres à virgule flottante

Les nombres à virgule flottante, ou nombre réels comme certains les appellent, sont des nombres qui contiennent des décimales. Si vous deviez représenter la racine carrée de 2 (1.4142) ou l'accélération de la pesanteur (9.81) il vous faudrait un nombre à virgule flottante. Les nombres à virgule flottante sont aussi utilisés pour représenter de très grands nombres et de très petits nombres. Ce serait par exemple la vitesse de la lumière (3.0E8) ou la distance entre les particules atomiques (1.0E–10). Le « E » (qui signifie « exposant ») doit toujours être une lettre capitale, sauf si vous modifiez les paramètres par défaut de « BB4W ».

Tout en respectant les restrictions sur l'étendue des nombres, vous pouvez librement passer d'un type numérique à un autre ; le BASIC s'occupera des détails pour vous. Par exemple, si vous avez un nombre à virgule flottante, disons 3.14159, et que vous l'affectiez à une variable entière, le BASIC tronquera le .14159 et il vous restera 3. Dans d'autres langages, vous devez fournir une conversion spécifique, sinon vous obtenez une erreur. Le BASIC fera cela sans vous prévenir, ce qui peut être un bienfait ou un fléau, selon la façon dont vous considérez la chose.

Nous avons déjà traité précédemment des quatre opérateurs mathématiques de base, c'est-à-dire [ + ], [ – ], [ * ] et [ / ]. Que peut-on faire d'autre avec des nombres ? Eh bien, des tas de choses, en fait. Pour commencer, il existe trois opérations supplémentaires que je voudrais présenter.

Pour essayer la plupart de ces exemples, vous pouvez utiliser le Mode direct (immédiat) et les taper directement. Pour sélectionner le mode direct, allez dans la barre d'outils et cliquez sur le bouton qui représente un clavier, la seconde icône en partant de la fin, près de l'Aide en ligne. Une fenêtre de sortie s'ouvrira et vous pourrez y taper les commandes sans avoir sans cesse à refermer la fenêtre et modifier le code.
• Il y a aussi des programmes, là : si c'est en couleurs, il vous faut l'éditeur ; si c'est en noir, l'éditeur ou le mode direct.



Puissances des nombres [ ^ ]

En utilisant [ ^ ], nous pouvons élever un nombre à la puissance d'un autre nombre :


      PRINT 4^2
    

c'est-à-dire quatre au carré. Ou encore :


      PRINT 4^0.5
    

qui est la racine carrée de 4, c'est-à-dire 2. La puissance peut être tout à fait n'importe quel nombre ou n'importe quelle variable numérique que vous voulez ; assurez-vous seulement que la variable à laquelle vous l'affectez est le type de variable correct pour accepter le résultat.



MOD et DIV

MOD donne le reste d'une division.


      PRINT 20 MOD 7
    

La réponse est 6, parce que 7 * 2 = 14, et que 20 – 14 a pour résultat 6. Pour voir si un nombre est impair ou pair, nous pouvons l'exprimer MOD 2. Si le résultat est 0, la division par 2 n'a pas donné de reste : il est pair. Si le résultat est 1, il doit être impair. Essayez plusieurs fois cela, avec des nombres différents :


      PRINT 43 MOD 2
      PRINT 666 MOD 2
    

DIV donne le nombre de fois que le diviseur est contenu dans le dividende et oublie le reste (s'il y en a un).


      PRINT 20 DIV 7
    

Nous obtenons 2. Ces deux fonctions ont de nombreux usages, par exemple pour trouver l'endroit où afficher un caractère sur l'écran, qui doit être exprimé par un nombre entier.



Des variables qui changent toutes seules


Regardez cette ligne :


      I%=I%+20
    

Toute personne ayant une connaissance purement mathématique pourrait penser que cela n'a pas de sens. Comment I% peut-il être égal à I% plus 20 ? En langage d'ordinateur, ceci est parfaitement légal. Quand le BASIC fait un calcul, il utilise une zone de brouillon. Il prend la valeur actuelle de I%, la met dans cette zone de travail et lui ajoute 20. Puis il prend le résultat et le remet dans l'emplacement de la variable nommée I%.


Le calcul est fait dans une zone de brouillon

Vous rencontrerez souvent cela ; en fait, c'est si courant que BBC BASIC possède une façon raccourcie de l'écrire. Je pourrais essayer de l'expliquer, mais un exemple est beaucoup plus facile. L'expression ci-dessus deviendrait :


      I%+=20
    

Cette expression fait le même travail que la ligne précédente, simplement, elle économise la frappe et les octets pour les utilisateurs de la version de démonstration. Si vous sentez que vous devez exprimer ceci oralement quand vous le voyez, essayez de dire quelque chose qui ressemble à : « I% est augmenté de 20 ». Vous pouvez faire cela pour toutes les opérations mathématiques mentionnées plus haut, à l'exception des puissances. Voici un programme totalement dépourvu de sens qui démontre leur usage.


      I%+=1   : REM I% est augmenté de 1
      I%-=1   : REM I% diminué de 1
      I%*=10  : REM I% multiplié par 10
      I%/=2   : REM I% divisé par 2
      I%MOD=2 : REM I% modulo 2 (le reste de la division)
      I%DIV=2 : REM I% divisé par 2 sans le reste
      END
    

Les espaces n'ont aucune importance ici. Les lignes pourraient être écrites, par exemple :


      I% + = 20
    

Pourtant, je préfère garder ensemble l'opération et le signe égale, parce que c'est plus facile à lire.



Fonctions mathématiques


En même temps que les opérations décrites ci-dessus, nous avons tout un arsenal de fonctions qui nous permettent de manipuler des valeurs numériques. Une fonction, dans ce cas, est un mot-clé qui peut être utilisé dans une expression mathématique puisqu'il renvoie une valeur. Les fonctions ont d'habitude une valeur qui leur est passée, avec laquelle elles font quelque chose, et qui donne un résultat qu'elles renvoient. La valeur passée est appelée le paramètre ou l'argument.

L'Aide en ligne vous expliquera que les parenthèses ne sont pas toujours nécessaires quand on appelle des fonctions, mais utilisez-les, parce que cela rend le programme plus facile à comprendre et cela fait moins de choses à retenir au début. Ainsi, sans plus de divergence, voici les fonctions mathématiques que BBC BASIC supporte.



Fonctions standard


ABS(X)

ABS(X) renvoie la valeur absolue d'un nombre. Dans sa forme la plus simple, si X est négatif, ABS(X) nous donne la valeur positive.


      PRINT ABS(–5.5)
      PRINT ABS(6.6) 
    

donnent respectivement 5.5 et 6.6 ; ABS peut être utilisé pour trouver la différence entre deux nombres sans avoir besoin de décider lequel des deux a la valeur la plus grande :


      REM ABS démonstration
      A=32.5
      B=43.6
      PRINT ABS(A–B)
      END
    

SGN(X)

SGN(X) signifie signe de X. Si X est négatif, SGN(X) renvoie –1. Si X est nul, il renvoie 0 et s'il est positif, vous obtenez +1. Essayez ceci :


      PRINT SGN(23)
      PRINT SGN(–5)
      PRINT SGN(3–3)
      PRINT SGN(25–(2*23))
    

INT(X)

INT(X) arrondit le nombre X à la valeur entière immédiatement inférieure. Pour les nombres positifs, c'est extrêmement évident :


      PRINT INT(3.14159)
      PRINT INT(99.99)
    

Pour les nombres négatifs, souvenez-vous qu'arrondir à l'entier immédiatement inférieur peut donner des résultats inattendus (quoique tout à fait explicables) :


      PRINT INT(–3.14159)
      PRINT INT(–99.99)
    
Un truc : Pour arrondir à l'entier le plus proche

Si vous voulez arrondir un nombre au nombre entier le plus proche, ajoutez-lui d'abord 0.5 ; de cette façon, si la décimale est comprise entre .0 et .4, il est arrondi en-dessous (par défaut) et si elle est entre .5 et .9, il est arrondi au-dessus (par excès).

          REM Arrondi avec INT
          A=3.14159
          B=99.99
          PRINT INT(A+0.5)
          PRINT INT(B+0.5)
          END
        


LN(X) et EXP(X)

LN(X) renvoie le logarithme naturel (en base « e », où e = 2.7183...) de X.

EXP(X) renvoie « e » élevé à la puissance X.


      REM LN et EXP
      A=3.4
      B=LN(A)
      C=EXP(B)
      PRINT A;",";B;",";C
      END
    

LOG(X)

LOG(X) renvoie le logarithme de base 10 de X. Il n'y a pas de fonction opposée antilogarithme, comme LN(X)/EXP(X). Cela est cependant facile à trouver : tout ce qu'il faut faire, c'est élever 10 à la puissance du nombre dont nous voulons trouver l'antilogarithme :


      REM LOG et antilogarithme
      A=3.4
      B=LOG(A)
      C=10^B
      PRINT A;",";B;",";C
      END
    

SQR(X)

Il est possible de trouver n'importe quelle racine d'un nombre en utilisant X^(1/RacineRecherchée). Comme la recherche de la racine carrée d'un nombre est une opération tellement courante, le mot-clé SQR(X) est prévu dans ce but. Maintenant vous pouvez jouer à être Pythagore jusqu'aux calendes grecques (souvenez-vous qu'il ne faut aucun caractère accentué comme nom de variable : utilisez « Cote » et non « Côté ») :


      REM SQR et les triangles rectangles
      Cote1=3
      Cote2=4
      Hypotenuse=SQR(Cote1^2 + Cote2^2)
      PRINT Hypotenuse
      END
    


Fonctions trigonométriques


PI

L'Aide en ligne dit que PI est une fonction. Dans l'usage vrai, il ne prend pas de paramètre, aussi l'utilise-t-on simplement comme une variable qu'on ne peut pas changer. Il renvoie une valeur du bon vieux 22/7 (approximativement), utilisée dans de nombreux calculs de cercles et d'angles.


DEG(X) et RAD(X)

Toutes les fonctions trigonométriques s'utilisent en radians. Il y a PI radians dans 180 degrés (un demi-cercle), donc 1 degré = PI/180 radian. Pour rendre la vie beaucoup plus facile, DEG(X) convertit en degrés une valeur X exprimée en radians, et... écoutez un instant... RAD(X) convertit en radians une valeur en degrés.


SIN(X), COS(X) et TAN(X)

On a ici l'expression utilisée pour le sinus (SIN(X)), le cosinus (COS(X)) et la tangente (TAN(X)) d'un angle X donné. Comme on vient de le voir, tout est exprimé en radians, mais la conversion se fait sans douleur grâce à DEG et RAD.


      PRINT SIN(RAD(60))
      PRINT COS(PI/2)
    

ASN(X), ACS(X) et ATN(X)

Pour une valeur X donnée, on obtient respectivement l'angle correspondant en radians pour l'arc sinus (ASN(X)), l'arc cosinus (ACS(X)) et l'arc tangente (ATN(X)).



Fonctions spéciales


RND(X)

Voici la fonction préférée du programmeur de jeux. RND signifie « random » (aléatoire). Cette fonction renvoie un nombre aléatoire : génial pour décider à quel moment les extra-terrestres doivent plonger sur la terre depuis le ciel, ou bien combien de force il vous faut pour brandir le Glaive Galactique ou... En vérité, c'est une bête très complexe, selon la valeur passée à X. Examinons les options.

(a)
RND sans aucun argument renvoie un nombre entier compris entre –2147483648 et +2147483647, qui est la plus grande valeur qu'un nombre signé de 32 bits peut prendre.


      PRINT RND
    

(b)
RND(X%) où X% est une valeur entière positive supérieure à 1. Ceci renverra un nombre aléatoire entier compris entre 1 et X%, ce dernier compris :


      PRINT RND(10)
    
Un truc : Pour générer un nombre aléatoire dans des intervalles divers

S'il vous faut générer un nombre au hasard entre 6 et 15, par exemple, vous utiliserez RND(10) pour obtenir un nombre, et vous lui ajouterez un nombre servant de décalage.

          PRINT RND(10)+5
        

(c)
RND(1) renvoie un nombre à virgule flottante dans l'intervalle 0.0 à 1.0, ce dernier non compris :


      PRINT RND(1)
    
Un truc : Pour convertir RND

S'il faut convertir d'autres formes de BASIC, c'est celui-ci qu'on trouve habituellement. Pour obtenir une valeur entière, vous pouvez faire ceci :

          PRINT INT(RND(1)*10+1)
        
ou bien vous pouvez utiliser RND(X%) comme cela a été décrit.

(d)
RND(0) renverra à nouveau le dernier nombre aléatoire, mais comme nombre à virgule flottante, comme cela est décrit sous (c).


(e)
RND(X) où X est un nombre négatif. Le générateur de nombres aléatoires sera contraint à commencer sa recherche à un nombre différent. Les nombres générés avec RND ne sont pas véritablement pris au hasard, mais il y en a tellement que cela prendrait beaucoup de temps pour détecter à quel moment ils commencent à se répéter. Si vous n'aviez vraiment rien à faire, vous pourriez les générer et trouver le schéma. Bien que la séquence de nombres aléatoires soit réinitialisée chaque fois que BBC BASIC démarre, afin qu'il ne reproduise pas le même nombre, il est parfois nécessaire de dire au générateur de nombres aléatoires qu'il doit commencer à un endroit prédéfini de sa séquence, et c'est là qu'on se sert d'un nombre négatif.



Priorité des opérateurs


Passons en mode direct et tentons une expérience. Essayez de prédire le résultat de la ligne suivante avant de taper  Entrée .


      PRINT 2+3*4
    

Bon, qu'avez-vous obtenu ? Était-ce la réponse que vous attendiez ? Si vous aviez prévu 14, vous êtes déjà familiarisé avec la priorité des opérateurs. Si vous vous attendiez à 20, vous devez être un peu intrigué, aussi contentez-vous en : j'explique. La priorité des opérateurs, cela signifie la priorité d'une opération mathématique. Dans les mathématiques courantes, la multiplication et la division ont une plus grande priorité que l'addition et la soustraction. En appliquant ces connaissances, nous pouvons maintenant décomposer comment notre BASIC bien-aimé est arrivé au résultat 14. Lorsqu'il reçoit l'expression, quelque chose comme cela se passe :


2+3*4
Multiplication trouvée : la faire en premier
2+12
Maintenant, faire l'addition
= 14

La priorité des opérateurs dans les calculs

Si vous voulez forcer le BASIC à passer outre la priorité, il vous faut utiliser des parenthèses :


      PRINT (2+3)*4
    

Ceci donnera 20 parce que l'expression entre parenthèses est obligatoirement traitée en premier. Tous les calculs situés à l'intérieur des parenthèses se font en tenant compte des règles de priorité énoncées, y compris d'autres expressions contenues dans des parenthèses.

Nous pourrions, petit à petit, bâtir une liste des opérations relativement à la priorité, mais pour gagner du temps, en voici la liste complète :


PrioritéOpération
La plus hauteValeurs littérales, variables, fonctions, parenthèses (), + et – à un seul opérande, NOT
 Puissance ^
 Multiplication *, division /, MOD, DIV
 Addition +, soustraction –
 Comparaisons =  <>  <=  >=  >  < , décalages <<  >>  >>>
 AND
 EOR, OR
La plus basseAffectation =

Certains de ces mots n'ont pas de sens pour vous, pour l'instant, comme les opérations de comparaison, mais plutôt que de mettre la liste à jour au fur et à mesure que nous avançons, la voilà tout entière pour vous servir de référence plus tard. Remarquez que la priorité la plus basse est l'affectation par le signe égale. Cela signifie qu'absolument tout est fait avant que la valeur résultante ne soit affectée à la variable prévue pour recevoir le résultat, et c'est ce à quoi vous vous attendiez, n'est-ce pas ?



Exercices


05.1
Modifiez le programme du cercle pour utiliser PI au lieu de 3.14159. Sauvegardez-le.

05.2
Écrivez un programme qui utilise RND pour simuler le lancement de deux dés (à six faces). Affichez les résultats pour chaque dé et affichez le total.

05.3
Vérifiez que la formule suivante est vraie :


      LOG(X)=LN(X)/LN(10)
    


Fin du Chapitre 5





Haut de Page  •  [Top of Page]

Page suivante (Ch. 6)  •  [Next Page (Ch. 6)]

Page précédente (Ch. 4)  •  [Previous Page (Ch. 4)]

Page d'entrée : BASIC, BBC BASIC et BB4W  •  [BASIC, BBC BASIC and BB4W  Entry Page]

Début du Guide pratique du BBC BASIC  •  [The Beginning of the BBC BASIC Tutorial]

Autres sujets  •  [Other subjects]