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

Like dokumenter
Java útgáfa /2/2008

Java útgáfa /6/2008

Lausnir Nóvember 2006

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

Verkefnahefti 3. kafli

Ordliste for TRINN 1

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

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

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

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

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

R3123A Markarfljótsvirkjun B

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

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

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

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

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

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

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

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.

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

Nutricia. næringardrykkir

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

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

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

Leiðbeiningar

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.

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

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

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

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

Magn og uppspretta svifryks

EFNISYFIRLIT. Sproti 1a Verkefnahefti til ljósritunar

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

Islandsk bøyingsskjema

Akureyri. heiði Sýndu rétt hitastig á mælunum. Skráðu mismuninn á hitastiginu. Skoðaðu við staðina sem

Lýsing á skrá og leiðbeiningar

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

Meginreglur um bótaábyrgð eignarnema

Nokkur blöð úr Hauksbók

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

Programmering i C++ Løsningsforslag Eksamen høsten 2005

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

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

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

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

Bergen = Stavanger = Trondheim = Fredrikstad/Sarpsborg = Porsgrunn/Skien = Tromsö = 65.

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

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

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5

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


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

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

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

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

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

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

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

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

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

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

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

Eksamensoppgave i IMT1082 Objekt-orientert programmering

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

Handbók í hönnun rafkerfa

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

Hvað ræður skattalegu heimilisfesti lögaðila skv. íslenskum skattarétti og ákvæðum tvísköttunarsamninga

Vöktunarskýrsla 2016 fyrir Arnarlax hf. Laxeldi í sjó við Haganes í Arnarfirði

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

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

Kontinuasjonseksamen

Eksamen. Objekt-orientert programmering

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

Øvingsoppgaver i norrønt


Almennt um bókhald ríkisins

Kontinuasjonseksamen

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

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

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

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

KÖNNUNARSKURÐIR Í SVONEFNDA ÞORLÁKSBÚÐ Í SKÁLHOLTI

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

sambærilegum dómum er átt við að atvikalýsingar séu svipaðar, ákært sé fyrir sömu ákvæði hegningarlaganna og að dómur hafi fallið á svipuðum tíma.

PÆLINGAR UM NPA EFNI:

Eksamen. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt)

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

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

Kontinuasjonseksamen

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

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Alltaf sami Grallarinn?

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

Eksamen. Objekt-orientert programmering KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

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

föllum tölum kynbeygingu lokaður flokkur opnir flokkar óákveðin fornöfn persónufornöfn afturbeygð fornöfn spurnarfornöfn eignarfornöfn

Transkript:

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

síðast breytt: 15/8/06 Tilgangur þ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. Lausnir hafa verið settar inn með nokkrum dæmum en öðrum ekki. Þessi verkefni eru hugsuð sem æfingaverkefni sem nota má með kennslubók en ekki sem sjálfstæð kennslubók. Nota má þessi verkefni til að æfa sig í mismunandi forritunarmálum, en í þessari útgáfu eru tekin dæmi í C++. Til er önnur útgáfa þessa heftis þar sem dæmi úr Pascal eru notuð. Hverju verkefni er gefið ákveðið nafn en stefnt er að því að láta keyranlegt forrit fylgja með fyrir notendur að skoða virkni forritsins. Þannig heitir keyranleg útgáfa af fyrsta verkefninu hallo.exe. Sé notuð rafræn útgáfa þessa skjals er mögulegt er að prufa keyranlega útgáfu með því að smella á Virkni forrits en að sjálfsögðu gengur það ekki sé notuð prentuð útgáfa. Hugmyndir að fleiri verkefnum eru vel þegnar. Ekki er nægilegt að hafa einungis þetta verkefnahefti ef læra á C++ heldur þarf einnig kennslubók eða kennsluhefti. Aragrúi kennslubóka er til sem kennir C++ en einnig eru fjölmargar netsíður sem áhugasamir geta nýtt sér á endurgjalds. Vil ég þá t.d. visa á síðuna: http://www.cplusplus.com/doc/tutorial/ margir linkar: http://www.onesmartclick.com/programming/c-cplusplus.html Þar má finna leiðbeiningar og kennslu sem nota má til að leysa flest þau verkefni sem hér eru. Kveðja Hallgrímur Arnalds Fyrsta forritið Texti skrifaður á skjá Sýnidæmi1. Forrit sem skrifar texta. // Fyrsta C++ forritið int main () cout << "Hello World!"; Nokkrar æfingar í forritun bls. 2 Hallgrímur Arnalds

Sýnidæmi1. Skýringar // Fyrsta C++ 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. Setningar sem byrja á # tákninu eru stýringar fyrir forþýðanda forritsins. Hér að forritið noti iostream header file. Nauðsynlegt til að geta notað inntaks- og úttaksskipanir (cin og cout) int main () Hér byrjar aðalforritið. Hér byrjar framkvæmd forritsins. Forritið er síðan innan slaufusviganna () cout << "Hello World"; cout er notað til að skrifa út á skjá. Á eftir cout þarf að setja << og síðan það sem skrifa á. Ef skrifa á texta þarf að afmarka textann með gæsalöppum. Skipunin endar á ; en allar keyranlegar skipanir enda á ; return skipunin orsakar að aðalforritið, main(), hættir keyrslu. Æfingaverkefni Hallo (Hallo) Búið til forrit sem skrifar hallo á skjáinn og bíður síðan þar til notandi ýtir á einhvern hnapp. 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á í C++ í töflu 1. (Þetta er ekki tæmandi listi heldur einungis dæmi um nokkur tög Tafla 1. Nokkrar æfingar í forritun bls. 3 Hallgrímur Arnalds

Tag (e. Type) Innihald Dæmi int heiltala 1, 251, -71 float rauntala 7., 7.553, -0.33 double rauntala 7., 7.553, -0.33 char bókstafur, tákn A, a, #, 4 bool rökgildi true, false string Mörg tákn Jón, Jón Jónsson (ekki grunntag) 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 Samanburðarvirkjar Samanburðarvirkjar (Equality operators) Nafn tákn Dæmi niðurstaða minna en < bool result = (4 < 7) true stærra en > bool result = (3.1 > 3.1) false jafnt og == bool result = (11 == 8) false minna en eða jafnt og <= bool result = (41.1 <= 42) true stærra en eða jafnt og >= bool result = (41.1 >= 42) false ekki jafnt og!= bool result = (12!= 12) false Rökvirkjar Nokkrar æfingar í forritun bls. 4 Hallgrímur Arnalds

