101 Belysning av klot



Relevanta dokument
101 Belysning av klot

Programmeringsprojekt, STS1

UPPGIFT 1 V75 FIGUR 1.

Uppgift 1 ( Betyg 3 uppgift )

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Programmeringsolympiaden Kvalificering mars 2005 FIGUR 1.

C++ Slumptalsfunktioner + switch-satsen

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

STYRANDE SATSER. 1) Skriv ett program som räknar ut hur många år du har till pensionen. Vi räknar här med att man pensioneras det år man fyller 65 år.

Excel Övning 1 ELEV: Datorkunskap Sida 1 Niklas Schilke

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Uppgift 1 (vadå sortering?)

Uppgift 1 ( Betyg 3 uppgift )

HI1024 Programmering, grundkurs TEN

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

HI1024 Programmering, grundkurs TEN

TDP Regler

Uttryck, satser och strömhantering

Uppgift 1 ( Betyg 3 uppgift )

Objektorienterad programmering D2

101 Belysning av klot

Tentaupplägg denna gång

Utförliga regler för TRAX

Tentaupplägg denna gång

101 Belysning av klot

Laboration 1 Introduktion till Visual Basic 6.0

Gör så här för att rapportera:

Grundkurs 2 IKT. Dan Haldin Ålands lyceum

WebitRental Uthyrningssystem. WebIT Design i Kalmar HB

HI1024 Programmering, grundkurs TEN

Programmering. Scratch - grundövningar

kl Tentaupplägg

HI1024 Programmering, grundkurs TEN

Introduktion till Matlab

BaraTrav fliken Poäng Version 2.2

Mäta rakhet Scanning med M7005

WebViewer Manual för administratör Nova Software AB

EXTRA UPPGIFTER I C++ PROGRAMMERING-A

DN1212/numpm Numeriska metoder och grundläggande programmering Laboration 1 Introduktion

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

Rapportgenerator handbok

ANVÄNDARBESKRIVNING FÖR PERSONAL

Välj bloggen som du använder i skolan, i detta fallet heter den Min Skolblogg.

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

Uppgifter till praktiska tentan, del A. (7 / 27)

TDP Regler

TDP Regler

Medelvärde, median och standardavvikelse

Vid fel och frågor Ta kontakt med förbundet. Logga in. Menyn

kl Tentaupplägg

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

DD1311 Programmeringsteknik för S1 Laborationer läsåret

5HVLVWHQVWDEHOO 'DWD3DUWQHU. Er partner inom data

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

kl Tentaupplägg

Kontrollera att följande punkter är uppfyllda innan rapporten lämnas in: Första sidan är ett försättsblad (laddas ned från kurshemsidan)

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

TDP Regler

DUGGA Tentaupplägg

Innehållsförteckning. Sidan 2 (24)

TENTA: TDDD11 & TDDC68. Tillåtna hjälpmedel. Starta Emacs, terminal och tentakommunikationsfönster. Skicka in frågor och uppgifter

LÄSLANDET - BOKSTÄVER OCH ORD

Katedralskolan Lena Claesson MICROSOFT EXCEL

Ett enkelt Kalkylexempel - Fruktaffären

Uppgift 1 (Sorterade heltal som är OK)

1. Ledare Hantera deltagare Rapporter Övriga menyer... 15

Copema Supertoto, manual

Manual för Excelprogrammet

Genetisk programmering i Othello

Importera och använda en textdatabas i Excel

Lathund CallCenter 2010

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

Lathund Excel Nytt utseende. Skapa Nytt. Flikar

TDIU Regler

Programmeringsolympiaden 2012 Kvalificering

Första sidan är ett försättsblad (laddas ned från kurshemsidan) Alla frågor som nns i uppgiftstexten är besvarade

kl Tentaupplägg

Introduktion till frågespråket SQL (v0.91)

Arbeta vidare med aritmetik 2018

Datorlaboration 1 Deskriptiv statistik med hjälp av MS Excel

TDIU Regler

Microsoft Excel Grundkurs

IdrottOnline Klubb manual medlemsregistret

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

*****************************************************************************

Uppgift 1a (Aktiekurser utan poster)

Handbok - CMG Office Web

Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Data Data Data Data Data Data Data Data

Aktivitetsstöd Närvarorapportering. Ansvarig i Föreningen

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Programmeringsolympiaden 2011 Kvalificering

Gränssnitt för FakeGranska. Lars Mattsson

Microsoft Office Excel, Grundkurs 2. Funktioner

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Uppgift 1 ( Betyg 3 uppgift )

kl Tentaupplägg

Excel-guide. Introduktion

Transkript:

NADA, KTH Betygsgradering: Grunduppgift medel, betyg E-A DD1311 prgs09 (Python) 101 Belysning av klot Läs anvisningar och betygsregler på kurshemsidan!!! 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. 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. 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-ochy-värden i intervallet ( r, r)ochfö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 =0dä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: Inför en meny som låter användaren välja mellan att ändra klotets radie, ljuskällans placering och antal steg i x- respektive y-led. Om inmatningen är felaktig ska programmet meddela detta och be om en ny inmatning. 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.

NADA, KTH DD1311 prgs09 (Python) Betygsgradering: Grunduppgift lätt, betyg E-A 102 Generering av bilnummer Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Datastrukturer, filhantering. Som bekant har man i Sverige ett bilregister där bilnumren består av tre bokstäver och tre siffror. (Man kan också betalaför att få ett annat, personligt registreringsnummer, men den här uppgiften handlar om de vanliga numren, enligt den gamla standarden.) Du ska skriva ett program som genererar nya godkända bilnummer och skriver ut dessa på en fil. Användaren får ange önskat antal nummer samt namnet på utfilen. Samma nummer ska inte skrivas ut flera gånger på filen.när du genererar bilnummer ska du följa reglerna nedan. Såhär kan en körning se ut: Välkommen till bilnummerprogrammet! Hur många bilnummer vill du generera? 20 Vilken fil ska numren skriva ut på? nummer.txt...nu har 20 bilnummer genererats och skrivits ut på filen nummer.txt Välkommen åter! Bokstäverna väljs ur en delmängd av det svenska alfabetet: A B C D E F G H J K L M N O P R S T U W X Y Z Man använder sig av en slumptalsgenerator för att generera såväl bokstäverna som siffrorna. Vissa av kombinationerna anses vara olämpliga och tillåts därför inte (se Wikipedias artikel om registreringsskyltar i Sverige). De förbjudna kombinationerna ska du själv skriva in på enfil.denkanseutsåhär: ASS BAK FIS. Inledningsvis ska programmet läsa in de förbjudna kombinationerna i en datastruktur. VGV

Extrauppgift, betyg C: Bygg ut programmet med en meny där man kan välja mellan att generera och kontrollera bilnummer. Generering Användaren anger hur många nummer som ska genereras, samt namnet på den fil dit resultatet ska skrivas. Programmet genererar bilnummer och skriver ut de korrekta numren på den specificerade filen. Kontroll Inmatningen ska kunna ske på tvåsätt: Användaren matar in önskade nummer på tangentbordet. Resultatet skrivs ut påskärmen. Programmet läser bilnumren från en fil (som namnges vid körningen). Denna skall innehålla ett antal bilnummer. Resultatet ska skrivas ut på en resultatfil, som även den namnges vid körningen. Programmet ska reagera på allt som inte är riktiga bilnummer. Observera att det gäller även om numren är för långa eller för korta, och att de i alla lägen ska komma ut intakta på utfilen. Resultatet av en kontroll ska kommenteras tillsammans med numret ochpresentationenskaseutsåhär: JKE 349 OK KUK 143 Otillåten kombination AKMN 124 Otillåten kombination 74 Otillåten kombination. Programmet ska innehålla tydliga instruktioner till användaren. Menyval är lämpligt: 1. Generera bilnummer 2. Kontrollera bilnummer från tangentbordet 3. Kontrollera bilnummer från fil Tips: Skriv en boolesk metod för varje fel som ska undersökas, så blir det enklare att utföra kontrollen av bilnummer. Extrauppgift, betyg B: Gör ett fullständigt register som även innehåller namn och adress till bilens ägare, samt bilmodell och år. Registret ska läsas in från fil vid programstart. Lägg till alternativ för registerhantering i menyn, så attmankanvälja att lägga till, ta bort, eller ändra i registret. Utöka kontrollen så att man inte genererar nummer som redan finns i registret. Lägg också till en sökfunktion som söker efter hela eller delar av bilnummer (den del som vittnet hann se när rånarbilen körde iväg...). Extrauppgift, betyg A: Gör ett grafiskt gränssnitt för hela programmet!

NADA, KTH Betygsgradering: Grunduppgift lätt, betyg E-A DD1311 prgs09 (Python) 103 Bostadsinköp Läs anvisningar och betygsregler på kurshemsidan!!! 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 sorterade i stigande ordning efter månadskostnad (alltså medden billigaste först). Du får själv skriva ihop en textfil med data om bostäder, på följande format: % Format: Område / Pris / Bostadsyta / Hyra / TelNr / Gatuadress Bagarmossen 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: (pris kontantinsats) ränta 100 (1 ränteavdrag 100 ) månadskostnad = hyra + 12 ytkostnad = pris yta Sedan ska bostäderna sorteras efter månadskostnad och skrivas ut på skärmen. Extrauppgift, betyg C: Användaren ska kunna göra ett urval mha menyer (textbaserade i denna extrauppgift). Parametrarna har inledningsvis lämpliga startvärden. Aktuella värden anges inom parenteser. Användaren ska kunna ändra dessa. Grundmenyn kan se ut så här: Dina valmöjligheter: O) Ändra önskat Område (Alla) M) Ändra önskad Månadskostnad (< 10 kkr) H) Ändra önskad Hyra (< 5 kkr) K) Ändra önskat Kvadratmeterpris (< 20 kkr) B) Ändra önskad Boendeyta (> 5 kvm) U) Skapa Urval A) Avsluta Ditt val (O M H K B U A): 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: Område: Bagarmossen 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. 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.

NADA, KTH DD1311 prgs09 (Python) Betygsgradering: Grunduppgift lätt, betyg E-A 104 Bulgarisk patiens Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Datastrukturer. Sortering. Regler för bulgarisk patiens: En del av en vanlig kortlek (minst 2 kort, högst 52) fördelas godtyckligt i några högar på bordet(valören på korten är ointressant i detta spel). Ettkorttasfrån varje hög och dessa får bilda en ny hög. Upprepa detta tills det går att avgöra att patiensen har gått ut (se nedan). Exempel: Vi väljer följande tre högar (totalt 10 kort): 4 4 2 Efter ett steg har vi fyra högar: 3 3 1 3 Efter ytterligare ett steg försvinner en hög: 2 2 2 4 2 2 2 4 För enkelhetens skull skriver vi fr.o.m. nu högarna i storleksordning. I nästa steg får vi: 4 3 1 1 1 Inästa steg försvinner tre högar och en ny kommer till: 5 3 2 Inga högar försvinner, en kommer till. Vi får: 4 3 2 1 Nästa steg blir faktiskt också: 4 3 2 1 Likaså nästa... 4 3 2 1 osv... Vi har alltsånått ett stabilt läge och patiensen har gått ut! Skriv ett program som läser in startfördelningen och som sedan skriver ut stegen fram till att patiensen har gått ut eller maximalt 25 steg. Högarna skall skrivas ut i storleksordning (inmatningen ska inte behöva vara det!). Startfördelningens antal kort måste kontrolleras (2 antal 52). Vid felaktig inmatning ska felmeddelande skrivas ut och användaren ska mata in en ny fördelning. Programmet ska även ge en kommentar om patiensen har gått ut eller ej. VGV

