Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: TheShocker en 15 Marzo 2015, 17:59 pm



Título: Funciones y Proyectos en C
Publicado por: TheShocker en 15 Marzo 2015, 17:59 pm
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:

Código:
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:
Código:
 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");


Título: Re: Funciones y Proyectos en C
Publicado por: rir3760 en 15 Marzo 2015, 20:29 pm
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í:
Código
  1. /* Declaracion de variables */
  2. float a[NUM_ELEM];
  3. float b[NUM_ELEM];
  4. float suma[NUM_ELEM];
  5.  
  6. /* ... */
  7.  
  8. /* Invocacion */
  9. suma_vectores(a, b, NUM_ELEM, suma);
  10.  
  11. /* ... */
  12.  
  13. /* Definicion */
  14. void suma_vectores(float *a, float *b, int num_elem, float *suma)
  15. {
  16.   int i;
  17.  
  18.   for (i = 0; i < num_elem; i++)
  19.      suma[i] = a[i] + b[i];
  20. }

Un saludo