Eksamensoppgave i IMT1082 Objekt-orientert programmering

Like dokumenter
Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering

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

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

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

Kontinuasjonseksamen

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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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 04HBIND*, 04HBINFA, 04HBMETEA

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

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. Eksamen. Objekt-orientert programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB

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

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

Kontinuasjonseksamen

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

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

KONTINUASJONSEKSAMEN

Eksamen. Objekt-orientert programmering

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

GJØVIK INGENIØRHØGSKOLE

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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. EKSAMENSDATO: 5. desember HIND*, 01HINE*, 01HDMU*, 01HING* TID:

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. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

GJØVIK INGENIØRHØGSKOLE

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

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

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

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

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

Kontinuasjonseksamen

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

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:

UNIVERSITETET I OSLO

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

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

1. Grunnleggende C Introduksjon til kurset og til C++ Innhold

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

Transkript:

Institutt for datateknologi og informatikk Eksamensoppgave i IMT1082 Objekt-orientert programmering Faglig kontakt under eksamen: Frode Haug Tlf: 950 55 636 Eksamensdato: 22.mai 2017 Eksamenstid (fra-til): Hjelpemiddelkode/Tillatte hjelpemidler: 09:00-13:00 (4 timer) F - Alle trykte og skrevne. (kalkulator er ikke tillatt) Annen informasjon: Målform/språk: Antall sider (inkl. forside): 8 Norsk Informasjon om trykking av eksamensoppgaven Originalen er: 1-sidig X 2-sidig sort/hvit X farger Skal ha flervalgskjema Kontrollert av: Dato Sign

