10. Matematické funkce a metody, cykly (Do...Loop)
Přidal/a Jarda dne November 04 2010 11:33:33
Ve 4. kapitole jsme pracovali s funkcemi. Nyní se k nim vrátíme troškou teorie. Vestavěné funkce jsou důležitou součástí VB. Již víme, že funkce patří mezi podprogramy a vrací nějakou hodnotu. Funkce od nás převezmou požadované parametry a pak nám sdělí výsledek. Parametry uvádíme do závorky, jsou odděleny čárkou a musí zachovávat předepsané pořadí.
V minulé kapitole jsme pracovali s funkcí Rnd. Ta má žádný nebo jediný parametr. Ten určuje, jak se bude číslo generovat.
Dim A As Single
Randomize
A = Rnd (1)
Print A

Funkce mohou být součástí složitějších výrazů, argumentem funkce může být opět hodnota funkce. (viz. Př.)
Dim A As Integer
Dim B As Integer
A = 1 + Cos(0.5)
B = Sin (Rnd(1))

Rnd [(výraz)]

Již známe – generátor náhodných čísel. Generuje pseudonáhodné číslo v intervalu <0,1>

Parametr: >0 ...funkce generuje další náhodné číslo, =0...funkce generuje opět předchozí náhodné číslo (tj. Bude generováno stále stejné náhodné číslo), <0...funkce generuje pro každé číslo ve výrazu jedno číslo náhodné, které je mu přiřazeno, bez parametru ...činnost stejná, jako v případě, že výraz je kladný.

Funkce generuje čísla v intervalu <0,1>. Chceme-li generovat číslo celé a v jiném rozsahu, musíme nejdříve náhodné číslo vynásobit rozdílem horní a dolní hranice rozsahu (např. Chceme generovat čísla v intervalu <10,100>, násobíme číslem 90), pak přičteme k výsledku dolní hranici a na závěr využijeme funkci Int(výraz), která náhodné číslo zaokrouhlí na celá čísla. (Již jsme se s tím setkali ve 4. kapitole)

Aby sekvence čísel byla opravdu náhodná, musíme před použitím této funkce použít příkaz Randomize.

Matematické metody třídy Math .NET Framework

Budeme-li některou z metod použít, musíme na úplný začátek textu umístit příkaz

Imports system.Math
Sin(výraz), Cos(výraz), Tan(výraz)

Vracejí hodnoty daných goniometrických funkci. Parametr (výraz) nutno zadat v obloukové míře (radiány) Pokud používáme velikosti úhlu ve stupních, je třeba je nejdříve převést na radiány, tj. vynásobit číslem Pi/180
Abs(výraz)

Vrací absolutní hodnotu čísla, které je výsledkem výrazu
A = Abs(-5)
Sign(výraz)

Vrací signum čísla, které je výsledkem výrazu.

Hodnota: --------> Signum:

>0 --------> 1

=0 --------> 0

<0 --------> -1

Log(výraz)

Vrací přirozený logaritmus čísla, které je výsledkem výrazu (>0)

A = Log(1) 'A=0
Exp(výraz)

Vrací hodnotu, která vznikne umocněním Eulerova čísla e na hodnotu výrazu

A = Exp (0) 'A=1
Sqrt(výraz)

Vrací hodnotu druhé odmocniny z čísla, které je výsledkem výrazu (parametrem výraz větší nebo roven 0)




Cykly – začneme praktickou ukázkou jednoho z typů cyklů (Do...Loop)

V učivu o algoritmech jsme se mohli setkat tímto algoritmem. Je to algorimus na výpočet největšího společného dělitele. Spočívá v tom, že opakovaně odečítáme menší číslo od většího, dokud se čísla nerovnají. Toto shodné číslo je pak jejich největším společným dělitelem.

Opakování zadané činnosti umožňují cykly. V našem případě nevíme přesně, kolikrát budeme čísla odečítat, víme ale, že odečítáme čísla do té doby, než se rovnají, tj. do té doby, než je splněna nějaká podmínka. Použijeme proto cyklus Do...Loop

Vzhled aplikace – jeho vytvoření, úprava formuláře

Známým postupem vytvoříme formulář programu. Nebudu už zde popisovat názvy a vlastnosti jednotlivých objekt -jsou zřejmé ze zdrojového kódu aplikace.




Zdrojový kód aplikace

Tlačítku Největší společný dělitel přiřadíme následující událost Click

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim A As Integer
Dim B As Integer
A = Val(txtA.Text)
B = Val(txtB.Text)
Do While A <> B
If A > B Then
A = A - B
Else
B = B - A
End If
Loop
txtVysledek.Text = A
End Sub


Popis jednotlivých částí kódu:


Dim A As Integer 'deklarujeme proměnné
Dim B As Integer 'deklarujeme proměnné
A = Val(txtA.Text) 'načteme hodnoty proměnných z textboxu
B = Val(txtB.Text)


Dále následuje tzv. Podmíněný cyklus, jeho běh závisí na splnění či nesplnění obecné podmínky. Existují dvě varianty cyklu Do...Loop. Buď cyklus pokračuje, je-li podmínka splněna (While) nebo cyklus pokračuje, není-li podmínka splněna (Until).


Do 'začátek cyklu
While A <> B 'podmínka cyklu
If A > B Then 'podmíněný příkaz
A = A - B
Else
B = B - A
End If
Loop 'konec cyklu

Po proběhnutí cyklu zbývá určit, kde se zobrazí výsledek
txtVysledek.Text = A

Jak je možno dále upravit program, je vidět na dolním obrázku. Nově je tam zařazeno tlačítko Smaž NSD. Stiskem tohoto tlačítka vymažeme textBox, ve kterém se zobrazuje výsledek. Využijeme metodu seznam Clear.




Shrnutí - cyklus Do...Loop

Dvě varianty:


Do a Loop uvozují začátek a konec cyklu. Klíčové slovo před podmínkou rozhoduje o tom jak poběží cyklus. While - cyklus pokračuje, je-li podmínka splněna, Until - cyklus pokračuje, není-li podmínka splněna.
Úkoly:

1.Zkuste modifikovat výše uvedený program (jeho vzhled) a výsledek (exe soubor) pošlete na zavadil.gymst@seznam.cz