Practicumopgaven Gerrit-Jan Jansen & Mark Meertens

Vergelijkbare documenten
Practicumopgave Mehmet Oktener

Een inleiding in de Unified Modeling Language 67

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

Eventing. Introductie. Regel verwerking. Basis structuur

Programmeermethoden NA. Week 5: Functies (vervolg)

BEGINNER JAVA Inhoudsopgave

Honours projecten BSc Informatica: twee voorstellen

Kennismaking met programmeren

Honours projecten BSc Informatica: twee voorstellen

Klaverjassen Spel Bediening

Zelftest Inleiding Programmeren

Programmeermethoden NA. Week 5: Functies (vervolg)

Het handboek van Luitenant Skat

Opmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?

Ontwerp van Algoritmen: opgaven weken 3 en 4

Project 2: LOTTO simulatie Programmeren I

Kennismaking met programmeren

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

Termherschrijfsystemen en Propositie-Algebra

Tentamenset A. 2. Welke van de volgende beweringen is waar? c. N R N d. R Z R

Door: Ruud van Eeghem Datum: juni 2008 Versie: 1.0. Handleiding gebruik EPBD GIPC tool

Tentamen Programmeren in C (EE1400)

College Introductie

Inleiding Programmeren 2

Tentamen Kunstmatige Intelligentie (INFOB2KI)

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

Tijd Winnen (een kaartspel voor vier spelers) Groep / niveau Groep 5/6

Probleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1

VBA voor Doe het Zelvers deel 20

Je kunt de kansen met wiskunde technieken berekenen (bijvoorbeeld boomdiagramman), maar je kunt ook deze door simulaties achterhalen.

Statistiek voor Natuurkunde Opgavenserie 1: Kansrekening

Maak zelf een algoritme wanneer je een auto kunt winnen en welke auto je wint.

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

opgaven formele structuren tellen Opgave 1. Zij A een oneindige verzameling en B een eindige. Dat wil zeggen (zie pagina 6 van het dictaat): 2 a 2.

Functioneel programmeren

WEES OP JE HOEDE. De beurt van de speler is voorbij wanneer hij;

SPELREGELS KLAVERJASSEN CVVB

Principe Maken van een Monte Carlo data-set populatie-parameters en standaarddeviaties standaarddeviatie van de bepaling statistische verdeling

20 Ideeën met speelkaarten

Bridge in een flits 1 De basisregels

Praktische opdracht Wiskunde A Patience

Inleiding Programmeren 2

Programmeerproject: rapportering fase II

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.

Programmeren. a. 0, 0, 0 b. 0, 0, 27 c. 15, 12, 0 d. 15, 12, 27

Hoofdstuk 5. Dobbelen, echt en virtueel. > Maak in SPSS een nieuwe data-verzameling (File > New > Data). We gaan hier de

Beslisbare talen (1) IN2505-II Berekenbaarheidstheorie. Beslisbare talen (2) Beslisbare talen (3) De talen: College 7

VHDL overzicht. Digitale Systemen (ET1 410) VHDL? VHDL? Sequentieel vs. Concurrent 2/15/2011

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

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

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Vakgroep CW KAHO Sint-Lieven

Tentamen Kansrekening en Statistiek (2WS04), dinsdag 17 juni 2008, van uur.

Semantiek (2IT40) Jos Baeten. HG 7.19 tel.: Hoorcollege 3 (12 april 2007)

Eindexamen wiskunde A1-2 vwo 2004-II

Inhoud 1 spelregelboekje 180 speelkaarten het spel bevat 2 verschillende soorten kaarten: 90 ingrediëntkaarten: 15 van elk:

Uitwerking tentamen Algoritmiek 10 juni :00 13:00

Examen VWO. wiskunde A1,2 (nieuwe stijl)

januari TTNWW Handleiding TST tools voor het Nederlands als Web services in een Workflow Meertens Instituut, Joan Muyskensweg 25, 1096 CJ Amsterdam

-- V HOOFDSTUK V STORINGSREKENING

Inleiding Programmeren 2

Inleiding programmeren

AFO 622 Kalenders Inleiding

Modelleren en Programmeren

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

Spider Solitaire is NP-Compleet

Tentamen Programmeren in C (EE1400)

II. ZELFGEDEFINIEERDE FUNCTIES

Bieden (kaartspel) Inhoud. Spelregels. Delen. Bieden. Spelverloop

Perceptive Process. Release Notes. Version: 3.5.x

Spelregels. Een rummy-achtig kaartspel voor jong en oud. Spannend tot de laatste ronde!

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

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

Discrete Structuren. Piter Dykstra Opleidingsinstituut Informatica en Cognitie

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Selenium IDE Webdriver. Introductie

Tentamen IN3105 Complexiteitstheorie

Numerieke benadering van vierkantwortels

Uitwerkingen eerste serie inleveropgaven

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?

Les 1. Het klaverjas spel wordt gespeeld met 32 speelkaarten, van de 7 oplopend tot en met de aas.

Implementatie #-operator

1.0 Algemeen 2.0 Het bieden 3.0 Het spelen 4.0 De puntentelling 1.0 Algemeen

Programmeren Blok B. Onderwerpen. wstomv/edu/2ip05/ College 8. Tom Verhoeff

ASRemote WebService. Via deze webservice kunt u:

Jijbent.nl: spelregels Stacko. Bram Schoonhoven Copyright 2019 Jijbent.nl

Algoritmen en Datastructuren 1. Functies

Lineaire Algebra voor ST

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

opgaven formele structuren deterministische eindige automaten

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

Opgaven bij Hoofdstuk 3 - Productiesystemen

Voorbeeld Examen Wiskunde C

Uitgebreide uitwerking Tentamen Complexiteit, juni 2017

Hoorcollege I: PGA en de talen PGLA en PGLB Alban Ponse

Opdracht 3: Baanintegratie: Planeet in een dubbelstersysteem

Spelidee en doel van het spel. Spelmateriaal. Op jacht naar waardevolle schatten, doorzoeken groepen avonturiers de legendarische Tempel van Luxor.

d. Maak een spreidingsdiagram van de gegevens. Plaats de x-waarden op de x-as en de z-waarden op de y-as.

Toetsen in Blackboard

Transcriptie:

Practicumopgaven Gerrit-Jan Jansen & Mark Meertens Alban Ponse Kruislaan 403, kr. 2.45 tel. 5257592 e-mail: alban@science.uva.nl Algemeen. In deze serie opgaven komt de specificatie van data typen aan de orde. Je wordt geacht de standaard-bibliotheek voor PSF te gebruiken. Alle genoemde tools, standaard-bibliotheek files en on-line manuals zijn te vinden op gene onder /home/psf/. Verdere informatie over de PSF-toolkit is te vinden op http://carol.wins.uva.nl/~psf/. Maak de opgaven aan de hand van de volgende principes: Correctheid van je antwoorden is meest belangrijk. Verder wordt helderheid geprefereerd boven beknoptheid. Van elke ingeleverde PSF specificatie mag de volgorde van herschrijfregels (equations) niet van invloed zijn op het resultaat van herschrijvingen. Dit kun je gedeeltelijk controleren met het trs -r commando. In de hiernavolgende twee pagina s enkele wenken voor de specificatie van PSF processen binnen dit practicum. 1

Het gebruik van PSF voor proces specificatie Conditional Expressions. In PSF is ook de zgn. conditional expression gedefinieerd. Deze is ook bekend onder de noemers guarded command en if - then - fi. Met deze constructie kunnen we proces-gedrag op een eenvoudige manier afhankelijk maken van data-waarden. De PSF syntax van conditional expressions is als volgt: [s = t] -> P is een proces expressie als P dat is, en s en t zijn in de betreffende module data termen van dezelfde soort. De binding van de conditional expression is sterker dan de, en zwakker dan alle andere proces-operatoren. We geven de semantiek van deze constructie eerst met behulp van een simpel voorbeeld: definitions P = sum(n in NATURAL, [even(n) = true ] -> a. Even(n) [even(n) = false] -> b. Odd(n)) Even(n) = Odd(n) = Hier is P een proces dat aftelbaar veel verschillende executies heeft: een a-stap naar Even(n) voor elke even waarde van n, en een b-stap naar Odd(n) voor elke oneven waarde van n. Een expressie als [even(n) = true ] heet ook wel een guard. Als even(n) en true in de initiele algebra gelijk zijn, dan is deze guard true, en anders false. In dit laatste geval evalueert de conditional expression naar deadlock. In het eerste geval is de guard transparant: bv. [true = true ] -> Q gedraagt zich hetzelfde als Q. De actierelaties voor de conditional expressions zijn als volgt gedefinieerd: a x x ; s = t ([s = t] -> x) x a a x ; s = t ([s = t] -> x) a Merk op dat als de guard s = t false is (in de initiele algebra), het proces [s = t] -> P geen stappen kan doen, en zich dus hetzelfde gedraagt als deadlock. De conditional expressions voldoen aan een aantal eenvoudige algebraïsche identiteiten. Zo is er bijvoorbeeld geen volgorde tussen de evaluatie van de en van de guard, dus en [s = t] -> P [s = t] -> Q [s = t] -> (P Q) beschrijven hetzelfde proces. 2

