Você está na página 1de 5

Prova 1 - Computação I - Python

Turma: Engenharia Metalúrgica


22 de junho de 2022

Instruções:
• A prova é individual e com consulta a uma folha A4 preparada pelos alunos.
• Tempo de duração da prova é de duas horas.

1 Funções e Condicionais
1. Faça uma função que calcule a distância euclidiana entre dois pontos em um plano dadas suas
coordenadas. Considere que o usuário possa passar apenas um ponto para a função, pois deseja
saber a distância o um ponto e a origem.

2. Faça uma função que calcule o perı́metro de um triângulo retângulo dados os catetos.
3. Defina uma função que calcule a área de um triângulo retângulo dadas a base e altura. Teste
pelo menos para os seguintes pares de entrada:
• 12 e 8; a resposta é 48;
• 8 e 5; a resposta é 20;
• 6 e 4; a resposta é 12;
4. Defina uma função que recebe como entrada três valores e imprima na tela os valores em ordem
crescente, uma linha em branco e em seguida, os valores na sequência como foram lidos.

Figura 1: Exemplo de entrada e saı́da do problema acima.

5. O discriminante (também chamado de delta) de uma equação do segundo grau é a parte da


fórmula de Bháskara na qual se deve calcular a raiz quadrada. Essa parte é representada pela
letra grega e pode ser encontrada por meio da seguinte equação: = b2 4 ⇤ a ⇤ c. A fórmula
de Bháskara, usada para o cálculo das raı́zes reais de uma equação de segundo grau é a seguinte:
p
b+
x1 =
2⇤a
p
b
x2 =
2⇤a
• a) faça uma função que dados os coeficientes a, b, e c, calcula o discriminante de um
polinômio do segundo grau.
• b) faça uma função que calcule a primeira e a segunda raiz real, dado seus coeficientes a, b
e c. OBS: Apenas uma única função para ambos os cálculos.

1
OBS: O usuário só irá passar valores tais que > 0.
6. Questão OBI (Olimpı́ada Brasileira de Informática - 2012, Fase 1, Nı́vel Júnior) - (Campeonato):
Dois times, Cormengo e Flaminthians, participam de um campeonato de futebol, juntamente com
outros times. Cada vitória conta três pontos, cada empate um ponto. Fica melhor classificado
no campeonato um time que tenha mais pontos. Em caso de empate no número de pontos, fica
melhor classificado o time que tiver maior saldo de gols. Se o número de pontos e o saldo de gols
forem os mesmos para os dois times então os dois times estão empatados no campeonato. Dados
os números de vitórias e empates, e os saldos de gols dos dois times, sua tarefa é determinar qual
dos dois está melhor classificado, ou se eles estão empatados no campeonado.
Entrada: Os parâmetros de entrada da função são seis números inteiros C,Ce , Cs , Fv , Fe e Fs ,
que são, respectivamente, o número de vitórias do Cormengo, o número de empates do Cormengo,
o saldo de gols do Cormengo, o número de vitórias do Flaminthians, o número de empates do
Flaminthians e o saldo de gols do Flaminthians.
Saı́da: A sua função deve retornar ”Cormengo”, se Cormengo é melhor classificado que Fla-
minthians; ”Flaminthians”, se Flaminthians é melhor classificado que Cormengo; e se os dois
times estão empatados a função deve imprimir ”Empate”
Exemplos:
Entrada: 10,5,18,11,2,18; Saı́da: ”Empate”
Entrada: 10,5,18,11,1,18; Saı́da: ”Cormengo”
Entrada: 9,5,-1,10,2,10; Saı́da: ”Flaminthians”
7. Escreva uma função que calcule a área de um setor circular, dados o raio e o ângulo. Use um
argumento default para o ângulo, de modo que se nenhum ângulo for informado, a função retorne
a área do cı́rculo inteiro.

2 Lista, tupla, dicionário e strings


1. Sabe-se que uma molécula de RNA mensageiro é utilizada como base para sintetizar proteı́nas,
no processo denominado de tradução. Cada trinca de bases de RNA mensageiro está relacionado
com um aminoácido. Combinando vários aminoácidos, tems uma proteı́na. Com base na tabela
(simplificada) de trincas de RNA abaixo, crie uma função que receba uma string de tamanho 9
representando uma molécula de RNA mensageiro válida, segundo essa tabela, e retorne a cadeia
de 3 aminoácidos que representam a proteı́na correspondente.

Figura 2: Tabela de aminoácidos.

2. (URI 1140) Fiona sempre amou poesia, e recentemente descobriu uma forma poética fascinante.
Tautogramas são um caso especial de aliteração, que é a ocorrência da mesma letra no inı́cio
de palavras adjacentes. Em particular, uma sentença é um tautograma se todas suas palavras
começam com a mesma letra.
Por exemplo, as seguintes sentenças são tautogramas:
• Flowers Flourish from France
• Sam Simmonds speaks softly
• Peter pIckEd pePPers
• truly tautograms triumph

