Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estrutura de Repetição Repita...Até (fluxograma) APRESENTAÇÃO A repetição de trechos de programas exige, frequentemente, a execução de um determinado trecho de código no mínimo uma vez. Para estas situações, utiliza-se a Estrutura de repetição "Repita...Até". Esta estrutura define que um bloco de comandos será executado e que, ao final deste, será realizado um teste (condição). Se o resultado do teste for verdadeiro, a repetição termina; caso contrário, o bloco é repetido. Desta forma, nesta unidade de aprendizagem, será feito estudo sobre a construção de fluxogramas para representar esta estrutura de repetição. 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 fluxogramas que utilizem a Estrutura de repetição "Repita...Até".• Resolver problemas por meio de sua especificação com algoritmos.• DESAFIO A repetição de processos é muito comum em programação, e é um dos benefícios da computação: a realização de atividades repetitivas com precisão. Assim, a compreensão das Estruturas de repetição e de sua adequada utilização é uma importante competência dos programadores. A Estrutura de repetição “Repita...até” inicia um processo que realiza o conjunto de comandos do bloco de repetição no mínimo uma vez. Ao final deste, faz um teste (<condicao>), se o resultado for verdadeiro (SIM), finaliza a execução do conjunto de comandos da repetição e continua o fluxo do programa; se o resultado for falso (NÃO), retorna para o início da repetição. Assim, a repetição é executada até que uma condição tenha sucesso, ou seja, até que tenha resultado verdadeiro (sim). Veja o esquema de fluxo a seguir: Por exemplo, um funcionário do IBGE precisa validar as idades das pessoas. Assim, ele deseja um programa que leia a idade de uma pessoa e verifique se é uma idade válida. Se for informada uma idade menor do que zero ou maior que 150 anos, o programa deve solicitar que seja digitada uma nova idade; se for digitada uma idade válida, o programa deve apresentar essa mensagem. Para realizar essa consistência de dados, será utilizado um fluxograma com a estrutura de funcionamento do comando “Repita...Até”. Uma professora deseja calcular a média das notas de cada um dos seus alunos. Para o cálculo da média, é utilizada a média aritmética simples, conforme a seguinte expressão: média = (nota1 + nota2)/2. Cada uma das notas (nota1 e nota2) deve estar no intervalo [0,10], ou seja, ter o valor maior ou igual a zero e menor ou igual a 10. Notas fora deste intervalo são consideradas incorretas/inválidas, e então um novo valor deve ser informado. Construa um fluxograma que leia os valores de cada uma das notas (nota1 e nota2) de um aluno. Para cada nota, faça a consistência, verificando se está no intervalo correto. Se não estiver, ler novamente a nota. Depois de ler as notas válidas, calcular a média e mostrar a média calculada. INFOGRÁFICO Trecho de códigos em algoritmos são constituídos por comandos de entrada e saída de dados, comandos de decisão e comandos de repetição. O foco desta unidade é a construção de fluxogramas que representam 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 a partir da leitura do livro Algoritmos e Programação com exemplos em Pascal e C de Nina Edelweiss. 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 do enquanto/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ávelauxiliar: 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 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 Acompanhe o vídeo sobre estrutura de repetição. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS 1) Considere a Estrutura de repetição "repita...até". Em seguida, analise as afirmativas a seguir e selecione a INCORRETA. A) O bloco de repetição será executado no mínimo uma vez. B) A diferença entre a repetição "repita...até" e as outras estruturas de repetição é o momento em que é feito o teste (condição). C) Em todas as Estruturas de repetição, é feito um teste, e o bloco é repetido sempre que o teste tiver resultado verdadeiro. D) A Estrutura de repetição "repita...até" não é a melhor a ser utilizada quando o bloco de repetição não puder ser executado. E) O incremento ou alteração da variável de controle é de responsabilidade do programador. Considere o seguinte fluxograma: 2) Em relação à estrutura e ao funcionamento deste fluxograma, analise as questões a seguir e assinale a INCORRETA. A) Não é possível saber antecipadamente quantas vezes a repetição será executada, pois seu controle está relacionado a uma informação que será lida. B) Se o valor de B for zero, o fluxograma não funcionará corretamente. C) Se o valor de B for 1, o valor de M, que será escrito, será sempre o valor de A. D) O fluxograma calcula M em função do produto de A, calculando sua potência. E) O fluxograma representa o cálculo do fatorial de um número A que foi lido. Considere o seguinte fluxograma: 3) Em relação à estrutura e ao funcionamento deste fluxograma, analise as questões a seguir e assinale a correta. A) No fluxograma, a organização dos blocos representa a Estrutura de repetição "Repita...até". B) O bloco de repetição será executado até que X seja menor ou igual a Y. C) Independentemente dos valores iniciais de X e Y, o bloco de repetição sempre será executado no mínimo uma vez. D) A repetição termina quando o valor de Y for menor do que X. E) Ao final, o fluxograma mostra em total o somatório de Y. Considere o seguinte algoritmo em pseudocódigo: algoritmo "faz" var 4) termo, serie, valor : real inicio serie <- 1 valor <- 1 repita termo <- 1 / valor serie <- serie + termo valor <- valor + 1 escreval("Serie: ", serie) ate (termo < 0.001) escreval("Final: ", serie) fimalgoritmo Analise as alternativas a seguir e selecione a INCORRETA. A) O valor da variável termo é menor a cada iteração. B) A repetição será executada mais de 1.000 vezes. C) Pode-se alterar o tipo dos dados para inteiro, e o programa funcionará da mesma maneira. D) O conteúdo de valor é incrementado de uma unidade a cada iteração. E) A cada iteração, o valor da série é aumentado, mas esse aumento é cada vez menor. Um determinado material perde 5% de sua massa a cada 60 minutos. Considerando a massa inicial deste material (que deve ser maior que 1.000gramas), quanto tempo ele levará para perder menos que 1 grama por hora? Para resolver esse problema, foi construído o seguinte algoritmo em pseudocódigo: algoritmo "material" var 5) inicial, final, diminui : real tempo : inteiro inicio escreval("Material") repita escreva("Digite a massa inicial: ") leia(inicial) ate (inicial >= 1000) final <- inicial tempo <- 0 repita diminui <- final * 0.05 final <- final - diminui tempo <- tempo + 1 ate (diminui < 1) escreval("Massa inicial: ",inicial," - Massa Final: ",final," - Tempo: ", tempo," horas") fimalgoritmo Analise as alternativas a seguir e selecione a que apresenta o fluxograma mais equivalente ao pseudocódigo. A) B) C) D) E) NA PRÁTICA A entrada de informações é etapa muito importante em sistemas computacionais, e a correção destas informações é essencial para as etapas posteriores do processamento. A correção das informações depende muito do tipo de informação e de seu uso. Por exemplo, uma variável do tipo inteiro poderia receber qualquer valor inteiro, negativo ou positivo, porém, se esta variável representar a informação de idades de pessoas, valores negativos não seriam aceitáveis e nem valores grandes, maiores do que 150 ou 200. Assim, é desejável que seja verificada a correção da informação no processo de entrada de dados (leitura), e isto recebe o nome de verificação de consistência. Desta forma, quando um dado é lido, ele deve ser consistido, ou seja, deve-se verificar se o valor informado é coerente com a informação e uso que será feito desta. Se não for consistente, deve-se solicitar que o usuário informeum novo valor até que este seja correto. Portanto, ao construir uma solução algorítmica, além de definir as variáveis necessárias e seus respectivos tipos, deve-se definir, quando pertinente, o intervalo de valores que a variável pode receber ou o conjunto discreto (definido) de valores que lhe podem ser atribuídos. Deste modo, o processo de entrada de dados, nas situações em que é necessário fazer a consistência dos dados, deve seguir os seguintes passos: 1. //Iniciar consistência (Repita) 2. Ler informação 3. Testar se informação é consistente a. Se sim então ir para o passo 4 b. Se não voltar ao passo 1 4. //Continuar fluxo do programa\ O fluxograma a seguir representa essa lógica da consistência de dados de entrada: O algoritmo a seguir em pseudocódigo representa essa lógica de consistência de dados de entrada: algoritmo "consistencia" var dado: inteiro inicio repita escreval("Digite um numero inteiro maior que 0 (zero): ") leia(dado) ate dado > 0 escreval("Dado lido: ", dado) fimalgoritmo SAIBA MAIS Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Lógica de Programação com VisualG Estrutura de Repetição - Repita Conteúdo interativo disponível na plataforma de ensino! Lógica de Programação - Estruturas de Repetição (Loop) - REPITA ATÉ Conteúdo interativo disponível na plataforma de ensino!
Compartilhar