Programmering H2008 — obligatorisk innlevering nr. 1
Frist: leveres senest i løpet av mandag 15. september.
Besvarelser kan leveres av grupper på 3 studenter.
Det er to alternativer for innlevering:
Innleveringsalternativ 1:
Møt fram på en øvingstime for din klasse, demonstrer programmet for
studentassistent eller faglærer, og få det vurdert (godkjent eller ikke godkjent) der og da.
Innleveringsalternativ 2:
Lever til studentassistent etter følgende plan:
Klasse 1ia, 1aa og 1ab leverer til Robert.Larsen2@stud.iu.hio.no
Klasse 1ac leverer til andreas.kleppe@gmail.com
Filene med programmenes kildekode sendes på e-post på følgende måte:
Emne på e-posten: Innlevering obligatorisk oppgave 1
Innhold i e-posten: Gruppemedlemmene med fullt navn, studentnummer og klasse.
Vedlegg: .java-filene. Kompilerte filer (.class-filer)
trenger ikke å legges ved.
For å få godkjent innleveringen, kreves det at det leveres kjørbare programmer som
oppfyller spesifikasjonene i oppgavene. Det som står som ekstra utfordring i oppgave 2
er ikke obligatorisk, men vi vil oppfordre alle til å prøve å få det til.
Pass på at det i
kildekoden er brukt innrykk, layout og kommentarer i samsvar med god
programmeringsstil. På toppen av hver klasse bør det være en kommentar som
forteller hva klassen er ment for, og eventuell annen nyttig info,
samt navn, studentnummer og klasse for gruppemedlemmene.
Dersom det oppdages at en gruppe har kopiert løsningen til
en annen gruppe, vil ingen av de to gruppene få godkjent innleveringen! Det vil
ikke bli gitt karakter på innleveringen, bare Godkjent/Ikke godkjent.
Innleveringen må være godkjent for å kunne gå opp til slutteksamen i faget!
Husk å skrive
tydelig gruppemedlemmenes navn, studentnummer og klasse på alle kildefilene som
hører til programmene.
Oppgavene bygger på lærestoffet fram til og med kapittel 3 i undervisningen.
Oppgave 1
Lag et program som leser inn et helt tall og avgjør om tallet er delelig
med 7, det vil si om du får 0 som rest når du deler tallet med 7.
Utskriften fra programmet skal være tilsvarende som i følgende eksempler
(det som står i parentesene skal ikke være med i utskriften):
21 er delelig med 7. Kvotient lik 3.
(tallet 21 er blitt lest inn).
32 er ikke delelig med 7. Rest lik 4.
(tallet 32 er blitt lest inn).
Oppgave 2: Veksleautomat
Skriv et program som finner ut hva som skal gis tilbake av vekslepenger når
det betales med en hundrelapp for et beløp som er mindre enn 100 kroner.
Beløpet som skal betales skal programmet lese inn. Du kan forutsette at
beløpet er avrundet til nærmeste hele krone. Dersom beløpet er større enn
100, skal programmet skrive ut en feilmelding og avslutte.
Vekslepenger skal
angis i form av en utskrift. De skal være i størst mulige myntenheter.
Myntenheter som ikke er med i tilbakebetalingen skal ikke tas med i utskriften.
(Utskriften skal f.eks. ikke inneholde noe slikt som "0 1-kroner".)
Lag også utskriften slik at den skiller mellom entall og flertall på den måten
at det skrives f.eks. "1 1-krone", men "2 1-kroner".
Dersom f.eks.
beløpet som skal betales er 27 kroner, skal utskriften være omtrent
som følger:
Tilbake:
1 50-lapp
1 20-krone
3 1-kroner
(Hint: Bruk operatorene / og % for suksessivt å finne ut hvor mange
det blir av 50-lapper, 20-kroner etc.)
Ekstra utfordring: Modifiser programmet slik at det virker riktig også
når beløpet som leses er korrekt avrundet til nærmeste 50-øre. Dersom
for eksempel innlest beløp er 27.50, skal utskriften da være omtrent som
Tilbake:
1 50-lapp
1 20-krone
2 1-kroner
1 50-øre
(Hint: Uttrykk først tilbakebeløpet i antall femtiører.
Leser du inn beløpet som et desimaltall, vil du da få bruk for
å typekonvertere til heltall. Men vær oppmerksom på at ved typekonvertering
strykes desimalene, uten at det foretas noe korrekt avrunding. Regn derfor
om beløpet til antall øre før du foretar typekonvertering.)
Oppgave 3
Modifiser klassen Kursbok3 i Introduksjon til programmering,
kapittel 3, eksempel 3
som følger:
- Tilføy et ekstra
int-datafelt som kan inneholde antall studiepoeng
for vedkommende kurs.
- Tilføy
set- og get-metoder for det nye datafeltet.
- Skriv en konstruktør med to parametre, en for kursnavnet og
en for antall studiepoeng.
- Modifiser
visTittel-metoden slik at den også, på en ny linje,
skriver ut antall studiepoeng for kurset.
Lag et testprogram som bruker den nye klassen din og den nye funksjonaliteten
den har. Programmet skal opprette en kursbok som i utgangspunktet har
"Navnløst" som kursnavn og 0 for antall studiepoeng. Programmet skal
skrive ut de opprinnelig registrerte verdiene og foreta innlesing av nye
verdier for kursnavn og antall studiepoeng. Til slutt skal programmet vise hva som
nå er blitt registrert.
Oppgave 4
Definer en klasse Kvittering som skal representere en (svært
forenklet!) kvittering for et varekjøp i en butikk. Klassen skal ha
datafelter for følgende informasjon:
- Varens nummerkode (datatype
String)
- Varens navn
- Antall enheter
- Pris per enhet (et desimaltall)
Klassen skal ha en konstruktør som initialiserer de fire datafeltene.
For alle datafeltene skal det være get-metoder. For antall enheter
og pris også set-metoder. Det skal hindres at det settes negative
verdier. Dersom det forsøkes å sette antall enheter eller pris til en negativ
verdi, skal den isteden
settes til 0 (eller 0.0). Klassen skal ha en metode
beregnTotalpris som beregner hvor mye kjøpet beløper seg til
(det vil si multipliserer prisen med antall enheter) og returnerer dette som en
double-verdi.
Lag et testprogram som bruker klassen din og demonstrerer den funksjonaliteten
den har. Programmet skal lese inn varekode, varenavn, antall enheter og
enhetspris. Verdiene skal brukes i et Kvittering-objekt som
programmet oppretter. I en meldingsboks skal programmet skrive ut en kvittering
som inneholder informasjon om varenavn, varekode, enhetspris, antall enheter
og totalbeløp for kjøpet. Verdiene for de nevnte dataene skal hentes ut av
Kvittering-objektet.