TDP002 - Datortenta (DAT1)

Relevanta dokument
TDP Regler

TDP Regler

TDP Regler

Regler. Betygssättning

TDIU Regler

TDP Regler

Regler. Betygssättning

TDIU Regler

TDIU Regler

TDP Regler

TDIU Regler

TDP004 - Datortenta (DAT2)

TDP Regler

TDP Regler

TDIU01 / 725G

TDDI TDDI22 Tentaregler

TDIU01 - Datortenta (DAT2)

729G04 Programmering och diskret matematik

TDDI22 (exempel) TDDI22 Tentaregler

TDP004 - Tentamen All form av kontakt mellan studenter under tentamens gång är strängt förbjuden.

TDDI TDDI22 Tentaregler

TDIU20 (exempel) TDIU20 Tentaregler

729G04 Programmering och diskret matematik

TDDI TDDI22 Tentaregler

729G04 Programmering och diskret matematik

TDP004 - Dugga All kod som skickas in för rättning ska kompilera och vara väl testad.

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

Övning 1 - Abstrakta datatyper

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tentamen Grundläggande programmering

TDDI TDDI22 Tentaregler

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

TDIU01 - Datortenta (DAT2)

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Datalogi, grundkurs 1

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

TDP004 - Tentamen All form av kontakt mellan studenter under tentamens gång är strängt förbjuden.

Tentamen i Introduktion till programmering

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Programmering grundkurs

Grundläggande datalogi - Övning 1

TDP004 - Datortenta (DAT2)

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Ordlistor, filhantering och ut på webben. Linda Mannila

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Datalogi, grundkurs 1

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

TDP004 - (För)Tentamen

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

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

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

729G04 Programmering och diskret matematik

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

TDP004 - Datortenta (DAT2)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

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

TENTAMEN OOP

Tenta i Grundläggande programmering DD klockan

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

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

TDP002 - Imperativ programmering

Sätt att skriva ut binärträd

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Tentamen i. TDDC67 Funktionell programmering och Lisp

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

Datalogi, grundkurs 1

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

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

Datalogi för E Övning 3

Övningsuppgifter kapitel 8

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Laboration: Whitebox- och blackboxtesting

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

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

TDP002 - Imperativ programmering

TDIU TDIU20 Tentaregler

Erfarenheter från labben

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Använda Python Laboration 1 GruDat, DD1344

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

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

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

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

DD1314 Programmeringsteknik

Planering av ett större program, del 2 - for och listor. Linda Mannila

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Transkript:

TDP002 - Datortenta (DAT1) 2012-10-25 Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt förbjuden. Böcker och anteckningssidor kan komma att granskas av tentavakt i samband med tentans start samt under tentans gång. Frågor om specifika uppgifter eller om tentan i stort ska ställas via tentasystemet. Systemfrågor kan ställas till assistent i sal. Ingen uppgift rättas efter tentatidens slut. Ingen kompletteringsmöjlighet ges de sista tio minuterna. Så länge en praktisk uppgift inte har betyget U eller tilldelats maxpoäng för uppgiften kan den kompletteras till högre poäng. En teoretisk uppgift kan endast kompletteras efter förfrågan från rättare. Inga elektroniska hjälpmedel får medtas. Mobiltelefon ska vara avstängd och ligga i jacka eller väska. Inga ytterkläder eller väskor vid skrivplatsen. Antal uppgifter 9 Totalt antal poäng 20 Hjälpmedel En pythonbok (tex Learning Python 4 ed.) En A4-sida med egna anteckningar i

Betygssättning Tentan är uppdelad i två delar, en teoretisk och en praktisk. Delarna är värda 9 respektive 11 poäng och för godkänt betyg krävs minst fyra poäng per del. Poäng som krävs för de olika betygen kan ses i tabell 1. Poängsumma Betyg 1 9 U 10 12 3 13 15 4 16 20 5 Tabell 1: Poängfördelning för betygssättning Bonus från labserien Avklarade deadlines i kursen ger bonus i form av tillgodoräknade uppgifter i den praktiska delen. Denna bonus ges endast under den första ordinarie tentan i samband med kursen. För denna tentamen får student uppgifter tillgodoräknade enligt tabell 2. Vi kontrollerar labstatus under tentans gång och sätter aktuell uppgift som godkänd. Tentasystemet uppmärksammar student när ändringen sker. Antal avklarade deadlines Tillgodoräknad uppgift 2 3 6 4 5 7 6 7 6 och 7 Tabell 2: Tillgodoräknade av uppgifter Information Inloggning Logga in på tentakontot med följande användaruppgifter: Användarnamn: examx Lösenord: kluring1 Följ menyvalen så långt det går tills du ska mata in ett engångslösenord. Tag fram ditt LiU-kort och visa det för tentavakten för att få detta lösenord. När du är inloggad är det viktigt att du startar tentaklienten genom att högerklicka på bakgrunden och välja tentaklient i menyn. Avslutning Tryck på knappen märkt exit i menyn längst nere på skärmen och välj ok. Vänta ett tag och tryck sedan på knappen Avsluta tentamen när det är möjligt. När detta är gjort är det omöjligt att logga in igen.

