101 Belysning av klot



Relevanta dokument
101 Belysning av klot

101 Belysning av klot

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

Instruktioner för dig som ska söka till Mattekollo 2016

ALEPH ver. 16 Sökning

Skapa ett register över din grupp/klass

Tentaupplägg denna gång

19. Skriva ut statistik

Användarmanual HOIF.org

Lär dig sökmöjligheterna i Disgen 8

Spelregler. 2-6 deltagare från 10 år. En svensk spelklassiker

Programmeringsolympiaden 2012 Kvalificering

STADSBYGGNADSFÖRVALTNINGEN. Aktivitetsstöd. Behörigheten Föreningsadministratör. Datum: Version 2. Sidan 1 (30)

UPPGIFT 2 KVADRATVANDRING

Utskick av respondentenkät

101 Belysning av klot

Easy Planning blir med dessa funktioner ett mycket kraftfullt verktyg för planering. Vi hoppas att våra kunder ska få stor nytta av programmet.

Uppgift 1 ( Betyg 3 uppgift )

Föreläsning 3.1: Datastrukturer, en översikt

LITEN LATHUND TILL ALUMNDATABASEN

Rapportgenerator handbok

Komma igång med Eventor

TDP Regler

Sänka schackskepp. Författare: Martin Borg. Examinatorer: Jesper Hall Lars Holmstrand Pesach Laksman. Lärande och samhälle

Frågor - Högstadiet. Grupp 1. Jetline. Hur låter det när tåget dras uppför första backen? Vad beror det på? (Tips finns vid teknikbordet)

Programmeringsuppgifter 1

Seriehantering. [En enkel guide för hur du som serieadministratör använder SVEMO TA.]

Uppgift 1 (Oläsliga krypterade meddelanden)

B = Bokad tid. T = Tillfälligt bokad tid. L = Ledig tid. X = Spärrad tid

SLALOMINGÅNGAR hur svårt kan det vara?

Tentaupplägg denna gång

Att komma igång med FirstClass (FC)!

HexaFlip. Kravspecifikation

Datum: Version 1.6. Sidan 1 (43)

Ansök till förskola och familjedaghem

Elisabeth Bejefalk IT-Assistent Avesta kommun

ADAD-net. Användarmanual INDIVIDEN. Råbe och Kobberstad Februari 2010

Tips och tricks 1 Cadcorp SIS

Lumbago - Förord. Välkommen till Journalprogrammet Lumbago.

Senaste revideringen av kapitlet gjordes , efter att ett fel upptäckts.

Manual. Användargränssnitt

9-1 Koordinatsystem och funktioner. Namn:

Handbok Kstuds. Tomasz Boczkowski Granskare: Eugene Trounev Översättare: Stefan Asserhäll

Aditro HR Portalen - logga in och byta lösenord

Användarhandledning Rapportgenerator Version: 1.1

Manual till 3C för CPUP

Så här gör du din gymnasieansökan på webben

Övning 1: Vad är självkänsla?

Manual för administratörer - fiske

Digital Display VDS / Bus2

Kyrkans GPS. Version 1.0. Manual

1 Skapa Tabell Skapa Relationer Redigera Relationer Redigera Fält i Tabell Lägga till Poster i Tabell...

Netwise CMG Voice , Rev 1.0, CJ 1(16)

SIS Capture Station. IIIIII Användarhandbok

Manual till 3C för CPUP

Användarmanual flexconnect.se Administratör

Så här fungerar registreringen i Malmö stads Odlingsslottskö

Färgklövern. Färgklövern är gjord 1998 i samarbete mellan Datateket i Linköping och Hargdata AB i Linköping.

Logga in. Elevöversikt. Kolumner. Godkänna. Urval. Hantera inflytt och byte. Sök. Familjebild. Utskriftsrutin Om pengen

NyA-webben Nyheter och planerad vidareutveckling

Planering av egen cup - Steg 4: Under cupdagarna

Användarguide Flexconnect.se Mobil Anknytning

HANDLEDNING ZENIT BILBOKNING

2. Registrera en ny medlem

Så här beställer du från Apoteket Farmaci via nätet

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

SchoolSoft för elever

Handledning Master Befolkning inkl. listning av invånare inom Hälsoval Gävleborg

QlikView - Lathund för Flödesmodellen bas

SPELREGLER. 2-4 deltagare från 10 år

Artiklar via UB:s sö ktja nst

LULEÅ TEKNISKA UNIVERSITET Ämneskod S0006M Institutionen för matematik Datum Skrivtid

Handbok Minröjaren. Nicolas Hadacek Michael McBride Anton Brondz Utvecklare: Nicolas Hadacek Granskare: Lauri Watts Översättare: Stefan Asserhäll

DOPmatematik. Ett dataprogram för lärare. som undervisar i matematik. (Lågstadiet) Mellanstadiet. Högstadiet. Gymnasiet. Vuxenutbildning.

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Här kan du välja befintligt upplägg eller skapa ett nytt. Klicka på edit uppe till höger för att redigera och/eller skapat nytt.

Objektorienterad programmering D2

E-post för nybörjare

Manual för Webbkartan

Skolan på webben. för vårdnadshavare till barn i grundskola, särskola och träningsskola - Manual till SchoolSoft

KeyControl Sök person, nyckel eller cylinder

Uppgift 1. Kylskåpstransporter

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Att genomföra ett e-postutskick till klubbens medlemmar

MANUAL kvalitetsregister

Lathund för att använda DISPOS som genväg mellan Disgen och Genline.

Mobilapplikation htp:/aktjon.argentum.se/activitymobile

Nallelek Lärarvägledning

Çrona Tid. Behörighetssystem. Copyright DataVara AB. Produktutveckling Morgan Klebom, Christian Elber, Hans Bäcklund, Thomas Palm

Datorövning 1 Statistik med Excel (Office 2010, svenska)

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Administrativ manual RiksSvikt 3.7.0

B2C för Svensk Elitfotboll Urval

FLEXILAGER Ett hjälpmedel för anpassad lagerhantering. Original -version

LifeCareMobil Enköping Hemtjänst

KOMMUNALT AKTIVITETSMEDLEMSBIDRAG

TAIU07 Matematiska beräkningar med Matlab

Rolladministration i PaletteArena 5.3

Diagram. I detta kapitel lär du dig: m Diagrammets beståndsdelar. m Att skapa både inbäddat diagram och diagramblad. m Att ändra diagramform.

Referens till. WeavePoint 6 Mini

Transkript:

CSC, KTH DD1314 prgcl våren 2016 (Python) 101 Belysning av klot P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Skärmhantering, simulering av en matematisk modell. Ett klot med centrum i origo och med radien r är belyst av ljus som faller in parallellt med den linje som går igenom punkten (x 0, y 0, z 0 ) på klotets yta och origo. Uppgiften är att skriva ett program som beräknar belysningsvariationen på klotet och som ger en snygg bild av det belysta klotet på datorn. Belysningsintensiteten b i en punkt (x, y, z) på klotet är proportionell mot cos(v) där v är ljusets infallsvinkel i punkten. Låt proportionalitetskonstanten vara 1, vilket innebär att belysningen b kommer att anta värden mellan 1 och 1. Vid utskrift av belysningen används olika intensitet för att markera olika ljusintensitet. Exempel på en teckenfördelning du kan använda dig av (den skall naturligtvis vara enkel att ändra i ditt program): M markerar mörker, dvs obelyst punkt där b 0 * markerar en ganska mörk punkt 0 < b 0.3 + markerar en något ljusare punkt 0.3 < b 0.5 - markerar en ganska ljus punkt 0.5 < b 0.7. markerar en ljus punkt 0.7 < b 0.9 markerar en mycket ljus punkt 0.9 < b 1 Belysningen b = cos(v) i punkten (x, y, z) beräknas med skalärprodukten Skriv ett program som: b = (x x 0 + y y 0 + z z 0 )/r 2 Läser in värden på r (klotets radie), x 0, y 0 (definierar ljuskällan). I grunduppgiften kan dessa värden läsas in i terminalfönstret. Därefter beräknas z 0 enligt formeln. z 0 = r 2 x 2 0 y2 0 Därefter ska programmet genomlöpa alla x- och y-värden i intervallet ( r, r) och för varje talpar (x, y) beräkna motsvarande positiva z-koordinat på klotytan. Tänk på att även här kontrollera rotuttrycket. Blir resultatet negativt under rotuttrycket, ligger punkten utanför klotets yta (låt b = 0 där). z = r 2 x 2 y 2 Dela upp intervallen i ett lagom stort antal steg (t.ex. 70). Det ska vara lätt att ändra antalet steg i både x- och y-led. Använd konstanter för detta. VGV

Extrauppgift, betyg C: Kontrollerar indata, uttrycket nedan under rottecknet ska ej bli negativt. Om uttrycket under rottecknet blir negativt ligger ljuskällan felaktigt och nya indata för x 0 och y 0 måste inhämtas. Extrauppgift, betyg B: Hur ser klotets skugga ut? Lägg till skuggan i bilden! Använd ett annat tecken än de du använt i klotbilden, så att det går att skilja skuggan och klotet åt. Extrauppgift, betyg A: Rita klotet i ett grafikfönster. Låt användaren flytta ljuskällan genom att klicka med musen på klotet. Ljuskällan ska bara flyttas om klickningen sker på klotet (inte om man pekar på bakgrunden), annars kommer det inte att gå att beräkna z 0.

CSC, KTH DD1314 prgcl våren 2016 (Python) 103 Bostadsinköp P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Filhantering. Sökning, urval. Sortering i extrauppgiften. Menyhantering. Datastrukturer. Du ska skriva ett program som hjälper användaren att välja bostad genom att gå igenom en fil med bostäder, räkna ut månadskostnad och kvadratmeterpris för varje bostad och sedan skriva ut bostäderna. Du får själv skriva ihop en textfil med data om bostäder, på följande format: % Format: Pris / Bostadsyta / Hyra / TelNr / Gatuadress 450000 55.5 1450 08-621 33 04 Brickebacken 7 osv... Användaren ska vid programstart ange: Aktuell bankränta (%) Kontantinsatsen (kr) Aktuellt ränteavdrag (%) Programmet ska sedan beräkna månadskostnaden samt kvadratmeterpriset för bostäderna enligt följande kalkyl: månadskostnad = hyra + (pris kontantinsats) ränta 100 (1 ränteavdrag 100 ) 12 ytkostnad = pris yta Sedan ska bostäderna skrivas ut på skärmen. Användaren ska kunna göra ett urval mha menyer. Parametrarna har inledningsvis lämpliga startvärden som sparas på en inställningsfil. Aktuella värden anges inom parenteser. Användaren ska kunna ändra dessa. Grundmenyn kan se ut så här: Dina valmöjligheter: 1) Ändra önskad Månadskostnad (< 12 kkr) 2) Ändra önskad Hyra (< 6 kkr) 3) Ändra önskat Kvadratmeterpris (< 20 kkr) 4) Ändra önskad Boendeyta (> 15 kvm) 5) Skapa Urval 6) Avsluta VGV

Vill användaren t. ex. ändra gränserna för månadskostnaden ska användaren besvara en fråga: Månadskostnaden ska högst vara (kkr): Efter att frågan har besvarats ska grundmenyn åter visas, nu med ett nytt värde på månadskostnaden. När användaren är nöjd med urvalsparametrarna ska denne välja Skapa Urval och urvalet (d v s de bostäder som uppfyller kraven) ska presenteras en skärmsida i taget. Presentationen kan se ut så här: Boyta: 55.5 kvm Pris: 450,000 kr Hyra: 1450 kr TelNr: 08-621 33 04 Gatuadress: Brickebacken 7 Månadskostnad: 5627.2 kr Kvadratmeterpris: 8108.1 kr/kvm Programmet ska avslutas när användaren väljer alternativet Avsluta i grundmenyn. Om användare matar in ett felaktigt menyval, eller felaktiga värden på urvalsparametrar, ska programmet påpeka detta och begära ny inmatning. Tips: Använd dig av getattr i programmet för att undvika kodupprepning. Extrauppgift, betyg C: Inför felhantering för alla inputvärden då det är viktigt att programmet inte ska krascha. Extrauppgift, betyg B: Sorterad presentation. Bostäderna i urvalet ska presenteras sorterade med avseende på någon av urvalsparametrarna. Användaren anger vilken. T ex ska han kunna välja att få bostäderna presenterade ordnade efter hyra, med lägsta hyran först. Efter avslutad visning ska resultatet kunna skrivas på fil. Denna kan sedan skrivas ut på skrivaren efter programkörningen. Användaren ska också kunna välja att lägga till och ta bort bostäder ur listan, varpå filen ska uppdateras. Extrauppgift, betyg A: Hantera dialogen med användaren och presentationen av urvalet med ett grafiskt användargränssnitt.

CSC, KTH DD1314 prgcl våren 2016 (Python) 115 Kösimulering P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer. Händelsestyrd simulering. Det gäller att simulera kösituationer på det lilla postkontoret i Skruttemåla. Posten öppnar kl 9.00 och stänger kl 18.00. Kunder anländer i genomsnitt var femte minut, dvs sannolikheten för att en ny kund ska komma under en viss minut är 20%. För postexpediten, fru Franco, tar det exakt två minuter att betjäna ett postärende. Hälften av alla kunder har ett enda ärende, en fjärdedel har två ärenden, en åttondel tre ärenden osv. Vid stängningsdags låser fru Franco dörren men betjänar plikttroget de kunder som står i kö. Därefter för hon dagens kundstatistik (totala antalet kunder, alla kunders sammanlagda väntetid och genomsnittliga väntetiden per kund). Allt detta ska simuleras av ditt program enligt följande exempel: Kl 9.03 kommer kund 1 in och blir genast betjänad Kl 9.05 kommer kund 2 in och ställer sej i kön som nr 2 Kl 9.07 går kund 1 och kund 2 blir betjänad Kl 9.09 kommer kund 3 in och ställer sej i kön som nr 2 Kl 9.09 går kund 2 och kund 3 blir betjänad Kl 9.12 kommer kund 4 in och blir genast betjänad Kl 9.13 kommer kund 5 in och ställer sej i kön som nr 2 Kl 9.15 kommer kund 6 in och ställer sej i kön som nr 3. Kl 18.00 stängs dörren Kl 18.04 går kund 110 och kund 111 blir betjänad Kl 18.06 går kund 111 STATISTIK: 111 kunder, kundväntetid 58 minuter = 31 s/kund Alla kunder förutsätts anlända vid hela minuttider, ingen får komma indrällande några sekunder för tidigt eller för sent! Vid ankomsten slumpas kundens antal ärenden fram enligt sannolikheten som gavs ovan. Tricket ligger i att köra en loop som bryts med 50% sannolikhet. Varje nytt ärende betyder ökad betjäningstid. Utträdestiden beräknas dock inte förrän kunden ska betjänas. Är kön tom när en ny kund anländer, betjänas denna direkt (utträdestiden beräknas). Är kön inte tom, ställs kunden i kön. VGV

