Java útgáfa /2/2008

Like dokumenter
Java útgáfa /6/2008

C++ Nokkrar æfingar í forritun. Hallgrímur Arnalds

Lausnir Nóvember 2006

SKALI STÆRÐFRÆÐI FYRIR UNGLINGASTIG VERKEFNAHEFTI. Námsgagnastofnun 8667

Verkefnahefti 3. kafli

Þverá, Langadalsströnd vhm 038 Rennslislykill #6

Ordliste for TRINN 1

Virkjunarkostir til umfjöllunar í 3. áfanga rammaáætlunar Kafli 6.52 R3154A Blöndudalsvirkjun

dk Viðskiptahugbúnaður Grunn námskeið

Ordliste for TRINN 2 (utviklende matematikk-oppgavehefter 2Aog 2B- refleksjonsord som kan hjelpe å forstå oppgaver)

VERKEFNABÓK með KENNSLUBÓK Í BÓKHALDI FYRIR GRUNNSKÓLA

gr. byggingarreglugerðar, nr. 112/2012, sbr. rgl. nr. 1173/2012, 350/2013, 280/2014 og 360/2016 Lög um mannvirki, nr.

t i l l j ó s r i t u n a r

R3123A Markarfljótsvirkjun B

EFNISYFIRLIT. Sproti 1a Verkefnahefti til ljósritunar

majl Eríndi nr. Þ /^ 3 /^ 3 komudagur 2% l 20IÍ

Stika 1a Verkefnablöð til ljósritunar. Gyldendal Norsk Forlag AS útgáfa. Heiti á frummálinu: Multi 5 7 Kopiperm 1. útgáfa

2.febrúar 2015 kl. 08:30-11:00

SKALI LAUSNIR STÆRÐFRÆÐI FYRIR UNGLINGASTIG NEMENDABÓK. Námsgagnastofnun 8863

3.2 Lausnir af römmum sýrum og bösum

Frístundahús. Leiðbeiningar. Leiðbeiningar. Mannvirkjastofnun

2. Járnbending. Almenn ákvæði, sjá verklýsingu. 2.1 Gæðakröfur, sjá verklýsingu. 2.2 Tákn: F201

Nutricia. næringardrykkir

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Eðli skuldajafnaðar BA-ritgerð í lögfræði

BÖRN Í FJÖLTYNGDUM FJÖLSKYLDUM. UPPLÝSINGABÆKLINGUR Islandsk

t i l l j ó s r i t u n a r

Beiting enduröflunarverðs við ákvörðun fjárhæðar eignarnámsbóta

EES-viðbætir við Stjórnartíðindi Evrópusambandsins Nr. 49/321. frá 20. desember 2017

Stika 2a Verkefnablöð til ljósritunar. Gyldendal Norsk Forlag AS útgáfa. Heiti á frummálinu: Multi 5 7 Kopiperm 1. útgáfa

Norska fiskveiðistjórnunarkerfið og markaðssetning norskra afurða. Jóhannes Pálsson, framkvæmdastjóri framleiðslu Norway Seafood AS.

FYLGISEÐILL: UPPLÝSINGAR FYRIR NOTANDA LYFSINS. Husk psyllium fræskurn, hörð hylki. Plantago ovata Forsk.

UM SJÁVARFALLASPÁR. Náttúiufrœðingurinn 69 (I), bls , 2000.

Stika 1b Verkefnablöð til ljósritunar. Gyldendal Norsk Forlag AS útgáfa. Heiti á frummálinu: Multi 5 7 Kopiperm 1. útgáfa

Leiðbeiningar

Lýsing á skrá og leiðbeiningar

Meginreglur um bótaábyrgð eignarnema

Hægribeygjur af þjóðvegum Rannsóknarverkefni. Mat á umferðaröryggi mismunandi útfærslna

Magn og uppspretta svifryks

KENNARABÓK. Stærðfræði fyrir unglingastig. Grete Normann Tofteberg Janneke Tangen Ingvill Merete Stedøy-Johansen Bjørnar Alseth. Námsgagnastofnun 7411

Notendastýrð persónuleg aðstoð á Norðurlöndum

Virkjunarkostir til umfjöllunar í 3. áfanga rammaáætlunar Kafli 6.31 R3133A Bláfellsvirkjun

Varðar: Athugasemdir við Frummatsskýrslu Samkeppniseftirlitsins, rit nr. 2/2015.

Leiðbeiningar gr. byggingarreglugerðar, nr. 112/2012, sbr. rgl. nr. 1173/2012, 350/2013, 280/2014 og 360/2016 Lög um mannvirki, nr.

Stika 3b Verkefnablöð til ljósritunar. Gyldendal Norsk Forlag AS útgáfa. Heiti á frummálinu: Del 2 Kopioriginaler til Multi 7

sþ Tillaga til þingsályktunar [200. mál]

VERKEFNI ME B ぱKINNI: たSLAND LANDI OKKAR EFTIR ʼn ぱRU KRISTINSD ぱTTUR. Bls. 4 5: Hva heitir landi sem vi b モum タ? Hva heitir landi sem モ kemur fr ァ?

Nokkur blöð úr Hauksbók

Øvingsoppgaver i norrønt

Stika 2a Verkefnablöð til ljósritunar. Gyldendal Norsk Forlag AS útgáfa. Heiti á frummálinu: Multi 5 7 Kopiperm 1. útgáfa

viðaukum. Birtist í Tímariti lögfræðinga, 3. hefti, 45. árg., 1995, bls


R Ó M V E R J A R M O R G U N. S E N D I Ð F L E I R I H E R M E N N! Verkefnablað 4.7. Verkefnablað 4.8. Verkefnablað Verkefnablað 4.

33 Dagurinn minn. 1. Dagurinn hjá Lilju. 1.1 Spyrjið og svarið. Orðaröð

Kennsluleiðbeiningar. Geisli 3B Kennsluleiðbeiningar Námsgagnastofnun

Leiðbeiningar um samtöl barnaverndarstarfsmanna við börn. Talaðu við mig!

Héraðsdómurinn var staðfestur í Hæstarétti með vísan til forsendna hans.

heimilistæki Kaupleiðbeiningar VERÐLÆKKUN! Vegna verðlækkunar er verðið í kaupleiðbeiningunum

Leiðbeiningar fyrir lögmenn um hvernig uppfylla má kröfur nýrra laga um persónuvernd

Islandsk bøyingsskjema

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Stika 1a Verkefnablöð til ljósritunar. Gyldendal Norsk Forlag AS útgáfa. Heiti á frummálinu: Multi 5 7 Kopiperm 1. útgáfa

STOPPISTÖÐVAR Á ÞJÓÐVEGUM Í DREIFBÝLI - SAMANBURÐUR MILLI LANDA

Fylgiseðill: Upplýsingar fyrir notanda lyfsins. Ringer-Acetat Baxter Viaflo, innrennslislyf, lausn

Merki og Kerfi - Verklegt - Æfing 5. Albert Ingi Haraldsson

Stærðfræðin - skimun Þróunarverkefni Leikskólans Pálmholts unnið í samstarfi við útgefendur skimunartækisins MÍÓ

Hámarkshraði á tveggja akreina

SKALI LAUSNIR STÆRÐFRÆÐI FYRIR UNGLINGASTIG NEMENDABÓK. Menntamálastofnun 8696

INF2100. Oppgaver 23. og 24. september 2010

Heimildin til nafnleyndar vitna í sakamálum BA ritgerð í lögfræði

Leiðbeiningar Reglur um veðurathuganir, skýrslufærslu og skeytasendingar á skeytastöðvum

Fréttabréf -átak í sparnaði- Kæra samstarfsfólk gjörgæsludeildar og vöknunar

Alltaf sami Grallarinn?

LV Heiðagæsaathuganir á Snæfellsöræfum 2012

í öðrum norrænum ríkjum Magnús Karel Hannesson sviðsstjóri Samband íslenskra sveitarfélaga

Hugtakið gáleysi í skilningi 215. gr. almennra hegningarlaga nr. 19/1940

INNGANGSORÐ. Vinnuhópurinn þakkar öllum þeim sem komu að gerð stigans með einum eða öðrum hætti kærlega fyrir.

Handbók í hönnun rafkerfa

Um upplýsingaskyldu seljanda í fasteignakaupum og fleiri reglur laga nr. 40/2002 um fasteignakaup

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

Del 3: Evaluere uttrykk

INF2100. Oppgaver 26. september til 1. oktober 2007

Kjarnaborun í Tjörnessetlögin til að meta þroska lífrænna efna

Eksamen FSP6074 Islandsk II PSP5732 Islandsk nivå II. Nynorsk/Bokmål

Endurskoðun reglna um greinarmerkjasetningu skýrsla fyrir Íslenska málnefnd

Eftirlitsskýrsla. Áburðareftirlit Desember 2011

Málið er höfðað með ákæru ríkissaksóknara dagsettri 8. mars 2013, á hendur:

Programmering Høst 2017

Dæmi um eldvarnarveggi, hæðaskil og eldvarnarhurðir

Jón Þorvaldur Heiðarsson

Íslenskar Áfangaskýrsla olíur til vegagerðar



Løsningsforslag til eksamen i INF1000 våren 2006

Alþingi Erindi nr. Þ 140/1532 komudagur Umsögn. Barnalög (barns, forsjá, umgengni o.fl.) 290. mál lagafrumvarp 140. löggjafarþingi.

LAXÁ 2005 HANDBÓK FYRIR ÞÁTTTAKENDUR Í FERÐ WÖRTUNNAR AÐ LAXÁ Í MÝVATNSSVEIT 8. TIL 12. JÚLÍ 2005 ÚTGEFANDI: STANGVEIÐIDEILD WÖRTUNNAR B.C.

1. Inngangur. 2. Önnur móðurmál en íslenska

Helstu nýmæli laga nr. 150/2007

t i l l j ó s r i t u n a r

Upplýsingar er varða störf erlendis (Dags Listinn verður uppfærður reglulega eftir því sem nýjar upplýsingar berast).

Transkript:

Efnisyfirlit Efnisyfirlit... 2 Tilgangur og uppbygging þessara leiðbeininga... 6 Hvað þarf til að búa til forrit í Java... 6 drjava þróunarumhverfi... 8 Grunnatriði form java forrits - skrifað á skjá... 11 Sýnidæmi1. Forrit sem skrifar texta... 11 Æfingaverkefni... 11 Velkomin... 11 Breytur og tag breyta.... 11 Hvað eru breytur.... 11 Sýnidæmi2. Forrit sem notar breytu.... 12 Æfingaverkefni sem nota breytur.... 12 Heiltölubreytur (bok)... 12 Character breytur (vefur)... 12 Virkjar... 13 Reiknivirkjar... 13 Sýnidæmi3a. Forrit sem notar eina double breytu og reiknivirkja.... 13 Sýnidæmi 3b. Forrit sem notar double breytur og virkja.... 14 Æfingaverkefni sem nota breytur og reiknisegð.... 14 Rauntölubreytur... 14 Rauntölubreytur deiling (bok)... 14 Nokkrar segðir... 14 Inntak frá lyklaborði... 15 Sýnidæmi4. Forrit sem notar breytur og virkja.... 16 Æfingaverkefni sem nota breytur.... 17 Gildistökusetningar... 17 Æfingaverkefni gildistökusetningar og segðir... 17 Litrafjoldi (bok)... 17 Tommur í sentimetra... 17 Virðisauki (bok)... 17 Verðlækkun (bok)... 18 Flatarmál hrings... 18 Hitastig1... 18 Skattur1 (bok)... 18 Fastar... 19 Sýnidæmi. Forrit reiknar flatarmál hrings með því að nota fasta.... 19 Æfingaverkefni með fasta... 20 Virdisauki (bok)... 20 Random tölur (tilviljnarkenndar tölur)... 20 Sýnidæmi um forrit sem skrifar út tilviljunarkennda töluu á milli 0 og 1... 20 Sýnidæmi. Forrit sem skrifar út tilviljunarkennda heiltölu á milli 0 og 9... 20 Æfingaverkefni úr tilviljunarkenndum tölum... 21 Teningakast (bok)... 21 Yatzi kast (bok)... 21 If setningar... 21 Sýnidæmi um If setningar... 21 Samanburðarvirkjar... 22 Rökvirkjar... 22 Nokkrar æfingar í forritun bls. 2 Hallgrímur Arnalds

Æfingaverkefni if setningar... 23 Góðan daginn 1 (bok)... 23 Góðan daginn 2 (bok)... 23 Minnsta tala 1... 23 Minnsta tala 2... 23 Litrar/gallon... 23 Tommur/sentimetra... 23 Árstíðir 1... 23 Nafn mánaðar... 23 Aldur 1... 24 Aldur_2... 24 Aldur_3... 24 SkatturIf (bok)... 24 Vikulaun... 24 Hlaupaár (bok)... 24 Lögleg dagsetning.... 24 Lykkjur... 25 do.. while lykkjur... 25 while lykkjur... 26 for lykkjur... 26 Break skipunin... 27 Continue skipunin... 27 Æfingaverkefni - lykkjur... 28 Bokstafur1... 28 Bokstafur2 (bok)... 28 Flatarmál ferhyrnings - endurtekning (Flartrmal_ferh_lykkja) Skrifið forrit sem reiknar flatarmál ferhyrnings. Forritið spyr um lengd og breidd ferhyrningsins en skrifar hvert flatarmál ferhyrningsins er.... 28 Heiltala - lykkja (bok)... 28 Talnabil1... 28 Talnabil2... 28 Talnabil upp og niður (bok)... 28 Talnabil Oddatölur (bok)... 28 Talnabil - annað veldi (bok)... 29 Summa... 29 Litrar/gallon valmynd (bok)... 29 Tommur/sentimetra valmynd... 29 Talnabil - hropmerkt... 29 Skattur lykkja... 29 Margföldunartafla1... 30 Margföldunartafla2... 30 Greiðsluáætlun... 30 Spilið 21... 31 Static föll... 32 Sýnidæmi um einfalt fall... 32 Sýnidæmi um fall með færibreytu en engu skilagildi... 32 Sýnidæmi um fall með færibreytu og skilagildi... 33 Sýnidæmi um fall sem skilar rökgildi (true eða false)... 33 Æfingadæmi um föll með gildisfæribreytum en ekki skilagildi:... 34 Flatarmál ferhyrnings... 34 Nokkrar æfingar í forritun bls. 3 Hallgrímur Arnalds

Margtafla1_fall... 34 Margtafla2_fall... 35 Talnabil - Fall 2... 35 Veldi... 35 Modulus... 35 Æfingadæmi um föll með gildisfæribreytum og skilagildi:... 35 Flatarmál ferhyrnings... 35 Flatarmál hrings (bok)... 35 Litrar/gallon með falli, valmynd (bok)... 35 Tommur/sentimetrar með falli, valmynd... 36 Fallið staðgeiðsla... 36 Fallið otthungur... 36 Fallið deilanleg... 37 Fallið eldsneytiseydsla... 37 Talnabil - Fall 1... 37 Hlaupaár.... 37 Dagafjöldi frá áramótum.... 38 Fylki... 38 Sýnidæmi um notkun fylkis í forriti... 38 Æfingadæmi - fylki... 39 Manhitastig2 (bok)... 39 Birtir hæsta, lægsta og meðalhitastig.... 39 Nafn... 39 Vikulaun... 39 Langstökk... 39 Lögleg dagsetning... 40 Ýmislegt... 40 Æfingadæmi... 40 Bokstafur1 (bok)... 40 Tákn... 40 Prímtölur... 40 Sjóorusta (bok)... 40 Monte Carlo aðferð til að finna pí... 41 Klasar... 42 Sýnidæmi... 42 Klasinn Ferh, dæmi um klasa fyrir ferhyrning... 42 Æfingadæmi... 46 Klasinn hringur... 46 Klasinn Land (bok)... 46 Klasinn dagsetning... 47 Klasinn vinnutimi... 47 Klasinn minnisatridi... 47 Klasinn spil... 47 String klasinn... 49 Klasar erfðir... 50 Sýnidæmi úr erfðum... 50 Æfingardæmi úr erfðum... 52 Hus Ibudarhus (bok)... 52 Fjall - Eldfjall... 52 Villumeðhöndlun try catch throw... 52 Nokkrar æfingar í forritun bls. 4 Hallgrímur Arnalds

Viðauki 1. Lausnir nokkurra verkefna... 53 Æfingaverkefni breytur og segðir... 53 Heiltölubreytur (IntBreyta)... 53 Rauntölubreytur deiling... 53 Skattur1... 54 Nafn1... 55 Litrar1... 55 Verd1... 55 Virdisauki1... 55 Virdisauki_fasti... 56 Æfingaverkefni random tölur... 56 Yatzikast... 56 Æfingaverkefni if setningar... 56 Góðan daginn 1... 56 Góðan daginn 2... 56 SkatturIf... 57 Hlaupaár.... 57 Æfingaverkefni lykkjur... 57 Bokstafur2... 57 Heiltala - lykkja... 58 Talnabil upp og niður... 58 Oddatala... 58 Talnabil - annað veldi... 59 Litrar/gallon valmynd... 59 Æfingaverkefni föll... 60 Talnabil með falli... 60 Flatarmál hrings útgáfa 1... 60 Flatarmál hrings útgáfa 2... 60 Litrar/gallon með falli, valmynd... 61 Dagsetningaföll... 62 Æfingadæmi - fylki... 62 Manhitastig2... 62 Ýmislegt... 63 Bokstafur1... 63 Sjóorusta... 63 Einingar klasi sem inniheldur nokkur föll til að umreikna mismunandi einingar... 65 Æfingaverkefni klasar... 65 Land... 65 Æfingardæmi úr erfðum... 66 Hus Ibudarhus (bok)... 66 Æfingaverkefni skil (interface)... 68 Nokkrar æfingar í forritun bls. 5 Hallgrímur Arnalds

Tilgangur og uppbygging þessara leiðbeininga Þessir punktar eru ætlaðir sem safn af æfingaverkefnum fyrir byrjendur í forritun. Vonandi verður raunin að nemendur telji að þessi verkefni nýtist þeim. Þessi verkefni eru hugsuð sem æfingaverkefni sem nota má með kennslubók en ekki sem sjálfstæð kennslubók. Einnig má nota verkefnin án kennslubókar en þá með leiðbeiningum kennara eða með leiðbeiningum á vef. Nota má þessi verkefni til að æfa sig í mismunandi forritunarmálum, en í þessari útgáfu eru tekin dæmi í Java. Til eru tvær aðrar útgáfur þessa heftis þar sem dæmi úr C++ og Pascal eru notuð. Hugmyndir að fleiri verkefnum og ábendingar um hvað megi betur fara eru vel þegnar, t.d. á tölvupóstfang hallgrimur@ru.is. Uppbygging þessara leiðbeininga er miðuð við að nemandi læri með því leysa verkefni, fremur en að lesa um mismunandi lausnaraðferðir. Reynt er að byrja á kynna ákveðið efni með forritunardæmi, slík dæmi kalla ég sýnidæmi. Dæmið er skýrt með stuttum skýringum á undan dæminu og ekki síður með athugasemdum í dæminu sjálfu. Síðan koma æfingadæmi sem nemandi leysir. Nemandi þarf að meta hversu mörg dæmi hann leysir, en auðvitað gildar það að því fleiri dæmi sem leyst eru, því betur festist viðkomandi atriði í huganum. Æfingadæmi eru þrenns konar: Æfingadæmi með lausn aftast í viðauka í þessu hefti. Eindregið er mælt með að nemandi reyni að leysa dæmi áður en dæmi um lausn er skoðað. Nemandi hefur hins vegar þann kost að skoða lausnirnar ef hann lendir í vandræðum með að leysa dæmið og einnig til að fá huganlega aðrar hugmyndir að lausnaraðferð heldur en hans eigin. Slík æfingadæmi eru auðkennd með merkinu (bok) Dæmi með lausn á vef fyrir þá nemendur sem hafa aðgang að heimasvæði námskeiðs. Slík æfingadæmi eru auðkennd með merkinu (vefur) Dæmi án lausna. Kveðja Hallgrímur Arnalds Hvað þarf til að búa til forrit í Java Til að geta keyrt og búið til java forrit þarf java umhverfið að vera sett upp á viðkomandi tölvu. Java umhverfið má t.d. nálgast og hlaða niður af heimasíðu Sun sem þróaði Java. Til eru nokkrar útgáfur af Java umhverfinu og skiptir máli hvaða útgáfa er valin. Þegar við hlöðum niður Java umhverfinu getum við valið hversu mikið við viljum hlaða niður í tölvuna okkar. Við getum hlaðið niður JRE útgáfum, en slíkar útgáfur innihalda einungis það sem til þarf til að geta keyrt Java forrit. Slíkar útgáfur eru því ekki nægjanlegar til að búa til Java forrit eins og við ætlum að gera. JDK (Java Development Kit) útgáfur innihalda það sem þarf til að þróa hugmúnað. Þær eru til í nokkrum útgáfum (þegar þetta er skrifað er JDK 6 nýjasta útgáfan): Nokkrar æfingar í forritun bls. 6 Hallgrímur Arnalds

Java Standard Edition (J2SE) J2SE má nota til að þróa hugbúnað í java sem nota á venjulegum tölvum. Java Enterprise Edition (J2EE) J2EE má nota til að búa til hugbúnað fyrir tölvur sem eru settar upp sem miðlarar (server side applications) t.d. Java servlets og Java ServerPages. Java Micro Edition (J2ME). J2ME má nota til að þróa hugbúnað fyrir minni tæki t.d. farsíma. Í þessu hefti er miðað við að nota J2SE útgáfuna til að kynna forritun í Java. Til að hlaða niður þessari útgáfu má t.d. fara á slóðina: http://java.sun.com/javase/downloads/index.jsp Þegar þessi slóð er valin birtist skjámynd lík og skjámyndin hér að neðan: Þar má velja Download við JDK 6 Þá birtist skjámyndin: Nokkrar æfingar í forritun bls. 7 Hallgrímur Arnalds

Hér er smellt á Accept og valið að hlaða niður Windows Offline Installation, Multi language ef þið notist við windows tölvu, en ef ekki þar að velja viðkomandi útgáfu. Þegar búið er að hlaða þessu á disk tölvunnar þarf að setja upp umhverfið með því t.d. að tvísmella á skráarnafnið og fara eftir leiðbeiningum sem þá eru gefnar. Þegar búið er að setja upp umhverfið getum við byrjað að þróa hugbúnað í Java. Oftast er samt hlaðið niður einhverju þróunartóli sem auðveldara er að vinna heldur en hráu Java umhverfi. Ég miða hér við að notað sé umhverfið drjava, en notandi getur auðveldlega valið eitthvert annað umhverfi ef óskað er. Til að hlaða niður drjava umhverfið má t.d. fara á slóðina: http://drjava.org/ drjava þróunarumhverfi Ekki þarf að setja dr Java forritið sérstaklega upp heldur er hægt að ræsa það beint. Þegar forritið er ræst byrjar það á að spyrja um hvar finna megi skránna tools.jar. Þið þurfið að vísa á þá skrá, en þessa skrá er að finna á undirmöppunni lib undir möppu sem inniheldur java (sem þið settuð inn hér að framan). Myndin að neðan sýnir skjáinn eftir að drjava hefur verið ræst og fyrsta sýnidæmið slegið inn Nokkrar æfingar í forritun bls. 8 Hallgrímur Arnalds

Nokkrar æfingar í forritun bls. 9 Hallgrímur Arnalds

Þá þarf að þýða forritið, er það gert með því að velja Tools og compile current document Ef þýðingin tekst án villna koma skilaboðin Last compilation completed successfully. Ef villur koma í þýðingu koma villuboð í stað þessa texta. method. Þá birtist það sem forritið skrifar á sama stað. Til að keyra forritið þarf síðan að velja Tools og Run Documents main Nokkrar æfingar í forritun bls. 10 Hallgrímur Arnalds

Grunnatriði form java forrits skrifað á skjá Sýnidæmi1. Forrit sem skrifar texta. // Fyrsta Java forritið //Þetta er forrit sem skrifar textann Hallo heimur á skjáinn public class Hallo { System.out.println("Hallo heimur"); Sýnidæmi1. Skýringar // Fyrsta Java forritið // Það sem er aftan við þetta tákn í línu er athugasemd sem hefur engin áhrif á virkni forritsins. Hér getur forritarinn sett inn athugasemdir sem gott er að hafa um virkni forritsins o.fl. public class Hallo { Þetta er klasi sem heitir Hallo. Hér byrjar aðalforritið. Hér byrjar framkvæmd forritsins. Forritið er síðan innan slaufusviganna () System.out.println("Hallo heimur"); Sytsem.our.println er notað til að skrifa út á skjá. Æfingaverkefni Velkomin (VelkominJava) Búið til forrit sem skrifar Velkomin að læra Java. Klasinn á að heita VelkominJava og vistast í skránni VelkominJava.java Breytur og tag breyta. Hvað eru breytur. Breytur eru í raun nafn á minnishólfi eða minniseiningu í tölvunni. Þannig notum við breytur til að geyma gögn í forriti. Breytur geta verið af mismunandi tagi, þ.e. við getum geymt mismunandi tegundir af gögnum í breytum. Þannig getum við t.d. geymt heiltölur (1, 2, 10, 251 o.s.frv.), kommutölur eða rauntölur ( 0.0, 2.5, 111,77 o.s.frv.) tákn (svo sem a, b, % $ o.s.frv.) svo dæmi sé nefnt. Eins og áður segir hafa breytur nafn sem notað er til að fá aðgang að gildi sem er í breytunni eða minnishólfinu. Eins og áður segir getum við skilgreint breytur af mismunandi tagi til að geyma mismunandi upplýsingar. Dæmi um tög sem nota má í Java í töflu 1. (Þetta er ekki tæmandi listi heldur einungis dæmi um nokkur tög) Nokkrar æfingar í forritun bls. 11 Hallgrímur Arnalds

Tafla 1. Tag (e. Type) Innihald Dæmi int heiltala 1, 251, -71 double rauntala 7., 7.553, -0.33 char bókstafur, tákn A, a, #, 4 boolean rökgildi true, false String Mörg tákn Jón, Jón Jónsson (ekki grunntag) Sýnidæmi2. Forrit sem notar breytu. // Búinn til klasi sem heitir Breyta2 public class Breyta2 { /** main fall innan klasans skilgreint */ double tala; // búin til breyta sem heitir tala og er // af taginu double. Breytan getur þá geymt rauntölu // (kommutölu) // setja gildið 15.5 inn í breytuna tala tala = 15.5; // Birta innihald breytunnar á skjá System.out.println("Innihald breytunnar tala er: " + tala); // set gildið -7.6 í stað gildising 15.5 inn í breytuna tala tala = -7.6; // Birta innihald breytunnar aftur á skjá System.out.println("Innihald breytunnar tala er nú: " + tala); Æfingaverkefni sem nota breytur. Heiltölubreytur (bok) (IntBreyta) Búið til forrit býr til eina heiltölubreytu (int breytu) setur töluna 5 (ekki 5.0 það er rauntalan eða kommutalan 5.0) breytuna og skrifar síðan innihald breytunnar á skjá. Forritið á síðan að bæta við tölunni 8 við það sem er inn í breytunni og birta á skjá hvert innihald breytunnar er. Character breytur (vefur) (CharBreyta) Búið til forrit býr til eina character breytu (char breytu) setur bókstafinn H í breytuna og skrifar síðan innihald breytunnar á skjá. Forritið á síðan að setja táknið í breytuna í stað bókstafsins H og skrifa síðan innihald breytunnar á skjá. Þegar notaðar eru breytur sem eiga að geyma bókstafi eða tákn þarf að afmarka táknið sem setja á í breytuna með einfaldri kommu, t.d. char takn; takn = a ; Nokkrar æfingar í forritun bls. 12 Hallgrímur Arnalds

eða takn = $ ; Virkjar Reiknivirkjar Reiknivirkjar (Arithmetic operators) Nafn tákn Dæmi samlagning + int summa = 1 + 5 frádráttur - float mismunur = 13.25-1.91 margföldun * float margfeldi = 5 * 7.6 deiling / int nidurstada = 13 / 3 módúlus ("mod") % int afgangur = 11 % 6 samlanging ++ tala++, ++tala frádráttur -- Tala--, --tala Sýnidæmi3a. Forrit sem notar eina double breytu og reiknivirkja. // Búinn til klasi sem heitir Breyta1 public class Breyta3 { /** main fall innan klasans skilgreint */ double tala; // búin til breyta sem heitir tala og er // af taginu double. Breytan getur þá geymt rauntölu // (kommutölu) // Hér leggur forritið saman tölurnar 15.5 og 7.6 og setur // niðurstöðuna í breytuna sem heitir tala (þ.e. gildið // 23.1) tala = 15.5 + 7.6; // notum + reiknivirkjann // Birta innihald breytunnar á skjá System.out.println("Innihald breytunnar tala er: " + + tala); // Hér hækkum við gildið í breytunni tala um 5.5 tala = tala + 5.5 ; // Birta innihald breytunnar aftur á skjá System.out.println("Innihald breytunnar tala er nú: " + + tala); Nokkrar æfingar í forritun bls. 13 Hallgrímur Arnalds

Sýnidæmi 3b. Forrit sem notar double breytur og virkja. // Búinn til klasi sem heitir ReiknaFlatarmalHrings public class ReiknaFlatarmalHrings { /** main fall innan klasans skilgreint */ double radius; double flatarmal; // setja gildið 15 inn í breytuna radius radius = 15; // Reikna flatarmálið flatarmal = radius * radius * 3.14159; // Birta niðurstöður á skjá System.out.println("Flatarmál hrings með radius " + radius + " er " + flatarmal); Æfingaverkefni sem nota breytur og reiknisegð. Rauntölubreytur (doublebreyta) Búið til forrit býr til eina rauntölubreytu (double breytu) setur töluna 2.4 í breytuna og skrifar síðan innihald breytunnar á skjá. Forritið á síðan að bæta við tölunni 1.7 við það sem er inn í breytunni og birta á skjá hvert innihald breytunnar er. Rauntölubreytur deiling (bok) (doublebreyta2) Búið til forrit býr til eina rauntölubreytu (double breytu) setur töluna 2.2 í breytuna og skrifar síðan innihald breytunnar á skjá. Forritið á síðan að deila í innihald breytunnar með 3 og vista niðurstöuna aftur í breytunni og birta á skjá hvert innihald breytunnar er. Nokkrar segðir Hér að neðan má finna dæmi um mismunandi segðir. Til að prófa rétt svör er tilvalið að afrita forrit og prófa. // Búinn til klasi sem heitir ReikniSegdir public class ReikniSegdir1 { /** main fall innan klasans skilgreint */ int nidurstada = 2 + 2; // nidurstada verður 4 System.out.println(nidurstada); nidurstada = nidurstada - 1; // nidurstada verður 3 System.out.println(nidurstada); nidurstada = nidurstada / 2; // nidurstada verður 1 Nokkrar æfingar í forritun bls. 14 Hallgrímur Arnalds

System.out.println(nidurstada); nidurstada = nidurstada * 4; // nidurstada verður 4 System.out.println(nidurstada); nidurstada = nidurstada + 8; // nidurstada verður 12 System.out.println(nidurstada); nidurstada = nidurstada % 7; // nidurstada verður 5 System.out.println(nidurstada); // Forrit sem sýnir niðurstöðu nokkurra reiknisegða public class ReikniSegdir2 { /** main fall innan klasans skilgreint */ int i; double d; i = 2 + 3 * 8; System.out.println(i); i = 8 * 3 + 2; System.out.println(i); i = -9-4 * 2; System.out.println(i); i = 21 / 3 / -2; System.out.println(i); i = 21 / 2 / -2; System.out.println(i); i = 27-3 - 8; System.out.println(i); i = 9 / 2; System.out.println(i); d = 9.0 / 2.0; System.out.println(d); d = 9.0 / 2; System.out.println(d); i = 8 % 3; System.out.println(i); i = 1 % 2; System.out.println(i); // Forrit sem sýnir niðurstöðu nokkurra reiknisegða public class ReikniSegdir3 { int i = 2; i++; System.out.println(i); // 3 ++i; System.out.println(i); // 4 System.out.println(++i); // 5 System.out.println(i++); // 5 System.out.println(i); // 6 int val = 2*i++; System.out.println(val); // 12 Inntak frá lyklaborði Nokkrar æfingar í forritun bls. 15 Hallgrímur Arnalds

Til að lesa inn gögn af lyklaborði er hentugt að nota Scanner klasann. Í dæminu hér að neðan má sjá hvernig við getum lesið inn mismunandi gögn af lyklaborði (integer, double, streng og boolean gildi) // það þarf að importa Scanner klasanum // til að fá aðgang að honum public class TestScanner { public static void main(string args[]) { // Búum til tilvik af Scanner klasanum Scanner scanner = new Scanner(System.in); // Prompt the user to enter an integer System.out.print("Sláðu inn heiltölu: "); int intvalue = scanner.nextint(); System.out.println("Þú valdir heiltöluna " + intvalue); // Prompt the user to enter a double value System.out.print("Sláðu inn double tölu: "); double doublevalue = scanner.nextdouble(); System.out.println("Þú valdir kommutöluna " + doublevalue); // Prompt the user to enter a string System.out.print("Sláðu inn eitt orð: "); String string = scanner.next(); System.out.println("Þú valdir orðið" + string); // Prompt the user to enter a boolean System.out.print("Sláðu inn rökgildi: "); boolean booleanvalue = scanner.nextboolean(); System.out.println("Þú valdir rökgildið " + booleanvalue); Sýnidæmi4. Forrit sem notar breytur og virkja. Þetta dæmi er eins og fyrra dæmi nema gildi er lesið í breytur af lyklaborði með því að nota Scanner klasann // það þarf að importa Scanner klasanum // til að fá aðgang að honum // Búinn til klasi sem heitir ReiknaFlatarmalHrings public class ReiknaFlatarmalHrings { /** main fall innan klasans skilgreint */ double radius; double flatarmal; // Búum til tilvik af Scanner klasanum Scanner lesaaflyklabordi = new Scanner(System.in); System.out.print("Sláðu inn radius hrings: "); radius = lesaaflyklabordi.nextdouble(); System.out.println("Þú valdir radiusinn " + radius); // Reikna flatarmálið flatarmal = radius * radius * 3.14159; // Birta niðurstöður á skjá Nokkrar æfingar í forritun bls. 16 Hallgrímur Arnalds

System.out.println("Flatarmál hrings með radius " + radius + " er " + flatarmal); Æfingaverkefni sem nota breytur. Heiltala (heiltala) Búið til forrit sem biður notanda að slá inn heiltölu. Forritið svarar síðan þú hefur valið töluna: og síðan skrifast réttur tölustafur út. Kommutala (kommutala) Búið til forrit sem biður notanda að slá inn kommutölu. Forritið svarar síðan þú hefur valið töluna: og síðan skrifast rétt tala út. Textastrengur (bok) (Nafn1) Skrifið forrit sem spyr notanda að nafni. Forritið svarar Halló og síðan nafnið. Dæmi Hvað heitir þú: Jónas Halló Jónas eða: Hvað heitir þú: Elísabet Andrea Jónsdóttir Halló Elísabet Andrea Jónsdóttir Gildistökusetningar Æfingaverkefni gildistökusetningar og segðir Litrafjoldi (bok) (Litrar1) Búið til forrit sem spyr um lítrafjölda. Forritið skrifar síðan út lítrafjöldann sem valinn var og hversu mörg gallon sá lítrafjöldi er. Í einu galloni eru um 3,6 lítrar. Tommur í sentimetra (Tommur1) Búið til forrit sem spyr um lengd í tommum. Forritið skrifar síðan út tommufjöldann sem valinn var og hversu margir sentimetrar sá tommufjöldi er. Í einni tommu eru 2,53 sentimetrar. Nokkrar æfingar í forritun bls. 17 Hallgrímur Arnalds

