TOD063 Datastrukturer og algoritmer



Like dokumenter
LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF 1010, vår 2005 Løsningsforslag uke 11

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Løsningsforslag Test 2

TOD063 Datastrukturer og algoritmer

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Leksjon 7. Filer og unntak

HØGSKOLEN I SØR-TRØNDELAG

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

import java.io.*; import java.util.*; import javagently.text;

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

UNIVERSITETET I OSLO

INF Løsning på seminaropppgaver til uke 8

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

UNIVERSITETET I OSLO

Programmering i C++ Løsningsforslag Eksamen høsten 2005

IN Notat om I/O i Java

INF Uke 10. Ukesoppgaver oktober 2012

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

UNIVERSITETET I OSLO

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Løse reelle problemer

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

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

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

INF1010 våren 2018 tirsdag 23. januar

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

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

Litt om pakker og mest om data inn og ut

Å lese tall fra en fil, klassen Scanner

Repetisjon. INF gruppe 13

Leksjon 7. Filer og unntak

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

UNIVERSITETET I OSLO

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Dagens tema: Mer av det dere trenger til del 1

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

INF1000-SIKT - Notat om I/O i Java

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

Algoritmer og datastrukturer E Løkker i Java

OPPGAVE 5b og 8b Java Kode

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

UNIVERSITETET I OSLO

Forelesning inf Java 4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

UNIVERSITETET I OSLO

INF1000 Metoder. Marit Nybakken 16. februar 2004

INF2100. Oppgaver 26. september til 1. oktober 2007

Oblig 4Hybelhus litt mer tips enn i oppgaven

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Algoritmer og datastrukturer A.1 BitInputStream

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

2 Om statiske variable/konstanter og statiske metoder.

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

"Nelsons kaffebutikk"

INF Seminaroppgaver til uke 3

UNIVERSITETET I OSLO

INF1000: Forelesning 7

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

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

Løsningsforslag til eksamen i INF1000 våren 2006

INF2100. Oppgaver 23. og 24. september 2010

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF Notat om I/O i Java

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Gjennomgang av eksamen H99

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Leksjon 7. Filer og unntak

Eksamen. Objektorientert Programmering IGR 1372

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Jentetreff INF1000 Debugging i Java

Løse reelle problemer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Transkript:

TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage en del av et system for å administrere et datakontaktfirma. Systemet skal håndtere en medlemstabell som inneholder medlemmers interesser (mengde av hobbyer). Tabellen skal brukes for å finne to-og-to medlemmer med felles interesser (referert til som partnere når en har funnet og koblet to medlemmer med felles interesser). Følgende opplysninger om hvert medlem skal lagres: medlemmets navn (som er forskjellig for hvert medlem). hobbyer som er referanse til et objekt av klassen KjedetMengde (se vedlegg) statusindeks som angir indeks til partneren i medlemstabellen dersom medlemmet er koblet, ellers er den lik -1. Klassen Hobby kan defineres som: class Hobby{ private String hobbynavn; public Hobby(String hobby){ hobbynavn = hobby; public String tostring(){ returnerer hobbynavnet med < foran og > bak som en String (Eksempel: <tegne og male> ) public boolean equals(object hobby2){ returnerer true hvis hobbynavnet i objektet er det samme som i parameteren // end Hobby Klassen Medlem kan defineres som: class Medlem { // Egenskaper private String navn; private KjedaMengde<Hobby> hobbyer; private int statusindeks;

Test klassen Medlem med et eget main - program før du går videre (lag en ekstra metode for utskrift til skjerm av alle medlemsdata for dette formål). Klassen Medlem skal i tillegg til konstruktør og nødvendige hent- og ny-metoder bl.a. ha følgende (du kan definere andre i tillegg): - lesmedlem() som leser inn personnavn og alle hobbyer til et medlem - passertil(medlem medlem2) som avgjør om to medlemmer passer til hverandre og altså kan danne et par. To medlemmer passer til hverandre dersom de har nøyaktig samme hobbyer. - skrivhobbyliste() som skriver ut alle hobbyene for et medlem (bruk tostring-metoden i Mengde) Klasse Datakontakt har en medlemstabell som kan lagre opplysninger om maksimalt 100 medlemmer, og en variabel antallmedlemmer som angir antall registrerte medlemmer i tabellen til enhver tid. Klassen Datakontakt skal bl.a. ha følgende metoder (du kan definere andre i tillegg): registrermedlem() som leser inn data for et nytt medlem fra tastatur. finnmedlemsindeks(medlemsnavn) som finner indeksen til medlemmet i medlemstabellen dersom medlemmet er registrert, ellers returneres indeks lik -1. finnpartnerfor(medlemsnavn) som finner ut om et medlem (identifisert med medlemsnavn) passer med et annet medlem (dersom det finnes) i medlemstabellen. Dette medlemmet skal være det første som passer og ikke er koblet. Metoden oppdaterer medlemstabellen dersom det finner en partner, og returnerer eventuell indeks til partneren i medlemstabellen (eller -1). tilbakestillstausindeks(medlemsnavn) som oppdaterer medlemstabellen, slik at dette medlemmet (identifisert ved medlemsnavn) og dets partner, dersom det fins, ikke lenger er koblet (dvs. begge får statusindeks 1). skrivparliste() som skriver ut på skjermen en oversikt over medlemmer som er koblet til hverandre i medlemstabellen til enhver tid. Et slikt par skal kun vises én gang på utskriftslisten. Metoden skriver også ut antall par som er funnet. Eksempel på utskrift: PARNAVN Erna og Siv Eva og Adam. HOBBYER <ski> <musikk> <politikk> <epleplukking> <paradishopping> Antall par funnet: 12 Et enkelt klientprogram (et main - program som bruker klassen Datakontakt) skal skrives på en slik måte at vi får testet alle metodene. Du kan få behov for å utvikle andre metoder i klassene. Programmet skal være menybasert.

Krav til innlevering for oppgave 1: i) Klassekart/UML-diagram ii) Figur/skisse som viser hvordan klassene Datakontakt og Medlem er implementert (objektdiagram) iii) Programkode for hele programmet (font Courier New, size 10-12, minimaliser marger og unngå uheldige sidebrekk og linjebrekk dvs. se til at det er pen layout og god lesbarhet i den koden dere leverer inn) iv) Utskrift fra kjøring av programmet, spesielt fra utskrift av Parliste Oppgave 2 (Formål: Prøve ADTen Stabel fra kap. 4) I denne oppgaven skal vi bruke stabel. Stabel er en sist-inn/først-ut datastruktur (LIFO). Java tilbyr en rekke datstrukturer definert i ulike klasser. Bl.a. finner vi klassen Stack (bokas kap. 4.6) som dere kan bruke i denne oppgaven. Dere kan også bruke en av de to Stabel-implementeringene lagt ut under KodeEksempler/kap4. Den innebygde Stack-klassen har bl.a. følgende metoder: Metoder boolean empty() Object peek() Object pop() Object push(object element) Beskrivelse returnerer true hvis stabel er tom, ellers false returnerer toppelement, men fjerner det ikke stabler av toppelementet og returnerer det stabler element på toppen av stabel (Unntaket EmtyStackExecption blir kastet når du kaller pop() hvis stabelen er tom. Den pop()- metoden som ligger på eksempel-siden i it s learning returnerer med null-peker i stedet). Eksempel på bruk:. import java.io.*; import java.util.*; class SnuStreng{ //For å få tilgang til klassene java.util.stack og //java.util.emptystackexception public static void main(string args[]){ String str = ".rutkurtsatad OFIL ne re relbats"; int len = str.length(); Stack tegnstabel = new Stack(); for (int i = 0; i < len;i++){ tegnstabel.push(new Character(str.charAt(i))); System.out.println(str); while(!tegnstabel.empty()){ Character tegn_obj = (Character) tegnstabel.pop(); System.out.print(tegn_obj); System.out.println();

Vi skal se på parentessetting i et Java-program. Hvis vi ser bort fra at det inne i kommentarer og strenger også kan være parenteser, skal parenteser alltid komme i par. Vi kan dele symbolene {, [, (,, ] og ) i åpne-symboler (venstreparentesene) og lukke-symboler (høyreparentesene). Når vi går gjennom et Java-program og finner et lukke-symbol, skal det passe med sist møtte åpne-symbol. Det vil si at [ ( ) ] er lovlig [ ( ] ) er ulovlig For å sjekke om parentesene er rett satt kan vi bruke en stabel. Vi stabler på når vi finner et åpnesymbol og stabler av og sjekker at vi får et par når vi treffer på et lukke-symbol. Tre feilsituasjoner kan oppstå: 1. Symbolene danner ikke et par. Eksempel: Vi treffer på en "]" og øverst på stabelen er det en "{" eller en "(". Da må du skrive ut en passende feilmelding, men du skal likevel behandle resten av teksten også. (Dette kan da i noen tilfeller resultere i en rekke nye feilmeldinger selv om det bare var en feil i uttrykket.) Eks.: Lukkesymbol ] på linje nr x, tegn nr y har feil åpnesymbol 2. Vi treffer på et lukkesymbol og stabelen er tom. Da vil det være rimelig å gi melding om at det er truffet på et lukke-symbol uten tilsvarende åpne-symbol. Eks.: Lukkesymbol ] på linje x, tegn nr y mangler tilsvarende åpnesymbol 3. Stabelen er ikke tom når det er slutt på teksten. Her kan du gi melding om at det mangler (et eller flere) lukke-symbol. Eks.: Åpne-symbol ( har ikke tilsvarende lukkesymbol. Åpne-symbol [ har ikke tilsvarende lukkesymbol. Alternativ utskrift (dersom du også lagrer posisjon og linjenummer på stabelen i tillegg til parentesen): Åpnesymbol ( på linje x, tegn nr y har ikke tilsvarende lukkesymbol Åpnesymbol [ på linje z, tegn nr w har ikke tilsvarende lukkesymbol For å få til denne utskriften må du lage en klasse ParentesData der objektene inneholder både linjenummer og posisjon på linjen i tillegg til selve venstreparentesen. Et slikt objekt lagres altså på stabelen når du finner en venstreparentes i teksten. Dere skal lage et Java-program som leser en fil med et Java-program og sjekker om parentesene er satt rett. Dere kan anta at det ikke er parenteser i String-uttrykk og i kommentarsetninger. Filnavnet leses inn fra tastatur. En Java-fil er tekstfil, en filtype vi også har brukt i tidligere øvinger. Se eksempel i vedlegget til slutt i oppgavesettet hvordan du åpner en slik fil og leser inn data linjevis til en variabel av type String. Ved feilsituasjonene ovenfor skal en prøve å gi presise feilmeldinger som vist i eksemplene. Krav til innlevering for oppgave 2: i) Klassekart/UML-diagram ii) Skisse for implementert datastruktur iii) Kildekode (som for oppgave 1) iv) Utskrift av kjøring med to - tre ulike Java-filer som inndata. Minst en av Java-filene må ha flere parentesfeil.

Vedlegg til øving 3: Eksempel på lesing av tekstfil i Java import java.io.*; import java.util.*; class TextFilTest { private static void skrivlinjetegnfortegn(string linje) { for (int i = 0; i < linje.length(); i++){ System.out.print(linje.charAt(i)); System.out.println(); public static void lesfrafil(string innfil) { FileReader fr = null; try { fr = new FileReader(innFil); //åpner tilgang til filen catch(filenotfoundexception e) { System.out.println("Finnner ikke filen"); System.exit(-1); BufferedReader br = new BufferedReader(fr); while (true) { //gjentas inntil slutt på fil (eof=true) String linje = null; try{ linje = br.readline(); catch (IOException ioe) { System.out.println("Feil ved innlesing!"); System.exit(-1); if (linje==null) //undersøker om det var slutt på filen break; //i så fall: terminerer while skrivlinjetegnfortegn(linje); try { fr.close(); catch (IOException ioe) { System.out.println("Feil ved lukking av fil!"); public static void main (String args[]) { lesfrafil("minfil.txt");