Programmet ska även kontrollera om den första kundens utträdestid=nutid. Är så fallet är alltså denna kund färdigbetjänad och nästa kund i kön kan betjänas. För att programmet ska bli mer dynamiskt så ska alla parametrar som finns i programmet (öppet tider, minuter per kund, sannolikhet att en ny kund kommer, osv) ligga i en fil. Extrauppgift, betyg C: Inför möjligheten att ändra på av problemets parametrar (öppettider, ankomstsannolikhet), med hjälp av inmatning. Inför även felkontroll av dessa parametrar. Extrauppgift, betyg B: Ibland - ganska sällan - blir fru Francos postkontor rånat. Var 1000:e (i genomsnitt) person som kommer in på posten har ondskefulla tankar. Desperadorånaren rusar in och skjuter vilt omkring sig. Kön skingras åt alla håll. En del blir nedskjutna. Alla försvinner således ur kön. Fru Franco, som har svart bälte i karate, försöker givetvis övermanna rånaren. Oftast lyckas hon. Då får postkontoret en PR-kick, och den närmaste tiden kommer fler kunder. Sannolikheten att en kund ska komma en viss minut direkt efter rånet blir 50%, och avtar sedan successivt ner mot de vanliga 20%. Om hon inte lyckas, kommer färre kunder den närmaste tiden. Sannolikheten att en kund kommer en viss minut startar från 5% och går successivt upp mot 20%. Hur många som blir nedskjutna, och huruvida fru Franco lyckas övermanna rånaren slumpas på lämpligt sätt. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt där man kan välja parametrar och klicka sig fram i simuleringen. Datafiler och hjälpfiler: www.csc.kth.se/~lk/p/random.txt

CSC, KTH DD1314 prgcl våren 2016 (python) 122 Game of Life and DEATH P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer, filhantering. En familj organismer består av celler (rutor) i ett rutnät som kan beskrivas av en matris. Cellerna föds och dör enligt bestämda levnadsregler och vi vill undersöka hur familjens fortbestånd förändras under ett antal generationer. Varje cell har åtta grannar: 1 2 3 4 * 5 6 7 8 Överlevnad Födelse Varje cell med två eller tre levande grannar kommer att överleva till nästa generation. En cell med mer än tre grannar dör av överbefolkning. En cell med mindre än två grannar dör av ensamhet. En tom cell som har exakt tre grannar kommer att födas och bli en levande cell i nästa generation. Skriv ett program som först läser in antalet önskade generationer samt storleken på matrisen. För att slippa tråkiga och tidsödande inmatningar ska du lägga upp filer med cellernas koordinater. En fil kan se ut så här: Format: x-koord y-koord ============================================================== 2 3 2 4 2 5. Presentationen kan enklast ske via ascii-grafik, dvs vanliga tecken och blanka skrivs ut så att de tillsammans ser ut som en enkel figur. Programmet skall vid en sådan presentation rita ut matrisen och dess levande innevånare på ett illustrativt sätt. Det är lämpligt att lägga in en pausfunktion så att användaren hinner se alla utritningar, t.ex. att användaren trycker retur innan nästa bild ritas upp. Tips: Antag att du har valt att använda dig av en 15x15-matris. För att undvika vissa konstigheter ute i kanterna kan du då jobba med en 17x17-matris, detta för att kunna införa fiktiva celler i 0:te och 16:e position (så att alla verkliga celler får 8 grannar). VGV

Exempel på starttillstånd som ger en trevlig fortsättning: 18 levande celler: ---------- ---------- ---*--*--- ---****--- --*----*-- --*-**-*-- --*----*-- ---****--- ---------- ---------- CHESHIREKATT. Utskrift varje generation. Lägg katten mitt i rutnätet. Efter några generationer är bara leendet kvar. 5 levande celler: 9 levande celler: -*-------- ----*----- --*------- -----*---- ***------- *----*---- ---------- -*****---- ---------- ---------- GLIDARE. RYMDSKEPP. Vid utskrift av var 4:e generation Flyttar sig horisontellt om glider denna figur snett nedåt. utskrift görs var 4:e generation. Extrauppgift, betyg C: Programmet ska kontrollera att koordinaterna ligger inom tillåtet intervall. Användaren skall även kunna bestämma hur ofta han/hon vill se processens fortskridande. Användaren matar in ett heltal, ex. 4, vilket tolkas som att användaren vill se var 4:e generation. Extrauppgift, betyg B: Inför följande förbättringar av ditt program I stora tomma områden är det onödigt att kontrollera varje cell. Hitta på ett sätt att hålla reda på vilka delar som är just nu inaktiva, och skippa dessa vid genomgången. Istället för att ha döda kanter kan man tänka sig att matrisen är klistrad på en cylinder så att vänster kant sitter ihop med höger (och övre kanten med den undre). Inför detta och hitta ett starttillstånd som demonstrerar övergången. Extrauppgift, betyg A: Gör ett grafiskt gränssnitt, där förloppet ritas ut i ett rutnät istället. Lägg också till två knappar och ett textfält; En av knapparna ska stega bilden till nästan utritning, den andra ska rensa matrisen och i textfältet ska användaren mata in hur många generationer som ska gå mellan utritningarna. Gör också så att man kan skapa och/eller döda celler genom att trycka på rutorna. Datafiler och hjälpfiler: www.csc.kth.se/~lk/p/cheshirekatt.txt www.csc.kth.se/~lk/p/glidare.txt www.csc.kth.se/~lk/p/rymdskepp.txt

CSC, KTH DD1314 prgcl våren 2016 (Python) 127 Platsbokning på SJ P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Filhantering, datastrukturer. Skriv ett program som hjälper SJ med platsbokning i en järnvägsvagn. På skärmen ska en bild, liknande den nedanstående, ritas upp. Observera den fiffiga numreringen som gör att platsnummer i följd ger intilliggande platser. Modulo kan vara till hjälp för att få till kolumner och rader. Välj själv om vagnen skrivas ut antingen på bredden eller på höjden. Redan bokade platsnummer markeras på lämpligt sätt på skärmen, t ex genom att numret omges med två stycken *. 1 8 9 16 17 24 25 32 2 7 10 15 18 23 26 31 TYST AVD 3 6 11 14 19 22 27 30 4 5 12 13 20 21 28 29 Med hjälp av följande meny ska användaren kunna boka respektive avboka platser samt skriva ut biljetter på de senaste bokningarna (dvs de som inte redan skrivits ut). Vad vill du göra? Boka, skriv B, på samma rad följt av önskat antal biljetter. Avboka, skriv A, på samma rad följt av ett platsnummer. Skriva ut de senast bokade biljetterna, skriv S. Avsluta, skriv Q Ditt val: Efter varje bokning / avbokning ska bokningsläget uppdateras på skärmen. Detta program behöver bara skriva ut biljetter på en enda sträcka, t. ex. mellan Stockholm och Göteborg. Platsbiljetterna skrivs ut på en egen biljettfil med exempelvis följande utseende: PLATSBILJETT Sth-Gbg 9.05 Plats 19 TYST AVDELNING Mittgång VGV

