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



Like dokumenter
Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

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

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering. EKSAMENSDATO: 25. mai HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB TID: Høgskolen i Gjøvik

Eksamen 00HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB

Høgskolen i Gjøvik. Eksamen. Objekt-orientert programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

KONTINUASJONSEKSAMEN

GJØVIK INGENIØRHØGSKOLE

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

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

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

Kontinuasjonseksamen

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

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 5. desember HIND*, 01HINE*, 01HDMU*, 01HING* TID:

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

KONTINUASJONSEKSAMEN

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

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

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 7. desember HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB / 00HINGA

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:

KONTINUASJONSEKSAMEN

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

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

Eksamen 01HIND* / 01HINE* / 01HDMU*

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

GJØVIK INGENIØRHØGSKOLE

Kontinuasjonseksamen

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

E K S A M E N. Grunnleggende programmering 04HBIND*, 04HBINE*, 04HBINFA, 04HBMETEA, 04HBGEOA. ANTALL SIDER UTLEVERT: 8 (inkludert denne forside)

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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: 11. august 1995 TID:

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. 04HBIND* / 04HBINFA / div. andre

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

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

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN. Algoritmiske metoder I KLASSE: 97HINDA / 97HINDB ( 2DA / 2DB )

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

KONTINUASJONSEKSAMEN

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

EKSAMENSOPPGAVE. INF-1100 Innføring i programmering og datamaskiners virkemåte. Ingen. Elektronisk (WiseFlow) Robert Pettersen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Transkript:

Høgskolen i Gjøvik Avdeling for teknologi Eksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering L 183 A EKSAMENSDATO: 27. mai 2003 KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA TID: 09.00-13.00 FAGLÆRER: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 8 (inkludert denne forside) Alle trykte og skrevne. Kontroller at alle oppgavearkene er tilstede. Innføring med penn, eventuelt trykkblyant som gir gjennomslag. Pass på så du ikke skriver på mer enn ett innføringsark om gangen (da det blir uleselige gjennomslag når flere ark ligger oppå hverandre). Ved innlevering skilles hvit og gul besvarelse, som legges i hvert sitt omslag. Oppgavetekst, kladd og blå kopi beholder kandidaten til klagefristen er over. Ikke skriv noe av din besvarelse på oppgavearkene. Men, i oppgavetekst der du skal fylle ut svar i tegning/tabell/kurve, skal selvsagt dette innleveres sammen med hvit besvarelse. Husk kandidatnummer på alle ark. Ta vare på dette nummeret til sensuren faller.

NB: Oppgave 1a, 1b, 1c og 2 er totalt uavhengige og kan derfor løses separat. Oppgave 1 (30%) a) Det nedenfor stående programmet var det ønskelig at gav følgende utskrift: Kurt Nilsen, Idolgata 1, 12345678 19600406: Gorm Morfin, 43 David Pedersen, Sangersmuget 3, 87654321 19620607: Gyda Heroin, 42 19930422: Gina Kokain, 10 Gaute Ormåsen, Bassrapen 7, 12341234 19910929: Geir Rohypnol, 12 19940817: Guro Cannabis, 9 Men, i koden er det fem feil av typen syntaktiske (som kompilatoren reagerer på) og/eller semantiske (logiske, som gjør at programmet ikke fungerer som ønsket). Hvilke? NB: Tallene helt til venstre på hver linje er ikke en del av koden, men kun ment som linjenummer, slik at du enklere kan henvise til hvor feilene er å finne. 1 #include <iostream> // cout 2 #include <cstring> // strcpy, strlen 3 using namespace std; 4 const int MAXLEGER = 100; // Max.antall leger i kartoteket. 5 const int MAXRESEPT = 100; // Max.antall resepter hos hver lege. 6 class Resept { // Klassen Resept: 7 private: 8 int dato; // Dato. 9 char* pasnavn,*mednavn; // Pasient- og medisinnavn. 10 int medmengde; // Medisinmengde. 11 public: // Constructor som setter initielle verdier. 12 Resept(int d, char* p, char* m, int mm) { 13 dato = d; medmengde = mm; 14 pasnavn = new char[strlen(p)+1]; strcpy(pasnavn, p); 15 mednavn = new char[strlen(m)+1]; strcpy(mednavn, p); 16 // Skriver alle dataene om resepten til skjerm: 17 virtual void display() { cout <<'\t' << dato << ": " << pasnavn <<'\t' 18 << mednavn << ", " << medmengde <<'\n'; 19 ; 20 class Lege { // Klassen Lege: 21 private: 22 char* navn, *adr; // Navn og adresse. 23 int telefon; // Telefonnummer. 24 ant_res; // Antall resepter lagret (så langt). 25 Resept* reseptene[maxresept]; // Legens resepter. Bruker IKKE nr.0. 26 public: // Constructor som setter initielle verdier: 27 Lege(char* n, char* a, int t) { telefon = t; ant_res = 0; 28 navn = new char[strlen(n)+1]; strcpy(navn, n); 29 adr = new char[strlen(a)+1]; strcpy(adr, a); 30 2

