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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

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

Eksamen. Objekt-orientert programmering

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

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

Eksamen. Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

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

GJØVIK INGENIØRHØGSKOLE

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

Kontinuasjonseksamen

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

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

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

KONTINUASJONSEKSAMEN

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

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

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

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

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.

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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Kontinuasjonseksamen

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

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

GJØVIK INGENIØRHØGSKOLE

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

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 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 Institutt for informatikk og medieteknikk E K S A M E N. 04HBIND* / 04HBINFA / div. andre

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. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

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:

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

HØGSKOLEN I SØR-TRØNDELAG

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Kontinuasjonseksamen

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

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

i «IMT Objekt-orientert programmering» våren 2019

Transkript:

Høgskolen i Gjøvik Avdeling for teknologi Eksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering IMT1081 / L183A EKSAMENSDATO: 2. juni 2005 KLASSE(R): 04HBIND*, 04HBINFA, 04HBMETEA 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 til stede. 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 nedenforstående programmet var det ønskelig at gav følgende utskrift: Fantomets Krønike 34.5 Egmont Vi er grønne - vi er hvite 198 Tor Inge Martinsen 156 s. Syden 99 Are Kalvø 295 s. Hårek Serieparade 15.5 Semic Den siste er IKKE en Krønike 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> 2 #include <cstring> 3 using namespace std; 4 const int STRLEN = 20; 5 class Lesestoff { 6 private: 7 char navn[strlen]; 8 float pris; 9 10 Lesestoff(char* t, float p) { strcpy(navn, t); pris = p; 11 virtual void skriv() { cout << '\n' << navn << '\t' << pris; 12 bool operator == (char* t) { return (strcmp(navn, t)); 13 ; 14 class Bok : public Lesestoff { 15 private: 16 char forfatter[strlen]; 17 int sider; 18 19 Bok(char* s, char* t, float si, int p) : Lesestoff(s, p) 20 { strcpy(forfatter, t); sider = si; 21 void skriv() { Lesestoff::skriv(); 22 cout << '\n' << forfatter << '\t' << sider << " s."; 23 24 class Blad : public Lesestoff { 25 private: 26 char forlag[strlen]; 27 28 Blad(char* s, char* t, float p): Lesestoff(s, p) { strcpy(forlag, t); 29 void skriv() { Lesestoff::skriv(); cout << '\t' << forlag; 30 ; 2

