Články

Tisk článku Tisk článku

Podmínky a operátory

[Zpět na kategorii]

Datum: 26. 4. 2007 21:22       Autor: Tomáš Herceg       Zobrazeno: 36303x

Kategorie: Začínáme

Témata: VB.NET

Seriál: VB.NET od začátku - Díl 4.

V minulém díle jsme si vysvětlili, co je to proměnná a jak se s ní pracuje. Ukázali jsme si také několik základních datových typů. Dnes si řekneme, jak měnit chování programu v závislosti na hodnotě nějaké proměnné, naučíme se totiž používat podmínky.


Doufám, že si pamatujete datové typy, které jsme se naučili v minulém díle. Pokud ne, tak se můžete vrátit k minulému dílu a připomenout si je, dnes se nám budou hodit.

InputBox

Ještě před tím, než přistoupíme k podmínkám, se naučíme úplně jednoduchou funkci, a to InputBox. Slouží k jednoduchému zjištění vstupu od uživatele. Tato funkce zobrazí okno s textem, pod kterým bude textové pole, do kterého uživatel může napsat nějaký text.

 Okno funkce InputBox

 Dim vstup1, vstup2 As String 
 vstup1 = InputBox("Zadejte číslo:") 
 vstup2 = InputBox("Zadejte číslo:", "Můj program")

Na tomto příkladu jsou vidět dvě možná použití funkce InputBox. Do každé proměnné přiřazujeme výsledek této funkce, tedy do této proměnné se uloží to, co uživatel napsal. Hodnotám, které píšeme do závorky za název funkce, říkáme argumenty nebo též parametry funkce. Ty upravují chování funkce. Některé funkce žádný parametr nepotřebují, některé jich potřebují více. To musíme u každé funkce vědět, ale nebojte se, nemusíte si pamatovat argumenty pro tisíce funkcí, které .NET Framework obsahuje. Programovací prostředí Visual Studio (Visual Basic 2010 Express je pouze jeho součást) vám při použití funkce zobrazí, které parametry funkce potřebuje, kolik jich je, a zobrazí vám k nim i stručnou nápovědu (anglicky).

Nápověda při zadávání 

V okamžiku, kdy píšeme InputBox, filtruje se nám seznam funkcí, které obsahují slovo Input. Pokud jsme spokojeni, napíšeme znak, který bychom psali za slovem funkce, například mezeru nebo kulatou závorku. V okamžiku, kdy to uděláme, zobrazí se detaily volané funkce.

Detaily volané funkce

Důležitý je první řádek – vidíme, že funkce má parametr Prompt typu String (text v okně) a dále nepovinné parametry Title (titulek okna), DefaultResponse (co má být předvyplněno) a XPos a YPos, které určují pozici okna na obrazovce. Pokud jsou parametry v hranatých závorkách (což jsou všechny kromě prvního), znamená to, že jsou nepovinné.

Druhý řádek pak popisuje, co celá funkce InputBox dělá. Třetí pak obsahuje popis k parametreu, který právě zadáváme. Se znalostí technické angličtiny je používání těchto funkcí hračka, pomoci může článek Nejčastěji používaná anglická slovíčka v programování.

Zavoláme tedy funkci InputBox, přičemž argumenty si nachystáme do proměnných (nemuseli bychom).

 Dim otazka As String = "Zadejte číslo:" 
 Dim titulek As String = "Můj program" 
 Dim vstup3 As String 
 vstup3 = InputBox(otazka, titulek)

Podotýkám, že tato funkce vždy vrací hodnotu typu String. Pokud tedy potřebujeme, aby uživatel zadával číslo, musíme hodnotu převést.

 Dim cislo As Integer 
 cislo = CInt(InputBox("Zadejte číslo:"))

Na tomto příkladu vidíme vnořené funkce. Výsledek vnitřní funkce (InputBox) předáme vnější funkci (CInt) jako argument. Vnitřní funkci jsem podbarvil žlutě, abyste ji viděli. Počítá se k ní i její závorka a argument. Nejprve se vyhodnotí funkce InputBox (žlutě vyznačená oblast). Zobrazí se tedy okno, do kteérho uživatel něco napíše. Jakmile klikne na tlačítko OK, Visual Basic dostane hodnotu této funkce a místo žluté oblasti se "dosadí" tato výsledná hodnota. Až v této chvíli se zavolá funkce CInt, která výsledek funkce InputBox převede na číslo a až úplně nakonec se tato číselná hodnota uloží do proměnné cislo.

Pokud se vám zatím vnořené funkce nelíbí, můžete se jim vyhnout velmi jednoduše přes proměnnou:

 Dim vysledek As String = InputBox("Zadejte číslo:") 
 Dim cislo As Integer = CInt(vysledek)

Tento kód provede úplně to samé, akorát k němu potřebujeme ještě jednu proměnnou. Ale nebojte se, za chvíli si na vnořené funkce zvyknete. Důležité je si uvědomit, že nejprve se provede to, co je uvnitř. Takže je někdy lepší nejprve napsat vnitřní funkci, pak ji dát do závorky a před to napsat název vnější funkci. Časem se ale stejně naučíte "myslet dopředu" a budete ve většině případů kód psát rovnou.

