NAAM: Programmeren 1 Examen 29/08/2012

Vergelijkbare documenten
NAAM: Programmeren 1 Examen 31/08/2011

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

NAAM: Programmeren 1 Examen 21/01/2011

Programmeren (1) Examen NAAM:

Programmeren 1 22 januari 2014 Prof. T. Schrijvers

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Tentamen Imperatief Programmeren


voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

IMP Uitwerking week 13

Modelleren en Programmeren

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

Game of Life in Java

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

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Voortgezet Prog. voor KI

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

Abstracte klassen & Interfaces

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

Modelleren en Programmeren

Ingebouwde klassen & methodes

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

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

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

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

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

In BlueJ. Doe onderstaande met muis/menu s:

Tentamen in2705 Software Engineering

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

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

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Modelleren en Programmeren

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Algoritmisch Denken: Dodo s Bit Parity

Overerving & Polymorfisme

Zelftest Programmeren in Java

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

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

Kleine cursus PHP5. Auteur: Raymond Moesker

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Deeltentamen Grammatica s en ontleden 22 december 2005

Vakgroep CW KAHO Sint-Lieven

Inhoud. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 12

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

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Java Programma structuur

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

Informatica: C# WPO 12

Elementary Data Structures 3

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

Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur

X. Grafische elementen

Informatica: C# WPO 13

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 22 december 2017, uur

TENTAMEN Programmeren 1

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

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

Datastructuren: stapels, rijen en binaire bomen

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Hoofdstuk 7: Werken met arrays

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

Modelleren en Programmeren

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Tentamen Programmeren in C (EE1400)

Programmeren in C# Samenvatting van C#

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

De sheets zijn gebaseerd op met name hoofdstuk. D. Bell en M. Parr, Java voor studenten, Prentice Hall,

Technology, Innovation & Society Delft

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

Modelleren en Programmeren

Tentamen Programmeren in C (EE1400)

Programmeermethoden. Arrays (vervolg 2) Walter Kosters. week 9: 6 10 november kosterswa/pm/

Een gelinkte lijst in C#

De Leidsche Flesch Studievereniging voor Natuurkunde, Sterrenkunde, Wiskunde en Informatica sinds DLF Pointerworkshop

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Veel succes! 1. Gegeven is de volgende klasse:

Javascript oefenblad 1

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur

Informatica: C# WPO 11

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.

Java. Basissyllabus. Egon Pas

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Leren programmeren in C# Deel 2 - Gegevens

Programmeermethoden. Arrays. Walter Kosters. week 7: oktober kosterswa/pm/

Lineaire data structuren. Doorlopen van een lijst

is eigenlijk overbodig!


Labo 1 Programmeren II

public boolean egualdates() post: returns true i f f there i f the l i s t contains at least two BirthDay objects with the same daynumber

