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.

  1. Skriv klar konstruktorn
  2. Skriv klar metoden tick
  3. 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 Clock

Anm: 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!

  1. Implementera konstruktorn Stack(int n) så att den skapar en stack med plats för n tal.
  2. Skriv klar metoden push(int v) som lagrar v överst på stacken. Om stacken är full skall en felutskrift ges och inget lagras.
  3. 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!
  4. Skriv klar metoden safePush(int v) som gör som push men, vid behov, utökar stacken med en faktor 2. I exemplet innebär det att stacken vid det nionde anropet av safePush 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


Tillbaka

Valid CSS!