Uppsala universitet
Institutionen för Informationsteknologi
Tentamen i Programmeringsteknik I
2005-06-13
Skrivtid
Hjälpmedel
- Javabok och utdelad stencil om Skanholms extrapaket.
- Litteraturen får inte innehålla överdrivet mycket anteckningar.
- Penna, radergummi, linjal.
Tentamensupplägg
- Tentamen är uppdelad i två delar. Del 1 består av 4 uppgifter och del 2 av 2 uppgifter. Del 1 kan maximalt ge 25 poäng och del 2 kan ge 15 poäng.
- För att bli godkänd (betyg 3 eller G) krävs minst 18 poäng på del 1. Eventuella poäng på del 2 tillgodoräknas e.
- För att få betyg 4 krävs dels minst 18 poäng på del 1, dels minst sammanlagt 25 poäng.
- För att få betyg 5 krävs dels minst 18 poäng på del 1, dels minst sammanlagt 32 poäng.
- För att få betyg VG krävs dels minst 18 poäng på del 1, dels minst sammanlagt 28 poäng.
Instruktioner
- Skriv varje uppgift på nytt papper. Skriv inte på baksidan av papperet. Lägg uppgifterna i rätt ordning. Skriv namn på alla papper. Skriv uppgiftens nummer i övre högra hörnet. Använd inte penna med röd färg.
- Läs uppgiften noga så du vet precis vad som skall göras. Gör inte mer än det som efterfrågas.
- Ange vilka antaganden du gör och motivera dessa. Förklara gärna med exempel.
- Även ofullständiga lösningar och/eller lösningsskisser kan ge poäng om de visar att du tänkt rätt.
- Programmen skall gå att förstå, vara skrivna med vettig layout och vara kommenterade.
- Om inget annat anges skall programmen skrivas i Java. Tänk på att i Javaprogrammet tydliggöra vilka måsvingar som matchar varandra.
- Ej nödvändigt att skriva importsatser i Javaprogrammen om det ej explicit krävs.
Del 1
Uppgift 1 (6 p)
Skriv en klass Segelbat som har instansvariablerna namn som är en sträng och segelyta som är ett flyttal.
Klassen skall ha två konstruktorer, en parameterlös standardkonstruktor och en överlagrad som ger värde åt instansvariablerna.
Skriv en metod läs som ger ledtexter och läser in värden till instansvariablerna, och en metod skriv som skriver ut information om båten. Skriv också metoden toString.
Skriv slutligen metoden main som skall
- skapa båten b1 med standardkonstruktorn
- skapa båten b2 med den överlagrade konstruktorn
- läsa in information till b1 med läs-metoden
- skriva ut b1 med skriv-metoden
- skriva ut b2 på enklaste sätt utan att använda skriv-metoden
En körning skall se ut som följer:
>java Segelbat
Beskriv båten
Namn: Aurora
Segelyta: 24.5
Namn: Aurora
Segelyta: 24.5
Namn: Constantia
Segelyta: 16.2
Uppgift 2 (6 p)
En bonde vill sätta upp ett staket på en åker. Staketet bestäms av ett antal
staketstolpar som placeras ut med olika mellanrum. Bonden känner till positionen i (x,y) för varje stolpe. Han vill sedan beräkna hur långt staketet blir. Vi antar då att staketet går rakt mellan varje stolpe. Den sista stolpen förbinds med den första för att få ett slutet staket.
För att kunna beräkna detta skapar bonden, som vi exempelvis kan döpa till Per Olsson, följande Java-klass:
public class Staket {
private double [] x; // x-position för varje stolpe i ordning
private double [] y; // y-position -''-
public Staket() {...} // konstruktor som sätter upp på något sätt
public double längd(){ // beräkna staketets längd
...
}
}
Din uppgift är att skriva metoden längd som beräknar staketets längd. Du antar då att arrayerna x och y är fyllda med värden. Kom ihåg att sista och första stolpen ska förbindas också!
Tips: Kanske Pythagoras har något med detta att göra.
Uppgift 3 (6 p)
Om vi har en grupp som består av 2 st personer så är sannolikheten att dessa personer fyller år på samma dag
365 364
p(2) = 1 - --- x ---
365 365
Om vi har en grupp som består av 3 st personer så är sannolikheten att två av dessa personer fyller år på samma dag
365 364 363
p(3) = 1 - --- x --- x ---
365 365 365
En generalisering till n personer ger oss sannolikheten att två personer
i grupp av n personer fyller år på samma dag:
365 364 363 365-(n-1)
p(n) = 1 - --- x --- x --- x ... x ---------
365 365 365 365
Antag nu att vi har en klass som innehåller en mängd metoder för olika
statistiska beräkningar, bl. a. en metod som räknar ut p(n) enligt ovan.
import extra.*;
public class Statistics {
public double p(int n) {
// kod enligt definitionen ovan
}
// andra metoder
}
Din uppgift är att
- Skriva metoden p i klassen ovan.
- Skriva en main-metod i klassen ovan eller i en separat klass som
undersöker och skriver ut hur stort n måste vara för att sannolikheten ska bli större
än 0.5. Du ska utnyttja metoden p som du skrev ovan.
Uppgift 4 (7 p)
I Sverige använder vi ofta 24-timmarstid, från 00 00 till 23 59. I andra länder är det vanligt med AM/PM-tid. AM är före middag och PM efter middag. Timmen varierar mellan 1 och 12 (aldrig 0). Följande gäller för konvertering från 24-timmarstid till AM/PM-tid:
Converting from 24 hour clock to AM/PM:
|
between 0000 and 0059, add 12 hours:
0059 --> 12:59 AM
between 0100 and 1159, straight conversion to AM:
0100 --> 1:00 AM
between 1200 and 1259, straight conversion to PM:
1259 --> 12:59 PM
between 1300 and 2359, subtract 12 hours:
1559 --> 3:59 PM
|
Komplettera programmet nedan så att en testkörning ger resultatet som finns i kommentaren.
Konverteringen skall ske med hjälp av en metod i klassen Tid243
, som heter toAMPM. Metoden skall inte ha några parametrar (argument) och skall returnera motsvarande TidAMPM
-objekt. Skriv alltså koden till main och toString (i TidAMPM) samt metoden som konverterar.
public class AMPM {
public static void main(String[] args) {
...
}
}
class TidAMPM {
int tim, min;
boolean am;
public String toString() {
...
}
}
class Tid24 {
int tim, min;
public Tid24(int t, int m) {
tim = t;
min = m;
}
public TidAMPM toAMPM() {
...
}
}
/*
12:00 AM
8:34 AM
12:00 PM
11:59 PM
*/
Del 2
Uppgift 5 (8 p)
Det finns en färdig klass Bil, (som du inte behöver skriva), vars deklaration börjar:
public class Bil {
private String nummer;
private double längd;
public Bil() ...
public Bil(String nr, double lgd) ...
public String getNr() ...
public double getLgd() ...
}
dvs instansvariabler är nummer som är ett bilnummer enligt svensk standard, (3 bokstäver, 3 siffror), och en längd i meter, längd.
Du skall nu skriva en klass Bilko, som hanterar en bilkö (till en bilprovning). Den skall som instansvariabler ha: en array av bilar, en maxlängd som anger maximala sammanlagda längden av de bilar som kan stå i kön, samt en char-variabel som är en siffra. Bilar med denna slutsiffra har företräde i kön. Dessutom behöver bilkö-objektet hålla reda på antal bilar som står i kön, samt deras sammanlagda längd.
Följande metoder skall skrivas:
- En konstruktor som skall ha ett antal, en maxlängd och en siffra som parametrar. Den skall skapa ett bilkö-objekt enligt specifikationen. En array med plats för rätt antal bilar skall skapas, men inga bilar skall läggas in.
- En metod som lägger till en ny bil (som är parameter) till kön. Metoden skall returnera platsnumret för denna bil, eller -1 om den inte kunde läggas till. En bil kan läggas till om det både finns plats kvar i arrayen och bilarnas maxlängd inte överskrids. Om den nya bilens slutsiffra inte är den prioriterade skall den ställas sist i kön, om den däremot har rätt slutsiffra, skall den ställas före bilar med annan slutsiffra, men efter de med samma slutsiffra. Bilarna som gås förbi skall flyttas bakåt i kön.
- En metod för att skriva ut kön på skärmen. Bilarnas nummer och deras avstånd i meter från början av kön skall skrivas ut, en bil per rad.
Uppgift 6 (7 p)
Naturföreningen Glada Räven vill simulera hur populationerna av harar och rävar varierar beroende på ett antal parametrar. Djuren lever på en ö. Vi låter ön vara en kvadrat med t.ex. 100 * 100
rutor. Rävarna kan förstås äta hararna. Vi antar att ön är gräsbevuxen så hararna äter hela tiden,
och de känner ingen hunger och kan inte dö av svält, till skillnad från rävarna. Båda djurarterna
åldras, och båda kan få ungar, mellan tre och fem stycken. Hararna och rävarna kan få syn på
varandra och det påverkar hur de rör sig.
Simuleringen sker med tidssteg, där händelser inträffar med viss sannolikhet. Sannolikheten
kan bero på djurens tillstånd. Ett sätt att hantera sannolikheterna är att ha en klass Slump och ett
slumpobjekt. Slumpobjektet kan svara på många olika frågor och ge olika typer av svar.
Gör en objektorienterad analys av problemet och föreslå vilka klasser vi skall ha och vilka instansvariabler och metoder som hör till klasserna.
Lycka till!
Mats och Olle
Last modified: Fri Jun 10 14:04:01 MEST 2005