matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++Komplexe Zahlen in C
Foren für weitere Studienfächer findest Du auf www.vorhilfe.de z.B. Astronomie • Medizin • Elektrotechnik • Maschinenbau • Bauingenieurwesen • Jura • Psychologie • Geowissenschaften
Forum "C/C++" - Komplexe Zahlen in C
Komplexe Zahlen in C < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Komplexe Zahlen in C: Hilfe, Korrektur, Tipp
Status: (Frage) beantwortet Status 
Datum: 21:37 So 31.03.2013
Autor: Mija

Aufgabe
Definieren Sie einen Strukturdatentyp complex für das Rechnen mit komplexen Zahlen. Stellen Sie für diesen Datentyp die folgenden Funktionen bereit:
a) Die Funktion betrag() berechnet den Betrag einer komplexen Zahl.
b) Die Funktionen real() und imag() liefern den reellen bzw. den imaginären Teil einer komplexen Zahl.
c) Die Funktion print() gibt eine komplexe Zahl 1, 2 − 4, 3 i auf der Konsole in der Form (1.20, -4.30) aus.
d) Die Rechenfunktionen für die Addition add() und die Subtraktion sub(), Multiplikation mult() und Division div() zweier komplexen Zahlen.
e) read() zur Eingabe einer Variablen vom Typ complex über die Tastatur, d.h. des reellen und imaginären Anteils der Variablen.
f) set() zur Erzeugung einer Variablen vom Strukturdatentyp complex. Diese Funktion soll als Parameter zwei Gleitkommazahlen für den reellen bzw. den imaginären Teil bekommen und eine Variable vom Strukturdatentyp complex zurückliefern.
Schreiben Sie ein Hauptprogramm zum Testen aller dieser Funktionen (vorzugsweise eine switch-Anweisung). Der Dialog könnte so aussehen:

Komplexe Zahlen
===================
Eingabe 1. Zahl: 1
Betrag: 2
Reeller Teil: 3
Imaginaerer Teil: 4
-------------------
Eingabe 2. Zahl 5
Addieren 6
Subtrahieren 7
Multiplizieren 8
Dividieren 9
-------------------
Setzen 10
-------------------
Ende 0
===================
Ihre Wahl? 1

Benutzen Sie die Funktion print() bei der Ausgabe einer komplexen Zahl.


Hallo, ich habe ein paar Probleme mit der oben stehenden Aufgabe bzw. einige Fragen dazu:

- Zu meinen Funktionen real() (Zeile 47) und imag() (Zeile 53) sagt Visual Studio, dass dies keine Funktionen sind. Was habe ich da falsch gemacht bzw. was muss ich ändern?
Außerdem sagt mir Visual Studio, dass es dort irgendwie pointer-to-Variablen sein müssen. Aber wie soll ich das da einbauen. Das brauche ich doch garnicht?!
- Irgendwie komme ich mit der read()-Funktion (ab Zeile 106) noch nicht zurecht. Könnte mir da bitte jemand helfen?

Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte! :-)

Hier ist mein C-Code:

