Exempelprogram

Statiska metoder Heltal Komplexa tal Ãvriga exempel

Övning 1

Hemuppgifter

inga

På övningen

Övning 2

Hemuppgifter

1. Skriv ett program som utför beräkning av fakultet för heltal. Nedan följer ett exempel på hur programmet skulle kunna fungera.

~/> java factorial 5
120
~/> java factorial 1
1

2. Skriv ett program som avgör om ett tal är ett primtal (delbart endast med ett och sig själv).

På övningen

Övning 3

Hemuppgifter

3 Komplettera klassen Complex från förra övningen med en metod för konjugering (negering av den imaginära delen av talet). Föreslå lämpliga testdata.

4 Utvidga klasserna för heltal och komplexa tal från tidigare uppgifter, så att det är möjligt att utföra addition mellan de olika typerna. Föreslå testdata, samt rita ett klassdiagram

På övningen

Övning 4

Hemuppgifter

5 Vid en fabrik finns ett antal maskiner som används för att sätta sam- man detaljer till färdiga produkter. Detaljerna kommer från ett antal olika leverantörer. En produkt består av ett stort antal detaljer och kräver därför behandling av flera maskiner. Varje maskin har en viss kapacitet. Rita en modell som kan beskriva verksamheten

6 Du får välja mellan en av dessa grafikövningar a och b, du behöver inte göra båda!

  1. Modifiera Star-programmet från övning3 så att färgen slumpas ut för nya stjärnor. Det är bara den nya stjärnan som skapas då användaren trycker på knappen som ska få en ny färg, de som redan har ritats ut ska behålla sin färg.

    frivillig extrauppgift (ger ej extra bonus): Utöka programmet så att det blir roligare. Lägg exempelvis till en ny knapp som gör att man kan lägga till andra figurer än stjärnor.

    Du behöver ladda ner filerna Star.java, StarModel.java, StarView.java, StarController.java och StarFrame.java från exempelsidan för att kunna göra uppgiften. Håll även reda på vilka rader du har ändrat på så att du är redo att förklara hur du gjorde när du redovisar.

  2. Implementera ett grafiskt gränssnitt till fakultetsprogrammet (se övning 1) eller primtalsprogrammet (se övning 4). Användaren ska kunna mata in en siffra och få ett resultat på skärmen. Programmet får inte hänga sig om användaren matar in en ogiltig sträng.

På övningen

Exempelprogram: FileAndScanner RegularExpressionTestbed Grep

Övning 5

Hemuppgifter

7 Skriv ett program som går igenom en Java-programfil och extraherar gränssnittet hos den yttersta klassen. Du behöver inte ta hänsyn till inre klasser och märkliga strängar, men du får förstås. Du får göra vissa antaganden om hur indata ser ut (exempelvis med avseende på radbrytningar). Skriv en kommentar i din kod eller bifoga en kommentar i ditt mail, där det framgår vilka antaganden du har gjort.

