Escolar Documentos
Profissional Documentos
Cultura Documentos
George Gomes
Estruturas de Repetição
Imagina que você foi contratado para
criar padrões geométricos para papeis
de parede
Estruturas de Repetição
E terá que escrever um algoritmo para
desenhar o seguinte padrão
Estruturas de Repetição
O código para criar esse padrão é o
seguinte (41 linhas de código)
Estruturas de Repetição
E para criar a imagem abaixo 5 x 5?
(105 linhas de código)
Estruturas de Repetição
Imagina que você precisa criar uma
imagem perfeita (sem irregularidades
para emendas do papel) para ser
impressa em um rolo de 50cm por 10m
Estruturas de Repetição
Com estruturas de repetição, você
poderá criar uma imagem de
qualquer tamanho com pouco mais
de 10 linhas de código
Estruturas de Repetição
Vamos começar com um exemplo
simples: desenhar 10 círculos lado a
lado
Estruturas de Repetição
O código para desenhar os círculos
Estruturas de Repetição
Se eu pedisse para desenhar 100 círculos?
Imagina calcular a posição de cada um
deles na tela?
Estruturas de Repetição
Existe algum padrão de repetição no
código abaixo?
Estruturas de Repetição
Todos os círculos possuem a mesma
dimensão 50 x 50 pixels
Estruturas de Repetição
Eles também estão na mesma altura
(y = 50)
Estruturas de Repetição
Para sua posição no eixo X, eles estão
a um distância de 50 pixels entre os
centros
Estruturas de Repetição
Posição X é incrementada em 50 px
Estruturas de Repetição
Será que existe uma forma de automatizar
esse processo? Uma forma de definir
quantas vezes a instrução ellipse será
repetida só incrementando o valor de X?
Estruturas de Repetição
Sim, a estrutura de repetição para (for)
inteiro: i;
para i de 1 até 10 passo 1 faça
escreva(i);
Estruturas de Repetição
Perceba a economia de linhas de código
Estruturas de Repetição
Vamos olhar com calma a estrutura:
Estruturas de Repetição
O comando toma a variável i e faz com que ela assuma
o papel de contadora. No exemplo anterior, a variável i
assumirá valores de 1 até 10, e o comando dentro do
laço será executado cada vez que i assumir cada um
dos 10 valores
Estruturas de Repetição
...e esse tal ’passo 1’, o que significa?
Estruturas de Repetição
...essa é a parte do comando que vai informar de que
maneira a variável i vai ser modificada a cada passada
do laço.
Estruturas de Repetição
Por exemplo, se fosse para listar os números
inteiros pares de 1 a 10, como seria?
Em pseudocódigo
inteiro: i;
para i de 2 até 10 passo 2 faça
escreva (i);
Estruturas de Repetição
Neste exemplo, a variável i vai assumir o valor
2 na primeira vez e vai ser incrementada de
duas unidades a cada passada do laço.
Em pseudocódigo
inteiro: i;
para i de 2 até 10 passo 2 faça
escreva (i);
Estruturas de Repetição
Assim, a variável i vai assumir os valores 2, 4, 6, 8, 10 e 12.
Sim! a variável i vai assumir o valor 12, mas o laço não
será mais executado, ou seja, a instrução escreva não
será executada!!! Isso porque extrapolou o limite 10 e o
laço deve ser interrompido.
Em pseudocódigo
inteiro: i;
para i de 2 até 10 passo 2 faça
escreva (i);
Estruturas de Repetição
...então, podemos esmiuçar esse laço
da seguinte forma:
Estruturas de Repetição
para i de 1 até 10 passo 1 faça
Inicialização Teste Atualização
da variável de (condição de da variável de
controle parada) controle
Estruturas de Repetição
...o laço para tem representação
em Fluxograma? Tem!
Estruturas de Repetição
Em Pseudocódigo:
Estruturas de Repetição
No fluxograma, podemos ver que toda
a estrutura básica do laço fica descrita
no bloco correspondente. A condição
da variável i ir “até 9” equivale a
condição “i <10” ou “i<=9”
Estruturas de Repetição
No fluxograma, o algoritmo sairá do laço
quando a condição testada (i < 10)
resultar em falso
Estruturas de Repetição
...e no Processing, como fica a estrutura
de repetição para?
Estruturas de Repetição
Código equivalente no Processing
Estruturas de Repetição
for na sintaxe do Processing
Estruturas de Repetição
Alguns detalhes importantes!
Estruturas de Repetição
Toda a estrutura do laço (inicialização, teste
e atualização) fica entre parênteses.
Estruturas de Repetição
a inicialização, o teste e a atualização
são separados por ponto-e-vírgula
Estruturas de Repetição
o ponto-e-vírgula ao final dos comandos
dentro do laço se mantêm
Estruturas de Repetição
o comando for é escrito todo em minúsculas
Estruturas de Repetição
se houver mais de um comando dentro do
laço, então é necessário escrevê-los entre
chaves.
Estruturas de Repetição
...mas, se dentro do laço tivermos apenas um
comando, o uso das chaves é opcional.
O exemplo abaixo funcionará sem problemas.
Estruturas de Repetição
A declaração do tipo da variável pode ser
feita dentro do for. Aliás, é bem comum desta
forma, pois é mais simples
Estruturas de Repetição
Curiosidade: Também é muito comum
encontrar a expressão i++ que é a
simplificação da expressão i = i+1 em muitas
linguagens de programação
Estruturas de Repetição
Curiosidade: o Processing, assim como outras
linguagens de programação, como C++ e
Java, dispõe de notação para operadores de
incremento e decremento de variáveis,
seguindo o padrão abaixo:
Estruturas de Repetição
Então, é escolha de cada pessoa escrever a
atualização da variável de controle na notação
longa, ou na notação alternativa. Vai funcionar
da mesma forma!
Vocês encontrarão mais comumente a
notação mais curta nos exemplos que
pesquisarem
Estruturas de Repetição
Como seria solução do nosso
problema usando o for?
Estruturas de Repetição
Vamos substituir print por ellipse com
os parâmetros y, largura e altura que
se repetem, mas precisamos calcular
a posição x
Estruturas de Repetição
A posição x é incrementada em 50px, então
por que não usamos a variável i (que terá
valores 1,2,3,...,10) multiplicada por 50? Assim
teremos: 50, 100, 150, ..., 500
Estruturas de Repetição
Modifique o exemplo anterior para
desenhar a seguinte peça
Estruturas de Repetição
E essa?
Estruturas de Repetição
E para essa peça?
Estruturas de Repetição
Vamos analisar este exemplo!
Estruturas de Repetição
A solução seria desenhar uma elipse
após a outra no mesmo centro
Estruturas de Repetição
A solução seria desenhar uma elipse
após a outra no mesmo centro
Estruturas de Repetição
A solução seria desenhar uma elipse
após a outra no mesmo centro
Estruturas de Repetição
Qual é o padrão na alteração dos
parâmetros da elipse?
Estruturas de Repetição
Não é a posição, pois possuem o
mesmo centro! É o tamanho!
Estruturas de Repetição
Então, vamos usar a variável contadora i para
multiplicar um tamanho qualquer. Assim, a
cada passo da repetição (loop) uma nova
elipse maior será desenhada
Estruturas de Repetição
O código seria assim: em uma janela de 600 x
600 com largura do contorno da elipse em 25
(strokeWeight), centro fixo (300,300), tamanho
variando 100 pixels, repetindo 10x
Estruturas de Repetição
O problema que não aparece nada! Por que?
Estruturas de Repetição
Por causa da ordem de desenho das ellipses
Estruturas de Repetição
Neste caso, a ordem é importante, pois
uma elipse por “esconder” uma outra.
Por exemplo uma elipse maior
desenhada depois de uma menor
Estruturas de Repetição
Então temos que mudar a condição de parada
e a atualização do contador i para começar
da maior para a menor
Estruturas de Repetição
Variável i começa com 10, vai até 1 (i>0) e é
decrementada a cada interação
Estruturas de Repetição
E para essa peça?
Estruturas de Repetição
E para essa peça?
Estruturas de Repetição
E para essa peça?
Estruturas de Repetição
E para essa peça?
Estruturas de Repetição
Resolva os exercícios e compartilha as soluções
e dúvidas nos fóruns de estruturas de repetição
Estruturas de Repetição
O Teste de Mesa é uma forma excelente
para entender melhor o funcionamento das
estruturas de repetição.
https://www.youtube.com/watch?v=Atcfaafvs4M
Estruturas de Repetição
Programação I
George Gomes