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.