Teoretisk del 1. Sökning (a) Förklara skillnaden mellan linjärsökning och binärsökning, gärna med hjälp av ett [1 p] exempel. Linjärsökning är när man jämför sitt värde med varje element i sekvensen tills man hittar värdet. Binärsökning sker istället genom att halvera sökmängden för varje jämförelse. För att söka efter en person i en telefonkatalog är det betydligt lättare att slå upp katalogen på mitten och sedan bara söka i den aktuella halvan istället för att söka sida för sida. (b) Vad krävs av den sekvens av data man söker i för att man ska kunna använda binärsökning? [1 p] Det som krävs är att datamängden är sorterad samt direkt addresserbar (det går att ta ut ett specifikt index). (Sorterad räcker för poäng) 2. Nämn tre egenskaper en variabel alltid har? [1 p] Namn, Datatyp, Värde 3. Vad menas med begreppet styrsats (control statement)? [1 p] En styrsats är en sats för att styra programflödet med hjälp av val eller upprepning (se PL 8.1) 4. För varje av följande påståenden ska du svara om det är sant (S) eller falskt (F). För 1-2 [2 p] korrekta svar ges ett poäng och för 3-4 korrekta svar ges 2 poäng på uppgiften. (a) Ett nyckelord (keyword) och ett reserverat ord (reserved word) är samma sak. F: Ett nyckelord är endast speciellt om det används på ett visst sätt, ett reserverat ord får bara användas på specifika sätt. (se PL 5.2.3) (b) Procedurer och funktioner anropas på samma sätt. F: funktioner returnerar ett värde och kan (ska) vara del av ett uttryck. Procedurer anropas som egna satser. (PL 9.2.5)

(c) Alla imperativa språk har en switch-sats (eller liknande struktur). F: tex saknar Python en switch-sats (d) KISS-regeln förespråkar enkelhet. S: Keep It Simple Stupid The KISS principle states that most systems work best if they are kept simple rather than made complex, therefore simplicity should be a key goal in design and unnecessary complexity should be avoided. http://en.wikipedia.org/wiki/kiss_principle 5. Denna uppgift går bra att lämna in på papper för rättning i efterhand. Räck upp handen [3 p] för att få ett omslag om du vill göra detta. Använd grammatiken i bilaga 1 för att skapa ett parse-träd för uttrycket i Kodruta 1. 3*2.3+031 Kodruta 1: parse-uttryck Den inledande nollan visar att det är ett oktalt tal och därför måste octinteger användas. 1p avdrag för decimalinteger. Trädet visar det viktiga i parsningen, det går dock bra att börja ännu längre upp i strukturen.

Praktisk del 6. Följande uppgift kan tillgodoräknas med bonus från labserien. [1 p] På filen given files/comp.py finns en funktion is prime som kontrollerar om ett tal är ett primtal. Ändra i filen så att variabeln primes innehåller alla primtal i intervallet [1, 1000]. Detta ska lösas med ett list-comprehension. primes = [x for x in range (1,1000) if is_prime (x)] 7. Följande uppgift kan tillgodoräknas med bonus från labserien. [2 p] I filen given files/accumulate.py saknas en funktion accumulate. accumulate ska ta tre parametrar. En funktion fn, en sekvens av data seq samt ett startvärde val. Resultatet från accumulate ska vara resultatet man får om man först applicerar fn på första elementet i sekvensen och startvärdet och därefter successivt applicerar fn på resultatet av den tidigare beräkningen och nästa element i sekvensen. Skapa accumulate så att det givna programmet fungerar och ger de resultat som står som kommentarer i koden. #! / usr / bin / env python3 # -*- coding :utf -8 -*- def accumulate ( fn, seq, val ): cal = fn(seq [0], val ) if len ( seq ) == 1: return cal return accumulate ( fn, seq [1:], cal ) def accumulate2 ( fn, seq, val ): res = fn(seq [0], val ) for v in seq [1:]: res = fn(v, res ) return res from functools import reduce as accumulate3 mult = lambda x,y: x*y plus = lambda x,y: x+y print ( accumulate ( mult, range (1,6), 1)) # should be 120 print ( accumulate ( plus, range (1,6), 0)) # should be 15 8. Uppdelningen i deluppgifter som följer är endast som grund för betygssättning, det räcker att skicka in en lösning som svar på hela uppgiften som då kan ge fem poäng.

