O blogue Planeta Sinclair e o arquivo Arca Lusitana apresentam: Concurso BASIC Apascalado 2024. Podes ganhar um emulador Tauon PC-1 com apenas algumas linhas de programa BASIC!
No concurso anterior usámos BASIC interpretado - desta vez vamos usar BASIC compilado - que é muito melhor!
Vantagens:
- Os programas correm mais rápido.
- Existem variáveis locais e as rotinas podem ter argumentos.
- Não é BASIC do ZX Spectrum - é necessário aprender um pouco da nova linguagem (especialmente quem nunca usou o compilador Boriel).
Sabemos que já existe um concurso com o compilador Boriel - é o Concurso BASIC do site Bytemaníacos! Mas, este concurso é diferente. Este concurso tem como objectivo incentivar o uso de programação estruturada.
Resumo das regras:
- Não usar GOTOs!
- Não usar números de linha
- Usar rotinas PROCEDURE e FUNCTION com variáveis locais.
- Usar ciclos REPEAT-UNTIL e WHILE-ENDWHILE
- Usar IF-THEN-ELSEIF-ENDIF
Vejamos uma visão geral da linguagem BASIC Apascalado compilada...
Exemplo de declaração de uma constante:
CONST pi = 3.14
Exemplos de declaração de variáveis:
VAR total TYPE REAL
VAR items TYPE INTEGER
VAR string$ TYPE STRING
VAR matrix(10) TYPE REAL
VAR ok TYPE BOOLEAN
VAR items TYPE INTEGER
VAR string$ TYPE STRING
VAR matrix(10) TYPE REAL
VAR ok TYPE BOOLEAN
Exemplos de procedimentos e funções:
PROCEDURE test
PRINT "5 miles = ";miles2km(5);" km"
END PROCEDURE
FUNCTION miles2km (miles TYPE REAL) TYPE REAL VAR result LET result = miles*1.609344 RETURN result END FUNCTION
Exemplos de estruturas de controle:
REPEAT
PRINT n
LET n = n+1
UNTIL n > 10
WHILE n <= 10
PRINT n
LET n = n+1
END WHILE
IF n = 0 THEN
PRINT "zero"
ELSEIF n < 0 THEN
PRINT "negative"
ELSE
PRINT "positive"
END IF
Eis um programa completo para fins de demonstração:
PROGRAM factorials
REM CONSTant declarations
CONST max = 33
REM Global variables
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
VAR line$ TYPE STRING
REPEAT
PRINT "Max argument = ";
LET line$ = INPUT(9) : REM input max 9 characters
LET limit = VAL( line$ ) : PRINT limit
IF limit > max THEN
PRINT
PRINT "Must be lower or equal than ";max;"."
PRINT "Try again."
PRINT
ELSEIF limit < 0 THEN
PRINT
PRINT "Must be greater than 0."
PRINT "Try again."
PRINT
ELSE
PRINT
PRINT "Valid input."
PRINT
ENDIF
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 result TYPE REAL
VAR w TYPE INTEGER
VAR argument TYPE INTEGER
PRINT
FOR w = limit TO 0 STEP -1
LET argument = w
PRINT "fact(";argument;") = ";
LET result = CalculateFactorial(argument)
PRINT result
NEXT w
END PROCEDURE
BEGIN PROGRAM
Introduction
GetLimit
REPEAT
WriteFactorials
PRINT
PRINT "Write 0 to terminate."
GetLimit
UNTIL limit = 0
END PROGRAM
No próximo post daremos mais informações sobre o concurso e mostraremos como compilar o programa no compilador ZX BASIC de Boriel.
Para mais informação sobre esta linguagem, clicar aqui.
Quem estiver interessado em participar no concurso, pode ler o regulamento aqui.
Este concurso tem o patrocínio de: Arca Lusitana, Planeta Sinclair, Museu LOAD ZX e Teknamic Software.
Adeus até ao nosso regresso.
Sem comentários:
Enviar um comentário