Inf1010 oppgavesamling



Like dokumenter
Inf1010 oppgavesamling

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

UNIVERSITETET I OSLO

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

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

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

UNIVERSITETET I OSLO

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

INF Notater. Veronika Heimsbakk 10. juni 2012

Sortering med tråder - Quicksort

INF Seminaroppgaver til uke 3

Liste som abstrakt konsept/datatype

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

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

UNIVERSITETET I OSLO

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Gjennomgang av eksamen H99

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

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

Introduksjon til objektorientert programmering

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

INF1010. Stein Michael Storleer (michael) Lenkelister

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Oppgave 1. Sekvenser (20%)

Stack. En enkel, lineær datastruktur

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

2 Om statiske variable/konstanter og statiske metoder.

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

UNIVERSITETET I OSLO

Læringsmål for forelesningen

UNIVERSITETET I OSLO

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

INF1010 Binære søketrær ++

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

TOD063 Datastrukturer og algoritmer

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

TDT4100 Objektorientert programmering

PG4200 Algoritmer og datastrukturer Forelesning 7

København 20 Stockholm

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

TDT4100 Objektorientert programmering

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

2 Om statiske variable/konstanter og statiske metoder.

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Norges Informasjonsteknologiske Høgskole

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

UNIVERSITETET I OSLO

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

EKSAMEN med løsningsforslag

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

INF Innleveringsoppgave 6

Dagens tema INF1010 INF1010 INF1010 INF1010

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

Binære trær: Noen algoritmer og anvendelser

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

UNIVERSITETET I OSLO

Oblig 4Hybelhus litt mer tips enn i oppgaven

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

Velkommen til INF1010

UNIVERSITETET I OSLO

Lenkelister. Lister og køer.

Operasjoner på lenkede lister (enkeltlenket) Eksempel på en lenket liste: personliste. INF januar 2010 (uke 3) 2

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

Løsnings forslag i java In115, Våren 1998

Avdeling for ingeniørutdanning Institutt for teknologi

Obligatorisk oppgave 4: Lege/Resept

INF1010 notat: Binærsøking og quicksort

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Tråder Repetisjon. 9. og 13. mai Tråder

Transkript:

Table of ontents Inf1010 oppgavesamling.. 1 Subklasser... 1 Grensesnitt.. 2 Rekursjon... 3 Datastrukturer... 3 GUI. 4 Sortering... 6 Tråder... 6 Inf1010 oppgavesamling Subklasser Klassehirarki for dyr Lag fire klasser Virveldyr, Pattedyr, Primat og Fisk. Lag et fornuftig klassehieraki av disse klassene ved å gjøre noen klasser til subklasser av andre klasser. Fyll klassene med passende variabler og metoder. Tegn et klassediagram som viser forholdet mellom klassene og hva de inneholder. (Trenger ikke være korrekt UML notasjon). Motorkjøretøydata Du skal lage et program som skal holde styr på data om motorkjøretøy av ulike slag (busser, personbiler og varebiler) og deres eiere. For hvert kjøretøy - uansett slag - skal følgende data lagres: Registreringsnummer (String) Fabrikkmerke (String) Eierens navn (String) lle kjøretøy har ulike registreringnummer. nta også at alle eiere har ulike navn. Programmet skal håndtere kjøretøy av følgende slag: Busser. I tillegg til det som lagres for alle kjøretøy, skal det for hver buss lagres antall sitteplasser. Biler av to ulike slag: Personbiler. Med antall sitteplasser. Varebiler. Med maksimal lastevekt. For hver bil skal programmet kunne beregne årsavgift, som for personbiler er konstant lik 3000 kroner, mens den for varebiler er lik 4*(maksimal lastevekt). Tegn et UML klassediagram med alle klassene vi behøver (ta en titt på oppgave B samtidig). 1

B Deklarer klassene Kjøretøy, Buss, Bil, Personbil og Varebil med deklarasjoner av passende attributter (husk subklasser). lle klassene skal inneholde metoder for å lese inn og skrive ut data. For hver bil skal også årsavgiften skrives ut. Lag et kommando-styrt program som holder styr på data om kjøretøy. Programmet skal kunne håndtere følgende kommandoer: NyttKjøretøy. Registrerer nytt kjøretøy, etter å ha spurt brukeren om typen kjøretøy. SkrivlleKjøretøy. SkrivKjøretøy. Ber bruken om et registreringsnummer, og skriver alle data om kjøretøyet hvis det finnes. SummerRegavgift. Ber brukeres om navnet på en eier/et firma, og summerer registreringsavgiften for alle biler registrert på dette navnet. Grensesnitt Stabelgrensesnitt B En 'Stabel', eller 'Stack', er som navnet sier en stabel med et eller annet. Tenk på det som tallerkener som ligger oppå hverandre. Det er da slik at hvis man vil legge til en ny tallerkern i stabelen må den legges helt på toppen, og hvis man vil fjerne en tallerken fra stabelen må man også ta den øverste, med andre ord den som sist ble lagt på. Stabler kalles derfor også LIFO-lister; Last In First Out. Tenk litt over hva som ville skjedd hvis køer for eksempel i butikker eller i billettluka på kino hadde fungert som en stabel. God idé? Finner du noen eksempler på stabler i verden? Skriv et interface 'Stack' som skal definere en stabel med noe. Interfacet skal ha metodene: Object pop(); Object top(); void push(object ob); boolean isempty(); Tar av øverste element i stabelen og returnerer dette. Returnerer øverste element uten å fjerne dette. Legger til elementet 'ob' øverst i stabelen. Forteller om stabelen er tom eller ikke. Skriven implementasjon 'rraystack' av stabelen din, altså 'class rraystack implements Stack {... ' Objektene i stabelen skal her lagres i et Object[] (Object-array) på en slik måte at metodene i grensesnittet blir riktige. NB: Dersom man prøver å bruke 'pop()' eller 'top()' når stabelen er tom, skal det kastes et 'EmptyStackException'-unntak. Mobiltlf i Uqbar En mobiltelefonprodusent i Uqbar har ansatt deg for at du skal lage et nytt datasystem som skal holde orden på alle mobiltelefonene firmaet produserer. 2

Rekursjon Springer Systemet skal ha følgende egenskaper: En mobiltelefon (av klassen Mobiltelefon) er kjennetegnet av en identi#kasjon (et heltall). En musikkspiller må kunne fortelle hvor mange Mbyte lagringskapasitet den har (et heltall). Et kamera må kunne fortelle hvor mange bildepunkter kameraet har (et heltall). Noen mobiltelefoner (av klassen MobMus) er også en musikkspiller, andre mobiltelefoner (av klassen MobKa) er også et kamera, mens noen mobiltelefoner (av klassen MobMusKa) er også både musikkspiller og kamera. Skriv først klassen Mobiltelefon og grensesnittene (interface) Musikk- spiller og Kamera. Skriv deretter klassene MobMus, MobKa og MobMusKa basert på Mobiltelefon, Musikkspiller og Kamera. Vi skal lage et program som finner en måte å bevege en hest (springer) på sjakkbrett, slik at den er innom alle ruter en og bare en gang. En hest kan gå to skritt frem (i vilkårlig retning) og ett til siden. Oppgaven skal løses for et n x n brett, og hesten skal starte i en gitt posisjon. HINT: Lag først en rekursiv prosedyre som genererer alle hesteturer av lengde n * n (også utenfor brettet). Legg så inn avskjæring slik at den:. holder seg innenfor brettet B. aldri besøker en rute to ganger Datastrukturer Liste og binært søketre Gitt dette interfacet: /** simple collection interface. * Defines a small subset of java.util.ollection. * * @param <E> The type of element to put in the collection (a class name). public interface Simpleollection<E> { /** dd an element to the collection. * @param e The element. * @return true if this collection changed as a result of the the call. public boolean add(e e); /** heck if the collection contains one or more of the specified element. * @param e The element. * @return true if the element is in the collection and false if not. public boolean contains(e e); /** Remove the first occurrence of the specified element from the collection. 3

* @param e The element. * @return true if the collection contained the element. public boolean remove(e e);. Lag en enkelt-lenket liste som implementerer interfacet. B. Lag et binært søketre som implementerer interfacet. Merk at fjerning fra binært søketre ikke er pensum og derfor kan utelates.. Implementer java.lang.iterable interfacet i liste klassen du lagde i oppgave. Køer Gitt dette interfacet: /** simple queue interface. * This is a subset of the Queue interface in the java api. * @param <E> The type of element to put in the queue (a class name). public interface SimpleQueue<E> { /** dd an element to the collection. * @param e The element. * @return true if this collection changed as a result of the the call. public boolean add(e e); /** Remove and return one element from the queue. * @return a element or null if the queue is empty. public E poll();. Lag en FIFO og en LIFO kø som implementerer interfacet. B. Implementer java.lang.iterable interfacet i liste klassene du lagde i oppgave.. Legg til andre metoder som du mener er nyttige å ha i en kø. GUI ddressebok gui I en addressebok applikasjon trengen vi en GUI for å registrere og redigere informasjon om en person. Vi er ute etter denne informasjonen: Fornavn Etternavn Telefonnummer Email Ett eller flere ord, men ikke mer enn 30 tegn Samme regler som for fornavn. Skal kun innehode heltall Må inneholde @, men skal ikke starte eller slutte med @. 4

Om En litt lenger tekst om personen. Lag en Person klasse med variabler for å lagre informasjon om en person. B Lag GUI for å registrere en person: 1. Lag en subklasse av JPanel med felter for å registrere informasjon om en person. Klassen skal hete RegisterPersonInfoPanel. Lag en metode som henter ut inforasjonen og returnere et Person objekt. 2. Lag en subklasse av JFrame som inneholder/viser et objekt av RegisterPersonInfoPanel. Lag GUI for å vise en person: 1. Lag en subklasse av JPanel som kan vise informasjon om en person. Klassen skal hete ShowPersonInfoPanel. Konstruktøren til klassen skal ta et objekt av klassen Person som argument til konstruktøren. 2. Lag en subklasse av JDialog som inneholder/viser et objekt av ShowPersonInfoPanel. D Legg til validering av verdiene: 1. Lag metoder i Person klassen for å endre verdier. 2. Utvid metodene slik at de gir en exception hvis verdien er ugyldig (formatet er spesifisert lenger opp i oppgaven). E Oppdater JFrame subklassen fra oppgave b med en knapp som: 1. viser dialogen fra oppgave hvis alle feltene validerer. 2. viser en feilmelding til brukeren hvis ikke feltene validerer. F Oppdater metoden som kalles av knappen i oppgave E slik at hvert felt valideres i en egen tråd og metoden returnerer når alle feltene er validert. GUI for binært søketre Du skal lage en GUI som tegner binærtrær. Tenk over hvilke metoder du må kunne kalle i treet (og nodene?) for å få til å tegne det opp. Samle disse til ett eller flere grensesnitt som vil sikre at du kan tegne opp treet med programmet ditt. 5

B Tenk over hvordan du vil gjøre selve opptegningen av treet. Lag en skisse, og finn ut hvordan du kan regne ut de ulike posisjonene du vil får bruk for for å lage en god tegning. Hint: På dybde 'k' må det være plass til '2^k' noder. Hvis du vil sentrere disse på en enkel måte kan du dele inn i '2^(k+1)' like deler, og plassere node nr. 'n' fra venstre på plass '2*n-1'. Sortering Skriv programmet som tegner opp treet! Husk å overskrive paintomponent(graphics g) der det trengs. Pseudokode for sorteringsalgoritmer Skriv pseudokode for innstikksortering og quicksort. Implementer sorteringsalgoritmer Tråder Skriv metoder i java som implementerer pseudokoden fra forrige oppgave. Producer & onsumer B D I denne oppgaven skal vi løse et kjent problem innen tråd-programmering, nemlig produsent-konsument problemet. Det er som følgende: Et sett med produsenter produserer enheter. Et sett med konsumenter konsumerer enheter. Hovedproblemet er at konsumentene ikke kan konsumere enheter som ikke er produsert. I tillegg kan vi legge begrensninger på hvor mange ukonsumerte enheter vi kan ha i omløp. ktiviteten til produsentene og konsumentene må synkroniseres. Til dette kan vi f.eks. bruke et synkronisert buffer. Lag et generisk trådsikkert buffer. Bufferet må ha en indre datastruktur, en limit, samt synkroniserte addog get-metoder. Bruk wait() og notify() for å forhindre at to tråder samtidig jobber på bufferet. Kast InterruptedException'en ut av add- og get-metodene. Buffer-regler: Hvis bufferet er fult, må man vente med å legge inn sin ferdigproduserte enhet. Hvis bufferet er tom må man vente til en enhet legges inn i bufferet. Lag to kjørebare klasser (dvs Runnable eller Thread) Producer og onsumer. Begge tar inn et objekt av klassen vi laget i a) (Pass på generics!). Producer tar i tillegg inn hvor mange enheter den skal produsere. Skriv run-metodene i Producer og onsumer. Hint: en for-løkke og en while(true)-løkke? Skriv klassen Produceronsumer som lager og starter opp et gitt antall produsenter og konsumenter. Klassen kan også godt ta inn et buffer, som skisert i a) og antall enheter som skal produseres per produsent. 6

Sørg for å interrupte alle tråder når programmet avsluttes. Hint: klassen Thread har en metode som heter interrupt(). E Sett antallprodusenter = 8, antallkonsumenter = 1 og antallenheterperprodusent = 4. Gjennomfør noen kjøringer, og obsrver om programmet henger seg. Prøv å forklar det som skjer, samt implementer en løsning som fikser problemet. F Bruk java-klassene/interfacene: java.util.concurrent.locks.ondition; java.util.concurrent.locks.lock; java.util.concurrent.locks.reentrantlock; til å skrive et trådsikkert buffer med to ventende køer. Idèen er at et objekt fra den ene køen gir låsen/ monitoren videre til et objekt fra den andre køen. Finn minste tall i array Du skal hjelpe et firma med å lage et program som arbeider i parallell på mange deler av en tabell (array) ved hjelp av tråder. Som et første ledd i dette skal du skrive et lite demonstrasjonsprogram. Fyll ut alle manglende deler av programmet på neste side slik at det blir et program som virker. Tabellen på 640000 elementer skal deles i 64 like deler, der 64 tråder skal lete etter minste verdi i hver sin del. Når en tråd har funne den minste verdien i sin del, kaller den metoden giminsteverdi i Minst-objektet. giminsteverdi skal sjekke om den verdien den nå får er den minste til nå, og hvis den nye verdien er minst skal den lagres i variablen minsttilna. Metoden vent skal vente (ved hjelp av wait()), til alle de 64 trådene er ferdig med å lete. Husk at den må vekkes opp ved hjelp av notify(). For å lage et rimelig realistisk testprogram fylles noen tall inn i tabellen. lle tallene som fylles inn er større eller lik 100, med unntak av det minste tallet som er 77, og som ligger på et tilfeldig sted i tabellen. Hvis programmet er riktig skal det derfor skrive ut 77 som minste verdi. Programmet du skal fylle ut alle de manglende delene i ser du nedenfor. Fyll ut alle steder det står "". Er det tvil om hvor i programmet du er, vis til linjenumrene for å forklare hvor de forskjellige programdelene skal inn. Programmet du skal fylle ut class Minst { int minsttilna = Integer.MX_VLUE; int [] tabell; public static void main(string[ ] args) { new Minst(); public Minst ( ) { tabell = new int[640000]; for (int in = 0; in< 640000; in++) tabell[in] = in+100; 7

// fylltabellen med tall int tilfeldig = (int)(math.random()*640000); // tilfeldig = 639999; System.out.println("Minste index: " + tilfeldig); tabell[tilfeldig] = 77; for (int i = 0; i< 64; i++) // Lag og start 64 tråder new MinstTrad(...).start(); vent(); System.out.println("Minste verdi var: " + minsttilna); synchronized void vent() { synchronized void giminsteverdi (int minverdi) { class MinstTrad extends Thread { MinstTrad() { public void run(){ // slutt MinstTrad Trådbasert iterator Tenk deg at du vil skrive en iterator som baserer seg på tråder. Du har en samling med objekter,, og du vil at en egen tråd T skal løpe gjennom alle objektene i og stoppe for hvert objekt. Når du kaller next() i iteratoren (fra main-tråden e.l.) skal du returnere objektet T har "stoppet ved", og så skal T gå videre til neste objekt. Du må også huske å implementere hasnext() på en skikkelig måte. remove() kan du foreløpig la være å tenke på.. Hvor mye av dette kan gjøres helt generelt, uten tanke på hvordan ser ut? Tenk ut en abstrakt klasse som inneholder all felles kode, og som definerer abstrakte (eller tomme) metoder for det som må overskrives for hver spesielle. Skriv klassen din. B. Bruk klassen du har lagd i forige deloppgave til å skrive en iterator for et array, en lenket liste og et binærtre. (Hvis du har gjort forige deloppgave på en god måte vil du her kun behøve å utvide klassen derfra, og overskrive én eller to metoder). Hva må gjøres for at remove() også skal kunne brukes? Gjør endringer slik at også dette blir mulig. 8