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

Størrelse: px
Begynne med side:

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

Transkript

1 Vedlegg A.1 Filbehandling på bit-nivå Side 1 av 9 Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå A.1 Filbehandling på bit-nivå A.1.1 Sammendrag Klassen BitInputStream gjør det mulig å lese en fil (og andre datasekvenser) på bitnivå, dvs. lese én og én bit, eller et variabelt antall biter, om gangen. Tilsvarende gjør klassen BitOutputStream det mulig å skrive til en fil (og andre ut-enheter) bitvis. Dette sammendraget inneholder en kort diskusjon av det viktigste i de to klassene. En mer detaljert gjennomgang av class BitInputStream finner du i Avsnitt A.1.2 til Avsnitt A.1.6 og av class BitOutputStream i Avsnitt A.1.7. En instans av BitInputStream kan knyttes til en fil med navn "innfil.xyz" enten ved hjelp av en konstruktør eller ved hjelp av en fabrikasjonsmetode (eng: factory method): BitInputStream inn = new BitInputStream("innfil.xyz"); BitInputStream inn = BitInputStream.fromFile("innfil.xyz"); Klassen bruker et internt buffer (med standardstørrelse på 4kb) for å effektivisere fil-lesingen og har på lik linje med andre stream-klasser en close-metode som skal brukes når fil-lesingen er ferdig. Lesingen av biter skjer normalt med en av flg. tre metoder: public int readbit() public int read() public int readbits(int numberofbits) Den første metoden leser én bit om gangen og returnerer 0 hvis det var en 0-bit og 1 hvis det var en 1-bit. Den andre metoden leser nøyaktig 8 biter (1 byte) og fungerer slik som read er beskrevet i class InputStream i java.io. Den siste metoden leser et ønsket antall biter og de blir returnert som de bakerste bitene i et heltall. Resten av heltallet (de forreste bitene) består kun av 0-biter. Metoden kan maksimalt lese 31 biter om gangen, dvs. parameterverdien numberofbits må være mindre enn eller lik 31. Alle de tre read-metodene returnerer -1 hvis det er færre biter igjen enn det som skal leses. For den første read-metoden, der det skal leses én bit, betyr det at vi har kommet til slutten (end of file). Hvis -1 kommer som returverdi fra de to andre read-metodene, behøver ikke bety at vi har kommet til slutten av filen. Det betyr bare at det er færre biter igjen enn det antallet som ønskes lest. Metoden int available() forteller til enhver tid hvor mange biter som er igjen. I enkelte anvendelser er det gunstig å kunne «legge tilbake» en eller flere av de bitene som nettopp har blitt lest. Klassen har tre metoder for dette: public void unreadbit() public void unreadbits() public void unreadbits(int numberofbits)

2 Vedlegg A.1 Filbehandling på bit-nivå Side 2 av 9 Den første legger tilbake den sist leste biten, den andre resten av de leste bitene og den siste legger tilbake et ønsket antall av de sist leste bitene. Det kan aldri legges tilbake flere biter enn dem som sist ble lest. Metoden int unreadsize() forteller til enhver tid hvor mange biter som kan legges tilbake. Se mer om dette på Java API-en for class BitInputStream. En instans av BitOutputStream knyttes til en fil med navn "utfil.xyz" enten ved hjelp av en konstruktør eller ved hjelp av en fabrikasjonsmetode (eng: factory method): BitOutputStream ut = new BitOutputStream("utfil.xyz"); BitOutputStream ut = BitOutputStream.toFile("utfil.xyz"); Også denne klassen bruker en buffer-teknikk for å effektivisere bithåndteringen og filskrivingen. Her har byte-bufferet en standardstørrelse på 4kbb. Det er helt essensielt at en instans av BitOutputStream «lukkes» ved hjelp av close-metoden når fil-skrivingen er ferdig. Et kall på close sørger samtidig for at klassens interne bufferere «tømmes», dvs. at alt som ligger der skrives ut. Skrivingen av biter kan skje med hjelp av en av flg. fem metoder: public void write0bit() public void write1bit() public void writebit(int bit) public void write(int b) public void writebits(int value, int numberofbits) Hver av de tre første metodene skriver ut nøyaktig én bit. Den første en 0-bit, den andre en 1 -bit og den tredje skriver ut den siste biten i parameterverdien bit. Det betyr f.eks. at write1bit() og writebit(1) vil ha samme effekt. Metoden write(int b) skriver ut nøyaktig 8 biter (1 byte), dvs. de 8 siste bitene i parameterverdien b. Den fungerer slik som write er beskrevet i class OutputStream i java.io. Den siste metoden skriver ut et ønsket antall biter, dvs. de siste numberofbits biter (maksimalt 32) fra parameterverdien value. Se mer om dette på Java API-en for class BitOutputStream. A.1.2 Sekvenser av biter og class BitInputStream En fil er en sekvens med byter. Men hver byte består av 8 biter og dermed kan vi også se på en fil som en sekvens av biter. Det er imidlertid ikke mulig å lese biter enkeltvis fra en fil og det er heller ikke mulig å skrive en og en bit til en fil. Ved filbehandling er en byte den minste enheten vi kan arbeide med. Det vil imidlertid være situasjoner der det er aktuelt å arbeide både med biter enkeltvis og med bitsamlinger med et variabelt antall biter. Dette kan vi gjøre ved hjelp av bitoperatorene i Java. Ved hjelp av dem kan vi også lage egne klasser for filbehandling der skriv- og lesmetodene arbeider med et variabelt antall biter. Klassen BitInputStream er spesiallaget for å kunne arbeide med sekvenser av biter eller med det som også kalles en strøm (eng: stream) av biter. En fil kan betraktes som en sekvens eller strøm av biter. Men det er også andre eksempler. I en byte-tabell (eng: byte array) ligger bytene fortløpende bortover og dermed (1 byte = 8 biter) blir det en sekvens av biter.

