Implementatie van Programmeertalen (IPT) 4 mei 2001

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

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

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

11. Eenvoudige programma s schrijven in Maxima

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

Tentamen Programmeren in C (EE1400)

VOORBLAD SCHRIFTELIJKE TOETSEN

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Wiskundige Analyse I. Hoofdstuk 1. Vraag 1.1 Het beginvoorwaardenprobleem. x 2 y + xy + x 2 y = 0, y(0+) = 1, y (0+) = 0. bezit een unieke oplossing.

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Programmeren in C++ Efficiënte zoekfunctie in een boek

Veel succes! 1. Gegeven is de volgende klasse:

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

Ontwerp van Algoritmen: opgaven weken 3 en 4

Programmeren in Java les 3

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

VOORBLAD SCHRIFTELIJKE TOETSEN

NAAM: Programmeren 1 Examen 29/08/2012

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

IMP Uitwerking week 13

Game of Life in Java

Programmeren (1) Examen NAAM:

Tentamen Programmeren in C (EE1400)

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

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

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

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

Een eenvoudig algoritme om permutaties te genereren

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

Tweede college algoritmiek. 12 februari Grafen en bomen

Korte uitleg: Wat doet de shell met mijn commandoregel?

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur

Oefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer:

Examen VWO - Compex. wiskunde A1

7 Omzetten van Recursieve naar Iteratieve Algoritmen

Cursus Algoritmiek najaar 2005

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

ALGORITMIEK: antwoorden werkcollege 5

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Informatie. Voorbeeld. Voorbeeld: toegangsprijs

Variabelen en statements in ActionScript

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Tentamen in2505-ii Berekenbaarheidstheorie

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

College Notatie, Recursie, Lijsten

10. Controleopdrachten

1 Inleiding in Functioneel Programmeren

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Logisch en Functioneel Programmeren voor Wiskunde D

II. ZELFGEDEFINIEERDE FUNCTIES

Tentamen Imperatief Programmeren

Logica voor Informatici najaar 2000 Opgaven en Oplossingen Hoofdstuk 3

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

Algoritmisch Denken: Dodo s Bit Parity

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, uur

Tussentijdse toets Expertsystemen

Tiende college algoritmiek. 26 april Gretige algoritmen

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

Datastructuren: stapels, rijen en binaire bomen

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Tentamen in2205 Kennissystemen

Toetsvoorbereiding Informatica HAVO/VWO 5 (T51) Programmeren met Python II. Duur: 70 minuten Datum: sept 2018

REEKS I. Zaterdag 6 november 2010, 9u

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

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

HomeOffice to ASCII Teksten converteren

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

Inleiding tot Func.oneel Programmeren les 3

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

Universiteit Utrecht Faculteit Wiskunde en Informatica. Examen Optimalisering op maandag 18 april 2005, uur.

Inleiding Programmeren 2

Tentamen Inleiding Programmeren (IN1608WI), duur van de toets 2 uur Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeren in Java 3

[8] De ene 1 is de andere niet

Programmeermethoden. Controle-structuren. Walter Kosters. week 3: september kosterswa/pm/

Zelftest Inleiding Programmeren

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Elk vermoeden van fraude wordt gemeld bij de examencommissie.

Datum, Tijd en Timer-object

Opdracht 5: Dodo wordt slimmer

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

TECHNISCHE UNIVERSITEIT EINDHOVEN. Faculteit Wiskunde en Informatica

Tentamen Programmeren in C (EE1400)

Opdracht 4: Overzichtelijker en generieker

Automaten & Complexiteit (X )

Succes! Theo DʼHondt 13 juni 2010

Computerarchitectuur en netwerken. Memory management Assembler programmering

College Introductie

Lees onderstaande goed door. Je niet houden aan de instructies heeft direct gevolgen voor de beoordeling.

Opdracht 4: Overzichtelijker en generieker

TECHNISCHE UNrVERSITElT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica

Info-books. Toegepaste Informatica. Handleiding. Deel 40c : Gegevensbeheer en algoritmen in Access. HA40c. Jos Gils Erik Goossens

Transcriptie:

