Ana səhifə

Universidade Regional Integrada do Alto Uruguai e das Missões Campus Frederico Westphalen Departamento de Engenharias e Ciência da Computação Algoritmos e Estrutura de Dados I informática I


Yüklə 0.52 Mb.
səhifə18/23
tarix25.06.2016
ölçüsü0.52 Mb.
1   ...   15   16   17   18   19   20   21   22   23

13.2Estruturas de Controle

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.

13.2.3.2 While e Repeat Until


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.


1   ...   15   16   17   18   19   20   21   22   23


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©atelim.com 2016
rəhbərliyinə müraciət