Accueil > QBasic > QBasic – Maths, logique et divers

QBasic – Maths, logique et divers

This entry is part 13 of 30 in the series QBasic - Tutoriel
  1. Maths
    1. Opérateurs relationnels
    2. Méthodes de calcul
    3. Les nombres
  2. Logique
    1. La logique Booléene
    2. NOT
    3. AND
    4. OR
    5. XOR
    6. EQU
    7. IMP
    8. Exemple
    9. À propos du mariage du ET et du OU

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 X
est é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 = 5 renvoi -1 (TRUE). PRINT 5 = 7 renvoi 0 (FALSE).

  • < : La valeur renvoyé est TRUE si le comparé est inférieur au comparant.
    PRINT 5 < 7 renvoi -1 (TRUE). PRINT 5 < 2 renvoi 0 (FALSE).

  • > : La valeur renvoyé est TRUE si le comparé est supérieur au comparant.
    PRINT 7 > 5 renvoi -1 (TRUE). PRINT 2 > 5 renvoi 0 (FALSE).

  • <= : La valeur renvoyé est TRUE si le comparé est inférieur ou égual au comparant.
    PRINT 5 <= 5 renvoi -1 (TRUE). PRINT 5 <= 2 renvoi 0 (FALSE).

  • >= : La valeur renvoyé est TRUE si le comparé est supérieur ou égual au comparant.
    PRINT 7 >= 7 renvoi -1 (TRUE). PRINT 2 >= 5 renvoi 0 (FALSE).

  • <> : La valeur renvoyé est TRUE si le comparé est différent du comparant.
    PRINT 7 <> 5 renvoi -1 (TRUE). PRINT 5 <> 5 renvoi 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. »
PRINT

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 – Prise

IF Total = 1 THEN
Gagne = 1
EXIT DO
END IF

JeuOrdi:
‘ 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 IF

PRINT « L’ordinateur en prend « ; Ordi
Total = Total – Ordi
IF Total = 1 THEN Gagne = 2
LOOP UNTIL Gagne > 0

SELECT CASE Gagne
CASE 1
PRINT « Bravo, vous avez gagné ! »
CASE 2
PRINT « L’ordinateur a gagné ! »
END SELECT

DO
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

Series Navigation«QBasic – Les casQBasic – Le texte»
Categories: QBasic Tags:
  1. Dony
    23/12/2001 à 15:09 | #1

    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 ! ??

  2. webmaster
    27/12/2001 à 21:40 | #2

    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

  3. webmaster
    31/10/2002 à 10:44 | #3

    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

  4. ayham
    09/07/2010 à 11:07 | #4

    hi

    i want to transfer this to bassic

    A7-8(7×8)

  1. Pas encore de trackbacks