Lektion 13: Tentamen 2012-06-04
Moment: | Öva på tentamensuppgifter |
Denna lektion består av tentamensskrivningen (exklusive uppgift 1) som gavs 2012-06-04. Text och layout är lite förändrad för att passa som en datorlektion. Se originalskrivningen för exakta formuleringar, förklarande figurer och poäng.
Uppgift 2: Klassen Clock
Klassen Clock representerar en klocktid i timmar, minuter och sekunder.
Konstruktorn sätter initialvärden på tiden.
Metoden tick()
ökar klockslaget med en sekund.
Metoden skall också hantera minut- och timgränser så att minut- och sekundvärdena
alltid ligger mellan 0 och 59. Se körexemplet!
main
-metoden testar klassen genom
att stega fram ett antal gånger och hämtar och skriver klockslagen vid lite olika tidpunkter.
- Skriv klar konstruktorn
- Skriv klar metoden
tick
- Vilka värden har instansvariablerna efter det sista, felaktiga, konstruktoranropet?
Output:
0:59:58 0:59:59 1:00:00 1:00:01 1:00:02 1:00:10 1:00:23 1:00:36 1:00:49 1:01:02 1:01:15 1:01:28 1:01:37 Illegal initial values for ClockAnm: Det är inte nödvändigt att förstå hur
format
-metoden fungerar. Den hämtar tim-, minut- och
sekundvärden med hjälp av get
-metoderna och skriver sedan ut dessa värden (med inledande
nolla vid behov)
Uppgift 3
En stack är en mekanism för att lagra och hämta poster på så sätt att den senast lagrade, ännu ej uttagna, posten är den som står på tur att tas ut. Det är alltså en slags kö där den som kommit sist får lämna först. Man kan lika det vid en trave där man alltid både lägger och hämtar överst. (Ett annat namn är LIFO som står för "Last In, First Out". En vanlig kö kallas med andra ord en "FIFO"" --- First In, First Out.)
Kopiera klassen Stack
som ofullständigt implementerar en stack med hjälp av en array.
För enkelhetens skull lagrar denna stack heltal -- i verkligheten har man vanligen andra datatyper.
I koden finns också en main
-metod och angiven output.
Se originalskrivningen för en detaljerad beskrivning!
-
Implementera konstruktorn
Stack(int n)
så att den skapar en stack med plats förn
tal. -
Skriv klar metoden
push(int v)
som lagrarv
överst på stacken. Om stacken är full skall en felutskrift ges och inget lagras. -
Skriv klar metoden
pop()
som tar bort det översta värdet från stacken och returnerar det ("tar bort" betyder att värdet inte skall returneras igen - det går ju inte att fysiskt ta bort array-elemenetet). Ge felutskrift om operationen inte går att utföra! -
Skriv klar metoden
safePush(int v)
som gör sompush
men, vid behov, utökar stacken med en faktor 2. I exemplet innebär det att stacken vid det nionde anropet avsafePush
utökas till 16 platser. Det som redan finns lagrat skall givetvis finnas med i den utökade stacken.
Uppgift 4
En köteoretiker som är lite osäker på teorin vill experimentera med hjälp av tidsstegad datorsimulering. Vid varje tidsteg är sannolikheten a (0 < a < 1) att det anländer ett objekt till kön. Oberoende av detta försöker man vid varje tidssteg med sannolikheten b (0 < b < 1) ta ut en ett objekt ur kön. (Om kön är tom går det naturligtvis inte ta ut något.) Teoretikern vill veta hur många objekt som kommit ut ur kön och hur lång tid de i genomsnittligt tillbringat i kön. Klassen Queue.java representerar en kö med objekt av typen Qelem}.Dokumentationen saknas dock varför man bör läsa koden för att förstå vad den gör.
Skriv en klass Simulation
med en main
-metod.
Metoden skall läsa in två sannolikheter a och b, skapa ett Queue
-objekt och genomföra
simuleringen i 500 tidssteg. Vid vart hundrade tidssteg skall programmet skriva hur många objekt som
tagits ut samt hur lång tid dessa i genomsnitt har tillbringat i kön.
Körexempel:
Ankomstsannolikhet: 0.5 Uttagssannolikhet : 0.5 Tidssteg: 100 Antal element ut: 49 Genomsnittstid : 3.3061225 Tidssteg: 200 Antal element ut: 88 Genomsnittstid : 11.261364 Tidssteg: 300 Antal element ut: 142 Genomsnittstid : 14.697183 Tidssteg: 400 Antal element ut: 188 Genomsnittstid : 20.122341 Tidssteg: 500 Antal element ut: 234 Genomsnittstid : 25.41453