programmeren H2 Variabelen.pdf
Document Details

Uploaded by FaultlessDidgeridoo
Universiteit Gent
Tags
Full Transcript
PROGRAMMEREN THEORIE H2: VARIABELEN VARIABELEN § Naam § Adres § Type § Waarde Naam Adres Type Waarde a 001 Integer 15 b 002 String Test 2 BINDING Wanneer zal de computer een geheugencel reserveren voor een variabele? Static binding Onveranderd (at compile time) Dynamic binding Vera...
PROGRAMMEREN THEORIE H2: VARIABELEN VARIABELEN § Naam § Adres § Type § Waarde Naam Adres Type Waarde a 001 Integer 15 b 002 String Test 2 BINDING Wanneer zal de computer een geheugencel reserveren voor een variabele? Static binding Onveranderd (at compile time) Dynamic binding Veranderlijk (at run time) 3 STATIC TYPING Legt het type vast van een variabele at compile time. De meeste programeertalen maken gebruik van static typing Voorbeeld c#: int a; float b; 4 DYNAMIC TYPING Legt het type vast van een variabele at run time. Het type van een variabele kan in de loop van een programma veranderen. a = 12 a = “hallo” # a is int # a is nu string. Eigenlijk wordt hier de eerste a niet meer gebruikt. 5 TYPECASTING Typecasting is een manier om aan een programmeertaal duidelijk te maken dat een typeconversie moet gedaan worden a=2 b = “1” a+b a + int(b) (error) (3) 6 WEAK TYPING De programmeertaal kan omgaan met operatoren die verschillende types combineren. Er zal gebruik gemaakt worden van impliciete typecasting (type conversie) Voorbeeld: javascript Weak vs strong typing weak typing : "1" + 2 = "12” strong typing : "1" + 2 = error 7 DUCK TYPING Een nieuwe variabele hoeft niet gedeclareerd te worden. De interpreter bepaalt zelf het type op het ogenblik dat een waarde wordt toegekend aan de variabele. “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 8 DUCK TYPING IN PYTHON a = 12 b = 12.5 # a is int # b is float 9 DUCK TYPING IN PYTHON def verdubbel(x): return 2 * x a = verdubbel(12) b = verdubbel(“hallo”) c = verdubbel(12.5) # a is 24 (int) # b is “hallohallo” (string) # c is 25.0 (float) 10 DE GEHEUGENSTACK Je kan een stack het best vergelijken met een stapel boeken. Om dynamic binding mogelijk te maken moet het geheugen dynamisch beheerd worden. Er moet dus geheugen aangeduid worden om te gebruiken als je een variabele nodig hebt. Een nieuw stuk geheugen wordt bovenaan de stapel toegevoegd. 11 DE GEHEUGENSTACK IN ACTIE Een programma met variabele a en b a waarde b waarde tijdlijn We hebben een nieuwe variabele k nodig k waarde a waarde a waarde b waarde b Waarde tijdlijn 12 DE SCOPE VAN EEN VARIABELE Voorbeeld: def do_stuff(x, y): a=0 a=x+y a=3 b=8 do_stuff(a, b) print(a) 13 DE SCOPE VAN EEN VARIABELE scope naam variabele waarde do_stuff x waarde y waarde a waarde a waarde b waarde do_stuff object (binaire representatie van instructies in functie) global 14 DE SCOPE VAN EEN VARIABELE • • • • Elke functie (of methode) heeft een eigen local scope Het hoofdprogramma heeft een eigen scope: global De local scope heeft altijd voorrang op de global Als een variabele niet bestaat in de local scope, wordt die gezocht in de global scope 15 REPRESENTATIE Bit : 1 of 0 Byte: 8 bits Gehele getallen : 10010101 Komma getallen : 16 REPRESENTATIES CHARACTERS http://ascii-table.com/ Alles characters bestaan Zelf voor andere talen 17 BASIS TYPES • • • • • • • Boolean Byte int in python Integer (32 bit) Long (64 bit) Float (32 bit) float in python Double (64 bit) String: variabele lengte van ASCII code 18 ENUMERATION TYPES (C#) Enum dagen {maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag, zondag} Enum maanden {jan, feb, maar, apr, mei, jun, jul, aug, sept, oct, nov, dec} 19 REPRESENTATIE ENUMERATION TYPES Enum dagen {maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag, zondag} 000 Maandag 001 Dinsdag … … 110 Zondag 111 Niet gebruikt Aantal waarden : 8 Aantal bits : ? 1 bit : 2 waarden 2 bits : 4 waarden 3 bits : 8 waarden => 3 bits 20 SUB-RANGE Weekdagen : maandag ... vrijdag X: 1 ... 100 Weken: 1 ... 52 21 SETS (VERZAMELINGEN) Set1 : set of 1 ... 10 Set2: set of 'a' ... 'z' Aantal bits = aantal waarden Set1 : 1111111111 (10 bits) Set2 : 11111111111111111111111111 (26 bits) 22 GEDEFINIEERDE SETS SetA = {1,3,4,6,8,9} SetB = {2,3,5,6,7,9,10} Representatie: SetA: 1011010110 SetB: 0110111011 23 WERKEN MET SETS Doorsnede : (if 0 then 0) SetA: 1011010110 : {1,3,4,6,8,9} SetB: 0110111011 : {2,3,5,6,7,9,10} Door: 0010010010 : {3,6,9} Unie : (if 1 then 1) SetA: 1011010110 : {1,3,4,6,8,9} SetB: 0110111011 : {2,3,5,6,7,9,10} Unie: 1111111111 : {1,2,3,4,5,6,7,8,9,10} 24 WERKEN MET SETS Verschil : (if 1 and 1 then 0) SetA: 1011010110 : {1,3,4,6,8,9} SetB: 0110111011 : {2,3,5,6,7,9,10} A-B: 1001000100 : {1,4,8} Verschil : (argumenten omdraaien) SetA: 1011010110 : {1,3,4,6,8,9} SetB: 0110111011 : {2,3,5,6,7,9,10} B-A: 0100101001 : {2,5,7,10} 25 ARRAYS 1 x 6 getallen array 12 15 7 32 9 48 1 x 4 string array Tinky Winky Dipsy Laa-laa Po 26 ARRAYS EN INDEXERING (IN C#) 1 x 6 getallen array 12 15 7 32 9 48 0 1 2 3 4 5 1 x 4 string array Tinky Winky Dipsy Laa-laa Po 0 1 2 3 27 ARRAYS IN C# Declaratie: int[ ] ages = new int[6]; string[ ] band = new string[4]; Gebruik: ages[3] = 99; band[2] = "Mike”; string[ ] band = new string[4]; 28 MULTIDIMENSIONALE ARRAYS Index 0 1 2 3 4 5 6 0 22 3 16 12 65 56 77 1 12 8 0 101 99 87 6 2 14 7 23 41 43 87 10 3 15 20 1 102 4 89 26 29 LISTS IN PYTHON Veralgemening van array: Onbepaald en veranderlijk aantal elementen Elementen kunnen van verschillend type zijn. Voorbeelden: list1 = [2, 4, 6] list2 = [“Katrien”,”Els”,”Pieter”] list3 =[“Katrien”, 12, ”Els”, 17, “Pieter”, 5] matrix=[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 30 LIST INDEXERING IN PYTHON getallen = [12,15,7,32,9,48] getallen[0] -> 12 getallen[-1] -> 48 waarde 12 15 7 32 9 48 index 0 1 2 3 4 5 index -6 -5 -4 -3 -2 -1 31 LIST SLICING IN PYTHON operator [m:n] geeft sublijst terug van positie m tot positie n niet inclusief Voorbeelden: getallen = [12,15,7,32,9,48] getallen[2:5] -> [7,32,9] getallen[0:-1] -> [12,15,7,32,9] 32 DEFAULT SLICING Operator [m:] geeft sublijst van positie m tot het einde Operator [:n] geeft sublijst van begin tot positie n niet inclusief. getallen = [12,15,7,32,9,48] getallen[1:] -> [15,7,32,9,48] getallen[:1] -> [12] 33 SLICING MET SPRONG operator [m:n:s] geeft sublijst die start op positie m, loopt tot positie n (niet inclusief) met sprongen van grootte s (positief of negatief) a = [1,1,2,2,3,3,4,4] a[0:6:2] -> [1,2,3] Toepassing: [ : :-1] keert lijst om a = [1,2,3] a[ : :-1] -> [3,2,1] 34 THEORIE: Len Lemeire Hoofdlector EB24 Henleykaai 84, 4G08 [email protected] PRAKTIJK : Els Clarysse : [email protected] Ghent University @ugent Ghent University