Curso de Pascal
Basic x Pascal


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


<< Anterior Pascal Próxima >>


/MARMSX/CURSOS/PASCAL