{ "title": "Klasser", "exercises": "true", "solutionsLink": "losninger.htm" }

 

 

Generel vejledning til løsning af opgaver
1 Vi skal i denne opgave lave en klasse Farve, der kan bruges til at repræsentere farver.
  Vi vil bruge en meget anvendt metode til at beskrive en vilkårlig farve ved at angive en lysstyrke for tre "grundfarver": rød, grøn og blå. Hvis man fører hovedet tæt hen til en almindelig computerskærm, eller et fjernsyn, vil man kunne skimte små røde, grønne og blå pletter (det kan være vanskeligt at se, men ved man at de er der, så er det nemmere!)
  Lad os se nogle eksempler:
 
Farve
Rød
Grøn
Blå
Rød
255
0
0
Grøn
0
255
0
Blå
0
0
255
Gul
255
255
0
Cyan
0
255
255
Lilla
255
0
255
Sort
0
0
0
Hvid
255
255
255
  Her er der for otte farver angivet hvad der er deres "kode" i RGB (Red-Green-Blue). For hver af de tre farver er anvendt et tal, der angiver lysstyrken. Vi har her valgt at den maksimale lysstyrke er 255, og kun vist farver der bruger enten 0 eller 255 af hver af de tre farver.
  Ved at vælge tal mellem 0 og 255 kan man opnå farver der er knap så klare:
 
Farve
Rød
Grøn
Blå
Lys blå
153
153
255
Mørk blå
102
102
153
Mørk lilla
153
0
153
Brun
153
102
51
  Man observerer, at det med denne teknik er tilstrækkeligt at huske tre tal, mellem 0 og 255, for at huske en farve.
   
  Klassen Farve skal have konstruktorer og metoder som beskrevet i det følgende:

Konstruktorer:

Lav en default-konstruktor, der sætter Farven til sort

Lav en set-konstruktor, der sætter Farven til den farve, der gives med som parameter, angivet i RGB. (det kan være bekvemt, at du laver set-metoden nedenfor, samtidig med du laver set-konstruktoren)

Lav en copy-konstruktor, der sætter Farven til at være den samme farve, som den Farve, der gives med som parameter

public String toString()

Lav en metode, der retunerer en tekststreng der beskriver Farvens RGB-repræsentation. Teksten skal være på formen:

[153, 102, 51]

hvis det f.eks. var den brune Farve fra tabellen ovenfor.
Hvis der er tale om en af farverne: rød, grøn, blå eller sort, skal der i stedet returneres en tekststreng, der er Farvens navn. F.eks. skal der returneres:

[Rød]

hvis Farven er rød.

public void set( int r, int g, int b )

Lav en set-metode, der sætter Farven til det, der er angivet med RGB-repræsentationen, der gives med som parameter.

Metoden skal sikre at instans-variablene ikke får uønskede værdier. Hvis en parameter er negativ skal værdien sættes til 0, er den større end 255 skal den sættes til 255.

[hint] Det kan være bekvemt at lave en service-metode int normalize( int ), der returnere et tal normaliseret efter ovenstående regel.

public boolean equals( Farve farve )

Lav en metode, der tager en Farve som parameter og returnerer boolsk om denne Farve, og den der er givet med som parameter, er den samme farve (dvs., har samme RGB-repræsentation).
  Lav en test-anvendelse.
   
2

Der skal i det følgende laves en klasse til objekter, der kan holde rede på et beløb i mønter. Klassen skal hedde PengeKasse. Den har fem instans-variable: tyvere, tiere, femmere, toere og enere, der indeholder en værdi der svarer til antallet af den pågældende mønttype i PengeKassen. Hvis f.eks. tyvere er 2, er der to tyvere i PengeKassen.

PengeKasse skal have en række konstruktorer og  metoder som beskrevet i det følgende:

Konstruktorer:

Lav en default-konstruktor, der sætter PengeKassen til at være tom (ingen mønter!)

Lav en copy-konstruktor, der sætter PengeKassen til at have samme indhold af mønter, som den PengeKasse, der gives med som parameter.

public String toString()

Lav en metode, der retunerer en tekststreng der beskriver indholdet af mønter i PengeKassen. Teksten skal være på formen:

