V
Sumário
Aula 4 – Estruturas de Repetição ............................................................................................ 52 4.1 Contexto ................................................................................................................................ 52 4.2 Para...faça .............................................................................................................................. 53 4.3 Enquanto ............................................................................................................................... 54 4.4 Repita .................................................................................................................................... 55 4.5 Resolvendo o “problema base” ............................................................................................. 56 4.6 Atividades propostas para a aula 4 ........................................................................................ 60
52
Aula 4 – Estruturas de Repetição Objetivos Compreender o uso das estruturas de repetição no processo de criação de algoritmos. Resolver algoritmos que incluem o uso de estruturas de repetição e as estruturas já estudadas.
4.1 Contexto
Imagine as seguintes situações: a) Uma professora precisa corrigir as avaliações de uma turma e verificar se eles foram aprovados em sua disciplina. Ela precisa repetir esta ação n vezes. Ou seja, se existirem 30 alunos nesta turma, ela repetirá 30 vezes a ação de corrigir as atividades.
b) Para cada dia de trabalho você olha para o céu, antes de sair de casa, e verifica se vai chover. Se for chover, você coloca o guarda-chuva na bolsa. Observe que, se você trabalhar 20 dias por mês, você repetirá 20 vezes a ação de verificar se vai chover, não é verdade? Pode ser que não chova todas as vezes que você verificar, ou seja, não será todo dia que você colocará o guarda-chuva na bolsa, mas todos os dias você verificará se irá chover.
Onde queremos chegar?
Novamente, se desenvolvemos algoritmos em uma linguagem em que o computador entenda, para automatizar alguma tarefa do dia a dia ou resolver algum problema para nós humanos, não podemos esperar que estes algoritmos realizem apenas uma atividade em cada vez que ele for executado, não é mesmo?! Em todos algoritmos implementados até agora, sempre foi possível resolvê-los com uma sequência única de instruções e todos eram executados apenas uma única vez. No momento de verificar se um aluno foi aprovado, o nosso código estava implementado para fazer a verificação de apenas um aluno, certo? E se quiséssemos verificar para 30 alunos? E se quiséssemos verificar enquanto existissem alunos para serem verificados? Teríamos que fechar e executar o algoritmo novamente? Teríamos
53
que repetir o bloco de instruções inúmeras vezes? Esta não é a opção mais viável. Queremos que na mesma execução de algoritmo seja possível verificar a aprovação de quantos alunos existirem ou quantos alunos quisermos verificar! As Estruturas de Repetição são fundamentais para que seja programas que consigam tratar situações que envolvem repetição.
possível construirmos
Existem, basicamente, 3 (três) tipos de instruções de repetição. São elas : Para...faça Enquanto...faça Repita...até
Nas linguagens de programação existentes, conforme as suas sintaxes, as estruturas de repetição, assim como as outras estruturas, podem ser escritas de uma outra forma. Você tem que verificar no manual de cada linguagem de programação, para saber como usar ou escrever estas instruções. Além disso, no momento de implementar estas instruções no seu algoritmo, os acentos devem ser ignorados! Você deve usar: para...faca, enquanto...faca, repita...ate.
4.2 Para...faça Sintaxe para o para...faca:
Na estrutura para..faca, a <variável de controle> é inicializada com <valor inicial> e no início de cada iteração, seu valor é comparado com <valor final>. Se o valor da <variável de controle> for menor ou igual ao <valor final>, a <lista de comandos> é executada e após ser executado o último comando da lista, a <variável de controle> é incrementada.
54
Isto se repete até que o valor da <variável de controle> seja maior que o <valor final>, quando então é executado o comando imediatamente após a palavra <fimpara>. A instrução <passo> é opcional e será útil quando o <incremento> do laço de repetição for diferente de 1.
A estrutura para...faca deve ser utilizada quando você sabe o número exato de vezes que o bloco de comandos deve ser repetido. O número de repetições pode estar armazenado em uma constante ou em uma variável.
4.3 Enquanto Sintaxe para o enquanto...faca:
Na estrutura enquanto...faca, a <expressão lógica ou relacional> é avaliada e, se ela for verdadeira, a <lista de comandos> é executada. Ou seja, a <lista de comandos> será repetida enquanto a <expressão lógica ou relacionado> for verdadeira (true), pois quando ela for falsa, a execução do algoritmo vai para a próxima instrução que esteja após a palavra <fimenquanto> Exemplos de expressões relacionais: Enquanto (idade<18) faca Enquanto (opção= “continuar”) faca Enquanto (i >=6) faca
Exemplos de expressões lógicas Enquanto ((nota>=6) e (frequência>=75)) faca Enquanto ((opcao="c") ou (opção=”C”)) faca Enquanto nao(opcao="s") faca 55
Em todos os casos acima, as variáveis de controle devem ser alteradas em algum momento e em alguma instrução que esteja dentro do enquanto...fimenquanto. Caso contrário, o algoritmo entra em um loop infinito e nunca termina!
4.4 Repita Sintaxe para o repita...ate:
Na estrutura de repetição repita...ate, a <lista de comandos> é executada até que a <expressão lógica ou relacional> seja verdadeira. Ou seja, enquanto a <expressão lógica ou relacional> não for alcançada, enquanto ela for falsa, a <lista de comandos> será repetida. Quando a <expressão lógica ou relacional> for verdadeira, então a execução do algoritmo sai da estrutura de repetição e executa a próxima instrução que estiver após a palavra ate. Normalmente, existem uma ou mais variáveis que compõem a <expressão lógica ou relacional> que será testada ao final de cada iteração. Essas variáveis podem ser inicializadas antes do início do laço e terão seus valores modificados dentro do mesmo. Esta modificação acontece após um cálculo ou após a digitação de um valor pelo usuário. Desta forma, quando essas variáveis assumirem os valores que tornam a <expressão lógica ou relacional> verdadeira, o laço é terminado e o algoritmo segue a sua execução com as instruções que aparecerem após o mesmo.
Observe que o teste de saída do enquanto...faca é feito no início. Já o teste de saída do repita...ate é feito no fim de suas respectivas estruturas. Isso significa que a <lista de comandos> na estrutura repita...ate será executada pelo menos uma vez. O que pode não acontecer na estrutura enquanto...faca se, logo no primeiro teste, a <expressão lógica ou relacional> for atendida.
56
4.5 Resolvendo o “problema base” Voltemos ao nosso problema base: “aprovação de um aluno”. Utilizando apenas a estrutura sequencial foi possível ler o nome e a nota de um aluno. Com o uso da estrutura condicional foi possível verificar/testar se o aluno seria aprovado ou não, mediante um critério. Agora, queremos verificar se n alunos serão aprovados ou reprovados.
Primeiro, vamos pensar sobre qual estrutura de repetição deve ser utilizada.
a) Suponha que desejamos verificar a aprovação dos 5 alunos de uma turma. Desta forma, sabemos, a priori, que o número de vezes que a lista de comandos deve ser repetida será 5. Podemos, neste caso, usar a estrutura para...faca, conforme pode ser observado no código abaixo.
O código abaixo é o mesmo utilizado para demonstrar a resolução do problema base com o uso da estrutura condicional se...entao...senao. Ele foi modificado para ser repetido através da estrutura para...faca. Alterações feitas no código original, que só calculava a aprovação de um aluno: Alteração nos comentários que explicam o que o algoritmo faz. Declaração da variável de controle i. Inclusão da estrutura para...faca. Todo o código que precisa ser repetido deve ficar entre o para...faca e o fimpara.
57
b) Suponha que desejamos verificar a aprovação dos n alunos de uma turma, mas pelo menos um aluno deve ser verificado. Desta forma, não sabemos, a priori, quantas vezes as instruções serão repetidas. Podemos, neste caso, usar a estrutura repita..até, conforme pode ser observado no código abaixo.
O código abaixo é o mesmo utilizado para demonstrar a resolução do problema base com o uso da estrutura condicional se...entao...senao. Ele foi modificado para ser repetido através da estrutura repita...ate.
58
Alterações feitas no código original, que só calculava a aprovação de um aluno: Alteração nos comentários que explicam o que o algoritmo faz. Inclusão da variável de opcao. Inclusão da estrutura repita...ate. Todo o código que precisa ser repetido deve ficar entre o repita e o ate.
c) Finalmente, suponha que desejamos verificar a aprovação dos n alunos de uma turma, mas não existe um critério de que ao menos um aluno seja verificado. Desta forma, não sabemos, a priori, quantas vezes as instruções serão repetidas. Podemos, neste caso, usar a estrutura enquanto..faca, conforme pode ser observado no código abaixo.
59
Observe algo muito importante: a expressão de condição do enquanto pode envolver uma ou mais variáveis (no caso acima envolve apenas a variável opção). O valor anterior destas variáveis decidirá se o laço será iniciado ou não. Uma vez dentro do laço, estas variáveis que formam a condição do enquanto devem sofrer alterações em seus valores. Caso contrário, o algoritmo entrará em um loop infinito e ficará executando até que você feche o VisuALG.
60
4.6 Atividades propostas para a aula 4
1. Elabore um programa para achar todos os números ímpares entre 10 e 1000. 2. Faça um programa que leia as variáveis C e N, respectivamente código e número de horas trabalhadas de um operário. Calcule o salário sabendo-se que ele ganha R$ 10,00 por hora. Quando o número de horas exceder a 50, calcule o excesso de pagamento armazenando-o na variável E, caso contrário zerar tal variável. A hora excedente de trabalho vale R$ 20,00. No final do processamento imprimir o salário total e o salário excedente. O programa só deve parar de rodar quando o usuário responder "S" na seguinte pergunta, "Deseja encerrar o programa?". 3. Escreva um programa que calcule e exiba a média da nota dos alunos de uma turma em uma prova. O número de alunos é desconhecido. Os dados de um aluno são: número de matrícula e a sua nota na prova em questão. 4. Este programa deve apresentar um menu em tela com a relação dos candidatos e opção para sair. A cada voto, conta-se um ponto para o candidato. Cada vez que o eleitor digitar uma opção errada, deve anular o voto e contar um para votos nulos. Após todos terem votado, o programa deve apresentar em tela qual dos candidatos foi o vencedor e o total de votos nulos. 5. Leia para N pessoas quaisquer as seguintes informações: a. Idade, Peso, Sexo. b. Este programa deve fornecer como saída: i. A média dos pesos dos homens ii. A média da idade das mulheres iii. Quantas mulheres acima de 25 anos iv. Total de pessoas.
61
62