Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

4.1. Operator Precedence

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Een expressie kan bestaan uit vele subexpressie gecombineerd met vele verschillende operatoren.  Sommige subexpressies zullen eerder geëvalueerd worden dan andere en dit gebaseerd op de prioriteit van de gebruikte operator.

Er is dus een prioriteitenlijst bij de operatoren, die de volgorde aangeeft waarin de expressies zullen geëvalueerd worden.

De eerste twee operatoren uit die lijst zijn twee rekenkundige operatoren :
   1 -> ^ (exponentiation)
   2 -> - (unary negation)
De volgorde waarin deze operatoren verwerkt worden, kan enigszins verwarrend zijn, enkele voorbeelden om dit te demonstreren :
Visual Basic 2012 Broncode - Codevoorbeeld 74
Module Example1
    Sub Main()
        Dim x As Integer = 2
        Dim y As Integer = 3
        '
        Console.WriteLine(x ^ -y)
        '
        y = -3
        '
        Console.WriteLine(x ^ -y)
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
0,125
8
x ^ -y with x = 2 and y = 3  -> 2 ^ -3 = 1 / (2 ^ 3) = 0.125
x ^ -y with x = 2 and y = -3 -> 2 ^ +3               = 8
Om de macht te kunnen bepalen moet hier eerst de exponent geïnverteerd worden.
Visual Basic 2012 Broncode - Codevoorbeeld 75
Module Example2
    Sub Main()
        Dim x As Integer = -2
        Dim y As Integer = 4
        '
        Console.WriteLine(-x ^ y)
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
-16
-x ^ y with x = -2 and y = 4 -> -(-2 ^ 4) = -16
In de gangbare wiskunde zou dit +16 opleveren !  De regels zijn in een programmeertaal niet altijd dezelfde als in de wiskunde, al komen ze wel vaak overeen.

Zoals de prioriteitenlijst aangeeft, wordt eerst de macht bepaald, nog voor het resultaat geïnverteerd wordt.
Priority List :

1. arithmetic and concatenation operators :

   1.a -> ^ (exponentiation)
   1.b -> - (unary negation)
   1.c -> * (multiplication) and / (division)
   1.d -> \ (integer division)
   1.e -> Mod (modulus)
   1.f -> + (addition) and - (subtraction)
   1.g -> & (string concatenation)

2. comparison operators, with identical priority :

   -> =, <>, <, <=, > and >=

3. logical operators :

   3.a -> Not (negation)
   3.b -> And and AndAlso (conjunction)
   3.c -> Or, OrElse and Xor (disjunction)
Expressies gebruik makende van operatoren met gelijke prioriteit, zullen van links naar rechts worden geëvalueerd.

Haakjes kunnen gebruikt worden om van die prioriteit af te wijken.  Vaak worden deze ook gewoon gebruikt om de leesbaarheid te bevorderen.

De voorrangsregels in een programmeertaal zijn niet noodzakelijk dezelfde als in de wiskunde.  Om verwarring te vermijden valt het aan te raden steeds haakjes te gebruiken.

Hieronder een (verwarrend) voorbeeld zonder haakjes :
Visual Basic 2012 Broncode - Codevoorbeeld 76
Module Example3
    Sub Main()
        Console.WriteLine(Not 10 * -4 / 2 ^ 2 + 11 = 8 Mod 10 \ -5 ^ 2 / 5 + 1
                          OrElse -8 ^ -2 <= 1 AndAlso True = False)
        ' exponentiation and unary negation :
        ' 2 ^ 2 -> 4
        ' -5 ^ 2 -> -(5 ^ 2) -> -25
        ' -8 ^ -2 -> -(8 ^ -2) -> -0.015625
        Console.WriteLine(Not 10 * -4 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' multiplication :
        ' 10 * -4 -> -40
        Console.WriteLine(Not -40 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' division :
        ' -40 / 4 -> -10
        ' -25 / 5 -> -5
        Console.WriteLine(Not -10 + 11 = 8 Mod 10 \ -5 + 1
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' integer division :
        ' 10 \ -5 -> -2
        Console.WriteLine(Not -10 + 11 = 8 Mod -2 + 1
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' modulus
        ' 8 Mod -2 -> 0
        Console.WriteLine(Not -10 + 11 = 0 + 1
                          OrElse -0.015625 <= 1 AndAlso True = False)
        ' addition and subtraction :
        ' -10 + 11 -> 1
        ' 0 + 1 -> 1
        Console.WriteLine(Not 1 = 1 OrElse -0.015625 <= 1 AndAlso True = False)
        ' comparison :
        ' 1 = 1 -> True
        ' -0.015625 <= 1 -> True
        ' True = False -> False
        Console.WriteLine(Not True OrElse True AndAlso False)
        ' negation :
        ' Not True -> False
        Console.WriteLine(False OrElse True AndAlso False)
        ' conjunction :
        ' True AndAlso False -> False
        Console.WriteLine(False OrElse False)
        ' disjunction :
        ' False OrElse False -> False
        Console.WriteLine(False)
        '
        Console.ReadLine()
    End Sub
End Module

4.1.1. Oefeningen

Opgave :

Hieronder een aantal samengestelde logische uitdrukkingen (met p, q en r als atomaire logische uitdrukkingen), vereenvoudig deze uitdrukkingen.  Doe dit bijvoorbeeld door een waarheidstabel op te stellen.
-> p Or (p And q)
-> p And (p Or q)
-> p And ((Not p) Or q)
-> p Or Not p And q
-> Not p Or p And q
-> Not p Or p And Not q
Oplossing :
-> p Or (p And q)

p     | q     | p And q | p Or (p And q)
True  | True  | True    | True
True  | False | False   | True
False | True  | False   | False
False | False | False   | False
De eerste en 4e kolom zijn identiek, dus :
p Or (p And q) = p

-> p And (p Or q)

p     | q     | p Or q | p And (p Or q)
True  | True  | True   | True
True  | False | True   | True
False | True  | True   | False
False | False | False  | False
De eerste en 4e kolom zijn identiek, dus :
p And (p Or q) = p

-> p And ((Not p) Or q)

p     | q     | Not p | (Not p) Or q | p And ((Not p) Or q)
True  | True  | False | True         | True
True  | False | False | False        | False
False | True  | True  | True         | False
False | False | True  | True         | False
Aan de 5e kolom merken we dat het resultaat enkel True is indien zowel p als
q True zijn, net zoals bij de And operator :
p     | q     | p And ((Not p) Or q) | p And q
True  | True  | True                 | True
True  | False | False                | False
False | True  | False                | False
False | False | False                | False
Kolom 3 en 4 zijn identiek, dus :
p And ((Not p) Or q) = p And q

-> p Or Not p And q

p     | q     | Not p | Not p And q | p Or Not p And q
True  | True  | False | False       | True
True  | False | False | False       | True
False | True  | True  | True        | True
False | False | True  | False       | False
Aan de 5e kolom merken we dat het resultaat enkel False is indien zowel p als
q False zijn, net zoals bij de Or operator :
p     | q     | p Or Not p And q | p Or Q
True  | True  | True             | True
True  | False | True             | True
False | True  | True             | True
False | False | False            | False
Kolom 3 en 4 zijn identiek, dus :
p Or Not p And q = p Or q

-> Not p Or p And q

p     | q     | Not p | p And q | Not p Or p And q
True  | True  | False | True    | True
True  | False | False | False   | False
False | True  | True  | False   | True
False | False | True  | False   | True
Voor de rij met resultaat False kan je dus stellen :
Not p Or p And q = False
enkel indien
p and Not q
p     | q     | Not q | p And Not q | Not p Or p And q
True  | True  | False | False       | True
True  | False | True  | True        | False
False | True  | False | False       | True
False | False | True  | False       | True
Kolom 4 en 5 zijn elkaars inversies, dus kun je stellen, dus :
Not p Or p And q = Not (p And Not q) = Not p Or q

-> Not p Or p And Not q

p     | q     | Not p | Not q | p And Not q | Not p Or p And Not q
True  | True  | False | False | False       | False
True  | False | False | True  | True        | True
False | True  | True  | False | False       | True
False | False | True  | True  | False       | True
Enkel indien p And q is resultaat False, dus resultaat
Not p Or p And Not q
is steeds True als
Not (p And q)
of
Not p Or Not q

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.