Skriftlig eksamen i Datalogi



Relaterede dokumenter
Vejledende løsninger

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi

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

DANMARKS TEKNISKE UNIVERSITET

Skriftlig eksamen i Datalogi

BRP Kursusintroduktion og Java-oversigt

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

Kursus navn: Indledende programmering Kursus nr

MM4. Algoritmiske grundprincipper. Lister, stakke og køer. Hash-tabeller og Træer. Sortering. Søgning.

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Abstrakte datatyper C#-version

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

DM507 Algoritmer og datastrukturer

Tree klassen fra sidste forelæsning

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

BOSK F2011, 1. del: Udsagnslogik

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

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

17 Søgning og Søgetræer.

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET

Parallelle algoritmer

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

18 Multivejstræer og B-træer.

JavaScript. nedarvning.

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

DM02 opgaver ugeseddel 2

DM507 Algoritmer og datastrukturer

Mindste udspændende træ

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering af information er en fundamental og central opgave.

Om binære søgetræer i Java

Kursusarbejde 3 Grundlæggende Programmering

Sortering. Eksempel: De n tal i sorteret orden

DM507 Algoritmer og datastrukturer

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Løsning af møntproblemet

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Eksempel: Skat i år 2000

DM507 Algoritmer og datastrukturer

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Forelæsning Uge 6 Mandag

Hashing og hashtabeller

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

DM507 Algoritmer og datastrukturer

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

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

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Parallelle algoritmer

Algoritmer og Datastrukturer 1

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Ugeseddel 4 1. marts - 8. marts

Løsning af skyline-problemet

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Statistiksøgning. Kom godt i gang med: EG Data Inform A/S. Lautrupvang Ballerup. Dusager Aarhus N. Albert Ginges Vej Hjørring

Hanne Niels Edith Harald Carsten Jørgen Henrik.

Kom i gang-opgaver til differentialregning

Forelæsning Uge 1 Torsdag

Forelæsning Uge 5 Mandag

Programmering for begyndere Lektion 2. Opsamling mm

Forelæsning Uge 5 Mandag

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

public Set(int size) { this.listelement = new LinkedList<Integer>(); }

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

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

Klasser og nedarvning

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

SWC eksamens-spørgsmål. Oversigt

Opgave 2 è20èè Det er velkendt, at f lgende algoritme er gyldig og korrekt. Algoritme: Heltalskvadratr Stimulans: n: nç0 Respons: r: r 2 ç n é èr +1è

DATALOGI 0GB. Skriftlig eksamen mandag den 7. juni 2004

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Dynamisk programmering

DM507 Algoritmer og datastrukturer

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Forelæsning Uge 5 Mandag

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Videregående Programmering for Diplom-E Noter

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Lectio. Overgang til Lectio Eksamensmodul. MaCom A/S Vesterbrogade 48, København V Telefon:

3 Algebraisk Specifikation af Abstrakte Datatyper.

Dynamisk programmering

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Rekursion og dynamisk programmering

Transkript:

Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2 10% Opgave 3 15% Opgave 4 20% Opgave 5 20% Opgave 6 30% Alle sædvanlige hjælpemidler er tilladt. I tilfælde af unøjagtigheder i opgaveteksterne forventes det, at deltagerne selv præciserer besvarelsernes forudsætninger. Opgavesættet består af en forside og 8 paginerede sider. Kontroller at din kopi er fuldstændig.

Roskilde Universitetscenter side 2 af 9 sider Opgave 1: Ombytning (5%) Det er velkendt, at værdierne for to heltalsvariable a og b kan ombyttes ved hjælp af koden int temp = a; a = b; b = temp; Spørgsmål 1.1 Vis at denne ombytning kan foretages uden brug af hjælpevariable. (Vink: brug addition og/eller subtraktion). Opgave 2: Grafer (10%) Betragt nedenstående vægtede graf. A 33 B 10 56 13 21 C 23 D 51 E 24 65 20 17 35 F G H 40 99 72 45 42 38 I 83 J Spørgsmål 2.1 Angiv et mininimalt udspændende træ for grafen. Spørgsmål 2.2 Angiv et korteste-vej-træ, der har knude A som rod.

Roskilde Universitetscenter side 3 af 9 sider Opgave 3: Rød-sort-træer (15%) Betragt nedenstående rød-sort-træ. 20 10 30 2 15 25 35 8 11 18 40 Sorte grene er markeret med, røde med. Spørgsmål 3.1 Argumenter for at træet er et rød-sort-træ. Spørgsmål 3.2 Tegn et tilsvarende 2-3-4-træ. Spørgsmål 3.3 Tegn det rød-sort-træ, der fremkommer ved i rød-sort-træet ovenfor at indsætte nøglen 13.

Roskilde Universitetscenter side 4 af 9 sider Opgave 4: Sortering (20%) En mekaniker har N møtrikker af forskellig størrelse og N bolte, der passer til møtrikkerne. Hans opgave er for hver møtrik at finde den bolt, der passer til møtrikken. Han kan sammenligne en møtrik med en bolt (ved at forsøge at skrue dem sammen) og dermed fastslå, om bolten er for stor, for lille, eller passer præcist med møtrikken. Men han har ingen mulighed for hverken at sammenligne to bolte eller to møtrikker. Vi kan løse mekanikerens opgave, hvis vi kan sortere såvel møtrikker som bolte efter deres størrelse. Efter sorteringen vil den første møtrik svare til den første bolt, den anden møtrik til den anden bolt, o.s.v. Men hvorledes skal vi f.eks. sortere møtrikkerne, når vi ikke må sammenligne dem indbyrdes? På næste side er skitseret en mulig løsning i Java. I klassen Nuts_and_Bolts angiver tabellerne bolt og nut henholdsvis mængden af bolte (objekter af klassen Bolt) og mængden af møtrikker (objekter af klassen Nut). Den centrale algoritme er programmeret i metoden sort_nuts_and_bolts. Metoden benytter sortering ved udvælgelse. I hvert skridt bestemmes enten den mindste møtrik eller den mindste bolt blandt de endnu ikke ordnede møtrikker og bolte. Hvis den mindste bolt blev bestemt, findes den tilsvarende møtrik. Hvis den mindste møtrik blev bestemt, findes den tilsvarende bolt. Dernæst placeres den fundne møtrik og bolt efter alle hidtil ordnede møtrikker og bolte. Således fortsættes, indtil begge tabeller er ordnet. Sammenligninger foretages ved hjælp af metoden compareto. Metoden returnerer 1, 0 eller 1, alt efter om en given bolt (møtrik) er mindre end, lig eller større end en given møtrik (bolt). Spørgsmål 4.1 Færdigprogrammér metoden compareto i klassen Nut. Spørgsmål 4.2 Færdigprogrammér metoden sort_nuts_and_bolts.

