BASIC pas si simple...

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

__sam__
Messages : 7967
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BASIC pas si simple...

Message par __sam__ »

Xavier a écrit : Rappel:
"OR" (ou) symbolisé par "." et AND (et) symbolisé par "+".
D'habitude le OR est symbolisé par le "+" et le AND par un produit "*" ou ".". Dailleurs avec FALSE=0 (comme partout), ca correspond parfaitement: FALSE or X = X devient logiquement 0 + X = X, et FALSE AND X = FALSE devient 0 * X = 0.
N'importe quelle variable peut être utilisée en variable Booléen.
Elle prend souvent la valeur de 0 pour Faux (false) et 1 pour vraie (true)
Sauf, sur certains basic, ou False= -1.
Sur thomson TRUE=-1. C'est pas mal, car avec ca on peut faire un if sans if

Code : Tout sélectionner

10 if A=B then C = 15 else C = 5
devient

Code : Tout sélectionner

10 C = 5 + (10AND(A=B))
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Xavier

Re: BASIC pas si simple...

Message par Xavier »

D'habitude le OR est symbolisé par le "+" et le AND par un produit "*" ou ".".
Oui effectivement!
Et là j'ai eu un énorme doute en lisant le wiki... Et la vue de cette phrase me semble plus LOGIQUE!
1+0=1 donc OR TRUE
1.0=0 donc AND FALSE
Je fait un édit... merci Samuel, pour le coup d'œil Pro!
Sur thomson TRUE=-1
Comme sur le Visual Basic!
Mais, ça apporte des problèmes de portage de basic en basic, car sur certaines machines:

10 C = 10 * (A AND B)
faux/vrai:
C=0 ou C=10 (Spectrum...)
C=0 ou C=-10 (Thomson)
Xavier

Re: BASIC pas si simple...

Message par Xavier »

Petite curiositée, rarement vue sur d'autres machine que l'Apple 2 en Centronics (?).
prt_error.jpg
prt_error.jpg (20.16 Kio) Consulté 2085 fois
Ne vous fiez pas à vos listings papier !
L'imprimante a mangé des caractères...

- Sur Centronics et RS232, erreurs de parité et mauvaises valeurs ASCII ou absence de caractères.
- Sur ZxPrinter, sérielle 1 bit , décalage de pixels sur une ligne horizontale.

Autre exemple sur le même listing... de cette imprimante secouée trop près du mur à l'usine!
prt_error2.jpg
prt_error2.jpg (25.86 Kio) Consulté 2084 fois
Une bien longue ligne...
:mrgreen:
__sam__
Messages : 7967
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: BASIC pas si simple...

Message par __sam__ »

Xavier a écrit : Mais, ça apporte des problèmes de portage de basic en basic, car sur certaines machines:

10 C = 10 * (A AND B)
faux/vrai:
C=0 ou C=10 (Spectrum...)
C=0 ou C=-10 (Thomson)
En effet, mais si on remarque que le produit est vachement couteux sur les 8 bits, on a tout intéret à utiliser une 3eme forme d'écriture avec des and

Code : Tout sélectionner

C = 10 AND (A AND B) 
ou, dans un basic chez qui VRAI=1,

Code : Tout sélectionner

C = 10 AND -(A AND B)
Au niveau astuce pour que le basic THOMSON aille plus vite, il y a le fait que par défaut les variables basic sont des flottant. Donc quand on écrit A+B ou A*B ou même FOR I=0 TO 9, on réalise en fait des opérations sur des flottants, choses méchamment lentes même si on utilise que des valeurs entières. En théorie pour représenter une variable entières 16bits, il faut utiliser A% et B%, et donc utiliser A%+B% ou FOR I%=0 TO 9 ce qui devient vite fastidieux. Un truc vient alors en aide: la fonction DEFINT A-S, qui dit que toutes les variables qui commencent par une lettre entre A et S sont à traiter comme des entiers 16 bits qui sont infiniment plus rapides que des flottants. Les autres variable débutant par une lettre entre U et Z restent des flottants. Ainsi avec cette instruction les variables couramment utilisées comme indices entiers I,j,k,l,m sont des entiers et les x,y,z,t,u,v des flottants. C'est pas mal.

Sur thomson aussi pour accélérer les boucles on est pas non plus obligé de référencer les variables dans l'instruction NEXT:

Code : Tout sélectionner

FOR I=0 TO 9:....:NEXT
est tout à fait acceptable (pas de I après le NEXT). Du coup le basic n'a pas besoin de vérifier que la variable du "next" est la même que celle du "for". C'est plus rapide!
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Xavier

Re: BASIC pas si simple...

Message par Xavier »

Merci Samuel pour ce complément d'informations!
DEFINT A-S
Cela doit être une constante en Basic!
Car même en Visual Basic, l'utilisation des variables "Byte" (1 octet) sont de loin préférable au variables chaînes et "INTEGER" (2 octets)
Xavier

Re: BASIC pas si simple...

Message par Xavier »

Certains Basics: (optimisation vitesse)

Fonction INSTR$(*.*): Exemple vu dans un programme, mais je ne me souviens plus du type de machine ayant cette instruction.

Code exemple (honteusement pompé sur ce forum!)

Code : Tout sélectionner

1 cls
10 turtle0:show1
20 a$=input$(1)
30 if a$="A" then head 128:fwd 20:head 128:fwd0 
40 if a$="Z" then head 0:fwd20:head0:fwd0
50 if a$="P" then head192:fwd20:head64:fwd0
60 if a$="L" then head64:fwd20:head192:fwd0
70 goto20
A adapter si problème de syntaxe de basic:

Code : Tout sélectionner

1 cls
10 turtle0:show1
20 ON (INSTR$(inkey$,"AZPL")+1) GOTO 20,30,40,50,60
30 head 128:fwd 20:head 128:fwd0:goto 20 
40 head 0:fwd20:head0:fwd0:goto 20 
50 head192:fwd20:head64:fwd0:goto 20 
60 head64:fwd20:head192:fwd0:goto 20 
Répondre