2
Fiona quer deslumbrar seu namorado com uma carta romântica repleta desse tipo de sentenças.
Por favor, ajude Fiona a verificar se cada sentença que ela escreveu é um tautograma ou não.
ENTRADA
Cada caso de teste é dado em uma única linha que contém uma frase. Uma frase consiste de
uma sequência de no máximo 50 palavras separadas por espaços simples. Uma palavra é uma
sequência de no máximo 20 letras do alfabeto inglês (maiúsculas e minúsculas). Uma palavra
contém ao menos uma letra e uma sentença contém ao menos uma palavra.
O último caso de teste é seguido de uma linha contendo apenas o caractere ’*’ (asterisco). SAÍDA
Para cada caso de teste, imprima uma única linha contendo o caractere ’Y’ se a sentença é um
tautograma, ou um ’N’ caso contrário. EXEMPLOS:

Figura 3: Exemplo de entrada e saı́da do problema acima.

3. Dado o código a seguir, verifique os erros e corrija as funções.


definition f2 (x ) :
e s t r u t u r a = ( x ∗ 2 , x+10)
e s t r u t u r a [ 0 ] = e s t r u t u r a [0] − e s t r u t u r a [ 1 ]
estrutura [ 1 ] = estrutura [0]∗ estrutura [ 1 ]

retorn estrutura

d e f i n i t i o n f ( y=10 ,x ) :
a = (10∗∗5)∗ x + y

retorne f2 (a)

4. Dado o código a seguir, informe com suas palavras o funcionamento do seguinte algoritmo:
def func ( vetor ) :
oc = [ 0 ] ∗ 1 0 0

f o r i in range ( le n ( vetor ) ) :
oc [ v e t o r [ i ] ] += 1

qtd = 0
i = 1
w h i l e ( qtd < l e n ( v e t o r ) / 2 and i < 100 ) :
qtd += oc [ i ]
i += 1

r e t u r n i −1

3
3 Laços de repetição e recursão
1. Faça uma função que simule um jogo de dois dados. A função deve contar quantas vezes os dados
foram jogados até que saiam números repetidos. Use a função randint do módulo random para
simular a jogada de um dado.
EXEMPLO DA FUNÇÃO RANDINT().

import random

# Retorna um numero e n t r e 1 e 100 ( i n c l u s i v e ) .


v a l o r = random . r a n d i n t ( 1 , 1 0 0 )

2. Faça um programa que leia 15 valores. A seguir, mostre a quantidade de valores positivos digi-
tados.
Entrada:
Um vetor com 15 valores reais.
Saı́da:
Imprima a quantidade de valores mais a seguinte expressão: ”valores positivos”.

Exemplo de entrada:
1 2.0 3 2.5 1.2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Exemplo de saı́da
”5 valores positivos”.
3. Faça um programa que leia um vetor com 10 posições e encontre o menor elemento deste vetor
e a sua posição dentro do vetor, mostrando essa informação.
Exemplo de Entrada:
1 2 3 4 -5 6 7 8 9 10

Exemplo de Saı́da:
Menor valor: -5
Posicao: 4

4. Usando laços de repetição, crie uma função que calcule a soma de todos os valores de um array
de reais.

5. Usando recursividade, crie uma função que calcule a soma de todos os valores de um array de
reais.

4
4 DESAFIO - OBI Universitária 2014 - Fase 1
Um carteiro é o responsável por entregar as encomendas na rua de Joãozinho. Por polı́tica da empresa,
as encomendas devem ser entregues na mesma ordem que foram enviadas, mesmo que essa não seja
a forma mais rápida. Cansado de subir e descer aquela rua tantas vezes, nosso amigo quer mostrar à
empresa quanto tempo ele leva para entregar as encomendas, na tentativa de derrubar essa polı́tica.
A rua de Joãozinho tem N casas. Naturalmente, as casas são numeradas de forma ordenada
(não necessariamente por números consecutivos). Como as casas possuem aproximadamente o mesmo
tamanho, você pode assumir que o carteiro leva uma unidade de tempo para caminhar de uma casa
até a casa imediatamente vizinha.
Há M encomendas para essa rua, que devem ser entregues na mesma ordem em que chegaram.
Cada encomenda contém o número da casa onde deve ser entregue.
Escreva um programa que determine quanto tempo o carteiro levará para entregar todas as en-
comendas, assumindo que quando o tempo começa a contar, ele está na primeira casa (a de menor
número), e o tempo termina de contar quando todas as encomendas foram entregues (mesmo que o
carteiro não esteja de volta na primeira casa). Você pode desprezar o tempo para colocar a encomenda
na caixa de correio (ou seja, se ele só tiver uma encomenda, para a primeira casa, a resposta para o
problema é zero).

ENTRADA
A primeira linha contém dois inteiros, N e M (1  N, M  45.000), respectivamente o número de
casas e o número de encomendas. A segunda linha contém N (1  Ni  109 ) inteiros em ordem
estritamente crescente, indicando os números das casas. A terceira linha contém M (1  Mi  109 )
inteiros indicando os números das casas onde as encomendas devem ser entregues, na ordem dada na
entrada.
SAÍDA
Seu programa deve produzir uma única linha, contendo um único inteiro, o tempo que o carteiro levará
para entregar todas as encomendas na ordem correta, assumindo que ele começa na casa de menor
número.
Exemplo de Entrada
55
1 5 10 20 40
10 20 10 40 1
Exemplo de Saı́da
10

Exemplo de Entrada
34
50 80 100
80 80 100 50
Exemplo de Saı́da
4

Você também pode gostar