Paloma 0 Denunciar post Postado Março 27, 2006 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
Homero C. de Almeida 0 Denunciar post Postado Março 27, 2006 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
Cypher 0 Denunciar post Postado Março 31, 2006 :) hipois eu tenho uma certa ideia que dá, mas não sei porquemas vou exprimentar....... :) Cypher Compartilhar este post Link para o post Compartilhar em outros sites
japan 0 Denunciar post Postado Março 31, 2006 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
ricci ottadnot 4 Denunciar post Postado Abril 1, 2006 // 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
Homero C. de Almeida 0 Denunciar post Postado Abril 2, 2006 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
Cypher 0 Denunciar post Postado Abril 6, 2006 mas nao EXISTE o quê....isto quem não sabe é como quem não vê..:) Compartilhar este post Link para o post Compartilhar em outros sites
ricci ottadnot 4 Denunciar post Postado Abril 9, 2006 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
Paloma 0 Denunciar post Postado Abril 9, 2006 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
Paloma 0 Denunciar post Postado Abril 9, 2006 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
ricci ottadnot 4 Denunciar post Postado Abril 11, 2006 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
Paloma 0 Denunciar post Postado Abril 11, 2006 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
skimo-solar 0 Denunciar post Postado Abril 11, 2006 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
Paloma 0 Denunciar post Postado Abril 11, 2006 No caso esse int eu declaro no a variável início da função ñ é? Compartilhar este post Link para o post Compartilhar em outros sites
Paloma 0 Denunciar post Postado Abril 11, 2006 :rolleyes: Vamos ver se eu entendi bem, esse i e j é uma variável pra cada vetor? http://forum.imasters.com.br/public/style_emoticons/default/cry.gif Compartilhar este post Link para o post Compartilhar em outros sites
Paloma 0 Denunciar post Postado Abril 11, 2006 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
skimo-solar 0 Denunciar post Postado Abril 12, 2006 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