Extrauppgift, betyg C: Om en kortfördelning återkommer efter några steg har en cykel uppstått och man vet då att patiensen inte kommer att gå ut. 3 2 2 2 1 3 1 1 3 2 osv... Modifiera ditt program så att det avbryter direkt om en cykel uppstår. Programmet ska också innehålla en kontroll av användarens inmatning så attdetverk- ligen är ett heltal som kommer in. Om så inteär fallet ska programmet be om ett nytt värde. Extrauppgift, betyg B: Gör en meny där du låter användaren välja mellan: Se utlägg av en patiens. Se statistik på valt antal patienser (dvs användaren anger ett antal, programmet lägger så många patienser utan att visa utlägg på skärmen och berättar sedan hur många som gick ut). Programmet slumpar fram ett utgångsläge genom att välja fem slumptal mellan 0 och 10, som anger antalet kort i första till och med femte högen. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt (GUI)

NADA, KTH Betygsgradering: Grunduppgift lätt, betyg E-A DD1311 prgs09 (Python) 108 Fotbollsserie Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Filhantering, stränghantering, datastrukturer och sortering. Svenska Fotbollförbundet har gett dig i uppdrag att skriva ett program som tar emot matchresultat och skriver ut aktuellt utseende på serietabellen. Namnen på lagen och deras resultat ska ligga i en fil som du skriver ihop själv. Lagens data läggs ned i en datastruktur vid programstart. S V O F M Po 1 Öster 3 2 1 0 9-4 7 2 Malmö FF 2 2 0 0 4-1 6 3 IFK Göteborg 3 0 1 2 3-8 1 4 AIK 2 0 0 2 0-3 0 Formatet på tabellen: Först ordningsnummer och lagnamn. Därefter kommer lagens data: S = antal spelade matcher, V = antal vunna matcher, O = antal oavgjorda matcher, F = antal förlorade matcher, M = antal gjorda respektive insläppta mål och till sist Po = antal poäng. Vunna matcher ger tre poäng och oavgjorda en poäng. I grunduppgiften ska programmet läsa in lagens data från fil, sortera om lagen efter poängtal och skriva ut på skärmen. Det är alltså bara filnamnet som matas in av användaren. Extrauppgift, betyg C: Programmet ska startas med att man läser in lagens data. Användaren ska erhålla tydliga instruktioner, gärna i form av olika menyval (t.ex. Mata in resultat, Se tabell, Avsluta etc.) Efter varje resultatinmatning ska tabellen visas, men man ska även kunna titta på tabellen utan att mata in några resultat (genom ett av menyvalen). För att underlätta inmatningen kan varje lag betecknas med sitt ordningsnummer. Här nedan visas hur det kan se ut efter ett par matcher: Hemmalag= 4 Bortalag= 2 Resultat= 17-0 S V O F M Po 1 Öster 3 2 1 0 9-4 7 2 Malmö FF 3 2 0 1 4-18 6 3 AIK 3 1 0 2 17-3 2 4 IFK Göteborg 3 0 1 2 3-8 1 Hemmalag= Inför felkontroll för all inmatning. Extrauppgift, betyg B: I grunduppgiften sorterade du enbart efter poängtal. Nu ska du lägga till följande regler: Om två lag har samma poäng ska målskillnaden avgöra. Om två lag har samma målskillnad skall antalet gjorda mål avgöra. Om alla uppgifter är lika för två (eller flera) lag så ska de hamna i bokstavsordning efter lagnamnet. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt som sköter all dialog med användaren.

NADA, KTH DD1311 prgs09 (Python) Betygsgradering: Grunduppgift lätt, betyg E-A 112 Kontaktförmedling Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Filhantering. Datastrukturer. Sortering. Du ska skriva ett program åt företaget Datakontakt. Företaget åtar sig att förmedla en idealpartner för 300 kr. Vid en sådan förmedling får man först fylla i ett formulär av följande slag: Vilket kön sökes? m (man) / k (kvinna) / b (bägge):... Gradera från 0 till 5 hur du värdesätter följande: Mognad... Skönhet... Intelligens... Humor... Förmögenhet... Sexighet... Utbildning... Du skall själv skriva in registret som ska användas. Det kan se ut så här: Format: Namn(max 20 tkn),kön(m/k),ålder(år),skönhet(0-1),intelligens(runt 100), humor(0-1),förmögenhet(kkr),sexighet(0-1),utbildning(0-1) ============================================================== Hubert m 35 0.45 110 1.0 120 0.8 0.6 Erika k 24 0.85 90 1.0 0 1.0 0.2 Beata k 55 0.25 120 0.8 1500 0 0.5 osv... Programmet ska läsa in önskemålen (betyg och kön) enligt formuläret ovan. Programmet skataframettbetygpå varje person genom att vikta varje egenskap med det tal som angivits i formuläret. De tio mest lämpliga personerna ska presenteras i betygsordning. I presentationen skall personernas data tas med. Vi använder oss av följande metod: Har personen rätt kön? Vi normerar alla värden genom att dividera dem med resp egenskaps maxvärde (ex åldermax bland de tre ovanstående personerna är 55, dividera alla åldrar med 55. Utbildningsmax är 0.6, dividera...). Detta betyder att de normerade värdena kommer att varatalmellan0och1. Därefter multiplicerar vi de normerade värdena med respektive vikt och summerar ihop dessa tal. Summan blir personens betyg. VGV