31 virtual void display() { // Skriver alle dataene om legen til skjerm. 32 cout << navn << ", " << adr << ", " << telefon << '\n'; 33 for (int i = 1; i <= ant_res; i++) reseptene[i]->display(); 34 void legg_inn(resept* r) { // Legger inn ny resept (om plass). 35 if (ant_res <= MAXRESEPT-1) reseptene[++ant_res] = r; 36 else cout << "\n\nfullt med resepter hos legen!\n\n"; 37 ; 38 Lege* legene[maxleger]; // Datastrukturen: Array med peker til legene. 39 int main() { 40 Resept res; 41 legene[0] = new Lege("Kurt Nilsen", "Idolgata 1", 12345678); 42 legene[1] = new Lege("David Pedersen", "Sangersmuget 3", 87654321); 43 legene[2] = new Lege("Gaute Ormåsen", "Bassrapen 7", 12341234); 44 res= new Resept(19600406, "Gorm","Morfin", 43); legene[0]->legg_inn(res); 45 res= new Resept(19620607, "Gyda","Heroin", 42); legene[1]->legg_inn(res); 46 res= new Resept(19910929, "Geir","Rohypnol",12); legene[2]->legg_inn(res); 47 res= new Resept(19930422, "Gina","Kokain", 10); legene[1]->legg_inn(res); 48 res= new Resept(19940817, "Guro","Cannabis", 9); legene[2]->legg_inn(res); 49 for (int i = 0; i <= 2; i++) legene[i]->display(); 50 return 0; 51 b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt[4][11] = {"SILDEFISKE","SJOKOLADER","BANANMOSEN","PILKEPINNE"; int main() { char* p; cout << txt[2][7] << ' ' << txt[0][5] << '\n'; p = txt[3]; cout << p << '\n'; p = &txt[1][4]; cout << *p << ' ' << p << '\n'; p = txt[0]; cout << *(++p) << ' '; cout << *(p + 13) << '\n'; p += 3; *p += 3; cout << p << '\n'; return 0; 3

c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; class A { private: char a; public: A(char aa) { a = aa; virtual void display() { cout << a << ' '; char svar() { return a; bool operator < (char aa) { return (a < aa); ; class B : public A { private: int b; public: B() : A('X') { b = 13; B(int bb, char a) : A(a) { b = bb; virtual void display() { A::display(); cout << b << ' '; int svar() { return b; bool operator == (int bb) { return (b == bb); ; int main() { A* arr[3]; arr[0] = new B(43, 'H'); arr[1] = new A('F'); arr[2] = new B; arr[0]->display(); cout << arr[2]->svar() << '\n'; arr[1]->display(); cout << arr[0]->svar() << '\n'; arr[2]->display(); cout << arr[1]->svar() << '\n'; cout << (*arr[1] < 'G') << '\n'; cout << (*(B*)arr[0] == 14) << '\n'; return 0; Oppgave 2 (70%) NB: Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studer vedlegget (spesielt const er, klassene, global variable og hovedprogrammet), slik at du får klarhet i hvordan programmet skal fungere. Innledning Du skal i denne eksamensoppgaven lage et lite program som holder orden på pengeutlåneres (banker, forsikringsselskap o.l.) forskjellige rentesatser til ulike tidspunkter. Alle klasser, deres arv og alle datamedlemmer er egentlig komplett og fullstendig deklarert/definert i vedlegget. Alle medlemsfunksjonene (du skulle trenge) inni klassen Rente er også ferdig definert. Din oppgave blir kun å skrive innmaten til noen hovedfunksjoner og medlemsfunksjoner (inni klassen Utlaaner ). 4

Datastrukturen Datastrukturen består (som du ser i vedlegget) kun av listen utlaanere. I denne listen ligger det Utlaaner -objekter. Hvert slikt objekt inneholder en FIFO-liste ( renter ) med eksakt ANTJUST Rente -objekter (hverken mer eller mindre). Et Rente -objekt inneholder kun datamedlemmene dato og rentesats. I utgangspunkter er begge disse lik 0 (null). Når en utlåner har hatt en rentejustering, så tas den første/eldste ut av renter -listen. Dens data oppdateres, og den legges tilbake bakerst. Dermed vil renter -listen til enhver tid inneholde utlånerens ANTJUST siste rentejusteringer, der den eldste ligger først og den yngste/aktuelle ligger bakerst. (Vi kunne selvsagt ha brukt en array som var ANTJUST lang. Men, da vi på denne måten har behov for å sirkulere listen, så er dette en hensiktsmessig måte å gjøre dette på.) Oppgaven A) Skriv innmaten til funksjonene Utlaaner :: Utlaaner(char* t) og void Utlaaner :: display() Constructoren mottar utlånerens navn ( t ). Du må sørge for at den arvede text begynner å peke til denne t en (se constructorens heading på vedleggets siste side). Den leser så inn utlånerens adresse og telefonnummer. Til slutt lager den en tom FIFO-liste og fyller denne med ANTJUST tomme (der dato og rentesats er lik 0) Rente -objekter. Funksjonen Utlaaner::display() skal sørge for at alle utlånerens data, inkludert listen med Rente -objekter blir skrevet til skjermen. Du skal kun skrive ut de objektene som inneholder en dato ulik 0 (dette får du tak i vha. Rente::hent()). B) Skriv innmaten til funksjonen void utlaaner_endring() Funksjonen skal håndtere at det både legges inn en ny utlåner og at det fjernes/slettes en allerede eksisterende. Dette gjøres ved at funksjonen aller først spør brukeren etter bokstavene N (ny) eller S (slettes). Den skal sørge for at brukeren kun taster inn ett av disse tegnene. Deretter spør den om utlånerens navn. Om brukeren har valgt N, så må det sjekkes om den aktuelle utlåneren allerede finnes. Om så ikke er tilfelle, så opprettes et nytt Utlaaner -objekt (vha. constructoren laget i oppgave A), og denne legges inn i listen. I motsatt fall så kommer det en melding, og intet objekt blir opprettet. Om brukeren har valgt S, så slettes (om mulig) vedkommende fra listen, eller så kommer det en melding om at dette var umulig (da den navngitte ikke fantes). C) Skriv innmaten til funksjonene void ny_rente() og void Utlaaner :: sett_ny_rente(int d) Funksjonen ny_rente() spør først om en utlåners navn. Om vedkommende ikke er å finne, så kommer det en melding om det. I motsatt fall så tas den ut av listen, den oppdateres med en ny rentesats (vha. funksjonen rett nedenfor) og legges så tilbake i listen. Funksjonen Utlaaner::sett_ny_rente(int d) kalles med den globale dato som parameter. Aller først leser den inn en rentesats. Deretter sørger den for at det første objektet i renter -listen tas ut og oppdateres med ny dato og rentesats (vha. Rente::sett(...)). Til slutt legges objektet tilbake i listen igjen. 5

D) Skriv innmaten til funksjonene void les_utlaanere_fra_fil() og Utlaaner :: Utlaaner(char* t, istream* inn) Funksjonen les_utlaanere_fra_fil() skal sørge for at hele datastrukturen leses inn fra filen RENTER.DTA. Filen har følgende format for en post (ett Utlaaner -objekt): <Navn> <Adresse> <Telefon> <Dato1> <Rentesats1> <Dato2> <Rentesats2> <Dato12> <Rentesats12> Det er ett blankt tegn mellom alle tallene på den siste linjen. Funksjonen sørger for at første linje på en evt. ny post (utlånerens navn) blir lest inn. Deretter opprettes et Utlaaner -objekt som selv leser inn resten av dataene om utlåneren (vha. constructoren rett nedenfor). Til slutt legges dette objektet inn i listen. Constructoren mottar altså (som parametre) utlånerens navn og en peker til den filen det skal lese inn resten av sine data fra. Den leser først inn sin adresse og telefonnummer. Deretter sørger den for å lage en tom renter -liste, og fyller denne så med ANTJUST Renteobjekter, hver med verdier lest inn fra filen (bruk Rente::sett(...)). E) Skriv innmaten til funksjonene void skriv_utlaanere_til_fil() og void Utlaaner :: skriv_til_fil(ostream* ut) Funksjonen skriv_utlaanere_til_fil() sørger for at hele datastruktuen blir skrevet ut til filen RENTER.DTA, på samme formatet som beskrevet ovenfor. Dvs. den går gjennom hele utlaanere -listen og sørger for at hver enkelt (vha. funksjonen rett nedenfor) skriver alle sine egne data til filen angitt som parameter. Funksjonen Utlaaner::skriv_til_fil(ostream* ut) skriver utlånerens navn, adresse og telefonnummer til fil. På en egen linje skrives så til slutt alle ANTJUST Rente -objektenes verdier (bruk den ferdiglagde funksjonen Rente::skriv_til_fil(...)). Annet (klargjørende?): Du skal bruke LISTTOOL ifm. løsningen av denne oppgaven. Vi forutsetter at brukeren alltid skriver inn lovlige og korrekte numeriske verdier (dato og rentesats). Det er ikke slik at alle utlånerne trenger å endre/justere rentesatsen samme dag. Programmet endrer kun for de utlånerne som navngis på den datoen som er skrevet inn (i dato ) når programmet kjører en gitt dag. Gjør dine egne forutsetninger og presiseringer av oppgaven, dersom du skulle finne dette nødvendig. Gjør i så fall klart rede for disse i starten av din besvarelse av oppgaven. Lykke til og godt (studie)lån! frode@haug.com 6

Vedlegg: Halvferdig programkode // INCLUDE: #include <iostream> // cin, cout #include <fstream> // ifstream, ofstream #include <cstring> // strlen, strcpy #include <cctype> // toupper #include "listtool.h" // Ulike "verktøy" fra "Listtool". using namespace std; // CONST: const int STRLEN = 80; // Max. lengde for en tekststreng. const int ANTJUST = 12; // Max. antall rentejusteringer i listene. // KLASSER: class Rente : public Element { private: int dato; // Dato for rentejusteringen. float rentesats; // Aktuell utlånsrente; public: Rente() { dato = 0; rentesats = 0; // Nullstiller datamedlemene. ; void sett(int d, float r) { dato = d; rentesats = r; // Setter verdier. int hent() { return dato; // Returnerer datoen. // Alle data til skjerm: virtual void display(){ cout << '\t' << dato << ": " << rentesats << '\n'; // Alle data til fil: void skriv_til_fil(ostream* ut) { *ut << ' ' << dato << ' ' << rentesats; class Utlaaner : public Text_element { private: char* adr; // Adresse. int tlf; // Telefonnummer. List* renter; // FIFO-liste av ANTJUST siste rentejusteringer. public: Utlaaner(char* t); // Oppgave 2A Utlaaner(char* t, istream* inn); // Oppgave 2D ~Utlaaner() { delete [] adr; delete renter; virtual void display(); // Oppgave 2A void skriv_til_fil(ostream* ut); // Oppgave 2E void sett_ny_rente(int d); // Oppgave 2C ; void skriv_meny(); // DEKLARASJON AV FUNKSJONER: char les(); void utlaaner_endring(); // Oppgave 2B void ny_rente(); // Oppgave 2C void les_utlaanere_fra_fil(); // Oppgave 2D void skriv_utlaanere_til_fil(); // Oppgave 2E int dato; List* utlaanere; // GLOBALE VARIBLE: // Dagens dato - på formen: ÅÅÅÅMMDD. // Liste av pengeutlånere. int main() { // HOVEDPROGRAM: char kommando; // Brukerens valg/ønske. utlaanere = new List(Sorted); // Initierer tom liste. les_utlaanere_fra_fil(); // Oppgave 2D cout << "\nskriv inn dagens dato (på formen: ÅÅÅÅMMDD): "; cin >> dato; cin.ignore(); // Leser dagens dato. skriv_meny(); kommando = les(); // Skriver aktuelle valg/muligheter. // Leser brukerens valg. 7

while (kommando!= 'Q') { switch(kommando) { case 'E': utlaaner_endring(); break; // Oppgave 2B case 'R': ny_rente(); break; // Oppgave 2C case 'D': utlaanere->display_list(); break; case 'S': skriv_utlaanere_til_fil(); break; // Oppgave 2E default: skriv_meny(); break; kommando = les(); // Leser brukerens valg. return 0; // DEFINISJON AV KLASSE-FUNKSJONER: // Constructor som leser inn/initierer verdier: Utlaaner :: Utlaaner(char* t) : Text_element(t) { // Oppgave 2A: Skriv innmaten // Constructor om leser inn verdier fra fil: Utlaaner :: Utlaaner(char* t, istream* inn) : Text_element(t) { // Oppgave 2D: Skriv innmaten void Utlaaner :: display() { // Skriver ALLE utlåners data til skjerm: // Oppgave 2A: Skriv innmaten // Skriver ALLE utlåners data til fil: void Utlaaner :: skriv_til_fil(ostream* ut) { // Oppgave 2E: Skriv innmaten // Oppdaterer ETT rente-objekt (det eldste/første): void Utlaaner :: sett_ny_rente(int d) { // Oppgave 2C: Skriv innmaten // DEFINISJON AV FUNKSJONER: void skriv_meny() { // Skriver meny/lovlige kommandoer til bruker: cout << "\n\n\nfølgende kommandoer er lovlig:\n"; cout << "\te - utlåner-endring (ny / slette)\n"; cout << "\tr - sett ny Rente hos en utlåner\n"; cout << "\td - Displayer data om ALLE utlånerne og deres rentejusteringer\n"; cout << "\ts - Skriv alle data (utlånere og deres renter) til fil\n"; cout << "\tq - Quit / avslutt\n"; char les() { // Leser og returnerer ETT upcaset tegn. char ch; cout<<"\n\nkommando: "; cin>>ch; cin.ignore(); return (toupper(ch)); void utlaaner_endring() { // Oppgave 2B: Skriv innmaten void ny_rente() { // Oppgave 2C: Skriv innmaten // Endringer om en utlåner (ny eller slette): // Setter EN ny rentesats hos EN utlåner: // Leser ALLE data om ALLE utlånere fra fil: void les_utlaanere_fra_fil() { // Oppgave 2D: Skriv innmaten // Skriver ALLE data om ALLE utlånere til fil: void skriv_utlaanere_til_fil() { // Oppgave 2E: Skriv innmaten 8