Programkonstruktion. Tentamen,

Relevanta dokument
Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen,

Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen,

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

"Referentiell transparens"

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Tentamen 1 (6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

SI-möte #10, Programkonstruktion och Datastrukturer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 4 Om rekursion. PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Summera godtyckligt antal tal. Programkonstruktion. Moment 4 Om rekursion. Fullständigt resonemang för summeringen. Analys av summeringsproblemet

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 9 Om högre ordningens funktioner. PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad

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

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

Programmering II (ID1019) :00-12:00

Programkonstruktion. Moment 11 Om sidoeffekter In/utmatning och imperativ programmering. PKD 2011/12 moment 11 Sida 1 Uppdaterad

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

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

Tentamen i Introduktion till programmering

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

Produktionsplanering. Programkonstruktion. Ett programutvecklingsexempel. Programutvecklingsprocessen. Exempel produktregister. 2.

kl Tentaupplägg

729G04 Programmering och diskret matematik

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2011/12 moment 9 Sida 1 Uppdaterad

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

Grundläggande programmering med C# 7,5 högskolepoäng

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Kryptokorsordslösare Programmeringsmetodik DV (period 2) Inlämningsuppgift 1

729G04 Programmering och diskret matematik

Tentamen i. TDDC67 Funktionell programmering och Lisp

Tentamen, Algoritmer och datastrukturer

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

Programkonstruktion och Datastrukturer

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

Tentamen i Algoritmer & Datastrukturer i Java

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

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Tentamen i Grundläggande programmering STS, åk 1 fredag

kl Tentaupplägg

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

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

729G74 - IT och programmering, grundkurs. Dugga.

PROGRAMMERINGSTEKNIK TIN212

Datalogi, grundkurs 1

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

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

TENTAMEN OOP

TDDC74 Programmering, abstraktion och modellering. Tentamen

Tentamen, EDAA10 Programmering i Java

kl Tentaupplägg

TDDC74 Programmering: Abstraktion och modellering Datortenta

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

Tentamen i. Programmering i språket C

Objektorienterad programmering, Java, 5p TDBA63

Programmering A. Johan Eliasson

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

DD1361 Programmeringsparadigm. Carina Edlund

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Programmering II (ID1019) :00-11:00

Tentamen i Grundläggande programmering STS, åk

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

AssiML. Användarbeskrivning

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Korsordlösare Sara Hedbrandh Strömberg Programkonstruktion VT 10 Inlämninsguppgift

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

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

Datalogi för E Övning 3

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

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Övningsuppgifter #11, Programkonstruktion och datastrukturer

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

Former av rekursion. Programkonstruktion. Moment 5 Mera om rekursion. Fakultetsfunktionen. Största gemensamma delare (repris!

729G04 Programmering och diskret matematik TEN kl 8-12

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Uppgift 1 ( Betyg 3 uppgift )

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

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.

Dugga Datastrukturer (DAT036)

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Tentamen i Grundläggande programmering STS, åk 1 fredag

Transkript:

Programkonstruktion (Programmeringsmetodik DV1) Tentamen, 2008-03-10 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 0900-14:00. Börja med att läsa igenom alla frågorna för att se om något är oklart. Jag kommer förbi någon gång klockan 10-11 för att svara på frågor. Om du får problem med tolkningen av en fråga efter att jag kommit förbi så gör rimliga antaganden och redovisa dem. Du måste använda det speciella försättsbladet som förstasida för dina svar. Använd inte rödpenna! Lämna marginal på bladen för kommentarer. Det bästa är om du använder blad med förtryckta marginaler. Behöver du inbyggda funktioner/biblioteksfunktioner som du inte förutsätts kunna utantill så beskrivs de kortfattat i uppgiften. Maximala antalet poäng som du kan få är 32. För godkänt (betyg 3) krävs 16 poäng, för betyg 4 krävs 22 poäng och för betyg 5 krävs 28 poäng. Tenterar du en äldre variant av kursen med betygskala U-G-VG så krävs 24 poäng för VG. (Poänggränserna är uppskattningar som kan ändras.) Viktig information om hur man svarar. Om du inte följer dem kan din tenta bli rättad senare och/eller så får du poängavdrag. Besvara inte mer än en uppgift per blad (flera deluppgifter är ok)! Din handstil skall vara lätt och läsa och svaren lätta att förstå. Du skall följa kodningsstandarden från kursen när du svarar med programkod (en sammanfattning av kodningsstandarden finns på nästa sida). Du får inte programmera imperativt (med sidoeffekter) om det inte framgår av uppgiften att det är avsikten. Lycka till! Lars-Henrik

Kodkonvention (sammanfattning.) Varje funktion skall föregås av en specifikation. Det gäller oavsett om den är deklarerad lokalt eller globalt, är angiven i uppgiften eller påhittad av dig. Det enda undantaget från ovanstående gäller anonyma funktioner som ges som argument till en annan funktion. Där slipper du skriva specifikation, men å andra sidan skall en sådan funktion vara mycket enkel. Om den inte är det så skall du inte använda en anonym funktion utan namnge den. Specifikationen skall vara utformad på följande sätt: funktionsnamn argument TYPE: argumenttyp -> resultattyp PRE:... förvillkor på argumenten... POST:... eftervillkor på resultatet... SIDE-EFFECTS:... om det finns några... EXAMPLES:... där det behövs... Observera att eftervillkoret bara i rena undantagsfall kan vara riktigt om inte samtliga argument förekommer i det. Rekursiva funktioner För varje rekursiv funktion (med undantag av sådana där du inte kan förutse antalet rekursiva anrop t.ex. en funktion som läser från fönster) skall du ange en rekursionsvariant, så här: VARIANT:... Definierade datatyper För varje definierad datatyp (datatype och abstype) skall du ange representation och invarianter, t.ex. så här: REPRESENTATION CONVENTION :...förklaring av hur data representeras... REPRESENTATION INVARIANT :...beskrivning av datastrukturinvarianter... Varje (ickefunktions-)värde du definierar inuti en abstrakta datatyp skall ges en specifikation enligt följande mall: värdenamn TYPE: värdetyp VALUE:... beskrivning av vad värdet representerar... Indentering Layout och indentering av if-then-else- respektive let-uttryck skall göras på följande vis: if booleanexpression then expression1 else expression2 let declarations in expression end

Uppgifter 1. a) (2p.) Skriv en funktion stringcliplist som tar ett heltal och en stränglista som argument. Värdet av ett anrop av stringcliplist skall vara samma som listargumentet, med undantag av att inga strängar får vara längre än vad heltalsargumentet anger. Skulle en sträng i listargumentet vara längre skall den kapas från slutet till den tillåtna längden. Använd rekursion för din lösning! Exempel: stringcliplist(3,["ab","cdef","",ghi"]) = ["ab","cde","",ghi"] b) (2p.) Skriv en fullständig uppsättning testfall för funktionen stringcliplist enligt de riktlinjer vi givit i kursen. Ange för de olika testfallen varför du har tagit med dem. 2. a) (3p.) Skriv en algoritm (i tydlig klartext, pseudokod, flödesschema eller på annat lämpligt sätt) för att lösa följande problem: Givet två strängar, undersök om den första strängen finns som en delsträng någonstans i den andra strängen. I så fall skall algoritmen beräkna värdet SOME i där i är positionen för den första förekomsten av delsträngen i den andra strängen. I annat fall skall värdet vara NONE. Jämförelsen skall göras så att stora och små bokstäver betraktas som lika (det räcker med att du klarar av detta för bokstäver i det engelska alfabetet). Exempel: Söker du efter strängen "Kalle" i strängen "Stålkalle" skall svaret bli SOME 4. Söker du efter strängen "Kalle" i strängen "Hobbe" skall svaret bli NONE. Söker du efter strängen "ha" i strängen "Hon sade, ha! ha!" skall svaret bli SOME 10. Tänk på att syftet med en algoritm är att ge en precis och "mekanisk" beskrivning av hur något skall beräknas. Luddighet kan ge poängavdrag! b) (3p.) Skriv en funktion searchsubstring som tar två strängargument och utför sökning enligt ovan. Tips: Du kommer sannolikt att behöva en hjälpfunktion. Det är förstås meningen att funktionen skall implementera algoritmen som du skrivit som lösning till deluppgift a). Har du inte kunnat ge ett (ordentligt) svar på den uppgiften så får du skriva en sökfunktion ändå. Exempel: searchsubstring("kalle", "Stålkalle") = SOME 4 searchsubstring("kalle", "Hobbe") = NONE searchsubstring("ha", "Hon sade, ha! ha!") = SOME 10

