Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/12/2007, 06:44
Avatar de _Lucifer_
_Lucifer_
 
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años
Puntos: 28
Re: vectores de dimension i-esima.

Consejo: coloca todo el código en las etiquetas CODE para que se vea mejor:
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-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");
   }
Más fácil de leer, ¿cierto?

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:
for(j=0;j<=dim2-1;j++)
Lo haría así:
Código:
for(j = 0; j < dim2; j++)
Lo mismo para los otros ciclos que tienes. En cuanto a la parte en la que calculas el producto:
Código:
   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

         }
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:
Código:
variable += <expresion>; //equivalente a: variable = variable + <expresion>;
Eso funciona con cualquier operador. Te dejo de tarea que apliques esos cambios y corrijas los detalles que faltan.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba: