Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 8 Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag Fredag 10. desember 2004 Tid: 9.00 14.00 Oppgave 1 (5 %) a) 1 b) 3 c) 2.75 d) true e) false Oppgave 2 (15 %) a) 42 b) X...X.X.X...X...X.X. X...X c) 2 d) 5 13 12 e) 2.5 3.0 3.0
INF100 Grunnkurs i programmering Side 2 av 8 Oppgave 3 (15 %) public class Ordtelling { public static void main(string[] args) { final int SLUTTANTALL = 7; String[] ordliste = new String[SLUTTANTALL]; int[] forekomster = new int[sluttantall]; int antallulike = 0; String ord; boolean funnet; System.out.println("Skriv inn ord inntil du har skrevet " + SLUTTANTALL + " forskjellige."); while (antallulike < SLUTTANTALL) { System.out.print("Tast inn et ord: "); ord = Terminal.lesString(); // Sjekk om ordet er skrevet inn tidligere funnet = false; for (int i = 0; i < antallulike; i++) { if (ord.equals(ordliste[i])) { if (forekomster[i] == 1) System.out.println("Skrevet 1 gang tidligere!"); else System.out.println("Skrevet " + forekomster[i] + " ganger tidligere!"); forekomster[i]++; funnet = true; break; if (!funnet) { ordliste[antallulike] = ord; forekomster[antallulike] = 1; antallulike++; System.out.println("Nytt ord nummer " + antallulike + "!"); System.out.println("Da har jeg " + SLUTTANTALL + " ord! Takk!");
INF100 Grunnkurs i programmering Side 3 av 8 Oppgave 4 (65 %) // Eksamen INF100 h2004 * Klasse som representerer resultater for et fotballag public class Lag { // Oppgave 4a Navn paa laget private String navn; Antall spilte kamper private int kamper; Totalt antall maal laget har scoret private int sumforlengsmaal; Totalt antall maal laget har sluppet inn private int sumbaklengsmaal; Antall poeng private int poeng; // Oppgave 4b Konstruktoer som oppretter et lag med 0 spilte kamper public Lag(String navn) { this.navn = navn; // Oppgave 4c Returnerer lagets navn public String hentnavn() { return navn; Returnerer antall maal laget har scoret public int hentantallforlengsmaal() { return sumforlengsmaal; Returnerer antall poeng public int hentpoeng() { return poeng; // Oppgave 4d Returnerer maalforskjellen public int hentmaalforskjell() { return sumforlengsmaal - sumbaklengsmaal; // Oppgave 4e
INF100 Grunnkurs i programmering Side 4 av 8 * Metode for aa oppdatere resultatene etter en kamp * @param vaaremaal antall scoringer av det aktuelle laget * @param deresmaal antall scoringer av motstanderne public void registrerkamp(int vaaremaal, int deresmaal) { kamper++; sumforlengsmaal += vaaremaal; sumbaklengsmaal += deresmaal; if (vaaremaal > deresmaal) poeng += 3; else if (vaaremaal == deresmaal) poeng += 1; // Oppgave 4f Skriver ut en rad i tabellen til terminalen public void skrivut() { System.out.println(navn + "\t" + kamper + "\t" + sumforlengsmaal + "-" + sumbaklengsmaal + "\t" + poeng); // Oppgave 4g * Sammenligner resultatene for to lag * @return +1 hvis aktuelt lag leder, -1 hvis annetlag leder, * 0 hvis de ligger helt likt public int compareto(lag annetlag) { // Sammenlign poeng foerst if (poeng > annetlag.poeng) return 1; else if (poeng < annetlag.poeng) return -1; // Lik poengsum: sammenlign maalforskjell if (hentmaalforskjell() > annetlag.hentmaalforskjell()) return 1; else if (hentmaalforskjell() < annetlag.hentmaalforskjell()) return -1; // Lik poengsum og maalforskjell: sammenlign antall maal if (sumforlengsmaal > annetlag.sumforlengsmaal)
INF100 Grunnkurs i programmering Side 5 av 8 return 1; else if (sumforlengsmaal < annetlag.sumforlengsmaal) return -1; else return 0; // helt likt! // Eksamen INF100 h2004 import java.io.*; * Klasse som representerer alle lagene med resultater i en fotballserie public class Serie { // Oppgave 4h Navn paa serien private String navn; Tabell over lagene private Lag[] tabell; // Oppgave 4i * Konstruktoer som oppretter en tabell med nye lag * @param navnene tabell med navn paa alle lagene public Serie(String serienavn, String[] lagnavn) { navn = serienavn; tabell = new Lag[lagnavn.length]; for (int i = 0; i < lagnavn.length; i++) tabell[i] = new Lag(lagnavn[i]); // Oppgave 4j * Finner et lag i tabellen med gitt navn * @return referanse til laget, eller null hvis det ikke ble funnet public Lag finnlag(string navn) { for (int i = 0; i < tabell.length; i++)
INF100 Grunnkurs i programmering Side 6 av 8 if (tabell[i].hentnavn().equals(navn)) return tabell[i]; return null; // Oppgave 4k * Registrerer et kampresultat * @param navn1 navn paa det foerste laget * @param navn2 navn paa det andre laget * @param maal1 antall maal scoret av lag1 * @param maal2 antall maal scoret av lag2 * @return true hvis registreringen gikk bra, false ved feil navn public boolean registrerkamp(string navn1, String navn2, int maal1, int maal2) { Lag lag1 = finnlag(navn1); Lag lag2 = finnlag(navn2); if (lag1 == null lag2 == null) return false; lag1.registrerkamp(maal1,maal2); lag2.registrerkamp(maal2,maal1); return true; // Oppgave 4l * Leser en tekstfil med kampresultater og registrerer alle * kamper mellom to lag i den aktuelle serien. * Filen inneholder en linje for hvert resultat paa formen: * lag1-lag2 antallmaal1-antallmaal2 * @param filnavn navn paa tekstfilen * @return antall registrerte kamper public int lesresultatfil(string filnavn) throws IOException { String post; int feltslutt1, feltslutt2, feltslutt3; String lag1, lag2; int maal1, maal2; int antallregistrert = 0; FileReader tekstfilleser = new FileReader(filnavn); BufferedReader tekstleser = new BufferedReader(tekstFilLeser); // Leser en og en linje til filen er slutt (test inne i loekken)
INF100 Grunnkurs i programmering Side 7 av 8 while (true) { post = tekstleser.readline(); if (post == null) // slutt paa filen? return antallregistrert; feltslutt1 = post.indexof( - ); feltslutt2 = post.indexof( ); feltslutt3 = post.indexof( -, feltslutt2 + 1); lag1 = post.substring(0, feltslutt1); lag2 = post.substring(feltslutt1 + 1, feltslutt2); maal1 = Integer.parseInt(post.substring(feltslutt2 + 1, feltslutt3)); maal2 = Integer.parseInt(post.substring(feltslutt3 + 1)); if (registrerkamp(lag1, lag2, maal1, maal2)) antallregistrert++; // Oppgave 4m Sorterer lagtabellen med beste lag foerst public void sortertabell() { for (int siste=tabell.length-1; siste>0; siste--) { for (int dette=0; dette<siste; dette++) { if (tabell[dette].compareto(tabell[dette+1]) < 0) { // (1) Lag temp = tabell[dette]; tabell[dette] = tabell[dette+1]; tabell[dette+1] = temp; // Oppgave 4n Skriver ut tabellen til terminalen public void skrivtabell() { sortertabell(); System.out.println(navn); System.out.println(); System.out.println(" \tkamper\tmaal\tpoeng"); for (int i = 0; i < tabell.length; i++) tabell[i].skrivut(); System.out.println(); // Oppgave 4o
INF100 Grunnkurs i programmering Side 8 av 8 * Gjennomfoerer opprykk/nedrykk mellom to serier. * Begge tabellene antas aa vaere sortert foer kallet. * @param over serien det skal rykkes opp til * @param nrfratoppen plasseringsnummeret som rykker opp i den aktuelle serien * @param nrfrabunnen plasseringsnummeret som rykker ned i serien over public void oppned(serie over, int nrfratoppen, int nrfrabunnen) { // Finn tabekkindeksene til de to lagene som skal byttes int toppindeks = nrfratoppen-1; // tabellindeks i this int bunnindeks = over.tabell.length - nrfrabunnen; // tabellindeks i serien over // Bytt om lagene System.out.println(tabell[toppindeks].hentNavn() + " rykker opp, " + over.tabell[bunnindeks].hentnavn() + " rykker ned."); Lag temp = over.tabell[bunnindeks]; over.tabell[bunnindeks] = this.tabell[toppindeks]; this.tabell[toppindeks] = temp; Eivind Coward Karl Holmås