Extrauppgift, betyg C: Felmeddelande ska skrivas ut vid felaktiga inmatningar t ex (fler finns): Bokning av fler platser än vad som finns kvar. Avbokning av en obokad plats. Avbokning av platsnummer som ligger utanför intervallet 1... 32 Utskrift väljs, trots att inga bokningar har gjorts. Extrauppgift, betyg B: Inför fler sträckor och avgångstider. Ett tåg består rimligtvis av flera vagnar, så se till att ditt program bokar platser på tåg. Ett tåg har ett unikt tågnummer, som kan användas för att hålla ordning på textfilerna. Försök se till att bokade platser hamnar intill varann. Annars ska programmet fråga om det är OK med spridda platser. Bokningsläget (som består av de bokade platsernas nummer) för varje sträcka, tåg och avgång ska sparas på fil. Aktuell fil läses in igen vid nästa bokning så man inte riskerar dubbelbokningar. När tid och datum för avgången passerat tas filen bort. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt. Alla bokningar ska ske via musklickningar. Lägg också till en knapp för att skriva ut bokade biljetter.

CSC, KTH DD1314 prgcl våren 2016 (python) 134 Springarens vandring på schackbrädet P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer, randvillkor. Skriv ett program som följer en springares vandring över ett 64 rutors schackbräde! Springaren följer schackreglerna, dvs den förflyttar sig antingen två steg horisontellt och ett steg vertikalt eller två steg vertikalt och ett steg horisontellt. Under hela vandringen får springaren inte komma till en plats mer än en gång. Användaren får ange vilken ruta springaren ska starta på. Det finns högst 8 stycken platser som springaren kan gå till från varje ruta. Du skriver lämpligen en klass vars fält representerar schackbrädet och vars metoder tex. förflyttar springaren. Står vi på en kantruta kan vi inte flytta springaren i vissa riktningar, ty då hamnar vi utanför brädet. I tipset finner du en variant att lösa detta problem. Programmet ska plocka ut de godkända alternativen och sedan med hjälp av slumpen välja vilken ruta som springaren ska gå till. Exempel: nyplats = random.randrange(antalokplatser) Du får numrera de godkända platserna enligt en fast ordning, tex medsols. Programmet tar slut då springaren inte har någon plats att flytta till. Användaren ska starta programmet genom att ange en startpunkt på schackbrädet. Därefter ska brädet skrivas ut. I presentationen av schackbrädet ska det tydligt framgå: Rutnätet, varje koordinat har en egen ruta. Springarens förflyttningar ska vara markerade, en ruta kan då innehålla: Tomrum, springaren har inte besökt denna ruta. Ett tal, springaren har besökt denna ruta, i steg nr... Koordinater i kanterna. Tips: Schackbrädet kan lämpligen representeras av en matris som förutom det verkliga schackbrädet (rad 2 9, kolumn 2 9) har ytterligare två rader och kolumner runt omkring (som flyttbuffert). Matrisen får då indexgränserna (0..11). På raderna 0 och 1 såväl som i kolumnerna 10 och 11 sätts alla element till -1 för att markera att rutorna ligger utanför brädet. För att markera rutornas tillstånd ska du använda dig av någon konvention. VGV

T ex kan olika tal ge information om rutan: -1 Rutan ligger utanför schackbrädet. 0 Rutan ligger på schackbrädet, springaren har aldrig varit här. k Rutan ligger på schackbrädet, springaren har varit här tidigare, i steg nummer k (där k är ett tal > 0). Utskriften från programmet kan se ut så här: Springarens vandring: ----------------------------------------- --------------------------------- 8 2 --------------------------------- 7 3 --------------------------------- 6 1 --------------------------------- 5 --------------------------------- 4 --------------------------------- 3 --------------------------------- 2 --------------------------------- 1 --------------------------------- A B C D E F G H ----------------------------------------- Extrauppgift, betyg C: Ge användaren möjlighet att mata in en egen springarvandring. Kontrollera att inmatade koordinater motsvarar en tillåten ruta. Extrauppgift, betyg B: Programmet ska uppdatera en high-score-fil mellan körningarna. Textfilen läses in vid programstart. Om körningen resulterade i fler steg än det hittills största, som är lagrat i textfilen, ska det nya antalet steg lagras på textfilen. Extrauppgift, betyg A: Ge programmet en snyggare presentation genom att visa resultatet i ett separat grafikfönster. Låt användaren få se ett steg i taget.

CSC, KTH DD1314 prgcl våren 2016 (python) 133 Sänka skepp P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer. Viss skärmhantering. I extrauppgiften tillkommer sortering. Du ska skriva ett program som slumpvis lägger ut en mängd fartyg på en yta. Användaren ska sedan kunna beskjuta ytan och programmet ska meddela resultatet (envägs beskjutning). Spelet avslutas då användaren så önskar eller efter att alla fartyg är sänkta. Regler för utläggning av fartyg: Fartygen måste ligga helt inom spelplanen. Programmet skall efter varje skott: Skriva ut resultatet av skottet, träff eller bom. Användaren ska via menyer kunna göra sin olika val. Huvudmenyn kan se ut så här: Dina valmöjligheter (1-3): 1) Beskjuta fiendefartyg 2) Fuska lite, tjuvkika på fiendefartygen 3) Avsluta Ditt val (1-3): De olika menyerna innebär: Beskjutning mot fiendefartygen: På skärmen ska spelplanen och skottmarkeringarna visas i en schackbrädesliknande figur. Användaren ska få skjuta ett eller flera skott och därefter återgå till huvudmenyn. Under spelplanen ska träffprocenten skrivas ut. Fuska lite, tjuvkika på fiendefartygen: Alla spelare har olika moral och alla måste tillfredsställas. Spelplanen presenteras med fiendefartygen fullt tydligt markerade tillsammans med skottmarkeringarna. Avsluta: Användaren ska få möjlighet att titta på de ej sänkta fartygens lägen före avslutning. Spelplanen presenteras på samma sätt som vid tjuvkiken. Programmet ska uppdatera en high-score mellan körningarna. Om spelaren är bland de tio bästa (träffprocenten är måttet på spelarens skicklighet) ska namn efterfrågas. Listan lagras efter körningen på en textfil. Denna läses in vid ny programstart. Listan ska sorteras. VGV

Du bestämmer, som programkonstruktör, enväldigt spelplanens storlek (t ex 8x8). Likaså bestämmer du fartygens antal samt storlek, vilket presenteras i början av programmet (det ska finnas fartyg av olika längder, t.ex. 1-5 rutor). Du skall programmera på ett sådant sätt att man i efterhand lätt kan förändra fartygsuppsättningen. I presentationen av spelplanen ska det tydligt framgå: Rutnätet, varje koordinat har en egen ruta, se bilden nedan. Resultaten av skotten, t.ex. Träffar markeras med # Bommar med o Fartyg, (ej träffade) med X Koordinater i kanterna. Tips: För att representera rutornas tillstånd använder vi oss av någon lämplig konvention. T ex kan heltal ge information om rutan: 0 Rutan ej beskjuten, inget fartyg ligger här. 1 Rutan ej beskjuten, del av ett fartyg ligger här. 2 Rutan beskjuten, bom. 3 Rutan beskjuten, träff. Det kan vara praktiskt att också lagra mer information för varje ruta. Om det i rutan ligger en del av ett fartyg kan man t ex vilja veta hur långt fartyget är och på vilken ledd det ligger (horisontellt eller vertikalt). I filen www.csc.kth.se/~lk/p/random.txt får du tips till slumpfunktionen, som du använder till att slumpa fram fartygens positioner. För att på ett enkelt sätt kunna presentera och ändra fartygens storlek kan du skriva ihop en textfil med fartygens längder. Den kan se ut så här: % Format: heltal som anger fartygens längd (antal rutor) 5 3 2 1 1 Presentationen ska vara tydlig. Extrauppgift, betyg C: Inför felkontroll av menyalternativ och inmatning. Skriva ut ett felmeddelande om skottet var ogiltigt, dvs utanför planen eller rutan redan beskjuten. Användaren får i detta fall skjuta på nytt. Extrauppgift, betyg B: Uppdaterade regler för spelet: Två fartyg får aldrig ligga precis intill varandra, utan det måste alltid finnas tomma rutor emellan. Om det blev en träff och fartygets samtliga rutor är träffade är fartyget sänkt. Detta ska meddelas användaren. Dessutom ska programmet markera beskjuten på alla kringliggande rutor eftersom det inte kan ligga några fartyg där. Extrauppgift, betyg A: Gör ett grafiskt gränssnitt där man klickar för att beskjuta. Datafiler och hjälpfiler: www.csc.kth.se/~lk/p/random.txt

