Till KTH:s startsida Till KTH:s startsida

Övning5

Hemuppgifter

  1. 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 im
    ----------
    + 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. 

  2. 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  Detta fält innehåller alltid "TAG".
    titel  30  Låtens titel.
    artist  30  33  Artistens namn.
    album  30  63  Namn på skivan från vilken låten kom.
    år  93  Produktions år.
    kommentar  30  97  En kommentar utan bestämt innehåll.
    genre  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/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.

  3.  Läs på om rekursion och trädtraversering (här pratar vi om datastrukturen träd). 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? 

      • Skriv ut nodens innehåll
      • Om det finns ett vänsterbarn, skriv ut vänsterträdet
      • Om det finns ett högerbarn, skriv ut högerträdet
      • ... men om noden är tom (null) gör jag ingenting.

      • Om det finns ett vänsterbarn, skriv ut vänsterträdet
      • Skriv ut nodens innehåll 
      • Om det finns ett högerbarn, skriv ut högerträdet
      • ... men om noden är tom (null) gör jag ingenting.

      • Om det finns ett vänsterbarn, skriv ut vänsterträdet
      • Om det finns ett högerbarn, skriv ut högerträdet
      • Skriv ut nodens innehåll
      • ... men om noden är tom (null) gör jag ingenting.

Uppgifter på övningen

  1. 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 elementen 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é.

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