Metropole
Cursos
 
Aulas
Introdução aos algoritmos
Formas de representação de algoritmos
Tipos de dados
Expressões
Instruções primitivas
Controle de fluxo de execução: estrutura sequencial
Estruturas de decisão simples SE... FIM SE
Estruturas de decisão composta e de múltipla escolha
se... senão... fim se
escolha...caso
Estruturas de repetição – Repetição com variável de controle
Estruturas de repetição
enquanto... faça
repita...até
Estrutura de dados homogêneas - vetores e matrizes
Subalgoritmos: funções e procedimentos – Mecanismos de passagem de parâmetros
 
  voltar  Voltar . imprimir  Imprimir . topo  Topo  
 
Lógica de Programação e Algoritmos
Professores autores
Nélio Alessandro Azevedo Cacho
Keivilany Janielle de Lima Coelho
 

Aula 10 – Estruturas de repetição
enquanto... faça
repita...até

Na aula anterior, introduzimos os conceitos de estruturas de repetição. Você viu que, algumas vezes, nos algoritmos, há a necessidade de executar comandos em looping, de acordo com uma condição específica. Você conheceu a sintaxe da estrutura de repetição com variável de controle (o comando PARA) e construiu alguns algoritmos com essa estrutura. Nesta aula, encerraremos o estudo das estruturas de repetição, contemplando o comando ENQUANTO, que é utilizado em repetições que testam a condição no início da estrutura, e o comando REPITA, em que a condição é testada no final da estrutura. Nesta aula, você vai reconhecer a sintaxe e se tornará capaz de identificar quando utilizar esses comandos, a fim de construir algoritmos eficazes dentro das estruturas de repetição.

 
Objetivos
  Ao final desta aula, você será capaz de:
  • Definir a sintaxe para o comando ENQUANTO em estruturas de repetição com teste condicional no início.
  • Definir a sintaxe para o comando REPITA em estruturas de repetição com teste condicional no final.
  • Construir algoritmos completos utilizando essas estruturas.
 
Enquanto... faça – Teste condicional no início

Na aula anterior, realizamos o cálculo da média para 50 alunos de uma turma, utilizando a estrutura com variável de controle, com os comandos PARA...FAÇA. Vamos ver esse mesmo algoritmo de uma forma diferente:

 

ALGORITMO PARA CALCULAR A MÉDIA ARITMÉTICA ENTRE DUAS NOTAS PARA 50 ALUNOS DE UMA SALA

algoritmo "Média com Enquanto"
var
nota1, nota2, media : real //declaração das variáveis do algoritmo
contador : inteiro //declaração do contador
inicio
      enquanto contador < 5 faca //início da estrutura de repetição

        escreval ("Digite as notas do aluno ",contador,":")
        escreval ("Primeira nota:")
        leia (nota1)
        escreval ("Segunda nota:")                                                           
        leia (nota2)
        media <- (nota1+nota2)/2
        escreval ("O aluno ",contador," teve média igual a: ",media)
        contador <- contador + 1
Loop

      fimenquanto

fimalgoritmo
   

Veja que o algoritmo acima, utilizando o comando ENQUANTO, faz a mesma coisa que o algoritmo que vimos na aula anterior, com os comandos PARA...FAÇA.
No algoritmo da média, sabemos previamente a quantidade de repetições, que equivale ao número de alunos da turma. Por isso, esse algoritmo pode ser resolvido com qualquer uma das duas estruturas de repetição: o PARA ou o ENQUANTO.
É importante, porém, observar um detalhe.
Você sabe que o comando PARA define o valor de incremento do contador antes do início da execução. Essa definição não é feita na sintaxe do comando ENQUANTO. Por isso, é de extrema importância que você se lembre de incrementar o contador, antes de finalizar a estrutura.
Veja que antes do comando fimenquanto, temos a seguinte expressão:

Contador <- contador + 1

Você declarou, no início do algoritmo, a variável contador, do tipo inteiro, mas não atribuiu a ela valor algum. Sabemos que, quando não atribuímos valor a uma variável do tipo inteiro, o valor default assumido é 0. Portanto, o valor do contador, antes do início da execução da estrutura de repetição, é igual a 0.
Você viu, também, na aula 9 (Estruturas de Repetição –  repetição com variável de controle), que o valor de incremento não pode ser nulo e só pode ser negativo, se quisermos percorrer o laço na ordem inversa. Assumimos, dessa forma, que o valor de incremento é positivo e igual a 1 (sabemos que quando não definimos o valor de incremento, assume-se esse valor).
A cada repetição, o valor do contador deve ser incrementado em 1. É isso que o algoritmo faz quando chega à linha ‘contador <- contador + 1’. Veja, no Quadro 1, como ocorre esse incremento.

Execuções

Valor do contador

Expressão de incremento

Início

0

Contador <- contador + 1

Primeira execução

contador = 0

contador = 0 + 1

Segunda execução

contador = 1

contador = 1 + 1

Terceira execução

 contador = 2

contador = 2 + 1

Quarta execução

contador = 3

contador = 3 + 1

Quinta execução

contador = 4

contador = 4 + 1

Fim da execução

contador = 5

Contador atingiu valor limite

Quadro 1 - Incremento do contador ao longo das repetições

Veja, no Quadro 1, que, a cada repetição, o valor da expressão de incremento (contador + 1) é armazenado na variável contador. Dessa forma, a cada repetição, essa variável assume um novo valor. Ela é incrementada. Observe, também, que, quando o contador atinge o valor igual a 5, a execução é encerrada, pois definimos como condição de parada da repetição que o contador fosse menor que 5.
Outra diferença importante entre os comandos PARA e ENQUANTO é que o comando ENQUANTO pode ser utilizado em situações que não podem ser resolvidas com variável de controle. São situações em que não se sabe previamente a quantidade de repetições da estrutura. Veja:

 

algoritmo "enquanto sem incremento"
var
num:inteiro
inicio
   num <- 1
      enquanto num > 0 faca
         leia (num)
         escreval (num^2)
      fimenquanto
   escreval ("Você digitou um valor negativo")
fimalgoritmo

O algoritmo acima solicita que o usuário digite um número e fornece o valor do quadrado do número digitado, enquanto esse número for positivo. No momento em que o usuário digitar um valor negativo, a estrutura encerra e aparece a mensagem de que o número digitado é negativo.

O comando ENQUANTO testa uma condição e, enquanto essa condição for verdadeira, as instruções da estrutura de repetição são executadas. No momento em que a condição deixar de ser verdadeira, a estrutura encerrará.

 
Como não podemos prever qual será o momento em que o usuário irá digitar um número negativo, não há como saber previamente a quantidade de repetições.
 

O comando ENQUANTO é utilizado em estruturas de repetição em que não sabemos previamente a quantidade de repetições do comando ou grupo de comandos da estrutura.

 
Veja a sintaxe dessa estrutura:
PSEUDOCÓDIGO FLUXOGRAMA

           enquanto <condição> faca
                      <instruções>
           fimenquanto

fl1
 

Atenção: se houver alguma situação em que seja possível a condição ser sempre verdadeira, as instruções da estrutura executarão para sempre. É o que chamamos de loop infinito. É importante que você tenha o cuidado de evitar situações como essa.

 

Quer ver um exemplo de algoritmo que resulta em loop infinito? Retorne ao algoritmo da média no início desta aula e tente executá-lo no VisuAlg removendo a linha em que o contador é incrementado (contador <- contador + 1). Veja o que acontece.

Como o contador não está sendo incrementado, terá sempre o valor inicial (zero). Dessa forma, a condição (contador < 5) será sempre verdadeira, causando, portanto, a situação de loop infinito.
 
Atividade 1
 
  1. O que diferencia a estrutura de repetição com o comando PARA da estrutura que utiliza o comando ENQUANTO?
  2. O que é um loop infinito?
  3. Escreva um algoritmo que receba uma quantidade indeterminada de números positivos e diga quantos deles estão no intervalo de 0 a 25, quantos estão no intervalo de 26 a 50 e quantos são maiores que 50. O algoritmo deve parar quando o usuário digitar um número negativo.
  4. Escreva um algoritmo que receba um número diversas vezes e mostre o seu inverso (1/n). O algoritmo encerra quando o valor digitado é zero, exibindo uma mensagem de erro que diz que não se pode dividir por zero.
   
 
Repita...até – Teste condicional no finaL

Vamos ver, mais uma vez, o algoritmo da média:

 
 
algoritmo "media com repita...ate"
var
nota1, nota2, media : real //declaração das variáveis do algoritmo
contador : inteiro //declaração do contador
inicio
      contador <- 1 //atribuição de valor ao contador

      repita //início da estrutura de repetição
         escreval ("Digite as notas do aluno ",contador,":")
         escreval ("Primeira nota:")
         leia (nota1)
         escreval ("Segunda nota:")
         leia (nota2)
         media <- (nota1 + nota2)/2
         escreval ("O aluno ",contador," teve média igual a: ",media)
         contador <- contador + 1
      ate contador > 50

Estrutura REPITA...ATE
fimalgoritmo    
 

Na estrutura REPITA...ATÉ, a repetição continua enquanto a condição (contador > 50) for falsa. E cessa quando essa condição se tornar verdadeira.
Veja que o problema da média pôde ser resolvido com qualquer uma das estruturas de repetição, alterando-se somente a sintaxe.
Apesar disso, nem sempre um problema, em algoritmos, poderá ser solucionado com qualquer uma das estruturas. Sempre haverá uma das estruturas que se enquadre melhor na solução de determinado problema.
Ao contrário do ENQUANTO, o teste da condição verifica, na estrutura REPITA...ATÉ, se a condição é falsa. O looping termina quando a condição é verdadeira. Além disso, a estrutura REPITA...ATÉ sempre executa, pelo menos uma vez, os comandos, pois o teste da condição é realizado no final.

Essa estrutura pode ser utilizada, também, em menus. Veja o exemplo abaixo:

 

 

algoritmo "menu sorvetes"
var
op:caracter
inicio
      repita

          escreval ("Escolha um sabor de sorvete:")
          escreval ("1- Morango")
          escreval ("2- Abacaxi")
          escreval ("3- Chocolate")
          escreval ("4- Caramelo")
          escreval ("5- Salada de Frutas")
          leia (op)
      ate (op = "1") ou (op = "2") ou (op = "3")

ou (op = "4") ou (op = "5")
Estrutura REPITA...ATE

     
      escolha op
          caso "1"
              escreval ("Você escolheu Morango.")
          caso "2"
              escreval ("Você escolheu Abacaxi.")
          caso "3"
              escreval ("Você escolheu Chocolate.")
          caso "4"
              escreval ("Você escolheu Caramelo.")
          caso "5"
              escreval ("Você escolheu Salada de Frutas.")
      fimescolha
    fimalgoritmo

 

Veja que, no algoritmo acima, as instruções vão repetir até que o usuário digite uma opção válida. O comando REPITA, portanto, executa as instruções ATÉ que a opção digitada seja válida.
Veja a sintaxe dessa estrutura:

 

PSEUDOCÓDIGO FLUXOGRAMA

           repita
                      <instruções>
           ate <condição>

fl2

 

 

O comando REPITA executa as instruções até que a condição seja verdadeira. Ou seja, se a condição for falsa, o ciclo continua. Quando a condição é verdadeira, a estrutura encerra.

 

 

Atividade 2
 
  1. Escreva um algoritmo que receba vários números digitados pelo usuário, até que o usuário digite 0. Ao digitar 0, o algoritmo termina.
  2. Escreva um algoritmo que solicite ao usuário que digite o seu login e a sua senha. Caso o login e a senha estejam errados, pedir para digitar novamente. Caso estejam corretos, escrever: “Login efetuado com sucesso.” O login deve ser o seu nome e a senha deve ser a palavra “digital”.
   
 
Bom, concluímos por aqui, mas ainda temos mais duas aulas. Na próxima aula, você vai conhecer as estruturas de dados homogêneas e aprenderá a construir algoritmos com vetores e matrizes. Faça a autoavaliação com atenção e veja se precisa parar e refletir mais um pouco sobre o que estudamos até aqui, pois daqui pra frente vamos abordar assuntos diferentes e estamos nos aproximando do final da nossa disciplina. Bons estudos e boa sorte!
 
Resumo
 
Nesta aula, você viu os conceitos referentes às estruturas de repetição com teste da condição no início (que utilizam o comando ENQUANTO) e com teste da condição no final (que utilizam o comando REPITA). Você viu quando esses comandos são utilizados e conheceu a sintaxe e semântica de cada uma dessas estruturas. Estudou, também, a respeito do cuidado que devemos ter com loops infinitos, pois, caso a condição seja sempre verdadeira, há o risco do programa permanecer executando para sempre.
 
