Aula 7 - Controle de Fluxo: Enquanto e Repita

Estruturas de controle de fluxo de execução condicional, Enquanto e Repita, estruturas de decisão, utilizadas para alterar o fluxo/resultado de um algoritmo.

1 - Estruturas de Repetição

São muito comuns, as situações em que se deseja repetir um determinado trecho de um programa, um certo número de vezes. Por exemplo, pode-se citar o caso de um algoritmo que calcula a soma dos números impares entre 500 e 1000, ou então, um algoritmo que escreva os números maiores que 0, enquanto a sua soma não ultrapasse 1000.

As estruturas de repetição são muitas vezes chamadas de Laços ou também de Loops. A classificação das estruturas de repetição é feito de acordo com o conhecimento prévio, do número de vezes que o conjunto de comandos será executado. Assim ,os Laços se dividem em:

• Laços Contados: quando se conhece previamente, quantas vezes o comando composto no interior da construção será executado;

• Laços Condicionais: quando não se conhece de antemão, o número de vezes que o conjunto de comandos no interior do laço será repetido, pelo fato do mesmo estar amarrado a uma condição, sujeita à modificação pelas instruções do interior do laço.

Todo algoritmo que possui um ou mais de seus passos, repetidos um determinado número de vezes, denomina-se algoritmo com repetição.

Com a utilização de estruturas de repetição para a elaboração de algoritmos, torna-se necessário o uso de dois tipos de variáveis, para a resolução de diversos tipos de problemas: variáveis contadoras e variáveis acumuladoras.

Uma variável contadora, é uma variável que recebe um valor inicial, geralmente 0 (zero), antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor constante, geralmente 1, conforme o exemplo abaixo:

...
cont := 0
estrutura_de_repetição
...
cont := cont + 1
...
fim_da_estrutura_de_repetição
...

Uma variável acumuladora, é uma variável que recebe um valor inicial, geralmente 0 (zero), antes do início de uma estrutura de repetição, e é incrementada no interior da estrutura de um valor variável, geralmente a variável usada na estrutura de controle, conforme o exemplo abaixo:

...
soma := 0
estrutura_de_repetição_com_variável_x
...
soma := soma + x
...
fim_da_estrutura_de_repetição
...

Laços Condicionais:

Laços condicionais são aqueles, cujo conjunto de comandos em seu interior, é executado até que uma determinada condição seja satisfeita. Ao contrário do que acontece nos laços contados, nos laços condicionais não se sabe de antemão, quantas vezes o corpo do laço será executado.

As construções que implementam laços condicionais mais comuns, nas linguagens de programação modernas, são:

Enquanto - laço condicional com teste no início
Repita - laço condicional com teste no final

Nos laços condicionais a variável que é testada, tanto no início quanto no final do laço, deve sempre estar associada a um comando que a atualize no interior do laço. Caso isso não ocorra, o programa ficará repetindo indefinidamente este laço, gerando uma situação conhecida como: “laço/loop infinito”.

Escute essa aula: Estruturas de Repetição

2 - Laços Condicionais com Teste no Início ( Enquanto ... faça )

Caracteriza-se por uma estrutura, que efetua um teste lógico no início de um laço, verificando se é permitido, ou não, executar o conjunto de comandos no interior do laço.

Observe na figura como a estrutura Enquanto é representada.

A sintaxe no VisuAlg é mostrada a seguir:

enquanto condição faca

Comando_Unico_ou_Composto

Fimenquanto

Sua semântica é a seguinte: ao início da construção Enquanto, a condição é testada. Se seu resultado for falso, então, o comando composto no seu interior não é executado e a execução prossegue normalmente pela instrução seguinte à palavra-reservada, fimenquanto, que identifica o final da construção.

Se a condição for verdadeira, o Comando_Unico_ou_Composto é executado, e ao seu término, retorna-se ao teste da condição. Assim, o processo acima será repetido enquanto a condição testada for verdadeira. Quando esta for falsa, o fluxo de execução prossegue normalmente pela instrução seguinte à palavra-reservada, fimenquanto, que identifica o final da construção.

Uma vez dentro do corpo do laço, a execução somente abandonará o mesmo quando a condição for falsa. O usuário deste tipo de construção deve estar atento à necessidade, de que em algum momento a condição deverá ser avaliada como falsa. Caso contrário, o programa permanecerá indefinidamente no interior do laço, (laço infinito). Esta condição é chamada de condição de parada.

Neste tipo de laço condicional, a variável a ser testada deve possuir um valor associado antes da construção do laço.

O algoritmo que escreve os números maiores que 0, enquanto a sua soma não ultrapasse 1000, é um exemplo deste tipo de laço:

Exemplo 1:

Observe e execute o seguinte exemplo no VisuAlg.

algoritmo "soma_1000"

var

contador:inteiro

inicio

contador:=0
enquanto contador <=1000 faca

escreval (contador)
contador:=contador+1

fimenquanto
escreval ("Terminei de contar")

fimalgoritmo

Observe a saída do algoritmo:

Veja que o algoritmo irá imprimir os valores de 0 a 1000 na tela. Execute o algoritmo utilizando o “relógio”, executar com timer, e observe o loop acontecendo dentro da estrutura do enquanto.