3 Vedlegg A.1 Filbehandling på bit-nivå Side 3 av 9 A.1.3 Instansiering av BitInputStream Klassen BitInputStream har fire konstruktører og to fabrikasjonsmetoder (eng: factory methods): public BitInputStream(InputStream in) public BitInputStream(String filename) public BitInputStream(InputStream in, int size) public BitInputStream(String filename, int size) public static BitInputStream fromfile(string filename) public static BitInputStream frombytearray(byte[] b) BitInputStream bruker et internt buffer for å gjøre fil-lesingen mest mulig effektiv. Når bufferet er tomt blir det fylt ved hjelp én leseoperasjon. Dermed blir antallet leseoperasjoner kraftig redusert. En fil kan ligge på en harddisk, på en diskett, på en CD eller kanskje på Internett. Operasjoner på slike yttre enheter går alltid vesentlig saktere enn operasjoner internt i datamaskinen, og derfor er det lønnsomt å ha få av dem. De første konstruktørene trenger en InputStream eller et filnavn som parameter og bruker en standardverdi på 4kb (= 4096 byter) som intern bufferstørrelse. I de to neste kan en selv velge bufferstørrelse. Det er plattformavhengig hva som er den mest gunstige bufferstørrelsen. Det henger sammen med hvor mange byter det er mulig å lese fra f.eks. harddisken i én leseoperasjon. En bufferstørrelse på 4kb vil kunne fungere bra i de fleste tilfeller. De to fabrikasjonsmetodene er litt annerledes. Den første knytter en BitInputStream til en fil med oppgitt filnavn, og bruker standard bufferstørrelse. Den andre bruker en byte-tabell som den bitsekvensen det skal leses fra. Der blir bufferstørrelsen satt lik byte-tabellens lengde så sant den ikke er større enn standard bufferstørrelse. Hvis vi skal knytte en instans av BitInputStream-klassen til en fil med navn "innfil.xyz", kan vi gjøre det på en av flg. to måter: BitInputStream inn = new BitInputStream("innfil.xyz"); BitInputStream inn = BitInputStream.fromFile("innfil.xyz"); Programkode A.1.3 a) Gitt at vi har flg. sekvens eller strøm av biter: Figur A.1.3 b) Det er tilsammen 48 biter. Vi kunne f.eks. tenke oss at det er de første 48 bitene (dvs. de første 7 bytene) på filen "innfil.xyz". Men det er også mulig å lage en byte-tabell som gir oss den samme sekvensen. De første 8 bitene er Dette kan tolkes som tallet 103 (= ). De neste 8 bitene er og det blir 89 (= ). Osv. Dermed vil flg. byte-tabell gi oss bitsekvensen i Figur A.1.3 b): byte[] b = {(byte)103,(byte)89,(byte)110,(byte)-27,(byte)98,(byte)-100}; Vi knytter en instans av BitInputStream-klassen til byte-tabellen b på en av flg. to måter:

4 Vedlegg A.1 Filbehandling på bit-nivå Side 4 av 9 BitInputStream inn = new BitInputStream(new ByteArrayInputStream(b),b.length); BitInputStream inn = BitInputStream.fromByteArray(b); Programkode A.1.3 c) Her brukes b.length som bufferstørrelse i begge tilfellene. I det første tilfellet eksplisitt som parameterverdi og i det andre tilfellet implisitt i koden for fabrikasjonsmetoden. Det har ingen hensikt å bruke en bufferstørrelse som er større enn størrelsen på byte-tabellen. Vi kan også se på en tegnstreng som en bitsekvens siden hvert tegn kan ses på som 8 biter. Vi knytter en instans av BitInputStream til en tegnstreng på flg. måte: String s = "Dette er den første delen av en tekst."; BitInputStream inn = BitInputStream.fromByteArray(s.getBytes()); Programkode A.1.3 d) OBS En instans av klassen BitInputStream "lukkes" ved hjelp av metoden void close(). A.1.4 Read - metodene Vi antar nå at vi har en instans av class BitInputStream ved navn inn og at de første bitene i den tilhørende bitsekvensen er som Figur A.1.3 b). Det kan vi f.eks. få til ved hjelp av Programkode A.1.3 c). Klassen har tre lesemetoder: public int readbits(int numberofbits) public int read() public int readbit() Før lesingen starter vil bitsekvensen se slik ut: x Figur A.1.4 a) Symbolet x markerer gjeldende posisjon (eng: current position), og før noe er lest er gjeldende posisjon helt i begynnelsen av sekvensen. Vi leser så f.eks. 17 biter: int n = inn.readbits(17); // n får verdien Programkode A.1.4 b) De 17 leste bitene vil bli returnert som de 17 bakerste (minst signifikante) bitene i et heltall. Resten (de 15 forreste) vil garantert være 0-biter. I Programkode A.1.4 b) vil variablen n inneholde de 17 første bitene fra sekvensen og de ligger bakerst (markert med fet type). I tillegg vil gjeldende posisjon ha flyttet seg 17 posisjoner mot høyre slik som Figur A.1.4 c) under viser: x Figur A.1.4 c)

5 Vedlegg A.1 Filbehandling på bit-nivå Side 5 av 9 Vi kan gå videre fra Programkode A.1.4 b): n = inn.readbits(5); // n får verdien Programkode A.1.4 d) Variablen n innholder nå de 5 neste bitene og gjeldende posisjon er flyttet 5 posisjoner mot høyre slik som Figur A.3.4 e) under viser: x Figur A.1.4 e) Generelt gjelder at metoden int readbits(int numberofbits) leser et oppgitt antall biter, fra og med og gjeldende posisjon, og bitene blir returnert som de bakerste bitene i et heltall. Resten av heltallet (de forreste bitene) består av 0-biter. Internt i klassen vil gjeldende posisjon ha flyttet seg like mange posisjoner mot høyre som antallet leste biter. Det er imidlertid en restriksjon. Det er ikke mulig å lese flere enn 31 biter på en gang. Grunnen til at det ikke kan leses 32 biter er at -1 returneres når det er mindre enn numberofbits biter igjen. Dermed vil det ikke være mulig å skille på når -1 (dvs biter) er en bitene i en innlesing eller signaliserer at at det ikke er nok biter igjen å lese. Den neste read-metoden - int read() - leser nøyaktig 8 biter (1 byte) (og gjeldende posisjon flyttes 8 posisjoner mot høyre). Den er tatt med fordi class InputStream har en slik metode. F.eks. vil nå koden read() og koden readbits(8) ha samme effekt. Den siste metoden - int readbit() - leser én bit og returnerer 0 eller 1 avhengig av om den leste biten var en 0- eller 1 -bit. Internt flyttes gjeldende posisjon en mot høyre. Spesielt vil readbit() og readbits(1) ha samme effekt, men den første er litt raskere. Felles for alle de tre read-metodene er at -1 returneres hvis det er færre enn det ønskede antallet biter igjen i sekvensen. Dette behøver ikke å bety at vi har kommet til slutten på sekvensen (end of file). Hvis det f.eks. er 5 biter igjen i sekvensen og vi ber om å få lese 10, vil vi få -1 som returverdi. Metoden int available() forteller oss til enhver tid hvor mange biter det er igjen. Hvis metoden readbit() returnerer -1, så har vi kommet til slutten av sekvensen. Dette bruker vi i flg. programeksempel der det leses en og en bit fra en bitsekvens og bitene skrives ut som 0 og 1: byte[] b = // b gir oss bitsekvensen i figur A.1.3 b) {(byte)103,(byte)89,(byte)110,(byte)-27,(byte)98,(byte)-100}; BitInputStream inn = BitInputStream.fromByteArray(b); int n; while ((n = inn.readbit())!= -1) System.out.print(n); inn.close(); // utskriften blir det samme som bitsekvensen i Figur A.1.3 b) Programkode A.1.4 f)

6 Vedlegg A.1 Filbehandling på bit-nivå Side 6 av 9 A.1.5 Metodene skip og unread Det er mulig å hoppe over eller skippe (eng: skip) et antall biter. Det betyr at gjeldende posisjon i bitsekvensen flyttes (mot høyre) uten at bitene leses. Vi har to skip-metoder: public int skipbit() public int skipbits(int numberofbits) Den første - skipbit() - hopper over én bit om gangen og den andre hopper over et oppgitt antall biter. Metoden skipbits(int numberofbits) fungerer best når antallet biter som skal skippes ikke er veldig stort. Den kan imidlertid brukes til å skippe nærmest så mange biter vi vil. Antallet begrenses kun av datatypen int. Begge metodene har det til felles at returverdien er et antall, dvs. det antallet biter som ble hoppet over (eller skippet). Det er ikke mulig å hoppe lengre i bitsekvensen enn til slutten, dvs. én posisjon forbi siste bit. Hvis det er færre biter igjen i bitsekvensen enn det antallet som skal skippes, returneres det antallet som ble skippet. Det betyr spesielt at hvis vi har nådd til slutten av bitsekvensen, vil returverdien bli 0 uansett hvilken skip som kalles. Ta utgangspunkt i Figur A.1.4 e). Vi kan nå f.eks. be om å få skippet 13 biter: int k = inn.skipbits(13); // k får verdien 13 Det fører til at gjeldende posisjon flyttes 13 posisjoner mot høyre slik som Figur A.3.5 a) under viser: x Figur A.1.5 a) En unread legger biter tilbake (eng: pushes back) i bitsekvensen. Det som egentlig skjer er at gjeldende posisjon flyttes tilbake (mot venstre). Dermed blir unread en slags omvendt skip. Vi har tre unread-metoder: public void unreadbit() public void unreadbits() public void unreadbits(int numberofbits) Et kall på en unread krever at det har vært en forutgående read (eller skip). Etter en read kan en eller flere av de bitene som ble lest, «legges tilbake» i bitsekvensen, men det kan ikke legges tilbake flere enn de som ble lest. En skip leser egentlig ikke biter - den bare hopper over. Men det er tillatt med en unread også etter en skip, men det kan fortsatt ikke «legges tilbake» flere enn de bitene som ble skippet. I begge tilfellene (både etter en read og en skip) kan det av ulike årsaker normalt ikke legges tilbake flere enn 25 biter. Etter en read (eller en skip) kan en unread kalles flere ganger, men sammenlagt kan det ikke «legges tilbake» flere biter enn de som ble lest (eller skippet). Det betyr at gjeldende posisjon i bitsekvensen ikke kan flyttes lenger tilbake (mot venstre) enn til der den var før den forutgående read (eller skip) ble utført. Hvis det gjøres et forsøk på å «legge tilbake» flere biter enn det som er mulig, vil det kastes et unntak av typen IllegalArgumentException. Metoden int unreadsize() forteller hele tiden hvor mange biter som kan «legges tilbake». Den første metoden - void unreadbit() - legger den sist leste biten tilbake (dvs. flytter gjeldende posisjon en mot venstre). Den neste metoden - void unreadbits() - legger resten av bitene tilbake, dvs. enten alle bitene eller eventuelt de som ikke allerede har blitt lagt tilbake. Det som egentlig skjer er at gjeldende posisjon flyttes helt tilbake til der den var før siste

