190 likes | 338 Views
CU01 Informatika II 6 /13 Základy algoritmizace Funkce pro validaci obsahu, konverzní funkce a úvod do OOP. CU01 Informatika II Z áklady algoritmizace – validační funkce. IsNumeric (). Syntaxe IsNumeric ( expression )
E N D
CU01 Informatika II6/13Základyalgoritmizace Funkce pro validaci obsahu, konverzní funkce a úvod do OOP
CU01 Informatika IIZáklady algoritmizace – validační funkce IsNumeric() Syntaxe IsNumeric(expression) • Vrací logickou hodnotu, která vyjadřuje, zda je možné parametr funkce vyhodnotit jako číslo. • Funkce vrací hodnotu True, je-li celý výraz expression číslo ifIsNumeric(prumer) then plocha = pi * prumer ^2 endif POZNÁMKA: Pokud chceme v procedurách a funkcích testovat číselnost parametrů, je nutné je deklarovat jako typ Variant. Při explicitní deklarace případný rozdíl obsahu vůči typu generuje chybu běhu (Run-timeerror) Type mismatch.
CU01 Informatika II Základy algoritmizace – validační funkce IsNull() Syntaxe IsNull(expression) • Vrací logickou hodnotu, která vyjadřuje, zda parametr obsahuje platná data. • Povinný parametr expressionje typu Variant. • Vrací hodnotu True, jestliže je argument roven hodnotě Null. • Nesprávně IfVar = Null... rovněžIfVar <> Null Dimx MsgBox(IsNull(x)) ' False x = "" MsgBox(IsNull(x)) ' False x = Null MsgBox(IsNull(x)) ' True
CU01 Informatika II Základy algoritmizace – validační funkce IsEmpty() Syntaxe IsEmpty(expression) • Funkce vrací logickou hodnotu, pokud byla proměnná inicializována. • True, jestliže proměnná není inicializována nebo je explicitně nastavena na hodnotu Empty. • Povinný argument expressionje typu Variant. Dimx MsgBox(IsEmpty(x)) ' True x=10 MsgBox(IsEmpty(x)) ' False x=Empty MsgBox(IsEmpty(x)) ' True x=Null MsgBox(IsEmpty(x)) ' False
CU01 Informatika II Základy algoritmizace – validační funkce IsMissing() Syntaxe IsMissing(expression) • Slouží k detekci zadání volitelného argumentu do procedury. • Funkce se používá pro testování chybějícího argumentu, jehož použití v další části kódu může vést k chybám běhu. • Logická hodnota Truevyjadřuje, že byl nepovinný parametr předán proceduře. • Funkci nelze použít s jednoduchými (primitivními) datovými typy • test je třeba udělat např. pomocí speciální hodnoty SubMySub(OptionalMyVarAsString = "specialvalue") IfMyVar = "specialvalue" Then ' MyVarnebylazadána. Else ... EndSub
CU01 Informatika IIZáklady algoritmizace – procedury a funkce PŘÍKLAD: Validace a konverze parametrů FunctionTap(t AsVariant) AsVariant Dim ti AsSingle IfIsEmpty(t) Then Tap = "Chyba!" MsgBox ("Parametr funkce je prázdná hodnota!") ExitFunction EndIf If Not IsNumeric(t) Then Tap = "Chyba!" MsgBox ("Parametr funkce není číselná hodnota!") ExitFunction EndIf ti = CSng(t) Tap = ti + 1 EndFunction
CU01 Informatika IIZáklady algoritmizace – procedury a funkce PŘÍKLAD: Validace a konverze parametrů – volitelný parametr FunctionTap(t AsVariant, Optional t0 AsVariant) Dim ti AsSingle Tap= "Chyba!" IfIsMissing(t0) Then t0 = 20 EndIf IfIsEmpty(t) Then MsgBox("Parametr funkce je prázdná hodnota!") ExitFunction EndIf IfNotIsNumeric(t) Then MsgBox("Parametr funkce není číselná hodnota!") ExitFunction EndIf ti = CSng(t) If ti + 1 > t0 Then Tap = ti + 1 Else MsgBox (“Teplotav interiéru musí být > " & CStr(t0) & ".") EndIf EndFunction
CU01 Informatika IIZáklady algoritmizace – procedury a funkce PŘÍKLAD: Validace a konverze parametrů – volitelný parametr FunctionTap(t AsVariant, Optional t0 AsVariant = 20) ... End Function FunctionMoje_Funkce(a AsVariant, b AsVariant, Optional c AsVariant) AsVariant IfIsMissing(c) Then c = "n/a" EndIf IfIsNumeric(a) AndIsNumeric(b) Then Ifb = 0 Then Moje_Funkce = a ^ 2 Else Moje_Funkce = a ^ 2 / b End If ExitFunction End If Moje_Funkce = c End Function
CU01 Informatika IIZáklady algoritmizace – procedury a funkce Konverzní funkce – slouží ke konverzi parametru na požadovaný typ Název Typ Argument funkce CBoolBooleanplatný řetězcový nebo číselný výraz CByte Byte 0 až 255. CIntInteger -32,768 až 32,767 CLng Long -2,147,483,648 až 2,147,483,647 fractionsare rounded CSng Single -3.402823*1038až -1.401298*10-45 1.401298*10-45 až 3.402823*1038 CDbl Double -1.79769313486231*10308 až 4.94065645841247*10-324 4.94065645841247*10-324až 1.79769313486232*10308 CDecDecimal +/-79,228,162,514,264,337,593,543,950,335 forzero-scalednumbers, thatis, numberswithno decimalplaces. Fornumberswith 28 decimalplaces, therangeis +/-7.9228162514264337593543950335. Thesmallestpossible non-zeronumberis 0.0000000000000000000000000001.
CU01 Informatika IIZáklady algoritmizace – procedury a funkce Konverzní funkce – slouží ke konverzi parametru na požadovaný typ Název Typ Argument funkce CCurCurrency -922,337,203,685,477.5808 až 922,337,203,685,477.5807. CDateDateplatné datum. CStrStringReturnsforCStrdepend on theexpressionargument. CVar Variant Same range as Double fornumerics. Same rangeas Stringfor non-numerics.
CU01 Informatika IIZáklady algoritmizace – procedury a funkce Zaokrouhlování čísel Fix() Zaokrouhluje na celá čísla směrem k nule. Pro kladná čísla vrací celočíselnou část hodnoty, pro záporná čísla vrací nejbližší záporné celé číslo >= hodnotě vstupu. ?Fix(3.5) ?Fix(-3.5) Int() Zaokrouhluje na celá čísla směrem doleva. Vrací pro kladná čísla celočíselnou část hodnoty. Vrací pro záporná čísla nejbližší záporné celé číslo <= hodnotě vstupu. ?Int(3.5) ?Int(-3.5) Val() Extrahuje číslo z řetězce, automaticky ořezává mezery. Vyhodnocování ukončujeprvním nečíselný znak kromě mezery. ?Val("-6.5") ?Val("-6,5") ?Val("&O166") ?Val("&H166")
CU01 Informatika IIZáklady algoritmizace – procedury a funkce Konverze typu Str() převádí číslo na řetězec. Zaokrouhlí výraz delší jak 17 znaků(včetně znaménka a desetinné tečky). Pro kladné výrazy zobrazí na začátku mezeru,pro záporné znaménko mínus. ?Str(4*Math.Atn(1)) ?Str(-4*Math.Atn(1)) CStr() převádí číslo na řetězec, pro kladné výrazy nezobrazí na začátku mezeru jako Str ?CStr(4*Math.Atn(1)) ?CStr(-4*Math.Atn(1)) CInt() zaokrouhluje 0.5 na nejbližší sudé číslo podobně CLng ?CInt(4*Math.Atn(1)) ?CInt(-4*Math.Atn(1)) ?CInt(6.5) ?CInt(-6.5)
CU01 Informatika IIZáklady algoritmizace – OOP KONCEPCE OOP – základní pojmy Třída – je základní konstrukční prvek OOP. Slouží jako předpis pro objekty. Definuje jejich vlastnosti a metody. Objekt – data, související funkčnost jsou seskupeny do entit, nazývaných objekty. Objekt je instancí třídy. Abstrakce – každý objekt pracuje jako černá skříňka. Dokáže provádět určené činnosti a komunikovat s okolím, aniž by vyžadovala znalost způsobu, kterým vnitřně pracuje. Zapouzdření – každý objekt zveřejňuje rozhraní, pomocí kterého se s objektem pracuje. Skládání– objekt může obsahovat jiné objekty. Dědičnost– objekty jsou organizovány stromovým způsobem. Mohou dědit z jiného druhu objektů, čímž přebírají jejich schopnosti, ke kterým pouze přidávají svoje vlastní rozšíření. Polymorfismus– např. volat jednu metodu s různými parametry, u objektů odvozených z různých tříd lze volat tutéž metodu se stejným významem v kontextu jejich třídy, přetěžování operátorů znamená provedení operace v závislosti na typu operandů (operátorový polymorfismus) polymorfní.
CU01 Informatika IIZáklady algoritmizace – OOP NAŠE DEFINICE OBJEKTU Objekt je speciální typ proměnné, který má na rozdíl od primitivních typů (Single, StrING, BOOLEAN, DATE, ... ) vlastnosti metody METODY JSOUfunkce pro manipulaci s vlastnostmi objektu.
CU01 Informatika IIZáklady algoritmizace – OOP DEFINICE TŘÍDY: Třída, objekt a instance třídy • Vložit Modul třídy • Zadat název třídy • Definovat vlastnosti • definovat metody, které provádějí manipulace s vlastnostmi • Definovat metody • speciální metodou je konstruktor • Deklarovat proměnnou typu objekt
CU01 Informatika IIZáklady algoritmizace – OOP OOP: Vlastnosti objektu Privater_ As Single Privatepi_ As Double PublicPropertyGet r() AsSingle r = r_ EndProperty PublicProperty Let r(hodnota As Single) Ifhodnota < 0 Then r_ = Math.Abs(hodnota) Else r_ = hodnota EndIf EndProperty
CU01 Informatika IIZáklady algoritmizace – OOP OOP: METODY OBJEKTU ’ konstruktor třídy PrivateSubClass_Initialize() pi_ = 4 * Math.Atn(1) r_ = 0 EndSub ’ metoda pro výpočet plochy PublicFunction Obvod() AsDouble Obvod = 2 * pi_ * r_ EndFunction ’ metoda pro výpočet obvodu PublicFunction Plocha() AsDouble Plocha = pi_ * r_ ^ 2 EndFunction
CU01 Informatika IIZáklady algoritmizace – OOP OOP: POUŽITÍ TŘÍDY A OBJEKTU ... ’ deklarace proměnných Dim plocha As Single, obvod As Single DimkAs cKruznice Set k= New cKruznice k.r = InputBox("Zadej poloměr kružnice") ’ stanovení plochy pomocí metody Plocha() plocha = k.Plocha() ’ stanovení obvodu pomocí metody Obvod() obvod= k.Obvod() ...