[c++] Liczby zespolone, mnożenie.
Ostatnio zmodyfikowano 2015-06-04 20:03
Pan_Gołąb Temat założony przez niniejszego użytkownika |
[c++] Liczby zespolone, mnożenie. » 2015-06-04 15:18:39 Witam ! Programik do ćwiczenia klas w c++, problem z niedziałającym mnożeniem. header klasy: #pragma once #include <iostream> using namespace std;
class CComplex { public: CComplex( double = 0, double = 0 ); CComplex( const CComplex & c ); public: CComplex & operator =( const CComplex & c ); friend istream & operator >>( istream & in, CComplex & c ); friend ostream & operator <<( ostream & out, const CComplex & c ); friend CComplex operator +( const CComplex & c1, const CComplex & c2 ); friend CComplex operator -( const CComplex & c1, const CComplex & c2 ); friend CComplex operator *( const CComplex & c1, const CComplex & c2 ); friend CComplex operator *( const CComplex & c, int x ); friend CComplex operator *( int x, const CComplex & c ); CComplex & operator +=( const CComplex & c ); CComplex & operator *=( const CComplex & c ); CComplex & operator *=( int x ); private: double m_re; double m_im; public: double GetRe() const; double GetIm() const; void SetRe( double re ); void SetIm( double im ); void SetComplex( double re, double im ); double modul() const; };
inline void CComplex::SetComplex( double re, double im ) { SetRe( re ); SetIm( im ); }
inline double CComplex::GetRe() const { return m_re; } inline double CComplex::GetIm() const { return m_im; }
inline void CComplex::SetIm( double im ) { m_im = im; }
inline void CComplex::SetRe( double re ) { m_re = re; }
#include "StdAfx.h" #include "Complex.h"
CComplex::CComplex( double m_re, double m_im ) { SetComplex( m_re, m_im ); }
CComplex::CComplex( const CComplex & c ) { * this = c; }
CComplex & CComplex::operator =( const CComplex & c ) { m_re = c.m_re; m_im = c.m_im; return * this; }
istream & operator >>( istream & in, CComplex & c ) { in >> c.m_re; in >> c.m_im; return in; } ostream & operator <<( ostream & out, const CComplex & c ) { out << '('; out << c.GetRe(); out << ','; out << c.GetIm(); out << ')'; return out; }
CComplex operator +( const CComplex & c1, const CComplex & c2 ) { CComplex res( c1 ); res += c2; return res; }
CComplex operator *( const CComplex & c1, const CComplex & c2 ) { CComplex c; c *= c2; return c; }
CComplex & CComplex::operator +=( const CComplex & c ) { m_re += c.m_re; m_im += c.m_im; return * this; }
CComplex operator *( const CComplex & c, int x ) { CComplex res; res *= x; return res; }
CComplex operator *( int x, const CComplex & c ) { return c * x; }
CComplex & CComplex::operator *=( int x ) { m_re *= x; m_im *= x; return * this; } CComplex & CComplex::operator *=( const CComplex & c ) { m_re = m_re * c.m_re - m_im * c.m_im; m_im = m_re * c.m_im + m_im * c.m_re; return * this; }
main:
#include "stdafx.h" #include "Complex.h"
int _tmain( int argc, _TCHAR * argv[] ) { CComplex c1; CComplex c2( 5, 6 ); CComplex c3( c2 ); CComplex c4 = c2; cout << "podaj liczbe zespolona (re, im): "; cin >> c1; cout << "z1 = " << c1 << endl; cout << "z2 = " << c2 << endl; cout << "z3 = " << c3 << endl; cout << "z4 = " << c4 << endl; cout << "\n\n"; cout << "z5 = " << c1 * c2 << endl; cout << "\n\n"; return 0; }
Jakieś pomysły ? Jakie błędy ? |
|
Monika90 |
» 2015-06-04 15:32:29 CComplex operator *( const CComplex & c1, const CComplex & c2 ) { CComplex c; c *= c2; return c; }
| c powinno być kopią c1, a nie jest. |
|
Pan_Gołąb Temat założony przez niniejszego użytkownika |
» 2015-06-04 15:46:29 dziękuje Pani Moniko, działa choć nie wiem czy wynik jest poprawny (wzór na mnożenie l. zesp.) Jak zdefiniować moduł liczby zespolonej.. Jako tablicę ? |
|
Monika90 |
» 2015-06-04 15:59:42 CComplex & CComplex::operator *=( const CComplex & c ) { m_re = m_re * c.m_re - m_im * c.m_im; m_im = m_re * c.m_im + m_im * c.m_re; return * this; }
|
Wzór masz dobry, ale źle go używasz, najpierw modyfikujesz składową m_re, a potem używasz tej zmodyfikowanej zamiast oryginału przy obliczaniu m_im. Powinieneś utworzyć tymczasową kopię m_re. |
|
Kaikso |
» 2015-06-04 17:42:08 |
|
Monika90 |
» 2015-06-04 18:11:54 Ale tych typów nie ma w C++. |
|
Kaikso |
» 2015-06-04 20:03:26 |
|
« 1 » |