CSC, KTH DD1314 prgcl våren 2016 (Python) 137 Solkraftverk P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Sortering, datastrukturer. Man ämnar bygga ett solkraftverk och vill därför simulera kraftverkets funktion under ett år. Den energi som utvinns ur kraftverket beror på en del olika faktorer. Vi ställer upp följande modell för utvunnen energi under dagen t: W (t) = area soltal solighetsfaktor f(t, latitud) Area Solfångarens area (några 100-tal kvadratmeter) Soltal Proportionalitetskonstant, energi/ytenhet (några kwh/kvadratmeter) Solighetsfaktor Slumpas fram som ett tal mellan 0 och 1 (se filen www.csc.kth.se/~lk/p/random.txt). Slumpa en ny solighetsfaktor för varje dag och latitud. f(t,latitud) Energifunktion. Latituden anges av användaren, tiden t varierar mellan 1 och 360 (dagarna under ett ett år) Låt: v = (23.5 sin( π (t 80) 180 ) + 90 latitud) 90 : 0 < latitud < 90 Då gäller: f(t, latitud) = v 2, 0 < v < 1 f(t, latitud) = 1, v 1 f(t, latitud) = 0, v 0 Man kan anta förenklingen att alla månader innehåller 30 dagar och året 360. Bolaget som ska bygga kraftverket vill med hjälp av av denna modell ta fram en optimal placering av kraftverket (den placering som ger mest energi). Användaren ska därför kunna mata in olika latituder och få ut energivärden. Programmet ska kunna beräkna utvunnen energi för ett godtyckligt antal latituder. Slutresultatet presenteras, sorterat, i tabellform med latitudernas årsmedelproduktioner (summan av dagsproduktionerna/360). VGV

Tips: Medelvärdet (x m ) och standardavvikelsen (s) beräknas med följande formler: x m = 1 n ni=1 x i s = 1 ni=1 n 1 (x i x m ) 2 Extrauppgift, betyg C: Programmet ska skapa en fil som kan se ut så här: Format: Area,soltal,latitud,dag,solighetsfaktor,f(t,latitud),W(t) ============================================================== Januari: 450 7 56 1 0.5 0.1215 23.25 450 7 56 2 0.2 0.1224 9.44 450 7 56 3 0.9 0.1234 43.17. Här presenteras varje dag som en rad. För att underlätta för den som ska läsa av tabellen ska månadernas namn skrivas ut. Se också till att felhantera all indata som du får till programmet. Extrauppgift, betyg B: Inför vindkraftverk som alternativ. Energin från vindkraftverket varierar med tiden (det blåser mer under vår och höst) och rotordiameter (ju större rotor desto högre effekt). Rotordiametern ligger mellan 25 och 50 meter och effekten ligger kring 500 kw. Extrauppgift, betyg A: Skapa ett grafiskt användargränssnitt där användaren ska kunna detaljgranska en latituds värden (under ett år) antingen grafiskt (stapeldiagram) eller siffermässigt (tabell), bägge valmöjligheterna måste finnas med. Minsta tidsenhet vid presentationen är månader; hela året ska granskas. Väljer användaren att få presentationen på tabellform ska varje presenterat medelvärde åtföljas av standardavvikelsen, samt min- och maxvärdet för aktuell period. Datafiler och hjälpfiler: www.csc.kth.se/~lk/p/random.txt

CSC, KTH DD1314 prgcl våren 2016 (Python) 139 Tidtabeller för en pendeltågslinje P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Filhantering, listor. På en pendeltågslinje sätter man då och då in nya lok med allt starkare motorer. Det betyder att tidtabellen måste förnyas varje gång. Din uppgift blir att skriva ett program som tillverkar nya tidtabeller för linjen. Tidtabellen ska innehålla stationsnamn och avgångstider för varje station längs linjen, t ex Floda 09.54. Indata är stationsnamnen, avstånden från startstationen till de olika stationerna på linjen samt data på tågets prestanda. För att få med av- och påstigningstiden ska du använda följande modell, som ger väntetider på 0 1 minuter: avgångstiden = heltalsdelen av ankomsttiden + 1 (minuter) Lägg upp en fil med alla indatavärden och ändra i denna då tågprestanda eller linjesträckningen ska förnyas. Exempel på hur filen kan se ut: Prestanda, format: acc (0.4-0.8 m/s2) / retardation (1.2-2.0 m/s2) maxhast (30-45 m/s) ============================================================== 0.5 1.5 35 ============================================================== Tabellformat: antal stationer stationsnamn (max 15 tkn) / avstånd från startstationen (km): ============================================================== 11 Arby 0 Bedinge 3.57 Cebro 6.38 Degum 8.67 Ekö 12.80 Floda 18.24 Guldö 24.59 Håsta 29.42 Iby 30.73 Jituna 34.06 Kåvik 36.95 VGV

Alla dagar Endast ett tåg är i trafik. Första avgången mot Kåvik är kl 08.35 från Arby. När tåget anlänt till Kåvik, väntar det på stationen i 10 minuter innan det vänder tillbaka mot Arby. Vid ändstationerna beräknas alltid avgångstiden ligga 10 minuter efter ankomsttiden. Sista tåget från Kåvik ska ha en avgångstid före midnatt. Efter ankomst till Arby står det kvar där över natten. Detta innebär att tåget kommer att åka fram och tillbaka ganska många gånger. Naturligtvis ska det vara någorlunda lätt att ändra dessa data. Man skulle kunna starta tågen senare, låta tåget vänta längre på station osv. Tågets prestanda anges med följande parametrar: a tågets acceleration (m/s 2 ) r tågets retardation (m/s 2 ) tågets maxhastighet (m/s) s sträckan mellan två stationer (m) v max s 0 sträckan som tåget behöver för att nå sin maxhastighet v2 max 2 a (m) s 1 sträckan som tåget behöver för att bromsa till stillastående vid maxhastighet v2 max 2 r (m) För restiderna mellan två stationer gäller då: ( ) 2 s 1 a t = + 1 r för s s 0. ( ) v max 1 a + 1 r + s s 0 s 1 v max för s > s 0. Tips: Beräkna tidsintervallen i minuter mellan stationerna, med hänsyn tagen till av- och påstigningstiderna (se tidigare givna modellen) och lägg upp dem i en lista. Gör en funktion som beräknar n stycken klockslag bestämda av startklockslaget och tidsintervallen. Lägg upp dem i en lista. Använd strukturen ovan för att beräkna tiden δ som det tar för ett tåg att gå hela linjen fram & tillbaka och vara startklar på nytt. Avgångstiderna för hela dagen från en viss station kan sedan lätt beräknas med hjälp av δ och morgonturens tider. Lägg upp varje stations avgångstider i en lista. I utskriften ska stationens namn stå längst till vänster med ca 10 klockslag per rad. Tänk på att antalet avgångar kan vara större än vad som får plats på en rad. Utskriften får i detta fall delas upp på flera sidor. Utskriftsformatet för tiderna: 07.52, 08.04; tänk på nollorna! Var noga med att kolla på B-uppgiften innan du designar dina klasser, det är viktigt att du inte har en struktur som inte passar med de högre kraven. Extrauppgift, betyg C: Låt användaren kunna ange nya värden för tåget än de som finns på fil. Inför felkontroll av indata. Extrauppgift, betyg B: För att göra uppgiften intressantare så ska du nu skilja på vardagar och helgdagar, den tidigare beskrivningen gäller nu för helgdagar och följande gäller för vardagar. Vardagar Nu finns det tre tåg i trafik (tre ggr tätare trafik). Första avgång från Arby är kl 05.07. De övriga avgångarna ska ligga så att jämna intervall mellan tågen erhålls. Alla tåg utgår från Arby, dvs morgontåget från Kåvik kan inte avgå förrän 10 minuter efter att det första tåget från Arby kommit dit. I övrigt gäller samma kriterier som för helgdagarna. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt till programmet!