Extrauppgift, betyg C: Inför fel- och rimlighetskontroll för alla inmatade värden. Extrauppgift, betyg B: Se till att användaren också kanvälja att lägga till eller ta bort en person ur registret. Filen ska givetvis uppdateras. Observera att det blir nödvändigt att normera om när personer läggs till eller tas bort. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt. Låt användaren mata in sina önskemål genom att fylla i ett formulär med textfält, knappar etc.

NADA, KTH DD1311 prgs09 (Python) Betygsgradering: Grunduppgift lätt, betyg E-A 113 Konversationsprogram Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Filhantering. Stränghantering. Hantering av datastrukturer samt sökning i dessa. Gör ett program som för en konversation av nedanstående typ. Hej, jag heter Snacke! Vad heter du? Sofia Roligt att träffa dej, Sofia! Vad har du för problem? Jag äter för mycket engelsk konfekt! Jaså, Sofia, du äter för mycket engelsk konfekt. Än sen? Jag blir för tjock. Jaså, Sofia, du blir för tjock. Än sen? Då blir mina byxor för trånga. Jaså, Sofia, då blir dina byxor för trånga. Än sen? Jag vill känna mej smal, pappskalle! Jaså, Sofia, du vill känna dej smal, pappskalle. Än sen? Har du svårt att fatta, din fjant? Jaså, Sofia, har jag svårt att fatta, min fjant. Än sen? osv... Programmet ska alltså kunna känna igen orden jag, du, min, din, mej, dej, mig, dig m. fl. och på lämpligt sätt byta ut dem. För att det ska vara lätt att utöka antalet ord som programmet ska känna igen och byta ut, ska du skriva ned orden och deras utbytesord på en fil. Den kan se ut så här: Format: sträng / sträng (orden max 15 tkn långa) ============================================================== jag/du min/din mig/dig. Observera att programmet inte ska söka enbart på det första av de två orden,utan även det andra. Du ska alltså inte skriva filen så här: jag/du du/jag min/din din/min. VGV

För att minska antalet läsningar av filen ska du läsa in ordparen i en datastruktur. Programmet avslutas genom att användaren ger ett RETURN-tecken istället för en textrad. Programmet ska jämföra det utplockade ordet med orden i ordlistan. Hittas ett identiskt ord, byter vi ut det mot det andra ordet i ordparet. Efter avslutad sökning skrivs ordet ut på skärmen (i datorns svar). Tänk på att göra jämförelsen utan hänsyn till stora eller små bokstäver. Extrauppgift, betyg C: Inför felkontroll av filens existens och innehåll (om raden inte innehåller två strängar åtskilda av / ska programmet tala om var i filen felet finns). Extrauppgift, betyg B: När man kört konversationsprogrammet några gånger tycker man att det svarar lite väl mekaniskt. Ett förbättrat program skulle kunna ge fortsätta konversationen på följande sätt: Jag är ledsen. Jaså, Sofia, du är ledsen. Än sen? Du fattar ju inget, du är ju bara en dator! Känner du obehag inför datorer? Jag tycker att programmering är svårt. Jaså, Sofia, du tycker att programmering är svårt. Än sen? Mitt program fungerar inte. Vad är det egentligen som oroar dig? Jag tror att handledarna undviker mig. Kan det ha något att göra med att du äter för mycket engelsk konfekt? osv... Skriv ihop en fil med nyckelord och tillhörande fraser. När något av nyckelorden dyker upp skriver du ut motsvarande fras. dator/python mamma/pappa/bror/syster idiot Känner du obehag inför datorer? Berätta mer om din familj. Tack detsamma! Låt programmet slumpmässigt skriva ut fraser av typen: Du verkar förvirrad. Har du några vänner du kan prata med? Vad är det egentligen som oroar dig? Spara en hel mening och skriv ut den senare, med inledningen: Kan det ha något att göra med att... Extrauppgift, betyg A: Gör ett grafiskt gränssnitt till programmet med filval och två olika textfönster, ett för inmatningen och ett för Snackes svar.

NADA, KTH Betygsgradering: Grunduppgift svår, betyg E-A DD1311 prgs09 (Python) 115 Kösimulering Läs anvisningar och betygsregler på kurshemsidan!!! 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. Naturligtvis skall dessa parametrar vara enkla att ändra. 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. 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. Extrauppgift, betyg C: Låt programmet läsa in öppettiderna och gör felkontroll på dessa. 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 vissminutdirektefterrå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/dd1311/p/random.txt

NADA, KTH Betygsgradering: Grunduppgift lätt, betyg E-A DD1311 prgs09 (Python) 117Simulerad kulstötning Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Filhantering, datastrukturer, sortering. En kulstötare kan förenklat beskrivas av två tal: M = medelvärdet för stötarnas längd S = standardavvikelsen för stötarnas längd Varje tävlingsstöt kan simuleras med ett normalfördelat slumptal med dessa parametrar. I pythons random-modul finns funktionen random.normalvariate(mu, sigma) som ger ett normalfördelat slumptal. Parametrarna mu och sigma motsvarar medelvärdet respektive standardavvikelsen. (Om du vill veta mer om medelvärde, standardavvikelse och normalfördelning så kan du läsa på i Wikipedia.) Programmet ska simulera en tävling mellan kulstötare. Dessa beskrivs på en fil som du skriver själv, t ex: Format: Namn (max 20 tkn) / medelvärdet för stötarnas längd standardavvikelsen för stötarnas längd ============================================================== Sten Säker 20.0 1.0 Olle Ojämn 19.0 2.0 Charlie Chans 18.0 3.0. Varje tävlande har sex kast. Efter varje tävling (alla deltagare har kastat sina 6 kast) skrivs segrarens namn och segerkastet ut. Den som kör programmet får bestämma hur många tävlingar som ska genomföras och efteråt ska statistik över antalet segrar skrivas ut (sorterad med avseende på antalet segrar). Hur många tävlingar? 100 Sten Säker 20.97 Charlie Chans 21.13. STATISTIK: Sten Säker Olle Ojämn. 32 segrar 18 segrar Extrauppgift, betyg C: Hantera delad seger: Två (eller fler) deltagare med samma stötlängd ska hamna på samma plats. Om de är bäst i tävlingen, räknas båda som segrare. VGV