Podmínky

Nyní můžeme přikročit ke slíbeným podmínkám. V jazyce Visual Basic máme dva typy podmínek. Zde vidíte schéma, jak se podmínky zapisují. Není to zdrojový kód, místo [podmínka] a [příkaz] se musí zapsat skutečné příkazy a podmínky! Podmínky slouží k tomu, abychom část programu neprováděli vždy, ale jen pokud platí nějaký vztah.

 If [podmínka] Then [příkaz] 
  
 If [podmínka] Then 
     [příkaz] 
     [příkaz] 
     [...] 
 End If

Příkazy, které jsou v ukázce, se provedou, pouze pokud zadaná podmínka platí.

Pokud potřebujeme za nějaké podmínky provést pouze jeden příkaz, stačí nám první typ (tzv. krátká podmínka), který se vejde na jeden řádek. Můžeme ovšem použít i druhý typ.

Pokud potřebujeme za nějaké podmínky provést více příkazů, použijeme druhý způsob (tzv. dlouhá podmínka). Nezapomeneme na konci podmíněný blok ukončit příkazem End If.

Někdy potřebujeme provést i nějaké příkazy, pokud podmínka neplatí. K tomu použijeme tato rozšíření schématu podmínky.

 If [podmínka] Then [příkaz] Else [příkaz] 
  
 If [podmínka] Then 
     [příkaz] 
     [příkaz] 
     [...] 
 Else 
     [příkaz] 
     [příkaz] 
     [...] 
 End If

To, co je před slovem Else se provede, pokud podmínka platí. Pokud neplatí, provede se to, co je za slovem Else.

Všimněte si, že příkazy uvnitř podmínky jsou odsazené. Visual Basic toto odsazení provádí sám. Možná vám přijde, že odsazovat nemá smysl, ale brzy poznáte, že neodsazovaný kód je velmi nepřehledný. Odsazování příkazů uvnitř podmínek naznačuje, že tyto příkazy se neprovádí pokaždé, že jsou v nějakém ohledu speciální, a že patří do nějakého bloku.

Tyto odsazené bloky mají ještě jeden význam – pokud v nich nadeklarujete proměnnou, bude platit jenom v tom bloku a ne vně. Jakmile blok se při vykonávání opustí, proměnná zanikne.

Zde vidíme úplně jednoduchý program, který již dělá něco užitečného. Zjistí, jestli uživatel zadal liché či sudé číslo. Využíváme toho, že pokud je číslo sudé, jehozbytek po vydělení dvěmi (operátor Mod) bude nula.

 Dim cislo As Integer 
 cislo = CInt(InputBox("Zadejte číslo:")) 
 If cislo Mod 2 = 0 Then 
     MsgBox("Číslo je sudé!") 
 Else 
     MsgBox("Číslo je liché!") 
 End If

Toto je tedy první praktický příklad, jak použít podmínku. Dá se jich samozřejmě vymyslet celá řada.

Podmínkou je v tomto případě výraz cislo Mod 2 = 0. Říkali jsme si, že značka rovná se se používá k přiřazení hodnoty do proměnné. V tomto případě ale tento operátor provede porovnání. Spočítá výrazy na obou stranách a porovná je.

To, jestli rovná se znamená přiřazení nebo porovnání, se pozná podle toho, kde je použito. Uvnitř podmínek je to porovnání, pokud stojí jako samostatný příkaz (např. a = 5), pak se provede přiřazení.

Relační operátory

Relace je vztah něčeho k něčemu. Relační operátory mezi sebou porovnávají dvě hodnoty. Visual Basic zná tyto:

Operátor Význam
= rovná se
<> nerovná se
< je menší než
> je větší než
<= je menší nebo rovno
>= je větší nebo rovno

Výsledkem výrazu s relačním operátorem je vždy hodnota typu Boolean, tedy buď True (pravda) nebo False (nepravda). Podmínka se splní, pokud výsledek výrazu je True.

Při porovnávání čísel se porovnává jejich hodnota. Porovnávat můžeme i řetězce, v takovém případě se porovnává podle abecedy (“jablko” > “hruška”).

Pozor, u operátorů <= a >= záleží na pořadí, nesmíme napsat =< ani =>, první operátor by byl nesmysl, druhý znamená něco jiného.

Logické operátory

Dalším typem operátorů jsou operátory logické. Ty pracují s hodnotami typu Boolean, nejčastěji se používají ve spojitosti s výrazy s relačními operátory. Základní logické operátory jsou tři:

Operátor Význam
And a
Or nebo
Not ne

Místo True budeme používat jedničku, místo False nulu. Zde je tabulka, která ukazuje, jak se tyto operátory chovají:

A B A And B (a) A Or B (nebo)
0 0 0 And 0 = 0 0 Or 0 = 0
0 1 0 And 1 = 0 0 Or 1 = 1
1 0 1 And 0 = 0 1 Or 0 = 1
1 1 1 And 1 = 1 1 Or 1 = 1

Operátor Not potřebuje jen jednu vstupní hodnotu:

A Not A (ne)
0 Not 0 = 1
1 Not 1 = 0

