Berechnen des Skalarprodukts zweier Vektoren in C ++

9

Ich versuche, ein Programm mit einer Funktion double_product(vector<double> a, vector<double> b) zu schreiben, die das Skalarprodukt zweier Vektoren berechnet. Das Skalarprodukt ist

%Vor%

Hier ist was ich habe. Es ist ein Chaos, aber ich versuche es!

%Vor%     
HowardRoark 06.06.2012, 04:03
quelle

5 Antworten

35

Wenn Sie dies nicht selbst tun müssen (z. B. wenn Sie es als Hausaufgabe schreiben), sollten Sie den Standardalgorithmus, der bereits geschrieben wurde, genau verwenden, um genau das zu erreichen, was Sie wollen:

%Vor%

Beachten Sie, dass, während die begin(a) , end(a) in C ++ 11 neu ist, std::inner_product seit C ++ 98 verfügbar ist.

    
Jerry Coffin 06.06.2012 04:44
quelle
10

Sie können die von Ihnen definierte class löschen. Du brauchst es nicht.

In Ihrer Funktion scalar_product :

%Vor%

Es ist fast da. Du brauchst keine 2 Schleifen. Nur eine.

%Vor%

Um diese Funktion jetzt aufzurufen müssen Sie zwei Vektorobjekte in Ihrem main() erstellen, sie mit Werten füllen (natürlich die gleiche Anzahl an Werten!) und dann scalar_product( first_vector_that_you_create, second_vector_object ); aufrufen

    
bobobobo 06.06.2012 04:22
quelle
3

Während Ihnen viele Lösungen vorgestellt wurden, die funktionieren, lassen Sie mich eine andere Variante auf den Markt bringen, um ein paar Konzepte vorzustellen, die Ihnen helfen sollten, besseren Code zu schreiben:

  • class werden nur benötigt, um Daten zusammen zu packen
  • Eine Funktion sollte so schnell wie möglich ihre Voraussetzungen überprüfen, diese sollten dokumentiert werden
  • Eine Funktion sollte Nachbedingungen haben, diese sollten dokumentiert werden
  • Code Wiederverwendung ist der Eckpfeiler der wartbaren Programme

In diesem Sinne:

%Vor%

Sie könnten entscheiden, den inner_product -Algorithmus direkt zu verwenden, aber seien wir ehrlich:

  • es erfordert vier Argumente, nicht zwei
  • es prüft nicht, ob seine Argumente die gleiche Größe haben

also ist es besser, es zu verpacken.

Hinweis: Ich habe const& verwendet, um dem Compiler mitzuteilen, dass er die Vektoren nicht kopieren soll.

    
Matthieu M. 06.06.2012 06:40
quelle
1

Hier ist der Code, den Sie haben sollten. Ich sehe, dass du in deinem Code Klasse benutzt hast, die du hier nicht wirklich brauchst. Lassen Sie mich wissen, ob die Frage die Verwendung der Klasse erfordert.

Da du neu bist und dieser Code dich erschrecken könnte. Also werde ich versuchen, dies zu erklären, während ich gehe. Suchen Sie im Code nach Kommentaren, um zu verstehen, was getan wird, und fragen Sie, ob Sie nicht verstehen.

%Vor%

Wenn Sie eine IDE verwenden, dann kompilieren und starten Sie sie. Wenn Sie eine Befehlszeile auf einem Unix-basierten System mit g ++ - Compiler verwenden, tun Sie Folgendes (wobei Scalar.cpp die Datei ist, die den Code enthält):

%Vor%

Um es auszuführen, geben Sie einfach

ein %Vor%

Sie sollten 1.99 als Ausgabe des obigen Programms erhalten.

    
Ankit 06.06.2012 04:38
quelle
0

Sie scheinen eine Klasse speziell für Vektoren erstellen zu wollen. Die Klasse, die ich in meinem Beispiel erstellt habe, ist auf 3-dimensionale Vektoren zugeschnitten, aber Sie können sie bei Bedarf in eine andere ändern. Die Klasse enthält i, j, k, kann aber auch Skalarprodukte basierend auf anderen MathVectors ausführen. Der andere Vektor wird über eine C ++ - Referenz übergeben. Es ist schwer abzuleiten, was die Frage war, aber ich denke, das könnte sie beantworten.

%Vor%     
jakebird451 06.06.2012 04:28
quelle

Tags und Links