1:
2: #include <stdio.h>
3: #include <stdlib.h>
4: #include <math.h>
5:
6: //Strukturdatentyp complex
7: typedef struct {
8: double real;
9: double imag;
10: } complex;
11:
12: //Funktionsdeklarationen
13: void clearBuffer();
14: double betrag(double,double);
15: double real(complex);
16: double imag(complex);
17: complex add(complex,complex);
18: complex sub(complex,complex);
19: complex mult(complex,complex);
20: complex divi(complex,complex);
21: void print(complex);
22: complex read(complex);
23: complex set(double,double);
24:
25:
26: //Funktionsdefinitionen
27:
28: //Puffer leeren
29: void clearBuffer()
30: {  
31: char Dummy;
32: do
33: {
34: scanf("%c", &Dummy);
35: } while (Dummy != '\n');
36:
37: return;
38: }
39:
40: //Berechnung des Betrags
41: double betrag(double real, double imag)
42: {
43: return sqrt(real*real+imag*imag);
44: }
45:
46: //liefert Realteil einer komplexen Zahl
47: double real(complex z)
48: {
49: return z.real;
50: }
51:
52: //liefert Imaginerteil einer komplexen Zahl
53: double imag(complex z)
54: {
55: return z.imag;
56: }
57:
58: //Addition von komplexen Zahlen
59: complex add(complex x, complex y)
60: {
61: complex ausgabewert;
62: ausgabewert.real = x.real + y.real;
63: ausgabewert.imag = x.imag + y.imag;
64: return ausgabewert;
65: }
66:
67: //Subtraktion von komplexen Zahlen
68: complex sub(complex x, complex y)
69: {
70: complex ausgabewert;
71: ausgabewert.real = x.real - y.real;
72: ausgabewert.imag = x.imag - y.imag;
73: return ausgabewert;
74: }
75:
76: //Multiplikation von komplexen Zahlen
77: complex mult(complex x, complex y)
78: {
79: complex ausgabewert;
80: ausgabewert.real = x.real*y.real - x.imag*y.imag;
81: ausgabewert.imag = x.real*y.imag - x.imag*y.real;
82: return ausgabewert;
83: }
84:
85: //Division von komplexen Zahlen
86: complex divi(complex x, complex y)
87: {
88: complex ausgabewert;
89: if (y.real==0 && y.imag==0)
90: perror("Division durch 0!");
91: else
92: {
93: ausgabewert.real = (x.real*y.real - x.imag*y.imag) / (y.imag*y.imag + x.imag*x.imag);
94: ausgabewert.imag = (x.real*y.imag - x.imag*y.real) / (y.imag*y.imag + x.imag*x.imag);
95: }
96: return ausgabewert;
97: }
98:
99: //Ausgabefunktion
100: void print(complex z)
101: {
102: printf("(%.2f%,.2f)\n",z.real,z.imag);
103: }
104:
105: //Eingabefunktion
106: complex read(complex z)
107: {
108: double real;
109: double imag;
110: printf("Geben Sie eine komplexe Zahl ein, indem Sie zuerst den Realteil\n");
111: printf("und dann durch enter getrennt den Imaginaerteil eingeben.\n");
112: scanf("%f", &z.real);
113: scanf("%f", &z.imag);
114: /*real = z.real;
115: imag = z.imag;
116: return real;
117: return imag;*/
118: }
119:
120: //Funktion zur Erzeugung einer Variablen vom Strukturdatentyp complex
121: complex set(double real, double imag)
122: {
123: complex ausgabewert;
124: printf("Realteil: ");
125: scanf("%f", &real);
126: printf("Imaginaerteil: ");
127: scanf("%f", &imag);
128: ausgabewert.real = real;
129: ausgabewert.imag = imag;
130: return ausgabewert;
131: }
132:
133:
134: //Main-Programm
135: int main(void)
136: {
137: int wahl;
138: double real, imag, ergreell;
139: complex x,y,z, ergcomplex;
140:
141: //Eingabe
142: printf("Komplexe Zahlen");
143: printf("===================");
144: printf("Eingabe 1. Zahl: 1");
145: printf("Betrag: 2");
146: printf("Reeller Teil: 3");
147: printf("Imaginaerer Teil: 4");
148: printf("-------------------");
149: printf("Eingabe 2. Zahl: 5");
150: printf("Addieren: 6");
151: printf("Subtrahieren: 7");
152: printf("Multiplizieren: 8");
153: printf("Dividieren: 9");
154: printf("-------------------");
155: printf("Setzen: 10");
156: printf("-------------------");
157: printf("Ende: 0");
158: printf("===================");
159: printf("Ihre Wahl? ");
160: scanf("%d", &wahl);
161:
162: switch(wahl)
163: {
164: case 1: ergcomplex = read(z); print(ergcomplex); break;
165: case 2: ergreell = betrag(real,imag); printf("(%lf,0.00)\n", ergreell); break;
166: case 3: ergreell = real(z); printf("(%lf,0.00)\n", ergreell); break;
167: case 4: ergreell = imag(z); printf("(%lf,0.00)\n", ergreell); break;
168: case 5: ergcomplex = read(z); print(ergcomplex); break;
169: case 6: ergcomplex = add(x,y); print(ergcomplex); break;
170: case 7: ergcomplex = sub(x,y); print(ergcomplex); break;
171: case 8: ergcomplex = mult(x,y); print(ergcomplex); break;
172: case 9: ergcomplex = divi(x,y); print(ergcomplex); break;
173: case 10: ergcomplex = set(real,imag); print(ergcomplex); break;
174: case 0: printf("\nEnde.\n"); break;
175: default: printf("\nUngueltige Eingabe!\n"); break;
176: }
177:
178:
179: clearBuffer();
180:
181: return 0;
182: }


        
Bezug
Komplexe Zahlen in C: Antwort
Status: (Antwort) fertig Status 
Datum: 22:22 So 31.03.2013
Autor: MathePower

Hallo Mija,

> Definieren Sie einen Strukturdatentyp complex
> für das Rechnen mit komplexen Zahlen. Stellen Sie für
> diesen Datentyp die folgenden Funktionen bereit:
>  a) Die Funktion betrag() berechnet den Betrag einer
> komplexen Zahl.
>  b) Die Funktionen real() und imag() liefern den reellen
> bzw. den imaginären Teil einer komplexen Zahl.
>  c) Die Funktion print() gibt eine komplexe Zahl 1, 2 −
> 4, 3 i auf der Konsole in der Form (1.20, -4.30) aus.
>  d) Die Rechenfunktionen für die Addition add() und die
> Subtraktion sub(), Multiplikation mult() und Division div()
> zweier komplexen Zahlen.
>  e) read() zur Eingabe einer Variablen vom Typ complex
> über die Tastatur, d.h. des reellen und imaginären
> Anteils der Variablen.
>  f) set() zur Erzeugung einer Variablen vom
> Strukturdatentyp complex. Diese Funktion soll als Parameter
> zwei Gleitkommazahlen für den reellen bzw. den imaginären
> Teil bekommen und eine Variable vom Strukturdatentyp
> complex zurückliefern.
>  Schreiben Sie ein Hauptprogramm zum Testen aller dieser
> Funktionen (vorzugsweise eine switch-Anweisung). Der Dialog
> könnte so aussehen:
>  
> Komplexe Zahlen
>  ===================
>  Eingabe 1. Zahl: 1
>  Betrag: 2
>  Reeller Teil: 3
>  Imaginaerer Teil: 4
>  -------------------
>  Eingabe 2. Zahl 5
>  Addieren 6
>  Subtrahieren 7
>  Multiplizieren 8
>  Dividieren 9
>  -------------------
>  Setzen 10
>  -------------------
>  Ende 0
>  ===================
>  Ihre Wahl? 1
>  
> Benutzen Sie die Funktion print() bei der Ausgabe einer
> komplexen Zahl.
>  
> Hallo, ich habe ein paar Probleme mit der oben stehenden
> Aufgabe bzw. einige Fragen dazu:
>  
> - Zu meinen Funktionen real() (Zeile 47) und imag() (Zeile
> 53) sagt Visual Studio, dass dies keine Funktionen sind.
> Was habe ich da falsch gemacht bzw. was muss ich ändern?


Nun in main wurden die Variablen real und imag als double definiert.
Gleichzeitig werden in main auch Funktionen gleichen Namens aufgerufen.
Das kannst Du beheben, in dem Du die Variablennamen änderst.