Jako malé cvičení si můžete zkusit zjistit, jaká je hodnota následujících výrazů:

  • (True And False) And (True Or Not (False Or True))
  • (True And (3 <= 7))
  • Not (“hello” = “hello”)
  • “3” < “100”
  • (True And False) = Not (True Or False)

Správné odpovědi: False, True, False, False, True

Složené podmínky

Na tomto příkladu je krásně vidět, jak fungují výrazy s oběma typy operátorů.

Je to jednoduchý program, který se uživatele zeptá na dvě čísla a vypíše, jestli alespoň jedno z nich byla trojka nebo jestli obě byly sedmičky.

 Dim cislo1 As Integer = CInt(InputBox("Zadejte první číslo:")) 
 Dim cislo2 As Integer = CInt(InputBox("Zadejte druhé číslo:")) 
 If (cislo1 = 3) Or (cislo2 = 3) Then 
     MsgBox("Zadal jste alespoň jednu trojku.") 
 End If 
 If (cislo1 = 7) And (cislo2 = 7) Then 
     MsgBox("Zadal jste dvě sedmičky.") 
 End If

Obě podmínky dáváme do závorek a mezi ně napíšeme logický operátor, který řekne, jestli musí platit obě podmínky zároveň (And), nebo stačí, když platí jedna z nich (Or).

Trojúhelníková nerovnost

Nyní si napíšeme velmi jednoduchou aplikaci, které zadáme délky stran trojúhelníka, a ona nám vypíše, jestli trojúhelník můžeme sestrojit, nebo jej sestrojit nemůžeme.

Pokud je součet délek každých dvou stran trojúhelníka větší než délka strany třetí, trojúhelník lze sestrojit. Důležité je si uvědomit, že každé dvě strany musí být větší než ta třetí. Nestačí tedy sečíst první dvě délky a porovnat je se třetí, musíme udělat dohromady 3 testy.

Trojúhelník a jeho strany

Vytvořte si tedy nový projekt (Windows Forms Application, jako vždycky), přidejte si na formulář 3 textová pole (TextBox), do každé zadáme délku jedné strany trojúhelníka, a nakonec tlačítko (Button), na které napište třeba text Zkontrolovat.

Dvakrát klikněte na tlačítko, napíšeme proceduru, která se spustí po kliknutí na toto tlačítko.

 Dim a As Double = CDbl(TextBox1.Text) 
 Dim b As Double = CDbl(TextBox2.Text) 
 Dim c As Double = CDbl(TextBox3.Text) 
  
 If (a + b > c) And (b + c > a) And (c + a > b) Then 
     MsgBox("Trojúhelník existuje.") 
 Else 
     MsgBox("Trojúhelník neexistuje.") 
 End If

To je celé. Na prvních třech řádcích vytváříme proměnné a, b, c typu Double, tedy desetinné číslo, a nahráváme do nich texty z textových polí. Jelikož jsou to texty, musíme je převést na typ Double funkcí CDbl, protože texty do proměnných na desetinná čísla "nacpat" nemůžeme.

Podmínka testuje tři výrazy a mezi nim jsou klíčová slova And, což znamená, že musí platit všechny podmínky zároveň. Jakmile jedna z nich neplatí, trojúhelník už neexistuje. Testujeme každé dvě strany proti straně třetí, myslím, že z ukázky kódu je to jasné.

Pokud se podmínky splní, zobrazíme zprávu, že trojúhelník existuje, pokud ne, zobrazí se, že trojúhelník neexistuje.

SOUTĚŽ: Byla vyhlášena malá programátorská soutěž pro všechny soutěživé začátečníky! Úkolem bylo přidat do tohoto prográmku tlačítko Spočítat obsah, které po kliknutí vypíše obsah trojúhelníka se stranami zadaných délek.

VYHODNOCENÍ: Na můj mail dorazila tři řešení, všechna byla správná. Výherce tedy máme tři - jsou jimi Luboš Blader, Jiří Pavliš a Tomáš Balvar, jehož správné řešení se mi zatoulalo do složky nevyžádaná pošta a objevil jsem jej až dodatečně, za což se mu omlouvám. Všem třem výhercům gratuluji.

Pro spočítání obsahu stačilo použít tzv. Herónův vzorec:

Herónův vzorec

Více informací o tomto vzorci najdete třeba na této stránce, kde najdete také důkaz platnosti tohoto vzorce. Druhou odmocninu čísla dostaneme přes funkci Math.Sqrt.

 s = (a + b + c) / 2 
 MsgBox(Math.Sqrt(s * (s - a) * (s - b) * (s - c))) 

Komentáře

Komentáře jsou vysvětlivky uvnitř programového kódu, které se neprovádí, ale slouží k tomu, abychom si popsali, co daná část kódu dělá. Visual Basic je ignoruje, nevšímá si jich, takže pokud potřebujeme něco testovat a chcemě nějaký kus kódu dočasně vyřadit z činnosti, můžeme jej do komentářů uzavřít.

Nedoporučuji ale zakomentovaný kód v projektu nechat, mívá totiž tendenci se hromadit a po čase už každý zapomene, k čemu tam vlastně byl a proč byl zakomentován.

