Complex Numbers
Štruktúry a štruktúrované údajové typy, parametre funkcií typu štruktúra, funkcie vracajúce štruktúrovaný údajový typ kópiou vs adresou.
Ciele
- Tvorba vlastných štruktúr.
- Osvojiť si základy práce so štruktúrami.
Postup
Complex Number Representation
Každé komplexné číslo obsahuje reálnu a imaginárnu zložku. V tomto kroku vytvoríme štruktúru, ktorá bude komplexné čísla reprezentovať.
Úloha
Vytvorte štruktúru complex, ktorá bude reprezentovať
komplexné čísla.
Štruktúra bude mať týchto dvoch členov:
real- reálna časť komplexného číslaimag- imaginárna časť komplexného čísla
Reálna aj imaginárna zložka komplexného čísla môže byť reprezentovaná ako číslo s pohyblivou desatinnou čiarkou.
Úloha
Vytvorte funkciu print_cplx(), ktorá vypíše na obrazovku
reťazcovú podobu komplexného čísla.
Funkcia bude mať jeden vstupný parameter, ktorý bude typu
struct complex. Výsledný reťazec bude v tvare:
\[ REAL + IMAG \]
kde:
REALreprezentuje reálnu časť komplexného čísla s presnosťou na 2 desatinné miesta, aIMAGreprezentuje imaginárnu časť komplexného čísla s presnosťou na 2 desatinné miesta.
Pri implementácii nezabudnite na všetky možnosti, ktoré môžu nastať, viď nasledujúca tabuľka.
| reálna časť | imaginárna časť | výstup |
|---|---|---|
1 |
2 |
1+2i |
-3 |
-4 |
-3-4i |
5 |
0 |
5 |
0 |
6 |
6i |
0 |
0 |
0 |
Úloha
Vytvorte funkciu cplx_real(), ktorá vráti reálnu časť
komplexného čísla a funkciu cplx_imag(), ktorá vráti
imaginárnu časť komplexného čísla.
Obe funkcie budú mať jeden vstupný parameter, ktorý bude typu
struct complex.
Complex Number as a Return Value
Doteraz sme vytvárali jednoduché funkcie, ktoré buď nevracali nič
(funkcia print_cplx()) alebo vracali len jednoduché
(hodnotové) údajové typy (funkcie cplx_real() a
cplx_imag()). Teraz však vytvoríme funkciu, ktorá bude
vracať nové komplexné číslo, konkrétne vráti združené číslo z
komplexného čísla, ktoré funkcia dostane ako parameter.
Úloha
Vytvorte funkciu cplx_conj(), ktorá vráti združené
komplexné čislo (z angl. complex conjugate) z komplexného
čísla odovzdaného ako parameter funkcii.
Funkcia bude mať jeden vstupný parameter, ktorý bude typu
struct complex.
Funkcia vráti hodnotu typu struct complex, ktorá bude
obsahovať združené komplexné číslo.
Poznámka
Združené komplexné číslo komplexného čísla je také číslo, ktoré vznikne zmenou znamienka imaginárnej časti.
Združené komplexné číslo z čísla 3 – 2i bude komplexné číslo 3 + 2i
Basic Operations with Complex Numbers
V tomto kroku sa pokúsime vytvoriť niekoľko základných operácií pre prácu s reálnymi číslami, akými sú napr. súčet, rozdiel a súčin.
Úloha
Vytvorte funkciu cplx_add(), ktorá vráti súčet dvoch
komplexných čísiel.
Poznámka
Príklad súčtu dvoch komplexných čísiel:
(3–2i) + (2–6i) = 3–2i + 2 − 6i = 5 − 8i
Deklarácia funkcie bude vyzerať nasledovne:
struct complex cplx_add(const struct complex cplx1, const struct complex cplx2)Parametre cplx1 a cplx2 sú vstupné
parametre, ktoré reprezentujú sčítance súčtu.
Funkcia vráti výsledok súčtu ako hodnotu typu
struct complex.
Úloha
Vytvorte funkciu cplx_sub(), ktorá vráti rozdiel dvoch
komplexných čísiel.
Poznámka
Príklad súčtu dvoch komplexných čísiel:
(3–2i)–(2–6i) = 3–2i–2 + 6i = 1 + 4i
Deklarácia funkcie bude vyzerať nasledovne:
struct complex cplx_sub(const struct complex cplx1, const struct complex cplx2)Parametre cplx1 a cplx2 sú vstupné
parametre, ktoré reprezentujú operandy operácie rozdiel.
Funkcia vráti výsledok rozdielu ako hodnotu typu
struct complex.
Úloha
Vytvorte funkciu cplx_mul(), ktorá vynásobí dve
komplexné čísla.
Deklarácia funkcie bude vyzerať nasledovne:
struct complex cplx_mul(const struct complex cplx1, const struct complex cplx2)Parametre cplx1 a cplx2 sú vstupné
parametre, ktoré reprezentujú operandy súčinu.
Funkcia vráti výsledok súčinu ako hodnotu typu
struct complex.
Poznámka
Pri implementácii funkcie nezabudnite uvažovať všetky tri prípady, ktoré môžu nastať:
- násobenie komplexného čísla reálnym číslom, napr. 2(3+2i) = 6 + 4i
- násobenie komplexného čísla imaginárnym číslom, napr. 2i(3+2i) = − 4 + 6i
- násobenie komplexného čísla komplexným číslom, napr. (3–2i)(9+4i) = 35–6i
Dynamic Memory Allocation
Doteraz jednotlivé funkcie vracali návratovú hodnotu kópiou, resp. hodnotou. V tomto kroku urobíte všetko preto, aby vami vytvorené funkcie vracali hodnotou referenciou.
Úloha
Upravte implementácie všetkých vytvorených funkcií tak, aby miesto odovzdávania hodnoty kópiou ju odovzdávali adresou.