MSX Village forum

La Place des Développeurs quelqu'un pour me rafraîchir la mémoire ...

ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 25/07/2012 à 20h24

Reprise du message précédent

non ce n'est pas de ça que je parlais... Désolé si je m'exprime mal...

Je parle de la comparaison d'expression dans un IF
Il me semblait qu'il y a avait des méthodes pour faire comparaisons d'expressions plus rapides... non ? J'ai rêvé ?


Ceci dit j'ai une question sur le ON A GOTO

Si il me manque une valeur dans A comment je fais ?
Supposons que A puisse prendre les valeurs 1,2,3,5
je fait ça ON A GOSUB 100,200,300,,500 ??

(d'après un test rapide... Le on A GOSUB serait moins rapide qu'une série de IF .... ? ! :moue ) Edité par ericb59 Le 25/07/2012 à 20h25


banniere-ericb59e
Site web    
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 25/07/2012 à 20h41
On peut en effet sauter des valeurs par ON A GOSUB 100,200,300,,500

(idem avec ON KEY GOSUB)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 25/07/2012 à 21h54
ericb59 :
Je parle de la comparaison d'expression dans un IF

Il me semblait qu'il y a avait des méthodes pour faire comparaisons d'expressions plus rapides... non ? J'ai rêvé ?


Tu peux donner un exemple qu'on comprenne un peu mieux ce que tu veux faire ?


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 25/07/2012 à 22h29
heu non j ai pas d exemple justement....
je vais tacher de m exprimer autrement... j aurais pas dû mettre un goto,ou un gosub dans ma demande ca n est pas ce que je voulais...

je reprends : :sick

assigner des valeurs a une variable sans l utilisation de If mais avec des opérateurs logique OR , And Xor ... pour gagner du temps machine.

par exemple si je veux faire ceci

50 if a=10 then x=tby+sx*20

n'existe t il pas une methode pour assigné "x" en fonction "a" sans passer par un "if" ?
x= .... or ... xor ??? barbatruc ?. :siffle Edité par ericb59 Le 25/07/2012 à 22h30


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 28/07/2012 à 11h13
On en a déjà parlé en page 5 de ce sujet ...


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 28/07/2012 à 12h05
ha oui c est ca que je cherchais...
t as des explications sur le fonctionnement... ca j ai pas pigé :moue


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 28/07/2012 à 18h19
En BASIC, lorsqu'une comparaison est faite entre deux valeurs, la valeur de l'expression est égale à 0 si la comparaison est fausse, et -1 si la comparaison est vraie. Donc, pour ton exemple :
Code :
50 if a=10 then x=tby+sx*20

Tu pourrai écrire à la place :
Code :
50 x=tby+sx*-(a=10)*20

x sera égal à tby si a est différent de 10 ou sera égal à tby+sx*20 si a=10.

Et cela marche pour n'importe quelle expression qu'on utiliserai dans un IF ... THEN. Ton expression peut donc être un calcul complexe, formé d'opérateurs classiques et même d'opérateurs logiques.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 28/07/2012 à 18h42
Plus exactement, ceci :
Code :
50 x=tby+sx*-(a=10)*20

remplace cela :
Code :
50 if a=10 then x=tby+sx*20 else x=tby



Autre exemple, ceci :
Code :
50 x=(tby+sx*20)*-(a=10)

remplace ça :
Code :
50 if a=10 then x=tby+sx*20 else x=0
Edité par GDX Le 29/07/2012 à 08h03
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 28/07/2012 à 19h02
Z avez pas des explications ou un tuto ? Parce ue la ça reste obscur !


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 28/07/2012 à 19h13
ericb59 :
Z avez pas des explications ou un tuto ? Parce que la ça reste obscur !


Bon :s

Ne nous énervons pas ... :(



Eric, allume ton MSX, et affecte la valeur 5 à la variable A.

Si tu fais PRINT A, tu as la valeur de la variable.

Code :
? A
5
Ok




Maintenant si tu fais PRINT A=5, le BASIC va évaluer l'expression (A=5) et va te retourner VRAI ou FAUX. Sauf que pour le BASIC, la valeur de VRAI, c'est -1, et la valeur de FAUX, c'est 0.

Code :
? A=5
-1
Ok
? A=6
0
Ok
? A<>5
0
Ok




C'est plus clair maintenant ? Edité par Metalion Le 28/07/2012 à 19h13


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 28/07/2012 à 20h10
oui metallion ca c est clair...
mais ca : x=tby+sx*-(a=10)*20. non !

comprend pas ! :hum
pourquoi mettre un - devant l expression d egalité ? Edité par ericb59 Le 28/07/2012 à 20h10


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 28/07/2012 à 22h42
ericb59 :
oui metallion ca c est clair...

mais ca : x=tby+sx*-(a=10)*20. non !



comprend pas ! :hum

pourquoi mettre un - devant l expression d egalité ?


Ben pour que le -1 de la valeur VRAI devienne 1 dans le calcul !



Bon oublie cet exemple avec tby, il ne répondait pas complètement à ta question ...



Imagine que tu veux faire :

Code :
10 IF A=5 THEN X=20 ELSE X=0


Il suffit de metre l'expression suivante à la place :

Code :
10 X=-(A=5)*20


Si A=5, l'expression (A=5) vaut -1 et donc X=20.

Si A est différent de 5, l'expression (A=5) vaut 0 et donc X=0 Edité par Metalion Le 29/07/2012 à 21h17


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 29/07/2012 à 08h07
-(-1) est égal à 1.

0-1 est égal à -1.

-1 x -1 est égal à 1.

-1+-1 est égal à -2.

-0 est égal à 0.

(A>=3) est égal à -1 si A est supérieur ou égal à 3 sinon c'est égal à 0.

-(A>=3) est égal à 1 si A est supérieur ou égal à 3 sinon c'est égal à 0.

C'est tout con.
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10356

Le 29/07/2012 à 08h13
Citation :
Il me semblait qu'il y a avait des méthodes pour faire comparaisons d'expressions plus rapides... non ? J'ai rêvé ?




c'est plus rapide mais pas toujours plus simple... oui! j'ai cauchemardé! :D


:noel
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5795

Le 29/07/2012 à 08h13
:sick :sick :sick :sick :sick :sick :sick :sick :sick :sick :sick :sick :sick :sick :sick
bon a rappeller ^^ (ou comme moi a apprendre:oups)
:tea ha ca vat deja mieu :p:lol
Et dire que j'ai echapper a ca :oups



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie