Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

Relevanta dokument
Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 7 augusti 2015, kl 08:00-12:00

729G74 - IT och programmering, grundkurs. Dugga.

729G04 Programmering och diskret matematik Tenta kl 14:00-18:00

729G04 Programmering och diskret matematik

729G04 Programmering och diskret matematik

729G04 Programmering och diskret matematik

729G04 Programmering och diskret matematik

729G04 Programmering och diskret matematik. Föreläsning 7

729G04 Programmering och diskret matematik TEN kl 8-12

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

TDDE44 Programmering, grundkurs

Tentamen TEN1 HI

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

729G04 Programmering och diskret matematik TEN kl 8-12

Tentamen i Introduktion till programmering

Tentamen TEN1 HI

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

kl Tentaupplägg

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tentamen TEN1 HI

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tentamen Datastrukturer (DAT037)

Tentamen i. Programmering i språket C

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

TDP Regler

729G04 Programmering och diskret matematik. Python 3: Loopar

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tentamen, EDAA10 Programmering i Java

TDP Regler

Programkonstruktion. Tentamen,

TDP Regler

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

TDIU01 / 725G

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Tentamen Datastrukturer (DAT036)

Tentamen i Programmering grundkurs och Programmering C

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

TDIU Regler

TDDI22 (exempel) TDDI22 Tentaregler

TDDC74 Lab 02 Listor, sammansatta strukturer

TENTAMEN OOP

Uppgift 1 ( Betyg 3 uppgift )

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Tenta i Grundläggande programmering DD klockan

Programkonstruktion. Tentamen,

HI1024 Programmering, grundkurs TEN

Problemlösning och funktioner Grundkurs i programmering med Python

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDIU Regler

Programkonstruktion. Tentamen,

TDIU Regler

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

TDP Regler

Föreläsning 6: Introduktion av listor

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen i Programmering

Tentamen: Programutveckling ht 2015

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Datalogi, grundkurs 1

Språket Python - Del 2 Grundkurs i programmering med Python

Tentamen Datastrukturer (DAT036)

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Tentamen, EDAA20/EDA501 Programmering

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

kl Tentaupplägg

TDP Regler

DAT043 Objektorienterad Programmering

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Teoretisk del. Facit Tentamen TDDC (6)

Abstrakta datatyper Laboration 2 GruDat, DD1344

Erfarenheter från labben

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN

Laboration: Whitebox- och blackboxtesting

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Objektorienterad Programkonstruktion

Tentamen Datastrukturer D DAT 035/INN960

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Programmering grundkurs och Programmering C

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

kl Tentaupplägg

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lösningsförslag till tentamen Datastrukturer, DAT037,

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Tentamen Datastrukturer, DAT037 (DAT036)

Transkript:

1 ( 7) Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier (ej anteckningar, föreläsningsbilder, gamla tentor, gamla labbar eller labbinstruktioner) Uppgifter: Tentan består av 8 uppgifter. Poäng: 29 Betyg: Godkänd: minst 14 poäng, varav minst 11 poäng från uppgift 1-6. Väl godkänd: minst 22 poäng samt kraven för Godkänd uppfyllda. Rättning: om inte minst 11 poäng erhålls från uppgift 1-6 rättas inte efterföljande frågor. Lösningsförslag kommer dock att skickas ut och lösningar kan diskuteras med examinator. Frågor på tentamen: Examinator är närvarande i lokalen i början av tentan och besöker sedan tentalokalen kl. 16. Du kan dock ställa frågor via meddelandesystemet (se instruktionsbladet). Om du har funderingar som du inte kan få svar på, skriv ner dessa och hur du tolkat eventuella oklarheter som kommentarer i koden. Om det är systemet som krånglar, kan en av tentavakterna kontakta examinatorn. Inlämning: Lämna in tentan genom att skicka in den via meddelandesystemet. Lämna in en fil med svar på alla uppgifter genom fråga 1. Felhantering av funktioners indata behöver ej göras om det inte explicit anges i uppgiften. Koden behöver ej följa PEP8 eller PEP257.

2 ( 7) Uppgift 1 (2p) Implementera funktionen get_price_with_vat(price_without_vat) som får in ett flyttal som representerar ett pris exklusive moms och som ska returnera priset inklusive moms. Gör också så att man kan skicka med en valfri andra parameter med momssatsen som ett flyttal. Om man inte anger någon momssats, så antar funktionen att det är 0.25 som gäller. >>> get_price_with_vat(10.0) 12.5 >>> get_price_with_vat(10.0, 0.5) 15.0 >>> Uppgift 2 (3p) Funktionerna i nedanstående deluppgifter får in en lista (values) med värden av olika slag. Funktionerna ska returnera antalet strängar i listan de får in. >>> get_number_of_strings_for([1, "2", "hej", 3.0, "hopp", [4], "hoppsan"]) 4 >>> get_number_of_strings_for([]) 0 a) Implementera funktionen get_number_of_strings_for(values) som fungerar enligt ovan. Använd en for-loop. (1p) b) Implementera funktionen get_number_of_strings_while(values) som fungerar enligt ovan. Använd en while-loop. (1p) c) Implementera funktionen get_number_of_strings_rec(values) som fungerar enligt ovan. Använd rekursion. (1p)