NB1: Oppgave 1a, 1b, 1c og 2 er totalt uavhengige og kan derfor løses separat. NB2: I hele oppgavesettet forutsetter vi at bruken av strcpy virker problemfritt - uten melding fra kompilatoren. Oppgave 1 (30%) a) Det nedenfor stående programmet var det ønskelig at gav følgende utskrift: Decra: 126x37 Plannja: 500x115 Deres areal i kvm: 0.4662 5.75 Til 190 kvm trengs henholdsvis minimum 407 og 33 plater 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? NB1: 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. NB2: Kalkulator trengs fortsatt ikke. For det er ingen feil ved selve utregningene. 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 class Takplate { 5 private: 6 char navn[20]; 7 int lengde, bredde; // i cm 8 public: 9 Takplate(char* t, int l, int b) 10 { strcpy(navn, t); lengde = l; bredde = b; 11 void display() { cout << navn << ": " << lengde 'x' << bredde << '\n'; 12 float areal() { return ((lengde/100.0f) * (bredde/100.0f)); // i kvm 13 bool operator < (Takplate & tp) { return (areal < tp->areal()); 14 int antplater(int kvm) { return (kvm / areal()); 15 ; 16 int main() { 17 Takplate * tp1 = new Takplate("Decra", 126, 37), 18 tp2 = new Takplate("Plannja", 500, 115); 19 tp1->display(); (*tp2).display(); 20 cout << "Deres areal i kvm: " 21 << (*tp1).areal() << " " << tp2->areal() << '\n'; 22 cout << "Til 190 kvm trengs henholdsvis minimum " << tp1->antplater(190) 23 << " og " << tp2->antplater(180) << " plater\n"; 24 return 0; 25 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt[] = "ETERNITTPLATENE-OG-TAKPAPPEN-BLE-KASTET"; void funk(char* t) { while (*t!= 'T') cout << *t++; char funk(char* t1, char* t2) { while (*t1 == *t2) { t1++; t2++; ; return *t1; void funk(char* t, int n) { t+= n; while (*t > 'H') cout << *t++; void funk(char* t1, char* t2, int n) { while (t1 < t2) { ++t1; t2-=n; cout << *t1 << *t2; char* funk(int n, int m, char c, char* t) { while (m < n) { if (*t == c) m++; t++; return ++t; int main() { funk(txt + 8); cout << '\n'; cout << funk(txt + 1, txt + 36) << '\n'; funk(txt, 3); cout << '\n'; funk(txt, txt + 27, 3); cout << '\n'; cout << funk(9, 3, 'E', txt) << '\n'; return 0; c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; class A { protected: char nvn1[15]; int dager; public: A(char* t, int d) { strcpy(nvn1, t); dager = d; virtual void display() { cout << nvn1 << " -> " << dager; bool operator < (A & a) { return (strcmp(nvn1, a.nvn1)); ; class B : public A { private: char nvn2[15]; public: B(char* t, char* u, int d) : A(t, d) { strcpy(nvn2, u); void display() { A::display(); cout << " -> " << nvn2; bool har(char* t) { return (strstr(nvn1, t) && strstr(nvn2, t)); char hent() { return (nvn1[strlen(nvn1) - 2*strlen(nvn2)]); ; int main() { A* aa; B* bb[2]; bb[0] = new B("Sogndal", "Rjukan", 3); bb[1] = new B("Brekkestrand", "Odda", 1); aa = bb[0]; aa->display(); cout << '\n'; aa = bb[1]; (*aa).display(); cout << '\n'; cout << ((*aa < *bb[0])? "ASBEST" : "DECRA") << '\n'; cout << ((bb[0]->har("d"))? "LEKT" : "SLOYFE") << '\n'; cout << bb[1]->hent() << '\n'; return 0; 3

Oppgave 2 (70%) Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studér vedlegget, som inneholder mange viktige opplysninger som du trenger/skal bruke. Legg spesielt merke til constene, klassene med datamedlemmer og funksjoner, globale variable, main, lagtopperellerlesfrafil og de tre les-funksjonene. Bruk disse siste svært aktivt. Av ulike årsaker ønsker en sykkelløparrangør å forhåndsregistrere alle personene som skal opp på en topp/fjellovergang/fjellpassasje. Det registreres tilskuere (en del data om hver) og kun navnene på de som er med i vedkommendes reisefølge. Det oppgis bl.a. om tilskueren har med (bo)bil. For det tillates bare et visst antall slike på hver topp. Programmet håndterer kun toppene (max. 5) på en sykkeletappe. Datastrukturen Datastrukturen består (se vedlegget) av arrayen toppene. Her er indeksene 1 til antalltopper i bruk. Inni hvert Topp-objekt er det bl.a. en liste med Tilskuer-objekter. Denne igjen inneholder bl.a. arrayen folget (indeksene 1 til antifolge er i bruk). Denne pekere til navnene (tekst) på de som er med i reisefølget for vedkommende registrerte tilskuer. Klassene, deres arv, alle data-medlemmer og alle prototyper for medlemsfunksjoner er så godt som komplett og fullstendig deklarert/definert i vedlegget. Din oppgave blir å skrive innmaten til funksjoner inni og utenfor klassene. Oppgaven a) Skriv innmaten til funksjonene lagtopper() og Topp::Topp() Den første funksjonen leser først et lovlig antall topper som skal registreres. Deretter opprettes disse nye toppene, og deres navn og maxantallbiler leses inn vha. constructorene. De andre dataene blir initiert til 0 (null) eller som en tom sortert liste. (NB: Legg merke til hvordan 2A og 2G kalles/brukes i lagtopperellerlesfrafil.) b) Skriv innmaten til funksjonene skrivalletoppenesstatus() og Topp::skrivStatus() Den første funksjonen går gjennom alle aktuelle topper, og sørger for at alle deres data blir skrevet ut (vha. den andre funksjonen). tilskuere skal ikke skrives ut, bare antallet i den. (NB: Dette er antall Tilskuer-objekter, ikke inkludert antallet i hver tilskuers reisefølge.) c) Skriv innmaten til funksjonene Topp::skrivAlt() og Tilskuer::display() Den første funksjonen skriver det samme om objektet som i oppgave 2B, men i tillegg skrives også hele listens innhold (selv om dette totalt kan bli veldig mye/langt), bl.a. vha. den andre funksjonen. Alle dataene i Tilskuer skal skrives ut, men harbil skrives som: «Har med seg (bo)bil» eller ingenting (om er false). (NB: Se hvordan både 2C og 2D kalles i main.) d) Skriv innmaten til funksjonene Topp::nyTilskuer() og Tilskuer::Tilskuer( ) Den første funksjonen spør først om vedkommende har med (bo)bil eller ei. Er det ikke plass til flere biler på toppen, kommer det bare en melding. Er det plass, eller at vedkommende ikke har med (bo)bil, så opprettes og legges en ny Tilskuer inn i listen (gis automatisk et nummer ved at sisteid telles opp). Constructoren registrerer og leser inn alle data i klassen (også antallet og navnene til de i reisefølget). Om nødvendig: husk å telle opp antall (bo)biler på toppen. 4

