VB.NET - díl 3.
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

VB.NET - díl 3.VB.NET - díl 3.

 

VB.NET - díl 3.

Google       Google       9. 8. 2009       21 341×

V třetím díle seriálu probereme operátory a podmínky řídicí běh programu.

Reklama
Reklama

Na začátek bych se chtěl omluvit těm, kteří mi poslali úkoly k první lekci kurzu. Vzhledem k tomu, že jsem žádný úkol přímo nezadával, tak jsem ani nekontroloval, zda někdo něco odevzdal, tím pádem jsem ani nemohl odpovědět na dotaz na jeden technický problém.

A dejme se do práce:

Operátory

Všechny operátory (např. +, -, /, *, % ...) jazyka VB.NET jsou při kompilaci (sestavení vašeho zdrojového kódu do souboru *.exe, případně *.dll) chápány jako jednoduché funkce. Například operátor + datového typu Integer je vlastně funkce, která vezme dvě celá čísla, sečte je a vrátí výsledek. Ve VB.NET jsou definovány tyto operátory:

Operátor Popis Příklad
+, -, *, / klasické aritmetické operátory 6 + 4
\ celočíselné dělení 5 \ 2 (výsledek je 2)
Mod modulo, neboli zbytek po dělení 5 Mod 2 (výsledek je 1)

VB.NET má dále operátory porovnání a operátory logické, které nás obzvláště zajímají v souvislosti s dnešní lekcí. Tyto operátory vždy vrací buď True, nebo False:

Operátor Popis Příklad
= porovnání 6 = (5 + 1) (výsledek je True)
<> nerovná se 6 <> (5 + 2) (výsledek je True)
<, >, <=, >= menší než, větší než, menší nebo rovno, větší nebo rovno 6 <= 5 (výsledek je False)

To jsou operátory porovnání. Logické operátory vrací také True nebo False, ale pracují už rovnou s logickými hodnotami:

Operátor Popis Příklad
Not logická negace Not True (výsledek je false)
And logické násobení, neboli konjunkce True And True (výsledek je True)
Or logické sčítání, neboli disjunkce True Or False (výsledek je True)
Xor exklusivní disjunkce True Xor True (výsledek je false)

Zde musím trochu vysvětlit, co jsou tyto logické operátory vlastně zač. Operátor And vrací True, pokud jsou obě strany výrazu pravdivé, jinak vrací False. Operátor Or vrací True, pokud platí jedna z podmínek nebo obě podmínky. False vrací, pouze pokud neplatí ani jedna z podmínek. Operátor Xor vrací True, pokud platí pouze jedna z podmínek. Pokud neplatí žádná nebo platí obě, vrací False. Pro lepší pochopení snad pomůže tato tabulka (pro přehlednost uděláme z True jedničku a z False nulu):

And Or Xor
1 And 1 je 1 1 Or 1 je 1 1 Xor 1 je 0
1 And 0 je 0 1 Or 0 je 1 1 Xor 0 je 1
0 And 1 je 0 0 Or 1 je 1 0 Xor 1 je 1
0 And 0 je 0 0 Or 0 je 0 0 Xor 0 je 0

Vím, že toto je trochu složitější, takže jako vždy, pokud něčemu nerozumíte, napište do komentářů.

Podmínky

Téměř každý programovací jazyk na světě má podmínky. Podmínky slouží k vyhodnocování údajů za běhu programu a zvolení správného postupu. Podmínky souvisí úzce s datovým typem Boolean, na základě jehož hodnoty se vyhodnocují. Syntaxe pro zapsání podmínky ve VB.NET je následující:

If (podmínka) Then (jedna metoda nebo funkce)
nebo
If (podmínka) Then
  (více metod a funkcí)
  ...
End If

Jakmile dojde běh programu k podmínce, tato se vyhodnotí a kód mezi If a End If se provede, pouze pokud je podmínka vyhodnocena jako True. Syntaxe If má ještě nepovinnou část Else, která určuje, co se provede, pokud je podmínka vyhodnocena jako False:

If (podmínka) Then
  'Kód, který se provede, pokud je podmínka vyhodnocena
  'jako True
Else
  'Kód, který se provede, pokud je podmínka vyhodnocena
  'jako False
End If

Blok If má ještě jednu speciální, nepovinnou část, a to blok ElseIf. Ten slouží k vyhodnocení více podmínek v rámci jednoho Ifu. Příklad:

Dim a As Integer
...
'Tady se do a přiřadí nějaká hodnota.
...

If (a = 7) Then
  'Pokud se a rovná 7...
ElseIf (a = 6) Then
  'Pokud se a rovná 6...
Else
  'Pokud neplatí ani jedna z podmínek...
End If

Blok Select Case

Blok Select Case funguje jako pokročilá konstrukce pro vyhodnocování podmínek. Vypadá takto:

Select Case a
  Case 6
    'Pokud se a rovná 6...
  Case 7
    'Pokud se a rovná 7
  Case 8, 9, 10
    'Pokud se a rovná 8, 9, nebo 10
  Case Else
    'Pokud je a něco úplně jiného...
End Select

Deklarace Case má ještě speciální variantu Case Is, kterou lze použít pro testování rozsahu:

Dim a As Integer = 6
Select Case a
  Case Is < 6
    'a je menší než šest
  Case 6
    'a je šest
  Case Is > 6
    'a je větší než šest
End Select

Předtím, než se vrhneme na naši praktickou ukázku, musím ještě předvést využití dvou veleužitečných funkcí: Console.ReadLine() a Integer.Parse().

Funkci Console.ReadLine() jsme dosud používali pouze na pozastavení programu, ale tato kromě toho umí i načítat vstup z klávesnice. Využívá se takto:

Dim name As String = Console.ReadLine()
'Funkce pozastaví program, počká, až uživatel napíše něco do konzole a odentruje.
'Pak vrátí načtenou hodnotu.
Console.WriteLine(name)

Funkce Integer.Parse() se používá pro převod řetězce na odpovídající číselné vyjádření. Příklad:

Dim s As String = "46"
Dim i As Integer = Integer.Parse(s) 'V i je nyní hodnota 46

Pozor! Pokud je v převáděném řetězci hodnota, která se nedá vyjádřit číslem, třeba "Honza", program nebude fungovat a, obecně řečeno, spadne.

Tak, a teď k té praktické ukázce. Napíšeme si program, který na začátku vybídne uživatele, aby zadal číslo od jedné do čtyř a podle zadaného čísla bude nadále počítat obsah, popř. objem kruhu, čtverce, koule nebo krychle. Protože náš příklad bude obsahovat množství funkcí, které pouze vypočítávají tyto hodnoty, tak si vytvoříme nový modul, který nazveme Helpers a funkce napíšeme do něj. V okně Solution Explorer klepněte pravým tlačítkem na název projektu, vyberte položku Add -> Module... Zobrazí se vám nové okno, jako název vepište Helpers.vb a potvrďte. Celý zdrojový kód je zde:

TretiLekce.vb

Module TretiLekce

    Sub Main()
        Console.WriteLine("Zadejte hodnotu 1-4 (1 pro čtverec, 2 pro kruh, 3 pro krychli, 4 pro kouli)")
        Dim choice As Integer = Integer.Parse(Console.ReadLine())
        'nejúspornější zápis
        Console.WriteLine()
        Select Case choice
            Case 1
                Console.WriteLine("Zadejte stranu čtverce (cm):")
                Dim a As Integer = Integer.Parse(Console.ReadLine())
                Console.WriteLine()
                Console.WriteLine("Obvod čtverce je " & Helpers.GetSquarePerimeter(a) & " cm")
                Console.WriteLine("Obsah čtverce je " & Helpers.GetSquareArea(a) & " cm2")
            Case 2
                Console.WriteLine("Zadejte poloměr kruhu (cm):")
                Dim r As Integer = Integer.Parse(Console.ReadLine())
                Console.WriteLine()
                Console.WriteLine("Obvod kruhu je " & Helpers.GetCirclePerimeter(r) & " cm")
                Console.WriteLine("Obsah kruhu je " & Helpers.GetCircleArea(r) & " cm2")
            Case 3
                Console.WriteLine("Zadejte stranu krychle (cm):")
                Dim a As Integer = Integer.Parse(Console.ReadLine())
                Console.WriteLine()
                Console.WriteLine("Povrch krychle je " & Helpers.GetCubeSurface(a) & " cm2")
                Console.WriteLine("Objem krychle je " & Helpers.GetCubeVolume(a) & " cm3")
            Case 4
                Console.WriteLine("Zadejte poloměr koule (cm):")
                Dim r As Integer = Integer.Parse(Console.ReadLine())
                Console.WriteLine()
                Console.WriteLine("Povrch koule je " & Helpers.GetSphereSurface(r) & " cm2")
                Console.WriteLine("Objem koule je " & Helpers.GetSphereVolume(r) & " cm3")
            Case Else
        End Select
        Console.ReadLine()
    End Sub

