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



Vergelijkbare documenten
Tentamen Inleiding Programmeren (IN1608WI), 2 februari 2012, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

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

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

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

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

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

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


IMP Uitwerking week 13

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

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

Inhoud. Eindtoets. Introductie 2. Opgaven 3. Bijlage bij opgaven 9. Terugkoppeling 12

NAAM: Programmeren 1 Examen 21/01/2011

Tentamen Imperatief Programmeren

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

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

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Overerving & Polymorfisme

Tentamen in2705 Software Engineering

Een stoomcursus door Edgar de Graaf, november 2006

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

NAAM: Programmeren 1 Examen 29/08/2012

Modelleren en Programmeren

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

Abstracte klassen & Interfaces

Lessen Java: Reeks 3. David Blinder Jan G. Cornelis

Hoofdstuk 7: Werken met arrays

Ingebouwde klassen & methodes

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

TENTAMEN Programmeren 1

Game of Life in Java

Modelleren en Programmeren

Programmeren in Java. De Java-GUI

Design patterns Startbijeenkomst

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

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

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

Variabelen en statements in ActionScript

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

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

Kleine cursus PHP5. Auteur: Raymond Moesker

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Stacks and queues. Hoofdstuk 6

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

Een fragment wordt afgeleid van de basis klasse "Fragment".

Tentamen Programmeren in C (EE1400)

Inhoud leereenheid 2. Overerving (1) Introductie 59. Leerkern 60. Samenvatting 88. Zelftoets 90. Terugkoppeling 94

Applicaties met een grafische user-interface

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Programmeren (1) Examen NAAM:

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

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

X. Grafische elementen

Vakgroep CW KAHO Sint-Lieven

Swing.

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Veel succes! 1. Gegeven is de volgende klasse:

Zelftest Programmeren in Java

Technical Computing. Technical Computing Team emazing 1

Zo vind u hierin de volgende documentatie over de klasse Applet: +----java.awt.panel java.applet.applet

Informatica: C# WPO 2

OEFENINGEN PYTHON REEKS 5

Tentamen Programmeren in C (EE1400)

Modelleren en Programmeren

Voortgezet Prog. voor KI

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

Opdracht 7a. Applicatiebouw 2014/2015

TECHNISCHE UNrVERSITElT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica

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

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

Objectgericht programmeren 1.

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

Vraag 1: Software Levenscyclus

Kennismaken Greenfoot

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

Tutorial 1, Delphi: Geldspraak

Hoofdstuk 5: Functies voor getallen en teksten

VOORBLAD SCHRIFTELIJKE TOETSEN

eerste voorbeelden in Java

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Wat is een grafische gebruikersinterface (GUI)?

Objectgeoriënteerd programmeren in Java 1

NAAM: Programmeren 1 Examen 31/08/2011

Tentamen Objectgeorienteerd Programmeren

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

Lessen Java: Reeks pag. 1

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

Datastructuren: stapels, rijen en binaire bomen

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

Hoofdstuk 6: Zelf functies maken

Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

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

b.text = "Rol!"; b.location = new Point(100, 0); b.click += this.rol; this.paint += this.teken;

Transcriptie:

PROEF-Tentamen Inleiding programmeren (IN1608WI), X januari 2010, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Open boek tentamen: bij het tentamen mag alleen gebruik worden gemaakt van het studieboek, niet van college slides, practicumopdrachten of ander materiaal. Opgave 1 (20 punten) Gegeven de specificatie van een klasse Verzameling die getallen kan bevatten uit het interval [0,n-1]. Geef een implementatie van deze klasse. Verzameling -elementen: boolean[] +Verzameling(n : int) post: heeft een lege verzameling gecreëerd voor getallen uit[0,n-1] +bevat(e : int): boolean pre: 0 <= e < n post: retourneert true dsd e in de verzameling voorkomt +voegtoe(e : int) pre: 0 <= e < n post: indien pre en indien e nog niet in de verzameling voorkwam, is e toegevoegd +tostring() post: retourneert de inhoud van de verzameling +verschil(that: Verzameling) : Verzameling post: retourneert de verzameling van de getallen die wel in this maar niet in that voorkomen Toelichting van het attribuut elementen: de indices van elementen zijn de getallen uit het interval [0,n-1]. Als elementen[i] true is, betekent dat getal i in de verzameling voorkomt, is elementen[i] false, dan komt getal i niet in de verzameling voor. Toelichting van tostring(). Als verzameling de getallen 2 en 6 bevat is de waarde van tostring(): <Verzameling[2,6]> Gedeeltelijke uitwerking: bevat: zoeken naar aanwezigheid van het element, element gevonden indien gestopt voor het eind van de rij. voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is verschil: voor elk element van this nagaan of het voorkomt in that, is dat niet zo dan aan verzameling res toevoegen 1