e) Skriv innmaten til funksjonene skrivtilskuer() og Topp::skrivTilskuer( ) Den første funksjonen ber først om en tilskuers nummer/id. Deretter letes det på toppene etter denne tilskueren (bl.a. vha. den andre funksjonen, som displayer tilskueren om vedkommende er å finne, samt returnerer true/false til at dette har skjedd eller ei). Letingen etter tilskueren avsluttes straks vedkommende var å finne på en topp. Er tilskueren ikke å finne på noen av toppene, skrives det en egen melding om dette. f) Skriv innmaten til funksjonen void finntilskuer() og alle andre funksjoner som kreves for å løse oppgaven Den første funksjonen leser et helt navn, eller deler av dette. Det gås så gjennom alle toppene. Vha. de andre funksjonene du lager, skrives (for hver topp) totalt antall tilskuere inkludert de i reisefølget som har et navn som inneholder teksten. Den søkte teksten kan altså bare være en del av (subtekst) vedkommendes navn. NB: Du trenger ikke å la små og store bokstaver telle likt. g) Skriv innmaten til funksjonen void lesfrafil() og den andre constructoren i begge klassene Funksjonene skal til sammen sørge for at hele datastrukturen blir lest inn fra filen TOPPSKUERE.DTA. Formatet bestemmer du helt selv, men det skal oppgis som en del av besvarelsen. Annet (klargjørende): Du skal bruke ListTool2A ifm. løsningen av denne oppgaven. Du skal ikke bruke string-klassen (læreboka side 302-310), kode fra STL, templates eller andre større hjelpebiblioteker. Men, de vanligste includer brukt i hele 1.klasse er tilgjengelig. «Tilskuer» er altså objektet Tilskuer, og denne har et navn. De som er med i reisefølget til vedkommende, er navngitt vha. arrayen folget. Det går formodentlig klart frem av oppgaveteksten ovenfor når det er snakk om det ene eller andre eller begge deler. 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 også som tilskuer til ett eller annet i sommer! FrodeH 5

Vedlegg: Halvferdig programkode // INCLUDE: #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include "ListTool2A.h" using namespace std; // CONST: const int STRLEN = 80; // Max. lengde for en tekststreng. const int MAXBILER = 1000; // Max. antall (bo)biler oppe på EN topp. const int MAXTOPP = 5; // Max. antall topper på EN etappe. const int MAXIFOLGE = 10; // Max. antall i reisefølget til // registrert tilskuer. // KLASSER: class Topp { private: char* navn; // Toppens navn. int maxantallbiler, // Max.antall tillatte biler antallbiler; // og det nåværende antallet. List* tilskuere; // Liste med tilskuerne. public: Topp(); Topp(ifstream & inn); ~Topp() { delete [] navn; delete tilskuere; void skrivstatus(); void skrivalt(); void nytilskuer(); bool skrivtilskuer(int ID); ; // Oppgave 2A // Oppgave 2G // Ferdiglaget // Oppgave 2B // Oppgave 2C // Oppgave 2D // Oppgave 2E class Tilskuer : public NumElement { private: // number = ID char* navn, // Tilskuerens: navn * mail; // mail int telefon, // telefonnummer antifolge; // Antall personer i reisefølget. bool harbil; // Har med seg (bo)bil eller ei. char* folget[maxifolge+1]; // Navnene på personene i reisefølget. ; public: Tilskuer(int ID, bool harb); Tilskuer(ifstream & inn, int nr); ~Tilskuer(); void display(); // Oppgave 2D // Oppgave 2G // Ferdiglaget nedenfor // Oppgave 2C // DEKLARASJON AV FUNKSJONER: void skrivmeny(); // char les(); // Ferdiglaget int les(const char* t, const int MIN, const int MAX); // void les(const char* t, char* s, const int LEN); // void lagtopperellerlesfrafil(); void lagtopper(); void skrivalletoppenesstatus(); void skrivtilskuer(); void finntilskuer(); void lesfrafil(); // Ferdiglaget - Oppgave 2A og 2G // Oppgave 2A // Oppgave 2B // Oppgave 2E // Oppgave 2F // Oppgave 2G // GLOBALE VARIABLE: Topp* toppene[maxtopp+1]; // Array med toppene int antalltopper = 0, sisteid = 0; // Aktuelt antall topper og // siste tilskuer-id brukt hittil. 6

