Emne: PROGRAMMERING |
Emnekode: LO 127 A |
Faglig veileder: Eva Vihovde Kjetil Grønning | |
Grupper: 1AA, 1AB, 1AC, 1IA |
Dato: 12.02.2007 |
Eksamenstid: 09.00 - 14.00 | |
Eksamensoppgaven består av: | Antall sider (inkl. forsiden og vedlegg): 6 | Antall oppgaver: 3 | Antall vedlegg: 1 |
Tillatte hjelpemidler: | Alle trykte og håndskrevne | ||
Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn for løsningen. |
Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Utarbeidet av (faglærer): | Kontrollert av (en av disse): | Studieleders/ Fagkoordinators underskrift: | ||
Annen lærer | Sensor | Studieleder/ Fagkoordinator | ||
|
Dato
som
følger som et vedlegg til oppgaveteksten. Det er samme klasse som finnes i
det nettbaserte kompendiet
Introduksjon til programmering
som er brukt i undervisningen.Observasjon
som er skissert nedenfor kan brukes til
å registrere minimumstemperatur, maksimumstemperatur og nedbør
i løpet av et døgn på ett bestemt sted, sammen med døgnets dato.
public class Observasjon
{
< datafelt for døgnets dato (av type Dato
),
samt verdier for minimumstemperatur, maksimumstemperatur og
nedbør i løpet av døgnet, alle av type heltallsverdi. >
//Konstruktør med parametre for datoens dag, måned og år.
public Observasjon( int d, int m, int å )
{
< gir verdi til dato på grunnlag av parametrene,
initialiserer temperaturer til -100, nedbør til 0. >
}
//Konstruktør med parametre for datoens dag, måned og år, samt
//for minimumstemperatur, maksimumstemperatur og nedbør.
public Observasjon( int d, int m, int å,
int min, int maks, int nedb )
{
< initialiserer datafelter på grunnlag av parametrene.
For temperaturene er det krav om at minimumstemperatur
er mindre enn eller lik maksimumstemperatur. Dersom
mottatte verdier for disse ikke oppfyller kravet, skal
begge datafelter initialiseres til -100.
For nedbør er det krav om at den ikke er negativ. Dersom
mottatt verdi ikke oppfyller dette, initialiseres den til 0. >
}
< get-metoder for alle datafeltene >
< set-metode for minimumstemperatur.
Dersom maksimumstemperatur på forhånd ikke er satt (det vil si
har initialverdien på -100), skal mottatt verdi godtas.
Ellers skal den bare godtas dersom den er mindre enn eller
lik maksimumstemperaturen. >
< set-metode for maksimumstemperatur.
Dersom minimumstemperatur på forhånd ikke er satt (det vil si
har initialverdien på -100), skal mottatt verdi godtas.
Ellers skal den bare godtas dersom den er større enn eller
lik minimumstemperaturen. >
< set-metode for nedbør. Ny verdi skal ikke settes dersom
den mottatte verdi er negativ. >
}
a) Skriv programkode for klassens datafelter og konstruktører.
b) Programmer klassens get
-metoder.
c) Programmer klassens set
-metoder.
Sted
som er skissert nedenfor, representerer
observasjoner (av den type som er beskrevet i oppgave 1) for et helt år
på ett bestemt sted.public class Sted { < datafelt for stedets navn, årstallet, samt en array med plass for én Observasjon for hver av årets dager. > < Konstruktør med parametre for stedets navn og årstallet. Konstruktøren initialiserer alle datafeltene. Ved reservasjon av plass for observasjoner skal det tas hensyn til om årstallet er skuddår eller ikke. > < get-metode for stedets navn, samt for årstallet > public boolean settInnData( Observasjon obs ) { < Dersom mottatt observasjon har samme årstall som klassen gjelder for, skal observasjonen settes inn på første ledige plass i observasjonsarrayen. Returverdien skal indikere om innsetting ble foretatt eller ikke. > } public int månedsnedbør( int måned ) { < Dersom parameteren angir et gyldig månedsnummer (fra 1 til 12), skal metoden summere og returnere nedbørstallene for alle registrerte observasjoner for denne måned. Ved ugylig måned skal metoden returnere -1. > } public int våtestMåned() { < Finner og returnerer månedsnummeret for den måned som har størst månedsnedbør i løpet av året (som klassen gjelder for). > } public int årsnedbør() { < Finner og returnerer summen av all nedbør som er registrert i løpet av året. > } public double snittMintemp() { < Finner og returnerer gjennomsnittlig minimumstemperatur for alle registrerte observasjoner. Dersom det ikke er gjort noen observasjoner, skal metoden returnere verdien -100.0. > } public int årsmakstemp() { < Finner og returnerer den største maksimumstemperaturen som er registrert i løpet av året. Dersom det ikke er gjort noen observasjoner, skal metoden returnere verdien -100.0. > } public String varmesteDager() { < Finner og returnerer alle datoer som hadde maksimumstemperatur lik den største som ble registrert i løpet av året. Datoene skal gjengis som det blir gjort av Dato-klassens toString-metode, med et mellomrom mellom de forskjellige datoene. > } }a) Skriv programkode for klassens datafelter, konstruktør og de nevnte
get
-metodene.
b) Programmer metoden settInnData
.
c) Programmer metoden månedsnedbør
.
d) Programmer metodene våtestMåned
og
årsnedbør
.
e) Programmer metodene snittMintemp
og
årsmakstemp
.
f) Programmer metoden varmesteDager
.
Norgesdata
som er skissert nedenfor, representerer
årsobservasjoner for et antall steder, maksimalt for så mange som konstanten
MAXANTALL
angir.
public class Norgesdata { private int år; private Sted[] steder; //for lagring av registrerte steder public static final int MAXANTALL = 100; //maksimalt antall steder int antSteder; //antall registrerte steder public Norgesdata( int år ) { < foretar nødvendig initialisering > } < get-metode for år > public boolean nyttSted( Sted s ) { < Registrerer mottatt sted forutsatt at det er plass og at stedets år stemmer med det som klassen gjelder for. Returverdien indikerer om registrering ble utført. > } public String varmestSted() { < Finner og returnerer navnet på det stedet som i løpet av året har registrert høyest maksimumstemperatur, sammen med denne temperaturen. (Du kan anta at det bare finnes ett slikt sted.) I tilfelle manglende observasjoner, skal metoden returnere null. > } public String mestMånedsnedbør() { < Finner og returnerer navnet på det stedet som i løpet av året hadde mest nedbør i løpet av en måned. Det aktuelle nedbørstallet skal returneres sammen med stedsnavnet og navnet på måneden. I tilfelle manglende observasjoner, skal metoden returnere null. > } public String våtestSted() { < Finner og returnerer navnet på det stedet som har mest nedbør i løpet av året. Det aktuelle nedbørstallet skal returneres sammen med stedsnavnet. I tilfelle manglende observasjoner, skal metoden returnere null. > } public String kjøligOgVått( double mintempgrense, int nedbørgrense ) { < Finner og returnerer navnene på alle steder som har gjennomsnittlig minimumstemperatur mindre enn første parameter angir og som også har årsnedbør større enn den grense andre parameter angir. Mellom hvert stedsnavn skal det være et mellomrom. I tilfelle det ikke finnes noen slike steder, skal metoden returnere en tom streng. > } }a) Programmer konstruktør,
get
-metode, og
metoden nyttSted
.
b) Programmer metoden varmestSted
.
c) Programmer metoden mestMånedsnedbør
.
d) Programmer metoden våtestSted
.
e) Programmer metoden kjøligOgVått
.
public class Dato { private int dag, måned, år; public Dato( int d, int m, int å ) { if ( okDato( d, m, å ) ) { dag = d; måned = m; år = å; } } public String toString() { return dag + ". " + månedsnavn( måned ) + " " + år; } public static boolean skuddår( int år ) { if ( (år % 4 == 0) && (år % 100 != 0) || (år % 400 == 0) ) return true; else return false; } public static int månedsdager( int måned, int år ) { int[] dager = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int antDager = dager[ måned - 1 ]; if ( måned == 2 && skuddår( år ) ) antDager++; return antDager; } public static boolean okDato( int dag, int mnd, int år ) { if ( mnd < 1 || mnd > 12 ) return false; else { int antdg = månedsdager( mnd, år ); if ( dag > 0 && dag <= antdg ) return true; else return false; } } public static String månedsnavn( int mnd ) { String[] navn = { "januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember" }; if ( mnd > 0 && mnd < 13 ) return navn[ mnd - 1 ]; else return "ukjent måned"; } public boolean sammeDato(Dato d) { return dag == d.dag && måned == d.måned && år == d.år; } public int getDag() { return dag; } public int getMåned() { return måned; } public int getÅr() { return år; } }