>  Außerdem sagt mir Visual Studio, dass es dort irgendwie
> pointer-to-Variablen sein müssen. Aber wie soll ich das da
> einbauen. Das brauche ich doch garnicht?!
>  - Irgendwie komme ich mit der read()-Funktion (ab Zeile
> 106) noch nicht zurecht. Könnte mir da bitte jemand
> helfen?


Erstens liest Du double Variablen ein.
Zweitens erwartet scanf dann eine Adresse.
Drittens müßtest Du noch in eine float-Adresse konvertieren.

Statt

scanf("%f", z.real);

muss es

scanf("%f", (float *) &z.real);

lauten.

Bei der Ausgabefunktion void print(complex z) ist das Format anzupassen.


>  
> Ich würde mich sehr freuen, wenn mir jemand weiterhelfen
> könnte! :-)


Gruss
MathePower

Bezug
                
Bezug
Komplexe Zahlen in C: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:07 Mo 01.04.2013
Autor: Mija

Hallo MathePower, vielen Dank für deine schnelle Antwort!

Ich bekomme zwar momentan keine Fehlermeldungen mehr, aber Warnungen, dass ich die Variablen x,y und z noch (in der Main) initialisieren muss.
Wie mache ich das denn mir typedef struct - Strukturdatentypen? Muss ich das ganz oben bei der Deklaration schon machen?

Ist meine aktuelle read()-Funktion (Zeile 106) denn so richtig?