int main() { // HOVEDPROGRAM: char valg; // Brukerens valg/kommando. lagtopperellerlesfrafil(); // Oppgave 2A og 2G skrivmeny(); cout << "\n\n\nkommando: "; valg = les(); while (valg!= 'Q') { switch (valg) { case 'A': skrivalletoppenesstatus(); break; // Oppgave 2B case 'T': toppene[les("alt om topp nr", 1, antalltopper)]->skrivalt(); break; // Oppgave 2C case 'N': toppene[les("ny på topp nr", 1, antalltopper)]->nytilskuer(); break; // Oppgave 2D case 'S': skrivtilskuer(); break; // Oppgave 2E case 'F': finntilskuer(); break; // Oppgave 2F default: skrivmeny(); break; cout << "\n\n\nkommando: "; cout << "\n\n"; return 0; valg = les(); // ************************************************************************* // ****************** DEFINISJON AV MEDLEMS-FUNKSJONER: ****************** // ************************************************************************* Topp::Topp() { // Oppgave 2A: Lag innmaten Topp::Topp(ifstream & inn) { // Oppgave 2G: Lag innmaten void Topp::skrivStatus() { // Oppgave 2B: Lag innmaten void Topp::skrivAlt() { // Oppgave 2C: Lag innmaten void Topp::nyTilskuer() { // Oppgave 2D: Lag innmaten // Leser og initierer en topps data: // Leser ALT om en topp fra fil: // Skriver alle HOVEDdata om toppen: // Skriver ALT om toppen inkludert ALLE tilskuerne: // Legger inn (om mulig) en ny tilskuer: // Skriver/displayer (om mulig) EN gitt tilskuer: bool Topp::skrivTilskuer(int ID) { // Oppgave 2E: Lag innmaten // Leser ALT om en tilskuer: Tilskuer::Tilskuer(int ID, bool harb) : NumElement(ID) { // Oppgave 2D: Lag innmaten // Leser ALT om tilskuer fra fil: Tilskuer::Tilskuer(ifstream & inn, int nr) : NumElement(nr) { // Oppgave 2G: Lag innmaten Tilskuer::~Tilskuer() { // Destructor (Ferdiglaget): delete [] navn; delete [] mail; for (int i = 1; i <= antifolge; i++) delete [] folget[i]; void Tilskuer::display() { // Oppgave 2C: Lag innmaten // Skriver ALT om tilskueren: 7

// **************************************************************************** // ****************** DEFINISJON AV (GLOBALE) FUNKSJONER: ****************** // **************************************************************************** void skrivmeny() { // Skriver alle mulige menyvalg: cout << "\n\nfø LGENDE KOMMANDOER ER TILGJENGELIGE:" << "\n A - skriv Alle toppenes status" << "\n T - skriv ALT om EN Topp" << "\n N - Ny(e) tilskuer(e) med eller uten bil" << "\n S - Skriv ALT om en tilskuer med et gitt nr/id" << "\n F - Finn tilskuer(e) med et gitt (del)navn" << "\n Q - Quit / avslutt"; char les() { // Leser og upcaser ett tegn: char ch; cin >> ch; cin.ignore(); return (toupper(ch)); // Leser et heltall mellom MIN og MAX: int les(const char* t, const int MIN, const int MAX) { int n; do { cout << '\t' << t << " (" << MIN << '-' << MAX << "): "; cin >> n; cin.ignore(); while (n < MIN n > MAX); return n; // Leser inn en tekst: void les(const char* t, char* s, const int LEN) { do { cout << '\t' << t << ": "; // Skriver ledetekst. cin.getline(s, LEN); // Leser inn tekst. while (strlen(s) == 0); // Sjekker at tekstlengden er ulik 0. void lagtopperellerlesfrafil() { ifstream innfil("toppskuere.dta"); if (innfil) { innfil.close(); lesfrafil(); else lagtopper(); // Ferdiglaget - Oppgave 2A og 2G // Aktuell fil forsøkes åpnet. // Filen finnes: // Lukker filen. // Datatrukturen leses inn fra fil. // Topper lages/legges inn. void lagtopper() { // Oppgave 2A: Lag innmaten void skrivalletoppenesstatus() { // Oppgave 2B: Lag innmaten // Lager/legger initielt inn topp(er): // Skriver HOVEDdata om ALLE topper: // Skriver (om mulig) hvilken topp en gitt tilskuer (ut fra nr/id) er på: void skrivtilskuer() { // Oppgave 2E: Lag innmaten void finntilskuer() { // Oppgave 2F: Lag innmaten void lesfrafil() { // Oppgave 2G: Lag innmaten // Skriver antall med et visst(del)navn på hver toppene: // Topper og tilskuere fra fil: 8