DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

Relevanta dokument
Objektorienterad programmering, Java, 5p TDBA63

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

DELPROV 1 I DATAVETENSKAP

DELPROV 2 PROGRAMMERINGSMETODIK OCH

PROGRAMMERING I ETT OBJEKTORIENTERAT SPRÅK (JAVA), 5P

TENTAMEN I DATAVETENSKAP

DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

DELPROV1. Objektorienterad programmeringsmetodik, 7.5p 5DV081, 5DV109

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

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

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.

Tentamen TEN1 HI

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

PRAKTISKT DELPROV I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

DELPROV2. Objektorienterad programmeringsmetodik (för ÖI), 7.5p 5DV081, 5DV090

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

Tentamen, EDAA10 Programmering i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

UPPGIFT 1 V75 FIGUR 1.

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 för kursen Objektorienterad programvaruutveckling GU (DIT010)

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 Grundläggande programmering STS, åk 1 fredag

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. HT-15 Datum: Tid: kl

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

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

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

HI1024 Programmering, grundkurs TEN

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

kl Tentaupplägg

Föreläsning 5-6 Innehåll

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

Tentamen i Programmeringsteknik I, ES,

LyckaTill önskar Anna

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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.

Tentamen i Programmeringsteknik I

TENTAMEN. Kurs: Applikationsutveckling i Java 5DV135. Ansvarig lärare: Johan Eliasson. HT12 Datum: Tid: kl

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

Tentamen i Programmeringsteknik MN

Tentamen i Grundläggande programmering STS, åk

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

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

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Det finns en referensbok (Java) hos vakten 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.

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

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

Uppgift 1 ( Betyg 3 uppgift )

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

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.

OOP Tentamen

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

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Tentamen i Programmeringsteknik MN

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501 Programmering M L TM W K V

Lösningsförslag tentamen FYTA11 Java

JAVA Mer om klasser och objektorientering

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Tentamen, Algoritmer och datastrukturer

Design av en klass BankAccount som representerar ett bankkonto

Objektorienterad Programmering (TDDC77)

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

LÖSNINGSFÖRSLAG TENTAMEN

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

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

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

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Uppgift 1a (Aktiekurser utan poster)

Tentamen TEN1 HI

Tentamen EDA501/EDAA20 M L TM W K V

ID1004 Laboration 4, November 2012

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

TENTAMEN OOP

Tentamen i Programmeringsteknik I

PROGRAMMERINGSTEKNIK TIN212

Tentamen TEN1 HI

Transkript:

UMEÅ UNIVERSITET Inst. för Datavetenskap 060529 DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA FÖR INGENJÖRER, 5P. (TDBA62) Datum : 060529 Tid : 4 timmar (9-13) Hjälpmedel : Allt. Kommunikation med andra personer (direkt eller indirekt) är dock inte tillåten, som t ex via mail, mobiltelefon, gemensamma kataloger etc. Antal uppgifter : 4 Poäng : max 30 (delprovet får ej underskrida 30% av poängtalet, halva poängtalet (dp1 + dp2) krävs normalt för godkänt) Provet består av 4 uppgifter: 1 och 2 samt två (2) fritt valda uppgifter bland 3,4,5, 6 & 7 (om fler än två av de valfria lämnas in bedöms endast de två med lägst nummer). Kryssa för de uppgifter du lämnar in. Källkod skrivs ut i ett ickeproportionellt typsnitt (t.ex. courier). Namn, personnummer, användarnamn(@cs.umu.se) och sökvägen till filen/filerna skall finnas på all källkod. Skriv din dators namn på försättsbladet. Lösningarna skall vara snyggt och prydligt nedskrivna. Tankegången skall vara lätt att följa. Alla antaganden som inte är uppenbara skall redovisas. Den kod som ges i denna skrivning finns under länken dp2060529 på kursens hemsida. Här finns också andra eventuella filer som du kan behöva. Denna mapp kallas i resten av provtexten för provmappen. OBS! Kontrollera att din dator fungerar innan du börjar. Lycka till! UMEÅ UNIVERSITET 901 87 UMEÅ Tel.: 090-786 77 08 Fax: 090-786 61 26 e-mail: marie@cs.umu.se

Regler för delprov 2 Provet är en del av examinationen och skall alltså ske under tentamensliknande förhållanden. Examinationen är individuell och betygsgrundande. Detta får följande konsekvenser: Man är personligt ansvarig för de lösningar som lämnas in. Om man hittar lösningar eller delar av lösningar på nätet eller i litteraturen bör detta tydligt anges och man är fortfarande skyldig att själv vara fullständigt insatt i den lösning man redovisar och på uppmaning kunna svara för innehåll och funktion i hela eller delar av lösningen. Självklart får man inte söka eller hämta kod från någon av de övriga tentanderna, detta betraktas som fusk och handläggs som sådant. Dina filer skall vid skrivtidens slut finnas i mappen ~/edu/java/dp2_060529 Några riktlinjer för hur lösningarna bedöms: Koden skall följa god programmeringsmetodik, vilket t.ex. innebär konsekvent indenterad och lämpligt kommenterad källkod. Lösningen behöver inte gå att kompilera för att ge poäng, så låt inte troliga syntaxfel ta för mycket tid i anspråk om du känner dig övertygad om att du löst det givna problemet, det räcker därför inte att en lösning fungerar för att ge full poäng, även här måste man på ett rimligt sätt underordna sig kravet på god programmeringsmetodik. 2(10)

Uppgift 1 (6 poäng) Datum används i många olika sammanhang när man skriver program. I Sverige använder vi ofta formatet yy-mm-dd för att representera datum, t.ex. 06-05-29. - int day - int month - int year Date I den här uppgiften påbörjar du en klass som modellerar ett enkelt svenskt datum som har ett begränsat ansvar och ett begränsat beteende. Implementera klassen enligt UMLbeskrivningen till höger. + Date(int d, int m, int y) + String monthstring() String twodigitnumber(int num) + String twodigityear() + betyder att attributet/metoden är publik och att den är privat. Javadoc-beskrivningen av metoderna: Implementera klassen Date enligt beskrivningen ovan. Konstruktorn bör validera sina indata så att det blir rimliga värden på dag, månad och år. 3(10)

Uppgift 2 (6 poäng) Följande klasshierarki finns implementerad: I ett program som hjälper mellanstadiebarn att öva på geometriska figurer ingår att avgöra hur figurer förhåller sig till varandra vad gäller arean. Programmet har en lista av figurer som visas på skärmen. För att kunna avgöra om barnen ordnar figurerna korrekt behöver programmet kunna sortera figurerna i storleksordning. Din uppgift är att skriva en klass AreaTest med en metod sortera som kan sortera en array med Figure i storleksordning. Metoden sortera skall använda sig av getarea i Figure för att sortera. Metodens signatur ser ut så här: Figure[] sortera(figure f[]) Den tar alltså en array av Figure som parameter och returnerar en array med alla Figure sorterade i storleksordning, den med den största arean först. Du får göra en ny array att returnera eller returnera den gamla, sorterad. Skriv i dokumentationen till koden vilken metod du använde. Förslag till dokumentation av sortera: 4(10)

I den följande delen får du lämna in högst två av uppgifterna Uppgift 3 (8 poäng) Nu bygger vi vidare på uppgift 1 och implementerar fler metoder i klassen Date enligt beskrivningen här. - int day - int month - int year Date + Date(int d,int m, int y) + String datestring() + String monthstring() + Date next() + boolean passed(date d) + String twodigityear() Skriv också någon typ av testprogram så att din kod kan provköras med ungefär följande resultat: 06-05-03 passed 06-05-04 : false 06-05-04 passed 06-05-03 : true 06-05-03 passed 05-05-05 : true 05-05-05 passed 06-05-04 : false 05-05-05 passed 05-05-05 : false 05-04-30 följs av 05-05-01 06-12-31 följs av 07-01-01 06-02-28 följs av 06-03-01 5(10)

Uppgift 4 (6 poäng) Alldeles nyutexaminerad har du just fått ditt första jobb, på möbelfirman Lycko-Hem. Chefen på firman har ju läst i tidningarna om det nya moderna sättet att skriva program, objekt-orientering och vill nu att du skall göra en OO-analys av företagets lager. Så är beskriver chefen det: Vi har massor med varor i vårt lager här på Lycko-Hem, och man kan nog dela upp dom i tre grupper. För det första är det ju möblerna, alla stolar, bord, soffor och sånt. Sen har vi ju allt man kan sätta på väggarna, hatthyllor, speglar, tidningsställ med mera. Och vi har just börjat sälja elektriska armaturer, så det finns taklampor, vägglampor och bordslampor av all de slag i lagret numera också. Din uppgift är att göra en analys av företagets lager utifrån beskrivningen ovan. Analysen skall innehålla minst fyra klasser, ett arv ( är-en ) och en association ( har-en ). För varje klass ska viktiga attribut, metoder och parametrar finnas med. Lämna in en UML-liknande beskrivning på papper av analysen som innehåller alla klasser och som visar hur de hänger ihop. Oavsett vilken notation du väljer (UML eller egen) måste du förklara vad ev. pilar och streck representerar. Observera att det inte duger med CRC-kort som beskrivning. Du behöver alltså inte skriva någon kod i den här uppgiften. Detta får du gärna lämna in handskrivet. 6(10)

Uppgift 5 (6 poäng) Komplexa tal är tal på formen a + bi, där a och b är flyttal. De två ingående delarna kallas realdelen( a) och imaginärdelen (b). Komplexa tal används mycket inom matematiken men också inom andra tekniska områden, t.ex. elektronik och fysik. Komplexa tal har speciella räkneregler för addition, subtraktion, multiplikation och division. Man kan räkna med komplexa tal på samma sätt som med reella tal om man ersätter i 2 med "1. Potenser av i kan alltid reduceras till ±1 eller ±i; till exempel är i 3 = i 2 " i = (#1) " i = #i och i 4 = i 2 "i 2 = (#1) " (#1) =1. Räkneregler Vid addition och subtraktion av komplexa tal skall talens realdelar, resp. imagiärdelar adderas (subtraheras) var för sig (a + bi) + (c + di) = (a + c) + (b + d)i resp. (a + bi) " (c + di) = (a " c) + (b " d)i Komplexa tal multipliceras på följande sätt: (a + bi) " (c + di) = ac + adi + bci + bdi 2 = (ac # bd) + (ad + bc)i. Din uppgift är att skriva kod för en klass Komplex, som representerar ett komplext tal. Klassen skall ha en eller flera konstruktorer, metoder för ovanstående tre räknesätt och en metod som returnerar en textbeskrivning av talet. Observera att objekten som skapas skall vara immutable, dvs. att de värden attributen får i konstruktorn inte får ändras av någon metod! Detta betyder att alla metoder för räkneregler måste returnera ett nytt objekt av klassen Komplex. Din klass skall fungera tillsammans med följande program-snutt:... Komplex a = new Komplex(1.0, 2.5); Komplex b = new Komplex(2.0, 4.0); Komplex c = a.plus(b); Komplex d = a.minus(b); Komplex e = a.gånger(b); String str = e.tostring();... Ur Javadoc-dokumentationen: 7(10)

Uppgift 6 (8 poäng) Detta problem handlar om hur man skall kunna placera ut åtta drottningar på ett schackbräde utan att någon av dem skall kunna slå någon annan. Ett schackbräde består av 8 x 8 = 64 rutor, och en drottning kan slå horisontellt, vertikalt och diagonalt. Att lösa problemet och få fram ett svar är ganska komplicerat (det finns 92 lösningar), och den kod som behövs för det kan du anta redan finns skriven i en klass som heter EightQueens. Din uppgift blir att skriva en metod i denna klass som heter issolved som tar ett schackbräde som parameter och returnerar ett boolskt värde, true om brädet är en lösning till åttadrottningarsproblemet, false annars. Du behöver alltså inte lösa själva Åttadrottningars-problemet, bara skriva en metod som testar om en lösning är funnen. För att kontrollera om det aktuella brädet är en lösning måste du kontrollera att ingen drottning kan slå någon annan. Ett sätt att se på problemet är att kontrollera att det finns högst en drottning per rad, kolumn resp. diagonal på brädet. Alla diagonaler måste kontrolleras, även de som innehåller färre än åtta rutor, och både de som går snett nedåt höger och snett nedåt vänster. Signaturen för din metod ser ut så här: boolean issolved(boolean[][] board) där board är en boolsk matris med 8 rader och 8 kolumner. Den innehåller alltså värdet true i en position om det står en drottning där, false annars. Här nedan ges ett exempel på en lösning. Några av diagonalerna som måste kollas är markerade, det blir alltså 13 diagonaler åt vardera hållet. 8(10)

Uppgift 7 (10 poäng) Människan har i alla tider fascinerats av krypton och chiffer. Följande chiffer (man hade även en kodbok), benämnt Chiffer för signalering enligt metod II användes av den svenska flottan från 1915 och framåt under det första världskriget: Förvandling till siffror Bokstaven betecknas med siffran Anv. dagar i månaden Nycklar Chiffer Nyckel Siffran Förvandling till bokstäver betecknar bokstaven A 18 1-3 F 2 1 3 4 0 5 1 E B 15 2 P C 4 4-6 G 3 0 4 3 U D 17 4 C E 1 7-9 H 1 8 9 4 5 F F 5 6 W G 10 10-12 I 3 2 5 7 J H 16 8 Å I 20 13-15 J 4 2 3 9 Ö J 7 10 G K 21 16-19 K 2 3 1 11 V L 29 12 Q M 22 20-23 L 5 2 0 1 13 X N 23 14 Ä O 24 24-27 M 6 9 3 15 B P 2 16 H Q 12 28-31 N 2 3 1 0 17 D R 25 18 A S 26 O 19 Y T 27 20 I U 3 21 K V 11 22 M W 6 23 N X 13 24 O Y 19 25 R Z 28 26 S Å 8 27 T Ä 14 28 Z Ö 9 29 L Chiffret fungerar på följande vis: 1. Klartextens bokstäver byts ut mot tal enligt de två kolumnerna längst till vänster i tabellen ovan. 2. En nyckelsiffra skrivs under vart och ett av talen enligt gällande dagsnyckel. 3. Talen adderas till respektive nyckelsiffra. Om summan överstiger 29, subtraheras den med 29, så att resultatet alltid hamnar i intervallet 1-29 4. De erhållna summorna uppsöks i kolumnen näst längst till höger i tabellen och byts ut mot bokstäverna i kolumnen längst till höger. 9(10)

Ett exempel: Klartext: F Y R A J A G A R E S I K T A D E Tal: 5 19 25 18 7 18 10 18 25 1 26 20 21 27 18 17 1 Nyckel G: 3 0 4 3 0 4 3 0 4 3 0 4 3 0 4 3 0 Summa (ev.- 29) 8 19 29 21 7 22 13 18 0 4 26 24 24 27 22 20 1 Krypterad text Å Y L K J M X A L C S O O T M I E Samma procedur används för att dekryptera ett meddelande, men nyckelsiffrorna subtraheras istället från de tal som motsvarar kryptogrammets bokstäver. Om differensen blir negativ eller noll, så adderar man med 29 för att få ett positivt tal. Enligt signalreglementet skulle kryptogrammen sändas i grupper om tolv bokstäver. Eftersom längden på samtliga nycklar (antalet nyckelsiffror i en given nyckel) är faktorer av 12, hamnar alltid den första nyckelsiffran under den första bokstaven i en tolv-grupp och den sista nyckelsiffran hamnar alltid under den sista bokstaven i en tolv-grupp. På så vis kunde kryptören enkelt upptäcka om någon bokstav saknades i en mottagen tolvgrupp och begära repetition eller prova sig fram till rätt klartext. Som synes i chiffertabellen ovan, så saknas nyckelsiffrorna för nyckeln O. Det är inte ett skrivfel. Nyckeln O var en speciell nyckel, som bara skulle användas mellan kungen och Chefen för Kustflottan och det var endast dessa som hade tilldelats denna särskilda nyckel. Din uppgift är att implementera detta (utom kungens egen nyckel förstås!), så att t.ex. följande testprogram kan köras: public class TestaKrypton { public static void testa(int dag, String urstring) { String kodstring; String kontrollstring; ChifferM2 k; k = new ChifferM2(dag); System.out.println("Krpyteringsdag : " + dag); System.out.println("Ursprungssträng : ->" + urstring + "<-"); kodstring = k.encrypt(urstring); System.out.println("Krypterad : ->" + kodstring + "<-"); kontrollstring = k.decrypt(kodstring); System.out.println("Tillbaka igen : ->" + kontrollstring + "<-\n"); }//main }//TestaKrypton Exempel på körning: Krpyteringsdag : 5 Ursprungssträng : ->FYRAJAGARESIKTADE<- Krypterad : ->ÅYLKJMXALCSOOTMIE<- Tillbaka igen : ->FYRAJAGARESIKTADE<- Krpyteringsdag : 29 Ursprungssträng : ->SNARTÄRTERMINENSLUTHURRA<- Krypterad : ->ZSYRLDSTUZNIRCOSPWZHFZSA<- Tillbaka igen : ->SNARTÄRTERMINENSLUTHURRA<- 10(10)