10. cvičení
Reprezentace komplexních čísel
Pro reprezentaci komplexních čísel v počítači by vás mohlo napadnout zadefinovat vlastní strukturu, např.:
typedef struct
{
float re;
float im;
}
complexni_cislo;
To by samozřejmě šlo, ale tento přístup je nevýhodný kvůli omezením práce se
strukturami v jazyce C: veškeré operace by bylo nutné provádět pomocí vlastních
funkcí a nebylo by možné použít aritmetické operátory jako např. +
, -
, *
,
/
, atd.
Pro práci s komplexními čísly v jazyku C je možné použít typy float complex
a
double complex
z hlavičkového souboru complex.h
:
#include <stdio.h>
#include <complex.h>
int main()
{
float complex z1 = I; // imaginarni jednotka
float complex z2 = csqrt(-1); // komplexni odmocnina
float complex z3 = z1 + z2;
// vypis: zvlast realna a imaginarni cast
printf("z3 = %f + %fi\n", creal(z3), cimag(z3));
return 0;
}
Vizte také přehled všech komplexních funkcí v jazyce C.
Reprezentace zlomků
Pro reprezentaci zlomků (tedy racionálních čísel) v počítači neexistuje v jazyce C speciální typ, proto musíme definovat vlastní strukturu:
typedef struct
{
int citatel;
int jmenovatel;
}
zlomek;
Pro operace se zlomky nelze použít aritmetické operátory jako např. +
, -
,
*
, /
, atd. Je tedy potřeba definovat vlastní funkce pro všechny požadované
operace.
Probrané příklady
- Naprogramujte vlastní funkce pro násobení a dělení zlomků.
- Naprogramujte funkci pro krácení zlomku největším společným dělitelem čitatele a jmenovatele. NSD dvou čísel umíte spočítat pomocí Euklidova algoritmu.
- Naprogramujte vlastní funkce pro sčítání a odčítání zlomků. Pro určení společného jmenovatele použijte vzoreček \(NSN(a,b) = \dfrac{ab}{NSD(a,b)}\) a Euklidův algoritmus.
Domácí úkol
Vytvořte program, který z terminálu načte 2 zlomky (4 celá čísla) a provede všechny čtyři základní operace (součet, rozdíl, násobení, dělení). Výsledek každé operace se vypíše jako zlomek v základním tvaru. Po spuštění by měl program fungovat např. takto:
Zadej 2 cela cisla pro prvni zlomek: 1 2
Zadej 2 cela cisla pro druhy zlomek: 2 3
1/2 + 2/3 = 7/6
1/2 - 2/3 = -1/6
1/2 * 2/3 = 1/3
(1/2) / (2/3) = 3/4
Ošetřete správně krácení zlomků, práci se zápornými čísly v čitateli i jmenovateli a dělení nulou.
Výsledný zdrojový soubor (soubor.c
) odevzdávejte na mou emailovou adresu do 3. 11. 2019, 24:00
CEST. Pokud narazíte na problém a budete potřebovat poradit, neopisujte od
kolegů, ale požádejte mě o radu (mailem, na cvičení nebo na konzultaci). Úkol je
vhodné začít vypracovávat co nejdřív, aby se tyto problémy stihly vyřešit před
termínem.