729G04 Programmering och diskret matematik TEN4 091020 kl 8-12 Examinator: Annika Silvervarg, telefonnummer 013-284068 Hjälpmedel: Dator, penna och suddgummi. Uppgifter: Tentamen består av 4 uppgifter (5 sidor inklusive denna sida). Poäng: Totalt kan man få 24 poäng. Betyg: För G behövs 12 poäng och för VG behövs 18 poäng. Frågor på tentamen: Examinator besöker lokalen ca kl 8 och kl 10. Om du har frågor och funderingar som du inte kan få svar på, skriv ner dessa och hur du tolkat oklarheter. Använd # och skriv längst ner i din fil (se nedan). Instruktion för att logga in och starta IDLE: 1. Logga in på kontot exam med lösenordet kluring1. 2. Skriv in ditt personnummer och det personliga lösenord du får av tentavakterna. 3. När du loggat in finns det ett öppet terminalfönster i nedre högra hörnet (om det saknas kan du högerklicka med musen på bakgrunden och välja Terminalfönster för att starta ett nytt) 4. Skriv idle & i terminalfönstret och tryck return 5. IDLE öppnas då. Tryck Ctrl + N för att öppna ett textredigeringsfönster. 6. Spara textfilen som dittstudentid.py 7. Skriv in följande rader överst i filen # -*- coding: cp1252 -*- # Ditt namn # Ditt personnummer 8. Skriv # Uppgift 1 etc innan varje uppgift som du löser Lycka till!
Problem 1 (Totalt 2p) Definiera funktionen sortclothes som tar som argument färgen och materialet på ett plagg och skriver ut tvättinstruktioner enligt följande algoritm. Se exempel på hur funktionen ska kunna anropas nedan. (2p) Om plagget är vitt och av bomull 60 graders vittvätt I annat fall om plagget är vitt 40 graders vittvätt I annat fall om plagget är rosa, lila elelr rött 40 graders kulörtvätt I annat fall 60 graders kulörtvätt >> sortclothes("white", "cotton") 60 grader vittvätt >> sortclothes("white", "silk") 40 grader vittvätt >> sortclothes("red", "cotton") >> sortclothes("pink", "silk") >> sortclothes("purple", "fleece") >> sortclothes("green", "cotton") 60 grader kulörtvätt >> sortclothes("black", "rayon") 60 grader kulörtvätt
Problem 2 (Totalt 5p) a) Skriv en funktion countletter som använder en for loop för att gå igenom en sträng och räkna alla förekomster av ett givet tecken. (2p) b) Skriv om funktionen med en while loop. (3p) Exempel på hur programmet ska kunna köras: >> print countletter("det var en gång en sång. Sången handlade om en gång.", 'å') 4 >> print countletter("hejsan", 'å') 0
Problem 3 (Totalt 8p) Ett datum kan representeras av en dictionary på följande sätt: { year : 2009, month : 8, day : 11} a) Skriv en funktion createdate som tar tre argument: årtal, månad och dag (dvs positiva heltal) och skapar ett nytt datum, dvs en ny dictionary med de angivninga värden (2p) b) Skriv en funktion printdate som tar ett datum, dvs en dictionary, som argument och skriver ut datumet på formatet YYYY-MM-DD (2p) c) Skriv en funktion addday som tar ett datum, dvs en dictionary, som argument och räknar upp det med en dag och returnerar ett nytt datum, dvs en ny dictionary. Observera att den måste kunna hantera övergångar mellan månader och år, se exemplet nedan. Du behöver inte ta hänsyn till skottår, dvs den 1 mars följer alltid efter den 28 februari. (4p) Funktionerna ska kunna anropas på följande sätt: >> today = createdate(2008, 8, 11) >> printdate(today) 2009-08-11 >> newyearseve = createdate(1999, 12, 31) >> printdate(newyearseve) 1999-12-31 >> newyearsday = addday(newyearseve) >>printdate(newyearsday) 2000-01-01
Problem 4 (9 poäng) En familj kan representeras av en nästlad lista där varje element är en lista med tre strängar. Den första är namnet på en person, den andra är namnet på personens pappa och den tredje är namnet på personens mamma. minfamilj = [['annika', 'bertil', 'eva'], ['thomas', 'bertil', 'eva'], ['mikael', 'bertil', 'eva'], ['henrik', 'erik', 'arja'], ['arne', 'erik', 'arja'], ['natalie', 'henrik', 'annika'], ['evelina', 'henrik', 'annika']] a) Skriv en funktion som givet en sådan lista och en person kan hitta och skriva ut information om personens mamma om det är möjligt. (3p) Funktionen ska kunna anropas på följande sätt: >> mamma('evelina', minfamilj) annika är mamma till evelina >> mamma('annika', minfamilj) eva är mamma till annika >> mamma('eva', minfamilj) Information om mamma saknas för eva b) Skriv en funktion som givet en sådan lista kan returnera en ny lista med syskonpar. Ett syskonpar representeras som en lista med två strängar. Två personer betraktas som syskon om deras föräldrar har samma namn. (6p) Funktionen ska kunna anropas på följande sätt: >> print syskon(minfamilj) [['annika', 'thomas'], ['annika', 'mikael'], ['thomas', 'mikael'], ['henrik', 'arne'], ['natalie', 'evelina']]