UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

UNIVERSITETET I OSLO

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

EKSAMEN med løsningsforslag

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

INF Innleveringsoppgave 6

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

EKSAMEN. Algoritmer og datastrukturer

2 Om statiske variable/konstanter og statiske metoder.

Enkle generiske klasser i Java

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Algoritmer og Datastrukturer

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

Obligatorisk oppgave 5: Labyrint

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

INF våren 2017

EKSAMEN. Emne: Algoritmer og datastrukturer

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

IN1010 V18, Obligatorisk oppgave 5

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

GUI («Graphical User Interface») del 2

Algoritmer og datastrukturer Eksamen 22. februar 2011

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Eksamen Objektorientert Programmering 2013

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

Algoritmer og Datastrukturer

Oppgave 1. Sekvenser (20%)

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

UNIVERSITETET I OSLO

EKSAMEN. Objektorientert programmering

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

Eksamen IN1010/INF1010 våren 2018

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Algoritmer og datastrukturer Eksamen

Post-it spørsmål fra timen (Arv og subklasser)

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

INF1010 siste begreper før oblig 2

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

Algoritmer og datastrukturer Eksamen

INF1010 Binære søketrær ++

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

TDT4100 Objektorientert programmering

Transkript:

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveksamen i INF1010 Objektorientert programmering Dato: 26. mai 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 6 sider. Vedlegg: 4 sider + Kapittel 20 fra BIG JAVA Tillatte hjelpemidler: Læreboka (med notater i) Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Les igjennom hele oppgaveteksten før du begynner å svare. Noter ned uklarheter/spørsmål under gjennomlesingen slik at du har spørmålene klare når faglærer kommer. Husk å skrive i besvarelsen der du gjør egne forutsetninger. Forklar gjerne med ord hva en kodebit det ikke eksplisitt er spurt etter, skal gjøre. Oppgave 1. Klassehierarki vekt 10% Oppgave 1a Du skal skrive klasse- og interfacedefinisjoner slik at datastrukturen som er tegnet i vedlegg 1 kan opprettes. Du trenger ikke skrive konstruktører og metoder. Heller ikke objektvariable. På tegninga er typen til variablene skrevet over, og navnet skrevet under variabelen (boksen). Du skal tilsammen skrive 7 definisjoner, som svarer til typene QA, QAB, QABC, QAC, G, QK og Q. Med definisjoner menes javakode, men klassene og grensesnittene skal være tomme: { }. Tegninga er uttømmende, dvs at det ikke er lovlig med andre referanser enn dem som står der. F.eks. kan ikke objekter[1] pekes på av variable av flere typer enn det som tegninga viser, dvs hverken av (pekere av type) QAB, QABC, G eller QK. Og objektet objekter[3] peker på, kan bare pekes på av variabler av typene Q, QK og G. Ingen av objektene i tegninga er av samme klasse, og objekter av alle klasser det kan lages objekter av, er med. Oppgave 1b Skriv et fullstendig program ved å utvide programkoden fra oppgave 1a med en klasse med en main-metode som oppretter tilstanden som vedlegget viser. For å lette sensuren, opprett først objekter[0], og de variablene som peker på det i den rekkefølge tegninga viser fra venstre mot høyre. Deretter objekter[1], osv. (Fortsettes på side 2.)

Prøveksamen i INF1010, 26. mai 2016 Side 2 Oppgave 2. Datastruktur vekt 10% Når programmet i vedlegg 2 kompileres og kjøres slik: javac Oppgave.java java Oppgave A B blir det opprettet en datastruktur. Tegn denne datastrukturen når programmet har kommet der det er merket med kommentaren «OPPGAVE». Eksempler på hvordan vi tegner variable, arrayer, metoder, konstruktører og objekter framgår av vedlegg 1 og 3. Oppgave 3. Ordnet lenkeliste vekt 25% Fullfør programmet i vedlegg 4. Objektene som blir satt inn i beholderen Liste er sammenlignbare med objekter av samme type. I lenkelista i beholderen skal objektene ligge ordnet (sortert) slik at mindre ligger foran større. Det skal ikke gjøres endringer andre steder i prekoden enn det som hører til hver deloppgave. Hvis du foretrekker en top-down utviklingsmåte anbefales det å gjøre deloppgavene i rekkefølgen d, c, b, a. Når testprogrammet i vedlegget kjøres, skal utskriften bli: Setter inn: I dag er det eksamen i INF1010. Jeg håper du liker denne oppgaven. Lykke til! hilsen oppgaveforfatteren Alle i lista: --- I INF1010. Jeg Lykke dag denne det du eksamen er hilsen håper i liker oppgaveforfatteren oppgaven. til! -- SLUTT (Fortsettes på side 3.)

