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

Relevanta dokument
Objektorienterad programmering, Java, 5p TDBA63

DELPROV 2 PROGRAMMERINGSMETODIK OCH

DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

PRAKTISKT DELPROV I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH

TENTAMEN I DATAVETENSKAP

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

DELPROV 1 I DATAVETENSKAP

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Tentamen, EDAA10 Programmering i Java

Tentamen i Programmeringsteknik I

Tentamen, Algoritmer och datastrukturer

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

Tentamen i Programmering

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.

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

Tentamen i Algoritmer & Datastrukturer i Java

Malmö högskola 2007/2008 Teknik och samhälle

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Tentamen i Objektorienterad programmering

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

Föreläsning 8: Exempel och problemlösning

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Tentamen i Programmeringsteknik I, ES,

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

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

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

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

Malmö högskola 2008/2009 CTS

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

Objektorienterad programmering D2

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Tentamen, EDAA20/EDA501 Programmering

Malmö högskola 2007/2008 Teknik och samhälle

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen i Algoritmer & Datastrukturer i Java

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

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

Tentamen TEN1 HI

Tentamen i Programmeringsteknik MN

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.

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

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

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

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

OOP Tentamen

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

DAT043 Objektorienterad Programmering

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

OOP Tenta

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

Tentamen, EDA501 Programmering M L TM W K V

Agenda. Objektorienterad programmering Föreläsning 13

Objektsamlingar i Java

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Nämnarens kryptoskola fördjupning. Enkel transposition

Redovisning av inlämningsuppgifter

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Tentamen, EDA501 Programmering M L TM W K V

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

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. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

2. Betrakta följande program, där fyra heltal läses från tangentbordet och några (ointressanta) beräkningar görs:

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

OOP Objekt-orienterad programmering

Classes och Interfaces, Objects och References, Initialization

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

Tentamen, EDA017, Programmeringsteknik för C, E, I och Pi

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

Transkript:

UMEÅ UNIVERSITET Inst. för Datavetenskap 050118 DELPROV 2 I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH PROGRAMMERING I ETT OBJEKTORIENTERAT SPRÅK (JAVA), 5P Datum : 050118 Tid : 9-13 Hjälpmedel : Allt. Kommunikation med andra personer (direkt eller indirekt) är dock inte tillåten, som t ex via epost, mobiltelefon, gemensamma kataloger etc. Antal uppgifter : 4 Maxpoäng : 30 (halva poängtalet på summan av de båda delproven samt minst 30% på vardera prov krävs normalt för godkänt) Provet består av 4 uppgifter : 1 och 2 samt 2 fritt valda uppgifter bland 3,4,5,6 & 7. Kryssa för de uppgifter du lämnar in. Källkod skrivs ut i ett ickeproportionellt typsnitt (t.ex. courier). Namn, personnummer, användarnamn och sökvägen till filen/filarna 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 dp2050118 (kallas provmappen i resten av häftet) på kursens hemsida. Där finns också eventuella andra filer som du kan behöva. OBS! Kontrollera att din dator fungerar innan du börjar på allvar. Börja sedan med att läsa instruktionerna på nästa sida. Lycka till! UMEÅ UNIVERSITET 901 87 UMEÅ Tel.: 090-786 77 08 Fax: 090-786 61 26 e-mail: marie@cs.umu.se

Innan du börjar skall du göra följande: 1. Logga in på Unix-systemet med hjälp av putty 2. Om du inte gjort i ordning katalogerna edu och java gör detta annars gå till steg 3: Skapa en ny katalog mkdir edu Skydda katalogen: chmod 700 edu/ setfacl -r -m g:tdb:r-x edu/ Gå ned i katalogen cd edu Skapa en ny katalog mkdir java Skydda katalogen: setfacl -r -m g:tdb:r-x java/ 3. Om du redan har en katalog /edu/java: Gå till din katalog cd java eller cd /edu/java om du hoppat hit från steg 1 Skapa en ny katalog mkdir dp2050118 Skydda katalogen: setfacl -r -m g:tdb:r-x dp2050118/ 4. Testa din inställning genom att gå till adressen http://www.cs.umu.se/~schedin/rights/ och klicka på Testa rättigheter. Regler för det praktiska provet Detta ä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. Några riktlinjer för hur lösningarna bedöms : Koden skall följa god objektorienterad 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 heller 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(9)

