Buscar

04 - Estruturas de Repetição

Prévia do material em texto

1 
 
Estruturas de Repetição 
 
4.1 Introdução 
 
Existem situações em que, para se obter a solução do problema, é necessário fazer com que um conjunto de 
instruções seja executado várias vezes. O objetivo aqui é apresentar e discutir estruturas (comandos) que 
possibilitem a execução de um conjunto de instruções várias vezes, com o programador escrevendo esse 
conjunto apenas uma vez. 
 
Suponha, por exemplo, que um determinado clube social tenha registrado a quantidade de latas de cerveja 
vendidas no último carnaval. Considerando que cada lata foi vendida a R$2,00, desejasse saber o total 
arrecadado no último carnaval, com a venda das latas de cerveja. Obviamente que, para esse problema, 
tem-se como entrada a quantidade de latas vendidas e deseja-se saber, como solução do problema (saída), 
qual o total arrecadado. Veja, a seguir, o respectivo algoritmo (algoritmo Clube-Social-1). 
 
Algoritmo Clube-Social-1 
 
Variáveis 
 Qtidade_Vendida : Inteiro 
 Valor-Arrecadado : Real 
 
Inicio 
 Leia Qtidade_Vendida 
 Valor Arrecadado  Qtidade_Vendida*2.0 
 Escreva Valor-Arrecadado 
Fim 
 
Veja que o problema apresentado, consiste em determinar-se c total arrecadado com a venda de latas de 
cerveja no último carnaval. Se desejarmos determinar o total arrecadado, em cada um dos últimos três 
carnavais, o algoritmo poderia ser.escrito conforme a seguir (algoritmo Clube-Social-2): 
 
Algoritmo Clube-Social-2 
 
Váriáveis 
 Qtidade_Vendida : Inteiro 
 Valor_Arrecadado : Real 
 
Inicio 
 Leia Qtidade_Vendida 
 Valor Arrecadado  Qtidade_Vendida*2.0 
 Escreva Valor_Arrecadado 
 Leia Qtidade_Vendida 
 Valor Arrecadado  Qtidade_Vendida*2.00 
 Escreva Valor_Arrecadado 
 Leia Qtidade_Vendida 
 Valor Arrecadado  Qtidade_Vendida*2.00 
 Escreva Valor Arrecadado 
Fim 
 
Observe no algoritmo Clube-Social-2 que a solução do problema é a mesma para cada ano. Assim, as 
2 
 
instruções para cada um dos anos, podem ser as mesmas. Observe também que, se quiséssemos 
determinar o total arrecadado em cada um dos últimos trinta anos, usando a mesma metodologia, teríamos 
que escrever trinta vezes o mesmo conjunto de instruções, o que obviamente se tornaria i mpraticável. 
 
Considerando que, para cada um dos casos, as instruções a serem executadas são as mesmas, é muito mais 
adequado que se escreva o conjunto de instruções apenas uma vez, e que se instrua o computador para 
que repita a execução das instruções um determinado número de vezes. 
 
4.2 Comando Enquanto-Faça 
 
Uma das formas de fazermos com que um conjunto de instruções seja executado várias vezes é utilizando o 
comando Enquanto-Faça. Para analisar sua forma e funcionamento, vamos considerar o seguinte problema: 
 
"Escrever um algoritmo que, a partir do saldo bancário da conta de um cliente, imprima a mensagem Conta 
Estourada, se o saldo for negativo, e a mensagem Conta Normal, se o saldo não for negativo". 
 
Pela definição do problema, podemos considerar que se tem como entradas o número da conta e o valor do 
saldo bancário do cliente e, como saída, uma mensagem dizendo se a conta tem ou não saldo negativo. O 
algoritmo para o problema pode ser escrito como segue (algoritmo Banco_1): 
 
Algoritmo Banco_1 
 
Variáveis 
 Saldo : Real 
 Numero_conta : Inteiro 
 
Inicio 
 Leia Numero_conta, Saldo 
 Se Saldo < 0 Então 
 Escreva Numero-conta, 'Conta Estourada' 
 Senão 
 Escreva Numero-conta, 'Conta Normal' 
 Fim Se 
Fim 
 
Veja que o algoritmo Banco_1 resolve o problema considerando a existência de uma única conta. Se 
quisermos considerar a existência de várias contas, o que é a situação mais comum, e para a qual faz muito 
mais sentido a utilização de uma máquina para a sua resolução, teremos que fazer com que as instruções, 
que resolvem o problema para a conta de um cliente, sejam repetidas várias vezes. Para isso, faz-se 
necessário um comando que, ao ser executado faça que determinado grupo de instruções seja repetido 
várias vezes. 
 