Komentáře se zapisují kamkoliv do kódu, musíme před ně akorát napsat znak apostrof (většinou Shift a klávesa vedle klávesy Backspace). Cokoliv za apostrofem až do konce řádku je komentář, Visual Studio jej zvýrazní zeleně, aby se nepletl s programovým kódem. Zde je příklad:

 'nadeklarujeme si proměnné a,b,c a uložíme do nich délky stran z textových polí 
 Dim a As Double = CDbl(TextBox1.Text) 
 Dim b As Double = CDbl(TextBox2.Text) 
 Dim c As Double = CDbl(TextBox3.Text) 
  
 'otestujeme, zda trojúhelníková nerovnost platí 
 If (a + b > c) And (b + c > a) And (c + a > b) Then 
     MsgBox("Trojúhelník existuje.")    'trojúhelník lze sestrojit 
 Else 
     MsgBox("Trojúhelník neexistuje.")  'trojúhelník nelze sestrojit 
 End If

Za domácí úkol si můžete aplikaci pro práci s trojúhelníky rozšířit, aby uměla počítat obvod trojúhelníka a dále zjistila, jestli je pravoúhlý. K tomu může posloužit třeba Pythagorova věta.


> Na začátek

 

Hodnocení:

Hlasů: 95
Zvolte své hodnocení

Tomáš Herceg

Jsem hlavním softwarovým architektem ve společnosti Riganti. Mám dlouholeté zkušenosti s technologiemi ASP.NET, Silverlight, WPF a XNA. Působím též jako lektor ve společnosti Gopas a již třetím rokem jsem držitelem ocenění Microsoft Most Valuable Professional.

Podpořte vznik dalších článků

Související články

DílNázev článku 
Díl 1. Úvod, vývojové prostředí a základní pojmy 25. 4. 2007
Díl 2. Začínáme programovat 25. 4. 2007
Díl 3. Proměnné a datové typy 25. 4. 2007
Díl 4. Podmínky a operátory 26. 4. 2007
Díl 5. Složitější podmínky a rozhodovací struktury 26. 4. 2007
Díl 6. Cyklus For 5. 5. 2007
Díl 7. Pole 9. 5. 2007
Díl 8. Pole, cykly a práce se soubory 14. 5. 2007
Díl 9. Přidáváme druhý formulář 18. 5. 2007
Díl 10. Funkce a procedury 6. 7. 2007
Díl 11. Kolekce a pole 27. 7. 2007
Díl 12. Práce s textem a řetězci 17. 8. 2007
Díl 13. Úvod do grafiky 27. 8. 2007
Díl 14. Vykreslujeme graf 31. 8. 2007
Díl 15. Práce se soubory, úvod do objektově orientovaného programování 19. 11. 2007
Díl 16. Třídy a funkce .NET frameworku, o kterých je dobré vědět 31. 12. 2007
Díl 17. Objektově orientované programování - základy 30. 6. 2008
Díl 18. Dědičnost 6. 10. 2008

RSS Feed RSS Feed

Diskuse

Dobrý

Datum: 7.9.2007 10:36
Autor: neregistrovaný (213.155.227.225)
Hodnocení autora: není
Příspěvků: 0
Hledal jsem nějaký programovací jazyk kterým bych začal a narazil na tenhle web. Návody jsou přehledné a lehké na pochopení, moc dík. A tady je můj trojúhelníkový výtvor :o)
http://ukazto.com/img/trojuhelnik-xym1.j...
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

otazka

Datum: 18.9.2007 21:09
Autor: neregistrovaný (85.70.53.227)
Hodnocení autora: není
Příspěvků: 0
Ahoj,nemůžu najít funkci Input Box!Kde se to v Microsoft Visual Basicu 2005 najde?Dik za radu.
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

k téhle kapitole

Datum: 6.10.2007 19:06
Autor: neregistrovaný (85.70.53.227)
Hodnocení autora: není
Příspěvků: 0
absolutně špatná kapitola sice ses asi snažil, ale nenapsal jsi kam se ty zdr. kody maj psat jen jsou tam napsaný a není tam kam se maj psat jestli do buttonu nebo formuláře....je to škoda protože jsem kulový pochopil
 
           [Odpovědět]
 
Hodnocení: -19 Čekejte, prosím...

Re: k téhle kapitole

Datum: 15.10.2007 8:55
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Tohle byla spíš teorie, nemusíš to psát nikam, stačí číst ten kód a dívat se, jak se to dělá. Při troše fantazie bys to mohl dát i to procedury Buttonu a pak si jejich hodnoty přes MsgBox vypsat. Chce to trochu přemýšlet, bez toho se programovat nedá.
 
           [Odpovědět]
 
Hodnocení: 5 Čekejte, prosím...

Re: k téhle kapitole

Datum: 23.1.2008 16:25
Autor: neregistrovaný (90.176.36.166)
Hodnocení autora: není
Příspěvků: 0
chtěl bych se zeptat, jak má udělat podmínku která by vásledek vypisovala do Labelu? děkuji předem

 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Re: k téhle kapitole

Datum: 23.1.2008 16:32
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Stačí trochu přemýšlet a zkoušet:

If a = 3 Then
   Label1.Text = "a je 3"
End If
 
 
           [Odpovědět]
 
Hodnocení: 3 Čekejte, prosím...

Re: k téhle kapitole

Datum: 23.1.2008 16:36
Autor: neregistrovaný (90.176.36.166)
Hodnocení autora: není
Příspěvků: 0
děkuji moc a jestě jedna otázečka, kdž zchci vytvořit exe soubor.. nevim jak protže když uložím project tak tam ýádný exe není..
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Re: k téhle kapitole

Datum: 23.1.2008 16:38
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Pokud si otevřete složku projektu, tak je uvnitř ve složce Bin\Debug nebo Bin\Release.
Složku projektu najdete v adresáři Dokumenty\Visual Studio 200X\Projects\název_projektu.
 
           [Odpovědět]
 
Hodnocení: 4 Čekejte, prosím...

Re: k téhle kapitole

Datum: 31.1.2008 16:29
Autor: neregistrovaný (85.13.76.102)
Hodnocení autora: není
Příspěvků: 0
Pokud sis pořádně přečetl předešlé kapitoly, neměl bys mít problém na to dojít sám. Jinak nejsem si jistý, ale vše se tu píše do komponenty Button:).
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

podmika IF

Datum: 27.1.2008 13:36
Autor: neregistrovaný (195.146.112.110)
Hodnocení autora: není
Příspěvků: 0
Mam program a kontoluju jestli je zadane cislo vetsi:
If x>0 Then
MsgBox "Neni zadane kladne cislo"
(End)
EndIf
ted muj problem: kdyz napisu end (v zavorce) program se ukonci a to ja nechci, a kdyz ho nenapisu tak program probehne a spocita se. Ja chci aby po ukazani MsgBoxu program zacal odzacatku, tj.vratil se do puvdoniho stavu (aby neprobehl, ani se neukoncil..)
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: podmika IF

Datum: 4.2.2008 15:38
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60

If x > 0 Then
MsgBox "Neni zadane kladne cislo"
Exit Sub ' opustí makro
'nebo
Goto Moje_zalozka ' jde na odkas v sekci programu ...
                  ' označeném Moje_zalozka:
End If

 
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

CInt

Datum: 4.2.2008 15:32
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
Byl jsem zvyklý z VB že pokud proměnnou předem deklaruji jako INTEGER,
tak není třeba dělat transformaci z Inputbox na datový typ Integer >>>
CInt(vysledek)


 Dim cislo As Integer
 cislo  = CInt(InputBox("Zadejte číslo:"))
 

Nebo to není korektní?


' já jsem to psal jen takto
 Dim cislo As Integer
 cislo  = InputBox("Zadejte číslo:")
 

(otázka je pak "ošetření chyb" - nekorektní vstup)
 
           [Odpovědět]
 
Hodnocení: -4 Čekejte, prosím...

Jakým způsobem udělám podmínku v případě, že jsem zadal text

Datum: 12.12.2008 16:52
Autor: neregistrovaný (213.29.125.6)
Hodnocení autora: není
Příspěvků: 0
Chci, aby zadavatel zapsal číslo, ale on mi napíše slovo např. "jldj" (omylem). Příkaz CInt nebo Cdbl bude zmatený a vyhodí error. Jakým zůsobem ošetřím to, aby při zadání špatného řetězce, například smazal tento řetězec a žádal po mě nové zadání?
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: Jakým způsobem udělám podmínku v případě, že jsem zadal text

Datum: 12.12.2008 16:58
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Musíte použít funkci Integer.TryParse (popř. Double.TryParse). Tato funkce má dva parametry - text, který uživatel zadal, a proměnnou, do které se přiřadí výsledek. Samotná funkce vrací True, pokud se převod povedl, popřípadě False, pokud text převést nejde.

Dim a As Double
If Double.TryParse(TextBox1.Text, a) = True Then
    'převod se podařil, v proměnné a je hodnota, kterou uživatel zadal

Else
    'uživatel zadal něco, co se na číslo nedá převést
    MsgBox("Zadaná hodnota není číslo, ty osle jeden.")
    TextBox1.Text = ""
End If
 
 
           [Odpovědět]
 
Hodnocení: 2 Čekejte, prosím...

Re: Jakým způsobem udělám podmínku v případě, že jsem zadal text

Datum: 12.12.2008 23:20
Autor: neregistrovaný (213.29.125.6)
Hodnocení autora: není
Příspěvků: 0
Díky moc za rychlou pomoc. Funguje to tak jak jsem chtěl.
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Propojení dvou Inputboxů

Datum: 15.12.2008 13:58
Autor: neregistrovaný (213.29.125.6)
Hodnocení autora: není
Příspěvků: 0
Ještě jednou děkuji za minulou pomoc. Teď mám ještě jeden pro mě zajímavý problém.
Mám 2 inputboxy, které řeší rovnici. Do boxu1 zadám X a v boxu2 se objeví výsledek Y. A já chci, aby to šlo i tak, abych zadal Y a v boxu 1 se objevilo X.
V čem je problém.
Když je nasteven TextBox1_TextChanged (tedy nepoužívám žádné spoštěcí tlačítko), tak mi po zapsání výsledku do toho druhého inputboxu proběhne procedura, která je za ním schovaná a přepisuje mi ten první a tak dokola.
To má mimo jiné za následek i to, že nejste schopen ani dopsat žádané X do inputboxu neboť po první číslici se vám tam přepíše číslo na výsledek. Co s tím??? Díky
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: Propojení dvou Inputboxů

Datum: 8.3.2009 19:18
Autor: Vítězslav Grygar
Hodnocení autora: 5
Příspěvků: 17
Pokud to dobře chápu, tak zapíšete číslo do textboxu1 a okamžitě se vypočítá výsledek do textboxu 2. Jestli máte rovnice např. textbox1 = textbox2+ 2 a textbox2 = textbox1 - 2, tak by neměl být absolutně žádný problém. Pokud jsou však rovnice rozdílné, tím však vyvolá se znovu procedura textbox1_textchanged, a tak pořád dokola... Pokud nechcete používat Button, vyřešil bych to tak, že přepočet se provede např. po stisknutí klávesy enter. Nahoře v kódu máte 2 vysouvací nabídky, v té první si vyberte TextBox1 a v té druhé událost KeyDown. Do nově vzniklé procedury napíište podmínku pro otestování klávesy a vložte kód na výpočet rovnice. Mělo by to vypadat asi takto:

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        Dim a, b As Double
        If e.KeyCode = Keys.Enter Then
            a = CDbl(TextBox1.Text)
            b = 2 * a
            TextBox2.Text = b

        End If
    End Sub
 
Obdobně to proveďte pro textbox2.
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

InputBox

Datum: 11.3.2009 16:43
Autor: neregistrovaný (85.207.240.108)
Hodnocení autora: není
Příspěvků: 0
Nainstaloval jsem VB2008 a InputBox nemohu najit. Nejmenuje se nějak jinak?
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

trojhplnik

Datum: 6.6.2009 19:57
Autor: neregistrovaný (80.242.33.38)
Hodnocení autora: není
Příspěvků: 0
no neviem ale ja som sa ucil ze obsah trojholnika sa pocita vzorcom
S=(a*va)/2 :)
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: trojhplnik

Datum: 6.6.2009 21:17
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
To ano, ale tady tu výšku neznáte.
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: trojhplnik

Datum: 23.7.2009 16:09
Autor: neregistrovaný (91.48.26.21)
Hodnocení autora: není
Příspěvků: 0
hele chlapíku, tohle jsou super stránky, do téhle kapitoly jsem vše chápal, ale tahle kapitola je trochu oříšek.
Potřeboval bych to vyzkoušet, ale nevím, jak. první tabulka mi vyběhne, ale ty další příkazy nevím kam mám psát. když to píši samostatně, vyběhne mi chyba.
Sám jsi v první kapitole napsal, že jeden příklad řekne více než 1000 slov a tady je jen jeden příklad a zbytek teorie.:-(( Škoda.
Jinak 100 bodů za tyto stránky.
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Chyba

Datum: 18.11.2009 12:13
Autor: neregistrovaný (62.245.106.242)
Hodnocení autora: není
Příspěvků: 0
Ahoj, sorry že otravuju s takovou malicherností, ale je tam chyba - máš tam: chcemě a mělo by to být chceme. Možná už to někdo psal. Díks
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

otazka

Datum: 9.3.2010 15:10
Autor: neregistrovaný (91.127.191.145)
Hodnocení autora: není
Příspěvků: 0
cawte som zaciatocnik a snažim sa vyrobit kalkulačku
mam tam nasobenie delenie sčitanie odčitanie trojuholnikovú nerovnost obsah sťvorca obsah pravouhleho trojuholníka a jedine co mi robí problém je klasicky obsah stvorca s = (a + b + c) / 2
MsgBox(Math.Sqrt(c * (c - a) * (c - b) * (c - c)))

ja som to spravil takto:
Dim a As Integer = CInt(TextBox1.Text)
Dim b As Integer = CInt(TextBox2.Text)
Dim c As Integer = CInt(TextBox3.Text)
s = (a + b + c) / 2
MsgBox(Math.Sqrt(c * (c - a) * (c - b) * (c - c)))

TextBox5.Text = s
prosim poradte ako mam tento problem vyriešiť
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: otazka

Datum: 9.3.2010 18:21
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
Obávám se, že jsi špatně popsal co chceš vlastně spočítat.
Obsah čtverce? Obsah čtverce je přece S = a2 (a na druhou) neboli S = a * a

 
           [Odpovědět]
 
Hodnocení: 2 Čekejte, prosím...

Re: otazka

Datum: 9.3.2010 18:29
Autor: neregistrovaný (178.40.12.161)
Hodnocení autora: není
Příspěvků: 0
to mam dobre ale ja mam problem z obsahom trojuholníka
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Re: otazka

Datum: 9.3.2010 18:34
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
Obsah NEPRAVOÚHLÉHO trojúhelníku se vypočítá
S = A * Va / 2
Kde Va je kolmice ze strany A na protější vrchol
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

namet

Datum: 9.3.2010 20:17
Autor: neregistrovaný (178.40.12.161)
Hodnocení autora: není
Příspěvků: 0
ano ale ja poznam iba 3 strany a b c t.j tri vrcholy A B C

a ja chcem použit tento vzorec:

s = (a + b + c) / 2
MsgBox(Math.Sqrt(s * (s - a) * (s - b) * (s - c)))
ale neviem ho zakonponovat do toho celka ako to mam spravit
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: otazka

Datum: 9.3.2010 18:48
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
Google :-D tady je postup - Wiki
http://cs.wikipedia.org/wiki/Heronův_vzorec
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Zadávání údajů

Datum: 27.3.2010 16:13
Autor: neregistrovaný (94.112.231.100)
Hodnocení autora: není
Příspěvků: 0
Prosím Tě, jaký je rozdíl mezi:

Dim cislo1 As Integer = CInt(InputBox("Zadejte první číslo:"))

Dim a As Double = CDbl(TextBox1.Text)

Myslím, co se týče v zadávání údajů uživatelem. Co je na co.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Zadávání údajů

Datum: 28.3.2010 13:22
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
1/ "cislo1" bude získáno jako datový typ "Integer"
z dialogu Inputbox (dialog s textovým polem - viz. nahoře dialog "Můj program")

2/ "a" bude získáno jako "Double"
z formuláře a jeho textového pole "TextBox1"

... nebudu zmiňovat ošetření chyb při zadání, a neshodě datových typů
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Pomóóc

Datum: 4.11.2010 21:17
Autor: Jaroslav Hanák
Hodnocení autora: 0
Příspěvků: 1
Dobrý den
Jsem v programování uplným nováčkem. Čtu si kapitolu po kapitole. Zatím jsem to nějak zvládl. :) Ale teď jsem narazil ten "InputBox" vložým do nového projektu, a otevřu okno kódu a tam vložím pod:
" Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click" tento kód co jste uváděl na začátku článku
" Dim vstup1, vstup2 As String
vstup1 = InputBox("Zadejte číslo:")
vstup2 = InputBox("Zadejte číslo:", "Můj program")"
a další příkazy, které uvádíš bych potřeboval vědět kam vkládáš. Zdůraznuji, že jsem začátečník. Tak mě prosím neukamenujte, děkuji. :-)

 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Pomóóc

Datum: 26.1.2011 19:00
Autor: neregistrovaný (212.80.64.214)
Hodnocení autora: není
Příspěvků: 0
jj mel jsem ten samy problem :S toto me docela zklamalo..
jsem taky začatecnik (zadnymu jazyku jsem se poradne nevenoval kvuli spatnym tutorialum.. ale tohle je neco jineho! (az na zacatek tohoto serialu... xD))
ale nakonec jsem se k tomu teda dokopal

všimej si až časti kde najdes tento kód:

Dim otazka As String = "Zadejte číslo:"
Dim titulek As String = "Můj program"
Dim vstup3 As String
vstup3 = InputBox(otazka, titulek)

(nad timto textem jen pise co to ta funkce InputBox je a pise tam i o anglicke napovede ktera ti ma vyskocit.

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim vstup3 As String
vstup3 = InputBox("Zadejte číslo:", "Můj program")

End Sub
End Class

>> Kdyz kliknes na tlacitko ktere si propravis, tak se ti objevi tabulka (kterou ma autor vyfocenou hned na zacatku)

a kdyz budes pokracovat dostanes se k podminkam to uz se myslim da pochopit (alespon podle me)

ale kdyztak ti tu davam dalsi kod jak to ma CELÉ vypadat:

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim cislo As Integer = CInt(InputBox("Zadejte číslo:"))

If cislo Mod 2 = 0 Then
MsgBox("Číslo je sudé!")
Else
MsgBox("Číslo je liché!")
End If

End Sub
End Class

>> mas tam tabulku s tlacitkem > kliknes na tlacitko > zobrazi se ti tabulka > tam napises libovolne cislo a ono ti to rekne jestli je sude nebo liche (podle deleni beze zbytku - to uz jste se snad ve skole ucili..:D)

omlouvam se za tak obsahly komentar xD
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: Pomóóc

Datum: 26.1.2011 20:12
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
No všeobecně se dá říci, že tak jako u:

Dim A As Integer
A = 3
 
kde se do proměnné A přiřadí hodnota 3 (trojka ne čtyřka :-D )
tak v následujícím příkladu:

Dim vstup1, vstup2 As String 
vstup1 = InputBox("Zadejte číslo:") 
vstup2 = InputBox("Zadejte číslo:", "Můj program")
 
se do vstup1 přiřadí to co zadáte do dialogu inputbox
stejně tak v případě vstup2
Ve skutečnosti vyskočí nejprve jeden dialog, zadáte hodnotu pro vstup1 následně vyskočí druhý dialog, kde zadáte hodnotu pro vstup2
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Pomóóc

Datum: 27.1.2011 20:31
Autor: neregistrovaný (212.80.64.214)
Hodnocení autora: není
Příspěvků: 0
Aha :D diky to jsem nevedel.. ted chapu komplet cely tut
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Pomóóc

Datum: 27.1.2011 20:35
Autor: neregistrovaný (212.80.64.214)
Hodnocení autora: není
Příspěvků: 0
akorat to ze A = 3 a ty napises ze k promenne A se priradi hodnota 4 to je asi blbe ne ?
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Pomóóc

Datum: 27.1.2011 20:54
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
Ne to je v pořádku, jen testuji jestli nad tím přemýšlíš :-D
OK chybičku opravím
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

proměnná e :)

Datum: 4.3.2011 10:04
Autor: neregistrovaný (147.230.27.44)
Hodnocení autora: není
Příspěvků: 0
Bezva stránky, díky moc za ně. Uvažuji i o Donate. :) Ale proč píšu. Hrál jsem si s trojúhelníky a nakonec jsem udělal počítání všech hodnot (s, o, pravoúhlost a existence) na jedno tlačítko a tak, aby to psalo rovnou: "Trojůhelník existuje a je pravoúhlý. Použil jsem příklad chleba s máslem, ale zvolil jsem promnnou "e" a asi 20 minut laboroval, proč to nefunguje a pak jsem si všiml, že je ta proměnná už použita v úplně prvním řádku. :-D
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: proměnná e :)

Datum: 4.3.2011 10:05
Autor: neregistrovaný (147.230.27.44)
Hodnocení autora: není
Příspěvků: 0
Samozřejmě "trojúhelník". :)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

If problem

Datum: 27.3.2011 22:24
Autor: neregistrovaný (90.180.100.150)
Hodnocení autora: není
Příspěvků: 0
Mám problém, co když chci napsat podmínku pro prázdný textbox:

 If TextBox2.Text = "" Then
            MsgBox("musíš zadat číslo")
        End If

 

je ot tak spravne? a proc mi to tedy nejde?

Prostě chci aby mi vyhodil textbox kdyz clicknu na buttonek a textak je prazdny...
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: If problem

Datum: 25.7.2011 20:27
Autor: neregistrovaný (193.179.215.98)
Hodnocení autora: není
Příspěvků: 0
Cau, jsem rovnez zacatecnik, ale nejsem si jist jestli pro datovou promennou Integer resp. Double (kterou asi pouzivas u cisel) lze pouzit TextBox2.Text = "" duvodem je ze se promenna Integer a Double neuklada jako text (tj. neuklada se jako znaky)
cituji Tomase Hercega:
"(String je v paměti uložen jinak než Integer, String je uchováván po znacích, kdežto Integer se ukládá jako číslo ve dvojkové soustavě)."
http://www.vbnet.cz/clanek--4-vb_net_od_...

osobne jsem tento a problem se zadanim pismen do TextBox vyresil pouzitim error codu 13 (tusim, ze je to chyba "mishmatch type - preklad byl neschoda typu"

pro podil to pak vypada asi takto:


    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        On Error GoTo Chyba
        TextBox3.Text = Podil(TextBox1.Text, TextBox2.Text)
Chyba:
        If Err.Number = 13 Then MsgBox("Nebyla zadána čísla, prosím zadávejte pouze čísla.")
    End Sub
 
** PS diky autorovi za velice pekny a prehledny tutorial :)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: If problem

Datum: 25.7.2011 20:55
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Tak takhle chyby určitě nechytejte, tahle prastará syntaxe se používat nemá. Obecně je vždycky lepší prevence chyb než jejich udělání a následné zachycování - tady se dá zkontrolovat, jestli se text dá převést na číslo.


Správně by to bylo například takto:

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim a As Double, b As Double
        If Double.TryParse(TextBox1.Text, a) And Double.TryParse(TextBox2.Text, b) Then
            TextBox3.Text = Podil(CDbl(TextBox1.Text), CDbl(TextBox2.Text))
        Else 
            MsgBox("Nebyla zadána čísla, prosím zadávejte pouze čísla.")
        End If
    End Sub
 

Double.TryParse zkusí převést text na číslo a pokud se to povede, vrací True a do proměnné a to číslo nastaví - tím pádem pokud se oba převody povedou, podmínka platí, jinak se zobrazí hláška.
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

Mimo

Datum: 3.12.2011 15:02
Autor: neregistrovaný (212.96.175.146)
Hodnocení autora: není
Příspěvků: 0
jak muzu udelat aby byly promene pristupne do vsech sub?
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Mimo

Datum: 3.12.2011 18:11
Autor: Petr Slezák
Hodnocení autora: 6
Příspěvků: 60
Neuvedl jste zda VB.Net nebo C# - podle SUB asi VB.NET
proměnná se uvede dovnitř třídy mimo (nad Sub)



Class Trida

  Dim Retezec As String
  Dim Cislo As Integer

  Sub Nastav()
    Retezec = "text"
     Cislo = 1
  End Sub

  Sub Cti()
    Debug.Print Retezec
   Debug.Print Cislo
  End Sub

End Class
 
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Pythagorova věta

Datum: 29.1.2012 19:49
Autor: neregistrovaný (195.22.59.161)
Hodnocení autora: není
Příspěvků: 0
Dobrý den, chtěl bych aby mi program vypocital strany pomoci Pythagorovy věty - (c*c)=(a*a)+(b*b),ale nevím jak, poradil by mi prosim někdo?

Děkuji
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.