06-26-2023, 09:25 AM
(06-26-2023, 07:32 AM)boriel Wrote: VAL "2*x" will need the ROM VAL.
Then, I will do it the hard way:
LET X = 5
LET F$ = "2*X"
LET G$ = VALx$( F$)
( G$ = "2*5" )
PRINT VAL G$
(result = 10)
Code:
' PROGRAM VALx
' (c) ZarSoft 2023 Pascalated Boriel ZX BASIC
' Written by Ze Oliveira
#include <input.bas> ' number = VAL INPUT(12)
#include <screen.bas> ' SCREEN$ function
#include <attr.bas> ' ATTR function
'--- Pascalated Boriel ---
#define PROGRAM REM
#define BEGIN REM
'#define CONST CONST
#define VAR DIM
#define INTEGER LONG
#define REAL FLOAT
#define CHAR STRING
'#define STRING STRING
#define BOOLEAN UBYTE
#define TYPE AS
'#define WHILE WHILE
#define REPEAT DO
#define UNTIL LOOP UNTIL
#define PROCEDURE SUB
CONST TRUE TYPE BOOLEAN = 1
CONST FALSE TYPE BOOLEAN = 0
PROGRAM VALx
VAR X TYPE REAL
VAR Y TYPE REAL
FUNCTION VARaz (V$ TYPE STRING) TYPE REAL
VAR R TYPE REAL
IF V$ = "Z"
R = Z
ELSE IF V$ = "Y"
R = Y
ELSE IF V$ = "X"
R = X
ENDIF
RETURN R
END FUNCTION
FUNCTION VALx$ (S$ TYPE STRING) TYPE STRING
VAR R$ TYPE STRING
R$ = ""
FOR i = 0 TO LEN S$ -1
IF S$(i) >= "A"
LET R$ = R$ + STR$ VARaz( S$(i) )
ELSE
LET R$ = R$ + S$(i)
ENDIF
NEXT i
RETURN R$
END FUNCTION
PROGRAM VALx
VAR x,y,z TYPE INTEGER
VAR F$ TYPE STRING
VAR G$ TYPE STRING
VAR sx,sy TYPE REAL
VAR sx0,sy0 TYPE REAL
VAR first TYPE BOOLEAN
LET F$ = "9/(1+8*X*X+8*Y*Y)"
FOR y = -3 TO 0
LET first = TRUE
FOR x = -5 TO 5
LET X = x*0.5
LET Y = y*0.5
LET G$ = VALx(F$)
PRINT AT 0,0;"F(x,y)=";G$,,
LET z = VAL(G$)
LET sx = 120 + 20*x - 2.5*y
LET sy = 75 + 6*y + 2.5*x + 10.1*z
IF first
first = FALSE
PLOT sx,sy
ELSE
DRAW sx-sx0,sy-sy0
ENDIF
LET sx0 = sx
LET sy0 = sy
NEXT x
NEXT y
END PROGRAM