Forum: PC-Programmierung C++ Komplexer Rechner


von C++-Noob (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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!

von ... (Gast)


Lesenswert?

1. was soll denn das

int sum ..

return 0;

??

2. Stichwort call by value, call by reference

:)

Grundlagen!!!

von Volker Z. (vza)


Lesenswert?

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

von cpp (Gast)


Lesenswert?

In der zu C++ gehörenden STL gibt es bereits eine Klasse complex.
Warum benutzt du die nicht?

von asdf (Gast)


Lesenswert?

... schrieb:

> Grundlagen!!!

mehr gibts da nicht zu sagen. les erstmal ein buch.

von U.R. Schmitt (Gast)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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 );

von Sven P. (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> Referenzen bieten nämlich die Sicherheit, dass das Objekt wirklich
> existiert.
Leider nicht, es gibt genauso 'dangling references'. Die findet man nur 
deutlich schwerer :-}

von Karl H. (kbuchegg)


Lesenswert?

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.

von boss bossov (Gast)


Lesenswert?

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!

von Pandur S. (jetztnicht)


Lesenswert?

Die komplexen Zahlen und ihre Regeln sind aber bekannt ? Und 
Programmieren ist auch nicht neu ? Dann sollte es aber machbar sein.

von Tom (Gast)


Lesenswert?

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!

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Tom (Gast)


Lesenswert?

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

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

wie bereits gesagt..hier kommt nichts bei raus, immer noch keine Lösung 
nur gelaber..
Frag mal hier
http://www.cplusplus-forum.de/


Hier artet selbst ein Hinweis darauf das geholfen werden soll,auf ein 
Diskussion aus..bin hier raus echt zu schießen :-)
Hier sollten einige in die Politik gehe haha

von Tom (Gast)


Lesenswert?

"Über Sozialverhalten von Schimpansen (welches durchaus existiert) 
kannst "

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

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hör einfach auf zu winseln. Das ist erbärmlich.

: Bearbeitet durch Moderator
von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch Moderator
von Ausgeloggt (Gast)


Lesenswert?

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 ;-)

von Mark B. (markbrandis)


Lesenswert?

Frank M. schrieb:
> Ich weiß, das Thema wurde schon öfters diskutiert.

Hier werden immer wieder Dinge diskutiert, die man anders machen 
könnte/sollte/müsste/dürfte. Es geht dann regelmäßig aus wie beim 
Hornberger Schießen: Passieren tut gar nichts.

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
Noch kein Account? Hier anmelden.