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