LO191D/LC191D Videregående programmering



Like dokumenter
HØGSKOLEN I SØR-TRØNDELAG

LC191D/LO191D Videregående programmering mai 2010

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

Eksamensoppgave Vår 2012 Ordinær eksamen Bokmål. Videregående programmering. Eksamensdato: Studium/klasse: 2. klasse

ANTDAGER = 358; I Ifra nyttår 08 til 08 1ed julaften

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

Grafisk Brukergrensesnitt

INF Seminaroppgaver til uke 3

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Gjennomgang av eksamen H99

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

Løsningsforslag Videregående programmering, eksamen desember 2010

UNIVERSITETET I OSLO

Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN. TILLATTE HJELPEMIDLER: Alle trykte og skrevne. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

HØGSKOLEN I SØR-TRØNDELAG

LO191D/LC191D Videregående programmering eksamen des. 2009

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

TDT4100 Objektorientert programmering

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

HØGSKOLEN I SØR-TRØNDELAG

INF1010 våren 2006 Uke 19: 9. mai 2006 Et større eksempel: Solitaire (kabal)

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

6108 Programmering i Java. Leksjon 8. GUI: Grafisk brukergrensesnitt. Del 2: Roy M. Istad 2015

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

OPPGAVE 5b og 8b Java Kode

OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Løsningsforslag til eksamen i INF1000 våren 2006

Ol Emnekode: Faglig veileder: I L~~25 A - E!8 Viho~d~.1. F ntall oppga~ forsiden): ;;;handskr~vn-;

Grafiske brukergrensesnitt med Swing og AWT

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

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

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

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

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

INF Løsning på seminaropppgaver til uke 8

GUI («Graphical User Interface») del 2

Eksamensoppgave i TDT4100 Objektorientert programmering med Java

HØGSKOLEN I SØR-TRØNDELAG

LO191D/LC191D Videregående programmering Løsningsforslag eksamen mai Oppgave 1

GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser. En oversikt over kapittel 19 i boka

UNIVERSITETET I OSLO

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

UNIVERSITETET I OSLO

import javax.swing.*; import java.awt.*;

INF Uke 10. Ukesoppgaver oktober 2012

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Kapittel 7: Mer om arv

Løsningsforslag, inf101, våren 2001

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Løsningsforslag eksamen in105, våren 2000

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

En klasse som arver, eller selv deklarerer en abstrakt metode, må deklareres som abstrakt.

Kapittel 9: Sortering og søking Kort versjon

INF1000 Metoder. Marit Nybakken 16. februar 2004

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

INF1010 Arv. Marit Nybakken 2. februar 2004

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

INF1010. Grensesnittet Comparable<T>

INF106 Objektorientert programmering

INF1010 våren Arv og subklasser del 1

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

Eksamen IN1010/INF1010 våren 2018

import java.io.*; import java.util.*; import javagently.text;

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

INF1010 våren Arv og subklasser del 1

UNIVERSITETET I OSLO

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

UNIVERSITETET I OSLO

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

TDT4100 Objektorientert programmering

Del 3: Evaluere uttrykk

TDT4100 Objektorientert programmering

INF1010. Grafisk brukergrensesni. med Swing og awt del 2. INF Grafisk brukergrensesni4 II

Eksamen. Objektorientert Programmering IGR 1372

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

INF 1010, vår 2005 Løsningsforslag uke 10

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

EKSAMEN. Objektorientert programmering

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

1 t:n'v'\ekode LO325E. Alle ~vne og trykte. GOd'"j(jent kalkulator

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Transkript:

LO191D/LC191D Videregående programmering Eksamen mai 2012 Løsningsforslag Oppgave 1 Klassen Destinasjon: // Oppgaven er uklar på hva som skal inn i klassen Destinasjon. // Her følger en minimumsutgave (klassen utvides i oppgave 2) class Destinasjon { private final String navn; private ArrayList<Utflukt> utflukter = new ArrayList<Utflukt>(); public Destinasjon(String navn) { this.navn = navn; public String getnavn() { return navn; Klassen Utflukt: abstract class Utflukt { /* SOM GITT I OPPGAVETEKSTEN */ public int finnantbusser() { // returnerer 0 hvis for få påmeldte return beregnantbusser(finnantpåmeldte()); public int finnantpåmeldte() { return deltakere.size(); public boolean reserverplass(passasjer[] pass) { for (int i = 0; i < pass.length; i++) { deltakere.add(pass[i]); return true; 1

