Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen Sal Tid Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal sidor på tentamen (inkl. försättsbladet) Jour/kursansvarig Telefon under skrivtid Besöker salen ca kl. Kursadministratör (namn, telefon, mailadress) Tillåtna hjälpmedel Övrigt 2015-03-19 Samling i korridoren vid SU17/18 08:00 – 12:00 TDDC30 DAT1 Programmering i Java, datastrukturer och algoritmer IDA 6 (4 teoretiska och 2 praktiska) 8 Jonas Lindgren 013-281403 Åsa Kärrman, 013-285760, [email protected] Inga Information och frågor hanteras genom “Tentaklienten”. Preliminära poänggränser: 3: 20 4: 28 5: 36 Tentamen TDDC30 2015-03-19 kl 08 2 (8) Teoretisk del Anvisningar: Uppgifterna i denna del ska lösas med penna och papper på lösa blad. Vid tentamens slut lämnas svaren till denna del in till tentamensvakterna. Alla svar skrivs på lösa blad, där varje deluppgift tydligt markeras. Endast en sida av bladet används. Varje blad markeras högst upp med personnummer och sidnummer. Viktigt: Starta en tentaklient genom att högerklicka på skrivbordet, för att kunna ta del av allmän information och kunna ställa frågor. 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) b) c) d) e) f) Varför väljer man ofta synligheten private hellre än public för medlemsvariabler i en klass? (1p) Vad är syftet med undantag/exceptions? (1p) Vad innebär det att en metod är abstract? (1p) I “Animal myAnimal = new Animal()” sker två separata saker. Vad innebär “Animal myAnimal” och vad innebär “new Animal()”? (1p) Vad innebär det att abstrahera i ett programmeringsperspektiv? (1p) Varför kan man inte anse att en viss sorteringsalgoritm är 'bäst'? (1p) 2. (6p) "Datastrukturer" a) Värdena 2 8 9 4 6 1 3 5 7 ligger i en fullständig maxheap. Rita upp hur heapen ser ut och hur värdena ligger i den. (2p) b) Organisera om siffrorna i trädet nedan så att trädet utgör ett binärt sökträd. (2p) (”Organisera om siffrorna” innebär att pilarna och noderna förblir på samma plats, endast siffrorna får byta plats i bilden.) 9 5 2 5 7 4 6 c) 1 3 5 8 Ange i vilken ordning noderna i trädet från b) besöks av en preorder-, postorder-, levelorderoch inorder-traversering. (2p) Tentamen TDDC30 2015-03-19 kl 08 3 (8) 3. (6p) "Tidskomplexitet" a) Rangordna tillväxten, från långsammast tillväxt(bäst) till snabbast tillväxt(sämst), hos tidskomplexiteterna O(1), O(n⁵), O(nlog(n)), O(5n), O(8n²), O(n), O(2). (2p) b) Ange tidskomplexiteten i värsta fallet, med avseende på n, för följande metoder. (n är alltid ett positivt heltal.) (2p) int zap(int n) { return n*n; } int count(int n) { int sum = 0; if (n > 5) { for (int i = 0; i < n; sum += zap(i); } } else { sum = zap(n); } return sum; } ++i) { void bip(int n) { for (int i = 0; i < 5; i = i+1) { System.out.println(n); } } c) Förenkla följande tre uttryck för tidskomplexitet: (2p) 1) O(5n² + n + 10) × O(7n) 2) O(25n) × O(25log(n)) 3) O(2n) + O(3n) Tentamen TDDC30 2015-03-19 kl 08 4 (8) 4. (6p) "Algoritmer" a) Sortera värdena [ 7 2 1 2 4 6 5 ] med bubblesort. Gör detta genom att byta plats på värden inom fältet, dvs. in-place. Sorteringen ska leda till stigande ordning, dvs 1, 2, 3, osv. Ange tydligt i svaret hur hela fältet ser ut innan varje platsbyte, samt vilka index som är på väg att byta plats, med maximalt ett byte per steg. (2p) b) Sortera värdena [ 3 4 9 1 7 8 6 2 5 ] med quicksort. Gör detta genom att byta plats på värden inom fältet, dvs. in-place. Sorteringen ska leda till stigande ordning, dvs 1, 2, 3, osv. Ange tydligt i svaret hur hela fältet ser ut innan varje platsbyte, samt vilka index som är på väg att byta plats, med maximalt ett byte per steg. Välj alltid ”det högraste” värdet inom intervallet som pivot-element. (2p) c) Vad innebär det att en sorteringsalgoritm är stabil? Illustrera med ett exempel på en sorteringsalgoritm som kan implementeras stabil, och ett på en som inte kan implementeras stabil, med förklaring om varför dessa kan/inte kan implementeras stabila. (2p) Tentamen TDDC30 2015-03-19 kl 08 5 (8) Praktisk del Anvisningar: Uppgifterna i denna del ska lösas på dator. När alla uppgifter är lösta ska alla filer som ska examineras lämnas kvar på kontot. Uppgifterna ska alltså inte skickas in via tentamenssystemet. Viktigt: Starta en tentaklient genom att högerklicka på skrivbordet, för att kunna ta del av allmän information och kunna ställa frågor. Testprogrammet till varje deluppgift ska fungera utan förändringar när tillhörande deluppgift är löst, om inget annat anges i uppgiften. Försök att lösa alla uppgifter så långt som möjligt. Om du inte kan lösa en uppgift, förenkla uppgiften. Glöm i så fall inte att beskriva förenklingen med en tydlig kommentar i koden. Poängavdrag ges beroende på förenklingens storlek. Tänk på läsbarhet och namngivning, och även på variablers och metoders synlighet. Ni behöver inte skriva javadoc för er kod. För att importera projekt i Eclipse, File → Import, sedan General → Existing projects into workspace, sedan Browse, och välj projekt i given_files. Viktigt: Glöm inte att kryssa i “Copy projects into workspace”! Skapa ett nytt projekt i Eclipse för varje deluppgift, om inget annat anges i uppgiften. Som en bilaga finns även en lista över vanliga unixkommandon. Tentamen TDDC30 2015-03-19 kl 08 6 (8) 5. (8p) “Att räkna löv” Anna arbetar med ett binärt sökträd, och har kommit så långt att hon har de flesta metoderna, bland annat add(..) och size(..). Det finns dock mer att göra och Anna har inte riktigt tid att ta tag i allt just nu, så hon har lejt in er i ett par timmar. Värde En nod från Annas binära träd: Importera Annas projekt från given_files, och hjälp henne med programmet enligt nedan. a) För att kontrollera sin implementation vill Anna lägga till en getLeaves-metod, som helt enkelt returnerar en lista på alla löv i trädet, i godtycklig ordning men utan dubletter. Hjälp Anna genom att skriva klart leaves-metoden enligt dess dokumentation i koden. (6p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter.) b) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 6b. Anna vill att hennes färdiga träd följer ett gränssnitt. Hon har redan skrivit gränssnittet i filen AnnasTreeInterface, men hennes kod använder inte gränssnittet än, och måste nog anpassas lite för att göra det. Uppdatera Annas träd så att det använder gränssnittet. (2p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter.) Tentamen TDDC30 2015-03-19 kl 08 7 (8) 6. (10p) “Den öde ön” Stefan har blivit inspirerad av alla rika kändisar som på senare tid köpt sig sina egna privata öar. Det vore allt bra kul att äga sin egen öde ö, nånstans att relaxa på beachen med lite kokosnötter och sol. Problemet är bara att en öde ö är ganska dyr, 3.2 miljoner för den ö Stefan har ögonen på, så det vill till att Stefan börjar spara redan nu. Stefan antar att han kan investera sina besparingar på börsen för 7% avkastning i medel, och för att förenkla det hela antar han också att han måste skatta 0.27% på det totala beloppet och kompensera för en inflation på 1%, alla dessa per år. För att kunna experimentera med olika sparbelopp så börjar Stefan knappa på en liten dator-simulation i Java. Han tänker använda en dubbellänkad lista för att lagra beloppen han sparar samt den avkastning han får, och köra på med sin simulation tills han sparat ihop till sin ö! Importera Stefans projekt från given_files, och hjälp honom med programmet enligt nedan. a) Stefan vet ungefär hur strukturen kommer se ut, varje nod kommer ha en referens till föregående och nästa nod, och om inga sådana finns blir dessa referenser null. Listan kommer också hålla reda på vilken nod som ligger först och sist. Dock har han inte riktigt hunnit skriva klart addFirst(...) och addLast(...)-metoderna. Hjälp honom skriva klart dessa så att de bygger en korrekt dubbellänkad lista. (6p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter.) b) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 6b. Den här koden blir nog bra, fast Stefan inser att det vore bra om han kunde vara lite mer konsekvent i sin kodstruktur. För att åstadkomma detta så skriver han ihop UML-diagrammen nedan, som representerar hur han helst skulle vilja att hans dubbellänkade lista samt nod såg ut. Konvertera Stefans dubbellänkade lista så att den följer UML-diagrammen till punkt och pricka. (4p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter.) DoublyLinkedList - Node first - Node last + void addFirst(...) + void addLast(...) + int size() + boolean isEmpty() + double sum() Node - double data ~ Node next ~ Node prev # Node(...) + double getData() + Node getNext() + Node getPrev() Tentamen TDDC30 2015-03-19 kl 08 Intressanta terminal-kommandon eclipse & mkdir målkatalog rmdir målkatalog cd målkatalog cd cp källfil målfil mv källfil målkatalog ls cat filnamn Starta Eclipse Skapa målkatalog Ta bort målkatalog Byt aktuell katalog till målkatalog Byt aktuell katalog till din hemkatalog Kopiera fil från källfil till målfil Flytta källfil till målkatalog Skriver ut alla filer i aktuell katalog Skriver ut innehållet i filen filnamn 8 (8)
© Copyright 2024