Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paloma

Produto Interno de Vetores

Recommended Posts

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={1*5+2*6+3*7+4*8+1*9+2*10} 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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procurando no nosso mestre google, acabei de ler que não é possível fazer o produto escalar de dois vetores com número de coordenadas diferentes. Lembrando bem, isso é óbvio pois o produto interno de 2 vetores nada mais é que a multiplicação de 2 matrizes:

 

| b1  |						  | b2  |( a1, a2, a3, ..., an ) * | b3  | = c						  | ... |						  | bn  |

mas na multiplicação de matrizes, para que ela possa ocorrer, o número de elementos na linha da primeira matriz tem que ser igual ao numero de elementos na coluna da segunda matiz.

 

Quem passou esse exercício pra você? ¬¬

Compartilhar este post


Link para o post
Compartilhar em outros sites

Homero disse tudo, não tem como, você pode até criar uma que multiplica de tamanhos diferentes, mas matematicamente não vai ser um produto escalar de matrizes

Compartilhar este post


Link para o post
Compartilhar em outros sites

// Basket Case - Green Day (agora)

 

ola paloma..

 

pelo enunciado do problema, teremos um dois vetores onde vao ser multiplicados os seus valores sequencialmente...

 

bom.. eh simples..

 

1º. Faça um laço for q tenha como limite a qtde de elementos do maior vetor..

2º. Dentro deste laço, teremos uma variavel q controlará o indice do vetor menor..

// tpw ela sera inicializada em 0, e quando chegar ao final de seu valor, retornará a zero..

 

parece q naum, mas eh soh isso..

 

vou deixar um exemplo para você ver o trem funfando... hehe

int main(){   cout<<"Entre com o tamanho do vetor \"a[]\":";   int size_a;   cin>> size_a;      cout<<"Entre com o tamanho do vetor \"b[]\":";   int size_b;   cin>> size_b;      int a[size_a], b[size_b],soma=0;      if(size_a>size_b)   {	  for(int i=0,int j=0;i<size_a;i++)	  {	 		 soma += a[i]*b[j];		 if(j==size_b-1)			  j=0;		 else			  j++;	   }	}	else   {	  for(int i=0,int j=0;i<size_b;i++)	  {	 		 soma += b[i]*a[j];		 if(j==size_a-1)			  j=0;		 else			  j++;	   }	}	cout<<"O produto interno entre eles é "<<soma<<endl;	system("PAUSE");	return(0);}
abraços

 

// wake me up when september ends - Green Day

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade ricci ottadnot isso que você fez não é o produto interno de dois vetores de tamanhos diferentes pelo simples fato de que este conceito matemático NÃO EXISTE.

Você pode criar um código que assuma algum valor para as dimensões que faltam e tentar multiplicá-los, mas isso não será um produto entre os dois vetores. O simples fato da falta de uma dimensão torna um dos vetores uma superfície no plano onde o outro se encontra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

homero.. acho q você naum entendeu o algoritmo...na verdade a paloma falou em multiplicaçao interna entre vetores naum no sentido de alguma lei matematica mas em fazer um simples algoritmo que multiplique os valores internos entre dois vetores..ENTENDEU?!!!!flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quem passou esse exercício foi meu professor e até hoje ñ consegui fazer, mas fico grata pel atenção de todos! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/blush.gif :D :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O produto interno dos vetores tem que ser feito em uma função? Até agora eu fiz o código abaixo:

 

#include <stdio.h>#include <stdlib.h>int main (void){  int  *x, *y, v1, v2, prod,i;  do  {	printf ("Entre com a quantidade de valores do vetor x: ");	fflush (stdin);	scanf ("%d", &v1);   	printf ("Entre com a quantidade de valores do vetor y: ");	fflush (stdin);	scanf ("%d", &v2);	printf ("\n");	  } while (v1 < 1 && v2 < 1);  x = (int*) malloc (v1* sizeof (int));  if (x==NULL)  {	 printf ("Memoria Insuficiente.\n");  }     printf ("\n");  y = (int*) malloc (v2* sizeof (int));  {	 printf ("Memoria Insuficiente.\n");  }  printf ("\n");    printf ("Entre com os valores para o vetor x.\n");  for (i = 0; i < v1; i++)  {	printf ("Valor %d: ", i+1);	scanf ("%d", &x[i]);  }  printf ("\n");    printf ("Entre com os valores para o vetor y.\n");  for (i = 0; i < v2; i++)  {	printf ("Valor %d: ", i+1);	scanf ("%d", &y[i]);	  }  printf ("\n");    printf ("Vetor X \n\n");  for (i = 0; i < v1; i++)  {	printf ("%d", x[i]);	printf ("\n");  }  printf ("\n");  printf ("Vetor Y \n\n");  for (i = 0; i < v2; i++)  {	printf ("%d", y[i]);	printf ("\n");  }  printf ("\n");  free (x);  free (y);  system ("PAUSE");  return (0);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

mto bom... agora soh falta implementar o procedimento principal do programa: CALCULAR O PRODUTO INTERNO..

 

você pode fazer uma função que receba como parametros os dois vetores ou, se de sua preferencia, coloque o cadigo abaixo em seu programa...

 

if(v1>v2)   {	  for(i=0,int j=0;i<v1;i++)	  {			 prod +=x[i]*y[j];		 if(j==v2-1)			  j=0;		 else			  j++;	   }	}	else   {	  for(i=0,int j=0;i<v2;i++)	  {			 prod += y[i]*x[j];		 if(j==v1-1)			  j=0;		 else			  j++;	   }	}

O codigo pronto ficaria assim:

#include <stdlib.h>int main (void){  int  *x, *y, v1, v2, prod,i,j,soma;  do  {	printf ("Entre com a quantidade de valores do vetor x: ");	fflush (stdin);	scanf ("%d", &v1);  	printf ("Entre com a quantidade de valores do vetor y: ");	fflush (stdin);	scanf ("%d", &v2);	printf ("\n");	  } while (v1 < 1 && v2 < 1);  x = (int*) malloc (v1* sizeof (int));  if (x==NULL)  {	 printf ("Memoria Insuficiente.\n");  }     printf ("\n");  y = (int*) malloc (v2* sizeof (int));  {	 printf ("Memoria Insuficiente.\n");  }  printf ("\n");    printf ("Entre com os valores para o vetor x.\n");  for (i = 0; i < v1; i++)  {	printf ("Valor %d: ", i+1);	scanf ("%d", &x[i]);  }  printf ("\n");    printf ("Entre com os valores para o vetor y.\n");  for (i = 0; i < v2; i++)  {	printf ("Valor %d: ", i+1);	scanf ("%d", &y[i]);	  }  printf ("\n");    printf ("Vetor X \n\n");  for (i = 0; i < v1; i++)  {	printf ("%d", x[i]);	printf ("\n");  }  printf ("\n");  printf ("Vetor Y \n\n");  for (i = 0; i < v2; i++)  {	printf ("%d", y[i]);	printf ("\n");  }  if(v1>v2)   {	  for(i=0,int j=0;i<v1;i++)	  {			 prod += x[i]*y[j];		 if(j==v2-1)			  j=0;		 else			  j++;	   }	}	else   {	  for(i=0,int j=0;i<v2;i++)	  {			 prod += y[i]*x[j];		 if(j==v1-1)			  j=0;		 else			  j++;	   }	}  printf ("\n");  printf("O produto interno entre os vetores é %d\n",prod);  free (x);  free (y);  system ("PAUSE");  return (0);}

OBS.: Depois da linha :

y = (int*) malloc (v2* sizeof (int));
faltou um comando. ..

if (y==NULL)

senao, o programa imprime memoria insuficiente sem motivo nenhum

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função fica correta desta forma

int prod_interno (int v1, int v2)if(v1>v2)   {	  for(i=0,int j=0;i<v1;i++) 	  {			 prod +=x[i]*y[j];		 if(j==v2-1)			  j=0;		 else			  j++;	   }	}	else   {	  for(i=0,int j=0;i<v2;i++)	  {			 prod += y[i]*x[j];		 if(j==v1-1)			  j=0;		 else			  j++;	   }	}
Se possível você poderia me falar pq dentro do for o j=0? http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

for(i=0,int j=0;i<v1;i++)
?

Isto aqui não vai funcionar, esquece este int.

 

E o amigo esqueceu de adicionar a biblioteca <stdio.h> além da <stdlib.h>, senão dá erro no fflush(stdin)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só eu fiz uma função pra calcular o produto, mas como tem ponteiros a confusão tá grande http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

#include <stdio.h>#include <stdlib.h>int prod_interno (int v1, int v2);int main(){  int  *x, *y, v1, v2, prod, i;  do  {	printf ("Entre com a quantidade de valores do vetor x: ");	scanf ("%d", &v1);		  	printf ("Entre com a quantidade de valores do vetor y: ");	scanf ("%d", &v2);	  } while (v1 < 1 && v2 < 1);		printf ("\n");	  x = (int*) malloc (v1* sizeof (int));   if (x == NULL)   {	 printf ("Memoria Insuficiente.\n");   }  y = (int*) malloc (v2* sizeof (int));    if (y == NULL)   {	 printf ("Memoria Insuficiente.\n");   }  printf ("Entre com os valores para o vetor x.\n");  for (i = 0; i < v1; i++)  {	printf ("Valor %d: ", i+1);	scanf ("%d", &x[i]);  }	   printf ("\n");    printf ("Entre com os valores para o vetor y.\n");  for (i = 0; i < v2; i++)  {	printf ("Valor %d: ", i+1);	scanf ("%d", &y[i]);  }	   printf ("\n");    printf ("Vetor X \n\n");  for (i = 0; i < v1; i++)  {	printf ("%d\n", x[i]);  }   printf ("\n");  printf ("Vetor Y \n\n");  for (i = 0; i < v2; i++)  {	printf ("%d\n", y[i]); }   prod = prod_interno(v1,v2);  printf ("Valor do produto interno dos vetores: %d", prod);    printf ("\n");  free (x);  free (y);  system ("PAUSE");  return (0);}//FUNÇÃO CÁLCULO PRODUTO INTERNOint prod_interno (int v1, int v2){	int i,j,prd,x,y;		if (v1 > v2)	{		   for (i = 0; j = 0; i++)		   {			   prd+= x[i] * y[j];			   			   if (j == v2 - 1)				   j = 0;			   else				   j++;		   }	}	else	{		for (i = 0; j = 0; i++)		{			prd+= y[i] * x[j];			if (j == v1 - 1)				j = 0;			else				j++;		}	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O único problema nesta função está aqui:

int prod_interno (int v1, int v2){	int i,j,prd,x,y;		if (v1 > v2)	{		   for (i = 0; j = 0; i++)		   {			   prd+= x[i] * y[j];			 .			 .			 .
Olhe bem, você declara x e y como inteiros:

int i,j,prd,x,y;

 

E logo depois os utiliza como vetores:

prd+= x * y[j];

 

Uma solução seria declará-los como vetores:

int i,j,prd,x[100],y[100];
Agora o programa deve funcionar, não conferi para ver se está retornando o resultado correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.