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

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

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

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

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

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

Eksamen. Objekt-orientert programmering

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

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)

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

Kontinuasjonseksamen

Kontinuasjonseksamen

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

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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.

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

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

KONTINUASJONSEKSAMEN

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

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

Eksamen. Objekt-orientert programmering

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

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

GJØVIK INGENIØRHØGSKOLE

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

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

HØGSKOLEN I SØR-TRØNDELAG

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:

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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 Avdeling for informatikk og e-læring - AITeL

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 )

KONTINUASJONSEKSAMEN

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

Transkript:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N EMNENAVN: Grunnleggende programmering EMNENUMMER: IMT 1031 EKSAMENSDATO: 7.desember 2009 KLASSE(R): 09HBIND*, 09HBPUA, 09HBDRA, 09HBISA, 09HBSPA, 09HBINE* TID: 09.00-13.00 EMNEANSVARLIG: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 8 (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.

Eksamenssettet består av to ulike oppgavetyper: Oppgave 1 omhandler hva som blir utskriften fra/av to ulike programmer. Oppgave 2 omhandler et litt større programmerings-case. NB: Oppgavene 1a, 1b og 2 er totalt uavhengige og kan derfor løses separat. Oppgave 1 (30 %) a) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; char txt[] = "DREAMTHEATER-OG-DROPKICK-MURPHYS"; int main() { int i = 5, j = (i * i) % 7; cout << txt[i] << ' ' << txt[j] << '\n'; i *= j; while (i <= strlen(txt) ) { cout << txt[i - (j * 2) + 1] << ' '; i += j*3; cout << i << '\n'; for (i = strlen(txt)-4, j = 2; j > 0; j--) cout << txt[i+j] << ' ' << txt[i-j] << '\n'; return 0; b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; const int LEN = 40; class Foo { private: char Dropkick[LEN], Theater[LEN]; bool festlig; public: Foo(char t1[], char t2[]) { strcpy(theater, t1); strcpy(dropkick, t2); festlig = true; void funk1() { festlig =!festlig; bool funk2() { return (strcmp(theater, Dropkick)); void funk3() { cout << Dropkick << " " << Theater << " " << ((!festlig)? "ikke " : "") << "festlig\n"; ; int main() { Foo f1("murphys", "Dream"), f2("persie", "Cesc"), f3("per","per"); f2.funk3(); f1.funk1(); f1.funk3(); cout << f3.funk2() << '\n'; f3.funk1(); f3.funk1(); f3.funk1(); f3.funk3(); f1 = f3; f3.funk1(); f3.funk1(); f1.funk3(); return 0; 2

Oppgave 2 (70 %) Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studer vedlegget, som inneholder mange viktige opplysninger som du trenger/skal bruke. Legg spesielt merke til enum en, const ene, klassen, dets datamedlemmer og ferdiglagde (private) funksjoner (bl.a. to void skriv( ) funksjoner), globale variable, main, de tre les( ) funksjonene, les_kategori()og les_semester(). Bruk alt dette aktivt! Innledning Foreleseren din er litt av en skøyer. Stadig bruker hun ulike innslag (video, lyder, bilder, web-sider o.l) for å sprite opp undervisningen. For å holde orden på hva som har blitt brukt/vist for klassene hun underviser de ulike semestrene, så ønsker hun et program som holder orden på dette. Det er det denne eksamensoppgaven omhandler. Datastrukturen Et innslag er representert vha. klassen Innslag. Av vedlegget kan du se hvilke datamedlemmer hvert slikt objekt inneholder. Innslag-objekter ligger lagret i arrayen innslagene. Denne er MAXINNSLAG+1 lang, men til enhver tid er siste_innslag av dem i bruk. Vi bruker ikke indeks nr.0. På den første siden i vedlegget kan du se mange ulike deklarasjoner/definisjoner. Dette skal være alt du trenger av klasser, datamedlemmer og globale variable for å løse denne eksamensoppgaven! Oppgaven a) Lag funksjonene void skriv_innslag()og void Innslag::skriv_data() Den første funksjonen ber om et lovlig innslags nummer (mellom 1 og siste_innslag). Deretter (vha. den andre funksjonen) skrives alle dette innslagets data ut på skjermen. NB: Husk bl.a. å bruke de to ferdiglagde skriv( ) funksjonene. b) Lag funksjonene void nytt_innslag() og void Innslag::les_data() Den første funksjonen sjekker først om det er plass til å legge inn flere innslag. Er det ikke det, kommer en melding. I motsatt fall legges et nytt innslag inn (tell opp siste_innslag), og relevante data leses inn eller nullstilles vha. den andre funksjonen. NB: Husk å bruke aktuelle funksjoner for å behjelpe innlesningen. c) Lag funksjonene void brukt_innslag() og void Innslag::brukt() Først leses et lovlig innslags nummer (mellom 0 og siste_innslag). Er nummeret ulikt 0, skal den andre funksjonen registrere at innslaget er brukt nok et semester. Er det ikke plass til flere registreringer av innslaget, kommer det i stedet en melding. NB: Husk å bruke aktuell funksjon for å behjelpe innlesningen. 3

d) Lag funksjonen void skriv_kategori() Funksjonen leser først en ønsket kategori fra brukeren (bruk aktuell lesefunksjon). Deretter går den gjennom alle innslagene, og skriver ut alt om innslaget (som i oppgave 2a) - dersom innslaget er av denne kategorien. Bruk den ferdiglagde er( )-funksjonen. Det skal komme en egen melding om ingen utskrifter fra objektene har forekommet. e) Lag funksjonen bool Innslag::vist(int sem) Funksjonen skal returnere true/false til om innslaget er brukt/vist i semesteret sem. Om du skulle ha kodet funksjonen void skriv_semester(): Hva ville ha vært annerledes ift. funksjonen void skriv_kategori() i oppgave 2d? Skriv/angi dette også som en del av besvarelsen av denne del oppgaven. f) Lag funksjonene void skriv_eldre() og bool Innslag::eldre(int aa) Den første funksjonen leser først et lovlig årstall (mellom 1980 og 2009). Deretter går den gjennom alle innslagene, og skriver ut alt om innslaget (som i oppgave 2a), dersom innslaget ble brukt/vist dette året eller i løpet av de ni foregående årene. Den andre funksjonen besørger å sjekke om dette siste er tilfelle eller ei. g) Lag funksjonene void les_fra_fil() og void Innslag::les_fra_fil(istream* inn, char typ) Disse funksjonene sørger for at alle data om alle innslag blir lest inn fra filen INNSLAG.DTA. Formatet på filen velger du selv, men dette skal angis som en del av besvarelsen. Klargjøring og forutsetninger Ifm. oppgave 2c (registrere at et innslag et brukt/vist (igjen)): Du trenger ikke å lage noen sjekk på om at semesteret som registreres ikke allerede ligger i arrayen semester, eller at semestrene kommer i stigende rekkefølge. Innslag som er brukt/vist MAXSEMESTER ganger blir ikke slettet fra datastrukturen. De blir bare liggende der, uten at vi har mulighet for å registrere at de er brukt enda flere ganger (i nyere tid). Husk at semestrene fra brukeren leses inn som V eller H samt et tosifret årstall. Dette gjøres om og lagres i arrayen semester som et tall på 100- (vår) eller 200-tallet (høst). F.eks. V97 blir 197, H09 blir 209, V03 blir 103 og H99 blir 299. Gjør dine egne forutsetninger dersom du finner oppgaveteksten upresis eller ufullstendig. Gjør i så fall rede for disse forutsetningene først i besvarelsen din. Lykke til - med neste morsomme innslag i studiehverdagen! frode_ætt_haugianerne.no 4

Vedlegg: Halvferdig programkode (.tpl-fil) // INCLUDE: #include <fstream> // ifstream, ofstream #include <iostream> // cin, cout #include <cstring> // strlen #include <cctype> // toupper using namespace std; // ENUM og CONST: enum kategori { Video, Audio, Bilde, Web, Historie, Dokument, PPT ; const int STRLEN = 160; // Max. tekstlengde. const int MAXINNSLAG = 1000; // Max. antall innslag i "databasen". const int MAXSEMESTER = 20; // Max. antall semestre et innslag vises. const int MAXBAKOVER = 10; // Max. antall år bakover. const int STARTAAR = 1980; // Første år innslag ble brukt. const int SLUTTAAR = 2009; // Hittil siste år innslag ble brukt. // KLASSE: class Innslag { private: char beskrivelse[strlen]; kategori type; int ant_semester; int semester[maxsemester+1]; void skriv(int semest); void skriv(kategori kat); // Beskrivelse av/tekst om innslaget. // Hva slags kategori innslaget er av. // Antall semestre hittil brukt/vist. // Semestrene innslaget er brukt/vist, // på formen: 1xx = Vxx, 2xx = Hxx // To interne funksjoner: public: // Definisjon/deklarasjon av medlemsfunksjoner: void skriv_data(); // Lag innmaten ifm. oppgave 2A void les_data(); // Lag innmaten ifm. oppgave 2B void brukt(); // Lag innmaten ifm. oppgave 2C bool er(kategori typ) { return (type == typ); bool vist(int sem); // Lag innmaten ifm. oppgave 2D bool eldre(int aa); // Lag innmaten ifm. oppgave 2E void les_fra_fil(istream* inn, char typ); // Lag innmaten ifm. oppgave 2F ; // DEKLARASJON AV FUNKSJONER: void skriv_meny(); char les(char t[]); void les(const char t[], char s[], const int LEN); int les(const char t[], const int min, const int max); kategori les_kategori(); int les_semester(); void skriv_innslag(); void nytt_innslag(); void brukt_innslag(); void skriv_kategori(); void skriv_semester(); void skriv_eldre(); void les_fra_fil(); // Oppgave 2A // Oppgave 2B // Oppgave 2C // Oppgave 2D // Oppgave 2E // Oppgave 2F // Oppgave 2G // GLOBALE VARIABLE: Innslag innslagene[maxinnslag+1]; // Array med Innslag-objekter. int siste_innslag; // Indeks for siste Innslag hittil brukt. 5

int main() { // HOVEDPROGRAM: char kommando; les_fra_fil(); // Oppgave 2G skriv_meny(); kommando = les("ønske"); while (kommando!= 'Q') { switch (kommando) { case 'I': skriv_innslag(); break; // Oppgave 2A case 'N': nytt_innslag(); break; // Oppgave 2B case 'B': brukt_innslag(); break; // Oppgave 2C case 'K': skriv_kategori(); break; // Oppgave 2D case 'S': skriv_semester(); break; // Oppgave 2E case 'E': skriv_eldre(); break; // Oppgave 2F default: skriv_meny(); break; kommando = les("ønske"); cout << "\n\n"; return 0; // ***************** DEFINISJON AV KLASSE-FUNKSJONER: ***************** // Gjør om og skriver semester Xyy void Innslag::skriv(int semest) { // som 'V'yy eller 'H'yy: cout << ((semest/100 == 1)? "V" : "H") // 1 --> V, 2 --> H << ((semest % 100 < 10)? "0" : "") << semest % 100; // To siste sifre void Innslag::skriv(kategori kat) { // Enum-verdien 'kat' skrives som tekst: switch (kat) { case Video: cout << "Video"; break; case Audio: cout << "Audio"; break; case Bilde: cout << "Bilde"; break; case Web: cout << "Webside/URL"; break; case Historie: cout << "Historie/vits"; break; case Dokument: cout << "Dokument"; break; case PPT: cout << "Powerpoint"; break; default: cout << "Ugyldig innslag-type!"; break; // Skriver ALLE objektets data, bruker void Innslag::skriv_data() { // også interne funksjoner til dette: // Oppgave 2A: Lag innmaten void Innslag::les_data() { // Leser/setter objektets hoveddata: // Oppgave 2B: Lag innmaten void Innslag::brukt() { // Setter at innslaget (igjen) er brukt: // Oppgave 2C: Lag innmaten // Finner ut og returnerer om er bool Innslag::vist(int sem) { // vist/brukt et gitt semester: // Oppgave 2E: Lag innmaten // Finner ut og returnerer om er vist/brukt bool Innslag::eldre(int aa) { // de 10 siste årene før 'aa'. // Oppgave 2F: Lag innmaten // Leser ALT om innslagene fra fil: void Innslag::les_fra_fil(istream* inn, char typ) { // Oppgave 2G: Lag innmaten 6

// ********************** DEFINISJON AV FUNKSJONER: ********************* void skriv_meny() { // Presenterer lovlige menyvalg: cout << "\n\nfølgende KOMMANDOER ER LOVLIG:\n"; cout << "\ti = skriv alt om ETT spesielt Innslag\n"; cout << "\tn = legg inn et Nytt innslag\n"; cout << "\tb = sett et innslag som Brukt (igjen)\n"; cout << "\tk = skriv ALLE innslag av en viss Kategori\n"; cout << "\ts = skriv ALLE innslag brukt et visst Semester\n"; cout << "\te = skriv ALLE Eldre innslag (som er en stund siden vist/bruk)\n"; cout << "\tq = Quit/avslutt\n"; char les(char t[]) { // Henter ett ikke-blankt upcaset tegn: char ch; cout << '\n' << t << ": "; // Skriver medsendt ledetekst. cin >> ch; cin.ignore(); // Leser ETT tegn. Forkaster '\n'. return (toupper(ch)); // Upcaser og returnerer. // Leser inn en ikke-blank 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. // Leser et tall i et visst intervall: int les(const char t[], const int min, const int max) { int n; do { // Skriver ledetekst: cout << '\t' << t << " (" << min << '-' << max << "): "; cin >> n; cin.ignore(); // Leser inn ett tall. while(n < min n > max); // Sjekker at i lovlig intervall. return n; // Returnerer innlest tall. // Leser type innslag som et tegn, kategori les_kategori() { // gjør om og returnerer enum-verdi: char ch; do // Looper til lovlig bokstav/tegn: ch = les("\tinnslag-type (V, A, B, W, H, D, P)"); while (ch!= 'V' && ch!= 'A' && ch!= 'B' && ch!= 'W' && ch!= 'H' && ch!= 'D' && ch!= 'P'); switch (ch) { // Returnerer aktuell enum-verdi: case 'V': return Video; case 'A': return Audio; case 'B': return Bilde; case 'W': return Web; case 'H': return Historie; case 'D': return Dokument; case 'P': return PPT; // Leser semester som 'V' eller 'H', samt et int les_semester() { // tosifret årstall (xx). Gjør om til og char ch; // returnerer 1xx eller 2xx (der 1=V, 2=H): int nr; do ch = les("\tsemester (V, H)"); // Leser semester. while (ch!= 'V' && ch!= 'H'); // Sikrer at er 'V' eller 'H' nr = les("år", 0, 99); // Årstall i intervallet: 0-99 return (ch == 'V'? 100+nr : 200+nr); // Vxx --> 1xx Hxx --> 2xx 7

void skriv_innslag() { // Skriver alt om ønsket innslag: // Oppgave 2A: Lag innmaten void nytt_innslag() { // Legger (om mulig) inn nytt innslag: // Oppgave 2B: Lag innmaten // Registrerer at allerede eksisterende void brukt_innslag() { // innslag er brukt/vist en gang til: // Oppgave 2C: Lag innmaten void skriv_kategori() { // Skriver ALLE innslag i en gitt kategori: // Oppgave 2D: Lag innmaten void skriv_semester() { // Skriver ALLE innslag i et gitt semester: // Oppgave 2E: Beskriv hva som er ulikt ift 2D. // Skriver alle innslag (max 10 år) void skriv_eldre() { // eldre enn et visst årstall: // Oppgave 2F: Lag innmaten void les_fra_fil() { // Leser ALT fra fil: // Oppgave 2G: Lag innmaten 8