Pode-se dizer que é possível construir a maioria dos algoritmos utilizando qualquer um dos três tipos de repetição, sendo possível substituir um tipo de repetição por outro, mantendo a mesma funcionalidade, com poucas mudanças no algoritmo. A única exceção é que não se pode utilizar uma repetição do tipo variável de controle para os casos em que o número de iterações é desconhecido.
Estruturas de Contr
ole
54
Atenção: Quando se diz que “o número de iterações é desconhe- cido” não se está fazendo referência a um valor inserido pelo usuário, pois quando o usuário informa um valor, então o algoritmo sabe quan- tas vezes terá que executar o bloco de comandos. Não saber quantas vezes o loop será executado significa que o número de iterações só será descoberto após o início da execução do loop. Por exemplo, ima- gine que estamos criando um algoritmo que leia arquivos gravados no disco e escreva na tela o conteúdo lido. A cada linha lida de um arquivo, o programa escreve uma linha na tela – isso exige uma estru- tura de looping. Não sabemos, porém, quantas linhas de informação existirão em cada arquivo a ser processado, pode ser 1 linha ou 500, e esta informação só será conhecida quando chegarmos ao fim do arquivo. Este é um caso típico em que a repetição com variável de controle não pode ser utilizada.
Para os casos em que não sabemos quantas vezes iremos executar o bloco de comandos, devem-se escrever loops com Pré e Pós-Teste. Porém, há um alerta: o algoritmo deve ser bem
testado para garantir que não ocorrerá um erro de repetição infinita, o chamado loop infinito
(também conhecido como loop eterno), que é uma condição em que a expressão responsável
pela saída do loop nunca é atendida.
Veja um exemplo de loop infinito em uma repetição do tipo Pré-Teste:
01 02 03 04 {Exemplo de loop infinito} Algoritmo ExemploLoopInfinito Variáveis contador : Inteiro; Início contador := 1; Enquanto(contador <= 5) Faça
Escreva(“Olá. Neste momento o contador vale ” + contador); Fim_Enquanto
Fim
Perceba que no exemplo acima o contador não é incrementado, o que faz com que seu valor seja sempre 1 e, consequentemente, que o bloco de comandos seja executado infinitamente.
Pela sua estrutura, a repetição baseada em variável de controle é menos propensa a este tipo de erro, pois as regras de execução são definidas em uma única linha e o controle das repe- tições é feito pela própria estrutura.
Na prática, a decisão sobre qual tipo de repetição utilizar vai depender em muito das pre- ferências pessoais de quem está criando o algoritmo. Conforme vamos avançando no conteúdo, vai ficando evidente que é extremamente difícil duas pessoas escreverem um algoritmo exa- tamente igual, pois além da lógica de resolução de problemas ser diferente, existem múltiplas opções de comandos para realizar uma mesma implementação.
55
Estruturas de Contr
ole
Assim como acontece com as estruturas de seleção, as estruturas de repetição também podem trabalhar de forma aninhada, ou seja, é possível inserir uma estrutura de repetição den- tro de outra em um mesmo algoritmo.
Veja um exemplo: 01 02 03 04 05 06 07 08 09 10 11
{Exemplo de loop aninhado} Algoritmo ExemploLoopAninhado Variáveis
numLido, resultado, contador : Inteiro; Início
Escreva(“Digite um número para ver sua tabuada ou 0 para sair:”);
Leia(numLido);
Enquanto(numLido > 0) Faça
Para contador De 1 Até 10 Passo 1 Faça resultado := contador * numLido;
Escreva(contador + “ x ” + numLido + “ = ” + resultado); Fim_Para
Escreva(“Digite um número para ver sua tabuada ou 0 para sair:”);
Leia(numLido); Fim_Enquanto
Escreva(“Fim do programa.”); Fim
No exemplo acima, temos uma repetição com variável de controle inserida dentro de uma repetição com Pré-Teste. Note que quando uma estrutura é inserida dentro de outra, ela
deve iniciar e encerrar dentro desta. No nosso exemplo, seria incorreto colocar o Fim_Para
depois do Fim_Enquanto, uma vez que o Para foi declarado dentro do Enquanto.
O correto é que uma estrutura de repetição ou seleção sempre encerre no mesmo nível em que foi declarada. Veja:
Incorreto Estrutura 1 Estrutura 2 Correto Estrutura 1 Estrutura 2
Estruturas de Contr
ole
56
Representado em fluxograma, o algoritmo anterior ficaria da seguinte forma:
contador, 1, 10, 1 Início numLido > 0 S N Fim <contador> x <numLido> = <resultado> resultado := contador * numLido
Digite um número para ver sua tabuada
ou 0 para sair: numLido
Digite um número para ver sua tabuada
ou 0 para sair: numLido
Na resolução de problemas mais complexos, é comum termos o aninhamento (ou encadeamento) de estruturas de repetição e estrutu- ras de seleção em um mesmo algoritmo.
57
Estruturas de Contr
ole
Atividades
1) Crie um algoritmo que leia dois números informados pelo usuá-
rio e, em seguida, exiba na tela uma mensagem dizendo se o maior deles é o primeiro, o segundo, ou se são iguais.
Represente seu algoritmo em pseudocódigo, fluxograma e dia- grama de Chapin. Também aplique o teste de mesa.
2) Crie um algoritmo que realize as seguintes atividades:
a. Solicite ao usuário três valores inteiros.
b. Multiplique o menor valor lido pelo maior e some o resultado
com o valor do meio.
c. Imprima na tela o resultado.
Seu algoritmo deverá ser representado em pseudocódigo e fluxograma. É necessário realizar o teste de mesa para garantir o funcionamento do algoritmo.
3) Desenvolva um algoritmo em pseudocódigo para aplicar um
percentual de desconto sobre o valor de uma compra infor- mado pelo usuário. Os percentuais de desconto são:
• 15% para compras acima de R$ 500,00;
• 10% para compras entre R$ 200,00 e R$ 499,99;
• 5% para compras abaixo de R$ 200,00.
O algoritmo deverá mandar para a impressora as seguintes informações:
• Valor antes do desconto;
• Valor do desconto;
• Valor a ser pago.
4) Crie um algoritmo (pseudocódigo e fluxograma) que leia um
valor inteiro para X e escreva na tela X3. O algoritmo deve con-
tinuar pedindo o valor de X até que o usuário informe 0 (zero), então o programa encerra.
O algoritmo deve ser criado utilizando a estrutura de repetição com Pré-Teste.
Estruturas de Contr
ole
58
5) Desenvolva um algoritmo (pseudocódigo e fluxograma) capaz
de apresentar na tela o fatorial de um número inteiro informado pelo usuário.
O algoritmo deve ser criado utilizando a estrutura de repetição com Pré-Teste.
6) Crie um algoritmo (pseudocódigo e fluxograma) que solicite
ao usuário um nome e um número inteiro, que representará a quantidade de vezes que o nome informado deverá ser escrito na tela.
O algoritmo deve ser criado utilizando a estrutura de repetição com Pós-Teste.
7) Construa um algoritmo (pseudocódigo e fluxograma) que seja
capaz de calcular o valor total de uma compra, somando o preço de cada um dos produtos.
O algoritmo deverá solicitar o preço de cada produto e ir somando ao montante total, e deve entender que os produ- tos acabaram quando o preço informado for 0 (zero), então mostrará o número de itens comprados e o total da compra, encerrando a execução.
Caso seja informado algum valor menor do que zero, o pro- grama deve desconsiderá-lo e exibir uma mensagem de erro solicitando que o valor correto do produto seja digitado. O algoritmo deve ser criado utilizando a estrutura de repetição com Pós-Teste.
8) Crie um algoritmo (pseudocódigo e fluxograma) que realize as
seguintes atividades:
a. Pergunte a quantidade de alunos da turma.
b. Solicite ao usuário o nome de cada um dos X alunos.
c. Envie cada nome lido para a impressora.
O algoritmo deve ser criado utilizando a estrutura de repetição variável de controle.
9) Desenvolva um algoritmo (pseudocódigo e fluxograma) que
solicite ao usuário a entrada de 5 valores inteiros e, a cada valor lido, aplique a seguinte regra: se o número lido for maior que 10, subtrai 5 e escreve o resultado na tela, se não soma 2 e manda o resultado para a impressora.
O algoritmo deve ser criado utilizando-se a estrutura de repeti- ção variável de controle.
59
Estruturas de Dados Homogêneas