// Metoden lages static med antpers som parameter, da kan den brukes i flere sammenhenger. static protected int beregnantbusser(int antpers) { if (antpers < MIN_ANTALL) { return 0; else { int anthelebusser = antpers / ANT_PR_BUSS; if (antpers % ANT_PR_BUSS > 0) { anthelebusser++; return anthelebusser; Klassen UtfluktMedSetebest: class UtfluktMedSetebest extends Utflukt { private String[][] seter; public UtfluktMedSetebest(String navn, Destinasjon dest, String beskrivelse, String starttid, String slutttid, double pris, int antrader, int antprrad) { super(navn, dest, beskrivelse, starttid, slutttid, pris); seter = new String[antRader][antPrRad]; // Bruker arvet utgave av finnantbusser(), skal derfor ikke programmene denne metoden her @Override public boolean reserverplass(passasjer[] pass) { if (finnseter(pass)) { // metoden finnseter() er gitt super.reserverplass(pass); return true; else { return false; private boolean finnseter(passasjer[] pass) { // SKAL IKKE PROGRAMMERES AV STUDENTENE // sjekker om det er plass og legger i tilfelle inn passasjernavn i sete-tabellen return true; Klassen UtfluktMedGuide: // Kan med fordel bruke ENUM for språk, men dette er ikke eksamenspensum. 2

// En kan også lage en klasse med språk og antall, og så lage en tabell med objekter av denne klassen. // Kan også kombinere de to løsningene i en «enum-klasse». class UtfluktMedGuide extends Utflukt { public final static String[] SPRÅK = {"norsk", "engelsk", "tysk", "fransk", "spansk"; private int[] antprspråk = new int[språk.length]; public UtfluktMedGuide(String navn, Destinasjon dest, String beskrivelse, String starttid, String slutttid, double pris, int antrader, int antprrad) { super(navn, dest, beskrivelse, starttid, slutttid, pris); @Override public boolean reserverplass(passasjer[] pass) { for (int i = 0; i < pass.length; i++) { antprspråk[finnindeksspråk(pass[i].getspråk())]++; return super.reserverplass(pass); private int finnindeksspråk(string språk) { for (int i = 0; i < SPRÅK.length; i++) { if (SPRÅK[i].equalsIgnoreCase(språk)) { return i; return -1; // skal ikke komme hit @Override public int finnantbusser() { int antbusser = 0; for (int i = 0; i < SPRÅK.length; i++) { antbusser += beregnantbusser(antprspråk[i]); return antbusser; Klassen SelvstUtflukt: class SelvstUtflukt extends Utflukt { private int antpåmeldte = 0; public SelvstUtflukt(String navn, Destinasjon dest, String beskrivelse, String starttid, String slutttid, double pris) { super(navn, dest, beskrivelse, starttid, slutttid, pris); 3

// Bruker arvede utgaver av begge metodene i oppgaven, // skal derfor ikke programmere noen av dem her. Oppgave 2 1. Klassen Cruiseskip: public int finnantbusser(string destnavn) { int sum = 0; for (Destinasjon d : destinasjoner) { if (d.getnavn().equals(destnavn)) { sum += d.finnantbusser(); return sum; Utvider klassen Destinasjon: public int finnantbusser() { int sum = 0; for (Utflukt u : utflukter) { sum += u.finnantbusser(); return sum; 2. Klassen Cruiseskip: public ArrayList<Integer> registrerpåmeldinger(int[] kundenr, Utflukt utflukt) { Passasjer[] passasjerliste = new Passasjer[kundenr.length]; ArrayList<Integer> indeksknrikkefunnet = new ArrayList<Integer>(); for (int i = 0; i < kundenr.length; i++) { int indeks = søkindeksgittknr(kundenr[i]); // gyldig kundenr? if (indeks >= 0) { passasjerliste[i] = passasjerer.get(indeks); passasjerliste[i].registrerutflukt(utflukt); // aggregering fra Passasjer til Utflukt else { indeksknrikkefunnet.add(i); utflukt.reserverplass(passasjerliste); // aggregering fra Utflukt til Passasjer if (indeksknrikkefunnet.size() == 0) { return null; else { return indeksknrikkefunnet; 4