Conforme já colocado, o comando Enquanto-Faça tem essa função e sua forma geral pode ser escrita como 
segue. 
 
Enquanto expressão lógica Faça 
Conjunto de instruções 
Fim Enquanto 
 
Assim como a estrutura de seleção Se tem por base uma expressão lógica, também a estrutura de repetição 
3 
 
Enquanto-Faça apresenta uma expressão lógica. O Enquanto-Faça faz com que o conjunto de instruções 
colocado em seu interior seja repetido enquanto o valor da expressão lógica for verdadeiro. Sempre que o 
fluxo de execução chegar no Enquanto, será calculado o valor da expressão lógica. Se esta apresentar o 
valor verdadeiro, então o fluxo de execução passará para a execução das instruções internas ao Enquanto, 
na ordem em que aparecem. Ao encontrar o Fim Enquanto, o fluxo de execução retornará ao Enquanto e 
será novamente avaliada a expressão lógica. Se esta tiver o valor verdadeiro, as instruções internas ao 
Enquanto serão novamente executadas. Se, quando o fluxo de execução chegar ao Enquanto, a expressão 
lógica apresentar o valor falso, então o fluxo será transferido para a execução da primeira instrução após o 
Fim Enquanto. 
 
Com isto, podemos concluir que em algum momento do processo de repetição das instruções internas ao 
Enquanto será necessário que a expressão lógica assuma o valor falso, pois do contrário, o fluxo jamais sairá 
do Enquanto, e o conjunto de instruções será repetido infinitas vezes. 
 
Voltando ao nosso problema de análise do saldo bancário, se quisermos um algoritmo que faça a análise 
para dez contas, podemos escrever a solução conforme a apresentada pelo algoritmo Banco-2. 
 
Algoritmo Banco_2 
 
Variáveis 
 Saldo : Real 
 Numero_conta, Contador : Inteiro 
 
Inicio 
 Contador  0 
 Enquanto Contador < 10 Faça 
 Contador  Contador + 1 
 Leia Numero_conta, saldo 
 Se Saldo < 0 Então 
 Escreva Numero_conta, 'Conta Estourada' 
 Senão 
 Escreva Numero_conta, 'Conta Normal' 
 Fim Se 
 Fim Enquanto 
Fim 
 
Observe que, no algoritmo Banco_2, utilizamos a variável Contador, que inicialmente recebe o valor zero. 
Na primeira vez que o fluxo de execução chega ao Enquanto, a expressão lógica, Contador < 10 tem o valor 
verdadeiro. Assim, são executados todos os comandos internos ao Enquanto. Observe também que, no 
conjunto de comandos internos ao Enquanto, colocamos o comando 
 
Contador  Contador + 1 
 
o qual fará com que o conteúdo da variável Contador seja incrementado de uma unidade toda vez que for 
executado. Assim, a cada vez que for executado o conjunto de instruções que estiver dentro do Enquanto, 
Contador aumentará de uma unidade, até que chegue ao valor 10, quando então, ao retornar ao início do 
Enquanto, será verificado que a expressão lógica vale falso. Conforme seu funcionamento, se o valor da 
expressão lógica for falso, o fluxo de execução sairá automaticamente do Enquanto e passará para a 
execução da próxima instrução após o Fim Enquanto. 
 
No algoritmo Banco_2, todos os comandos colocados internamente ao comando Enquanto foram 
4 
 
deslocados em relação a coluna do Enquanto - Fim Enquanto. Conforme já vimos, esse processo denomina-
se identação e tem por objetivo facilitar a visualização e análise dos comandos que estão sendo repetidos. 
 
4.3 Repetição Controlada pelo Usuário 
 
Veja que o algoritmo Banco_2 resolve o problema para dez contas bancárias. Se quisermos processar 
duzentas contas, teremos que modificar o algoritmo, alterando a expressão lógica para Contador < 200. Os 
demais comandos ficariam exatamente iguais. Podemos evitar essa modificação escrevendoum algoritmo 
mais genérico, de forma que o usuário defina o número de vezes que deseja repetir o conjunto de 
instruções (nesse caso, o número de contas bancárias que deseja processar). O controle do número de 
repetições por parte do usuário só pode ser aplicado quando fizer sentido a intervenção do usuário. Esse 
controle, quando possível, pode ser feito das seguintes formas: 
a) Solicitação ao usuário do número de casos a processar; 
b) Uso de um valor finalizador; 
c) Solicitação de continuação a cada caso processado; 
d) Utilização de menus com opção de finalização. 
 
