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

INF106 Objektorientert programmering

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

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

UNIVERSITETET I OSLO

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

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

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

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

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

Kontinuasjonseksamen

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

Eksamensoppgave i IFUD1025 Programmering i Java

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

HØGSKOLEN I SØR-TRØNDELAG

2 Om statiske variable/konstanter og statiske metoder.

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

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

GJØVIK INGENIØRHØGSKOLE

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

LC191D/LO191D Videregående programmering mai 2010

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

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

Introduksjon til objektorientert programmering

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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:

Høgskolen i Gjøvik E K S A M E N. FAGLÆRER: Frode Haug KLASSE: 1 AA / AE

INF1000: Forelesning 6. Klasser og objekter del 1

UNIVERSITETET I OSLO

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

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Dagens tema Kapittel 8: Objekter og klasser

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

INF1000: Forelesning 7. Konstruktører Static

INF1000: noen avsluttende ord

Kontinuasjonseksamen

Les gjennom hele oppgavesettet før du begynner å b,svare deloppgavene.

KONTINUASJONSEKSAMEN

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Kontinuasjonseksamen

HØGSKOLEN I SØR-TRØNDELAG

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

Eksamensoppgave i IFUD1025 Programmering i Java

Repitisjonskurs. Arv, Subklasser og Grensesnitt

HØGSKOLEN I SØR-TRØNDELAG

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

Transkript:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 30.november 2005 Varighet: 0900-1300 Fagnummer: Fagnavn: Klasse(r): LV195D Objektorientert programmering i C++ Nettstudenter Studiepoeng: 12 Faglærer(e): Else Lervik, tlf. 73 55 95 50 / 99 32 04 19 Hjelpemidler: Oppgavesettet består av: Vedlegg består av: Lærebøker, alle håndskrevne og trykte hjelpemidler. 3 oppgaver og 5 sider (inkludert forside) 0 sider Merknad: Oppgaveteksten kan beholdes av studenter som sitter eksamenstiden ut. Lykke til! 1

Generell informasjon All programmering skal skje i C++. Det er tillatt å bruke klasser fra leksjoner, øvingsopplegg og lærebok. Ta i tilfelle med henvisninger til hvor klassen er å finne. 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. Oppgave 1 vekt 15% Følgende klasse er gitt: class Person { private: string navn; int alder; public: Person() {}; Person(const string &startnavn, int startalder) { navn = startnavn; alder = startalder; } const string &finnnavn() const { return navn; } void settalder(int nyalder) { alder = nyalder; } int finnalder() const { return alder; } }; En tabell med objekter er gitt: Person tabell[] = {Person("Ole", 18), Person("Inger", 20), Person("Even", 19) }; Oppgave a) Vi definerer følgende peker: Person *p = tabell; Sett opp en for-løkke som skriver ut innholdet i tabellen ved å navigere gjennom tabellen med p. Utskriften skal se slik ut: Navn: Ole, alder: 18 Navn: Inger, alder: 20 Navn: Even, alder: 19 Oppgave b) Vi lager en tabell av pekere: Person *ptab[3]; Skriv kode som setter hver av disse pekerne til å peke til hvert enkelt av tabell-elementene i Persontabellen. Lag deretter en for-løkke som produserer samme utskrift som i oppgave a), men nå ved å bruke ptab. 2

Oppgave c) Skriv kode som sørger for å lagre en kopi av Person-tabellen i det frie lageret. Bruk variabelnavnet pfri. Lag så en for-løkke som produserer samme utskrift som i oppgave a), men nå ved å bruke pfri. Oppgave 2 vekt 20% Deler av en klassetemplate for behandling av en vektor er gitt: template <class type> class Objektliste { public: her skal du lage funksjoner private: vector<type> liste; }; Lag medlemsfunksjoner som gjør følgende: registrerer et nytt element i vektoren, sletter et element i vektoren, gitt indeksen, finner antall elementer i vektoren og finner gjennomsnittsverdien av elementene. Du kan gå ut fra at det er mulig å summere elementene sammen til en double-verdi. I oppgave 1 er klassen Person og en tabell med tre Person-objekter gitt. Skriv kode som gjør følgende: Opprett en instans av klassetemplaten med Person-objekter. Objektet du får skal hete personene. Legg de tre objektene fra tabellen inn i personene. Skriv ut antall personer registrert og gjennomsnittlig alder ved å sende meldinger til personene. Tips: Du trenger å lage en ekstra funksjon for å få dette til å virke. Oppgave 3 vekt 65% I forbindelse med planene for samlokalisering av NTNU, er det igangsatt planlegging av salg av Dragvoll-området til Trondheim kommune. Som en del av denne planleggingen er du bedt om å lage et datasystem som administrerer nye boenheter for området. Området er planlagt regulert til boformål med en blanding av eneboliger, rekkehus og terrassehus. Aktuell salgsinformasjon er prisantydning og boligens bruttoareal ( bra ) og boligareal ( boa ). Bruttoarealet er lik boligarealet pluss boder, terrasser, osv. En boenhet identifiseres med et nummer. I tillegg lagres adressen. Alle boenheter må betale et fast månedlig beløp. For selveierboliger er dette beløpet lavt og kun ment å dekke snømåking, osv. For borettslagsboligene kommer andel av fellesgjeld, samt ekstra parkeringsplasser, i tillegg. Flere detaljer nedenfor. Prosjektet kan modelleres på følgende måte: 3

