Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 14 - Matematické funkce ve VB.NET a knihovna Math

V dnešním Visual Basic .NET tutoriálu se podíváme na matematické funkce, které se nám v našich programech jistě budou v budoucnu hodit.

Základní matematické funkce jsou v .NET obsaženy v třídě Math. Třída nám poskytuje dvě základní konstanty: PI a E. PI je pochopitělně číslo Pí (3.1415...) a E je Eulerovo číslo, tedy základ přirozeného logaritmu (2.7182...). Asi je jasné, jak se s třídou pracuje, ale pro jistotu si na ukázku konstanty vypišme do konzole:

Console.WriteLine("Pí: {0}", Math.PI)
Console.WriteLine("e: {0}", Math.E)
Console.ReadKey()

Vidíme, že vše voláme na třídě Math. Na kódu není nic moc zajímavého kromě toho, že jsme v textovém řetězci použili speciální konstantu vbCrLf, která způsobí odřádkování.

Konzolová aplikace
Pí: 3.14159265358979
e: 2.71828182845905

Pojďme si nyní popsat metody, které třída poskytuje:

Metody na třídě Math

Min(), Max()

Začněme s tím jednodušším :). Obě funkce berou jako parametr dvě čísla libovolného datového typu. Funkce Min() vrátí to menší, funkce Max() to větší z nich.

Round(), Ceiling(), Floor() a Truncate()

Všechny tři funkce se týkají zaokrouhlování. Round() bere jako parametr desetinné číslo a vrací zaokrouhlené číslo typu Double tak, jak to známe ze školy (od 0.5 nahoru, jinak dolů). Ceiling() zaokrouhlí vždy nahoru a Floor() vždy dolů. Truncate() nezaokrouhluje, pouze odtrhne desetinnou část.

Round() budeme jistě potřebovat často, další funkce jsem prakticky často použil např. při zjišťování počtu stránek při výpisu komentářů v knize návštěv. Když máme 33 příspěvků a na stránce jich je vypsáno 10, budou tedy zabírat 3.3 stránek. Výsledek musíme zaokrouhlit nahoru, protože v reálu stránky budou samozřejmě 4.

Pokud vás napadlo, že Floor() a Truncate() dělají to samé, chovají se jinak u záporných čísel. Tehdy Floor() zaokrouhlí na číslo více do mínusu, Truncate() zaokrouhlí vždy k nule.

Zaokrouhlení desetinného čísla a jeho uložení do proměnné typu Integer tedy provedeme následujícím způsobem:

Dim d As Double = 2.72
Dim a As Integer = Math.Round(d)

Přetypování na Integer je nutné, jelikož Round() vrací sice celé číslo, ale stále uložené v typu Double. Důvodem je, aby všechny matematické funkce pracovaly s typem Double.

Abs() a Sign()

Obě metody berou jako parametr číslo libovolného typu. Abs() vrátí jeho absolutní hodnotu a Sign() vrátí podle znaménka -1, 0 nebo 1 (pro záporné číslo, nulu a kladné číslo).

Sin(), Cos(), Tan()

Klasické goniometrické funkce, jako parametr berou úhel typu Double, který považují v radiánech, nikoli ve stupních. Pro konverzi stupňů na radiány stupně vynásobíme * (Math.PI / 180). Výstupem je opět Double.

Acos(), Asin(), Atan()

Opět klasické cyklometrické funkce (arkus funkce), které podle hodnoty goniometrické funkce vrátí daný úhel. Parametrem je hodnota v Double, výstupem úhel v radiánech (také Double). Pokud si přejeme mít úhel ve stupních, vydělíme radiány / (180 / Math.PI).

Pow() a Sqrt()

Pow() bere dva parametry typu Double, první je základ mocniny a druhý exponent. Pokud bychom tedy chtěli spočíst např. 2^3, kód by byl následující:

Console.WriteLine(Math.Pow(2, 3))