Het simuleren van PSF processen. Evenals dit het geval is met data modules, kunnen proces modules met het commando psf worden gecompileerd naar TIL zie verder de manual pages). De simulator werkt op de door psf gegenereerde TIL file van een process module, en geeft de gebruiker de gelegenheid om stap voor stap elk gedefinieerd proces te executeren. Alle volgende acties die een geselecteerd proces kan doen, worden in een menu opgesomd. Het selecteren van één van deze alternatieven brengt het proces in de volgende toestand. Een probleem dat hierbij kan optreden wordt geïllustreerd aan de hand van het proces P, als hierboven gedefinieerd. Dit proces start immers met een keuze uit aftelbaar veel acties, en is derhalve niet simuleerbaar. De oplossing die we in het practicum gebruiken is tamelijk simpel. Voor simulatie-doeleinden passen we specificaties op de volgende manier aan: in plaats van definitions P = sum(n in NATURAL, [even(n) = true ] -> a. Even(n) [even(n) = false] -> b. Odd(n)) Even(n) = Odd(n) = specificeren we sets of NATURAL NAT-SET = { nat(^0), nat(^1), nat(^2), nat(^3), nat(^4), nat(^5), nat(^6), nat(^7), nat(^8), nat(^9), nat(^1^0) } definitions P = sum(n in NAT-SET, [even(n) = true ] -> a. Even(n) [even(n) = false] -> b. Odd(n)) Even(n) = Odd(n) = waarmee we in dit voorbeeld de eerste 11 mogelijke stappen van P simuleren. In het algemeen is het specifiek toevoegen van een eindige (willekeurige) simulatie-set voor elke oneindige soort, het veranderen van de de betreffende soort in de scope van een sum-operator afdoende om simuleerbare specificaties te krijgen. Het is in dit practicum steeds de bedoeling dat simuleerbare proces modules worden ingeleverd. Een precieze beschrijving van het gebruik van de simulator is te vinden in de on-line manual; het betreffende commando heet sim. 3

Practicumopgave 1. Het kaartspel. In deze opgave beschouwen we het kaartspel, waar een eenvoudig spel speelkaarten als volgt kan worden omschreven: 1. De kaarten zijn verdeeld over de 4 kleuren harten, ruiten, schoppen en klaveren. 2. Van elke kleur zijn er 13 kaarten, in rangvolgorde oplopend de twee, de drie,, de tien, de boer, de vrouw, de heer en de/het aas. Dus bv. ruiten-vier is een speelkaart, en er zijn 52 speelkaarten. Van deze opgave is de bedoeling om zonder een enkele voorgedefinieerde datastructuur (behalve die in psflib) de gestelde vragen te beantwoorden. a. Maak een PSF data module Kaartspel waarin de signatuur van een spel speelkaarten wordt gedefinieerd. Typeer ook de hieronder opgesomde basisvaardigheden die bij het omgaan met speelkaarten horen. Specificeer zo modulair mogelijk, zo dat bv. het verrijken van een kaartspel met twee jokers, of het werken met een subset van het kaartspel minimale wijzigingen met zich meebrengt. 1. Het testen van de rangvolgorde van twee kaarten van dezelfde kleur. 2. Het selecteren van de hoogste harten kaart uit een subset van het kaartspel. 3. Het verdelen van k kaarten over n spelers. Het is de bedoeling dat iedere speler evenveel kaarten krijgt. 4. Het schudden van het kaartspel (= aanbrengen van een random volgorde van de speelkaarten). Standaard datatypen zoals Booleans, Naturals, Strings etc. die je nodig hebt dienen uit psflib te komen, en niet zelf gedefinieerd te worden. b. Breid nu de signatuur gedefinieerd in 3.a uit met equations die bovenstaande vaardigheden definieren. Laat sorts waarvan een eindig aantal elementen nodig is, ook werkelijk eindig veel elementen bevatten. N.B. Het schudden van kaarten is natuurlijk niet echt te definieren. Een suggestie is om dit te simuleren door het k malen achtereenvolgens toepassen van een functie hulp-schudden (op een al dan niet geordend kaartspel) met als correctheidscriterium dat elke volgorde 1 in het bereik van iteraties van hulp-schudden voorkomt. c. Beargumenteer (in bijgeleverd commentaar) dat je definitie van schudden een redelijke benadering van eerlijk schudden is. Practicumopgave 2. Deze opgave gaat over het specificeren van een eenvoudig kaartspelletje, genaamd éénentwintigen. Eerst de regels voor het éénentwintigen zoals gelden voor deze opgave: dit is een spel voor twee personen, de kaarten krijgen de volgende punten waarden: elke aas heeft waarde 1 of 11 (naar keuze van de speler), elke boer, vrouw en heer is 10 punten waard, elke 2, 3,, 10 is het aantal punten waard dat de rang aangeeft, 1 Een geordend kaartspel (van 52 speelkaarten) heeft 52! mogelijke volgordes. 4

