Semantiek & Correctheid Thread synchronisatie & communicatie

Maat: px
Weergave met pagina beginnen:

Download "Semantiek & Correctheid Thread synchronisatie & communicatie"

Transcriptie

1 emantiek & Correctheid Thread ynchroniatie & communicatie Naam: Chritian Gilien ( ) Maurice amulki (034239) Datum: 30 juni 2004 Verie: 2.5

2 Inhoudopgave Inhoudopgave...2 Inleiding...3 Thread ynchroniatie en communicatie...4 Algemeen... 4 Meage Queue... 4 Mailboxe... 5 ignal... 5 yntax & O emantiek van While...6 Meage Queue in While...8 ignal in While...0 Race Condition & Deadlock...2 Race Condition... 2 Deadlock... 2 Meage Queue veru ignal...5 While veru ignal...20 While veru Meage Queue...24 Gödel codering Gödel codering : een element toevoegen Gödel codering : een element uitlezen Concluie...28 Referentie...29 emantiek & Correctheid: Thread ynchroniatie & communicatie 2/29

3 Inleiding Dit verlag i gechreven naar aanleiding van de opdracht emantiek in het wild voor het vak emantiek en Correctheid. Het onderwerp van dit verlag i ynchroniatie en communicatie van thread en bechouwt enkele bekende contructie voor het ynchronieren en communiceren van thread in combinatie met de taal While. We vragen on af wat er voor nodig i om de taal While uit te breiden met zogenaamde meage queue en ignal. We vergelijken meage queue met ignal en vragen on af of ignal meerwaarde hebben ten opzichtte van meage queue. We bekijken de mogelijkheid om in While gebruik te maken van meage queue zonder dat we de emantiek van While uitbreiden. We gebruiken een verie van While waarin thread worden geïmplementeerd met behulp van het par tatement. We negeren zoveel mogelijk alle potentiële problemen van thread die voor on niet van belang zijn. (ignal worden vaak gebruikt om deze te voorkomen). Omdat het par tatement alleen in O kan worden uitgedrukt wordt er in dit verlag dan ook alleen gewerkt met O emantiek. Voor het lezen van dit verlag i er enige voorkenni van thread vereit. emantiek & Correctheid: Thread ynchroniatie & communicatie 3/29

4 Thread ynchroniatie en communicatie Algemeen Thread zijn delen van programma die onafhankelijk en parallel aan andere tukken programma kunnen lopen. Een bekend probleem bij thread i de communicatie en ynchroniatie ervan. Het i immer erg handig om meerdere thread aan een gezamenlijke taak te laten werken. Hierbij i het belangrijk dat thread elkaar niet in de weg lopen door bijvoorbeeld gedeelde data op verkeerde momenten te manipuleren. In principe zijn er twee dingen die we graag willen hebben:. we willen thread afhankelijk van elkaar taken laten uitvoeren (in een bepaalde volgorde). 2. we willen dat thread (op veilige wijze) data met elkaar kunnen delen. Om boventaande zaken te verwezenlijken zijn er in veel talen bepaalde contructie ontwikkeld. We zullen van deze contructie in dit verlag niet aantonen dat zij inderdaad deze zaken verwezenlijken. Meage Queue Meage queue worden gebruikt om verchillende thread te ynchronieren en met elkaar te laten communiceren. Een meage queue i een lijt waar een thread een waarde in kan zetten. Een andere thread (of dezelfde, maar dat i niet zo nuttig) kan deze waarde er weer uit halen. De waarde die er al eerte in werd gezet wordt er ook weer al eerte uit gehaald; het zogenaamde FIFO (Firt-In-Firt-Out) principe. Wanneer een thread du gegeven van een andere thread nodig heeft zal hij in de meage queue kijken of de gegeven al bechikbaar zijn. Al de gegeven niet bechikbaar zijn dan zal de thread wachten. Grafich kan men een meage queue al volgt weergeven: thread ending thread meage queue F I F O thread receiving thread emantiek & Correctheid: Thread ynchroniatie & communicatie 4/29

5 Mailboxe Een mailbox i eigenlijk een eenvoudige meage queue waarbij er lecht ruimte i voor bericht. De meage queue bevat du precie element. thread ending thread mailbox thread receiving thread ignal Een mechanime dat veel lijkt op meage queue i ignal. De term ignal wordt in de literatuur voor velerlei verchillende zaken gebruikt. Wij vertaan onder ignal het volgende mechanime: Een thread kan een ignal verturen naar een andere thread. De andere thread kan wachten op een bepaald ignal. thread thread ending thread ignal receiving thread De bechreven contructie komen het bete tot hun recht wanneer er lokale en globale variabele omgevingen zijn. Iedere thread heeft zijn eigen lokale variabele omgeving en er i een globale variabele omgeving waar alle thread aan kunnen. emantiek & Correctheid: Thread ynchroniatie & communicatie 5/29

6 yntax & O emantiek van While De yntax van de taal While ziet er al volgt uit: :: = x : = a kip ; 2 if b then ele 2 while b do De O emantiek van de taal While ziet er al volgt uit: [ a o] x : = a, [ x A[ a ] ] [ kip o] kip, [ comp o] ;, 2, ', ' ' ; 2, ' 2 [ comp o] ;, ' 2, 2, ' tt [ if o] if b then ele 2,, if B[ b ] = tt ff [ if o] if b then ele 2, 2, if B[ b ] = ff [ while o] while b do, if b then ( ; while b do ) ele kip, emantiek & Correctheid: Thread ynchroniatie & communicatie 6/29

7 Voor het gebruik van thread in While i er het par tatement. [ par o], par 2, ', ' ' par 2, ' [ par o] 2, ' par 2, 2, ' [ par o] 3 par 2, 2, 2', ' par 2', ' [ par o] 4 2, ' par 2,, ' emantiek & Correctheid: Thread ynchroniatie & communicatie 7/29

8 Meage Queue in While Om een meage queue te bechrijven moeten we eert een datatructuur bechrijven waarin we meerdere waarden kunnen oplaan. Deze datatructuur moet werken volgen het FIFO principe. We noemen dit datatype een queue. We breiden de yntax van While uit met een queue declaratie: ::=... queue q Q Met Q :: = ε Q : a Een queue zien we al een queue, gevolgd door een numerieke waarde, of al leeg. Volgen boventaande yntax kun je een queue declareren door: queue q ::2:3 De emantiek van een queue declaratie ziet er al volgt uit: queue q Q, [ q Q] Queue variabelen worden gedeeld tuen thread. De verzamelingen van lokale variabelen voor thread zijn dijunct. We zullen deze declaratie in alle voorbeelden weglaten en aannemen dat de gebruikte queue al i toegevoegd aan de tate. Queue hoeven nooit verwijderd te worden; we nemen aan dat ze bij beëindiging van het programma automatich worden verwijderd. Om een element toe te voegen aan een queue introduceren we het volgende tatement: [ puh o] puh a q, [ q q : Α[ a ] ] Puh heeft 2 parameter: de numerieke waarde die op de queue geplaatt moet worden en de naam van de queue waarop de waarde geplaatt moet worden. De waarde wordt achteraan op de queue geplaatt waardoor het geheel werkt al een FIFO. In de praktijk zou zo n tatement al volgt gebruikt kunnen worden: puh 5 q emantiek & Correctheid: Thread ynchroniatie & communicatie 8/29

9 Om elementen van de queue af te halen introduceren we de pop functie. We gebruiken hier (a:q) al notatie voor een queue waarvan het eerte element (de head) a i en de ret (de tail) q i. [ pop o] pop q x, [ ( a : q) q][ x a] not_empty Pop heeft 2 argumenten. Het eerte argument i de naam van de queue waar we een element af willen halen. Het 2 e argument i een variabele waaraan de waarde die we van de queue halen aan zal worden toegekend. Wanneer de queue niet leeg i verwijderd pop het eerte item op de queue. Bijvoorbeeld: pop q c Waarna variabele c de waarde van het eerte element op de queue (q) heeft gekregen en dat eerte element van de queue i verwijderd. Wanneer de queue wel leeg i wordt er gewacht tot er een element op de queue komt. empty [ pop o] pop q x, pop q x, if q = ε Omdat dit in ommige gevallen niet i wat we willen. (tel er komt nooit meer een item op de queue, dan hebben we een hangend programma) introduceren we: empty [ trypop o] trypop q x, if q = ε not_empty [ trypop o] trypop q x, [ ( a : q) q][ x a] if q ε Met behulp van boventaande emantiek en yntax bechrijvingen hebben we nu meage queue in While. emantiek & Correctheid: Thread ynchroniatie & communicatie 9/29

10 ignal in While Een tweede communicatie en ynchroniatie middel voor thread zijn zogenaamde ignal. Een ignal kan een andere thread vertellen dat hij mag beginnen met het uitvoeren van bepaalde taken. Een ignal implementeren we in While aan de hand van de volgende yntax voor een ignal declaratie: ::=... newignal ig Met ig :: = a Een ignal implementeren we al een ignalnaam met een integer waarde. Een ignal heeft initieel de waarde 0 (fale). De emantiek : [ ig ] newignal ig, 0 We zullen deze declaratie in alle voorbeelden weglaten en aannemen dat het gebruikte ignal al i toegevoegd aan de verzameling van ignal variabelen. ignal hoeven nooit uit de tate verwijderd te worden, we nemen aan dat ze bij beëindiging van het programma automatich worden verwijderd. Een ignal verturen gaat doormiddel van het tatement ignal met al parameter de naam van het ignal. Hiermee wordt de waarde van het betreffende ignal op (true) gezet. [ ignal o] ignal ig, [ ig ] Boventaande emantiek maakt duidelijk dat een ignal niet opnieuw kan worden gebruikt, wanneer het ignal tatement nog een keer wordt aangeroepen blijft de waarde van het ignal op taan. emantiek & Correctheid: Thread ynchroniatie & communicatie 0/29

11 Wachten op een ignal gebeurt met het tatement wait met al parameter de naam van het ignal waarop gewacht moet worden. Wanneer de waarde van het ignal waarop gewacht wordt 0 (fale) i, dan blijft wait gewoon wachten. fale [ wait o] wait ig, wait ig, if A[ ig ] = 0 Wanneer de waarde van het ignal waarop gewacht wordt (true) i, dan wordt wait gewoon overgelagen. [ wait ] true o wait ig, if A[ ig ] = wait ignal, kip. wanneer A[ ignal ] = i du equivalent met het tatement Omdat we een ignal nu niet kunnen reetten maken we ook nog een reet tatement. Wanneer we bijvoorbeeld het volgende programma hebben: while true do wait ig; ; od Dan zal al hij eenmaal wordt uitgevoerd daarna oneindig vaak worden uitgevoerd omdat ignal ig, de waarde behoudt. [ reet o] reet ig, [ ig 0] In feite i dit du het tegenovergetelde van het ignal tatement. emantiek & Correctheid: Thread ynchroniatie & communicatie /29

12 Race Condition & Deadlock Race Condition Al thread met elkaar moeten communiceren dan i het noodzakelijk dat er geen race condition kunnen onttaan. In het dictaat van Nielon & Nielon i ondertaand voorbeeld opgenomen om te illutreren dat de volgorde van verwerking invloed kan hebben op het uiteindelijke reultaat. (x := ) par (x := 2; x := x + 2) Dit code voorbeeld kan drie verchillende reultaten voor de waarde van x hebben, namelijk 4, en 3. We zullen waar nodig naar dit probleem verwijzen al race condition. Deadlock We bekijken nu het volgende programma: ignal ig par wait ig In principe kan het nu voorkomen dat par continue het rechter tatement (wait ig) uitvoert waardoor on programma blijft hangen (deadlock). Om dit vervelende probleem te voorkomen paen we de emantiek van par aan voor die pecifieke gevallen waarin onze programma zouden kunnen blijven hangen. Wanneer par een wachtende pop of wait tegenkomt zal hij eert verder gaan met de andere thread. De orginele par emantiek: [ par o], par 2, ', ' ' par 2, ' [ par o] 2, ' par 2, 2, ' [ par o] 3 par 2, 2, 2', ' par 2', ' [ par o] 4 2, ' par 2,, ' emantiek & Correctheid: Thread ynchroniatie & communicatie 2/29

13 Uitbreidingen van par voor ignal: 2, 2', ' [ par ] 5 o if A[ ig ] = 0 wait ig; par 2, wait ig; par 2', ' 2, ' [ par ] 6 o if A[ ig ] = 0 wait ig; par 2, wait ig;, ' 2, 2', ' [ par ] 7 o if A[ ig ] = 0 ( wait ig) par 2, ( wait ig) par 2', ' 2, ' [ par ] 8 o if A[ ig ] = 0 ( wait ig) par 2, wait ig, ', ', ' [ par ] 9 o if A[ ig ] = 0 par wait ig; 2, ' par wait ig;, ' [ par ] 0 o if A[ ig ] = 0 par wait ig; 2, wait ig;, ', ' [ par ] o if A[ ig ] = 0 par wait ig,, ' ' par wait ig, ', ' [ par ] 2 o if A[ ig ] = 0 par wait ig, wait ig, ' 2, ' 2 emantiek & Correctheid: Thread ynchroniatie & communicatie 3/29

