Produto escalar

12 respostas
Tiarlis

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???

12 Respostas

Lucas_Lacerda_Gertel

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

Kassiane_Pretti

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

Até \o/

S

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;


}
Kassiane_Pretti

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/

Tiarlis

Valeu pessoal vou tentar aki!!!

P

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:

maior_abandonado

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:

pois é…

Tiarlis

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???

Tiarlis

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!!!

maior_abandonado

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…

D

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;
}
F

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.

Criado 11 de julho de 2008
Ultima resposta 25 de jun. de 2012
Respostas 12
Participantes 8