CSC, KTH DD1314 prgcl våren 2016 (Python) 140 Sålda biobiljetter P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Filhantering, datastrukturer, sortering. För att visa din kulturella sida har du investerat några av dina miljoner i diverse biografer. Varje dag får du veta hur många biljetter som sålts till föreställningen kvällen innan och du vill skriva ett program som bearbetar och presenterar denna information. Skriv först ihop en fil med följande information för varje biograf: biografens namn Totalt antal platser i salongen Biljettpriser Man har tre olika avgiftsklasser: vuxna, pensionärer och barn. Biljettpriserna varierar från biograf till biograf. Vuxenbiljetten är alltid dyrast och barnbiljetten billigast och priserna är alltid i hela kronor. Ditt program ska läsa in informationen från filen och dessutom fråga användaren om antal sålda biljetter i varje prisklass för varje biograf. För varje biograf ska skrivas ut summan av biljettintäkterna och beläggning (i procent). Biograferna ska sorteras i fallande ordning efter beläggning (den som har utsålt hamnar alltså först). Dessutom ska summan av alla biografers biljettintäkter skrivas ut. Var noga med att det ska vara mycket enkelt att öka mängden biografer. Rimligtvis så bör det räcka med att man lägger till en till biograf i filen. Extrauppgift, betyg C: Inför felkontroll av användarens inmatning. Kontrollera också att filen existerar och att filens data är rimliga, dvs att varje biograf har namn, antal platser och tre olika biljettpriser, och att biljettpriserna följer reglerna ovan (barnbiljetter billigast osv). Extrauppgift, betyg B: Biljettförsäljaren räknar ihop kassan efter föreställningen och vill ur kassans storlek avgöra hur många biljetter av varje sort som har sålts. Det kan finnas många lösningar till detta problem och ibland ingen alls (på grund av felräkning i kassan). Uppgiften blir att skriva metoder som givet de tre biljettpriserna ovan samt kassans storlek skriver ut alla lösningar. Vi söker heltalslösningar så att: antvuxna vuxpris + antpens penspris + antbarn barnpris = kassan I programmet ska man sedan i en meny kunna välja om man vill ha statistik för alla biograferna (enligt grunduppgiften) eller räkna ut hur många biljetter som sålts av varje sort för en viss biograf. Tips: Tar det lång tid att göra beräkningarna? Fundera över vilka permutationer som är rimliga att testa. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt till programmet.

CSC, KTH DD1314 prgcl våren 2016 (Python) 141 Tennismatch P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer, sortering, viss filhantering. Du ska skriva ett program för att samla statistik från tennismatcher. Användaren får välja två antagonister ur en spelarförteckning. Denna skriver du ihop själv (skapa en textfil med spelarnas data). Den kan se ut så här: Format: Namn (max 20 tkn) / sannolikhet att vinna sin serve (0-1) antal vunna matcher / antal spelade matcher ============================================================== B Borg 0.85 5 7 J Näsman 0.12. Programmet presenterar urvalet (se nedan) och användaren väljer ut två av spelarna, som får möta varandra i tennismatchen. Användaren får också mata in vem som vann matchen. Sen ska resultatlistan uppdateras och presenteras på nytt. Spelarna ska sorteras med avseende på vinstprocenten. Det kan t ex se ut så här: Plac Namn vunna spelade andel vunna 1 B Borg 5 7 0.714 2 J Connors 12 34 0.353 3 J Näsman 0 12 0.000. Extrauppgift, betyg C: Kontrollera att infilen existerar och att den innehåller rimliga data. Extrauppgift, betyg B: Skriv ett program som simulerar en tennismatch i tre set. Matchen delas upp i set, game och bollar. För att avgöra vem som vinner en boll används random. Servar spelare A och 0 < x < p A så vinner A bollen (p A = sannolikheten att A vinner sin serve). Efter första vinstbollen har man 15 poäng, efter andra 30 och efter den tredje 40. Vidare finns begreppen lika och fördel samt game. VGV

Vi illustrerar dessa enklast med ett par exempel på poängställningar, (vi kallar spelarna här för spelare A respektive spelare B ): 15-0, 15 lika, 15-30, 30 lika, 30-40 game: spelare B Efter ställningen 40 lika, används endast begreppen lika, fördel och game för att beskriva ställningen (det finns alltså inga poängsiffror > 40). fördel spelare A betyder att spelare A leder med en boll. 30-40, 40 lika, fördel spelare A game: spelare A Gamet är avslutat först efter att en spelare har vunnit, dvs fått 40 poäng och vinner nästföljande boll och motståndaren har < 40 poäng, eller att någon har haft fördel och vinner nästföljande boll. Spelarna servar vartannat game. Den spelare som först har vunnit 6 game och har minst två game mer än motståndaren (6-4, 6-3 etc), vinner setet. Setet fortsätter tills någon av spelarna har två games övervikt. Matchen spelas i tre set. Vem som börjar att serva avgörs av användaren eller av slumpen. Användaren skall kunna välja hur ofta han vill se ställningen, efter varje boll, efter varje game osv. Poängställningen skall presenteras på ett trevligt sätt. Efter avslutad match ska setsiffror samt vinnaren presenteras. Skriv en pausfunktion, så att vi hinner med att se hela presentationen (så att vi kan stanna till efter x stycken bollar, game osv.) När användaren ska peka ut en spelare (vilka som ska spela), är det praktiskt att identifiera dem med placeringsnumret. Då slipper användaren mata in hela namnet... Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt (GUI). När tennismatcher visas på TV brukar en resultattabell, som ändras efter varje boll och set, visas längst ner i bild. Låt ditt program skriva ut och uppdatera en sådan tabell i ett grafikfönster (istället för att skriva ut resultaten rad för rad).