3. a) (2p.) Skriv en lämplig definition av en ny datatyp account som representerar ett bankkonto. Förutom aktuellt saldo (ett heltal) skall datatypen innehålla kontonummer (en sträng) och information om transaktioner (ändringar) av kontot så att man kan göra ett kontoutdrag. Varje transaktion skall innehålla datum, beskrivande text och ändringsbelopp. Ändringarna skall lagras i ordning. Välj representation så att det blir enkelt att lägga till en ny ändring. Tänk på att skriva Representation convention och även Representation invariant!!! b) (2p.) Datatypen utvidgas med ett fält för ingående saldo (saldot innan de lagrade transaktionerna utfördes). Gör nödvändiga ändringar. Tänk speciellt på konsekvenserna för Representation invariant!! 4. Betrakta följande funktion: fun turin(_, glaurunga, []) = glaurunga turin(_, [], niniel) = niniel turin(turambar, dagnir::glaurunga, nienor::niniel) = if turambar(dagnir,nienor) then dagnir :: turin(turambar, glaurunga, nienor::niniel) else nienor :: turin(turambar, dagnir::glaurunga, niniel) a) (2p.) Ge en steg-för-steg beskrivning av hur ML beräknar uttrycket turin(op <,[1,4],[2,3]). Skriv varje steg på ny rad! b) (2p.) Lista ut vad turin gör för något och skriv en fullständig funktionsspecifikation enligt kodningsstandarden för den. Ange även en variant. Tänk på att när du beskriver vad funktionen gör så skall du inte ge en översättning av programkoden till svenska! Istället skall du tala om vad funktionen beräknar. c) (0p.) Vad har namnen på identifierarna gemensamt? (Utom tävlan, behöver alltså inte besvaras, rätt svar ger inga poäng men en guldstjärna i mina tankar.) 5. (4p.) Beskriv begreppet "abstrakt datatyp" så att du besvarar (åtminstone) följande frågor: Vad menas med en abstrakt datatyp? Vad skiljer en abstrakt datatyp från en icke-abstrakt datatyp? Vad måste vara gemensamt för olika implementeringar av samma abstrakta datatyp? Ge minst två fördelar med att använda abstrakta datatyper. Ge minst två nackdelar med att använda abstrakta datatyper. 6. (3p.) Lös uppgift 1a) igen, men utan att använda rekursion. Använd istället en inbyggd högre ordningens funktion som map, filter, foldr e.dyl.