private int søkindeksgittknr(int knr) { // Hjelpemetode for (int i = 0; i < passasjerer.size(); i++) { Passasjer p = passasjerer.get(i); if (p.getkundenr() == knr) { return i; return -1; Ny metode i klassen Passasjer: void registrerutflukt(utflukt utflukt) { utflukter.add(utflukt); Oppgave 3 Oppgaven er løst ved å lage klassen Sete, som er en subklasse til JButton. class Gui extends JFrame { private Sete[][] setene; // en trykknapp for hvert sete private String[][] setenavn; private String[] navn; // de som skal reservere seter private GuiSal sal; private JButton reserverknapp = new JButton("Reserver"); public Gui(String[][] setenavn, String[] navn) { this.navn = navn; // ingen beskyttelse av data this.setenavn = setenavn; // ingen beskyttelse av data setene = new Sete[setenavn.length][setenavn[0].length]; sal = new GuiSal(); setdefaultcloseoperation(jframe.exit_on_close); settitle("setereservasjon"); setlayout(new BorderLayout(5, 5)); add(sal, BorderLayout.CENTER); add(reserverknapp, BorderLayout.SOUTH); reserverknapp.addactionlistener(new ReserverLytter()); 5

pack(); private class ReserverLytter implements ActionListener { public void actionperformed(actionevent hendelse) { int antreservert = 0; for (int rad = 0; rad < setene.length; rad++) { for (int setepårad = 0; setepårad < setene[0].length; setepårad++) { if (setene[rad][setepårad].erforeløpigreservert()) { antreservert++; if (antreservert!= navn.length) { showmessagedialog(null, "Feil antall reserverte plasser. Du har reservert " + antreservert + ", du har bedt om " + navn.length + "."); else { int resnr = 0; for (int rad = 0; rad < setene.length; rad++) { for (int setepårad = 0; setepårad < setene[0].length; setepårad++) { if (setene[rad][setepårad].erforeløpigreservert()) { setene[rad][setepårad].foretapermanentreservasjon(navn[resnr]); setenavn[rad][setepårad] = navn[resnr]; resnr++; showmessagedialog(null, "Reservasjoner ok."); private class GuiSal extends JPanel { public GuiSal() { setlayout(new GridLayout(setenavn.length, setenavn[0].length, 5, 5)); int antledige = 0; for (int rad = 0; rad < setenavn.length; rad++) { for (int setepårad = 0; setepårad < setenavn[0].length; setepårad++) { setene[rad][setepårad] = new Sete(rad, setepårad, setenavn[rad][setepårad]); if (setenavn[rad][setepårad] == null) { antledige++; add(setene[rad][setepårad]); 6

if (antledige < navn.length) { showmessagedialog(null, "Ikke nok ledige plasser. Du prøver å reservere " + navn.length + ", det er kun " + antledige + " ledige plasser."); pack(); private class Sete extends JButton { private final Color OPPTATT = Color.PINK; // ikke mulig å bruke static i indre klasser private final Color LEDIG = Color.WHITE; private final Color RESERVERT = Color.LIGHT_GRAY; private String navn = null; private final int rad; private final int setepårad; public Sete(int rad, int setepårad, String navn) { this.rad = rad; this.setepårad = setepårad; this.navn = navn; settext("" + (rad + 1) + ", " + (setepårad + 1)); if (navn == null) { setbackground(ledig); else { setbackground(opptatt); setenabled(false); addactionlistener(new Setelytter()); public boolean erforeløpigreservert() { return (getbackground() == RESERVERT); public boolean erpermanentreservert() { return (getbackground() == OPPTATT); public void foretapermanentreservasjon(string navn) { setbackground(opptatt); setenabled(false); this.navn = navn; 7

private class Setelytter implements ActionListener { public void actionperformed(actionevent hendelse) { if (getbackground() == LEDIG) { setbackground(reservert); else if (getbackground() == RESERVERT) { setbackground(ledig); else { System.out.println("FEIL OPPSTÅTT"); 8