Övningar, EDAA20 Programmering och Databaser

Relevanta dokument
Övningar, EDA501 Programmering

Föreläsning 5-6 Innehåll

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

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

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

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 3-4 Innehåll

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

Föreläsning REPETITION & EXTENTA

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Programmeringoch databaser

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Programmeringsteknik för BME, F och N

Föreläsning 9-10 Innehåll

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

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

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Programmeringsteknik för D

Föreläsning 7-8 Innehåll

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen, EDAA10 Programmering i Java

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Algoritmexempel. Föreläsning 5-7 Innehåll. Summering Mönster. Summering Exempel: alternerande harmoniska serien

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

Del A (obligatorisk för alla)

Del A (obligatorisk för alla)

Föreläsning 1 & 2 INTRODUKTION

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Saker du ska kunna Föreläsning 13 & 14

Grundläggande programmering med C# 7,5 högskolepoäng

Tentamen, EDAA20/EDA501 Programmering

Programmering och databaser

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Tentamen OOP

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

Föreläsning 1 & 2 INTRODUKTION

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Tentamen i Programmering

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

Instuderingsfrågor, del D

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

Föreläsning 1-2 innehåll

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

TENTAMEN OOP

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

1 Repetition av viktiga begrepp inom objektorienterad programmering

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

[] Arrayer = Indexerad variabel

Föreläsning 13 Innehåll

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

Repetition av viktiga begrepp inom objektorienterad programmering

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äsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Tentamen i Programmeringsteknik MN

Statistik över heltal

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

Malmö högskola 2008/2009 CTS

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

Objektorienterad programmering i Java

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

TDDC77 Objektorienterad Programmering

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Del A (obligatorisk för alla)

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.

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Rekursion och induktion för algoritmkonstruktion

Typkonvertering. Java versus C

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

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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 ID1004 Objektorienterad programmering May 29, 2012

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

TDIU01 - Programmering i C++, grundkurs

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Laboration A Objektsamlingar

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

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

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Objektsamlingar i Java

1 Egna klasser. 1.1 En punkt-klass

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Transkript:

LUNDS TEKNISKA HÖGSKOLA EDAA20 Programmering och databaser Institutionen för datavetenskap HT 2016 Övningar, EDAA20 Programmering och Databaser Övningarna är papper- och penn -övningar. Du löser uppgifter på egen hand eller tillsammans med en kamrat. Övningsledarna hjälper till om du får problem och diskuterar dina lösningar med dig. Före varje övning bör du förbereda dig genom att läsa i läroboken och gärna försöka lösa en del av uppgifterna. Lösningsförslag finns på kursens hemsida. Förutom uppgifterna i detta häfte finns det övningsuppgifter i läroboken. Innehåll 1 Övning 1 Variabler och tilldelningssatser, använda klasser............. 3 2 Övning 2 Implementera klasser............................. 5 3 Övning 3 Uttryck, slumptal, algoritmexempel.................... 8 4 Övning 4 Vektorer, sökning............................... 9 5 Övning 5 String och StringBuilder, ArrayList..................... 12 1

Övning 1 Variabler och tilldelningssatser, använda klasser 3 Övning 1 Variabler och tilldelningssatser, använda klasser Läs i läroboken: avsnitt 1-2, 3.2 Variabler och tilldelningssatser 1. Betrakta följande programavsnitt: int nbra = 2; int nbrb = nbra + 3; int nbrc = 3 * (nbra + nbrb) - 1; nbra = nbrc / 5; nbrc = 0; En bild av minnessituationen (vilka variabler som finns och variablernas värden) ska ritas efter respektive tilldelningssats. Efter första tilldelningssatsen ser det ut så här: nbra 2 Rita de fyra övriga bilderna. 2. Skriv satser som byter värde på a och b ( swappar värdena): Scanner scan = new Scanner(System.in); int a = scan.nextint(); int b = scan.nextint(); //... dina satser System.out.println(a + " " + b); Exempel: Om det som skrivs på tangentbordet är: 10 25 ska programmet ge följande utskrift: 25 10 3. Skriv ett program (en klass med en main-metod) som först läser en starttid (två tal, timmar och minuter, till exempel 12 41) och därefter en sluttid (två andra tal, till exempel 16 28) och därefter beräknar och skriver ut hur många minuter det är mellan tiderna. Du kan förutsätta att sluttiden är större än starttiden. Ledning: det behövs fyra int-variabler för de fyra inlästa talen. Ge dessa variabler vettiga namn. 4. Ändra i programmet från uppgift 3 så att tidsavståndet skrivs ut i timmar och minuter i stället för i minuter. Detta kan man göra på två sätt: antingen genom att använda en if-sats eller genom att använda heltalsdivision och operatorn %, som ger resten vid heltalsdivision (avsnitt 6.3 i läroboken).