Programmet ska läsa in en fil med javakod och generera ett UML-liknande resultat, antingen genom utskrift på skärmen eller genom att skriva till en ny fil. Om grogrammet exempelvis körs med Complex.java som indata ska ett resultat liknande nedanstående genereras (+,-,# indikerar public, private respektive protected):

+ Complex
----------
- int re
- int re
----------
+ Complex(re:int, im:int)
+ add():Complex
+ sub():Complex
+ mul():Complex
+ div():Complex
+ toString():String
+ main()

Programmet behöver som sagt inte hantera all indata perfekt. Däremot får programmet inte krasha! Det är alltså nödvändigt att implementera felhantering.

8 MPEG Layer 3 är ett format för att lagra ljud, detta format sparas ofta i filer medändelsen "mp3". mp3-filer används i många sammanhang för att lagra musik. I många mp3-filer lagras även tillhörande information om artist, låtnamn o.s.v. Det finns en standard som heter ID3 2 som går ut på att de sista 128 byten i en mp3-fil innehåller denna typ av information. Nedan följer en tabell som beskriver vad de 128 byten innehåller.
fält längd offset innehåll
tag 3 0 Detta fält innehåller alltid "TAG".
titel 30 3 Låtens titel.
artist 30 33 Artistens namn.
album 30 63 Namn på skivan från vilken låten kom.
år 4 93 Produktions år.
kommentar 30 97 En kommentar utan bestämt innehåll.
genre 1 127 Musikgenre.
Skriv ett program som listar denna typ av information för en mp3-fil. För att slippa läsa hela mp3-filen är det lämpligt att använda sig av en Randomaccessfile. Nedan följer ett exempel på hur programmet skulle kunna fungera.

~/> java ID3 track02.mp3
Title: Soak Up The Sun
Artist: Sheryl Crow
Album: C'mon, C'mon
Year: 2002
I katalogen /info/suoop08, oop09/Exempel/mp3/ finns några mp3- filer som kan användas för att testa att programmet fungerar. För den intresserade finnsäven en lista över genrer

9 Läs på om rekursion och trädtraversering. Rita upp ett exempelträd på åtminstone sju olika noder när du löser uppgiften nedan.

Uppgift: Här följer tre rekursiva metoder för att skriva ut alla noder i ett träd. Vad blir det för skillnad?



På övningen

Antag att det finns objekt som lagrar 0 - 1000 element (av någon sort). Dessa objekt innehåller metoder för att sortera de lagrade objekten och för att ta en lista av objekt av samma sort och generera en lista av objekt som representerar en enda sorterad följd. Skriv en klass som realiserar denna idé

Skriv en metod som, utan att sortera, undersöker om en lista är sorterad (oberoende av sorteringsordning).

Övning 6

Hemuppgifter

10 Som statistiskt mått på en mängd tal används ibland typvärdet, d.v.s. det värde somär mest frekvent (oftast förekommande). Skriv en pro- cedur som beräknar typvärdet för data i en array med heltal. Om flera värden är lika vanliga skall proceduren ge det minsta av dem

11 . Skriv en metod för att en lista med positiva och negativa tal ordnas så att de negativa talen kommer först och sedan de positiva. Negativa respektive positiva tal behöver inte vara sorterade, du behöver endast samla alla negativa tal för sig. Använd inte en extra array, problemet kan lösas ändå. kan lösas ändå. Indata ska vara en array med tal (exempelvis heltal men det spelar ingen roll). Din metod ska göra så att de negativa talen kommer före de positiva. Metoden ska gå i linjär tid, det är alltså inte meningen att arrayen ska sorteras!

12 Olle sitter och rättar ett tentatal. Tentatalet går ut på att man ska skriva en grammatik för meddelande av följande typ:

Båt 42, båt 666, båt 4711 och båt 17 ska in!
Båt 1 och båt 2 ska in!
Båt 13 ska in!

Vilken eller vilka av följande alternativ kan producera dessa meddelanden? Motivera varför de övriga inte kan producera dem (ange exempel på meddelanden som inte kan produceras).

En del av alternativen kan producera oönskade meningar, man vill t.ex. inte ha

Båt 1 och båt 2, båt 3 och båt 4 ska in!

Vilken eller vilka av alternativen kan producera oönskade meningar? Ge exempel.


<meddelande> ::= Båt <tal><svans> | <meddelande> båt <tal><svans>
<svans> ::= och | ska in! | ,
<tal> ::= 1 | 2 | 3 | ...

<meddelande> ::= Båt <tal> ska in! | Båt <tal> <svans>
<svans> ::= och båt <tal> ska in! | , båt <tal> <svans>
<tal> ::= 1 | 2 | 3 |...

<meddelande> ::= Båt <tal><svans>
<svans> ::= ska in! | , båt <tal> | och båt <tal>
<tal> ::= <svans> | 1 | 2 | 3 |...

<meddelande> ::= Båt <tal><svans> | båt<tal><svans>
<svans> ::= ska in! | , | och
<tal> ::= 1 | 2 | 3 | ...

På övningen

sortering

Övning 7

Hemuppgifter

Implementera en tolk till språket Brainf**k. Detaljer om hur språket fungerar finns på Kattis samt på wikipedia .

På övningen