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



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

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

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

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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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 96HINDA / 96HINDE (1 AA / AE)

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

Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

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

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

Kontinuasjonseksamen

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

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

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

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende 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.

KONTINUASJONSEKSAMEN

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

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

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

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

KONTINUASJONSEKSAMEN

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

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

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

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

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

GJØVIK INGENIØRHØGSKOLE

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

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

Kontinuasjonseksamen

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

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

KONTINUASJONSEKSAMEN

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

KONTINUASJONSEKSAMEN

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

Transkript:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk Eksamen EMNENAVN: EMNENUMMER: Objekt-orientert programmering IMT1082 EKSAMENSDATO: 3. juni 2009 KLASSE(R): 08HBIND* / 08HBPUA / 08HBDRA / 08HBISA TID: 09.00-13.00 EMNEANSVARLIG: 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 nedenfor stående programmet var det ønskelig at gav følgende utskrift: Norwegia - massetetthet: 1.2 Nøkkelost - massetetthet: 1.1 Ant. karver pr.dm3: 500 Jarlsberg - massetetthet: 1 Ant. hull pr.dm3: 10 Pepperost - massetetthet: 1.2 Ant. pepperkorn pr.dm3: 50 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 class Ost { 5 6 char navn[20]; 7 float masse; 8 9 Ost(char *t, float m) { strcpy(navn, t); masse = m; 10 virtual ~Ost() { delete [] navn; 11 virtual void display() { cout << navn << " - massetetthet: " << masse; 12 ; 13 class Spesial : public Ost { 14 private 15 char sertegn[20]; 16 int antall; 17 18 Spesial(char* t, char* s, int a, float m=1.0f) : Ost(t, m) 19 { strcmp(sertegn, s); antall = a; 20 void display() { Ost:display(); 21 cout << "\tant. " << sertegn << " pr.dm3: " << antall; 22 ; 23 int main() { 24 Ost ost1("norwegia", 1.2F); ost1.display(); 25 Spesial ost2("nøkkelost", "karver", 500, 1.1F); ost2.display(); cout<<'\n'; 26 Spesial ost3("jarlsberg", "hull", 10); ost3.display(); cout<<'\n'; 27 Spesial ost4("pepperost", "pepperkorn", 50, 1.2F); 28 ost4.display(); cout<<'\n'; 29 return 0; 30 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt[] = "EMIRATES-STADIUM-SOMMEROPPLEVELSE-2009"; void funk(int a, int b=22, int c=3) { for (int i = a; i < b; i+=c ) cout << txt[b%i]; void funk(int a, char c) { txt[a/3] = txt[a/3+a/3] = txt[a+a/3+1]= c; int main() { char* t = &txt[18]; for ( ; *t!= 'P'; t+=2) cout << *t; cout << '\n'; funk(7, 35, 7); cout << '\n'; funk(15); cout << '\n'; funk(24, '_'); t = &txt[8]; cout << t << '\n'; funk(15, '\0'); cout << txt << '\n'; return 0; c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; class A { int a1, a2; A(int a) { a1 = a; a2 = a/3; virtual void display() { cout << a1 << ' ' << a2 << ' '; bool operator < (int a) { return (a2 < a); void operator * (int a) { a2 *= a; ; class B : public A { int a2, b1; B(int a1, int b) : A(a1) { a2 = b; b1 = a1/2; void display() { A::display(); cout << a2 << ' ' << b1; void operator % (int a) { b1 %= a; a2 %= (a-1); ; int main() { A* aob = new A(27); aob->display(); cout << '\n'; B* bob = new B(19, 71); bob->display(); cout << '\n'; A* aob2 = new B(20, 9); *aob2 * 5; aob2->display(); cout << '\n'; cout << ((*aob2 < 30)? "Cesc" : "Arshavin") << '\n'; *bob % 3; bob->display(); cout << '\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 const ene, de fire klassene (med datamedlemmer og funksjoner), global variabel, main()og de tre ferdiglagde les( )-funksjonene. Bruk alt dette svært aktivt! Innledning Frank er en riktig reiseglad (og kanskje litt spesiell) fyr. For Frank er nemlig ikke målet med turen selve stedet han skal til. For han er hele poenget hvilket transportmiddel han brukte. Derfor samler han på stadig nye ulike typer båt (f.eks. DS Anette, MS Bjarne), fly (f.eks. Boeing 747, Airbus A380) og tog (f.eks. EL18, EA2, CN119) han har reist med. Frank har en helt spesiell og god venn - deg! Derfor vil han nå at du skal hjelpe han med å lage et program som gjør at han lettere kan holde oversikten over hva han hittil har reist med. Det er det denne eksamensoppgaven omhandler. Datastrukturen Datastrukturen består (som du ser i vedlegget) av tre ulike lister med Transportmiddel-objekter. Disse ligger tilpekt av arrayen transpmiddel, der vi bruker indeksene nr.0-2. I vår situasjon er det ikke så interessant å ha ulike typer objekter i samme liste. Derfor består hver av listene av homogene (like) objekter - henholdsvis Baat-, Fly- og Tog-objekter. Alle klasser, det de arver, alle datamedlemmer og alle prototyper for medlemsfunksjoner er komplett og fullstendig deklarert/definert i vedlegget. Din oppgave blir å skrive innmaten til funksjoner (totalt 24 stk.) inni og utenfor klassene. Oppgaven a) Skriv innmaten til funksjonen int hent_listenr() Brukeren blir bedt om (vha. aktuell les) å skrive en bokstav (B(åt), F(ly), T(og)). Ut fra tegnet returneres alltid (loop om nødvendig) aktuell listes indeks (0-2) i transpmiddel arrayen. b) Skriv innmaten til funksjonene void skriv_en_liste()og de fire display()-funksjonene inni klassene Den første funksjonen tilbyr brukeren (vha. funksjonen i oppgave 2A) å velge en aktuell liste. Alt i denne listen skrives/displayes så på skjermen, vha. relevante display-funksjoner. c) Skriv innmaten til funksjonene void nytt_transm() og de fire constructorene som har en parameter Den første funksjonen spør først om relevant liste (jfr. oppgave 2A) og navnet på nytt transportmiddel (bruk aktuell les). Finnes dette allerede i aktuell liste, så kommer en melding. I motsatt fall opprettes et nytt relevant objekt, og legges inn i den aktuelle listen. De fire constructorene sørger for at alle datamedlemmer fylles/settes (bruk aktuelle les, og bestem selv fornuftige grenseverdier (min og max) for int er som leses inn. 4

d) Skriv innmaten til funksjonen void fjern_transm() Først leses et transportmiddels navn. Deretter gås det gjennom alle listene, og transportmiddel med dette navnet fjernes/slettes fra alle listene det evt. er å finne i. Til slutt skriver funksjonen ut antallet som ble fjernet, evt. en melding med at det ikke var å finne i noen av dem. e) Skriv innmaten til funksjonene void antall() og bool Transportmiddel::operator == (int a) Den andre funksjonen returnerer true/false til om parameteren a er lik årstallsdelen i dato. Den første funksjonen leser et lovlig årstall (jfr. const er). Deretter gås det manuelt gjennom alle listene, og totalt antall transportmidler av hver kategori (båt, fly og tog), tatt/kjørt dette året (bruk == -funksjonen), blir skrevet ut på skjermen. f) Skriv innmaten til de fem void skriv_til_fil( )-funksjonene. Funksjonene skal sørge for at hele datastrukturen skrives til filen BATFLYTOG.DTA. Formatet bestemmer du helt selv, men det skal oppgis som en del av besvarelsen. g) Skriv innmaten til funksjonene void les_fra_fil() og de fire constructorene som har to parametre Funksjonene skal til sammen sørge for at hele datastrukturen blir lest inn igjen fra filen angitt ovenfor, og med det formatet du selv der bestemte. Annet (klargjørende?): Du skal bruke LISTTOOL ifm. løsningen av denne oppgaven. Inni hver av de tre subklassene er det kun ett datamedlem. Reelt hadde det selvsagt vært mange flere. Men her ønsker vi at fokuset skal være annet enn å skrive masse lik kode for å behandle data. Datamedlemmene strekning (f.eks. Stavanger-Barcelona eller Oslo-Kiel) og dato (på formen ÅÅÅÅMMDD) inneholder hver sine data. Spesielt førstnevnte brukes til lite (ingen sammenligning eller søking), utover å lagre data inni, skjermutskrift og å skrive til/lese fra fil. Ordet navn brukes i teksten synonymt med transportmiddelets type / modell (se Innledning ). For båter er navn det konkrete navnet på båten (ikke en typebetegnelse), da det jo ofte ikke er laget så mange like av hvert slag/type/modell. Vi har ingen sjekk på at ulike lister inneholder objekter med samme navn. Derfor kan det altså skje at man ifm. oppgave 2D tar ut flere objekter med samme navn (selv om at det er svært sjelden). 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 (eksamens)tur! frode_ætt_haugianerne.no 5

Vedlegg 1: Halvferdig programkode #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include <cstdlib> #include "listtool.h" using namespace std; // INCLUDE: // cin, cout // i(f)stream, o(f)stream // strlen, strcpy // toupper // atoi // "Verktøykasse" for listehåndtering. // CONST: const int STRLEN = 80; // Standard streng-lengde (i array). const int ANT_TRANSM = 3; // Antall ulike transportmiddel. const int STARTAAR = 2009; // Det første mulige året. const int SLUTTAAR = 2020; // Det siste mulige året. // KLASSER: class Transportmiddel : public Text_element { // text = tr.middels navn/type/modell. char* strekning; // Aktuell strekning man kjørte. int dato; // Datoen for "hendelsen" (form: ÅÅÅÅMMDD). Transportmiddel(char* t); // Lag innmaten ifm. oppgave 2C. Transportmiddel(char* t, istream* inn); // Lag innmaten ifm. oppgave 2G. ~Transportmiddel() { delete [] strekning; virtual void display(); // Lag innmaten ifm. oppgave 2B. bool operator == (int a); // Lag innmaten ifm. oppgave 2E. virtual void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2F. ; class Baat : public Transportmiddel { int tonnasje; // Tonnasjen. Baat(char* t); // Lag innmaten ifm. oppgave 2C. Baat(char* t, istream* inn); // Lag innmaten ifm. oppgave 2G. void display(); // Lag innmaten ifm. oppgave 2B. void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2F. ; class Fly : public Transportmiddel { int ant_pass; // Max. antall passasjerer. Fly(char* t); // Lag innmaten ifm. oppgave 2C. Fly(char* t, istream* inn); // Lag innmaten ifm. oppgave 2G. void display(); // Lag innmaten ifm. oppgave 2B. void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2F. ; class Tog : public Transportmiddel { int kraft; // Effekt/kraft (i kw) på lokomotivet. Tog(char* t); // Lag innmaten ifm. oppgave 2C. Tog(char* t, istream* inn); // Lag innmaten ifm. oppgave 2G. void display(); // Lag innmaten ifm. oppgave 2B. void skriv_til_fil(ostream* ut); // Lag innmaten ifm. oppgave 2F. ; 6

// DEKLARASJON AV FUNKSJONER: void skriv_meny(); char les(const char* t); int les(const char* t, const int MIN, const int MAX); void les(const char t[], char s[], const int LEN); int hent_listenr(); // Lag innmaten ifm. oppgave 2A. void skriv_en_liste(); // Lag innmaten ifm. oppgave 2B. void nytt_transm(); // Lag innmaten ifm. oppgave 2C. void fjern_transm(); // Lag innmaten ifm. oppgave 2D. void antall(); // Lag innmaten ifm. oppgave 2E. void skriv_til_fil(); // Lag innmaten ifm. oppgave 2F. void les_fra_fil(); // Lag innmaten ifm. oppgave 2G. // GLOBALE VARIABLE: List* transpmiddel[ant_transm]; // Lister med ulike transportmidler. int main() { // HOVEDPROGRAM: char valg; // Initierer listene: for (int i = 0; i < ANT_TRANSM; i++) transpmiddel[i] = new List(Sorted); les_fra_fil(); // Oppgave 2G skriv_meny(); valg = les("\n\nkommando"); while (valg!= 'Q') { switch(valg) { case 'D': skriv_en_liste(); break; // Oppgave 2B case 'N': nytt_transm(); break; // Oppgave 2C case 'F': fjern_transm(); break; // Oppgave 2D case 'A': antall(); break; // Oppgave 2E default: skriv_meny(); break; valg = les("\n\nkommando"); skriv_til_fil(); cout << "\n\n"; return 0; // Oppgave 2F // ************************************************************************* // ****************** DEFINISJON AV MEDLEMS-FUNKSJONER: ****************** // ************************************************************************* // *************************** TRANSPORTMIDDEL: ************************** Transportmiddel::Transportmiddel(char* t) : Text_element(t) { Transportmiddel::Transportmiddel(char* t, istream* inn) : Text_element(t) { void Transportmiddel::display() { bool Transportmiddel::operator == (int a) { // Oppgave 2E: Lag innmaten void Transportmiddel::skriv_til_fil(ostream* ut) { 7

// ******************************* BAAT: ********************************* Baat::Baat(char* t) : Transportmiddel(t) { Baat::Baat(char* t, istream* inn) : Transportmiddel(t, inn) { void Baat::display() { void Baat::skriv_til_fil(ostream* ut) { // ******************************* FLY: ********************************** Fly::Fly(char* t) : Transportmiddel(t) { Fly::Fly(char* t, istream* inn) : Transportmiddel(t, inn) { void Fly::display() { void Fly::skriv_til_fil(ostream* ut) { // ******************************* TOG: ********************************** Tog::Tog(char* t) : Transportmiddel(t) { Tog::Tog(char* t, istream* inn) : Transportmiddel(t, inn) { void Tog::display() { void Tog::skriv_til_fil(ostream* ut) { // **************************************************************************** // ****************** DEFINISJON AV (GLOBALE) FUNKSJONER: ****************** // **************************************************************************** void skriv_meny() { // Skriver alle mulige menyvalg: cout << "\n\nfølgende KOMMANDOER ER TILGJENGELIGE:" << "\n D - Display/skriv EN av listene" << "\n N - Nytt transportmiddel tatt/kjørt" << "\n F - Fjern/slett er transportmiddel" << "\n A - Antall tatt/kjørt ett gitt år" << "\n Q - Quit / avslutt"; 8

char les(const char* t) { char ch; cout << t << ": "; cin >> ch; cin.ignore(); return (toupper(ch)); // Leser og upcaser brukerens valg/ønske: // Leser en INT mellom MIN og MAX: int les(const char* t, const int MIN, const int MAX) { char text[strlen]; int n; do { cout << '\t' << t << " (" << MIN << '-' << MAX << "): "; cin.getline(text, STRLEN); n = atoi(text); // Leser som tekst - omgjør: while (n < MIN n > MAX); return n; // 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. int hent_listenr() { // Oppgave 2A: Lag innmaten void skriv_en_liste() { void nytt_transm() { void fjern_transm() { // Oppgave 2D: Lag innmaten void antall() { // Oppgave 2E: Lag innmaten void skriv_til_fil() { // Returnerer indeks for aktuell liste: // Skriv EN av listene: // Nytt transportmiddel tatt/kjørt: // Fjerner navngitt(e) transportmiddel: // Antall tatt/kjørt ett gitt år: // Skriv HELE datastrukturen til fil: void les_fra_fil() { // Leser HELE datastrukturen fra fil: 9