Kontinuasjonseksamen

Like dokumenter
Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

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

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

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

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

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

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

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

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

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

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

KONTINUASJONSEKSAMEN

Eksamen. Objekt-orientert programmering

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

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

GJØVIK INGENIØRHØGSKOLE

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

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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.

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

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

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

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

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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

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

KONTINUASJONSEKSAMEN

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

GJØVIK INGENIØRHØGSKOLE

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

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

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

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

Eksamen. Objekt-orientert programmering

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

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

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 Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

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*

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

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

Kontinuasjonseksamen

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

Kontinuasjonseksamen

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

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

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

Transkript:

Høgskolen i Gjøvik Avdeling for Teknologi Kontinuasjonseksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering L 183 A EKSAMENSDATO: 7. januar 2000 KLASSE: 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB 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 tilstede. Innføring med penn, evt. trykkblyant som gir gjennomslag. Pass på at du ikke skriver på mer enn ett innføringsark om gangen (da det blir uleselige gjennomslag om flere ark ligger oppå hverandre når du skriver). Ved innlevering skilles hvit og gul besvarelse og legges i hvert sitt omslag. Oppgavetekst, kladd og blå kopi beholder kandidaten. Ikke skriv noe av din besvarelse på oppgavearkene. Husk kandidatnummer på alle ark.

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: Navn: Scania Ant.hjul: 10 Ant.sittepl: 52 Ant.ståpl: 0 Navn: BMW Ant.hjul: 4 Ant.personer: 6 Navn: Mercedes Ant.hjul: 4 Ant.personer: 8 Navn: Wolkswagen Ant.hjul: 6 Ant.sittepl: 45 Ant.ståpl: 30 Navn: Mitsubishi Ant.hjul: 4 Ant.personer: 5 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> // cout 2 #include <cstring> // strcpy 3 using namespace std; 4 class Kjoretoy { // Baseklasse. 5 protected: 6 char navn[30]; // Kjøretøyets navn. 7 int ant_hjul; // Antall hjul på kjøretøyet. 8 Kjoretoy* neste; // Peker til neste kjøretøy. 9 public: 10 Kjoretoy(char* nvn, int ah = 4) // Constructor som initierer variable: 11 { strcpy(navn, nvn); ant_hjul = ah; 12 void hektinn(kjoretoy* next) { neste = next; // Oppdaterer "neste". 13 Kjoretoy* hent_neste() { return neste; // Returnerer "neste". 14 virtual void display() // Skriver ut objektets data: 15 { cout << "\nnavn: " << navn << "\n\tant.hjul: " << ant_hjul; 16 ; 17 class Bil : public Kjoretoy { // Klasse det lages objekt/instans av: 18 private: 19 int ant_personer; // Antall personer bilen er registrert for. 20 public: // Constructor som initierer variable: 21 Bil(char* nvn, int ap = 5) : Kjoretoy(nvn) 22 { ant_personer = ap; 23 void display() // Skriver ut objektets data: 24 { Kjoretoy::display(); cout << "\tant.personer: " << ant_personer; 25 ; 2

26 class Buss :: public Kjoretoy { 27 private: 28 int ant_sitteplasser; // Antall sitteplasser bussen er registrert for. 29 int ant_staaplasser; // Antall ståplasser bussen er registrert for. 30 public: // Constructor som initierer variable: 31 Buss(char* nvn, int ah, int asi, int ast = 0) : Kjoretoy(nvn) 32 { ant_sitteplasser = asi; ant_staaplasser = ast; 33 void display() // Skriver ut objektets data: 34 { Kjoretoy::display(); cout << "\tant.sittepl: " << ant_sitteplasser 35 << "\tant.ståpl: " << ant_staaplasser; 36 ; 37 int main() { // Hovedprogram: 38 Kjoretoy * kj, * LIFO_liste = NULL; // Hjelpe- og listepeker. 39 for(int i = 0; i <= 5; i++) { // Bygger opp liste av fem objekter: 40 switch(i) { // Lager objektene: 41 case 1: kj = new Bil ("Mitsubishi"); break; 42 case 2: kj = new Buss("Wolkswagen", 6, 45, 30); break; 43 case 3: kj = new Bil ("Mercedes", 8); break; 44 case 4: kj = new Bil ("BMW", 6); break; 45 case 5: kj = new Buss("Scania", 10, 52, 22); break; 46 47 kj->hektinn(lifo_liste); // Legger inn først i listen: 48 LIFO_liste = kj; 49 50 // Traverserer hele listen: 51 for ( kj = LIFO_liste; kj; kj = kj->hent_neste() ) 52 kj->display(); // Skriver objektets data. 53 return 0; 54 b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; void funk(char txt[], int n = 1, char ch = 'L') { txt[n] = ch; void funk(char txt[], char ch) { txt[2] = ch; ch = 'E'; void funk(char txt[], char & ch, int n) { ch = txt[n]; strcpy(txt, "STAVANGER"); int main() { char tekst[] = "TRONDHEIM"; char tegn = 'U'; funk(tekst); funk(tekst, tegn); funk(tekst, 8, 'T'); funk(tekst, tegn, 3); funk(tekst, 1, tegn); return 0; cout << tekst << '\n'; cout << tekst << " " << tegn << '\n'; cout << tekst << '\n'; cout << tekst << " " << tegn << '\n'; cout << tekst << '\n'; 3

c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt1[] = "KONSERT"; char txt2[] = "JANUAR"; char* p1; char* p2; int n; int main() { p1 = txt1; p2 = &txt2[5]; n = txt1[4] - 'A'; cout << *p1 << '\t' << *p2 << '\t' << n << '\n'; *p2 = *(p1+3)+3; *p1 = txt2[5]-4; cout << *p1 << '\t' << *p2 << '\n'; txt1[4] = txt2[4]; txt2[3] = txt1[9-n]; cout << txt1 << '\t' << txt2 << '\n'; for ( int i = 0; i <= 5; i+=2 ) txt1[i+1] = txt2[i]; cout << txt1 << '\n'; p1 = txt1+(2*n-3); *p2 = *p2+4; cout << *p1 << '\t' << *p2 << '\n'; return 0; Oppgave 2 (70%) NB: Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studer spesielt vedlegget (const er, enum, klasse, global variabel, hovedprogram og ferdiglagde funksjoner), slik at du får klarhet i hvordan programmet skal fungere. Innledning Du skal i denne eksamensoppgaven lage et meget forenklet program for hva flygelederne bruker for å holde orden på de ulike flyene rundt og på en flyplass. Programmet skal holde orden på de flyene som er på vei inn til flyplassen for å lande, det flyet som er på rullebanen (lander eller tar av), de flyene som står klare for avgang ( take-off ) og de flyene som står i de ulike gatene (evt. står i kø og venter på en ledig gate-plass). Programmet vil befinne seg på en datamaskin oppe i flyplassens tårn, der flygelederne har sin arbeidsplass. 4

Bakgrunn Rutinene som flygelederne og pilotene opererer etter er som følger: Et fly melder over radio til tårnet (flygelederne) om sin ankomst til området. Pilotene angir flyets flightnummer (to bokstaver og tre tall). Flygelederne registrerer flyet (oppgave 2a) og det legges i landingskøen (FIFO-liste). På rullebanen kan det selvsagt bare befinne seg ett fly ad gangen. Dette flyet er enten i ferd med å lande eller å ta av. Når flygelederne ser (med øynene) og/eller vet (via radar) at det ikke er et fly på rullebanen, kan de meddele et fly i landingskøen (oppgave 2b) eller avgangskøen (FIFO-liste) at det kan lande/ta av. Da vil det aktuelle flyet bli flyttet fra vedkommende kø til rullebanen. Når flygelederne ser/vet at et fly har tatt av, og er i lufta på vei bort fra flyplassen, så kan det slettes fra programmet/memory for denne gang (inntil det en senere gang melder sin ankomst igjen) (oppgave 2d). Når flygelederne ser/vet at et fly er ferdig med å lande, kan flyet bli tildelt en ledig gate å parkere ved. Flyplassen har et begrenset antall gater. Disse er representert vha. arrayen gate. Om en ledig gate ikke finnes, plasseres flyet i en egen gate-kø (FIFO-liste dette også) (oppgave 2d). Når et fly er klar til avgang, så meddeler pilotene dette til tårnet. De angir bare gatenummeret de nå er i ferd med å forlate. Flyet flyttes til avgangskøen, gatene settes ledig/tom eller at det første flyet i gate-køen plasseres i den forlatte/ledige gaten (oppgave 2c). Flygelederne kan be om å få se hvilke fly som befinner seg i de ulike køene, ved gatene eller hvilket fly som for øyeblikket er på rullebanen (oppgave 2e). Datastrukturen Datastrukturen skal altså bestå av: - tre ulike FIFO-lister ( landings_ko, avgangs_ko og gate_ko ). - en array ( gate ) for å holde orden på hvilke fly som står ved hvilken gate. - en variabel ( paa_rullebanen ) for å representere flyet som for øyeblikket er på rullebanen. - en variabel ( opp_ned ) for å fortelle om dette flyet er i ferd med å lande eller å ta av. Oppsummert Programmet du skal lage, skal altså gjøre det mulig for flygelederne å: - registrere et nytt fly på vei inn, og legge det i landingskøen (oppgave 2a) - flytte et fly fra landingskøen til rullebanen (oppgave 2b) - flytte et fly fra rullebanen til en ledig gate, evt. til ventekø for ledig gate (oppgave 2d) - flytte et fly fra en gate til avgangskøen (oppgave 2c) - flytte et fly fra den ventende gate-køen til en ledig gate (oppgave 2c) - slette et fly som har tatt av fra rullebanen fra programmet/memory (oppgave 2d) - få se hvilke fly som befinner seg i en kø, ved gatene eller på rullebanen (oppgave 2e) 5

Oppgaven a) Skriv innmaten til funksjonen void nytt_fly() Først spørres det etter flyets flightnummer. Dette består av to bokstaver og tre tall, alt skrevet som en tekst på fem tegn. Dette trenger du ikke å sjekke at er korrekt. Deretter opprettes et nytt fly-objekt, og dette legges inn i landingskøen. b) Skriv innmaten til funksjonen void landing() Om landingskøen er tom, så kommer det en melding om det. Om det allerede befinner seg et fly på rullebanen, så kommer det også en melding. I motsatt fall så flyttes det første flyet fra landingskøen til rullebanen. Det markeres at dette flyet er på vei ned og flyets flightnummer (ved å tilkalle dets display -funksjon) vises på skjermen. c) Skriv innmaten til funksjonen void klar_til_avgang() Først leses det inn et gatenummer. Sjekk at dette er i det lovlige/aktuelle indeksintervallet. Dersom det ikke befinner seg et fly på dette gatenummeret (array-skuffen peker til NULL), så gis en melding om det. Ellers plasseres flyet i avgangskøen. Om gate-køen er tom, så nullstilles den aktuelle array-skuffen. Om gate-køen ikke er tom, så flyttes det første flyet fra denne køen inn i den forlatte gaten. Dataene om dette flyet skrives så på skjermen. d) Skriv innmaten til funksjonen void rullebanen() Om rullebanen er tom, så kommer en melding om det. Om flyet på rullebanen er på vei opp, så skrives dets data og det slettes fra hukommelsen. Om det derimot er på vei ned, så blir det prøvd å finne en ledig gate (vha. funksjonen finn_ledig_gate ). Om en slik finnes, så plasseres flyet i den ledige gaten og dets nummer skrives til skjermen. Om det ikke finnes en ledig gate, så plasseres flyet i gate-køen. Siden flyet i alle fall har forlatt rullebanen (enten slettes eller flyttes til en gate/gate-køen), så nullstilles alle variable som representerer at det er noe fly på rullebanen. e) Skriv innmaten til funksjonen void display_ko() Først leses et tall i intervallet 0-4. Av funksjonen skriv_meny i vedlegget ser du hva som skal vises/displayes ved de ulike tall-valgene. Ved tallvalg 0 skal det komme en melding om rullebanen er tom. Ellers fortelles det om flyet er på vei opp eller ned, og dets data vises. Ved tallvalg 1 til 3 så vises dataene om alle flyene i vedkommende liste. Ved tallvalg 4 gås det gjennom alle gatene. For hver gate skrives det om den er ledig/tom eller at dataene om flyet som står der vises på skjermen. 6

