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

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

INF106 Objektorientert programmering

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

Kontinuasjonseksamen

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

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

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

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

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

Kontinuasjonseksamen

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

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

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

Eksamensoppgave i IFUD1025 Programmering i Java

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

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

EKSAMEN. Objektorientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IFUD1025 Programmering i Java

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

KONTINUASJONSEKSAMEN

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.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

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

Kontinuasjonseksamen

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 AITeL

TDT Prosedyre- og objektorientert programmering

UNIVERSITETET I OSLO

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

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

EKSAMEN 6109 OBJEKTORIENTERT PROGRAMMERING 5609 OBJEKTORIENTERT PROGRAMMERING

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

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

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

Kontinuasjonseksamen

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

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

GJØVIK INGENIØRHØGSKOLE

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

HØGSKOLEN I SØR-TRØNDELAG

KONTINUASJONSEKSAMEN

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Endret litt som ukeoppgave i INF1010 våren 2004

Eksamen Objektorientert Programmering 2013

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

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

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

EKSAMENSFORSIDE SKRIFTLIG EKSAMEN

UNIVERSITETET I OSLO

Transkript:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 4.mai 2011 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: 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 1, 2 og 3 er knyttet til problemstillingen som er beskrevet lenger nede på siden. Det vil derfor kunne bli 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. Oppgave 4 består av generelle teorispørsmål. 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 I vedlegg 1 og 2 finner du utkast til klassene Person og Sett. Disse klassene skal brukes i kode som håndterer deler av en enkel treningsdagbok. Det kan tenkes at du finner det hensiktsmessig å utvide og/eller forandre på disse klassene. For alle treningsøkter registrerer vi øktnummer (entydig), sted, dato, varighet (minutter). Vi skiller mellom følgende typer treningsøkter: Kontinuerlig økt: Dette er en utholdenhetsøkt uten pauser. I tillegg til felles attributter for alle slags treningsøkter, registrerer vi her typen aktivitet og tilbakelagt distanse i kilometer. Intervalløkt: Dette er en utholdenhetsøkt som består av intervaller med høy intensitet og aktive pauser av fast varighet. Eksempel: 4 min høy intensitet med 3 min aktiv pause, dette utført i alt fire ganger, gir en treningstid på 4x4 = 16 minutter. Total varighet 28 minutter. I tillegg til felles attributter for alle slags treningsøkter, registrerer vi her typen aktivitet samt intervalltid (i eksemplet er dette 4 minutter) og distanse tilbakelagt pr intervall (kilometer). Tilbakelagt distanse vil variere fra intervall til intervall. Styrkeøkt: I tillegg til felles attributter for alle slags treningsøkter, skal vi her registrere de settene økten består av. Et sett er karakterisert ved navnet på øvelsen, antall repetisjoner og antall kilogram (se klassen Sett). Eksempel: Et sett kan bestå av øvelsen Benkpress med 20 kilogram vekt og 10 repetisjoner. En styrkeøkt består av en eller flere sett. Det utføres aldri mer enn én styrkeøkt på en gitt dato. Som eksempler på utholdenhetsaktiviteter ( typen aktivitet i teksten foran) nevner vi løping, skiløping og svømming. 2

I dette oppgavesettet skal du forholde deg til følgende sammenheng mellom klassene: Det er tillatt å lage flere klasser om du finner det hensiktsmessig. (Men du kan ikke sløyfe noen av klassene i diagrammet.) OBS: En økt identifiseres med et nummer. Du trenger ingen steder i dette oppgavesettet sjekke og/eller generere dette nummeret slik at det virkelig er entydig. Det samme gjelder nummeret på settene. Datoene lagrer du som strenger (string). Du behøver ikke legge inn noen form for kontroll av gyldighet. Oppgave 1 vekt 30% Du skal programmere klassene vist i diagrammet. I vedlegg 1 og 2 finner du utkast til klassene Person og Sett. Vurder om disse har et hensiktsmessig innhold. Skriv koden for funksjonsmedlemmene. Skriv kode for de andre klassene i diagrammet. Vurder om det for noen av disse klassene er hensiktsmessig å overloade operatorer. Les teksten foran nøye slik at du får med alle objektvariablene (datamedlemmene). Distansene som en intervalløkt består av, skal legges inn som en double-tabell. Alle klassene skal ha en konstruktør som tar verdiene til alle aktuelle attributter som argument. Alle enkle attributter skal ha get-funksjoner. Du kan spare skrivearbeid ved å markere dette med GET etter attributtnavnet, eksempel: int antall; // ** GET 3