Extrauppgift, betyg B: Utöka programmet så att varje kastare får placeringspoäng om de hamnar bland de 10 bästa. Utöka även beskrivningen av en kulkastare med en siffra mellan 0 & 1 som anger sannolikheten att en kastare blir skadad i ett kast (måste avbryta pågående tävling och stå över nästa tävling). Använd dig förslagsvis av slump för att avgöra om en spelare blir skadad eller inte. Slutstatistiken (sorterad m a p poäng) ska ange poäng, antal segrar och antal tävlingar (som kastaren har fullbordat). Extrauppgift, betyg A: Lägg till ett grafiskt gränssnitt. Rita ut en kulstötningsplan där du visar de olika spelarnas bästa kast representerade av olikfärgade cirklar. Inkludera en legend där man kan identifiera spelarnas färg. Var kreativ. Datafiler och hjälpfiler: www.csc.kth.se/dd1311/p/random.txt

NADA, KTH DD1311 prgs09 (Python) Betygsgradering: Grunduppgift svår, betyg E-A 119 Ludvig XIVs patiens Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Datastrukturer. Rekursion. Blanda leken och lägg successivt ut korten med framsidan upp bredvid varandra från vänster till höger! Om ett kort har samma färg (sp, hj, ru, kl) eller samma valör som sin närmaste granne till vänster eller som det kort som ligger tre steg till vänster får det läggas ovanpå detta. När ett kort lagts på ett annat flyttas de i fortsättningen tillsammans. Högen betraktas alltså som ett enda kort. När alla kort lagts ut räknar man högarna. Det går ut på att få såfåhögar som möjligt. Ludvig XIV lade patiensen hela livet utan att komma ner till en hög... Ditt program ska simulera patiensläggningen och arbetar helt självständigt. Så här kan det se ut på skärmen: sp 10 sp 10 hj E sp 10 hj E hj K sp 10 hj K sp 10 hj K ru 5 sp 10 hj K ru 5 sp 4 sp 4 hj K ru 5 sp 4 hj K ru 5 sp K sp K hj K ru 5 hj K ru 5 osv... Programmet slutar med att skriva ut hur många högar det blev kvar. Grunduppgift: Efter varje utlagt kort ska användaren få vetaomkortetgår att flytta (men programmet ska inte genomföra själva flytten). VGV

Extrauppgift, betyg C: Gör en meny där du låter användaren välja mellan: Se utlägg av en patiens. Se statistik på valt antal patienser (dvs användaren anger ett antal, programmet lägger så många patienser utan att visa utlägg på skärmen och berättar sedan hur många som gick ut) Glöm inte felkontroll av menyalternativ och indata. Extrauppgift, betyg B: Gör ett program som utför flyttningar och lägger en hel patiens. Prova själv spelet med en kortlek för att komma på en algoritm. Extrauppgift, betyg A: Här ska användaren få lägga patiensen själv. Leta upp små bilder av kort eller skapa egna bilder och gör gränsnittet grafiskt. Lägg vidare till en knapp där man klickar då man vill stega sig fram genom utläggen. Datafiler och hjälpfiler: www.csc.kth.se/dd1311/p/random.txt

NADA, KTH Betygsgradering: Grunduppgift medel, betyg E-A DD1311 prgs09 (Python) 121 Master Mind Varudeklaration: Datastrukturer. Läs anvisningar och betygsregler på kurshemsidan!!! Du ska skriva ett program som spelar Master Mind. Användaren ska tänka på ett tal och datorn försöker gissa det. Så här kan det se ut: Tänk på ett fyrsiffrigt tal med fyra olika siffror och tryck retur! Jag försöker gissa talet och du anger rätt och fel med t ex RFF, där R innebär att en siffra är rätt och står på rätt plats F innebär att en riktig siffra står på fel plats (retur) innebär att inga av siffrorna finns med i talet Jag gissar 1023 och du svarar: RF Jag gissar 1245 och du svarar: RR Jag gissar 1267 och du svarar: RF Jag gissar 1346 och du svarar: RF Jag gissar 1605 och du svarar: Jag gissar 7243 och du svarar: RRRR Det tog alltså 6 gissningar, bättre kan jag! Programmet läser ett svar och kodar det till ett heltal genom att låta varje R vara värt 10 och varje F värt 1, t ex RFF 12. Så här kan programmet gå tillväga för att få fram sina gissningar: Alla gamla gissningar och motsvarande svarskoder sparas. För att en gissning ska vara en rimlig lösning måste följande gälla: 1. Talet skall bestå av fyra olika siffror 2. Talet ska ge samma svarskod som varje gammal gissning fick som svar. Programmet börjar med att gissa på 1023 (det första fyrsiffriga talet med fyra olika siffror). Nästa gång måste programmet välja en gissning som inte motsäger någon av de tidigare gissningarna (t ex genom att stega igenom talen från 1023 till 9876 och ta det första som uppfyller kraven ovan). Vi tittar lite närmare på exemplet ovan. 1245 var programmets senaste gissning. Programmet ska nu söka efter ett tal som är större än 1245 och består av fyra olika siffror. När programmet hittat ett sådant tal (t.ex. 1246), jämför det detta med de gamla gissningarna. 1023 (första gissningen) i jämförelse med 1246 ger koden 11 (RF), OK så långt. 1245 (andra gissningen) i jämförelse med 1246 ger koden 30 (RRR), men den skulle givit 20 (RR). VGV

