QBasic – Maths, logique et divers
- QBasic – Introduction au QBasic
- QBasic – Ecrire sur l’écran
- QBasic – Mathématiques élémentaires
- QBasic – La ponctuation (syntaxe)
- QBasic – Les variables
- QBasic – Les commentaires
- QBasic – Les constantes
- QBasic – Entrée de données
- QBasic – Les boucles inconditionnelles
- QBasic – Les boucles conditionnelles
- QBasic – Structure conditionnelle
- QBasic – Les cas
- QBasic – Maths, logique et divers
- QBasic – Le texte
- QBasic – Le son
- QBasic – Dessiner
- QBasic – Sous-programmes, fonctions et procedures
- QBasic – Les types de variables
- QBasic – Les tableaux
- QBasic – Les types personalisés
- QBasic – L’organisation des données
- QBasic – QBasic et le système d’exploitation
- QBasic – L’accès aux fichiers
- QBasic – Le traitement des erreurs
- QBasic – La manette de jeu
- QBasic – Encore plus loin dans le graphisme
- QBasic – La mémoire
- QBasic – Le langage machine et la souris
- QBasic – L’heure, la date, le temps
- QBasic – Le clavier
Nous avions abordé brievement les maths dans un des tout premiers chapître. Nous allons
maintenant aprofondir.
Maths
Opérateurs relationnels
Dans le chapitre précédent, nous avions parlé d’opérateurs relationnels. Les voici :
| Opérateur | Fonction |
|---|---|
| = | Egual |
| < | Inférieur |
| > | Supérieur |
| <= | Inférieur ou égual |
| >= | Supérieur ou égual |
| <> | Différent |
Méthodes de calcul
Nous allons aussi compléter le tableau de départ qui regroupait les 4 opérations :
| Opérateur | Fonction | Exemple de code | Résultat |
|---|---|---|---|
| \ | Division entiére | PRINT 100 \ 3 | 33 |
| MOD | Modulo | PRINT 19 MOD 4 | 3 |
| SQR | Racine carré | PRINT SQR(25) | 5 |
| ^ | Exposant | PRINT 2 ^ 4 | 16 |
Je vous vois venir. Et oui il n’existe pas de fonction pour extraire une racine supèrieur à 2
d’un nombre. Il n’existe que la fonction
SQR qui extrait la racine carré.Mais vous avez certainement du apprendre à l’école ou ailleurs que la racine
N d’un nombre Xest égale à ce nombre
N à la puissance inverse de X. Ce programme calcule la racine cubique de 27 :
PRINT 27 ^ 1 / 3
Les nombres
En QBasic, il existe une multitude de fonctions qui ont pour but de triturer les nombres.
| Nom | Fonction | Exemple de code | Résultat |
|---|---|---|---|
| INT | Renvoi la partie entière d’un nombre décimal (et non pas l’arrondi) | PRINT INT(24.698) | 24 |
| CINT | Arrondi une expression numérique à l’entier le plus proche (2 octets) | PRINT CINT(24.698) | 25 |
| CLNG | Arrondi une expression numérique à l’entier le plus proche (4 octets) | PRINT CLNG(24.698) | 25 |
| CSNG | Convertit un nombre en nombre à simple précision | PRINT CSNG(4) | 4 |
| CDBL | Convertit un nombre en nombre à double précision | PRINT CDBL(4) | 4 |
| ABS | Renvoi la valeur absolue (sans le signe) d’un nombre | PRINT ABS(-987) | 987 |
| SGN | Renvoi -1 pour un nombre négatif, 1 pour un nombre positif et 0 pour un nombre nul | PRINT SGN(-987); SGN(987); SGN(0) | -1 1 0 |
| RND | Retourne un nombre pseudo-aléatoire entre 0 et 1 | PRINT INT(RND * 10) | 7 |
| SIN | Calcul du sinus (Radians) | PRINT SIN(0); SIN(3.14159265458 / 2) | 0 1 |
| COS | Calcul du cosinus (Radians) | PRINT COS(0); COS(3.14159265458 / 2) | 1 0 |
| TAN | Calcul de la tangeante (Radians) | PRINT TAN(3.14159265458 / 4) | 1 |
| ATN | Renvoi la cotangente (Radians) | PRINT ATN(1) | .7853982 |
| LOG | Renvoi le logarithme | PRINT LOG(1) | 0 |
| EXP | Eleve à une puissance népérienne | PRINT EXP(0) | 1 |
| HEX$ | Renvoi la valeur héxadécimal d’un nombre donné | PRINT HEX$(15) | F |
| OCT$ | Renvoi la valeur octale d’un nombre donné | PRINT OCT$(8) | 10 |
Logique
La logique Booléene
De Georges Boole, mathématicien britannique (Lincoln 1815 – Ballintemple, près de Cork, 1864),
créteur de la logique mathématique moderne.
On désigne par Algèbre de Boole ou algèbre de la logique la structure algébrique
appliquée à l’étude des relations logiques, et dans laquelle les opérations de réunion,
d’interséction et de complémentation expriment respectivement la disjonction, la conjonction,
la négation logiques.
La logique Booléenne n’est pas des mieux implentée en QBasic, mais elle existe :
Ainsi, en QBasic, on distingue le VRAI (TRUE) et le FAUX (FALSE).
- TRUE = -1
- FALSE = 0
Les opérateurs logiques sont les suivants :
- NOT : C’est le complément logique. TRUE et le complément de FALSE et FALSE et le
complément de TRUE. Il faut que l’entrée soit FALSE pour que la sortie soit TRUE.
Entrée
Sortie
Exemple de code
Résultat
FALSE
TRUE
PRINT NOT 0
-1
TRUE
FALSE
PRINT NOT -1
0
- AND : C’est la conjonction. Il faut que les deux Entrées soit TRUE pour que la
sortie soit TRUE.
Entrée1
Entrée2
Sortie
Exemple de code
Résultat
FALSE
FALSE
FALSE
PRINT 0 AND 0
0
FALSE
TRUE
FALSE
PRINT 0 AND -1
0
TRUE
FALSE
FALSE
PRINT -1 AND 0
0
TRUE
TRUE
TRUE
PRINT -1 AND -1
-1
- OR : C’est la Disjonction (ou inclusif). Il faut qu’une des deux entrées
soit à TRUE pour que la sortie soit TRUE.
Entrée1
Entrée2
Sortie
Exemple de code
Résultat
FALSE
FALSE
FALSE
PRINT 0 OR 0
0
FALSE
TRUE
TRUE
PRINT 0 OR -1
-1
TRUE
FALSE
TRUE
PRINT -1 OR 0
-1
TRUE
TRUE
TRUE
PRINT -1 OR -1
-1
- XOR : C’est le ou exclusif. Il faut qu’une seul des deux entrées
soit à TRUE pour que la sortie soit TRUE.
Entrée1
Entrée2
Sortie
Exemple de code
Résultat
FALSE
FALSE
FALSE
PRINT 0 XOR 0
0
FALSE
TRUE
TRUE
PRINT 0 XOR -1
-1
TRUE
FALSE
TRUE
PRINT -1 XOR 0
-1
TRUE
TRUE
FALSE
PRINT -1 XOR -1
0
- EQV : C’est l’equivalence. Il faut que les deux entrées soit FALSE ou
que les deux entrées soit TRUE pour que la sortie soit à TRUE.
Entrée1
Entrée2
Sortie
Exemple de code
Résultat
FALSE
FALSE
TRUE
PRINT 0 EQV 0
-1
FALSE
TRUE
FALSE
PRINT 0 EQV -1
0
TRUE
FALSE
FALSE
PRINT -1 EQV 0
0
TRUE
TRUE
TRUE
PRINT -1 EQV -1
-1
- IMP : C’est l’implication. Cet opérateur réalise une comparaison Bit par
bit et renvoi le bit correspondant.
Entrée1
Entrée2
Sortie
Exemple de code
Résultat
FALSE
FALSE
TRUE
PRINT 0 IMP 0
-1
FALSE
TRUE
TRUE
PRINT 0 IMP -1
-1
TRUE
FALSE
FALSE
PRINT -1 IMP 0
0
TRUE
TRUE
TRUE
PRINT -1 IMP -1
-1
Les opérateurs relationnels vus au début de ce chapitre servent aussi en logique booléennes.
On ignore souvent la valeur de leur résultat lorsqu’on les utilise, mais il se trouve qu’ils
en ont une. Voici un récapitulatif :
- = : La valeur renvoyé est TRUE si le comparé et le comparant sont éguals.
PRINT 5 = 5renvoi -1 (TRUE).PRINT 5 = 7renvoi 0 (FALSE). - < : La valeur renvoyé est TRUE si le comparé est inférieur au comparant.
PRINT 5 < 7renvoi -1 (TRUE).PRINT 5 < 2renvoi 0 (FALSE). - > : La valeur renvoyé est TRUE si le comparé est supérieur au comparant.
PRINT 7 > 5renvoi -1 (TRUE).PRINT 2 > 5renvoi 0 (FALSE). - <= : La valeur renvoyé est TRUE si le comparé est inférieur ou égual au comparant.
PRINT 5 <= 5renvoi -1 (TRUE).PRINT 5 <= 2renvoi 0 (FALSE). - >= : La valeur renvoyé est TRUE si le comparé est supérieur ou égual au comparant.
PRINT 7 >= 7renvoi -1 (TRUE).PRINT 2 >= 5renvoi 0 (FALSE). - <> : La valeur renvoyé est TRUE si le comparé est différent du comparant.
PRINT 7 <> 5renvoi -1 (TRUE).PRINT 5 <> 5renvoi 0 (FALSE).
Quel est le but de tout ceci, me direz vous. Au premier abord, ça peut paraître (un peu) compliqué.
C’est vrai que comme ça, c’est un peu abstraît. Mais vous allez voir, c’est en fait très simple :
Nous avons vu que lorsque l’on utilise un opérateur relationnel (<, >, <=, >=, =, <>), la
valeur renvoyé est soit TRUE, soit FALSE. Donc on peut combiner cette relation avec les
opérateurs logiques NOT, AND, OR, XOR, EQV, IMP. Nous allons réaliser un petit jeu. C’est le
jeu des ‘Allumettes’. Ici, les allumettes ne sont pas représentées. L’ordinateur nous donne
juste le nombre restant. Le but est de ne pas prendre la dernière.
CLS
Total = 20
PRINT « — Les Allumettes — »
PRINT « 20 Allumettes sont posées sur une table. »
PRINT « Vous pouvez en enlever entre 1 et 3 à la fois. »
PRINT « Le perdant est celui qui prend la dernière. »DO
INPUT « Voulez vous commencer le premier (O/N) « ; Trait$
LOOP UNTIL Trait$ = « O » OR Trait$ = « N »‘ Première utilisation d’un OU logique.
‘ On sort de la boucle si et seulement si
‘ ‘Trait$’ vaut ‘O’ ou ‘N’DO
IF Trait$ = « N » AND Total = 20 THEN GOTO JeuOrdi ‘ Utilisation d’un ET logique
PRINT : PRINT « Allumettes restantes « ; Total ‘ pour savoir si l’ordinateur
DO ‘ doit jouer le premier coup
INPUT « Combien d’allumettes enlevez vous « ; Prise
LOOP WHILE Prise < 1 OR Prise > 3 OR Prise <> INT(Prise) ‘ Encore le OU logique
Total = Total – PriseIF Total = 1 THEN
Gagne = 1
EXIT DO
END IFJeuOrdi:
‘ Pour gagner aux allumettes, le truc est très simple : Il faut laisser
‘ (4 * n) + 1 allumettes (Une multiple de 4 plus 1) à son adversaire.
‘ Puis, on prend le complément de 4. Si il en prend 1, j’en prend 3; si
‘ il en prend 2, j’en prend 2; si il en prend 3, j’en prend 1. Il faut
‘ donc transcrire cette rêgle dans le programme pour le premier choix de
‘ l’ordinateur.
‘ Il doit laisser un nombre multiple de 4 + 1 :IF Trait$ = « N » AND Total = 20 OR Trait$ = « O » THEN’ Mariage du OU et du ET
FOR i = 1 TO Total
FOR j = 1 TO 3
IF Total – j = i * 4 + 1 THEN Ordi = j
NEXT j
NEXT i
IF Ordi = 0 THEN Ordi = 3
ELSE
Ordi = 4 – Prise
END IFPRINT « L’ordinateur en prend « ; Ordi
Total = Total – Ordi
IF Total = 1 THEN Gagne = 2
LOOP UNTIL Gagne > 0SELECT CASE Gagne
CASE 1
PRINT « Bravo, vous avez gagné ! »
CASE 2
PRINT « L’ordinateur a gagné ! »
END SELECTDO
INPUT « Voulez vous rejouer (O/N) « ; Rejouer$
LOOP UNTIL Rejouer$ = « O » OR Rejouer$ = « N »‘ Une autre utilisation du OU logique
IF Rejouer$ = « O » THEN RUN
À propos du mariage du ET et du OU
Il est important de souligné que, comme en Math, il existe des priorités entre les opérateurs.
Ainsi, le ET peut être comparé à une multiplication et le OU à une addition. C’est à dire
que dans une condition, le ET aura priorité sur le OU :
PRINT -1 OR -1 AND 0′ Renvoi -1
Si on avait utilisé des parenthèses :
PRINT (-1 OR -1) AND 0′ Renvoi 0
ceci est en fait plus une question genre forum qu’un commentaire :
voila en essayant de faire un progamme de probabilité je bute sur ce qui suit le (x!).(Je suis sur Poisson en ce moment…) Comment le traduire cette variable en ! ??
La fonction suivante permet de calculer la factorielle d’un nombre :
FUNCTION fact (x)
IF x >= 1 THEN
fact = 1
ELSE
fact = x * fact(x – 1)
END IF
END FUNCTION
Raphaël
Il semblerait que je me sois trompé. En fait :
FUNCTION fact (x)
IF x <= 1 THEN
fact = 1
ELSE
fact = x * fact(x – 1)
END IF
END FUNCTION
hi
i want to transfer this to bassic
A7-8(7×8)