7. a) (2p.) Följande matas in till ML: val a = 1+3; val b = 2+4; fun foo a = let val a = a*2 in a+b end; foo(b); a; Beskriv allt som händer med bindningen av a i exemplet. Vad är värdet som beräknas från de två uttrycken foo(b) respektive a på slutet? b) (2p.) Följande matas in till ML: val a = ref (1+3); val b = ref (2+4); fun foo a = (a :=!a*2;!a+!b); foo(b);!a; Beskriv allt som händer med referensen (ref (1+3)) som binds till a i början av exemplet. Vad är värdet som beräknas från de två uttrycken foo(b) och!a på slutet? 8. (3p.) Skriv en funktion som tar ett filnamn och en sträng, läser filen med det givna namnet och skriver ut (med print) alla rader som innehåller den givna strängen. Du måste behandla raderna allteftersom du läser filen. Du får alltså inte läsa in hela filens innehåll till t.ex. en sträng eller lista först och därefter gå igenom den. Du måste också se till att du stänger alla strömmar som du öppnar. För att kontrollera om den givna strängen finns i raden kan du använda funktionen searchsubstring som beskrevs i uppgift 2! Denna uppgift får lösas imperativt (med det blir knappast en bättre lösning). Sammanfattning av biblioteksrutiner ur biblioteket TextIO som du kan behöva: openin(s) : string -> instream PRE: s skall vara namnet på en fil som finns. POST: En instream kopplad till filen s. EXAMPLE : openin("frithiof.txt") SIDE-EFFECTS: Olika anrop till openin ger olika strömmar. inputline(is) : instream -> string POST: Nästa rad från strömmen is avslutad med #"\n", eller tom sträng om inget kunde läsas (t.ex. filslut) SIDE-EFFECTS: Läspekaren för is flyttas fram. endofstream(is) : instream -> bool POST: true om läsningen av strömmen is har nått till slutet av filen, false annars. SIDE-EFFECTS: inga. closein(is) : instream -> unit POST: (). SIDE-EFFECTS: Avslutar användningen av strömmen is.