Curso de Pascal
Constantes, Goto, Break e Continue e Exit


Você está em: MarMSX >> Cursos >> Pascal
  Constantes

  A constante é uma espécie de variável que armazena um valor fixo, ou seja, o valor da constante não pode ser alterado.
  Sintaxe:
const <nome> : <tipo_dado> = <valor>;

  Exemplo:
const PI : real = 3.14159;

begin
  writeln('Valor da constante PI: ', PI);
end.

  Declarando mais de uma constante:
const PI : real = 3.14159;
const nome : string[6] = "MarMSX";

begin
  writeln('Valor da constante PI: ', PI);
  writeln('Valor da constante nome: ', nome);
end.


  Goto

  A função goto tem como por objetivo desviar a execução de um programa para um determinado rótulo de identificação (label).
  Primeiramente, devem-se declarar os rótulos a serem utilizados na área de declaração de variáveis e constantes. Para isso, utilize a palavra reservada "label".
  Sintaxe:
label <rotulo_1>, <rotulo_2>, ..., <rotulo_n>;

  Uma vez declarado o rótulo, devemos escrevê-lo na linha para a qual o programa deverá ser desviado. Para isso, escreva o nome do rótulo seguido de dois pontos.
  Por fim, pode-se incluir o comando goto em um determinado trecho do código, chamando o rótulo declarado.
  Exemplo:
label desv;
var i : integer;

begin
  i := 1;

desv:
  write(i, ' ');

  if (i<5) then
  begin
    i := i + 1;
    goto desv;
  end;

end.
  Saída:
  1 2 3 4 5

  Quando o programa encontra a instrução "goto desv", ele desvia direto para a linha onde se localiza o rótulo "desv :".
...

desv:  <--------------+
  write(i, ' ');      |
                      |
  if (i<5) then       |
  begin               |
    i := i + 1;       |
    goto desv; -------+
  end;

end.


  Break e continue

  As cláusulas break e continue servem para interromper um laço FOR, WHILE e DO..WHILE. No caso do break, ele interrompe o laço e o abandona. Já o continue, interrompe a execução do laço em um determinado ponto, passando para o próximo valor do laço.
  Exemplo do uso do break:
var i : integer;

begin

  for i:=1 to 10 do
  begin
    write(i, ' ');

    if (i=5) then
      break;
  end;

end.
  Saída:
  1 2 3 4 5

  Quando o valor da variável "i" atinge o valor 5, a instrução break é acionada fazendo com que o laço seja interrompido.

  Exemplo com o continue:
var i : integer;

begin

  for i:=1 to 10 do
  begin
    if (i=5) then
      continue;

    write(i, ' ');
  end;

end.
  Saída:
  1 2 3 4 6 7 8 9 10

  Quando o valor da variável "i" atinge o valor 5, a instrução continue é acionada, fazendo com que o restante do código do laço FOR seja ignorado, passando para a próxima iteração.

  Infelizmente o Turbo Pascal 3 não oferece essas duas excelentes cláusulas que auxiliam muito na programação. Entretanto, podemos simulá-las utilizando o goto.
  Vamos ver como podemos simular o break no MSX:
label break;
var i : integer;

begin

  for i:=1 to 10 do
  begin
    write(i, ' ');

    if (i=5) then
      goto break;
  end;
break :
end.
  Saída:
  1 2 3 4 5

  Agora o continue no MSX:
label continue;
var i : integer;

begin

  for i:=1 to 10 do
  begin
  continue:
    if (i=5) then
    begin
      i := i + 1;
      goto continue;
    end;

    write(i, ' ');
  end;

end.
  Saída:
  1 2 3 4 6 7 8 9 10 11

  Essa solução traz um efeito colateral: o laço for irá fazer 10 repetições mesmo se você modificar o valor de "i". Dessa forma, a solução mais segura é isolar o trecho do código logo após o teste do continue.
var i : integer;

begin

  for i:=1 to 10 do
  begin
    if (i<>5) then
      write(i, ' ');
  end;

end.
  Saída:
  1 2 3 4 6 7 8 9 10


  Exit

  O comando "exit" abandona uma sub-rotina (procedimento ou função) e retorna imediatamente à função chamadora.

  Exemplo:
var i : integer;

procedure escreve(i : integer);
begin
  if (i=4) then 
    exit;

  write(i, ' ');
end;

begin
  for i:=1 to 10 do
    escreve(i);
end.
  Saída:
  1 2 3 5 6 7 8 9 10

  No exemplo anterior, quando o valor passado para o procedimento "escreve" for igual a 4, ele será abandonado pelo comando "exit" e não executará o comando de escrita na tela.

  Este comando é ideal para testar valores limites antes de executar uma sub-rotina. Caso o valor passado esteja fora dos limites, a sub-rotina será abandonada. Exemplo:
procedure imprime_raiz(n : real);
begin
  if (n < 0) then
  begin
    writeln('Erro. Não existe raiz de número negativo.');
    exit;
  end;

  writeln(sqrt(n):3:2);
end;

begin
  imprime_raiz(9);
  imprime_raiz(-1);
end.
  Saída:
  3.00
  Erro. Não existe raiz de número negativo.



<< Anterior Pascal Próxima >>