1:
2: #include <stdio.h>
3: #include <stdlib.h>
4: #include <math.h>
5:
6: //Strukturdatentyp complex
7: typedef struct {
8: double real;
9: double imag;
10: } complex;
11:
12: //Funktionsdeklarationen
13: void clearBuffer();
14: double betrag(double,double);
15: double real(complex);
16: double imag(complex);
17: complex add(complex,complex);
18: complex sub(complex,complex);
19: complex mult(complex,complex);
20: complex divi(complex,complex);
21: void print(complex);
22: complex read(complex);
23: complex set(double,double);
24:
25:
26: //Funktionsdefinitionen
27:
28: //Puffer leeren
29: void clearBuffer()
30: {  
31: char Dummy;
32: do
33: {
34: scanf_s("%c", &Dummy);
35: } while (Dummy != '\n');
36:
37: return;
38: }
39:
40: //Berechnung des Betrags
41: double betrag(double real, double imag)
42: {
43: return sqrt(real*real+imag*imag);
44: }
45:
46: //liefert Realteil einer komplexen Zahl
47: double real(complex z)
48: {
49: return z.real;
50: }
51:
52: //liefert Imaginerteil einer komplexen Zahl
53: double imag(complex z)
54: {
55: return z.imag;
56: }
57:
58: //Addition von komplexen Zahlen
59: complex add(complex x, complex y)
60: {
61: complex ausgabewert;
62: ausgabewert.real = x.real + y.real;
63: ausgabewert.imag = x.imag + y.imag;
64: return ausgabewert;
65: }
66:
67: //Subtraktion von komplexen Zahlen
68: complex sub(complex x, complex y)
69: {
70: complex ausgabewert;
71: ausgabewert.real = x.real - y.real;
72: ausgabewert.imag = x.imag - y.imag;
73: return ausgabewert;
74: }
75:
76: //Multiplikation von komplexen Zahlen
77: complex mult(complex x, complex y)
78: {
79: complex ausgabewert;
80: ausgabewert.real = x.real*y.real - x.imag*y.imag;
81: ausgabewert.imag = x.real*y.imag - x.imag*y.real;
82: return ausgabewert;
83: }
84:
85: //Division von komplexen Zahlen
86: complex divi(complex x, complex y)
87: {
88: complex ausgabewert;
89: if (y.real==0 && y.imag==0)
90: perror("Division durch 0!");
91: else
92: {
93: ausgabewert.real = (x.real*y.real - x.imag*y.imag) / (y.imag*y.imag + x.imag*x.imag);
94: ausgabewert.imag = (x.real*y.imag - x.imag*y.real) / (y.imag*y.imag + x.imag*x.imag);
95: }
96: return ausgabewert;
97: }
98:
99: //Ausgabefunktion
100: void print(complex z)
101: {
102: printf("\n\n(%.2lf,%.2lf)\n\n",z.real,z.imag);
103: }
104:
105: //Eingabefunktion
106: complex read(complex z)
107: {
108: //double real;
109: //double imag;
110: printf("Geben Sie eine komplexe Zahl ein, indem Sie zuerst den Realteil\n");
111: printf("und dann durch enter getrennt den Imaginaerteil eingeben.\n");
112: scanf_s("%f", &z.real);
113: scanf_s("%f", &z.imag);
114: return z;
115: }
116:
117: //Funktion zur Erzeugung einer Variablen vom Strukturdatentyp complex
118: complex set(double real, double imag)
119: {
120: complex ausgabewert;
121: printf("Realteil: ");
122: scanf_s("%f", &real);
123: printf("Imaginaerteil: ");
124: scanf_s("%f", &imag);
125: ausgabewert.real = real;
126: ausgabewert.imag = imag;
127: return ausgabewert;
128: }
129:
130:
131: //Main-Programm
132: int main(void)
133: {
134: int wahl;
135: double realt=0, imagt=0, ergreell=0;
136: complex x,y,z, ergcomplex;
137:
138: //Eingabe
139: printf("Komplexe Zahlen\n");
140: printf("===================\n");
141: printf("Eingabe 1. Zahl: 1\n");
142: printf("Betrag: 2\n");
143: printf("Reeller Teil: 3\n");
144: printf("Imaginaerer Teil: 4\n");
145: printf("-------------------\n");
146: printf("Eingabe 2. Zahl: 5\n");
147: printf("Addieren: 6\n");
148: printf("Subtrahieren: 7\n");
149: printf("Multiplizieren: 8\n");
150: printf("Dividieren: 9\n");
151: printf("-------------------\n");
152: printf("Setzen: 10\n");
153: printf("-------------------\n");
154: printf("Ende: 0\n");
155: printf("===================\n");
156: printf("Ihre Wahl? ");
157: scanf_s("%d", &wahl);
158:
159: switch(wahl)
160: {
161: case 1: read(z); break;
162: case 2: ergreell = betrag(realt,imagt); printf("(%lf,0.00)\n", ergreell); break;
163: case 3: ergreell = real(z); printf("(%lf,0.00)\n", ergreell); break;
164: case 4: ergreell = imag(z); printf("(%lf,0.00)\n", ergreell); break;
165: case 5: read(z); break;
166: case 6: ergcomplex = add(x,y); print(ergcomplex); break;
167: case 7: ergcomplex = sub(x,y); print(ergcomplex); break;
168: case 8: ergcomplex = mult(x,y); print(ergcomplex); break;
169: case 9: ergcomplex = divi(x,y); print(ergcomplex); break;
170: case 10: ergcomplex = set(realt,imagt); print(ergcomplex); break;
171: case 0: printf("\nEnde.\n"); break;
172: default: printf("\nUngueltige Eingabe!\n"); break;
173: }
174:
175:
176: clearBuffer();
177:
178: return 0;
179: }


Bezug
                        
Bezug
Komplexe Zahlen in C: Antwort
Status: (Antwort) fertig Status 
Datum: 18:47 Mo 01.04.2013
Autor: MathePower

Hallo Mija,

> Hallo MathePower, vielen Dank für deine schnelle Antwort!
>  
> Ich bekomme zwar momentan keine Fehlermeldungen mehr, aber
> Warnungen, dass ich die Variablen x,y und z noch (in der
> Main) initialisieren muss.
>  Wie mache ich das denn mir typedef struct -
> Strukturdatentypen? Muss ich das ganz oben bei der
> Deklaration schon machen?


Nein.
Das machst Du wenn die Variablen definiert werden.
Das geht dann so:

complex x={0,0}, y={0,0},z={0,0};


>  
> Ist meine aktuelle read()-Funktion (Zeile 106) denn so
> richtig?

>


Eventuell kannst Du bei der [mm] scanf\_s-Funktion [/mm]  als Format "%lf"  verwenden,
da der Real- und Imaginärteil als double deklariert wurden.


Gruss
MathePower

Bezug
                                
Bezug
Komplexe Zahlen in C: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:33 Mo 01.04.2013
Autor: Mija

Hallo Mathepower, jetzt bin ich fast fertig :-)

Eine Frage habe ich noch:
Wenn ich den Real- und Imaginaerteil für komplexe Zahlen eingegeben habe, dann bekomme ich zwar die richtige Ausgabe als Rückversicherung, dass alles stimmt. Aber nachdem irgendeine Funktion, z.B. Addieren angewendet wurde, bekomme ich als Ergebnis immer (0.00,0.00).
Wo ist da mein Fehler? %lf stimmt doch für die Ausgabe, oder?


1:
2: #include <stdio.h>
3: #include <stdlib.h>
4: #include <math.h>
5:
6: //Strukturdatentyp complex
7: typedef struct{
8: double real;
9: double imag;
10: } complex;
11:
12:
13: //Funktionsdeklarationen
14: void clearBuffer();
15: double betrag(double,double);
16: double real(complex);
17: double imag(complex);
18: complex add(complex,complex);
19: complex sub(complex,complex);
20: complex mult(complex,complex);
21: complex divi(complex,complex);
22: void print(complex);
23: complex read(complex);
24: complex set(double,double);
25:
26:
27: //Funktionsdefinitionen
28:
29: //Puffer leeren
30: void clearBuffer()
31: {  
32: char Dummy;
33: do
34: {
35: scanf_s("%c", &Dummy);
36: } while (Dummy != '\n');
37:
38: return;
39: }
40:
41: //Berechnung des Betrags
42: double betrag(double real, double imag)
43: {
44: return sqrt(real*real+imag*imag);
45: }
46:
47: //liefert Realteil einer komplexen Zahl
48: double real(complex z)
49: {
50: return z.real;
51: }
52:
53: //liefert Imaginerteil einer komplexen Zahl
54: double imag(complex z)
55: {
56: return z.imag;
57: }
58:
59: //Addition von komplexen Zahlen
60: complex add(complex x, complex y)
61: {
62: complex ausgabewert;
63: ausgabewert.real = x.real + y.real;
64: ausgabewert.imag = x.imag + y.imag;
65: return ausgabewert;
66: }
67:
68: //Subtraktion von komplexen Zahlen
69: complex sub(complex x, complex y)
70: {
71: complex ausgabewert;
72: ausgabewert.real = x.real - y.real;
73: ausgabewert.imag = x.imag - y.imag;
74: return ausgabewert;
75: }
76:
77: //Multiplikation von komplexen Zahlen
78: complex mult(complex x, complex y)
79: {
80: complex ausgabewert;
81: ausgabewert.real = x.real*y.real - x.imag*y.imag;
82: ausgabewert.imag = x.real*y.imag - x.imag*y.real;
83: return ausgabewert;
84: }
85:
86: //Division von komplexen Zahlen
87: complex divi(complex x, complex y)
88: {
89: complex ausgabewert;
90: if (y.real==0 && y.imag==0)
91: perror("Division durch 0!");
92: else
93: {
94: ausgabewert.real = (x.real*y.real - x.imag*y.imag) / (y.imag*y.imag + x.imag*x.imag);
95: ausgabewert.imag = (x.real*y.imag - x.imag*y.real) / (y.imag*y.imag + x.imag*x.imag);
96: }
97: return ausgabewert;
98: }
99:
100: //Ausgabefunktion
101: void print(complex z)
102: {
103: printf("\n\n(%.2lf,%.2lf)\n\n",z.real,z.imag);
104: }
105:
106: //Eingabefunktion
107: complex read(complex z)
108: {
109: //double real;
110: //double imag;
111: printf("Geben Sie eine komplexe Zahl ein, indem Sie zuerst den Realteil\n");
112: printf("und dann durch enter getrennt den Imaginaerteil eingeben.\n");
113: scanf_s("%lf", &z.real);
114: //clearBuffer();
115: scanf_s("%lf", &z.imag);
116: //clearBuffer();
117: printf("Ihre Eingabe: (%.2lf,%.2lf)\n\n",z.real,z.imag);
118: return z;
119: }
120:
121: //Funktion zur Erzeugung einer Variablen vom Strukturdatentyp complex
122: complex set(double real, double imag)
123: {
124: complex ausgabewert;
125: printf("Realteil: ");
126: scanf_s("%lf", &real);
127: clearBuffer();
128: printf("Imaginaerteil: ");
129: scanf_s("%lf", &imag);
130: clearBuffer();
131: ausgabewert.real = real;
132: ausgabewert.imag = imag;
133: return ausgabewert;
134: }
135:
136:
137: //Main-Programm
138: int main(void)
139: {
140: int wahl;
141: double realt=0.0, imagt=0.0, ergreell=0.0;
142: complex x={0.0, 0.0}, y={0.0, 0.0}, z={0.0, 0.0}, ergcomplex={0.0, 0.0};
143:
144: //Eingabe
145: do{
146: printf("Komplexe Zahlen\n");
147: printf("===================\n");
148: printf("Eingabe 1. Zahl: 1\n");
149: printf("Betrag: 2\n");
150: printf("Reeller Teil: 3\n");
151: printf("Imaginaerer Teil: 4\n");
152: printf("-------------------\n");
153: printf("Eingabe 2. Zahl: 5\n");
154: printf("Addieren: 6\n");
155: printf("Subtrahieren: 7\n");
156: printf("Multiplizieren: 8\n");
157: printf("Dividieren: 9\n");
158: printf("-------------------\n");
159: printf("Setzen: 10\n");
160: printf("-------------------\n");
161: printf("Ende: 0\n");
162: printf("===================\n");
163: printf("Ihre Wahl? ");
164: scanf_s("%d", &wahl);
165:
166: switch(wahl)
167: {
168: case 1: read(z); break;
169: case 2: ergreell = betrag(realt,imagt); printf("\nBetrag: |z| = %.2lf\n\n", ergreell); break;
170: case 3: ergreell = real(z); printf("\nRealteil: x = %.2lf\n\n", ergreell); break;
171: case 4: ergreell = imag(z); printf("\nImaginaerteil: y = %.2lf\n\n", ergreell); break;
172: case 5: read(z); break;
173: case 6: ergcomplex = add(x,y); print(ergcomplex); break;
174: case 7: ergcomplex = sub(x,y); print(ergcomplex); break;
175: case 8: ergcomplex = mult(x,y); print(ergcomplex); break;
176: case 9: ergcomplex = divi(x,y); print(ergcomplex); break;
177: case 10: ergcomplex = set(realt,imagt); print(ergcomplex); break;
178: case 0: printf("\nEnde.\n"); break;
179: default: printf("\nUngueltige Eingabe!\n"); break;
180: }
181:
182: clearBuffer();
183:
184: } while (wahl==1 || wahl==5);
185:
186: return 0;
187: }

