DELPROV 2 PROGRAMMERINGSMETODIK OCH

Relevanta dokument
Objektorienterad programmering, Java, 5p TDBA63

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

DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

DELPROV2 OBJEKTORIENTERAD PROGRAMMERING I JAVA

DELPROV 1 I DATAVETENSKAP

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

PRAKTISKT DELPROV I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH

TENTAMEN I DATAVETENSKAP

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

Nämnarens kryptoskola fördjupning. Enkel transposition

Tentamen i Programmering

Tentamen, EDAA10 Programmering i Java

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Tentamen i Programmeringsteknik I

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

JAVA Mer om klasser och objektorientering

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

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Objektorienterad programmering D2

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

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

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

Tentamen, EDA501 Programmering M L TM W K V

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

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

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

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

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

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

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

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

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 5-6 Innehåll

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

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

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

Tentamen, Algoritmer och datastrukturer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Programmeringsteknik I, ES,

Malmö högskola 2008/2009 CTS

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 I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

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

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

TDP Regler

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Uppgift 1 ( Betyg 3 uppgift )

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

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.

Tentamen i Objektorienterad programmering

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

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

Tentamen i Grundläggande Programvaruutveckling, TDA548

LyckaTill önskar Anna

Tentamen i Algoritmer & Datastrukturer i Java

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

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

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

Tentamen TEN1 HI

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

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

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

Objektorienterad Programmering (TDDC77)

kl Tentaupplägg

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

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 på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Tentamen i Grundläggande programmering STS, åk

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 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

Laboration 1: Figurer i hierarki

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.

Objektorienterad programmering i Java I

INFORMATIK - MED SYSTEMVETENSKAPLIG INRIKTNING, GRK/A (1-30 HP)

Transkript:

