Produto escalar

Criar um método que calcula o produto escalar de dois vetores.
Sera que alguem pode me ajudar???

-O método deve receber os dois vetores como argumentos. Os vetores devem ser listas de 3 elementos de tipo double
-O método deve retornar o produto escalar, que é uma variável de tipo double também.

Se puderem ajudar!!!

Uso dois Vetores do tipo double, e um for???

B) MULTIPLICAÇÃO DE VETOR POR OUTRO VETOR RESULTANDO UM ESCALAR.
Esta multiplicação é denominada Produto Escalar
Dados dois vetores u e v , define-se o produto escalar desses vetores como segue:
u . v = u . v . cos b
onde u e v são os módulos dos vetores e b o ângulo formado entre eles.

Agora da uma googlada!
Fazer a lição de casa é mancada!

Bs!
[]'s

É simples…
O problema é implementar ou a logica a usar? :smiley:

Até \o/

A = (a1, a2, an)
B= (b1, b2, bn)

ProdutoEscalar = a1B1+ a2b2+ … + an*bn

public static double calculaProdutoEscalar(...)
{
   double produtoEscalar = 0;

   for(int i=0; i<3; i++)
        produtoEscalar += vetA[i] * vetB[i];
   
    return produtoEscalar;


}

Mais uma ajudinha:

O produto interno de vetores é também conhecido como produto escalar.

Sejam os vetores u = (a, b) = a i + b j e v = (c, d) = c i + d j
Vamos multiplicar escalarmente os vetores u e v .
u.v = (a i + b j).(c i + d j) = ac i.i + ad i.j + bc j.i + bd j.j

Essa ideia tb vale para vetores no plano R³, isto é, com 3 coordenadas (x,y,z).
Ai para implememtar vc usa um for simples e dois vetores como parametro. Coisa simples d+.

Espero ter ajudado.

Até \o/

Valeu pessoal vou tentar aki!!!

Desse jeito fica fácil heim,
vou começar a colar os enunciados dos meu exercicios de faculdade por aqui também.

Alias estou precisando fazer minha monografia, alguem se habilita? :shock:

é o fim mesmo :evil:

[quote=paulovloghan]Desse jeito fica fácil heim,
vou começar a colar os enunciados dos meu exercicios de faculdade por aqui também.

Alias estou precisando fazer minha monografia, alguem se habilita? :shock:

é o fim mesmo :evil:[/quote]

pois é…

Estou aprendendo em casa, pego os exercicios e tento resolver, acho q dese jeito aprendo, ou vc sabe uma forma melhor??? e de graça???

Ai pessoal, valeu consegui fazer olha soh como ficou!!!

import java.awt.*;

public class ProdutoEscalarFrame extends Frame{

   public static void main( String args[] ){
     double a[], b[];
     a = new double[ 3 ];
     b = new double[ 3 ];
     for( int i = 0; i < 3; i++ ){
       a[ i ] = Double.valueOf( args[ i ] ).doubleValue();
       b[ i ] = Double.valueOf( args[ i + 3 ] ).doubleValue();
     }
     new ProdutoEscalarFrame( a, b );
   }

   public ProdutoEscalarFrame( double a[], double b[] ){
     setLayout( new GridLayout( 5, 2 ) );
     add( new Label( "Vetor a", Label.CENTER ) );
     add( new Label( "Vetor b", Label.CENTER ) );
     for( int i = 0; i < 3; i++ ){
       add( new Label( String.valueOf( a[ i ] ), Label.CENTER ) );
       add( new Label( String.valueOf( b[ i ] ), Label.CENTER ) );
     }
     add( new Label( "Produto:", Label.CENTER ) );
     add( new Label( String.valueOf( produto( a, b ) ),
         Label.CENTER ) );
     setSize( 200, 400 );
     setVisible( true );
   }

   private double produto( double a[], double b[] ){
     double res = 0.;
     for( int i = 0; i < 3; i++ ){
       res += a[ i ] * b[ i ];
     }
     return res;
   }

} 

Valeu pela Ajuda!!!
Sempre q consueguir resolver meus problemas respondo, para poder ajudar aprendizes, como eu!!!

1 curtida

pois é… eu e mais alguns outros membros consideram consideram isso q vc fez algo como uma “boa pratica” de participação de foruns… quando vc conseguiu resolve vc dexo a resposta ai para caso alguem precise no futuro…

