Några ytterligare övningsuppgifter inför tentamen i SMD181

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)