Escolar Documentos
Profissional Documentos
Cultura Documentos
2016/1
Atualizado em 11/08/2016
Contedo
Estruturas de repetio
por contagem
Problemas comuns
envolvendo vetores
Contedo
Estruturas de repetio
por contagem
Problemas comuns
envolvendo vetores
Estruturas de Programao
Sequencial
Condicional
Repetio
Estruturas de Repetio
:: Critrios de repetio
Por condio
(while)
Por contagem
(for)
Repete um
bloco de
comandos
enquanto uma
condio for
verdadeira.
Repete um
bloco de
comandos para
cada elemento
de um vetor.
Estruturas de Repetio
:: Exemplos
while
for
x = 1
while (x <= 3):
print(x)
x = x + 1
1
2
3
1
2
3
for
Usamos quando no
sabemos quantas
vezes vamos repetir
o lao.
Exemplo: qual e
onde est o primeiro
nmero negativo de
um vetor?
Usamos quando
temos de processar
todos os elementos
de um vetor.
Exemplo: qual a
mdia dos valores de
um vetor?
Ateno
Funo range
argumento
Dois argumentos
Trs argumentos
Funo range
:: Um argumento
A sequncia:
for i in range(5):
print(i)
Comea
com 0
Termina antes do valor
informado como
argumento
Cresce de um em um
0
1
2
3
4
Funo range
:: Dois argumentos
A sequncia:
for i in range(1,5):
print(i)
Comea
com o
primeiro argumento
Termina antes do valor
informado no segundo
argumento
Cresce de um em um
1
2
3
4
Funo range
:: Trs argumentos
A sequncia:
com o
primeiro argumento
Termina antes do valor
informado no segundo
argumento
O terceiro argumento
o passo de
crescimento
for i in range(0,5,2):
print(i)
Comea
0
2
4
Funo range
:: Outros exemplos
for i in range(3,9,2):
print(i)
3
5
7
for i in range(5,0,-1):
print(i)
5
4
3
2
1
Contedo
Estruturas de repetio
por contagem
Problemas comuns
envolvendo vetores
Problema 1
:: Clculo da Mdia
Clculo da Mdia
[0] [1] [2] [3]
soma = 0
soma = 8
i=0
[0] [1] [2] [3]
...
soma = 12
i= 1
soma = 20
i= 3
media = soma/(i+1)
Tamanho da classe
Clculo da Mdia
:: Script em Python lao for
from numpy import *
# Atribui valores a um vetor 'v'
v = array([8, 4, 2, 6])
# Soma dos valores do vetor. Comeca em ZERO.
soma = 0
# Calcula a soma
for i in range(0, size(v)):
soma = soma + v[i]
# Divide a soma pelo numero de
# elementos do vetor, para determinar a media
media = soma / size(v)
print(media)
Clculo da Mdia
:: Script em Python lao while
from numpy import *
# Atribui valores a um vetor 'v'
v = array([8, 4, 2, 6])
soma = 0
i = 0
# Iniciar acumulador
# Iniciar contador
# Calcula a soma
while (i < size(v)):
soma = soma + v[i]
i = i + 1
# Divide a soma pelo numero de
# elementos do vetor, para determinar a media
media = soma / size(v)
print(media)
Problema 2
:: Inverso dos elementos de um vetor
Inverter um vetor, de
tamanho qualquer,
trocando o 1
elemento com o
ltimo, o 2 com o
penltimo, e assim
sucessivamente.
Ao final, imprimir o
vetor invertido.
88 44 22 66 77 11
[0] [1] [2] [3] [4] [5]
88 44 22 66 77 11
11 44 22 66 77 88
[0] [1] [2] [3] [4] [5]
11 77 22 66 44 88
aux = v[0]
v[0] = v[5]
v[5] = aux
aux = v[1]
v[1] = v[4]
v[4] = aux
aux = v[2]
v[2] = v[3]
v[3] = aux
que i + j = size(v) - 1
# Iniciar contador
print(v)
Contagem de ocorrncias
Por condio
Exemplos: quantos
elementos so pares,
quantos elementos so
maiores, menores ou
iguais a N.
O resultado guardado
em uma varivel
acumuladora simples.
Categorias
nominais
Categorias
ordinais
Exemplo: contar
quantas pessoas so de
cada tipo sanguneo A,
B, AB, O.
O resultado guardado
em um vetor.
Cada categoria deve ser
testada por uma
condio composta
(if/elif) dentro do lao.
Exemplos: contar o
nmero de ocorrncias
de cada face de um
dado em diversos
lanamentos.
O resultado guardado
em um vetor.
Cada categoria deve ser
mapeada em um ndice
do vetor de contagem.
Problema 3
:: Contar por condio
Considere um vetor
de nmeros inteiros
quaisquer.
Quantos nmeros
pares ele contm?
Lao
npar = 0
for i in range(size(a)):
if (a[i] % 2 == 0):
npar = npar + 1
print(npar)
Vetor percorrido
pelo ndice do
elemento
npar = 0
for x in a:
if (x % 2 == 0):
npar = npar + 1
print(npar)
Vetor percorrido
diretamente pelo
valor do elemento
Contar ou somar:
Elementos
de valor
par ou mpar
Elementos em
posies pares ou
mpares do vetor
Nmeros menores,
maiores ou iguais a X
Problema 4
:: Contar por categorias nominais
Generalizao
c1
Categorias
c2
cN
i1
i0
iN-1
ndices
do vetor
Contagem de ocorrncias
:: Categorias nominais
Vetor de
eventos:
...
...
Tamanho
indefinido
Vetor de
contagem:
Tamanho igual ao
n de categorias
0
A
1
B
2
C
3
D
Contagem de ocorrncias
:: Projetar algoritmo
A
Categorias
AB
1
3
ndices do vetor
(i)
Contagem de ocorrncias
:: Script em Python verso 1
from numpy import *
# Cria o vetor de 4 categorias com zeros
cont = zeros(4, dtype=int)
# Leitura do vetor de tipos sanguineos
# Separe o tipo de cada pessoa por virgula
vet = input("Digite os tipos: ").split(',')
# Contagem de ocorrencias
for i in range(size(vet)):
Os elementos do
if (vet[i] == 'A'):
vetor devem ser
cont[0] = cont[0] + 1
separados por
elif (vet[i] == 'B'):
vrgula, sem espao.
cont[1] = cont[1] + 1
elif (vet[i] == 'AB'):
cont[2] = cont[2] + 1
else:
# Para o tipo O
Vetor percorrido
cont[3] = cont[3] + 1
pelo ndice do
# Imprime vetor de contagem
elemento
print(cont)
Contagem de ocorrncias
:: Script em Python verso 2
from numpy import *
# Cria o vetor de 4 categorias com zeros
cont = zeros(4, dtype=int)
# Leitura do vetor de tipos sanguineos
# Separe o tipo de cada pessoa por virgula
vet = input("Digite os tipos: ").split(',')
# Contagem de ocorrencias
for x in vet:
if (x == 'A'):
cont[0] = cont[0] + 1
elif (x == 'B'):
cont[1] = cont[1] + 1
elif (x == 'AB'):
cont[2] = cont[2] + 1
else:
# Para o tipo O
Vetor percorrido
cont[3] = cont[3] + 1
diretamente pelo
# Imprime vetor de contagem
valor do elemento
print(cont)
Problema 5
:: Contar categorias ordinais
Um dado no viciado
de 6 faces lanado
6000 vezes.
Quantas vezes ocorre
cada face?
Generalizao
Generalizao
:: Soluo
Eventos
e2
eN
e1
f(x)
i2
iN
i1
ndices
do vetor
Contagem de ocorrncias
:: Projetar algoritmo
Eventos
(fc)
1 2
3 4
5
6
f(x)
i = fc-1
2
3
4
5
ndices do vetor
(i)
Contagem de ocorrncias
:: Script em Python
from numpy import *
from numpy.random import *
Faces do dado
:: Teste
lancamentos
freq
face
Contar classes de
objetos que seguem
uma ordem:
O
nmero de alunos
que tiraram cada uma
das notas (0 a 10).
Quantidade de faltas
de funcionrios ao
longo da semana
(segunda a sbado).
Problema 5
:: Arte ASCII
Arte ASCII
:: Projetar algoritmo
1.
2.
3.
4.
Arte ASCII
:: Script em Python lao for
# Leitura do tamanho da base
base = eval(input("Tamanho da base: "))
# Controla linha
for j in range(base):
# Controla asteriscos numa linha
for i in range(j + 1):
Limite do 2 lao no mais
print("*", end="")
constante. Passa a se basear
no contador do 1 lao.
# Pula linha
print("")
Arte ASCII
:: Script em Python lao while
# Leitura do tamanho da base
base = eval(input("Tamanho da base: "))
j = 0
# Controla linha
while (j < base):
i = 0
# Controla asteriscos numa linha
while (i < j + 1):
Contador do 2 lao no mais
print("*", end="") constante. Passa a se basear no
contador do 1 lao.
i = i + 1
# Pula linha
print("")
j = j + 1
Problema Extra
:: Fraes contnuas
Determine o valor de
2 com base na
expanso em fraes
contnuas.
1
2=1+
2+
2+
1
2+
Fraes contnuas
0 +
1
1 + +
2
Problema Extra
Projetar algoritmo termo geral
1
2=1+
2+
2+
No se repete
O que se repete?
1
1
2+
1
2+
Problema Extra
Projetar algoritmo
1.
2.
3.
4.
Iniciar a semente
Iniciar o contador de lao
Atualizar o termo geral
Repetir passo 3 enquanto contador no atinge
um nmero de repeties considerado grande
(1000 seria um bom chute?)
Problema Extra
Codificar em Python
# Nmero de iteracoes
N = int(input("No. de iteracoes: "))
# Semente
x = 2
# Parte repetitiva da fracao continua
for i in range(N):
x = 1 / (2 + x)
# Soma parte repetitiva com parcela constante
print(x + 1)
# Comparacao com valor real de raiz de 2
print(2**0.5)
Referncias bibliogrficas
Dvidas?