31 int main() { 32 Lesestoff* ls[4]; 33 ls[0] = new Blad("Fantomets Krønike", "Egmont", 34.5F); 34 ls[0]->skriv(); 35 ls[1] =new Bok("Vi er grønne - vi er hvite","tor Inge Martinsen",198,156); 36 ls[1]->skriv(); 37 ls[2] = new Bok("Syden", "Are Kalvø", 99, 295); 38 ls[2]->skriv(); 39 ls[3] = new Blad("Hårek Serieparade", "Semic", 15.5F); 40 ls[3]->skriv(); cout << "\nden siste er "; 41 cout << ((*ls[3] == "Fantomets Krønike")?"":"IKKE ") << "en Krønike\n\n"; 42 delete ls[0]; delete ls[3]; 43 return 0; 44 b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt[][13] = { "KONGEHYLLEST", "HAGEARKITEKT", "VILLSVINJAKT" ; int main() { int i, n = 7; char* p = &txt[0][3]; for (i = 1; i <= 20; i += n) cout << *(p+i) << '\n'; p = txt[2]; cout << *p << '\n'; p += (n/2*3-1); 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 { protected: int t; A(int n) { t = n*n-n; virtual int tall() { return t; virtual char text(char *t, int n) = 0; ; class B : public A { B(int n) : A(n) { t = n-16; char text(char *t, int n) { return(t[2*n]); ; class C : public A { C(int t) : A(t/3) { char text(char *t, int n) { return(t[n*2-7/3]); ; int main() { A* objekt[3]; objekt[2] = new C(17); objekt[1] = new B(64); objekt[0] = new C(25); cout << objekt[0]->tall() << '\n'; cout << objekt[1]->tall() << '\n'; cout << objekt[1]->text("fleskepannekake", 6) << '\n'; cout << objekt[2]->text("fleskepannekakesyltetøy", 11) << '\n'; cout << objekt[0]->text("softis MED RÅ LØK", objekt[2]->tall()-12) << '\n'; return 0; 4

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 (data og funksjoner), globale variable, hovedprogrammet og int finn_artist( ) ), slik at du får klarhet i hvordan alt skal fungere. Innledning Du skal i denne eksamensoppgaven lage et lite program som holder orden på hvilke artister som bidrar/opptrer ifm. ulike arrangementer (f.eks. jubileet for unionsoppløsningen 1905-2005). Alle klasser, det de arver, alle datamedlemmer og prototyper for de fleste medlemsfunksjoner er deklarert/definert i vedlegget. Din oppgave blir kun å skrive innmaten til noen hovedfunksjoner og medlemsfunksjonene inni de ulike klassene. Datastrukturen og globale variable Datastrukturen består (som du ser i vedlegget) av tre lister. I hver av disse ligger objekter av klasser med omtrent samme navn, sortert på sin numeriske ID. Arrangement - og Artist -objekter har alle en unik ID mellom 1 og MAXANT-1. Da en artist kan opptre på et ukjent antall arrangementer, og at hvert arrangement kan ha bidrag/opptreden av et ukjent (stort) antall artister, så er det ikke naturlig å ha arrayer inni hver av klassene som representerer sammenkoblingen mellom dem. Dette er i stedet ivaretatt vha. listen bidrag. Hvert objekt har kun til oppgave å representere sammenkoblingen mellom ett arrangement og en artist. Derfor inneholder det kun en numerisk ID, som beregnes vha. følgende formel: arrangementsnr * MAXANT + artistnummer. Eks: Om artist nr.4 skal opptre på arrangement nr.7, så gir dette bidragsnummer: 7004 (7*1000 + 4). Dvs. bidragenes nummer er i intervallet 1001-999999. Oppgaven A) Skriv innmaten til funksjonene void ny_artist() og Artist::Artist(int n, char* nvn) ny_artist() spør først etter en artists fulle navn. Om denne finnes allerede, så kommer det en melding om det. I motsatt fall opprettes et nytt Artist -objekt med dette navnet og får automatisk en ID som er siste_art+1. B) Skriv innmaten til funksjonen void oversikt() og void display() -funksjonene i de tre klassene. oversikt() tilbyr brukeren å få se hele innholdet av en av de tre listene, basert på at brukeren velger liste ved å taste inn et tall i intervallet 1-3. De tre display()- funksjonene sørger for at alle klassenes data blir skrevet ut på et rimelig format. For Bidrag gjøres dette litt mer spesielt: Vi ønsker ikke bare å få vist ID en for hver enkelt, men at det aktuelle arrangementet og den aktuelle artistens data blir vist på skjermen. Tips: Beregn aktuelt arrangements- og artistnummer ut fra objektets ID, og sørg for at relevante data vises ut fra dette. C) Skriv innmaten til funksjonen void nytt_bidrag() Funksjonen ber først om en artists fulle navn og et arrangementsnummer. Bidragets nummer beregnes, et nytt bidrag opprettes med dette nummeret som ID og legges inn i bidrag -listen. Det skal komme en melding i de tre feilsituasjonene: ingen artist har dette navnet, ingen arrangement har dette nummeret og det finnes et bidrag med det beregnede nummeret allerede. 5

D) Skriv innmaten til funksjonen void avlys_bidrag() Funksjonen ber her også først om en artists fulle navn og et arrangementsnummer. Bidragets nummer beregnes og det slettes/fjernes for godt fra bidrag -listen. Det skal komme en melding i de tre feilsituasjonene: ingen artist har dette navnet, ingen arrangement har dette nummeret og ingen bidrag har det beregnede nummeret. E) Skriv innmaten til funksjonen void skriv_arrangement() Poenget med funksjonen er å skrive alle data om et arrangement og alle data om de artistene som skal bidra/opptre på dette arrangementet. Funksjonen ber derfor først om nummeret til et arrangement. Om dette ikke finnes, så kommer det en melding om det. I motsatt fall skrives alle data for arrangementet på skjermen. Det gås så manuelt gjennom hele bidrag -listen. For hver av dem som gjelder det aktuelle arrangementet, så vises alle data om den aktuelle artisten. Tips: Her bør du nok lage en ny funksjon inni Bidrag som, om dets ID matcher med et visst arrangementsnummer (kommer inn som parameter), returnerer aktuelt artistnummer. F) Skriv innmaten til funksjonene void vis_artist() og Poenget med funksjonen er å skrive alle data om en artist og alle data om de arrangementene som vedkommende bidrar/opptrer på. Funksjonen ber derfor først om et artistnavn. Om denne ikke finnes, så kommer det en melding om det. I motsatt fall skrives alle data for artisten på skjermen. Det gås så manuelt gjennom hele bidrag -listen. For hver av dem som gjelder den aktuelle artisten, så vises alle data om det aktuelle arrangementet. Tips: Her bør du nok også lage en ny funksjon inne Bidrag som, om dets ID matcher med et visst artistnummer (kommer inn som parameter), returnerer aktuelt arrangementsnummer. G) Skriv innmaten til funksjonen void les_fra_filer() og og de to constructorene som tar filer som parametre. De tre funksjonene skal til sammen sørge for at alle data til listene leses inn fra de tre filene: ARRANGEMENT.DTA Format: <Nummer> <Dato> <Time> <Min> <Navn> <Sted> ARTIST.DTA Format: <Nummer> <Navn> BIDRAG.DTA Format: <Nummer> Husk å oppdatere de to globale siste_... -variablene! (NB: Eksamensoppgaven inneholder ikke en tilsvarende skriv_til_filer().) Annet (klargjørende?): Du skal bruke LISTTOOL ifm. løsningen av denne oppgaven. Legg merke til at brukeren alltid opererer med arrangementsnummer og artistnavn. finn_artist( ) sørger for å få tak i en gitt artists nummer ut fra vedkommendes navn. Alltid skrives hele en artists navn inn. Dvs. programmet trenger ikke å håndtere entydige delnavn. NB: Husk å bruke MAXANT og finn_artist( ) alle steder det er rimelig at de brukes! Programmet skal ikke inneholde noen nytt_arrangement -funksjon. Dette medfører bl.a. at siste_arr aldri blir oppdatert (i motsetning til siste_art ) etter at den er initiert i oppgave 2G. 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 med ditt bidrag (opptreden?) på dette eksamensarrangement! frode_ætt_haugianerne.no 6

Vedlegg: Halvferdig programkode #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include "listtool.h" using namespace std; // INCLUDE: // cin, cout // i(f)stream, o(f)stream // strlen, strcpy, strcmp // toupper // CONST: const int STRLEN = 80; // Max. streng-lengde. const int MAXANT = 1000; // Max. antall artister og arrangementer. // KLASSER: class Arrangement : public Num_element { private: // 'number' er arrangementets unike nummer. int dato, time, min; // Tidspunktet for arrangementet. char* navn, *sted; // Dets navn/tiitel og hvor det foregår. Arrangement(int n, istream* inn); ~Arrangement(); void display(); ; class Artist : public Num_element { private: // 'number' er artistens unike nummer. char* navn; // Artistens fulle navn. Artist(int n, char* nvn); Artist(int n, istream* inn); ~Artist(); void display(); int operator == (char* t); ; class Bidrag : public Num_element { // 'number' er bidragets unike nummer, satt sammen // av arrangements_nr*maxant + artist_nr Bidrag(int n); void display(); // Her trengs sikkert en eller flere funksjoner til ; // DEKLARASJON AV FUNKSJONER: void skriv_meny(); char les_kommando(); int finn_artist(char* nvn); void ny_artist(); // Oppgave 2A void oversikt(); // Oppgave 2B void nytt_bidrag(); // Oppgave 2C void avlys_bidrag(); // Oppgave 2D void skriv_arrangement(); // Oppgave 2E void vis_artist(); // Oppgave 2F void les_fra_filer(); // Oppgave 2G // GLOBALE VARIABLE: List* arrangementer; // Datastrukturen består av to separate lister List* artister; // + en ('bidrag') som knytter den logiske List* bidrag; // forbindelsen mellom dem. int siste_arr = 0, siste_art = 0; // Siste numre som hittil er brukt. 7

int main() { char valg; // HOVEDPROGRAM: arrangementer = new List(Sorted); // Initierer tre stk. tomme lister: artister = new List(Sorted); bidrag = new List(Sorted); // Oppgave 2G: les_fra_filer(); // Leser hele datastrukturen (de tre listene) fra fil. skriv_meny(); valg = les_kommando(); while (valg!= 'Q') { switch(valg) { case 'N': ny_artist(); break; // Oppgave 2A case 'B': nytt_bidrag(); break; // Oppgave 2C case 'A': avlys_bidrag(); break; // Oppgave 2D case 'S': skriv_arrangement(); break; // Oppgave 2E case 'V': vis_artist(); break; // Oppgave 2F case 'O': oversikt(); break; // Oppgave 2B default: skriv_meny(); break; valg = les_kommando(); // Leser hele datastrukturen til fil. IKKE en del // skriv_til_filer(); // av eksamensoppgaven å lage denne. cout << "\n\n"; return 0; // DEFINISJON AV MEDLEMS-FUNKSJONER: // Leser inn alle relevante data fra fil: Arrangement::Arrangement(int n, istream* inn) : Num_element(n) { // Oppgave 2G: Skriv innmaten // Frigir det som det er sagt 'new' om: Arrangement::~Arrangement() { delete [] navn; delete[] sted; // Skriver ALLE objektets data til skjerm: void Arrangement::display() { // Oppgave 2B: Skriv innmaten // Initierer ut fra parametre: Artist::Artist(int n, char* nvn) : Num_element(n) { // Oppgave 2A: Skriv innmaten // Leser inn alle relevante data fra fil: Artist::Artist(int n, istream* inn) : Num_element(n) { // Oppgave 2G: Skriv innmaten // Frigir det som det er sagt 'new' om: Artist::~Artist() { delete [] navn; void Artist::display() { // Oppgave 2B: Skriv innmaten // Skriver ALLE objektets data til skjerm: // OM navnet matcher, returneres artistens nummer: int Artist::operator == (char* t) { return (!strcmp(navn, t)? number : 0); // Initierer ut fra EN parametre: Bidrag::Bidrag(int n) : Num_element(n) { void Bidrag::display() { // Oppgave 2B: Skriv innmaten // Skriver ALLE objektets data til skjerm: 8

// DEFINISJON AV (GLOBALE) FUNKSJONER: void skriv_meny() { cout << "\n\nfølgende KOMMANDOER ER TILGJENGELIGE:" << "\n N - Ny artist" << "\n B - nytt Bidrag/opptreden" << "\n A - Avlys bidrag/opptreden" << "\n S - Skriv arrangement" << "\n V - Vis artist" << "\n O - Oversikt arrangementer/artister/bidrag" << "\n Q - Quit / avslutt"; char les_kommando() { char ch; cout << "\n\nkommando: "; cin >> ch; cin.ignore(); return (toupper(ch)); // Returnerer nummeret (om mulig) til navngitt artist: int finn_artist(char* nvn) { int n = artister->no_of_elements(), nr = 0, i; Artist* art; for (i = 1; i <= n; i++) { // Går gjennom alle artistene: art = (Artist*) artister->remove_no(i); // Henter ut nr.i. nr = (*art == nvn); // OM navnematch: får nummer. artister->add(art); // Legger tilbake igjen. if (nr) return nr; // Nummer funnet: returnerer det. return 0; // Ingen match: returnerer 0. void ny_artist() { // Oppgave 2A: Skriv innmaten void oversikt() { // Oppgave 2B: Skriv innmaten void nytt_bidrag() { // Oppgave 2C: Skriv innmaten void avlys_bidrag() { // Oppgave 2D: Skriv innmaten void skriv_arrangement() { // Oppgave 2E: Skriv innmaten void vis_artist() { // Oppgave 2F: Skriv innmaten void les_fra_filer() { // Oppgave 2G: Skriv innmaten // Legger inn (om mulig) en ny artist: // Skriver oversikt over ALT i en aktuell liste: // Legger inn (om mulig) ett nytt bidrag/opptreden: // Avlyser/sletter/fjernet et bidrag/opptreden: // Skriver ALLE data om ETT arrangement: // Skriver ALLE data om EN artist: // Leser ALLE dataene (hele datastrukturen) fra filer: 9