Bezug
                                        
Bezug
Komplexe Zahlen in C: Antwort
Status: (Antwort) fertig Status 
Datum: 19:56 Mo 01.04.2013
Autor: MathePower

Hallo Mija,

> Hallo Mathepower, jetzt bin ich fast fertig :-)
>  
> Eine Frage habe ich noch:
>  Wenn ich den Real- und Imaginaerteil für komplexe Zahlen
> eingegeben habe, dann bekomme ich zwar die richtige Ausgabe
> als Rückversicherung, dass alles stimmt. Aber nachdem
> irgendeine Funktion, z.B. Addieren angewendet wurde,
> bekomme ich als Ergebnis immer (0.00,0.00).
>  Wo ist da mein Fehler? %lf stimmt doch für die Ausgabe,
> oder?
>  


Ja, das stimmt.

Das das Ergebnis so wwie beschrieben ausgegeben wird,
liegt am Ausgabeformat "%.2lf".


Gruss
MathePower

Bezug
                                                
Bezug
Komplexe Zahlen in C: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:10 Mo 01.04.2013
Autor: Mija

Ja, aber warum bekomme ich immer nur Nullen als Lösung heraus?

Bezug
                                                        
Bezug
Komplexe Zahlen in C: Antwort
Status: (Antwort) fertig Status 
Datum: 20:27 Mo 01.04.2013
Autor: MathePower

