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 Avdeling for informatikk og e-læring - AITeL

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 Avdeling for informatikk og e-læring - AITeL

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

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

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

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

8. Operator overloading

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

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

KONTINUASJONSEKSAMEN

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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

Kontinuasjonseksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamen. Objekt-orientert programmering

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

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

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

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

GJØVIK INGENIØRHØGSKOLE

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

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

HØGSKOLEN I SØR-TRØNDELAG

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

E K S A M E N. Grunnleggende programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA

E K S A M E N 96HINDA / 96HINDE (1 AA / AE)

UNIVERSITETET I OSLO

Kontinuasjonseksamen

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5

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

HØGSKOLEN I SØR-TRØNDELAG

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.

KONTINUASJONSEKSAMEN

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

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

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 8. august 1995 TID:

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

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

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

Grunnleggende datakunnskap, programmering og datastrukturer 97HINDA / 97HINDB / 97HDMUA

UNIVERSITETET I OSLO

Kontinuasjonseksamen

HØGSKOLEN I SØR-TRØNDELAG

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

Kontinuasjonseksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Eksamensoppgave i IFUD1025 Programmering i Java

TDT Prosedyre- og objektorientert programmering

UNIVERSITETET I OSLO

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

KONTINUASJONSEKSAMEN

Objektorientert Programmering Ekstraordinær eksamen 2014

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

GJØVIK INGENIØRHØGSKOLE

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Eksamen. Objekt-orientert programmering 03HBIND*, 03HBINFA, 03HBMETEA

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

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

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Kontinuasjonseksamen

Eksamensoppgave i IFUD1025 Programmering i Java og IINI4013 Programmering i Java

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

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

UNIVERSITETET I OSLO

Transkript:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 21.desember 2007 Varighet: 0900-1300 Fagnummer: Fagnavn: Klasse(r): LV195D Objektorientert programmering i C++ nettstudenter Studiepoeng: 12 Faglærer(e): Hjelpemidler: Oppgavesettet består av: Vedlegg består av: Faglærer: Else Lervik Faglig kontakt på eksamensdagen: Tore Berg Hansen Lærebøker, alle håndskrevne og trykte hjelpemidler. 3 oppgaver og 7 sider (inkludert forside og vedlegg) 2 sider Merknad: Oppgaveteksten kan beholdes av studenter som sitter eksamenstiden ut. Lykke til! 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. 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. For å spare skrivearbeid kan du programmere alle konstruktører og medlemsfunksjoner inline i dette oppgavesettet. Oppgave 1 vekt 20% Som vedlegg 1 finner du klassen Person og et lite hovedprogram. Koden kompilerer, men gir kjørefeil av den lite informative typen. Med Microsoft Visual C++ kommer det først en stor mengde vilkårlige tegn, deretter beskjed om å fortelle Microsoft (!) om dette problemet. I andre systemer kommer selvfølgelig andre meldinger, i enkelte systemer kan det muligens hende at det ikke kommer meldinger i det hele tatt i akkurat denne anvendelsen av klassen Person. Feilen(e) ligger i klassen Person. Finn feilene, og forklar hvorfor dette er kode som ikke fungerer. Sett opp kode som virker. Om nødvendig kan du endre funksjonskallene i main(). Kommenter bort de aktuelle funksjonskallene i main() og finn ut hva som blir skrevet ut når programmet kjører. Innledning til oppgave 2 og 3 I disse oppgavene skal du arbeide med administrasjon av arbeidsoppgaver til ansatte i en bedrift. Klassediagrammet nedenfor viser sammenhengen mellom de ulike typene oppgaver. Oppgave OppgaveDager OppgavePeriode EnDagIPerioden HverDagIPerioden En oppgave identifiseres ved et nummer, og den har også et navn. Det er knyttet et antall arbeidstimer pr dag til oppgaven. Full dag settes til åtte timer. Vi skiller mellom tre typer oppgaver: 2