O algoritmo Banco_3 apresenta uma solução onde o usuário define o número de casos a processar. 
Observe que, antes de processar qualquer conta bancária, é solicitado para que o usuário entre com a 
quantidade de contas que deseja processar. Assim, enquanto o valor de Contador for menor que o valor 
informado pelo usuário (Quantcontas), o conjunto de instruções dentro do Enquanto será repetido. 
 
Algoritmo Banco_3 
 
Variáveis 
 Saldo, Soma : Real 
 Numero_conta, Contador, Quantcontas : Inteiro 
 
Inicio 
Contador  0 
Soma  0 
 Escreva 'Entre com a quantidade de contas: ' 
Leia Quantcontas 
 
Enquanto Contador < Quantcontas Faça 
Contador  Contador + 1 
Leia Numero_conta, Saldo 
Soma  Soma + Saldo 
Se Saldo < 0 Então 
Escreva Numero_conta, 'Conta Estourada' 
Senão 
Escreva Numero_conta, 'Conta Normal' 
Fim Se 
Fim Enquanto 
Escreva 'Soma dos saldos: ', Soma 
Fim 
 
O algoritmo Banco_3, além de analisar cada uma das contas, também calcula a soma dos saldos das contas. 
Para tanto, é utilizada a variável Soma, que inicialmente recebe o valor zero e que, a cada conta processada, 
acumula (acrescenta) o valor do saldo da conta. Isto acontece toda vez que for executado o comando: 
5 
 
 
Soma  Soma + Saldo 
 
Outra forma em que o usuário controla o número de casos a processar consiste na utilização de um valor 
finalizador para alguma variável de entrada. O valor finalizador deve ser um valor absurdo, ou seja, um valor 
que não faça sentido como dado de entrada. Por exemplo, se a variável de entrada for a idade de uma 
pessoa, pode-se perfeitamente utilizar qualquer valor negativo como valor finalizador. Não faz sentido que 
alguém tenha idade menor que zero. No algoritmo Banco_4 a seguir, o controle do número de contas a 
processar é feito através de um valor absurdo para o número da conta. 
 
Algoritmo Banco_4 
 
Variáveis 
 Saldo, Soma : Real 
 Numero_Conta : Inteiro 
 
Inicio 
 Soma  0 
Escreva 'Entre com numero da conta. Digite um valor negativo para terminar' 
Leia Numero_Conta 
 
Enquanto Numero_Conta >= 0 Faça 
Escreva 'Digite valor do saldo da conta', Numero-Conta 
Leia Saldo 
Soma  Soma + Saldo 
Se Saldo < 0 Então 
Escreva Numero_conta, 'Conta Estourada' 
Senão 
Escreva Numero_conta, 'Conta Normal' 
Fim Se 
 
Escreva 'Digite o numero da conta (valor negativo se quiser terminar)' 
Leia Numero-conta 
Fim Enquanto 
Escreva 'Soma dos saldos:', Soma 
Fim 
 
Pelo especificado no algoritmo Banco_4, antes de entrar no Enquanto é solicitado que o usuário entre com 
o número da conta. O algoritmo informa ao usuário para entrar com um número de conta menor que zero, 
caso queira encerrar o processamento das contas. Da mesma forma, após o processamento de cada conta e 
antes de voltar ao Enquanto, também é solicitado que o usuário entre com o número de nova conta, 
devendo entrar com número negativo caso queira encerrar. Observe que a colocação de um comando de 
entrada antes do Enquanto, para ler o número da conta, foi necessária em função de que a expressão lógica 
do Enquanto usa o valor do número de conta. O valor a ser usado como finalizador deve ser um valor 
absurdo, e do mesmo tipo da variável de entrada. 
 
O controle do número de vezes que se deseja repetir determinado conjunto de instruções, especialmente 
quando tem-se a repetição do processamento envolvendo pelo menos uma entrada, também pode ser feito 
fazendo-se com que, após o processamento da entrada, seja solicitado do usuário uma confirmação de 
continuação ou não. Dependendo do caso, especialmente em situações que envolvem a entrada de uma 
grande quantidade de dados, essa forma pode tornar-se cansativa. O algoritmo Banco_5 utiliza essa técnica. 
 
Algoritmo Banco_5 
 
Variáveis 
Saldo, Soma : Real 
Numero_conta : Inteiro 
Resposta : Literal 
6 
 
 
Inicio 
 
