AEDI-estrutura-repeticao

Propaganda
Algoritmos e Estruturas de Dados
I – Estrutura de Repetição
Profa. Mercedes Gonzales
Márquez
Estrutura de Repetição
Referência bibliográfica : SALVETTI/BARBOSA e HARRY FARRER
Execução de uma seqüência de ações repetidas vezes. O computador
abandona o fluxo natural da execução (de cima para baixo) e volta
a executar a seqüência de ações desejada. Pode apresentar duas
formas:
1.Repetição com variável de controle:
O número de repetições no loop (laço) está previamente determinado
pelo valor inicial e pelo valor final da variável de controle.
2.Repetição controlada por condição
Não sabemos a-priori quantas vezes executar a repetição. A execução
do loop deve ser controlada por uma condição. A condição pode
controlar a interrupção da repetição no início ou no final da
sequência de comandos desta.
Repetição com variável de controle
1. Repetição com variável de controle
Formato :
Para variável_controle de valor_inicial até valor_final
passo valor_passo repita
seqüência de comandos
Fim para
O número de repetições no loop (laço) está previamente
determinado pelo valor inicial e pelo valor final da
variável de controle. Quando valor_passo é 1, podemos
omitir a especificação de passo.
Repetição com variável de controle
Exemplo:
Algoritmo <exemplo1>
inteiro: i
Inicio
Para i de 1 até 5 repita
escreva (i)
Fim Para
Fim
Repetição com variável de controle
Exercício 2. (1º forma) Faça um algoritmo que imprima os 4 primeiros
números inteiros pares positivos.
Algoritmo <pares>
inteiro: i
Inicio
Para i de 1 até 4 repita
escreva (2*i)
Fim Para
Fim
Repetição com variável de controle
Exercício 2. (2º forma) Faça um algoritmo que imprima os 4 primeiros
números inteiros pares positivos.
Algoritmo <pares>
inteiro: i
Inicio
Para i de 2 até 8 passo 2 repita
escreva (i)
Fim Para
Fim
Repetição com variável de controle
Exercício 2. (3º forma) Faça um algoritmo que imprima os 4 primeiros
números inteiros pares positivos.
Algoritmo <pares>
inteiro: i,n
Inicio
n ←0
Para i de 1 até 4 repita
n ←n+2
escreva (n)
Fim Para
Fim
Repetição com variável de controle
Exercício 3. Faça um algoritmo que imprima a soma dos 4
primeiros números inteiros positivos.
Algoritmo <cincoprimeiros>
inteiro: i,s
Inicio
s ←0
Para i de 1 até 4 repita
s ←s+i
Fim Para
escreva (s)
Fim
i
s
0
1
1
2
3
3
6
4
10
Repetição com variável de controle
Exercício 4. Faça um algoritmo que imprima a soma dos 4
primeiros números inteiros pares positivos.
Algoritmo <pares2>
inteiro: i,s
Inicio
s ←0
Para i de 1 até 4 repita
s ←s+2*i
Fim Para
escreva (s)
Fim
i
s
0
1
2
2
6
3
12
4
20
Repetição com variável de controle
Exercício 5. Faça um algoritmo que imprima a soma dos n
primeiros números inteiros pares positivos.
Algoritmo <pares3>
inteiro: i,s,n
Inicio
leia (n)
s ←0
Para i de 1 até n repita
s ←s+2*i
Fim Para
Repetição com variável de controle
Exercício 6. Faça um algoritmo que imprima a soma dos n
primeiros números inteiros ímpares positivos.
Algoritmo <impares>
inteiro: i,s,n
Inicio
leia (n)
s ←0
Para i de 1 até n repita
s ←s+2*i-1
Fim Para
escreva (s)
Fim
Repetição com variável de controle
Exercício 7. Desenvolver um algoritmo para calcular a soma:
1+ 1/2+ 1/4+ 1/6+ 1/8+ . . .+ 1/200
Algoritmo <soma>
inteiro: i,s
Inicio
s ←1
Para i de 1 até 100 repita
s ←s+1/(2*i)
Fim Para
Fim
Repetição com variável de controle
Exercício 8. Tem-se a altura e o nome de 50 pessoas. Fazer um
algoritmo que escreva o nome da pessoa mais alta. Se tiver mais
de uma pessoa possuíndo a maior altura, escreva o nome de
quaisquer delas.
Algoritmo <altura>
inteiro: i
Literal: nome,nomemaisalta
Real:altura, maioraltura
Inicio
maioraltura←0
Para i de 1 até 50 repita
leia (nome,altura)
se (altura>maioraltura) então
maioraltura←altura
nomemaisalta←nome
fim se
Fim Para
escreva (nomemaisalta,maioraltura)
Fim
Repetição com variável de controle
Exercício 9. Num frigorífico existem 90 bois. Cada boi traz preso
no pescoço um cartão contendo seu número de identificação e seu
peso. Fazer um algoritmo que escreva o número e peso do boi
mais gordo e do boi mais magro.
Algoritmo <bois>
inteiro: i,numero,gordo,magro
Real:peso,pesomenor, pesomaior
Inicio
pesomenor←10000
pesomaior←0
Para i de 1 até 90 repita
leia (numero,peso)
se (peso>pesomaior) então
pesomaior←peso
gordo←numero
fim se
se (peso<pesomenor) então
pesomenor←peso
magro←numero
fim se
Fim Para
escreva (gordo,pesomaior)
escreva (magro,pesomenor)
Fim
Repetição com variável de controle
Exercício 10. Sendo H=1+1/2+1/3+1/4+...+1/N faça um algoritmo
para calcular H. O número N é lido.
Algoritmo <H>
inteiro: i,n
real: H
Inicio
leia (n)
H ←0
Para i de 1 até n repita
H ←H+1/i
Fim Para
escreva (H)
Fim
Repetição com variável de controle
Exercício 11. Imprimir os N primeiros termos da seqüência
k=1,2,3 , . .
¿
y k+ 1 =y k + 2,
com
y1= 1
¿
Seja N=5. O primeiro termo é definido pela condição inicial e os
demais são calculados pela formula de recorrência dada
y1= 1
y 2 =y 1+ 2= 3
y 3 =y 2+ 2= 5
y 4 =y 3+ 2= 7
y 5 =y4 + 2= 9
Algoritmo <nprimeiros>
inteiro: i,n,y
Inicio
leia (n)
y ←1
escreva (y)
Para i de 1 até n-1 repita
y ←y+2
escreva (y)
Fim Para
Repetição com variável de controle
Exercício 12. Faça um algoritmo que calcule a seguinte soma
( o símbolo ∑ representa somatório.
10
S= ∑ k 2
k=1
Resolvendo o somatório
S = 12 + 22 + 32 + 42 + 52 + 62 + 7 2 + 82 + 92 +102
Algoritmo <somatorio>
inteiro: i,s
Inicio
s ←0
Para i de 1 até 10 repita
s ←s+i**2
Fim Para
Fim
Repetição com variável de controle
Exercício 13. Faça um algoritmo que calcule e escreva o valor
da seguinte somatória
2 4 8 16
S=1+ + + +
3 9 27 81
-Procurando
uma
fórmula
0
1
2
3
4
2 2 2 2 2
S= 0 + 1 + 2 + 3 + 4
3 3 3 3 3
Algoritmo <somatorio2>
inteiro: i,s
Início
s ←0
Para i de 0 até 4 repita
s ←s+2**i/3**i
Fim Para
Fim
ou
2 22 23 2 4
S=1+ + 2 + 3 + 4
3 3 3 3
Algoritmo <somatorio2>
inteiro: i,s
Início
s ←1
Para i de 1 até 4 repita
s ←s+2**i/3**i
Fim Para
Fim
Repetição com variável de controle
Exercício 14. Faça um algoritmo que calcule e escreva o valor
da seguinte somatória
2 4 8 16
S=1+ + + +
9 27 81 243
-Procurando uma fórmula
21 2 2 23 24
S=1+ 2 + 3 + 4 + 5
3 3 3 3
Algoritmo <somatorio2>
inteiro: i,s
Início
s ←1
Para i de 1 até 4 repita
s ←s+2**i/3**(i+1)
Fim Para
Fim
Repetição com variável de controle
Exercício 15. Faça um algoritmo que calcule e escreva o valor
da seguinte somatória
2 4 8 16
S=1+ + + +
81 27 9 3
-Procurando uma fórmula
21 2 2 23 24
S=1+ 4 + 3 + 2 + 1
3 3 3 3
2 1 22 23 24
S=1+ 5− 1 + 5− 2 + 5− 3 + 5− 4
3
3
3
3
Algoritmo <somatorio2>
inteiro: i,s
Início
s ←1
Para i de 1 até 4 repita
s ←s+2**i/3**(5-i)
Fim Para
Fim
Repetição com variável de controle
Exercício 16. Faça um algoritmo que calcule e escreva o valor
da seguinte somatória
2 4 8 16
S=1− + − +
3 9 27 81
-Procurando uma fórmula
Algoritmo <somatorio2>
inteiro: i,s
Início
s ←1
Para i de 1 até 4 repita
s ←s+(-1 )**i*2**i/3**i
Fim Para
Fim
2 22 23 2 4
S=1− + 2 − 3 + 4
3 3 3 3
Algoritmo <somatorio2>
inteiro: i,s
Início
s ←1
Para i de 1 até 4 repita
s ←s+(-2)**i/3**i
Fim Para
Fim
Repetição com variável de controle
Exercício 17. Faça um algoritmo que calcule e escreva o valor
da seguinte somatória
1
2
4
8
16384
S= +
+
+
+ ...+
225 196 169 144
1
-Procurando uma fórmula
S=
S=
1
2
4 8
16384
+
+
+
+
...+
152 14 2 132 12 2
12
2**0 2**1 2**2 2**3
2**14
+
+
+
+
..
.+
152 14 2 13 2 122
12
Algoritmo <somatorio2>
inteiro: i,s
Inicio
s ←0
Para i de 1 até 15 repita
s ←s+2**(i-1)/(16-i)**2
Fim Para
Fim
Repetição com variável de controle
Exercício 18. Faça um algoritmo que calcule
o valor
do seno de A
3
5
7
A A A
através da seguinte série:
SenA = A  +  + ...
3! 5! 7!
O valor de A e o número N de termos da série devem ser lidos.
Algoritmo <senoA>
inteiro: i,n
real: A
Inicio
leia (n,A)
soma←A
den←1
num←A
Para i de 2 até n repita
num← -num*A*A
den←den*(2*i-1)*(2*i-2)
soma←soma+num/den
Fim Para
Repetição com variável de controle
Exercício 19. O número 3025 possui a seguinte característica:
30+ 25= 55
552 = 3025
{
}
Faça um algoritmo que pesquise e imprima todos os números de
quatro algarismos que apresentam tal característica.
Algoritmo <caracteristica>
inteiro: i
Inicio
Para i de 1000 até 9999 repita
Se (((mod(i,100)+div(i,100))**2)=i)
escreva (i)
Fim se
Fim Para
Fim
Repetição com variável de controle
Exercício 20. Partindo-se de um único casal de coelhos
filhotes recém-nascidos e supondo que um casal de coelhos
torna-se fértil após dois meses de vida, a partir de então,
produz um novo casal a cada mês e que os coelhos nunca
morrem, a quantidade de casal de coelhos após n meses é
dado pelo n-ésimo termo da seguinte seqüência:
F n =F n− 2 +F n− 1 ,n≥ 2
F 0= 1,
F 1= 1
Essa seqüência chama-se seqüência de Fibonacci.
Repetição com variável de controle
(a) Mostre como os termos dessa série correspondem à solução do problema
proposto.
meses
0 ) = 1
1 ) = 1
2 )
  2
3 )

 = 3
4 )



 = 5
5 )






 = 8
6 )











 = 13
Repetição com variável de controle
b) Redija um algoritmo para calcular a quantidade de casais de coelhos
após n meses.
Algoritmo <fibonacci>
inteiro: i,n,fibonacci,fib0,fib1
Inicio
leia (n)
fib0 ←1
fib1←1
Para i de 2 até n repita
fibonacci ←fib0+fib1
fib0 ←fib1
fib1 ←fibonacci
Fim Para
Fim
Repetição controlada por condição
As vezes precisamos que nosso algoritmo realize uma certa
quantidade de repetições, mas não sabemos o número exato de
repetições necessárias.
Exemplo:
Faça um algoritmo que determine os quadrados de um conjunto de
números inteiros positivos.
Neste caso não podemos usar a estrutura de repetição com variável
de controle pois o conjunto de dados de entrada é formado por um
número desconhecido de elementos. Não é fornecida pelo usuário a
quantidade de números existem no conjunto.
O que desejamos é repetir o bloco de comandos (leitura, comandos,
saída) enquanto existir um número inteiro positivo na lista de entrada
dos dados.
Repetição controlada por condição
Nestes casos usamos a repetição controlada por condição.
Repetição controlada por condição.
Não sabemos a-priori quantas vezes executar a repetição. A
execução do loop deve ser controlada por uma condição.
Esta repetição é também chamada de repetição controlada por
sentinela ou flag.
No exemplo, a condição para interromper a repetição é que o
número não seja positivo. O valor sentinela será então qualquer
número que não seja positivo. Por exemplo, o número zero ou o
número -1.
Repetição controlada por condição
Representamos essa estrutura de repetição através de
uma das duas instruções:
(1) enquanto-faça
(2) repita-até-que.
As duas instruções são equivalentes. Entretanto, há
situações em que uma é preferível à outra.
Repetição controlada por condição
Instrução Enquanto-Faça
Formato.
Enquanto <condição> faça
<bloco de comandos>
Fim enquanto
•Nesta instrução, <bloco de comandos> só é executado se
<condição> for verdadeira.
•Antes de ser executado pela primeira vez é necessário que a
<condição> esteja definida.
•Se na primeira vez em que a <condição> for testada ela for falsa, o
loop não é executado nenhuma vez.
•Dentro do loop deve existir uma instrução que altera o valor da
<condição>, caso contrário, o loop pode se tornar de execução infinita
(não parar).
Repetição controlada por condição
Exemplo 1. Faça um algoritmo que determine os quadrados de um
conjunto de números inteiros positivos.
Algoritmo <quadrados>
inteiro: numero
Inicio
leia (numero)
enquanto (numero>0) faça
escreva (numero*numero)
leia (numero)
fim enquanto
Fim
Repetição controlada por
condição
Exemplo 2: Faça um algoritmo que leia uma
lista de números inteiros. A leitura de dados
terminará quando for ingressado o número
zero (flag). Pede-se a soma e a média de
todos os números lidos (excluindo o zero).
Algoritmo <media>
inteiro: numero,soma,cont
real: media
Inicio
cont ←0
soma ←0
leia (numero)
enquanto (numero<>0) faça
soma ← soma+numero
cont ← cont+1
leia (numero)
fim enquanto
se (cont>0) então
media ←soma/cont
escreva (media)
fim se
Fim
Repetição controlada por condição
Exercício 3. Escrever um algoritmo que receba dois números
inteiros positivos, e determine o produto dos mesmos, utilizando o
seguinte método de multiplicação:
•dividir, sucessivamente, o primeiro número por 2, até que se
obtenha 1 como quociente;
•paralelamente, dobrar, sucessivamente, o segundo número;
•somar os números da segunda coluna que tenham um número
ímpar na primeira coluna. O total obtido é o produto procurado.
Exemplo:
9x6
9
6→
6
4
12
2
24
1
48→
+48
___
54
Repetição controlada por condição
Algoritmo <produto>
inteiro: i,a,b,pro
Inicio
leia (a,b)
pro←0
Enquanto (a<>1) faça
Se (mod(a,2)<>0) então
pro←pro+b
Fim se
a←div(a,2)
b←b*2
Fim enquanto
pro ←pro+b
Fim
Repetição controlada por condição
Exemplo 4: Faça um algoritmo que encontre a primeira potência de
2 maior que 1000.
Repetição controlada por condição
Exemplo 5: Faça um algoritmo que calcule a soma dos
divisores de um número n, exceto ele próprio.
Algumas observações se fazem necessárias:
(A) Se um número inteiro X possui um divisor Y menor que
sua raiz quadrada, o quociente da divisão de X por Y será
maior que a raiz quadrada de X e será, também, um divisor
de X.
(B) Se um número inteiro X possui um divisor Y igual a sua
raiz quadrada, o quociente da divisão de X por Y será o
próprio divisor Y.
Repetição controlada por condição
Algoritmo <somadivisores>
inteiro:n, soma,divisor
Inicio
leia (n)
soma←1
divisor←2
Enquanto (divisor<sqr(n)) faça
Se (mod(n,divisor)=0) então
soma←soma+divisor+div(n,divisor)
Fim se
divisor←divisor+1
Fim enquanto
se (divisor=sqr(n))
soma ←soma+divisor
fim se
Fim
Repetição controlada por condição
Exemplo 6: Faça um algoritmo que determine se um número
inteiro n é um número primo.
Um número inteiro X é um número primo se ele possui como
únicos divisores 1 e ele próprio.
Repetição controlada por condição
Solução 1.
Algoritmo <numeroprimo>
inteiro:n,j
logico:primo
Inicio
leia (n)
primo←1
Para j de 2 até n-1 repita
Se (mod(n,j)=0) faça
primo←0
Fim enquanto
Se (primo) então
escreva (“O número é primo”)
Fim se
Fim
Repetição controlada por condição
Solução 2.
Algoritmo <numeroprimo>
inteiro:n,j
Inicio
leia (n)
j←2
Enquanto (j<=sqr(n) e mod(n,j)<>0) faça
j←j+1
Fim enquanto
Se (mod(n,j)<>0) então
escreva (“O número é primo”)
Fim se
Fim
Repetição controlada por condição
Exemplo 7: São dados um número n e quatro outros, “a”, “b”,
“c”, e “d”, correspondentes, respectivamente, às
extremidades dos intervalos [a,b] e [c,d], sendo a<b, c<d e
a<c. Determinar se n pertence somente ao intervalo [a,b] ou
somente ao intervalo [c,d] ou, se n pertence a ambos ou se n
não pertence a nenhum dos dois. Em cada caso imprimir
uma mensagem conveniente. Faça a leitura do número n até
que seja ingressado o valor N como resposta para a
pergunta: Deseja continuar <S/N>?
Repetição controlada por condição
Quando temos um único valor n.
Algoritmo <pertenencia>
inteiro:n
Inicio
leia (n)
se (n>=c e n<=b) então
Escreva (“n pertence a ambos intervalos”)
senão
se (n>=a e n<=b) então
Escreva (“n pertence ao intervalo [a b]”)
senão
se (n>=c e n<=d) então
Escreva (“n pertence ao intervalo [c d])
senão
Escreva (“n não pertence a nenhum dos dois intervalos”)
Fim se
Fim se
Fim se
Repetição controlada por condição
Faça para vários valores de n conforme pede o enunciado.
Repetição controlada por condição
Instrução Repita-Até-Que
Formato.
repita
<bloco de comandos>
até que <condição>
•Nesta instrução, <bloco de comandos> pelo menos uma vez porque
somente após a sua execução a <condição> é testada.
•Dentre as instruções do loop deve existir pelo menos uma que altere o
valor de <condição>.
•Para o mesmo problema as condições de controle dos comandos
enquanto-faça e repita-até-que são condições complementares.
Observe que a negação de A>0 é A<=0 e vice-versa.
Repetição controlada por condição
Exemplo comparativo.- Faça um algoritmo que determine os quadrados de um
conjunto de números inteiros positivos.
Algoritmo <quadrados>
Algoritmo <quadrados>
inteiro: numero
inteiro: numero
Inicio
Inicio
leia (numero)
leia (numero)
enquanto (numero>0) faça
repita
escreva (numero*numero)
leia (numero)
fim enquanto
escreva (numero*numero)
leia (numero)
até que (numero<=0)
Fim
Fim
Observe que a primeira estrutura de repetição (enquanto-faça) é mais
conveniente para resolver o problema proposto.
Exercício2: Suponha que no ano N a população americana seja maior
que a brasileira. Sabendo-se que os Estados Unidos possuem um
crescimento anual de 2% na sua população e que o Brasil tem
crescimento anual de 4%, determinar o ano em que as duas populações
serão iguais (em quantidade). São dados os números de habitantes dos
Estados Unidos e do Brasil no ano N.
Algoritmo <populacao>
Algoritmo <populacao>
inteiro: ano,br,am
inteiro: ano,br,am
Inicio
Inicio
leia (ano,br,am)
leia (ano,br,am)
repita
enquanto (am>br) faça
br ←br*1.04
am ←am*1.02
am ←am*1.02
br ←br*1.04
ano ←ano+1
ano ←ano+1
até que (br>=am)
escreva (ano)
Fim
fim enquanto
escreva (ano)
Fim
Repetição controlada por condição
1. Se usarmos repita-até-que,
as duas populações primeiro sofrem um acréscimo, e depois o teste
da condição será executado.
Esta instrução é indicada se considerarmos sabido que inicialmente
a população americana é de fato maior que a população brasileira.
2. Se usarmos enquanto-faça
Se os valores de entrado fossem desconhecidos, esta instrução é
mais adequada pois primeiro o teste da condição é efetuado e
conforme o resultado do teste o bloco será o não executado dentro
do loop.
Download