13.2.1Seqüência
Seqüência finita de instruções são agrupamentos de comandos, onde cada comando é executado um após o outro e sem desvios. Em Pascal a seqüência é delimitada pelas palavras reservadas BEGIN no início e END no final e seus comando são separados pelo delimitador “;” (ponto e vírgula).
13.2.2Comandos condicionais 13.2.2.1IF
O comando if é usado para executar um segmento de código condicionalmente.
IF condição THEN
{ comandos que serão executados se a condição for TRUE}
ELSE
{ comandos que serão executados se a condição for FALSE}
Durante uma execução, o Pascal começa por avaliar a condição da cláusula IF. Esta condição deve resultar num valor do tipo Booleano, embora possa tomar uma variedade de formas - ela pode ser uma expressão de qualquer combinação de operadores lógicos ou relacionais, ou simplesmente uma variável BOOLEAN.
Se a condição for TRUE, o comando ou comandos localizados entre o IF e ELSE são executados e a execução pula a cláusula ELSE. Alternativamente, se a expressão for FALSE, a execução é desviada diretamente para o comando ou comandos localizados após a cláusula ELSE.
Observe a estrutura deste comando IF. Ambas as cláusulas, IF e ELSE, são seguidas de blocos BEGIN/END, que delimitam grupos de comandos. O formato geral desta estrutura é:
IF condição THEN
BEGIN
{comandos da cláusula IF}
END
ELSE
BEGIN
{comandos da cláusula ELSE}
END;
Devemos tomar cuidado para não esquecer dos marcadores BEGIN e END nos comandos compostos de várias estruturas IF. Além disso, não devemos colocar um ponto-e-virgula entre o END e o ELSE numa estrutura IF. O Pascal interpretará essa marcação incorreta como o fim do comando IF e a cláusula ELSE, a seguir, resultará num erro em tempo de compilação.
Levando em conta que a cláusula ELSE é opcional, a forma mais simples da estrutura IF é a seguinte:
IF condição THEN
{comando ou comandos executados se (if) a condição for TRUE (verdadeira)}
Neste caso, o programa executa o comando ou comandos localizados após a cláusula IF somente se a condição for verdadeira. Se ela for falsa, o comando IF não terá nenhuma ação.
As estruturas IF podem estar aninhadas. Em outras palavras, toda uma estrutura de decisão, completa com as cláusulas IF e ELSE, pode aparecer dentro de uma cláusula IF ou ELSE de uma outra estrutura. O aninhamento de estruturas IF pode resultar em seqüências de decisão complexas e poderosas.
13.2.2.2 Comando de Seleção múltipla: CASE
Quando se deseja testar uma variável ou uma expressão em relação a diversos valores usamos o comando de seleção múltipla.
Como a estrutura IF, o comando CASE divide uma sequência de possiveis ações em seções de código individuais. Para a execução de um determinado comando CASE, somente uma dessas seções será selecionada para execução. A seleção está baseada numa série de testes de comparação, sendo todos executados sobre um valor desejado.
A forma geral da estrutura CASE é a seguinte:
CASE seleção OF
ValordeCaso1:
{comando ou comandos executados se a
seleção se corresponder com ValordeCaso1 }
ValordeCaso2:
{comando ou comandos executados se a seleção se corresponder com ValordeCaso2 }
. . .
ELSE
{comando ou comandos executados se nenhum dos casos anteriores produzir uma correspondência }
END;
A estrutura de decisão CASE consiste nos seguintes elementos:
– Uma cláusula CASE OF, que fornece a expressão de seleção desejada
– Uma seqüência de ValoresdeCaso a ser comparada com a seleção, cada qual seguida de um ou mais comandos, que serão executados se a seleção se corresponder com o ValordeCaso
– Um comando ELSE opcional, que fornece um comando ou grupo de comandos a serem executados somente se não tiver ocorrido nenhuma correspondência com os ValoresdeCaso anteriores
– Um marcador END, que identifica o fim da estrutura CASE.
Para executar a decisão expressa nessa estrutura, o Pascal começa por avaliar a expressão de seleção na cláusula CASE OF. Esse valor deve pertencer a um tipo ordinal que tenha uma faixa entre -32.768 e 32.767. Até aqui, estudamos cinco tipos de dados que correspondem a este critério: CHAR, BOOLEAN, BYTE, SHORTINT e INTEGER.
A seleção se torna o alvo das comparaçóes com todos os ValoresdeCaso subseqüentes. Numa execução, o Pascal avalia cada comparaçã, seleciona o primeiro ValordeCaso que se corresponde com a seleção e executa o comando ou comandos localizados entre esse ValordeCaso e o próximo. Não será executado mais nenhum outro comando.
Se nenhuma das comparações com os ValoresdeCaso produzir uma correspondência com a seleção, será executada a cláusula ELSE. ELSE é uma cláusula opcional no comando CASE; se ELSE não estiver presente, e se nenhum ValordeCaso for selecionado, o comando CASE não resultará em nenhuma ação.
O valor de seleção na cláusula CASE OF pode aparecer como uma variável ou expressão, desde que o resultado final seja um valor ordinal.
Exemplo
Program ExemploCase;
Uses Crt;
Var Ch: char;
begin
Ch := readkey;
case Ch of
'A'..'Z', 'a'..'z': WriteLn('Letra');
'0'..'9': WriteLn('Dígito');
'+', '-', '*', '/': WriteLn('Operador');
#13: Writeln(‘Enter’);
#27: Writeln(‘Esc’);
‘ ’: Writeln(‘Espaço’);
else
WriteLn('Caractere Especial');
end;
end.
13.2.3 Comandos de Repetição
Os comandos de repetição são caracterizados por permitir que uma seqüência de comandos seja executada um número repetido de vezes.
13.2.3.1 For
O loop FOR é, talvez, a estrutura de repetição mais familiar e comumente usada. e é utilizado para executar uma seqüência de comandos repetidamente e com um número conhecido de vezes.
A representação geral da sintaxe da estrutra é:
FOR VardeControle := Valorlnicial TO ValorFinal DO comando;
Se o bloco do loop possui comandos múltiplos, o formato geral será o seguinte:
FOR VardeControle := Valorlnicial TO ValorFinal DO
BEGIN
(comandos executados para cada iteração do loop}
END;
O comando FOR identifica uma variável de controle (VardeControle) para o loop, e indica a faixa de valores (Valorlnicial TO [até] ValorFinal) que a variável receberá e o Valorlnicial e o ValorFinal devem ser compatíveis com esse tipo. Aqui está um esboço da execução do loop:
1. No início da execução, a variável de controle recebe o valor do Valorlnicial, e a primeira iteração é executada.
2. Antes de cada iteração subseqüente, a variável de controle recebe o próximo valor da faixa de Valorlnicial .. ValorFinal.
3. O loop termina após a iteração correspondente ao ValorFinal.
Num loop FOR que use a cláusula TO, o valor ordinal do Valorlnicial deve ser menor que o valor ordinal do ValorFinal, caso contrário o loop não terá ação nenhuma. Alternativamente, podemos usar a palavra reservada DOWNTO para projetar um loop FOR que seja decrementado dentro de uma faixa ordinal:
FOR VardeControle := Valorlnicial DOWNTO ValorFinal DO comando;
Neste caso, o valor de Valorlnicial deve ser maior que o de ValorFinal. Antes de cada iteração subseqüente, a variável de controle recebe o próximo valor mais baixo da faixa.
A variável de controle do loop FOR possui um status especial. Nenhum comando dentro do loop deve tentar modificar o valor dessa variável; se fizer isso, estará interferindo com o processo normal de contagem que o Pascal dirige automaticamente durante a repetição, podendo causar resultados imprevisíveis. Entretanto, um comando que esteja dentro do loop pode acessar o valor da variável de contagem para qualquer propósito.
Não devemos utilizar uma declaração de variável global para definir a variável de controle. Cada variável de controle num determinado programa deve ser declarada dentro da rotina que realmente contém o loop. Esta prática evita qualquer possibilidade de interferência entre diferentes variáveis de controle definidas num determinado programa. Embora a variável de controle de um loop FOR pertença tipicamente a um dos tipos inteiros, o Pascal Ihe permite realmente utilizar outros tipos ordinais para controlar o loop, incluindo o tipo CHAR e o enumerado.
Exemplo:
Program ExemploFor;
Uses Crt;
Var i, j: integer;
begin
for i:= 1 to 10 do
begin
writeln(‘Tabuada do ’,i);
for j:= 1 to 10 do
begin
writeln(i, ‘ x ’, j , ‘ = ’, i*j);
end;
end;
end.
Diferentemente do loop FOR, os loops WHILE e REPEAT UNTIL dependem de uma condição expressa para determinar a duração do processo de repetição. Existem também algumas diferenças importantes entre estes dois tipos de loops:
Num loop WHILE, colocamos a condição no início do loop, e as iterações continuam enquanto a condição seja TRUE (verdadeira). Tendo em vista que a condição é avaliada sempre antes de cada iteração, um loop WHILE resulta em nenhuma iteração se a condição for FALSE (falsa) logo no principio.
Num loop REPEAT UNTIL, a condição vai para o fim do loop, e o processo de repetição continua até que a condição se torne TRUE (verdadeira). Tendo em vista que a condição é avaliada após cada iteração, um loop REPEAT UNTIL sempre executa pelo menos uma iteração.
Esta variedade de escolhas nos permite expressar os loops numa forma que se adapte a uma aplicação em particular.
A sintaxe do loop WHILE é:
WHILE condição DO comando;
Se o bloco do loop possuir comandos múltiplos, a forma geral é a seguinte:
WHILE condição DO
BEGIN
{comandos que serão executados uma vez em cada iteração do loop}
END;
A condição é uma expressão que o Turbo Pascal pode avaliar como TRUE (verdadeira) ou FALSE (falsa). A repetição continua enquanto a condição for TRUE. Normalmente, em algum ponto, a ação dentro do loop altera a condição para FALSE e o loop termina.
A Estrutura do Loop REPEAT UNTIL é:
REPEAT
{comandos que seráo executados uma vez
a cada iteração do loop}
UNTIL condição
Esta estrutura de loop sempre realiza uma iteração antes da condição ser avaliada pela primeira vez, e continua as suas iterações até que a condição se tome TRUE; a repetição termina quando a condição se tornar TRUE. Os comandos múltiplos dentro de um loop REPEAT UNTIL não necessitam de marcadores BEGIN e END. As palavras reservadas REPEAT e UNTIL servem como delimitadores para os comandos dentro do loop.
Alguns programadores são cautelosos no uso dg estruturas de loop que executam automaticamente a primeira iteração antes de avaliar a condição de controle. Esses programadores podem preferir utilizar os loops WHILE, ao invés dos loops REPEAT UNTIL, na maioria dos programas de repetição. Fora isso, o REPEAT UNTIL é vantajoso, desde que reservemos o seu uso para situações nas quais sempre desejemos que seja executada pelo menos uma iteração.
Exemplo
Program ExemploWhile
uses crt;
Var op: char;
procedure imprimir;
begin
...
end;
procedure excluir;
begin
...
end;
Begin
op := 0;
while op <> ‘9’ do
begin
clrscr;
write(‘1 - Imprimir’);
write(‘2 - Excluir’);
write(‘9 - Sair’);
case op of
‘1’: imprimir;
‘2’: excluir;
end;
end;
end.
Program ExemploRepeat
uses crt;
Var op: char;
procedure imprimir;
begin
...
end;
procedure excluir;
begin
...
end;
Begin
repeat
clrscr;
write(‘1 - Imprimir’);
write(‘2 - Excluir’);
write(‘9 - Sair’);
case op of
‘1’: imprimir;
‘2’: excluir;
end;
until op = ‘9’
end.
|