Produto de Vetores

15 respostas
paloma

Eu tenho o seguinte exercício:

Dois vetores alocados dinamicamente e de dimensões diferentes e tenho que fazer o produto interno entre eles.

Exemplo:

v1={1,2,3,4}
v2={5,6,7,8,9,10}

Resultado={15+26+37+48+19+210}

Como são de dimensões diferentes não estou sabendo como fazer, alguém pode me dar uma idéia de por onde começo, ñ quero a resposta apenas uma idéia pra ver se consigo desenvolver!

Obrigada!

15 Respostas

T

Estranho… Dei uma olhada em http://mathworld.wolfram.com/DotProduct.html e ele só define para vetores de mesma dimensão.

paloma

Eu também nunca tinha visto, por isso tô enrolada pra fazer, mas foi assim que o professor definiu no exercício!

T

Acho que a maneira mais fácil é a seguinte: ver qual é o array menor, e completar com repetições dele, para ficar do tamanho do array maior.

Pelo menos é o que parece ser o tal do exercício. Muito bizarro pro meu gosto.

paloma

Pra mim também tá complicado, o melhor é falar com ele pra ver por onde começo, pq sinceramente não sei!

Obrigada pela ajuda!! :slight_smile: :smiley: :-o :lol: 8) :stuck_out_tongue: :wink:

thiago.correa

eu acho que é o seguinte, o array menor vai ser repetido até chegar o comprimento do array maior, vamos seguir o exemplo dado

v1={1,2,3,4}
v2={5,6,7,8,9,10}

v1  v2

0 - 1 * 5
1 - 2 * 6
2 - 3 * 7
3 - 4 * 8
4 - 1 * 9 (*)
5 - 2 * 10

(*) como o vetor 1 não tinha mais elementos para multiplicar com o v2 na posição 4, começou a contagem desde o início do mesmo vetor.

Acredito que seja essa a questão do problema, falta implementar isso agora :slight_smile:

David

Eu também nunca ouvi falar em produto escalar de vetores de dimensões diferentes, mas se você quer implementar mesmo assim, vou te dar uma dica:

int maiorDim = ...
int menorDim = ...
int diferenca = maiorDim - menorDim;

for (int i = 0; i < maiorDim; i++) {
    soma += v1[i % (maiorDim - diferenca)] * v2[i];
}

Onde maiordim é a dimensão do vetor maior, menordim é a dimensão do vetor menor. Você tem que testar qual dos dois vetores é o menor. O que for menor você faz usa i % (maiordim - diferenca) para cálculo do indice.

paloma

Isso que vc falou foi a dúvida que eu postei, o que não sei é como fazer essa implementação!!

paloma

Eu falei em relação a resposta do Thiago!!

thiago.correa

tinha nada para fazer :slight_smile:

int[] v1 = {1,2,3,4};
    int[] v2 = {5,6,7,8,9,10};
    int[] vetorMaior, vetorMenor;
    int tamanhoVetorMaior, tamanhoVetorMenor;

    int lengthV1 = v1.length, lengthV2 = v2.length;

    if (lengthV1 >= lengthV2) {
      vetorMaior = v1;
      vetorMenor = v2;
      tamanhoVetorMaior = lengthV1;
      tamanhoVetorMenor = lengthV2;
    } else {
      vetorMaior = v2;
      vetorMenor = v1;
      tamanhoVetorMaior = lengthV2;
      tamanhoVetorMenor = lengthV1;
    }

//    int tamanhoVetorMaior = lengthV1 > lengthV2?lengthV1:lengthV2;
//    int tamanhoVetorMenor = lengthV1 > lengthV2?lengthV2:lengthV1;

    int somaDosProdutos = 0;

    for (int indiceVetorMaior = 0, indiceVetorMenor = 0; indiceVetorMaior < tamanhoVetorMaior; indiceVetorMaior++, indiceVetorMenor++){

      if (indiceVetorMenor == tamanhoVetorMenor)
        indiceVetorMenor = 0;

      somaDosProdutos += (vetorMenor[indiceVetorMenor] + vetorMaior[indiceVetorMaior]);
      System.out.println(indiceVetorMenor + " -> " + vetorMenor[indiceVetorMenor] + "  " + indiceVetorMaior + " -> " + vetorMaior[indiceVetorMaior]);
    }
    System.out.println(somaDosProdutos);
thiago.correa

paloma:
…, alguém pode me dar uma idéia de por onde começo, ñ quero a resposta apenas uma idéia pra ver se consigo desenvolver!

Obrigada!

como você falou que não queria a implementação eu pensei que você estivesse com dúvida no entendimento da questão… mas de qualquer forma postei aí acima a resolução do problema

paloma

E eu não quero mesmo a solução, só não estava entendendo como poderia fazer isso, mas fico grata pela sua ajuda, vou tentar fazer e ver se dá certo, de qualquer forma vou ver com o professor pra ele me explicar. E depois eu posto aqui.

Obrigada a todos!! :lol:

paloma

Mas no seu exemplo vc já definiu o tamanho do vetor e a dimensão de ambos será informada pelo usuário, já que os dois estão alocados dinamicamente!! :?:

David

paloma:
E eu não quero mesmo a solução, só não estava entendendo como poderia fazer isso, mas fico grata pela sua ajuda, vou tentar fazer e ver se dá certo, de qualquer forma vou ver com o professor pra ele me explicar. E depois eu posto aqui.

Obrigada a todos!! :lol:

Faça aquilo que eu disse, use o operador módulo que funciona. A única coisa que você tem que fazer a mais é descobrir qual dos dois vetores é o maior. Boa sorte no trabalho.

thiago.correa

Ih, agora deu nó na cabeça, você quer que o usuário digite o tamanho do vetor 1 e depois o tamanho do vetor 2? E depois ele que preencha o conteúdo desse vetor é isso?!

paloma

É isso mesmo, a quantidade de valores dos vetores serão informadas pelo usuário, por isso estão alocados dinamicamente!

Criado 27 de março de 2006
Ultima resposta 28 de mar. de 2006
Respostas 15
Participantes 4