4 Övning 1 Variabler och tilldelningssatser, använda klasser Läsa specifikationer och använda färdiga klasser 5. Klasserna SimpleWindow och Square från läroboken antas vara tillgängliga. Studera specifikationerna (finns i appendix C respektive kap 3 i läroboken). I specifikationerna kan du se vilka metoder man kan anropa på SimpleWindow respektive Square-objekt. Vad ritas på skärmen när nedanstående program exekveras? Visa med en skalenlig figur. public class SquareExample { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(400, 400, "Squares"); Square sq1 = new Square(100, 100, 200); Square sq2 = new Square(300, 300, 50); sq1.draw(w); sq2.draw(w); 6. Skriv om programmet från uppgift 5 men skapa bara ett kvadratobjekt. Samma figur som tidigare ska ritas. Förutsätt att klassen Square har en metod void setside(int newside); som ändrar sidlängden till newside. 7. Nedanstående program innehåller tre fel som upptäcks av kompilatorn. Korrigera felen. public class ErrorTest { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600, 600); sq = new Square(100, 200, 50); while sq.getx() < 300 { sq.draw(w); sq.move(10, 10); 8. De föregående uppgifterna handlar om att skriva program genom att använda färdiga klasser, t.ex. Square. Hur klassen Square kan användas (namn på metoder etc.) kan du läsa i specifikationen av klassen. Nu ska du träna på att själv skriva en specifikation genom att göra tvärtom. Följande program använder en klass Apartment. Lista ut vilka metoder som finns och skriv en specifikation för klassen Apartment. public class CalculateRent { public static void main(string[] args) { Scanner scan = new Scanner(System.in); System.out.println("Lägenhetsnummer:"); int nbr = scan.nextint(); System.out.println("Yta:"); double area = scan.nextdouble(); Apartment a = new Apartment(nbr, area); System.out.println("Månadshyra per kvadratmeter:"); a.setsquaremetrerent(scan.nextdouble()); System.out.println("Månadshyra: " + a.getrent());

Övning 2 Implementera klasser 5 Övning 2 Implementera klasser Läs i läroboken: avsnitt 3.3-3.12 Referensvariabler och objekt 1. Bilden visar minnessituationen (vilka variabler som finns, variablernas värden, vilka objekt som finns, attributens värden) när följande sats har exekverats: Square sq1 = new Square(20, 30, 40); sq1 x y side 20 30 40 a) Rita en ny bild som visar hur minnessituationen förändras om man dessutom exekverar följande sats: Square sq2 = sq1; b) Ändra bilden i deluppgift a så att den visar minnessituationen om man slutligen exekverar satsen: sq1 = null; 2. Vi brukar för enkelhets skull rita en referens som en pil som pekar på det objekt referensvariabeln refererar till. Egentligen är referensen ett tal, nämligen adressen till den plats i minnet där objektet är lagrat. Ett exempel (ännu ej fullständigt) på hur referensvariablernas värden och objekten lagras i datorns minne visas här:... 5200 5204... 47540 47544 47548... 47540... 20 30 40 sq1 sq2 x y side Gör färdigt figuren så att den visar hur det ser ut efter att följande två satser exekverats: Square sq1 = new Square(20, 30, 40); Square sq2 = sq1;

6 Övning 2 Implementera klasser Implementera klasser 3. Implementera färdigt klassen Car: public class Car { private String nbr; private Person owner; // registreringnummer // ägare /** Skapar en bil med registreringsnummer licensenbr som ägs av personen owner. */ public Car(String licensenbr, Person owner) { // Lägg till egen kod här. /** Tar reda på bilens registreringsnummer. */ public String getlicensenbr() { // Lägg till egen kod här. /** Tar reda på bilens ägare. */ public Person getowner() { // Lägg tilll egen kod här. /** Sätter bilens ägare till newowner. */ public void changeowner(person newowner) { // Lägg tilll egen kod här. 4. Rita en figur som visar vilka objekt som finns samt värdet av alla variabler och attribut efter det att följande satser har exekverats. Person p = new Person("Bo Ek"); Car c1 = new Car("ABC123", p); p = new Person("Eva Alm"); Car c2 = new Car("XYZ789", p); Klassen Car finns i föregående uppgift och klassen Person ser ut så här. public class Person { private String name; /** Skapar en person med namnet name. */ public Person(String name) { this.name = name; /** Tar reda på personens namn. */ public String getname() { return name;

Övning 2 Implementera klasser 7 5. I ett system för bokning av platser på tåg förekommer en klass RailwayCoach som beskriver en vagn i tåget. Klassen har följande specifikation: /** Skapar en vagn med nbrseats platser. */ RailwayCoach(int nbrseats); /** Tar reda på antalet platser i vagnen. */ int getnbrseats(); /** Tar reda på antalet lediga (obokade) platser. */ int getnbrfreeseats(); /** Bokar n platser i vagnen. Det får förutsättas att n är <= antalet lediga platser. */ void makereservation(int n); Implementera klassen fullständigt, dvs deklarera attribut och implementera konstruktorn och metoderna. Observera att man bara är intresserad av antalet lediga platser, inte numren på de platser som är lediga. 6. Klassen Person beskriver personer (klassen har fler metoder, men dem är vi inte intresserade av här): /** Skapar en person med åldern age. */ Person(int age); /** Undersöker om denna person är äldre än personen p. Returnerar då true, annars false. */ boolean isolderthan(person p); Implementera klassen. Statiska metoder 7. Studera följande programrader: Point p1 = new Point(100, 100); Point p2 = new Point(200, 200); double dist = Math.hypot(p1.getX() - p2.getx(), p1.gety() - p2.gety()); a) Vad beräknas? b) På sista raden finns tre stycken metodanrop. Hur skiljer sig anropet av metoden hypot från anropet av metoderna getx/gety?

8 Övning 3 Uttryck, slumptal, algoritmexempel Övning 3 Uttryck, slumptal, algoritmexempel Läs i läroboken: avsnitt 3.9, 4, 5, 6 (ej 6.5), 7 (ej 7.8-7.9) Aritmetiska uttryck 1. Skriv följande som tilldelningssatser i Java: a) y = sin(20 ) b) z = ae x + be cos(x) c) hyp = a 2 + b 2 2. Talet x är av typ double. Hur konverterar man värdet av x till närmaste int-tal? 3. a) Hur kan man med operatorn % avgöra om heltalet n är jämnt? b) Hur kan man med operatorn % avgöra om heltalet n slutar med en nolla? c) Talet number är tresiffrigt. Skriv tilldelningar så att digit1, digit2, digit3 tilldelas värdet av respektive siffra. Använd operatorerna % och /. Logiska uttryck 4. Förenkla följande logiska uttryck (a är en int-variabel, ready är en boolean-variabel): a) a > 2 && a > 5 b) a > 2 a > 5 c)!(a > 2) d)!(a > 2 && a < 9) e)!(a < 0 a > 10) f) ready == true g) ready == false Slumptal 5. Skriv ett program som drar två olika slumptal mellan 1 och 100 och skriver ut dessa med det minsta talet först. Algoritmexempel: summering, beräkning av maximum och minimum 6. Indata består av 101 reella tal. Det första talet kallas limit. Skriv satser som läser talen och beräknar två summor: dels summan av de tal som är mindre än limit, dels summan av de tal som är större än limit. Tal som är lika med limit ska inte summeras. 7. Ett arbete ger lön enligt följande: första dagen är lönen en krona. De följande dagarna får man dubbelt så mycket betalt som man fick närmast föregående dag. Skriv ett program som avgör hur många dagar man måste arbeta innan man har tjänat ihop en miljon kronor. 8. Skriv ett program som läser 30 temperaturvärden och beräknar och skriver ut lägsta och högsta temperatur samt medeltemperaturen.