Soma  0 
Resposta  'Sim' 
Enquanto Resposta = 'Sim' Faça 
Leia Numero_conta, Saldo 
Soma  Soma + Saldo 
Se Saldo < 0 Então 
Escreva Numero-conta, 'Conta Estourada' 
Senão 
Escreva Numero-conta, 'Conta Normal' 
Fim Se 
Escreva 'Processar outra conta (Sim/Nao)?' 
Leia Resposta 
Fim Enquanto 
Escreva 'Soma dos saldos:', Soma 
Fim 
 
Observe, no algoritmo Banco_5, que a cada conta processada, e antes de retornar ao Enquanto, o algoritmo 
faz com que seja solicitado ao usuário que informe se deseja continuar ou não. A resposta fornecida pelo 
usuário será armazenada na variável Resposta. Ao encontrar o Fim Enquanto, o fluxo de execução retornará 
ao Enquanto e será calculado o valor da expressão lógica Resposta = 'Sim', o qual definirá se uma nova 
conta deve -ser processada ou se o processo de repetição será finalizado. 
 
O algoritmo Menu, apresentado a seguir, resolve o problema de efetuar uma operação aritmética 
envolvendo dois valores. Além dos dois valores, o usuário também define que operação aritmética deve ser 
realizada. Veja que o número de casos a processar está sob o controle do usuário. Quando o usuário 
escolher a opção 'F' para Operação, a expressão lógica do Enquanto terá o valor falso e o processo de 
repetição será encerrado. 
 
Algoritmo Menu 
 
Variáveis 
a, b, resultado : Real 
Chave : Lógico 
Operacao : Literal 
 
Inicio 
Chave  verdadeiro 
Enquanto chave Faça 
Escreva 'Entre com o primeiro valor :' 
Leia a 
Escreva 'Entre com o segundo valor :' 
Leia b 
Escreva 'Escolha uma das opções ' 
Escreva '+ Somar os dois valores' 
Escreva '- Subtrair o segundo valor do primeiro valor' 
Escreva '* Multiplicar os dois valores' 
Escreva '/ Dividir o primeiro valor pelo segundo valor' 
Escreva 'F' Para cancelar e finalizar' 
Leia Operacao 
Escolha Operacao 
'+': Resultado  a + b 
7 
 
Escreva 'A soma e:', Resultado 
'-': Resultado  a - b 
Escreva 'A diferença e:', Resultado 
 '*': Resultado  a * b 
Escreva 'O produto e:', Resultado 
'/': Resultado  a / b 
Escreva 'O quociente e:', Resultado 
'F': Chave  falso 
Senão 
Escreva 'Entrada inválida' 
Fim Escolha 
Fim Enquanto 
Fim 
 
Uma outra forma de fazermos com que um conjunto de instruções seja executado uma ou mais 
vezes, é usando o comando Repita. Sua forma geral pode ser colocada como: 
Repita 
Comando 1 
Comando 2 
 ... 
 Comando n 
Até expressão lógica 
Quando o fluxo de execução chegar ao Repita, automaticamente serão executados os comandos 
internos ao Repita (comandos 1 a n). Quando o fluxo de execução chegar no Até, será avaliada a 
expressão lógica. Se a expressão lógica valer falso, então o fluxo de execução retornará ao início do 
Repita e os comandos internos serão novamente executados. Quando o fluxo de execução chegar 
no Até e a expressão lógica apresentar o valor verdadeiro, então a execução sairá do Repita e 
passará para a primeira instrução imediatamente após o Até. 
 
Veja que, diferentemente do Enquanto, o comando Repita avalia a expressão lógica no final e, 
portanto, o conjunto de instruções a ser repetido é executado pelo menos uma vez. 
 
O algoritmo MelhorAluno utiliza o Repita para determinar o melhor aluno deuma turma de alunos. 
 
Algoritmo MelhorAluno 
 
Variáveis 
Nota, Max, Quant, Contador :Inteiro 
Nome, Melhor : Literal 
 
Inicio 
Escreva 'Entre com a quantidade de alunos' 
Leia Quant 
 Max  -1 
Contador  0 
Repita 
Escreva 'Entre com o nome do aluno' 
Leia Nome 
Repita 
Escreva 'Digite a nota do aluno (valor de 0 a 10) 
Leia Nota 
8 
 
Até (Nota >= 0) E (Nota <= 10) 
Se Nota > Max Então 
Max  Nota 
Melhor  Nome 
Fim Se 
 
Contador  Contador + 1 
Até Contador = Quant 
Escreva 'Melhor aluno: ', Melhor 
Fim 
 
