Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
liczby_zespolone_complex [2008/11/09 16:34] lromanow |
liczby_zespolone_complex [2008/11/09 17:27] lromanow |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
==== Liczby zespolone <complex> ==== | ==== Liczby zespolone <complex> ==== | ||
- | ---- | + | ----\\ |
- | + | Klasa szablonowa ''**complex**'' służy do reprezentacji i manipulacji liczbami zespolonymi. Operacje zdefiniowane na liczbach zespolonych pozwalają na swobodne mieszanie obiektów tej klasy z wbudowanymi typami numerycznymi. Należy zauważyć, że większość operacji wykonywanych na obiektach tej klasy to zwykłe funkcje. Wyjątkami są metody ''real()'' i ''imag()'' należące do klasy ''**complex**''. | |
- | Klasa szablonowa **complex** służy do reprezentacji i manipulacji liczbami zespolonymi. Operacje zdefiniowane na liczbach zespolonych pozwalają na swobodne mieszanie obiektów tej klasy z wbudowanymi typami numerycznymi. Należy zauważyć, że większość operacji wykonywanych na obiektach tej klasy to zwykłe funkcje. Wyjątkami są metody //real()// i //imag()// należące do klasy **complex**. | + | |
=== Deklaracja liczb zespolonych === | === Deklaracja liczb zespolonych === | ||
- | ---- | ||
- | Argument szablonu określa typ związany z wartościami części rzeczywistej i urojonej obiektu. Ten argument musi być jednym z trzech dostępnych typów zmiennoprzecinkowych **float**, **double** lub **long double**. | + | Argument szablonu określa typ związany z wartościami części rzeczywistej i urojonej obiektu. Ten argument musi być jednym z trzech dostępnych typów zmiennoprzecinkowych ''**float**'', ''**double**'' lub ''**long double**''. |
Dostępne są cztery konstruktory. Konstruktor bezparametrowy inicjalizuje obie części liczby zespolonej wartością zero. Konstruktor jednoargumentowy incjalizuje wartością parametru część rzeczywistą i zeruje urojoną. Konstruktor dwuargumentowy inicjalizuje obie części liczby zespolonej. Ostatecznie, konstruktor kopiujący pozwala inicjalizować obiekt wartościami innego dostępnego obiektu klasy. | Dostępne są cztery konstruktory. Konstruktor bezparametrowy inicjalizuje obie części liczby zespolonej wartością zero. Konstruktor jednoargumentowy incjalizuje wartością parametru część rzeczywistą i zeruje urojoną. Konstruktor dwuargumentowy inicjalizuje obie części liczby zespolonej. Ostatecznie, konstruktor kopiujący pozwala inicjalizować obiekt wartościami innego dostępnego obiektu klasy. | ||
Linia 19: | Linia 17: | ||
</code> | </code> | ||
- | Liczbie zespolonej **complex** można przypisać wartość innej liczby zespolonej. Ponieważ konstruktor jednoargumentowy jest również wykorzystywany jako operator konwersji, można przypisać liczbie zespolonej wartość rzeczywistą. | + | Liczbie zespolonej ''**complex**'' można przypisać wartość innej liczby zespolonej. Ponieważ konstruktor jednoargumentowy jest również wykorzystywany jako operator konwersji, można również przypisać liczbie zespolonej wartość rzeczywistą. |
<code cpp> | <code cpp> | ||
Linia 26: | Linia 24: | ||
</code> | </code> | ||
- | Funkcja //polar()// może służyć do konstrukcji liczby zespolonej dla danego modułu i kąta. | + | Funkcja ''polar()'' może służyć do konstrukcji liczby zespolonej dla danego modułu i fazy kąta. |
<code cpp> | <code cpp> | ||
Linia 32: | Linia 30: | ||
</code> | </code> | ||
- | Wartość sprzężona powstaje z użyciem funkcji //conj()//. | + | Wartość sprzężona powstaje z użyciem funkcji ''conj()''. |
<code cpp> | <code cpp> | ||
Linia 39: | Linia 37: | ||
=== Dostęp do wartości liczby zespolonej === | === Dostęp do wartości liczby zespolonej === | ||
- | ---- | ||
- | Metody klasy **complex** //real()// i //imag()// zwracają wartości odpowiednio części rzeczywistej i urojonej liczby zespolonej. Funkcje te można również wywołać jako zwykłe funkcje z obiektem klasy **complex** jako argument. | + | Metody klasy ''**complex**'' ''real()'' i ''imag()'' zwracają wartości odpowiednio części rzeczywistej i urojonej liczby zespolonej. Funkcje te można również wywołać jako zwykłe funkcje z obiektem klasy ''**complex**'' jako argument. |
<code cpp> | <code cpp> | ||
// poniższy kod powinien dać ten sam rezulatat | // poniższy kod powinien dać ten sam rezulatat | ||
cout << cplx_one.real() << "+" << cplx_one.imag() << "i" << endl; | cout << cplx_one.real() << "+" << cplx_one.imag() << "i" << endl; | ||
- | cout << real(cplx_one) << "+" << imag(cplx_one) << "i" << endl; | + | cout << real(cplx_one) << "+" << imag(cplx_one) << "i" << endl; |
</code> | </code> | ||
- | <br> | + | === Operatory artmetyczne === |
+ | |||
+ | Operatory artmetyczne ''+'', ''-'', ''*'' oraz ''/'' mogą być używane zgodnie z przyjętą konwencją. Wszystkie przyjmują jako argumenty albo dwie liczby zespolone albo liczbę zespoloną i wartość rzeczywistą. Ponadto zdefiniowane są dla każdego z nich operatory przypisania. | ||
+ | |||
+ | <code cpp> | ||
+ | cout << cplx_one + cplx_two << endl; // wartość ??? | ||
+ | cout << cplx_one - 3.14 << endl; // wartość ??? | ||
+ | cout << 2.75 * cplx_two << endl; // wartość ??? | ||
+ | cplx_one += cplx_three / 2.0; // wartość ??? | ||
+ | </code> | ||
+ | |||
+ | Operatory jednoargumentowe ''+'' i ''-'' również można używać. | ||
+ | |||
+ | <code cpp> | ||
+ | cout << -cplx_one << endl; // wartość ??? | ||
+ | </code> | ||
+ | |||
+ | === Porównywanie wartości === | ||
+ | |||
+ | Dwie liczby zespolone ''**complex**'' mogą być przetestowane na równość lub nierówność wykorzystując operatory ''=='' i ''!=''. Dwie wartości są równe, gdy odpowiadające sobie części liczby są sobie równe. | ||
+ | |||
+ | <code cpp> | ||
+ | cout << cplx_one == cplx_three << endl; // wartość false | ||
+ | cout << cplx_one != cplx_three << endl; // wartość true | ||
+ | </code> | ||
+ | |||
+ | Liczby zespolone nie mogą być porównywane za pomocą innych operatorów. | ||
+ | |||
+ | === Strumienie I/O === | ||
+ | |||
+ | Liczby zespolone klasy ''**complex**'' mogą być pisane do strumienia bądź z niego czytane wykorzystując przyjętą konwencję dla strumieni I/O. Wartość pisana jest do strumienia w nawiasach jako ''(u,v)''. Wartość jest czytana ze strumienia jako dwie wartości numeryczne oddzielone przecinkiem i otoczone nawiasami. | ||
+ | |||
+ | === Wartość normalna i moduł === | ||
+ | |||
+ | Funkcja ''norm()'' zwraca normę liczby zespolonej, która odpowiada sumie kwadratów części rzeczywistej i urojonej. Funkcja ''abs()'' zwraca moduł, który jest pierwiastkiem kwadratowym normy liczby zespolonej. | ||
+ | |||
+ | <code cpp> | ||
+ | cout << norm(cplx_two) << endl; | ||
+ | cout << abs(cplx_two) << endl; | ||
+ | <\code> | ||
+ | |||
+ | Kąt fazowy liczby zespolonej można uzyskać za pomocą funkcji ''arg()''. | ||
+ | |||
+ | <code cpp> | ||
+ | cout << cplx_four << " w postaci biegunowej wynosi" | ||
+ | << abs(cplx_four) << "e-" << arg(cplx_four) << endl; | ||
+ | <\code> | ||
+ | |||
+ | === Funkcje trygonometryczne === | ||
+ | |||
+ | Funkcje tryugonometryczne zdefiniowane dla typów zmiennoprzecinkowych zostały rozszerzone dla liczb zespolonych. Dotyczy to funkcji ''sin()'', ''cos()'', ''tan()'', ''sinh()'', ''cosh()'' i ''tanh()''. Każda z nich bierze jako argument liczbę zespoloną **complex** i zwraca podobnie liczbę zespoloną. | ||
+ | |||
+ | === Inne funkcje === | ||
+ | |||
+ | Podobnie jak funkcje trygonometryczne funkcje ''exp()'', ''log()'', ''log10()'' i ''sqrt()'' zostały rozszerzone dla liczb zespolonych. Jako argument biorą liczbę ''**complex**'' i zwracają również ''**complex**''. | ||
+ | |||
+ | Biblioteka standardowa definiuje kilka wersji funkcji ''pow()''. Istnieją osobne definicje dotyczące podnoszenia liczb zespolonych do wartości całkowitej, zespolonej i rzeczywistej. Podobnie można podnosić wartość rzczywistą do wartości ''**complex**''. | ||
+ | |||
+ | \\ | ||
---- | ---- | ||
- | [[biblioteka_standardowa]] | + | [[start]] >> [[biblioteka_standardowa]] |