Övning 4 Vektorer, sökning 9 Övning 4 Vektorer, sökning Läs i läroboken: avsnitt 8.1-8.8, 8.10 Vektorer och matriser 1. Implementera följande metoder. Undersök inte fler tal än nödvändigt. a) /** Hittar minsta talet i vektorn v. */ public static int min(int[] v); b) /** Undersöker om talen i vektorn v är sorterade i växande ordning. */ public static boolean issorted(int[] v); c) /** Undersöker om vektorerna v1 och v2 är lika, dvs. om de är lika långa och alla v1[i] == v2[i]. */ public static boolean equal(int[] v1, int[] v2); 2. Klassen Matrix beskriver en kvadratisk matris: public class Matrix { private double[][] a; // talen i matrisen /** Skapar en matris med n rader och n kolonner. */ public Matrix(int n) { a = new double[n][n]; /** Tar reda på elementet med index i, k. */ public double get(int i, int k) {... /** Adderar matrisen m till denna matris (matriserna förutsätts vara lika stora). */ public void add(matrix m) {... /** Beräknar spåret av matrisen, dvs summan av diagonalelementen från övre vänstra hörnet till nedre högra hörnet. */ public double trace() {... Implementera de tre metoderna get, add och trace. Vid addition av matriser adderar man element för element. Sökning 3. En vektor a innehåller 100 heltal. Vilken utskrift fås av nedanstående satser om int i = 0; while (i < a.length && a[i]!= 0) { i++; System.out.println(i); a) det finns en nolla i vektorn, i vektorelementet a[33]?

10 Övning 4 Vektorer, sökning Registrering b) det inte finns någon nolla i vektorn? c) det finns 50 nollor i vektorn, i vektorelementen med udda index dvs. i a[1], a[3],..., a[99]? 4. Följande klass beskriver en tärning: Die /** Skapar en tärning. */ Die(); /** Kastar tärningen, returnerar antalet prickar (1-6). */ int roll(); I ett statistikexperiment vill man kasta två tärningar och undersöka hur många gånger som summan av prickarna på tärningarna blir 2, 3, 4,..., 11, 12. Experimentet beskrivs av följande klass: Experiment /** Skapar ett experiment där tärningarna d1 och d2 kastas. */ Experiment(Die d1, Die d2); /** Kastar tärningarna n gånger, räknar antalet gånger summan blev 2, 3, 4,..., 11, 12. Returnerar antalen i en vektor. */ int[] makeexperiment(int n); Implementera klassen. 5. Ola Claessons järnhandel är bygdens största leverantör av fasadsiffror. Störst är försäljningen till nybyggda områden där samtliga hus ska ha fasadsiffror. Oftast får de beställningar på formen fasadsiffror till samtliga hus på Nygatan 101 till 125, endast udda nummer. Skriv följande metod som räknar ut hur många siffror av varje sort som behövs. /** Returnerar en vektor med antal olika siffror av varje sort som behövs för nummer mellan start och stop där intervallet mellan numren är interval. */ int[] nbrdigits(int start, int stop, int interval) { Inparametrar till metoden är tre positiva heltal: första nummer, sista nummer och intervallet. Exempel: Följande vektor returneras vid anropet nbrdigits(101, 125, 2): [0][1][2][3][4][5][6][7][8][9] 5 21 3 3 0 3 0 2 0 2

Övning 4 Vektorer, sökning 11 Vektorer 6. I handelsresandeproblemet gäller det för en handelsresande att besöka ett antal städer. Varje stad ska besökas exakt en gång. Handelsresanden vill att den totala resvägen ska bli så kort som möjligt. Att lösa detta problem exakt är tidsödande, eftersom man måste beräkna alla möjliga resvägar för att finna den kortaste vägen. Vi nöjer oss därför i denna uppgift med att hitta en approximation till den bästa lösningen genom att i varje steg besöka den stad som ligger närmast den senast besökta staden. Städerna och kartan med alla städer beskrivs av följande klasser: Town /** Skapar en stad med namnet name. */ Town(String name); /** Tar reda på stadens namn. */ String getname(); /** Tar reda på avståndet till staden t. */ double getdistanceto(town t); /** Undersöker om denna stad är besökt. */ boolean isvisited(); /** Markera att denna stad är besökt/inte besökt (b = true/false). */ void setvisited(boolean b); // Övriga metoder i klassen public class Map { private Town[] towns; // städerna /** Skapar en karta med städer. Uppgifter om städerna läses in från en fil med namnet mapfile. */ public Map(String mapfile) { // Här läses antalet städer från filen mapfile och vektorn // towns skapas. Därefter läses uppgifter om städerna, // Town-objekt skapas och läggs in i vektorn towns. // Konstruktorn är färdigskriven. /** Skriver ut namnet på de städer som besöks, i tur och ordning, när man påbörjar en resa i staden med namnet starttown. Det förutsätts att det finns en stad med det namnet. */ public void printtour(string starttown) { // Markera alla städer som obesökta. // Skriv ut startstadens namn, markera den som besökt. // Leta upp närmaste stad som inte är besökt, skriv ut // dess namn, markera den som besökt.osv. /* Tar reda på den obesökta stad som ligger närmast staden t. */ private Town getnearest(town t); Implementera metoderna printtour och getnearest i klassen Map.

12 Övning 5 String och StringBuilder, ArrayList Övning 5 String och StringBuilder, ArrayList Läs i läroboken: avsnitt 11, 12.1-12.3, 12.8 String och StringBuilder 1. Antag att metoderna equals och compareto i klassen String inte är tillgängliga. Skriv följande metod: /** Undersöker om strängarna s1 och s2 är lika långa och alla tecknen i s1 är lika med motsvarande tecken i s2. */ public static boolean equals(string s1, String s2); 2. Skriv följande metod: /** Bildar en sträng som innehåller tecknen i s i omvänd ordning. */ public String reverse(string s); Till exempel ska reverse( asdfg ) ge strängen gfdsa. Använd ett StringBuilderobjekt. ArrayList 3. Ett ArrayList-objekt cards är deklarerad och skapad enligt följande: ArrayList<Card> cards = new ArrayList<Card>; // Här läggs ett antal kort in i cards Klassen Card har följande specifikation: Card /** Konstanter för färgern: */ static final int SPADES =...; static final int HEARTS = SPADES + 1; static final int DIAMONDS = SPADES + 2; static final int CLUBS = SPADES + 3; /** Skapar ett spelkort med färgen suit (SPADES, HEARTS, DIAMONDS, CLUBS) och valören rank (1-13). */ Card(int suit, int rank); /** Tar reda på färgen. */ int getsuit(); /** Tar reda på valören. */ int getrank(); a) Skriv satser för att summera kortens valörer. b) Skriv satser som tar reda på om spader dam finns bland korten. Resultatet av sökningen ska vara att en variabel pos innehåller spader dams position i vektorn (-1 om spader dam ej finns i vektorn). c) Ett nytt kort med valören r och färgen s ska sättas in i listan. Korten i listan ska vara ordnade i stigande valör. Skriv satser som ser till att detta nya kort skapas och hamnar på sin rätta plats i listan med hänsyn till dess valör.

Övning 5 String och StringBuilder, ArrayList 13 4. I följande klasser beskrivs en telefonkatalog i vilket man kan lagra namn och telefonnummer för ett antal personer: Person /** Skapar en person med namnet name och telefonnumret phonenbr. */ Person(String name, String phonenbr); /** Tar reda på personens namn. */ String getname(); /** Tar reda på personens telefonnummer. */ String getphonenbr(); PhoneDirectory /** Skapar en tom telefonkatalog. */ PhoneDirectory(); /** Lägger in en person med namnet name och telefonnumret nbr (om personen inte redan finns i katalogen). Om personen lagts in ska true returneras, annars false. */ boolean insert(string name, String nbr); /** Tar bort personen med namnet name ur registret. */ void delete(string name); /** Tar reda på telefonnumret till personen med namnet name. Om personen inte finns i katalogen returneras null. */ String findnbr(string name); /** Returnerar en lista med namnen på de personer vars namn börjar med strängen s. */ ArrayList<String> startswith(string s); /** Returnerar en sträng som representerar telefonkatalogen. Strängen innehåller personens namn och telefonnummer med radslutstecken mellan de olika personernas uppgifter. Om telefonkatalogen är tom ska en tom sträng returneras. */ String tostring(); Implementera klassen PhoneDirectory. Ledning: Det finns fler metoder i klassen String än vad som behandlas i läroboken. (Se dokumentationen av Javas standardklasser på nätet.) I den här uppgiften behöver du använda metoden: boolean startswith(string prefix); som returnerar true om strängen startar med tecknen i prefix.

14 Övning 5 String och StringBuilder, ArrayList 5. Slumptal kan användas för att kryptera texter. Man behöver en slumptalsgenerator som kan initieras med ett slumptalsfrö så att den kan upprepa följden av slumptal. (Man måste kunna få exakt samma slumptalsföljd när man senare vill dechiffrera texten.) Klassen java.util.random är en sådan klass man använder den konstruktor som har ett slumptalsfrö som parameter. Kryptering av en text går till på följande sätt: Välj en krypteringsnyckel, ett long-tal key. Skapa slumptalsgeneratorn med key som slumptalsfrö. För varje tecken i texten: dra ett slumptal, addera det till tecknet. Vi förutsätter här att teckenkoderna för tecknen ligger i intervallet [0, 256) och att slumptalen ligger i samma intervall. För att också de krypterade tecknen ska hålla sig inom intervallet ska additionen göras cykliskt, dvs efter tecknet med koden 255 anses tecknet med koden 0 komma. Exempel (teckenkoderna har skrivits i decimal form): Tecken: A t t a c k! Teckenkod: 65 116 116 97 99 107 33 Slumptal: 4 207 6 1 12 255 8 Krypterad kod: 69 67 122 98 111 106 41 Krypterat tecken: E C z b o j ) Dekryptering av texten görs genom att man initierar slumptalsgeneratorn med samma krypteringsnyckel och subtraherar slumptalen från teckenkoderna. Skriv en metod som krypterar en text plaintext utgående från krypteringsnyckeln key. Den krypterade texten ska returneras som resultat. Metoden ska ha följande rubrik: public static String encrypt(string plaintext, long key);