UMEÅ UNIVERSITET Datavetenskap Peter Hagervall Marie Nordström 060113 DELPROV 2 PROGRAMMERINGSMETODIK OCH PROGRAMMERING I JAVA, 5P Datum : 060113 Tid : 4 timmar (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 (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 2 fritt valda uppgifter bland 3,4,5,6 & 7. Kryssa för de uppgifter du lämnar in. Skriv din dators namn på försättsbladet. 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. 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 pp060113 på kursens hemsida. Där finns också eventuella andra 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 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 har gjort i ordning katalogerna edu och java gå till steg 3: Skapa en ny katalog >mkdir edu Skydda katalogen med följande kommandon: >chmod 700 edu/ >setfacl -r -m g:tdb:r-x edu/ Gå ned i katalogen edu >cd edu Skapa en ny katalog java >mkdir java Skydda katalogen: >setfacl -r -m g:tdb:r-x java/ 3. Gå till din katalog >cd java eller >cd /edu/java om du hoppat direkt hit efter steg 1 4. Nu skapar du en plats för provets filer i /edu/java-katalogen Skapa en ny katalog >mkdir dp2_060113 Skydda katalogen: >setfacl -r -m g:tdb:r-x dp2_060113/ Observera att ditt prov inte kan rättas om vi inte får tillgång till dina filer! 2(11)

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. 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 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. 3(11)

Uppgift 1 (4 poäng) Utgå från UML-beskrivningen nedan och implementera en klass Village som modellerar en by med namn och position givet som koordinater (x,y) (koordinatsystemet är okänt för klassen och hanteras av den som använder objekten). Man kan via metoden distance fråga ett Village-objekt om avståndet till ett annat Village-objekt. Beräkningen av avståndet mellan punkterna (x 1, y 1 ) och (x 2, y 2 ) görs med hjälp av är den välkända Pythagoras sats: (x 2 " x 1 ) 2 + (y 2 " y 1 ) 2. Uppgift 2 (6 poäng) Många gillar äventyrsspel, så du bestämmer dig för att som ett rent hobbyprojekt skriva ett program som ska slå alla med häpnad. Du kommer direkt på några karaktärer som skall vara med, hjältar och monster! Du skriver snabbt ihop kod för dessa klasser. Deras UML-diagram ser ut så här: Innan du hunnit längre så inser du att dessa har en hel del gemensamt. För att inte ha samma kod på flera ställen så bestämmer du dig för en hierarki av karaktärer. Uppgiften fortsätter på nästa sida 4(11)

Definiera en basklass GameCharacter som du sedan kan härleda Hero och Orch ifrån. Basklassen ska ha ett attribut race som sätts till människa för Hero-objekt och orch för Orch-objekt. Dessutom måste det finnas en metod getrace som returnerar rasen. Metodförklaringar: Hero(String name, int skill,int health) Klassens konstruktor. Orch(int skill,int health) Klassens konstruktor. int gethealth() Returnerar hälsan. int getattackvalue() Returnerar ett attackvärde, här skickligheten. String tostring() Används för att skriva ut information om objektet. Låt metoden returnera en sträng som kan se ut så här för ett Hero-objekt: Hjälten <name>, människa med skicklighet <skill> och hälsa <health>. Metoden ska inte returnera fasta värden utan hjältens namn, ras, skicklighet och hälsa ska hämtas från klassens attribut. void wound(int damage) Metoden används när varelsen blir skadad. Värdet som skickas in som parameter ska dras bort från hälsan. Kod för samtliga tre klasser skall redovisas. 5(11)

I den följande delen får du lämna in högst två av uppgifterna Uppgift 3 ( 6 poäng) Din lillasysters lärare har bett dig skriva ett program för att hjälpa förskolebarn att öva på olika matematiska begrepp och räknefärdigheter. Tanken är att ditt program ska kunna användas för två nivåer av förmåga (F4 och F6) hos eleverna. F4 Lämplig för barn i åldern 4-5 år. På denna nivå är det tänkt att barnen ska öva de mest grundläggande aritmetiska operationerna. Lektion i räkning : t.ex. räkna antal figurer och former Lektion i att känna till de enkla siffrorna: t.ex. identifiera siffror och lära sig uttala dem genom att när musen passerar över dem så poppar figuren ut och en röst uttalar dess namn. Lektion om sortering av tal och figurer: t.ex. plocka ut ett objekt med en viss form ur en grupp av figurer med olika färg och form. Sortera tal med avseende på deras värde eller figurer med avseende på deras storlek. F6 Den här nivån är lite mer avancerad och riktar sig till barn i åldern 6-7 år. På denna nivå ska barnen bli bekant med de grundläggande aritmetiska räknesätten. Lektioner i addition, subtraktion, enkel multiplikation: en aritmetisk operation visas/ritas ut på skärmen och eleven ger svaret antingen genom att trycka på knappar eller via tangentbordet. Lektion i att att lösa enkla problem: ett enkelt problem som innehåller en enkel operation (som den just beskrivna) visas och eleven ger svaret. Varje nivå består av ett flertal steg som eleverna måste klara för att gå till nästa nivå. För att klara ett visst steg och få gå vidare till nästa ska man uppnå en viss poäng. Poäng samlar eleven under lektiononerna. Varje lektion består av två delar: övning och diagnostiskt test. Eleven samlar sina poäng i den första delen (övningen) av varje lektion. Varje avklarad lektion följs av ett spel eller en melodi för att motivera eleven. Eftersom läraren inte har så bra kunskaper om hur program kan organiseras så är du inte helt säker på vad det är som förväntas av dig. Därför bestämmer du dig för att göra en design som du använda för att kontrollera med lärarna på din systers skola om din idé är användbar. 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. Observera att det inte duger med CRC-kort som beskrivning. För varje klass ska viktiga attribut, metoder och parametrar finnas med. Detta får du gärna lämna in handskrivet. 6(11)

Uppgift 4 (8 poäng) En samling byar i glesbygden ska upprätta ett system för radiokommunikation, och vill att du hjälper dem med planeringen. Kraven på systemet är att varje by ska ha en egen sändare, och att varje sändare ska kunna nå samtliga byar (mottagare). För enkelhetens skull kan vi anta att inga fysiska hinder (t.ex. berg) kan störa kommunikationen mellan byarna. För varje by ska du beräkna avståndet till den mest avlägsna byn, eftersom detta är avgörande för hur stark sändaren måste vara. Det finns två olika typer av sändare: Typ 1, klarar avstånd till och med 200 längdenheter Typ 2, klarar avstånd över 200 längdenheter Din uppgift är att hjälpa byrepresentanterna att bestämma hur många sändare av respektive styrka som ska beställas från leverantören. Du får inte gardera dig med att välja den starkaste sändaren för samtliga byar eftersom den är mycket dyrare. Indata för dina beräkningar är en textfil med uppgifter om byarnas namn samt deras positioner, t.ex.: Söderfors 12.2 42.0 Täfteå 123.11-15.92 Norrmjöle -10.0 99.9 Utgå från klassen Village i uppgift 1 och skriv en applikation som kan hantera inläsning av data från en sådan fil (i provmappen finns filen byar.txt), och beräkna antalet sändare av respektive typ. Applikationen ska också kunna svara på frågorna: Hur långt ifrån varandra ligger de två byarna med längst avstånd mellan? (A och C i figuren) Hur nära varandra ligger de två byar som ligger närmast varandra? (A och B i figuren) Lösningen behöver inte vara effektiv eftersom antalet byar inte är speciellt stort. Lösningen måste däremot följa god objektorienterad stil. 7(11)

Uppgift 5 (8 poäng) Sudoku är ett pussel som går ut på att man ska placera ut siffror i ett rutmönster. Det klassiska, ursprungliga rutmönstret består av 3*3 rutor ( lådor ) som i sin tur består av 3*3 rutor. Det gäller att placera in siffrorna 1 till 9 på ett sådant sätt att varje vågrät rad, lodrät rad och låda på 3*3 rutor innehåller varje siffra exakt en gång. Ett Sudoku har minst 17 siffror utplacerade från början, och för att den ska anses som äkta får den bara ha en lösning. Sudoku uppfanns i USA i slutet av 1970-talet, men blev först populär i Japan, där den också fick sitt namn, som betyder ensam siffra. 1 Det finns folk som hävdar att ett Sudoku måste vara vackert också. Din uppgift är att konstruera en klass Sudoku som kan representera ett Sudoku. Klassen ska bl.a. ha en metod solved() som returnerar true om pusslet är löst och false annars. Du får anta att metoden bara anropas givet att alla rutor är ifyllda. Skriv ett litet testprogram i en fristående applikation. Filen sudoku.txt innehåller en korrekt sudoku som du kan använda för att testa din lösning. 1 Hämtat från Wikipedia: http://sv.wikipedia.org/wiki/huvudsida 8(11)

Uppgift 6 (4 + 5 = 9 poäng) Du är lite intresserad av daytrading och vill ha ett enkelt system för att hålla reda på din värdepappershandel. Du utgår från en värdepapperspost när du organiserar din portfölj. Värdepapper har ett inköpspris och ett dagsvärde. Aktier och optioner är värdepapper med lite olika karaktär. Det vi tar fasta på här är att försäljningsvärdet skiljer sig åt. Försäljningsvärdet är inte detsamma som dagspriset. En aktie säljs för 97% av dagspriset medan en option säljs för 47% av dagspriset + 15% av inköpspriset. a) Skriv klasserna VardePapper, Aktie och Option. Alla värdepapper skall ha metoderna VardePapper getvp() som returnerar det aktuella värdepapperet String getdagspris() som returnerar värdepapperets dagsvärde double getinpris() som returnerar värdepapperets inköpspris. Dessutom skall de ha en metod double getfvarde() som returnerar försäljningsvärdet. OBS! Ingen av klasserna Aktie och Option får (i den här lösningen) innehålla några attribut (instansvariabler) och implementationen av metoderna ska ske enligt god objektorienterad metodik. b) En portfölj innehåller i din design ett antal värdepappersposter med antingen aktier eller optioner med de egenskaper som beskrivs ovan. En portfölj kan innehålla godtyckligt många värdepappersposter. Skriv klassen VPPost som ska ha minst följande metoder: VardePapper getvp() - returnera det aktuella värdepapperet i posten double getpostvarde() - returnera postens totala försäljningssvärde och Portföljsom ska ha minst följande metoder: int antalpositiva() - returnera antalet värdepappersposter i portföljen som har positiv utveckling, dvs, högre dagspris än inköpspris double getdagsvarde() - returnera portföljens totala försäljningssvärde Du får självklart lägga till metoder som du behöver för att organisera din lösning, den skall dock följa god objektorienterad metodik. Gör en komplett applikation som slumpar ut ett antal värdepappersposter och testar portföljens metoder. 9(11)

Uppgift 7 (11 poäng) Människan har i alla tider fascinerats av krypton och chiffer 2. 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. En annan vanlig teknik är transposition. Det går ut på att tecknen i den text som skall krypteras anges i en annan ordning, enligt en given regel. Ett sådant krypto är Staket-kryptot. Denna kryptering fungerar så att man placera ut bokstäverna i klartexten, i ett staket med ett i förväg bestämt antal rader. Säg att vi har bestämt att det ska vara tre rader i staketet och att vi har klartexten GE INTE UPP ALLT LÖSER SIG MED TIDEN. Nu lägger vi in texten (hoppa över blanktecknen, annars blir det för enkelt att knäcka kryptot) kolumnvis. Eftersom den sista kolumnen inte fylls, så lägger vi till några extra tecken, t.ex. Z, så att staketet är helt fyllt. Nu är det bara att läsa av texten radvis: G N U A T S S M T E E T P L L E I E I N I E P L Ö R G D D Z GNUAT SSMTE ETPLL EIEIN IEPLÖ RGDDZ (Förr grupperades text vanligtvis i grupper om fem tecken för att underlätta överföringen via telegraf.) Vid dekryptering gör man så här: 1. Sätt alla tecken i en lång rad GNUATSSMTEETPLLEIEINIEPLÖRGDDZ 2. Dela upp raden i antalet rader i staketet (den som ska dekryptera vet detta). I vårt exempel var det tre rader och 30 tecken vilket betyder tre grupper om tio tecken GNUATSSMTE ETPLLEIEIN IEPLÖRGDDZ 3. Plocka nu första teckenet från grupp1, första tecknet från grupp 2 och första tecknet från grupp tre. Fortsätt med andra teckenet i resp. grupp osv. Då får vi tillbaka ursprungstexten: GEINTEUPPALLTLÖSERSIGMEDTIDENZ Din uppgift består i att med hjälp av String-klassen implementera staket-kryptot. Du skall alltså utnyttja de metoder som tillhandahålls i klassen. Uppgiften fortsätter på nästa sida 2 För den som är nyfiken på skiffer och krypton rekommenderas!simon Singhs Kodboken, MånPocket 2001, ISBN 91-7643-697-7. 10(11)