14 Het moge duidelijk zijn wat het idee bij deze regel i. Er zijn echter nog meer regel voor par (wanneer er bijvoorbeeld aan beide kanten een wait tatement voorkomt). Deze regel zijn nagenoeg equivalent aan de regel zoal hierboven bechreven en daarom laten we deze weg. Hetzelfde geldt voor de par regel waar pop tatement in voor komen. Ook deze regel zijn nu triviaal en daarom laten we ze weg. pecifiekere par regel hebben hier uiteraard voorrang op mindere pecifieke par regel. Bekijk het volgende programma: (wait ig) par x:=3 In een toetand waarin geldt [ ig ] = 0 en niet [ o] 4 par. A zal uiteraard [ o] 8 par van toepaing zijn We zullen vanaf nu verder werken met deze aangepate verie van par. emantiek & Correctheid: Thread ynchroniatie & communicatie 4/29

15 Meage Queue veru ignal De functionaliteit van meage queue komt zeer terk overeen met de functionaliteit van ignal. We zien dat de functionaliteit van ignal een ubet i van de functionaliteit van meage queue. Ondertaand voorbeeld illutreert dit: Voorbeeld a: ending thread: receiving thread: ignal ignal; par wait ignal; Hier wacht de receiving thread op een ignaal van de ending thread. Ditzelfde zouden we hebben kunnen doen met behulp van een meage queue: Voorbeeld b: ending thread: receiving thread: puh 0 queue; par pop queue x; Omdat we hier te maken hebben met atomaire tatement hoeven we geen rekening te houden met racecondition. We gaan bewijzen dat: en pop q x, ' wait ig, ' (telling a) puh 0 q, ' ignal ig, ' (telling b) Onder de aanname dat [ q] [ ig] ignal ig op meage queue q: ( [ q = ε ]) = ( A[ ig ] = 0) ( [ q ε ]) = ( A[ ig ] = ). Waarmee we een mapping bedoelen van emantiek & Correctheid: Thread ynchroniatie & communicatie 5/29

16 De telling a i onjuit. Dit kunnen we duidelijk maken door een tegenvoorbeeld. Voorbeeld 2a: ending thread: receiving thread: ignal ig; par while true do wait ig; od Wanneer we het recept van voorbeeld ook hier toepaen dan krijgen we het volgende programma: Voorbeeld 2b : ending thread: receiving thread: puh 0 queue; par while true do pop queue x; od Het i duidelijk dat dit programma niet equivalent i met het programma van voorbeeld 2a. Immer bij ieder uitgevoerd pop tatement wordt het bericht van de meage queue verwijderd. De enige manier om met meage queue een equivalent programma te chrijven i door oneindig veel berichten op de queue te plaaten of door na ieder pop tatement een puh uit te voeren. We paen onze tellingen aan en bewijzen: pop q x, ' wait ig, ' (telling 2a) Mit [ q = ε q = 0: ε ] [ q ] [ ig ] en puh 0 q, ' ignal ig, ' Mit [ q ] [ ig ] (telling 2b) emantiek & Correctheid: Thread ynchroniatie & communicatie 6/29

17 We bewijzen telling 2a. We bewijzen dat al: pop q x; puh 0 q, ' (*) dan ook wait ig, ' (**) Al: [ q = ε q = 0 : ε ] [ q ] [ ig ] We nemen aan (*) en bewijzen dat al de berekeningrij van (*) termineert, dan termineert ook de berekeningrij van (**) en de eindtoetanden van beide rijen zijn hetzelfde. Er zijn 2 mogelijkheden voor de berekeningrij van (*). We maken gevalondercheid: Geval [ pop o] not_empty pop gebruiken en we al aanname hebben dat de queue of leeg i of lecht element bevat weten we hoe de queue er initieel uit moet zien. Omdat we de regel [ o] not_empty pop q x; puh 0 q, not_empty { pop } puh 0 q, { puh o} [ q ( 0 : ε )] [ q ( a : ε )] [ q ε ][ x a] We zien verder dat de variabele x de waarde heeft gekregen die op de queue tond. We nemen voor x altijd een ongebruikte variabele die behalve hier verder nergen in on programma voorkomt en ook nooit meer gebruikt zal worden. Om deze reden kunnen we de variabele x al niet relevant voor de toetand bechouwen. emantiek & Correctheid: Thread ynchroniatie & communicatie 7/29

18 Voor wait maken we ook een berekeningrij beginnend in dezelfde toetand. Door ig moet zijn. onze aannamen zien we dat dat de toetand [ ] { wait true o} wait ig, [ ig ] [ ig ] Door onze aannamen kunnen we nu zien dat [ q ] = [ ig ] Geval 2[ pop o] empty { pop empty o}... pop q x; puh 0 q, pop q x; puh 0 q, [ q ε ] [ q ε ] Het i duidelijk dat deze berekeningrij looped. ε. Voor wait maken we weer een berekeningrij beginnend in dezelfde toetand. Door ig 0 moet zijn. onze aannamen zien we dat dat de toetand [ ] wait ig, { wait fale o} wait ig,... [ ig 0] [ ig 0] Deze berekingrij looped vanuit dezelfde toetand al de berekingrij voor (*). Dat deze toetanden hetzelfde zijn blijkt weer uit onze aannamen. En du (*) (**).? emantiek & Correctheid: Thread ynchroniatie & communicatie 8/29

19 Nu bewijzen we telling 2b. We bewijzen dat al: puh 0 q, ' dan ook ignal ig, ' (*) (**) We nemen aan (*) en bewijzen dat al de berekeningrij van (*) termineert, dan termineert ook de berekeningrij van (**) en de eindtoetanden van beide rijen zijn hetzelfde. 0 q, { puh o} puh [ q (0: q) ] Vanuit dezelfde toetand krijgen we volgen de regel [ ignal o] de berekeningrij: ignal ig, { ignal o} [ ig ] En volgen onze aannamen geldt [ q ( 0 : q) ] [ ig ] [ q (0 : q) ] = [ q ε ] =. Immer? emantiek & Correctheid: Thread ynchroniatie & communicatie 9/29

20 While veru ignal Het valt op dat de toegevoegde tatement voor ignal niet zo vreelijk bijzonder zijn en nogal wat overeenkomten vertonen met de originele tatement van While. Wellicht i het zo dat behalve het principe van variabelen in thread en variabelen tuen thread (lokale en globale variabelen) er weinig verchil i. In dat geval zouden er tatement in While moeten betaan die emantich equivalent zijn met ignal en wait. We bewijzen dat tate o while not b == do kip = o[ ] wait b (telling 3) Mit de ignal variabele b ook toegankelijk i voor tatement uit While. Nogmaal de O emantiek van het while tatement: [ whileo] while b do, if b then ( ; while b do ) ele kip, Eert bewijzen we dat al while not ( b == ) do kip, ' (*) dan ook wait b, ' (**) emantiek & Correctheid: Thread ynchroniatie & communicatie 20/29