Prøveksamen i INF1010, 26. mai 2016 Side 3 Oppgave 3a Skriv metoden int sammenlign ( Node k ) { } Metoden skal virke som compareto, dvs returnere et heltall større enn null hvis objektet som k.t peker på er mindre enn det (denne nodens) t peker på. Oppgave 3b Skriv den rekursive metoden void s e t t I n n ( Node ny ) { } som setter den nye noden inn etter denne noden hvis den ordningsmessig skal inn der, eller sender den videre ved et rekursivt kall hvis den skal inn lenger ut i lista. Du får ikke full uttelling på denne oppgaven hvis metoden ikke er rekursiv. Oppgave 3c Skriv klassen private class ListeEnde extends Node { } Objekter av denne klassen skal brukes til to spesialnoder, listehode og listehale. Listehodet er noden som ligger først og -halen er noden som alltid ligger sist i lenkelista. Bruk polymorfi slik at listehodenoden blir «mindre enn» alle andre noder, og slik at listehalenoden er «større enn» alle andre noder. Oppgave 3d Skriv konstruktøren Liste() {...} Her initialiseres lista med listehode og -hale. (Fortsettes på side 4.)

Prøveksamen i INF1010, 26. mai 2016 Side 4 Oppgave 4. Spill; senke skip 20% Lag en tegning på skjermen med programpakken JavaFX av et rutenett med svarte og hvite ruter, som på figuren nedenfor. De svarte rutene representerer skip, og de hvite hav. Et skip har to egenskaper som varierer. En lengde og en orientering. Lengden er antall ruter skipet fyller i rutenenettet, mens orienteringen er enten vertikal (nedover) eller horisontal (bortover). Mao. et skip «vet» hvor i rutenenettet det ligger. For grafisk å lage de to typer ruter (svart eller hvit) har vi bildene Image s k i p = new Image ( " s k i p. png" ) ; Image hav = new Image ( "hav. png" ) ; Oppgave 4a Skriv klassen Skip som en superklasse til de andre klassene som representerer skip. Konstruktøren skal ha 3 parametre en peker til hele brettet, rutenettet en peker til første havrute det ligger i lengden til skipet Oppgave 4b Skriv klassene VSkip og HSkip som subklasser av Skip. HSkip skal være skip som ligger horisontalt i gridet. VSkip vertikalt. Oppgave 4c Skriv klassen Hrute (havrute) som en subklasse av ImageView fra JavaFXbiblioteket (javafx.scene.image.imageview). Ruta skal ha en peker som peker på et skipsobjekt hvis det ligger et skip i ruta. Hvis ikke er denne variabelen null. Eks. Rutene E4, F4 og G4 i figuren peker til samme objekt. I3 peker til null. Senere skal hver rute kunne håndtere museklikk (oppgave d), dette kan du implementere i denne delen hvis du vil. (Fortsettes på side 5.)

Prøveksamen i INF1010, 26. mai 2016 Side 5 Oppgave 4d Slagskip er en subklasse av Application. Klassen har en datastruktur med en todimensjonal array som peker til et ferdiglaget array 10 10 Hrute-objekter. public class S l a g s k i p extends A p p l i c a t i o n { Hrute [ ] [ ] r u t e r ; } public void i n i t ( ) { r u t e r = EksternKlasse. laghrutearray ( ) ; } Skriv en start-metode som oppretter en GridPane med 10 10 Hrute-objekter. Du kan også lage egne hjelpemetoder. Tips: Siden Hrute er en subklasse av ImageView, kan den legges inn som node i et GridPane-objekt rutenett slik: r u t e n e t t. add ( hruteobjekt, kolonneindeks, radindeks ) ; I metoden skal skip (i denne testfasen av programmeringen) plasseres som på figuren over. Når GridPane-objektet er ferdig opprettet skal det vises fram i Stage-objektet som et 10 10 rutenett med blanke ruter (hav). Skipene skal ikke vises. Du trenger ikke å lage raden med tall og kolonnen med bokstaver. Spilleren bruker musa til å klikke på rutene for å prøve å «treffe» skipene som er skjult. Hvis det er et skip i ruta, skifter ruta utseende til fargen for skip/treff med kall på metoden setimage. Hvert klikk med musa på brettet registereres og målet for spilleren er å treffe alle skipene med færrest klikk. Når alle skipene er «senket» skrives en melding om det på skjermen, sammen med hvor mange «skudd» spilleren brukte. Et ImageView-objekt iv skal ha dette utseende når det visualiserer en havrute uten skip: i v. setimage ( hav ) ; Et ImageView-objekt iv skifter utseende til treff/skip med metodekallet: i v. setimage ( s k i p ) ; For å fange opp museklikk kan du bruke metoden setonmouseclicked( EventHandler<MouseEvent> eh) på et ImageView-objekt iv: i v. setonmouseclicked ( eventhandlerobjekt ) ; For å lage en hendelseshåndterer (EventHandler) får du bruk for følgende grensesnitt: public interface EventHandler<MouseEvent> { public void handle ( MouseEvent e ) ; } Oppgave 5. Boblesortering med tråder vekt 35% Fra no.wikipedia.org: Boblesortering (Bubble sort) er en svært enkel sorteringsalgoritme som først og fremst brukes i pedagogisk sammenheng. (Fortsettes på side 6.)

Prøveksamen i INF1010, 26. mai 2016 Side 6 Algoritmen begynner først i datasettet og sammenligner de to første elementene, og dersom det første er større enn det andre, bytter de plass. Dette gjøres med alle par av etterfølgende elementer gjennom hele datasettet. Deretter begynner algoritmen ved starten igjen, og repeterer inntil ingen elementer må byttes på siste gjennomgang. Boblesortering er svært lite effektivt og tidsbruken øker vanligvis kvadratisk med økende datamengde. Datasettet her er en stor array med n String-objekter. n > 64000. Vi skal, til tross for ineffektiviteten ved boblesortering skrive en metode som sorterer en del av arrayen på denne måten. Oppgave 5a Skriv en metode s o r t e r D e l ( S t r i n g [ ] a, int fom, int tom ) som ordner arrayelementene fra og med a[fom] til og med a[tom] i stigende orden, a[i] <= a[i+1], med boblesortering. Oppgave 5b Del arrayen opp i 32 omtrent like store deler og skriv et program som lar 32 tråder sortere hver sin del. For at ordene skal kunne byttes fra del til del, må det være overlapp på minst en indeks mellom hver tråd. Vi kaller mellomrommet mellom to delarrayer for skjøten mellom dem. Det holder at en av de to trådene kan bytte over skjøten. Oppgave 5c Skriv en monitor med en synkronisert metode som kalles av trådene når de skal bytte innhold imellom indekser som er delt mellom to tråder. Dette for å unngå at det oppstår feil hvis to tråder driver og bytter om på samme element samtidig. Oppgave 5d Utvid monitoren med metoder som synkroniserer termineringen av trådene. Husk en tråd kan tro at den er ferdig, men så dukker et element opp i skjøten fra nabotråden. Det enkleste er nok at når en tråd er ferdig med sin del, legger den seg til å sove, men vekkes opp igjen når det har skjedd et bytte over en skjøt. Etter et bytte over en skjøt vekkes da alle sovende tråder opp. Når alle trådene har lagt seg til å sove er sorteringen ferdig. En mer effektiv måte er om det lages én monitor for hver skjøt, slik at bare den andre tråden vekkes opp igjen hvis den har lagt seg til å sove. Oppgavesett slutt. Lykke til, og god sommer! Stein Michael Storleer