Skalarprodukt programmieren



  • Guten Tag, ich habe ein Programm Programmiert das Ergebnis ist aber nie richtig. Wo liegt der Fehler?

    #include <stdio.h>
    #define DIMENSION 100

    double skalarprodukt(double x[],double y[],int n){

    int j;
    
    double ergaebnis = 0;
    double produkt = 0;
    
    
    
    for(j=0; j<n; j++){
    
        produkt= x[j]*y[j];
    }
    return ergaebnis= produkt+ ergaebnis;
    

    }
    int main(){
    int n = 0;
    int j = 0;
    double y[n];
    double x[n];

    printf("Bitte Anzahl der Dimensionen n angeben (1-100):");
    scanf("%d",&n);
    
         for(j=0; j<n; j++)
         {
             
        printf("Wert %d für x eingeben: ",j+1);
        scanf("%lf",&x[j]);
    }
    
    
          for(j=0; j<n; j++)
    {
        printf("Wert %d für y eingeben: ",j+1);
        scanf("%lf",&y[j]);
    }
    printf("das Skalarprodukt beträgt %f",skalarprodukt(x,y,n));
        
           return 0;
    }
    

    Danke für die Hilfe!



  • Wer VLA benutzt ist selbst schuld.



  • @Maien
    Das Ergebnis von scalaprodukt ist x[n-1]*y[n-1]. Das spielt aber keine Rolle, da du Arrays der Größe 0 benutzt.



  • Du berechnest n-Mal ein Produkt, verwirfst davon aber alle Ergebnisse bis auf das letzte, das du dem Ergäbnis hinzuaddierst. Es ist übrigens auch hilfreich, wenn du ergebnis richtig schreiben würdest (ohne Beachtung von Großschreibung).

    Dazu noch die VLA-Problematik. Wozu hast du das #define gemacht? Nutze es doch einfach für die Arrays x und y!

    Zum Testen verzichtest du am besten erstmal auf den ganzen Einlesekram (wer wird schon 2x100 Werte von Hand eingeben?!) Mach dir lieber ein paar feste Werte (ungetestet):

    double x1[] = { 1, 2, 3 };
    double x2[] = { 0, 0, 1};
    puts("Es soll immer 0 rauskommen\n");
    printf("1: %f\n", skalarprodukt(x1, x1, 3) - 14);
    printf("2: %f\n", skalarprodukt(x1, x2, 3) - 3);
    

    Dann musst du nicht immer von Hand Werte eingeben. Das ist dann auch gleich der erste Schritt zu automatischen Tests. Wenn die Werte beide passen, probierst du noch ein paar aus. Wenn dann alles stimmt, kannst du die Abfrage per Tastaur dazunehmen.



  • @Maien sagte in Skalarprodukt programmieren:

    int n = 0;
    double y[n];
    double x[n];
    

    Wie groß sind die Arrays?

    C-Arrays können nach ihrer Definition nicht mehr in der Größe geändert werden.


Log in to reply