Luleå tekniska universitet Institutionen för systemteknik Håkan Jonsson, Tomas Johansson 2007-03-05 Några ytterligare övningsuppgifter inför tentamen i SMD181 1. Merge Samsortering (Engelska: merge) är något som används i många datorprogram och går ut på att man gör en lång sorterad array av elementen i två kortare sorterade arrayer. Den långa ska alltså innehålla alla de element som de korta innehåller och vara sorterad. En metod för att samsortera är att först skapa den långa arrayen och sen fylla den med allt större element i en loop. I varje loopvarv identifierar man det minsta elementet som finns i någon av de korta arrayerna, tar bort det från arrayen, och stoppar istället in det i den långa. Loopen håller på till de två korta arrayerna är tömda. Skriv en metod som samsorterar två arrayer med Comparable:s enligt beskrivningen ovan1. Metoden ska alltså returnera en ny array som är samsorteringen av två andra (redan sorterade). 2. concat Ibland vill man slå ihop två sekvenser A={a1,a2,...,an} och B={b1,b2,...,bm} så att man får en sekvens C={a1,a2,...,an,b1,b2,...,bm}. Antag att arrayer används för att representera sekvenser. Skriv en metod som slår ihop två sekvenser enligt ovan. 3. Dubbletter En dubblett är ett objekt i en array som förekommer mer än en gång. Med ”förekommer mer än en gång” menas att det finns två arrayelement som innehåller referenser till två objekt p och q sådana att p.equals(q) är sant. Skriv en metod som avgör om en given array innehåller (minst) en dubblett. 4. Magiska kvadrater En magisk kvadrat är en kvadrat med heltal där summan av siffrorna i varje rad, kolumn, och diagonal är konstant. Ett exampel på en magisk kvadrat är (vänd) 1 Gränssnittet Comparable finns beskrivet både i kursboken och i Java’s standard API. 1 (2) Luleå tekniska universitet Institutionen för systemteknik Håkan Jonsson, Tomas Johansson 2007-03-05 276 951 438 Denna magiska kvadrat har sidan 3 och summan 15. (Andra sidlängder och summor kan också förekomma.) Skriv en metod som tar in en tvådimensionell array med heltal, och returnerar true eller false beroende på om indatat är en magisk kvadrat eller inte. För enkelhetens skull är det inte nödvändigt att kontrollera summan av de två diagonalerna. Du får anta att arrayen du får som indata alltid är kvadratisk (dvs detta behöver du inte kontrollera). 5. Förekomster Skriv en metod som tar in två textsträngar, en text och en nyckel, och avgör om nyckeln förekommer någon gång i texten. Du får använda dig av metoden char charAt(index i) som ingår i javas String-klass som returnerar ett tecken på en given position i en sträng, men du får inte använda dig av några andra metoder i String-klassen. Du får anta att nyckeln aldrig är längre än själva texten man ska söka i. 6. Primtal Ett primtal är ett tal som endast är jämnt delbart med sig själv och 1. Till exempel är 13 ett primtal men inte 15, eftersom 15 är jämnt delbart med både 3 och 5. 1 anses inte vara ett primtal. Skriv en metod som tar in ett heltal och avgör om det är ett primtal eller ej. Du får anta att indatat alltid är positivt. 2 (2)