Men vær obs. i tilfelle noen av disse funksjonene redefineres i subklasser, da må du programmere dem, og bruk i tilfelle gjerne også et annet navn, for eksempel beregnantall(). Du skal ikke lage flere set-funksjoner enn det oppgavesettet for øvrig krever. Oppgave 2 vekt 30% Programmer følgende funksjoner, og for deloppgave a) og b) skal du også skrive opp hvilke klasser funksjonene skal inn i. Du må vurdere bruk av const for funksjonene. a) For en hvilken som helst treningsøkt skal det være enkelt å få regnet ut kaloriforbruket. For utholdenhetsøkter skal du multiplisere personens vekt med tilbakelagt distanse. (Dette kan synes som en merkelig formel, men det har vist seg at den gir et rimelig godt overslag for antall forbrukte kcal.) For styrkeøkter antar vi at damer forbruker 240 kcal/time, mens menn forbruker 300 kcal/time. Funksjonen skal ha følgende hode: b) double finnkaloriforbruk() For alle utholdenhetsøkter skal det være mulig å få ut hastigheten. Den er gitt ved tilbakelagt distanse dividert med forbrukt tid. For intervalløkter skal aktive pauser trekkes fra. Funksjonen skal ha følgende hode: c) double finnhastighet() Lag et funksjonsmedlem i klassen Person som henter ut alle settene som tilhører styrkeøkten på en bestemt dato. Du må i den forbindelse vurdere en egnet datastruktur som inneholder alle settene og som returneres fra funksjonen. Funksjonen kan ha et hode i likhet med dette: d) Settene finnstyrkeøkt(string dato) const Hvor Settene kan være en typedef for referanse til en egnet datastruktur. Lag en funksjon i klassen Person, som henter ut data om alle øktene i sortert rekkefølge. Dataene som skal hentes ut er øktnummer, type aktivitet og kaloriforbruk. Typen aktivitet er definert som attributt til utholdenhetsøktene, for styrkeøkt settes den lik Styrkeokt. Dataene skal være sortert etter stigende kaloriforbruk. Du må altså enten lage egne funksjoner for å sortere eller bruke mulighetene som finnes i egnet containerklasse i STL med tilhørende algoritmer. 4

Oppgave 3 vekt 25% Det er ønskelig å kunne lagre og ta vare på data fra treningsøkter. I en større applikasjon kunne det vært gjort ved å etablere en databaseløsning. Det gjør vi ikke her. Det du skal gjøre er å legge dataene fra treningsøkter på en binærfil slik at de kan hentes frem, analyseres og presenteres i et program. Du skal ikke skrive hele programmet, men vise med kodeeksempel hvordan du oppretter en binærfil, hvordan du skriver data til filen og hvordan du henter data ut fra filen. Oppgave 4 vekt 15% a) Klasser som bruker pekere og operatoren new må alltid ha en kopikonstruktør. Hvorfor? b) Blant fagfolk betegnes = (tilordningsoperatoren), kopikonstruktøren og destruktøren som de tre store. Det hevdes at hvis du trenger en av dem så trenger du alle. Kan du tenke deg hvorfor? c) Når og hvorfor er det hensiktsmessig å gjøre destruktører virtuelle? d) Hva kan RTTI og downcasting brukes til? e) Du har forstått pekere hvis du kan forklare hva som blir skrevet ut og hvorfor etter disse setningene int a; *&a = 25; cout << "a inneholder nå " << a << endl; 5

Vedlegg 1 #ifndef PERSON_H #define PERSON_H #include <string> using namespace std; class Person { public: Person(string nyttnavn, bool initkvinne, double nyvekt); ~Person(void); string getnavn() const; bool iskvinne() const; double getvekt() const; private: string navn; bool kvinne; double vekt; }; #endif //PERSON_H 6

Vedlegg 2 #ifndef SETT_H #define SETT_H #include <string> using namespace std; class Sett { private: int settnr; string ovelse; int antallrepetisjoner; int antallkilogram; public: Sett(int initsettnr, string initovelse, int initantallrepetisjoner, int initantallkilogram) :settnr(initsettnr), ovelse(initovelse), antallrepetisjoner(initantallrepetisjoner), antallkilogram(initantallkilogram) {}; Sett() {}; ~Sett() {}; int getsettnr() const; string getovelse() const; int getantallrepetisjoner() const; int getantallkilogram() const; void setantallrepetisjoner(int nyantallrepetisjoner); }; #endif //SET_H 7