1246 förkastas alltså, eftersom den inte gav rätt svarskod på andra gissningen. 1247, 1248, 1249 och 1250 förkastas av samma skäl. 1251 har inte fyra olika siffror. Programmet måste räkna upp till 1267 innan det hittar en bra gissning. 1023 (första gissningen) i jämförelse med 1267 ger koden 11 (RF). 1245 (andra gissningen) i jämförelse med 1267 ger koden 20 (RR). Alltså är 1267 en rimlig gissning och programmet skriver ut denna. När ingen rimlig gissning existerar, ska programmet tala om detta. Tips: Skriv en funktion compare(guess1,guess2) som returnerar svarskoden som erhålls då vi jämför två gissningar. Extrauppgift, betyg C: Inför felkontroll av användarens inmatning. Extrauppgift, betyg B: Programmet ska kunna spela spelet med ombytta roller, dvs datorn slumpar fram ett tal, människan gissar och programmet svarar. Ett exempel: Hmmm... OK, Jag tänker på ett tal! Din gissning: 1234 Då säger jag FF Din gissning: 1122 Då säger jag F Din gissning: 2345 Då säger jag RF Din gissning: 2673 Då säger jag RRR Din gissning: 2683 JAAA, det var rätt på 5 försök! Observera att om användaren anger två lika siffror och en sådan finns med i det påtänkta talet, ska datorn bara ge rätt för den ena. Om någon av dem står på rätt plats, ska man få ett R, annars ett F. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt där man kan köra bägge spelvarianterna.

NADA, KTH Betygsgradering: Grunduppgift medel, betyg E-A DD1311 prgs09 (python) 122 Livet hos matematiska organismer Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Datastrukturer, filhantering. En familj matematiska 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å attanvä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

Matriserna kan lämpligen beståavbooleskaelement,somvisartrueomenrutain- nehåller en levande cell och FALSE med en död dito. Skriv en funktion, nygeneration, med två matriser som parametrar, levdenyss och levernu. I denna undersöks varje av levdenyss rutor enligt de ovanstående reglerna och en ny matris, levernu kan skapas (den nästkommande generationen). 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: Låt användaren bestämma hur reglerna för överlevnad och födelse ska se ut! 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/dd1311/p/cheshirekatt.txt www.csc.kth.se/dd1311/p/glidare.txt www.csc.kth.se/dd1311/p/rymdskepp.txt

NADA, KTH Betygsgradering: Grunduppgift medel, betyg E-A DD1311 prgs09 (python) 125 Personnummer Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Filhantering, datastrukturer, strängar. Skriv ett program som kontrollerar personnummer. Användaren från en meny få välja om han/hon vill mata in egna personnummer eller läsa från en fil som du får skriva ihop själv. Programmet skall kontrollera personnumren: Existerar datum? T ex 30/2 och 12/13 existerar inte. Är kontrollsiffran korrekt (se nedan)? Innehåller personnumret annat än siffror ( o istället för 0 etc)? Är personnumret för långt eller för kort? Hänsyn ska tas till ev skottår, som definieras enligt: (årtal % 4 = 0) och (årtal % 100 0) eller årtal % 400 = 0 Eftersom personnummer endast innehåller årtionden får detta förenklas till (årtal % 4 = 0) Kontrollsiffran kontrolleras på följande sätt: 1. De tio siffrorna i personnumret multipliceras i tur och ordning från vänster med 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 (varannan 2, varannan 1). 2. Siffersummorna av dessa produkter summeras och om summan är delbar med 10 så är kontrollsiffran korrekt. Observera att om produkten är t. ex. 12, ger denna en siffersumma 1+2. Programmet skall skriva ut alla personnumren, även de felaktiga, på en fil. Observera att det inte är tillåtet att anta att personnumren har en viss längd, t ex 10 tecken. Om längre eller kortare nummer förekommer, ska även de föras över till filen (intakta) med kommentarer. De felaktiga ska kommenteras med felets art (om ett nummer har flera fel, räcker det med att ett av felen kommenteras): 1111111116 1234567890 Fel kontrollsiffra hej Inte bara siffror 6700765456 Orimlig månad 1212123459 451231567213 För långt 14 För kort VGV

Användaren skall också i en meny kunna välja upprepade gånger vad han/hon vill titta på (direkt på skärmen): En lista med de personnummer som vid kontrollen visat sig vara korrekta En lista med de personnummer som vid kontrollen visat sig vara felaktiga, kommenterat med felets art, d v s enligt vilken av punkterna ovan som ett visst nummer inte var korrekt. Extrauppgift, betyg C: Tillåt att man skriver in personnummer på flera olika format. De här ska vara tillåtna, alla andra ska ge felutskrift. 620129-8558 62 01 29 8558 1962-01-29 8558 6201298558 Extrauppgift, betyg B: Titta på www.csc.kth.se/dd1311/p/tidochdatum.txtoch gör följande: Statistik: 2 st 0-9 -åringar 5 st 10-19 -åringar 1 st 20-29 -åringar. Kontrollera att inget födelsedatum är senare än dagens datum. Ingen hänsyn behöver tas till personer som är hundra år eller mer. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt (GUI) Datafiler och hjälpfiler: www.csc.kth.se/dd1311/p/tidochdatum.txt

NADA, KTH Betygsgradering: Grunduppgift medel, betyg E-A DD1311 prgs09 (Python) 127Platsbokning på SJ Läs anvisningar och betygsregler på kurshemsidan!!! 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 (modulo kan vara till hjälp för att få till kolumner och rader). 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 ett platsnummer. 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 ICKE RÖKARE Mittgång VGV

