BASIC X PASCAL


  Agora, chegou a hora de convertermos o seu programas antigo em Basic para o Pascal. Por quê fazer isto? Primeiro, porque você tem mais memória disponível para o Pascal. Todos os 64 KB da RAM, menos o espaço do DOS, estão disponíveis para você. Segundo, porque o seu programa vai ser compilado em Pascal, enquanto no Basic ele era interpretado, ou seja, vai ficar mais rápido.



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



  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

Considerações:
  1. O Pascal não tem rotinas gráficas. Vamos ter que apelar para os includes do Lamassari. No MSX Pad, tem um include que junta diversos includes do Lamassari, que é o MSX.INC.
  2. Os comandos LINE, CIRCLE e PAINT não estão neste include. Vamos chamá-los também (obs: coloque os include aonde o compilador possa enxergá-los).
  3. Sintaxes:
{$i line.inc}
{$i circle.inc}
{$i fill.inc}
{$i msx.inc}

begin
  Screen(5);    { O Pascal não se inporta com maiúsculo ou minúsculo. Vale screen(5) ou SCREEN(5) }
  Line(0,0,255,211,12,0);
  Line(128,10,245,106,11,0);
  Line(128,201,245,106,11,0);
  Line(128,201,10,106,11,0);
  Line(128,10,10,106,11,0);
  Fill(128,106,11,11);
  Circle(128,106,60,5);
  Fill(128,106,5,5);
  readln;
  Screen(0);
end. 


/MARMSX/CURSOS/PASCAL