Lógica de programação: Estruturas de repetição (Capítulo 7)

Propaganda
BC-0005
Bases Computacionais da Ciência
Aula 07 – Lógica de Programação:
Estruturas de repetição
Prof. Rodrigo Hausen
(com base nos slides do prof. Jesús P. Mena-Chalco)
1
Laços (estruturas de repetição)
Usado em situações em que é necessário repetir um
determinado trecho de um programa, um determinado
número de vezes.
Duas formas:
Escrever o trecho quantas vezes for necessário, ou
Utilizar o conceito de laço de repetição ou laço de
iteração.
2
Laço de repetição (for)
Single Ladies – Beyoncé
All the single ladies!
All the single ladies!
All the single ladies!
All the single ladies!
All the single ladies!
All the single ladies!
All the single ladies!
3
Laço de repetição (for)
Single Ladies – Beyoncé
All the single ladies!
All the single ladies!
No editor do Scilab:
All the single ladies!
disp("Single Ladies - Beyoncé");
disp("All the single ladies!");
disp("All the single ladies!");
disp("All the single ladies!");
disp("All the single ladies!");
disp("All the single ladies!");
disp("All the single ladies!");
disp("All the single ladies!");
All the single ladies!
All the single ladies!
All the single ladies!
All the single ladies!
4
Estruturas de repetição:
o laço for
5
Laços (for)
Em vez de copiar e colar a linha
disp("All the single ladies!");
sete vezes, troque por
for i = 1:7
disp("All the single ladies!");
end
Execute e veja o resultado.
6
Laços (for)
for variavel =
instrução
instrução
instrução
…
end
inicio:fim
1;
2;
3;
Atribui à variável os
valores inicio, inicio+1,
inicio+2, …, fim.
Para cada vez que um
valor é atribuído à
variável, o bloco de
instruções é executado.
for n = 5:9
disp("O valor de n é:");
disp(n);
end
7
(1) Soma de números
Crie uma função soma_intervalo(x,y) que calcule a
soma:
x + (x+1) + (x+2) + … + y
Considere x < y
-->soma_intervalo(0,4)
10.
-->soma_intervalo(-4,4)
0.
-->soma_intervalo(10,12)
33.
8
(1) Soma de números
Crie uma função soma_intervalo(x,y) que calcule a
soma:
x + (x+1) + (x+2) + … + y
Considere x < y
9
(2) Somatório de quadrados
Crie uma função somaQ(n), que dado um inteiro n>0,
retorne a seguinte soma:
1² + 2² + 3² + … + n²
10
(2) Somatório de quadrados
function soma = somaQ(n)
soma = 0;
for i = 1:n
soma = soma + i^2;
end
endfunction
-->somaP(0)
0.
-->somaP(1)
1.
-->somaP(2)
5.
-->somaP(3)
14.
-->somaP(4)
30.
11
(3) Somatório de quadrados
Modifique a função somaQ para que ela receba dois
parâmetros, m e n, de tal forma que ela calcule o
somatório:
n
∑i
2
i=m
12
(3) Somatório de quadrados
Modifique a função somaQ para que ela receba dois
parâmetros, m e n, de tal forma que ela calcule o
somatório:
n
2
2
2
2
∑ i =m +(m+1) +(m+2) +...+ n
2
i=m
13
(3) Somatório de quadrados
Modifique a função somaQ para que ela receba dois
parâmetros, m e n, de tal forma que ela calcule o
somatório:
n
∑i
i=m
2
function soma = somaQ(m,n)
soma = 0;
for i = m:n
soma = soma + i^2;
end
endfunction
14
Outras sequências
Até agora, a variável do laço era incrementada de
apenas 1 unidade. Para incrementos diferentes (mais de
uma unidade, ou para decrementar a variável), usamos o
laço for desta forma:
for variavel = inicio:incremento:fim
...
end
Ex.: imprime contagem regressiva de 10 até 1
for i = 10:-1:1
disp(i)
end
15
Estruturas de repetição:
o laço while
16
Soma de quadrados
function soma = somaQ(m,n)
soma = 0;
for i = m:n
soma = soma + i^2;
end
endfunction
17
Soma de quadrados
function soma = somaQ(m,n)
soma = 0;
for i = m:n
soma = soma + i^2;
end
endfunction
function soma = somaQ(m,n)
soma = 0;
i = m
while i <= n
soma = soma + i^2;
i = i + 1
end
endfunction
18
Estrutura: While
while condição
instrução 1;
instrução 2;
...
instrução n;
end
O laço while (enquanto) repete uma sequência de
instruções enquanto uma condição for satisfeita.
Útil quando não se sabe, a priori, o número de
iterações.
19
(4) Fatorial
Crie uma função em que, dado um inteiro não-negativo
n, determine n!
20
(4) Fatorial
Crie uma função em que, dado um inteiro não-negativo
n, determine n!
Com laço for:
21
(4) Fatorial
Crie uma função em que, dado um inteiro não-negativo
n, determine n!
Com laço for:
Com laço while:
22
(5) Jogo da adivinhação
function adivinhacao()
// sorteia um inteiro entre 1 e 10
n = floor(rand()*10 + 1);
disp('Pensei num inteiro entre 1 e 10.');
disp('Tente adivinhá-lo.');
chute = 0;
while chute ~= n
chute = input('seu chute: ');
end
disp('Você acertou! Fim de jogo.');
endfunction
23
(6) Número triangular
Dizemos que um número natural é triangular se ele é
produto de três números naturais consecutivos.
Exemplo: 120 é triangular, pois 4*5*6 = 120.
2730 é triangular, pois 13*14*15 = 2730.
Dado um inteiro não negativo n, verificar se n é triangular.
Definição da função: numeroTriangular(n):
Devolve “True” se o número for triangular,
caso contrário “False”.
24
(6) Número triangular
-->numeroTriangular(2730)
T
-->numeroTriangular(29760)
T
25
(6) Número triangular
interrompe imediatamente
a execução da função
(retorno imediato da função)
-->numeroTriangular(2730)
T
-->numeroTriangular(29760)
T
26
(6) Número triangular
Com laço for:
27
(7) Soma de dois quadrados
Dizemos que um inteiro positivo n pode ser escrito como
a soma de dois quadrados se existem a, b inteiros tais
que:
n = a² + b²
Crie uma função somaDeDoisQuadrados(n) que
retorna os fatores a e b caso n possa ser escrito como a
soma de dois quadrados, ou o valor verdade falso caso
não possa.
Para os inteiros a e b, precisamos testar todas as
possibilidades entre 1 e √ n−1
28
(7) Soma de dois quadrados
--> somaDeDoisQuadrados(2)
ans =
1.
1.
--> somaDeDoisQuadrados(245)
ans =
7.
14.
--> somaDeDoisQuadrados(30)
ans =
F
29
(7) Soma de dois quadrados
function resp = somaDeDoisQuadrados(n)
for a = 1:sqrt(n-1)
for b = 1:sqrt(n-1)
if n == a^2 + b^2 then
resp = [a,b]
return
end
end
end
resp = %f
endfunction
30
(7) Soma de dois quadrados
function resp = somaDeDoisQuadrados(n)
for a = 1:sqrt(n-1)
for b = 1:sqrt(n-1)
if n == a^2 + b^2 then
resp = [a,b]
return
end
end
end
resp = %f
endfunction
31
(7) Soma de dois quadrados
function resp = somaDeDoisQuadrados(n)
for a = 1:sqrt(n-1)
for b = 1:sqrt(n-1)
if n == a^2 + b^2 then
resp = [a,b]
return
end
end
end
resp = %f
endfunction
laços aninhados
32
Atividade 08: Tidia-ae
Adapte a função do jogo da adivinhação para:
●
●
Receber como parâmetro um inteiro n, que determinará a
faixa de valores de 1 a n
Para cada chute dado, mostrar se o número escolhido pelo
computador é maior ou menor que o chute do jogador.
Definição da função: adivinhacao(n)
Nome do arquivo a ser enviado: adivinhacao.sci
36
Atividade 08: Tidia-ae
--> adivinhacao(50)
Pensei num inteiro entre 1 e 50
Tente adivinhá-lo.
Seu chute: 25
Meu número é menor.
Seu chute: 12
Meu número é maior.
Seu chute: 18
Meu número é maior.
Seu chute: 21
Meu número é menor.
Seu chute: 19
Você acertou! Fim de jogo.
37
Atividade 09: Tidia-ae
Faça uma função arcotangente que recebe um número real
x ∈ [0,1] e devolve uma aproximação do arco tangente de x
(em radianos), calculada através da série:
Definição: arcotangente(x)
Nota: Considere somente os 100 primeiros termos da série.
- Nome do arquivo a ser enviado: arcotangente.sci
38
Atividade 10: Tidia-ae
Crie uma função que, dados dois inteiros positivos x e y tais
que x < y, some apenas os números que são quadrados
perfeitos na sequência:
x, x+1, x+2, … , y
A função deve ser definida como: soma_quadrados(x,y)
Ex.: soma_quadrados(1, 10) deve retornar 14, pois na
sequência:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Apenas 1 = 1²,
4 = 2²
e 9 = 3² são quadrados perfeitos.
- Nome do arquivo a ser enviado: soma_quadrados.sci
39
Download