VB - 12. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

VB - 12. lekceVB - 12. lekce

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno

VB - 12. lekce

Google       Google       30. 4. 2005       17 095×

12.2 Vykreslování grafů funkcí
12.3 Logické operátory
12.4 Ručičkové hodiny
12.5 Digitální hodiny
12.6 Domácí úkol
12.7 V další lekci...

Reklama
Reklama

12.1 Matematické funkce

Ano, ano, tak s těmi se budeme ještě dlouho setkávat. Já osobně je využívám neustále, protože Visual Basic používám převážně pro simulaci elektronických odvodů. Tak se do nich pustíme. Nejlépe když vám hned ukážu tabulku s jejich výčtem:


Abs   - Absolutní hodnota
Atn   - Arcustangens
Cos   - Cosinus
Exp   - Funkce vracející základ logaritmu
Fix   - Zaokrouhlení (vždy dolů)
Int   - Zaokrouhlení (vždy dolů)
Log   - Logaritmus
Rnd   - Náhodné číslo od 0 do 0,999
Round - Normální zaokrouhlení
Sgn   - Vrací znaménku plus nebo minus jedna
Sin   - Sinus
Sqr   - Odmocnina
Tan   - Tangens

Využití funkce v kódu.


Print Abs(-32)
Print Cos(2.15)
Print Sin(x – abs(f))
Print Sqr(tan(17)+Log(x))

Všechny tyto funkce se zapisují stejným stylem, pouze u Rnd() se v závorkách nic neuvádí, ani závorky se uvádět nemusí.


12.2 Vykreslování grafů funkcí

Zde si ukážeme praktické využití toho, co jsem rychle shrnul výše. Na formulář si budeme vykreslovat grafy jednotlivých funkcí. Každý graf budeme počítat od 0 do dvou pí. Grafy různých funkcí budeme vykreslovat pomocí metody PSet. Začneme tedy metodou PSet ScaleMode. Formulář nastavíme na Pixely. Nesmíme zapomenout ještě na jednu věc: formulář má souřadnice, které čím jsou větší, tím se bod zakresluje více dolů, pokud ale pracujeme v matematice, tak se vyšší hodnoty zakreslují nahoru, proto je potřeba si to obrátit. Ukázka je v následujícím kódu:


Sinus:
Const pi = 3.14

Private Sub Form_Click()
  For i = 0 To 2 * pi Step 0.001
    x = i * 100
    y = 380 - (360 * Sin(i))
    PSet (x, y), &HFF
  Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

Cosinus:
Const pi = 3.14

Private Sub Form_Click()
  For i = 0 To 2 * pi Step 0.001
    x = i * 100
    y = 380 - (360 * Cos(i))
    PSet (x, y), &HFF
  Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

Tangens:
Const pi = 3.14

Private Sub Form_Click()
  For i = 0 To 2 * pi Step 0.001
    x = i * 100
    y = 380 - (36 * Tan(i))
    PSet (x, y), &HFF
  Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

Logaritmus:
Const pi = 3.14

Private Sub Form_Click()
  For i = 1 To 720 Step 1
  x = i
  y = 380 - (10 * Log(i))
  PSet (x, y), &HFF
Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

Odmocnina
Const pi = 3.14

Private Sub Form_Click()
  For i = 1 To 720 Step 1
    x = i
    y = 380 - (10 * Sqr(i))
    PSet (x, y), &HFF
  Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

Neměl bych zapomínat ani na mocninu, ta se dělá pomocí ^ téhle stříšky, když tedy chci napsat pět na třetí, tak napíšu 5^3. Jak jednoduché.


Const pi = 3.14

Private Sub Form_Click()
  For i = 1 To 720 Step 0.01
    x = i * 5
    y = 380 - (i ^ 2)
    PSet (x, y), &HFF
  Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

To bylo na druhou a teď na třetí :)


Const pi = 3.14

Private Sub Form_Click()
  For i = 1 To 300 Step 0.01
    x = i * 20
    y = 380 - (i ^ 3)
    PSet (x, y), &HFF
  Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

Ještě jednu drobnost, jak vykreslit kružnici nebo ovál pomocí těchto metod:


Const pi = 3.14

Private Sub Form_Click()
  For i = 0 To 2 * pi Step 0.01
    x = 380 + (160 * Sin(i))
    y = 380 - (160 * Cos(i))
    PSet (x, y), &HFF
    DoEvents
  Next i
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