elke speler krijgt een beginkaart uit een geschud en volledig spel speelkaarten zonder jokers, er wordt verder ofwel om beurten een kaart getrokken; ofwel een speler past, waarna alleen nog de ander achter elkaar kaarten mag trekken, zodra beide spelers hebben gepast, is het spel afgelopen en de waarden van de verkregen kaarten worden (per speler) bij elkaar opgeteld, de bedoeling van het spel is om een eindstand van ten hoogste 21 te bereiken. De speler met de hoogste eindstand (maximaal 21) heeft gewonnen, een speler met meer dan 21 punten is dood, en tenslotte is bij gelijke eindstanden of twee maal dood het spel onbeslist. Specificeer het spel éénentwintigen in een proces module Spel die hieronder deels wordt gegeven. deze code is te vinden in ~alban/pa/21en. Specificeer zodanig dat bij simulatie alleen communicatieacties, en de acties 1-wint tot en met onbeslist kunnen voorkomen. In het proces Stock komen een constante standard-stock en een aantal functies voor (die je zelf moet specificeren). Deze constante representeert een volledig kaartspel. De functie top levert van een stock de bovenste (eerste) kaart. De functie rank levert dan de waarde van een kaart voor het éénentwintigen; een aas moet dan ofwel waarde 1, ofwel waarde 11 krijgen. De functie rest levert van een stock dezelfde stock minus de bovenste kaart. De parameter k in het Stock proces dient om verschillende iteraties van shuffle te testen. Het is expliciet de bedoeling om de model-oplossing van de module Kaartspel te gebruiken. Deze laatste is te vinden in ~alban/pa/uitw. Tracht Speler-2 zodanig te specificeren dat deze meer kans heeft om te winnen dan Speler-1, met name de verschillende waarden van een aas geven hier mogelijkheden. Het vervolg van de opdracht is om via simulatie de totale, gecombineerde eindstand te berekenen van een aantal spelletjes éénentwintigen zoals je dit spel hebt gespecificeerd. Doe dit door de onderstaande process module Spelen aan te vullen (te vinden in ~alban/pa/21en). Geef voor verschillende k een aantal simulatie uitkomsten. process module Spel begin exports begin atoms bovenste : NATURAL -- Stock proces einde-stock trek-1 -- Speler-1 en Speler-2 trek-2 r1 : NATURAL r2 : NATURAL pas-1 pas-2 einde-sp-1 : NATURAL einde-sp-1 einde-sp-2 : NATURAL einde-sp-2 lees-kaart-1 -- en resulterende communicaties lees-kaart-2 sp-1-past -- Permissie-1-2, Permissie-1 en Permissie-2 sp-1-trekt sp-2-past sp-2-trekt pak-1 -- en resulterende communicaties 5

pak-2 PAS-1 PAS-2 stock-klaar -- Permissie-stopt sp-1-stopt : NATURAL sp-1-stopt sp-2-stopt : NATURAL sp-2-stopt 1-wint: NATURAL # NATURAL 2-wint: NATURAL # NATURAL 1-wint: NATURAL 2-wint: NATURAL onbeslist: NATURAL # NATURAL onbeslist stock-sluit -- en resulterende communicaties berekenen processes Spel Speler-1 Speler-2 Stock : NATURAL # STOCK Permissie-1-2 sets of NATURAL NATURAL-set = {nat(^1),nat(^2),nat(^3),nat(^4),nat(^5),nat(^6),nat(^7), --.., nat(^3^0),nat(^3^1)} end imports Kaartspel processes Spel : NATURAL Speler-1 : NATURAL Speler-2 : NATURAL Permissie-stopt Permissie-1 Permissie-2 sets of atoms H = {trek-1 --,. } communications bovenste(k) r1(k) = lees-kaart-1 for k in bovenste(k) r2(k) = lees-kaart-2 for k in sp-1-trekt trek-1 = pak-1 sp-2-trekt trek-2 = pak-2 sp-1-past pas-1 = PAS-1 sp-2-past pas-2 = PAS-2 einde-stock stock-klaar = stock-sluit einde-sp-1 sp-1-stopt = berekenen einde-sp-2 sp-2-stopt = berekenen einde-sp-1(n) sp-1-stopt(n) = berekenen for n in einde-sp-2(n) sp-2-stopt(n) = berekenen for n in variables k,l,m,n: -> NATURAL st : -> STOCK 6

