TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

Relevanta dokument
TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

FACIT TILL TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15

FACIT TILL OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

FACIT TILL OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

FACIT TILL OMTENTAMEN I PROGRAMSPRÅK DVG C01

FACIT TILL OMTENTAMEN I PROGRAMSPRÅK DVG C kl. 08:15-13:15

Tentamen Programmering fortsättningskurs DIT950

FACIT TILL/TO DVG C01 OMTENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES RESIT EXAMINATION :15-13: 15

Tentamen Grundläggande programmering

DAT043 Objektorienterad Programmering

Tentamen i Grundläggande programmering STS, åk 1 lördag

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen i. TDDA 69 Data och programstrukturer

Grammatik. BNF-grammatik

Tentamen i Objektorienterad modellering och design Helsingborg

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

Tentamen i Grundläggande programmering STS, åk 1 fredag

Inlämningsuppgift MiniPlotter

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:15 19:15

OOP Tentamen

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Exempel på användning av arv: Geometriska figurer

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Tentamen i Grundläggande programmering STS, åk 1 fredag

Tentamen i Objektorienterad modellering och design

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen FYTA11 Javaprogrammering

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Arv och polymorfism i Java

Föreläsning 3. Stack

Att skriva till och läsa från terminalfönstret

Dugga i Grundläggande programmering STS, åk

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tentamen i Programmeringsteknik I

Föreläsning 3. Stack

Tentamen i. TDDC67 Funktionell programmering och Lisp

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Föreläsning 12: Exempel och problemlösning

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Lösningsförslag till exempeltenta 2

Alfabeten, strängar och språk. String

Sätt att skriva ut binärträd

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Programmering för språkteknologer II, HT2011. Rum

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Tentamen i Objektorienterad modellering och design Helsingborg

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen, EDA501 Programmering M L TM W K V

Tentamen i Grundläggande programmering STS, åk

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

12. Relationer och funktioner

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Tentamen, EDAA10 Programmering i Java

TDDD78 Viktiga begrepp, del 2

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Tentamen i Grundläggande programmering STS, åk

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Objektorienterad programmering i Java

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

public boolean containskey(string key) { return search(key, head)!= null; }

Tentamen i Grundläggande Programvaruutveckling, TDA548

Lösningar till tentamen i EDAF25

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Kopiering av objekt i Java

Föreläsning 2. Länkad lista och iterator

OOP Tentamen

Laboration 13, Arrayer och objekt

Classes och Interfaces, Objects och References, Initialization

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Lösningsförslag till tentamen

Objektorienterad programutveckling, fk

List.java. List.java. Printed by Tom Smedsaas

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Transkript:

TENTAMEN I PROGRAMSPRÅK -- DVG C01 130607 kl. 08:15-13: 15 Ansvarig Lärare: Donald F. Ross Hjälpmedel: Bilaga A: BNF-definition Betygsgräns: Kurs: Max 60p, Med beröm godkänd 50p, Icke utan beröm godkänd 40p, Godkänd 30p (varav minimum 20p från tentan, 10p från labbarna) Tenta: Max 40p, Med beröm godkänd 34p, Icke utan beröm godkänd 27p, Godkänd 20p Labbarna: Max 20p, Med beröm godkänd 18p, Icke utan beröm godkänd 14p, Godkänd 10p SKRIV TYDLIGT LÄS UPPGIFTERNA NOGGRANT 1. Ange kortfattade svar på följande uppgifter: (a) Ge en definition av (i) aktuell parameter samt (ii) formell parameter (b) Förklara skillnaden mellan A och A i Lisp. (c) Förklara skillnaden mellan begreppen syntax och semantiken. (d) Vilken roll spelar typ i programspråk? (e) Vad är skillnaden mellan lifetime och scope? (f) Vad är ett 3G -programmeringsspråk? (g) Vad är flödeskontroll ( flow-of-control )? (h) Förklara definitionen G = (S, P, NT, T). (i) Vad är en RDPP ( Recursive Descent Predictive Parser )? (j) Vad är skillnaden mellan den lokala omgivningen ( local environment ) och den ickelokala omgivningen ( non-local environment )? Totalt 10p 2. BNF-definitioner Titta noggrant på grammatiken i bilaga A. Utöka denna BNF-definition för att hantera funktioner. Ange alla antagande. 5p 3. Diskussion - Rekursion Vilken roll spelar rekursion i både programspråk samt programparadigmer? Använd gärna konkreta exempel i ditt svar. Svar ingående. 5p DFR/EJN/ND 130607 PS tentamen Sidan 1 av 12

4. Exekveringstidsystem ( Run-time System ) Givet programmet nedan, förklara ingående förhållandena mellan programmets text (källkoden), symboltabellen och hur den exekveringsstack hanteras under programexekvering. Ange alla antagande. 5p program xyz (input, output); var a, b, c: integer; p, q: boolean; integer function x(fp1: integer, fp2: integer); begin var i: integer; integer function y(fp1: integer, fp2: integer); var i: integer; begin i := fp1 * fp2; return i; end y. begin i := y(fp1, fp2) + y(fp1, fp2); return i; end x. a := 2; b := 3; c := x(a, b); print c; end xyz. DFR/EJN/ND 130607 PS tentamen Sidan 2 av 12

Uppgiften fattades från den ursprungliga tentan. Upptäckt kl 08:05 130607. Levererades separat till tentalokalen 130607 08:30 5. Parseträd expr -> term R1 R1 -> e '+' term R1 term -> factor R2 R2 -> e '*' factor R2 factor -> '(' expr ')' DIGIT (e = empty) Titta noggrant på grammatiken ovan. Rita parseträdet för uttrycket (2+2)*2. 5p DFR/EJN/ND 130607 PS tentamen Sidan 3 av 12

6. Prolog a) Predikat Skriv predikatet langd(+lista,-antal), som tar Lista som inparameter och returnerar antalet element i Lista genom parametern Antal Exempel:?- langd([a, b, c], X). X = 3 (1 p) b) Laborationen I laboration 2 skulle du skriva en parser för ett enkelt Pascalprogram. Parsningsprogrammet kunde delas upp i tre delar: inläsning från fil, lexikalanalys och syntaxanalys. Lexikalanalysdelen fick en lista med fyra typer av lexem (= nyckelord, specialtecken, variabelnamn och heltal) från inläsningsdelen och den listan omvandlades ett lexem i taget till en lista av tokens för vidare behandling i syntaxanalysdelen. a) Skriv predikatet lexer som med hjälp av predikatet match gör om ett lexem i taget till motsvarande token. (1 p) b) Beskriv utförligt, gärna med hjälp av kod, hur match gör omvandlingen till tokens. Beskrivningen skall innehålla minst tre olika typer av lexem. (3 p) Totalt 5p DFR/EJN/ND 130607 PS tentamen Sidan 4 av 12

7. Objektorientering 5 poäng: Följande UML-diagram visar en del av ett system för ritning av grafiska figurer. <<abstract>> GraphicItem Drawing +add(graphicitem) +at(index: int): GraphicItem +drawon(agraphicscontext) +draw() -items * +GraphicItem(location: Point) <<abstract>>+drawon(agraphics) <<abstract>>+extent(): Dimension <<abstract>>+rotate(degrees: int) +location(): Point +setlocation(location: Point) +moveby(distance: Dimension) +moveby(deltax: int, deltay: int) +clone(): GraphicItem Point -location +x: int 1 +y: int Circle -radius:double +Circle(center: Point, radius: int) +radius(): int +extent(): Dimension +drawon(agraphics) +rotate(degrees: int) Line +Line(origin: Point, end: Point) +end(): Point +extent(): Dimension +drawon(agraphics) +rotate(degrees: int) Dimension -extent +width: int 1 +height: int Som ett komplement till klassdiagrammet ges även några delar av koden som är relevanta för uppgiften, för alla klasser bortsett från Point (med x och y) och Dimension (med width och height) med uppenbar innebörd. Koden innehåller vissa invarianter samt för- och eftervillkor som behövs för att lösa uppgiften. All övrig information finns i klassdiagrammen. Koden ges som en livlina om du inte är säker på tolkningen av diagrammen. Frågorna kommer efter koden. DFR/EJN/ND 130607 PS tentamen Sidan 5 av 12

class Drawing: package drawing; import core.designbycontract; import java.util.*; public class Drawing { private List<GraphicItem> items = new ArrayList<GraphicItem>(); public void add(graphicitem itemnotnull) { DesignByContract.precondition(itemNotNull!= null, "Attempt to add null item"); items.add(itemnotnull); public GraphicItem at(int zerobasedindex) { return items.get(zerobasedindex); public void drawon(graphics graphicscontextnotnull) { for (GraphicItem item : items) { item.drawon(graphicscontextnotnull); public void draw() { drawon(getgraphics()); public Graphics getgraphics() { // return a graphic surface to draw on, for instance the screen or printer surface // set aside for the drawing DFR/EJN/ND 130607 PS tentamen Sidan 6 av 12

class GraphicItem: package drawing; import core.designbycontract; public abstract class GraphicItem implements Cloneable { private Point locationnotnull; public GraphicItem(Point locationnotnull) { DesignByContract.precondition(locationNotNull!= null, "Location is null"); setlocation(locationnotnull); abstract public Dimension extentnotnull(); abstract void drawon(graphics graphicscontextnotnull); abstract public void rotate(int degrees); public Point locationnotnull() { return locationnotnull; public void setlocation(point locationnotnull) { this.locationnotnull = locationnotnull; public void moveby(dimension distance) { setlocation(locationnotnull().plus(distance)); public void moveby(int deltax, int deltay) { moveby(new Dimension(deltaX, deltay)); public GraphicItem clone() throws CloneNotSupportedException { return (GraphicItem)super.clone(); // a shallow copy of myself DFR/EJN/ND 130607 PS tentamen Sidan 7 av 12

class Circle: package drawing; import core.designbycontract; /** * @invariant super.locationnotnull() is my center */ class Circle extends GraphicItem { private int radiusnonnegative; public Circle(Point centernotnull, int radiusnonnegative) { super(centernotnull); // must be first statement DesignByContract.precondition(radiusNonNegative >= 0, "Radius negative"); this.radiusnonnegative = radiusnonnegative; private int radiusnonnegative() { return radiusnonnegative; public Dimension extentnotnull() { return new Dimension(2 * radiusnonnegative(), 2 * radiusnonnegative()); public void drawon(graphics graphicscontextnotnull) { // code to draw me on the surface given by the graphics context public void rotate(int degrees) { DFR/EJN/ND 130607 PS tentamen Sidan 8 av 12

class Line: package drawing; import core.designbycontract; /** * @invariant super.locationnotnull() is my origin, end is the other endpoint */ class Line extends GraphicItem { private Dimension extentnotnull; public Line(Point originnotnull, Point endnotnull) { super(originnotnull); // must be first statement DesignByContract.precondition(endNotNull!= null, "Line endpoint is null"); extentnotnull = endnotnull.minus(originnotnull); public Point endnotnull() { return locationnotnull().plus(extentnotnull()); public Dimension extentnotnull() { return extentnotnull; public void drawon(graphics graphicscontextnotnull) { // code to draw me on the surface given by the graphics context public void rotate(int degrees) { // code to rotate me around my origin A. Var i detta system utnyttjas följande objekt-orienterade mekanismer? Ge om möjligt minst ett precist, konkret exempel för varje mekanism. Det räcker inte att bara säga t.ex. att en mekanism används i klass si och så, utan du ska precisera på vilket sätt den utnyttjas. Om en mekanism utnyttjas på mer än ett ställe ska två exempel ges, om möjligt från två olika klasser. Om en mekanism inte används ska du kort beskriva vad den innebär och ev relatera till vad som gör att den inte tillämpas i exemplet. Fullständiga svar ger 0,5 poäng var, ofullständiga svar ger noll poäng. (2p) a) polymorfism b) arv c) delegering d) omdefiniering (overriding) DFR/EJN/ND 130607 PS tentamen Sidan 9 av 12

B. Metoden main i Drawing ser ut som följer. Rita upp resultatet vid referens (1) resp (2). Rikta x-axeln åt höger. Du kan välja att rikta y-axeln uppåt och rotera moturs eller rikta y- axeln neråt och rotera medurs. Varje korrekt ritning ger 0,5 poäng. (1p) public static void main(string[] args) { Drawing thedrawing = new Drawing(40, 40); Line aline = new Line(new Point(10, 20), new Point(30, 20)); // origin, end Circle acircle = new Circle(new Point(20, 20), 10); // center, radius thedrawing.add(aline); thedrawing.add(aline); thedrawing.add(acircle); thedrawing.draw(); // Referens (1) enjoytheartworkfor(2000); // milliseconds thedrawing.at(1).moveby(10, -10); // deltax, deltay thedrawing.at(1).rotate(90); // degrees around origin thedrawing.draw(); // Referens (2) C. Vad innebär följande designprinciper? Peka även ut minst ett ställe i lösningen där resp princip tillämpas, eller identifiera ifall den inte tillämpas i den här lösningen (2p) a) Single Responsibility Principle b) High Cohesion c) Low Coupling d) Single Choice Totalt 5p DFR/EJN/ND 130607 PS tentamen Sidan 10 av 12

8. Lisp - Läs noggrant följande Lispkod:- (defun p (a b c) (list (list 'a a) (list 'b b) (list 'c c) ) ) (defun q (r s) (if (eql 'b (first (first r))) (cons (list 's (list (second (first r)) s)) (rest r)) (cons (first r) (q (rest r) s)) ) ) (setf b (p '(a b) '(c d) '(e f))) (q b 'b) (q b b) 1. Skriv ut resultatet från (q b 'b) 1p 2. Skriv ut resultatet från (q b b) 1p 3. Förklara stegvis och ingående hur funktion q fungerar. 3p Totalt 5p DFR/EJN/ND 130607 PS tentamen Sidan 11 av 12

Bilaga A - Grammatik: Pascallik språk 1. [prog] ::= [prog header] [var part] [stat part] 2. [prog header] ::= program id ( input, output ) ; 3. [var part] ::= var [var dec list] 4. [stat part] ::= begin [stat list] end. 5. [var dec list] ::= [var dec] [var dec list] [var dec] 6. [var dec] ::= [id list] : [type] ; 7. [stat list] ::= [stat] [stat list] ; [stat] 8. [stat] ::= [assign stat] 9. [assign stat] ::= id := [expr] 10. [expr] ::= [term] [R1] 11. [R1] ::= e + [term] [R1] 12. [term] ::= [factor] [R2] 13. [R2] ::= e * [factor] [R2] 14. [factor] ::= ( [expr] ) [operand] 15. [type] ::= integer 16. [id list] ::= id [id list], id 17. [operand] ::= id number DFR/EJN/ND 130607 PS tentamen Sidan 12 av 12