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

  1. Naprogramujte vlastní funkce pro násobení a dělení zlomků.
  2. 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.
  3. 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.