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 do enquanto/faça. Observar que, comoo 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!
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/8b7a1198d5694d7f17aed540c89b5a1a
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 aestrutura 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.
5) 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\")
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"
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para
acessar.
https://statics-marketplace.plataforma.grupoa.education/sagah/3b855340-8c96-4be3-9957-d4ee975d6302/11158d2a-5c7b-415e-a512-3b48f4cd1609.jpg
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É
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Lógica de Programação com VisualG Estrutura de Repetição -
Repita
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
https://www.youtube.com/embed/PZJmfp42k00
https://www.youtube.com/embed/cgfe08eg85o