Opgave 2 (8 punten) In Appendix A is een aantal interfaces en klassen gedefinieerd. Bestudeer de definities goed voordat je begint aan het beantwoorden van de vraag. Geef een volledig klassendiagram van de klassen en interfaces. Gedeeltelijke uitwerking: Resettable: pijl naar IntEnum Numbers: pijl naar IntEnum ResettableNumber: pijl naar Numbers en naar Resettable BoundedNumbers: pijl naar Numbers Opgave 3 (17 punten) De volgende code fragmenten verwijzen naar de definities van Appendix A. Geef voor elk codefragment aan: - of er tijdens het compileren een compileerfout zal optreden, en zo ja waarom, - zo niet, of er tijdens de uitvoering een runtime error zal optreden, en zo ja waarom, - zo niet, wat de waarde van x is na de uitvoering. a b c d e Numbers numbers = new BoundedNumbers(1); if (numbers.hasmoreints()) x = numbers.nextint(); else x = 0; Numbers numbers = new ResettableNumbers(); numbers.reset(); x = numbers.nextint(); Numbers numbers = new ResettableNumbers(); ((ResettableNumbers)numbers).reset(); x = numbers.nextint(); Numbers numbers = new BoundedNumbers(1); x = numbers.nextint(); IntEnum numbers = new Numbers(); ResettableNumbers rn = (ResettableNumbers)numbers; x = rn.nextint(); 2

