2017-XX-XX.kl Tentaupplägg

Relevanta dokument
kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentainformation

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentainformation

kl Tentaupplägg

kl Tentaupplägg. TIPS 4: Du kan kompilera din kod med följande kommandon g++11, w++11 (för mer varningar)

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

DUGGA Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Examination - Ada

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

Tentaupplägg. Betygsgränser: 1 uppg 19:00 Betyg 3 2 uppg 18:00 Betyg 4 2 uppg 16:30 Betyg 5 3 uppg 18:00 Betyg 5

kl Tentaupplägg

DUGGA Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

kl Tentaupplägg

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: TDDD11 & TDDC68. Tillåtna hjälpmedel. Starta Emacs, terminal och tentakommunikationsfönster. Skicka in frågor och uppgifter

Tentaupplägg denna gång

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

Tentaupplägg denna gång

Tentaupplägg denna gång

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

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

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.

HI1024 Programmering, grundkurs TEN

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen, EDAA10 Programmering i Java

Tentaupplägg denna gång

kl Tentaupplägg

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

ID1004 Laboration 4, November 2012

HI1024 Programmering, grundkurs TEN

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

Tentaupplägg denna gång

TDP Regler

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

HI1024 Programmering, grundkurs TEN

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

Laboration 1: Figurer i hierarki

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

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

Uppgift 1a (Aktiekurser utan poster)

TENTAMEN OOP

PROGRAMMERINGSTEKNIK TIN212

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Laboration 3, uppgift En klass för en räknare

Objektsamlingar i Java

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Presentation av trafiksimuleringsprojektet

Tentamen TEN1 HI

Petter och mamma är i fjällen. De ska åka skidor. Petters kompis Elias brukar alltid vara med. Men nu är bara Petter och mamma här.

TDIU20 (exempel) TDIU20 Tentaregler

HI1024 Programmering, grundkurs TEN

Teoretisk del. Facit Tentamen TDDC (6)

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Tentamen i Grundläggande Programvaruutveckling, TDA548

Laboration A Objektsamlingar

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

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

Tentaupplägg denna gång

Objektorienterad programmering i Java I

Agenda. Objektorienterad programmering Föreläsning 13

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Uppgift 1 ( Betyg 3 uppgift )

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 20

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

TDIU01 / 725G

Tentamen i Programmering

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

Transkript:

Tentaupplägg Allmänna Tips Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer att fastna på så kanske det är fel uppgift att ge sig på. Tiden du lägger på att noga läsa uppgifterna tjänar du in på att välja rätt uppgift. Kolla ibland till kommunikationsfönstret. Det kan ha kommit information till alla utan att ni skickat in en fråga. Om ni har problem med eclipse eller dylikt som INTE har med uppgifterna att göra, räck upp handen så kommer en assistent. Detsamma gäller om hur man kopierar givna filer. Frågor om själva uppgifterna tar vi i första hand via tentasystemet. Testa ditt program noga innan du skickar in. Om din lösning inte är korrekt kommer du få ett kompletteringsmeddelande och har möjlighet att rätta den och skicka in igen. Kompletteringar måste dock åtgärdas. Vi tolererar inte att ni spammar oss med samma lösning om och om igen. Kommando cp given_files/*. xdg open given_files/tenta.pdf eclipse & Effekt Kopierar alla givna filer till mappen du står Öppnar själva tentan. Blir läsbar då tentan startar. Startar eclipse. Generella krav (gäller för alla uppgifter om inget annat anges): Fullständiga uppräkningar och kodduplicering skall undvikas med klasshirarkier och polymorfi i de fall det inte går att generalisera på andra sätt (underprogram, loopar, etc.). Korrekt inkapsling krävs, d.v.s. rätt synlighet på instans/klassvariabler och metoder. Lämpliga konstruktorer skall finnas för alla klasser. Instansvariabler får inte användas som globala/lokala variabler (d.v.s använd parametrar och lokala variabler i första hand). Korrekt användning av static krävs. Överanvändning av instanceof och typkonverteringar kan leda till komplettering. Betygsgränser: 2 poäng 3 poäng 3 poäng 3 poäng Tid 19:00 TDDE10/11 Betyg 3 18:00 16:45 16:30 Betyg 4 725G90/91 Betyg G Betyg VG Betyg 5 4 poäng 18:00 Betyg 5 4 poäng 18:15 Betyg VG Bonustid från avklarade laborationer tillkommer till dessa tidsgränser. Tiden för betyg G överstiger dock aldrig 5 timmar. OBS: Delpoäng delas inte ut på uppgifterna. För att få poäng på en uppgift måste man alltså lösa uppgiften helt (och enligt specifikation). M.v.h. /Torbjörn och Erik

Skidsemester I följande uppgifter används en skidåkning/skidsemester som bakgrund till uppgifterna. I Sverige är det sedan långt tillbaka en tradition att åka upp till fjällen (antingen med familj, eller med kompisar) och åka skidor. Det vanliga upplägget är att man åker till ett specifikt ställe, en skidanläggning, som har allt: d.v.s. skidbackar, liftar, hotell (eller hyrstugor), skiduthyrning, krogar m.m. I uppgifterna används den fiktiva skidorten Vinterdalen. Här följer en lista på skidåkningstermer som ändå kanske behöver förtydligas. Om du är bekant med skidåkning kan du hoppa direkt till uppgifterna. Skidor Skidåkare Pjäxor Snowboard Lift Liftkort Pist Två platta avlånga skenor som fästs med pjäxor vid en skidåkares fötter. Används för att glida snabbt framåt på snöklätt underlag. Finns flera typer, t.ex. Slalom-skidor och Längd-skidor. Person som tar på sig skidor och åker nedför en snöklädd backe. En typ av hårda (ibland mjuka) skor eller stövlar som är specialdesignade för att fästas i skidor eller snowboard. Enskild platt skena som en person står på för att, likt skidåkare, åka nedför en snöklädd backe. Mekaniskt system som för skidåkare uppåt i backen. Finns flera typer, t.ex. knapplift som är extra barnvänlig, sitt-lift (i princip en soffa av metall som kan forsla flera personer samtidigt) och ankar-lift (en notoriskt jobbig lift som man ofta ramlar i). Passerkort som krävs för att få åka lift. Köps vanligtvis då man anländer till skidanläggning, är personligt och är bara giltigt under en viss tidsperiod. Skidbacke som är pistad, d.v.s. iordninggjord för utförsåkning. Barn som åker ankarlift. Två-sitsig sittlift och snowboardåkare. Att sitta ner i backen är extra skönt om man åker snowboard. Kvinna som har hyrt pjäxor och skidor.

Uppgift 1 - Snöfarare [1p] I denna uppgift skall du skapa några klasser som behövs för Vinterdalens bokningssystem. Klassen SkierGroup finns redan påbörjad i mappen given_files. En SkierGroup representerar en grupp människor som åker skidor eller snowboard tillsammans. En person som åker framåt/nedåt på snö kallar vi för en snöfarare (eng. SnowGoer). Följande klasser/metoder skall implementeras enligt följande UML-diagram och beskrivningar. SnowGoer 0..* - name - age +printyourself() +slowdown() SkierGroup 1 +add(snowgoer) +remove(snowgoer) +havefun() Skier - poles +printyourself() +slowdown() Snowboarder +printyourself() +slowdown() För snöfarare (klassen SnowGoer) gäller att de alltid har ett namn och en ålder. SnowGoer har metoden printyourself() som skriver ut snöfarens namn och ålder. SnowGoer har även en abstrakt metod slowdown(), metoden skall användas då snöfararen måste bromsa upp i backen. Skier är en subklass till SnowGoer som representerar skidåkare. Skidåkare har, utöver snöfarares egenskaper, ett antal stavar. Man kan ha 2 (standard), 1 (Gustav-Wasa-style) eller 0 (backhoppning) stavar. Antalet stavar skall lagras i Skier-klassen och anges då man instansierar en Skier. Då man anropar printyourself() på en skidåkare så skrivs det ut t.ex. ut "Skier with 2 poles" (under informationen från SnowGoer). Då man anropar slowdown() på en Skier skrivs följande ut på skärmen "Points ski tips towards each other". Snowboarder är en subklass till SnowGoer som representerar snowboardåkare. Då man anropar printyourself() på en skidåkare så skrivs det ut, "Snowboarder" (under informationen från SnowGoer). Då man anropar slowdown() på en snowboarder skrivs följande ut på skärmen "Swoops in and sprays lots of snow". SkierGroup skall ha en metod add som lägger till en snöfarare till gruppen, en metod remove som tar bort en snöfarare från gruppen och en metod havefun() som anropar printyourself() och slowdown() på varje snöfarare i gruppen. Gruppen kan vara godtyckligt stor, men ordningen på snöfararna i gruppen är inte viktig. Du skall inte ändra på de metoder som redan finns i SkierGroup. (Du får dock modifiera kroppen till konstruktorn). Ett huvudprogram, SkierGroupTest.java, finns färdigt i mappen given_files.

Uppgift 2 - Familjekort [1p] För att locka fler familjer till skidorten har Vinterdalen bestämt sig för att erbjuda en ny typ av liftkort för familjer. Liftkortet lämpar sig för familjer som inte tänker dela på sig under skidåkningen utan hela tiden liftar tillsammans. Vanligtvis kostar liftkorten i Vinterdalen ganska mycket, men detta liftkort kommer endast kosta 200 kr per familjemedlem (kortet räcker alltid en vecka). Du skall i denna uppgift skapa klassen FamilyPass enligt nedanstående UML och beskrivningar: LiftPass - cost - daysvalid FamilyPass - pnrs : String[] Klassen LiftPass finns redan färdig i Vinterdalens datorsystem. Du skall inte ändra på LiftPass. FamilyPass är en subklass till denna klass. FamilyPass skall endast ha en konstruktor som tar en parameter: antalet familjemedlemmar på kortet. Konstruktorn skall sedan läsa så många personnummer från tangentbordet (en per rad) och lagra dem. Vi utgår från att användaren alltid matar in korrekta personnummer och att detta inte behöver kontrolleras. Om det i inmatningen matas in något personnummer som redan matats in så skall undantaget DuplicatePersonNumberException kastas. Man skall inte vara tvungen att fånga detta undantag. Även undantagsklassen skall du skapa själv i denna uppgift. TIPS: Tänk på att strängar bäst jämförs med metoden equals.

Uppgift 3 - Sittlift [2p] Vinterdalen behöver ny mjukvara för alla sittliftar. Som en del av detta system behövs en ADT för att representera själva liften. ADT:n skall heta ChairLift och skall användas för att lagra en linjär mängd grupper av skidåkare. Om du inte vet hur en sittlift fungerar kan du kolla på bilden i början av tentan. Tänk dig ett långt tåg av vagnar som man har kopplat ihop med sig själv så att det blir en slinga. Liften "roterar" i stort sätt hela tiden. Skidåkare kliver på längst ner i baken och kliver av när de nått toppen. I verkligheten händer det att folk också åker ned med liften, men det bortser vi helt ifrån i denna uppgift. I praktiken behöver man dock ibland stanna liften om det blir trubbel vid på/avstigning (folk ramlar). En grupp skidåkare representeras av klassen SkierGroup (finns påbörjad i mappen given_files). Då en ChairLift instansieras skall man ange hur många skidåkargrupper som maximalt kan åka (upp) i liften samtidigt. Sittliften har följande operationer: List<SkierGroup> runsteps(int n, List<SkierGroup> g); Kör sittliften n steg. För varje steg som körs skall det första SkierGroup-objekt tas bort från g och kliva på liften. Om g blir tom under denna körning måste ADT:n hålla reda på att motsvarande sitsar åker upp tomma. De skidåkningsgrupper som har nått toppen av backen kliver av och läggs till i en lista som returneras från metoden. Ordningen i listan skall bli samma ordning som grupperna klev av i. List<SkierGroup> runsteps(int n); Samma funktion som operationen ovan, fast inga skidåkare kliver på. Dock kan skidåkare kliva av, så även här returneras en lista med vilka som klivit av. Exempel på huvudprogram: ChairLift lift = new ChairLift(8); max 8 grupper kan åka upp samtidigt List<SkierGroup> groups = new ArrayList<>(); groups.add(new SkierGroup("A")); groups.add(new SkierGroup("B")); groups.add(new SkierGroup("C")); lift.runsteps(5, groups); lift.runsteps(2); Grupp A, B och C kliver på, två sitsar tomma. två sitsar till blir tomma. groups.add(new SkierGroup("D")); groups = lift.runsteps(2, groups); Grupp D kliver på, en sits till blir tom, A kliver av. groups = lift.runsteps(3); Tre sitsar till blir tomma, B kliver av, C kliver av, en tom sits kommer upp. for (SkierGroup sg : groups) { System.out.print(sg.getName() + " "); } ut på skärmen kommer "B C " Motsvarande finns även i filen ChairLiftTest.java i given_files. TIPS: Kommentarerna i den givna filen illustrerar lite tydligare vad som händer i varje steg. Gör en print-metod i ChairLift som skriver ut hur det ser ut i liften just nu. Den är användbar när du skall felsöka din ADT.

Uppgift 4 - Svarta backar [2p] I Vinterdalen beskriver man hur svåra backar är med en färg. T.ex. är gröna backar mycket lätta, medan svarta anses vara svåra (blått => lätt, rött => mellansvår). Nu har de en ny idé, även andra saker kan ha "svårighetsgrad", t.ex. liftarna, eller off-pistområden (backar som inte är förberedda för åkning, där åker man på egen risk). Off-pistområden har dock inte färger som svårighet, utan en sifferskala som kan gå hur högt upp som helst. Teknikerna hos Vinterdalen behöver hjälp med en del av koden. Teknikernas kod ser ut på detta sätt (Color är från paketet java.awt): Slope anaverageslope = new Slope(Color.RED); SnowyArea area = anaverageslope; HasDifficulty<Color> dif = anaverageslope; AnchorLift anchorlift = new AnchorLift(); HasDifficulty<Color> dif2 = anchorlift; if (anaverageslope.getdifficulty().equals(anchorlift.getdifficulty())) { Color c = anchorlift.getdifficulty(); System.out.println("Samma svårighetsgrad: " + c); } OffPistArea off = new OffPistArea(3); SnowyArea area2 = off; HasDifficulty<Integer> dif3 = off; int i = off.getdifficulty(); Det är viktigt att koden ovan går att kompilera. Teknikerna har också givet lite kod som de vet inte skall gå att kompilera (fortsättning från ovan): area.getdifficulty(); anaverageslope = anchorlift dif2 = dif3; area = dif; dif = area; en SnowyArea har inte svårighetsgrad. en lift är inte en pist. olika typer av svårighetsgrad. en HasDifficulty är inte en SnowyArea. en SnowyArea är inte en HasDifficulty. Följande kodsnutt bör ge en varning, men går att kompilera: if (anaverageslope.getdifficulty().equals(off.getdifficulty())) { VARNING, går ej att jämföra pister med offpistområden. } Koden ovan finns given i filen BlackSlopesTest.java i given_files. Du skall alltså skapa de fem typer som används ovan. Svårighetsgraden för ankarliften får du välja själv. TIPS: Rita upp ett UML-diagram för dig själv så blir det lättare.