Transcriptie:

Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je zelf Javacode schrijven. Hou dit kort en bondig. Je hoeft geen commentaarregels te schrijven en ook eventuele import-opdrachten zijn niet nodig. Pas op voor de addertjes onder het gras. Veel succes! Vraag : Nonogrammen (7pt),,, 3 3 Een nonogram is een Japanse beeldpuzzel die bestaat uit een leeg diagram met getallen boven en links van het diagram. Elk getal staat voor een sequentie van één of meer aaneengesloten zwarte vakjes in de betreffende rij of kolom. Opeenvolgende sequenties zijn gescheiden door één of meer aaneengesloten witte vakjes. Door de vakjes op de juiste manier zwart en wit in te kleuren, vormt zich een afbeelding in het diagram: 5 de oplossing van de puzzel. Hiernaast zie je zo n opgeloste puzzel. In deze vraag gaan we geen puzzels oplossen, maar controleren of een gegeven oplossing correct is ten opzichte van een gegeven opgave. We stellen een oplossing voor door een geneste n m array van booleans: een zwart vakje is true, en een wit vakje is false. Een opgave voor een lijn, de lengtes van de zwarte sequenties, stellen we voor door een int[]. Bijvoorbeeld, de opgave, stellen we voor als new int[]{,. De opgave voor alle lijnen in een richting (bv. alle rijen) stellen we voor als een int[][]. Omdat er geen essentieel verschil is tussen het controleren van een rij of een kolom uit de oplossing, gaan we abstractie maken van de volgorde van doorlopen van de geneste array van booleans die de oplossing voorstelt. Abstractie maken we met behulp van de volgende interface, die geïnspireerd is op de gekende Java-iteratoren. public interface ArrayIterator { public boolean hasnext(); public boolean next(); public boolean hasnextline(); public void nextline();

Deze ArrayIterator laat toe om een geneste array van booleans lijn per lijn te doorlopen. Hierbij kan een lijn ofwel een rij ofwel een kolom zijn. Je gebruikt de interface als volgt: Alvorens aan een nieuwe lijn te beginnen, moet je de controleren of er een volgende lijn is met behulp van de methode hasnextline(). Als er een volgende lijn is, laat je vervolgens de ArrayIterator overgaan naar die lijn met nextline(). Als de ArrayIterator zich op een lijn bevindt, kan je vragen of er een volgend element is op de lijn met hasnext(). Dat volgende element, een boolean die zwart of wit voorstelt, kan je vervolgens opvragen met next(). Opgave. Maak een klasse RijIterator die de interface ArrayIterator implementeert. Ze doorloopt een geneste array rij per rij. Voeg ook een constructor toe die een geneste boolean array als parameter heeft, en voorzie de nodige velden. 2. Maak een klasse KolomIterator die de interface ArrayIterator implementeert. Ze doorloopt een geneste array kolom per kolom. Voeg ook een constructor toe die een geneste boolean array als parameter heeft, en voorzie de nodige velden. 3. Maak een klasse NonogramChecker. Implementeer een methode die nagaat of een ingevulde puzzel voldoet aan de opgegeven sequenties voor rijen en kolommen: public static boolean isoplossing(boolean[][] puzzel, int[][] rijen, int[][] kolommen) Maak een hulpmethode checklijnen(arrayiterator it, int[][] lijnen) die je vanuit isoplossing oproept om zowel de rijen als de kolommen te controleren. Deze hulpmethode controleert alle lijnen (die horizontaal of verticaal lopen) overeenkomstig de gegeven ArrayIterator. Maak een hulpmethode checklijn(arrayiterator it, int[] lijn) die de huidige lijn van de gegeven ArrayIterator controleert. Roep deze hulpmethode op vanuit checklijnen. Tip: Je houdt best bij in een lokale variabele of je in een lopende sequentie van zwarte vakjes zit of niet. Dan kan je op basis van de kleur van het volgende vakje beslissen wat je moet doen. 2

... 3

Vraag 2: Methode-oproepen (2pt) public class A { public static int m() { boolean b = ( == 2); if (b = true) { return 2; else { return -; public class C { private int[] items; public C() { int[] items = new int[7]; public int first() { return items[0]; public abstract class B { public B() { public int m() { return n(); public int n() { return m() - 2; public class D extends B { public D() { public int m() { return 5 % 3; Gegeven bovenstaande klassendefinities, geef aan wat het resultaat is van onderstaande expressies: (a) (b) (c) (d) A.m() new B().n() new C().first() new D().n() Vraag 3: Exceptions (pt) public void m(int x) throws XXX { if (x % 2 == 0) { throw new IOException(something is wrong"); else { throw new IllegalArgumentException("something else is wrong"); public int n(int x) { try { x-=; m(x); catch (IOException e) { x += 2; catch (Exception e) { x *= x; return x; (a) (b) Wat is de meest specifieke klassenaam waarmee je XXX kan vervangen? Wat is het resultaat van n(2)? 5

Vraag : Afbeeldingen Verkleinen Schrijf een methode met signatuur (2,5pt) public int[][] verklein(int[][] afbeelding) De methode neemt een 2n 2m matrix afbeelding voorgesteld door een geneste array, en geeft een n m matrix terug. De parameter stelt een grote zwart-wit afbeelding voor; elk element in de matrix stelt de grijswaarde (in het bereik 0-255) van een beeldpunt voor. De uitvoer is een verkleinde afbeelding die bekomen wordt door naburige beeldpunten te reduceren tot beeldpunt. De grijswaarde van dat gereduceerde beeldpunt is het gemiddelde van de grijswaarden van de oorspronkelijke beeldpunten. Hier zie je het effect voor een 6 matrix. Je code moet werken voor alle mogelijke waarden van n en m. a, a 2, a 3, a, a,2 a 2,2 a 3,2 a,2 a,3 a 2,3 a 3,3 a,3 a, a 2, a 3, a, a,5 a 2,5 a 3,5 a,5 a,6 a 2,6 a 3,6 a,6 (a, +a 2, +a,2 +a 2,2 ) = (a,3 +a 2,3 +a, +a 2, ) (a,5 +a 2,5 +a,6 +a 2,6 ) (a 3, +a, +a 3,2 +a,2 ) (a 3,3 +a,3 +a,3 +a, ) (a 3,5 +a,5 +a,5 +a,6 ) 6

Vraag 5: Arrays (pt) Hoeveel verschillende int waarden passen in geneste array arr na uitvoering van de code? (a) (b) int[][] arr = new int[3][7]; int[][] arr = new int[3][]; arr[0] = new int[5]; for (int i = ; i < arr.length; i++) { arr[i] = arr[i-]; Vraag 6: Herschrijven (3pt) Herschrijf onderstaande methodes zodat: (a) lijsten ipv. arrays gebruikt, (b) een iterator ipv. for-each lus gebruikt, en (c) een while lus ipv. een for lus gebruikt. (a) public void m(int[] k, int[] l) { for (int i = 0; i < k.length; i++) { k[i] = l[k.length - i]; (b) public void m2(set <String> set) { for (String t: set) { System.out.println(t); (c) public void m3(int[] a) { for (int i = ; i < 0; i++) { a[i] = i * a[i-]; 7

Vraag 7: Examen opstellen (3,5pt) Het bestand vragenlijst.txt bestaat uit tientallen mogelijke examenvragen; één op elke regel. Genereer een bestand examen.txt dat 7 willekeurig gekozen vragen bevat; ook één op elke regel. De gekozen vragen moeten onderling verschillend zijn. Schrijf hiervoor een stuk code, zonder methode-hoofding. Vang mogelijke checked exceptions op en druk een foutboodschap af. 8 Einde