Annet (klargjørende?): Du skal bruke LISTTOOL ved løsning av denne oppgaven. Alle const er, enum er, klasser, klasse-innmat og globale variable du trenger er allerede ferdig definert. Du trenger altså ikke definere flere slike, men bare bruke disse når du lager funksjonenes innmat. I denne oppgaven er det gjort mange forenklinger ift. den reelle situasjonen på en flyplass. Dette gjelder bl.a: Hvert fly har et flightnummer som de beholder hele tiden. I det reelle skifter de flightnummer når de legger ut på en ny tur, ofte til en annen flyplass enn der flyet sist kom fra. Vi forutsetter at det ikke er noe tidstap ifm. at et fly skifter fra en kø/gate til en annen kø/gate. Selvsagt bruker flyet også tid på å taxe rundt mellom de ulike fysiske stedene, men dette ser vi her totalt bort fra. Flyene står ikke linet opp etter hverandre som en FIFO-kø klar til landing/avgang eller i gate-kø, men for programmet befinner de seg i en logisk FIFO-kø. Pilotene får sine ordrer via radio fra flygelederne. Flygeledernes beskjeder er bl.a. basert på output fra programmet. Vi har helt utelatt andre data om hver flight, som: flyets unike nummer, hvilket flyselskap (som SAS, Braathen, Aeroflot) det tilhører, flyets type (som DC-10, Boing 757, Dash-8) og hvor det kommer fra/skal til, og planlagt landings- og avgangstidspunkt. Vi forutsetter at det er plass til de tre listene og arrayen i datamaskinens primærhukommelse. Vi forutsetter dessuten at strømbrudd aldri skjer, siden det ikke er en del av denne oppgaven å skrive til/lese fra fil. (Dette er skikkelig elendig sikkerhet, det!! Spørs hva Luftfartsverket hadde sagt om programmet vårt.) 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 flight! frode@haug.com 7

