C++ Komplexer Rechner

Gast #2182292
1
#include <iostream>
2

3
using namespace std;
4

5
#include "complexArithmetics.h"
6

7
// Definition
8

9
int sum( double x1, double y1, double x2, double y2, double x3, double y3)
10
{
11
    
12
  x3 = x1+x2;
13
    y3 = y1+y2;
14
  return 0;
15

16
      
17
}
18

19
int diff( double x1, double y1, double x2, double y2, double x3, double y3)
20
{
21
  x3 = x1-x2;
22
  y3 = y1-y2;
23
  return 0;
24
}
25
int prod( double x1, double y1, double x2, double y2, double x3, double y3)
26
{
27
  x3 = (x1*x2)-(y1*y2);
28
  y3 = (x1*y2)+(y1*x2);
29
  return 0;
30
}
31
int quot( double x1, double y1, double x2, double y2, double x3, double y3)
32
{
33
  if ( (( x2*x2) + (y2*y2)) != 0)
34
  {
35
  x3 = ((x1*x2) + (y1*y2)) /(( x2*x2) + (y2*y2));
36
  y3 = ((y1*x2) + (y2*x1)) /(( x2*x2) + (y2*y2));
37
  }
38
  return 0;
39
}
40

41

42
void readComplex ( double &x, double &y)
43
{
44
  cout <<"Realteil: " ;
45
  cin >> x;
46
  cout <<"Imaginärteil: " ;
47
  cin >> y;
48
}
49

50

51

52

53
/* Gibt komplexe Zahl x + j*y am Bildschirm aus */
54
void printComplex( double x, double y ) {
55
  if ( y >= 0 ) 
56
    cout << "( " << x << " +" << y << "*j )";
57
  else
58
      cout << "( " << x << " " << y << "*j )";
59
}
60

61

62
void complexCalculator() {
63
  double x1 , y1 , x2, y2, x3 = 0, y3 = 0;
64
  int errorCode;
65
    char c;
66
  
67

68
  do {
69
    x1 = x3;
70
    y1 = y3;
71

72
    cout << endl << "Aktuelle Zahl: ";
73
    printComplex( x1, y1 );
74
    cout << endl << endl;
75
    
76

77
    cout << "Weitere Operation?" << endl
78
       << "+  fuer Addition" << endl
79
             << "-  fuer Subtraktion" << endl
80
       << "*  fuer Produkt" << endl
81
       << "/  fuer Division" << endl
82
       << "0  Ergebnis auf 0 setzen" << endl
83
       << "e  beenden" << endl << endl
84
       << "Eingabe: ";
85
      cin >> c;
86

87
    switch ( c ) {
88
      case 'e' :
89
        break;
90

91
      case '0' : 
92
        x3 = 0; 
93
        y3 = 0;  
94
        break;
95

96
      case '+': case '-': case '*': case '/':
97

98
        cout << "Zweiter Operand: " << endl;
99
                readComplex( x2, y2 );
100

101
        switch ( c ) {
102
          case '+': errorCode = sum(x1, y1, x2, y2, x3, y3 ); break;
103
          case '-': errorCode = diff(x1, y1, x2, y2, x3, y3 ); break;
104
          case '*': errorCode = prod(x1, y1, x2, y2, x3, y3 ); break;
105
          case '/': errorCode = quot(x1, y1, x2, y2, x3, y3 ); break;
106
        }
107

108
        switch ( errorCode ) {
109
          case 1: cout << endl <<  "***** Division durch 0! ***** " << endl
110
                 << "***** Rechnung konnte nicht ausgefuehrt werden! *****"  << endl; break;
111
          case 0: cout << endl;
112
              printComplex(x1,y1); 
113
              cout << " " << c << " " ;
114
              printComplex(x2,y2); 
115
              cout << " = " ;
116
              printComplex(x3,y3); 
117
              cout << endl;
118
              break;
119
          default: cout << "Unbekannter Fehler!" << endl; 
120
        }
121
        break;
122

123
      default: 
124
        cout << endl << "***** Ungueltige Eingabe! *****" << endl;
125
    }
126
  } while ( c!= 'e' );
127
    
128
  return ;
129
}




kann mir evtl jemand erklären warum dieser "Rechner" nicht rechnet ? ^^

Immer wenn ich Zahlen zum rechnen eingeb gibt er mir als aktuelle Zahl 
(0+0*j) aus ...

Wäre nett wenn mir jemand helfen könnte (wenn benötigt kann ich auch 
noch die Header und main.cpp hier reinstellen)

Vielen Dank
C++Noob
Persönliche Seite
C++-Noob schrieb:
> Immer wenn ich Zahlen zum rechnen eingeb gibt er mir als
> aktuelle Zahl (0+0*j) aus ...
Wenn du die Parameter ändern willst, musst du diese wohl über 
Referenz/Pointer übergeben sonst wird das nix, dann kriegst du nämlich 
nur ne Kopie, welche nach dem Ende der Funktion wieder zerstört wird.