21 We nemen aan (*) en bewijzen dat al de berekeningrij van (*) termineert, dan termineert ook de berekeningrij van (**) en de eindtoetanden van beide rijen zijn hetzelfde. De berekenigrij voor (*) kan op 2 manieren worden gemaakt. We maken een gevalondercheid. ff Geval [ if o] { while o} if not { if ff o } kip, while not ( b == ) do kip, { kip o } ( b == ) then ( kip; while not ( b == ) do kip) ele kip, Nu maken we een berekeningrij voor (**) vanuit dezelfde toetand, B not ( b == ) = en du A [ b ] =. gebruikmakend van het gegeven [ ] ff wait b, { wait true } Waarmee we zien dat al (*) begint vanuit en gaat naar, dan gaat ook (**) vanuit naar. (waarbij in dit geval = ) emantiek & Correctheid: Thread ynchroniatie & communicatie 2/29

22 tt Geval 2 [ if o] In het 2 e geval geldt du A[ b ] = 0 maken: en kunnen we de volgende berekeningrij while not ( b == ) do kip, { while o} if not { if tt o } while not { while o } if not... ( b == ) then ( kip; while not ( b == ) do kip) ( b == ) do kip, ( b == ) then ( kip; while not ( b == ) do kip) ele ele kip, kip, Het i duidelijk dat deze berekeningrij looped vanuit. Nu maken we een berekeningrij voor (**) vanuit dezelfde toetand, gebruikmakend van het gegeven B [ not ( b == ) ] = tt en du A [ b ] = 0. wait b, { wait fale o} wait b,... Het i wederom duidelijk dat ook deze berekeningrij looped vanuit. Waarmee we hebben aangetoond dat (*) looped al (**) looped en dat al (*) gaat naar, (**) ook gaat naar. * **. Waarmee i bewezen dat ( ) ( ) Het bewij van ( *) (*) concluderen. * gaat op analoog, waardoor we telling 3 kunnen? emantiek & Correctheid: Thread ynchroniatie & communicatie 22/29

23 Het i verder eenvoudig om te zien dat al b een globale variabele i, dat het tatement: b := ; emantich equivalent i met: ignal b; Immer en ook [ A[ ] ] b : =, b = [ A[ ] ] ignal b, b =? emantiek & Correctheid: Thread ynchroniatie & communicatie 23/29

24 While veru Meage Queue Omdat we al gezien hebben dat de functionaliteit van ignal ook met de tandaard while tatement kan worden bereikt (mit er gedeelde variabelen betaan) en we al hebben gezien dat de functionaliteit van meage queue gedeeltelijk overlapt met die van ignal, reit de vraag of het niet ook mogelijk i om meage queue in While te implementeren zonder uitbreiding van de orginele emantiek. Het eerte probleem waar men tegenop loopt i het feit dat er geen datatructuur i om meerdere waarden in op te laan. Om de emantiek van While toch niet te hoeven uitbreiden maken we gebruik van Gödel codering. Gödel codering We maken gebruik van gedeelde (hared) integer variabele waarin we onze reek van waarden oplaan al één getal met behulp van Gödel codering. Een Gödel codering i de codering van een reek getallen in één getal. Een reek getallen x 0, x.. xn van lengte n + wordt gecodeerd door: x0 + x + xn + pn (0) pn().. pn( n) (Bij iedere x wordt opgeteld zodat het ook mogelijk i om het getal 0 te coderen, immer 0 x Ν x ) Hierbij i pn(i) de functie die het i-de priemgetal oplevert. ( pn ( 0) = 2 ) Korter gezegd: { x 0, x.. xn} = n i = 0 pn( i) xi + Bijvoorbeeld de queue :3:2: coderen we met behulp van een Gödel codering al = Dit getal laan we op in de gedeelde variabele. emantiek & Correctheid: Thread ynchroniatie & communicatie 24/29

25 Gödel codering : een element toevoegen Voor het toevoegen van een getal wordt de Gödel codering uitgelezen, gedecodeerd en wordt het nieuwe getal toegevoegd. Dit wordt opnieuw gecodeerd en opgelagen in de gedeelde variabele waarbij de oude waarde overchreven wordt. Hierbij dient er wel erg gelet te worden op race-condition. In de tijd dat er een nieuw getal wordt toegevoegd mag er door de receiving thread niet gelezen worden. Gegeven de functie encode_gödel en decode_gödel met het volgende prototype: encode_gödel (number, queue) De functie die gegeven een getal en een Gödel getal, het getal toevoegt aan het Gödel getal. Bijvoorbeeld: encode_gödel( 3, 08 ); // [,2] retourneert het getal 8000 ( [3,,2] ) decode_gödel (poition, queue) De functie die gegeven een poitie en een Gödel getal het (getal + ) op de poitie decodeert uit het Gödel getal. Wanneer de poitie niet betaat wordt er 0 geretourneerd. Poitie beginnen vanaf 0. Bijvoorbeeld: decode_gödel(, ); // [,2,3] retourneert het getal 3. Wanneer we hier nog vanaf trekken krijgen we het gecodeerde getal 2. (NB Je moet er altijd vanaf trekken ) decode_gödel ( 3, ); // [,2,3] retourneert het getal 0 omdat de poitie 3 niet betaat. emantiek & Correctheid: Thread ynchroniatie & communicatie 25/29

26 Een programma in While dat op deze manier een meage queue implementeert zou er al volgt uit kunnen zien voor een ending thread: Voor de overzichtelijkheid gebruiken we hier een variant van While met procedure en parameter. Teven gebruiken we het protect tatement zoal behandeld in het werkcollege. ending thread x := 3; puh (x, queue) // the hared queue variable i called // queue proc puh i (number, queue) begin protect counter := 0; temp := decode_gödel(counter, queue) - ; new := 0; while temp <> 0 do new := encode_gödel(temp, new); counter := counter + ; temp := decode_gödel(counter, queue) - ; od new := encode_gödel(x, new); queue := new; end end emantiek & Correctheid: Thread ynchroniatie & communicatie 26/29

27 Gödel codering : een element uitlezen De receiving thread leet de Gödel codering uit de gedeelde variabele, decodeert deze, leet het eerte getal en codeert de overige getallen weer en laat ze op in de gedeelde variabele. Ook hier mag er terwijl de receiving thread uitleet, door de ending thread geen nieuw getal worden toegevoegd. Een programma in While dat op deze manier een meage queue implementeert zou er al volgt uit kunnen zien voor een receiving thread: receiving thread pop (queue, x); proc pop i (queue, number) begin protect counter := 0; while queue == 0 do kip; // queue i empty, wait od previou := decode_gödel(counter, queue) - ; end end counter := counter + ; next := decode_gödel(counter, queue) - ; while next <> 0 do previou := next; counter := counter + ; next := decode_gödel(counter, queue) - ; od number := previou; We gaan verder niet in op hoe de functie decode_gödel en encode_gödel er precie uit zien. We weten dat ze in While te implementeren zijn. Met het vinden van een oploing voor het oplaan van meedere waarden zonder het uitbreiden van de emantiek van While hebben we het belangrijkte probleem opgelot. Met behulp van de bechreven functie i het eenvoudig om een meage queue te implementeren. emantiek & Correctheid: Thread ynchroniatie & communicatie 27/29

