Działania na liczbach zespolonych- błedy w obliczeniach

0

Witam. Mam problem z programem wykonującym obliczenia na liczbach zespolonych. Po skompilowaniu w wynikach są błędy np. jakieś dziwne liczby jak "e^-39". Prosze o pomoc. Oto kod:

#include <iostream>

using namespace std;

class zespolone
{
public:

float real;
float imagin;

zespolone(float real, float imagin)
{
    real = real;
    imagin = imagin;
}

void print(void)
{
    cout << "(" << real << " " << imagin << "i" << ")";
}

zespolone dodawanie(zespolone zesp)
{
    zespolone z(0,0);
    z.real =real + zesp.real;
    z.imagin =imagin + zesp.imagin;
    return z;
}

zespolone mnozenie(zespolone zesp)
{
    zespolone z(0,0);
    z.real = real * zesp.real;
    z.imagin = imagin * zesp.imagin * -1;
    return z;

}

zespolone odejmowanie(zespolone zesp)
{
    zespolone z(0,0);
    z.real = real - zesp.real;
    z.imagin = imagin - zesp.imagin;
    return z;
}

};

ostream& operator<<(ostream &os, zespolone z)
{
z.print();
return os;
}

int main()
{
float a,b,c,d;
zespolone z(a,b);
zespolone t(c,d);

cout<<"Podaj czesc rzeczywista liczby zespolonej z:"<<endl;
cin>>a;
cout<<"Podaj czesc urojona liczby zespolonej z:"<<endl;
cin>>b;
cout<<"Podaj czesc rzeczywista liczby zespolonej t:"<<endl;
cin>>c;
cout<<"Podaj czesc urojona liczby zespolonej t:"<<endl;
cin>>d;
cout<<"dodawanie:"<<z.dodawanie(t)<<endl;
cout<<"odejmowanie:"<<z.odejmowanie(t)<<endl;
cout<<"mnozenie:"<<z.mnozenie(t)<<endl;


return 0;

}

1

9E-39 to 0.000000000000000000000000000000000000009 czyli można powiedzieć zero.
Używaj typu double będą rzadziej takie nie do końca zerowe zera.

4

pst

std::complex
1

Popatrz jeszcze raz na mnożenie. Uważnie.

ostream& operator<(ostream &os, zespolone z)

Co za operator przeciążasz? I nawet jeśli to << to polecam jakiś tutorial jak taki operator się przeciąża. Pierwszy lepszy link z google'a: http://cpp0x.pl/artykuly/?id=15

0

Pomocne byłoby podanie danych wejściowych.

0

Zmodyfikowałem program tak żeby nie przeładowywać operatorów. Oto kod:

#include <iostream>

using namespace std;

class zespolona
{
public:
double rzeczyw;
double urojon;

    zespolona(double rzeczyw, double urojon)
{
	this->rzeczyw=rzeczyw;
	this->urojon=urojon;
	
} 	

zespolona dodawanie(zespolona a, zespolona b)
{
zespolona suma(0.0,0.0);
suma.rzeczyw=a.rzeczyw+b.rzeczyw;
suma.urojon=a.urojon+b.urojon;
return suma;
}
zespolona odejmowanie(zespolona c, zespolona d)
{
zespolona roznica(0.0,0.0);
roznica.rzeczyw=c.rzeczyw-d.rzeczyw;
roznica.urojon=c.urojon-d.urojon;
return roznica;
}
zespolona mnozenie(zespolona z, zespolona n)
{

zespolona mnozenie(1.0,1.0);
mnozenie.rzeczyw=z.rzeczywn.rzeczyw;
mnozenie.urojon=z.urojon
n.urojon;
return mnozenie;
}

};

int main()
{
double u,k,w,s;
zespolona p(u,k);
zespolona r(w,s);

cout<<"podaj czesc rzeczywista  liczby zespolonej p:"<<endl;
cin>>u;
cout<<"podaj czesc urojona  liczby zespolonej p:"<<endl;
cin>>k;
cout<<"podaj czesc rzeczywista  liczby zespolonej r:"<<endl;
cin>>w;
cout<<"podaj czesc urojona liczby zespolonej r:"<<endl;
cin>>s;

cout<<"Dodawanie:"<<dodawanie(p,r)<<endl;
cout<<"Odejmowanie:"<<odejmowanie(p,r)<<endl;
cout<<"Mnozenie:"<<mnozenie(p,r)<<endl;

}

Mimo tego wyskakują 3 błędy :

'dodawanie' was not declared in this scope
'odejmowanie' was not declared in this scope
'mnozenie' was not declared in this scope

Nie wiem dlaczego wyskakują mi błędy że nie zadeklarowałem tych funkcji. Przecież umiejscawiając je w klasie nie musze tego robić. Prosze o pomoc.

1
  1. Kod wklejaj w znacznikach code
  2. Zacznij w końcu formatować kod
zespolona mnozenie(zespolona z, zespolona n)
{
zespolona mnozenie(1.0,1.0); // tu kompilator się dziwi, przecież mnożenie to nazwa tej funkcji WTF?
  1. Czemu nie zapiszesz jak człowiek?:
zespolona dodawanie(zespolona a, zespolona b) { return zespolona(a.rzeczyw+b.rzeczyw,a.urojon+b.urojon); }

po to wymyślono konstruktor.
5. Czemu nie zapisać konstruktor po ludzku?:

zespolona(double rzeczyw,double urojon):rzeczyw(rzeczyw),urojon(urojon) {}
  1. Dla operacji:
cout<"Dodawanie:"<<dodawanie(p,r)<<endl;

musisz przeciążyć: operator<<(ostream&,zespolona const&)

 lub zapisać wynik funkcji do zmiennej i wyświetlać składowe po kolei lub przez spacje lub jakkolwiek chcesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1