Lektion: Tentamen 2012-03-14
Moment: | Öva på en tentamensuppgifter. |
Denna lektion består av programmeringsuppgifterna på tentamensskrivningen som gavs 2012-03-14. Texten är något modifierad för att passa som datorlektion. Titta gärna på originaltentan.
Uppgift 2
Öppna den givna klassenCircle
i ett eget fönster eller i DrJava
Deluppgifter
- Man kan rikta viss kritik mot den ena av de två konstruktorerna liksom mot en av metoderna? Vilka och vad är kritiken?
-
Skriv en metod
copy()
som returnerar en kopia av det egna objektet. -
Skriv metoden
collide(Circle c)
som returnerartrue
om det egna objektet kolliderar med cirkelnc
, annarsfalse
. Två cirklar anses kollidera om avståndet mellan deras centrumpunkter är mindre än summan av deras radier. -
(Extrauppgift - var inte med på skrivningen) Hur skall man testa att
copy
-metoden fungerar? Kompletteramain
-metoden så att ävencopy
-metoden testas!
Uppgift 3
I denna uppgift hanterar vi "en värld med cirklar" dvs objekt av typen Circle
från föregående uppgift.
Öppna kodskelettet till klassen CircleWorld
i ett eget fönster
eller i DrJava
En testkörning av programmet kan tänkas produceras följande output:
> run CircleWorld Circle< 0,46 0,37 0,41> Circle< 0,38 0,74 0,26> Circle< 0,97 0,57 0,26> Circle< 0,93 0,66 0,27> Circle< 0,73 0,82 0,50> Circle< 0,02 0,21 0,36> Collisions: 9 Too many circles
Deluppgifter
- Skriv klar konstruktorn CircleWorld(int n) som skall skapa en värld med plats för n cirklar (men inte lägga in några).
- Skriv klar metoden add(Circle c) som lägger till en cirkel till världen. Om den inte får plats skall ett felmeddelade ges och inget inlägg göras.
- Skriv en metod som räknar ut det totala antalet cirkelkollisioner. Metoden skall alltså titta på alla möjliga par av cirklar och se om detta par kolliderar. Vid tre cirklar kan det således vara upp till tre kollisioner (cirkel 1 och 2, cirkel 1 och 3 samt cirkel 2 och 3) vid fyra kan det kan det vara upp till sex kollisioner (1 kolliderar med 2, 3, 4 och 2 kolliderar med 3, 4 och 3 kolliderar med 4).
Uppgift 4
En prioritetskö är kö där uttagsordningen i första hand styrs av elementens prioritet snarare än deras ankomstordning. Patientköer i sjukhusens akutmottagningar är exempel på sådana köer. Om förhållandena ändras (t ex om någon komplikation tillstöter) så kan prioriteten behöva ändras för redan köande objekt.
Titta på kodskelettet till klassen PriorityQueue
.
Den implementerar prioritetsköer med objekt av typen Patient
.
En körning av programmet producerar följande utskrifter:
Aktuell kö: [(a:2), (b:4), (c:1), (d:5), (e:1)] Patient ut: (d:5) Patient ut: (b:4) Aktuell kö: [(a:2), (c:1), (e:1)] Aktuell kö: [(a:2), (c:1), (e:1), (Mx X:10)] Patient ut: (Mx X:10) Patient ut: (a:2) Patient ut: (c:1) Patient ut: (e:1)
Deluppgifter
-
Skriv en klass
Patient
. Klassen skall representera en patient med namn (textsträng) och prioritet (heltal). Namnet och prioriteten skall ges som parametrar till klassens konstruktor. Förutom konstruktorn skall det finnasget
-metoder för namn och prioritet, en metod för att ge en ny prioritet samt entoString
-metod. Se körexemplet! -
Skriv klar klassen
PriorityQueue
dvs skriv konstruktorn, metodenisEmpty()
(enligt kommentarerna), metodenput
(enligt kommentar och testkörning) samt metodenget
.Metoden
get
skall leta upp patienten med högst prioritet, ta ut den ur kön och returnera den. Om det finns flera patienter som har den högsta prioriteten skall den som stått längst tid i kön tas. Om kön är tom skallnull
returneras.Observera att du kan få en del ledning genom att studera de delar av koden som är given inklusive testprogrammet.
- Testkör och jämför output!