28 Concluie We hebben laten zien dat het uitbreiden van While met meage queue en ignal relatief eenvoudig i en dat de emantiek hiervoor redelijk voor de hand ligt. Teven hebben we aangetoond dat de functionaliteit van ignal gemakkelijk kan worden nageboott met meage queue en dat een uitbreiding van While voor ignal du in feite overbodig i al er al meage queue aanwezig zijn. Al laatte hebben we gezien dat zelf voor het gebruik van meage queue While niet peré uitgebreid hoeft te worden. We kunnen de functionaliteit van meage queue namelijk ook implementeren door gebruik te maken van Gödel codering. In de praktijk zal dit echter nooit gebeuren omdat Gödel getallen zeer nel erg groot worden en omdat het coderen en decoderen een zeer grote berekening i. Verder dwingen de emantiek uitbreidingen correct gebruik van queue af. Bij het werken met queue zonder emantiek uitbreidingen i het veel eenvoudiger om foute programma te chrijven. Voor het gebruik van meage queue hebben uitbreidingen van de emantiek van While du zeker de voorkeur. emantiek & Correctheid: Thread ynchroniatie & communicatie 28/29

29 Referentie Hilfinger, P., Thread of Control [online], Department of Computer cience Berkeley Univerity, 3 Nov Portable Document Format. Available from: < Nielon, H.R. and Nielon F., emantic with application: A Formal Introduction [online], Revied, John Wiley & on, July 999. Portable Document Format. Available from: < Potcript Format. Available from: < Nutt, G.J., Operating ytem: A Modern Perpective [online], econd Edition, Pearon Education Inc., 8 July 200. [Chapter 9]. Available from: < udkamp. T.A., Language and Machine An Introduction to the Theory of Computer cience, econd Edition, Addion-Weley, January 997. hene, C.K., Multithreaded Programming with ThreadMentor: A Tutorial [online], Revied, Department of Computer cience Michigan Technological Univerity, 6 April Available from: < emantiek & Correctheid: Thread ynchroniatie & communicatie 29/29

Hoofdstuk 7: Werken met arrays

Hoofdstuk 7: Werken met arrays Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

Semantiek (2IT40) Jos Baeten. Formele Methoden. HG 7.19 tel.: Hoorcollege 1 (29 maart 2007)

Semantiek (2IT40) Jos Baeten. Formele Methoden.   HG 7.19 tel.: Hoorcollege 1 (29 maart 2007) Jos Formele Methoden josb@win.tue.nl http://www.win.tue.nl/~josb/ HG 7.19 tel.: 040 247 5155 Hoorcollege 1 (29 maart 2007) 2IT40 Organisatie Colstructie: docent: wanneer: donderdagen 3 e en 4 e uur waar:

Nadere informatie

Standaardisatie en z-scores

Standaardisatie en z-scores Prof. dr. Herman Callaert Inhoudtafel 1 Standaardiatie bij concreet cijfermateriaal... 1 1.1 Een eerte voorbeeld: de punten van Pol... 1 1.1.1 De ruwe core... 1 1.1.2 Vergelijken met het klagemiddelde...

Nadere informatie

d τ (t) dt = 1 voor alle τ 0.

d τ (t) dt = 1 voor alle τ 0. 6.5. Impulfunctie. In deze paragraaf kijken we naar verchijnelen waarbij in zeer korte tijd een (grote) kracht op een yteem wordt uitgeoefend. Zo n plotelinge kracht kunnen we bechrijven met behulp van

Nadere informatie

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 5.1-5.2, Appendix A.

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 5.1-5.2, Appendix A. Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 51-52, Appendix A1) Processes zijn meestal niet onafhankelijk Bijvoorbeeld: 2 processen

Nadere informatie

1 Inleiding in Functioneel Programmeren

1 Inleiding in Functioneel Programmeren 1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp

Nadere informatie

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica Deel-tentamen Operating Systemen (2IN05) op vrijdag 5 oktober 2007, 9.00-10.30 uur. Het tentamen bestaat uit twee delen die apart worden

Nadere informatie

Stacks and queues. Hoofdstuk 6

Stacks and queues. Hoofdstuk 6 Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

Pascal uitgediept Data structuren

Pascal uitgediept Data structuren Pascal uitgediept Data structuren MSX Computer & Club Magazine nummer 68-juni/juli 1994 Herman Post Scanned, ocr ed and converted to PDF by HansO, 2001 In deze aflevering wordt bekeken hoe zelf een datastructuur

Nadere informatie

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Uitwerking tentamen Analyse van Algoritmen, 29 januari Uitwerking tentamen Analyse van Algoritmen, 29 januari 2007. (a) De buitenste for-lus kent N = 5 iteraties. Na iedere iteratie ziet de rij getallen er als volgt uit: i rij na i e iteratie 2 5 4 6 2 2 4

Nadere informatie

Stap 1. Bepalen van invoer Het makkelijkst kun je dit vinden uit de zwarte vlakken met voorbeelden:

Stap 1. Bepalen van invoer Het makkelijkst kun je dit vinden uit de zwarte vlakken met voorbeelden: Stap 1. Bepalen van invoer Het makkelijkst kun je dit vinden uit de zwarte vlakken met voorbeelden: Na de opdracht Maak uw keuze: wordt er voor het eerst iets ingetypt door de gebruiker. De getallen die

Nadere informatie

Hoofdstuk 6: De Laplace transformatie

