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

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

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

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ägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

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.

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

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 Programmeringsteknik II Inledning. Anmälningskod:

Lägg uppgifterna i ordning. Skriv uppgiftsnummer 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.

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 Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

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

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 Programmeringsteknik I

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

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 Programmeringsteknik I

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Observera. Tentamen Programmeringsteknik II Skrivtid:

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

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

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 Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

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

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

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

Tentamen Datastrukturer, DAT037 (DAT036)

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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.

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

public boolean containskey(string key) { return search(key, head)!= null; }

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

Del A (obligatorisk för alla)

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Del A (obligatorisk för alla)

Tentamen Programmeringsteknik II

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

TENTAMEN OOP

Tentamen i Programmeringsteknik I

Tentamen TEN1 HI

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen i Algoritmer & Datastrukturer i Java

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Länkade strukturer, parametriserade typer och undantag

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

Tentamen i Grundläggande programmering STS, åk 1 lördag

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

Tentamen Datastrukturer (DAT037)

Tentamen, EDAA10 Programmering i Java

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Lösningsförslag till exempeltenta 1

Tentamen, Algoritmer och datastrukturer

DAI2 (TIDAL) + I2 (TKIEK)

Föreläsning 7. Träd och binära sökträd

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

Laboration A Objektsamlingar

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

Föreläsning 3-4 Innehåll

Tentamen ID1004 Objektorienterad programmering May 29, 2012

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

Tentamen, EDAA20/EDA501 Programmering

Teoretisk del. Facit Tentamen TDDC (6)

OOP Tentamen

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

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