3 ( 7) Uppgift 3 (5p) För nedanstående uppgifter ska funktionen get_all_colors(peoples_colors) ta in ett dictionary vars nycklar är strängar och deras värden är listor med strängar. Nycklarna är namn på en person och deras värden är listor med personens favoritfärger. Exempel på dictionary: family_colors = { "ada": ["green", "blue", "red"], "borland": ["red", "pink", "green", "brown"], "cobol": ["black", "white"], "delphi": ["cyan", "magenta", "yellow", "black"] } Funktionen ska returnera en lista som innehåller alla färger som fanns med som värden i input-dictionaryt. Dubbletter är tillåtna. I körexemplet är dictionaryt family_colors definierat enligt ovan. >>> get_all_colors_for(family_colors) ["green", "blue", "red", "red", "pink", "green", "brown", "black", "white", "cyan", "magenta", "yellow", "black"] >>> get_all_colors_for({}) [] a) Implementera funktionen get_all_colors_for(peoples_colors) som fungerar enligt ovan. Använd en for-loop. (1p) b) Implementera funktionen get_all_colors_while(peoples_colors) som fungerar enligt ovan. Använd en while-loop. (1p) c) Implementera funktionen get_all_colors_rec(peoples_colors) som fungerar enligt ovan. Använd en rekursion. (2p) d) Implementera funktionen add_fav_color(color, person, peoples_colors). Funktionen får in en färg (color), ett namn på en person (person) och ett dictionary enligt ovan (peoples_colors). Funktionen lägger till favoritfärgen till personens lista med favoritfärger. Om personen inte existerar i dictionaryt ska hen läggas till.

4 ( 7) Uppgift 4 (3p) Implementera funktionen, sort_numbers(numbers) som tar in en lista som endast innehåller heltal. Funktionen ska sortera heltalen så att de står i stigande ordning (dvs lägst heltal först i listan). Använd nedanstående sorteringsalgoritm (Bubble sort). Du får inte använda pythons inbyggda sorteringsfunktioner. 1. Input är en lista L med heltal. L n är längden på listan. Listans index börjar på 0. 2. Sätt variabeln swapped till True 3. Upprepa följande så länge som swapped är True 3.1. Sätt swapped till False 3.2. För alla element i listan, refererade med index i, e i, där i 0 < L n-1 (dvs gå igenom alla element i listan förutom det sista elementet med hjälp av index) 3.2.1. Om ei är större än ei+1, (dvs om aktuellt element är större än nästa element) byt plats på e i och e i+1 i listan och sätt variabeln swapped till True. Exempel på sorteringssteg Steg 1: Input är [6,4,4,9] Steg 2: swapped = True Steg 3: swapped == True så vi loopar Steg 3.1: swapped = False Steg 3.2 och 3.2.1: Index L innan av iterationen L efter iterationen swapped innan iterationen swapped efter iterationen 0 [6,4,4,9] [4,6,4,9] False True 1 [4,6,4,9] [4,4,6,9] True True 2 [4,4,6,9] [4,4,6,9] True True Steg 3: vi loopar eftersom swapped == True Steg 3.1: swapped = False Steg 3.2 och 3.2.1: Index L innan av iterationen L efter iterationen swapped innan iterationen swapped efter iterationen 0 [4,4,6,9] [4,4,6,9] False False 1 [4,4,6,9] [4,4,6,9] False False 2 [4,4,6,9] [4,4,6,9] False False Steg 3: loopen hoppas över eftersom swapped == False. Det finns inga steg kvar i algoritmen, så listan är nu sorterad. >>> n_list = [6, 4, 4, 9] >>> sort_numbers(n_list) >>> n_list [4, 4, 6, 9]

