Oppgave 1 (1 poeng) Er disse programsetningene lovlige i Java? INF 1 Prøveeksamen 3. november 6 Ole Christian og Arne x int i, j = i+1; x int j=3, while(j-->) i = j; x int[]int[] int = new int[8]int[9]; x boolean[] b = null; x boolean[] b = new boolean[true]; x boolean[] b = false; x int 1X = (int) (true == false); x double x = (int) 3.5; x int j = 5, k = (int)(j/.5); x boolean c = (true!= true) && false; Oppgave (1 poeng) a) Hvor mange ganger blir INF1 skrevet ut av følgende løkke: int i = 1; while (++i < 1) { System.out.println( INF1 ); 8 ganger <1 3<1... 9<1 b) Hvor mange ganger blir INF1 skrevet ut av følgende løkke: int i=1, j=1; do { System.out.println( INF1 ); i = i + 1; j = j + i; while (j * i < 1); 5 ganger i j j*i j*i<1? 3 6 true 3 6 18 true 4 1 4 true 5 15 75 true 6 1 16 false
c) Hvilken verdi får variabelen resultat her? int resultat = ; for (int i=; i<1; i=i+1) { for (int j=i; j<i+1; j++) { resultat++; i j resultat..9 1 1 1..19..9 3 1... 9 9..99 1 d) Hvilken verdi får variabelen resultat her? int resultat = ; for (int i=; i<1; i++) { for (int j=; j<1; j++) { if (i == j-1) { i j resultat resultat++; 1 1 1 3 3... 8 9 9 9 9-9 Oppgave 3 (1 poeng) e) Hvilken verdi får variabelen resultat her? String s1 = 1 + + 3 ; "13" String s = 1 + + 3 ; "1 + + 3" String s3 = 1 + + 3; "13" int resultat = ; if (s1.equals(s)) {resultat = 1; else if (s1.equals(s3)) {resultat = ; else if (s.equals(s3)) {resultat = 3; Anta at følgende er deklarert i en metode i et program: int[][] tabell = new int[1][1]; Anta at arrayen tabell er fylt opp med verdier (positive og negative) som er lest fra en fil. Hvilke av alternativene under vil alltid gi som resultat at max inneholder maksimumsverdien i tabell? x int k = ; int max = ; while (k < tabell.length) { if (max < tabell[k]) max = tabell[k]; k++;
x x int max = tabell[][]; for (int i=; i<1; i++) { for (int j=; j<1; j++) { if (max < tabell[i][j]) max = tabell[i][j]; int max = tabell[][]; for (int i=; i<1; i++) { for (int j=; j<1; j++) { if (max < tabell[i][j] && max < tabell[j][i]) { max = Math.max(tabell[i][j], tabell[j][i]); x int max = tabell[][]; for (int i=; i<1; i++) { for (int j=i; j<1; j++) { int m = Math.max(tabell[i][j],tabell[j][i]); max = Math.max(max, m); x int[] maxv = new int[1]; for (int i=; i<1; i++) { maxv[i] = tabell[i][]; for (int j=1; j<1; j++) { if (maxv[i] < tabell[i][j]) { maxv[i] = tabell[i][j]; int max = maxv[]; for (int i=; i<1; i++) { if (max < maxv[i]) max = maxv[i]; Oppgave 4 (1 poeng) Skriv ferdig metoden under, som beregner og returnerer arealet A av en trekant ut fra lengdene av de tre sidene: a, b og c. Formelen du skal bruke er: A = ( s a) ( s b) ( s c) hvor s=(a+b+c)/. Du kan bruke Math.sqrt(x) til å beregne kvadratroten av x. MATEMATISK TRYKKFEIL I OPPGAVEN: FORMELEN SKAL SE UT SLIK SOM PÅ DENNE FOILEN. BEGGE VARIANTER GIR FULL UTTELLING HVIS RIKTIG PROGRAMMERT. double trekantareal (double a, double b, double c) { double s = (a + b + c) / ; double p = (s-a) * (s-b) * (s-c); double A = Math.sqrt(p * p); return A;
Oppgave 5 (1 poeng) int div(int teller, int nevner){ int antall = ; int rest = teller; while(rest >= nevner) { rest = rest nevner; antall++; return antall; Hva returneres fra metodekallet div(9, 3)? Dette er en algoritme for heltallsdivisjon teller/nevner hvor teller >= og nevner > Svar:... 3 (fordi 9 = k * 3 + rest, hvor k = 3 og rest = ) Oppgave 6 (1 poeng) Et T-baneselskap driver 6 linjer (Sognsvann, Østerås,..) og eier en rekke T-banevogner. Disse vognene er fordelt på et antall tog, slik at hvert tog har -5 vogner (alltid like mange og alltid de samme vognene for et gitt tog). Hvert tog har fast tilhørighet til en av linjene. En linje har fra 8 til holdeplasser, og en holdeplass kan deles av opptil 6 linjer (f.eks. Majorstua). En enkeltreise foregår på et bestemt tog og har to tilhørende holdeplasser (holdeplass for påstigning og holdeplass for avstigning). Tegn et UML- klassediagram med klassene T-baneselskap, Vogn, Tog, Linje, Holdeplass og Enkeltreise. Gi navn på forbindelsene (assosiasjonene) mellom klassene som nevnt ovenfor, og gi antall i hver ende av assosiasjonene. T-baneselskap T-banevogn Tog driver 1 * eier 1 6 Linje..5 1 inngår i 1 * trafikkeres av tilbyr 1 * Enkeltreise Oppgave 7 ( poeng) Myndighetene i Ruritania vil kartlegge hvilke personer i landet som har forbindelse med hverandre. Vi antar for enkelhets skyld at personer er entydig identifisert ved sitt navn. En forbindelse består av to navn og en tekstlig beskrivelse av hva slags type forbindelse det er snakk om (f.eks. kjærester eller treningskamerater ). Hver forbindelse skal representeres med et objekt av klassen Forbindelse. 1..6 8.. har Holdeplass * er terminalpunkt for Programmet skal først lese tekstfilen forbindelser.txt som inneholder informasjon om endel forbindelser. Når filen er lest, skal programmet be om og lese inn navnet på en person. Deretter skal programmet skrive ut navnene på alle de som vedkommende har forbindelse til, samt hva slags typer forbindelser det er snakk om.
import easyio.*; class NettverkMain { public static void main(string[] args) { Nettverk nett = new Nettverk(); nett.lesfil( forbindelser.txt ); nett.finnforbindelser(); class Nettverk { Forbindelse[ ] f = new Forbindelse[1]; int antall = ; // Her skal det ligge to objektmetoder: lesfil og finnforbindelser a) Lag først konstruktøren i klassen Forbindelse. Konstruktøren skal ha tre parametre (en for hver av objektvariablene i klassen) og skal benytte parameterverdiene til å initiere objektvariablene. Forbindelse(String navn1, String navn, String type) { this.navn1 = navn1; this.navn = navn; this.type = type; class Forbindelse { String navn1; String navn; String type; // Her skal det ligge en konstruktør b) Lag metoden lesfil som skal ligge i klassen Nettverk og som blir kalt på fra main-metoden i klassen NettverkMain. Metoden lesfil skal lese en tekstfil som inneholder en linje for hver forbindelse. Hver linje består av to navn og en beskrivelse av hva slags type forbindelse det er snakk om: <navn1> ; <navn> ; <type forbindelse <navn1> ; <navn> ; <type forbindelse>... <navn1> ; <navn> ; <type forbindelse> Merk at feltene på hver linje er atskilt av semikolon (hvert felt kan dermed leses med inword(";")). Hver forbindelse skal representeres med et objekt av klassen Forbindelse, og du skal legge hver forbindelse inn på første ledige plass i arrayen f. void lesfil(string fnavn) { In fil = new In(fnavn); while (!fil.lastitem()) { String navn1 = fil.inword(";"); String navn = fil.inword(";"); String type = fil.inword(";"); f[antall] = new Forbindelse(navn1, navn, type); antall++; fil.close();
c) Lag metoden finnforbindelser som skal ligge i klassen Nettverk og som blir kalt på fra main-metoden i klassen NettverkMain. Metoden finnforbindelser skal be om og lese inn et navn fra terminal og deretter skrive ut på skjerm navnene på alle de personene som hun/han har forbindelse til og hva slags type forbindelser det er snakk om. void finnforbindelser() { In tast = new In(); System.out.print("Navn: "); String navn = tast.inline(); for (int i=; i<antall; i++) { if (navn.equals(f[i].navn1)) { System.out.println(f[i].navn + "\t" + f[i].type); else if (navn.equals(f[i].navn)) { System.out.println(f[i].navn1 + "\t" + f[i].type); Oppgave 8 (3 poeng) I Ruritania må alle personer som eier TV betale TV-lisens. Lisenskontoret har ansvaret for å kreve inn disse pengene, og de har mistanke om at endel lurer seg unna lisensbetalingen. De har naturligvis en oversikt over alle personer som betaler TV-lisens, og denne oversikten ligger på filen Abonnenter.txt hvor det er en linje for hver registrert betaler: <fødselsnummer> <fødselsnummer>... <fødselsnummer> Lisenskontoret har ingen oversikt over alle personer som eier en TV, så de må gjette seg til hvem det er som eier TV og ikke betaler lisens. Nå har de skaffet seg en oversikt over alle som betaler strømregning, og den oversikten ligger på filen Strom.txt hvor det er en linje for hver registrert betaler: <fødselsnummer> <etternavn> <fornavn> <adresse> <fødselsnummer> <etternavn> <fornavn> <adresse>... <fødselsnummer> <etternavn> <fornavn> <adresse> De fire feltene på hver linje er atskilt av blanke tegn, og det er ingen blanke tegn i de tre første feltene på hver linje (det fjerde feltet - adressen - vil imidlertid normalt inneholde noen blanke tegn). Din oppgave blir nå å benytte de to filene til å lage en ny fil Mistenkte.txt med navn og adresse til de strømabonnentene som ikke er registrert som TVlisensbetalere (lisenskontoret regner med at de fleste av disse har TV og dermed lurer seg unna lisensbetalingen, og de skal derfor oppsøkes av inspektører).
Du skal ta utgangspunkt i følgende uferdige program: import easyio.*; import java.util.*; class Suspekte { public static void main(string[] args) { Analyse ana = new Analyse(); ana.lesabonnenter( Abonnenter.txt ); ana.laglisteovermistenkte( Strom.txt, Mistenkte.txt ); class Analyse { // Her skal du legge inn programkode (se oppgaven) class Analyse { HashMap<String,String> lisensbetalere = new HashMap<String, String>(); void lesabonnenter(string fil) { // Må programmeres void laglisteovermistenkte(string lysfil, String mistenkte) { // Må programmeres void lesabonnenter(string fil) { In abon = new In(fil); while (abon.hasnext()) { String fnum = abon.inword(); lisensbetalere.put(fnum, "Ikke brukt"); abon.close(); void laglisteovermistenkte(string lysfil, String mistenkte) { In lys = new In(lysFil); Out mistanke = new Out(mistenkte); while (lys.hasnext()) { String fnum = lys.inword(); String navnadr = lys.inline(); if (! lisensbetalere.containskey(fnum)) { mistanke.outln(navnadr); mistanke.close(); lys.close();
Oppgave 9: Det er ikke sensitive opplysninger ( -3), men ser vi på 8 ser vi : 8 Behandling av personopplysninger skal bare gjøres etter samtykke og være saklig begrunnet, må være nødvendig før: a) Oppfylle avtale med den registrerte c) Ivareta den registrertes interesser e) å utøve offentlig myndighet f) å ivareta en berettiget interesse som overstiger den registrertes interesse så blir dette IKKE lovlig fordi a) Vi har ingen avtale med lysabonnentene om å bruke data samlet inn (om deres fødselsnummer) til å gi til lisenskontoret. Det er er derfor IKKE saklig begrunnet at lisenskontoret kan bruke disse data som er samlet inn til et annet formål. (punkt e er ikke ment å dekke slike tilfeller- en ren betaling for en vare som tv-lisensen) Oppgave 1 (15 poeng) [Litt vanskelig] Du skal skrive en sorteringsmetode for en heltallsarray arr som bare inneholder tall mellom og 99. Løp først gjennom arrayen arr og tell opp (i en annen array antall av lengde 1) hvor mange ganger hver av verdiene, 1,,..., 99 forekommer. Gå deretter igjennom arrayen antall og skriv inn i arrayen arr fra starten og nedover: først så mange -ere du fant, deretter så mange 1-ere,..., og til slutt så mange 99-ere du fant. Da vil det i arr stå en sortert rekkefølge av tall som er sorteringen av arr. Eksempel: 3 4 1. 3 void sorter (int [] arr) { int [] antall = new int[1]; for (int i = ; i < arr.length; i++) { int val = arr[i]; antall[val]++; TAKK FOR FREMMØTET! int pos = ; for (int verdi = ; verdi < 1; verdi++) { for (int k = ; k < antall[verdi]; k++) { arr[pos++] = verdi; HUSK REPETISJONSFORELESNINGEN PÅ TIRSDAG!!