Simulado de Prova (P2)
Este é um simulado de P2 para a disciplina Algoritmos e Técnicas de Programação:
Comece pensando:
-Como processar cada elemento dentro de um vetor?
-Como processar cada elemento de uma matriz?
-Como processar elementos que seguem um determinado critério?
1) Crie uma função em python que receba por parâmetro dois vetores (listas) de números reais; a função deve calcular a chamada distância quadrática de dois vetores. Este cálculo soma os quadrados das diferenças dos valores correspondentes dos dois vetores, ou seja, (A[0] - B[0])² + (A[1] - B[1])² + (A[2] - B[2])² + … + (A[10] - B[10])². Pronto! A assinatura da função é assim: def distanciaQuadratica (A, B):
Exemplo:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||
A | 0 | 3 | -2 | 7 | 9 | 11 | 15 | 0 | 0 | 0 | 0 | |||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||
B | 0 | 4 | 0 | 7 | 9 | 11 | 15 | 0 | 1 | 0 | 1 |
No exemplo acima, o resultado seria: (0-0)² + (3-4)² + (-2-0)² + (7-7)² + (9-9)² + (11-11)² + (15-15)² + (0-0)² + (0-1)² + (0-0)² + (0-1)² = 7
OBS.: USE COMANDOS DE REPETIÇÃO, POIS OS VETORES PODEM SER DE TAMANHO ARBITRÁRIO (O ACIMA É SÓ UM EXEMPLO).
2) Dado um vetor de números inteiros, deseja-se vasculhá-lo em busca do elemento mais próximo possível de um dado número procurado. Crie uma função em python que receba como parâmetros o vetor e o número procurado, e retorne o índice do elemento que mais se aproxima do procurado.
Sua assinatura seria: def procuraAproximada (vet, procurado):
Exemplo:
índices | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
vet | 58 | 34 | 29 | 12 | -6 | 4 | 15 | 26 | 2 | 8 | 9 | 7 | 4 | -2 | 30 |
Dado o vetor acima, caso procurasse o número 14, o retorno do método seria 6, isto é, o índice relativo ao elemento 15, que é o que mais se aproxima de 14.
Caso procurasse o 29, o retorno seria 2, pois o próprio número foi achado neste índice.
Caso procurasse o 60, o retorno seria 0, isto é, o índice relativo ao elemento 58, que é o que mais se aproxima de 60.
Dica 1: Talvez o exercício fique facilitado se você criar um vetor auxiliar contendo a diferença, em módulo, do número procurado para cada elemento do vetor original (isso não é obrigatório!!). Para o exemplo acima, caso procurasse o número 14, esse vetor auxiliar ficaria assim:
índices | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
vetAux | 44 | 20 | 15 | 2 | 20 | 10 | 1 | 12 | 12 | 6 | 5 | 7 | 10 | 16 | 16 |
Dica 2: para calcular o módulo de um número, você pode usar a função abs(número) ou criar uma lógica para isso com if/else.
3) Dadas duas sequências (vetores) com n números inteiros entre 0 e 9, interpretadas como dois números inteiros de n algarismos, calcular a sequência de números que representa a soma dos dois inteiros.
Exemplo: n = 8,
1ª sequência (vetor) | 8 2 4 3 4 2 5 1 |
2ª sequência | + 3 3 7 5 2 3 3 7 |
1 1 6 1 8 6 5 8 8 |
O protótipo da função é: def soma (seq1, seq2):
DICA: o vetor resposta terá dimensão N+1 por causa do possível vai-um.
4) Crie uma função que receba um vetor de números reais e retornar a média geométrica dos N elementos do vetor:
A média geométrica dos números reais positivos x0,…,xn-1 é definida como sendo a raiz n-ésima do produto destes números, como segue, ou este produto elevado a 1/n:
O protótipo da função é: def mediaGeometrica ( vet ):
DICA: Não se esqueça de usar repetição (loop)!
5) Crie uma função em python para calcular e retornar a soma dos elementos que não estão na borda de uma matriz. Exemplo: dada a matriz abaixo, a função retornará: 6 + 7 + 10 + 11 = 34.
0
1
2
3
0
1
2
3
4
1
5
6
7
8
2
9
10
11
12
3
13
14
15
16
O protótipo da função é: def somaCentro ( mat ):
Use repetição para criar seu código. Lembre-se que a função deverá funcionar para matrizes de quaisquer tamanhos.
6) Crie uma função em python para calcular e retornar a soma dos elementos da borda de uma matriz. Exemplo: dada a matriz abaixo,
0
1
2
3
0
1
2
3
4
1
5
6
7
8
2
9
10
11
12
3
13
14
15
16
a função retornará: 1 + 2 + 3 + 4 + 5 + 8 + 9 + 12 + 13 + 14 + 15 + 16 = 102.
O protótipo da função é: def somaBorda ( mat ):
Use repetição para criar seu código. Lembre-se que a função deverá funcionar para matrizes de quaisquer tamanhos.
7) Crie uma função em C para calcular e retornar a soma dos elementos da diagonal secundária de uma matriz quadrada, de dimensão arbitrária N, ou seja, ela é NxN. Exemplo:
0
1
2
3
0
1
2
3
4
1
5
6
7
8
2
9
10
11
12
3
13
14
15
16
Para a matriz acima, a função retornará: 4 + 7 + 10 + 13 = 34.
O protótipo da função é: def somaDiagonalSec ( mat ):
Use repetição para criar seu código. Lembre-se que a função deverá funcionar para matrizes de quaisquer tamanhos.
8) Crie uma função para calcular e retornar a soma dos elementos pares de uma matriz que estão em linhas de índices pares. A função deve realizar esta operação para uma matriz de tamanho qualquer (não vale resolver somente para uma matriz pequena, ou seja, USE REPETIÇÕES!!!). Exemplo: dada a matriz abaixo,
0
1
2
3
0
2
7
5
9
1
13
6
2
-1
2
9
4
14
5
3
13
1
5
16
a função retornará: 2 + 4 + 14 = 20. O protótipo da função é: def soma ( mat ):
9) Crie uma função para calcular e retornar a soma dos elementos ímpares de uma matriz que estão em linhas de índices ímpares. A função deve realizar esta operação para uma matriz de tamanho qualquer (não vale resolver somente para uma matriz pequena, ou seja, USE REPETIÇÕES!!!). Exemplo: dada a matriz abaixo,
0
1
2
3
0
2
7
5
9
1
13
6
2
-1
2
9
4
14
5
3
13
1
5
16
a função retornará: 13 + (-1) + 13 + 1 + 5 = 31. O protótipo da função é: def soma ( mat )
10) Crie um programa em Python que leia um número e imprima a tabuada deste número:
Exemplo: De qual número eu mostrarei a tabuada? 7
Tabuada do 7
1 X 7 = 7
2 X 7 = 14
…
9 X 7 = 63
10 X 7 = 70
11) Crie uma função que receba um valor N e retorne o valor da expressão abaixo:
Dicas: Para N=1 ou menos, o programa calcularia e mostraria simplesmente 1
Para N=3, o programa calcularia e mostraria 1 + 3 = 4
Para N=5, o programa calcularia e mostraria 1 + 3 + 5 = 9
Para N=6 (ou qualquer valor par), o programa calcularia e mostraria até o N-1, ou seja, 1 + 3 + 5 = 9
12) Crie uma função que retorne o quanto dois vetores (recebidos como parâmetro) são idênticos,
com a resposta em porcentagem. Veja os exemplos, para vetores de tamanho N = 5:
Exemplos:
0 | 1 | 2 | 3 | 4 | 2) | 0 | 1 | 2 | 3 | 4 | |||||||
A | 2 | 4 | 3 | 7 | 9 | C | 1 | 2 | 3 | 4 | 5 | ||||||
0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | ||||||||
B | 2 | 4 | 3 | 7 | 9 | D | 1 | 7 | 3 | 4 | 8 | ||||||
semelhanca(A, B) = 100 | semelhanca(C, D) = 60 | ||||||||||||||||
No primeiro exemplo acima, os vetores A e B são idênticos 100%, ou seja, dos 5 elementos,
5 são iguais entre eles, considerando as mesmas posições.
No segundo exemplo acima, os vetores C e D são idênticos 60%, ou seja, dos 5 elementos,
3 são iguais entre eles, considerando as mesmas posições.
OBS.: USE COMANDOS DE REPETIÇÃO, POIS OS VETORES PODEM SER DE TAMANHO
QUALQUER (O ACIMA É SÓ UM EXEMPLO).
13) Crie uma função em Python que inverta uma string, sem usar a função reverse, que já está pronta. Exemplos:
inverter(“ABC”) → “CBA”
inverter(“XYZ”) → “ZYX”
14) Você recebeu a tarefa de implementar uma função Python que, dado um par de coordenadas latitude-longitude (referente a um ponto no mapa), encontre a cidade mais próxima desse ponto, a partir de um dicionário de cidades e suas respectivas coordenadas.
Considere a seguinte fórmula da distância, por razões de simplicidade:
, onde lat1 e long1 são as coordenadas da cidade 1, e lat2 e long2 são as coordenadas da cidade 2.
A função a ser implementada deve receber um par de coordenadas do ponto de referência (latitude e longitude) e um dicionário contendo as cidades e suas coordenadas, no formato:
cidades = {
"São Paulo": (-23.5505, -46.6333),
"Rio de Janeiro": (-22.9068, -43.1729),
"Belo Horizonte": (-19.9167, -43.9345),
....
}
A função deve retornar o nome da cidade mais próxima. Sua assinatura será:
def cidadeMaisProxima(lat_ref, long_ref, cidades):
Exemplo de aplicação: | Exemplo de saída: |
cidadeMaisProxima(-23.0, -43.0, cidades)→ | "Rio de Janeiro" |
cidadeMaisProxima(-24.0, -47.0, cidades)→ | "São Paulo" |
15) Escreva uma função que receba duas listas de números inteiros, A e B, e retorne uma nova lista contendo os números que estão em ambas as listas (interseção). Não use conjuntos (sets) para resolver a questão.
Exemplo: intersecao([1, 2, 3, 4], [3, 4, 5, 6]) → [3, 4]
intersecao([10, 20, 30], [15, 25, 35]) → [ ]
Dica: o operador “in” pode descobrir se um elemento está ou não numa lista:
2 in [1,2,3] → True,
2 in [3,4,5] → False
16) Uma lista é chamada de simétrica se ela puder ser lida da mesma forma da esquerda para a direita e da direita para a esquerda. Exemplos:
[1, 2, 3, 2, 1] → simétrica
[4, 5, 6] → não simétrica
['a', 'b', 'b', 'a'] → simétrica
['abacaxi'] → simétrica
[ ] → simétrica
Crie uma função chamada simetrica(lista) que recebe uma lista e retorna True se ela for simétrica e False caso contrário.
17) Você está trabalhando num pequeno sistema de catálogo de produtos, em Python, que usa uma lista de dicionários, onde cada produto tem:
-nome: nome do produto (string)
-preco: preço em reais (float)
-categoria: tipo do produto (string)
Sua tarefa é fazer duas funcionalidades:
a) Filtrar os produtos por uma palavra-chave no nome (ex: "arroz").
def filtrar_por_nome(lista, palavra) → retorna a sublista com os produtos que contêm a palavra-chave em sua descrição.
b) Buscar o produto mais caro do catálogo.
def produto_mais_caro(lista) → retorna um dicionário (elemento da lista) com os dados do produto de maior preço da lista.
Para realizar essas tarefas, vamos empregar a lista de dicionários a seguir:
{'nome': 'Arroz Integral', 'preco': 5.90, 'categoria': 'Alimentos'},
{'nome': 'Azeite de Oliva', 'preco': 17.90, 'categoria': 'Alimentos'},
{'nome': 'Café Torrado', 'preco': 9.80, 'categoria': 'Alimentos'},
{'nome': 'Shampoo Neutro', 'preco': 12.50, 'categoria': 'Higiene'},
{'nome': 'Fio Dental 50m', 'preco': 5.60, 'categoria': 'Higiene'},
{'nome': 'Detergente Limão', 'preco': 3.50, 'categoria': 'Limpeza'},
{'nome': 'Álcool 70%', 'preco': 4.90, 'categoria': 'Limpeza'},
{'nome': 'Liquidificador 500W', 'preco': 149.00, 'categoria': 'Eletrodomésticos'},
{'nome': 'Ventilador Mesa 30cm', 'preco': 159.90, 'categoria': 'Eletrodomésticos'}
]
Se chamarmos filtrar_por_nome(produtos, “arroz”), ela retornará:
[{'nome': 'Arroz Integral', 'preco': 5.90, 'categoria': 'Alimentos'}]
Se chamarmos produto_mais_caro(produtos), ela retornará:
{'nome': 'Ventilador Mesa 30cm', 'preco': 159.90, 'categoria': 'Eletrodomésticos'}
18) Colabore com a automatização de um novo tomógrafo do Hospital das Clínicas, fazendo um programa em Python que conte quantas estruturas que representam tumores existem numa imagem:
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
A imagem do tomógrafo à esquerda tem 4 tumores, que são assim:
0 | 1 | 0 |
1 | 1 | 1 |
0 | 1 | 0 |
Observação 1: Os “1”s soltos são estruturas que não devem ser contadas.
Observação 2: Imagine que a matriz já está na memória e não precisa ser lida.
*Gabarito de algumas das questões acima
Comentários
Postar um comentário