Extrauppgift, betyg C: Felmeddelande ska skrivas ut vid felaktiga inmatningar t ex (fler finns): Platsnumren ligger utanför intervallet 1...32 Bokning av en redan bokad plats. Avbokning av en obokad plats. Utskrift väljs, trots att inga bokningar har gjorts. Extrauppgift, betyg B: Inför fler sträckor och avgångstider. Bokningsläget (som består av de bokade platsernas nummer) för varje sträcka 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.

NADA, KTH DD1311 prgs09 (python) Betygsgradering: Grunduppgift lätt, betyg E-A 128 Prickskytte Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Datastrukturer, filhantering, sortering. En femringad måltavla har cirklar med radierna 10, 30, 50, 70 och 90 mm. Träff innanför den innersta cirkeln ger 5 poäng, övriga träffar i radiell ordning från centrum ger 4, 3, 2 respektive 1 poäng. Träffar utanför den yttersta ringen ger förstås 0 poäng. Vi kan även använda en formel för beräkningen av antal poäng p: p = (110 radien) DIV 20 0 radien 90 p = 0 radien > 90 där DIV betyder heltalsdivision. Din uppgift är att simulera en tävling i prickskytte. En skottserie består av tio skott och vid beräkning av poängsumman räknar man bort de två sämsta skotten. Får de två (eller fler) bästa skyttarna samma poängsumma så blir det omskjutning mellan dessa. Koordinaterna (x, y) för träffarna slumpas fram med hjälp av ett normalfördelat slumptal (se www.csc.kth.se/dd1311/p/random.txt). I pythons random-modul finns funktionen random.normalvariate(mu, sigma) som ger ett normalfördelat slumptal. Parametrarna mu och sigma motsvarar medelvärdet respektive standardavvikelsen. (dvs hur mycket kasten avviker från medelvärdet). (Om du vill veta mer om medelvärde, standardavvikelse och normalfördelning så kanduläsa på i Wikipedia.) Skriv ett program som läser in ett godtyckligt antal deltagare från en textfil, som du själv skriver ihop. Denna kan se ut så här: Format: Namn (max 20 tkn) / sigma / antal genomförda tävlingar antal vunna tävlingar / medelresultat på tävlingarna ============================================================== Pelle Pajas/32/12/2/24.3 Kalle Exakt/1/12/11/35.7. VGV

Användaren anger hur många tävlingar som ska genomföras under säsongen och därefter tävlar de tävlande mot varandra i tävling efter tävling tills säsongen är över. Vid varje tävling ska deltagarnas 10 skott skrivas ut följt av deras resultat. Efter avslutad tävling ska vinnaren skrivas ut. När säsongen är avslutad, ska de tävlandes statistik skrivas ut (antal vinster). Det kan se ut så här: ===================================================================== Tävling nr 1: Kalle Exakt 4 5 5 5 4 5 5 5 4 4 resultat = 38 Pelle Pajas 1 3 4 2 2 3 5 2 3 4 resultat = 26 Nisse Hurra 3 3 5 1 5 5 5 5 5 5 resultat = 38. Kalle Exakt och Nisse Hurra hade båda 38 poäng (bäst i tävlingen). De skjuter om: Kalle Exakt 4 5 5 4 5 5 5 4 4 4 resultat = 37 Nisse Hurra 5 5 5 1 5 5 5 5 1 5 resultat = 40 Nisse Hurra vann tävling nr 1. ===================================================================== Tävling nr 2: Kalle Exakt 4 3 5 4 5 5 3 3 5 5 resultat = 36. ===================================================================== Statistik: Kalle Exakt vann 5 tävlingar. Pelle Pajas vann 1 tävling.. Hantering av delad seger samt uppdatering av filen ingår inte i grunduppgiften (se B- uppgiften nedan). Extrauppgift, betyg C: Lägg in en pausfunktion efter ett lämpligt antal tävlingar (annars hinner vi ju inte se alla resultat). Inför felkontroll av filens existens och innehåll, samt användarens inmatning. Extrauppgift, betyg B: Se till att programmet kan hantera delad seger (se exemplet ovan). Uppdatera filen efter avslutad säsong med de nya värdena på antal genomförda tävlingar, antal vunna tävlingar och medelresultat för varje tävlande. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt som presenterar resultatet på ett snyggt sätt. Datafiler och hjälpfiler: www.csc.kth.se/dd1311/p/random.txt

NADA, KTH Betygsgradering: Grunduppgift svår, betyg E-A DD1311 prgs09 (python) 129 QZ-ord - en mästerlig ordgissare Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Datastrukturer, sökning, filhantering. Hej och välkommen till QZ-ord! Det gäller för mig att gissa det ord som du tänker på. Ordet skall innehålla fem bokstäver som alla är olika. Jag känner inte till ord med plural- eller tempusändelser och inte heller namn, alltså inte BRÄNT eller LÅDOR. Du svarar med en tvåsiffrig poäng XY där X är antalet bokstäver som över huvud taget är rätt, och Y är det antal bokstäver som dessutom står rätt placerade. Om du tänkte på SPARV och jag föreslår SKOLA blir alltså min poäng 21, nämligen 20 för S och A och 1 för rätt placerat S. Om du skriver? får du en lista över ord som jag för tillfället tror det kan vara som du tänker på, skriver du # anger jag endast hur många dom är. Tänk nu på ett ord och tryck sedan på RETUR. PLÄGA? Poäng: 10 BRAVO? Poäng: 30 VARJE? Poäng: 21 RAYON? Poäng: 32 Jag tror att det är DATOR Stämmer det(j/n)? j Det tog mig 4 frågor. Ska vi spela igen? (j/n) Det här trevliga programmet har en gång skrivits av matematikern Arne Fransen på FOA och du ska nu skriva en egen version. Om programmet ej kan lista ut vilket ord som användaren tänker på ska programmet göra följande: Fråga användaren efter rätt ord. Kontrollera om detta ord innehåller 5 stycken unika bokstäver. Om ordet var korrekt kan programmet endast beklaga att det ej fanns med i dess vokabulär. Tips: Filen www.csc.kth.se/dd1311/p/words.txt innehåller alla ord som kan komma i fråga. Då dennafilbarainnehåller ord med egenskapen att inga bokstäver är lika, behöver du inte kontrollera detta. Skriv en funktion som jämför den senaste gissningen med ett ord ur den kvarvarande ordlistan och returnerar svarskoden. Tänk på att inkludera de svenska tecknen i kontrollen. De ord som ej matchar, dvs ej ger samma svarskod som den användaren gett, kan inte vara det påtänkta ordet. För varje gissning blir mängden möjliga ord alltså mindre. Programmet slumpar hela tiden ett ord bland de kvarvarande möjliga. När bara ett enda ord är kvar vet programmet att det måste vara det som användaren tänker på. VGV

