HØGSKOLEN I SØR-TRØNDELAG



Like dokumenter
HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

INF106 Objektorientert programmering

HØGSKOLEN I SØR-TRØNDELAG

LC191D/LO191D Videregående programmering mai 2010

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamen

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

UNIVERSITETET I OSLO

Kontinuasjonseksamen

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

HØGSKOLEN I SØR-TRØNDELAG

LO191D/LC191D Videregående programmering

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

Eksamen Objektorientert Programmering 2013

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Programmering i C++ Løsningsforslag Eksamen høsten 2005

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

8. Operator overloading

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

HØGSKOLEN I SØR-TRØNDELAG

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

UNIVERSITETET I OSLO

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

ANTDAGER = 358; I Ifra nyttår 08 til 08 1ed julaften

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring -

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

UNIVERSITETET I OSLO

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

Eksamensoppgave i IFUD1025 Programmering i Java

E K S A M E N. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

UNIVERSITETET I OSLO

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

UNIVERSITETET I OSLO

EKSAMEN. Objektorientert programmering

Oblig 4Hybelhus litt mer tips enn i oppgaven

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamen. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt)

Eksamensoppgave i IFUD1025 Programmering i Java

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

K O N T I N U A S J O N S E K S A M E N

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamen

UNIVERSITETET I OSLO

Eksamen. Objekt-orientert programmering KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

KONTINUASJONSEKSAMEN

Endret litt som ukeoppgave i INF1010 våren 2004

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Introduksjon til objektorientert programmering

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

TDT4100 Objektorientert programmering

Transkript:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 5.mai 2010 Varighet: 0900-1300 Emnekode: Emnenavn: Klasser: LV195D Objektorientert programmering i C++ Nettstudenter Studiepoeng: 12 Faglærer(e): Kontaktperson (adm.) Hjelpemidler: Oppgavesettet består av: Vedlegg består av: Else Lervik (Tore Berg Hansen, Mildrid Ljosland) Ingrid Island Lærebøker, alle håndskrevne og trykte hjelpemidler. 4 oppgaver og 7 sider (inkludert forside) 2 sider Merknad: Oppgaveteksten kan beholdes av studenter som sitter eksamenstiden ut. Lykke til! BOKMÅL 1

Les dette! All programmering skal skje i C++. Les gjennom hele oppgavesettet før du begynner å programmere. Pass på at du ikke gjør verken mer eller mindre enn det oppgavene spør etter. Men dersom du trenger flere funksjoner/konstruktører for å lage de funksjonene oppgavene spør etter, skal du også programmere disse. En fornuftig oppdeling i funksjoner ut over det oppgaven spør etter, kan gi plusspoeng ved bedømmelsen. Oppgavene er laget slik at de alle sammen arbeider med den samme problemstillingen. Det vil derfor være slik at du i en oppgave må bruke klasser/funksjoner du skal ha laget i en annen oppgave. Dersom du av en eller annen grunn ikke har laget disse klassene/funksjonene, kan du, når du skal løse andre oppgaver, anta at de eksisterer. Dersom du mener det mangler opplysninger, sett dine egne forutsetninger. Feilsjekking skal utføres, men feilene behandles kun på enkleste måte, dvs. at du kan la funksjonene returnere -1, false eller 0, avhengig av returtypen. OBS! For å spare skrivearbeid kan du programmere alle konstruktører og medlemsfunksjoner inline i dette oppgavesettet. Felles problemstilling for alle oppgavene Du skal arbeide med et system for godtgjørelse av utgifter til innenlandsreiser i jobbsammenheng. Oppgaveteksten tar utgangspunkt i Statens regulativ for slike reiser, men med en del forenklinger. I denne oppgaven kan du anta at følgende regler gjelder: Reisens totale varighet er gitt som et helt antall dager. Det gis kostgodtgjørelse for hver dag reisen består av, og det gis nattgodtgjørelse til dekning av overnatting for hver natt reisen består av. For reiser med overnatting regnes både første og siste dag med når kostgodtgjørelse skal regnes ut. Vi regner at alle overnattingene på én reise godtgjøres med det samme beløpet. I motsetning til kostgodtgjørelsen varierer nattgodtgjørelsen fra reise til reise. Ved beregning av kostgodtgjørelse brukes faste satser: Reiser som varer én dag godtgjøres med 270 kroner. For reiser med overnatting er kostgodtgjørelsen 580 kr pr dag. Eksempler: En reise som starter og slutte på samme dag godtgjøres med 270 kroner. En reise med én overnatting til 800 kroner, godtgjøres med 800 + 580x2 = 1960 kr. En reise med to overnattinger der hver overnatting koster 500 kroner, godtgjøres med 500x2 + 580x3 = 2740 kr. I tillegg til kost og overnatting skal reiseutgiftene dekkes. En reise består av flere ulike reiseelementer: Kollektivtransport. Start- og slutt-tidspunkt samt strekning (fra-sted og til-sted) registreres i tillegg til typen transport (fly, buss, osv.) og prisen på transporten. Privatbil. Start- og slutt-tidspunkt samt strekning (fra-sted og til-sted) registreres i tillegg til antall km. Godtgjørelsen er kr. 3,65 pr km inntil 9000 km for den aktuelle personen. Etter 9000 km utbetales det kr 3,00 pr km. 2

Annen egen transport. Start- og slutt-tidspunkt samt strekning (fra-sted og til-sted) registreres i tillegg til antall km. Godtgjørelsen pr km er gitt iht. tabellen nedenfor. type pr. km Motorsykkel 2,80 Moped 1,55 Snøscooter 6,60 Båt med motor minst 50 hk 6,50 Båt med motor under 50 hk 3,50 EL-bil 4,00 Annet 1,50 Andre utgifter, f.eks. bompenger. Her registreres en tekst og et beløp. Om datoer og tidspunkter Reisens varighet er gitt ved en startdato og en sluttdato. Bruk klassen Dato gitt i vedlegg 1. (Denne klassen skal også være kjent fra leksjon 3.) Start- og slutt-tidspunkt skal oppgis for alle transportetapper. Bruk kun en vanlig tekst (string) her. Du trenger ikke legge inn kontroll av verken datoer eller tidspunkter i dette oppgavesettet. Oppgave 1 vekt 20% I denne oppgaven skal du kun konsentrere deg om km-godtgjørelsene når man bruker annet eget transportmiddel enn vanlig bil. Et eksempel på slike godtgjørelser er gjengitt i tabellen over (motorsykkel: 2,80/km, moped: 1,55/km, osv.). I denne oppgaven skal dataene leses inn fra en binærfil. Klassen KmGodtgjorelser har følgende definisjon: class KmGodtgjorelser { static const int linjelengde = 50; // lengde på tekstene på datafilen KmGodtgjorelser(); double finnpris(const string &transporttype) const; // pr km. double finnpris(const string &transporttype, double antkm) const; ~KmGodtgjorelser(); KmGodtgjorelser(const KmGodtgjorelser &original); KmGodtgjorelser& operator=(const KmGodtgjorelser &original); Transporttype** transportobjekter; // peker til tabell av pekere int antall; // antall objekter Klassen Transporttype er gitt: class Transporttype { Transporttype(const string &starttype, double startpris) : type(starttype), pris(startpris) {} const string &finntype() const { return type; } double finnpris() const { return pris; } string type; double pris; 3

Programmer konstruktør, destruktør og offentlige funksjoner i klassen KmGodtgjorelser etter følgende spesifikasjoner: Datafilen heter datafil.bin (navnet kan hardkodes) og skal leses inn i konstruktøren. Dataene skal samles i tabellen transportobjekter. Datafilen er som sagt, binær og bygd opp på denne måten: Tekst (f.eks. Båt med motor under 50 hk ) og km-godtgjørelse (f.eks. kr. 6,50) ligger lagret vekselvis utover i filen. Hver enkelt av tekstene legger beslag på 50 byte, mens km-godtgjørelsen ligger lagret som double. Antall tekst tall-par er ikke kjent og må bestemmes av programmet. Hvert slikt par lagres i et objekt av klassen Transporttype. Du kan anta at datafilen ikke inneholder feil. De to finnpris()-funksjonene skal returnere hhv. godtgjørelsen pr. km og for et gitt antall km. Besvar også følgende spørsmål: Hva kan grunnen være til at kopikonstruktøren og tilordningsoperatoren er private? Person 1 gjennomfører * Reise 1 består av * Reiseelement Etappe 1..1 består av 1..1 Transport AndreUtgifter Vi ser bort fra bruk av egen bil i denne modellen AnnenEgenTransport Kollektivtransport Figur 1: Klassediagram som skal brukes i oppgave 2 og 3 Oppgave 2 vekt 30% I denne oppgaven ser vi kun på klassetreet i figur 1, det vil si klassen Reiseelement med subklasser. I et klassetre skal abstrakte klasser vises i kursiv, det er ikke gjort her da du selv skal finne ut om en klasse skal være abstrakt eller ikke. Klassene Transport og Etappe er gitt i vedlegg 2. 4

Programmer klassene Reiseelement, AndreUtgifter, Kollektivtransport og AnnenEgenTransport. Foreta eventuelle utvidelser og/eller endringer av klassene Transport og Etappe dersom du finner det hensiktsmessig. Bruk reglene for godtgjørelse gitt i begynnelsen av oppgavesettet når du bestemmer attributter for de forskjellige klassene. Alle klassene skal ha konstruktører som tar aktuelle attributter som argumenter. Lag også finn- og eventuelt sett-funksjoner. Programmer det som kreves for at det i klassen Reise (og i klassen Person) skal være enkelt å regne ut hva en reise koster. (Se oppgave 3.) Oppgave 3 vekt 30% Vi har følgende forhold mellom klassene Person, Reise og Reiseelement: En person foretar mange reiser. Hver reise består av mange reiseelementer. Reisene en person gjennomfører er samlet i en vektor i klassen Person: vector<reise> reiser; Klassen Reise har følgende datamedlemmer (listen kan utvides): static const int dagpris1 = 270; static const int dagpris2 = 580; string hensikt; Dato startdato; // forenkler, ser bort fra tidspunktet, slik at klassen Dato kan brukes Dato sluttdato; double prisprnatt; vector<reiseelement *> reiseelementer; Du skal lage to funksjoner i klassen Person. Dette vil medføre at du trenger funksjoner i klassen Reise. Du skal selv finne ut hvordan de bør se ut, og du skal selvfølgelig også programmere dem. a) Lag en funksjon som finner totalt antall overnattinger på alle personens reiser: int finntotaltantovernattinger() const; b) Lag en funksjon som finner den totale kostnaden på alle reisene som en person har gjennomført. Dette beløpet skal inkludere både kostgodtgjørelser, nattillegg og summen av alle reiseelementene: double finnprisallereiser() const; Oppgave 4 vekt 20% Vi har hittil ikke tatt inn reglene for bruk av egen bil. Les disse reglene om igjen. Hvordan vil du ta dette inn i den eksisterende løsningen? Vis hvilke endringer dette medfører i koden i løsningene av oppgave 2 og 3. 5

Vedlegg 1 klassen Dato fra leksjon 3 #include <string> using namespace std; class Dato { // Klienten bør bruke erok() for å sjekke at en gyldig dato // ble lagt inn. De øvrige funksjonene (unntatt settdato()) // forutsetter at det er tilfelle. Dato(int nydag, int nymnd, int nyttaar); Dato(const string &nydato); // Format: ddmmaaaa Dato(); // dagens dato bool erok() const { return ok; } // Funksjonene returnerer false dersom datoen er ugyldig bool settdato(int nydag, int nymnd, int nyttaar); bool settdato(const string &nydato); // Format: ddmmaaaa void settdato(); // dagens dato int finndag() const { return dag; } int finnmnd() const { return mnd; } int finnaar() const { return aar; } void finndato(int &dagen, int &mnden, int &aaret) const; string finndato() const; long int antalldagertil(const Dato &denandre) const; // Funksjonen sammenlikner to datoer: // Returverdi: 0 hvis likhet, <0 hvis DenAndre etter, // >0 hvis DenAndre før den datoen funksjonen kalles på vegne av. int sammenlikn(const Dato &denandre) const; int dag; int mnd; int aar; bool ok; 6

Vedlegg 2 klassene Transport og Etappe class Transport : public Reiseelement { Transport(const Etappe &startinfo) : info(startinfo){ } const Etappe &finninfo() const { return info; } Etappe info; class Etappe { Etappe(const string &startstarttid, const string &startslutttid, const string &startfrasted, const string &starttilsted) : starttid(startstarttid), slutttid(startslutttid), frasted(startfrasted), tilsted(starttilsted) { } const string &finnstarttid() const { return starttid; } const string &finnslutttid() const { return slutttid; } const string &finnfrasted() const { return frasted; } const string &finntilsted() const { return tilsted; } string starttid; string slutttid; string frasted; string tilsted; 7