Några tips på vägen kanske kan vara bra. 2015-03-17.kl.14-19 Tentaupplägg 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 13:00 Betyg 3 2 uppg 12:00 Betyg 4 2 uppg 10:30 Betyg 5 3 uppg 12:00 Betyg 5 Lycka till med tenterandet och hoppas att alla får G på minst en uppgift idag. M.v.h. /Torbjörn (examinator)
Uppgift 1 (Kontanter, pistoler och rekursion) 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. 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 antalet utpekningar och kontrollera att antalet stämmer. Det bör ju alltid vara 7 utpekningar med 7 spelare! Summeringen skall göras med ett rekursivt underprogram. Om antalet utpekningar är för många eller för få skall programmet skriva ut detta, annars skall programmet säga att antalet utpekningar stämmer. Mata in hur spelarna pekade: 1 0 0 3 2 1 1 Det var 8 utpekningar. Minst en spelare pekar på fler än en spelare! Körexempel 2: Mata in hur spelarna pekade: 1 2 1 1 0 0 1 Det var 6 utpekningar. Minst en spelare pekar inte på någon spelare! Körexempel 3: Mata in hur spelarna pekade: 1 2 1 2 0 0 1 Det var 7 utpekningar. Antalet utpekningar stämmer, spela på! 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.
Uppgift 2 (Det trasiga 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 1 röd kub, 2 gula, 3 blå, 4 lila, 5 svarta och 6 gröna kuber fastna i tornet. Det kan inte fastna fler kuber av en viss färg än vad som kastades i. 3. Skriv ut alla kuber som föll ut ur tornet (d.v.s. de kuber som kastades i i steg 1 men som inte fastnade i steg 2). Mata in hur många röda, gula, blå, lila, svarta och gröna kuber som kastas ner i tornet: 4 3 0 2 3 1 Det kom ut 3, 1, 0, 0, 0, 0, kuber (röda, gula, blå, lila, svarta, gröna). Körexempel 2: 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 1, 3, 0, 0, 2, 1, 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 alltid ut färre kuber än vad man kastar i. De kuber som fastnar är för evigt slukade av tornet. Det är detta som gör att just detta torn anses vara trasigt. * Spelet Wallenstein är nästan exakt samma spel, fast detta utspelar sig i Tyskland under 30:åriga kriget.
Uppgift 3 (Rymdpolisens register) 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.TXT) har följande format: Filen består Stjärnkommendören själv av ett godtyckligt 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. För varje brottsling följer sedan ett godtyckligt antal rader rymdbrott. Varje sådan rad inleds med ett blanksteg, och sedan följer ett heltal i intervallet [1, 99] som markerar hur allvarligt brottet var i så kallade brottspoäng (eller BP). Efter heltalet (på samma rad) kommer en beskrivning av brottet som kan vara godtyckligt lång. Här är ett utdrag ur filen: Jansson, Skeppsråttan 5 Förstörelse vid dockning av rymdskepp av ultratung viktklass 10 Desertering från den imperiella flottan Nyman, Rostskrubbaren 3 Kapning och tjuvkoppling av rymdracerbilar 7 Otillåten återuppståndelse genom kloning I den här uppgiften kommer antalet BP inte spela någon roll. Skriv ett program som läser igenom filen och skriver ut hur många brottslingar som filen innehåller. Programmet skall också tala om vilken rymdbrottsling som är mest notorisk, i detta fall definierar vi den mest notoriske brottslingen som den som har flest rapporterade brott (d.v.s antalet brotts-rader). Om det finns fler brottslingar i filen med samma antal brott, tar man den första man stöter på av dessa. Registret innehöll 15 rymdbrottslingar. Den mest notoriske är: Mästertjuv, Magnus. TIPS: Du kan t.ex. använda Get för Integer när du läser från filen. Sedan kan man utföra olika saker beroende på om ett undantag kastades eller ej.
Uppgift 4 (Kontanter, pistoler och statistik) 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 simulerar denna process för 7 spelare. Programmet skall, för varje spelare, slumpa vilken annan spelare som blir utpekad. Man får inte peka på sig själv! Programmet skall sedan räkna hur många fria spelare det blev. Gör sedan ytterligare ett program som låter användaren mata in hur många gånger som detta skall göras och beräknar medelvärdet av antalet fria spelare. Det är okej att låta det första programmet vara ett underprogram... Körexempel: Mata in hur många gånger utpekningen för 7 spelare skall ske: 100000 Medelvärdet för antalet fria spelare efter 100000 utpekningar: 1.62 OBS: Det är inte säkert att svaret blir 1.62 som i körexemplet, det beror på vad användaren matar in och vilka tal som slumpas fram. Medlet bör dock närma sig ett visst värde ju högre tal man matar in... 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.