Københavns Universitet bacheloruddannelsen i datalogi side 1 af 6 DATALOGI 0GB Skriftlig eksamen tirsdag den 6. januar 2004 Dette opgavesæt består af 6 nummererede sider. Eksamensdeltagerne bør straks sikre sig, at sættet er komplet. Sættet består af 4 opgaver. Ved hver opgave og hvert delspørgsmål angives et minuttal, og normalt indgår spørgsmålene i bedømmelsen med disse vægte. I tilfælde af fejl eller unøjagtigheder i opgaveteksten forventes det, at eksaminanden selv præciserer besvarelsens forudsætninger. Alle sædvanlige hjælpemidler, bortset fra lommeregner og datamaskine og enhver form for kommunikationsmidler, er tilladt. Det er tilladt at skrive med blyant. Det er tilladt at overstrege. Der gives ikke ordenskarakter; dog skal det være læseligt for at kunne bedømmes. Det er tilladt at besvare spørgsmålene på dansk eller på engelsk. You may answer the questions in English. Opgavesættet besvares på separate ark, der udleveres af eksamenstilsynet. Trykningen Un 02,208-10 af visse af disse ark rummer tre stavefejl: Eksamens nr. skal være Eksamensnr. Kursus navn skal være Kursusnavn sidenummeres skal være sidenummereres Opgaveteksten kan deltagerne tage med sig.
Skriftlig eksamen tirsdag den 6. januar 2004 i Datalogi 0GB side 2 af 6 Opgave 1 Iteratorer i Java (36 minutter) Denne opgave drejer sig om at skrive en ny iterator klasse til vedlagte Javaprogram (se side 4). Programmet implementerer en kø. Spørgsmål 1.1 Ny iterator (36 minutter) Skriv en ny iterator klasse OddEvenIterator til det vedlagte Javaprogram. Iteratoren skal gå gennem køen således, at det første element i køen returnes først, herefter det tredie element, herefter det femte element, ovs., indtil der ikke er flere elementer med ulige nummer. Derefter skal iteratoreren returnere det andet element i køen, herefter det fjerde, og så videre med alle de lige elementer, indtil der ikke er flere elementer. Har køen fx syv elementer, så vil de blive returneret i følgende rækkefølge: 1., 3., 5., 7., 2., 4., 6. Udfyld CreateIterator() metoden, så den på passende måde opretter et objekt af din interatorklasse. Opgave 2 Grafer og Kruskals algoritme (40 minutter) Denne opgave drejer sig om grafer og grafalgoritmer. Nedenfor er angivet en orienteret, kantvægtet graf (eng. directed, edge-weighted graph). Knuderne er navngivne med enkeltbogstaver. Kanterne er navngivne med et navn bestående af to bogstaver, nemlig bogstaverne for endepunkterne og hvor det første bogstav angiver kantens startpunkt og det andet bogstav angiver kantens slutpunkt. Kanterne med vægte er: (AB, 1), (BC, 2), (AD, 1), (DB, 1), (BE, 2), (BF, 1), (CF, 2), (DE, 1), (EF, 2), (DG, 1), (EH, 2), (FI, 1), (GH, 2), (HI, 1) Spørgsmål 2.1 (6 minutter) Tegn grafen. Vink: Tegn først de 9 knuder i en 3 gange 3 opstilling. Spørgsmål 2.2 (8 minutter) Opstil en såkaldt adjacency matrix for grafen. Grafens knuder skal stå i alfabetisk orden. Matrisens enkelte elementer skal indeholde enten en kantvægt (hvis kanten findes) eller også efterlades blank (hvis kanten ikke findes). Spørgsmål 2.3 (6 minutter) Angiv knudernes rækkefølge ved et dybde-først gennemløb af grafen startende i knude A. Er der i forbindelse med gennemløbet flere valgmuligheder, da vælges den alfabetisk første. Spørgsmål 2.4 (18 minutter) Betragt nu grafen som en ikke-orienteret, kantvægtet graf. Vis udledningen af et mindste udspændende træ ( Minimum Spanning Tree ) for grafen ved hjælp af Kruskals algoritme. Hvis der undervejs opstår valgmuligheder mellem flere kanter, vælges den alfabetisk første udfra kantens navn. Som svar ønskes angivet den samlede vægt af træet og for hver gang algoritmen tilføjer en ny kant, da skal den hidtidige opbyggede partielle graf tegnes. Spørgsmål 2.5 (2 minutter) Er løsningen unik? Begrund kort.
Skriftlig eksamen tirsdag den 6. januar 2004 i Datalogi 0GB side 3 af 6 Opgave 3 BubbleDropSortering (26 minutter) Denne opgave drejer sig om sortering. En velkendt algoritme til sortering er bubblesort, som virker ved at det største element, som endnu ikke er på plads, bobler op til dets plads ved hvert gennemløb. Spørgsmål 3.1 Skriv en sorteringsrutine (22 minutter) Du skal skrive en Javametode. Den skal sortere ligesom bubblesort, men som ved de lige gennemløb (dvs. andet, fjerde, sjette, ovs. gennemløb) bobler den anden vej, dvs. starter i den anden ende af det array, som skal sorteres. Vink: tag udgangspunkt i vedlagte klasse bubblesort (på side 5), som er taget fra noterne. Spørgsmål 3.2 Tidskompleksitet (4 minutter) Hvad er din sorteringsalgoritmens tidskompleksitet? Begrund kort. Opgave 4 Arv og typer i Java (18 minutter) Denne opgave drejer sig om arv og typer i Java og tager udgangspunkt i de på side 6 vedlagte Java programstumper. Spørgsmål 1.1 Gennemløb (6 minutter) Tegn arvehierarkiet for klasserne (undtagen klassen arv204) som et generalization diagram. Spørgsmål 1.2 Tilladte tildelinger (12 minutter) Hvilke af de 10 tildelinger mærket med punkt 1 10 er ikke tilladte? Angiv en kort begrundelse for dit svar for de tildelinger, der ikke er tilladte.
Skriftlig eksamen tirsdag den 6. januar 2004 i Datalogi 0GB side 4 af 6 public class IIntQueue implements IIntQueueI { int[] content; int first, last, count, size; // last: empty slot at end of queue // first: front of queue // count: number of entries in queue // Invariant: last == (first + count) % size public final int InitialSize = 4; class OddEvenIterator /* her skal indsættes noget */ public IIntQueue() { size = InitialSize; content = new int[size]; first = 0; last = 0; count = 0; public IntQueueIteratorI CreateIterator() { /* Her skal indsættes noget */ private void resize(int newsize) { int[] newcontent; if (newsize <= size) return; // ignore downsize requests. newcontent = new int[newsize]; for (int i = 0; i < count ; ++i){ newcontent[i] = content[(first+i) % size]; size = newsize; content = newcontent; first = 0; last = count; public void insert(int newelement) { if (count >= size-2) resize(2*size); content[last] = newelement; last = (last + 1) % size; ++count; public int remove() { int oldfirst = first; first = (first+1) % size; --count; return content[oldfirst]; public boolean empty() {return first == last;
Skriftlig eksamen tirsdag den 6. januar 2004 i Datalogi 0GB side 5 af 6 class bubblesort { public static void bsortint(int[] A) { int i, j, temp, lastindex; lastindex = A.length - 1; for (i = 1; i <= A.length; ++i) { // For each of the A.length passes for (j = 0; j < lastindex; ++j) { // Check order and exchange, if necessary. if (A[j] > A[j+1]) { temp = A[j]; A[j] = A[j+1]; A[j+1] = temp;
Skriftlig eksamen tirsdag den 6. januar 2004 i Datalogi 0GB side 6 af 6 class arv204 { public interface aircrafti { public void numberofwings(); public interface powerplanei extends aircrafti { public void enginecount(); public interface glideri extends aircrafti { public void glideratio(); class aircraft { public void numberofwings(){; class powerplane extends aircraft implements powerplanei { public void enginecount(){; class glider extends aircraft implements glideri { public void glideratio(){; class jetplane extends powerplane { public void jetfueltype(){; public void tryit() { Object x; aircrafti ai; powerplanei pi; glideri gi; powerplane p; glider g; jetplane j; j = new jetplane(); // punkt 1 x = j; // punkt 2 p = j; // punkt 3 j = p; // punkt 4 pi = j; // punkt 5 ai = j; // punkt 6 g = j; // punkt 7 gi = new glider(); // punkt 8 ai = new aircraft(); // punkt 9 pi = new jetplane(); // punkt 10