[20:1][10:2][5:0][2:1][1:0]

Hvis der f.eks. er én tyver, to tiere og én toer.

public void set( int pålydende, int antal )

Lav en generel set-metode, der sætter den pågældende mønttype (angivet med parameteren pålydende) til det angivne antal mønter.

[hint] Brug en switch-sætning.

public int sum()

Lav en metode, der returnerer det samlede beløb, der er i PengeKassen

public boolean equals( PengeKasse kassen )

Lav en metode, der tager en PengeKasse som parameter og returnerer boolsk om denne PengeKasse, og den der er givet med som parameter, har samme indhold af mønter.

public int get( int pålydende )

Lav en generel get-metode der returnerer antallet af den pågældende mønttype (angivet med parameteren pålydende).

[hint] Brug en switch-sætning (som ved set-metoden).

public void add( PengeKasse kassen )

Lav en metode, der lægger mønterne fra den PengeKasse der gives med som parameter, over i denne PengeKasse. Bemærk at add fjerner mønterne fra den PengeKasse, der gives med som parameter.

public PengeKasse givTilbage( int beløb )

Lav en metode, der returnerer en PengeKasse med de mønter fra denne PengeKasse, der skal bruges, når det pågældende beløb skal tages fra PengeKassen med størst mulig mønt.
Lave en passende testanvendelse.
   
3 I denne opgave skal der laves en klasse til repræsentation af en temperatur. Klassen skal hedde Temperatur og have en datakerne bestående af en double, der indeholder temperaturen.
Der findes to udbredte temperaturskalaer: Celsius- og Fahrenheit-skalaen. Fahrenheit er udbredt i den engelsktalende del af verden, mens resten bruger Celsius. Vi vil lave vores Temperatur-objekter så de kan håndtere begge skalaer.
Sammenhængen mellem Celsius og Fahrenheit er givet ved følgende formler:
Den lineære sammenhæng kan illustreres grafisk:
Figur 1:
Fahrenheit som funktion af Celsius
Temperatur skal have en default-konstruktor og en copy-konstruktor.

Temperatur skal have følgende metoder:

set-/get-metoder til både Celsius og Fahrenheit (fire metoder i alt).
equals og compareTo (med den funktionalitet svarende til den, der er beskrevet i kapitlet).
toString med den sædvanlige funktionalitet.
Lav en passende testanvendelse.
   
4 I denne opgave skal vi lave en klasse Rektangel, til at repræsentere et rektangel i et koordinatsystem
Et rektangel kan angives vha. fire tal, der beskriver dets grænser, som det er gjort i flg. figur:
Figur 2:
Rektangel i koordinat-system

Disse fire tal vil vi bruge som datakerne i vores Rektangel-objekter og vi vil indskrænke os til kun at repræsentere dem med heltal.

Rektangel skal have en set-konstruktor og en copy-konstruktor, men ingen default-konstruktor

Rektangel skal have følgende generelle metoder:

equals
toString
og følgende specielle metoder, der retter sig mod objektets rektangel-egenskaber:
int areal()
int omkreds()
boolean indeholder( Rektangel r )
void move( int deltaX, int deltaY )
Rektangel omkrandsende( Rektangel r )
areal og omkreds returner de velkendte mål for et rektangel.
indeholder returnerer boolsk om det rektangel der er givet som parameter er indeholdt i rektanglet.
move flytter rektanglet i koordinatsystemet. Som parameter angives den relative ændring i de to retninger: x og y.
omkrandsende returner det mindste rektangel der omkranser rektanglet og det rektangel der er givet som parameter. I følgende figur er vist to vilkårlige rektangler og deres mindste omkrandsende rektangel. Man observer ud fra figuren en tydelig sammenhæng mellem grænserne for de to rektangler og det tredie omkrandsende rektangel.
Figur 3:
Mindste rektangel der omkrandser to rektangler
Lav en passende testanvendelse.

hint: Det kan være nyttigt at lave følgende service-metoder:

int min( int x, int y )
Returnerer minimum af x og y
int max( int x, int y )
Returnerer maximum af x og y
boolean indenfor( int min, int max, int tal )
Returnerer boolske om tal ligger i intervallet [min:max]