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:

  1. Tilføy et ekstra int-datafelt som kan inneholde antall studiepoeng for vedkommende kurs.
  2. Tilføy set- og get-metoder for det nye datafeltet.
  3. Skriv en konstruktør med to parametre, en for kursnavnet og en for antall studiepoeng.
  4. 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:

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.