Hlavní strana -> Programování v C -> 08. Matematické funkce a přetypování

08. Matematické funkce a přetypování

Zdravím příznivce C-čka. Dneska jsem si pro ně (vás) připravil něco k matematickým funkcím, které by vaše programy mohly využívat. Patří tady funkce, které byste si asi těžko sami vytvářeli a jsou to třeba funkce sinus, kosinus, tangens, odmocnina, různé zaokrouhlování apod. U všech funkcí je třeba dodržet typ jejich argumentu, tedy toho, co jim předáváme a počítat s jejich návratovým typem. Bylo by asi zcestné myslet si, že funkce pro odmocninu bude vracet celé číslo. Stejně tak předávat goniometrickým funkcím celá čísla.

Někdy potřebujeme typ dat alespoň dočasně změnit a vytvářet kvůli toho novou proměnnou a přiřazovat ji hodnotu by bylo poněkud neobratné. Chceme dostat třeba celočíselnou hodnotu z výsledku dělení. Použijeme přetypování. Přetypování se provádí tak, že před hodnotu, kterou chceme přetypovat napíšeme požadovaný typ do závorek. Asi takto.

(int)12.5/2;  /* výsledek výrazu je celočíselný */
(float)45+31; /* výsledek je jako v pohyblivé čárce */

Při přetypování se jednoduše výraz rozšíří (nedojde ke ztráně dat) nebo zkrátí (ořeže) zde může docházet ke ztrátě dat - například desetinné části při přetypování na typ celočíselný. Časem chci zavést nějaké příklady a tam to bude vysvětleno lépe.

Teď ještě něco k těm matematickým funkcím. Všechny jsou definovány v hlavičkovém souboru math.h a proto musíte ještě kromě stdio.h připsat tenhle řádek

#include <math.h>

Všechno už máme připravené, tak se na to vrhnem. Budou to vlastně jenom jména funkcí a popis, co dělají. Tohle je jenom pár a ve skutečnosti je jich ještě mnohem více.

double sin(double argument);
 /* vrací sinus argumentu. Argument musí být v obloukové míře, tedy v radiánech */

double cos(double argument);
 /* stejná jako sin() akorát vrací hodnotu cosinus */

double tan(double argument);
 /* stejná jako sin() akorát vrací hodnotu tangens*/

double sqrt(double cislo);
 /* vrací druhou odmocninu ze sveho argumentu (cislo) */

double fabs(double cislo);
 /* vrací absolutní hodnotu argumentu cislo */

double log10(double cislo);
 /* vrací logaritmus svého argumentu se základem 10. Argument nesmí být záporný a nesmí být 0. */

Všechny tyto funkce vracejí hodnoty typu double a také přebírají hodnoty typu double. U goniometrických funkcí je třeba pamatovat na to, že přebírají hodnoty v radiánech a ne ve stupních "deg" jak je obvykle člověk zvyklý. Dám sem pro jistotu převodní vztahy. Zatím budu psát "pí", tedy konstantu zhruba 3.14159... jako "pí", ale až zjistím jeho značku, tak to přepíšu. Tedy radiány "rad" jsou oblouková míra. Vychází se z jednotkové kružnice, která má poloměr 1. Potom tedy obvod této kružnice je zhruba 6.28... což jsou 2π. Úhel 360 je tedy v obloukové míře 2π. 180 je 1π. 90 stupňů pak polovina π. Úhel v radiánech tedy dostanete takto:

 rad = deg/180 * π

A naopak

 deg = rad/π * 180

No to by snad stačilo. Je jenom na vás jestli budete tyhle funkce někdy potřebovat nebo ne. Máte tady definice základních matematických funkcích a jestli nevíte jak je použít, tak si počkejte do příštího týdne, kdy snad uvedu do provozu příklady. Jinak jsou všechny funkce popsané na cppreference Jenom teoreticky to totiž ani jinak vysvětlit nejde. Příště se můžete těšit na příkaz switch, na pole, řetězce atd. Tak zatím si užívejte C po svém. K.

Zpět

Programování v C | CZ 175/477 | Mapa stránek
Bc. Petr Klimánek, student Ostravské univerzity v Ostravě