Vedlegg: Halvferdig programkode #include <iostream> // cout, cin #include <cstring> // strcpy #include "listtool.h" // Ulike "verktøy" fra "Listtool". using namespace std; // CONST: const int FN_LEN = 5; const int MAX_GATER = 20; enum Status { tomt, ned, opp ; // Max. lengde for flightnummer. // Max. antall gater på flyplassen. // Status for flyet på rullebanen. // KLASSE: class Fly : public Element { private: char flightnr[fn_len+1]; public: Fly(char* fn) { strcpy(flightnr, fn); void display() { cout << "\n\t\tflightnr: " << flightnr; ; // GLOBALE VARIABLE: List* landings_ko; // Listen (FIFO) av fly som skal lande (FIFO). List* avgangs_ko; // Listen (FIFO) av fly som skal ta av. List* gate_ko; // Listen (FIFO) av fly som venter på ledig gate. Fly* gate[max_gater+1]; // Array med flyene som er i de ulike gatene. Fly* paa_rullebanen = NULL; // Peker til flyet på rullebanen. Status opp_ned = tomt; // Flyet på rullebanen er på vei opp/ned. void skriv_meny(); char les(); void nytt_fly(); void landing(); void avgang(); void klar_til_avgang(); void rullebanen(); void display_ko(); int finn_ledig_gate(); // DEKLARASJON AV FUNKSJONER: int main() { char kommando; // HOVEDPROGRAMMET: landings_ko = new List(FIFO); avgangs_ko = new List(FIFO); gate_ko = new List(FIFO); // Oppretter de tre tomme FIFO-listene/køene: skriv_meny(); kommando = les(); while (kommando!= 'Q') { switch(kommando) { case 'n': nytt_fly(); break; // Oppgave 2a case 'l': landing(); break; // Oppgave 2b case 'a': avgang(); break; // Skal ikke lages! case 'k': klar_til_avgang(); break; // Oppgave 2c case 'r': rullebanen(); break; // Oppgave 2d case 'd': display_ko(); break; // Oppgave 2e default: skriv_meny(); break; kommando = les(); return 0; 8

// DEFINISJON AV FUNKSJONER: void skriv_meny() { cout << "Følgende kommandoer er lovlig:"; cout << "\n\tn - Nytt fly kommer for å lande."; cout << "\n\tl - Fly Lander på rullebanen."; cout << "\n\ta - Fly i Avgang på rullebanen."; cout << "\n\tk - Fly har meldt at 'Klar til avgang'."; cout << "\n\tr - Flyet på Rullebanen kjører til gate eller slettes."; cout << "\n\td 0 - Displayer evnt.fly på rullebanen."; cout << "\n\td 1 - Displayer landingskøen."; cout << "\n\td 2 - Displayer avgangskøen."; cout << "\n\td 3 - Displayer gatekøen."; cout << "\n\td 4 - Displayer flyene ved/i gatene."; cout << "\n\tq - Quit / avslutt"; char les() { // Leser og returnerer ETT upcaset tegn. char kommando; cout << "\n\nkommando: "; cin >> kommando; cin.ignore(); return (kommando); int finn_ledig_gate() { for (int i = 1; i <= MAX_GATER; i++) if (gate[i] == NULL) return i; return 0; // Går gjennom hele gate-arrayen: // Funnet en ledig gate/nummer. // Ingen gate ledig. void nytt_fly() { // Oppgave 2a: Skriv innmaten // Nytt fly-objekt opprettes: void landing() { // Oppgave 2b: Skriv innmaten // Et fly kan(?) lande på rullebanen: void avgang() { // Et fly kan(?) ta av fra rullebanen: // Innmaten skal IKKE lages!!! (Den blir veldig lik den i "void landing()".) void klar_til_avgang() { // Oppgave 2c: Skriv innmaten // Fly flyttes fra gate til avgangskø: void rullebanen() { // Oppgave 2d: Skriv innmaten // Fly flyttes fra rullebane til gate(kø): // eller slettes fra programmet/memory: void display_ko() { // Oppgave 2e: Skriv innmaten // Viser innoldet i ulike "køer": 9