End Module

Helpers.vb

Module Helpers
    Function GetSquareArea(ByVal a As Double) As Double
        Return a ^ 2
    End Function

    Function GetSquarePerimeter(ByVal a As Double) As Integer
        Return 4 * a
    End Function

    Function GetCubeSurface(ByVal a As Double) As Double
        Return 6 * a ^ 2
    End Function

    Function GetCubeVolume(ByVal a As Double) As Double
        Return a ^ 3
    End Function

    Function GetCirclePerimeter(ByVal r As Double) As Double
        Return 2 * Math.PI * r
    End Function

    Function GetCircleArea(ByVal r As Double) As Double
        Return Math.PI * r ^ 2
    End Function

    Function GetSphereSurface(ByVal r As Double) As Double
        Return 4 * Math.PI * r ^ 2
    End Function

    Function GetSphereVolume(ByVal r As Double) As Double
        Return (4 / 3) * Math.PI * (r ^ 3)
    End Function
End Module

To by bylo pro dnešní lekci vše. Za domácí úkol napište za použití dosud naučených technik program, který bude řešit kvadratickou rovnici. O ošetřování vstupu proti hodnotám typu Honza místo 46 se nestarejte, ošetřit to ještě numíme. Pokud by to zde někdo nevěděl, postup řešení kvadratické rovnice je tento (Funkce pro výpočet druhé odmocniny ve VB.NET je Math.Sqrt(), vrací double.):

Kvadratická rovnice je rovnice tvaru . Nejprve si musíme vypočítat tzv. diskriminant, který značíme jako D. Vzorec pro výpočet D je: . Pomocí diskriminantu zjistíme, kolik má rovnice řešení. Pokud je diskriminant menší než nula, rovnice nemá řešení. Pokud je diskriminant roven nule, má rovnice jedno řešení, vyjádřitelné vzorcem . Pokud je diskriminant větší než nula, má rovnice dvě řešení, vyjádřitelná jako a .

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor se věnuje programování v jazycích C# a Visual Basic.NET v propojení s ASP.NET. Také občas programuje v Javě a okrajově v C/C++;

Nové články

Obrázek ke článku JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá první nonstop veřejně dostupnou digitální dílnu světového formátu s vybavením za 3 miliony korun. Dílnu může využívat po registraci kdokoliv. V  prostorách vzniknou prototypy produktů místních startupů, projekty kutilů a studentů i umělecká díla. Cílem dílny je zpřístupnit veřejnosti drahé přístroje a přitáhnout více podnikavých lidí k technickým oborům.

Reklama
Reklama
Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

Obrázek ke článku České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace (CRA) pořádají druhý ročník CRA IoT Hackathonů. Zájemci z řad vývojářů a fanoušků moderních technologií mohou změřit své síly a během jediného dne sestrojit co nejzajímavější funkční prototyp zařízení, které bude komunikovat prostřednictvím sítě LoRa. CRA IoT Hackathony se letos uskuteční ve dvou fázích, na jaře a na podzim, v různých městech České republiky. Jarní běh se odstartuje 31. března v Brně a 7. dubna v Praze.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý