Ukazatele

K vyřešení těchto úloh by vám mělo stačit znát ukazatele (a samozřejmě veškeré předchozí učivo).

Nastavení maxima

Vytvořte funkci set_max, která přijme adresu celého čísla (int) pomocí ukazatele a dvě další čísla a nastaví paměť na dané adrese na větší ze dvou zadaných čísel.

int res;
set_max(&res, 5, 6);
// res == 6

Prohození hodnoty

Vytvořte funkci swap, která přijme dva ukazatele a prohodí hodnoty proměnných, na které ukazují.

int a = 5, b = 6;
swap(&a, &b);
// a == 6, b == 5

Výpočet kořenů kvadratické rovnice

Vytvořte funkci quadratic_roots, která vrátí počet kořenů kvadratické rovnice \( ax^2 + bx + c = 0 \) pomocí return a vypočítané kořeny vrátí pomocí předaných ukazatelů v argumentech funkce.

int quadratic_roots(float a, float b, float c, float *x1, float *x2);

Počet kořenů lze zjistit vypočítáním diskriminantu \( D = b^2 - 4ac \). Pokud vyjde diskriminant záporný, tak funkce vrátí nulu, protože žádné řešení v \( \mathbb{R} \) neexistuje. Pro nulový diskriminant funkce vrátí 1 a uloží dvojnásobný kořen na adresu ukazatelů x1, x2. Pro kladný diskriminant funkce vrátí 2 a vypočítá kořeny pomocí: $$ x_{1, 2} = \frac{-b \pm \sqrt{D}}{2a} $$