You are on page 1of 45

ICC901 Introduo Programao de Computadores

IEC081 Introduo Cincia dos Computadores


IEC037 Introduo Programao de Computadores

2016/2
Aula 06 Estruturas de Repetio por Contagem
Atualizao: 24/01/2017

Fonte da imagem: https://www.codeschool.com/courses/forging-ahead-with-asp-net-core


Contedo

Estruturas de repetio
por contagem

Problemas comuns
envolvendo vetores
Contedo

Estruturas de repetio
por contagem

Problemas comuns
envolvendo vetores
Estruturas de Programao
Qualquer programa de computador pode ser escrito
combinando-se os trs tipos bsicos de estruturas de
programao:

Sequencial Condicional Repetio


Estruturas de Repetio
:: Critrios de repetio
Por condio Por contagem
(while) (for)
Repete um Repete um bloco
bloco de de comandos
comandos para todos os
enquanto uma elementos de
condio for uma sequncia
verdadeira. de valores.
Formato do comando for
A cada repetio, a
varivel assume um Equivale ao operador
elemento da Sequncia , na matemtica de
conjuntos
Sinal de

for in :
dois
pontos!

Devem estar
indentados em
relao ao for

Restante do programa Se Sequncia tem


tamanho n, ento o lao
Quando todos os elementos repetido n vezes
da Sequncia forem
testados, o lao acaba
Lao for
:: Exemplos

for i in [1,2,3]: for ch in "Python":


print(i) print(ch)

1 P
y
2 t
3 h
o
n
Lao while for

while for

x = 1 for x in [1,2,3]:
while (x <= 3): print(x)
print(x)
x = x + 1

1 1
2 2
3 3
Quando usar while ou for?

while for
til quando no til quando temos de
sabemos quantas processar todos os
vezes vamos repetir o elementos de um
lao. vetor.
Exemplo: qual e Exemplo: qual a
onde est o primeiro mdia dos valores de
nmero negativo de um vetor?
um vetor?
Ateno
Embora permitidas pelo Python, as
seguintes prticas NO sero
estudadas, pois no so formas de
programao estruturada:
Comando else como
alternativa aos comandos
while e for.
Comando break.
Comando continue.
Funo range
A funo range cria uma sequncia de nmeros inteiros
para serem usados no lao for.
A funo range pode ser usada de trs maneiras:
Um argumento
Dois argumentos
Trs argumentos
Funo range
:: Um argumento
A sequncia:
Comea com zero for i in range(5):
(implcito) print(i)

Termina antes do valor


informado como
argumento
Cresce de um em um
0
1
2
3
4
Funo range
:: Dois argumentos
A sequncia:
Comea com o for i in range(1,5):
primeiro argumento print(i)

Termina antes do valor


informado no segundo
argumento
Cresce de um em um
1
2
3
4
Funo range
:: Trs argumentos
A sequncia:
Comea com o for i in range(0,5,2):
primeiro argumento print(i)

Termina antes do valor


informado no segundo
argumento
O terceiro argumento
o passo de 0
crescimento 2
4
Funo range no gera vetor!

v = range(5) from numpy import *


print(v) v = arange(5)
print(v)
No cria um vetor, mas
apenas uma sequncia
de controle do lao for.

range(0, 5) [0 1 2 3 4]
Contedo

Estruturas de repetio
por contagem

Problemas comuns
envolvendo vetores
Problema 1
:: Clculo da Mdia
As notas da turma em uma avaliao esto armazenadas
em um vetor.
Como calcular a mdia da turma?
Clculo da Mdia
[0] [1] [2] [3] [0] [1] [2] [3]
0 8 4 2 6 1 8 4 2 6

soma = 0 soma = 8
i=0
[0] [1] [2] [3] [0] [1] [2] [3]
2 8 4 2 6 ... 4 8 4 2 6

