30.07.2013 Views

Grundlæggende Programmering IT-C, Forår 2001 Løbeseddel 4

Grundlæggende Programmering IT-C, Forår 2001 Løbeseddel 4

Grundlæggende Programmering IT-C, Forår 2001 Løbeseddel 4

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Grundlæggende</strong> <strong>Programmering</strong> <strong>IT</strong>-C, <strong>Forår</strong> <strong>2001</strong><br />

Forelæsninger i uge 8: 19/2 – 23/2<br />

<strong>Løbeseddel</strong> 4<br />

<strong>2001</strong>-02-19<br />

Ved forelæsningerne omtaler vi flervejsvalg med ordren switch. Vi fortsætter gennemgangen af tabeller og viser<br />

hvorledes man kan lave fler-dimensionale tabeller. Vi opbygger f.eks. en fler-dimensional tabel til pladsregistrering i<br />

en biograf.<br />

Vi præsenterer klasser og objekter, som er centrale elementer i Java. En klasse repræsenterer et begreb (f.eks.<br />

begrebet tidspunkt eller terning). Et objekt er en instans af en klasse og repræsenterer en ‘ting’ (f.eks. et bestemt<br />

tidspunkt eller en bestemt terning).<br />

Således kan Java-programmer beskrive ting fra den virkelige verden: tidspunkter, terninger, personer, biler, køer,<br />

træer, bevoksninger, osv.<br />

Øvelser i uge 9: 26/2 – 2/3<br />

Løsninger til opgaverne Java34, Java36, Java37 og Java40 skal afleveres (senest) onsdag den 28/2 i din instruktors<br />

dueslag i receptionen på <strong>IT</strong>-højskolen).<br />

Opgave Java33 — switch<br />

(1) Hvad udskriver nedenstående program? Find ud af det uden at indtaste og køre programmet, blot ved at læse det<br />

og tænke over det.<br />

public class Java33 {<br />

public static void main(String[] args) {<br />

switch (324) {<br />

case 23: case -2: case 24:<br />

System.out.println("B");<br />

case 323: case 324: case 325:<br />

System.out.println("D");<br />

case 34:<br />

System.out.println("E");<br />

default:<br />

System.out.println("F");<br />

break;<br />

case 7:<br />

System.out.println("G");<br />

}<br />

}<br />

}<br />

(2) Ret programmet således at der kun udskrives D på skærmen.<br />

Opgave Java34 — histogram med 3 terninger<br />

Med udgangspunkt i opgave Java30 (eller Java29 hvis du ikke har lavet Java30), skal du lave et program der kaster<br />

med tre terninger i stedet for kun en terning. Antal øjne er nu summen af de tre terningekast. Derudover skal vi bruge<br />

klassen Terning fra forelæsning 4; den kan hentes på kursets hjemmeside i filen Terning.java. I programmet<br />

Histogram2.java fra hjemmesiden kan du se hvorledes klassen Terning benyttes til at opbygge en frekvenstabel.<br />

Med tre terninger kan vi få følgende antal øjne: 3, 5, ¡ ¢ , 17, 18. Du skal altså erklære tabellen freq til at være en<br />

tabel der har indeks op til og med 18. Derudover skal du rette programmet således at der nu udskrives 15 linier med<br />

stjerner i stedet for kun 6 linier.<br />

Det er op til dig, om du vil kaste med tre forskellige terninger, (dvs. benytte tre Terning-objekter), eller om du vil<br />

kaste den samme terning tre gange, (dvs. kun benytte et Terning-objekt).<br />

Idet vi lægger terningekastene sammen får vi en fordeling der vil ligne dette:<br />

1


<strong>Grundlæggende</strong> <strong>Programmering</strong> <strong>IT</strong>-C, <strong>Forår</strong> <strong>2001</strong><br />

# java Java34 10000<br />

Antal 3ere: **<br />

Antal 4ere: ********<br />

Antal 5ere: *************<br />

Antal 6ere: *************************<br />

Antal 7ere: ***********************************<br />

Antal 8ere: **************************************************<br />

Antal 9ere: **********************************************************<br />

Antal 10ere: **********************************************************************<br />

Antal 11ere: ****************************************************************<br />

Antal 12ere: *************************************************************<br />

Antal 13ere: ****************************************************<br />

Antal 14ere: ************************************<br />

Antal 15ere: ***********************<br />

Antal 16ere: **************<br />

Antal 17ere: *******<br />

Antal 18ere: **<br />

Opgave Java35 — udvidelse af klassen Terning<br />

