Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Berechnung komplexer Zahlen geht nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.06.2005, 12:22 Uhr
~DirkDiggler
Gast


Hallo Leute,

muss ein Programm schreiben das komplexe Zahlen mit Hilfe von Überladenen-Operatoren
berechnet, doch leider berechnet es mit immer den Imaginärteil falsch, weiß nicht wieso, die Fornel müßte laut Buch stimmen.

Hoffe könnt mir weiterhelfen, Gruß Dirk


C++:
//Überladener * Operator
komplex komplex::operator * (komplex KZ) {
    re = (re * KZ.re) - (im * KZ.im);
    im = (re * KZ.im) + (im * KZ.re);
    return *this;
}

//Überladener = Operator
komplex komplex::operator = (komplex KZ) {
    re = KZ.re;
    im = KZ.im;

    return *this;
}



mod edit: Benutze die CPP Tags selber.

Dieser Post wurde am 19.06.2005 um 12:30 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.06.2005, 12:27 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ich würde mal sagen da du bei * re schon änderst bevor du den im-teil berechnest
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.06.2005, 12:49 Uhr
~DirkDiggler
Gast


stimmt hattest recht, aber wie kann man das lösen ohne das man temporäre Variablen anlegt?


C++:
//Überladener * Operator
komplex komplex::operator * (komplex KZ) {
    float temp1 = re;
    float temp2 = KZ.re;

    float temp3 = im;
    float temp4 = KZ.im;

    re = (temp1 * temp2) - (temp3 * temp4);
    
    im = (temp1 * temp4) + (temp2 * temp3);
    
    return *this;
}



mod edit: benutze die CPP Tags selber (wie oft soll ich heute das noch wiederholen)

Dieser Post wurde am 19.06.2005 um 15:41 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.06.2005, 13:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


kaum.

machs halt so:


C++:
komplex TP = *this;
re = (TP.re * KZ.re) - (TP.im * KZ.im);
im = (TP.re * KZ.im) + (TP.im * KZ.re);


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.06.2005, 14:22 Uhr
~dirkdiggler
Gast


mir ist nicht klar was der folgende befehl genau macht:

komplex operator + (komplex KZ);

komplex ist die klasse das ist klar aber was bedeutet jetzt der ausdruck in der klammer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.06.2005, 16:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


man definiert nen operater, bei dir + wo der rechte operand eine var vom typ komplex ist
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.06.2005, 17:55 Uhr
(un)wissender
Niveauwart


Die korrekte Version ist:


C++:
const komplex komplex::operator * (const komplex &KZ)  const
{  
    return komplex(re * KZ.re - im * KZ.im, re * KZ.im + im * KZ.re);
}



Der Operator * sollte den Wert (in diesem Fall this) nicht verändern. Wenn er das tut ist es eher *= und nicht *. Orientiere dich einfach an dem Verhalten der Interger.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.06.2005, 18:48 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jo stimmt, hab jetzt nicht so genau drauf geachtet was der eigentlich tun soll
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: