3.1 Klassen Brøk
Programmer videre på klassen Broek, som vi har startet på ovenfor. Programmer som et minimum de aritmetiske operationer add, subtract, multiply og divide. Programmer også gerne andre relevante operationer, såsom equals, less-than, osv. Hvis du laver equals metoden bør du erindre mønstret fra en tidligere lektion. |
3.2 Omformning af if til switch
Se på og prøvekør programmet, som omregner procentpoint til karakterer ved skriftlige opgaver.
Et komplet Java program er til jeres rådighed:
Vær sikker på, at I forstår det i detaljen. Ville programmet virke, hvis vi foretog testene i omvendt rækkefølge? Det er åbentbart umuligt at få 13 igennem dette program; Kan man få 0 ved brug af dette program? Diskuter hvorvidt dette program kan omskrives til brug af Java's switch kontrolstruktur. Begrund jeres svar. Udfør gerne en praktisk øvelse med dette, hvor I afprøver jeres evt. løsning i Java. Dette program kræver adgang til klassen Keyboard eller tilsvarende (SimpletInput, jf. s 111 i Barnes). Hvis ikke din installation giver dig direkte adgang til denne klasse, ligesom det gøres på cs nettet på Aalborg Universitet, kan du blot placere Keyboard klassen i samme katalog som klassen IfDemo1. |
Solution
Programmet beror på den skjulte forudsætning, at procent tallet er mellem 0 og 100.
Hvis dette holder, kan man ikke få 0. Hvis man derimod giver programmet et negativt
procenttal får man 0. Hvis vi tester tilfældene i omvendt rækkefølge vil programmet ikke virke. Programmet vil nok være mere klart hvis vi eksplicit tester på intervaller: if (procent >= i) && (procent < j) ...; En Java switch kontrolstruktur udvælger et bestemt tilfælde ud fra et tabelopslag på basis af et heltal eller tegn. Man kan principielt skrive en en switch med 101 tilfælde, som slår karakteren op af procenttallende 100, 99, 98, ..., 0. Dette ville dog være et tåbeligt program, og hvis sproget er implementeret på en uheldig måde, vil den underliggende tabel (hvori der slås op) blive alt for stor. Bedre ville det være at omregne procenttallet p til en størrelse, der kunne bruges som selektor i en switch; Men med denne omregning har vi reelt løst problemet - så det er heller ikke løsningen. I dette eksempel er det ikke oplagt at bruge en switch kontrolstruktur. Generelt kan vi observere, at en if-then-else kæde er 'mere kraft- og udtryksfuld' end en switch. Det hænger på at switch blot slå op i en underliggende tabel af muligheder, hvorimod en if-then-else kæde gennemfører en række successive tests med vilkårligt komplicerede logiske udtryk |
3.3 Break og continue
Se på programmet på den tilknyttede slide.Programmet er også her:
Find ud af hvad programmet udskriver (i det mindste de første 6 talpar, eller indtil du finder et 'mønster'). Kør dernæst programmet. Er der overensstemmelse mellem dit resultat af ovenstående og programmets faktiske output? Variér iøvrigt gerne på break og continue kommandoerne på forskellig vis. Vær sikker på, at du kan forklare resultaterne af dine forskellige testkørsler. |
Solution
Variablen i løber fra 1 til 12 i den ydre løkke.
Talparret (1,1) udskrives først. (1,2) udskrives ikke
idet loop2 springes over når j er lige. Derimod
udskrives (1,3) og videre (1,5). Når j bliver 7
bryder vi den indre løkke med break. Nu bliver i lig med
2, hvilket dog umiddelbart afstedkommer continue loop1.
Altså er i nu 3, og talparrene (3,1), (3,3) og (3,5) udskrives. Således
fortsættes. Som man kan overbevise sig om ved at køre programmet udskrives alt i alt følgende: (1,1) (1,3) (1,5) (3,1) (3,3) (3,5) (5,1) (5,3) (5,5) (7,1) (7,3) (7,5) (9,1) (9,3) (9,5) |
3.4 Indlæsning af heltal
Som det fremgår af lærebogen
er indlæsning af tal et noget mere kompliceret problem
end blot indlæsning af en tekstlinie.
For at indlæse et heltal skal man udtrække cifrene af den indtastede tekststreng (en form for parsning) og beregne tallet.
Hvis man synes, at dette er for omstændeligt, kan
man bruge et alternativt bibliotek, som indholder en mere direkte 'readInt' metode, f.eks.
via klassen Console i kataloget /pack/local-java/lib/corejava/ eller klassen Keyboard fra Lewis og Loftus (2ed). I denne opgave vil vi, for øvelsens skyld, selv programmere en procedure, som indlæser et heltal fra tastaturet. Dette giver en nyttig indsigt i forskellen mellem at læse tekst og tal. Opgaven går altså ud på at indlæse en række tegn, som danner et heltal, og dernæst konvertere de indlæste tegn til et tal af typen int. Man kan sige, at øvelsen går ud på at programmere operationen parseInt - som Java anvender for at løse opgaven. Udfyld derfor detaljerne i følgende programskabelon:
Program skabelonen kan downloades til en fil via følgende link: Skabelon |
Solution
Mit program, som løser problemet, er følgende:
|
3.5 Tegning af en regulær polygon
Klassen Crayon er en simpel klasse - set fra et grænseflade synspunkt - som
gør det muligt at lave stregtegninger. Studér først klassens grænseflade, og forstå hvilke
tjenester den tilbyder. Benyt nu klassen Crayon til at skrive et program, som tegner en regulær n-kant (ligesidet trekant hvis n er 3, et kvadrat hvis n er 4, en regulær pentagon hvis n er 5, etc). Indlæs n fra tastaturet, f.eks. via klassen Keyboard. Dit program skal naturligvis have adgang til klassen Crayon. Hvis dit Java system allerede har adgang til klassen, skal du blot importere klassen eller pakken hvori den forekommer. Hvis ikke, kan du placere Crayon klassen i samme katalog som din egen klasse. Det samme gælder for Keyboard. Dette giver umiddelbart adgang til klasserne fra dit eget program. På cs nettet findes Crayon klassen i pakken oopcourse.util. Klassen Keyboard findes i cs1 pakken - ligesom det antages i lærebogen. |
Solution
Mit program, som løser problemet, er følgende:
Her er et link til programmet. |
Generated: Monday March 31, 2008, 12:08:13
on the system cs-unix