Inf1010 oppgavesamling

Like dokumenter
Inf1010 oppgavesamling

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

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

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.

Liste som abstrakt konsept/datatype

INF Notater. Veronika Heimsbakk 10. juni 2012

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Sortering med tråder - Quicksort

Gjennomgang av eksamen H99

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

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

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

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

Stack. En enkel, lineær datastruktur

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Introduksjon til objektorientert programmering

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

Algoritmer og Datastrukturer

INF1010. Stein Michael Storleer (michael) Lenkelister

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

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

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

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

UNIVERSITETET I OSLO

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

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

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

Oppgave 1. Sekvenser (20%)

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

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

INF1010 Binære søketrær ++

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

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

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

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; }

PG4200 Algoritmer og datastrukturer Forelesning 7

INF Seminaroppgaver til uke 3

UNIVERSITETET I OSLO

København 20 Stockholm

UNIVERSITETET I OSLO

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

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

TOD063 Datastrukturer og algoritmer

2 Om statiske variable/konstanter og statiske metoder.

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

Læringsmål for forelesningen

Algoritmer og datastrukturer Eksamen

TDT4100 Objektorientert programmering

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

Binære trær: Noen algoritmer og anvendelser

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

UNIVERSITETET I OSLO

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

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

INF Innleveringsoppgave 6

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

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

EKSAMEN. Algoritmer og datastrukturer

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Dagens tema INF1010 INF1010 INF1010 INF1010

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

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

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

EKSAMEN med løsningsforslag

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

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

UNIVERSITETET I OSLO

Velkommen til INF1010

Norges Informasjonsteknologiske Høgskole

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

OPPGAVE 5b og 8b Java Kode

Lenkelister. Lister og køer.

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

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

UNIVERSITETET I OSLO

Obligatorisk oppgave 1 INF1020 h2005

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Obligatorisk oppgave 4: Lege/Resept

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 A 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) Alle kjøretøy har ulike registreringnummer. Anta 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). Alle 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. SkrivAlleKjø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 A 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 'ArrayStack' av stabelen din, altså 'class ArrayStack 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: A. holder seg innenfor brettet B. aldri besøker en rute to ganger Datastrukturer Liste og binært søketre Gitt dette interfacet: /** A 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> { /** Add an element to the collection. * @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. * @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

* @return true if the collection contained the element. public boolean remove(e e); A. 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 A. Køer Gitt dette interfacet: /** A 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> { /** Add an element to the collection. * @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(); A. Lag en FIFO og en LIFO kø som implementerer interfacet. B. Implementer java.lang.iterable interfacet i liste klassene du lagde i oppgave A.. Legg til andre metoder som du mener er nyttige å ha i en kø. GUI Addressebok 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 Om 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 @. En litt lenger tekst om personen. 4

A 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 A B 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. 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 5

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. 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. Alle 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.MAX_VALUE; 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; 6

// 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å. A. 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. 7