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



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

LO191D/LC191D Videregående programmering

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

HØGSKOLEN I SØR-TRØNDELAG

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

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

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

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

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

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

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

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

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

HØGSKOLEN I SØR-TRØNDELAG

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

HØGSKOLEN I SØR-TRØNDELAG

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

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

Algoritmer og Datastrukturer

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

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

INF Løsning på seminaropppgaver til uke 8

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

HØGSKOLEN I SØR-TRØNDELAG

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

INF Seminaroppgaver til uke 3

INF1010 Grafisk brukergrensesni3 (GUI) med Swing/awt. del 1

HØGSKOLEN I SØR-TRØNDELAG

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

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

LC191D/LO191D Videregående programmering mai 2010

UNIVERSITETET I OSLO

TOD063 Datastrukturer og algoritmer

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

HØGSKOLEN I SØR-TRØNDELAG

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

TDT4100 Objektorientert programmering

Grafisk Brukergrensesnitt

OPPGAVE 5b og 8b Java Kode

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

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

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

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

EKSAMEN. Objektorientert programmering

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

HØGSKOLEN I SØR-TRØNDELAG

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

HØGSKOLEN I SØR-TRØNDELAG

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

EKSAMEN. Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamensoppgave i IFUD1025 Programmering i Java

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

EKSAMEN med løsningsforslag

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

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

UNIVERSITETET I OSLO

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

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Kapittel 7: Mer om arv

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

Løse reelle problemer

HØGSKOLEN I SØR-TRØNDELAG

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

Les gjennom hele oppgavesettet før du begynner å b,svare deloppgavene.

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Informasjon Eksamen i IN1000 høsten 2017

UNIVERSITETET I OSLO

Eksamen Objektorientert Programmering 2013

Løsningsforslag EKSAMEN

INF106 Objektorientert programmering

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

UNIVERSITETET I OSLO

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

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

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

Transkript:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL Delprøve Kandidatnr: Prøvedato: 2. mars 2005 Varighet: 3 timer (9:00 12:00) Fagnummer: LO196D Fagnavn: Videregående programmering med prosjekt Klasse(r): 1DA 1DB Studiepoeng: 16 Faglærer(e): Mildrid Ljosland og Truls Fretland Hjelpemidler: Alle skriftlige, kalulator Oppgavesettet består av: 2 oppgaver og 6 sider (inkludert forside og vedlegg) Vedlegg består av: 3 sider Merknad: Oppgaveteksten kan beholdes av studenter som sitter eksamenstiden ut. Lykke til!