definitions Spel = Spel(nat(^1^3)) Spel(k) = encaps(h, Stock(k,standard-stock) Permissie-1-2 Speler-1 Speler-2) -- k is hier een "vrije" parameter om het schudden echter te maken: Stock(k,st) = ([gt(k, nat(^0)) = true] -> Stock(k - nat(^1),shuffle(st))) ([eq(k, nat(^0)) = true] -> bovenste(rank(top(st))). Stock(nat(^0),rest(st))) einde-stock Permissie-1-2 = sp-1-past. (sp-2-trekt. Permissie-2 sp-2-past. Permissie-stopt) sp-1-trekt. (sp-2-trekt. Permissie-1-2 sp-2-past. Permissie-1) Permissie-1 = sp-1-past. Permissie-stopt sp-1-trekt. Permissie-1 Permissie-2 = sp-2-past. Permissie-stopt sp-2-trekt. Permissie-2 Permissie-stopt = stock-klaar. ( sp-1-stopt. (sum(k in NATURAL-set, sp-2-stopt(k). 2-wint(k)) sp-2-stopt. onbeslist) sum(k in NATURAL-set, sp-1-stopt(k). (sum(l in NATURAL-set, sp-2-stopt(l). ( ([gt(k,l) = true] -> 1-wint(k,l)) ([lt(k,l) = true] -> 2-wint(k,l)) ([eq(k,l) = true] -> onbeslist(k,l))) sp-2-stopt. 1-wint(k))))) Speler-1 = Speler-1(nat(^0)) Speler-1(n) = ([lte(n, nat(^1^3)) = true] -> trek-1. sum(m in NATURAL-set, r1(m). ([lte(n m, nat(^2^1)) = true] -> Speler-1(n m) [gt(n m, nat(^2^1)) = true] -> pas-1. einde-sp-1))) ([and(gt(n, nat(^1^3)),lte(n, nat(^2^1))) = true] -> pas-1. einde-sp-1(n)) ([gt(n, nat(^2^1)) = true] -> pas-1. einde-sp-1) Speler-2 = Speler-2(nat(^0)) -- Speler-2(n) =. end Spel 7

process module Spelen begin exports begin atoms Eindstand : NATURAL # NATURAL --.. processes Simulatie : NATURAL # NATURAL # NATURAL # NATURAL --.. end imports Kaartspel, Spel sets of atoms H1 = H --.. communications 1-wint(k) winnaar-1 = 1-heeft-gewonnen(k) for k in. 1-wint(k,l) winnaar-1 = 1-heeft-gewonnen(k,l) for k in., l in. 2-wint(k) winnaar-2 = 2-heeft-gewonnen(k) for k in. 2-wint(k,l) winnaar-2 = 2-heeft-gewonnen(k,l) for k in., l in. onbeslist geen-winnaar = fifty-fifty --.. definitions Simulatie = Spelen(nat(^3),nat(^3),nat(^0),nat(^0)) -- -- -- vrije par. # spelletjes eindstand 1 eindstand 2 Spelen(k,l,m,n) = [gt(l, nat(^0)) = true] -> ( encaps(h, Stock(k,standard-stock) Permissie-1-2 Speler-1 Speler-2 ( winnaar-1. Spelen(k,l - nat(^1),m nat(^1),n) winnaar-2. Spelen(k nat(^1),l - nat(^1),m,n nat(^1)) onbeslist. Spelen(k,l - nat(^1),m,n))) ) [eq(l, nat(^0)) = true] -> ( encaps(h, Stock(k,standard-stock) Permissie-1-2 Speler-1 Speler-2 ( winnaar-1. Eindstand-1-2(m nat(^1),n) winnaar-2. Eindstand-1-2(m,n nat(^1)) onbeslist. Eindstand-1-2(m,n))) ) end Spelen 8