Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 6 BOKMÅL EKSAMEN I EMNET INF100/INF100-F Grunnkurs i programmering (Programmering 1) Fredag 16. desember 2005 Tid: 09:00 14:00 Tillatte hjelpemiddel: Alle trykte og skrevne hjelpemiddel er tillatt. I hele oppgavesetttet antar vi at klassen Terminal (se vedlegg A for de viktigste metodene) er tilgjengelig. Du kan også gjøre bruk av klassen i besvarelsen. Oppgave 1 (5 %) Hvilke verdier får følgende Java-uttrykk? Det er ikke nødvendig med begrunnelse av svarene. a) 7-13 % 12.0 b) "ab" + "c".length() c) 5 / 2-1 d) 2 == 1 + 1 0 / 0 == 1 / 0 e) "a".compareto("b") > 0 Oppgave 2 (15 %) I denne oppgaven er det gitt en del kjørbare program som skriver ut noe på skjermen. I hver deloppgave skal du finne ut hva programmet skriver ut. Det er ikke nødvendig med begrunnelse av svarene.
INF100/INF100-F Grunnkurs i programmering (Programmering 1) Side 2 av 6 a) (3%) Hva vises på skjermen når Oppgave2a kjøres? class Oppgave2a{ int i = 0; System.out.println(i++); System.out.println(++i); System.out.println(i++ + --i); b) (3%) Hva vises på skjermen når Oppgave2b kjøres? class Oppgave2b{ int[] t1 = {4,3,2,1,0; int[] t2 = {3,2,1,0; int i1 = 0; while (i1 < t1.length && i1!= t1[i1]) i1++; System.out.println(i1); int i2 = 0; while (i2 < t2.length && i2!= t2[i2]) i2++; System.out.println(i2); System.out.println(t1[t1[i1]]); c) (3%) Hva vises på skjermen når Oppgave2c kjøres? class Oppgave2c{ int j = 2; metode2c(heltall2c.i,j); System.out.println(Heltall2c.i); System.out.println(j); public static void metode2c(int i, int j){ int k = i; i = j; j = k;
INF100/INF100-F Grunnkurs i programmering (Programmering 1) Side 3 av 6 class Heltall2c{ public static int i = 1; d) (3%) Hva vises på skjermen når Oppgave2d kjøres? class Heltall2d{ public int i; public Heltall2d(int j){i = j; class Oppgave2d{ Heltall2d tall1 = new Heltall2d(1); Heltall2d tall2 = new Heltall2d(2); metode2d(tall1,tall2); System.out.println(tall1.i); System.out.println(tall2.i); public static void metode2d(heltall2d x, Heltall2d y){ int k = x.i; x.i = y.i; y.i = k; e) (3%) Hva vises på skjermen når Oppgave2e kjøres? public class Oppgave2e{ for (int i = 0; i < 4; ++i) { for (int j = 0 ; j < 7 ; j++) if (j - 3 <= i && j - 3 >= -i) System.out.print( * ); else System.out.print( ); System.out.println(); System.out.println("o H o\n H\n H");
INF100/INF100-F Grunnkurs i programmering (Programmering 1) Side 4 av 6 Oppgave 3 (20%) Lag et Java-program som leser inn heltall mellom 1 og 20. Når bruker oppgir et tall mindre enn 1 eller større enn 20, skal dette tolkes som et signal om at innlesing er ferdig. Når innlesingen er ferdig skal programmet skrive ut det tallet som har blitt lest inn oftest. Hvis det er flere slike tall så skal programmet skrive ut det største av disse. Forslag til brukerdialog (alt som står bak tegnet : på en linje er inndata fra bruker, alt annet er utdata fra programmet): Gi heltall mellom 1 og 20 (< 1 eller > 20 for å avslutte): 1 Gi heltall mellom 1 og 20 (< 1 eller > 20 for å avslutte): 20 Gi heltall mellom 1 og 20 (< 1 eller > 20 for å avslutte): 5 Gi heltall mellom 1 og 20 (< 1 eller > 20 for å avslutte): 1 Gi heltall mellom 1 og 20 (< 1 eller > 20 for å avslutte): 5 Gi heltall mellom 1 og 20 (< 1 eller > 20 for å avslutte): 0 Størst blant de tallene som forekommer oftest er 5 Oppgave 4 (60 %) Butikker selger vanligvis flere varer. I et program som holder orden på lagerføring finnes det to sentrale klasser, en for varene og en for butikkene. I denne oppgaven skal vi lage disse to klassene. Objekt av klassen Vare er kjennetegnet med et unikt varenummer (heltall), et navn (tegnstreng) og en pris (flyttall). Deloppgavene a-c nedenfor skal besvares i form av en fullstendig deklarasjon av klassen Vare. Les gjennom alle deloppgavene før du begynner å svare. a) (3%) Foreslå feltvariabler for klassen. b) (6%) Lag hent-metoder for hver feltvariabel. c) (6%) Lag en konstruktør som får varenummer som parameter. Konstruktøren skal spørre brukeren etter navn og pris og lese inn verdier til disse feltene fra tastaturet. Ved forsøk på å tildele en negativ pris, skal brukeren bli varslet og bedt om en ny pris. Vi skal nå lage en klasse for butikker. Hver butikk er kjennetegnet av et navn, en tabell med varer og en tabell som viser hvor mange stykker av disse varene som er på lager. Deloppgavene d-l nedenfor skal besvares i form av en deklarasjon av klassen Butikk. Les gjennom alle deloppgavene før du begynner å svare.
INF100/INF100-F Grunnkurs i programmering (Programmering 1) Side 5 av 6 d) (3%) Foreslå feltvariabler for klassen. e) (6%) Lag en konstruktør med butikkens navn og maksimalt antall varer som parametre. f) (6%) Lag en metode finnvare(int varenr) som returnerer posisjonen i tabellen hvor varen finnes, eller -1 hvis den ikke finnes. g) (5%) Lag en metode finnledigplass() som returnerer en posisjon i tabellen hvor det finnes ledig plass, eller -1 hvis det ikke finnes ledig plass. h) (6%) Lag en metode legginnnyvare(int varenr) som legger en ny vare til butikken. Hvis varen allerede forekommer eller lageret er fullt skal dette meldes til brukeren. i) (4%) Lag en metode slettvare(int varenr) som sletter en vare fra butikken. Hvis varen ikke forekommer skal dette meldes til brukeren. j) (4%) Lag en metode detaljsalg(int varenr) som minsker antall stykker av varen med 1. Hvis varen ikke er registrert skal dette meldes til brukeren. Hvis det er 0 stykker igjen på lager skal dette meldes til brukeren. k) (5%) Lag en metode grossinkjøp(int varenr, int antall) som øker antall stykker av varen med antall. Hvis varen ikke forekommer eller hvis antall ikke er positiv skal dette meldes til brukeren. l) (6%) Lag en metode salgsverdi() som beregner total salgsverdi av hele lageret. Karl Johan Holmås Marc Bezem
INF100/INF100-F Grunnkurs i programmering (Programmering 1) Side 6 av 6 Vedlegg A: Nyttige metoder som finnes i klassen Terminal /** Leser en int-verdi fra terminalen. */ public static int lesint() /** Leser en double-verdi fra terminalen. */ public static double lesdouble() /** Leser en linje fra terminalen og returnerer * denne som et objekt av typen String */ public static String lesstring()