DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004



Relaterede dokumenter
Skriftlig eksamen i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

DM507 Algoritmer og datastrukturer

Minimum udspændende Træer (MST)

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Skriftlig eksamen i Datalogi

Kursus navn: Indledende programmering Kursus nr

Minimum udspændende Træer (MST)

BRP Kursusintroduktion og Java-oversigt

Løsning af møntproblemet

DM02 opgaver ugeseddel 2

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DM507 Algoritmer og datastrukturer

MARINE COMMANDER 3000

Mindste udspændende træ

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

DM507 Algoritmer og datastrukturer

Matematik C. Højere forberedelseseksamen

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Varmeligningen og cosinuspolynomier.

Løsning af skyline-problemet

A Profile for Safety Critical Java

Om binære søgetræer i Java

Abstrakte datatyper C#-version

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Oversættere / Datalogi 1E

Skriftlig prøve i matematik 4

Grafer og grafalgoritmer

Klasser og nedarvning

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E

Grafer og grafalgoritmer

Til 2hf ang. den større skriftlig opgave

Matematik B. Højere forberedelseseksamen

Matematik C. Højere forberedelseseksamen

17 Søgning og Søgetræer.

Eksamens- og prøvereglement HF og HFe 2015/2016

Til 2hf ang. den større skriftlig opgave

Matematik C. Højere forberedelseseksamen

DMG Bachelor Maj/Juni 2002

Software Construction 1 semester (SWC) Spørgsmål 1

Matematik A. Højere handelseksamen. 1. Delprøve, uden hjælpemidler. Mandag den 20. december kl

Eksamen og årsprøver i gymnasiet Til 1g Herlev Gymnasium og HF 2014

i x-aksens retning, så fås ). Forskriften for g fås altså ved i forskriften for f at udskifte alle forekomster af x med x x 0

fs10 1 Rejsen til New York 2 Fra fahrenheit til celsius 3 Højde og vægt 4 Sukkerroer 5 Afstand til en båd 6 Regulær ottekant Matematik

Eksempel på en database: studenter, kurser, eksamener

Matematik C. Højere forberedelseseksamen

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Ugeseddel 4 1. marts - 8. marts

Skriftlig Eksamen Algoritmer og Sandsynlighed (DM538)

Fortegnelse over stjålne smykker Beskrivelse af guld og sølv med stykværdi over kr.

Opgaveløsninger til eksamensopgaver. Opgavesæt 07

Transkript:

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