To run online, click here: RUN ONLINE
Code:
' PROGRAM factorials
' Demo for the Pascalated language
' Language: Pascalated ZX BASIC (BORIEL) (compiled)
' Pascalated Sinclair BASIC (c) 1987 by ZarSoft
' Pascalated Boriel (c) 2023 by ZarSoft
' ZX BASIC compiler was created by Boriel
#include <input.bas>
'--- Pascalated Boriel ---
#define VAR DIM
#define INTEGER LONG
#define REAL FLOAT
#define TYPE AS
#define REPEAT DO
#define UNTIL LOOP UNTIL
#define PROCEDURE SUB
#define PROGRAM REM
REM Variable declarations
REM VAR - Global variables
REM Uppercase are different from lowercase
VAR limit TYPE INTEGER : REM max argument to build the list
PROCEDURE Introduction
CLS
PRINT AT 13,0
PRINT "+-----------------+"
PRINT "| factorial list |"
PRINT "+-----------------+"
PRINT " Demonstration for"
PRINT " Pascalated ZX BASIC (Boriel)"
PRINT " (c) 2023 by Zarsoft"
PRINT
PRINT
END PROCEDURE
PROCEDURE GetLimit
REPEAT
PRINT "Max argument = ";
limit = VAL( INPUT(9) ) : PRINT limit
IF limit >= 12 THEN
PRINT
PRINT "Must be lower than 34."
PRINT "Try again."
PRINT
ELSE IF limit < 0 THEN
PRINT
PRINT "Must be greater than 0."
PRINT "Try again."
PRINT
ELSE
PRINT
PRINT "Valid input."
PRINT
END IF
UNTIL (limit >= 0) AND (limit <= 33)
END PROCEDURE
FUNCTION CalculateFactorial (argument TYPE INTEGER) TYPE REAL
VAR result TYPE REAL
LET result = 1
WHILE argument > 1
LET result = result * argument
LET argument = argument-1
END WHILE
RETURN result
END FUNCTION
PROCEDURE WriteFactorials
VAR w TYPE INTEGER
VAR argument TYPE INTEGER
VAR result TYPE REAL
PRINT
FOR w = limit TO 0 STEP -1
LET argument = w
PRINT "fact(";argument;") = ";
result = CalculateFactorial(argument)
PRINT result
NEXT w
END PROCEDURE
PROCEDURE MainPROCEDURE
Introduction
GetLimit
REPEAT
WriteFactorials
PRINT
PRINT "Write 0 to terminate."
GetLimit
UNTIL limit = 0
END PROCEDURE
PROGRAM factorials
MainPROCEDURE
PROGRAM END