Uppgift 1 (2+4 = 6 poäng) Fresia och nejlikor är blommor. Nejlikor är röda och kostar 12.50 medan fresia är vita och kostar 7.50. Vi bortser från andra färgvariationer i denna uppgift. a) Skriv klasserna Blomma, Nejlika och Fresia. Alla blommor skall ha en metod String getfärg() som returnerar blommans färg och en metod double getpris() som returnerar blommans pris. Ingen av klasserna Nejlika och Fresia får innehålla attribut (instansvariabler) och implementationen av metoderna ska ske enligt god objektorienterad metodik. b) Ett arrangemang innehåller i vår design endast nejlikor och fresia med de egenskaper som beskrivs ovan. Ett arrangemang kan innehålla upp till 10 blommor. Skriv klassen Arrangemang () som ska ha följande metoder: en konstruktor Arrangemang () som slumpar hur många blommor det finns i arrangemanget (1-10) och sen slumpar om dessa blommor ska vara nejlikor eller fresia void läggtill(blomma b) - placera en given blomma i arrangemanget (man får anta att det finns plats i arrangemanget!) int antalröda() - returnera antalet röda blommor i arrangemanget double getpris() - returnera arrangemangets pris Uppgift 2 ( 5 poäng) Implementera en klass Queue med hjälp av LinkedList som finns i Java (titta i API:n som finns på adress http://java.sun.com/j2se/1.5.0/docs/api/index.html och är även inlänkad från kurssidan). En kö har följande metoder: public Queue() En konstruktor som skapar en tom kö. public void enqueue(object val) En metod som tar ett värde och lägger det sist i kön. public boolean isempty() Returnerar true om kön är tom, annars false. public Object front() Returnerar köns första element utan att ta bort det. public Object dequeue() Returnerar köns första element samt tar bort det. 3(9)

I den följande delen får du lämna in högst två av uppgifterna! Uppgift 3 (5 poäng) Grafer kan representeras med hjälp av linjär algebra. Förbindelser mellan noder i grafer representeras då med vektorer. Det blir då förhållandevis enkelt att beräkna vägen, och dess längd mellan två noder t.ex. Din uppgift är att modellera sådana n-dimensionella vektorer. Konstruera en klass, vars objekt kan representera vektorer i R n. Detta innebär att man måste kunna ändra enskilda värden (element) i vektorn. det måste gå att få fram ett givet elements värde i vektorn en vektor ska kunna adderas med en annan och som resultat returnera en ny vektor 1 7 8 Exempel: om x = 3 och y = 5 så är x + y = 8 2 8 10 1.0 1.0 man ska kunna fråga vektorn om dess längd, dvs. 2-normen. Om x = 3.0 så får 2.0 1.0 man att längden är x 2 = 1 2 +1 2 + 3 2 + 2 2 +1 2 = 16 = 4 Det kan vara lämpligt att ha en tostring-metod i klassen för att kunna testa lösningen. Uppgift 4 (6 poäng) Umeå kommuns socialförvaltning ansvarar för en mängd äldreboenden som finns spridda över kommunen och var och en av dem har en egen budget för inköp av varor och tjänster som exempelvis städning. De har också en ansvarig föreståndare som sköter inköpen och planerar fördelning av varor och tjänster. Inköpen görs från någon av kommunens entreprenörer. Entreprenörerna har olika verksamhetsområden. Det gör att vissa entreprenörer enbart säljer varor medan andra säljer tjänster. Systemet ska klara av att lagra viktig information om varorna/tjänsterna som tex. näringsinnehåll i mat eller lön för vikarier. Vid inköp kontrollerar entreprenörens chef om de har den angivna varan/tjänsten och uppdaterar sitt eget register vid leveransen till äldreboendet. Designa ett system till socialförvaltningen som hanterar äldreboendena enligt ovan. Lämna in en UML-liknande beskrivning av designen 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. För varje klass ska viktiga attribut, metoder och parametrar finnas med. OBS! I denna designuppgift ska du inte implementera koden. Du ska inte heller göra någon design för användargränssnittet till systemet. 4(9)

Uppgift 5 (9 poäng) I den här uppgiften ska ni utgå från de klasser som ni skrev i OU2 (uppgiften OU2 finns på sidan http://www.cs.umu.se/kurser/tdba63/ht04/ou/ou2/index.html), dvs en abstrakt klass Figure och klasserna Square, Triangle och Circle som ärver från Figure. Nu ska ni implementera ytterligare en klass FigureList som är en lista av figurer som man sedan kan söka i. För att det ska fungera måste ni komplettera er implementation från OU2 enligt följande Figurerna måste vara jämförbara med avseende på arean, dvs klassen Figure måste implementera interfacet Comparable. Det ska finnas en tostring()-metod så att man kan få varje figurs area och färg i en sträng. Klassen FigureList måste innehålla många metoder för insättning, borttagning och navigering i listan men i denna uppgift begränsar vi oss och ni ska implementera följande metoder: En konstruktor som skapar en tom lista. En metod public void addfigure(figure f) som lägger in en figur i listan. En metod public void printout() som skriver ut information om listans figurer till skärmen (med hjälp av figurernas tostring()). En metod public Figure getsmallest() som returnerar en referens till den minsta figuren i listan. Klasserna ska fungera tillsammans med testprogrammet som finns i klassen TestFigureList i provmappen. Uppgift 6 ( 9 poäng) Så här i influensatider behöver infektionskliniken på NUS ett program som simulerar förloppet av influensan i en befolkning. Följande vet man gäller (OBS! Detta är ett fiktivt exempel och dess medicinska korrekthet starkt ifrågasatt): Dag 1 insjuknar en person i befolkningen (antag att han/hon har dagen före blivit smittad vid utlandsresa). De tre närmaste dagarna efter det att en person blivit smittad är denne sjuk. En person som haft sjukdomen blir immun och kan inte drabbas fler gånger. Var och en av de tre sjukdagarna för den sjuke smittan vidare till n andra slumpmässigt utvalda person i befolkningen (n är ett slumptal i intervallet 0..4). Under förutsättning att en utvald person är frisk och inte tidigare haft sjukdomen blir denne smittad och insjuknar dagen därpå (annars händer ingenting). En person kan bli smittad flera gånger samma dag. Det kan till och med inträffa att en person blir smittad mer än en gång samma dag av samma sjuka person. Dock kan ingen föra över smittan till sig själv. En klass InfluensaSimulator som uppfyller ovanstående måste ha följande metoder: Se nästa sida! 5(9)

// Skapar en simulator som dag för dag skall simulera förloppet av // en smittsam sjukdom i en befolkning bestående av antalpersoner, // från början friska, personer. Simuleringen startar dag 0 med // att en person blir smittad public InfluensaSimulator(int antalpersoner) // Returnerar dagens nummer public int getdagnr(); // Byter till nästa dag. Sjukdomsläget uppdateras enligt // simuleringsreglerna public void nydag(); // Tar reda på antalet som nu är sjuka public int antalsjuka(); // Tar reda på antalet som blivit smittade idag public int antalsmittade(); // Tar reda på antalet som nu är immuna public int antalimmuna(); Du får en main-metod given i klassen TestInfluensaSimulator som finns i provmappen. Den fungerar så att varje dag nr 1, 2, 3 osv skrivs ut en rad med informationen: dagens nummer antal sjuka idag antal som smittats idag antal immuna idag. Utskriften avbryts när antal sjuka idag blivit noll. Antalet personer i befolkningen som ska simuleras läses in från tangentbordet. Du får dessutom klassen Person som symboliserar människorna i simuleringen. Din uppgift är att skriva klassen InfluensaSimulator. OBS! Du får inte ändra i de givna klasserna. Uppgift 7 (10 poäng) Människan har i alla tider fascinerats av krypton och chiffer 1. En tidig krypteringsteknik kallas Ceasar-kryptering. Principen är att man byter till ett tecken som ligger på ett visst avstånd från originaltecknet. Om man byter varje bokstav mot den bokstav som ligger tre tecken senare i alfabetet, så har man gjort en Ceasar-kryptering. ABBA blir t.ex. DEED. Det visade sig snabbt att Ceasar-kryptering var för enkel och lätt kunde forceras med hjälp av språkliga analyser, vilka bokstäver är vanligast förekommande osv. Ceasar-kryptering är ett s.k. monoalfabetiskt substitutionskrypto. Lite mer komplicerat blir det om man arbetar med både substitution (steg 1) och transposition (steg 2). Ett sådant krypto är ADFGVX-kryptot. OBS! I denna uppgift ska du implementera steg 2 och får steg 1 givet! Steg 1: Denna kryptering fungerar (för det engelska alfabetet) så att man börjar med att placera ut bokstäverna a..z och siffrorna 0..9 slumpmässigt i ett rutnät 6x6. 1 Texten i denna uppgift är baserad på beskrivningen i Simon Singhs bok Kodboken, MånPocket 2001, ISBN 91-7643-697-7. För den som blivit nyfiken rekommenderas denna bok varmt! Se nästa sida! 6(9)

A D F G V X A y e n 2 9 r D x 8 h t o s F k 5 4 m 0 j G u f l z 3 a V d b v c 6 p X g i q w 1 7 Både rader och kolumner benämns med en av bokstäverna A, D, F, G,V och X. För varje tecken som skall krypteras går det nu ut på att se efter i vilken rad och kolumn tecknet finns och skriva ner de två bokstäverna som anger positionen. Ett exempel: bokstaven r finns i rad A och kolumn X och representeras då av AX, e finns i rad A och kolumn D och representeras då av AD osv. Meddelande r e v a Kryptotext1 AX AD VF GX Vid dekryptering så tillämpas denna process åt andra hållet för att komma tillbaka till originalmeddelandet. För varje par av tecken i kryptot tar man den första som radindex och den andra som kolumnindex och får på så sätt ut tecknet i klartexten. Så här: Ett annat exempel: Kryptotext1 AX AD VF GX Meddelande r e v a Meddelande a n f a l l k l 1 3 0 0 Kryptotext1 GX AF GD GX GF GF FA GF XV GV FV FV Än så länge är detta också ett monoalfabetiskt substitutionskrypto. Steg 2: Nästa steg i krypteringen handlar om transposition, vilket gör forcering betydligt svårare. Denna sker med utgångspunkt i ett nyckelord, som mottagaren också måste känna till. Nyckeln skrivs in högst upp i ett nytt rutnät. Sedan skriver man in kryptotexten från steg 1 i lika långa rader under. Därefter ordnas kolumnerna iså att nyckelordets bokstäver kommer i alfabetisk följd: Se nästa sida! 7(9)

O L I K I K L O G X A F A F X G Flytta om G D G X kolumnerna så att G X D G G F G F bokstäverna i G F F G nyckelordet kommer F A G F G F A F i alfabetisk ordning X V G V G V V X F V F V F V V F Den färdiga kryptotexten erhåller man genom att skriva ut bokstäverna i den nya ordningen. I vårt exempel Ursprungssträng : ->anfallkl1300<- Krypterad steg1 : ->GXAFGDGXGFGFFAGFXVGVFVFV<- Krypterad steg2 : ->AFXGGXDGGFFGGFAFGVVXFVVF<- Dekrypterat steg2 : ->GXAFGDGXGFGFFAGFXVGVFVFV<- Tillbaka igen : ->anfallkl1300<- Din uppgift består i att implementera steg 2 i ADFGVX-kryptot. Lösningen skall innehålla en komplett implementation av en klass KryptoSteg2 med två metoder String encryptsteg2(string s) String decryptsteg2 (String s) Du får utgå ifrån att meddelandesträngen enbart består av små bokstäver och siffror (a,.. z, 0,..9) i din lösning och du får också välja nyckelordet i steg 2 så att samtliga rader är fyllda i schemat ovan (annars får man problem med tomma rutor). För steg 1 i krypteringen får du använda klassen KryptoSteg1 som finns i provmappen på kursens hemsida. Din lösning skall gå att provköra med följande kod (som också finns i provmappen): public class TestaKrypton { public static void main(string[] args) { String urstring = "anfallkl1300"; String kodstring1,kodstring2; String kontrollstring; KryptoSteg1 k1; KryptoSteg2 k2; k1 = new KryptoSteg1();//Obs, det finns två konstruktorer System.out.println("Ursprungssträng \t: ->" + urstring + "<-"); kodstring1 = k1.encryptsteg1(urstring); System.out.println("Krypterad steg1 \t: ->" + kodstring1 + "<-"); k2 = new KryptoSteg2("OLIK"); kodstring2 = k2.encryptsteg2(kodstring1); System.out.println("Krypterad steg2 \t: ->" + kodstring2 + "<-"); kontrollstring = k2.decryptsteg2(kodstring2); System.out.println("Dekrypterat steg 2 \t: ->" + kontrollstring + "<-\n"); kontrollstring = k1.decryptsteg1(kontrollstring); 8(9)

System.out.println("Dekrypterat steg 1 \t: ->" + kontrollstring + "<-\n"); }//main }//TestaKrypton Som ger följande utskrifter: Ursprungssträng Krypterad steg1 Krypterad steg2 Dekrypterat steg 2 Dekrypterat steg 1 : ->anfallkl1300<- : ->GXAFGDGXGFGFFAGFXVGVFVFV<- : ->AFXGGXDGGFFGGFAFGVVXFVVF<- : ->GXAFGDGXGFGFFAGFXVGVFVFV<- : ->anfallkl1300<- 9(9)