Curso de Pascal
Basic x Pascal
Você está em: MarMSX >> Cursos >> Pascal
Biblioteca do Lammassaari exclusiva do MSX.
Esse capítulo tem como por objetivo apresentar dois programas escritos originalmente em Basic do MSX que serão convertidos para a linguagem Pascal. Dessa forma, o leitor poderá comparar seus conhecimentos de Basic com os programas equivalentes em Pascal, e poder entender melhor a linguagem.
PROGRAMA 1 - AGENDA TELEFÔNICA
(Retirado do livro Dominando o Expert, ed Aleph, 5a. edição, 1987)
BASIC
10 REM Agenda EXPERTa
20 PRINT:PRINT:PRINT"Consultar (C) ou Inserir (I)"; : POKE &HFCAB,255
30 INPUT S$
40 IF S$="C" THEN GOTO 160
50 IF S$="I" THEN GOTO 70
60 GOTO 30
70 PRINT"Quantos nomes serão inseridos";
80 INPUT N : IF A>0 THEN ERASE N$
90 A=1 : DIM N$(N,2)
100 FOR F=1 TO N
110 PRINT "Entre o nome";F;":"
120 INPUT N$(F,1)
130 PRINT "Entre o telefone:"
140 INPUT N$(F,2)
150 NEXT F:GOTO10
160 PRINT:PRINT "Nome","Telefone"
170 PRINT
180 FOR F=1 TO N
190 PRINT N$(F,1),N$(F,2)
200 NEXT F
300 GOTO 10
PASCAL
Considerações:
1- O poke do programa serve para fixar as letras em maiúsculo. Pode ser
retirado do programa ou terá que ser feito em assembly.
2- O Basic permite criar tabelas em tempo de execução do programa. O Pascal
não. Portanto, vamos assumir que nossa lista tenha no máximo 100 nomes.
3- A função do Basic "ERASE" que limpa a tabela N$, não existe no Pascal. Então, vamos criá-la.
var agenda : array[1..100,1..2] of string[30];
f,a,n : integer;
s : char;
procedure erase;
begin
for f:=1 to 100 do
begin
agenda[f,1]:='';
agenda[f,2]:='';
end;
end;
procedure consulta;
begin
writeln;
writeln('Nome');
writeln('Telefone');
writeln;
for f:=1 to n do
begin
writeln(agenda[f,1]);
writeln(agenda[f,2]);
end;
end;
procedure insere;
begin
writeln('Quantos nomes serao inseridos ?');
readln(n);
if n>100 then
n:=100;
if a>0 then
erase;
a:=1;
for f:=1 to n do
begin
write('Entre o nome ',f,': ');
readln(agenda[f,1]);
write('Entre o telefone: ');
readln(agenda[f,2]);
end;
end;
begin
{ AGENDA EXPERTa }
s:='a';
while s<>'S' do
begin
writeln;
writeln;
writeln('Consultar (C), inserir (I) ou Sair (S)');
readln(s);
case s of
'C' : consulta;
'I' : insere;
end;
end;
end.
PROGRAMA 2 - PROGRAMA GRÁFICO
Agora vamos desenhar a bandeira do Brasil.
BASIC
10 SCREEN 5
20 LINE(0,0)-(255,211),12
30 LINE(128,10)-(245,106),11
40 LINE(128,201)-(245,106),11
50 LINE(128,201)-(10,106),11
60 LINE(128,10)-(10,106),11
70 PAINT(128,106),11
80 CIRCLE(128,106),60,5
90 PAINT(128,106),5
100 LINE(68,100)-(189,112),15,BF
110 A$=INPUT$(1)
PASCAL
A linguagem Pascal do MSX não tem rotinas gráficas do MSX. Nesse caso, será necessária a utilização das rotinas do Lammassaari.
As sintaxes para os procedimentos utilizados são:
- Screen(modo);
- line_bf(x1, y1, x2, y2, cor, operacao_logica);
- line(x1, y1, x2, y2, pagina, cor, operacao_logica);
- Circle(x, y, raio, cor);
- Fill(x, y, cor, cor_da_borda);
As rotinas do Lammassaari utilizadas para criar a bandeira podem ser obtidas aqui.
Nota: as rotinas originais "circle.inc" e "fill.inc" apresentaram problemas quando executadas no MSX-DOS 1, travando o micro. Dessa forma, elas foram corrigidas para sanar esse problema. Além disso, as rotinas gráficas principais foram organizadas pelo SLotman no arquivo "msx.inc" e as rotinas de linha por mim em "line.inc".
{$i msx.inc}
{$i line.inc}
{$i circle.inc}
{$i fill.inc}
begin
Screen(5);
line_bf(0,0,255,211,12,0);
Line(128,10,245,106,0,11,0);
Line(128,201,245,106,0,11,0);
Line(128,201,10,106,0,11,0);
Line(128,10,10,106,0,11,0);
Fill(128,106,11,11);
Circle(128,106,60,5);
Fill(128,106,5,5);
line_bf(68,100,189,112,15,0);
readln;
Screen(0);
end.