Extrauppgift, betyg C: Om man sparar gissade ord och deras poäng kan man göra en lite mer avancerad felkontroll: Jag ger upp, vilket ord tänker du på? FÖRUT Du skrev tyvärr fel poäng på TRÖJA (31), det borde ha varit 30. Extrauppgift, betyg B: Gör en version av spelet, där datorn tänker på ett ord och användaren gissar! Användaren ska, när han gissar, tillåtas att gissa på ord som inte finns med i ordlistan, och som kanske inte ens existerar. Däremot måste han förstås gissa ord med fem bokstäver i. Observera nu att poängen ska ges för varje bokstav i det påtänkta ordet - inte i det gissade!om användaren skulle gissa på ett ord där en viss bokstav förekommer mer än en gång, och denna också finns i det påtänkta ordet, får inte detta göra att datorn ger en poäng för varje förekomst i det gissade ordet. T ex: OK, jag tänker på ett ord. Du gissar: ABCDE Poäng: 20 Du gissar: TITTA Poäng: 21 Du gissar: DATOR Rätt! Du klarade det på 3 frågor. En meny ska alltså visas precis efter att man har startat programmet där användaren kan välja mellan basuppgiften och den här extrauppgiften. Alltså användaren ska kunna välja mellan att datorn ska tänka ett ord och användaren ska gissa eller att användaren ska tänka ut ett ord och datorn ska gissa. Extrauppgift, betyg A: Gör ett grafiskt användargränssnitt till programmet. Datafiler och hjälpfiler: www.csc.kth.se/dd1311/p/words.txt www.csc.kth.se/dd1311/p/random.txt

NADA, KTH Betygsgradering: Grunduppgift lätt, betyg E-A DD1311 prgs09 (Python) 132 Romerska årtal Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Stränghantering. Gör ett program som översätter romerska årtal till arabiska (vanliga) årtal och tvärtom. Årtalen ska kunna variera från 1 till 3999. Körexempel: Välkommen till den romerska årtalskonverteraren Anno Domine! Årtal: 1066... dvs MLXVI Årtal: 4711 Jag klarar tyvärr bara årtal från 1 till 3999. Årtal: MDCCCLXXXVIII... dvs 1888 Årtal: 1990... dvs MCMXC Årtal: XM Det är inte ett korrekt romerskt tal. Årtal: CMXC... dvs 990 Årtal: Pax vobiscum önskar Anno Domine! Följande tecken förekommer i romerska talen: Romerska: I V X L C D M Arabiska: 1 5 10 50 100 500 1000 De romerska talen ordnas såattdestörsta talen kommer först, de enda undantagen är dessa kombinationer: Romerska: IV IX XL XC CD CM Arabiska: 4 9 40 90 400 900 OBS! Inga andra specialfall behöver testas (trots att det i verkligheten finns sådana). Bokstavsvärdena i kombinationen adderas till en summa, studera körexemplet ovan samt denna lista: Romerska: I II III IV V VI VII VIII IX X XI Arabiska: 1 2 3 4 5 6 7 8 9 10 11 VGV

Tips: Programmet skall inte undersöka en massa specialfall. Regeln att de största talen kommer först gäller, med de enda undantagen givna ovan. Betrakta IV, IX etc som tal. Här är det risk för kodupprepning, så satsa på generella lösningar. Extrauppgift, betyg C: Inför felkontroll av inmatade romerska årtal med följande enkla algoritm: Omvandla det romerska årtalet till ett arabiskt. Omvandla tillbaka detta arabiska årtal till ett romerskt årtal. Är detta romerska årtal identiskt med det som matades in från början? Om de är lika är årtalet korrekt, annars felaktigt. Extrauppgift, betyg B: Ta reda påhurmanskriverstörre tal än 3999 och inför det i ditt program. Extrauppgift, betyg A: Gör ett grafiskt gränssnitt där man skriver in årtalen i ett textfält och klickar på romerska eller arabiska knappen för att fådetöversatt. Gör ocksåenromerskminiräknare som kan addera och subtrahera romerska tal.

NADA, KTH Betygsgradering: Grunduppgift svår, betyg E-A DD1311 prgs09 (python) 133 Sänka skepp Läs anvisningar och betygsregler på kurshemsidan!!! Varudeklaration: Datastrukturer. Viss skärmhantering. I extrauppgiften tillkommer sortering. Du ska skriva ett program som slumpvis lägger ut en mängd fartyg på enyta.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: Två fartyg får aldrig ligga precis intill varandra, utan det måste alltid finnas tomma rutor emellan. Fartygen måste ligga helt inom spelplanen. Programmet skall efter varje skott: 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. Skriva ut resultatet av skottet, träff eller bom. 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. 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å skjutaettellerfleraskottoch 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ändarenskafå möjlighet att titta på deej sänkta fartygens lägen före avslutning. Spelplanen presenteras på samma sätt som vid tjuvkiken. VGV