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.
© Copyright 2024