2 Fragen zu math.h und Funktionen
-
Hi, ich habe da mal 2 Fragen an euch:
1. Ich habe ein kleines Programm geschrieben, dass mit Hilfe der pq-Formel Quadratische Qleichungen(teilweise) löst.
Allerdings gibt das Programm manchmal 'nan' als Lösung aus. Hat das was mit
sqrt() zu tun? Bedeutet das, dass es eine negative Wurzel war und man die Gleichung darum nicht lösen kann?2. Und jetzt noch eine Frage zu Funktionen. Ist es möglich Funktionen mit mehreren Rückgabewerten zu schreiben? (Ist wahrscheinlich ne blöde Frage, ich kenn mich aber noch nicht so aus.)
Ich hoffe ihr könnt miir Helfen

-
1. Ja. Es gibt in der Standardbibliothek eine Klassenvorlage std::complex, mit der du aber auch das bewältigen kannst, sofern das gewollt ist.
2. Mehr oder weniger. Will sagen, nicht direkt, aber es gibt Konstrukte, mit denen man sich helfen kann. Entweder die Übergabe per Referenz, also
void foo(int &x, int &y) { x = 2; y = 3; }oder mit Strukturen, etwa
struct werte { int x; double y; long z; }; werte foo() { werte w = { 2, 3.1415926, 2L << 40 }; return w; }Speziell für zwei Werte (ich nehme an, dass du das hier eigentlich brauchst) wäre std::pair denkbar:
#include <utility> std::pair<int, int> foo() { return std::make_pair(2, 3); }und wenn dein Compiler TR1 kennt, gibt es darin std::tr1::tuple - dann musst du nicht für jede Funktion eigene Rückgabestructs schreiben.
Außerdem noch eine Anmerkung: In C++ bindet man üblicherweise nicht <math.h> sondern <cmath> ein. Die Funktionen befinden sich dann im Namensraum std, und es gibt teilweise verbesserte Überladungen.
-
- nan = not a Number ... fuer den Fall der p-q Formel wie schon von dir richtig vermutet:
Honky schrieb:
sqrt() zu tun? Bedeutet das, dass es eine negative Wurzel war und man die Gleichung darum nicht lösen kann?
Ist die Diskriminante negativ (p² − 4q) so gibts keine reelle Loesung und sollte dann von dir auch entsprechend abgefangen werden.
Zum Thema Funktion mit mehreren Rückgabewerten: ja aber anders
- Entweder du verwendest einen Container (vector, struct, array, list ect) die mehrere Werte beinhalten koennen, und gibst diesen zurueck
- oder du arbeitest mit Referenzen bei den Uebergabeparameternvoid foo(int &a, int &b) { a = 12; b = 15; } int main() { int a, b; foo(a, b); cout << a << endl; cout << b << endl; return 0; }(man kann auch nen Container als Uebergabeparameter verwenden)

-
Alles klar. Danke für eure Hilfe