Da du mit C++ arbeitets würde ich dir aber empfehlen eine Klasse 
"Complex" anzulegen und auf dieser die passenden Mathematischen 
Operatoren zu überladen.
Gleiches gilt für den Streamoperator!
Das Errgebniss kommt nicht aus deinen Funktionen zurück.
Nimm Referenzen für x3 und y3.
1
int sum( double x1, double y1, double x2, double y2, double &x3, double &y3)
2
{
3
  x3 = x1+x2;
4
  y3 = y1+y2;
5
  return 0;
6
}
So wie bei
1
 void readComplex ( double &x, double &y)

[edit] zu langsamm
Gast
Volker Zabe schrieb:
> int sum( double x1, double y1, double x2, double y2, double &x3, double &y3)
> {
>   x3 = x1+x2;
>   y3 = y1+y2;
>   return 0;
> }

Muss sowas sein? Wenn man schon C (prozedural= programmiert, dann kann 
man auch Zeiger benutzen und nicht den Referenz-Operator.
Das ist einer der Gründe daß ich C++ nie wirklich mochte. Wenn man an 
existierendem Code arbeiten muss, ist er zu 95% ein Gemenge zwischen 
objektorientiert und prozedural.
U.R. Schmitt schrieb:
> Wenn man schon C (prozedural= programmiert, dann kann
> man auch Zeiger benutzen und nicht den Referenz-Operator.

was hat denn das eine mit dem anderen zu tun?

Das hier Referenzen benutzt werden ist durchaus korrekt (auch wenn nach 
meinem ästethischem Empfinden das '&' an den Typ gehört - so sieht das 
immer aus wie der Adressoperator).

Referenzen bieten nämlich die Sicherheit, dass das Objekt wirklich 
existiert.
Peter II schrieb:
> Vlad Tepesch schrieb:
>> Referenzen bieten nämlich die Sicherheit, dass das Objekt wirklich
>> existiert.
>
> leider nicht wirklich (aber es macht deutlich das es ein Pflicht feld
> ist)
>
> void dummy( int& i );
>
> int* i = 0;
>
> dummy( *i );

Der Fehler besteht bereits hier im Aufruf.
Du darfst einen Null-Pointer nicht dereferenzieren.
Mit Referenzen hat das genau genommen nichts zu tun.
Gast
Komplex Rechner

z1 Re: Im:
z2 Re: Im:

Operation: + - *



Ergebnis: Re=  Im=
Abbruch:  a


Kann jemand mir helfen das auszurechnen, weil ich hab null ahnung wie 
das funktioniert.

Danke!
Gast
stell die gleiche Frage mal in einem C++ Forum und nicht hier und Du 
hast nach spät. nach  dem zweiten Post Deine Antwort..oder Du kannst Dir 
weiter den Blödsinn der "Experten" hier antun..
Das Forum hier taugt zu gar nichts wenn man Fragen hat!!
Es dient dazu zu zeigen  das man ein Nert ohne Freunde ist!
Moderator Persönliche Seite
Tom schrieb:
> stell die gleiche Frage mal in einem C++ Forum und nicht hier und Du
> hast nach spät. nach  dem zweiten Post Deine Antwort..oder Du kannst Dir
> weiter den Blödsinn der "Experten" hier antun..

Solange Du ihm seine Fragen nicht beantwortest, bist Du keinen Deut 
besser.

> Das Forum hier taugt zu gar nichts wenn man Fragen hat!!

Du bist das Forum!

> Es dient dazu zu zeigen  das man ein Nert ohne Freunde ist!

Das merkt man schon an Deiner Antwort, das musst Du gar nicht erst 
sagen.

Zum Thema:
Der TO hat große Schwächen bzgl. der Grundlagen. Ein Grundlagenkurs in 
einem Thread zu geben ist schwierig bis nahezu unmöglich. Die 
Stichworte, wo er seinen Kenntnisstand verbessern muss, wurden genannt. 
Der Hilfe zur Selbsthilfe wurde damit Genüge getan.
Gast
lol m Du hast es drauf.
Ich kann ihm nicht helfen aber gebe ihm wenigstes Tipps wo er Hilfe 
bekomtm dieses rumgelaber der anderen hier ist einfach nur traurig.

"Der Hilfe zur Selbsthilfe wurde damit Genüge getan."
?!?!?

Wie wäre es denn im ein Beispiel zu nennen?!?
In jedem C Forum hätte ihm schon längst jemand den Code korrigert und er 
hätte alles im Sack..hier will ds wieder keinern machen bei das 
Solzialverhalten von Schimpansen vorliegt
Moderator Persönliche Seite
Tom schrieb:
> Ich kann ihm nicht helfen [...]

Du hast also keine Ahnung und postest trotzdem hier? Was außer 
"Rumgelabere" ist das denn?

> aber gebe ihm wenigstes Tipps wo er Hilfe
> bekomtm dieses rumgelaber der anderen hier ist einfach nur traurig.

Von Dir habe ich bisher in diesem Thread auch nur "Rumgelabere" gelesen, 
also bleibt es dabei: Du bist keinen Deut besser als die, die Du 
verurteilst.

> "Der Hilfe zur Selbsthilfe wurde damit Genüge getan."
> ?!?!?

Man lernt am besten, indem man nicht Code kopiert, sondern sich die 
nötige Basis mit einem guten Buch aneignet. Die Stichworte, wo der TO im 
Buch nachschauen muss, wurden genannt. Eine bessere Hilfe kann es nicht 
geben.

> Wie wäre es denn im ein Beispiel zu nennen?!?

Die Beispiele stehen in den entsprechenden Kapiteln des C++-Buches. 
Warum soll man die hier reinkopieren?

> In jedem C Forum hätte ihm schon längst jemand den Code korrigert und er
> hätte alles im Sack..

Ja, aber nach 5 Minuten kommt er mit demselben Problem an anderer Stelle 
im Code, weil er aus dem Beispiel nichts gelernt hat.

Ein Sprichwort dazu:

"Gib einem Hungernden einen Fisch, und er wird einmal satt, lehre ihn 
Fischen, und er wird nie wieder hungern."

> hier will ds wieder keinern machen bei das
> Solzialverhalten von Schimpansen vorliegt

Über Sozialverhalten von Schimpansen (welches durchaus existiert) kannst 
Du gern in anderen Foren Vorträge halten. Hier bist Du damit offtopic.
Gast
"Über Sozialverhalten von Schimpansen (welches durchaus existiert) 
kannst "

ja, und es ist etwa auf dem Niveau der Forumsmitglieder :-) das sagte 
ich ja hah
Tom schrieb:

> In jedem C Forum hätte ihm schon längst jemand den Code korrigert

Falls du es nicht gemerkt hast:
Der Code im Eröffnungsposting stammt gar nicht von ihm. Das Posting 
wurde 2011 erstellt.
Es wurde auch in weiterer Folge darauf eingegangen, wo die Probleme in 
diesem Code liegen und entsprechende Abhilfen genannt. Das sollte ja 
doch wohl für jeden reichen, der Willens ist auch selbst etwas zu tun, 
um seine Hausaufgaben gelöst zu bekommen. Und wer nicht Willens ist, der 
hat bei uns nun mal schlechte Karten.
Frank M. schrieb:
> Tom schrieb:
>> Ich kann ihm nicht helfen [...]
>
> Du hast also keine Ahnung und postest trotzdem hier? Was außer
> "Rumgelabere" ist das denn?


Kommt gar nicht so selten vor.
Die Vorwürfe, man würde doch dem TO nicht helfen kommen praktisch fast 
immer von Leuten, die selber auch nichts hinkriegen.

Meine Hypothese: Sie gehen mit ihm in die gleiche Schulklasse, müssen 
genau dieselbe Hausaufgabe lösen, kriegen es genausowenig hin und sind 
einfach nur sauer, weil sie hier nicht billig abstauben konnten.
Moderator Persönliche Seite
Karl Heinz schrieb:
> Das Posting wurde 2011 erstellt.

Ist es nicht generell sinnvoll, alle Threads, in denen z.B. 3 Jahre 
nichts gepostet wurde, automatisch zu sperren? Ich sehe da überhaupt 
keinen Sinn darin, die offen zu lassen.

Ich vermute mal, dass das Tappen in die "Ist-ein-uralter-Thread-Falle" 
wesentlich häufiger vorkommt als die tatsächliche Notwendigkeit, einen 
alten Thread nochmal aufzuwärmen. Somit steht das in keinem Verhältnis 
zueinander.

Sollte sich tatsächlich mal mit einer geschätzten Wahrscheinlichkeit von 
1% jemand etwas zu einem älteren Thread beitragen wollen, kann er ja 
einen neuen aufmachen und als erstes einen Link darauf posten.

Ich weiß, das Thema wurde schon öfters diskutiert. Aber ich konnte 
bisher noch kein hinreichendes Argument dafür finden, Leichenfledderei 
erstmal generell zu erlauben.

Ist das noch ein Thema unter Euch Moderatoren?

Karl Heinz schrieb:
> Meine Hypothese: Sie gehen mit ihm in die gleiche Schulklasse, müssen
> genau dieselbe Hausaufgabe lösen, kriegen es genausowenig hin und sind
> einfach nur sauer, weil sie hier nicht billig abstauben konnten.

Das klingt sehr plausibel.
Gast
Frank M. schrieb:
> Karl Heinz schrieb:
>> Meine Hypothese: Sie gehen mit ihm in die gleiche Schulklasse, müssen
>> genau dieselbe Hausaufgabe lösen, kriegen es genausowenig hin und sind
>> einfach nur sauer, weil sie hier nicht billig abstauben konnten.
>
> Das klingt sehr plausibel.

Und der Lehrer rotiert die Hausaufgaben zu dem Thema jede 4 Jahre ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.