Prøveeksamen høsten 2012

Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

Endret litt som ukeoppgave i INF1010 våren 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

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

Prøveeksamen inf november Arne Maus og Ole Christian Lingjærde

UNIVERSITETET I OSLO

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

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

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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

UNIVERSITETET I OSLO

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

Oblig4 - forklaringer. Arne og Ole Christian

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

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 : Forelesning 4

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

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

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

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

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

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

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

UNIVERSITETET I OSLO

Oblig4 - forklaringer. Arne og Ole Christian

UNIVERSITETET I OSLO

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Gjennomgang av eksamen H99

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

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

UNIVERSITETET I OSLO

Forelesning inf Java 5

Forelesning inf Java 5

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

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

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

Løsningsforslag INF desember 2007

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

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

INF1000 Behandling av tekster

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1000 : Forelesning 5

INF1000: noen avsluttende ord

Oppgave 1a. INF1000 Prøveeksamen Oppgave 1c. Oppgave 1b

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

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

INF1000: Forelesning 6. Klasser og objekter del 1

UNIVERSITETET I OSLO

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

Transkript:

Prøveeksamen høsten 2012 INF1000-21. november 2012 Arne Maus og Ole Christian Lingjærde

x x x x x x x x x x

498 1499 0 1001 1001x Svar: X blir skrevet ut 1001 ganger.

Svar: X blir skrevet ut 100 ganger. i j 0 100 2 101 4 102...... 200 200 true true true... false 100x

Svar: X blir skrevet ut 100 ganger. For hver i=0...9 og for hver j=0...9 og for en k (nemlig k=i) vil vi få skrevet ut "X". ---> 100 x

Svar: X blir skrevet ut 11 ganger. i j 0 2...2 1 3...4 2 5...6 3 7...10 4 11...12 1x 2x 2x 4x 2x

Svar: "Verdi: 28" Begrunnelse: konv(x,y) gjør beregningen x[0]*y[2] + x[1]*y[1] + x[2]*y[0] = = 1*6+2*5+3*4 = 28

