2015-03-18.kl.14-19 (TDDD11)

Transcription

2015-03-18.kl.14-19 (TDDD11)
2015-03-18.kl.14-19
Tentaupplägg
Några tips på vägen kanske kan vara bra.
TIPS1:
Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter.
Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer att fastna
på så kanske det är fel uppgift att ge sig på. Tiden du lägger på att nog läsa uppgifterna tjänar du in
på att välja rätt uppgift.
TIPS 2:
Kolla ibland till kommunikationsfönstret. Det kan ha kommit information till alla utan att ni
skickat in en fråga. Kanske gäller det dig också (d.v.s. den uppgift du jobbar med).
TIPS 3:
Sista timmen är vi normalt sett lite tydligare och ger lite "bättre" återkoppling på era fel. Före detta
kan man få högre betyg, så då får ni själva leta reda på vad som skall rättas till. Under hela tentan
ger vi dock information om vilket symptom felet uppvisar om vi kompletterar. Om ni är nära G
tidigt på tentan kan detta kanske ge G i slutet (vi meddelar detta isåfall). Har ni fått ett meddelande
om att detta kan ge betyg 3, men inte högre i kombination med andra uppgifter och ni är nöjda med
betyg 3 och vill gå kan ni alltid skicka ett meddelande till oss så blockerar vi de övriga uppgifterna
så att du kan få ditt betyg och gå.
TIPS 4:
Om ni har problem med kompilator, Emacs eller annat som INTE har med uppgifterna att göra,
räck upp handen så kommer en assistent. Detsamma gäller om hur man kopierar givna filer " cp
given_files/* . " eller liknande.
Frågor om själva uppgifterna tar vi i första hand via tentasystemet.
Vi hinner inte svara på frågor de sista 10 minutrarna på tentan. Då ägnar vi all tid åt att rätta uppgifter
för att alla skall hinna få svar innan ni går hem. Om det är så att ni skickar in en uppgift precis i slutet
av tentan hinner vi förstås inte, men då får ni gärna skicka ett mail för att få reda på hur det gick.
Vi rapporterar in resultaten så fort vi kan efter tentan. Det tar ett par dagar med pappershantering efter
detta så räkna med att de är i LADOK om ca en vecka. Kolla med era kompisar om de fått poäng
innan ni skickar mail till oss.
Betygsgränser:
1 uppg
2 uppg
2 uppg
3 uppg
13:00
12:00
10:30
12:00
Betyg 3
Betyg 4
Betyg 5
Betyg 5
Lycka till med tenterandet och hoppas att alla får G på minst en uppgift idag.
M.v.h.
/Torbjörn (examinator)
2015-03-18.kl.14-19
Uppgift 1 (Rymdpolisens rekursion)
Starcommander Nilsson sitter på sitt kontor på centralplaneten, bekymrad över sitt
eget öde. Att vara rymdpolis handlar inte bara om att glida runt och glänsa och
jaga galaktiska superskurkar, det är också en hel del administrativt arbete. Ofta
handlar det om att tampas med rymdpolisens register över notoriska
rymdbrottslingar. I den här uppgiften skall du skriva ett program som hjälper
stjärnkommendören att hantera denna börda.
Det som ofta händer med registerfilen (REGISTER.TXT) är att den blir för stor.
Stjärnkommendören själv
Rymdpolisens centrala datorsystem klarar bara av filer som är 1 UltraByte eller
mindre i storlek. När denna storlek överstiges måste REGISTER.TXT delas upp i filerna
REGISTER.TXT och REGISTER1.TXT. REGISTER1.TXT är då precis 1 UltraByte och
REGISTER.TXT är en ny fil där ny data kan läggas till. Bekymmersamt nog kan ju detta hända flera
gånger, då REGISTER.TXT blir för stor igen. Då måste den filen döpas om till REGISTER1.TXT,
men eftersom denna fil redan finns sedan tidigare så måste REGISTER1.TXT först döpas om till
REGISTER2.TXT.
Skriv ett program där stjärnkommendören får mata in hur många filer som finns i nuläget.
Programmet skall sedan skriva ut en lista med instruktioner på hur filerna skall döpas om:
Körexempel 1:
Mata in hur många registerfiler som finns: 1
Döp om REGISTER.TXT till REGISTER1.TXT
Skapa en ny fil REGISTER.TXT
Körexempel 2:
Mata in hur många registerfiler som finns: 2
Döp om REGISTER1.TXT till REGISTER2.TXT
Döp om REGISTER.TXT till REGISTER1.TXT
Skapa en ny fil REGISTER.TXT
Körexempel 3:
Mata in hur många registerfiler som finns: 5
Döp om REGISTER4.TXT till REGISTER5.TXT
Döp om REGISTER3.TXT till REGISTER4.TXT
Döp om REGISTER2.TXT till REGISTER1.TXT
Döp om REGISTER1.TXT till REGISTER2.TXT
Döp om REGISTER.TXT till REGISTER1.TXT
Skapa en ny fil REGISTER.TXT
KRAV: Du måste lösa upprepningen i denna uppgift med rekursion. Inga loopar är tillåtna i programmet!
OBS: Det är inte meningen att du i denna uppgift skall läsa eller skriva till filer. Du skall heller inte öppna
eller skapa några filer eller byta namn på dem. Uppgiften handlar om rekursion och in- och utmatning.
2015-03-18.kl.14-19
Uppgift 2 (Kontanter, pistoler och bufferten)
I brädspelet Ca$h 'n Guns skall spelarna som ett moment peka på varandra.
En spelare räknar till 3, då skall alla spelare peka ut en annan spelare.
Eftersom utpekningen sker samtidigt kan det lätt bli så att vissa blir utpekade
av flera spelare, medans vissa inte blir utpekade alls. I den här uppgiften
kallar vi de spelare som inte blev utpekade för fria spelare.
Skriv ett program som låter användaren mata in 7 heltal. Heltalen representerar hur
många som pekade på respektive spelare. Programmet skall sedan skriva ut vilka
spelare som blev fria (enligt ovanstående definition). Om ingen spelare blev fri så
skall programmet skriva ut detta uttryckligen (se körexempel 3).
Körexempel 1:
Mata in hur spelarna pekade: 1 0 0 3 1 1 1
Spelare 2 är fri.
Spelare 3 är fri.
I ovanstående körexempel blev alltså spelare 1, 5, 6 och 7 pekad på av var sin annan spelare, spelare 4 blev
pekad på av 3 andra spelare och spelare 2 och 3 blev inte pekade på av någon. Observera att varje spelare
bara kan peka ut en annan och att ingen spelare kan peka ut sig själv. Är det 7 spelare blir alltså summan av
de inmatade heltalen alltid lika med 7.
Körexempel 2:
Mata in
Spelare
Spelare
Spelare
hur spelarna pekade: 1 0 2 2 2 0 0
2 är fri.
6 är fri.
7 är fri.
Körexempel 3:
Mata in hur spelarna pekade: 1 1 1 1 1 1 1
Ingen spelare blev fri!
KRAV: Du måste lösa problemet på ett generellt sätt. Om man skulle ändra antalet spelare skall man bara
behöva ändra på ett par ställen i koden.
2015-03-18.kl.14-19
Uppgift 3 (Rymdpolisens lottdragning)
Starcommander Nilsson sitter på sitt kontor på centralplaneten, bekymrad över sitt
eget öde. Att vara rymdpolis handlar inte bara om att glida runt och glänsa och
jaga galaktiska superskurkar, det är också en hel del administrativt arbete. Ofta
handlar det om att tampas med rymdpolisens register över notoriska
rymdbrottslingar. I den här uppgiften skall du skriva ett program som hjälper
stjärnkommendören att hantera denna börda.
Rymdpolisens register (filen REGISTER_NAMES.TXT) har följande format:
Stjärnkommendören själv
Filen består av ett antal rymdbrottslingar vars namn står på egna rader i filen.
Eftersom skurkarna ofta jobbar under alias så är det på många ställen i filen epitet eller öknamn
istället för riktiga namn. Raden för brottslingens namn är maximalt 64 tecken lång.
I den här uppgiften kommer du inte behöva läsa eller skriva till filen. Den innehåller endast exempel
på vad som kan matas in till ditt program.
Skriv ett program som låter stjärnkommendören mata in 8 brottslingars namn (på egna rader).
Programmet skall sedan lotta (d.v.s. slumpa) vilken av dessa brottslingar som Stjärnkommendören
skall arrestera härnäst.
Körexempel:
Mata in brottslingarnas namn (på egna rader):
Ocker, Tomas
Jansson, Skeppsråttan
Nyman, Rostskrubbaren
Kapten, Larsson
Höglund, Kölsvinet
Kleptoman, Klas
Trippeltjuv, Tore
Kilander, Styrman
Följande brottsling lottades fram för arrestering: Ocker, Tomas.
KRAV: Du måste lösa problemet på ett generellt sätt. Om man skulle ändra antalet brottslingar som skall
matas in, så skall man bara behöva ändra på ett par ställen i koden.
2015-03-18.kl.14-19
Uppgift 4 (Det fördröjande kubtornet)
I brädspelet Shogun* försöker spelarna bygga byggnader i japanska provinser under
1500-talet. En stor del av spelet handlar också om att försvara provinser där
byggnaderna finns och att försöka ta över nya provinser genom att anfalla andra
spelare. I provinserna kan man därför även placera trupper, som representeras av
små träkuber. Varje spelare har kuber i en egen färg. För att anfalla en annan provins
tar man sina kuber i en av sina provinser, och alla motståndarens kuber i en
närbelägen provins (den provins man vill anfalla) och kastar ner dessa i ett kubtorn
(se bilden). I tornet finns avsatser där kuber kan fastna. Det är alltså inte
nödvändigtvis så att de kuber som kastas ner i tornet är samma kuber som kommer
ut. Ofta fastnar några av de kuber som kastas i, och det kommer ut andra istället
(som har blivit kvar sedan tidigare anfall). För att avgöra vem som vann striden tittar
man på de kuber som kom ut, exakt hur den biten går till är inte relevant för uppgiften.
Hur tornet egentligen fungerar är lite av ett mysterium. Ibland slukar tornet kuber som en hungrig
varg, och ibland så faller kuberna rakt igenom. I den här uppgiften har vi valt att modellera tornet på
ett vis som kanske inte reflekterar verkligheten till fullo, men som ändå borde vara ett gott försök.
Skriv ett program som simulerar tornet enligt följande algoritm:
1. Låt användaren mata in hur många röda, gula, blå, lila, svarta och gröna kuber som ska kastas
ner i tornet.
2. Låt alla kuber som matades in i steg 1 fastna i tornet genom att lagra dessa 6 heltal på filen
TOWER.TXT.
3. Skriv ut alla kuber som faller ut ur tornet, detta skall vara det som tidigare var lagrat på filen
TOWER.TXT.
På filen TOWER.TXT ligger det alltså alltid 6 heltal. Om filen inte existerar så skall programmet
skapa den i steg 2 och i steg 3 skall det skrivas ut att det var 0 kuber av varje färg som föll ut ur
tornet.
Körexempel 1:
Mata in hur många röda, gula, blå, lila, svarta och gröna kuber som
kastas ner i tornet: 2 5 0 3 7 7
Det kom ut 0, 0, 0, 0, 0, 0, kuber (röda, gula, blå, lila, svarta, gröna).
Körexempel 2 (om det körs efter körexempel 1, utan andra körningar emellan):
Mata in hur många röda, gula, blå, lila, svarta och gröna kuber som
kastas ner i tornet: 4 4 4 2 2 2
Det kom ut 2, 5, 0, 3, 7, 7, kuber (röda, gula, blå, lila, svarta, gröna).
KRAV: Du måste lösa problemet på ett generellt sätt. Det skall vara lätt (bortsett från programmets
utskrift) att utöka programmet med fler färger.
OBS: För denna modell av kubtornet får man alltså alltid ut exakt de kuber som man kastade i förra
gången. Det är detta som gör att just detta torn anses vara ”fördröjande”.
* Spelet Wallenstein är nästan exakt samma spel, fast detta utspelar sig i Tyskland under 30:åriga kriget.