Informática, perguntado por lucas27484, 6 meses atrás

PYTHON

Cedo ou tarde, você irá perceber que o ramo mais útil da matemática é a álgebra linear. Em alguns lugares, nem sequer utilizam o nome álgebra linear. Usam simplesmente matemática! Neste problema, você irá utilizar um pedacinho bem minúsculo da álgebra linear, voltado para geometria.
Na escola, nós aprendemos a determinar se um par de vetores bi ou tridimensionais é ortogonal (ou seja, se o ângulo entre os vetores é de 90o ) calculando seu produto interno euclidiano:

u*v=xu*xv+yu*yv (para 2 dimensões - bidimensionais)

ou

u*v=xu*xv+yu*yv+zu*zv (para 3 dimensões - tridimensionais)


Dois vetores u e v são ortogonais se, e somente se, u*v = 0. Neste problema, você deve determinar se um dado par de vetores n-dimensionais u e v é ortogonal.

Entrada:

A primeira linha da entrada contém um único inteiro n ( 1 ≤ n ≤ 105 ), que indica a dimensão dos vetores a serem lidos, ou seja, o número de coordenadas cartesianas de um vetor.

A segunda linha contém n inteiros ui (−100 ≤ ui ≤ 100) separados por espaço, que são as n coordenadas do vetor u.

A terceira linha contém n inteiros vi (−100 ≤ vi ≤ 100) separados por espaço, que são as n coordenadas do vetor v.

Saída:

Se os vetores u e v forem ortogonais, imprima a mensagem "ortogonais" (sem aspas duplas). Caso contrário, imprima o valor do produto interno euclidiano entre eles.

Observação:

Para ler as n coordenadas de um vetor em uma única linha, basta utilizar o seguinte código: vet = list(map(int,input().strip().split()))[:n]
No primeiro caso de teste, os vetores são ortogonais pois (-3)*1 + (-4)*1 + 2*1 + 5*1 = 0.

Anexos:

Soluções para a tarefa

Respondido por GeBEfte
2

O programa abaixo não conta com validação de dados ou controle/tratamento de exceções, assim cabe ao usuário digitar cuidadosamente as informações solicitadas de acordo com o que é mostrado no texto.

Como sugere o enunciado, vamos "captar" os vetores por list(map(int,input().strip().split()))[:n], mas, pra facilitar a legibilidade do código, separaremos essa linha em duas.

Perceba que o fatiamento mostrado [:n] foi adicionado para garantir que haja apenas "n" números por vetor, como previsto no exercício.

Ainda, não será utilizado o método strip(), pois não terá qualquer efeito nesse exemplo, já que o split() estará justamente utilizando os espaços em branco para separar os dados contidos na string.

[Python 3.8]

\sf n~ =~ int(inpu t())\\\\u~ =~ inpu t().split()\\u~ =~ list(map(int, ~u))[:n]\\\\v~ =~ inpu t().split()\\v~=~ list(map(int,~ v))[:n]\\\\prod\underline{~}int~ =~ 0\\for~ i~ in~ range(n):\\~~~~  prod\underline{~}int~ +=~ u[i]*v[i]\\\\if~ prod\underline{~}int~ ==~ 0:\\~~~~  print('ortogonais')\\else:\\~~~~  print(prod\underline{~}int)

\Huge{\begin{array}{c}\Delta \tt{\!\!\!\!\!\!\,\,o}\!\!\!\!\!\!\!\!\:\,\perp\end{array}}Qualquer~d\acute{u}vida,~deixe~ um~coment\acute{a}rio

Perguntas interessantes