Informatica Instituut, Faculteit Wiskunde en Informatica, UU. In elektrosche vorm beschikbaar gemaakt door de TBC van A Eskwadraat. Het college IPT werd in 2000/2001 gegeven door Drs. A. Dijkstra en Drs. J. Hage. Implementatie van Programmeertalen (IPT) 4 mei 2001 Schrijf op elk ingeleverd blad je naam, en op het eerste blad ook je collegekaartnummer en het aantal ingeleverde bladen. Alle opgaven van de test tellen ongeveer even zwaar, maar grote deel-opgaven kunnen zwaarder tellen dan kleine. Bonus onderdelen geven bij correcte beantwoording extra punten bovenop de beoordeling van de overige onderdelen en tellen (bij foutieve beantwoording) et negatief mee. Resultaten uit eerdere (deel)opgaven mag je gebruiken in latere opgaven, ook als je de eerdere opgave et gemaakt hebt. Schrijf leesbaar, et met potlood of rode pen, vooral in programmafragmenten; formuleer kort maar duidelijk in tekstfragmenten. Onleesbare teksten kunnen bij het nakijken worden genegeerd. Belangrijk is dat het antwoord intern consistent, en helder is. 1 Gebruik van het AG systeem. In deze opgave wordt van een lijst met strings een nette listing gemaakt waarbij de vorm van de listing aangepast is aan de beschikbare hoeveelheid ruimte. De listing bestaat uit kolommen. De breedte van alle kolommen is gelijk. Het aantal regels dat door de listing in beslag wordt genomen is mimaal onder de randvoorwaarde dat de listing qua breedte past in de beschikbare ruimte en per kolom genoeg ruimte biedt voor het grootste woord uit de lijst. De uitzondering hierop is het geval waarin slechts ruimte voor 1 kolom is, dan mag die ene kolom breder zijn dan de beschikbare breedte maar et breder dan nodig is om het grootste woord te kunnen tonen. Als voorbeeld wordt de lijst ["aap", "noot", "mies", "foo", "bar", "p", "q"] gebruikt. Deze lijst wordt bij een beschikbare breedte van 25 characters afgedrukt als: aap noot mies foo bar p q bij een breedte van 15 als: aap noot mies foo bar p q en tenslotte bij een breedte van 5 als: aap noot mies foo

bar p q Gebruik als startpunt voor deze opgave de volgende onvoltooide oplossing: \begin{hs} makeabstrsyntree l = sem_root_root (foldr sem_words_cons sem_words_nil l) test1list = ["aap", "noot", "mies", "foo", "bar", "p", "q"] test1tree = makeabstrsyntree test1list main = putstr test1tree spaces n = replicate n \end{hs} \begin{ag} DATA Root Root words: Words DATA Words Nil Cons word: String words: Words SEM Root [ txt: String ] Root LHS.txt = words_txt SEM Words [ txt: String ] Nil LHS.txt = "" Cons LHS.txt = " " ++ word ++ " \n" ++ words_txt \end{ag} Deze oplossing genereert de volgende uitvoer (bij aanroep van main): aap noot mies foo bar p q De opgave bestaat uit het completeren van de AG beschrijving zodat aan de probleemomschrijving voldaan wordt. Hierbij moet in eerste instantie het AG systeem gebruikt worden. Haskell mag gebruikt worden waar dat nodig is. Ook is het et de bedoeling dat in Root de complete berekeng van de af te drukken tekst plaatsvindt. Dat betekent bijvoorbeeld ook dat het produceren van het stukje tekst voor een enkel woord alleen plaatsvindt in het Cons alternatief van SEM Words (zoals ook in de gegeven startversie gedaan is). Completeer de AG beschrijving zodat: 1. alle verticale strepen onder elkaar staan. (Hint: hiervoor moet allereerst berekend worden hoe breed een kolom moet zijn)

2. de vorm van de listing bepaald wordt door de beschikbare breedte. De breedte kan alsvolgt worden meegegeven aan het door het AG systeem gegenereerde programma: main = putstr (test1tree 15)... SEM Root [ totalwidth: Int txt: String ]... 3. in het geval er minder woorden dan plaatsen in de tabel zijn, de lege plaatsen met spaties opgevuld worden. Dit is bijv het geval bij het voorbeeld waarin 7 woorden worden getoond in een tabel van 2x4 of 4x2. 2 Stackmachine code generatie. Gegeven het volgende SL programma: let y :: Int = 1 ; f1 :: Int -> Int = \x -> x + y ; f2 :: (Int->Int) -> Int -> Int = \f y -> let ff2 :: Int -> Int = \y -> f1 y in if y > 0 then f2 ff2 (y-1) else f 1 fi in f2 f1 3 In deze opgave wordt uitgegaan van de SLcg compilerversie. 1. Wat is de uitkomst van dit programma? 2. Teken de stacklayout zoals deze door SSM opgebouwd is op het moment dat f2 voor de 2e keer is aangeroepen en op het punt staat de body van f2 uit te voeren. Geef in de stacklayout duidelijk de locaties van geredde programcounters (ofwel return adressen), geredde (previous) markpointers, static links en variabelen aan. Geef eveneens duidelijk met pijlen aan waar de gebruikte registers (SP, MP) en de genoemde waardes naar wijzen. Geef (tenslotte) ook duidelijk aan wat de displacement van de diverse variabelen is. 3. Schrijf de SSM code van f2 op. De defitie van ff2 hoeft et opgeschreven te worden. 4. De functie f1 kan ook als volgt worden gedefieerd: let y :: Int = 1 ; addto :: Int -> (Int -> Int) = \z -> let add :: Int -> Int = \x -> x + z in add ; f1 :: Int -> Int = addto y ; f2 :: (Int->Int) -> Int -> Int = \f y -> let ff2 :: Int -> Int = \y -> f1 y in if y > 0 then f2 ff2 (y-1) else f 1

in f2 f1 3 fi De SLcg compiler geeft hierover foutmeldingen om te waarschuwen voor deze constructie. Voor dit onderdeel worden die foutmeldingen genegeerd. De gegenereerde code werkt namelijk wel en levert bij uitvoering ook een waarde op, doch et de juiste (d.w.z dezelfde als in het eerste onderdeel van deze opgave). Waarom wordt et de juiste waarde opgeleverd? 3 Type systemen. Waar relevant wordt in deze opgave uitgegaan van de SLti compilerversie. 1. Geef U(T 1, T 2 ), de uficatie van de typen T 1 en T 2, waarbij (a) T 1 = a a b en T 2 = Int c, (b) T 1 = (a a) a en T 2 = a a a. Geef in alle gevallen aan hoe je aan je antwoorden komt. 2. Geef de type inferentie regel voor de lambda abstractie en leg uit hoe deze werkt. Leg met name uit hoe omgegaan wordt met het feit dat we vooraf het type van de parameter nog et kennen. 3. Geef een type inferentieboom voor het volgende SL programma: let k = \x -> \y -> x in k (True, k 4) Tip: geef om het geheel overzichtelijk te houden de verschillende environments en relaties tussen geintroduceerde typevariabelen buiten de boom aan. 4. Gegeven is de volgende situatie in een inferentieboom bij het toepassen van Cond regel: Cond : Γ e 1 : v 2 Γ e 2 : v 2 v 1 Int Γ e 3 : v 4 (v 4, v 5 ) v 5 Γ if e 1 then e 2 else e 3 fi : a Geef precies aan hoe het type a van if e 1 then e 2 else e 3 fi bepaald kan worden op basis van de gegeven typen van e 1, e 2 en e 3 en geef bovenstaande regel zoals deze uiteindelijk ontstaat. 5. Het volgende stukje AG-code implementeert op foutieve wijze de Cond regel. SEM Expr If LOC. (csubst, cetp, cemsg) = ufymsg booltype ce_tp LOC. (rsubst, tp, msg) = ufymsg (ee_subst => te_tp) ee_tp LHS. subst = rsubst ee_subst LHS. tp = tp Geef aan de hand van het vorige onderdeel aan waarom dit mis gaat, en verbeter de AG-code. 6. Gegeven de volgende variant op de Let regel uit het dictaat: Let : Γ expr : t (Γ id) (id : t) body : b Γ let id = expr in body : b

Leg uit wat de verschillen zijn met de regel uit het dictaat en wat voor effect deze verschillen hebben. Geef ter illustratie bijvoorbeeld programmaatjes die met bovenstaande regel et getypeerd kunnen worden, maar wel met de regel uit het dictaat. 7. Bonus: Zijn er programma s die met behulp van de Let regel uit het vorige onderdeel wel correct getypeerd kunnen worden, maar met de oorspronkelijke et? Zo ja, welke, zo nee waarom et?