Roskilde Universitetscenter side 5 af 9 sider abstract class Element { abstract int compareto(element e); int id; float size; class Bolt extends Element { Bolt(int i, float s) { id = i; size = s; public int compareto(element e) { Nut n = (Nut) e; return size < n.size? -1 : (size > n.size? 1 : 0); class Nut extends Element { Nut(int i, float s) { id = i; size = s; public int compareto(element e) { /* A: indsæt kode her (spørgsmål 4.1) */ class Nuts_and_Bolts { Bolt bolt[]; Nut nut[]; int N; void swap(element a[], int i, int j) { Element t = a[i]; a[i] = a[j]; a[j] = t; void sort_nuts_and_bolts() { for (int i = 0; i < N; i++) { int n = i, b = i; while (n < N && b < N) if (nut[n].compareto(bolt[b]) <= 0) { /* B: indsæt kode her (spørgsmål 4.2) */ else { /* C: indsæt kode her (spørgsmål 4.2) */ if (n == N) { /* D: indsæt kode her (spørgsmål 4.2) */ else { /* E: indsæt kode her (spørgsmål 4.2) */ swap(bolt, i, b); swap(nut, i, n);

Roskilde Universitetscenter side 6 af 9 sider En hurtigere algoritme kan opnås ved at benytte følgende variant af quicksort: Udtag en bolt, b, og sammenlign den med alle møtrikkerne. Find den møtrik, n, der passer til b. Opdel derefter problemet i to, hvor det ene omfatter alle møtrikker, der er mindre end b, og alle bolte, der er mindre end n, mens det andet omfatter alle møtrikker, der er større end b, og alle bolte, der er større end n. Løs derefter disse to problemer på samme måde (rekursivt). Nedenfor er skitseret en mulig implementering af denne algoritme i form metoderne partition og quicksort_nuts_and_bolts. int partition(element e[], Element pivot, int left, int right) { int i = left, j = right; while (true) { /* F: indsæt kode her (spørgsmål 4.3) */ if (i == j) return i; swap(e, i, j); void quicksort_nuts_and_bolts() { quicksort_nuts_and_bolts(0, N-1); void quicksort_nuts_and_bolts(int left, int right) { if (left < right) { Bolt b = bolt[(left + right)/2]; int i = left; while (nut[i].compareto(b)!= 0) i++; Nut n = nut[i]; /* G: indsæt kode her (spørgsmål 4.4) */ Spørgsmål 4.3 Færdigprogrammér metoden partition. Spørgsmål 4.4 Færdigprogrammér metoden quicksort_nuts_and_bolts.

Roskilde Universitetscenter side 7 af 9 sider Opgave 5: Objektorienteret programmering (20%) Til en studenterdatabase skal der bruges en repræsentation af eksamensresultater. I første omgang antager vi alle eksamener bedømt efter 13-skalaen. Den første skabelon til klassen er class Karakter { int karakter; Spørgsmål 5.1 Vi ønsker at gøre feltet karakter privat (private) og tildele det en værdi i en konstruktor. Skriv en sådan konstruktor, der kaldes med en heltalsværdi. Karakter(int k){... Spørgsmål 5.2 Skriv en metode lovlig, der returnerer sand (true) hvis tallet i feltet karakter er en lovlig karakter efter 13-skalaen. Spørgsmål 5.3 Skriv en metode tostring som returnerer karakteren som tekststreng. Der skal bruges foranstillet 0 for karaktererne 00 og 03. Spørgsmål 5.4 Skriv en konstruktor som kaldes med en karakter som teksstreng. Karakter(String k){... Konstruktoren skal også forstå karaktererne 00 og 03. Spørgsmål 5.5 Skriv en konstruktor som kaldes med en karakter som Karakter objekt. Karakter(Karakter k){... Et kald af konstruktoren laver altså en kopi af et Karakter objekt. Spørgsmål 5.6 Skriv en metode haev, som hæver karakteren en plads i tretten skalaen. Metoden skal ikke have nogen effekt ved et tretten tal. For 00, 03 og 11 er de respektive nye værdier 03, 5 og 13. Spørgsmål 5.7 Tilføj en variant af metoden haev som har en ekstra parameter, der angiver hvor mange pladser karakteren skal hæves. void haev(int k){... Skriv metoden så den ikke direkte ændrer i feltet karakter men i stedet benytter metoden skrevet i spørgsmål 5.6.

Roskilde Universitetscenter side 8 af 9 sider Opgave 6: Objektorienteret programmering (30%) Studenterdatabasen skal nu udvides så der også kan gemmes resultater bedømt efter bestået/ikke bestået. interface Resultat{ class Karakter implements Resultat{ int karakter; class Bestaaet implements Resultat{ boolean ok; Det kan her antages at felterne er synlige uden for klasserne. Spørgsmål 6.1 Tilføj en konstruktor til klassen Bestaaet og lad den initialisere feltet ok. Bestaaet(boolean ok){... Spørgsmål 6.2 Tilføj en metode tostring til klassen Bestaaet. Metoden skal returnere Bestået eller Ikke bestået afhængig af om feltet i klassen har en sand eller falsk værdi. Spørgsmål 6.3 Objekter, der implementerer interface Resultat ønskes at implementere en metode erbestaaet der returnerer en logisk værdi. Tilføj en skabelon for metoden (en abstrakt erklæring af metoden) til interface Resultat og implementationer af metoden til klasserne Karakter og Bestaaet. En karakter efter 13-skalaen er bestået hvis karakteren er mindst 6. Spørgsmål 6.4 Lad der være defineret en tabel med resultater fra en eksamen. Resultat[] tabel; Det kan antages at hverken tabel eller noget element i tabel har værdien null. Skriv en kodestump der udregner hvor mange der er bestået. Spørgsmål 6.5 Skriv en kodestump der udregner hvor mange fra eksamenen som er bedømt med karakter. Spørgsmål 6.6 Skriv en kodestump der udregner gennemsnittet af karaktererne for de der er bedømt med karakter.

Roskilde Universitetscenter side 9 af 9 sider Spørgsmål 6.7 Der ønskes konstrueret en klasse til en studerendes eksamensbevis. Udgangspunktet er følgende abstrakte klasse. abstract class Bevis{ abstract void tilfoej(resultat k); Konstruer en konkret klasse EksamensBevis der er en udvidelse af Bevis. Klassen skal indeholde en metode tilfoej der gemmer resultater i en intern struktur. Det er tilladt at antage en øvre grænse for hvormange eksamensresultater der kan tilføjes. Spørgsmål 6.8 Der ønskes tilføjet en metode studentok til klassen EksamensBevis. Metoden skal returnerer sand (true) hvis bevisets eksamensresulteter med karakter opfylder følgende betingelse: Summen af de to laveste karakterer og gennemsnittet af de øvrige karakterer skal være mindst 13. Såfremt betingelsen ikke er opfyldt eller der ikke er mindst tre resultater med karakter skal metoden returnere falsk (false).