Statistikk
og Meteorologi
.
Nedenfor ser dere skisser av de to klassene. Oppgaven går ut på å erstatte
pseudo-koden med java-instruksjoner, slik at dere får et kjørbart program.Statistikk
-klassen ikke er obligatorisk.
< import-instruksjon(er) > public class Statistikk { private String måned; private int år; private int[] minTemp; private int[] maxTemp; private int[] nedbør; public Statistikk(String mnd, int å, int[] min, int[] max, int[] ned) { < Initialiserer datafeltene > } public int regndager() { < Teller opp antall dager som har hatt nedbør på 5 mm eller mer og returnerer antallet. > } public double maksTempSnitt() { < Finner og returnerer gjennomsnittlig maksimumstemperatur for dager med mindre enn 5 mm nedbør. Returnerer -100.0 i tilfelle det er ingen slike dager. > } public int maksTempVariasjon() { < Finner og returnerer den største temperaturvariasjon som har forekommet i løpet av et døgn (i løpet av måneden). > } // Metoden maksTempVariasjonsDager() er ikke obligatorisk for å få godkjent innleveringen. public String maksTempVariasjonsDager() { < Finner og returnerer en tekst med den eller de datoer som har en temperaturvariasjon lik den maksimale, og informasjon om hvor mange dager det gjelder. > } public void værStatistikk(JTextArea output) { < Skriver i tekstområdet output de dataene som klassens metoder returnerer. Formater utskriften slik at gjennomsnittstemperatur skrives ut med en desimal. > } } // end of class StatistikkNedenfor ser du en skisse av klassen
Meteorologi
.
Dere skal også her erstatte all pseudo-kode med java-instruksjoner.
< import-instruksjon(er) > public class Meteorologi { public static void main(String[] arg) { < Les inn månedens navn og år, samt antall dager i måneden. ( La det være mulig å skrive inn et lavt antall slik det blir lettere teste ut programmet.) > < Deklarer og opprett 3 heltallsarrayer for følgende data: - minimumstemperaturer - maksimumstemperaturer - nedbør for alle månedens dager (dvs. for det antallet dager som brukeres har skrevet inn). Arrayenes lengde skal da være lik det antall som brukeren av programmet har skrevet inn i. > < Brukeren skal skrive inn dagenes minimumstemperaturer, maksimumstemperaturer og nedbør, og disse verdiene skal lagres i de respektive arrayene. La verdiene for den 1. i måneden være lagret på indeks 0, den 2. i måneden på indeks 1, den 3. i måneden på indeks 2 osv. Sjekk at brukeren skriver inn fornuftige verdier: - Minimumstemperaturen må ikke overstige maksimumstemperaturen for samme dag. - Temperaturene og nedbørsmengene bør ligge innenfor fornuftig tallområder. Hvis verdiene er uakseptable, skal programmet forsette å lese inn verdier for den dagen det dreier seg om INNTIL verdiene er innenfor de aksepterte områdene. (Hva som defineres som fornuftig område, bestemmer dere selv. > < Opprett etStatistikk
-objekt. > < Opprett et tekstområde av typenJTextArea
> < Fyll tekstområdet med den teksten som returneres avværStatistikk
-metoden iStatistikk
-klassen. > < Vis tekstområdet i et dialogvindu. > } // Forslag til hjelpe-metode: public static int lesTall( String s ) { < Leser og returnerer et tall fra brukeren. Variabelen s kan brukes som ledetekst.> } } // end og class Meteorologi
public static boolean skuddår( int årstall ) {... }
som returnerer true
eller false
avhengig av om verdien til parameteren
årstall
er et skuddår eller ikke. Et gitt år er skuddår dersom året er delelig med 4,
men ikke med 100, eller dersom året er delelig med 400. Årene 1996 og 2000 er f.eks.
skuddår, men ikke året 1900.
b) Skriv en metode public static int månedsdager( int måned, int år ) { ... }
som returnerer antall dager i måneden angitt ved parameter måned
i året angitt
ved parameteren år
. Det forutsettes at måneden er i intervallet 1 til 12.
Metoden skal returnere riktig antall dager for måned nr. 2 også for skuddår (gjør kall på
metoden i spørsmål a) for å sjekke om det er skuddår).
c) Skriv en metode public static boolean okDato( int dag, int mnd, int år ) { ... }
som returnerer true
i tilfelle datoen angitt ved parametrenes verdier er en gyldig
dato, dvs. mnd
fra 1 til 12, dag
mellom 1 og antall dager i
vedkommende måned i vedkommende år
. (Ta hensyn til skuddår.)
Gjør bruk av metodene i a) og b) når du skal sjekke om datoen er gyldig! Metoden skal
returnere false
dersom datoen ikke er gyldig.
d) Skriv en metode public static String månedsnavn( int mnd ) { ... }
som returnerer navnet på måneden angitt ved parameterverdien. Metoden skal returnere
"ukjent måned" i tilfelle måneden ikke finnes.
Tekststrenger (dvs. String
-objekter) er på tilsvarende måte som arrayer
indeksert fra 0 og oppover. Dvs. første tegn i strengen har indeksposisjon 0, andre
tegn har indeksposisjon 1, etc. String
-metoden substring
kan
brukes til å trekke ut en del av en tekststreng. Den del som skal trekkes ut angis
ved parametre som representerer indeksposisjoner.
Eksempel Les inn datostrengen "27.09.2010" ved hjelp av instruksjonen
String input = JOptionPane.showInputDialog( "Skriv dato (dd.mm.åååå):" );Da vil
input.substring( 0, 2 )
returnere strengen "27",
input.substring( 3 ,5 )
vil returnere strengen "09" og
input.substring( 6 )
vil returnere strengen "2010" (dvs. alt som er
igjen fra og med indeksposisjon 6).
Skriv et applikasjonsprogram som leser inn en dato på formatet "dd.mm.åååå",
sjekker om en er gyldig og skriver den i så fall ut igjen med månedsnavn. Dersom det
f.eks. skrives inn 14.07.1789, skal programmet skrive ut 14. juli 1789. For ugyldig
dato skal det skrives ut en feilmelding. Programmet skal gjøre bruk av metodene beskrevet ovenfor.
Den klassen du skriver for programmet må derfor inneholde disse metodene i tillegg til
main
-metoden.
Et helt tall kalles er perfekt tall dersom tallet er lik summen av alle sine ekte faktorer, inkludert 1. At det er en ekte faktor betyr at faktoren er mindre enn tallet selv. For eksempel er 6 et perfekt tall, siden 6 = 1 + 2 + 3 og 1, 2, 3 er alle de ekte faktorene til 6 (det vil si tall som gir 0 i rest når vi dividerer 6 med dem).
Skriv en metode
public boolean perfekt( int tall )
som
returnerer true
eller
false
avhengig av om parameteren
tall
er et perfekt tall eller ikke.
Bruk metoden du har skrevet i et program som skal finne alle perfekte tall innenfor en grense som bruker kan velge ved at programmet leser inn grensen. For alle perfekte tall skal programmet skrive ut tallet sammen med sin faktorsum (tilsvarende som for 6 ovenfor). Utskriften kan plasseres på et tekstområde i en meldingsboks. Til opplysning kan du få vite at det finnes bare 4 perfekte tall mindre enn 10000.
Oppgave 1: Meteorologi/Statistikk.java |
Oppgave 1: Meteorologi/Meteorologi.java |
Oppgave 2: Datoformat.java |
Oppgave 3: PerfekteTall.java |
Oppgave 3: Perfektetest.java |