Den eigentlege historia om [tøft bilde med ein stengt dør der det står gang til kjelhuset og adgang forbudt ] Tunnellen til Kjelbygget Øvingar i programmering, hausten 2002 Dette kompendiet inneheld alle øvingar i sif8020, algoritmer og datastrukturar. Øvingane er vevd saman i historia om privatdetektiven Hallgrim Berg og tunnelen til Kjelhuset. Det er lagd slik at dei som vil kan hoppe over historia (i kursiv) og gå rett på øvingane. Dei første øvingane er meint for å lære programmeringsteknikkar og grunnleggjande begrep i faget. Etter kvart blir det vanskelegare å finne algoritma som ein må bruke. Det vil ofte vere muleg med ulike løysningar, der nokre har lågare tidskompleksitet enn andre. Øving 1... side 2 Øving 2... side 3
Hallgrim Berg går lydlaust opp dei bratte bakkane frå samfunnet mot gløshaugen. To faklar lyser opp dei kalde, steinkledde tårna og det kan sjå ut som om ondskapen sjølv held til der. Han snik seg forsiktig inn den altfor store døra, går ned ei trapp og følgjer gangane innover. Om litt kjem han til tunellen, helser til vakta, og går vidare inn og ned mot sjølve kjernen i gløshaugen. Med eit høyrer han ein lyd og skvett til. - Nei det er ikkje på grunn av ditt mot du har blitt kalla inn, Halgrim. Heller ikkje din klokskap for den saks skyld. Det vi treng er diskresjon, og der er du i ein eigen klasse. Dei går inn i eit lite rom og smett døra igjen. - Det er altså eg som formelt har ansvaret for dette universitetet. Fram til nå har eg kunna drive med mine eigne ting her nede, utan å bli forstyrra av omverda. Men for sju dagar sidan blei idyllen brutt. Ein studentrepresentant blei drept. I byrjinga tok alle det roleg, men etter kvart har det svirra rykter om underjordiske monstre og det som verre er. Nokre vil ha det til at det er sjølvaste reformen som har tatt han av dage. Hallgrim tek fram og tenner ein sigar. - Hadde han nokre fiendar?. - Nei, det er det som skremmer oss slik. Han har aldri gjort ei flue fortredt. - Det må da ha vore nokon som var ueinige med det han stod for?. - Nei, han hadde aldri eigne meiningar. - Då kjem vi ingen veg her. La oss gå og sjå kor han held til.
Studentrepresentantane held til i det eine sentralbygget. Det er eit svært høgt, men samtidig smalt bygg. I kvar etasje er det kun eitt lite kontor, kor ein student held til. Hallgrim går til ingangen i første etasje. Det første han tenker er at representanten med flest tillitsverv kan ha gjort det av frykt for konkurranse. Men det kan like godt vere representanten med færrast tillitsverv som har gjort det av misunning. Øving 1: Lenka liste (Øvinga referer til figuren ovanfor. Den skal gje korrekt svar for dette eksempelet, men også for alle generelle tilfelle. Effektivitet er ikkje vesentleg i desse første øvingane) Rammeverket består av den ferdige klassen Etasje og den uferdige Hallgrim1. Klassen Etasje har metoden trappopp(), som returnerer etasjen ovanfor. Den har også metodane navn() og tillitsverv() som returnerer navnet og antall tillitsverv til studenten som held til i etasjen. Klassen Hallgrim1 har den ferdige metoden main(string args[]) som les ei fil frå disk og lagar ei lenka liste. Metoden main kaller også metoden traverser(etasje). Øvinga går ut på å forstå kva ei lenka liste er, korleis den er bygd opp og korleis ein kan traversere den. Ver sikker på at du forstår klassen Etasje. Du skal også lage metoden traverser(etasje). Den får inn rota til ei lenka liste. Metoden skal skal skrive to linjer på skjermen: 1.linje: Navnet på studenten med færrast tillitsverv. 2.linje: Navnet på studenten med flest tillitsverv. Dersom traverser blir kalla med nederste etasje i figuren ovanfor som parameter, skal den altså skrive: Fila med klassen Hallgrim1 skal leverast elektronisk på øvingssida til faget. Bruk stud.assane til å forstå kva som skal gjerast, ikkje for å få løysninga. Hallgrim er svært nøgd. Etter nokre få timar med snoking har han allereie to hovudmistenkte, og det skal ikkje ta lang tid før ein av dei sit i buret. Domfelling baserer seg mest på rykter og indisier her i undergrunnen. Dei kan ikkje kreve at sanninga skal fram i lyset når livet ellers utartar seg i stummande mørke. Alt Hallgrim treng no er ein teori og nokre indisier. For ein privatdetektiv som har lest hundrevis av kriminalromanar går den delen greit. Etter eit par minutt er teorien klar. Eit nytt besøk til rektor er på sin plass. Rektor sit som vanleg nedgravd i sine eigne saker og blir tydelig irritert av besøket. - Kva er det så du vil?. - Eg har funne mordaren, det er Loke. Han har berre eitt tillitsverv; sit i styret for Tapir Mat. Han følte seg så nedverdiga av dette at misunninga tok overhand.
Hallgrim veit han burde vore litt mindre skråsikker, men med berre to mistenkte er det tross alt femti prosent sjanse for å ha rett. - Tull, Loke er så nøgd som ein student kan bli. Heilt frå første skoledag har han gått og sikla rundt sjokoladehyllene på Tapir. Sjokolade er livet for Loke, og på Tapir har han funne sine likesinna. Han er altfor lukkeleg til å drepe nokon. - Eg forstår. Unnskyld bryet. Då skal eg straks vere tilbake med ein ny mordar. - Kom ikkje for snart då, og husk: absolutt diskresjon. Det går ikkje lang tid før ein ny teori er klar, og denne gongen er det Tor som er mordaren: Tor har følt han har mista grepet som studentkongen. Den siste veka før mordet hadde han svært få møte her nede i grotta. Frykten for å miste trona fekk blodet til å koke, og med iskald presisjon stakk han ned konkurrenten. Denne gongen vil Hallgrim likevel ha konkrete bevis før han går til rektoren. Nokre tall og reknestykke er bra for å underbyggje teorien. Han vil derfor gå innom alle rom i grotta og finne ut kor mange møte Tor deltok på i veka før mordet. Oversikt over grotta med antall møter Tor har deltatt på. Øving 2: søking i trestruktur (Øvinga referer til figuren ovanfor. Den skal gje korrekt svar for dette eksempelet, men også for alle generelle tilfelle. Effektivitet er ikkje vesentleg i desse første øvingane)
Rammeverket består av den ferdige klassen Rom og den uferdige klassen Hallgrim2. Klassen Rom har metoden gangvidare() som returnerer ein array med romma som ligg innanfor. Den har også metoden antallmoter() som returner antall møter Hallgrim har deltatt på i rommet. Klassen Hallgrim2 har den ferdige metoden main(string args[]) som les ei fil frå disk og lager ein trestruktur. Metoden main kaller også metoden traverser(rom). Øvinga går ut på å forstå kva ein trestruktur er, korleis den er bygd opp og korleis ein kan traversere den. Du må forstå korleis noder og kantar i trestrukturen er representert i implementasjonen. Ver sikker på at du forstår klassen Rom. Du skal også lage metoden traverser(rom). Den skal ta eit Rom som parameter og returnere antall møter i dette rommet og alle rom innanfor. Dersom traverser blir kalla med rommet Folkeskikk og manerer skal den altså returnere (Se figuren ovanfor). Fila med klassen Hallgrim2 skal leverast elektronisk på øvingssida til faget. Bruk stud.assane til å forstå kva som skal gjerast, ikkje for å få løysninga.