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

Like dokumenter
Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

KONTINUASJONSEKSAMEN

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

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

GJØVIK INGENIØRHØGSKOLE

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

KONTINUASJONSEKSAMEN

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt)

Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

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

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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert 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 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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

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

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 datakunnskap og programmering. EKSAMENSDATO: 7. desember HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB / 00HINGA

Kontinuasjonseksamen

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

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

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. 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

Kontinuasjonseksamen

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

Eksamen. Objekt-orientert programmering

GJØVIK INGENIØRHØGSKOLE

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. Eksamen. Objekt-orientert programmering

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

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

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

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

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 informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

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

Kontinuasjonseksamen

UNIVERSITETET I OSLO

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

KONTINUASJONSEKSAMEN

HØGSKOLEN I SØR-TRØNDELAG

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

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

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

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

UNIVERSITETET I OSLO

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

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

Transkript:

Høgskolen i Gjøvik Eksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering L 183 A EKSAMENSDATO: 31. mai 1999 KLASSE: 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB TID: 09.00-13.00 FAGLÆRER: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 9 (inkludert denne forside) Alle trykte og skrevne. - Kontroller at alle oppgavearkene er tilstede. - Innføring med skriveredskap (kulepenn, trykkblyant, e.l.) som gir gjennomslag. Pass på at du ikke skriver på mer enn ett innføringsark om gangen (da det blir uleselige gjennomslag om flere ark ligger oppå hverandre når du skriver). - Ved innlevering skilles hvit og gul besvarelse og legges i hvert sitt omslag. Oppgavetekst, kladd og blå kopi beholder kandidaten. - Ikke skriv noe av din besvarelse på oppgavearkene. - Husk kandidatnummer på alle ark.

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: LITEN SIRKEL X: 0 Y: 0 R: 10 STOR SIRKEL X: 0 Y: 0 R: 200 MIDDELS KVADRAT X: 0 Y: 0 X2: 100 Y2: 100 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> // strlen, strcpy 3 using namespace std; 4 class Figur { // Baseklasse. 5 protected: 6 char* navn; // Figurens navn. 7 int x, y; // Sentralt punkt (x og y) for figuren. 8 Figur* neste; // Peker til neste figur. 9 public: 10 Figur(char* nvn) // Constructor som initierer variable: 11 { navn = new char[strlen(nvn)+1]; strcpy(navn, nvn); x=y=0; 12 // Destructor som sletter char-array og neste objekt: 13 ~Figur() { delete navn; delete neste; 14 void hektinn(figur* next) { neste = next; // Oppdaterer "neste". 15 Figur* hent_neste() { return neste; // Returnerer "neste". 16 void display() // Skriver ut objektets data: 17 { cout << '\n' << navn << "\tx: " << x << "\ty: " << y; 18 ; 19 class Rektangel : public Figur { // Klasse det lages objekt/instans av. 20 private: 21 int x2, y2; // Øvre høyre hjørne i rektangel. 22 public: // Constructor som initierer variable: 23 Rektangel(char* nvn, int xx2, int yy2) : Figur(nvn) 24 { x2=xx2; y2=yy2; 25 void display() // Skriver ut objektets data: 26 { Figur::display(); cout << "\tx2: " << x2 << "\ty2: " << y2; 27 ; 28 class Sirkel : public Figur { // Klasse det lages objekt/instans av. 29 private: 30 int radie; 31 public: // Constructor som initierer variable: 32 Sirkel(char* nvn, int r) : Figur(nvn) { radie = r; 33 void display(); 34 ; 35 void Sirkel : display() // Skriver ut objektets data: 36 { Figur::display(); cout << "\tr: " << radie; 2

37 int main() { 38 Rektangel* kvad; // 2x hjelpepekere: 39 Sirkel* sirk; 40 Figur* LIFO_liste; // Liste-"hodet" 41 // Bygger en LIFO-liste med 3 objekter i: 42 kvad = new Rektangel("MIDDELS KVADRAT", 100, 100); // Lager 1.objekt. 43 LIFO_liste = kvad; // Legger først. 44 sirk = new Sirkel("STOR SIRKEL", 200); // Lager 2.objekt. 45 sirk->hektinn(lifo_liste); // Legger først: 46 LIFO_liste = sirk; 47 sirk = new Sirkel("LITEN SIRKEL, 10); // Lager 3.objekt. 48 sirk->hektinn(lifo_liste); // Legger først. 49 LIFO_liste = sirk; 50 // Traverserer hele listen: 51 for ( Figur* fig = LIFO_liste; fig!= NULL; fig = fig->hent_neste() ) 52 fig->display(); // Skriver objektenes data. 53 delete LIFO_liste; // Sletter hele listen. 54 return 0; 55 b) Hva blir utskriften fra følgende program (litt hjelp: det blir 3 linjer): #include <iostream> #include <cstring> #include <cstdlib> using namespace std; const int MAX = 10; int a[max]; void funk1(char* pa, char* pb) { char pc = *pa; *pa = *pb; *pb = pc; int main() { int * p1, * p2, i; p1 = p2 = &a[max/2]; for (i = 0; i < MAX/2; i++) { *p1 = i+1; *p2 = i+2; p1--; p2++; for (i = 0, p2 = a; i < MAX; i++, p2++) cout << *p2 << " "; cout << '\n'; char b[max] = "STORHAMAR"; char * p3 = b+3, * p4 = &b[5]; while (*p3!= 'S') { funk1(p3, p4); p3--; p4 +=1; for (p3 = b; *p3; p3++) cout << *p3 << " "; cout << '\n'; char c[max+3]; c[max+2] = '\0'; c[5] = c[9] = ' '; c[10] = 'Å'; c[0] = char('f'+ 2); c[2] = char(c[0] + 5); *&c[4] = *&c[11] = 'R'; *(c+1) = *(c+3) = char('l' - MAX -1); char tall[max/2]; i = 5; itoa(i * i * 2 * (6 % 4 + 1), tall, 10); strncpy(c+6, tall, 3); cout << c << '\n'; return 0; 3

c) Hva blir utskriften fra følgende program (litt hjelp: det blir 3 linjer): #include <iostream> using namespace std; class A { protected: int tall; public: A() { tall = 3; A(int t) { tall = t; A* operator + (A* a1) { return ( new A(tall + a1->tall) ); A* operator + (int a2) { return ( new A(tall + a2) ); virtual void skriv() { cout << "A: " << tall << '\t'; ; class B : public A { public: B() { B(int t) : A(t) { virtual void skriv() { cout << "B: " << tall << '\t'; ; class C : public B { public: C() { C(int t) : B(t) { virtual void skriv() { cout << "C: " << tall << '\t'; ; int main() { A t1; B t2 = 7; C t3 = 13; t1.skriv(); t2.skriv(); t3.skriv(); cout << '\n'; A* t5; B* t6; C* t7; t5 = t1 + 3; t6 = (B*) (t1 + &t2); t7 = (C*) (t3 + &t3); t5->skriv(); t6->skriv(); t7->skriv(); cout << '\n'; delete t5; t5 = t6; t6 = t7; t7 = (C*) (*t5 + t6); t5->skriv(); t6->skriv(); t7->skriv(); cout << '\n'; return 0; 4

Oppgave 2 (70%) NB1: Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studer spesielt vedlegg 1 (const er, enum, global variabel, hovedprogram og funksjoner), slik at du får klarhet i hvordan det ferdige programmet skal fungere. NB2: Gaver, ønsker og gaveønsker brukes om hverandre i denne oppgaveteksten. Innledning En tidligere eksamensoppgaven (12.august 1994) gikk ut på å lage et program for julenissen Nissan Julin (han med japansk mor og svensk far, vet du). Etter at Nissan har brukt dette programmet gjennom fem julestrider (julene 1994-1998), så har han kommet til at programmet egentlig burde fungere annerledes og ha en annen datastruktur. Dette skyldes at Nissan har oppdaget at det er mye enklere å skrive inn og behandle alle gaver vha. et nummer, ingen personer ønsker seg noen gang mer enn 10 gaver, samt at han svært ofte må besvare foreldres henvendelser om status for gaveønskene (er de foreløpig produsert eller ei) til deres små håpefulle barn. NB: Du har antagelig svært liten nytte av å titte på den omtalte eksamensoppgaven og dens fasit. Om du av denne oppgaveteksten skjønner hva du skal gjøre, er det i hvert fall totalt unødvendig. Om du ikke har skjønt det helt, så kan det fort bli enda mer forvirrende og frustrerende å titte på den gamle oppgaven. Men, du har den vel med (?), så gjør hva du vil Oppgaven i korthet Oppgaven går i korthet ut på å lage et program som gjør det mulig å: - registrere en ny gave (oppgave 2c) - registrere en ny person og dens gaveønsker (oppgave 2d) - få vite status for en persons gaveønsker (oppgave 2e) - få en oversikt over hvilke personer som har ønsket seg en gitt gave (oppgave 2f) - lese inn hele datastrukturen fra filer (oppgave 2g) Datastrukturen Datastrukturen skal bestå av en liste med gaver, sortert på gavens nummer. For hver gave skal det også registreres dens navn og om den er produsert eller ei. Det skal også være en liste av personer, sortert på vedkommendes navn. For hver person skal det også lagres antall ønsker vedkommende har (max.10 stk), og en array med numrene (ikke navnene) på gaveønskene. Oppgaven a) Deklarer aktuelle klasser. Dvs. angi deres heading med klassenavn, hvilken klasse de er en subklasse av og alle deres datamedlemmer. NB: Du trenger ikke angi alle deres medlems-funksjoner. Tegn opp datastrukturen. Dvs. tegn opp eksempler på lister, objekter og datamedlemmer. Gjør alt dette detaljert og pent! 5

b) Skriv void display() -funksjonen inni hver av klassene For en gave skal det vises dets nummer, om den er produsert eller ei og dets navn. For en person skal det vises dens navn, antall gaveønsker og navnet på disse ønskene (og evt. om gaven er produsert eller ei). Dvs. ut fra numrene som er lagret i hver person sin array med gaveønsker, må denne gavens navn hentes fra gavelisten. Disse to funksjonene blir bl.a. utført hver gang kommandoene 1 og 2 utføres i hovedprogrammet (se mot slutten av switch-setningen i main ). c) Skriv innmaten til funksjonen void ny_gave() Funksjonen spør først etter den nye gavens nummer. Om en slik allerede finnes, så kommer en melding om dette. I motsatt fall lages en ny gave, dens andre datamedlemmer fylles (husk at en ny gave i utgangspunktet ikke er produsert), og den legges inn i gavelisten. d) Skriv innmaten til funksjonen void ny_person() Funksjonen skal opprette et nytt person-objekt, alle dens datamedlemmer fylles og det nye objektet legges inn i personlisten. Husk at det skal spørres etter nummeret (ikke navnet) til max.10 gaver. For hvert nummer må det sjekkes at denne gaven virkelig finnes i gavelisten. e) Skriv innmaten til funksjonen void status_person() Funksjonen spør etter et personnavn. Deretter vises status for alle vedkommendes ønsker (navn, produsert eller ei). NB: Her får du sikkert bruk for de to funksjonene laget i pkt. 2b. f) Skriv innmaten til funksjonen void hvem_har_onsket() Funksjonen spør etter et gavenummer. Deretter går man gjennom hele personlisten og skriver ut navnet til personene som har dette nummeret i sin array av gaveønsker. Til slutt skrives det ut totalt antall personer som hadde dette ønsket. g) Skriv innmaten til funksjonen void les_fra_fil() Alle data fra gavelisten ligger lagret på filen GAVER.DTA (se vedlegg 2) Denne inneholder data om ett gaveobjekt på hver linje, og har følgende format: <Nummer> <Produsert (=1) eller ei (=0)> <Navn> Alle data fra personlisten ligger lagret på filen ONSKER.DTA (se også vedlegg 2) Denne inneholder data om ett personobjekt fordelt på to linjer, og har følgende format: <Navn> <Antall gaveønsker> <Ønske1> <Ønske2> <ØnskeN> Funksjonen skal opprette to tomme lister (gave- og personliste). Deretter leses det først fra filen med gaver, oppretter aktuelle objekter, fyller deres datamedlemmer og legger dem inn i gavelisten. Det tilsvarende skjer med filen med data om personer og deres ønsker. NB: Det er ikke en del av denne eksamensoppgaven å skrive datastrukturen til fil! 6

Annet (klargjørende?): Du skal bruke LISTTOOL ved løsning av denne oppgaven. Du må helt sikkert lage mer innmat til klassene. F.eks. slik som: constructor(er), destructor, returnere datamedlemmers verdi, gi ulike datamedlemmer verdi, Noe av de Nissan oppdaget, når han brukte det forrige programmet (eksamen 12.august 1994), var at det tok mye tid å stadig taste inn de samme lange navnene på gavene. Det er tross alt et begrenset antall gaver Nissan skal forholde seg til, og han lærer raskt utenat sammenhørende numre og navn. Derfor opplevde han det enklere å forholde seg til numre når han skal legge inn en persons gaveønsker. At en gave skifter status fra ikke-produsert til produsert er det ikke en del av denne eksamensoppgave å programmere. Vi forutsetter at det er plass til alle gavene og personene i datamaskinens primærhukommelse. Vi forutsetter dessuten at strømbrudd aldri skjer, siden det ikke er en del av denne oppgaven å skrive datastrukturen til fil. 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 god julegavesommer! Hva nå enn det er for noe rart? Kanskje blir det et nytt ord i det norske språk, på linje med diskettflakking???!!! FrodeH ( frode@haug.com ) PS: HA (Hamar Arbeiderblad) har i mai 1999 hatt mange artikler omkring den nye HA (Hell s Angels)-klubben i Hamar-området. Alt dette skriveriet om Engler har selvsagt fått meg til å tenke på julen med sine gaver og nisser. Derfor ble denne eksamensoppgaven slik den ble PS2: For å fjerne all tvil: Nissan har ingenting med Harley Davidson å gjøre! :-) 7

Vedlegg 1: Halvferdig programkode #include <iostream> #include <fstream> #include <cctype> #include <cstring> #include <iomanip> #include "listtool.h" // cout, cin // ifstream // toupper // strlen, strcpy // setw // Ulike "verktøy" fra "Listtool". using namespace std; // CONST: const int STRLEN = 80; const int MAX_ONSKER = 10; const char fil1[] = "GAVER.DTA"; const char fil2[] = "ONSKER.DTA"; // Max. lengde på innleste tekststrenger. // Max. antall ønsker en person kan ha. // Filnavnet for data om gavene. // Filnavnet for data om personen. List* gaver; List* personer; // GLOBALE VARIABLE: // Listen av gaver. // Listen av personer. // KLASSER: // Oppgave 2a: Deklarer aktuelle klasser med deres heading og datamedlemmer. // Oppgave 2b: Lage display -funksjonen inni hver av klassene. void skriv_meny(); // DEKLARASJON AV FUNKSJONER: char les(); void ny_gave(); void ny_person(); void status_person(); void hvem_har_onsket(); void les_fra_fil(); int main() { char kommando; // HOVEDPROGRAMMET: les_fra_fil(); skriv_meny(); // Oppgave 2g kommando = les(); while (kommando!= 'Q') { switch(kommando) { case 'G': ny_gave(); break; // Oppgave 2c case 'P': ny_person(); break; // Oppgave 2d case 'S': status_person(); break; // Oppgave 2e case 'H': hvem_har_onsket(); break; // Oppgave 2f case '1': gaver->display_list(); break; case '2': personer->display_list(); break; default: skriv_meny(); break; kommando = les(); return 0; 8

// DEFINISJON AV FUNKSJONER: void skriv_meny() { cout << "Følgende kommandoer er lovlig:"; cout << "\n\tg - Ny Gave/ønske"; cout << "\n\tp - Ny Person med sine ønsker"; cout << "\n\ts - Status for en person"; cout << "\n\th - Hvem har ønsket en spesiell gave"; cout << "\n\t1 - Skriv gavelista"; cout << "\n\t2 - Skriv personlista"; cout << "\n\tq - Quit / avslutt"; char les() { // Leser og returnerer ETT upcaset tegn. char kommando; cout << "\n\nkommando: "; cin >> kommando; cin.ignore(); return (toupper(kommando)); void ny_gave() { // Oppgave 2c: Skriv innmaten void ny_person() { // Registrerer (om mulig) en ny gave: // Registrerer en ny person og dens ønsker: // Oppgave 2d: Skriv innmaten // Får vite produksjonsstatus for en gitt persons gaveønsker. void status_person() { // Oppgave 2e: Skriv innmaten void hvem_har_onsket() { // Oppgave 2f: Skriv innmaten void les_fra_fil() { // Oppgave 2g: Skriv innmaten // Hvilke personer har ønsket en gitt gave. // Leser inn data til de to listene fra filer: Vedlegg 2: Eksempler på de to datafilene GAVER.DTA: 1 0 Tråbil 3 1 Tredukke 5 1 Sportsbil 7 0 Jo-jo 9 0 Dukkestue 11 1 Dukkeseng 13 1 Hoppetau 15 1 Sandslott ONSKER.DTA: Arne Andersen 3 1 11 7 Bård Berg 2 5 9 Charlotte Carlsen 3 3 13 15 Dag Drugge 2 13 7 9