Programmeren (1) Examen NAAM:

Vergelijkbare documenten
NAAM: Programmeren 1 Examen 29/08/2012

NAAM: Programmeren 1 Examen 21/01/2011

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

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

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

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

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

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1

Modelleren en Programmeren

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

Modelleren en Programmeren

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

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Modelleren en Programmeren

Tentamen Programmeren in C (EE1400)

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

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

Hoofdstuk 0. Van Python tot Java.

Objectgericht programmeren 1.

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

Modelleren en Programmeren

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur

II. ZELFGEDEFINIEERDE FUNCTIES

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

Labo 2 Programmeren II

Overerving & Polymorfisme

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

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

Tentamen Imperatief Programmeren

Java Les 3 Theorie Herhaal structuren

Informatica: C# WPO 10

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

VI. Klassen en objecten

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

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

Voorbeeld: Simulatie van bewegende deeltjes

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

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

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

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

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

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

IMP Uitwerking week 13

Maak automatisch een geschikte configuratie van een softwaresysteem;


Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Modelleren en Programmeren

Tentamen Programmeren in C (EE1400)

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

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

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

[13] Rondjes draaien (loops)

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

Programmeren in Java les 3

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

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

BEGINNER JAVA Inhoudsopgave

Informatica: C# WPO 12

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 9 november 2018, uur

Informatica: C# WPO 13

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Variabelen en statements in ActionScript

Modelleren en Programmeren

Ingebouwde klassen & methodes

Vakgroep CW KAHO Sint-Lieven

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Java. Basissyllabus. Egon Pas

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

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Game of Life in Java

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

Modelleren en Programmeren

Informatie over. 5VWO DT51: JavaLogo. Casper Bezemer. Toetsweek 1 13 oktober 2016

Informatica: C# WPO 11

Een gelinkte lijst in C#

Zelftest Programmeren in Java

Transcriptie:

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 geen commentaarregels te schrijven en ook eventuele import-opdrachten zijn niet nodig. Programmeer helder en met stijl. Wanneer er gevraagd wordt naar een programmafragment hoef je dit niet te verpakken in een methode of een klasse. Vergeet echter niet variabelen die je introduceert ook te declareren. Gebruikzoveelmogelijkversie5.0vanJava zoalsindeles: lijstenzijn generisch en in plaats van iteratoren schrijf je een for each -lus. Verwar niet tussen tabel (Engels: array) en lijst (ArrayList of List). 1. (10pt) Lees eerst de volledige opgave grondig door vooraleer je begint. Een sudoku is een rooster van 9 op 9 vakjes die elk één cijfer kunnen bevatten (van 1 t.e.m. 9). Vakjes kunnen ook leeg zijn. Opdat een dergelijk rooster echt een sudoku zou mogen worden genoemd, moet het aan enkele bijzondere eigenschappen voldoen. Zo mag elke rij elk cijfer van 1 tot 9 hoogstens één keer bevatten en dezelfde regel geldt voor de kolommen. Daarenboven wordt het rooster ook nog onderverdeeld in 9 afzonderlijke 3-bij-3 vierkanten (zie figuur) waarvan opnieuw geëist wordt dat ze elk cijfer hoogstens één keer bevatten. (We noemen dit de sudokueigenschap.) 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 4 1 8 5 3 7 5 4 2 1 3 4 OK niet OK Wezullenderijen, kolommenenvierkantenvanafnugebiedennoemen. Merkopdatelk gebied precies 9 vakjes bevat. In een toepassing waarmee dergelijke sudoku s op hun correctheid kunnen worden gecontroleerd, slaan we de inhoud van het rooster op als een twee-dimensionale tabel van gehelegetallen. Ingevuldecijfersstellenwevoormetdewaarden1tot9enwegebruiken 0 om aan te geven dat een vakje (nog) leeg is. (... vervolgt op afzonderlijk blad)

(Vervolg van vraag 1.) De toepassing maakt gebruik van de volgende vier klassen: een abstracte klasse GebiedChecker en de klassen RijChecker, KolomChecker en VierkantChecker. Objecten van deze klasse hebben tot doel de sudoku-eigenschap van een gebied te controleren. Het hoofdprogramma bevat een lijst van 27 dergelijke gebiedencheckers: 9 checkers voor rijen, 9 voor kolommen en 9 voor vierkanten. Om een sudoku op zijn geldigheid te controleren, overloopt het programma deze lijst en roept telkens de methode isgeldig op voor het overeenkomstige gebied. (De methode isgeldig heeft geen parameters.) De volledige sudoku is enkel correct wanneer elk van deze oproepen true retourneert. Belangrijk: De 27 gebiedencheckers worden één keer aangemaakt in het begin van het programma, op het moment dat het sudokurooster nog leeg is. Daarna wordt hetzelfde sudokorooster telkens opnieuw ingevuld en op zijn geldigheid gecontroleerd. Hierbij worden steeds dezelfde gebiedencheckerobjecten gebruikt en hetzelfde twee-dimenionale rooster. De inhoud van dit rooster kan echter telkens opnieuw verschillen. Opgave Schrijf de Java-code voor deze vier klassen. Beperk je tot de methoden die je voor deze opgave nodig hebt. Vergeet echter niet om gepaste constructoren te implementeren. De methode isgeldig mag enkel in de klasse GebiedChecker worden gedefinieerd (en niet in één van de andere klassen). Omhergebruikvancodetebevorderenlaatjedegebiedcheckersdeinhoudvanhun gebied overbrengen naar een tabel van 9 gehele getallen die je daarna op geldigheid controleert door een functie op te roepen met de volgende hoofding: public boolean sudokueigenschap (int[] tabel) Implementeer deze functie sudokueigenschap op een efficiënte manier: zorg ervoor dat je de tabel slechts één keer hoeft te doorlopen. Schrijf ook een programmafragment (onderdeel van het hoofdprogramma) waarin de lijst van gebiedcheckers wordt gedeclareerd, aangemaakt en opgevuld met de 27 gebieden. Beantwoord deze vraag op de binnen- en achterkant van het dubbel blad!

2.(2pt)Geeftweekorte(!) Java-opdrachtendiedienenomdekleineletters a, b,..., z om te zetten naar de overeenkomstige volgnummers 0,1,2,...,25, en omgekeerd. Zet ch om naar zijn volgnummer en stop dit in nr Zet nr om naar de corresponderende kleine letter en stop die in ch. Hierbij is ch een variabele van het type char en nr van het type int. De opdrachten hoeven niet te werken wanneer ch iets anders bevat dan een kleine letter. 3. (1 pt) Een klasse MyException is een uitbreiding van Exception maar niet van RuntimeException. De volgende methode, die van deze klasse gebruik maakt, compileert niet. public static void checkpositive (int count) { if (count < 0) { throw new MyException ("Niet positief"); Verbeter de fout in bovenstaande code op een zinvolle manier.

4. (3 pt) Schrijf naast elk fragment een nieuw fragment dat precies hetzelfde doet, maar danmeteengewonefor-lusinplaatsvaneen foreach. (Letop,erzittenenkeleaddertjes onder het gras!) for (String el : lijst) { System.out.println (el); lijst is een lijst (ArrayList) van strings. for (Double el : tabel) { el = 0.0; tabel is een tabel(array) van reële getallen. int som = 0; for (int i : tab) { som += tab[i]; tab is een tabel (array) van gehele getallen.

5. (4 pt) Een rij getallen a 0,a 1,...,a n noemen we unimodulair wanneer er een index k,0 k n bestaat zodat a 0 < a 1 < < a k 1 < a k > a k+1 > > a n, m.a.w., wanneer de rij eerst strikt stijgt en daarna strikt daalt. Het element a k noemen wedemodusvanderij. Eenrijdievolledigstijgend(ofdalend)is, noemenwenogsteeds unimodulair, met k = n (of k = 0). Opgave: Schrijf een methode unimodulair die een dergelijke rij als parameter neemt(in devormvaneentabelvan n+1reëlegetallen)endeindex kvandemodusretourneert. Is de rij niet unimodulair, dan moet de methode een negatief getal teruggeven als waarde. (Je mag aannemen dat de rij minstens 1 getal zal bevatten. Je hoeft de methode niet in een klasse te plaatsen.) Belangrijk: Overloop de rij eerst in de ene richting en daarna in de andere richting (verplicht). Je zal in je methode wellicht één of meerdere lussen nodig hebben. Je gebruikt hier best een zogenaamde while-lus met dubbele conditie.

6. (4pt) In een twee-dimensionale tabel houden we de spelduur bij van de cricketwedstrijden die gespeeld werden tussen verschillende ploegen. (Elke ploeg heeft één keer tegen elke andere ploeg gespeeld.) Deze tabel tijden is op de volgende manier gestructureerd: De tabel bevat reële getallen. Elke ploeg wordt voorgesteld door een uniek volgnummer, startend vanaf nul. Dit volgnummer wordt gebruikt als rij- en kolomnummer in de tabel tijden. De spelduur van de wedstrijd tussen de ploeg met volgnummer r en de ploeg met volgnummer k bevindt zich in de tabel op rij r en kolom k, en ook nog eens op rij k en kolom r. De diagonaal elementen van de tabel (waar rij- en kolomnummer gelijk zijn) zijn allemaal nul. Opgave : Schrijf een programmafragment dat de tijdsduur afdrukt van de wedstrijd die het minst lang heeft geduurd. Belangrijk: Vermijd hierbij al te veel onnodig werk.

7a. (2 pt) Een klasse Kromme bevat onder andere de volgende methoden : public boolean isgesloten (); public double oppervlakte (); Deeerstemethodeverteltofdekrommealdannietgeslotenis. Detweedemethodegeeft de oppervlakte terug die door de kromme wordt ingesloten(een positief reëel getal) maar is enkel betrouwbaar wanneer het om een gesloten kromme gaat. (Bij andere krommen kan in principe eender welk reëel getal worden teruggegeven als resultaat). Schrijf een methode grotekrommen die als argument een lijst van krommen neemt en als resultaat een nieuwe lijst teruggeeft met daarin alle gesloten krommen uit de originele lijst waarvan de oppervlakte strikt groter is dan 1. 7b. (2 pt) Voor een tweede versie van dit programma heeft men beslist om voor gesloten krommen een nieuwe klasse GeslotenKromme te definiëren die de klasse Kromme uitbreidt. De methode oppervlakte bestaat dan enkel nog in deze nieuwe klasse en de methode isgesloten is verdwenen (uit beide klassen). Schrijf onder je eerste antwoord een kopie van grotekrommen maar nu aangepast aan deze tweede variant. Geef duidelijk aan wat je aan je oplossing hebt moeten veranderen. De oorspronkelijke lijst moet nog steeds zowel gesloten als ongesloten krommen kunnen bevatten en je methode moet hetzelfde retourtype hebben als in het eerste geval.