Du skal nu udvide klassen Terning fra forelæsning 4 med følgende to metoder:<br />

public int antal_kast(), som returnerer det samlede antal gange denne terning har været kastet. Til<br />

£<br />

dette skal du bruge et felt, f.eks. antal_kast, som du tæller op hver gang terningen kastes. Bemærk, at<br />

terningen kastes når metoden kast kaldes.<br />

public String toString(), som returnerer en tegnstreng der indeholder (1) det samlede antal gange<br />

£<br />

terningen har været kastet, (2) det antal øjne som terningen viser nu og (3) det antal sider som terningen har.<br />

Du kan afprøve din reviderede klasse med følgende program. Det antages, at klassen stadig hedder Terning:<br />

public class Java35 {<br />

public static void main(String[] args) {<br />

Terning t = new Terning();<br />

}<br />

}<br />

System.out.println("Terningen er oprettet og dermed kastet én gang");<br />

System.out.println(t);<br />

t.kast();<br />

System.out.println("Efter, at terningen har været kastet igen");<br />

System.out.println(t);<br />

Uddata fra programmet:<br />

# java Java35<br />

Terningen er oprettet og dermed kastet en gang<br />

Denne terning har været kastet 1 gang(e).<br />

Terningen viser nu 4 øjne.<br />

Terningen har i alt 6 sider<br />

Efter, at terningen har været kastet igen<br />

Denne terning har været kastet 2 gang(e).<br />

Terningen viser nu 6 øjne.<br />

Terningen har i alt 6 sider<br />

#<br />

2


<strong>Grundlæggende</strong> <strong>Programmering</strong> <strong>IT</strong>-C, <strong>Forår</strong> <strong>2001</strong><br />

Opgave Java36 — en klasse til at repræsentere datoer<br />

Lav en klasse Dato af objekter som kan lagre datoer. Klassen skal have en enkelt konstruktor Dato, der tager tre<br />

heltalsargumenter: år (alle fire cifre), måned og dag.<br />

Hvilke felter skal et Dato-objekt have?<br />

Lav følgende metoder i klassen Dato:<br />

£ Metoden public String iso() skal returnere en tegnstreng med datoen i ISO-format (f.eks. 1934-9-30).<br />

Metoden public String tal() skal returnere en tegnstreng med datoen i det sædvanlige danske talformat<br />

£<br />

(f.eks. 30/9 1934).<br />

Metoden public String ord() skal returnere en tegnstreng, hvor månedens navn bruges i stedet for dens<br />

£<br />

nummer (f.eks. 30. september 1934). Du kan enten benytte en switch-ordre, eller flere if-ordrer, eller en<br />

tabel af tegnstrenge til at finde månedens navn givet dens nummer.<br />

Lav en main-metode med følgende indhold for at prøve din Dato-klasse:<br />

Dato d1 = new Dato(<strong>2001</strong>, 1, 17);<br />

Dato d2 = new Dato(<strong>2001</strong>, 6, 11);<br />

Dato d3 = d1;<br />

System.out.println("d1 er " + d1.ord() + " og d3 er " + d3.tal());<br />

Tegn datamatens lager som det ser ud lige inden print-ordren. Gem din Dato-klasse; den skal bruges i senere<br />

opgaver.<br />

Opgave Java37 — kopiering og ændring af datoer<br />

Udvid Dato-klassen fra opgave Java36 med følgende:<br />

Konstruktoren Dato(Dato d) som konstruerer en kopi af den givne dato, dvs. et nyt Dato-objekt som har<br />

£<br />

samme årstal, samme måned, og samme dag som Dato-objektet d.<br />

£ Metoden public void flyt(int n) som lægger n til årstallet i det givne Dato-objekt.<br />

Skriv en klasse med en main-metode der opretter et Dato-objekt d1, laver en kopi d2 af det, kalder d1.flyt(5) og<br />

derefter skriver både d1 og d2 ud. Tegn objekterne d1 og d2 i datamatens lager både før og efter kaldet d1.flyt(5).<br />

Opgave Java38 — mere om datoer<br />

Fortsættelse af opgave Java36 og Java37.<br />

Udvid Dato-klassen med nogle flere metoder:<br />

Lav en metode public String maaned() der returnerer månedens navn for datoen. Brug en switch-<br />

£<br />

ordre. Anvend den nye metode i metoden public String ord(), som returnerer datoen i dansk skriftligt<br />

format (f.eks. 30. september 1934).<br />

Lav en metode public int måned_længde(), der returnerer antal dage i måneden for den givne dato,<br />

£<br />

