Universidade Federal de Ouro Preto - UFOP
Departamento de Computação - DECOM
Programação de Computadores I – BCC701
www.decom.ufop.br/moodle
Andréa Iabrudi
[email protected]
1
while <condição>
<bloco while>
end

Execução do comando while:
1. primeiro, a condição é avaliada
2. 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.
n ! = 1 ´ 2 ´ ´ (n - 1) ´ n
n ! = (n - 1) ! ´ n
n
n ! = Õi
 Faça
i=1
um programa que leia um
valor inteiro não negativo n e
imprima o fatorial de n.
3
n = input(“n = “)
k = 1; fat = 1;
while k <= n
fat = fat * k;
k = k + 1;
end
O número de iterações é
conhecido a priori = n
Em cada passo do loop,
multiplicamos fat por k
e incrementamos k

Quando o número de iterações de um loop é
conhecido a priori, podemos usar uma forma
mais simples de comando de repetição:
for i = <incio>:<incr>:<fim>
<bloco for>
end
i é variável de
controle do for
5
for i = <incio>:<incr>:<fim>
<bloco for>
end
O comando for é executado do seguinte modo:
1. o valor de <início> é atribuído à variável i
2. 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
6
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

Qual seriam os valores impressos pelos
seguintes trechos de programas?
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
8
for i = <incio>:<incr>:<fim>
<bloco for>
end

Qual é o número de iterações do comando?
int((fim – inicio)/incr) + 1)
9


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
v = input(“VETOR: “)
soma = 0;
produto = 1;
for k = 1:length(v)
soma = soma + v(k);
produto = produto * v(k)
end
printf(“soma = %g\n”,soma)
printf(“produto = %g\n”,produto)

Sabemos que Scilab provê funções para computar
a soma e o produto de vetores ou matrizes.
sum(M) soma de todos os elementos de M
prod(M) produto de todos os elementos de M


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

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
maximo = -%inf; pos = 0;
for k = 1:length(v)
if v(k) > maximo then
maximo = v(k);
pos = k
end
end

Sabemos que Scilab provê funções para computar
o máximo e o 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

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
O que é impresso pelo programa abaixo?
i=1, j=1
i=1, j=2
for i = 1:3
for j = 1:2
i=2,
printf("i=%g, j=%g\n",i,j)
i=2,
end
i=3,
end
i=3,
j=1
j=2
j=1
j=2
16

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
// tabela de multiplicação
for linha = 1:9
for coluna = 1:9
printf("%g",linha*coluna);
end
end
Corpo do loop externo:
imprime uma linha
Corpo do loop interno: imprime
uma coluna de uma linha

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
// Tabuada de multiplicação
for linha = 1:9
for coluna = 1:9
printf("%3g",linha*coluna);
end
printf("\n");
Fora do loop
interno!
end

Produzir uma tabela como esta, com x
variando de 0 a 2π, com intervalos de 0.2
x
0.0
0.2
0.4
0.6
0.8
seno(x)
0.0000
0.1987
0.3894
0.5646
0.8415
UFMG DCC001 2013-1
// Tabela da função Seno
for 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
UFMG DCC001 2013-1
// Tabela da função Seno
for x = 0:0.2:2*%pi
printf("\n %g %g",x, sin(x))
end
UFMG DCC001 2013-1
0 0
0.2 0.198669
0.4 0.389418
0.6 0.564642
0.8 0.717356
1 0.841471
1.2 0.932039
UFMG DCC001 2013-1
// Tabela da função Seno
// Impressão do cabeçalho
printf("\n x
seno(x)")
// Impressão das linhas da tabela
for x = 0:0.2:2*%pi
printf("\n%3.1f %7.4f",x, sin(x))
end
Coefs2g.txt
UFMG DCC001 2013-1
printf("\n%3.1f %7.4f",x, sin(x))
3 colunas,
1 casa
decimal
7 colunas,
4 casas
decimais
UFMG DCC001 2013-1
// 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

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, veja
http://en.wikipedia.org/wiki/Fibonacci_number

28
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
29
Download

6. Comandos de Repetição - Decom