Oppgave 1(60 %) I denne oppgaven skal vi behandle temaet kortspill. I vedlegg 1 finnes programkode for to klasser, Kort og Kortspill. I vedlegg 2 finnes det meste av et grafisk grensenitt for et slikt kortspill, samt skjermbilder av hvordan spillet utvikler seg. I oppgave a og b trenger du bare vedlegg 1, mens vedlegg 2 vil bli nyttige i oppgave c. Du trenger ikke å sette deg i detalj inn i alle metodene, poenget er å se hva som finnes og ta i bruk det du trenger. I tillegg til de to viste klassene, skal vi ha klassen Spiller. Sammenhengen mellom de tre klassene er vist i diagrammet under. Kortspill startspiller finnspiller stokkkortene spillenrunde evn. andre metoder 1 består av 52 1 * Spiller har antallstikkvunnet finnantallstikkvunnet økantallstikkvunnet finnkort nyttkort fjernkort tostring 1 * har Kort verdi finnverdi finnkortverdi finnkortnavn finnfarge finnfargenavn tostring a) Programmer klassen Spiller som vist i figuren over. finnantallstikkvunnet() returnerer verdien av antallstikkvunnet, mens økantallstikkvunnet() øker verdien på denne variabelen med 1. Hvor mange kort en spiller har, vil variere både med hvor mange spillere det er, og hvor langt de er kommet i spillet. Metoden finnkort() skal returnere alle de kortene spilleren har, mens nyttkort() og fjernkort() henholdsvis legger til og fjerner et kort fra denne spilleren. Kort-objektet skal ikke opprettes i nyttkort(), og det forsvinner ikke når det fjernes fra spilleren - det skal hele tiden finnes i Kortspill sin liste over alle kort. tostring() skal skrive ut antall stikk vunnet samt hvilke kort spilleren har. Løsning: class Spiller { private ArrayList<Kort> kort = new ArrayList<Kort>(); private int antallstikkvunnet = 0; public ArrayList<Kort>finnKort() { return kort; public int finnantallstikkvunnet() { return antallstikkvunnet; public void økantallstikkvunnet() { antallstikkvunnet++; public void nyttkort(kort kortet) { kort.add(kortet); public boolean fjernkort(kort kortet) { int indeks = kort.indexof(kortet); 2

if (indeks >= 0) { kort.remove(indeks); return true; else return false; public String tostring() { String res = "Antall stikk vunnet: " + antallstikkvunnet + "\n"; for (Kort etkort : kort) res += etkort + "\n"; return res; b) Programmer en konstruktør til Kortspill. Den skal opprette de 52 forskjellige kortene samt et antall spillere gitt ved et argument til konstruktøren. Den skal også sørge for å dele ut alle kortene til spillerne. Dette skal gjøres ved først å stokke kortene, deretter dele ut ett og ett kort til hver spiller (på samme måte som man vanligvis gjør det i et virkelig kortspill). public Kortspill(int antallspillere) { allekort = new Kort[52]; spillere = new ArrayList<Spiller>(); for (int i=0; i < allekort.length; i++) { allekort[i] = new Kort(i); for (int i = 0; i < antallspillere; i++) { spillere.add(new Spiller()); stokkkortene(); delut();. public void delut() { int spillernr = 0; for (int i = 0; i < allekort.length; i++) { Spiller denne = spillere.get(spillernr); denne.nyttkort(allekort[i]); spillernr = (spillernr + 1) % spillere.size(); c) Som du ser av vedlegg 2 og 3, består det grafiske grensesnittet av et felt for hver spiller samt en knapp til å trykke på. I spillerfeltene vises hvor mange stikk spilleren har vunnet og hvilke kort han/hun har på nåværende stadium i spillet. Hver hver gang knappen trykkes, skal en runde spilles. Ved å studere programkoden kan du finne ut at det mangler to ting, nemlig metoden setttekster() og klassen Knappelytter. Disse to tingene skal du programmere slik at spillerfeltene oppdateres (se utviklingen i skjermbildene) samt at knappen blir utilgjengelig når alle kortene er brukt. public void setttekster() { /* Vilkårlig hvilken spiller som plasseres hvor, velger å la nr 0 være vest, osv. */ Spiller vest = spill.finnspiller(0); Spiller sør = spill.finnspiller(1); Spiller øst = spill.finnspiller(2); 3

Spiller nord = spill.finnspiller(3); vesttekst.settext(vest.tostring()); sørtekst.settext(sør.tostring()); østtekst.settext(øst.tostring()); nordtekst.settext(nord.tostring()); if (vest.finnkort().size() == 0) enrunde.setenabled(false); /* Antar at alle går tom for kort samtidig */ private class Knappelytter implements ActionListener { public void actionperformed(actionevent hendelse) { spill.spillenrunde(); setttekster(); 4

Oppgave 2 (40 %) - Numerikk Numerisk integrasjon. Ta med nok mellomregning til at fremgangsmetoden kommer tydelig frem. Alle deloppgavene teller like mye, dvs. 10% hver. a) Gitt integralet I = 2 1 e x x dx. (1) Bruk Simpsons metode med n = 10 til å estimere verdien (S 10 ) av integralet (I). Angi svaret med 4 desimaler. Svar: Funksjonen som skal integreres er f(x) = ex x, og nedre grense a = 1 og øvre grense b = 2. Regner ut intervall-lengden: h = b a n = 2 1 = 0.1 (2) 10 Så skal funksjonsverdien beregnes i punktene x i = a + ih. Den estimerte verdien er da gitt ved: S 10 = h 3 (f(x 0) + 4f(x 1 ) + 2f(x 2 ) + 4f(x 3 ) + 2f(x 4 ) + 4f(x 5 ) + 2f(x 6 ) + 4f(x 7 ) + 2f(x 8 ) + 4f(x 9 ) + f(x 10 )) = 0.1 (f(1.0) + 4f(1.1) + 2f(1.2) + 4f(1.3) + 2f(1.4) 3 + 4f(1.5) + 2f(1.6) + 4f(1.7) + 2f(1.8) + 4f(1.9) + f(2.0)) 3.0591 Angitt med 4 desimaler er S 10 3.0591. b) Det er oppgitt at (e x /x) = e x (x 1 2x 2 + 2x 3 ). Estimer en øvre skranke for feilen i approksimasjonen, E S = I S 10. Svar: For å finne en øvre skranke for feilen trenger vi å finne maksimum av den fjerdederiverte til f(x). Bruker da den oppgitte andrederiverte og deriverer den 2 ganger til: f (x) = e x (x 1 2x 2 + 2x 3 ) + e x ( x 2 2( 2)x 3 + 2( 3)x 4 ) f (x) = e x (x 1 3x 2 + 6x 3 6x 4 ) (3) f (4) (x) = e x (x 1 3x 2 + 6x 3 6x 4 ) + e x ( x 2 3( 2)x 3 + 6( 3)x 4 6( 4)x 5 ) f (4) (x) = e x (x 1 4x 2 + 12x 3 24x 4 + 24x 5 ) (4) Deretter tegner vi opp grafen til f (4) på lommeregneren og ser at den har størst abosluttverdi i startpunktet a = 1. Dermed er K f (4) (1) = e 1 (1 1 4 1 2 + 12 1 3 24 1 4 + 24 1 5 ) = e(1 4 + 12 24 + 24) = 9e 24.5 5

Innsatt i den øvre skranken for feilen i Simpsons metode gir dette: En øvre skranke for feilen E S er 1.4 10 5. K(b a)5 E T 180n 4 (5) 24.5(2 1)5 = 180 10 4 1.4 10 5 Oppgave c er flervalgsoppgave. Angi kun ett alternativ. Svaret skal ikke begrunnes. Rett svar gir 10% uttelling, ubesvart gir 2% uttelling og feil svar eller flere svar gir 0% uttelling. c) Med hvilken faktor vil antallet intervaller n endres dersom intervall-lengden (b a) dobles og den øvre skranken for feilen forblir uendret? (Avrundet til to desimaler) A. 2,00 B. 2,38 C. 2,83 D. 4,35 E. Ingen av disse Svar: La c = b a være den opprinnelige intervall-lengden. La ĉ = 2c være den doble intervall-lengden. Tilsvarende er n det opprinnelige antall intervaller og ˆn er det nye antall intervaller. Da skal de to øvre skrankene for feilen være like; Kc 5 180n 4 = c 5 Kĉ5 180ˆn 4 n 4 = (2c)5 ˆn 4 ˆn 4 n 4 = 25 ˆn n = 4 2 5 2, 38 Så antall intervaller må økes med en faktor 2, 38, dvs. alternativ B. d) Gitt følgende java-klasse: import static java.lang.math.*; public class Simpson{ // funksjonen som skal integreres static double f( double x ){ return exp(x)/x; /* metoden finner en tilnærmet verdi av integralet av funksjonen f fra nedre grense a, til øvre grense b, ved hjelp av Simpsons metode og n delintervaller. */ 6

static double integrer(double a, double b, int n){ double h = (b-a)/n; // skrittlengden double s0 = f(a) + f(b); // endepunktene med vekt 1 double s1 = 0; for (int i=1; i < n ; i++) s1 += (i%2+1)*f(a+i*h); // vektingen alternerer mellom 2 og 1 return (s0+2*s1)*h/3; public static void main(string args[]){ System.out.println(integrer(1, 2, 10)); Implementer metoden integrer(double a, double b, int n) slik at når programkoden over kjøres, så skrives verdien av S 10 ut til skjerm. 7

Vedlegg 1 import java.util.*; class Kort { private int verdi; public Kort(int startverdi) { verdi = startverdi; public int finnverdi() { return verdi; // Verdier fra 0 og oppover public int finnkortverdi() { return verdi % Kortspill.kortnavn.length; public String finnkortnavn() { return Kortspill.kortnavn[finnKortverdi()]; public int finnfarge() { return verdi / Kortspill.kortnavn.length; public String finnfargenavn() { return Kortspill.fargenavn[finnFarge()]; public boolean equals(kort detandre) { return finnverdi() == detandre.finnverdi(); public String tostring() { return finnfargenavn() + " " + finnkortnavn(); class Kortspill { public static final String[] kortnavn = {"to", "tre", "fire", "fem", "seks", "sju", "åtte", "ni", "ti", "knekt", "dronning", "konge", "ess"; public static final String[] fargenavn = {"Kløver", "Ruter", "Hjerter", "Spar"; private Kort[] allekort; private ArrayList<Spiller> spillere(); private int startspiller = 0; public Spiller finnspiller(int nr) { if (nr >= 0 && nr < spillere.size()) return spillere.get(nr); else return null; public void stokkkortene() { /* Her stokkes kortene slik at de kommer i tilfeldig rekkefølge. Denne metoden skal du IKKE programmere, bare anta at finnes. */ public void spillenrunde() { /* Her leverer alle spillerne fra seg ett kort Det beregnes hvem av dem som har vunnet runden, og dennes variabel antallstikkvunnet økes med 1. Det kan også tenkes at variabelen startspiller endres, gjerne slik at den som vant forrige stikk (runde), skal starte neste. Denne metoden skal du IKKE programmere, bare anta at finnes. 8

*/ Vedlegg 2 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.arraylist; class Valgvindu extends JFrame { private Kortspill spill; private JButton enrunde = new JButton("Spill en runde"); private JTextArea vesttekst = new JTextArea(); private JTextArea sørtekst = new JTextArea(); private JTextArea østtekst = new JTextArea(); private JTextArea nordtekst = new JTextArea(); public Valgvindu() { spill = new Kortspill(4); setlayout(new GridLayout(3,3)); setdefaultcloseoperation(jframe.exit_on_close); add(new JLabel()); // Tomt felt add(nordtekst); add(new JLabel()); add(vesttekst); add(enrunde); enrunde.addactionlistener(new Knappelytter()); add(østtekst); add(new JLabel()); add(sørtekst); add(new JLabel()); setttekster(); pack(); class TestSpill { public static void main(string[] args) { Valgvindu test = new Valgvindu(); test.setvisible(true); 9

10