7 Vedlegg A.1 Filbehandling på bit-nivå Side 7 av 9 read (eller skip). Den siste metoden - void unreadbits(int numberofbits) - legger det oppgitte antallet biter tilbake (dvs. flytter gjeldende posisjon tilsvarende tilbake). Ta nå utgangspunkt i Figur A.1.5 a), som vi fikk etter å ha skippet 13 biter (dvs. etter kallet inn.skipbits(13)). Vi ser på flg. kode: inn.unreadbits(9); // ok - det ble skippet 13 biter sist k = inn.unreadsize(); // k får verdien 4 ( = 13-9) n = inn.readbits(7); // de 7 bitene leses inn.unreadbits(); // de 7 bitene "legges tilbake" inn.unreadbit(); // feil!! - det er allerede lagt tilbake 7 biter A.1.6 Øvrige metoder Programkode A.1.5 b) Det er mulig å lese biter fra bitsekvensen uten at de blir fjernet. Det betyr egentlig at gjeldende posisjon holdes i ro etter lesingen. Det er to slike metoder: public int peekbit() public int peekbits(int numberofbits) Den første metoden - peekbit() - returnerer 0 eller 1 avhengig av om biten på gjeldende posisjon er en 0-bit eller en 1-bit. Gjeldende posisjon flyttes ikke etterpå. Den andre metoden - peekbits(int numberofbits) - leser et oppgitt antall biter fra og med gjeldende posisjon (og gjeldende posisjon flyttes ikke). Bitene returneres på samme måte som det den tilsvarende read gjør, dvs. som biter lengst til høyre i et heltall. Begge peek-metodene returnerer -1 hvis det er færre biter igjen i bitsekvensen enn det antallet som ønskes lest. OBS Etter en peek blokkeres muligheten til å «legge biter tilbake», dvs. at unread ikke er tillatt. Det må først utføres en read (eller en skip) før blokkeringen opphører. Den siste muligheten som klassen BitInputStream tilbyr er å legge helt nye biter inn i bitsekvensen, dvs. biter i tillegg til de som allerede ligger der. Det er tre metoder for det: public void insert1bit() public void insert0bit() public void insertbits(int value, int numberofbits) De to første legger inn én bit (0 eller 1) rett foran gjeldende posisjon og ny gjeldende posisjon blir der den nye biten er lagt. Den siste metoden legger de siste numberofbits fra value inn rett foran gjeldende posisjon, og ny gjeldende posisjon blir der den første av de nye bitene er lagt. Det er restriksjoner på hvor mange nye biter det kan legges inn. Rett etter en read (eller en skip) kan det minst legges så mange biter som ble lest (eller skippet hvis det ikke ble skippet mer enn 25 biter). I mange tilfeller kan det legges inn mer. Metoden int insertsize() forteller til enhver tid hvor mange nye biter som kan legges inn. OBS: Etter en insert gir unreadsize() en tilsvarende mindre verdi. A.1.7 class BitOutputStream BitOutputStream har fire konstruktører og to fabrikasjonsmetoder (eng: factory methods): public BitOutputStream(OutputStream out) public BitOutputStream(String filename) public BitOutputStream(OutputStream out, int size)

8 Vedlegg A.1 Filbehandling på bit-nivå Side 8 av 9 public BitOutputStream(String filename, int size) public static BitOutputStream tofile(string filename) public static BitOutputStream tofile(string filename, boolean append) BitOutputStream bruker interne buffere for å gjøre bithåndteringen og fil-skrivingen mest mulig effektiv. Når det interne byte-bufferet blir fullt skrives det automatisk ut ved hjelp av én skriveoperasjon. De første konstruktørene trenger en OutputStream eller et filnavn som parameter og bruker en standardverdi på 4kb som intern bufferstørrelse. I de to neste konstruktørene kan en selv velge bufferstørrelse. Det er plattformavhengig hva som er den mest gunstige bufferstørrelsen. Det henger sammen med hvor mange byter det er mulig å skrive til f.eks. harddisken i én skriveoperasjon. En bufferstørrelse på 4kb vil kunne fungere bra i de fleste tilfeller. Begge fabrikasjonsmetodene brukes standard bufferstørrelse. Gitt at vi vil skrive til en fil med navn "utfil.xyz". Hvis vi har en fil med dette navnet fra før blir den overskrevet (eller egentlig fjernet og erstattet med ny med samme navn). Vi kan knytte en instans av BitOutputStream-klassen til "utfil.xyz" på en av flg. to måter: BitOutputStream ut = new BitOutputStream("utfil.xyz"); BitOutputStream ut = BitOutputStream.toFile("utfil.xyz"); Programkode A.1.7 a) Av og til ønsker vi å skrive videre (bakerst) på en eksisterende fil, f.eks. filen "utfil.txt". Da settes append til true i fabrikasjonsmetoden. F.eks. slik: BitOutputStream ut = BitOutputStream.toFile("utfil.xyz",true); OBS: En instans av klassen BitOutputStream «lukkes» ved hjelp av metoden void close(). BitOutputStream har fem skrivemetoder: public void write0bit() public void write1bit() public void writebit(int bit) public void write(int b) public void writebits(int value, int numberofbits) De to første skriver ut, som navnet sier, én bit (0 eller 1). Det gjør også den neste, men der er det den siste biten i parameterverdien bit som skrives ut. Det betyr at f.eks. write1bit() og writebit(1) har samme effekt. Metoden write(int b) skriver ut nøyaktig 8 biter (1 byte), dvs. de 8 siste bitene i parameterverdien b. Den svarer til den vanlige write-metoden i class OutputStream. Den siste metoden skriver ut de numberofbits siste bitene fra parameterverdien value. Hvis vi skal skrive biter til en fil, vil det ofte skje at det tilsammen ikke blir et helt antall byter, f.eks. slik som i flg. eksempel: BitOutputStream ut = BitOutputStream.toFile("utfil.xyz"); ut.writebits(-1,9); // skriver ut 9 biter, dvs: ut.writebits(45,7); // skriver ut 7 biter, dvs: ut.writebits(22,5); // skriver ut 5 biter, dvs: ut.close(); // VIKTIG: Avslutt alltid med close()