hvor der tages hensyn til skudår. Du skal benytte metoden monthlen fra eksempelprogrammet Days5.java<br />

fra forelæsning nummer 4. Vink: Da du benytter metoden monthlen skal du kun udføre et enkelt metodekald<br />

i metoden måned_længde.<br />

Lav en metode public int dagiaaret() der beregner dagens nummer i året under hensyntagen til<br />

£<br />

skudår. Vink: Benyt metoden monthlen. Du kan hente inspiration fra eksempelprogrammet Days2.java<br />

fra forelæsning nummer 3.<br />

£<br />

£<br />

(Eventuelt:) Lav en metode public int dagnr() der returnerer dagnummeret siden 1/1 år 1. Du skal igen<br />

tage højde for skudår.<br />

(Eventuelt:) Lav en metode public int til(Date d) der returnerer afstanden (i dage) fra denne dag til<br />

datoen d. Det kan f.eks. bruges til at finde ud af hvor mange dage dronning Victoria regerede (fra 1837-06-20<br />

til 1901-01-22).<br />

3


<strong>Grundlæggende</strong> <strong>Programmering</strong> <strong>IT</strong>-C, <strong>Forår</strong> <strong>2001</strong><br />

Du kan teste klassen med følgende program:<br />

public class Java38 {<br />

public static void main(String[] args) {<br />

Dato d1, d2;<br />

d1 = new Dato(1837, 6, 20);<br />

d2 = new Dato(1901, 1, 22);<br />

System.out.println("dagiaaret for d1: " + d1.dagiaaret());<br />

System.out.println("dagiaaret for d2: " + d2.dagiaaret());<br />

System.out.println("dagnr for d1: " + d1.dagnr());<br />

System.out.println("dagnr for d2: " + d2.dagnr());<br />

System.out.println("Dronning Victoria regerede i " + d1.til(d2) + " dage.");<br />

}<br />

}<br />

Opgave Java39 — en ny version af Time<br />

Definér en ny version af forelæsningens klasse Time (fra filen Time2.java), så et tidspunkt repræsenteres som antal<br />

minutter siden midnat. Klassen skal altså kun have ét felt int min.<br />

Klassens kontruktor tager stadig to argumenter, nemlig minutter og timer siden midnat. Du skal altså omregne<br />

timer og minutter siden midnat til kun minutter<br />

_<br />

¥§<br />

_<br />

¤¥§¥¤¡¤¥§©¡<br />

¤¦¥¨§©<br />

Givet ¤¦¥§© ¥§<br />

_<br />

¤¦¥§<br />

kan du finde<br />

¥¤<br />

og<br />

¤¦¥§©<br />

således:<br />

_<br />

_<br />

¥§<br />

_<br />

¤¦¥§<br />

og<br />

¤¥§©¤¦¥§©<br />

_<br />

¥¤¡¤¦¥§©<br />

¥§ _ ¤¦¥§<br />

Husk at tilpasse metoderne toString, plus, to og before, og prøvekør dem med følgende program:<br />

public class Java39 {<br />

public static void main(String[] args) {<br />

Time t1, t2;<br />

t1 = new Time(12, 35);<br />

t2 = t1.plus(40);<br />

}<br />

}<br />

System.out.println("t1 er " + t1);<br />

System.out.println("t1.hours er " + t1.getHours());<br />

System.out.println("t2 er " + t2);<br />

System.out.println("t1 plus 10 min plus 50 min er " + t1.plus(10).plus(50));<br />

System.out.println("t1 før t2 er " + t1.before(t2));<br />

System.out.println("fra t1 til t2 er der " + t1.to(t2) + " minutter");<br />

System.out.println("t1 er stadig " + t1);<br />

Opgave Java40 — kommandolinieargumenter<br />

Kommandolinieargumenterne fra java overføres til programmet via parameteren args, som er en tabel af strenge,<br />

hvis main-metoden er erklæret som public static void main(String[] args) { ...}<br />

Lav et program som indlæser et vilkårligt antal kommandolinieargumenter og udskriver (1) antallet af kommandolinieargumenter,<br />

(2) kommandolinieargumenterne på hver sin linie samt (3) antallet af tegn i alle kommandolinieargumenterne.<br />

Vink: Du kan hente inspiration i programmet Sum2.java fra forelæsning 3.<br />

Programmet kan f.eks. give følgende uddata:<br />

# java Java40 hej igen<br />

Der er 2 kommandolinieargumenter.<br />

Argument nummer 0: hej<br />

Argument nummer 1: igen<br />

Kommandolinieargumenterne består i alt af 7 tegn.<br />

#<br />

4

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!