ejemplo de producto escalar:
<1,2>*<2,1>=2+2=4
Si el vector fuera de dimension explicita seria muy facil pero, al poder introducir el usuario la dimension no me sale!!!!!
Alguien me ayuda ????

| |||
vectores de dimension i-esima. Hola estoy intentand hacer un programita en el qual se pide la introduccion de la dimension de un vector1 y la de un vector2 y despues que efectuen el producto escalar entre ellos(esto es multiplicar componente a componente y despues sumar). Para ello pido la dimension, luego los valores de las componentes de los vectores, hasta ahi todo bien pero luego, no se como hacer que se multipliquen la componente 1 del vector1 con la componente 1 del vector 2. ejemplo de producto escalar: <1,2>*<2,1>=2+2=4 Si el vector fuera de dimension explicita seria muy facil pero, al poder introducir el usuario la dimension no me sale!!!!! Alguien me ayuda ???? ![]()
__________________ ¨`~*'¤^v-¥-()->»[: "3£ 1NƒîêRNø Nø ê$ UN Må£ £UGåR" :]«<-()-¥-v^¤'*~´¨ |
| |||
Re: vectores de dimension i-esima. pues lo he estado pensando y ni papa. Pego el Codigo fuente a ver si asi emjor. #include <stdio.h> #define MAX 1000 void main(){ int dim1,dim2,i,j,resultat; int vector1[MAX]; int vector2[MAX]; printf("####Calcul del producte escalar de 2 vectors de dimensio qualsevol####\n\n\n "); printf("Introdueix la dimensio del vector\n"); scanf("%d",&dim1); printf("Introdueix la dimensio del segon vector\n"); scanf("%d",&dim2); if(dim1 && dim2 >=MAX) { printf("No es permeten vectors de mes de 999 components\n"); } else if(dim1 == dim2){ printf("La dimensio dels vectors es igual\n"); printf("Introdueix els valors del vector1\n"); for(i=0;i<=dim1-1;i++) { scanf("%d",&vector1[i]); } printf("Introdueix els vals del vector2\n"); for(j=0;j<=dim2-1;j++) { scanf("%d",&vector2[j]); } for(i=0;i<=dim1-1;i++) for(j=0;j<=dim2-1;j++) { resultat=(vector1[i]*vector2[j])+(vector1[i++]*vector2[j++]);//aqui es lo que me falla } printf("%d",resultat); } else{ printf("La dimensio dels vectors no es igual!!\n"); } }
__________________ ¨`~*'¤^v-¥-()->»[: "3£ 1NƒîêRNø Nø ê$ UN Må£ £UGåR" :]«<-()-¥-v^¤'*~´¨ |
| ||||
Re: vectores de dimension i-esima. Consejo: coloca todo el código en las etiquetas CODE para que se vea mejor:
Código:
Más fácil de leer, ¿cierto?#include <stdio.h> #define MAX 1000 void main() { int dim1,dim2,i,j,resultat; int vector1[MAX]; int vector2[MAX]; printf("####Calcul del producte escalar de 2 vectors de dimensio qualsevol####\n\n\n "); printf("Introdueix la dimensio del vector\n"); scanf("%d",&dim1); printf("Introdueix la dimensio del segon vector\n"); scanf("%d",&dim2); if(dim1 && dim2 >=MAX) { printf("No es permeten vectors de mes de 999 components\n"); } else if(dim1 == dim2) { printf("La dimensio dels vectors es igual\n"); printf("Introdueix els valors del vector1\n"); for(i=0;i<=dim1-1;i++) { scanf("%d",&vector1[i]); } printf("Introdueix els vals del vector2\n"); for(j=0;j<=dim2-1;j++) { scanf("%d",&vector2[j]); } for(i=0;i<=dim1-1;i++) for(j=0;j<=dim2-1;j++) { resultat=(vector1[i]*vector2[j])+(vector1[i++]*vector2[j++]);//aqui es lo que me falla } printf("%d",resultat); } else { printf("La dimensio dels vectors no es igual!!\n"); } En primer lugar si vas a sumar o a calcular el producto escalar de dos vectores estos tienen que ser de la misma dimensión, lo cual implica que no es necesario tener las 2 dimensiones, a menos que las requieras para una operación posterior o pretendas que en algún momento sean de dimensión diferente. En vez de escribir el for asi:
Código:
Lo haría así:for(j=0;j<=dim2-1;j++)
Código:
Lo mismo para los otros ciclos que tienes. En cuanto a la parte en la que calculas el producto:for(j = 0; j < dim2; j++)
Código:
Que no se te olvide que en el ciclo ya incrementas las variables de control (i y j), asi que no es necesario usar el operador "++" en la expresión donde calculas el producto de las componentes del arreglo, otro detalle es que no debes olvidar que en cada iteración de tu código estás borrando el valor calculado con anterioridad, es decir, debe usar un acumulador:for(i=0;i<=dim1-1;i++) for(j=0;j<=dim2-1;j++) { resultat=(vector1[i]*vector2[j])+(vector1[i++]*vector2[j++]);//aqui es lo que me falla }
Código:
Eso funciona con cualquier operador. Te dejo de tarea que apliques esos cambios y corrijas los detalles que faltan.variable += <expresion>; //equivalente a: variable = variable + <expresion>; Saludos
__________________ Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba: |
| |||
Re: vectores de dimension i-esima. muchar gracias, en cuanto a lo de la dimension ya se que tiene que ser de la misma dimension pero quiza quieras hacer el producto escalar de 2 vectores de diemnsion 30 o de dimension 2. xXDDD
__________________ ¨`~*'¤^v-¥-()->»[: "3£ 1NƒîêRNø Nø ê$ UN Må£ £UGåR" :]«<-()-¥-v^¤'*~´¨ |
| |||
Re: vectores de dimension i-esima. he echo todos los cambios mencionados pero me sigue sin dar bien :
Código:
#include <stdio.h> #define MAX 1000 void main(){ int dim1,dim2,i,j,resultat; int vector1[MAX]; int vector2[MAX]; printf("####Calcul del producte escalar de 2 vectors de dimensio qualsevol####\n\n\n "); printf("Introdueix la dimensio del vector\n"); scanf("%d",&dim1); printf("Introdueix la dimensio del segon vector\n"); scanf("%d",&dim2); if(dim1 && dim2 >=MAX) { printf("No es permeten vectors de mes de 999 components\n"); } else if(dim1 == dim2){ printf("La dimensio dels vectors es igual\n"); printf("Introdueix els valors del vector1\n"); for(i=0;i<=dim1-1;i++) { scanf("%d",&vector1[i]); } printf("Introdueix els vals del vector2\n"); for(j=0;j<=dim2-1;j++) { scanf("%d",&vector2[j]); } for(i=0;i<dim1;i++) for(j=0;j<dim2;j++) { resultat+=(vector1[i]*vector2[j])+(vector2[j]*vector1[i]);//aqui es lo que me falla } printf("%d",resultat); } else{ printf("La dimensio dels vectors no es igual!!\n"); } }
__________________ ¨`~*'¤^v-¥-()->»[: "3£ 1NƒîêRNø Nø ê$ UN Må£ £UGåR" :]«<-()-¥-v^¤'*~´¨ |