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");
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