Aula 06 Comandos de Repetição for
description
Transcript of Aula 06 Comandos de Repetição for
![Page 1: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/1.jpg)
Aula 06
Comandos de Repetiçãofor
Andréa [email protected]
1
Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM
Programação de Computadores I – BCC701www.decom.ufop.br/moodle
![Page 2: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/2.jpg)
O Comando while
Execução do comando while:1. primeiro, a condição é avaliada2. se a condição for verdadeira, então o bloco de comandos
dentro do while é executado, e volta-se ao passo 1.3. se a condição for falsa, o comando while termina, e a
execução prossegue a partir do comando imediatamente subsequente ao comando while.
while <condição> <bloco while>end
![Page 3: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/3.jpg)
Faça um programa que leia um valor inteiro não negativo n e imprima o fatorial de n.
3
Fatorial
![Page 4: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/4.jpg)
Fatorial - usando while
n = input(“n = “)k = 1; fat = 1;while k <= n fat = fat * k; k = k + 1;end
Em cada passo do loop, multiplicamos fat por k e incrementamos k
O número de iterações é conhecido a priori = n
![Page 5: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/5.jpg)
Quando o número de iterações de um loop é conhecido a priori, podemos usar uma forma mais simples de comando de repetição:
5
Comando for
for i = <incio>:<incr>:<fim> <bloco for>end
i é variável de controle do for
![Page 6: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/6.jpg)
6
Comando forfor i = <incio>:<incr>:<fim> <bloco for>end
O comando for é executado do seguinte modo:1. o valor de <início> é atribuído à variável i2. testa-se se i <= <fim> 3. se for, o <bloco for> é executado, a variável i
é incrementada de <incr> e volta-se ao passo 2
4. se não for, o comando for termina
![Page 7: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/7.jpg)
Fatorial – usando for
n = input(“n = “)fat = 1;for k = 1:n fat = fat * k;end
n = input(“n = “)k = 1; fat = 1;while k <= n fat = fat * k; k = k + 1;end
compare as duas formas
![Page 8: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/8.jpg)
Qual seriam os valores impressos pelos seguintes trechos de programas?
8
Exercício 1
for i = 3:3:10 printf(“%g\n”,i)end
for i = 7:-2:1 printf(“%g\n”,i)end
for i = 10:5 printf(“%g\n”,i)end
for i = 7:-2:8 printf(“%g\n”,i)end
![Page 9: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/9.jpg)
Qual é o número de iterações do comando?
9
Número de iterações do for
for i = <incio>:<incr>:<fim> <bloco for>end
int((fim – inicio)/incr) + 1)
![Page 10: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/10.jpg)
Escreva um programa que leia um vetor e imprima a soma e o produto de todos os elementos desse vetor.
O cálculo da soma e do produto dos elementos do vetor deve ser feito usando-se o comando for
10
Exercício 2
![Page 11: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/11.jpg)
Exercício 2 – soluçãov = input(“VETOR: “)soma = 0; produto = 1;for k = 1:length(v) soma = soma + v(k);
produto = produto * v(k)endprintf(“soma = %g\n”,soma)printf(“produto = %g\n”,produto)
![Page 12: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/12.jpg)
Sabemos que Scilab provê funções para computar a soma e o produto de vetores ou matrizes.
Agora você sabe como essas funções podem ser implementadas, usando-se um comando for
Em Scilab, essas funções são implementadas em paralelo, o que resulta em código mais eficiente do que a implementação usando o for
12
Soma e produto dos elementos de uma matriz
sum(M) soma de todos os elementos de M
prod(M) produto de todos os elementos de M
![Page 13: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/13.jpg)
Escreva um trecho de programa para calcular o elemento máximo de um vetor v e a posição em que esse elemento ocorre no vetor, usando o comando for
13
Exercício 3
![Page 14: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/14.jpg)
Exercício 3 – soluçãomaximo = -%inf; pos = 0;for k = 1:length(v) if v(k) > maximo then
maximo = v(k); pos = k
endend
![Page 15: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/15.jpg)
Sabemos que Scilab provê funções para computar o máximo e o mínimo de uma matriz.
Em Scilab, essas funções são implementadas em paralelo, o que resulta em código mais eficiente do que a implementação usando o for 15
Máximo e mínimo de uma matriz
[m,p] = max(M) m é o máximo de M e p é a posição em que ele ocorre
[m,p] = min(M) m é o míximo de M e p é a posição em que ele ocorre
![Page 16: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/16.jpg)
for i = 1:3 for j = 1:2 printf("i=%g, j=%g\n",i,j) endend
16
Comandos for aninhados
O que é impresso pelo programa abaixo?
i=1, j=1
i=1, j=2
i=2, j=1
i=2, j=2
i=3, j=1
i=3, j=2
![Page 17: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/17.jpg)
Tabuada de Multiplicação Obter a tabuada de multiplicação:
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
![Page 18: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/18.jpg)
// tabela de multiplicaçãofor linha = 1:9 for coluna = 1:9 printf("%g",linha*coluna); endend
Tabela de Multiplicação – for aninhados
Corpo do loop externo: imprime uma linha
Corpo do loop interno: imprime uma coluna de uma linha
![Page 19: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/19.jpg)
Tabela de Multiplicação Ao executar este programa verificamos
entretanto que sua saída está ininteligível:12345678924681012141618369121518212... Esquecemos de:
◦ Mudar de linha, com o \n, e◦ Dentro de cada linha, imprimir cada valor com um
número fixo de colunas
![Page 20: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/20.jpg)
Tabela de Multiplicação// Tabuada de multiplicaçãofor linha = 1:9 for coluna = 1:9 printf("%3g",linha*coluna); end printf("\n");end
Fora do loop interno!
![Page 21: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/21.jpg)
Tabela de Senos
UFMG DCC001 2013-1
x seno(x)
0.0 0.0000
0.2 0.1987
0.4 0.3894
0.6 0.5646
0.8 0.8415
Produzir uma tabela como esta, com x variando de 0 a 2π, com intervalos de 0.2
![Page 22: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/22.jpg)
Tabela de Senos1ª tentativa
UFMG DCC001 2013-1
// Tabela da função Senofor x = 0:0.2:2*%pi printf("%g %g",x, sin(x))end
-->
0 00.2 0.1986690.4 0.3894180.6 0.5646420.8 0.7173561 0.841471
![Page 23: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/23.jpg)
Tabela de Senos2ª Tentativa
UFMG DCC001 2013-1
// Tabela da função Senofor x = 0:0.2:2*%pi printf("\n %g %g",x, sin(x))end
![Page 24: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/24.jpg)
Tabela de Senos2ª Tentativa
UFMG DCC001 2013-1
0 00.2 0.1986690.4 0.3894180.6 0.5646420.8 0.7173561 0.8414711.2 0.932039
![Page 25: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/25.jpg)
Tabela de Senos
UFMG DCC001 2013-1
// Tabela da função Seno// Impressão do cabeçalhoprintf("\n x seno(x)")// Impressão das linhas da tabelafor x = 0:0.2:2*%pi printf("\n%3.1f %7.4f",x, sin(x))end
Coefs2g.txt
![Page 26: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/26.jpg)
Controlando colunas e decimais com o formato %f
printf("\n%3.1f %7.4f",x, sin(x))
3 colunas, 1 casa decimal
7 colunas, 4 casas decimais
UFMG DCC001 2013-1
![Page 27: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/27.jpg)
// Tabela da função Seno
// Impressão do cabeçalho
printf("\n x seno(x)")
// Impressão das linhas da tabela
xs = 0:0.2:2*%pi
sinxs = sin(xs)
printf("\n%3.1f %7.4f",[xs’ sinxs’])
27
Tabela de senosSolução usando vetores
![Page 28: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/28.jpg)
A sequência de números de Fibonacci1 é:
0 1 1 2 3 5 8 13 21 34 55 …
Essa sequência tem inúmeras aplicações em matemática e computação e ocorre com frequência em fenômenos da natureza.
Para saber mais, vejahttp://en.wikipedia.org/wiki/Fibonacci_number
28
Números de Fibonacci
![Page 29: Aula 06 Comandos de Repetição for](https://reader035.fdocumentos.com/reader035/viewer/2022062321/56813309550346895d99c709/html5/thumbnails/29.jpg)
29
Sequência de Fibonacci
Ladrilhamento de Fibonacci: quadrados cujos lados são números de Fibonacci.
Aproximação para a espiral áurea, criada desenhando arcos circulares conectando cantos opostos de quadrados do labrilhamento de Fibonacci 1,1,2,3,5,8,13,21,34.
Espiral áurea é uma espiral logaritmica cujo fator de crescimento é a razão áurea. A razão áurea é a raiz da equação x2 = x + 1