Rökvirkjar (Boolean operators) Nafn tákn Dæmi niðurstaða og virki && bool result = (4 < 7) && (3.1 > 3.1) false eða virki bool result = (4 < 7) (3.1 > 3.1) true ekki! bool result =!(11 == 8) true Sýnidæmi2. Forrit sem notar breytur og virkja. // Forrit sem notar breytur. Forritið margfaldar saman // tvær tölur og skrifar niðurstöðu á skjá int main () // skilgreini breytur: int a, b; // a og b eru heiltölubreytur, þ.e. geta einungis // geymt heiltölur int result; // result er heiltölubreyta // Set gildi í breyturnar a og b a = 4; // = er gildistökuvirki þ.e. tekur það sem er hægra megin // við (hér er talan 4) virkjann og setur // í breytuna sem er vinstra megin við virkjann (hér í //breytuna sem heitir a b = 3; // reikna niðurstöðu og set í breytuna result result = a * b; // reiknuð niðurstaða a * b áður en niðurstaða // sett inn í breytuna result // skrifa niðurstöðun á skjá: cout << result; // láta forritið hætta keyrslu: Sýnidæmi2b. Forrit sem notar breytur og virkja. Þetta dæmi er eins og fyrra dæmi nema gildi er lesið í breytur af lyklaborði og einnig er forritið stöðvað í lokin til að síðustu skilaboðin sjáist. // Forrit sem notar breytur. Forritið margfaldar saman // tvær tölur og skrifar niðurstöðu á skjá Nokkrar æfingar í forritun bls. 5 Hallgrímur Arnalds

int main () // skilgreini breytur: int a, b; // a og b eru heiltölubreytur, þ.e. geta einungis // geymt heiltölur int result; // result er heiltölubreyta // Les af lyklaborði gildi breytanna a og b cout << "Sladu inn fyrra gildið (heiltala) "; cin >> a; // cin skipunin notuð til að lesa inn gildi cout << "Sladu inn sidara gildið (heiltala) "; cin >> b; // reikna niðurstöðu og set í breytuna result result = a * b; // reiknuð niðurstaða a * b áður en niðurstaða // sett inn í breytuna "result" // skrifa niðurstöðun á skjá: cout << "Margfeldi thessara talna er: " << result; // stöðvar forrit til að útskrift sjáist // láta forritið hætta keyrslu: Æfingaverkefni með breytum og virkjum. 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. Virkni forrits 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. Virkni forrits 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. Virkni forrits Nokkrar æfingar í forritun bls. 6 Hallgrímur Arnalds

Gildistökusetningar Æfingaverkefni gildistökusetningar og segðir Litrafjoldi (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. Virkni forrits Virðisauki (Virdisauki1) Búið til forrit sem spyr um upphæð án virðisaukaskatts. Forritið skrifar síðan hver sú upphæð er með virðisaukaskatti. 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.14). 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 (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á. Skatturinn má ekki vera neikvæður Forritið á að birta hver staðgreiðslan 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ð búa til forrit með þessum segðum. Nokkrar einfaldar reiknisegðir: Hverju skila eftirfarandi segðir: Nokkrar æfingar í forritun bls. 7 Hallgrímur Arnalds

2 + 3 * 8 8 * 3 + 2-9 4 * 2 21 / 3 / -2 21 / 2 / -2 27 3 8 9 / 2 9.0 / 2.0 9.0 / 2 8 % 3 1 % 2 Nokkrar segðir með tagbreytingum: Hverju skila eftirfarandi segðir: (int) 7.9 / 2 (double) 9 / 2 int(2.7 + 0.5) int(2.4 + 0.5) int(0.751 * 2 + 0.5) / 2.0 int(0.749 * 2 +0.5) / 2.0 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) Vefpróf með svipuðum spurningum. Nokkrar æfingar í forritun bls. 8 Hallgrímur Arnalds

Fastar Æfingaverkefni með fasta Virdisauki (Virdisauki2) 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. If setningar 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: //include vegna cout // skilgreinum tvær integer breytur int x = 3; int y = 4; //Skrifum á skjá hvor breytan inniheldur hærra gildi if (x > y) cout << "x er staerra en y" << endl; Nokkrar æfingar í forritun bls. 9 Hallgrímur Arnalds

else cout << "x er minna en y" << endl; Æfingaverkefni if setningar Góðan daginn 1 (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 (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. 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. Nokkrar æfingar í forritun bls. 10 Hallgrímur Arnalds

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. Hlaupaár. (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. Switch setningar Æfingaverkefni switch skipanir Aldur_2_sw Notið switch setningu til að leysa aldur_2 verkefnið, þ.e. búa 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. Nokkrar æfingar í forritun bls. 11 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: char svar; // breyta sem geymir svar um hvort endurtaka eigi // vinnslu do cout << "Hallo \n "; cout << "Heilsa aftur? " ; cin >> svar; while (svar == 'j' svar == 'J'); 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: Nokkrar æfingar í forritun bls. 12 Hallgrímur Arnalds

char svar; // breyta sem geymir svar um hvort endurtaka eigi vinnslu svar = 'j'; // tryggja að farið sé í lykkju while (svar == 'j' svar == 'J') cout << "Hallo \n "; cout << "Heilsa aftur? " ; cin >> svar; 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 while lykkju: // Forrit sem inniheldur lykkju sen telur frá einum upp í 10 for (int teljari = 1; teljari <= 10; teljari++) cout << teljari << endl; Næst sjáum við dæmi um lykkju sem telur þar til notandi segir að eigi að hætta: // Forrit sem telur þar til notandi lætur það hætta char svar; for (int teljari = 1; svar!= 'N'; teljari++) cout << teljari << endl; cout << "Halda afram (J/N): "; cin >> svar; Nokkrar æfingar í forritun bls. 13 Hallgrímur Arnalds

Æfingaverkefni - lykkjur Bokstafur2 (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. Forritið spyr síðan hvort endurtaka eigi þetta eða ekki. Heiltala - lykkja 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 - annað veldi 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ð. 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ð. 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 Nokkrar æfingar í forritun bls. 14 Hallgrímur Arnalds

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) Virkni forrits 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. // Forrit sem notar fall void skrifa_hallo(); cout << "Daemi um fall sem skrifar eitt ord\n "; skrifa_hallo(); void skrifa_hallo() cout << "Hallo"; Sýnidæmi um fall með gildisfæ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. Þar sem lítrafjöldinn á ekki að breytast inni í fallinu er eðlilegt að nota gildisfæribreytu. cout << "Sladu inn litrafjolda: " ; double litrar, gallon; cin >> litrar; gallon = reiknagallon(litrar); cout << "thad eru: " << gallon << gallon"; Dæmi um hvernig fallið er útfært má sjá hér að neðan: Nokkrar æfingar í forritun bls. 15 Hallgrímur Arnalds

double reiknagallon(double litrar) return(litrar / 3.6); Sýnidæmi um void fall með tilvísunarfæribreytu. Skoðum hvernig við getum leyst sama verkefni með void falli og tilvísunarfæribreytu. Skoðið vel hver munurinn er, bæði muninn á aðalforritinu og fallinu sjálfu. cout << "Sladu inn litrafjolda: " ; double litrar, gallon; cin >> litrar; reiknagallon2(litrar,gallon); cout << "thad eru: " << gallon << " gallon"; Dæmi um hvernig fallið er útfært má sjá hér að neðan: void reiknagallon2(double litrar, double& gallon) gallon = litrar /3.6; 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). cout << "Sladu inn tvaer tolur: " ; int tala1, tala2; cin >> tala1 >> tala2; if (somutolur(tala1,tala2)) cout << "Somu tolur " << endl; else cout << "Ekki somu tolur " << endl; Dæmi um hvernig fallið somutolur er útfært má sjá hér að neðan: bool somutolur(int t1, int t2) if (t1==t2) Nokkrar æfingar í forritun bls. 16 Hallgrímur Arnalds

eða return true; else return false; bool somutolur(int t1, int t2) if (t1==t2) return true; return false; eða bool somutolur(int t1, int t2) return t1==t2; Æfingadæmi um fall án færibreytna og skilagildis Stoppa Skrifið fallið stoppa. Fallið stöðvar forrit, biður notanda að ýta á einhvern hnapp til að halda áfram. Þegar notandi gerir það heldur forritið áfram. (Ábending: nota getch() til að stöðva forrit. Skrifið einnig forrit til að prófa fallið Æ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 á. 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. Nokkrar æfingar í forritun bls. 17 Hallgrímur Arnalds

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 Skrifið fall sem skilar flatarmáli hrings. Fallið á að fá inn eina rauntölu sem radius hringsins. Talnabil - Fall 1 Skrifið fall sem fær tvær heiltölur sem inntaksfæribreytur og prentar út á skjáinn allar tölur á bilinu á milli talnanna. Fallið skilar skilagildinu false ef engar tölur finnast á bilinu þ.e. tölurnar eru jafn háar eða önnur aðeins einum hærri en hin, annars skilar það skilagildinu true. Hlaupaár. Búið til fall sem tekur inn eina heiltölu sem táknar ár en skilar til baka true ef viðkomandi ár er hlaupaár, en annars false. ( ár er hlaupaár ef 4 gengur upp í ártalinu, undantekning ef 100 gengur upp í en 400 ekki) Nokkrar æfingar í forritun bls. 18 Hallgrímur Arnalds

Dagafjöldi frá áramótum. Búið til fall sem tekur inn þrjár heiltölur þ.e. dag, mánuð og ár. Fallið á að skila dagafjölda frá áramótum. (Þið ráðið hvort gert er ráð fyrir hlaupaári eða ekki) Æfingadæmi um föll með gildisfæribreytum og tilvísunarfæribreytum: Flatarmál og ummál ferhyrnings Skrifið fall sem skilar flatarmáli og ummáli ferhyrnings (með tilvísunarfæribreytum). Fallið á að fá inn tvær rauntölur, önnur sem táknar hæðina en hin breiddina, en skila flatarmálinu og ummálinu. Flatarmál og ummál ferhyrnings2 Skrifið fall sem skilar flatarmáli og ummáli ferhyrnings (með tilvísunarfæribreytum). Fallið á að fá inn tvær rauntölur, önnur sem táknar hæðina en hin breiddina, en skila flatarmálinu og ummálinu. Latið fallið einnig skila rökgildi sem skilagildi. Gildið á að vera true ef fallið fær inn lengd og breidd sem eru stærri en 0, en false ef annaðhvort lengdin eða breiddin eru 0 eða minni. Flatarmál og ummál hrings Skrifið fall sem skilar flatarmáli og ummáli hrings (með tilvísunarfæribreytum). Fallið á að fá inn eina rauntölu sem radius hringsins, en skila flatarmálinu og ummálinu. Fjölvirkni Æfingadæmi - fjölvirkni Flatarmál fjölvirkni (overloading), kafli 3.6 Skrifið fall sem skilar flatarmáli ferhyrnings eða hrings. Ef fallið fær inn tvær færibreytur, táknar önnur hæðina en hin breiddina. Ef fallið fær inn eina færibreytu táknar hún radius hringsins. Nokkrar æfingar í forritun bls. 19 Hallgrímur Arnalds

Fylki Fylki (e. array) er gagnagrind eða gagnaskipan sem gerir okkur mögulegt að gefa mörgum breytum sem allar eru af sama tagi eitt sameiginlegt nafn. Ein ákveðin breyta eða stak í fylkinu fær ákveðið númer til að aðgreina það frá öðrum stökum. (e. index eða subscript). Við getum hugsað okkur fylki sem safn af númeruðum minnishólfum eða kössum þar sem hvert hólf inniheldur eitt gildi. Númer kassans er þá númer staksins í fylkinu. Skilgreining fylkja Skilgreining fylkis er lík skilgreiningu á breytu. Fyrst kemur tag fylkisins, síðan nafn og á eftir nafninu kemur fjöldi staka í fylkinu innan hornklofa. Stærð fylkisins er alltaf heiltala. Sem dæmi gæti fylki innihaldið mánaðarlegt meðalhitastig í Reykjavík á einu ári. Þá mætti skilgreina fylkið á eftirfarandi hátt: double man_hiti[12]; Þessi skilgreining verður til þess að þýðandi forritsins tekur frá pláss fyrir 12 heiltölur þar sem fyrsta heiltalan heitir man_hiti[0], væntanlega meðalhitastig janúarmánaðar. Á sama hátt verður þá hitastig desembermánaðar geymt í man_hiti[11] Nota má fasta til að geyma stærð fylkis t.d. const int MANFJ = 12; double man_hiti[manfj]; Sýnidæmi um notkun fylkis í forriti const int MANFJ = 12; double man_hiti[manfj]; for (int i=0 ; i<=11 ; i++) cout << "hitastig i manudi " << i+1 << "? "; cin >> man_hiti[i]; for (int i=0 ; i<=11 ; i++) cout << "hitastig i manudi " << i+1 << " er " << man_hiti[i] << endl; Nokkrar æfingar í forritun bls. 20 Hallgrímur Arnalds

Æfingadæmi - fylki Manhitastig2 Búið til forrit sem les inn af lyklaborði gildi í fylkið man_hiti sem nefnt er hér að framan. Látið forritið reikna meðalhitastig árs, lægsta hitastig og hæsta hitastig ársins. Nafn Búið til forrit sem biður notanda að slá inn fornafn. Forritið svarar þá Sæll og síðan nafn viðkomandi. Vikulaun (Vikulaun_fylki1) Búið til forrit sem reiknar vikulaun einstaklings. Forritið spyr um laun á klukkustund og fjölda unninna stunda í vikunni. Forritið á einnig að spyrja um nafn einstaklings og númer viku. Forritið reiknar síðan vikukaupið. Vikukaupið er fjöldi unninna stunda margfaldað með tímakaupinu. Að lokum á forritið að skrifa nafn einstaklingsins ásamt vikulaunum og vikunúmeri. Forritið gæti t.d. skrifað út: Jon hefur 12240.00 kronur i vikulaun i viku 40 Ýmislegt Æfingadæmi Tákn Skrifið forrit sem les inn af lyklaborði heiltölur á bilinu 0 til 255 og prentar út skjáinn tákn úr ASCII töflunni í því sæti sem lesið var inn. Þ.e. ef t.d. er slegin er inn talan 65 þá prentast út táknið A. Látið forritið hætta keyrslu þegar slegin er inn talan 0. Prímtölur Skrifið forrit sem les inn heiltölu frá lyklaborði og prentar út allar prímtölur (prime numbers) frá 1 upp í töluna sem slegin var inn. Prímtala er jákvæð heiltala stærri en 1 (1 er ekki prímtala, heldur sérskilyrði) sem er eingöngu deilanleg með 1 og einni annarri jákvæðri heiltölu þ.e. sjálfri sér. Samsett gagnatög Dæmi um forrit sem notar samsett gagnatag (struct) struct Person int aldur; Nokkrar æfingar í forritun bls. 21 Hallgrímur Arnalds

int haed; ; Person jon; Person gunna; gunna.aldur = 52; gunna.haed = 177; cout << "Hversu stor er Jon? "; cin >> jon.haed; cout << "Hversu gamall er Jon? "; cin >> jon.aldur; double medalaldur = (jon.aldur + gunna.aldur) / 2.; cout << "Medalaldur Jons og Gunnu er: " << medalaldur; Æfingadæmi - gagnatög Samsett gagnatag fyrir dagsetningu Skrifið skilgreiningu á samsettu gagnatagi (structure) fyrir dagsetningu. Gagnatagið samanstendur af þremur heiltölum fyrir dag, mánuð og ár. Búið síðan til forrit sem sem skilgreinir eina breytu af þessu tagi, spyr um ákveðna dagsetningu (t.d. afmælisdag) og setur í breytuna. Samsett gagnatag fyrir ferhyrning Skrifið skilgreiningu á samsettu gagnatagi (structure) fyrir ferhyrning. Gagnatagið samanstendur af tveimur heiltölum fyrir lengd og breidd. Búið síðan til forrit sem sem skilgreinir eina breytu af þessu tagi, spyr um lengd og breidd ferhyrningsins og setur í breytuna. Klasar Æfingadæmi - klasar Klasinn hringur Búið til klasa sem inniheldur einn gagnalið sem táknar radius hrings. Klasinn á einnig að innihalda tvö föll til að reikna flatarmál hringsins og ummál hringsins. Búið síðan til aðalforrit sem spyr um radius hrings, og notar síðan föllin í klasanum til að birta faltarmál hringsins og ummál hringsins. Klasinn ferhyrningur Búið til klasa sem inniheldur tvo gagnaliði sem tákna lengd og breidd ferhyrnings. Klasinn á einnig að innihalda tvö föll til að reikna flatarmál ferhyrningsins og ummál ferhyrningsins. Búið síðan til aðalforrit sem spyr um lengd og breidd ferhyrnings, og notar síðan föllin í klasanum til að birta faltarmál ferhyrningsins og ummál ferhyrningsins Nokkrar æfingar í forritun bls. 22 Hallgrímur Arnalds

Klasinn dagsetning Skrifið skilgreiningu á klasanum dagsetning án þess að útfæra föllin. Klasinn hefur einka heiltölubreytur fyrir dag, mánuð og ár (þrjár breytur). Smiðir eru tveir. Færibreytulaus smiður núllstillir allar breytur og smiður með þremur færibreytum stillir dag, mánuð og ár í ákveðin gildi. Í klasanum er eitt fall (sla_inn_dagsetningu) sem gefur notandanum kost á að slá inn dagsetningu (dag, mánuð og ár). Einnig er fall (birta) sem er notað til að birta upplýsingarnar í tilviki á skjá. Í klasanum er einnig eitt fall sem skilar svargildi sem er true ef árið í tilvikinu er hlaupár, en false ef árið er ekki hlaupár. Útfærið síðan föllin fyrir utan klasann. Klasinn vinnutimi Skrifið skilgreiningu á klasanum vinnutimi án þess að útfæra föllin. Klasinn hefur einka heiltölubreytu fyrir starfsmannanúmer og einka rauntölubreytu fyrir vinnustundir. Smiðir eru tveir. Færibreytulaus smiður nullstillir báðar breytur og smiður með tveimur færibreytum stillir starfsmannnúmer og vinnustundir í ákveðin gildi. Í klasanum er eitt fall (sla_inn_numer) sem gefur notandanum kost á að slá inn starfsmannanúmer og annað fall (sla_inn_stundir) sem gefur notandanum kost á að slá inn vinnustundir. Einnig er fall (birta) sem er notað til að birta upplýsingarnar í tilviki á skjá. Útfærið síðan föllin fyrir utan klasann. Klasinn minnisatridi Skrifið klasa fyrir minnisatriði. Klasinn hefur dagsetningu (dagur, mánuður og ár) og textastreng (mest 40 stafir) sem er minnisatriðið. Færibreytulaus smiður núllstillir dagsetninguna og tæmir textastrenginn. Sitt hvort fallið er notað til að lesa inn dagsetninguna annars vegar og minnisatriðið hins vegar. Svo er fall, birta, sem birtir minnisatriði á skjá ásamt dagsetningu. Aðalforrit býður notandanum upp á að skrá nýtt atriði, skoða öll minnisatriði eða hætta. Alls má geyma 100 minnisatriði en þau geymast að vísu aðeins á meðan forritið er í gangi. Skrifið klasann, útfærið föllin og skrifið svo aðalforritið sem notar klasann eins og lýst er hér að ofan. Sýnidæmi fyrir klasa. Klasinn land. Klasinn land Skrifið klasann land sem geymir nokkrar upplýsingar um land. Klasinn innheldur 4 gagnaliði sem eru íbúafjöldi í landinu, stærð landisins í ferkílómeturm, nafn höfuðborgar og nafn heimsálfu sem landið tilheyrir. Íbúafjöldi og stærð lands eru heiltölur, nafn höfuðborgarinnar er fylki af 30 stöfum og nafn heimsálfu er skilgreint sem strengur. Nokkrar æfingar í forritun bls. 23 Hallgrímur Arnalds

Klasinn hefur tvo smiði annan færibreytulausan en hinn með fjórum færibreytum sem báðir frumstilla upplýsingarnar í klasanum. Klasinn hefur föllin fa_nafn og fa_staerd sem skila nafni höfuðborgarinnar og stærð landsins og einnig föllin setja_nafn og setja_staerd sem setja upplýsingar í klasann. Í klasanum er einnig fallið thettbyli sem skilar hversu margir íbúar eru í landinu á hvern ferkílómetra með því að deila stærð upp í íbúafjölda. Í klasanum eru einnig föllin slainn sem les klasaupplýsingarnar frá lyklaborði og birta sem birtir klasaupplýsingar á skjá. Birta fallið birtir auk þess hversu þéttbýlt landið er. Gætið þess að nota private og public á viðeigandi hátt. Klasinn hefur einnig frálagsvirkja sem gerir t.d. kleyft að nota skipunina: cout<<land1<<land2<<endl; ef land1 og land2 eru tilvik af klasanum land. Yfirlýsið klasann og útfærið föll, smiði og frálagsvirkja. Öll útfærsla á að vera utan við yfirlýsingarhluta klasans. //Dæmi um lausn fyrir klasann land. #include <string.h> #include <fstream.h> //Nota fylki fyrir nafn á höfuðborginni en string fyrir álfuna. class land private: int iibuar; int istaerd; char cnafn[20]; string salfa; public: land(); // færibreytulaus smiður land( int ibuar, int staerd, char nafn[30], string alfa); // smiður með færibreytum char* fa_nafn(); string fa_alfa(); int fa_staerd(); void setja_nafn(char nafn[20]); void setja_alfa(string nafn); void setja_staerd(int staerd); int thettbyli(); void slainn(); void birta(); friend ostream& operator <<(ostream& out, const land& mittland); ; //------------------------------------------------------------------- int main(int argc, char* argv[]) cout<<"test"<<endl; Nokkrar æfingar í forritun bls. 24 Hallgrímur Arnalds

land myland(1000,200,"borgin eina","alfan min"); cout<<myland; myland.birta(); cout<<"-------------------------"<<endl; land myland2; myland2.birta(); cout<<"-------------------------"<<endl; cout<<"slaid inn upplysingum um eitthvert land."<<endl; myland2.slainn(); myland2.birta(); cout<<"-------------------------"<<endl; myland2.setja_alfa("asia"); myland2.setja_nafn("deli"); myland2.birta(); //------------------------------------------------------------------- land::land() iibuar= 1; istaerd=1; strcpy(cnafn,""); //Nota strcpy fyrir fylki salfa = ""; //Má nota = fyrir string land::land( int ibuar, int staerd, char nafn[30], string alfa) iibuar = ibuar; istaerd = staerd; strcpy(cnafn,nafn); salfa = alfa; char* land::fa_nafn() return cnafn; string land::fa_alfa() return salfa; int land::fa_staerd() return istaerd; void land::setja_nafn(char nafn[20]) strcpy(cnafn,nafn); void land::setja_alfa(string alfa) salfa = alfa; void land::setja_staerd(int staerd) Nokkrar æfingar í forritun bls. 25 Hallgrímur Arnalds

istaerd = staerd; int land::thettbyli() return iibuar/istaerd; void land::slainn() cin>>iibuar>>istaerd; cin>>ws; cin.getline(cnafn,30); cin>>salfa; //Mátti líka vera: //cin>>iibuar>>istaerd>>cnafn>>salfa; void land::birta() cout<<" "<<iibuar<<" "<<istaerd<<" "<<cnafn<<" "<<salfa<<" "<<thettbyli()<<endl; ostream& operator <<(ostream& out, const land& mittland) out<<"ibuar: "<<mittland.iibuar<<" Staerd: "<<mittland.istaerd<<" Nafn: "<<mittland.cnafn<<" Alfa: "<<mittland.salfa<<endl; return out; Skráravinnsla Æfingadæmi - skráavinnsla Tekjur1 - útg. 1 Búið til forrit sem les inn tekjur og gjöld í 3 mánuði. Tekjurnar og gjöldin eiga að vera í textaskrá sem heitir Tekjur.txt. Skráin gæti t.d. litið út á eftirfarandi hátt: 21 3 31 32 21 25 Fyrri dálkurinn táknar þá tekjurnar en sá síðari gjöldin. Forritið á að lesa tölurnar úr skránni og birta á skjá. Tekjur2 - útg. 2 Búið til forrit sem les inn tekjur og gjöld í 3 mánuði. Tekjurnar og gjöldin eiga að vera í textaskrá sem heitir Tekjur.txt. Skráin gæti t.d. litið út á eftirfarandi hátt: 21 3 31 32 21 25 Fyrri dálkurinn táknar þá tekjurnar en sá síðari gjöldin. Forritið á að lesa tölurnar úr Nokkrar æfingar í forritun bls. 26 Hallgrímur Arnalds

skránni og birta á skjá. Einnig á forritið að birta afkomu hvers mánaðar (tekjur gjöld) og samtalstölur fyrir árið (tekjur gjöld og afkoma) Tekjur3 - útg. 3 Búið til forrit sem les inn tekjur og gjöld í 3 mánuði. Tekjurnar og gjöldin eiga að vera í textaskrá sem heitir Tekjur.txt. Skráin gæti t.d. litið út á eftirfarandi hátt: 21 3 31 32 21 25 Fyrri dálkurinn táknar þá tekjurnar en sá síðari gjöldin. Forritið á að lesa tölurnar úr skránni og búa til nýja skrá sem heitir afkoma.txt og setja í hana sömu upplýsingar og voru skrifaðar út á skjá í dæmi nr. 2. Forritið á síðan að skrifa á skjáinn: Skráin afkoma.txt hefur verið búin til. Nafn Búið til forrit sem spyr notanda um nafn og heimilisfang og skrifar þessar upplýsingar síðan í skránna "nafn.txt". Bendar Æfingaverkefni bendar Heiltolubendir1 Búið til forrit sem spyr notanda um heiltölu. Forritið setur töluna í heiltölubreytu, býr síðan til heiltölubendi sem bendir á breytuna og skrifar innihald breytunar með því að nota bendinn en ekki breytunafnið. Kvikfylki1 Búið til fall sem spyr notanda fyrst um fjölda talna sem slá á inn (kommutölur) og síðan lætur fallið notanda slá inn þennan talnafjölda. Fallið á að búa til kvikfylki sem inniheldur þessar tölur og skila til baka bendi sem bendir á kvikfylkið. Búið einnig til forrit sem notar fallið. Kvikfylki2 Búið til fall sem skilar til baka minninu sem notað er undir kvikfylkið í dæminu á undan. Búið einnig til forrit sem notar fallið. Afrita Búið til fallið int afrita(char* s, char* t) sem afritar strenginn sem t bendir á yfir í strenginn sem s bendir á. Skrifa á fallið afrita án þess að kalla á önnur föll. Nokkrar æfingar í forritun bls. 27 Hallgrímur Arnalds

Sýnidæmi, kvikfylki Medaltal_kvikfylki Búa á til fall sem tekur inn tvær færibreytur. Sú fyrri er fylki rauntalna og sú síðari heiltala sem innheldur fjölda talna í fylkinu. Fylkið inniheldur einkunnir ótilgreinds fjölda nemenda í 2 fögum. Fallið á að búa til nýtt fylki rauntalna þar sem hver tala er meðaleinkunn hvers nemanda. Fallið skilar til baka bendi á fyrsta stakið í nýja fylkinu. //Fall sem les tvær samliggjandi tölur úr fylki, finnur //meðaltal þeirra og setur inn í nýtt fylki. //Með fylgir dæmi um main-fall til að prófa fallið double* medal(double *eink, int fj) //Bý fyrst til nýtt fylki helmingi minna en það upphaflega double* temp = new double[fj/2]; //Bý til nýjan bendi double * p; //Læt nýja bendinn benda fremst í fylkið og skila honum // svo í lokin p = temp; //Bý til teljara og lykkju til að lesa úr fylkinu eink inn //í fylkið temp int i; int x = 0; for (i=0; i<fj; i=i+2,x++) temp[x]=(eink[i]+eink[i+1])/2.0; return p; // Forrit til að prófa fallið double eink[10]; //Fylki með 10 einkunnum double* med; //Nýtt fylki til að taka við meðaltölunum for (int i=0;i<10;i++) (0,1,2...9) eink[i] = i; med = medal(eink,10) ; //Set gögn inn í einkunnafylkið //Kalla á fallið medal sem les //inn í nýja fylkið //Tvær forlykkjur til að kíkja inn í fylkin for(int k=0;k<10;k++) cout<<eink[k]<<" "; cout<<endl; for(int j=0;j<5;j++) cout<<med[j]<<" "; Nokkrar æfingar í forritun bls. 28 Hallgrímur Arnalds

Sýnidæmi, fallabendir (function pointer) float Plus (float a, float b) return a+b; float Minus (float a, float b) return a-b; float Margfalda(float a, float b) return a*b; float Deila (float a, float b) return a/b; cout << "Forrit sem les inn tvaer rauntolur, spyr sidan um reikniadgerd\n"; cout << "sem forritid a ad nota a thessar tolur\n"; float (*pt2func) (float, float); char adgerd, svar; float tala1, tala2; cout << "Fyrri talan? "; cin >> tala1; cout << "Síðari talan? "; cin >> tala2; do cout << "veldu reikniadgerd ( + - * eda / ): " ; cin >> adgerd; switch(adgerd) case '+' : pt2func = &Plus; break; case '-' : pt2func = &Minus; break; case '*' : pt2func = &Margfalda; break; case '/' : pt2func = &Deila; break; cout << tala1 << adgerd << tala2 << "=" << pt2func(tala1,tala2)<<endl; cout << "Viltu profa adra adgerd? (j/n) "; cin >> svar; while(svar == 'J' svar == 'j'); Sýnidæmi, void bendir (void pointer) int main () void* void_ptr; // skilgreinum void bendi char* char_ptr; // skilgreinum char bendi char takn = 'A'; void_ptr = &takn; // void bendir bendir á tákn char_ptr = &takn; // char bendir bendir einnig á táknið cout << " char_ptr bendir a: " << *char_ptr << endl ; // Við getum ekki vísað með void bendi á eftirfarandi hátt, // cout << " void_ptr bendir á " << *void_ptr ; // heldur verðum við að gera grein fyrir hvernig túlka á // innihaldið með því að tagbreyta void bendi í char bendi // og birta síðan innihald þess sem char bendirinn bendir a cout << " void_ptr bendir a: " << *(char*)void_ptr << endl; Nokkrar æfingar í forritun bls. 29 Hallgrímur Arnalds

Rand fallið Oft getur verið þægilegt að geta kallað fram tilviljunarkennda tölu. Forritið hér að neðan skrifar út 10 tilviljunarkenndar tölur: cout << " Forrit sem skrifar ut 10 tilviljunarkennadar tolur milli 0 og 9\n" ; int i; randomize(); // frumstilling til að sama runan endurtaki sig ekki // þegar kallað er á rand fallið int randtala; for(i=1; i<=10; i++) randtala = rand()%10; // rand fallið skilar tilviljunarkenndri tölu // %10 skilar þá tölu á bilinu 0 9. cout << randtala << endl; cout << "sladu a lykil til ad haetta " << endl; Samlagning (samlagning) Búið til forrit sem lætur notanda leggja saman tvær tilviljunarkenndar tölur á bilinu frá 0 til 9. Forritið gefur til kynna hvort notandi hafi lagt rétt saman eða ekki. Sleep fallið Stundum getur verið skemmtilegt að geta stöðvað keyrslu forrits í ákveðinn tíma. Til þess má nota Sleep fallið sem er í windows.h safninu. Forritið hér að neðan telur niður en bíður í 1. sek á milli niðurtalningar. #include <windows.h> int main () int n; cout << "Slaid inn hversu lengi skal telja > "; cin >> n; while (n>0) cout << n << ", "; Sleep (1000); // bíður í 1000 msek þ.e. 1 sek. --n; cout << "BOOM BOOM!"; Sleep(2000); Nokkrar æfingar í forritun bls. 30 Hallgrímur Arnalds

Þræðir Samlagning (thr_saml1) Búið til forrit sem lætur notanda leggja saman tvær tilviljunarkenndar tölur á bilinu frá 0 til 9. Forritið gefur til kynna hvort notandi hafi lagt rétt saman eða ekki. Forritið á einnig að hafa teljara sem telur hve lengi notandinn hefur hugsað svarið. Útfærið forritið sem tveggja þráða forrit þar sem annar þráðurinn birtir spurningu og bíður eftir svari en hinn þráðurinn telur sek. sem líða. Endurkoma Endurkoma er það þegar fall kallar á sjálft sig. Hropmerkt Búið til fall sem reiknar hropmerkta tölu. Fallið á að vera útfært með því að nota endurkomu. Búið einnig til aðalforrit sem notar fallið. (hropmerkt tala er tala margfölduð með öllum heiltölum sem eru lægri en viðkomandi tala). Við getum því séð að N! = N * (N-1)! (Hér stendur N!, fyrir N hropmerkt) Ef við eigum fall sem reiknar N!, köllum fallið hropmerkt() gætum við því útfært fall sem reiknar N! svona: int hropmerkt(int n) if (n==0) return 1; else return n*hropmerkt(n-1); cout << hropmerkt(0) << endl << hropmerkt(5) << endl; Tengdur listi Dæmi um forrit sem býr til tengdan lista. Nokkrar æfingar í forritun bls. 31 Hallgrímur Arnalds

struct node // skilgreinum hvernig stak er uppbyggt char item; node* next; // bendir sem bendir á svona stak ; node* head; // skilgreinum bendi sem bendir á stak node* p; // skilgreinum bendi sem bendir á stak head = new node; // búum til stak sem head bendir á head->item = 'J'; // setjum J í stakið head->next = NULL; // Setjum NULL í aftasta stak // búum til nýtt stak fremst í listanum p = new node; p->item = 'E'; p->next = head; head = p; // búum til nýtt stak fremst í listanum p = new node; p->item = 'B'; p->next = head; head = p; // Lykkja sem skrifar lista óháð fjölda staka for (node* cur=head ; cur!= NULL ; cur = cur->next) cout << cur->item << endl; Dæmi um notkun á vektor #include <vector.h> vector<double> safn; safn.push_back(0.0); safn.push_back(1.1); safn.push_back(2.2); for (int i=0;i<safn.size();i++) cout << safn[i] << endl; Nokkrar æfingar í forritun bls. 32 Hallgrímur Arnalds

Viðauki 1 Dæmi um lausn á nokkrum æfingadæmum Bokstafur1 char takn; // breyta sem geymir einn bokstaf eða tákn cout << "Sladu bokstaf: "; cin >> takn; // cin skipunin notuð til að lesa inn gildi cout << "Thu valdir bokstafinn: " << takn; // stöðvar forrit til að útskrift sjáist Hitastig1 double tc; // hitastig á celcius double tf; // hitasti á farenheit cout << "Hitastig í Farenheit gradum: "; cin >> tf; tc = (5./9.) * (tf-32); cout << tf << " gradur Farenheit, eru " << tc << " gradur Celcius"; Góðan daginn 2 int klst; cout << "Hvad er klukkan: "; cin >> klst; if (klst < 1 klst > 24) cout << "Rangur innslattur" ; if(klst < 18) cout << "Godan daginn" ; else cout << "Gott kvold"; Nokkrar æfingar í forritun bls. 33 Hallgrímur Arnalds

Góðan daginn 2 (lausn b) int klst; cout << "Hvad er klukkan: "; cin >> klst; if(klst < 18 && klst >= 1) cout << "Godan daginn" ; if(klst >= 18 && klst <= 24) cout << "Gott kvold"; if(klst < 1 klst >= 24) cout << "Rangur innslattur"; Góðan daginn 2 (lausn c) int klst; cout << "Hvad er klukkan: "; cin >> klst; bool rangur_innsl; // inniheldur true ef rangur innslattur rangur_innsl = klst < 1 klst > 24; if(klst < 18 &&!rangur_innsl) cout << "Godan daginn" ; if(klst >= 18 &&!rangur_innsl) cout << "Gott kvold"; if(rangur_innsl) cout << "Rangur innslattur"; Bokstafur2 char takn; // breyta sem geymir einn bokstaf eða tákn char svar; // breyta sem geymir svar um hvort endurtaka eigi vinnslu do cout << "Sladu bokstaf: "; cin >> takn; // cin skipunin notuð til að lesa inn gildi cout << "Thu valdir bokstafinn: " << takn; cout << "\nviltu endurtaka vinnsluna? " ; Nokkrar æfingar í forritun bls. 34 Hallgrímur Arnalds

cin >> svar; while (svar == 'j' svar == 'J'); Hlaupaar1 // Þetta forrit athugar hvort ár er hlaupaár með // því að athuga hvort talan 4 gengur upp í ártalinu // Forritið virkar því rangt ef um aldamót er að ræða int artal; cout << "Sladu inn artal: "; cin >> artal; if(artal % 4 == 0) cout << "thetta er hlaupaar" ; else cout << "thetta er ekki hlaupaar"; Hlaupaar1b // Þetta forrit athugar hvort ár er hlaupaár int artal; cout << "Sladu inn artal: "; cin >> artal; bool erhlaupaar; // true ef artal er hlaupaar erhlaupaar = false; if(artal % 4 == 0) erhlaupaar = true ; if(artal % 100 == 0) erhlaupaar = false ; if(artal % 400 == 0) erhlaupaar = true ; if (erhlaupaar) cout << "thetta er hlaupaar" ; else cout << "thetta er ekki hlaupaar"; Nokkrar æfingar í forritun bls. 35 Hallgrímur Arnalds

Aldur_2_sw // Þetta er dæmi um hverning nota má switch / case, en lýsir jafnframt // veikleikum, þ.e. það þarf að telja upp öll möguleg case int main(int argc, char* argv[]) int aldur; cout << "Hvad ert thu gamall? "; cin >> aldur; switch( aldur ) case 0: case 1: case 2: case 3: case 4: case 5: case 6: cout << " Nu svo thu ferd ad byrja i skola " << endl; break; case 7 : case 8 : case 9 : case 10 : case 11 : case 12: case 13: case 14 : case 15 : cout << "Ferd thu i framhaldsskola? "; char svar; cin >> svar; if (svar == 'J' svar== 'j') cout << "gott hja ther\n"; else cout << "Eg legg til ad thu spair betur i thetta!\n" ; break; default: // ekki á bilinu 0-15 if (aldur > 105 aldur < 0) cout << "Rangur innslattur"; break; cout << "Bless" ; Talnabil2 // forrit sem les inn tvær heiltölur frá lyklaborði og //prentar út á skjáinn allar tölur á bilinu á milli talnanna Nokkrar æfingar í forritun bls. 36 Hallgrímur Arnalds

cout << "Fyrri talan: "; int tala1; cin >> tala1; cout << "Sidari talan: "; int tala2; cin >> tala2; if (tala1+1 >= tala2) cout << "Thad er engin tala milli thessara talna"; for (tala1++ ; tala1 < tala2 ; tala1++) cout << tala1 << endl ; Talnabil - annað veldi // forrit sem les inn tvær heiltölur frá lyklaborði og // prentar út á skjáinn allar tölur á bilinu á milli talnanna // og hvað talan er í öðru veldi. cout << "Fyrri talan: "; int tala1; cin >> tala1; cout << "Sidari talan: "; int tala2; cin >> tala2; if (tala1+1 >= tala2) cout << "Thad er engin tala milli thessara talna"; for (tala1++ ; tala1 < tala2 ; tala1++) cout << tala1 << " i odur veldi er " << tala1 * tala1 << endl ; Skattur2 #include <iostream> using namespace std; #include <conio> double alagpros; // álagningarprósenta double persafsl; // persónuafsláttur double laun; // laun double skattur; // skattur sem forritið reiknar char svar; // j ef reikna á aftur annars n cout << "Alagningarprosenta? "; cin >> alagpros ; cout << "Personuafslattur? "; cin >> persafsl; do cout << "Laun? "; cin >> laun; Nokkrar æfingar í forritun bls. 37 Hallgrímur Arnalds

skattur = laun*alagpros/100 - persafsl; if (skattur < 0) skattur = 0.; cout << "Skatturinn verdur: " << skattur; cout << "\nviltu reikna aftur? "; cin >> svar; while(svar == 'J' svar == 'j'); cout << "Takk fyrir i dag!!"; Margfoldunartafla1 int tala; cout << "Slaid inn hvada margfoldunartoflu a ad birta: "; cin >> tala; cout << tala << " sinnum taflan: "; for (int i=1; i<=10 ; i++) cout.width(6); cout << i*tala ; Margfoldunartafla1b #include <iostream> using namespace std; #include <conio> int tala; char svar; do cout << "Slaid inn hvada margfoldunartoflu a ad birta: "; cin >> tala; cout << tala << " sinnum taflan: "; for (int i=1; i<=10 ; i++) cout.width(6); cout << i*tala ; cout << "\nviltu birta adra? "; cin >> svar; while(svar == 'J' svar == 'j'); cout << "Takk fyrir i dag"; Margfoldunartafla2 Nokkrar æfingar í forritun bls. 38 Hallgrímur Arnalds

int tala = 10; for (int i=1; i<=tala ; i++) cout.width(2); cout << i << " sinnum tafla "; for (int j=1; j<=10 ;j++) cout.width(6); cout << i*j ; cout << endl; Flatarmál og ummál ferhyrnings2 bool reikna_ummal_flatarmal(double l,double b,double& u, double& f); double lengd, breidd, ummal, flatarmal; cout << "lengd?"; cin >> lengd; cout << "breidd?"; cin >> breidd; if (!reikna_ummal_flatarmal(lengd, breidd, ummal, flatarmal)); cout << "rangur innslattur - forritid haettir"; return 1; cout << "Ferhyrningur með lengd " << lengd << " og breidd " << breidd << endl; cout << "hefur ummalid" << ummal << " og flatarmalid " << flatarmal; bool reikna_ummal_flatarmal(double l,double b,double& u, double& f) bool rettur_innsl=true; if (l<=0 b<=0) rettur_innsl = false; u = 2*l + 2*b; f = l*b; return rettur_innsl; Nokkrar æfingar í forritun bls. 39 Hallgrímur Arnalds

Efnisyfirlit Tilgangur þessara leiðbeininga... 2 Fyrsta forritið Texti skrifaður á skjá... 2 Sýnidæmi1. Forrit sem skrifar texta... 2 Sýnidæmi1. Skýringar... 3 Æfingaverkefni... 3 Hallo... 3 Breytur og tag breyta.... 3 Hvað eru breytur.... 3 Virkjar... 4 Reiknivirkjar... 4 Samanburðarvirkjar... 4 Rökvirkjar... 4 Sýnidæmi2. Forrit sem notar breytur og virkja.... 5 Sýnidæmi2b. Forrit sem notar breytur og virkja.... 5 Æfingaverkefni með breytum og virkjum.... 6 Bokstafur1... 6 Heiltala... 6 Kommutala... 6 Gildistökusetningar... 7 Æfingaverkefni gildistökusetningar og segðir... 7 Litrafjoldi... 7 Virðisauki... 7 Flatarmál hrings... 7 Hitastig1... 7 Skattur1... 7 Nokkrar segðir... 7 Fastar... 9 Æfingaverkefni með fasta... 9 Virdisauki... 9 If setningar... 9 If setningar... 9 Æfingaverkefni if setningar... 10 Góðan daginn 1... 10 Góðan daginn 2... 10 Minnsta tala 1... 10 Minnsta tala 2... 10 Aldur 1... 10 Aldur_2... 10 Aldur_3... 11 Hlaupaár.... 11 Lögleg dagsetning.... 11 Æfingaverkefni switch skipanir... 11 Aldur_2_sw... 11 do.. while lykkjur... 12 while lykkjur... 12 for lykkjur... 13 Æfingaverkefni - lykkjur... 14 Nokkrar æfingar í forritun bls. 40 Hallgrímur Arnalds