OppgaveDager: Denne klassen beskriver oppgaver som skal utføres på en eller flere bestemte datoer. EnDagIPerioden: Denne typen oppgave skal utføres en gang i løpet av en periode gitt ved startdato og sluttdato. Både startdato og sluttdato er del av perioden. HverDagIPerioden: Denne typen oppgaver skal utføres hver eneste dag i perioden. Vi ser bort fra at enkelte av oppgavene skal utføres til bestemte tidspunkter på dagen. Denne delen av oppgavesettet handler mye om datoer. Til det skal du bruke en utvidelse av klassen Dato som du kjenner fra leksjon 3. Klassedefinisjonen, som er utvidet med en funksjon for å finne antall arbeidsdager mellom to datoer, finner du som vedlegg 2 i dette eksamenssettet. (Du skal ikke programmere denne utvidelsen.) Du kan overalt i oppgave 2 og 3 gå ut fra at datoene er korrekte, dvs. du trenger ikke å teste på gyldighet av datoer. Oppgave 2 vekt 50% Programmer de fem klassene etter følgende spesifikasjoner: Oppgavene skal gis et entydig nummer av systemet, slik at når en ny oppgave legges inn, skal den få et nummer som er 1 større enn hittil største. (Ettersom ingenting lagres på fil her, kan nummereringen starte på 0 hver gang programmet starter.) Alle klassene skal ha konstruktører med argumentliste. I tillegg til navn og antall timer skal følgende med: For oppgaver som går over en periode skal start- og sluttdato med. For oppgaver som skal gjennomføres på et sett med faste datoer (klassen OppgaveDager) skal rekken av datoer inn som argument. Du må lagre informasjon om hvorvidt en oppgave er utført eller ikke. Ingen oppgaver er utført i det et objekt opprettes. Det må finnes nødvendige funksjoner for å registrere at en oppgave er utført og for å finne ut om den er utført (sett- og finnfunksjoner). Oppgaveobjekter med oppgaver som skal utføres flere dager (dvs klassene OppgaveDager og HverDagIPerioden), må ha muligheten for å registrere at oppgaven er utført en av de aktuelle dagene. Oppgaven som helhet er ikke utført før den er utført alle de aktuelle dagene, og det er dette vi forholder oss til når vi senere i dette oppgavesettet snakker om oppgaver som er utført. Dessuten skal følgende funksjonalitet implementeres for alle typer oppgaver: En funksjon som finner ut om en oppgave kan eller skal utføres på en bestemt dato. Datoen skal være argument til funksjonen, som skal returnere true eller false. En funksjon som registrerer at en oppgave er utført på en bestemt dato. Datoen må stemme med en av de dagene der oppgaven kan utføres. En funksjon som returnerer true dersom en oppgave skal, eventuelt kan, utføres på en bestemt dato. Funksjonen skal ha følgende argumentliste: o o Datoen En logisk variabel som sier om en bare skal ta med oppgaver som må utføres denne dagen, eller om en også skal ta med de som kan utføres denne dagen. Det er kun oppgaver i klassen EnDagIPerioden som kan komme i kategorien kan og ikke må. 3

Denne typen oppgaver er i kategorien må bare dersom vi er kommet til siste dag i perioden. o En logisk variabel som sier om en skal ta med oppgaver som er utført eller ikke. Oppgave 3 vekt 30% Vi skal sette aktivitetene fra forrige oppgave inn i en større sammenheng: AllePersoner 1 * Person 1 * Oppgave OppgaveDager OppgavePeriode EnDagIPerioden HverDagIPerioden For å løse denne oppgaven trenger du klassene fra oppgave 2. Du kan utvide disse klassene dersom du finner det hensiktsmessig. Om du ikke har løst hele oppgave 2, kan du ved løsning av denne oppgaven forutsette at det er gjort. Du skal lage to fullstendige klasser etter følgende spesifikasjoner: Klassen Person Klassen Person skal ha følgende datamedlemmer: string navn; antar at navnet er entydig vector<oppgave *> oppgavene; Klassen skal ha en konstruktør som tar navnet på personen som argument. en funksjon som registrerer en ny oppgave. Aktuelt argument skal være en peker til et oppgaveobjekt. en funksjon som returnerer en vektor med pekere til alle oppgaver som må utføres på en bestemt dato og som ennå ikke er utført. Klassen AllePersoner Klassen skal ha person-objekter som datamedlem. Du bestemmer selv om du vil bruke vektor eller tabell. Brukeren av klassen må ikke oppleve at det er noen begrensninger på antallet personer som kan registreres. ha en funksjon for å registrere en ny person. Funksjonen tar navnet på personen som argument. ha en funksjon for å registrere en ny oppgave for en bestemt person. I tillegg til navnet skal oppgaven komme inn som en peker til et oppgaveobjekt. 4

ha en funksjon som kan brukes til å planlegge en oppgave på en bestemt dato for en gruppe personer (tabell eller vektor av personnavn). Funksjonen skal returnere maksimalt antall ledige timer denne gruppen har på den aktuelle datoen. Antall ledige timer settes lik åtte minus summen av oppgaver som er satt opp den dagen for den som har mest å gjøre. Her ser vi kun på oppgaver som må gjøres, ikke de som kan gjøres. Vi ser bort fra at noen av oppgavene kan ha fastsatte tidspunkter på dagen. Som eksempel antar vi at gruppen består av Toril, Arne og Eva: Toril Arne Eva 20.12.2007 oppgave A: 2 timer oppgave B: 1 time ledig tid: 5 timer 21.12.2007 oppgave C: 1 time ledig tid: 7 timer på reise hele dagen, ledig tid: 0 timer ledig hele dagen oppgave D: 3 timer ledig tid: 5 timer oppgave E: 4 timer ledig tid: 4 timer Her ser vi at på grunn av at Arne er på reise hele dagen, så kan ikke gruppen samles den 20.12. Den 21.12 kan gruppen samles opptil 4 timer. Klassen Person kan utvides om du finner det hensiktsmessig når du skal lage klassen AllePersoner. 5

Vedlegg 1 #include <string> #include <iostream> using namespace std; class Person { public: Person() { fornavn = "nn"; etternavn = "NN"; Person(const string &startfornavn, const string &startetternavn) { fornavn = startfornavn; etternavn = startetternavn; void settfornavn(const string &nyttfornavn) { fornavn = nyttfornavn; void settetternavn(const string &nyttetternavn) { etternavn = nyttetternavn; const string &finnetternavn() const {return etternavn; const string &finnfornavn() const { return fornavn; returnerer hele navnet som et string-objekt string &finnnavn1() const { string navn; navn = fornavn + " " + etternavn; return navn; returnerer fornavn og etternavn i en string-tabell string *finnnavn2() { string *navn; navn[0] = fornavn; navn[1] = etternavn; return navn; private: string fornavn; string etternavn; ; int main() { Person p1("anne", "Gustavsen"); Person p2("eva", "Hansen"); Person p3 = p1; Person personer[2][2]; Person *personpeker = &personer[0][0]; personpeker[1] = p1; personpeker[2] = p2; cout << "P1, fullt navn 1: " << p1.finnnavn1() << endl; cout << "P1, fullt navn 2: " << p1.finnnavn2() << endl; p1.settetternavn("haug"); for (int indeks1 = 0; indeks1 < 2; indeks1++) { for (int indeks2 = 0; indeks2 < 2; indeks2++) { cout << personer[indeks1][indeks2].finnetternavn() << endl; 6

Vedlegg 2 ------------------------------------------------------------------- dato.h E.L. 2007-12-10 Klasse for håndtering av datoer. Datoer kan sammenliknes (like, før, etter), og det er mulig å finne antall dager mellom to datoer. Følgende feilkontroll utføres i konstruktører og sett-funksjoner: Aar >= 0. 1 <= Mnd <= 12. Dag >= 1. For Mnd = 1,3,5,7,8,10,12 skal Dag <= 31. For Mnd = 4,6,9,11 skal Dag <= 30 For Mnd = 2 skal Dag <= 28 hvis ikke skuddår, <= 29 ellers. #ifndef DATO_DEFINERT #define DATO_DEFINERT #include <string> using namespace std; class Dato { public: 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; long int antallarbeidsdagertil(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; private: int dag; int mnd; int aar; bool ok; ; #endif 7