Gedeeltelijke uitwerking: a: 0 b: compile error, Numbers kent geen methode reset() c: 1 d: 2, merkwaardig aangezien de waarden van BoundedNumbers lopen van 1 t/m 1 e: ClassCastException, Number is geen implementatie van ResttableNumber numbers. Opgave 4 (25 punten) Appendix B bevat een definitie van klasse Punt. Bestudeer deze definitie goed voordat je begint aan het beantwoorden van de vraag. Met behulp van klasse Punt construeren we een klasse PuntenLijst die een lijst bevat van Puntobjecten. Een deel van de implementatie van PuntenLijst is hieronder gegeven: public class PuntenLijst{ private Punt[] punten; private int aantal; private int capaciteit; public PuntenLijst(int n){ aantal = 0; punten = new Punt[n]; capaciteit = n; public void voegtoe(punt p){ if (aantal < capaciteit){ punten[aantal] = p; aantal = aantal + 1; //op deze plaats worden andere methoden gedefinieerd. Geef de implementaties voor de volgende methoden van klasse PuntenLijst. Als er een hulpmethode nodig is, dien je volledige implementatie van de hulpmethode te geven. Voor sommige berekeningen is het nodig om het middelpunt van een verzameling punten te kennen. De x-coordinaat van het middelpunt is het afgeronde, gemiddelde van x-coordinaten van de punten, de y-coordinaat van het middelpunt is het afgeronde, gemiddelde van y-coordinaten van de punten. a. public Punt middelpunt() //post: retourneert het middelpunt van de punten van de //PuntenLijst. Als de lijst leeg is, wordt een punt met //coördinaten (0,0) teruggegeven. 3

Bij de volgende methode zoeken we naar een punt dat het verste weg ligt vanaf een gegeven punt. b. public Punt versteweg(punt p) //pre: aantal > 0 //post: retourneert het punt dat het verste weg ligt van //het opgegeven punt. Indien er twee of meer punten ver weg //liggen, wordt er willekeurig een van die punten gegeven. Bij de volgende methode zoeken we de twee punten in de puntenlijst die het verst van elkaar afliggen. Het resultaat is een nieuwe puntenlijst die de twee punten bevat met de grootste onderlinge afstand. c. public PuntenLijst extremen() //pre: aantal > 1 //post: retourneert een puntenlijst met de twee punten //die het verst van elkaar af liggen. Gedeeltelijke uitwerking: a. bereken gemiddelde van de x-waarden en de y-waarden van de opgeslagen punten, rond het gemiddelde af, retourneer een Punt met de gemiddelde waarden. b. Definieer methode afstand(p : Punt) : double. Bepaal de grootste afstand tussen het gegeven punt en elk van de andere punten, retourneer punt met de grootste afstand. c. Gebruik methode versteweg() om voor elk punt uit de lijst het punt te vinden dat verste weg is, retourneer paar dat het verst uit elkaar ligt. Opgave 5(20 punten) Hieronder zie je de grafisch user interface van een eenvoudig programma. In Appendix C is de volledige code van dit programma vermeld. Met het programma kunnen afspraken zoals Kapper 10.00 of Tandarts 13.45 worden opgeslagen en tevoorschijn worden gehaald. De user interface bestaat uit twee knoppen met opschriften VoegToe: en AfspraakNummer: en een tekstveld. Als er op een van de knoppen wordt geklikt gebeurt er (nog) niets. 4

Gevraagd wordt om de uitbreiding van de code van het programma. Na de uitbreiding moet het volgende gelden: 1. Er wordt een nieuwe afspraak ingevoerd in het tekstveld. Als er dan op de knop met opschrift VoegToe: wordt geklikt, wordt de afspraak toegevoegd aan de lijst afspraken. Het tekstveld wordt daarna leeg gemaakt. na klikken -> 2. Er wordt in het tekstveld een nummer ingevoerd behorend bij een van de afspraken. Het nummer moet positief zijn en kleiner dan het aantal afspraken. Na klikken op de knop Afspraaknummer: wordt de bijbehorende afspraak getoond. Is het nummer niet correct dan wordt de boodschap Onjuist nummer getoond. na klikken-> Maak de bijlage los van het tentamen, schrijf je naam en studienummer erop. Geef in de bijlage aan welke veranderingen en uitbreidingen er nodig zijn om het programma op de gewenste manier te laten werken. Gedeeltelijke uitwerking: Importeer een extra package. Laat de klasse het interface ActionListener implementeren. Voeg een ActionListener aan beide knoppen toe. Implementeer methode actionperformed, zoals is aangegeven. Bij het invoeren van een geheel getal, moet het type van de invoer worden omgezet van String naar int. 5

Appendix A interface IntEnum{ boolean hasmoreints(); int nextint(); interface Resettable extends IntEnum{ public void reset(); public class Numbers implements IntEnum{ int next = 1; public int nextint(){ return next++; public boolean hasmoreints(){ return true; public class ResettableNumbers extends Numbers implements Resettable{ public void reset(){ next = 1; public class BoundedNumbers extends Numbers{ private int last; public BoundedNumbers(int last){ this.last = last; public boolean hasmoreints(){ return next <= last; 6

Appendix B public class Punt{ private String label; private int x; private int y; public Punt(String l, int x, int y){ setlabel(l); setx(x); sety(y); public String getlabel(){ return label; public void setlabel(string l){ label = l; public int getx(){ return x; public void setx(int x){ this.x = x; public int gety(){ return y; public void sety(int y){ this.y = y; public boolean equals(object other){ Punt that = (Punt)other; return getx() == that.getx() && gety() == that.gety(); 7

Appendix C import java.awt.*; import javax.swing.*; public class AgendaFrame extends JFrame{ private JButton voegtoeknop = new JButton("VoegToe: "); private JTextField tekstveld = new JTextField(); private JButton zoekknop = new JButton("Afspraaknummer: "); private JPanel panel = new JPanel(new GridLayout(2,2)); private String[] afspraken = new String[10]; private int aantal = 0; public AgendaFrame(){ setdefaultcloseoperation(jframe.exit_on_close); setbounds(100,100,350,100); Container c = getcontentpane(); panel.add(voegtoeknop); panel.add(tekstveld); panel.add(zoekknop); c.add(panel); setvisible(true); 8