Buscar

Parte 2 - revisao 3 - Vetores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

Prévia do material em texto

Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Biológicas
Departamento de Computação
BCC701
Programação de Computadores I
Semestre: 2021-01
Aula Prática – Estrutura Homogênea: VETOR (2)
Pré-requisitos:
• Estar familiarizado com o conteúdo das aulas anteriores e ter realizado as tarefas correspondentes.
• Ler as seções 7.1, 7.3.1, 7.3.3 e 7.3.6 do livro texto da disciplina.
• Assistir os v́ıdeos e/ou aulas teóricas correspondentes.
Tarefa 1: Manipulando vários vetores
É muito comum a necessidade de manipular vários vetores de forma conjunta. Imagine a seguinte situação:
Programa 1: Crie um programa que fará o processamento do número de vacinas aplicadas em duas cidades.
Para cada cidade será fornecido um vetor, contendo o número de vacinas aplicadas a cada semana, durante
um certo peŕıodo de tempo. O programa deve imprimir a cidade com o maior número de vacinas aplicadas
em cada semana. Os vetores fornecidos precisam ter a mesma quantidade de elementos.
Observe que o processamento ocorre pela comparação dos valores das duas cidades para cada semana.
Então, temos a necessidade de um laço para processar cada semana. Ou seja, apesar de serem dois vetores,
necessitamos de apenas um laço. Obviamente, uma restrição para este programa é que os vetores tenham a
mesma quantidade de elementos. Nosso programa 1 pode ser implementado desta maneira:
1 from biblioteca import *
2
3 Cidade1 = preencherVetor(input(’Dados da Cidade 1: ’), ’int’)
4 Cidade2 = preencherVetor(input(’Dados da Cidade 2: ’), ’int’)
5 if len(Cidade1) != len(Cidade2):
6 print(’Dados incompatíveis’)
7 else:
8 print(’Cidade que mais vacinou: ’)
9 for s in range(len(Cidade1)): # para cada semana s
10 print(f’. Semana {s+1}: ’, end=’’)
11 if Cidade1[s] > Cidade2[s]: # comparação entre cidades
12 print(’Cidade 1’)
13 elif Cidade2[s] > Cidade1[s]: # comparação entre cidades
14 print(’Cidade 2’)
15 else:
16 print(’empate’)
Observe que nas linhas 1 e 2 colocamos o input dentro da chamada da função preencherVetor, como já
faźıamos com outras funções de conversão de dados, como int e float. Depois das entradas, avaliamos se elas
são válidas, comparando o tamanho dos dois vetores (if da linha 5). No caso de entradas válidas, fazemos
o processamento da sáıda (bloco do else da linha 7). Nele, temos apenas um laço for que faz acesso aos
dois vetores, conforme comentado anteriormente, para fazer a comparação do número de vacinas entre as duas
cidades. Para este tipo de situação teremos sempre um único laço, independente do número de vetores.
1
Veja um exemplo de execução:
Exemplo 1:
Dados da Cidade 1: 1, 2, 3, 4, 5, 6
Dados da Cidade 2: 2, 1, 3, 5, 4, 6
Cidade que mais vacinou:
. Semana 1: Cidade 2
. Semana 2: Cidade 1
. Semana 3: empate
. Semana 4: Cidade 2
. Semana 5: Cidade 1
. Semana 6: empate
Implemente o programa 1 no Thonny e execute utilizando o depurador para entender perfeitamente o que
ele faz em detalhes.
Agora imaginaremos uma situação diferente:
Programa 2: Crie um programa que fará o processamento do número de vacinas aplicadas em uma cidade.
Será fornecido um vetor contendo o número de vacinas aplicado a cada semana, durante um certo peŕıodo
de tempo. Para cada semana, a partir da segunda, o programa deve imprimir a quantidade de semanas
anteriores que aplicaram um número maior de vacinas.
Para este segundo programa, temos apenas um vetor. Porém, devido ao tipo de processamento solicitado,
teremos um laço para cada semana posterior à semana 1 (“à partir da segunda semana”). Para cada semana
destas, precisaremos computar a quantidade de semanas anteriores em que houve mais vacinas aplicadas, o que
nos leva à necessidade de um outro laço. Nosso programa 2 pode ser implementado desta maneira:
1 from biblioteca import *
2
3 Vacinas = preencherVetor(input(’Dados de vacinação da cidade: ’), ’int’)
4 print(’Resultados: ’)
5 for s in range(1, len(Vacinas)): # para cada semana a partir da 2a
6 qtd = 0
7 for ant in range(s): # semanas anteriores a s
8 if Vacinas[ant] > Vacinas[s]:
9 qtd += 1
10 print(f’. Semana {s+1}: {qtd}’)
Observe que, apesar de termos apenas um vetor, tivemos a necessidade de implementar dois laços. O
primeiro laço (linha 5) determina as iterações necessárias para cada semana (variável contadora s), a partir da
segunda semana (́ındice inicial 1). Já o segundo laço (linha 7), dentro do primeiro, é necessário para realizar a
contabilidade do número de semanas anteriores a s (variável contadora ant, de 0 até s-1, ou seja, range(s)).
Veja 3 exemplos de execução:
Exemplo 1:
Dados de vacinação da cidade: 1, 2, 3, 4, 5, 6
Resultados:
. Semana 2: 0
. Semana 3: 0
. Semana 4: 0
. Semana 5: 0
. Semana 6: 0
2
Exemplo 2:
Dados de vacinação da cidade: 2, 1, 3, 5, 4, 6
Resultados:
. Semana 2: 1
. Semana 3: 0
. Semana 4: 0
. Semana 5: 1
. Semana 6: 0
Exemplo 3:
Dados de vacinação da cidade: 6, 4, 5, 3, 1, 2
Resultados:
. Semana 2: 1
. Semana 3: 1
. Semana 4: 3
. Semana 5: 4
. Semana 6: 4
Implemente o programa 2 no Thonny e execute utilizando o depurador para entender perfeitamente o que
ele faz em detalhes.
Moral da história:
Não é a quantidade de vetores manipulados que determina a quantidade de laços a serem utilizados para
implementar a solução. Tudo depende do problema a ser resolvido e da lógica necessária para realizar o
processamento exigido.
3
Questão 1
Sua tia vende dois tipos de salgados, coxinha e quibe. Com o aumento dos pedidos, ela contrata vendedores
temporários. Ela deseja premiar o vendedor que conseguir o maior lucro e dispensar o que conseguir o menor
lucro. A fim de ajudá-la nesta tarefa, você vai implementar um programa que funciona da seguinte forma:
1. Faz a leitura de quantas unidades de coxinhas foram vendidas por cada vendedor, separadas por v́ırgula,
em linha única. Em seguida, preenche-se um vetor com as quantidades lidas, utilizando-se a função
preencherVetor (definida na Seção 7.3.3);
2. Realizar o mesmo procedimento anterior para o preenchimento das vendas de quibe. Dica: Os dois vetores
estão associados pelos seus ı́ndices, ou seja, o ı́ndice 0 dos dois vetores armazena as vendas de cada salgado
para o primeiro vendedor, o ı́ndice 1 armazena as vendas do segundo vendedor e assim por diante;
3. Valida os dois vetores, verificando se eles possuem a mesma quantidade de elementos. Caso inválido,
imprime a mensagem “Dados de vendas inválidos”. Caso contrário:
(a) Lê dois valores reais, representando os valores dos lucros por unidade de coxinha e de quibe, respec-
tivamente;
(b) Preenche um terceiro vetor, contendo o valor arrecadado por cada vendedor. Para isso, você deve
implementar a função calculaLucros, que recebe os dois vetores de vendas e os dois valores de
lucro, e retorna um vetor contendo o lucro total de cada vendedor. Arredonde os valores dos lucros
totais para duas casas decimais, usando a função round(valor, 2), onde: “valor” corresponde a
cada lucro calculado e “2” é o número de casas decimais de precisão no arredondamento;
(c) Imprime o vetor preenchido no item anterior, usando a função print. Observe que os valores dos
lucros foram arredondados na função, então, não é necessário realizar formatação dos números na
impressão.
(d) Determina e imprime o maior e o menor lucros armazenados no vetor, formatando os valores com 2
casas decimais.
Siga o padrão dos exemplos mostrados abaixo.
Exemplo 1:
Vendas de coxinhas: 5, 2, 3, 10, 8
Vendas de quibes: 7, 3, 2, 8, 10, 5
Dados de vendas inválidos
Exemplo 2:
Vendas de coxinhas: 5, 2, 3, 10, 8
Vendas de quibes: 7, 3, 2, 8, 10
Lucro por unidade de coxinha: R$ 4.5
Lucro por unidade de quibe: R$ 2.8
Lucros: [42.1, 17.4, 19.1, 67.4, 64.0]
Maior lucro: R$ 67.40
Menor lucro: R$ 17.40
Exemplo 3:
Vendas de coxinhas: 6, 2, 10, 4, 7, 1
Vendas de quibes: 5, 4, 8, 10, 8, 2
Lucro por unidade de coxinha: R$ 3.58
Lucro por unidade de quibe: R$ 2.1
Lucros: [31.98, 15.56, 52.6,35.32, 41.86, 7.78]
Maior lucro: R$ 52.60
Menor lucro: R$ 7.78
4
Questão 2
No enfrentamento à COVID-19, um importante parâmetro de avaliação é a “Redução” (R) ou “Aumento”
(A) do número de mortes contabilizado ao longo das semanas. Implemente um programa que lê o número de
mortes de cada macro-região na semana anterior e na última semana. Estas informações são definidas em dois
vetores de números inteiros, cuja entrada é feita a partir de um texto para cada vetor e o seu preenchimento
com a função preencherVetor (definida na Seção 7.3.3). O programa deve verificar se os vetores possuem o
mesmo número de elementos. Em caso afirmativo, ele processa os dados e gera o resultado descrito a seguir.
Caso contrário, ele apenas imprime uma mensagem de erro, conforme os exemplos de execução a seguir.
Os dois vetores preenchidos estão associados pelos seus ı́ndices e cada ı́ndice representa uma macro-região do
estado. A semana anterior e a semana atual de cada macro-região são comparadas e um novo vetor é preenchido
com as letras ‘R’, ‘A’ ou ‘E’, representando “Redução”, “Aumento” ou “Estabilidade”, respectivamente. Este
novo vetor é obtido por uma função implementada por você, a comparaVetores, que recebe os dois vetores e
retorna o novo vetor preenchido. Em seguida, o resultado é impresso no terminal utilizando a função print.
Por fim, o estado em análise é classificado como “Onda Vermelha” se a quantidade de “reduções” for menor do
que a quantidade de “aumentos” no número de mortes, “Onda Verde” se for maior, e “Onda Amarela” se for
igual. A classificação é obtida por uma função implementada por você, a classificaEstado, que recebe o vetor
resultante das comparações e retorna a classificação do estado, conforme as ondas definidas anteriormente).
Siga o padrão dos exemplos mostrados abaixo.
Exemplo 1:
Número de mortes na semana anterior: 250, 300, 210, 15, 20
Número de mortes na semana atual: 200, 302
Número de elementos incompatível (5 != 2)
Exemplo 2:
Número de mortes na semana anterior: 250, 300, 210, 15, 20
Número de mortes na semana atual: 200, 302, 154, 3, 20
Classificações das macro−regiões:
[’R’, ’A’, ’R’, ’R’, ’E’]
Classificação do estado: Onda Verde
Exemplo 3:
Número de mortes na semana anterior: 250, 300, 210, 15, 20
Número de mortes na semana atual: 250, 300, 210, 15, 20
Classificações das macro−regiões:
[’E’, ’E’, ’E’, ’E’, ’E’]
Classificação do estado: Onda Amarela
5
Questão 3
A prefeitura te contratou para coordenar a vacinação de seus habitantes através de etapas baseadas em
faixas etárias. Para realizar esta tarefa, você implementará um programa que contabilizará o número de vacinas
necessárias em cada etapa. As etapas definidas são: (1) ≥ 85 anos; (2) < 85 e ≥ 65 anos; (3) < 65 e ≥ 45 anos;
e (4) < 45 e ≥ 18 anos. Primeiro você precisa ler um vetor contendo as idades dos moradores cadastrados,
a partir de uma string contendo todas as idades e depois convertendo a string para um vetor de inteiros,
usando a função preencherVetor (definida na Seção 7.3.3). Em seguida, você contabiliza a quantidade de
moradores em cada faixa etária. Esta tarefa será implementada na função contabilizarDemandas, que recebe
o vetor de idades e retorna um novo vetor contendo a quantidade contabilizada para cada faixa etária (ou
seja, cada uma das 4 faixas etárias representa um elemento deste vetor). Para iniciar este “vetor contador”
com o seu valor padrão, você utilizará a função criarVetor (definida na Seção 7.3.1). As demandas de cada
faixa etária, definidas no “vetor contador” obtido, são impressas no terminal conforme os exemplos de execução.
Você também fará a leitura da quantidade de vacinas dispońıveis para cada etapa, também em um vetor, lido
inicialmente como string e convertido posteriormente para um vetor de inteiros. Em seguida, você avaliará
se todas as faixas etárias poderão ser atendidas. Isso é feito através de comparações dos pares de demanda
e disponibilidade representados pelos dois vetores correspondentes. Esta tarefa será implementada na função
avaliaAtendimento, que recebe os dois vetores (“contador” e disponibilidade de vacinas) e retorna um valor
Boolenano True, indicando que é posśıvel realizar a vacinação de todas as faixas etárias, ou False, caso
contrário. Dica: se pelo menos uma faixa etária não pode ser atendida, a resposta da função é False. Vacinas
destinadas a uma etapa não podem ser usadas em outra.
Siga o padrão dos exemplos mostrados abaixo e considere que as entradas são sempre válidas.
Exemplo 1:
Defina as idades dos habitantes: 10, 15, 25, 35, 45, 55, 65, 85, 90
Demandas a serem atendidas por faixa etária:
. >= 85.........: 2
. < 85 e >= 65.: 1
. < 65 e >= 45.: 2
. >= 18.........: 2
Defina as disponibilidades de vacinas: 3, 1, 2, 4
A quantidade de vacinas é suficiente.
Exemplo 2:
Defina as idades dos habitantes: 1, 95, 20, 40, 50, 0, 60, 80, 30, 85
Demandas a serem atendidas por faixa etária:
. >= 85.........: 2
. < 85 e >= 65.: 1
. < 65 e >= 45.: 2
. >= 18.........: 3
Defina as disponibilidades de vacinas: 5, 1, 1, 1
Infelizmente, precisaremos de mais vacinas.
6

Continue navegando