sexta-feira, 12 de janeiro de 2024

Concurso BASIC Apascalado 2024 - Introdução ao BASIC Apascalado compilado


Benvindos a mais um concurso de BASIC Apascalado para o ZX Spectrum!!!!

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.
Desvantagens:
  • 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

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