No algoritmo MelhorAluno, a cada vez que for executado o conjunto de instruções internas ao 
primeiro comando Repita, um aluno é processado. Ou seja, é solicitado o nome e a nota do aluno. 
Cada nota de um aluno é comparada com o conteúdo da variável Max. Se o conteúdo de Nota for 
maior que Max, então conclui-se que essa nota é a maior entre as que já foram processadas e, 
portanto, o conteúdo de Max deve ser alterado para o valor dessa nota. Como o algoritmo se 
propõe a determinar também qual o nome do melhor aluno, então toda vez que for encontrada 
uma nota maior que o conteúdo de Max, o nome do aluno que obteve essa nota é salvo na variável 
Melhor. Veja que, a cada aluno processado, o conteúdo da variável Contador é incrementado de 
uma unidade. Dessa forma, em algum momento do processo de repetição, a expressão lógica 
Contador = Quant assumirá o valor verdadeiro, fazendo com que a repetição seja encerrada. 
 
Ainda no algoritmo Melhor Aluno, o segundo comando Repita faz com que o valor lido para nota do 
aluno esteja no intervalo de 0 a 10. Veja que esse Repita só será encerrado se a expressão (Nota >= 
0) E (Nota <= 10) tiver o valor verdadeiro. Sempre que essa expressão for avaliada e apresentar o 
valor falso, o fluxo de execução retornará ao respectivo Repita (segundo comando repita) e será 
solicitado que o usuário digite novamente a nota. O segundo comando Repita só será encerrado 
quando o usuário entrar com um valor válido para nota. 
 
4.5 Comando Para-Faça 
Em muitas situações, o processo de repetição de um grupo de comandos é controlado por algum tipo de 
contador. Ou seja, uma variável que funciona como um contador vai assumindo os valores 1, 2, 3 e assim 
por diante, até que atinja determinado valor, quando, então, a repetição deve ser encerrada. 
 
Assim, considerando esses casos, podemos definir um comando de repetição mais simples, que faça com 
que uma determinada variável vá assumindo automaticamente valores seqüenciais, e que quando atingir 
determinado valor, o processo de repetição seja encerrado. Denominaremos esse comando de Para-Faça 
e sua forma geral pode ser escrita como: 
 
Para Variavel_controle de Vinicial Até Vfinal , Passo Vp Faça 
Bloco de comandos a serem repetidos 
Fim Para 
 
Onde: Variável_controle representa uma variável que controlará o processo de repetição. V inicial consiste no 
valor inicial que deverá ser assumido pela variável de controle. Similarmente, V final constitui-se no valor final 
da variável de controle e, Vp representa qual o incremento que deve ser sofrido pela variável de controle, a 
cada vez que forem executados os comandos internos ao Para-Faça. Consideraremos que os valores inicial e 
9 
 
final, bem como o valor do passo, devem ser do mesmo tipo da variável de controle. Assumiremos também 
que, quando o incremento da variável de controle for 1, este não necessita ser especificado. O algoritmo 
Balanco, usando um comando Para-Faça, determina qual o total arrecadado por um clube ao final de um 
ano. 
 
Algoritmo Balanco 
 
Variáveis 
Mes : Inteiro 
Soma, Receita, Despesa : Real 
 
Inicio 
Soma  0 
Para Mes de 1 Até 12 Faça 
Escreva 'digite receita e despesa do mês', Mes 
Leia Receita, Despesa 
Soma  Soma + Receita - Despesa 
Fim Para 
Escreva 'Total arrecadado durante o ano :', Soma 
Fim 
No algoritmo Balanco, a variável de controle do Para-Faça é Mes. A variável Mes, conforme especifica o 
comando Para-Faça, assume os valores inteiros que vão de 1 até 12. Para cada valor de Mes, as instruções 
internas ao Para-Faça são executadas. Veja que, como não foi especificado o valor do incremento, estamos 
assumindo que o mesmo vale 1. 
Vamos assumir também que, ao chegar no Para-Faça a primeira vez, será calculado automaticamente o 
número de vezes que as instruções internas ao Para-Faça serão executadas. A determinação do número de 
repetições é feita usando-se os valores inicial e final, combinados com o valor do incremento para a variável 
de controle. Com isso, estamos assumindo também que não será possível abandonar a repetição das 
instruções, antes que o número de repetições seja alcançado. Assim, o comando Para-Faça só pode ser 
utilizado quando soubermos o número de vezes que se quer repetir o grupo de comandos.

Continue navegando