Oppgave 4 (15 poeng) Skriv ferdig metoden String expand(string s, int[] k) {... som har som argument en tekststreng s og en heltallsarray k som skal ha samme lengde som antall tegn i s. Metoden skal returnere en tekststreng med samme tegn som i s (og i samme rekkefølge), men hvor hvert tegn forekommer like mange ganger som angitt i arrayen k. Eksempel på bruk: int[] k = {2,3,1,5; String txt = expand( ABCD, k); System.out.println(txt); Det som skrives ut overfor er da AABBBCDDDDD. Du kan anta at arrayen k har riktig lengde og trenger ikke å håndtere feilsituasjoner.

String expand(string s, int[] k) { String t = ""; for (int i=0; i<s.length(); i++) { for (int j=0; j<k[i]; j++) { t = t + s.charat(i); return t;

Oppgave 5 (20 poeng) Firmaet Lur & Drei har spesialisert seg på å selge såkalte helsepiller og har samlet inn data over et helt år som viser hvor mange piller de solgte hver av dagene i året. Disse dataene ligger i en array int[][] antallpiller = new int[12][31]; Hver rad svarer til en måned og hver kolonne svarer til en dag. Datoene som ikke finnes inneholder verdien -1. String[] maaned = {"Januar",...,"Desember"; Begge arrayene ovenfor er deklarert som objektvariabler i toppen av klassen som vi tenker oss skal brukes til å implementere systemet, og du kan fritt referere til dem når du programmerer nedenfor.

Din oppgave er å skrive en metode som kan kalles slik: skrivoversikt(); og som skriver ut på skjermen en passe overskrift, og deretter en linje pr måned som angir hvor mange piller det ble solgt den måneden og gjennomsnittlig antall piller solgt pr dag den måneden (avrundet til nærmeste heltall). Til slutt skal metoden skrive ut hvilken måned det ble solgt flest piller (eller en av dem, hvis det er flere). Salgsstatistikk for Lur & Drei --------------------------------------- Januar : 5323 piller (gjennomsnitt: 172 piller pr dag) Februar : 2533 piller... Desember: 6233 piller Eksempel på utskrift Det ble solgt flest piller i juli (8363 piller).

void skrivoversikt() { System.out.println("Salgsstatistikk for Lur&Drei"); System.out.println("----------------------------"); for (int i=0; i<12; i++) { System.out.print(maaned[i] + " : "); int sumpiller = 0; int j = 0; while (j < 31 && antallpiller[i][j]!= -1) { sumpiller += antallpiller[i][j]; j++; int snitt = (int)math.round((double)sumpiller/j); System.out.print(sumPiller + " piller); System.out.print("(snitt: " + snitt); System.out.println(" piller pr dag)"); Uten beregning av hvilken måned det ble solgt flest piller

void skrivoversikt() { System.out.println("Salgsstatistikk for Lur&Drei"); System.out.println("----------------------------"); int bestemaaned = 0; int besteantall = 0; for (int i=0; i<12; i++) { System.out.print(maaned[i] + " : "); int sumpiller = 0; int j = 0; while (j < 31 && antallpiller[i][j]!= -1) { sumpiller += antallpiller[i][j]; j++; if (sumpiller > besteantall) { bestemaaned = i; besteantall = sumpiller; int snitt = (int)math.round((double)sumpiller/j); System.out.print(sumPiller + " piller); System.out.print("(snitt: " + snitt); System.out.println(" piller pr dag)"); System.out.print("Flest piller solgt i " + maaned[bestemaaned]); System.out.print(" (" + besteantall + " piller)"); Nå med beregning av hvilken måned det ble solgt flest piller

Oppgave 6 (20 poeng) Brutopia er en stat som ledes av en troika (= gruppe på tre). Lederne er alltid innbyggere i landet. Brutopia har ialt 7 delstater, og hver av disse er igjen delt opp i et antall fylker (antallet fylker varierer fra 1 for den minste delstaten til 5 for den største). Hver delstat ledes av en regjering som består av 5-15 innbyggere fra delstaten. Hvert fylke har en fylkesstyre som består av 4 innbyggere i fylket. Hvert fylke har en befolkning på inntil 500.000 innbyggere. Hver av delstatene i Brutopia kan danne handelsallianser med så mange andre delstater i Brutopia som de ønsker. Tegn et UML-klassediagram med de følgende (Java-) klassene som kan brukes til å lage en UML-modell av Brutopia: Troika, Stat, Delstat, Fylke, Delstatsregjering, Fylkesstyre, Innbygger og Handelsallianse. Gi navn på relasjonene mellom disse klassene slik det er beskrevet ovenfor og plassér antall på begge sider av hvert forhold. Gjør egne forutsetninger ved behov, men forklar isåfall disse.

Land (Brutopia) Troika Innbygger Handelsavtale Delstat Delstatsregjering Fylke Fylkesstyre

Land (Brutopia) eies av har Troika Innbygger består av Handelsavtale består av har er med i inngår Delstat har en Delstatsregjering består av er med i Fylke har en Fylkesstyre har er innbygger av

1 Land (Brutopia) 1 1 eies av har 1 * Troika 3 1 består av Innbygger 4 NB 4..500000 Handelsavtale 0..7 består av 7 1 har * er med i 5..15 0..1 inngår 2..7 Delstat 1 1 har en Delstatsregjering Bilateral? Multilateral? 1 består av er med i 1..5 0..1 Fylke 1 har en 1 Fylkesstyre 1 har er innbygger av

Oppgave 7 (60 poeng) Foreleseren i et begynnerkurs i programmering med Java har sett seg lei på at noen studenter kopierer andres besvarelser når de skal levere obligatorisk oppgave. For å foreta en første screening av alle oppgavene bestemmer hun seg for å få laget et program som sammenlikner hver oppgave med alle øvrige og regner ut en "avstand" mellom hvert par av oppgaver. Hvis avstanden er under en fastsatt grense, skal programmet rapportere dette, slik at foreleseren kan sjekke manuelt hvor like oppgavene egentlig er. Det er nå din oppgave å lage dette fullstendige programmet for foreleseren. Programmet skal først lese filen "Oppgaver.txt" som inneholder en rekke filnavn (atskilt av linjeskift). For eksempel kunne filen ha følgende innhold: Oblig2-per.java Oblig2-joanna.java Oblig2-vilde.java Deretter skal filen sammenlikne hver av filene med alle de øvrige. Med eksemplet overfor får vi ialt tre sammenlikner (den første mot de to neste, og den andre mot den siste) siden rekkefølgen ikke skal spille noen rolle.

Sammenlikningen av to filer skal være basert på antall forekomster av spesielle tekststrenger i tekstene. Disse tekststrengene ligger i filen "Nokkelord.txt" (atskilt av blanke og/eller linjeskift). For eksempel kunne filen ha følgende innhold: int double String { ( new class Her er det ialt syv tekststrenger (eller nøkkelord) som skal benyttes ved sammenlikningen, men antallet kan variere. Selve sammenlikningen skal bestå i å ta (for hvert nøkkelord) differansen mellom antall forekomster i den ene filen og antall forekomster i den andre filen, og så summere opp absoluttverdiene av disse differansene over alle nøkkelord. Hvis dette resulterer i verdien 0 betyr det at hvert nøkkelord forekommer nøyaktig like mange ganger i de to filene som sammenliknes. Hvis verdien er større en 0, avviker de to filene fra hverandre i antall forekomster av minst ett nøkkelord.

Konkret: Programmet du skal skrive, bør begynne med å lese filen med alle nøkkelordene og legge disse inn i et String-array eller en HashMap slik at du senere kan slå opp et vilkårlig ord og finne ut om det er identisk med ett av nøkkelordene. Deretter leser du inn alle filene som skal sammenliknes, og under innlesingen av en fil teller programmet opp hvor mange ganger hvert av nøkkelordene forekommer. Du skal anta at alle forekomster av nøkkelord er atskilt med blanke og/eller linjeskift fra omkringliggende tekst i filen. For å ta vare på den innleste informasjonen skal du benytte følgende klasse: class Oppgave { String filnavn; int[] antall; // Navnet på filen som oppgaven lå i // Antall forekomster av hver nøkkelord Oppgave (int k) { antall = new int[k]; <her kan du legge inn mer> Du lager ett objekt av denne klassen for hver fil som skal leses, og fyller inn i antall-arrayen etterhvert som programmet treffer på nøkkelord i teksten som leses. Pekere til alle objektene kan du lagre i en Oppgave-array (som du kan anta er maksimalt 100 lang).

Etter at alle filene er lest (og informasjon er fylt inn i Oppgave-objekter), skal du foreta den parvise sammenlikningen av filer. Det gjør du greiest med en dobbelt (nestet) løkke, og selve sammenlikningen gjøres greiest ved at du deklarerer en objektmetode i klassen Oppgave som foretar sammenlikningen: int finnavstand (Oppgave opg) { <regn ut avstanden til oppgaven opg> Etterhvert som sammenlikningene gjøres, skrives avstandene mellom oppgavene ut med en passende fortekst som sier hvilke oppgaver som sammenliknes. Marker med * alle par som har avstand < 10.

En første programskisse: class PlagiatSjekker { public static void main(string[] args) { Analyse a = new Analyse(); a.lesnokkelord(); a.lesoppgaver(); a.sammenlign(); class Analyse { String[] nokkelord = new String[100]; // Anta max 100 nøkkelord Oppgave[] oppgaver = new Oppgave[100]; // Anta max 100 oppgaver int antnokkelord = 0; // Antall innleste nøkkelord int antoppgaver = 0; // Antall innleste oppgaver void lesnokkelord() {... void lesoppgaver() {... void sammenlign() {... class Oppgave { String filnavn; int[] antall; Oppgave (int k) { antall = new int[k];

Innlesing av nøkkelord: void lesnokkelord() { In fil = new In("Nokkelord.txt"); while (fil.hasnext()) { String s = fil.inword(); nokkelord[antnokkelord] = s; antnokkelord++;

Innlesing av oppgaver: void lesoppgaver() { In navneliste = new In("Oppgaver.txt"); while (navneliste.hasnext()) { // Les filnavn på neste oppgave String filnavn = navneliste.inword(); // Opprett Oppgave-objekt Oppgave opg = new Oppgave(antNokkelord); oppgaver[antoppgaver++] = opg; // Les oppgaven og registrer nøkkelord In fil = new In(filnavn); while (fil.hasnext()) { String s = fil.inword(); int k = finnord(s); // DENNE MÅ SKRIVES if (k >= 0) opg.antall[k]++;

Metode for å sjekke om et ord er et nøkkelord: int finnord(string s) { boolean funnet = false; for (int i=0; i<antnokkelord; i++) { if (nokkelord[i].equals(s)) { return i; return -1;

Sammenlikning av oppgaver: void sammenlign() { for (int i=0; i<antoppgaver-1; i++) { for (int j=i+1; j<antoppgaver; j++) { System.out.print(oppgaver[i].filnavn); System.out.print(" testes mot "); System.out.print(oppgaver[j].filnavn); int avstand = oppgaver[i].finnavstand(oppgaver[j]); System.out.print(" Avstand : " + avstand); if (avstand < 10) System.out.print("*"); System.out.println(); int finnavstand(oppgave opg) { int sum = 0; for (int i=0; i<antall.length; i++) { sum += Math.abs(this.antall[i] opg.antall[i]); return sum;

Oppgave 8 (20 poeng) Brutopia har innført akkurat samme Lov om behandling av personopplysninger som i Norge, og du skal bruke denne loven til å vurdere følgende situasjon. På et bibliotek i Brutopia vil de lage et lite informasjonssystem om sine lånetagere, hvor de i tillegg til navn og adresse, vil lagre følgende opplysninger: Låntagernes alder, telefonnummer og epost-adresse. Hvilke bøker og videoer de har lånt de siste fem årene. En tilhørende klassifikasjon av de bøkene og videoene som er lånt, med kommentarer om hvilken type mennesker som pleier å låne disse bøkene. Biblioteket har dårlig råd og håper å selge disse opplysningene til ulike firmaer som driver direkte-reklame via epost. Ved at de ulike låntagerne kan klassifiseres etter hvilke bøker de leser, håper biblioteket å tjene relativt godt på dette opplegget. Drøft om dette er greie opplysninger som biblioteket har rett til å samle inn eller om han må søke Datatilsynet i Brutopia om lov til dette. Begrunn svaret med å vise til konkrete paragrafer som du mener er relevante for dette registeret og de opplysningene biblioteket ønsker å samle inn, og hvorfor de ulike paragrafene du nevner er relevante.

1. Låntagernes alder, telefonnummer og e-post adresse. 2. Hvilke bøker og videoer de har lånt de siste 5 årene. 3. En tilhørende klassifikasjon av de bøkene og videoene som er lånt med kommentarer om hvilken type mennesker som pleier å låne disse bøkene. 2 nr.8: Sensitive opplysninger er opplysninger om: - Rase, etnisk, poitiske.., osv forhold - Om man er dømt, mistenkt.el. - Helse- og seksuelle forhold - medlemskap i fagforeninger 8 Behandling av personopplysninger skal bare gjøres etter samtykke og være saklig begrunnet, må være nødvendig før: 11. Grunnkrav til behandling av personopplysninger Den behandlingsansvarlige skal sørge for at personopplysningene som behandles a) bare behandles når dette er tillatt etter 8 og 9, b) bare nyttes til uttrykkelig angitte formål som er saklig begrunnet i den behandlingsansvarliges virksomhet, c) ikke brukes senere til formål som er uforenlig med det opprinnelige formålet med innsamlingen, uten at den registrerte samtykker, d) er tilstrekkelige og relevante for formålet med behandlingen, og e) er korrekte og oppdatert, og ikke lagres lenger enn det som nødvendig ut fra formålet med behandlingen, jf. 27 og 28.