Kontinuasjonseksamen



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

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

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

Eksamen. Objekt-orientert programmering

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

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

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

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

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

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)

Kontinuasjonseksamen

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

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

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

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 99HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB / 99HINGA

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

GJØVIK INGENIØRHØGSKOLE

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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

Eksamen. Objekt-orientert programmering

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

Kontinuasjonseksamen

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

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

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

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

GJØVIK INGENIØRHØGSKOLE

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

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

HØGSKOLEN I SØR-TRØNDELAG

Kontinuasjonseksamen

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

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

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 SØR-TRØNDELAG

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:

KONTINUASJONSEKSAMEN

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

UNIVERSITETET I OSLO

Transkript:

Høgskolen i Gjøvik Avdeling for teknologi Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering L 183 A EKSAMENSDATO: 5. januar 2004 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: Gressklipper Må lagres inne. Vannslange Må ikke lagres inne. Forskjærer Kan ikke barn bruke. Ostehøvel Kan barn bruke. Plastbolle Kan barn bruke. 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 class Redskap { 4 protected: 5 char* navn; 6 7 Redskap(char* t) { navn = new char[strlen(t)+1]; strcpy(navn, t); 8 virtual ~Redskap() { delete [] navn; 9 virtual void display() = '0'; 10 ; 11 class Hage : public Redskap { 12 13 bool maa_lagres_inne; 14 15 Hage(char* t, bool mm) : Redskap(t) { maa_lagres_inne = mm; 16 void display() { cout << navn << '\t' << "Må " 17 << ((!maa_lagres_inne)? "" : "ikke ") << "lagres inne.\n"; 18 ; 19 class Kjokken : public Redskap { 20 21 bool kan_barn_bruke; 22 23 Kjokken(char* t, bool kk) : Redskap(t) { kan_barn_bruke = k; 24 void display() { cout << navn << '\t' << "Kan " 25 << ((kan_barn_bruke)? "" : "ikke ") << "barn bruke.\n"; 26 ; 27 int main() { 28 Redskap* redskapene[5]; 29 redskapene[0] = new Hage("Gressklipper", true); 30 redskapene[1] = new Hage("Vannslange", false); 31 redskapene[2] = new Kjokken("Forskjærer", false); 32 redskapene[3] = new Kjokken("Ostehøvel", true); 33 redskapene[4] = new Kjokken("Plastbolle", true); 34 for (int i = 1; i < 5; i++) 35 redskapene[i]->display(); 36 return 0; 37 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt[] = "DAGEN_ER_IKKE_HELT_DEN_SAMME_UTEN_EN_EKSAMEN!!!"; int main() { int i, n = 6; char * p = &txt[7]; for (i = 1; i <= 8; i += n) cout << *(p + ++i) << '\n'; p = &txt[i*3-n]; cout << *p << '\n'; p = &txt[n*n]; do { cout << *(p-2*n) << '\n'; p -= n; p++; while (*p!= 'M'); return 0; c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; class A { char a; 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 { int b; B() : A('A') { b = 17; 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(37, 'F'); arr[1] = new A('S'); arr[2] = new B; arr[2]->display(); cout << '\t' << arr[1]->svar() << '\n'; arr[0]->display(); cout << '\t' << arr[2]->svar() << '\n'; arr[1]->display(); cout << '\t' << arr[0]->svar() << '\n'; cout << (*arr[0] > 'F') << '\n'; cout << (*(B*)arr[2] < 23) << '\n'; return 0; 3

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 (deres data og funksjoner), global variabel 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å ulike kjøretøyer (biler, lastebiler og tilhengere). Alle klasser, det de arver, alle datamedlemmer og alle prototyper for medlemsfunksjoner er komplett og fullstendig deklarert/definert i vedlegget. Din oppgave blir kun å skrive innmaten til noen hovedfunksjoner og medlemsfunksjonene inni de ulike klassene. Datastrukturen Datastrukturen består (som du ser i vedlegget) kun av den enkle listen registeret. I denne ligger det ulike typer objekter ( Bil, Lastebil og Tilhenger ). Så lenge alle medlemsfunksjoner i de arvede klassene er virtuelle (se vedlegget), så trenger vi faktisk ikke å tenke på hva slags objekt vi til enhver tid egentlig henter ut fra listen (vha. Listtools remove ). Ved å alltid bare caste dette om til et Kjoretoy så blir den rette virtuelle funksjonen tilkalt/kjørt. Listen registeret er sortert tekstlig på kjøretøyets registreringsnummer (to bokstaver rett etterfulgt av fem siffer). Oppgaven A) Skriv innmaten til virtual void display() -funksjonene inni hver av de fire klassene. Hver av disse display()-funksjonene skal skrive ut objektets data til skjermen på en passende måte. Da dataene i alle klassene er private, må display()-funksjonene i de tre avledede klassene bruke/tilkalle Kjoretoy::display(). B) Skriv innmaten til funksjonen void nytt_kjoretoy() og constructorene med en parameter i de fire klassene. Constructoren i Kjoretoy skal sørge for at aktiv blir satt til true. De tre andre constructorene i de avledede klassene skal spørre brukeren om hvilken verdi de ulike datamedlemmene skal settes til/få. Funksjonen nytt_kjoretoy() leser først et registreringsnummer vha. les_reg( ). Dersom et kjøretøy med dette nummeret allerede finnes, så kommer det en melding om det. I motsatt fall så bes det om en type kjøretøy (B = bil, L = lastebil og T = tilhenger). Ut fra hva brukeren valgte/ønsket så opprettes det aktuelle kjøretøyet, og dette legges så inn i registeret. C) Skriv innmaten til funksjonene void status_endring() og void Kjoretoy :: endre_status() Funksjonen status_endring() leser først et registreringsnummer vha. les_reg( ). Dersom ingen kjøretøy har dette nummeret, så kommer det en melding om det. I motsatt fall så tas det ut fra listen, dets endre_status() -funksjon kalles før det legges tilbake i listen igjen. endre_status() -funksjonen skal tilby brukeren å endre på aktiv, og utfører evt. dette. 4

D) Skriv innmaten til funksjonene void editer_kjoretoy() og de tre virtual void endre() -funksjonene inn hver av de tre avledede klassene. Funksjonen editer_kjoretoy() gjør eksakt det samme som status_endring() i oppgave 2C, bare at den virtuelle funksjonen endre() kalles i stedet. De tre endre()- funksjonene skriver ut aktuelt objekts data og tilby brukeren å sette denne til en annen/ny verdi. E) Skriv innmaten til funksjonene void les_kjoretoy_fra_fil() og og constructorene med to parametre i de fire klassene. Filen KJORETOY.DTA inneholder en linje pr. kjøretøy. Denne har formatet: <Type kjøretøy> <Reg.nr.> <Status> <Tallverdi> der: <Type kjøretøy> er kun bokstaven B, L eller T <Status> er kun bokstaven A eller I for aktiv og inaktiv. <Tallverdi> angir enten ant_seter, volum eller lastevekt. Mellom hver felt er det ett blankt tegn. Eksempler på to slike linjer kan være: B FS40000 A 9 og L FS35000 I 10.2 Funksjonen les_kjoretoy_fra_fil() skal sørge for at hele datastrukturen leses inn fra fil. Den leser først inn type kjøretøy og dets reg.nr. fra filen. Deretter opprettes aktuelt kjøretøyobjekt (dets reg.nr og filobjektet det leses fra sendes med som parameter til constructoren) og det legges inn i registeret. Hver av de fire constructorene (med to parametre) sørger for at resten av objektets data leses inn fra filen. F) Skriv innmaten til funksjonene void skriv_kjoretoy_til_fil() og og de fire virtual void skriv_til_fil( ) -funksjonene inn hver av klassene. Funksjonen skriv_kjoretoy_til_fil() sørger for at hele datastruktuen blir skrevet ut til filen KJORETOY.DTA, på samme formatet som beskrevet ovenfor. Dvs. den går gjennom hele registeret -listen og sørger for at hver enkelt (vha. den virtuelle skriv_til_fil( )) skriver alle sine egne data til filen angitt som parameter. De fire funksjonene skriv_til_fil( ) sørger altså for at alle et objekts data skrives til fil. De tre avledede klassenes slike funksjoner må gjøre bruk av/tilkalle Kjoretoy::skriv_til_fil( ). Annet (klargjørende?): Du skal bruke LISTTOOL ifm. løsningen av denne oppgaven. Vi håndterer her altså ikke andre kjøretøytyper som f.eks. moped, motorsykkel og buss. Ei heller registrerer vi data om et kjøretøys eier (navn, adresse, telefon m.m.). Et kjøretøy slettes aldri, det settes bare til inaktivt ( aktiv = false ). Programmet inneholder (selvsagt) ingen funksjon/mulighet får å displaye hele listen. For at nummeret alltid skal være et fem-sifret tall, så er tall mellom 1000 og 9999 tillagt en ekstra innledende 0. F.eks. FS04267 Vi forutsetter at brukeren alltid skriver inn lovlige og korrekte verdier (tall og reg.nr.). 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 kjøretur! frode@haug.com 5

Vedlegg: Halvferdig programkode #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include "listtool.h" using namespace std; // INCLUDE: // cin, cout // ifstream, ofstream // strcpy, strlen // toupper // Ulike "verktøy" fra "Listtool". // CONST: const int STRLEN = 80; // Max. lengde for en tekststreng. const int REGLEN = 8; // Fast lengde for reg.nr. inkl. '\0'. // KLASSER: class Kjoretoy : public Text_element { // Den arvede "text" brukes som registreringsnummer. bool aktiv; // Om kjøretøyet er aktivt eller ei (inaktivt). // Oppgave 2B Initierer data: Kjoretoy(char* t) : Text_element(t) // Oppgave 2E Leser data fra fil: Kjoretoy(istream* inn, char* t) : Text_element(t) virtual void display() // Oppgave 2A Skriver ut alle data: void endre_status() // Oppgave 2C Endrer status til (in)aktiv: // Oppgave 2D Pure virtual, dvs. MÅ virtual void endre() = 0; // implementeres i subklasser. ; virtual void skriv_til_fil(ostream* ut) // Oppgave 2F Til fil: class Bil : public Kjoretoy { int ant_seter; // Antall seter/sitteplasser. Bil(char* t) : Kjoretoy(t) // Oppgave 2B Initierer data: // Oppgave 2E Leser data fra fil: Bil(istream* inn, char* t) : Kjoretoy(inn, t) virtual void display() // Oppgave 2A Skriver ut ALLE data: virtual void endre() // Oppgave 2D Endrer ønskede data: ; virtual void skriv_til_fil(ostream* ut) // Oppgave 2F Til fil: 6

class Lastebil : public Kjoretoy { float volum; // Lastevolumet (i "kassehuset"). Lastebil(char* t) : Kjoretoy(t) // Oppgave 2B Initierer data: // Oppgave 2E Leser data fra fil: Lastebil(istream* inn, char* t) : Kjoretoy(inn, t) virtual void display() // Oppgave 2A Skriver ut ALLE data: virtual void endre() // Oppgave 2D Endrer ønskede data: ; virtual void skriv_til_fil(ostream* ut) // Oppgave 2F Til fil: class Tilhenger : public Kjoretoy { int lastevekt; // Antall kilo tilhengeren kan lastes med. Tilhenger(char* t) : Kjoretoy(t) // Oppgave 2B Initierer data: // Oppgave 2E Leser data fra fil: Tilhenger(istream* inn, char* t) : Kjoretoy(inn, t) virtual void display() // Oppgave 2A Skriver ALLE data: virtual void endre() // Oppgave 2D Endrer ønskede data: ; virtual void skriv_til_fil(ostream* ut) // Oppgave 2F Til fil: // DEKLARASJON AV FUNKSJONER: void skriv_meny(); char les_kommando(); void les_regnr(char* t); void nytt_kjoretoy(); // Oppgave 2B void status_endring(); // Oppgave 2C void editer_kjoretoy(); // Oppgave 2D void les_kjoretoy_fra_fil(); // Oppgave 2E void skriv_kjoretoy_til_fil(); // Oppgave 2F List* registeret; // GLOBAL VARIBEL: // Liste med alle kjøretøyene. int main() { // HOVEDPROGRAM: char kommando; // Brukerens valg/ønske. char nr[reglen]; registeret = new List(Sorted); les_kjoretoy_fra_fil(); // Initierer tom liste. // Oppgave 2E 7

skriv_meny(); // Skriver aktuelle valg/muligheter. kommando = les_kommando(); // Leser brukerens valg. while (kommando!= 'Q') { switch(kommando) { case 'N': nytt_kjoretoy(); break; // Oppgave 2B case 'I': status_endring(); break; // Oppgave 2C case 'S': les_regnr(nr); if (!registeret->display_element(nr)) cout << "\n\tingen kjøretøy med dette reg.nr!\n"; break; case 'E': editer_kjoretoy(); break; // Oppgave 2D case 'T': skriv_kjoretoy_til_fil(); break; // Oppgave 2F default: skriv_meny(); break; kommando = les_kommando(); // Leser brukerens valg. cout << "\n\n"; return 0; // DEFINISJON AV FUNKSJONER: void skriv_meny() { // Skriver meny/lovlige kommandoer til bruker: cout << "\n\n\nfølgende kommandoer er lovlig:\n"; cout << "\tn - Nytt kjøretøy\n"; cout << "\ti - (In)aktiviser et kjøretøy\n"; cout << "\ts - Skriv/display ett gitt kjøretøy\n"; cout << "\te - Endre data om et kjøretøy\n"; cout << "\tt - Til fil (med hele datastrukturen)\n"; cout << "\tq - Quit / avslutt\n"; char les_kommando() { // Leser og returnerer ETT upcaset tegn. char ch; cout << "\n\nkommando: "; cin >> ch; cin.ignore(); return (toupper(ch)); void les_regnr(char* t) { // Leser "lovlig" reg.nummer: do { cout << "\n\tregnr (BBTTTTT): "; cin.getline(t, REGLEN); while (strlen(t)!= 7); // Godtar KUN når inneholder syv tegn. t[0] = toupper(t[0]); t[1] = toupper(t[1]); // Upcaser de to første. void nytt_kjoretoy() { // Oppgave 2B: Skriv innmaten void status_endring() { // Oppgave 2C: Skriv innmaten void editer_kjoretoy() { // Oppgave 2D: Skriv innmaten void les_kjoretoy_fra_fil() { // Oppgave 2E: Skriv innmaten void skriv_kjoretoy_til_fil() { // Oppgave 2F: Skriv innmaten 8