soma = 12 soma = 20
i= 1 i= 3
media = soma/size(v) Tamanho da turma
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(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 # Iniciar acumulador


i = 0 # 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.
Inverso dos elementos de um vetor
[0] [1] [2] [3] [4] [5]
0 88 44 22 66 77 11
[0] [1] [2] [3] [4] [5]
aux = v[0]
1 88 44 22 66 77 11 v[0] = v[5]
v[5] = aux

[0] [1] [2] [3] [4] [5]


aux = v[1]
2 11 44 22 66 77 88 v[1] = v[4]
v[4] = aux

[0] [1] [2] [3] [4] [5]


aux = v[2]
3 11 77 22 66 44 88 v[2] = v[3]
v[3] = aux
Inverso dos elementos de um vetor
:: Projetar algoritmo
Qual o critrio de parada?
Vetor com tamanho par?
Vetor com tamanho mpar?

Quais ndices i e j devem ser trocados em uma iterao


qualquer?
Note que i + j = size(v) 1
Logo: j = size(v) 1 - i
Inverso dos elementos de um vetor
:: Script em Python lao for
from numpy import *
# Atribui valores a um vetor 'v'
v = array([88, 44, 22, 66, 77, 11])

# Inverte o vetor 'v'


for i in range(size(v)//2):
j = size(v) 1 - i
aux = v[i]
v[i] = v[j]
v[j] = aux

print(v)
Contagem de ocorrncias

Categorias Categorias
Por condio
nominais ordinais
Exemplos: Exemplo: Exemplo:
quantos elementos contar quantas contar o nmero de
so pares pessoas so de cada ocorrncias de cada
quantos elementos tipo sanguneo A, B, face de um dado.
so maiores, menores AB, O. O resultado guardado
ou iguais a N. O resultado guardado em um vetor de
O resultado guardado em um vetor de categorias.
em uma varivel categorias. Cada categoria
acumuladora simples. Cada categoria mapeada em um ndice
testada por uma do vetor de contagem.
condio if-elif.
Problema 3
:: Contar por condio
Leia um vetor de
nmeros inteiros.
Quantos nmeros pares
h no vetor?
Contar por condio
:: Projetar algoritmo 1/3

Qual o melhor tipo de lao, while ou for?

Lao for, pois todos os elementos devem ser


verificados.
Contar por condio
:: Projetar algoritmo 2/3

Quais contadores devo usar?

Dois contadores:
i: contador do lao for, que
percorre o vetor
npar: conta os nmeros pares
existentes no vetor
Contar por condio
:: Projetar algoritmo 3/3

Em que ponto do programa devo


atualizar cada contador?

i: automtico dentro do lao for


npar: somente quando o nmero lido
for par. Isso implica que devemos usar
um if dentro do lao for.
Contar por condio
:: Script em Python verso 1
from numpy import *

vet = array(eval(input("Vetor: ")))

# Contador de nos. pares


npar = 0

for i in range(size(vet)):
if (vet[i] % 2 == 0):
npar = npar + 1 No lao for, o vetor vet
percorrido pelo ndice do
elemento
print(npar)
Contar por condio
:: Script em Python verso 2
from numpy import *

vet = array(eval(input("Vetor: ")))

# Contador de nos. pares


npar = 0

for x in vet:
if (x % 2 == 0):
npar = npar + 1 No lao for, o vetor vet
percorrido pelo valor do
elemento
print(npar)
Contar por condio
:: Variaes
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
Leia um vetor com os tipos sanguneos (A, B, O e AB) de N
pessoas.
Quantas pessoas tm cada tipo de sangue?
Contar por categorias nominais
:: Projetar algoritmo 1/2
0 1 2 3 4 5 6 7 8 ...
Vetor de A A AB B A B O O AB ...
eventos:
Tamanho
indefinido

Vetor de Tamanho igual ao


contagem: n de categorias
0 1 2 3
A B O AB
Contar por categorias nominais
:: Projetar algoritmo 2/2
vet 0 cont
A
B 1
3 ndices do vetor
AB (i)
O 2

1. Crie um vetor de contagem cont, de N = 4 elementos, todos


iguais a zero.
2. Leia o tipo sanguneo.
3. Para cada tipo lido, incremente em uma unidade o elemento
de ndice i do vetor (cont[i]), pela correspondncia acima.
Contar por categorias nominais
:: 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
vet = input("Tipos de sangue: ").upper().split(',')
# Contagem de ocorrencias
for i in range(size(vet)): Os elementos do vetor
if (vet[i] == 'A'): de entrada devem ser
cont[0] = cont[0] + 1 separados por vrgula,
elif (vet[i] == 'B'): sem espao.
cont[1] = cont[1] + 1
elif (vet[i] == 'O'):
cont[2] = cont[2] + 1
elif (vet[i] == 'AB'): Vetor percorrido pelo
cont[3] = cont[3] + 1 ndice do elemento
print(cont)
Contar por categorias nominais
:: 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
vet = input("Tipos de sangue: ").upper().split(',')
# Contagem de ocorrencias
for x in vet: Os elementos do vetor
if (x == 'A'): de entrada devem ser
cont[0] = cont[0] + 1 separados por vrgula,
elif (x == 'B'): sem espao.
cont[1] = cont[1] + 1
elif (x == 'O'):
cont[2] = cont[2] + 1
elif (x == 'AB'): Vetor percorrido pelo
cont[3] = cont[3] + 1 valor do elemento
print(cont)
Contar por categorias nominais
:: Variaes
Contar grupos sem
ordenao:
Quantidade de
animais.
Quantidade de cores
de um objeto.
Cor dos olhos, da pele,
do cabelo, etc. de um
grupo de pessoas.
Problema 5
:: Contar por categorias ordinais
Um dado no viciado de
6 faces lanado 6000
vezes.
Quantas vezes ocorre
cada face?
Contar por categorias ordinais
:: Projetar algoritmo
i 0 1 2 3 4 5
cont

face

Crie um vetor de contagem cont, de N = 6 elementos,


todos inicialmente iguais a zero.
Para cada face sorteada, incrementar o elemento de
ndice i=face-1 do vetor cont.
Contar por categorias ordinais
:: Script em Python verso 1
from numpy import *
from numpy.random import *

# Vetor aleatorio contendo os lancamentos do dado


dado = randint(1, 7, size = 6000)

# Vetor de contagem com 6 elementos


cont = zeros(6, dtype=int)

# Contagem de ocorrencias O valor do elemento


for i in range(size(dado)): do vetor contado
face = dado[i] (dados) ajuda a
cont[face-1] = cont[face-1] + 1 encontrar o ndice do
vetor de contagem
# Imprime vetor de frequencia
print(cont)
Contar por categorias ordinais
:: Script em Python verso 2
from numpy import *
from numpy.random import *

# Vetor aleatorio contendo os lancamentos do dado


dado = randint(1, 7, size = 6000)

# Vetor de contagem com 6 elementos


cont = zeros(6, dtype=int)

# Contagem de ocorrencias O valor do elemento


for x in dado: do vetor contado
face = x (dados) ajuda a
cont[face-1] = cont[face-1] + 1 encontrar o ndice do
vetor de contagem
# Imprime vetor de frequencia
print(cont)
Contar por categorias ordinais
:: Variaes
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 em
cada dia da semana
(segunda a sbado).
Referncias bibliogrficas
Menezes, Nilo Ney Coutinho (2014). Introduo
Programao com Python, 2 ed. Editora Novatec.
HETLAND, Magnus Lie (2008). Beginning Python: From
Novice to Professional. Springer eBooks, 2 edio.
Disponvel em: http://dx.doi.org/10.1007/978-1-4302-
0634-7.
Horstmann, Cay & Necaise, Rance D. (2013). Python for
Everyone. John Wiley & Sons.
Dvidas?

You might also like