Tentamen Datastrukturer (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tentamen, EDA501 Programmering M L TM W K V

TENTAMEN OOP

Programmering för språkteknologer II, HT2014. Rum

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

TENTAMEN OOP

Transkript:

Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Fyll i försättssidan fullständigt. Såvida inget annat anges, både får och ska man bygga på lösningar på föregående uppgifter även om dessa inte har lösts. På B-delen är det tillåtet att införa hjälpmetoder och hjälpklasser. Uttrycket skriv en metod som skall alltså inte tolkas så att lösningen inte får struktureras med hjälp av flera metoder. Du behöver inte skriva import-satser för klasserna Scanner, ArrayList, Locale och inte heller för klasser i java.io. All given kod följer kursens kodningsregler. Alla uppgifter gäller programmeringsspråket Java och programkod skall skrivas i Java. Koden skall vara läslig dvs den skall vara vettigt strukturerad och indenterad. Namn på variabler, metoder, klasser etc skall vara beskrivande men kan ändå hållas ganska korta. Observera att betyget påverkas negativt av icke-privata eller onödiga instansvariabler, dålig läslighet, upprepning av identisk kod, underlåtenhet att utnyttja given eller egen tidigare skriven metod. Skrivningen består av två delar. Lösningarna till uppgifterna på A-delen ska skrivas in i de tomma rutorna och den delen ska lämnas in. Rutorna är tilltagna i storlek så att de ska rymma svaren. En stor ruta betyder inte att svaret måste vara stort! Lösningarna till uppgifterna på B-delen skrivs på lösa papper. För att bli godkänd (betyg 3) krävs att minst ca 75% av A-delen är i stort sett rätt löst. För betyget 4 krävs dessutom att minst hälften av uppgifterna på B-delen och betyg 5 att alla uppgifterna på B-delen är i stort sett rätt lösta. Vi bedömning av betyg 4 och 5 tas också hänsyn till kvalitén på lösningarna i A-delen. Observera att B-delen inte rättas om inte A-delen är godkänd. Lycka till!

Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls inte sorterade och ett tal kan förekomma flera gånger. Klassen ListSet är en subklass till List. Dessa listor hålls sorterade i storleksordning med det minsta talet först och varje tal förekommer högst en gång (inga dubbletter alltså). Klassen BST innehåller binära sökträd med heltal som nycklar. En nyckel kan förekomma högst en gång i trädet. Alla klasser innehåller main-metoder med utskrifter som demonstrerar metoderna. Del A (obligatorisk för alla) A1. Skriv undantagsklassen ExamException som en underklass till RuntimeException. Det skall gå att kasta undantag till exempel på följande sätt: if (i < 0) { throw new ExamException("Illegal index value"); } A2. Skriv metoden public void addfirst(int data) i klassen List som lägger in en ny nod med värdet data först i listan.

A3. Skriv klart den rekursiva hjälpmetoden till copy-metoden i klassen List: public List copy() { return new List(copy(first)); } protected static Node copy(node n) { } A4. Skriv färdigt metoden toarraylist nedan. Metoden ska lägga in alla tal från listan i en arraylist och de ska ligga i samma ordning som i listan. Metoden ska vara iterativ och komplexiteten O(n) där n är antalet element i listan. public ArrayList<Integer> toarraylist() { ArrayList<Integer> result = new ArrayList<Integer>(); } return result;

A5. Skriv metoden int smallest() (inklusive eventuella hjälpmetoder) i klassen List som beräknar och returnerar det minsta värdet lagrat i listan. Välj själv mellan iterativ och rekursiv implementation! A6. Vad blir den interna väglängden i det träd som genereras av nedanstående kodsekvens? (Titta på den givna metoden ipl om du glömt hur begreppet intern väglängd definieras!) BST bst = new BST(); bst.add(10); bst.add(5); bst.add(1); bst.add(17); bst.add(10); bst.add(6); bst.add(4); bst.add(3);

A7. Vad är den minsta möjliga väglängden för ett träd med 7 noder? Motivera! A8. Antag att cirka 1 000 000 olika slumptal matas in i ett binärt sökträd. Ungefär hur många jämförelser bör det i genomsnitt krävas för att återfinna ett lagrat tal? Motivera svaret! Tips: 10 6 2 20

A9. I subklassen ListSet till klassen List ska listorna vara sorterade och dessutom får varje värde förekomma högst en gång. Dessa listor byggs upp med metoden add (se bilagan). En av metoderna i klassen List får inte användas på subklassen ListSet. Vilken och varför? Hur förhindrar man att den obemärkt används? A10. Två metoder som är definierade i klassen List fungerar visserligen fortfarande för ListSet men bör av effektivitetsskäl ändå omdefinieras. Vilka? Vad har de för komplexitet om de inte omdefinieras? A11. Välj en av de metoderna från ovanstående uppgift (lämpligen den enklaste den svårare får du göra i B-delen) och skriv den. Vad är dess komplexitet?

A12. I den första programmeringskursen gjordes paddorna rörliga genom att man hade en loop som dels innehöll en flyttning och omritning av paddorna och dels ett anrop till Thread.sleep(). Nackdelen med detta är att programmet är låst när det sover. I denna kurs har vi använt en annan teknik för att göra rörliga figurer. Beskriv kortfattat (rutan ska inte fyllas med text) denna teknik! Vilka de är de viktiga programdelarna?

Del B (för betyg 4 och 5) Svaren skrivs på lösa papper med ny uppgift på nytt papper. B1. Skriv en rekursiv metod static int noof(int x) som räknar antalet udda siffror i talet x (betraktat som ett decimalt heltal). Exempel: noof(12345) ska bli 3 (siffrorna 1, 3 och 5), noof(3050) ska bli 2 och noof(400004) ska bli 0. Du kan förutsätta att talet inte är negativt. B2. Givet tre olika algoritmer för att lösa ett givet problem. Algoritm A har komplexiteten Θ(n), algoritm B har komplexiteten Θ(n log n) och algoritm C har komplexiteten Θ(n 2 ). För n = 100 har mätningar visat att algoritm A tar 1000 sekunder, algoritm B tar 100 sekunder och algoritm C tar 10 sekunder. a) För vilket värde på n kan vi vänta oss att algoritm A blir snabbare än algoritm B? b) För vilket värde på n kan vi vänta oss att algoritm A i blir snabbare än algoritm C? c) För vilket värde på n kan vi vänta oss att algoritm B i blir snabbare än algoritm C? Här räcker det med att ange första 10-potens som gör att B snabbare än C (alltså 10 3, 10 4, 10 5,... ) Svaren ska motiveras! B3. I klassen List finns en metod atindex(int index) som returnerar värdet lagrat i angiven position. Om index-värdet är mindre än 0 eller större än eller lika med antalet element i listan kastas ett undantag. Se körexemplet! Tyvärr får användaren inte veta värdet på det felaktiga indexet. Som synes i körexemplet blir utskriften: *** Error *** nonexisting index Modifiera koden (huvudmetoden och/eller hjälpmetoden) så att även värdet inkluderas i felmeddelandet! Utskriften ska således bli: *** Error *** nonexisting index: 35 Beräkningarna ska fortfarande göras på samma rekursiva sätt och du får inte ändra i parameterlistorna! B4. Skriv metoden contains(listset s) i klassen ListSet som returnerar true om alla element i listan s också finns i den egna listan. Se körexemplet! Obs: Metodens komplexitet ska vara O(n + m) där n och m är antalet element i den egna listan respektive listan s B5. Skriv en metod boolean contains(bst bst) i klassen BST som returnerar true om alla värden i trädet bst också finns med i det egna trädet, annars false. Metodens komplexitet ska vara O(n + m) där n och m är antalet noder i respektive träd. B6. Implementera den andra (den svårare) av de två metoder som man bör omdefiniera i subklassen ListSet. Hur blir komplexiteten för denna implementation?