Laços de Repetição


Existem estruturas que, para obter a solução de um problema, é necessário fazer com que um grupo de instruções seja executado várias vezes.
Considerando que em alguns casos onde as instruções são as mesmas, é muito mais adequado que se escreva o grupo de instruções apenas uma vez, e o instrua para que o computador o repita. Para isso, existem os comandos For... do, While.... do... repeat... until.
Um contador é uma variável a ser incrementada a cada repetição, ou seja, à cada repetição acrescentamos 1 na variável, até o valor de sentinela, o que fará a saída da repetição.

While... do

Uma das formas de instruções seja executado várias vezes é o comando while...do. Assim como o comando IF apresenta uma expressão lógica, o comando while também. Ele faz com que o grupo de instruções colocadas em seu interior. Seja repetido enquanto o valor da expressão lógica for verdadeiro. Ao encontrar o “end;” do bloco de comandos, o fluxo de execussão retornará ao enqaunto e será novamente avsaliada a expressão lógica. Se estiver com valor verdadeiro, será executada novamente e assim sucessivamente até ter valor falso, então, o fluxo será transferido para a execussão da primeira instrução após o fim.

Neste algoritmo, o usuario "compra" um produto de R$2,50, até que seu dinheiro acabe. Ele informa a quantia que tem, e o algoritmo informa quantos é possivel comprar, e se a pessoa ficará devendo.

Program torrandoagrana ;

Var

 dinheiro, quantidadedeprodutos : real;

 Begin
 quantidadedeprodutos := 0;
 writeln ('Quanto dinheiro você tem?');
 readln (dinheiro);
 while (dinheiro > 0) do
 begin
 quantidadedeprodutos := quantidadedeprodutos + 1;
 dinheiro := (dinheiro - 2.50);
 end;
 writeln ('comprou ', quantidadedeprodutos, ' produto(s) de R$ 2,50');
 if (dinheiro = 0) then
    writeln ('sobraram R$', dinheiro)
 else
    writeln ('Ficou devendo. Tsc, tsc...');

 End.



Repeat

Outra forma de fazermos com que um grupo de instruções seja excutado mais uma vez, é usando o laço repeat. Pode ser colocado como

Repeat
<comandos>
Until (expressão lógica);

Quando o fluxo de execussão chega ao repeat. Automáticamente serão exeecutadps os comandos internos do repeat, e quando chegar no untill, será avaliado se a expressão é falsa, então o fluxo retornará ao repita. Quando a expressão lógica for verdadeira, o fluxo passará para a primeira isntrução após o until.

No exemplo, terá uma festa, e a faixa etaria é de 18 anos. se a pessoa for menor do que isso, e não for amigo do dono, não entrará... O algoritmo se repetirá até que a pessoa minta a idade, ou seja amiga do dono, ou seja, até que a idade seja 18 ou mais.

Program festa;

 var
 idade: integer;
 resposta: string;

 Begin

repeat
 writeln ('festa. qual sua idade');

 readln (idade);
   if (idade < 18) then
    begin
     writeln ('não pode entrar na festa');
     writeln ('você é amigo do dono?');
     readln (resposta);
     if (resposta = 'sim') and (idade <> 18) then
          writeln ('pode entrar')
       else
           writeln ('faça 18 ou minta') ;
      
    end
   else
      writeln ('Pode entrar.');
     
          
     until (idade >= 18) or (resposta = 'sim');
End.

Laço for... do

O comando for, diferentemente dos comandos de repetição repeat e while, permite que uma sequência de comandos seja executada um número definido de vezes A variável usada para contador já recebe um valor inicial e é incrementada pelo comando. 

Neste exemplo, le-se um livro, página por página, e diz em que página está. 

Program Lendolivro;

Var

passandopelapagina, paginas, contador : integer;

 Begin

 passandopelapagina := 0;
 readln (paginas);

 for contador := 1 to paginas do
 begin
 passandopelapagina := passandopelapagina +1;
 writeln ('lendo pagina numero: ', passandopelapagina);
 end;
 
 End.

Nenhum comentário:

Postar um comentário