Estruturas de REPETIÇÃO CASE ADMINISTRAÇÃO DE CONTAS BANCÁRIAS • Existem ocasiões em que é necessário efetuar a repetição de um trecho de programa um determinado número de vezes. • Neste caso, poderá ser criado um looping que efetue o processamento de um determinado trecho, tantas vezes quantas forem necessárias. Os loopings também são chamados de laços de repetição. “Escrever um algoritmo que, a partir do saldo bancário da conta de um cliente, mostre 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 código para resolução do problema pode ser escrito como segue: Algoritmo banco_1 Var saldo: real numeroconta : Inteiro Inicio Escreva ("Digite o numero da conta : ") leia(numeroconta) Escreva ("Digite o saldo") leia (saldo) Se saldo < 0 entao Escreva ("Conta de numero : " ,numeroconta, " Conta Estourada") senao Escreva ("Conta de numero : " ,numeroconta, " Conta Normal ") fimse Fimalgoritmo • Veja que o algoritmo Banco1 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 maquina 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. Enquanto < expressão lógica > Faça conjunto de instruções Fimenquanto Algoritmo banco2 Var saldo: real numeroconta : Inteiro contador:inteiro Inicio contador <- 0 Enquanto contador < 10 faca contador <- contador + 1 Escreva ("Digite o numero da conta : ") leia(numeroconta) Escreva ("Digite o saldo") leia (saldo) Se saldo < 0 entao Escreval ("Conta de numero : " ,numeroconta, " Conta Estourada") senao Escreval ("Conta de numero : " ,numeroconta, " Conta Normal ") fimse fimenquanto Fimalgoritmo Observe que, no algoritmo banco2, 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 grupo 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 a vez que for executado. Assim, cada vez que for executado o grupo 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 inicio do Enquanto, será verificado que a expressão logica vale falso. Conforme seu funcionamento, se o valor da expressão 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 banco2, todos os comandos colocados internamente ao comando Enquanto foram deslocados em relação a coluna do Enquanto – Fim Enquanto. \conforme já vimos, esse processo chamasse identação e tem por objetivo facilitar a visualização e análise dos comandos que estão sendo repetidos. REPETIÇÃO CONTROLADA PELO USUÁRIO Veja que o algoritmo banco2 resolve o problema para dez contas bancárias. Se quisermos colocar duzentas contas, teremos que modificar o algoritmo para Contador < 200. os demais comandos ficariam exatamente iguais. Podemos evitar essa modificação escrevendo um algoritmo mais genérico, de forma que o usuário defina o número de vezes que deseja repetir o grupo de instruções, nesse caso o número de contas bancarias que deseja processar. O controle do numero de repetição por parte do usuário só pode ser aplicado quando fizer sentido a sua intervenção. Este controle pode ser feito da seguinte forma: 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 passo processado d) Utilização de menus com opção de finalização. • O algoritmo banco3 apresenta uma solução onde o usuário define o numero 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 a processar. Assim enquanto o valor de contador for menor que o valor informado pelo usuário (qtdcontas), o grupo de instruções do enquanto será repetido. • O algoritmo banco3, além de analisar cada uma das contas, tambem 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. Isso acontece toda vez que é executado o comando : soma ← soma + saldo • Uma outra forma em que o usuário controla o numero 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 alguém ter idade menor que zero. No algoritmo banco4 a seguir, o controle do número de contas a processar, é feito através de um valor absurdo para o número de conta. • O controle da repetição também pode ser feito fazendo – se com que, após o processamento da entrada, seja solicitada ao 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 -se tornar-se cansativa. Exemplo Desenvolver um sistema que multiplique qualquer numero digitado por 3. A cada final do loop o usuário deve responder se deseja continuar .