5 ( 7) Uppgift 5 (4p) Vi lagrar uppslagsord (som i ett bokindex) och sidor orden finns på i en lista. Vi kallar denna typ av lista för ett index entry. Vi lagrar sedan flera uppslagslistor i ytterligare en lista som vi kallar för ett book index. Nedan är ett exempel på ett book index: automata_theory = [["algorithm", 146, 147], ["asymmetry", 7], ["conjunctive normal form", 325, 328]] Varje index entry är alltså en lista med en sträng följt av ett eller flera heltal. a) Implementera funktionen add_index_entry(index_term, list_of_pages, book_index) som skapar och lägger till ett index entry till ett book index. I argumenten är index_term strängen med uppslagsordet, list_of_pages är en lista med sidor som uppslagsordet finns på, och book_index är det book index som vi ska lägga till det nya index entryt. Se körexempel. Ingen felhantering av dubbletter behövs. (1p) b) I funktionskommentaren till denna funktion, beskriv eventuella nackdelar med denna datastruktur för lagring av uppslagsord och sidor de återfinns på: Vilka problem finns med datastrukturen index entry och varför finns de? Dvs vad kan man inte göra som man borde kunna göra eller göra som man inte borde kunna göra? T.ex. "ett dictionary måste innehålla unika nycklar, så ett namn kan bara förekomma en gång". Vad för slags bearbetning av index entries är kan försvåras eller vara omöjliga med denna representation Varför? T.ex. "det är svårt att se vilka föräldrar ett barn har eftersom ett barns namn kan förekomma hur många gånger som helst" (3p) >>> my_book = [] >>> add_index_entry("python", [1,2,3], my_book) >>> my_book [["python", 1, 2, 3]] >>> add_index_entry("computer", [3, 4], my_book) >>> my_book [['python', 1, 2, 3], ['computer', 3, 4]] Uppgift 6 (2p) Skriv funktionen book_index_has_term(index_term, book_index) som använder samma datastruktur som föregående uppgift för att representera uppslagsord och sidor de finns på i en bok. Funktionen ska returnera True om uppslagsordet index_term (som är en sträng) finns i book indexet book_index. Om inte, returneras False. >>> my_book = [['python', 1, 2, 3], ['computer', 3, 4]] >>> book_index_has_term("python", my_book) True >>> book_index_has_term("java", my_book) False

6 ( 7) Uppgift 7 (4p) I sudoku har man ett fyrkantigt bräde som är uppdelad i nio lådor (de med tjockare markering). Varje låda är i sin tur uppdelad i nio rutor. Vi har alltså ett bräde med 9x9 rutor. Vi representerar detta bräde som en lista med listor. Varje rad består av tre listor på tre element vardera. Tomma rutor har värdet None. Ett tomt bräde ser alltså ut enligt nedan: sudoku_board = [ [None, None, None], [None, None, None], [None, None, None]] Tips: I Python kan man skapa listan [None, None, None] genom att skriva [None]*3 a) Implementera funktionen create_empty_board() som returnerar ett tomt sudokubräde enligt ovanstående specifikation. (1p) b) Implementera funktionen fill_board(board) som fyller alla rutor i sudokubrädet med en slumpmässig en siffra mellan 1-9. Dubbletter får förekomma. Funktionen ska inte returnera något utan det är det bräde som är input som ska ändras. (1p) c) Implementera funktionen check_row(board, row) som kontrollerar om en rad i ett sudokubräde är godkänt. En rad är godkänd om det inte finns några dubbletter och alla rutor är fyllda. Funktionen tar emot ett bräde (board) och ett radnummer (row). Radnummret är ett heltal mellan 1-9. Funktionen ska returnera True om det inte finns dubbletter i raden. Om det finns dubbletter returneras False. Försök att hitta ett sätt för detta som på ett smidigt sätt skulle kunna anpassas till andra radlängder och andra sifferintervall. (2p)

7 ( 7) Uppgift 8 (6p) a) Skriv pseudokod för funktionen get_box(board, box_number) som givet ett sudokubräde (board) enligt ovan, returnerar lådan med det specificerade numret (box_number). låda. En låda representeras av en lista som innehåller tre listor. Varje lista innehåller i sin tur 3 element. T.ex. [[1,2,3][4,5,6] [7,8,9]]. Ett anrop till funktionen skulle kunna se ut så här: >>> get_box(my_board, 1) [[1,2,3][4,5,6][7,8,9]] Lådorna numreras från vänster till höger, uppifrån och ner. 1 2 3 4 5 6 7 8 9 Godkänd pseudokod ska ej innehålla tvetydigheter som har betydelse för algoritmen och ligga på en för uppgiften bra abstraktionsnivå (dvs pseudokod som bara säger "returnera rätt låda" är inte godkänd). b) Implementera funktionen draw_board(board) som givet ett ifyllt sudokubräde enligt ovanstående specifikation (uppgift 7), ritar ut det med text. Exempel på ett utritat bräde ses nedan. Skapa hjälpfunktioner efter behov. >>> draw_board(my_board) 2 8 9 5 1 7 6 4 3 5 1 7 4 6 3 9 8 2 4 6 3 9 8 2 7 5 1 9 7 8 1 2 4 5 3 6 1 3 2 8 5 6 4 7 9 6 5 4 3 7 9 1 2 8 8 5 6 2 4 1 3 9 7 7 9 4 6 3 8 2 1 5 3 2 1 7 9 5 8 6 4 >>>