Hallo Mija,

> Ja, aber warum bekomme ich immer nur Nullen als Lösung
> heraus?


Die komplexen Zahlen x und y haben nach wie vor den Wert (0,0).
Willst Du dies veränderen, dann musst Du, bevor Du z.B. addierst,
den Benutzer zur Eingabe dieser komplexen Zahlen auffordern.


Gruss
MathePower



Bezug
                                                                
Bezug
Komplexe Zahlen in C: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:34 Mo 01.04.2013
Autor: Mija

Wenn ich die komplexen Zahlen x und y eingebe (also wahl=1 und dann wahl=5, also die read()-Funktion angewendet wird - dort werden Sie ja richtig eingelesen), und dann die Zahlen z.B. addieren will, dann kommen trotzdem nur Nullen als Lösungen heraus..

Bezug
                                                                        
Bezug
Komplexe Zahlen in C: Antwort
Status: (Antwort) fertig Status 
Datum: 20:44 Mo 01.04.2013
Autor: MathePower

Hallo Mija,

> Wenn ich die komplexen Zahlen x und y eingebe (also wahl=1
> und dann wahl=5, also die read()-Funktion angewendet wird -
> dort werden Sie ja richtig eingelesen), und dann die Zahlen
> z.B. addieren will, dann kommen trotzdem nur Nullen als
> Lösungen heraus..


Das ist klar, da Du  die Variable z einliest (1)
und die Variablen x und y addierst (5).

Das musst Du dann in etwa so ändern:

case 6: read(x);read(y);ergcomplex = add(x,y); print(ergcomplex); break;

Desweiteren kann entweder nur eingegeben (1)
oder addiert (5) werden, da der Benutzer nur einmal die Wahl hat.


Gruss
MathePower

Bezug
                                                                                
Bezug
Komplexe Zahlen in C: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:51 Mo 01.04.2013
Autor: Mija

Ich hatte eine do-while-Schleife gemacht, die solange läuft solange man die erste oder zweite Zahl eingegeben hat.

Davon mal abgesehen habe es mal so ausprobiert wie du vorgeschlagen hast, aber dann bekomme ich leider auch nur Nullen heraus.

Bezug
                                                                                        
Bezug
Komplexe Zahlen in C: Antwort
Status: (Antwort) fertig Status 
Datum: 21:06 Mo 01.04.2013
Autor: MathePower

Hallo Mija,

> Ich hatte eine do-while-Schleife gemacht, die solange
> läuft solange man die erste oder zweite Zahl eingegeben
> hat.
>  
> Davon mal abgesehen habe es mal so ausprobiert wie du
> vorgeschlagen hast, aber dann bekomme ich leider auch nur
> Nullen heraus.


Es muss natürlich so lauten:

x=read(x);y=read(y);


Dann sollte das funktionieren.


Gruss
MathePower

Bezug
                                                                                                
Bezug
Komplexe Zahlen in C: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:30 Mo 01.04.2013
Autor: Mija

Juhu, es funktioniert!! :-)

Vielen Dank für deine Geduld!

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]