CSC, KTH DD1314 prgcl våren 2016 (Python) 145 Varuprisdatabas P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Filhantering samt datastrukturer. I många butiker är varorna inte prismärkta utan bär i stället ett streckkodat varunummer som kassaexpediten läser av med ljuspenna. I butiksdatorns databas finns varans data lagrade på en textfil som kan se ut så här: % Format: % kod % namn % pris antal ============================================= 100 CHIPS 14.90 353 135 STÖVLAR 159 234. Expediten läser av varorna med sin ljuspenna, för att få ett kvitto avslutar denne med att mata in ett #-tecken. Så här kan kvittot se ut: Varunamn Antal A-pris Summa CHIPS 1 14.90 14.90 VOLVO 2 107000.00 214000.00 STÖVLAR 1 159.00 159.90 CHIPS 1 14.90 14.90 Total 5 214189.70 Ditt program ska uppföra sig på motsvarande sätt. Databasen ska ligga i en varufil, som du skriver ihop själv. Då vi saknar ljuspenna matar vi in varorna via kassaapparatens tangentbord. Inmatningen av det ovanstående inköpet får då följande utseende: 100 280 2 135 100 # VGV

För att hålla antalet filläsningar nere ska du läsa in varufilen i en datastruktur. Detta betyder att du uppdaterar datastrukturen kontinuerligt och varufilen endast efter avslutad körning. Extrauppgift, betyg C: Tänk på att om det finns 20 påsar chips i lager, ska det inte vara OK att mata in först 14 påsar, och sedan 10 till! Allt eftersom man slår in varunummer kollar programmet att koden finns i databasen samt att det finns tillräckligt antal varor i lager, annars kommer en felutskrift, följt av möjligheten att mata in på nytt. Kontrollera också att inmatningens syntax är korrekt så att inga tokigheter händer om man råkar tryck på fel knapp. Extrauppgift, betyg B: Se till att alla varor av samma slag hamnar på samma plats på kvittot! Det innebär att ovanstående inköp skulle ge följande kvitto i stället: Varunamn Antal A-pris Summa CHIPS 2 14.90 14.90 VOLVO 2 107000.00 214000.00 STÖVLAR 1 159.00 159.90 Total 5 214189.70 Det händer att kassaexpediten gör felslag. Modifiera ditt program så att det går att ångra inmatade inköp innan kvittot skrivs ut. Man ska givetvis inte (som i riktiga affärer) behöva ångra allt man matat in efter det felaktiga först. Det ska också vara möjligt att ångra bara en del av sitt inköp, t ex ångra 3 påsar chips, när man köpt 5. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt genom vilket all in- och utmatning sker.

CSC, KTH DD1314 prgcl våren 2016 (Python) 154 Wumpus P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer, slumptal. Wumpus är ett enkelt äventyrsspel. Så här ser det ut när man spelar: Du befinner dig i kulvertarna under CSC, där den glupske Wumpus bor. För att undvika att bli uppäten måste du skjuta Wumpus med din pil och båge. Kulvertarna har 20 rum som är förenade med smala gångar. Du kan röra dig åt norr, öster, söder eller väster från ett rum till ett annat. Här finns dock faror som lurar. I vissa rum finns bottenlösa hål. Kliver du ner i ett sådant dör du omedelbart. I andra rum finns fladdermöss som lyfter upp dig, flyger en bit och släpper dig i ett godtyckligt rum. I ett av rummen finns Wumpus, och om du vågar dig in i det rummet blir du genast uppäten. Som tur är kan du från rummen bredvid känna vinddraget från ett avgrundshål eller lukten av Wumpus. Du får också i varje rum reda på vilka rum som ligger intill. För att vinna spelet måste du skjuta Wumpus. När du skjuter iväg en pil förflyttar den sig genom tre rum - du kan styra vilken riktning pilen ska välja i varje rum. Glöm inte bort att tunnlarna vindlar sig på oväntade sätt. Du kan råka skjuta dig själv... Du har fem pilar. Lycka till! Jag hör fladdermöss! Härifrån kan man komma till följande rum: 6 3 2 14 Vill du förflytta dig eller skjuta (F/S)? F Vilken riktning (N, S, V, Ö)? N Du känner fladdermusvingar mot kinden och lyfts uppåt Efter en kort flygtur släpper fladdermössen ner dig i rum 19 Jag känner lukten av Wumpus! Jag känner vinddrag! Härifrån kan man komma till följande rum: 2 18 5 15 Vill du förflytta dig eller skjuta (F/S)? S Pilen lämnar första rummet. Vilken riktning (N, S, V, Ö)? N Pilen lämnar andra rummet. Vilken riktning (N, S, V, Ö)? Ö Pilen lämnar tredje rummet. Vilken riktning (N, S, V, Ö)? N Vill du förflytta dig eller skjuta (F/S)? F Vilken riktning? S Du klev just ner i ett bottenlöst hål. VGV

Spelaren (den som kör programmet) går runt i kulvertarna, letar rätt på och försöker skjuta Wumpus. Spelet avslutas när spelaren eller Wumpus dör. Låt varje rum representeras av ett objekt av klassen Rum. I objektet lagras information om vad som finns i rummet (Wumpus, fladdermöss, avgrundshål eller ingenting) och vart gångarna i rummet leder (norra gången leder till rum 17, östra till rum 2 osv). Bilda en lista av rumsobjekt för att representera kulvertarna (varje rum har då ett nummer). Slump får du med random. I programmets början ska rummens innehåll slumpas fram. Ungefär 20 % av rummen ska innehålla avgrundshål, 30 % ska vara bebodda av fladdermöss och i ett av rummen finns Wumpus. Ett rum kan aldrig innehålla flera faror (Wumpus äter fladdermöss och varken Wumpus eller fladdermössen gillar draget från avgrundshål). Även kulvertarna ska sättas samman med slumpens hjälp i början av programmet. Gör t ex så här: Skapa en lista med alla rumsnummer och blanda den så att rummen kommer i slumpmässig ordning, t ex 5 2 12 18 9 1 3 6 14 19 11 7 17 4 20 16 10 15 8 13 Koppla ihop rummen i öst-västlig riktning så att östra gången från rum 5 leder till rum 2 och västra gången från rum 2 leder tillbaka till rum 5 osv. Sista rummet i listan ska kopplas ihop med första. Slumpa en ny lista och gör samma sak i nord-sydlig riktning. Rummet söder om rummet norr om det rum man befinner sig i ska alltså vara det rum man befinner sig i. Spara antalet drag som en spelare gör och om man vinner så sparas detta på en high-score fil som uppdateras när spelet avslutas. Extrauppgift, betyg C: Inför felkontroll för all inmatning från användaren. Extrauppgift, betyg B: Låt användaren välja svårighetsgrad. Spelet kan göras enklare genom att man sänker sannolikheten för faror, och knepigare genom att låta Wumpus röra sig i kulvertarna (läskigast blir det om Wumpus hela tiden kommer närmare). Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt (GUI). Du behöver inte slumpa rummen som i grunduppgiften.

CSC, KTH DD1314 prgcl våren 2016 (Python) 155 Tittarsiffror P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Sökning, sortering, filhantering. Många är intresserade av TV:s tittarsiffror, däribland programmakare, programchefer och sponsorer. Du ska skriva ett program som presenterar statistik över tittarsiffror på olika sätt. Så här ska det se ut: --------------------- Meny ------------------- 1. Tio-i-topp-lista 2. Tittarsiffror för ett visst program 3. Sluta Vad vill du göra? 1 --------------------- Tio-i-topp-lista ------------------- 1. Aktuellt 57 st (60%) 2. Sportnytt 47 st (49%) 3. Rapport med väder 34 st (36%) 4. Ängeln och den laglöse 33 st (35%) 5. Tippen 20 st (21%) 6. Myggan 18 st (19%) 7. Skilda världar 18 st (19%) 8. Grannar 16 st (17%) 9. Paradise Beach 16 st (17%) 10. Norrköpings sommarcafe 12 st (13%) Statistik har samlats in från 93 TV-apparater. ---------------------------------------------- Vad vill du göra? 2 Ditt underlag får du ur följande två filer: Filen www.csc.kth.se/~lk/p/tittardata.txt som innehåller data för en dag insamlade från de TV-apparater som är med i undersökningen. När TV:n är påslagen registrerar den klockslag och inställd kanal vid fasta tidpunkter varje dag. Data från olika apparater ligger i samma fil, men skiljs åt av streckade rader. Format: tid/kanal ================= 19.37/2 19.52/2 21.07/1 ------- 16.22/4 16.37/4 Filen www.csc.kth.se/~lk/p/program.txt innehåller en dags TV-program för flera kanaler (åtskilda av streckade rader). Du får utgå från att filen inte innehåller samma program mer än en gång, samt att inget program går över dygnsgränsen. Det är också Fritt fram att ändra innehållet bäst man vill bara filen är minst lika stor.

Format: kanal tid program =============================== Kanal 1 21.30-21.40 Sportnytt 21.40-22.35 UR: Sommarkvällar med Tidernas Europa ------------------------------------------------------------------ Kanal 2 8.30-9.00 Let s Dance 9.00-10.00 Biggest Loser Datafiler och hjälpfiler: www.csc.kth.se/~lk/p/tittardata.txt www.csc.kth.se/~lk/p/program.txt Extrauppgift, betyg C: Inför felhantering för användarens inmatning. Extrauppgift, betyg B: Man ska nu också kunna se stapeldiagram över viss kanal Vilken kanal vill du se stapeldiagram för? 2 ---------------- Stapeldiagram över antal tittare, kanal 2 ------------------ 8.30-9.00 Let s Dance **************** 9.00-10.00 Biggest Loser ****************** 17.50-18.20 Klockan Nio: hos stjärnorna * 18.20-19.20 Friends * 19.20-19.30 Regionala nyheter ** 19.30-20.00 Rapport med väder ****************************** 20.00-21.00 Fresh Prince of Bel-Air *********** 21.00-22.25 Teenage mutant ninja turtles ** 22.25-23.15 Hawaii five-o ** 23.15-23.55 Kalla fakta ** (En stjärna motsvarar 0.9 tittare och längsta stapeln 34 tittare.) Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt till programmet. Använd knappar för att ange olika val och presentera statistiken i snygga diagram.

CSC, KTH DD1314 prgcl våren 2016 (Python) 162 Bibliotek P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer, sökning, sortering, filhantering. Skriv ett program för hantering av enklare biblioteksrutiner. Programmet ska kunna söka efter böcker både med avseende på författare och titel. Man ska även kunna låna och lämna tillbaka böcker, lägga in nya böcker i registret och ta bort gamla böcker, samt skriva ut en lista på skärmen över alla böcker. Böckerna ska sorteras med avseende på författare. Böckerna ska lagras på en textfil som du får skriva in själv. Din fil behöver inte innehålla fler än tio böcker men ditt program ska gå att använda även för ett stort antal böcker. Programmet ska komma ihåg vilka böcker som är utlånade även om användaren stänger av och startar om programmet på nytt. Exempel: Välkommen till biblioteksprogrammet! T söka på Titel. F söka på Författare. L Låna bok. Å Återlämna bok. N lägga in Ny bok. B ta Bort bok. A lista Alla böcker. S Sluta. Vad vill du göra? F Vilken författare vill du söka efter? Martin Hittade 2 böcker Martin: Agile software development (utlånad) Martin: Clean Code Vad vill du göra? L Ange titeln på den bok du vill låna: Clean Code Vad vill du göra? s Välkommen åter! Tips: Skriv programmet i etapper. Börja med att läsa in böckerna från fil och skriva ut dem igen. Utöka sedan programmet stegvis. VGV

Extrauppgift, betyg C: Inför felkontroll för användarens inmatning och filers existens. Extrauppgift, betyg B: Inför en användardatabas där man måste registrera en personlig användare för att få låna böcker. Låt nu programmet hålla reda på vem som lånat boken och vilket datum den ska återlämnas. En person har namn, personnummer, emailaddress och typ. Två olika typer av användare skall finnas. Först har vi vanliga användare, som ska kunna låna och lämna tillbaka böcker till biblioteket. Sedan har vi typen administratör, som även (likt grunduppgiften) kan lägga till och ta bort böcker ur biblioteket, samt lägga till nya användare, och ta bort användare som inte sköter sig! En administratör ska kunna be om en lista på alla personer som lånat böcker, och vilka de lånat. Böcker som borde varit tillbakalämnade ska markeras. Man ska också kunna få en lista på enbart personer som har böcker hemma vars datum gått ut tillsammans med dessa böcker och hur mycket personen är skyldig i böter. Kolla upp bötesregler på biblioteket! Tips: Beroende på vilken användare som loggar in i bibliotekets söktjänst ska alltså olika menyer visas. Tänk på vad som händer om en administratör tar bort en användare som fortfarande har lånade böcker! Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt till programmet.

CSC, KTH DD1314 prgcl våren 2016 (Python) 166 Telefonregister P-uppgiften ska göras individuellt. Läs CSC:s hederskodex innan du börjar! Varudeklaration: Datastrukturer, sökning, sortering, filhantering. Ett vanligt problem är att man vill lägga upp ett telefonregister där man snabbt kan leta upp telefonnumret för en viss person eller personen som har ett visst telefonnummer. Man vill också kunna lägga till personer i registret, ta bort personer ur registret samt kunna ändra en persons telefonnummer och adress. Ditt program skall: 1. Läsa in ett register från en fil med namn, telefonnummer och adress för ett antal personer. 2. Så länge användaren vill köra så skall programmet fråga om man vill leta efter ett telefonnummer eller ett namn, lägga till nya uppgifter, ta bort uppgifter, ändra uppgifter (telefonnummer och adress) eller ha en sorterad (namnordning) utskrift av registret. 3. Innan programmet slutar skriva ut uppgifterna på fil igen, inklusive eventuella nya uppgifter och ändringar. Filen med personuppgifterna skriver du själv in. Du bör ha minst 15 olika personer. Använd en textfil där varje person tar upp 4 rader. De olika raderna innehåller efternamn, förnamn, telefonnummer och adress. Genom att använda en textfil kan du själv lätt skriva in data. Filen behöver inte vara sorterad, men får gärna vara det. Exempel: Andersson Anders 123456 Testvägen 4, Huddinge Jansson Jan 324567 Klutvägen 3, Bromma... Den sorterade listan skrivs lämpligen med en person på varje rad: Efternamn Förnamn Telefon Adress ===================================================== Andersson Anders 123456 Testvägen 4, Huddinge Jansson Jan 324567 Klutvägen 3, Bromma... När man ändrar data om en person, vill man inte vara tvungen att skriva in det som är oförändrat (t ex adressen, om man bara ska byta telefonnummer) på nytt, utan bara det som ska ändras. Det är viktigt för sökningen att uppgifter som skrivs in av användaren, både vid nyinmatning, ändring och sökning, omvandlas till ett enhetligt format. Se till att ta bort inledande och avslutande blankslag, och se till att alla telefonnummer får samma form, t ex helt utan andra tecken än siffror! VGV