Autoavaliação
  1. Explique a sintaxe da estrutura ENQUANTO...FACA.
  2. Escreva um algoritmo que receba vários números inteiros positivos e diga se cada número é primo ou não. A estrutura encerra quando é digitado um valor negativo ou nulo. Lembre-se: um número é primo quando é divisível apenas por um e por ele mesmo.
  3. Escreva um algoritmo que receba números positivos e calcule a soma dos que são pares. A estrutura encerra quando o usuário digita um número negativo.
  4. Escolha a alternativa correta em cada questão a seguir.

Questão 1 – O comando utilizado em estruturas de repetição com variável de controle é:

  1. ESCOLHA
  2. PARA
  3. ENQUANTO

Questão 2 – O comando ENQUANTO...FACA é utilizado em repetições:

  1. Com teste no final
  2. Com loop infinito
  3. Com teste no início

Questão 3 – A diferença entre a estrutura PARA e a estrutura ENQUANTO é:

  1. Na estrutura PARA, conhecemos previamente o número de repetições, na estrutura ENQUANTO não conhecemos.
  2. A estrutura PARA é com teste condicional no início e a estrutura ENQUANTO sempre testa a condição no final.
  3. Não são diferentes.

Questão 4 – Na estrutura ENQUANTO...FACA:

  1. Nunca é utilizado um contador.
  2. É utilizado um contador quando se conhece o número de repetições. Este contador deve ser incrementado sempre, antes de encerrar a estrutura.
  3. Sempre são gerados laços infinitos, por isso é melhor não utilizar.

Questão 5 – Outra diferença entre a estrutura ENQUANTO...FACA e a estrutura PARA...FACA é:

  1. Não há diferenças.
  2. Uma testa a condição no início e a outra testa a condição no final.
  3. Em uma delas, o incremento é definido antes do início da execução. Na outra, essa definição é realizada ao final da execução.

  1. Escreva um algoritmo que receba o preço e a quantidade de 20 diferentes produtos e mostre o valor total da compra.
  2. Explique a sintaxe da estrutura REPITA...ATE.
  3. Escreva, com a estrutura REPITA...ATE, a tabuada de um número digitado pelo usuário.
  4. Em uma eleição presidencial, há três candidatos, representados pelos códigos “1”, “2” e “3”. O código “4” representa voto nulo e o código “5” representa voto em branco. Escreva um algoritmo que leia o voto do eleitor e calcule a quantidade de votos de cada candidato, bem como a quantidade de votos nulos e em branco e a quantidade total de votos. Ao digitar a opção “0”, o eleitor sai do programa e os valores são exibidos. Também é interessante exibir o candidato vencedor ou, em caso de a quantidade de votos nulos ou em branco ser maior que a metade do total de votos, a mensagem de eleição anulada.
  5. Escreva um algoritmo que apresente ao usuário as opções: (a) Saldo; (b) Depósito, (c) Saque e (x) Sair. O algoritmo deve repetir até que o usuário digite “x”. O valor inicial do saldo é R$ 0,00. Se o usuário escolher a opção depósito, deve digitar o valor do depósito e o saldo é incrementado. Caso o usuário escolha a opção saque, deve digitar o valor e exibir mensagem e saldo insuficiente (se não houver saldo) ou debitar o valor, alterando o saldo. Em ambas as opções, o novo saldo é exibido.
Referências

ALGORITMO: controle de Fluxo. DCA – UFRN – 2004. Disponível em: <http://www.dca.ufrn.br/~xamd/dca0800/Cap06.pdf>. Acesso em: 10 dez. 2009.

ASCENCIO, Ana F. Gomes; CAMPOS, Edilene A. V. de. Fundamentos de programação de computadores: algoritmos, Pascal e C/C++. São Paulo: Prentice Hall, 2002. 355p.

MESQUITA, Renato Cardoso. Apostila do curso de linguagem C. Minas Gerais: UFMG, 1998. Disponível em: <http://piano.dsi.uminho.pt/disciplinas/PLP/lingc/c_tutorial/ApostilaC_UFMG.pdf>. Acesso em: 10 dez. 2009.

SOUZA, Cláudio M de. VISUALG: editor e interpretador de algoritmos.  Disponível em: <http://apoioinformatica.inf.br/visualg/objetivos.htm>. Acesso em: 28 dez. 2009.

 
  voltar  Voltar . imprimir  Imprimir . topo  Topo