Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estrutura de Repetição Repita...Até (pseudocódigo) APRESENTAÇÃO A estrutura de repetição repita...até é utilizada em algoritmos (programas) que necessitem que determinado trecho de código seja executado no mínimo uma vez. Essa estrutura define que um bloco de comandos será executado e que, ao final dele, será realizado um teste (condição). Se o resultado do teste for verdadeiro, a repetição termina; caso contrário, o bloco é repetido. Nesta Unidade de Aprendizagem, estudaremos a construção de pseudocódigos com repetições construídas com a estrutura repita...até. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Identificar problemas que precisem de repetição (laços) para construção da solução algorítmica. • Construir pseudocódigos que utilizem a estrutura de repetição repita...até.• Resolver problemas através de sua especificação com algoritmos.• DESAFIO Muitos procedimentos que realizamos precisam ser repetidos para cada elemento de um conjunto de objetos/dados/informações. Por exemplo, na Serra Gaúcha, na época da colheita da uva (que ocorre normalmente entre os meses de janeiro e março), os produtores de uva colhem a fruta, armazenam em caixas e entregam nas vinícolas para a produção de vinhos. Na vinícola, a cada caminhão carregado que chega, é realizado o seguinte processo: a uva é pesada e calcula-se o valor a ser pago ao produtor multiplicando-se o total em quilogramas que foi entregue pelo valor do quilo da uva do dia. Assim, uma vinícola precisa de um programa que, ao ser executado, solicite o valor do quilo da uva do dia, leia a quantidade de quilos que o produtor entregou e informe o valor a ser pago ao produtor. Ao final do dia, a vinícola irá digitar o valor 0 (zero) para o peso, finalizando as atividades, e o programa deverá informar quantos produtores foram atendidos. O pseudocódigo a seguir apresenta uma possível solução para esse problema utilizando o comando repita...até para implementação do laço de repetição. algoritmo "uvas" var quilo, peso, valor, conta :numerico inicio escreval("Digite o valor de um quilo de uva") leia(quilo) conta <- 0 repita escreval("Digite o peso das uvas:") leia(peso) valor <-quilo*peso escreval("Pagar ao produtor: ",valor) conta <- conta + 1 ate peso = 0 escreval("Produtores atendidos: ", conta-1) fimalgoritmo Agora é sua vez! A auxiliar financeira de uma loja precisa calcular os descontos concedidos nas compras dos clientes. Para compras com valores superiores a R$ 500,00, a gerência autoriza o desconto de 5% no valor da compra; para valores superiores a R$ 1.000,00, a gerência autoriza o desconto de 10%. Ao final do dia, a auxiliar financeira precisa informar quantos clientes receberam descontos e qual o valor total em descontos que foram concedidos. Para auxiliar seu trabalho, ela deseja que seja construído um programa que realize esse processo. Você deve construir um algoritmo em pseudocódigo que leia o valor de cada compra, um por vez (o programa termina quando for digitado o valor 0 [zero] para a compra). Quando for maior que R$ 1.000,00, que conceda o desconto de 10%; se for maior que R$ 500,00 (e menor que R$ 1.000,00), conceda o desconto de 5% e mostre o valor do desconto. O programa também deve contar para quantos clientes foram concedidos os descontos, além de realizar o somatório dos descontos concedidos, mostrando ao final essas duas informações. Para a implementação do laço de repetição, você deve utilizar a estrutura repita...até. INFOGRÁFICO Trechos de códigos em algoritmos são constituídos por comandos de entrada e saída de dados, comandos de decisão e de repetição. O foco desta Unidade é a construção de pseudocódigos que utilizem o comando repita...até. CONTEÚDO DO LIVRO A estrutura de repetição repita...até permite a construção de laços. Conheça um pouco mais sobre a estrutura lendo o conteúdo das páginas 141 e 142 do seguinte livro: EDELWEISS, N.; LIVI, M.A.C. Algoritmos e programação com exemplos em Pascal e C - Vol. 23. Série Livros Didáticos Informática UFRGS. Porto Alegre: Bookman, 2014. Boa leitura. 23 s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s algoritmos e programação com exemplos em Pascal e C nina edelweiss maria aparecida castro livi E22a Edelweiss, Nina. Algoritmos e programação com exemplos em Pascal e C [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014. Editado também como livro impresso em 2014. ISBN 978-85-8260-190-7 1. Informática. 2. Algoritmos – Programação. I. Livi, Maria Aparecida Castro. II. Título. CDU 004.421 as autoras Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni- versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge- nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais e internacionais. Participou de diversos projetos de pesquisa financiados por agências de fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e desenvolvimento de software. Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro- fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial quanto a distância. Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052 Edelweiss_Iniciais_eletronica.indd ii 14/05/14 16:51 Capítulo 5 Estruturas de Repetição 139 ler(mais_um) enquanto mais_um ≠ 'N' faça início ler(lim_sup) para i de 1 incr 1 até lim_sup faça escrever(i) ler(mais_um) fim 5.4 comando de repetição condicional repita/até por avaliação posterior de condição O comando de repetição condicional por avaliação posterior repita/até também vin- cula a execução de um conjunto de comandos ao resultado da avaliação de uma expressão lógica. O comando inicia pela execução do laço e, quando essa execução é concluída, a ex- pressão é avaliada: se o valor lógico obtido for falso, o laço é executado novamente; se for verdadeiro, o comando é encerrado. Isso significa que o laço é sempre executado pelo menos uma vez, independentemente do valor lógico inicial resultante da avaliação da expressão de controle. Observar que, normalmente, o valor inicial da expressão lógica será falso, pois se deseja repetir o laço mais de uma vez. Portanto, é necessário que, em algum momento, o conteúdo de alguma variável utilizada nesta expressão lógica tenha o valor alterado dentro do laço, de forma a modificar o valor resultante de sua avaliação para verdadeiro, evitando assim a ocorrência de um laço – loop – infinito. A sintaxe de um comando de repetição condicional repita/até é a seguinte: repita <comandos> até <expressão lógica> Observar que, diferentemente dos comandos anteriores, aqui não é necessário um comando composto, pois a sintaxe aceita múltiplos comandos, delimitados pela cláusula até. O fluxograma representado na Figura 5.5 mostra o funcionamento desse comando, em que o laço de repetição é sempre executado pelo menos uma vez. O aninhamento de comandos de repetição também se aplica ao comando repita/até, in- cluindo os outros comandos de repetição já vistos. O Algoritmo 5.7, a seguir, adapta o Algoritmo 5.6, utilizando no laço de repetição um co- mando repita/até em lugar doenquanto/faça. Observar que, como o laço desse coman- do é sempre executado pelo menos uma vez, se tornou necessária a inclusão de um comando condicional logo no início para condicionar a execução do laço ao valor inicial de nota1. Edelweiss_05.indd 139 12/03/14 09:02 140 Algoritmos e Programação com Exemplos em Pascal e C Algoritmo 5.7 – MédiaAlunoETurma_3 {INFORMA MÉDIA DOS ALUNOS DE UMA TURMA E A MÉDIA GERAL DESSA TURMA. PARA INDICAR FIM DE PROCESSAMENTO, O CONTEÚDO INFORMADO EM NOTA1 SERÁ NEGATIVO} Entradas: nota1, nota2, nota3 (real) Saídas: média (real) soma_médias (real) média_turma (real) Variável auxiliar: cont_al (inteiro) {CONTADOR DE ALUNOS PROCESSADOS} início soma_médias ← 0 {SOMA MÉDIAS INDIVIDUAIS: VALOR INICIAL ZERO} cont_al ← 0 {CONTADOR DE ALUNOS: VALOR INICIAL ZERO} ler(nota1) {LEITURA DA PRIMEIRA NOTA} se nota1 ≥ 0 então início repita ler(nota2, nota3) {LEITURA DAS OUTRAS 2 NOTAS} cont_al ← cont_al + 1 {CONTA ALUNO LIDO} média (nota1 + nota2 + nota3) / 3 {CALCULA MÉDIA} escrever (cont_al, média) {INFORMA MÉDIA} soma_médias ← soma_médias + média {SOMA DAS MÉDIAS} ler(nota1) {LEITURA DA PRIMEIRA NOTA DO PRÓXIMO ALUNO} <comando> <expressão lógica> verdadeiro falso <comando> … figura 5.5 Fluxograma do comando de repetição repita/até. Edelweiss_05.indd 140 12/03/14 09:02 Capítulo 5 Estruturas de Repetição 141 até nota1 < 0 {FINAL DO COMANDO REPITA} fim {DO COMANDO SE/ENTÃO} média_turma ← soma_médias / cont_al {MÉDIA DA TURMA} escrever(média_turma) fim 5.5 garantia da consistência de dados através de comandos de repetição Sempre que possível, os valores lidos devem ser verificados quanto à validade antes de seu armazenamento em variáveis. Por exemplo, se o intervalo de valores de notas de provas é de 0 a 10, então qualquer valor de nota informado que não estiver dentro desse intervalo está in- correto e deve ser descartado e substituído por um novo valor válido. A consistência de dados de entrada pode ser implementada através do uso de comandos de repetição condicional. No caso dos algoritmos de processamento de notas incluídos neste capítulo, toda a leitura de nota deveria incluir a consistência do valor informado. Nos exemplos a seguir, a consistência das leituras é garantida através do uso de enquanto/faça e de repita/até, de acordo com o funcionamento de cada comando. {CONSISTÊNCIA COM COMANDO ENQUANTO/FAÇA} ler (nota1) enquanto (nota1 < 0 ou nota1 > 10) e nota1 ≠ -1 faça início {SÓ EXECUTA SE NOTA INVÁLIDA} escrever('Nota inválida! Informe novamente. ') ler(nota1) fim {ENQUANTO} {CONSISTÊNCIA DE DADOS COM COMANDO REPITA/ATÉ} repita {CONSISTÊNCIA DE NOTA2} ler(nota2) {SEMPRE EXECUTA 1 VEZ, REPETE SE INVÁLIDA} se nota2 < 0 ou nota2 > 10 então escrever('Nota inválida! Informe novamente.') até (nota2 ≥ 0 e nota2 ≤ 10) Apesar das diferenças no modo de funcionamento, os comandos enquanto/faça e repita/até podem ser utilizados indistintamente nas situações em que o uso de comandos desse tipo for adequado. Entretanto, o comando repita/até, por apresentar a característica de sempre executar o conteúdo do laço pelo menos uma vez, é o mais indicado para a consis- tência de dados de entrada. A leitura dos dados deverá ocorrer obrigatoriamente pelo menos uma vez, e a avaliação do resultado da leitura determinará o encerramento (dado lido válido) ou a repetição do comando (dado lido inválido). O trecho a seguir apresenta a utilização do comando repita/até para a consistência da lei- tura de uma letra minúscula, garantindo que o caractere digitado esteja dentro do intervalo “a” a “z”, mas sem emitir mensagem de erro de digitação. Edelweiss_05.indd 141 12/03/14 09:02 142 Algoritmos e Programação com Exemplos em Pascal e C repita escrever('Informe uma letra minúscula:') ler(letra) até (letra ≥ 'a' e letra ≤ 'z') {SE VALOR VÁLIDO, NÃO REPETE} 5.6 selecionando o comando de repetição mais adequado As normas de bom estilo de programação recomendam que os comandos de repetição te- nham seu início e fim e suas condições de repetição claramente explicitados. Havendo mais de um comando de repetição possível para atender uma particular situação, a escolha deve recair sobre o comando com as características mais adequadas ao caso em análise. Se a repetição implementada for por contagem ou pela variação de conteúdo de uma variá- vel, através de incrementos constantes e definidos em um intervalo previamente conhecido, então o comando de repetição indicado é o para/faça. Nesse caso, a variável de controle, a condição de repetição e o incremento aplicado após cada execução do laço devem estar claramente definidos no cabeçalho do comando para/faça e devem ser evitadas alterações desses elementos no corpo do laço. Os comandos de repetição condicional são indicados para a solução de problemas em que o encerramento das repetições está relacionado à detecção de uma condição cuja ocorrência não pode ser predeterminada. Se existe a possibilidade do bloco de repetições não precisar ser executado nem uma vez, então o uso do comando enquanto/faça é indicado. Um exemplo dessa opção é o processa- mento de pedidos de uma empresa durante o período comercial: nesse caso, é recomendável que o usuário seja informado da eventual inexistência de processamento, caso nenhum pedi- do ocorra no período em questão. Se o bloco de repetições for sempre executado pelo menos uma vez, então a opção deve recair no comando repita/até. Um exemplo do uso adequado do repita/até é o proces- samento que inclui menus de opções, uma delas sendo o encerramento da execução: nesse caso, sempre ocorrerá a leitura e processamento de pelo menos uma das opções do menu. 5.7 exercícios de fixação exercício 5.1 A série de Fibonacci é uma sequência de números na qual o primeiro termo é 0, o segundo é 1 e os demais termos são sempre a soma dos dois anteriores: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 ... Edelweiss_05.indd 142 12/03/14 09:02 Encerra aqui o trecho do livro disponibilizado para esta Unidade de Aprendizagem. Na Biblioteca Virtual da Instituição, você encontra a obra na íntegra. DICA DO PROFESSOR A estrutura de repetição repita...até é um importante recurso quando a repetição não é controlada por um contador, e sim pelo valor de alguma informação que foi lida ou calculada. Vamos aprender a construir pseudocódigos com essa estrutura? Confira o vídeo! Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS Uma indústria de tecidos, após o processo de produção, fabrica retalhos que, em cada lote, devem ter o mesmo comprimento. Após realizarem os cortes necessários, verificou-se que duas peças restantes tinham as seguintes medidas: 156 cm e 234 cm. Assim, o coordenador de produção, depois de ser informado das medidas, solicitou que o funcionário cortasse as peças restantes em partes iguais e com o maior comprimento possível. Como ele poderá resolver essa situação? ,Esse é um problema que pode ser resolvido calculando-se o MDC (máximo divisor comum) entre 156 e 234, que resulta em 78. Assim, as peças serão cortadas em retalhos de 78 cm cada uma. Considerando dois números naturais (inteiros positivos), sempre poderemos definir, no mínimo, um divisor comum. Por exemplo: os divisores comuns de 12 e 18 são 1, 2, 3 e 6. O maior, nesse caso, é 6, então chamamos o 6 de máximo divisor comum de 12 e 18 e indicamos MDC (12,18) = 6. Existem alguns métodos para calcular o MDC de dois números, como fatores primos, divisões sucessivas, entre outros. Os dois algoritmos a seguir foram construídos com base no método das divisões sucessivas. Analise as duas implementações. 1) B) Implementação com a estrutura de repetição enquanto...faça Nesse contexto, selecione a alternativa abaixo que seja FALSA.A) Ambos os algoritmos funcionarão corretamente quando A for maior que B e também quando B for maior que A. B) Considerando os mesmos valores de entrada para as variáveis A e B, os dois algoritmos sempre realizarão exatamente a mesma quantidade de iterações de seus respectivos laços de repetição. C) As variáveis A e B foram atribuídas para as variáveis dividendo e divisor, respectivamente, para que seus valores fossem preservados e pudessem ser exibidos no final. D) A condição do laço repita...até é oposta à condição do laço enquanto...faça. E) A forma de cálculo do MDC é realizar divisões sucessivas, que terminam, em ambas implementações, quando o resto da divisão é zero. 2) Números perfeitos são aqueles que são iguais à soma de seus divisores. Por exemplo, o número 6 tem como divisores 1, 2 e 3. Somando-se 1 + 2 + 3 = 6, portanto, o número 6 é um número perfeito. Alguns números perfeitos conhecidos são: 6, 28, 496 e 8128. Analise as alternativas a seguir e assinale a que apresenta um algoritmo correto que leia um número e informe se ele é perfeito ou não. A) B) C) D) E) 3) Um cientista está estudando determinado material radioativo que possui a característica de perder metade de sua massa a cada 50 segundos. Para auxiliar na pesquisa, ele precisa de um programa que receba a massa inicial em gramas e informe o tempo necessário para que essa massa se torne menor que 0,5 grama. Ao final, o programa deve escrever a massa inicial, a final e o tempo, sendo que esse deve ser expresso em horas, minutos e segundos. ,Um programador desenvolveu a seguinte solução em pseudocódigo para o problema. Analise essa solução e selecione abaixo a alternativa correta. A) O algoritmo está apresentando o tempo em horas, minutos e segundos. B) Se for digitado um valor inicial de massa menor que 0,5, o algoritmo não irá funcionar. C) A condição do laço de repetição repita...até está errada. D) O laço de repetição enquanto...faça poderia substituir o laço repita...até utilizado no algoritmo, invertendo o teste da condição. E) O laço de repetição repita...até poderia ser facilmente substituído pelo para...faça, pois a quantidade de repetições que serão realizadas é conhecida. 4) Considerando-se a sintaxe e o funcionamento da estrutura de repetição repita...até, analise as alternativas a seguir e selecione aquela que NÃO está relacionada com essa estrutura. A) O conjunto de comandos da repetição sempre será executado, no mínimo, uma vez. B) O conjunto de comandos da repetição será executado enquanto a condição for falsa. C) O laço de repetição repita...até pode ser substituído pelo laço enquanto...faça utilizando a mesma condição. D) É uma estrutura útil para ser utilizada quando não se conhece a quantidade de repetições que serão realizadas. E) A condição de controle da repetição pode utilizar qualquer expressão com operadores relacionais e lógicos, desde que o resultado seja verdadeiro ou falso. Considere o seguinte algoritmo em pseudocódigo: algoritmo \"oquefaz\" var X,Y,Z: inteiro inicio escreval(\"O que faz?\") repita escreva(\"digite um número inteiro entre 0 e 1000\") 5) leia(X) ate((X>0)e(X<=1000)) y<-1000 repita Z <- X div Y X <- X mod Y Y <- y div 10 escreva(Z) ate(Y=0) fimalgoritmo Todo algoritmo tem um objetivo, um problema ou uma necessidade para implementar a solução. Assim, selecione a alternativa a seguir que expresse corretamente o que esse algoritmo faz. A) Converte um numeral expresso na base binária para a base decimal. B) Lê um número e escreve seus dígitos separadamente, sempre utilizando quatro dígitos para expressar o resultado. C) Converte um numeral expresso na base decimal para a base binária. D) Lê um número e escreve seus dígitos separadamente, utilizando apenas os dígitos que o numeral possui para expressar o resultado. E) Não tem objetivo, apenas faz contas soltas e não resolve nenhum problema matemático ou prático. NA PRÁTICA O desenvolvimento de algoritmos e programas é feito para que o computador nos auxilie a realizar processos complexos e repetitivos que envolvam diversas informações e cálculos. É possível construir algoritmos para calcular a área de figuras geométricas, IMC (índice de massa corpórea), volume de recipientes, média de notas, valor de parcelas, valor de séries numéricas, etc. Normalmente, deseja-se executar esses processos para diferentes valores de entrada de dados. Nesses casos, o algoritmo/programa deverá ser executado diversas vezes, para que, em cada vez, seja possível informar novos dados de entrada. Assim, seria adequado que, após encerrar o processo para o qual foi criado, que esse fosse repetido, sem que fosse necessário que o usuário o executasse novamente. Para atingir esse objetivo, pode-se utilizar a estrutura de repetição repita...até, que executa pelo menos uma vez um conjunto de comandos e, depois, testa uma condição, até que ela seja verdadeira, finalizando a repetição. Enquanto a condição for falsa, o bloco de comandos será repetido. Vamos considerar que desejamos construir um algoritmo que apresente um menu de opções de cálculos: 1 - Calcular a área de um quadrado 2 - Calcular a área de um retângulo 3 - Calcular a área de uma circunferência 4 - Sair do programa O sistema deve pedir que o usuário digite sua opção. Quando o usuário digitar a opção “1”, o programa deverá solicitar a medida do lado do quadrado, calcular sua área e mostrá-la. Caso seja digitada a opção “2”, solicitar as medidas do comprimento e altura do retângulo, calcular sua área e mostrá-la. Já quando for digitada a opção “3”, solicitar a medida do raio da circunferência, calcular sua área e mostrá-la. Finalmente, se for digitada a opção “4”, o programa deve ser finalizado. Portanto, se a opção digitada não for a opção “4”, o processo deve ser repetido. Podem-se definir os seguintes passos para resolução do algoritmo: 1. Ler a opção 2. Caso a opção seja “1” a. Ler a medida do lado do quadrado b. Calcular a área do quadrado: área = lado * lado c. Mostrar a área calculada 3. Caso a opção seja “2” a. Ler as medidas de comprimento e altura do retângulo b. Calcular a área do retângulo: área = comprimento * altura c. Mostrar a área calculada 4. Caso a opção seja “3” a. Ler a medida do raio da circunferência b. Calcular a área da circunferência: área = 3.1416 * raio * raio c. Mostrar a área calculada 5. Se a opção for “4” ir para o passo 6; caso contrário, voltar para o passo 1 6. Finalizar o programa O algoritmo a seguir em pseudocódigo implementa a solução do problema proposto: algoritmo "calculos" SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Lógica de Programação - Estruturas de repetição (loop) - REPITA ATÉ Conteúdo interativo disponível na plataforma de ensino! Lógica de Programação com VisualG Estrutura de Repetição - Repita Conteúdo interativo disponível na plataforma de ensino!
Compartilhar