Hoofdstuk 6: De Laplace transformatie Hoofdtuk 6: De Laplace tranformatie 6.. Definitie. Een integraaltranformatie i een relatie van de vorm F () = β α K(, t)f(t) dt, die een functie f(t) omzet naar een andere functie F (). De functie K(,

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Hoofdstuk 21: Gegevens samenvatten

Hoofdstuk 21: Gegevens samenvatten Hoofdstuk 21: Gegevens samenvatten 21.0 Inleiding In Excel kunnen grote (en zelfs ook niet zo grote) tabellen met getallen en tekst er nogal intimiderend uitzien. Echter, Excel komt helemaal tot haar recht

Nadere informatie

Semaforen. Semaforen p. 1/2

Semaforen. Semaforen p. 1/2 Semaforen 2008 Semaforen p. 1/2 Vorige Keer mbv mutual exclusion kritieke sectie (cs) 1. software : Dekker s, Peterson s algoritme 2. hardware: uniprocessor machine: disable interrupts 3. hardware: multiprocessor

Nadere informatie

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

Programmeermethoden NA. Week 3: Controlestructuren

Programmeermethoden NA. Week 3: Controlestructuren Programmeermethoden NA Week 3: Controlestructuren Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Inleveren opdracht 1 Lever digitaal sxxxxxxx-syyyyyyy-opdr1.py

Nadere informatie

Talstelsels en getalnotaties (oplmodel)

Talstelsels en getalnotaties (oplmodel) Talstelsels en getalnotaties (oplmodel) herhalingsvragen 1. Waarom werken computers binair? Omdat binaire computers veel makkelijker te maken is. De kans op fouten is ook veel kleiner. het spanningsverschil

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

tail Amsterdam, 1 december 2009 Betreft; gewijzigd dienstenaanbod Geachte heer, mevrouw,

tail Amsterdam, 1 december 2009 Betreft; gewijzigd dienstenaanbod Geachte heer, mevrouw, tail STUDIO Amterdam, 1 december 2009 Betreft; gewijzigd dientenaanbod Geachte heer, mevrouw, U hebt in het verleden een taalanalye of contra-expertie bij De Taaltudio aangewaagd. Zoal u vermoedelijk via

Nadere informatie

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

Nadere informatie

d τ (t) dt = 1 voor alle τ 0.

d τ (t) dt = 1 voor alle τ 0. 65 Impulfunctie In deze paragraaf kijken we naar verchijnelen waarbij in zeer korte tijd een (grote kracht op een yteem wordt uitgeoefend Zo n plotelinge kracht kunnen we bechrijven met behulp van een

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

1 Rekenen in eindige precisie

1 Rekenen in eindige precisie Rekenen in eindige precisie Een computer rekent per definitie met een eindige deelverzameling van getallen. In dit hoofdstuk bekijken we hoe dit binnen een computer is ingericht, en wat daarvan de gevolgen

Nadere informatie

Een gelinkte lijst in C#

Een gelinkte lijst in C# Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk

Nadere informatie

3 De stelling van Kleene

3 De stelling van Kleene 18 3 De stelling van Kleene Definitie 3.1 Een formele taal heet regulier als hij wordt herkend door een deterministische eindige automaat. Talen van de vorm L(r) met r een reguliere expressie noemen we

Nadere informatie

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet.

OPDRACHT Opdracht 2.1 Beschrijf in eigen woorden wat het bovenstaande PSD doet. Les C-02: Werken met Programma Structuur Diagrammen 2.0 Inleiding In deze lesbrief bekijken we een methode om een algoritme zodanig structuur te geven dat er gemakkelijk programmacode bij te schrijven

Nadere informatie

QUANTUMFYSICA QUANTUMTOESTANDEN. Naam: Klas: Datum:

QUANTUMFYSICA QUANTUMTOESTANDEN. Naam: Klas: Datum: QUANTUMTOESTANDEN QUANTUMFYSICA QUANTUMTOESTANDEN Naam: Kla: Datum: QUANTUMTOESTANDEN QUANTUMTOESTANDEN ERIK VERLINDE Erik Verlinde i een theoretich fyicu. Dat betekent dat hij aan de hand van eerder gedane

Nadere informatie

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 ) OI 2010 Finale 12 Mei 2010 Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub VOORNAAM :....................................................... NAAM :..............................................................

Nadere informatie

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49 Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen

Nadere informatie

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12 Katern 2 Getaltheorie Inhoudsopgave 1 Delers 1 2 Deelbaarheid door 2, 3, 5, 9 en 11 6 3 Grootste gemene deler en kleinste gemene veelvoud 12 1 Delers In Katern 1 heb je geleerd wat een deler van een getal

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen dat er zowel typografische als inhoudelijke onvolkomenheden

Nadere informatie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie Discrete Structuren Piter Dykstra Opleidingsinstituut Informatica en Cognitie www.math.rug.nl/~piter piter@math.rug.nl 22 februari 2009 INDUCTIE & RECURSIE Paragrafen 4.3-4.6 Discrete Structuren Week 3:

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Conclusies over semaforen

Conclusies over semaforen Conclusies over semaforen gebruik semaforen is subtiel signal & wait operaties, en access van shared data, op allerlei plekken in de code Kan dit niet handiger? Dwz: zijn er geen betere abstracties? Ja:

Nadere informatie

Functioneel programmeren

Functioneel programmeren Functioneel programmeren Practicumopgave 2: Mastermind Het doel van deze opgave is het implementeren van het spel Mastermind; zie http://nl.wikipedia.org/wiki/mastermind voor een uitleg. Het spel is klein

Nadere informatie

Programmeerstructuren met App Inventor

Programmeerstructuren met App Inventor Programmeerstructuren met App Inventor Kevin Krul, Universiteit Utrecht Roncalli, Bergen op Zoom Inhoud: Les 1: Introductie tot App Inventor, when statement en variabelen. Les 2: Introductie if-statement

Nadere informatie

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

Uitleg van de Hough transformatie

Uitleg van de Hough transformatie Uitleg van de Hough transformatie Maarten M. Fokkinga, Joeri van Ruth Database groep, Fac. EWI, Universiteit Twente Versie van 17 mei 2005, 10:59 De Hough transformatie is een wiskundige techniek om een

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

De kracht van de inzet van tv en dagbladen door Advil

De kracht van de inzet van tv en dagbladen door Advil De kracht van de inzet van tv en dagbladen door Advil Preentatie van onderzoekreultaten Martijn Brinkhoff mei 2008 Inhoud Aanleiding Theorie over multimedia-effecten Doel van het onderzoek Onderzoekmethode

Nadere informatie

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3 Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3 Koen Rutten, Aris van Dijk 30 mei 2007 Inhoudsopgave 1 Verzamelingen 2 1.1 Definitie................................ 2 1.2 Eigenschappen............................

Nadere informatie

Honours projecten BSc Informatica: twee voorstellen

Honours projecten BSc Informatica: twee voorstellen Honours projecten BSc Informatica: twee voorstellen mogelijk ook geschikt voor BSc Kunstmatige Intelligentie Alban Ponse section Theory of Computer Science Informatics Institute, University of Amsterdam

Nadere informatie

FLIPIT 5. (a i,j + a j,i )d i d j = d j + 0 = e d. i<j

FLIPIT 5. (a i,j + a j,i )d i d j = d j + 0 = e d. i<j FLIPIT JAAP TOP Een netwerk bestaat uit een eindig aantal punten, waarbij voor elk tweetal ervan gegeven is of er wel of niet een verbinding is tussen deze twee. De punten waarmee een gegeven punt van

Nadere informatie

Doorzoeken van grafen. Algoritmiek

Doorzoeken van grafen. Algoritmiek Doorzoeken van grafen Algoritmiek Vandaag Methoden om door grafen te wandelen Depth First Search Breadth First Search Gerichte Acyclische Grafen en topologische sorteringen 2 Doolhof start eind 3 Depth

Nadere informatie

VBA voor Doe het Zelvers deel 20

VBA voor Doe het Zelvers deel 20 VBA voor Doe het Zelvers deel 20 Handleiding van Auteur: leofact Augustus 2015 handleiding: VBA voor Doe het Zelvers deel 20 Vorige aflevering In het vorige deel werd besproken hoe je de structuur en vensteropbouw

Nadere informatie

Tutorial 1, Delphi: Geldspraak

Tutorial 1, Delphi: Geldspraak Tutorial 1, Delphi: Geldspraak Versie Datum Auteurs Opmerkingen 1 25-09-2001 Kees Hemerik (code) Gebaseerd op Delphi 5 Enterprise. Roel Vliegen (tekst) 2 17-03-2005 Kees Hemerik Aanpassingen: Delphi 7,

Nadere informatie

Toegepaste Statistiek, Week 2 1

Toegepaste Statistiek, Week 2 1 Toegepate Statitiek, Week 2 1 In Week 1 hebben we verchillende manieren bekeken om n teekproef te karakterieren: Hitogram gemiddelde G n variantie tandaarddeviatie tandaardfout in het gemiddelde Deze begrippen

Nadere informatie

Greedy algoritmes. Algoritmiek

Greedy algoritmes. Algoritmiek Greedy algoritmes Algoritmiek Algoritmische technieken Trucs, methoden, paradigma s voor het ontwerpen van algoritmen Dynamisch Programmeren Divide & Conquer Greedy 2 Greedy algoritme Bouwt de oplossing

Nadere informatie

Programmeermethoden NA. Week 6: Lijsten

Programmeermethoden NA. Week 6: Lijsten Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal

Nadere informatie

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal. 4. Array s Een array is een geïndexeerde variabele. Deze zin zal de nodig vragen oproepen, waarop enige uitleg van toepassing is. Met variabelen hebben we al kennis gemaakt. In een variabele kun je iets

Nadere informatie

Take-home Tentamen Protocolvericatie. Universiteit van Amsterdam. 27 Maart 1994

Take-home Tentamen Protocolvericatie. Universiteit van Amsterdam. 27 Maart 1994 Take-home Tentamen Protocolvericatie Vakgroep Programmatuur Universiteit van Amsterdam 27 Maart 1994 Algemene Opmerkingen Dit tentamen omvat zes reguliere opgaven plus een bonusopgave. Opgaves 1, 2, 5

Nadere informatie

Examen Datastructuren en Algoritmen II

Examen Datastructuren en Algoritmen II Tweede bachelor Informatica Academiejaar 2016 2017, eerste zittijd Examen Datastructuren en Algoritmen II Naam :.............................................................................. Lees de hele

Nadere informatie

Variabelen gebruiken in ons programma

Variabelen gebruiken in ons programma Hoofdstuk 3 Variabelen introduceren Variabelen gebruiken in ons programma Het zou leuk zijn als ons programma Hallo kan zeggen met de naam van de gebruiker in plaats van het algemene Hallo wereld?. Als

Nadere informatie

Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search

Vierde college algoritmiek. 2 maart Toestand-actie-ruimte Exhaustive Search Algoritmiek 2018/Toestand-actie-ruimte Vierde college algoritmiek 2 maart 2018 Toestand-actie-ruimte Exhaustive Search 1 Algoritmiek 2018/Toestand-actie-ruimte Kannen Voorbeeld 4: Kannenprobleem We hebben

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Stage Ignatiuscollege, 17 mei 2010 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Programmeermethoden NA

Programmeermethoden NA Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder

Nadere informatie

Kortste Paden. Algoritmiek

Kortste Paden. Algoritmiek Kortste Paden Toepassingen Kevin Bacon getal Six degrees of separation Heeft een netwerk de small-world eigenschap? TomTom / Google Maps 2 Kortste paden Gerichte graaf G=(N,A), en een lengte L(v,w) voor

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Stage Ignatiuscollege, 20 mei 2008 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes

Nadere informatie

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber

public boolean equaldates() post: returns true iff there if the list contains at least two BirthDay objects with the same daynumber Tentamen TI1310 Datastructuren en Algoritmen, 15 april 2011, 9.00-12.00 TU Delft, Faculteit EWI, Basiseenheid Software Engineering Bij het tentamen mag alleen de boeken van Goodrich en Tamassia worden

Nadere informatie

Binair Binair = tweewaardig Beperkt aantal mogelijke waarden (discreet aantal in amplitude) Wij zijn gewoon aan decimaal (tiendelig)

Binair Binair = tweewaardig Beperkt aantal mogelijke waarden (discreet aantal in amplitude) Wij zijn gewoon aan decimaal (tiendelig) Binair Binair = tweewaardig Beperkt aantal mogelijke waarden (discreet aantal in amplitude) Wij zijn gewoon aan decimaal (tiendelig) In elektronische realisatie zijn 10 verschillende toestanden moeilijk

Nadere informatie

[13] Rondjes draaien (loops)

[13] Rondjes draaien (loops) [13] Rondjes draaien (loops) Met de if else uit de leerfiche [11] hebben we leren werken met één van de belangrijkste programmeerstructuren in Python. Bijna even belangrijk zijn de verschillende mogelijkheden

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007 Uitgebreide uitwerking Tentamen Complexiteit, mei 007 Opgave. a. Een beslissingsboom beschrijft de werking van het betreffende algoritme (gebaseerd op arrayvergelijkingen) op elke mogelijke invoer. In

Nadere informatie

Honours projecten BSc Informatica: twee voorstellen

Honours projecten BSc Informatica: twee voorstellen Honours projecten BSc Informatica: twee voorstellen mogelijk ook geschikt voor BSc Kunstmatige Intelligentie Alban Ponse section Theory of Computer Science Informatics Institute, University of Amsterdam

Nadere informatie

Klassikaal slagbal op de basisschool

Klassikaal slagbal op de basisschool Klaikaal lagbal op de baichool Roelian Oorchot en Chri Hazelebach Op verzoek van de chool hebben we een aantal klaikale leen uitgewerkt. Er i geprobeerd een doorgaande lijn te bechrijven. Het fijne van

Nadere informatie

Familie-editie. Speelmateriaal. Vervangingsfiches

Familie-editie. Speelmateriaal. Vervangingsfiches Familie-editie Speelmateriaal Hallo! Mijn naam i Uwe Roenberg, de ontwerper van dit pel. Ik zal je door de pelregel leiden en tip geven. 2 dubbelzijdige peelborduitbreidingen (met extra velden) peelbord

Nadere informatie

De partitieformule van Euler

De partitieformule van Euler De partitieformule van Euler Een kennismaking met zuivere wiskunde J.H. Aalberts-Bakker 29 augustus 2008 Doctoraalscriptie wiskunde, variant Communicatie en Educatie Afstudeerdocent: Dr. H. Finkelnberg

Nadere informatie

Haskell: programmeren in een luie, puur functionele taal

Haskell: programmeren in een luie, puur functionele taal Haskell: programmeren in een luie, puur functionele taal Jan van Eijck jve@cwi.nl 5 Talen Symposium, 12 juli 2010 Samenvatting In deze mini-cursus laten we zien hoe je met eindige en oneindige lijsten

Nadere informatie

Inmiddels weet je al goed hoe je variabelen kunt gebruiken. Je hebt al veel geleerd en hopelijk vind je het nog steeds leuk.

Inmiddels weet je al goed hoe je variabelen kunt gebruiken. Je hebt al veel geleerd en hopelijk vind je het nog steeds leuk. Hoofdstuk 10 Matrices Inmiddels weet je al goed hoe je variabelen kunt gebruiken. Je hebt al veel geleerd en hopelijk vind je het nog steeds leuk. Laten we het eerste programma met variabelen dat we hebben

Nadere informatie

Achtste college algoritmiek. 8 april Dynamisch Programmeren

Achtste college algoritmiek. 8 april Dynamisch Programmeren Achtste college algoritmiek 8 april 2016 Dynamisch Programmeren 1 Werkcollege-opgave Dutch Flag Problem Gegeven een array gevuld met R, W, en B. Reorganiseer dit array zo dat van links naar rechts eerst

Nadere informatie

Opgaven Registers Concurrency, 29 nov 2018, Werkgroep.

Opgaven Registers Concurrency, 29 nov 2018, Werkgroep. Opgaven Registers Concurrency, 29 nov 2018, Werkgroep. Gebruik deze opgaven om de stof te oefenen op het werkcollege. Cijfer: Op een toets krijg je meestal zes tot acht opgaven. 1. Safe Integer: Van een

Nadere informatie

Zelftest Programmeren in PL/I

Zelftest Programmeren in PL/I Zelftest Programmeren in PL/I Document: n0830test.fm 26/03/2012 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN PL/I m de voorkennis

Nadere informatie

Hoofdstuk 17: Logische & Informatiefuncties en operatoren

Hoofdstuk 17: Logische & Informatiefuncties en operatoren Hoofdstuk 17: Logische & Informatiefuncties en operatoren 17.0 Inleiding Logische formules testen of een conditie waar is (het resultaat van de formule zal dan de waarde WAAR hebben) of onwaar (in dit

Nadere informatie

Hoofdstuk 5: Functies voor getallen en teksten

Hoofdstuk 5: Functies voor getallen en teksten Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, maart 2001 Hoofdstuk 5: Functies voor getallen en teksten

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Verkorte Inbedrijfname handleiding G120 Firmware 4.4 met de BOP-2

Verkorte Inbedrijfname handleiding G120 Firmware 4.4 met de BOP-2 Verkorte Inbedrijfname handleiding G120 Firmware 4.4 met de BOP-2 Betelnummer BOP-2: 6SL3255-0AA00-4CA1 Deze BOP-2 i gechikt voor de CU240B-2, CU240E-2 en de CU230P-2 Terugmelding hand bedrijf Terugmelding

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011 15 november 2011 Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree

Nadere informatie

Maak automatisch een geschikte configuratie van een softwaresysteem;

Maak automatisch een geschikte configuratie van een softwaresysteem; Joost Vennekens joost.vennekens@kuleuven.be Technologiecampus De Nayer We zijn geïnteresseerd in het oplossen van combinatorische problemen, zoals bijvoorbeeld: Bereken een lessenrooster die aan een aantal

Nadere informatie

Programmeren (1) Examen NAAM:

Programmeren (1) Examen NAAM: Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft

Nadere informatie

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010

Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Opdracht 1 Topics on Parsing and Formal Languages - fall 2010 Rick van der Zwet 8 december 2010 Samenvatting Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek [JS2009]

Nadere informatie

Zelftest Programmeren in COBOL - deel I

Zelftest Programmeren in COBOL - deel I Zelftest Programmeren in CBL - deel I Document: n1290test.fm 05/01/2016 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN CBL -

Nadere informatie

Beeldsensoren, wat zijn dat en wat voor objectief heb ik nodig?

Beeldsensoren, wat zijn dat en wat voor objectief heb ik nodig? Beeldenoren, wat zijn dat en wat voor objectief heb ik nodig? De beeldenor in een digitale camera kun je ook wel het hart van een camera noemen. De enor vangt het licht op en zet deze om in een digitaal

Nadere informatie

Opgaven bij Hoofdstuk 3 - Productiesystemen

Opgaven bij Hoofdstuk 3 - Productiesystemen Opgaven bij Hoofdstuk 3 - Productiesystemen Top-down inferentie In de opgaven in deze paragraaf over top-down inferentie wordt aangenomen dat de feitenverzameling alleen feiten bevat die als getraceerd

Nadere informatie

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017 Uitgebreide uitwerking Tentamen Complexiteit, juni 017 Opgave 1. a. Een pad van de wortel naar een blad stelt de serie achtereenvolgende arrayvergelijkingen voor die het algoritme doet op zekere invoer.

Nadere informatie

Uitwerkingen Tentamen Wat is Wiskunde (WISB101) Donderdag 10 november 2016, 9:00-12:00

Uitwerkingen Tentamen Wat is Wiskunde (WISB101) Donderdag 10 november 2016, 9:00-12:00 Uitweringen Tentamen Wat is Wisunde (WISB101) Donderdag 10 november 2016, 9:00-12:00 Docenten: Barbara van den Berg & Carel Faber & Arjen Baarsma & Ralph Klaasse & Vitor Blåsjö & Guido Terra-Bleeer Opgave

Nadere informatie

6.2 VBA Syntax. Inleiding Visual Basic

6.2 VBA Syntax. Inleiding Visual Basic 6.2 VBA Syntax Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. Klik te tab Hulpmiddelen voor databases Klik op Maken Macro s en Code -

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

Excel voor de beginner (4) Handleiding van Helpmij.nl

Excel voor de beginner (4) Handleiding van Helpmij.nl Excel voor de beginner (4) Handleiding van Auteur: CorVerm Juni 2008 Excel voor beginners deel 4. Zoals we in deel drie hebben beloofd gaan we het in deze ronde hebben over het geven van namen aan (een)

Nadere informatie

Derde college complexiteit. 7 februari Zoeken

Derde college complexiteit. 7 februari Zoeken College 3 Derde college complexiteit 7 februari 2017 Recurrente Betrekkingen Zoeken 1 Recurrente betrekkingen -1- Rij van Fibonacci: 0,1,1,2,3,5,8,13,21,... Vanaf het derde element: som van de voorgaande

Nadere informatie

Verslag schriftelijke adviesronde maart 2008: Conceptbesluiten deeltijd programma en overgangsregeling BSA

Verslag schriftelijke adviesronde maart 2008: Conceptbesluiten deeltijd programma en overgangsregeling BSA Verlag chriftelijke advieronde maart 2008: Conceptbeluiten deeltijd programma en overgangregeling BSA Er zijn 4 reactie ontvangen van de leden van de opleidingcommiie Nederland recht. In dit document zijn

Nadere informatie