Hallo Forum, vielleicht bin ich mit meiner Frage hier im falschen Forum, dann mag ein Moderator den Thread doch gerne verschieben. Ich möchte eine Funktion zur Multiplikation von komplexen Zahlen schreiben. Ich würde vier float übergeben und brauche zwei float zurück. Wie könnte ich das machen? Ich habe so die wage Idee ob da eine struct helfen könnte? Bin aber noch zu sehr Anfänger... deshalb frage ich und hoffe auf wohlwollende Hilfe mit wenig Häme. :-)
:
Verschoben durch Moderator
Wenns C mit der GNU libc sein sollte: https://www.gnu.org/software/libc/manual/html_node/Complex-Numbers.html
Da funktioniert beides:
1 | #include <stdio.h> |
2 | |
3 | struct retvalue { |
4 | double a; |
5 | double b; |
6 | };
|
7 | |
8 | struct retvalue test1() { |
9 | struct retvalue res = {1,2}; |
10 | return res; |
11 | }
|
12 | |
13 | void test2(double *res1, double *res2) { |
14 | *res1 = 3; |
15 | *res2 = 4; |
16 | }
|
17 | |
18 | void main() { |
19 | double u, v; |
20 | struct retvalue r; |
21 | |
22 | r = test1(); |
23 | test2(&u, &v); |
24 | |
25 | printf("%lf %lf %lf %lf\n", r.a, r.b, u, v); |
26 | }
|
Roberto schrieb: > Ich möchte eine Funktion zur Multiplikation von komplexen Zahlen > schreiben. Ich würde vier float übergeben und brauche zwei float zurück. > Wie könnte ich das machen? Ich habe so die wage Idee ob da eine struct > helfen könnte? Bin aber noch zu sehr Anfänger... deshalb frage ich und > hoffe auf wohlwollende Hilfe mit wenig Häme. :-) Warum möchtest Du die schreiben? Die meisten Programmiersprachen haben soetwas in ihrer Standard Library.
Torsten R. schrieb: > Warum möchtest Du die schreiben? Vieleicht eine Hausaufgabe? @TO: Es geht wohl um C? Die Stickworte "struct" und "typedef" sind dein Freund. Da du ja möglichst rasch kein "Anfänger" mehr sein willst schlage ich vor du liest dir im Internet/deinem C Buch mal durch was dazu zu finden ist und probierst es aus. So lernst du es am schnellsten. Bei konkreten Fragen meldest du dich hier wieder.
Der Andere schrieb: > @TO: Es geht wohl um C? Dann wäre das ja auch schon in der STD Lib: http://en.cppreference.com/w/c/numeric/complex
Roberto schrieb: > Hallo Forum, vielleicht bin ich mit meiner Frage hier im falschen Forum, > dann mag ein Moderator den Thread doch gerne verschieben. > > Ich möchte eine Funktion zur Multiplikation von komplexen Zahlen > schreiben. Ich würde vier float übergeben und brauche zwei float zurück. > Wie könnte ich das machen? Ich habe so die wage Idee ob da eine struct > helfen könnte? Bin aber noch zu sehr Anfänger... deshalb frage ich und > hoffe auf wohlwollende Hilfe mit wenig Häme. :-) (Ich gehe davon aus, dass es sich um eine Hausaufgabe handelt und Du in einem Schulunterricht C lernst - also vermutlich etwa in der 9 bis 12 Klasse einer Realschule oder eines Gymnasiums bist). Welche Eigenschaften einer Struktur in C könnten sie denn geeignet machen, Deinen Anforderung zu erfüllen? Oder, - zunächst mal unabhängig von Deinen Absichten -, welche Eigenschaften und Zwecke allgemein hat eine Struktur in C?
>Warum möchtest Du die schreiben? Die meisten Programmiersprachen haben >soetwas in ihrer Standard Library. Eine Antwort wäre: Etwas neues entwickeln, was noch niemand entwickelt hat - das ist zu schwierig für eine Anfängerübung.
Torsten R. schrieb: > Dann wäre das ja auch schon in der STD Lib: > http://en.cppreference.com/w/c/numeric/complex Ich sagte C nicht cpp. Ist das z.B. bei den 8 Bit µC Bibliotheken auch implementiert? :-) Ausserdem ist es ja nicht verboten etwas selbst zu programmieren was es schon anderswo gibt, gerade zum lernen oder üben. Deshalb ja auch meine Vermutung: Haus/Übungsaufgabe
Der Andere schrieb: > Torsten R. schrieb: >> Dann wäre das ja auch schon in der STD Lib: >> http://en.cppreference.com/w/c/numeric/complex > > Ich sagte C nicht cpp. Guckst Du mal genau in die Doku! Gibt es schon seit fast 20 Jahren in C ;-) > Ist das z.B. bei den 8 Bit µC Bibliotheken auch implementiert? :-) Warum sollte das nicht der Fall sein? µCs linken gegen libraries in der Regel statisch. Damit gelangt keine Funktion in das finale Binary, die nicht gebraucht wird. Wo wäre der Vorteil von Selbst-schreiben gegenüber einer fertigen Lösung? (Ausserdem sind wir hier im Forum "PC-Programmierung"). > Ausserdem ist es ja nicht verboten etwas selbst zu programmieren was es > schon anderswo gibt, gerade zum lernen oder üben. Alles Spekulation. Deswegen hatte ich den OP ja nach seiner Motivation gefragt.
uups, da habe ich doch glatt vergessen in welcher Programmiersprache ich arbeite. In C mit einem μC Atmega?? Mein Problem wie mache ich das meine Funktion zwei Werte zurück geben kann. Als Datentypen will ich mit integer, float und double arbeiten. Später will ich von komplexen Zahlen auf Quarternionen erweitern. Ist keine Hausaufgabe, habe schon lange keine Schule/Uni von innen gesehen. Schon mal danke. :-)
Roberto schrieb: > Mein Problem wie mache ich das meine Funktion zwei Werte zurück geben > kann. Wurde im Beitrag #5 bereits beschrieben.
Also so:
1 | void mult (double real1, double imag1, double real2, double imag2, double *real3, double *imag3) |
2 | {
|
3 | *real3 = real1 * real2 - imag1 * imag2; |
4 | *imag3 = real1 * imag2 + imag1 * real2; |
5 | }
|
6 | |
7 | int main() |
8 | {
|
9 | double real3 = 0; |
10 | double imag3 = 0; |
11 | mult(1,2,3,4,&real3,&imag3); |
12 | printf("%f %f\n",real3,imag3); |
13 | return 0; |
14 | }
|
Ganz am Anfang wird man Dir gesagt haben, dass "C" nur ein "Dingsbums" als Rückgabewert zulässt. Das kann natürlich auch ein Zeiger sein, der dann auf beliebig viele Etwasse zeigt. Als "natürlicher" Rückgabewert kommt somit nur eine "halbe" komplexe Zahl infrage. Eine weitere Möglichkeit ist die Übergabe von Adressen (&-Operator) über die dann die angegebenen Variablen manipuliert/gesetzt werden können. Oder so.
Welche Funktionen mit komplexen Zahlen sind dem Poster denn bekannt ? log ? exp ? sin ?
>Ganz am Anfang wird man Dir gesagt haben, dass "C" nur ein "Dingsbums" >als Rückgabewert zulässt. Das wurde unseren Grosseltern beigebracht. Bei K&R gab es keine Funktionsprototypen, der Rückgabewert musste in ein Register passen. Inzwischen kann man auch Strukturen als Parameter und Rückgabewerte nehmen. Da musst du dann aber implicit function declaration Warnungen ernst nehmen.
Hallo Forum, Vielen Dank für die Hilfe. Ich denke ich hab`s jetzt. (theoretisch ) praktisch kann ich`s nicht testen, liege mit "Rücken" im Bett und kann nix machen. Muss wohl morgen nach`m Dokter...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.