(a) På filen given files/befolkning.csv finns befolkningsdata för alla svenska kommuner för [3 p] första kvartalet 2012 från SCB. Varje rad i filen har följande kolumner separerade med kommatecken: 1. Kommun 2. Befolkningsmängd 3. Antal levande födda 4. Antal döda 5. Antal inflyttade 6. Antal utflyttade Din uppgift är att skriva ett program som beräknar förändringen i befolkningsmängd över första kvartalet 2012 utifrån givna data, både i antal och procentuell ökning samt skriver ut en tabell sorterad efter befolkningsmängd enligt exempel 1. Kommun Befolkning Ökning Procentuell ökning Stockholm 871952 3691 0.42% Göteborg 522275 648 0.12% Malmö 305033 1122 0.37% Uppsala 200274-467 -0.23%... Bjurholm 2428 3 0.12% Exempel 1: Programkörning #! / usr / bin / env python3 # -*- coding : utf -8 -*- data = [] def gain ( city ): born, death, move_in, move_ out = city [ 2:] return born - death + move_in - move_out with open ( befolkning. csv, encoding = utf -8 ) as f: for line in f: city, * int_data = line. strip (). split (, ) cdata = [ city. strip ( " ),] for d in int_ data : cdata. append ( int (d)) data. append ( cdata ) format_str = {:16 s }{: >10 d }{:8 d }{:10.2%} print ( Kommun Befolkning Ö kning Procentuell ö kning ) for c in sorted (data, key = lambda c:c[1], reverse = True ): g = gain (c) print ( format_str. format (c[0], c[1], g, g/c [1])) (b) [2 p] Modifiera ditt program så att användaren kan ändra tabellutskriften med följande flaggor via kommandoraden:

-n N: Skriv endast ut de N första raderna i tabellen -p: Sortera efter procentuell ökning -g: Sortera efter numerär befolkningsökning --asc: Sortera i ökande ordning Detta går att lösa på huvudsakligen två olika sätt: Egenskapad parsning av sys.argv #!/ usr / bin / env python3 # -*- coding :utf -8 -*- data = [] def gain ( city ): born, death, move_in, move_ out = city [ 2:] return born - death + move_in - move_out def percent ( city ): return gain ( city )/ city [1] # Argumentparsning med argv # import sys sort_by ={ g :gain, p : percent } sort_ fun = None sort_ order = True lines = 0 for index, arg in enumerate ( sys. argv [1:]): if arg == --asc : sort_ order = False elif arg. startswith ( - ): arg = arg [1:] if arg in sort_ by : sort_fun = sort_by [ arg ] elif arg [0] == n : lines = int ( sys. argv [ index +2]) if sort_ fun is None : sort_fun = lambda c: c [1] with open ( befolkning. csv, encoding = utf -8 ) as f: for line in f: city, * int_data = line. strip (). split (, ) cdata = [ city. strip ( " ),] for d in int_ data : cdata. append ( int (d)) data. append ( cdata ) if lines == 0 or lines > len ( data ):

lines = len ( data ) format_str = {:16 s }{: >10 d }{:8 d }{:10.2%} print ( Kommun Befolkning Ö kning Procentuell ö kning ) for c in sorted (data, key = sort_fun, reverse = sort_order )[: lines ]: g = gain (c) print ( format_str. format (c[0], c[1], g, g/c [1])) argparse # Argumentparsning med argparse # import argparse parser = argparse. ArgumentParser () parser. add_argument ( -n, type =int, default =0) parser. add_argument ( -p, dest = sort_fun, action = store_const, const = percent ) parser. add_argument ( -g, dest = sort_fun, action = store_const, const =gain, default = lambda c:c [1]) parser. add_argument ( --asc, action = store_true ) args = parser. parse_ args () sort_fun = args. sort_fun sort_ order = not args. asc lines = args. n

9. På filen given files/library.py finns given kod som hanterar en samling böcker. Funktioner [3 p] som hanterar en bok finns givna i modulen given files/book.py. Din uppgift är att lägga till de funktioner som krävs i book.py för att library.py ska fungera enligt följande beskrivning. Du får inte ändra något i library.py. Kravspecifikation för library: Programmet läser in ett antal böcker från filen books.txt till en lista. Programmet skriver ut information om alla inlästa böcker på skärmen på format enligt Kodruta 2. Programmet ska sortera listan med böcker efter i första hand författare och i andra hand titel. Böckerna skrivs ut igen i sorterad ordning. Programmet låter användaren undersöka om en viss titel finns i biblioteket och skriver då ut information om boken. --------------------------------------------- Fö rfattare : < bokens fö rfattare > Titel : < bokens titel > --------------------------------------------- Kodruta 2: Format för utskriften av en bok def create_ book ( title, author, pages, language ): return { title : title, author : author, pages : pages, lang : language } def title ( book ): """ Returns the title of a book """ return book [ title ] def author ( book ): """ Gets the book s author """ return book [ author ] def compare ( book1, book2 ): """ compare two books, return -1 if book1 is " less then " book2, zero if they are the same and 1 if book1 is greater then book2 """ if author ( book1 ) < author ( book2 ): return -1 elif author ( book1 ) == author ( book2 ): if title ( book1 ) < title ( book2 ): return -1 elif title ( book1 ) == title ( book2 ): return 0 return 1 def key ( book ):

return ( book [ author ], book [ title ]) # eller : #k = fuctools. cmp_to_key ( compare ) # return k( book ) def display ( book ): """ Prints information about the book """ info = """ {c:-<{n}s} Fö rfattare : { author } Titel : { title } {c:-<{n}s} """. format (n=45,c= -,** book ) print ( info ) def equal (b, t): return title ( b) == t