o problema é as pessoas que ja dão uma resposta pronta e mastigada… eu tb ainda to no caminho, to aprendendo ainda assim como vc, apesar de ja estar nesse mundo a um tempinhu ja… pra quem ja sabe a resposta, pode até ser mais facil as vezes da a resposta pronta, mais ai vc não ta ajudando de verdade a pessoa, de uma forma até imediata sim, mais a longo prazo não… tipo a historia do dar o peixe e esinar a pescar…

infelizmente o forum tem mta ocorrencia ainda de gente kerendo tudo mastigado, gente kerendo que resolvam os exercicios deles…esse tipo de coisa… a comunidade geral crio uma certa raiva disso…

esse assunto ja foi mto discutido por aki…

Segue ae uma implementação em C desse mesmo problema. Mas aqui usando listas duplamente encadeadas.
OBS: Para os valores iguais a 0 não é alocano nó.

#include <stdio.h>
#include <stdlib.h>
#define MAX_LIST_SIZE 6
#define INFO

struct lista{
	float dado;
	int index;
	struct lista* prox;
};

typedef struct lista* def_lista;

def_lista inicia(){
	return NULL;
}

def_lista cria_no (float numero, int index)
{
   def_lista no;
   
   no  =(def_lista) malloc(sizeof(struct lista));
   no->dado=numero;
   no->index = index;
   no->prox = NULL;
   index++;
   return no;
}

void insere_final(def_lista* Lista, float dado, int index){
	def_lista no, aux;
	no = cria_no(dado, index);
	
	if(*Lista == NULL){
		*Lista = no;
		no->prox = *Lista;
	}
	else{
		aux = *Lista;
		while(aux->prox != *Lista)
			aux = aux->prox;
		no->prox = aux->prox;
		aux->prox = no;
	}
}

void imprime_lista(def_lista lista){
	def_lista aux;
	aux = lista;
	do{
		printf("Index %d ",aux->index);
		printf("Dado: %.2f ",aux->dado);
		printf("\n");
		aux = aux->prox;
	}while(aux != lista);
}

float searchData(def_lista lista, int index){
	def_lista aux = lista;
	do{
		if(aux->index == index)
			return aux->dado;
		aux = aux->prox;
	}while(aux != lista);
	return 0;
}

float produtoEscalar(def_lista l1, def_lista l2){
	def_lista aux1, aux2;
	float result = 0;
	int index = 0;
	aux1 = l1;
	aux2 = l2;
	do{
		result += searchData(aux1,index) * searchData(aux2,index);
		index ++;
	}while(index < MAX_LIST_SIZE);
	return result;
}

int main(void){
	def_lista L1, L2;
	L1 = inicia();
	L2 = inicia();
	float dado;
	int index = 0;
	
	do{
	printf("Digite valor da posicao %d do vetor 1: ",index);
	scanf("%f",&dado);
	if(dado != 0)
		insere_final(&L1, dado, index);
	index++;
	system("cls");
	}while(index < MAX_LIST_SIZE);
	
	index = 0;
	
	do{
	printf("Digite valor da posicao %d do vetor 2: ",index);
	scanf("%f",&dado);
	if(dado != 0)
		insere_final(&L2, dado, index);
	index++;
	system("cls");
	}while(index < MAX_LIST_SIZE);
	
	float resultado = produtoEscalar(L1,L2);
	
	#ifdef INFO
	printf("Lista 1: \n");
	imprime_lista(L1);
	printf("\n\n");
	printf("Lista 2: \n");
	imprime_lista(L2);
	printf("\n");
	#endif
	printf("Resultado da multiplicacao escalar: %f",resultado);
	printf("\n\n");
	system("PAUSE");
	return 1;
}

Concordo que estudando em casa é mais difícil, mas a gente aprende a se virar, apesar de que uma mãozinha quando vocẽ está numa época em que precisa aprender e treinar sua lógica, ou aprender coisas novas, para se inserir mais rapidamente no mercado, como no meu caso que já terminei faculdade há muito tempo e trabalhei com Cobol nos últimos 6 ou 7 anos, pois mesmo “colando aqui”, a gente acaba provando lá. Por isso é bom obter algumas ajudas em aprendizado. Não quer dizer que tenha não feito sozinho outras coisas. Os dois lados têm suas opiniões, que devem ser respeitadas.