DragePark 1 * Boenhet Enebolig Flermannsbolig Rekkehus Terrassehus Vi skal nå se nærmere på de månedlige avgiftene til de ulike boligtypene. Alle flermannsboliger (dvs rekkehus og terrassehus) tilhører Drage borettslag der alle boenheter har en andel av fellesgjeld. Denne beregnes ved å gange en såkalt fellesgjeldenhet med en faktor avhengig av typen bolig, slik: Terrassehus: Andel fellesgjeld er lik fellesgjeldenheten * boligens bruttoareal * 0,3 Rekkehus: Andel fellesgjeld er lik fellesgjeldenheten * tomtestørrelsen * 0,1 + fellesgjeldenheten * boligareal * 0,2 Eierne av flermannsboligene kan leie parkeringsplasser. (For rekkehus gjelder dette plasser utenfor tomten som hører til huset.) Betaling for dette skal med i det månedlige beløpet. Antall parkeringsplasser boligen leier ganges med et fast beløp pr måned pr plass. Eierne av eneboliger kan ikke leie ekstra parkeringsplasser. Oppgave a) vekt 25% OBS! For å forenkle noe ser vi i det følgende bort fra eneboligene. Medlemmene i klassen Boenhet er gitt, men det kan hende du finner det hensiktsmessig å endre og/eller utvide medlemslisten: Datamedlemmer: int bonr; string eiernavn; // navn legges inn når boligen er solgt string adresse; double bra; // bruttoareal double boa; // boligareal long prisantydning; long solgtfor; // 0 inntil boligen er solgt double mndutgift; // ev. andel av fellesgjeld og leie av p-plasser kommer i tillegg Medlemsfunksjoner: int finnbonr() const { return bonr; } const string &finneier() const { return eiernavn; } double finnbra() const { return bra; } double finnboa() const { return boa; } long finnpris() const { return prisantydning; } long finnsolgtfor() const { return solgtfor; } void settbonr(int nyttbonr) { bonr = nyttbonr; } void setteier(const string &nyeier) { eiernavn = nyeier; } void settadresse(const string &nyadresse) { adresse = nyadresse; } void settsolgtfor(long nysolgtfor) { solgtfor = nysolgtfor; } 4

Programmer klassene Flermannsbolig, Rekkehus og Terrassehus slik at det er mulig å hente ut og endre antall parkeringsplasser, samt finne de månedlige utgiftene til boligen. Videre: Det skal være mulig å behandle objekter som tilhører subklasser til Boenhet under ett. (Se nedenfor der vi samler alle objektene i en vektor av typen Boenhet *.) Husk å ta med det du måtte trenge av konstruktører (se også resten av oppgaveteksten). Både fellesgjeldenheten og parkeringsplassleien er verdier som er felles for alle flermannsboligene, men det skal være mulig å endre verdiene under kjøring av programmet (det er altså variabler og ikke konstanter). For oppgave b) og c) gjelder: Klassen DragePark holder orden på alle boenhetene, og den har følgende private datamedlem: vector <Boenhet*> boliger; Oppgave b) vekt 15% Lag følgende to medlemsfunksjoner i klassen DragePark: Finn summen av månedlige utgifter for alle (solgte og usolgte) registrerte boliger. Registrer at en bolig er solgt. Funksjonen skal ha tre argumenter: bolignr, navn på kjøperen og kjøpesummen. Funksjonen skal returnere false dersom ugyldig bolignr eller boligen allerede solgt. Oppgave c) vekt 25% Lag følgende medlemsfunksjon i klassen DragePark: void registrernyeboenheter(boenhet *type, const string* adresser, int antall); Funksjonen skal registrere antall boenheter identiske med type når det gjelder brutto- og nettoareal, samt prisantydning og startverdien for de månedlige utgiftene (kan endres senere ved at kjøperen for eksempel ønsker ekstra garasjeplass). Boligene har imidlertid ulike adresser, gitt av tabellen adresser. Du kan gå ut fra at denne tabellen inneholder det riktige antall adresser. Eksempel på bruk: Boenhet *type = new Rekkehus(350, 1, 140, 95, 2000000, 500) ; string adresser[] = {"Dragev 1a", "Dragev 1b", "Dragev 1c", "Dragev 1d", "Dragev 1e"}; boområde.registrernyeboenheter(type, adresser, 5); Bolignr (datamedlemmet bonr i klassen Boenhet) skal tildeles ved at nummeret for et nytt objekt settes lik det hittil største + 1. Løsningen skal være slik at det ikke er nødvendig å forandre funksjonen registrernyeboenheter() dersom flere boligtyper legges inn (dvs at det lages flere subklasser til Boenhet). 5