3. Princip ladění programů
• Laděná programů je účinná metoda odhalování
chyb algoritmů
• Během ladění je program vykonáván příkaz po
příkazu (krok za krokem)
• Po každém příkazu je možné sledovat obsah
proměnných
• Každý příkaz se vykonává na podnět programátora
Sub Main()
Dim D As Double 'Diskriminant
Dim a As Double, b As Double, c As Double 'Koeficienty kvadraticke rovnice
Dim x1 As Double, x2 As Double 'Hledane reseni
'Ziskani koeficientu rovnice
a = InputBox("Zadej A:", "Ax^2 + Bx + C")
b = InputBox("Zadej B:", "Ax^2 + Bx + C")
c = InputBox("Zadej C:", "Ax^2 + Bx + C")
'Vypocet diskriminantu
D = b ^ 2 - 4 * a * c
'Vypocet korenu rovnice
x1 = (-b + Sqr(D)) / (2 * a)
x2 = (-b – D^(1/2)) / (2 * a)
'Vypis vysledku
MsgBox "x1 = " & x1 & vbCrLf & "x2 = " & x2, , _
"Řešení rovnice: " & a & "x^2 + " & b & "x + " & c
End Sub
4. Zahájení a ukončení ladění
• Tlačítkem Debug po
výjimce
– Program se pozastaví na
příkazu (řádku), který
výjimku způsobil
• Zahájením krokování
– Ikonou Step Into na panelu
Debug
– Funkční klávesou F8
– Krokování bude vždy od
začátku makra
• Přerušením na zarážce
– Program se pozastaví na
příkazu (řádku), na kterém
je zarážka
• Ukončení ladění
– Ukončením programu
– Příkazem Reset
5. Sledování obsahu proměnných
• Okamžitým náhledem
– Zobrazí se po ponechání
kurzoru nad proměnou
• Locals Window
– Menu View, položka Locals
Window
– Zobrazí se všechny proměnné
laděné subrutiny
– Poklepáním nad hodnotou je
možné provést změnu
• Watch Window
– Menu View, položka Watch
Window
– Implicitně je prázdné, vložení
proměnné přetažením,
vepsáním
– Je možné vložit výrazy
– Poklepáním nad hodnotou je
možné provést změnu
6. Krokování a zárážky
• Krok dovnitř
– Provede se jeden příkaz
– Klepnutím nad ikonou Step Into
– Funkční klávesou F8
• Krok přes
– Klepnutím nad ikonou Step Over
– Funkční klávesou Shift + F8
– Pouze pro složitější makra
– Volání jiné subrutiny se vykoná jako
jeden příkaz
• Přetažením kurzoru
– Tažením žluté šipky lze libovolně
přesunout bod pozastavení
• Vložení a zrušení zarážky
– Klepnutím na levou lištou
před zvoleným příkazem
– Funkční klávesou F9
• Logický breakpoint
– Vkládá se přes okno Watches
– Pokročilé používání
8. Vývojový diagram – základní značky
Vývojový diagram je grafická metoda zápisu algoritmu. Zápis se
provádí pomocí grafických značek, které se různě kombinují tak,
aby vyjadřovali různé operace. Do značek se vypisují upřesňující
údaje, které specifikují konkrétní kroky/příkazy. Značky se propojují
spojovacími čárami (popřípadě šipkami), které specifikují směr
posloupnosti příkazů. Implicitně je směr shora-dolů, zleva-doprava.
• Základní značky
Start – Začátek nebo konec algoritmu, buď jeden výstup
Stop nebo vstup
Příkaz – Běžný příkaz (krok, operace) vepisuje se do
Příkaz značky má vždy jeden vstup a jeden výstup
– Větvení (podmíněný příkaz) má 1 vstup a 2
- A>B + výstupy, které se označují Ano (+) je li výraz ve
značce pravdivý, Ne (-) není li pravdivý
– Příprava – obvykle cyklus se specifikovaným
i = 1..10 počtem opakování má 2 vstupy a jeden výstup.
Do značky se zapisuje počet opakování.
A A
– Spojka (buď jeden vstup nebo výstup), používá
se u složitějších algoritmů, kdy se tímto propojují
různé vývojové diagramy.
– Spojovací čára.
9. Vývojový diagram – další značky
• Další vybrané značky dle ČSN ISO 5807 "Zpracování informací.
Dokumentační symboly a konvence pro vývojové diagramy toku dat,
programu a systému, síťové diagramy programu a diagramy zdrojů systému"
ze dne 1. ledna 1996
– Podprogram, do značky se vepíše název podprogramu
– Interní paměť - představuje vnitřní paměť počítače.
Data mohou do z paměti vystupovat, nebo se mohou do
paměti ukládat. Symbol může tak mít jeden výstup nebo
jeden vstup.
– Paměť s přímým přístupem – pevný disk, disketa apod.
Symbol může tak mít jeden výstup nebo jeden vstup.
– Data - vstup a výstup dat, reprezentuje vstupně -
výstupní operace s daty, tj. dodání dat pro zpracování
nebo zpracování do požadované formy výstupu. Má
jeden vstup a jeden výstup.
– Dokument představuje zařízení pro tištěný výstup,
kterým může být klasická tiskárna, ale i zařízení pro
tvorbu mikrofilmu, pokladní tiskárna a jiné. Symbol má
jenom jeden vstup.
– Zobrazení představuje zařízení pro vizuální zobrazení
dat, jako je např. monitor počítače signální zařízení a
pod. Symbol má jenom jeden vstup.
poznámka – Komentář, je spojen s značkou nebo sekvencí
ohraničenou obdélníkem z přerušované čáry
10. Příklady vývojových diagramů - větvení
Sekvence Větvení Větvení Větvení
příkazy jdoucí Úplná alternativa Neúplná alternativa Několikanásobná alternativa
za sebou bez vykoná se buď příkaz se vykoná Hodnota proměnné se porovnává
jakýkoliv jeden nebo druhý jen je-li logický s uvedenými konstantami, vybere
odskoků příkaz výraz pravdivý se větev se shodnou hodnotou
Log. výraz Log. výraz proměnná
1 2 3 nebo
11. Příklady vývojových diagramů - cykly
Cyklus Cyklus
S podmínkou na začátku S podmínkou na konci
Není-li podmínka na počátku pravdivá cyklus Vždy se provede alespoň jednou
se nikdy neprovede
Tělo cyklu
Tělo cyklu
14. Logické a relační operátory
Relační operátory • Výsledkem relačního a
Matematický Visual logického výrazu je
zápis Basic
jedna ze dvou možností
= = – True (výraz je pravdivý)
<> – False (výraz je nepravdivý) Priorita operátorů
< < • Operátor = má dva ()
významy Not
> > * / Mod
– Přiřazení A = 10
Priorita
<= + -
– Porovnání if A = B then < > <= >=
>= = <>
And
Or
= přiřazení
Logické
operátory True False True True False False
And Not False True
Or And False True False
Not Or True True False
15. Příklady logických výrazů
Option Explicit
Sub Main()
Dim Hodnota As Integer
Dim Odpoved As Boolean
Hodnota = InputBox("Zadej hodnotu")
Odpoved = Hodnota > 0
MsgBox "Hodnota je kladna? „ & Odpoved
Odpoved = Hodnota <> 0
MsgBox "Hodnota není nula? „ & Odpoved
Odpoved = Hodnota >= 1 And Hodnota <= 12
MsgBox "Hodnota představuje číslo měsíce? „ & Odpoved
Odpoved = Hodnota = 7 OR Hodnota = 8
MsgBox "Hodnota představuje číslo prázdninového měsíce? „ & Odpoved
Odpoved = Not (Hodnota = 7 OR Hodnota = 8 )
MsgBox "Hodnota nepředstavuje číslo prázdninového měsíce? „ & Odpoved
End Sub
17. Větvení
• Vždy když je potřeba se rozhodnou která část
programu má být dále prováděna
• Jedno z nejčastějších programových implementací
• Ve Visual Basicu (obdobné je to téměř ve všech
programovacích jazycích) jsou dvě základní varianty
realizace větvení:
– Větvení pomocí If-Else
– Větvení pomocí Selec Case
– Existuje také možnost použít funkci
IIf(výraz, ProPravdu, ProNepravdu)
18. Větvení pomocí If-Else
• Jednořádková syntaxe
If logickýVýraz Then [PříkazPravdy] [Else příkazNepravdy]
– Pouze máme-li jeden příkaz pro pravdu i nepravdu
– Pouze jedna úroveň větvení
• Víceřádková syntaxe
If logickýVýraz1 Then
[PříkazyPravdyLogVýrazu1]
[ElseIf logickýVýraz2 Then
[PříkazyPravdyLogVýrazu2] - Nepravda + Pravda
... příkaz(y) pro výraz příkaz(y) pro
nepravdivý výraz pravdivý výraz
[Else
[PříkazyNepravdy]]
End If
– Je možné větvit neomezeně
– Můžeme mít více příkazů
– Musí končit příkazem End IF
19. Příklad větvení pomocí If-Else
Sub Main()
Dim rada As Integer ' Cena vstupenky podle požadované řady sedadel
Dim cena As Currency ' Určená cena
rada = InputBox("Do které řady chcete vstupenku ?", "Cena vstupenky")
' pomocí And a Or lze vytvořit podmínku, která vrací True pro více intervalů
If (rada >= 1 And rada <= 5) Or (rada > 20 And rada <= 25) Then
'Pro interval 1..5 a 20..25 je cena 150 Kč
cena = 150
ElseIf rada >= 6 And rada <= 15 Then
'Pro interval 6..15 je cena 180 Kč
cena = 180
ElseIf rada >= 16 And rada <= 20 Then
'Pro interval 16..20 je cena 200 Kč
cena = 200
Else
' ve skutečnosti jde o zbytečný příkaz, jelikož každá
' proměnná ve VB je implicitně nulovaná
cena = 0
End If
'Je-li cena nulová, uživatel zadal neplatnou řadu
If (cena > 0) Then
MsgBox "Cena lístků je: " & Format(cena, "Currency"), , "Odpověď..."
Else
MsgBox " Řada " & rada & " neexistuje !!!", vbExclamation, "CHYBA !!!"
End If
End Sub
20. Alternativa Příkladu větvení If-Else
Sub Main()
Dim rada As Integer ' Cena vstupenky podle požadované řady sedadel
Dim cena As Currency ' Určená cena
rada = InputBox("Do které řady chcete vstupenku ?", "Cena vstupenky")
' pomocí And a Or lze vytvořit podmínku, která vrací True pro více intervalů
If (rada >= 1 And rada <= 5) Or (rada > 20 And rada <= 25) Then
'Pro interval 1..5 a 20..25 je cena 150 Kč
cena = 150
Else
If rada >= 6 And rada <= 15 Then
'Pro interval 6..15 je cena 180 Kč
cena = 180
Else
If rada >= 16 And rada <= 20 Then
'Pro interval 16..20 je cena 200 Kč
cena = 200
Else
MsgBox " Řada " & rada & " neexistuje !!!", vbExclamation, "CHYBA
Exit Sub
End If
End If • Příkaz Exit Sub ukončí subrutinu (Makro)
End If
MsgBox "Cena lístků je: " & Format(cena, "Currency"), , "Odpověď..."
End Sub
21. Větvení pomocí Select Case
• Syntaxe
Select Case výraz
[Case HodnotyVýrazu1
[PříkazySkupiny1]]
... V = výraz
[Case Else
[PříkazyProOstatníHodnoty]] + Pravda
V = k1 Příkazy větve 1
End Select
– Je možné větvit neomezeně - Nepravda
– HodnotyVýrazu může být uvedena: + Pravda
• Jako jedna hodnota 10, “Jaro“ V = k2 Příkazy větve 2
• Jako skupina hodnot - Nepravda
oddělených čárkou 10,20,30
• Jako jeden interval 1 to 12 implicitní příkazy
• Více oddělených intervalů
1 to 12, 20 to 40
• Logickou podmínkou
Is > 20
22. Příklad větvení pomocí Select Case
Sub Main()
Dim rada As Integer ' Cena vstupenky podle požadované řady sedadel
Dim cena As Currency ' Určená cena
rada = InputBox("Do které řady chcete vstupenku ?", "Cena vstupenky")
' pomocí And a Or lze vytvořit podmínku, která vrací True pro více intervalů
Select Case rada
Case 1 To 5, 20 To 25
'Pro interval 1..5 a 20..25 je cena 150 Kč
cena = 150
Case 6 To 15
'Pro interval 6..15 je cena 180 Kč
cena = 180
Case 16 To 20
'Pro interval 16..20 je cena 200 Kč
cena = 200
Case Else
' ve skutečnosti jde o zbytečný příkaz, jelikož každá
' proměnná ve VB je implicitně nulovaná
cena = 0
End Select
'Je-li cena nulová, uživatel zadal neplatnou řadu
If (cena > 0) Then
MsgBox "Cena lístků je: " & Format(cena, "Currency"), , "Odpověď..."
Else
MsgBox " Řada " & rada & " neexistuje !!!", vbExclamation, "CHYBA !!!"
End If
End Sub
23. ??? kontrolní otázky ???
• Jaký grafický symbol (značku) uvedeme pro běžný
krok/příkaz v algoritmu?
• Jaké známe relační operátory ve Visual Basicu?
• Co znamená značka kosočtverce a jaké má
vstupy/výstupy?
• Je možné mít ve vývojových diagramech komenátře?
• Vyjmenujte tři základní logické operátory
• Pro C=10, jaký bude výsledek výrazu C>=1 AND C<10 ?
• Jakými způsoby můžeme zahájit ladění programu?
• Jakými způsoby zjistíme hodnoty proměnných?
• Je možné měnit hodnotu proměnných během ladění?
• Co je a k čemu slouží zarážka (breakpoint)
• Kde je vhodnější použít větvení If-Else než Select Case
• Je možné u Select Case použít libovolné logické výrazy?
• K čemu slouží příkaz Exit Sub?
24. 352 - Katedra automatizační techniky a řízení
Ing. David Fojtík, Ph.D.
A922, kl. 4193
david.fojtik@vsb.cz