Uppsala universitet
Institutionen för Informationsteknologi



Tentamen i Programmeringsteknik I

2005-06-13

Skrivtid

Hjälpmedel

Tentamensupplägg

Instruktioner


 
 
 
 
 
 

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

  1. skapa båten b1 med standardkonstruktorn
  2. skapa båten b2 med den överlagrade konstruktorn
  3. läsa in information till b1 med läs-metoden
  4. skriva ut b1 med skriv-metoden
  5. 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

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:

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