Arrays und Skalarprodukt



  • Hallo,
    habe hier folgende Aufgabe und einpaar Probleme zu:

    Schreibt eine Funktion dotprod(), die zwei float-Arrays a; b fester Länge NMAX als
    Eingabeparameter besitzt und als Ergebnis das Skalarprodukt zurück
    gibt. Dabei werde NMAX im Rahmenprogramm als Makro definiert.

    Ich habe einpaar Verständnisfragen zunächst:

    Was ist die Länge eines Arrays? Das was in den eckigen Klammernsteht oder nach dem Gleichheitszeichen?

    Was ist ein Eingabeparameter? Wie kann ich ein Makro als Eingabeparameter verwenden?

    Und zu letzt: was meint man mit "Rahmenprogramm"?

    Hier mein Code, soweit ich die Aufgabe verstanden habe.
    Was ist denn daran falsch? Er gibt mir 0 als Ergebnis -.-

    #include<stdio.h>
    #define NMAX 4
    
    dotprod()
    {
             float a[NMAX],b[NMAX],s,i;
             for(i=0;i<(NMAX-1);i++)
             s+=a[NMAX]*b[NMAX];
             return s;
    }
    
    int main()
    
    {
        dotprod();
        printf("%f\n",dotprod());
    
        getchar();
        return 0;
    }
    


  • sorry for doppelpost, mein browser spinnt.
    @mod eins kann gelöscht werden.



  • float skalar(float *x,float *y,size_t l){
      float ret = 0;
      while(l--)
        ret += x[l] * y[l];
      return ret;
    }
    


  • Was ist die Länge eines Arrays? Das was in den eckigen Klammernsteht oder nach dem Gleichheitszeichen?

    Das was in den eckigen Klammern steht. ⚠ Die Zählung beginnt bei 0 und geht bis Länge-1.

    Was ist ein Eingabeparameter?

    Die Werte, die an die Funktion übergeben werden. Z.B.: beim Sinus der Winkel.

    Wie kann ich ein Makro als Eingabeparameter verwenden?

    Einfach das Makro einsetzen.

    #define MY_PI 3.141
    x = sin(MY_PI);
    

    Und zu letzt: was meint man mit "Rahmenprogramm"?

    Das Programm, das deine Funktion testet. Das Drumherum, die Funktion muss nicht im selben Quelltext stehen.

    Was ist denn daran falsch? Er gibt mir 0 als Ergebnis -.-

    Du hast deinen Vektoren ja keine Werte zugewiesen. Evtl. hat der Compiler das Array mit 0.0 initialisiert.
    Das besetzen des Arrays mit Werten gehört auch ins Rahmenprogramm, genauso wie das definieren der Arrays:

    float a[NMAX],b[NMAX],x;
      a[0] = 1.0;
      b[0] = 1.1;
    ...
      a[NMAX-1] = 3.0;
      b[NMAX-1] = 2.0;
    
      x = skalar(a,b,NMAX);
    

    PS: Lies ein C-Buch (am besten asu Papier). Und bei 😕 lies es nochmal und probier die Beispiele aus dem Buch auch aus.


Log in to reply