To byl kruh a tady je slíbený ovál:


Const pi = 3.14

Private Sub Form_Click()
  For i = 0 To 2 * pi Step 0.01
    x = 380 + (260 * Sin(i))
    Y = 380 - (160 * Cos(i))
    PSet (x, Y), &HFF
    DoEvents
  Next i<
End Sub

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Form1.Line (0, 380)-(800, 380)
End Sub

Tím bych zakončil funkce. Pokud jste pochopili funkce a stále vám to nejde, je to jen matematikou musíte vědět, jak s jakou funkcí počítat.


12.3 Logické operátory

Po matice trochu logiky, probereme si logické operátory ve Visual Basicu. Opět začnu tabulkou s jejich výčtem:


And - Logický součin
Or - Logický součet
Xor - Ekvivalence
Not - Negace
Imp - Implikace

Logický součin And: Pokud jsou oba výrazy rovny True, pak je výsledný výraz roven True, jinak je výsledný výraz False ("a" a "b" berme jako vstupní hodnoty a "c" jako výstupní hodnotu, čili výsledek).


a  b  c
0  0  0
0  1  0
1  0  0
1  1  1

Logický součet Or: Pokud je alespoň jeden výraz roven True, pak je výsledný výraz roven True, jinak je False.


a  b  c
0  0  0
0  1  1
1  0  1
1  1  1

Ekvivalence Xor: Pokud jsou dva výrazy rozdílné, výsledný výraz je True, jinak je False.


a  b  c
0  0  0
0  1  1
1  0  1
1  1  0

Negace Not: Pokud je výraz roven True, pak je výsledný výraz False a opačně.


a  c
1  0
0  1

Implikace Imp ???


a  b  c
0  0  1
0  1  1
1  0  0
1  1  1

Tyto funkce využijete například v logických operacích a výpočtech. Ještě vám ukážu, jak se s nimi pracuje a jak se zapisují do kódu:


Dim a As Boolean
Dim b As Boolean
Dim c As Boolean
c = a And b
c = a Or b
c = a Xor b
c = a Imp b
c = Not a

Pokud pracujete s hodnotami True a False, doporučuji deklarovat proměnné, vyhnete se tak nepříjemným problémům. Většímu využití logických funkcí se budeme zabývat v lekcích, které nás čekají za několik týdnů.


12.4 Ručičkové hodiny

Ukázka matematických funkcí aneb jak mohou vypadat ručičkové hodiny. Je potřeba si na formulář vložit tři objekty Line a jeden Timer.


Const pi = 3.14

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Timer1.Interval = 1000

  With Line1
    .X1 = 200
    .X2 = 200
    .Y1 = 200
    .Y2 = 200
    .BorderColor = &HFF
    .BorderWidth = 1
  End With

  With Line2
    .X1 = 200
    .X2 = 200
    .Y1 = 200
    .Y2 = 200
    .BorderColor = &H0
    .BorderWidth = 2
  End With

  With Line3
    .X1 = 200
    .X2 = 200
    .Y1 = 200
    .Y2 = 200
    .BorderColor = &H0
    .BorderWidth = 4
  End With

End Sub

Private Sub Timer1_Timer()
  Hodinovka = Hour(Time)
  Minutovka = Minute(Time)
  Vterinovka = Second(Time)
 
  Hodinovka = (Hodinovka / 12) * 2 * pi
  Minutovka = (Minutovka / 60) * 2 * pi
  Vterinovka = (Vterinovka / 60) * 2 * pi

  With Line3
    .X2 = 200 + (100 * Cos(Hodinovka - 1.57))
    .Y2 = 200 + (100 * Sin(Hodinovka - 1.57))
  End With

  With Line2
    .X2 = 200 + (120 * Cos(Minutovka - 1.57))
    .Y2 = 200 + (120 * Sin(Minutovka - 1.57))
  End With<

  With Line1
    .X2 = 200 + (150 * Cos(Vterinovka - 1.57))
    .Y2 = 200 + (150 * Sin(Vterinovka - 1.57))
  End With
End Sub

Naše hodiny ale mohou pracovat i takto, zde nejsou potřeba tři objekty Line.


Const pi = 3.14