9 Vedlegg A.1 Filbehandling på bit-nivå Side 9 av 9 Programkode A.1.7 b) I Programkode A.3.7 b) blir det skrevet ut = 21 biter. Her er det et problem. I det vanlige filsystemet er 1 byte den minste enheten for utskrift. BitOutputStream løser dette ved at biter fortløpende settes sammen til byter som så skrives ut. Dette går bra inntil vi skal avslutte. Da kan det være at vi ikke har nok biter til å fylle opp den siste byten. Systemet løser det selv ved at et tilstrekkelig antall 0-biter legges på til slutt. I Programkode A.3.7 b) der det eksternt kun ble skrevet ut 21 biter, vil det internt bli lagt til 3 ekstra 0-biter bakerst. Tilsammen 24 biter som utgjør 3 byter. Utskriftsfilen "utfil.xyz" vil derfor komme til å inneholde disse 24 bitene: Når en fil som er laget på denne måten, senere skal leses, vil problemet dukke opp igjen. Hvis det ligger en eller flere 0-biter bakerst på filen, så er det ikke mulig å vite om det er biter vi har skrevet ut eller om det er biter som systemet selv har lagt på. Hvis det er viktig å vite dette må vi «notere» et sted det antallet 0-biter som systemet har lagt på. Eventuelt kan vi i steden «notere ned» det totale antallet biter vi har skrevet ut. Metoden public int missingbits() forteller til enhver tid hvor mange biter som mangler for å kunne fylle den siste byten. Den returnerer et heltall i intervallet [0,7]. Hvis f.eks. den kalles rett før vi lukker, så får vi vite hvor mange 0-biter systemet kommer til å legge på bakerst. Det er særdeles viktig at vi lukker ved hjelp av metoden void close() når vi er ferdige med skrivingen. Hvis ikke kan vi risikere at ikke alle bitene blir skrevet ut til utstrømmen. Det kommer av at BitOutputStream bruker et internt buffer-system. Det interne byte-bufferet blir automatisk «tømt» (dvs. innholdet sendes til utstrømmen) når det er fullt. Men det vil normalt ligge noe igjen i begge de interne bufferne (bit-buffer og byte-buffer) når vi skal avslutte. Dette blir sendt til utstrømmen når vi kaller close(). Det vil kunne være situasjoner der vi må «tømme» bufferne selv om vi ennå ikke er ferdige med skrivingen. Metoden public void flush() er laget for dette formålet. En må være klar over at det da vil bli lagt på tilstrekkelige mange 0-biter bakerst slik at det blir et helt antall byter. Metoden int missingbits() vil også her fortelle hvor mange. Men i vanlig skriving til en utstrøm (f.eks. en fil) skal en normalt ikke bruke flush(). OBS: Det ligger et innebygd kall på flush() i koden for close(). Det er derfor ikke nødvendig å gjøre et eksplisitt kall på flush() før en avslutter med close(). Copyright Ulf Uttersrud, All rights reserved.

Algoritmer og datastrukturer A.1 BitInputStream

Algoritmer og datastrukturer A.1 BitInputStream Vedlegg A.1 BitInputStream Side 1 av 8 Algoritmer og datastrukturer A.1 BitInputStream A.1 BitInputStream A.1.1 Instansiering BitInputStream har fire konstruktører og to konstruksjonsmetoder (eng: factory

Detaljer

Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream

Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream Vedlegg A.2 BitOutputStream Side 1 av 6 Algoritmer og datastrukturer Vedlegg A.2 BitOutputStream A.2 BitOutputStream A.2.1 Instansiering og skriving BitOutputStream har fire konstruktører og to konstruksjonsmetoder

Detaljer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 Delkapittel 9.1 Generelt om balanserte trær Side 1 av 13 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 9.1 Generelt om balanserte trær 9.1.1 Hva er et balansert tre? Begrepene balansert og

Detaljer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2 Delkapittel 9.2 Rød-svarte og 2-3-4 trær Side 1 av 16 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2 9.2 Rød-svarte og 2-3-4 trær 9.2.1 B-tre av orden 4 eller 2-3-4 tre Et rød-svart tre og et

Detaljer

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.4

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.4 Delkapittel 5.4 Huffmantrær Side 1 av 50 Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.4 5.4 Huffmantrær 5.4.1 Datakomprimering D. Huffman Et Huffmantre er et fullt binærtre med spesielle egenskaper

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8 Delkapittel 1.8 Algoritmeanalyse Side 1 av 12 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8 1.8 Algoritmeanalyse 1.8.1 En algoritmes arbeidsmengde I Delkapittel 1.1 ble det definert og diskutert

Detaljer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 Delkapittel 3.1 Grensesnittet Liste Side 1 av 11 Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 3.1 En beholder 3.1.1 En beholder En pappeske er en beholder En beholder er noe vi kan legge ting

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer 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

Detaljer

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

Forelesningsquiz. Forelesning inf1000 - Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min. Forelesning inf1000 - Java 5 Forelesningsquiz Tema: En liten quiz (se utdelt ark) Filbehandling Tekster Ole Christian Lingjærde, 19. september 2012 Sett dere to (eller tre) sammen og besvar de fire spørsmålene

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 Delkapittel 1.3 Ordnede tabeller Side 1 av 70 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 1.3 Ordnede tabeller 1.3.1 Permutasjoner En samling verdier kan settes opp i en rekkefølge. Hver

Detaljer

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

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder: Lese fra fil Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo INF1000 : Forelesning 5 Vi må først importere pakken easyio Vi åpner

Detaljer

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå Vedlegg A.4 Filbehandling på char-nivå Side 1 av 9 Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå A.4 Filbehandling på char-nivå A.4.1 Reader-klassene Reader er en abstrakt basisklasse

Detaljer

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

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være

Detaljer

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER .9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,

Detaljer

Algoritmer og datastrukturer E Løkker i Java

Algoritmer og datastrukturer E Løkker i Java Vedlegg E Løkker i Java Side 1 av 6 Algoritmer og datastrukturer E Løkker i Java E Løkker i Java E.1 For-løkker En for-løkke består av de fire delene initialisering, betingelse, oppdatering og kropp (eng:

Detaljer

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

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster 3 emner i dag! INF1000 Uke 5 Litt om objekter, pekere og null Filer og easyio Litt mer om tekster Litt om objekter, filer med easyio, tekst 1 2 Objekter og pekere Vi lager pekere og objekter når vi bruker

Detaljer

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

22.02.2009. Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java Spørsmål fra forrige forelesning INF1000 Forelesning 7 Operator-presedens i Java? Hvordan virker metodene inword()/inint()/etc. i In-klassen i easyio når vi skriver inn flere verdier på tastaturet? Litt

Detaljer

Teori og oppgaver om 2-komplement

Teori og oppgaver om 2-komplement Høgskolen i Oslo og Akershus Diskret matematikk høsten 2014 Teori og oppgaver om 2-komplement 1) Binær addisjon Vi legger sammen binære tall på en tilsvarende måte som desimale tall (dvs. tall i 10- talssystemet).

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Fredag 4. desember 2015 Tid for eksamen: 14.30 (4 timer)

Detaljer

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

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 Eksempel med to-dimensjonal array Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 6 Vi skal lage et program som illustrerer

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Prøveeksamen tirsdag 23. november 2010 Tid for eksamen:

Detaljer

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn? Dagens tema: 12 gode råd for en kompilatorskriver Hva skal gjøres med navn? Sjekking av navn Hvordan sjekke navn? Testutskrifter 12 gode råd En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme

Detaljer

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Algoritmer og datastrukturer Eksamen 02.12.2009 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator som ikke kommuniserer. Faglærer: Ulf Uttersrud Råd og tips: Bruk ikke for

Detaljer

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

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 9. mai 2016 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet består

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Onsdag 4. juni 2014 Tid for eksamen: 9:00-15:00 Oppgavesettet er på

Detaljer

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1 Delkapittel 5.1 Binære trær side 1 av 71 Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1 5.1 Binære trær 5.1.1 Binære trærs egenskaper Binære trær (eng: binary tree), og trær generelt, er en

Detaljer

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato: 09.12.

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato: 09.12. G høgskolen i oslo Emne: Algoritmer og datastrukturer Emnekode: 80131A Faglig veileder: UlfUttersrud Gruppe(r) : Dato: 09.12.2004 Eksamenstid: 9-14 Eksamensoppgaven består av: Tillatte hjelpemidler Antall

Detaljer

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1 Delkapittel 2.1 Plangeometriske algoritmer Side 1 av 7 Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1 2.1 Punkter, linjesegmenter og polygoner 2.1.1 Polygoner og internett HTML-sider kan ha

Detaljer

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3 Delkapittel 4.3 En toveiskø (deque) Side 1 av 5 Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3 4.3 En toveiskø (deque) 4.3.1 Grensesnittet Toveiskø En stakk kan godt ses på som en kø der vi

Detaljer

IN Notat om I/O i Java

IN Notat om I/O i Java IN1010 - Notat om I/O i Java Mathias J.P. Stang, Tuva Kristine Thoresen, Ingrid Grønlie Guren 17. januar 2018 Dette notatet handler om I/O (input/output) i Java, og tar for seg innlesning fra terminal,

Detaljer

Algoritmer og datastrukturer Vedlegg A.3 Filer på byte-nivå

Algoritmer og datastrukturer Vedlegg A.3 Filer på byte-nivå Vedlegg A.3 Filbehandling på byte-nivå Side 1 av 21 Algoritmer og datastrukturer Vedlegg A.3 Filer på byte-nivå A.3 Filbehandling på byte-nivå A.3.1 Sammendrag En datastrøm (eng: data stream) er en sekvens

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Eksamensoppgave i Algoritmer og datastrukturer ved Høgskolen i Oslo Side 1 av 5 Algoritmer og datastrukturer Eksamen 30.11.2010 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator

Detaljer

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

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 Oversikt INF1000 Uke 6 Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster Litt om objekter, filer med easyio, tekst Arne Maus 1 2 Objekter, pekere og null Vi lager pekere og objekter

Detaljer

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

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger I dag INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Litt repetisjon Mer om uttrykk Lesing og skriving til terminal Forgreninger

Detaljer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 11.2 Korteste vei i en graf 11.2.1 Dijkstras metode En graf er et system med noder og kanter mellom noder. Grafen kalles rettet Notasjon Verdien

Detaljer

INF Notat om I/O i Java

INF Notat om I/O i Java INF1000 - Notat om I/O i Java Tuva Kristine Thoresen, Ingrid Grønlie Guren tuvakt@ulrik.uio.no, ingridgg@ulrik.uio.no 22. oktober 2014 Dette notatet handler om I/O (input/output) i Java, og tar for seg

Detaljer

Løse reelle problemer

Løse reelle problemer Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel:

Detaljer

Kanter, kanter, mange mangekanter

Kanter, kanter, mange mangekanter Kanter, kanter, mange mangekanter Nybegynner Processing PDF Introduksjon: Her skal vi se på litt mer avansert opptegning og bevegelse. Vi skal ta utgangspunkt i oppgaven om den sprettende ballen, men bytte

Detaljer

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

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; } 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; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =

Detaljer

Oblig 4Hybelhus litt mer tips enn i oppgaven

Oblig 4Hybelhus litt mer tips enn i oppgaven Oblig 4Hybelhus litt mer tips enn i oppgaven lørdag 19. okt 2013 Arne Maus Obligatorisk oppgave 4 Gulbrand Grås husleiesystem I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer,

Detaljer

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 Stack Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist Et nytt element legges alltid på toppen av stakken Skal vi ta ut et element, tar

Detaljer

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 Stack Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist Et nytt element legges alltid på toppen av stakken Skal vi ta ut et element, tar

Detaljer

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

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm Mer om easyio Mer om forgreninger Løkker 7. september 2004 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 4 1 Tre måter å lese fra terminal Først:

Detaljer

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen. Hver gang funksjonen printhallo kalles utføres instruksjonene spesifisert i den. [Kurssidene] [ ABI - fagsider bibin ] Webprogrammering høsten 2015 //funksjonskall printhallo(); //enda en gang printhallo();

Detaljer

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006 Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006 Advarsel Etter forelesningen 6. mars har vi gjennomgått alt stoffet som trengs for å løse oppgaven. Du kan imidlertid godt starte arbeidet allerede

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Algoritmer og datastrukturer Eksamen 24.02.2010 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator som ikke kommuniserer. Faglærer: Ulf Uttersrud Råd og tips: Bruk ikke for

Detaljer

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

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert. Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen

Detaljer

Å lese tall fra en fil, klassen Scanner

Å lese tall fra en fil, klassen Scanner Å lese tall fra en fil, klassen Scanner 1. Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2. Kan skanne teksten etter data av ulike typer. 3. Kan kun skanne framover i teksten. Vis

Detaljer

Utførelse av programmer, metoder og synlighet av variabler i JSP

Utførelse av programmer, metoder og synlighet av variabler i JSP Utførelse av programmer, metoder og synlighet av variabler i JSP Av Alf Inge Wang 1. Utførelse av programmer Et dataprogram består oftest av en rekke programlinjer som gir instruksjoner til datamaskinen

Detaljer

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

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene. Høgskoleni Østfold EKSAMEN Emnekode: Emnenavn: ITF20006 Algoritmer og datastrukturer Dato: Eksamenstid: 9. mai 2016 9.00 13.00 Hjelpemidler: Faglærer: Alle trykte og skrevne Jan Høiberg Om eksamensoppgaven

Detaljer

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

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Kalkulator Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

TDT4102 - Prosedyre- og objektorientert programmering

TDT4102 - Prosedyre- og objektorientert programmering Eksamensoppgave i TDT4102 - Prosedyre- og objektorientert programmering Lørdag 6. juni 2009 Kontaktperson under eksamen: Trond Aalberg (97631088) Eksamensoppgaven er utarbeidet av Trond Aalberg og kvalitetssikret

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler

Detaljer

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

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det? Obligatorisk oppgave 3 Gulbrand Grås husleiesystem Oblig 3hus litt mer tips enn i oppgaven I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer, nummerert fra -3. I hver etasje

Detaljer

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Eksamen 22. februar 2011 Side 1 av 5 Algoritmer og datastrukturer Eksamen 22. februar 2011 Eksamenstid: 5 timer Hjelpemidler: Alle trykte og skrevne + håndholdt kalkulator som ikke kommuniserer. Faglærer: Ulf Uttersrud Råd og

Detaljer

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

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden. EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2008 kl 09.00 til kl 13.00 Hjelpemidler: 4 A4-sider (2 ark) med valgfritt innhold Kalkulator Faglærer: Mari-Ann

Detaljer

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4 Delkapittel 4.4 En prioritetskø Side 1 av 8 Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4 4.4 En prioritetskø 4.4.1 Grensesnittet PrioritetsKø En prioritetskø (engelsk: priority queue) er en

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del2: 7.2 og 7.4 Roy M. Istad 2015 Fil: Permanent lagring av data PrintWriter(filnavn) throws Exception usjekkede/sjekkede unntak? skriver.println(data-i-tekstlinje)

Detaljer

INF1010 våren 2018 tirsdag 23. januar

INF1010 våren 2018 tirsdag 23. januar INF1010 våren 2018 tirsdag 23. januar I/O og litt om bruk av unntak i Java Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type: Scanner boolean

Detaljer

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering Kapittel 1 Datamaskiner og programmeringsspråk Dette kapitlet er en kort introduksjon til programmering. Vi vil se på hvordan man skriver, bygger og kjører programmer, samt illustrere noen sentrale programmeringsbegrep

Detaljer

Stack. En enkel, lineær datastruktur

Stack. En enkel, lineær datastruktur Stack En enkel, lineær datastruktur Hva er en stack? En datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist Et nytt element legges alltid på toppen av stakken Skal vi

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 10 Frist: 2014-04-11 Mål for denne øvinga:

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del1: 7.1 7.2 Roy M. Istad 2015 Fil permanent lagring Ønsker at program skal kunne ta vare på data over tid, fra en kjøring til den neste (kontra hurtigminnet

Detaljer

INF1000 : Forelesning 5

INF1000 : Forelesning 5 INF1000 : Forelesning 5 Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo 1 Lese fra fil import easyio.*; Vi må først importere pakken

Detaljer

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Ordliste. Obligatorisk oppgave 1 - Inf 1020 Ordliste. Obligatorisk oppgave 1 - Inf 1020 I denne oppgaven skal vi tenke oss at vi vil holde et register over alle norske ord (med alle bøyninger), og at vi skal lage operasjoner som kan brukes til f.

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Forelesning inf1000 - Java 5 Tema: En liten quiz (se utdelt ark) Filbehandling Tekster Ole Christian Lingjærde, 19. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 19. september 2012 1 Forelesningsquiz

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer TOD063 Datastrukturer og algoritmer Øving : 4 Utlevert : Veke 9 Innleveringsfrist : 19. mars 2010 Klasse : 1 Data og 1 Informasjonsteknologi Ta gjerne 1 og 2 først! Gruppearbeid: 2 personar pr. gruppe

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag 1 Algoritmer og datastrukturer Løsningsforslag Eksamen 29. november 2011 Oppgave 1A Verdien til variabelen m blir lik posisjonen til den «minste»verdien i tabellen, dvs. bokstaven A, og det blir 6. Oppgave

Detaljer

Norsk informatikkolympiade 2014 2015 1. runde. Sponset av. Uke 46, 2014

Norsk informatikkolympiade 2014 2015 1. runde. Sponset av. Uke 46, 2014 Norsk informatikkolympiade 014 015 1. runde Sponset av Uke 46, 014 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl. 09.00 13.

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl. 09.00 13. BOKMÅL Side 1 av 5 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap KONTERINGSEKSAMEN

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 11. juni 2004 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 8

Detaljer

Projeksjoner av vektorer Analyse av værdata

Projeksjoner av vektorer Analyse av værdata Projeksjoner av vektorer Analyse av værdata Lars Sydnes 11. september 2013 1 Osloserien Ved værstasjoner rundt omkring i verden måler man temperaturen hver eneste dag. Vi har tilgang til målinger gjort

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 10. juni 2005 Tid for eksamen: 14.30 17.30 Oppgavesettet er på

Detaljer

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000 Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000 Leveringsfrist Innleveringsfristen er fredag 14. november kl 16.00. Viktig: se side 4 for detaljerte leveringskrav. Formål Formålet med denne oppgaven

Detaljer

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

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7 Gjennomgang prøveeksamen 2014 oppgave 1, 2, 4, 5, 7 1a: Hva er verdien til tall etter at følgende kode er utført: 17 int tall = 5; tall = (tall*3) + 2; 5 15 17 1b: Anta at følgende programsetninger utføres.

Detaljer

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

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først) INF1010 våren 2019 Onsdag 30. januar Mer om unntak i Java (med litt repetisjon av I/O først) Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type:

Detaljer

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller. Dagens forelesning Java 13 Design av større programmer : fordeling av roller INF 101-13. mars 2003 Flere eksempler på bruk av objekter MVC-prinsippet MVC-prinsippet Flere eksempler på programmer med objekter

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.6

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.6 Delkapittel 1.6 Multidimensjonale tabeller og matriser Side 1 av 23 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.6 1.6 Multidimensjonale tabeller og matriser 1.6.1 Endimensjonale tabeller Vi

Detaljer

INF109 - Uke 1b 20.01.2016

INF109 - Uke 1b 20.01.2016 INF109 - Uke 1b 20.01.2016 1 Variabler Et program er ikke til stor hjelp hvis det er statisk. Statisk betyr at programmet bare bearbeider faste data som er lagt inn i programkoden. For å gjøre programmer

Detaljer

Veileder i bruk av GoodReader

Veileder i bruk av GoodReader RISØR KOMMUNE Veileder i bruk av GoodReader Innhold 1. Laste ned dokument fra kommunens hjemmeside til GoodReader... 2 2. Bruke GoodReader... 7 3. Redigere filnavn... 8 4. Opprette kataloger / mapper...

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del1: 7.1 7.2 Roy M. Istad 2015 Fil permanent lagring Ønsker at program skal kunne ta vare på data over tid, fra en kjøring til den neste (kontra hurtigminnet

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1020 Algoritmer og datastrukturer Eksamensdag: 15. desember 2004 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 6 sider.

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 3. november 2, kl. 9. - 14. Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Detaljer

Klasser, objekter, pekere og UML. INF1000 - gruppe 13

Klasser, objekter, pekere og UML. INF1000 - gruppe 13 Klasser, objekter, pekere og UML INF1000 - gruppe 13 Klasse Beskriver ofte ting fra den virkelige verden Veldig ofte et substantiv (Person, Bok, Bil osv.) class Person { String navn; int alder; } class

Detaljer

Kapittel 4. 4. og 5. september 2012. Institutt for geofag Universitetet i Oslo. GEO1040 - En Introduksjon til MatLab. Kapittel 4.

Kapittel 4. 4. og 5. september 2012. Institutt for geofag Universitetet i Oslo. GEO1040 - En Introduksjon til MatLab. Kapittel 4. r r Institutt for geofag Universitetet i Oslo 4. og 5. september 2012 r r Ofte ønsker vi å utføre samme kommando flere ganger etter hverandre gjør det mulig å repetere en programsekvens veldig mange ganger

Detaljer

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

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL. 09.00 13.00 Side 1 av 6 NTNU Norges teknisk-naturvitenskapelige universitet BOKMÅL Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap EKSAMEN I FAG

Detaljer

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

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs BOKMÅL Side 1 av 7 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap KONTINUASJONSEKSAMEN

Detaljer

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012 INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver

Detaljer

Algoritmer - definisjon

Algoritmer - definisjon Algoritmeanalyse Algoritmer - definisjon En algoritme er en beskrivelse av hvordan man løser et veldefinert problem med en presist formulert sekvens av et endelig antall enkle, utvetydige og tidsbegrensede

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag Algoritmer og datastrukturer Løsningsforslag Eksamen 30. november 2010 Oppgave 1A Et turneringstre for en utslagsturnering med n deltagere blir et komplett binærtre med 2n 1 noder. I vårt tilfelle får

Detaljer

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn BOKMÅL EKSAMENSFORSIDE Skriftlig eksamen med tilsyn Emnekode: 108 + 108N Dato: 19.12.201 Ansv. faglærer: Roy M. Istad Campus: Bø Antall oppgaver: 5 Tillatte hjelpemidler (jfr. emnebeskrivelse): Alt trykt

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen : 09.00

Detaljer

EKSAMEN. Algoritmer og datastrukturer

EKSAMEN. Algoritmer og datastrukturer EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2009 kl 09.00 til kl 13.00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Kalkulator Faglærer: Gunnar Misund

Detaljer

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000. Arne Maus, ver.2.2, august, 2013 Bruk av class, FileWriter og Formatter som alternativ til EasyIO i INF1000. Noen ønsker å bruke noen av de klassene vi finner i pakken java.util og java.io isteden for

Detaljer

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler Plan for dagen Vprg 4 LC191D Videregående programmering Høgskolen i Sør-Trøndelag Avdeling for informatikk og e-læring Anette Wrålsen Del: Intro til tekstfiler Del II: Mer om tekstfiler, Scanner-klassen

Detaljer

Læringsmål for forelesningen

Læringsmål for forelesningen Læringsmål for forelesningen Objektorientering Bruk av grensesnitt og implementasjoner i Collection-klasser Java-prog, kap. 14-16 i Big Java Og side 990-997 i Appendix D Collection-rammeverket og iterasjon

Detaljer

Norges Informasjonsteknologiske Høgskole

Norges Informasjonsteknologiske Høgskole Oppgavesettet består av 6 (seks) sider. Norges Informasjonsteknologiske Høgskole PG4200 Algoritmer og datastrukturer Side 1 av 6 Tillatte hjelpemidler: Ingen Varighet: 3 timer Dato: 6. august 2014 Fagansvarlig:

Detaljer

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

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9 Generelt om oblig 3 INF1000 Forelesning 9 15. mars 2010 Tips til oblig 3, separatorer i easyio, Eliza (bruk av HashMap), mer om metoder og klasser Christian M. Hansen Institutt for informatikk, UiO Les

Detaljer