COMANDOS BÁSICOS

  Principais comandos:

COMANDO DESCRIÇÃO
write  Escreve algo na tela. Ex: write('MSX');
writeln  Escreve algo na tela e vai para a linha seguinte.
read  Lê dados do teclado. Equivale ao INPUT do Basic.
readln  Lê dados e pula uma linha.
clrscr  Limpa a tela.
begin  Começa uma estrutura.
end  Termina uma estrutura.
gotoxy  Posiciona cursor. Igual ao LOCATE do Basic.
goto  Desvia execução do programa para uma label.
inline  Executa instruções em assembly :)
keypressed  Verifica se tecla pressionada. No MSX, não funciona.
read(kbd,<char>)  Keypressed do MSX. Ex: char c; read(kbd,c);
length  Retorna o tamanho de um string.
random  Gera números aleatórios.
randomize  Prepara para gerar números aleatórios.
wherex  Retorna a coluna do cursor.
wherey  Retorna a linha do cursor.
for  Estrutura de repetição.
while  Estrutura de repetição.
repeat .. until  Estrutura de repetição.
 if  Teste.



Exemplos:

1- gotoxy:
begin
  gotoxy(1,1);
  write('MSX');
end.


2- goto:
begin
  volta: writeln('Isto vai ser escrito para sempre!); 
  goto volta;
end.


3- inline:
begin
  { OS COMENTÁRIOS VÊM ENTRE CHAVES }
  { Programa em assembly para limpar a tela }
  inline ( $CD/$C3/$00 );
end.


4- read(kbd,<char>):
var tecla : char;

begin
  writeln('Tecle ESC para parar');
  while ord(tecla)<>27 do
  begin
   gotoxy(1,2);
    writeln('Estou em LOOP ...');
    read(kbd,tecla);
  end;
  writeln('ESC pressionado!');
end. 


5- Random e randomize:
begin
  randomize;
  writeln('Um número aleatório: ', random(10));
end. 

Obs:

  O ponto e vírgula (;) é usado em pascal para indicar que a estrutura acaba ali.
  O ponto final é usado no END do programa principal apenas.
  o Símbolo $ indica que o número é hexadecimal.



ESTRUTURAS DE DECISÃO E REPETIÇÃO (ITERAÇÃO) - STATEMENTS

1- IF

  O IF (SE, em português) testa se um dado teste lógico é verdadeiro. Em caso afirmativo, executa um trecho de código associado a ele (vem logo após o comando, delimitado por um begin e end).

  Sintaxe:
if (teste_lógico) then
begin
  { seu código aqui }
end;
  Vamos ver um exemplo, onde o programa testa se o nome é "José":
var nome : string[40];

begin
  nome := 'Jose';
  if (nome = 'Jose') then
    writeln('Seu nome é José');
end.
  Obs: Quando o código de tratamento de "statements" possui apenas uma linha, não é necessário utilizar o delimitador begin e end.

  A palavra reservada ELSE é utilizada junto com o comando IF para executar um tratamento alternativo ao teste realizado. Ex:
var nome : string[40];

begin
  nome := 'Jose';
  if (nome = 'Jose') then
    writeln('Fala, Zé !')
  else
    writeln('Tudo bem, ', nome, '?');
end.
  No exemplo acima, caso o nome armazenado na variável "nome" seja José, imprimirá a mensagem "Fala, Zé!". Caso seja diferente de José, irá imprimir outra mensagem de saudação com o nome da pessoa.
  Obs: A linha imediatamente anterior ao ELSE deverá vir sem o ponto e vírgula no final, seja ela um comando ou a terminação "end".

  Podemos fazer o teste em cascata. Ex:
var nome : string[40];

begin
  nome := 'Jose';
  if (nome = 'Jose') then
  begin
    writeln('Fala, Zé !');    { Dá no mesmo que sem o begin e end, só para mostrar o caso do end sem ponto e vírgula }
  end
  else
  begin
    if (nome = 'Maria') then
      writeln('Oi Maria.')
    else
      writeln('Tudo bem, ', nome, '?');
  end;
end.
  O teste mais externo quer saber se o nome é José. Em caso negativo, um novo teste (teste interno) verifica se o nome é Maria. Se sim, imprime "Oi Maria". Senão, imprime uma mensagem com o nome dado.
  Aqui nesse caso, se eu colocasse o teste para saber se o nome é Maria dentro do IF e não do ELSE, jamais conseguríamos executar os comandos referentes a "Maria", uma vez que para entrar nessa sentença a condição do nome deverá ser igual a 'José' (não pode ser José e Maria ao mesmo tempo).


2-FOR

  Cria um laço de repetição, através da definição de uma variável de controle e o domínio (espaço de variação). Assim, é definido para a variável de controle um valor incial e um valor final. A progressão pode ser ascendente ou descendente.

  Sintaxes:
for variavel_controle := valor_incial to valor_final do { Progressiva }
for variavel_controle := valor_incial downto valor_final do { Regressiva }
  Exemplo - escrever de 1 a 10:
var i : integer;

begin
  for i:=1 to 10 do   { i é a variável de controle }
    writeln(i);
end.
  O controle do laço é automático. Outra dica importante é de não alterar o valor de i dentro da sentença do for.


3-WHILE

  O WHILE também é uma laço repetitivo. Diferente do FOR, ele repete os comando enquanto um teste lógico no inicio da sentença for verdadeiro.
  A repetição do WHILE não termina de forma automática. Desse modo, a condição de parada deverá ser ativada de dentro da sentença.

  Sintaxe:
while (teste_logico) do
begin
  { sentença }
end;
  Observe que um teste lógico é feito antes de entrarmos no código de tratamento do WHILE. Caso afirmativo, entra. Senão, sai e segue o programa.
  Vamos repetir o exemplo de escrever de 1 a 10, adaptado para o WHILE:
var i : integer;

begin
  i:=1;

  while (i <= 10) do
  begin
    writeln(i);
    i := i + 1;
  end;
end.
  O controle para se atingir a condição de parada é feito quando incrementamos o valor de i até chegar a 10.


4-REPEAT

  Igual ao WHILE, porém o teste logico é feito ao final da sentença e não no inicio. Ex:
var i : integer;

begin
  i:=1;

  repeat
    writeln(i);
    i := i + 1;
  until (i <= 11) { 11, porque se parar no 10, não imprime o valor 10 }
end.
  Obs: Não deve colocar begin e end, uma vez que repate seguido de until delimita o código.


/MARMSX/CURSOS/PASCAL