Funciones y Proyectos en C

Iniciado por TheShocker, 15 Marzo 2015, 17:59 PM

0 Miembros y 1 Visitante están viendo este tema.

TheShocker

Buenas a todos, estoy haciendo un proyecto divido en varios archivos. Uno con las funciones, el .h, y el main.

El caso, es que el programa tiene hacer la suma de dos vectores y el producto escalar pero al compilarlo y ejecutarlo me salen erroneos los resultados.

No sé si fallo en las funciones o en la forma de invocarlo. Si alguien puede ayudarme se lo agradecería.



Parte de las funciones:

float suma_vectores(float *v1, float *v2, int dim){
     
      int i;
      float vsuma[DIMMAX];
        for (i=0; i < dim; i++)
            vsuma[i] += v1[i] + v2[i];   
           
            return vsuma[i];
           
     
}

     
float producto_vectores(float *v1, float *v2, int dim){
        float prod_escalar = 0;
        int i;
        for (i=0; i < dim; i++)
            prod_escalar += v1[i] * v2[i];
           
            return prod_escalar;
           
            }



Parte de la invocación:
modulov1 = modulo_vector(vector1, diml);
     modulov2 = modulo_vector(vector2, diml);
     
     
     vsuma[DIMMAX] = suma_vectores(vector1, vector2,diml);
     
     prod_escalar = producto_vectores(vector1, vector2, diml);

    /* Resultados
       ---------------------------------------
    */
       puts("\nVectores introducidos:");
       
       puts("\nPrimer vector: ");
       escribir_vector(vector1,diml);

       puts("\n\nSegundo vector: ");
       escribir_vector(vector2,diml);
       
       printf("\n");
       
       
       printf("Módulo del primer  vector: %f\n", modulov1);
       printf("Módulo del segundo vector: %f\n", modulov2);

       puts("\nVector suma:");
       escribir_vector(vsuma,diml);
       

       puts("\nProducto escalar:");
       printf("V1 x V2 = %f\n", prod_escalar);

       printf("\n\n");

rir3760

El código fuente que publicas tiene bastantes errores y la primera recomendación es: consigue un curso o libro de calidad, recomendaciones sobre ellos las puedes consultar mediante el motor de búsqueda de los foros.

Algunos de los errores son:

* En la función "suma_vectores" utilizas el operador "+=" cuando debería ser "+".
* Esa misma función retorna "vsuma[ i ]" con "i" igual a dim pero ese elemento no tiene un valor asignado.
* En la invocación de la función tratas de inicializar el array "vsuma" con el valor de retorno de la función "suma_vectores", eso no es posible ya que una función no puede retornar un array.

Debes cambiar la aproximación y modificar la función de suma de vectores para que acepte cuatro argumentos: las direcciones base de los dos arrays, el numero de elementos en ambos y la dirección base del array de resultados (la suma).

Poco mas o menos así:
/* Declaracion de variables */
float a[NUM_ELEM];
float b[NUM_ELEM];
float suma[NUM_ELEM];

/* ... */

/* Invocacion */
suma_vectores(a, b, NUM_ELEM, suma);

/* ... */

/* Definicion */
void suma_vectores(float *a, float *b, int num_elem, float *suma)
{
   int i;
   
   for (i = 0; i < num_elem; i++)
      suma[i] = a[i] + b[i];
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language