Private Sub Form_Load()
  Form1.ScaleMode = 3
  Form1.AutoRedraw = True
  Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
  Hodinovka = Hour(Time)
  Minutovka = Minute(Time)
  Vterinovka = Second(Time)
  Hodinovka = (Hodinovka / 12) * 2 * pi
  Minutovka = (Minutovka / 60) * 2 * pi
  Vterinovka = (Vterinovka / 60) * 2 * pi
  Cls

  Form1.DrawWidth = 4
  Line (200, 200)-(200 + (100 * Cos(Hodinovka - 1.57)), _ 
200 + (100 * Sin(Hodinovka - 1.57))), &H0
  Form1.DrawWidth = 2
  Line (200, 200)-(200 + (120 * Cos(Minutovka - 1.57)), _ 
200 + (120 * Sin(Minutovka - 1.57))), &H0
  Form1.DrawWidth = 1
  Line (200, 200)-(200 + (150 * Cos(Vterinovka - 1.57)), _ 
200 + (150 * Sin(Vterinovka - 1.57))), &HFF
End Sub

12.5 Digitální hodiny

Buďto si můžeme vytvořit hodiny jako segmentový display pomocí objektů Line, což ale znamená mnoho podmínek a mnoho kódů, nebo pomocí obrázků, což je jednodušší. K segmentovým displejům se vrátíme při tvorbě komponent ActiveX.


12.6 Domácí úkol

Tentokrát to nebude ani moc úkol a ani ho po vás nechci odevzdat, jen si prostě vyzkoušejte, co ony funkce umí a jak s nimi pracovat a jak jich využít při kreslení grafu. Třeba si zkuste převést sinusový průběh na průběh obdélníkový. Pokud si troufnete na trojúhelníkový průběh, je jen na vás, co s tím uděláte.


12.7 V další lekci...

Ukládání a načítání textových souborů, minimalizace a tlačítka na titulku okna, tvorba falešného FullScreenu a možnosti formuláře Focus.

×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.

4 názory  —  4 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jiří ChytilAutor programuje ve VB, zajímá se o elektrotechniku, studuje na SOŠ Elektrotechnické - obor číslicová technika.
Web    

Nové články

Obrázek ke článku Proč mají absolventi v IT přemrštěné očekávání, a je vůbec přemrštěné?

Proč mají absolventi v IT přemrštěné očekávání, a je vůbec přemrštěné?

Poměrně nedávno zveřejnil portál Platy.cz zajímavé statistiky, kde mladí počítačoví experti nastupují do firem s průměrnou mzdou cca 36 000 Kč, hned v závěsu je bankovní sektor se svými cca 31 000 Kč. Pro srovnání – v ostatních oborech se průměrná nástupní mzda pohybuje okolo 28 000 Kč. Nástupní platy jsou samozřejmě ovlivněny i lokalitou zaměstnavatele

Reklama
Reklama
Obrázek ke článku Zpětné sledování sportovních přenosů využívá v létě řada lidí.

Zpětné sledování sportovních přenosů využívá v létě řada lidí.

Červenec a srpen představují měsíce, kdy Češi nejčastěji jezdí na vícedenní dovolené. V této době však rovněž probíhá řada důležitých sportovních událostí, jako jsou olympijské hry nebo například právě odehrané fotbalové mistrovství světa. Míra promeškaných sportovních přenosů však klesá díky moderních technologiím a službám. 

Obrázek ke článku Průzkum JetBrains: JavaScript mezi programátory vede, Kotlin získává na popularitě

Průzkum JetBrains: JavaScript mezi programátory vede, Kotlin získává na popularitě

Společnost JetBrains, přední tvůrce softwarových nástrojů pro profesionální vývojáře s centrálou v Praze, představila výsledky průzkumu, který pomáhá lépe porozumět a získat vhled do pracovních návyků programátorů. Zjištění mohou být nápomocná nejen pro zvýšení efektivity, ale také pro vytvoření ideálního pracovního prostředí pro programátory.  

Obrázek ke článku Jsou Youtubeři jen pro mladé?

Jsou Youtubeři jen pro mladé?

Každá generace má své, a tak zatímco v šedesátkách si celý svět ujížděl na Beatles a v devadesátkách jsme všichni hrdě nosili šusťákovky, dnešnímu světu jednoznačně vládne jiný fenomén, a to jsou Youtubeři. Jedná se o jakési novodobé idoly, které jsou mladým blíže než celebrity z dob minulých. 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý