|
Dit artikel is gepubliceerd op woensdag 28 april 2010 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 Broncode 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 ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic 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 Broncode Module Example2
Sub Main()
Dim x As Integer = -2
Dim y As Integer = 4
Console.WriteLine(-x ^ y)
Console.ReadLine()
End Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
-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 Broncode 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)
Console.WriteLine(Not 10 * -4 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1 _
OrElse -0.015625 <= 1 AndAlso True = False)
Console.WriteLine(Not -40 / 4 + 11 = 8 Mod 10 \ -25 / 5 + 1 _
OrElse -0.015625 <= 1 AndAlso True = False)
Console.WriteLine(Not -10 + 11 = 8 Mod 10 \ -5 + 1 _
OrElse -0.015625 <= 1 AndAlso True = False)
Console.WriteLine(Not -10 + 11 = 8 Mod -2 + 1 _
OrElse -0.015625 <= 1 AndAlso True = False)
Console.WriteLine(Not -10 + 11 = 0 + 1 _
OrElse -0.015625 <= 1 AndAlso True = False)
Console.WriteLine(Not 1 = 1 OrElse -0.015625 <= 1 AndAlso True = False)
Console.WriteLine(Not True OrElse True AndAlso False)
Console.WriteLine(False OrElse True AndAlso False)
Console.WriteLine(False OrElse False)
Console.WriteLine(False)
Console.ReadLine()
End Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
4.1.1. OefeningenOpgave :
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 : enkel indien 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 is steeds True als of
Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Visual Basic 2008 & 2010 Boeken
Berichten
|