729G04 Programmering och diskret matematik TEN4 091120 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. Lycka till!
Problem 1 (Totalt 2p) Definiera en funktion chooseaction som tar som argument riktning, x-position och y- position, och returnerar en handling enligt följande algoritm. Se exempel på hur funktionen ska kunna anropas nedan. (2p) Om riktningen är österut och x-position är 10 och y-positionen är udda sväng vänster I annat fall om riktningen är norrut och x-position är 10 och y-positionen inte är udda sväng vänster I annat fall om riktningen är norrut och x-position är 1 och y-positionen är udda sväng höger I annat fall om riktningen är västerut och x-position är 1 och y-positionen inte är udda sväng höger I annat fall gå framåt Du kan använda följande definition av udda def odd(n): return n % 2!= 0 >> chooseaction( east, 1, 1) >> chooseaction("east", 10, 1) turn left >> chooseaction("north", 10, 1) >> chooseaction("north", 10, 2) turn left >> chooseaction("west", 10, 2) >> chooseaction("west", 1, 2) turn right >> chooseaction("north", 1, 2) >> chooseaction("north", 1, 3) turn right >> chooseaction("east", 1, 3)
Problem 2 (Totalt 5p) a) Skriv en funktion incinlist som använder en for loop för att gå igenom en lista och ökar alla tal med 1. (2p) b) Skriv om funktionen med en while loop. (3p) Exempel på hur programmet ska kunna köras: >> print incinlist([ 1, 'a', 2, 'b', 3 ]) [ 2, 'a', 3, 'b', 4 ] >> print incinlist([ 'a',' b' ]) [ 'a', 'b' ] Tips! För att testa om ett element e är ett tal kan man använda type(e) == int
Problem 3 (Totalt 8p) En musiksamling kan representeras av en dictionary på följande sätt: {'Carola' : [ 'Främling', 'Invincible', 'Fångad av en stormvind' ], 'Lena Ph' : [ 'Det gör ont', 'Dansa i neon', 'Om igen', 'Kärleken är evig' ], 'Magnus Uggla' : [ 'Johnny the rocker', 'För kung och fosterland' ]} a) Skriv en funktion addsong som lägger till en ny låt för en artist. Den ska ta tre argument: en musiksamling, en artist och en låt, dvs en dictionary och två strängar. (2p) b) Skriv en funktion getartist som tar två argument, en samling och en låttitel, dvs en dictionary och en sträng. Den ska då returnera den artist, dvs en sträng, som sjunger låten. (3p) c) Skriv en funktion generateplaylist som tar två argument: en musiksamling och en lista med artister, och returnerar en låtlista med 10 slumpade låtar med artisterna från listan (3p) Funktionerna ska kunna anropas på följande sätt: >> mycollection = {'Carola' : [ 'Främling', 'Invincible', 'Fångad av en stormvind' ], 'Lena Ph' : ['Det gör ont', 'Dansa i neon', 'Om igen', 'Kärleken är evig'], 'Magnus Uggla' : [ 'Johnny the rocker', 'För kung och fosterland' ]} >> addsong(mycollection, 'Carola', 'One love') >> print getartist(mycollection, 'One love') Carola >> print generateplaylist(mycollection, ['Lena Ph', 'Magnus Uggla']) ['Det gör ont', 'Det gör ont', 'Kärleken är evig', 'För kung och fosterland', 'För kung och fosterland', 'Johnny the rocker', 'Dansa i neon', 'För kung och fosterland', 'Johnny the rocker', 'För kung och fosterland']
Problem 4 (8 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 returnera en lista med personens barn. (4p) Funktionen ska kunna anropas på följande sätt: >> barn('evelina', minfamilj) [] >> barn('annika', minfamilj) ['natalie', 'evelina'] >> barn('eva', minfamilj) ['annika', 'thomas', 'mikael'] b) Skriv en funktion som givet en sådan lista och en person kan hitta och skriva ut information om personens farfar om det är möjligt. Funktionen ska kunna anropas på följande sätt: >> farfar('evelina', minfamilj) erik är farfar till evelina >> farfar('annika', minfamilj) Information om farfar saknas för annika