Escute essa aula: Laços Condicionais com Teste no Início ( Enquanto ... faça )

Menus:

A estrutura de repetição enquanto é também utilizada para a repetição de menus em conjunto com o SE.

Observe e execute o seguinte exemplo no VisuAlg:

algoritmo "opcoes_de_jogos_ENQUANTO"

var

opcao: inteiro

inicio

opcao:=1 // inicializando a variavel
enquanto opcao<>0 faca

escreval ("") // para pular uma linha
escreval ("Simulador Pokemon!")
escreval ("Um Pikachu selvagem apareceu !!!")
escreval ("O que você irá fazer?")
escreval ("1 - Atirar Pokebola!")
escreval ("2 - Batalhar!")
escreval ("3 - Fugir!")
escreval ("0 - SAIR") // condicao de saida
leia (opcao)
escolha opcao
caso 0

escreval ("Saindo do simulador Pokemon!")

caso 1

escreval (" O Pikachu foi capturado!!! ")

caso 2

escreval (" Pikachu foi derrotado, não pode capturar!")

caso 3

escreval (" Pikachu fugiu!!! ")

outrocaso

escreval (" Opção invalida ")

fimescolha

fimenquanto

fimalgoritmo

Saída do algoritmo:

Observe que o algoritmo ficará mostrando o menu e suas opções até que a condição de parada/saída seja atendida, que para este caso é digitar a opção “0 – SAIR”.

Caso seja digitado um valor que não está contemplado no menu e nos casos, o menu irá se apresentar novamente, ao invés, de apenas apresentar o texto “Opção inválida” e terminar a execução.

Escute essa aula: Laços Condicionais com Teste no Início ( Enquanto ... faça ) Menus

3 - Laços Condicionais com Teste no Final ( Repita ... até )

Caracteriza-se por uma estrutura que efetua um teste lógico no final de um laço, verificando se é permitido ou não executar novamente o conjunto de comandos no interior do mesmo.

A sintaxe no VisuAlg é mostrada a seguir:

repita

sequência-de-comandos

ate expressão-lógica

Observe na imagem como a estrutura Repita ... até que é representada no diagrama de blocos:

Seu funcionamento é bastante parecido ao da construção Enquanto. O comando é executado uma vez. A seguir, a condição é testada: se ela for falsa, a sequência-de-comandos é executada novamente e este processo é repetido até que a condição seja verdadeira, quando então a execução prossegue pelo comando imediatamente seguinte ao final da construção.

Esta construção difere da construção Enquanto, pelo fato de o comando composto ser executado uma ou mais vezes (pelo menos uma vez), ao passo que na construção Enquanto o comando composto é executado zero ou mais vezes (possivelmente nenhuma). Isto acontece porque na construção Repita o teste é feito no final da construção, ao contrário do que acontece na construção Enquanto, onde o teste da condição é efetuado no início da mesma.

A construção Repita também difere da construção Enquanto no que se refere à inicialização da variável, visto que na construção Repita a variável pode ser inicializada ou lida dentro do laço.

Observe e execute o seguinte exemplo no VisuAlg:

Exemplo 1:

algoritmo "Números de 1 a 10 (com repita)"

var j: inteiro

inicio

j := 1
repita

escreva (j)
j := j + 1

ate j > 10

fimalgoritmo

Execute o algoritmo utilizando o executar com timer e veja como o algoritmo se mantem no laço/loop do repita, e só sai quando a variável j for maior do que 10 e este valor já estiver impresso na tela.

Escute essa aula: Laços Condicionais com Teste no Final ( Repita ... até )

Exemplo 2:

O algoritmo que lê um número do teclado indeterminadas vezes e escreve o valor e o seu quadrado, até que seja digitado um valor par:

algoritmo "repita_ate_par"

var

num : inteiro

inicio

repita

escreval ("digite um numero")
leia (num)
escreval ("Seu valor é: ", num, " - seu quadrado é: ", num*num)

ate (num mod 2 = 0)

fimalgoritmo

Veja a saída do algoritmo:

Observe que neste exemplo, o algoritmo irá mostrar o valor digitado e o valor de seu quadrado, até que seja digitado um valor par, como a verificação é feita apenas no final do laço, o valor e o quadrado deste número par será mostrado na tela, e então o algoritmo irá finalizar o laço do repita, pois sua condição de saída foi cumprida.

Escute essa aula: Laços Condicionais com Teste no Final ( Repita ... até ) 2

Links Úteis

Canal: Pietro Martins De Oliveira

Canal: JovemProgramadorBR

Site: Manual do VisuAlg 3.0

Referências

  • CORMEN, Thomas H. et al. Algoritmos: teoria e prática. Editora Campus, v. 2, p. 296, 2002.
  • FARRER, Harry; BECKER, Christiano Gonçalves. Algoritmos estruturados: programação estruturada de computadores. Rio de Janeiro: Guanabara, 2000.
  • NETO, Benedito; PEREIRA, Diego; FERNANDES, Sabrina. Apostila de Algoritmo - CEP - Centro De Educação Profissional "Tacredo Neves".
  • Manual do VisuAlg 3.0