Você está na página 1de 72

Programação I

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

50px 50px 50px 50px 50px 50px 50px 50px 50px

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)

Exemplo de um algoritmo que lista os


números inteiros de 1 a 10 em pseudocódigo

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

Com esse laço, nós conseguimos


especificar em uma única linha, todas as
informações necessárias para a repetição
de ações (instruções)

Estruturas de Repetição
Vamos olhar com calma a estrutura:

para i de 1 até 10 passo 1 faça

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

para i de 1 até 10 passo 1 faça

Estruturas de Repetição
...e esse tal ’passo 1’, o que significa?

para i de 1 até 10 passo 1 faça

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.

passo 1 significa que a variável i será incrementada de


uma unidade a cada passada do laço.

para i de 1 até 10 passo 1 faça

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:

ele usa uma variável contadora


ele dá um valor inicial a essa variável
ele modifica o valor dessa variável a cada
passada do laço
ele verifica se ainda pode continuar no laço

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:

para i de 1 até 9 passo 1 faça


escreva(i);

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

for(inicialização; condição; atualização){


comando1;
comando2;

}

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.

Aqui está um link para um vídeo mostrando


um Teste de Mesa de um programa usando
o laço for:

https://www.youtube.com/watch?v=Atcfaafvs4M

Estruturas de Repetição
Programação I
George Gomes

Você também pode gostar