Lösningen skall innehålla en komplett implementation av en klass StaketKrypto med åtminstone metoderna String encrypt(string s) String decryptsteg(string s) Du får utgå ifrån att meddelandesträngen enbart består av bokstäver (A,.. Ö, a,.. ö), blanktecken och siffror (0,..9). Antalet rader i staketet skall ges till kryptots konstruktor, se testprogrammet nedan. Din lösning skall gå att provköra med följande kod (finns i provmappen): public class TestaKrypton { public static void main(string[] args) { String urstring; String kodstring; String kontrollstring; StaketKrypto k; urstring = "GE INTE UPP ALLT LÖSER SIG MED TIDEN"; k = new StaketKrypto(3); 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"); urstring = "På måndag börjar Envariabelanalys II"; 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 Som ger följande utskrifter: Ursprungssträng : ->GE INTE UPP ALLT LÖSER SIG MED TIDEN<- Krypterad : ->GNUATSSMTEETPLLEIEINIEPLÖRGDDZ<- Tillbaka igen : ->GEINTEUPPALLTLÖSERSIGMEDTIDENZ<- Ursprungssträng : ->På måndag börjar Envariabelanalys II<- Krypterad : ->PÅAÖANRBALIÅNGRRVIENYIMDBJEAALASZ<- Tillbaka igen : ->PÅMÅNDAGBÖRJARENVARIABELANALYSIIZ<- 11(11)