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
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