Þungaskattur (Thungaskattur1) Búið til forrit sem spyr um upphæð þungaskatts á hvern ekinn kílómeter og aksturslengd í kílómeturm. Forritið skrifar síðan út upphæð þungaskatts miðað við þennan akstur. Eldsneytiseyðsla (Eldsneyti1) Búið til forrit sem spyr um lítrafjölda og aksturslengd í kílómetrum. Forritið skrifar síðan út eldsneytiseyðslu, þ.e. fjölda lítra per 100 km. Eldsneytiskostnaður (Eldsneytiskostn) Búið til forrit sem spyr um lítrafjölda, verð á benssíni, og aksturslengd í kílómeturm. Forritið skrifar síðan út eldsneytiskostnað per 100 ekna kílómetra. Virðisauki (bok) (Virdisauki1) Búið til forrit sem spyr um upphæð án virðisaukaskatts. Forritið skrifar síðan hver sú upphæð er með virðisaukaskatti. Gera má ráð fyrir að viðisaukaskattsprósentan sé 24.5% Verðlækkun (bok) (Verd1) Búið til forrit sem reiknar verð vöru fyrir og eftir verðlækkun. Forritið spyr um verð vöru fyrir verðlækkun og um hversu mörg prósent varan á að lækka. Forritið birtir síðan verð vörunnar eftir verðlækkun. Dæmi: Ef verð vöru eru 110 kr. fyrir verðlækkun og verðlækkunin er 10% þá er verð vörunnar 99 krónur eftir verðlækkun. Ef verð vöru eru 100 kr. fyrir verðlækkun og verðlækkunin er 6,5% þá er verð vörunnar 93,5 krónur eftir verðlækkun Flatarmál hrings (Flartrmal_hr1) Skrifið forrit sem reiknar flatarmál hrings. Forritið spyr um radius hringsins en skrifar hvert flatarmál hringsins er. Flatarmál hrings má reikna sem radius x radius x PI (eða radius x radius x 3.1415). Hitastig1 (hitastig1) Búið til forrit sem spyr um hitastig í gráðum á Farenheit skala, en skilar til baka hvert hitastigið er í gráðum á Celsius. Ef Tc er hitastig á Celsius skala og Tf er hitastig á Farenheit skala gildir jafnan: Tc = (5/9)*(Tf-32) Ath. Ef þú færð alltaf 0 út úr þessu dæmi þarft þú að skoða betur hvernær heiltöludeiling er notuð og hvenær ekki! Skattur1 (bok) (skattur1) Reikna staðgreiðslu skatts. Látið forritið spyrja um álagningarprósentu, persónuafslátt og laun. Staðgreiðslu má reikna með því að taka álagningarprósentu af launaupphæð og draga síðan persónuafslátt frá. Forritið á að birta hver staðgreiðslan er. Nokkrar æfingar í forritun bls. 18 Hallgrímur Arnalds

Nokkrar segðir með tagbreytingum: Hverju skila eftirfarandi segðir: (int) 7.9 / 2 (double) 9 / 2 Nokkrar segðir með rökvirkjum : Hverju skila eftirfarandi segðir: (5 == 5) (6 <= 4)!(5 == 5)!(6 <= 4)!true!false (5 == 5) && (6 <= 4) (5 == 5) && (6 >= 4) (5 == 5) (6 >= 4) (5 == 5) (6 <= 4) (5!= 5) (6 <= 4) Fastar Stundum getur verið þægilegt að gefa ákveðnum stærðum eða föstum nafn. Nafnið má siðan nota til að kalla fram þessa stærð. Sem dæmi um fasta í stærðfræði mætti t.d. nefna tölurnar PI og e. Þetta er mögulegt í java. Form á skilgreiningu fasta í java er: final datatype CONSTANTNAME = VALUE; t.d. gætum við þá skilgreint fasta á eftirfarandi hátt: final double PI = 3.14159; final int SIZE = 3; Sýnidæmi. Forrit reiknar flatarmál hrings með því að nota fasta. // það þarf að importa Scanner klasanum // til að fá aðgang að honum // Búinn til klasi sem heitir ReiknaFlatarmalHrings public class Fasti_ReiknaFlatarmalHrings { /** Þetta forrit reiknar flatarmál hrings með því að * nota fasta (e. constant) */ final double PI = 3.14159; // Búum til fastann PI, þar sem PI er // fasti er ekki hægt að breyta gildi // á PI síðar í forritinu double radius; double flatarmal; Nokkrar æfingar í forritun bls. 19 Hallgrímur Arnalds

// Búum til tilvik af Scanner klasanum Scanner lesaaflyklabordi = new Scanner(System.in); System.out.print("Sláðu inn radius hrings: "); radius = lesaaflyklabordi.nextdouble(); // Reikna flatarmálið með því að nota fastann PI flatarmal = radius * radius * PI; // Birta niðurstöður á skjá System.out.println("Flatarmál hrings með radius " + radius + " er " + flatarmal); Æfingaverkefni með fasta Virdisauki (bok) (Virdisauki_fasti) Búið til forrit sem spyr um upphæð án virðisaukaskatts. Forritið skrifar síðan hver sú upphæð er með virðisaukaskatti. Í þessu forriti á að nota fasta (constant) til að geyma virðisaukaskattsprósentu. Gera má ráð fyrir að virðisaukaskattur sé 24.5%. Random tölur (tilviljnarkenndar tölur) Oft verða verkefninin sem við erum að forrita skemmtilegri ef við getum kallað fram tilviljunarkenndar tölur. Í þessari grein eru sýnd nokkur dæmi um hverning við getum kallað fram tilviljunarkenndar tölur. Sýnidæmi um forrit sem skrifar út tilviljunarkennda tölu á milli 0 og 1 // Búinn til klasi sem heitir Random1". Klasann þarf að vista // í skrá sem heitir Random1.java public class Random1 { /** main fall innan klasans skilgreint Forritið skrifar út tilviljunarkennda töluu á milli 0 og 1. Prófið að keyra þetta forrit nokkurm sinnum til að sannreyna að það komi tilviljunarkennd tala á þessu bili. */ double tala = Math.random(); System.out.println("Talan sem við fengum er " + tala); Sýnidæmi. Forrit sem skrifar út tilviljunarkennda heiltölu á milli 0 og 9 // Búinn til klasi sem heitir Random2". Klasann þarf að vista í skrá // sem heitir Random2.java public class Random2 { /** main fall innan klasans skilgreint Forritið skrifar út tilviljunarkennda heiltölu á milli 0 og 9 Prófið að keyra þetta forrit nokkurm sinnum til að sannreyna að það komi tilviljunarkennd tala á þessu bili. */ int tala = (int) (Math.random()*10); System.out.println("Talan sem við fengum er " + tala); Nokkrar æfingar í forritun bls. 20 Hallgrímur Arnalds

Æfingaverkefni úr tilviljunarkenndum tölum Teningakast (bok) Búið til forrit sem á að líkja eftir teningakasti. Forritið á að birta eina tilviljunarkennda tölu á bilinu frá 1 til 6, líkt og einum teningi hafi verið kastað upp. Yatzi kast (bok) (Yatzikast) Búið til forrit sem á að líkja eftir einu kasti í tengingspilinu yatzi. Í spilinu eru fimm teningum kastað upp í einu. Forritið á að birta fimm tilviljunarkenndar tölur á bilinu frá 1 til 6, líkt og fimm teningum hafi verið kastað upp. If setningar Sýnidæmi um If setningar Almennt lítur if setning út á eftirfarandi hátt. if (skilyrði) { // skipanir sem framkvæma á ef skilyrði er rétt (true) else { // skipanir sem framkvæma á ef skilyrði er ekki rétt (fales) Form if steningar getur verið einfaldara t.d. ef aðeins þar að framkvæma eina skipun inni í if setningu má sleppa slaufusvigum t.d. if (skilyrði) // skipun sem framkvæma á ef skilyrði er rétt (true) else // skipun sem framkvæma á ef skilyrði er ekki rétt (fales) einnig má sleppa else hlutanum ef einungis á að framkvæma eitthvað er skilyrði er rétt t.d. if (skilyrði) // skipun sem framkvæma á ef skilyrði er rétt (true) Skoðum nú dæmi um notkun if setnignar: Nokkrar æfingar í forritun bls. 21 Hallgrímur Arnalds

public class IfSetning { /** main fall innan klasans skilgreint */ // skilgreinum tvær integer breytur int x = 3; int y = 4; //Skrifum á skjá hvor breytan inniheldur hærra gildi // > er samanburðarvirki sem athugar hvort það sem er fyrir // framan sé stærra en það sem er fyrir aftan virkjann. Sjá // fleiri samanburðarvirkja í töflunni að neðan if (x > y) { System.out.println("x er staerra en y"); else { System.out.println ("x er minna en y") ; Samanburðarvirkjar Samanburðarvirkjar (Equality operators) Nafn tákn Dæmi niðurstaða minna en < boolean result = (4 < 7) true stærra en > boolean result = (3.1 > 3.1) false jafnt og == boolean result = (11 == 8) false minna en eða jafnt og <= boolean result = (41.1 <= 42) true stærra en eða jafnt og >= boolean result = (41.1 >= 42) false ekki jafnt og!= boolean result = (12!= 12) false Rökvirkjar Rökvirkjar (Boolean operators) Nafn tákn Dæmi niðurstaða og virki && boolean result = (4 < 7) && (3.1 > 3.1) false eða virki boolean result = (4 < 7) (3.1 > 3.1) true ekki! boolean result =!(11 == 8) true Hér mætti koma dæmi um forrit með samsettum rökvirkjum Nokkrar æfingar í forritun bls. 22 Hallgrímur Arnalds

Æfingaverkefni if setningar Góðan daginn 1 (bok) (Daginn1) Búið til forrit sem spyr um hvað klukkan er (aðeins klukkustundina). Ef klukkan er 18 eða minna skrifar forritið Góðan daginn en annars skrifar það Gott kvöld. Góðan daginn 2 (bok) (Daginn2) Búið til forrit sem spyr um hvað klukkan er (aðeins klukkustundina). Ef klukkan er 18 eða minna skrifar forritið Góðan daginn en annars skrifar það Gott kvöld. Ef sleginn er inn tala sem er 0 eða minni, eða tala sem er stærri en 24 á forritið að skrifa Rangur innsláttur. Minnsta tala 1 (Minnsta1) Búið til forrit sem spyr um tvær heiltölur. Forritið skrifar síðan hvort talan er minni. Ef tvisvar er slegin inn sama talan á forritið að skrifa Tölurnar eru jafn stórar. Minnsta tala 2 (Minnsta2) Búið til forrit sem spyr um þrjár heiltölur. Forritið skrifar síðan hver talnanna er minnst. Litrar/gallon (LitrarGallon) Búið til forrit umbreytir lítrum í gallon eða öfugt. Forritið spyr um hvort umbreyta eigi lítrum í gallon eða gallonum í lítra. Forritið spyr síðan um aðra stærðina en reiknar hina. Í einu galloni eru um 3,6 lítrar. Tommur/sentimetra (TommurCm) Búið til forrit umbreytir tommum í sentimetra eða öfugt. Forritið spyr um hvort umbreyta eigi tommum í sentimetra eða sentimetrum í tommur. Forritið spyr síðan um aðra stærðina en reiknar hina. Í einni tommu eru 2,53 sentimetrar. Árstíðir 1 (Arstidir1) Búið til forrit sem spyr um númer mánaðar. Forritið skrifar síðan hvort nú sé vetur, sumar, vor eða haust. Ef sleginn er inn talan 1 3 skrifast að það sé vetur, ef sleginn er inn talan 4 5 er vor, 6 8 er sumar, 9 10 er haust og 11 12 er vetur. Ef sleginn er inn talan sem er 0 eða minni eða 13 og hærri á að skrifa rangur innsláttur. Nafn mánaðar (Manudur1) Búið til forrit sem spyr um númer mánaðar. Forritið skrifar síðan hvað mánuðurinn heitir. Ef sleginn er inn tala sem er 0 eða minni eða 13 og hærri á að skrifa rangur innsláttur. Nokkrar æfingar í forritun bls. 23 Hallgrímur Arnalds

Aldur 1 (Aldur1) Búið til forrit sem spyr um aldur. Forritið á að bregðast mismunandi við eftir því hvaða tala er sleginn inn. Ef slegin er inn tala á bilinu: 0 19 þá á að skrifast út Vonandi ætlar þú í Háskólann í Reykjavík annars skrifast aðeins út Það var fróðlegt! Aldur_2 (Aldur2) Búið til forrit sem spyr um aldur. Forritið á að bregðast mismunandi við eftir því hvaða tala er sleginn inn. Ef slegin er inn tala á bilinu: 0 6 þá á að skrifast út Nú, svo þú ferð að byrja í skóla 7 15 Þá spyr forritið hvort viðkomandi ætli í menntaskóla og bregst við á mismunandi hátt eftir því hvort svarað er með J eða N. 16 105 Þá kveður forritið >105 Þá svarar forritið að líklega hafi viðkomandi svarað spurningunni vitlaust. Aldur_3 (Aldur3) Búið til forrit sem virkar á sama hátt og forritið á undan nema spurt er um fæðingarár. Forritið reiknar síðan aldur viðkomandi en er að öðru leyti eins og forrit í næstu æfingu á undan. SkatturIf (bok) (skatturif) Reikna staðgreiðslu skatts. Látið forritið spyrja um álagningarprósentu, persónuafslátt og laun. Staðgreiðslu má reikna með því að taka álagningarprósentu af launaupphæð og draga síðan persónuafslátt frá. Skatturinn má ekki vera neikvæður Forritið á að birta hver staðgreiðslan er. Vikulaun Búið til forrit sem reiknar vikulaun einstaklings. Forritið spyr um laun á klukkustund og fjölda unninna stunda í vikunni. Ef fjöldi unninna stunda er meiri en 40 á forritið að hækka tímakaup unninna stunda fram yfir 40 um 50%. Forritið reiknar síðan og skrifar út vikukaupið. Forritið spyr síðan hvort endurtaka eigi þessa vinnslu. Hlaupaár (bok) (Hlaupaar1) Búið til forrit sem spyr um ártal. Forritið skrifar síðan út hvort viðkomandi ár er hlaupaár eða ekki ( ár er hlaupaár ef 4 gengur upp í ártalinu,undantekning ef 100 gengur upp í en 400 ekki, en til að byrja með má gera ráð fyrir að fjórða hvert ár sé hlaupaár) Lögleg dagsetning. (dagsetning1) Búið til forrit sem spyr um dag, mánuð og ártal (þrjár heiltölur). Forritið skrifar síðan út hvort viðkomandi dagsetning sé lögleg eða ekki. Nokkrar æfingar í forritun bls. 24 Hallgrímur Arnalds

Lykkjur Lykkjur eru notaðar þegar endurtaka á sömu vinnslu nokkrum sinnum. Í C++ eru til þrjár gerðir af lykkjum, þ.e. while lykkja, do.. while lykkja og for lykkjur. Skoðum fyrst do while lykkju. do.. while lykkjur Almennt lítur do while lykkja út á eftirfarandi hátt. do { // skipanir endurtaka á while (skilyrði) Form while lykkju getur verið einfaldara t.d. ef aðeins á að endurtaka eina skipun. do // skipun endurtaka á while (skilyrði) Skoðum nú dæmi um notkun do while lykkju: // það þarf að importa Scanner klasanum // til að fá aðgang að honum // Búinn til klasi sem heitir ReiknaFlatarmalHrings public class do_while1 { /** Þetta forrit reiknar flatarmál hrings með því að * nota fasta (e. constant) */ final double PI = 3.14159; // Búum til fastann PI, þar sem PI er // fasti er ekki hægt að breyta gildi // á PI síðar í forritinu double radius; double flatarmal; // Búum til tilvik af Scanner klasanum Scanner lesaaflyklabordi = new Scanner(System.in); int svar=1; do { // Hér byrjar lykkjan, það sem er innan // lykkjunnar er endurtekið þar til // skilyrðið í lok lykkjunnar er ekki uppfyllt System.out.print("Sláðu inn radius hrings: "); radius = lesaaflyklabordi.nextdouble(); // Reikna flatarmálið með því að nota fastann PI flatarmal = radius * radius * PI; // Birta niðurstöður á skjá System.out.println("Flatarmál hrings með radius " + radius + " er " + flatarmal); System.out.println("Viltu reikna flatarmál annars hrings?: (1 ef já en 2 en nei) "); svar = lesaaflyklabordi.nextint(); // ef 1 er sett inn í breytuna svar verður // lykkjan endurtekin Nokkrar æfingar í forritun bls. 25 Hallgrímur Arnalds

while(svar==1); // Lykkjan er endurtekin á meðan // innihald breytunnar svar er 1 while lykkjur Almennt lítur while lykkja út á eftirfarandi hátt. while (skilyrði) { // skipanir endurtaka á Form while lykkju getur verið einfaldara t.d. ef aðeins á að endurtaka eina skipun. while (skilyrði) // skipun sem á að endurtaka Skoðum nú dæmi um notkun while lykkju: // það þarf að importa Scanner klasanum // til að fá aðgang að honum public class DoWhile1 { /** Main fall */ public static void main(string args[]) { char svar; // breyta sem geymir svar um hvort endurtaka eigi // vinnslu Scanner scanner = new Scanner(System.in); do { System.out.println ("Hallo \n "); System.out.println ("Heilsa aftur? ") ; String strsvar = scanner.next(); // fara þarf þessa leið til að // lesa char gildi þ.e. eitt // takn sem er ekki tala svar = strsvar.charat(0); while (svar == 'j' svar == 'J'); for lykkjur Almennt lítur for lykkja út á eftirfarandi hátt. for (frumstilling;skilyrði;framkvæmd í lok) { Skipanir sem á að endurtaka Skoðum nú dæmi um notkun for lykkju: // Forrit sem inniheldur lykkju sen telur frá einum upp í 10 public class Forlykkja { /** Main fall */ public static void main(string args[]) { Nokkrar æfingar í forritun bls. 26 Hallgrímur Arnalds

for (int teljari = 1; teljari <= 10; teljari++) { System.out.print(teljari + " "); Break skipunin public class TestBreak { /** Main method */ int sum = 0; int number = 0; while (number < 20) { number++; sum += number; if (sum >= 100) break; System.out.println("The number is " + number); System.out.println("The sum is " + sum); Continue skipunin public class TestContinue { /** Main method */ int sum = 0; int number = 0; while (number < 20) { number++; if (number == 10 number == 11) continue; sum += number; System.out.println("The sum is " + sum); Nokkrar æfingar í forritun bls. 27 Hallgrímur Arnalds

Æfingaverkefni lykkjur Bokstafur1 (bokstafur1) Búið til forrit sem biður notanda að slá inn bókstaf. Forritið svarar síðan þú hefur valið bókstafinn: og síðan skrifast réttur bókstafur út. Bokstafur2 (bok) (bokstafur2) Búið til forrit sem biður notanda að slá inn bókstaf. Forritið svarar síðan þú hefur valið bókstafinn: og síðan skrifast réttur bókstafur út. Forritið spyr síðan hvort endurtaka eigi þetta eða ekki. Flatarmál ferhyrnings endurtekning (Flartrmal_ferh_lykkja) Skrifið forrit sem reiknar flatarmál ferhyrnings. Forritið spyr um lengd og breidd ferhyrningsins en skrifar hvert flatarmál ferhyrningsins er. Forritið spyr síðan hvort endurtaka eigi þetta eða ekki. Heiltala lykkja (bok) (HeiltalaLykkja) Búið til forrit sem biður notanda að slá inn heiltölu. Forritið svarar síðan þú hefur valið töluna: og síðan skrifast réttur tölustafur út. Forritið spyr síðan notanda hvort hann vilji slá inn aðra heiltölu. Ef því er svarað játandi er vinnslan endurtekin þar til að notandi velur að slá ekki inn fleiri tölur. Talnabil1 Búið til forrit sem prentar allar tölur á ákveðnu bili, t.d. frá 10 upp í 100. Notandinn á að ákveða hvaða bil er valið. Talnabil2 Skrifið forrit sem les inn tvær heiltölur frá lyklaborði og prentar út á skjáinn allar tölur á bilinu á milli talnanna. Prentið út á skjáinn villuskilaboð ef engar tölur finnast á bilinu þ.e. tölurnar eru jafn háar eða önnur aðeins einum hærri en hin. Talnabil upp og niður (bok) (Talnabil3) Búið til forrit sem skrifar út allar tölur á ákveðnu bili frá byrjunartölu að lokatölu. T.d. ef bilið er frá 6 upp í 11 eiga að skrifast út tölurnar 6 7 8 9 10 11. í þessari röð Ef valin er valið er bilið frá 11 til 6 á að skrifast 11 10 9 8 7 6 í þessari röð. Notandinn á að ákveða hvaða bil er valið. Talnabil Oddatölur (bok) (Oddatolur) Búið til forrit sem skrifar út allar oddatölur á ákveðnu bili. T.d. ef bilið er frá 6 upp í 11 eiga að skrifast út tölurnar 7 9 og 11. Sama myndi skrifast út ef valið er bilið frá 7 upp í 12. Notandinn á að ákveða hvaða bil er valið. Nokkrar æfingar í forritun bls. 28 Hallgrímur Arnalds

Talnabil annað veldi (bok) Búið til forrit sem prentar allar tölur á ákveðnu bili og hvað talan í öðru veldi er. Notandinn á að ákveða hvaða bil er valið. Summa Búið til forrit sem leggur sama allar tölur á ákveðnu bili. T.d. ef bilið er frá 5 upp í 11 á niðurstaðan að vera 5+6+7+8+9+10+11 = 56. Notandinn á að ákveða hvaða bil er valið. Litrar/gallon valmynd (bok) (LitrarGallonMenu) Búið til forrit umbreytir lítrum í gallon eða öfugt. Forritið býður upp á þrjá valmöguleika sem eru: 1. Umbreyta gallon í litra 2. Umbreyta litrum í gallon 3. Hætta í forritinu Forritið spyr um hvort umbreyta eigi lítrum í gallon eða gallonum í lítra. Forritið endurtekur vinnslu þar til notandi velur að hætta. Forritið spyr síðan um aðra stærðina en reiknar hina. Í einu galloni eru um 3,6 lítrar. Tommur/sentimetra valmynd (TommurCmMenu) Búið til forrit umbreytir tommum í sentimetra eða öfugt. Forritið býður upp á þrjá valmöguleika sem eru: 1. Umreikna tommur í sentimetra 2. Umreikna sentimetra í tommur 3. Hætta í forritinu Forritið spyr um hvort umbreyta eigi tommum í sentimetra eða sentimetrum í tommur. Forritið spyr síðan um aðra stærðina en reiknar hina. Forritið endurtekur vinnslu þar til notandi velur að hætta. Í einni tommu eru 2,53 sentimetrar. Talnabil hropmerkt Búið til forrit sem prentar allar tölur á ákveðnu bili og hvað talan er hrópmerkt (þ.e. talan er margfölduð með öllum heiltölum sem eru lægri en viðkomandi tala). Notandinn á að ákveða hvaða bil er valið. Skattur lykkja (skattur_lykkja) Búið til forrit sem reiknar staðgreiðslu skatts fyrir nokkarar launaupphæðir. Látið forritið spyrja um álagningarprósentu, persónuafslátt og laun. Staðgreiðslu má reikna með því að taka álagningarprósentu af launaupphæð og draga síðan persónuafslátt frá (sjá t.d. lausn við verkefninu Skattur1). Skatturinn má ekki vera neikvæður Forritið á að birta hver staðgreiðslan er. Þegar forritið er búið að reikna staðgreiðslu einu sinni spyr það Nokkrar æfingar í forritun bls. 29 Hallgrímur Arnalds

hvort reikna eigi aftur, ef notandi svarar "já" þá spyr forritið aftur um laun og reiknar staðgreiðsluna miðað við sömu álagningarprósendu og persónuafslátt. Þetta er endurtekið þar til notandi svarar að ekki þurfi að endurtaka reikninginn. Dæmi um keyrslu þessa forrits gæti því verið: pesónuafsláttur? 29000 skattprósenta? 35 laun? 100000 Staðgreiðsla verður þá: 6000 viltu reikna fyrir aðra launatölu? já laun? 80000 Staðgreiðsla verður þá: 0 viltu reikna fyrir aðra launatölu? nei takk fyrir í dag. Margföldunartafla1 Búið til forrit sem skrifar úr eina línu í marföldunartöflu. Forritið spyr um hvaða línu eigi að skrifa. Ef t.d. er beðið um línu 3 ætti að skrifast: 3 sinnum tafla: 3 6 9 12 15 18 21 24 27 30 Margföldunartafla2 Búið til hreiðraða lykkju (þ.e. lykkju innan í lykkju) sem skrifar út 1 10 sinnum margföldunartöflurnar. (þ.e. 1 sinnum töfluna, 2 sinnum töfluna o.s.frv. upp í 10 sinnum töfluna) Greiðsluáætlun Búið til forrit til að reikna út greiðslur af láni með föstum afborgunum. Forritið á að skrifa út lista þar sem fram kemur (sjá meðfylgjandi dæmi) númer greiðslu, upphæð eftirstöðva fyrir greiðslu, upphæð afborgunar, upphæð vaxta og greiðsla alls. Eins og fram kom hér að framan er afborgun af höfuðstól alltaf sú sama. En vaxtagreiðslan er mismunandi, fyrst eru borgaðir vextir af öllu láninu og svo lækkar vaxtagreiðslan í hlutfalli við lækkun eftirstöðva. Gert er ráð fyrir að það séu mánaðarlegar greiðslur af láninu. Þegar tekið er lán má gera ráð fyrir að alltaf líði 1 mánuður frá lántökudegi til fyrsta afborgunardags. Notandi þarf að skrá inn upphæð láns, vaxtaprósentu og fjöldi afborgana. Til glöggvunar fylgir hér með hvaða niðurstöðu við eigum að fá ef við setjum inn lánsupphæð 120.000, fjöldi afborgana 12 og vexti 12%. Gera má ráð fyrir að mánaðarvextir séu ársvextir/12. Nr. greiðslu Eftirstöðvar Afborgun Vextir Greiðsla alls 1 120000.00 10000.00 1200.00 11200.00 2 110000.00 10000.00 1100.00 11100.00 Nokkrar æfingar í forritun bls. 30 Hallgrímur Arnalds

3 100000.00 10000.00 1000.00 11000.00 4 90000.00 10000.00 900.00 10900.00 5 80000.00 10000.00 800.00 10800.00 6 70000.00 10000.00 700.00 10700.00 7 60000.00 10000.00 600.00 10600.00 8 50000.00 10000.00 500.00 10500.00 9 40000.00 10000.00 400.00 10400.00 10 30000.00 10000.00 300.00 10300.00 11 20000.00 10000.00 200.00 10200.00 12 10000.00 10000.00 100.00 10100.00 Eftirfarandi formúlur má nota í þessum reikningum: afborgun af höfuðstól = upphæð / fjölda greiðsla vextir = eftirstöðvar fyrir greiðslu * vaxtaprósenta / 12 / 100 Eftirst.fyrir.gr = upphæð ((nr greidslu - 1) * afborgun) Spilið 21 Búið til forrit sem líkja á eftir því að við séum að spila 21 í tölvunni. Leikurinn fer þannig fram að tölvan byrjar á að láta leikmann spila. Tölvan gefur þá spil frá 1 fyrir ás upp í 13 fyrir kóng. Síðan spyr tölvan hvort leikmaður vilji fá annað spil. Tölvan leggur saman gildin á spilunum sem leikmaður hefur fengið og ef heildarsumman er stærri en 21 hefur leikmaður tapað spilinu en tölvan unnið. Ef leikmaður stoppar án þess að hafa sprungið gefur tölvan sjálfri sér spil. Tölvan notar þær reglur að hún stoppar ef heildarstigafjöldi er 16 eða meira en heldur annars áfram. Eftirfarandi reglur eru notaðar til að ákveða hver vinnur spilið: Ef sigafjöldi leikmanns er hærri en 21 þá hefur hann sprungið og tapað spilinu. Þá þarf tölvan ekki að gefa sjálfri sér spil. Ef leikmaður springur ekki en tölvan springur (þ.e. fær meira en 21) hefur leikmaðurinn unnið. Ef hvorki leikmaður né tölva springa, þá vinnur sá sem hefur fleiri stig. Ef tölva og leikmaður hafa jafn mörg stig þá vinnur tölvan. Gera má ráð fyrir að hvert spil gildi frá einum upp í 13. Dæmi um hvernig leikur getur spilast : (Það sem tölva skrifar er í þessum fonti, en það sem notandi slær inn í þessum) Nú hefst leikurinn: þú fékkst 9 og ert kominn með samtals 9, viltu fleiri spil? já þú fékkst 7 og ert kominn með samtals 16, viltu fleiri spil? já þú fékkst 6 og ert kominn með samtals 22, viltu fleiri spil? nei Þú sprakkst, tölvan vann. Heildarfjöldi spila: 1 Tölva hefur unnið 1 spil Þú hefur unnið 0 spil Viltu spila annað spil? já þú fékkst 8 og ert kominn með samtals 8, viltu fleiri spil? já þú fékkst 2 og ert kominn með samtals 10, viltu fleiri spil? já Nokkrar æfingar í forritun bls. 31 Hallgrímur Arnalds

þú fékkst 8 og ert kominn með samtals 18, viltu fleiri spil? nei tölvan fékk 3 tölvan fékk 4 tölvan fékk 10 tölvan fékk samtals 17 þú vannst leikinn Heildarfjöldi spila: 2 Tölva hefur unnið 1 spil Þú hefur unnið 1 spil Viltu spila annað spil? nei Static föll Sýnidæmi um einfalt fall Hér að neðan má sjá dæmi um forrit sem kallar á fall. Ekkert gagnaflæði á sér stað á milli forritsins og fallsins. Forritið skrifar alltaf eina línu, fær engar upplýsingar frá forritinu sem kallar á það og skilar engum gögnum til baka. // það þarf að importa Scanner klasanum // til að fá aðgang að honum public class HalloFall{ Scanner lesaaflyklabordi = new Scanner(System.in); System.out.println("Ræsi fall sem skrifar Hallo "); // Hér er fallið skrifahallo ræst skrifahallo(); // Hér heldur forritið áfram vinnslu, þegar keyrslu falls lýkur System.out.println("Fallið hefur lokið vinnslu "); /** * Skilgreining á fallinu skrifahallo(), Í fallinu er skrifuð út * ein líns á skjáinn */ public static void skrifahallo() { System.out.println( "Skrifa Halló í fallinu"); // Hér endar fallið skrifahallo() // Hér endar klasinn Sýnidæmi um fall með færibreytu en engu skilagildi Hér að neðan má sjá forrit sem kallar á fallið skrifagallon. Fallið skrifagallon á að reikna hversu mörg gallon eru í ákveðnum lítrafjölda og skrifa niðurstöðuna á skjá. Fallið fær inn upplýsingar þ.e. lítrafjöldann sem umreikna á í gallon. Fallið er void fall sem skilar engri niðurstöðu til baka til forritsins sem kallaði á fallið (fallið hefur ekki skilagildi). // það þarf að importa Scanner klasanum // til að fá aðgang að honum public class Gallon1{ Scanner lesaaflyklabordi = new Scanner(System.in); System.out.print("Sláðu inn fjölda lítra: "); // Lesnar inn upplýsingar um lítrafjölda sem á að umreikna í gallon double litrar = lesaaflyklabordi.nextdouble(); Nokkrar æfingar í forritun bls. 32 Hallgrímur Arnalds

// Kallað á fallið skrifagallon. Fallið fær inn upplýsingar um // lítarafjöldann sem á að umreikna yfir í gallon skrifagallon(litrar); public static void skrifagallon(double lit) { // Þegar fallið er keyrt upp, er búin til breytan lit, og gildið sem // er í breytunni litrar er afritað yfir í breytuna lit // // búin til breytan gall, og niðurstaða sett inn í breytuna double gall = lit/3.6; // niðurstaða skrifuð á skjá, en engum upplýsingum er skilað til // forrits sem kallar á fallið System.out.printf(lit + " lítrar jafngidla: " + gall + " gallonum"); Sýnidæmi um fall með færibreytu og skilagildi Hér að neðan má sjá forrit sem kallar á fallið reiknagallon. Fallið reiknagallon á að reikna hversu mörg gallon eru í ákveðnum lítrafjölda og skila þeirri tölu sem skilagildi. Eins og main forritið kallar á fallið má sjá að fallið þarf að skila einhverju skilagildi, í þessu tilfelli double tölu. Fallið gerir ráð fyrir að fá inn eitt gildi þ.e. lítrafjöldann. // það þarf að importa Scanner klasanum // til að fá aðgang að honum public class Gallon2{ Scanner lesaaflyklabordi = new Scanner(System.in); System.out.print("Sláðu inn fjölda lítra: "); double litrar = lesaaflyklabordi.nextdouble(); double gallon = reiknagallon(litrar); // hér færist framvinda // yfir í fallið, en fallið skilar niðurstöðu System.out.printf(litrar + " lítrar jafngidla: " + gallon + " gallonum"); public static double reiknagallon(double lit) { double gall = lit/3.6; return gall; Sýnidæmi um fall sem skilar rökgildi (true eða false) Skoðum nú dæmi um fall sem skilar rökgildi (true eða false). Við getum notað slíkt fall t.d. í if setningu. Í þessu dæmi búum við til forrit sem spyr um tvær tölur og svarar hvort tölurnar eru eins eða ekki. Við búum til fall sem segir til um hvort tölurnar eru eins. (ekki sérlega nytsamlegt fall þar sem samanburðarvirkinn == gerir sama hlutinn). // það þarf að importa Scanner klasanum // til að fá aðgang að honum public class Rokgildi{ Scanner lesaaflyklabordi = new Scanner(System.in); System.out.println("Sláðu inn fyrri töluna "); int tala1 = lesaaflyklabordi.nextint(); System.out.println("Sláðu inn seinni töluna "); Nokkrar æfingar í forritun bls. 33 Hallgrímur Arnalds

int tala2 = lesaaflyklabordi.nextint(); // Hér er fallið somutolur ræst sem skilar annað hvort // true eða false, af því að fallið skilar skilagildi // af taginu boolean if (somutolur(tala1,tala2)) System.out.println("Sömu tölur "); else System.out.println("Ekki sömu tölur "); /** * Dæmi um hvernig fallið somutolur er útfært má sjá hér að neðan: */ public static boolean somutolur(int t1, int t2) { if (t1==t2) return true; else return false; // Hér endar fallið // Hér endar klasinn eða public static boolean somutolur(int t1, int t2) { if (t1==t2) return true; return false; eða public static boolean somutolur(int t1, int t2) { return t1==t2; Æfingadæmi um föll með gildisfæribreytum en ekki skilagildi: Flatarmál ferhyrnings Skrifið fall sem reiknar flatarmáli ferhyrnings og skrifar hvert það á skjáinn. Fallið á að fá inn tvær rauntölur, önnur sem táknar hæðina en hin breiddina. Skrifið einnig aðalforrit sem notar þetta fall. Margtafla1_fall Leysið verkefnið sem lýst er í verkefninu Margfoldunartafla1 en notið nú fall sem skifar út línuna. Fallið fær sem inntaksfæribreytu númer línunnar sem skrifa á. Nokkrar æfingar í forritun bls. 34 Hallgrímur Arnalds

Margtafla2_fall Leysið verkefnið sem lýst er í verkefninu Margfoldunartafla2 en notið nú tvö föll sem leysa þetta verkefni þ.e. fallið úr næsta verkefni að ofan og fall sem skifar alla töfluna (10 línur) og notar þá fallið sem við eigum til að skrifa eina línu. Talnabil Fall 2 Skrifið fall sem fær tvær heiltölur sem inntaksfæribreytur og prentar út á skjáinn allar tölur á bilinu á milli talnanna. Fallið stöðvar keyrslu forritsins og prentar út villuboð ef engar tölur finnast á bilinu þ.e. tölurnar eru jafn háar eða önnur aðeins einum hærri en hin.. Veldi Skrifið fallið Veldi sem tekur tekur tvö heiltölu viðföng, tala og veldisvisir. Fallið skilar heiltölu sem er viðfangið tala í veldinu veldisvisir. Skrifið lítið forrit sem prófar fallið. Ekki er leyfilegt að nota innbyggð stærfræðiföll við útfærsluna. Modulus Búið til fallið Modulus sem hefur sömu virkni og modulus virkinn (%) í C++. Fallið tekur tvö heiltölu viðföng og skilar heiltölu niðurstöðu. Ekki er leyfilegt að nota % virkjann við útfærsluna. Búið til forrit sem prófar fallið og les inn tvær heiltölur frá lyklaborðinu og prentar út á skjáinn modulus talnanna. Æfingadæmi um föll með gildisfæribreytum og skilagildi: Flatarmál ferhyrnings Skrifið fall sem skilar flatarmáli ferhyrnings. Fallið á að fá inn tvær rauntölur, önnur sem táknar hæðina en hin breiddina. Skrifið einnig aðalforrit sem notar þetta fall til að skrifa út hvert flatarmálið er. Flatarmál hrings (bok) Skrifið fall sem skilar flatarmáli hrings. Fallið á að fá inn eina rauntölu sem radius hringsins. Litrar/gallon með falli, valmynd (bok) (LitrarGallonFallMenu) Búið til forrit umbreytir lítrum í gallon eða öfugt. Forritið býður upp á þrjá valmöguleika sem eru: 1. Umbreyta gallon í litra 2. Umbreyta litrum í gallon 3. Hætta í forritinu Forritið spyr um hvort umbreyta eigi lítrum í gallon eða gallonum í lítra. Forritið endurtekur vinnslu þar til notandi velur að hætta. Forritið spyr síðan um aðra stærðina en reiknar hina. Í einu galloni eru um 3,6 lítrar. Nokkrar æfingar í forritun bls. 35 Hallgrímur Arnalds