VB.NET má pro mocnění i operátor, to samé můžeme zapsat jako:

Console.WriteLine(2^3)

Sqrt() je zkratka ze square root a vrátí tedy druhou odmocninu z daného čísla typu Double. Obě funkce vrací výsledek jako Double.

Exp(), Log(), Log10()

Exp() vrací Eulerovo číslo, umocněné na daný exponent. Log() vrací přirozený logaritmus daného čísla. Log10() vrací potom dekadický logaritmus daného čísla.

V seznamu metod nápadně chybí libovolná odmocnina. My ji však dokážeme spočítat i na základě funkcí, které Math poskytuje.

Víme, že platí: 3. odm. z 8 = 8^(1/3). Můžeme tedy napsat:

Console.WriteLine(Math.Pow(8, (1.0/3.0)))

Dělení

Programovací jazyky se často odlišují tím, jak v nich funguje dělení čísel. Tuto problematiku je nutné dobře znát, abychom nebyli poté (nepříjemně) překvapeni. Napišme si jednoduchý program:

Dim a As Integer = 5 / 2
Dim b As Double = 5 / 2
Dim c As Double = 5.0 / 2
Dim d As Double = 5 / 2.0
Dim e As Double = 5.0 / 2.0
Dim f As Integer = 5 / 2.0

Console.WriteLine("{0}" & vbCrLf & "{1}" & vbCrLf & "{2}" & vbCrLf & "{3}" & vbCrLf & "{4}"& vbCrLf & "{5}", a, b, c, d, e, f)
Console.ReadKey()

V kódu několikrát dělíme 5 / 2, což je matematicky 2.5. Jistě ale tušíme, že výsledek nebude ve všech případech stejný.

Výstup programu je následující:

Konzolová aplikace
2
2.5
2.5
2.5
2.5
2

Vidíme, že výsledek dělení je někdy celočíselný a někdy reálný. Je to dáno datovým typem proměnné, do které výsledek ukládáme. Při použití proměnné typu Integer je výsledek vždy zaokrouhlený na celé číslo.

Například když budeme počítat průměr, pak pro desetinný výsledek je nutné použít proměnnou typu Single nebo Double:

Dim soucet As Integer = 10
Dim pocet As Integer = 4
Dim prumer As Double = soucet / pocet

Např. v jazyce PHP je výsledek dělení vždy desetinný. Až budete dělit v jiném programovacím jazyce než je Visual Basic .NET, zjistěte si, jak dělení funguje, než jej použijete.

Zbytek po celočíselném dělení

V našich aplikacích můžeme často potřebovat zbytek po celočíselném dělení (tzv. modulo). U našeho příkladu 5 / 2 je celočíselný výsledek 2 a modulo 1 (zbytek). Modulo se často používá pro zjištění, zda je číslo sudé (zbytek po dělení 2 je 0), když chceme např. vybarvit šachovnici, zjistit odchylku naší pozice od nějaké čtvercové sítě a podobně.

Ve Visual Basic .NET zapíšeme modulo jako Mod:

Console.WriteLine(5 Mod 2) ' Vypíše 1

Tak to bychom měli. Výuka nyní pokračuje navazujícím kurzem Základy objektově orientovaného programování ve Visual Basic .NET. Příště si tedy představíme objektový svět a pochopíme mnoho věcí, které nám až doteď byly utajovány :)

V další lekci, K čemu jsou algoritmy?, si uděláme úvod do světa algoritmů, řekneme si, co to algoritmus vlastně je, a proč by nás něco takového mělo vůbec zajímat.


 

Předchozí článek
Kvíz - Pokročilé podmínky a cykly ve VB.NET
Všechny články v sekci
Základní konstrukce jazyka Visual Basic (VB.NET)
Přeskočit článek
(nedoporučujeme)
K čemu jsou algoritmy?
Článek pro vás napsal Michal Žůrek - misaz
Avatar
Uživatelské hodnocení:
13 hlasů
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity