Rubriigiarhiiv: laborid

9. labor: maatriksid

Labori materjal

Esitamisele kuuluvad ülesanded

Selles laboris on kaks ülesannet. Teisele üelsandele on pakutud kaks lisaülesannet.

Ülesanne 1: Maatriksist tulemuste leidmine

Selle ülesande raames harjutame maatriksis nagiveerimist ja sealt tulemuste leidmist.

Ülesannet hinnatakse kolmes eraldi osas! Loe lähemalt peatükist “Hinnatavad osad” . Ülesanne tuleb ette näidata kasutades voo suunamist etteantud sisendandmete failiga.

Ülesandega alustamiseks lae alla järgnevad lähtefailid

Nõuded
  • Ülesande jaoks on sulle antud aluskood ja tekstifail sisendiga
  • Programmi jooksuta kasutades voo suunamist.
  • Lisa programmi algse maatriksi väljatrükk. Väljatrükk peab olema joondatud samamoodi nagu näidisel.
  • Leia järgnevad tulemused
    • Peadiagonaalil olevate negatiivsete arvude summa
    • Kõrvaldiagonaali kohal (kõrvaldiagonaalist kõrgemal) olevate positiivsete arvude korrutis
    • Iga rea suurim arv
  • Kõik väärtused tuleb salvestada täisarvulistesse andmetüüpidesse.  Andmetüübid nagu float, double jne ei ole lubatud.
  • Kui soovid kasutada väiksemaid või suuremaid andmetüüpe kui 32-bitised, peavad need olema määratud täpselt (nt inttypes.h  teegi abil). Tüübid nagu long  ja long long  ei ole lubatud
  • Lahendus peab olema ühilduv erinevatel platvormidel. Formaadid nagu %ld  ja %lld  ei ole lubatud
  • Ülesande raames tuleb sul luua nõutud funktsioonid. Loetelu nendest on kirjeldatud järgnevas punktis.
Nõutud funktsioonid

Programmi tuleb lisada kokku 5 funktsiooni. Vajadusel võid neid lisada täiendavalt juurde.

  • Maatriksi lugemine. Funktsiooni töö käigus loetakse maatriks mällu. Tagastust ei ole. Funktsioon on lahendatud sinu eest aluskoodis.
  • Maatriksi väljatrükk. Funktsiooni käigus trükitakse maatriks ekraanile samamoodi nagu näidisel. Tagastust ei ole. Funktsiooni prototüüp antud aluskoodis.
  • Peadiagonaalil olevate negatiivsete arvude summa. Funktsioon tagastab summa main()  funktsiooni, kus see välja trükitakse. Kõrvalmõjud on keelatud! Funktsiooni prototüüp antud aluskoodis.
    NB! Ettevaatust liiasusega! Vaata millistel indeksitel arvud asuvad ning sea tsükliloendurid täpselt nendele positsioonidele. Käia läbi 49-kohaline maatriks ainult 7 arvu leidmiseks ei ole okei. Kujuta ette kui nt tegu oleks 1000 x 1000 maatriksiga – sellisel juhul käiksid läbi miljon arvu selleks, et leida vaid nendest tuhat. Kogu tööst oleks kasulik sellisel juhul vaid 0.1% (väheneb eksponentsiaalselt)
  • Kõrvaldiagonaali kohal (kõrvaldiagonaalist kõrgemal) paiknevate positiivsete arvude korrutis. Funktsioon tagastab korrutise main() funktsiooni, kus see välja trükitakse. Kõrvalmõju ei ole.
  • Rea-kaupa suurimate arvude leidmine. Disain on sinu enda otsustada. Kõrvalmõjud on lubatud, tulemused võib printida soovi korral funktsiooni sees. Võid lisada ka mõne täiendava abifunktsiooni.
Hinnatavad osad

Sellel ülesandel on 3 hindamiskohta, vastavalt pärast iga tulemuse edukat leidmist.

Kohustuslik, olenemata millist alamosa näitad:

  1. Programmi tuleb jooksutada kasutades voo suunamist
  2. Sisestatud maatriksi väljatrükk

Eraldi hinnatavad alamosad:

  • Osa 1: Peadiagonaalil olevate negatiivsete arvude summa.
  • Osa 2: Kõrvaldiagonaali kohal (kõrvaldiagonaalist kõrgemal) olevate positiivsete arvude korrutis.
  • Osa 3: Iga rea suurim arv.
Vihjeid
  • Vaata kuidas ReadMatrix()  funktsioon on kirjutatud. Sedasi saad ka oma ülejäänud funktsioonide parameetrid kujundada.
  • Väljatrükk: Jällegi, vaata funktsiooni ReadMatrix(). Tsüklite struktuur on juba tehtud selliselt, et see käib läbi kõik maatriksi positsioonis. Peaksid lugemise asendama väljastusega. Reavahetuseks mõtle mis eesmärki omab sisemine tsükkel ja mis eesmärki välimine (ning kus paikned maatriksi suhtes enne ja pärast välimist tsükli töötamist ning kus asud enne ja pärast sisemise tsükli töötamist).
  • Osa 1: Kirjuta endale välja maatriksi liikmete indeksid, mida sul on vaja summeerida. Vaadates nende indeksite väärtusi mõtle mitut erinevat muutujat nende jaoks on vaja (ning samaaegselt ka tsüklit).
  • Osa 2: Meenuta mis juhtus täisarvu ületäitumisel.
  • Osa 3: Maatriksi ühte rida on võimalik edastada funktsiooni. Selleks määrame ära soovitud reaindeksi ning anname kaasa ka rea pikkuse. Nii saad korduvkasutada juba varasemas laboris valmis tehtud funktsiooni. Nt FindMaxValue(matrix[rowIndex], rowLength)
Testimine

Võrdle oma tulemust allolevaga nende õigsuses veendumiseks!

Ülesanne 2: Kinosaal

Meile on antud kinosaali plaan, mis on kujutatud 2-dimensioonilise maatriksina. Sinu peamiseks ülesandeks on väärtuste tõlgendamine antud maatriksist.

Kõik istekohad on kodeeritud järgnevate täisarvuliste numbritega:

  • 0 – istekoht puudub
  • 1 – istekoht on vaba
  • 2 – istekoht on hõivatud

Maatriksis positsioonil (0, 0) asub saali ülemine vasak istekoht.

Lae alla kinosaali algväärtustatud maatriks: https://blue.pri.ee/ttu/files/iax0583/aluskoodid/9_2_cinema_init.c

Nõuded
  • Kuva saali plaan. Programmi väljund peab olema samasugune nagu etteantud näidistel, sh
    • Vasakul ääres on rea numbrid.
    • Kõik read algavad esimesest istekohast, kuid arvestada tuleb, et saal on eest kitsenev (vt näide)
    • Ekraani asukoht on näidatud
    • Vabad istekohad kuvatakse numbritena
    • Hõivatud istekohad kuvatakse suure X tähena
    • Puuduvaid istekohti ei kuvata
  • Küsi kasutajalt soovitud istekoht ning väljasta kas koht eksisteerib, on vaba või mitte.
  • Minimaalselt loo 2 funktsiooni peale main funktsiooni. Üks saaliplaani kuvamiseks, teine istekoha saadavuse kontrolliks. Võid julgelt ka rohkem funktsioone luua.
Töövoo soovitus
  1. Prindi saaliplaan tavalise maatriksina. Ära veel väljundit kohandama hakka.  Veendu, et saad numbrid kätte ja vormindatud.
  2. Nüüd hakka väljundit kohandama (tõlgendama maatriksis olevaid väärtusi korrektselt). Loo tingimuslause, mille abiga tuvastada kui koht maatriksis puudub ja väljasta “tühjus” seal oleva numbri asemel.
  3. Seejärel jätka teiste kodeeritud väärtuste tõlgendamist ja visuaali loomist.
  4. Kui saaliplaan on valmis, prindi saaliplaani kõrvale rea numbrid.
  5. Küsi kasutajalt tema soovitud istekoha asukoht.  Kontrolli, et väärtused oleksid “mõistusepärased” (nn sanity check).
  6. Rea numbri maatriksis saad välja arvutada koheselt. Tulba numbri leidmiseks pead arvestama ka puuduvate istekohtadega.
  7. Väljasta maatriksis leitud indeksid veendumaks, et leidsid õige asukoha!
  8. Nüüd lõpeta ülejäänud programm.
Vihjeid
  • Saali plaan on peegeldatud kujul võrreldes massiivi tegelike indeksitega. Abiks võib olla kui joonistad endale välja ja märgid ära esimese ja viimase rea asukohad.
    • Rida 14 asub massiivis indeksiga 0
    • Rida 1 asub massiivis indeksiga 13
    • Istekoha kontrollis trüki välja massiivi indeksite väärtused (pildil rida algusega DEBUG)
  • Kasuta istekohtade loendamiseks eraldi loendurit.
  • Sellist kodeeritud täisarvu on hea lahendada kasutades switch()  lauset.
Programmi testimine ja näide

NB! Näidistel on kasutatud ka värve, seda sinu lahenduses olema ei pea (kuid võib 🙂 )

Näidises on samuti lisatud silumiseks DEBUG rida, kus kuvatakse massiivi asukoht kust istekohta otsiti. Sedasi on lihtsam oma programmi õigsust kontrollida.

Ava mind pildi nägemiseks

Lisaülesanne 1: mitu piletit

Lisame võimaluse kasutajal osta mitu piletit korraga.

  • Kasutaja saab sisestada soovitud piletite arvu
  • Kõik istekohad peavad paiknema kõrvuti, samas reas
  • Lähtepunktiks on kasutaja sisestatud istekoht. Täiendavad kohad võivad paikneda sellest nii vasakul kui paremal pool (sh mõlemal pool korraga).
  • Kuva kasutajale pakutavad istekohad.

Lisaülesanne 2: ostukinnitus

Lisame kasutajale võimaluse ümber mõelda oma piletiostu soovi.

  • Selle ülesande eelduseks on esimese lisaülesande lahendus.
  • Pärast istekohtade pakkumist tuleb kasutajalt küsida kinnitust kas ta soovib pakutavaid istekohti.
  • Kui kasutaja keeldub pakutavatest kohtadest või ei olnud võimalik soovitud asukohas istekohti pakkuda kuvatakse kasutajale uuesti saali plaan ning pakutakse talle võimalust uuesti istekohti valida

Vihje: Algses maatriksis on pakutud välja 3 kodeeritud väärtust. Võid neid soovi korral lisada. Alternatiivina saad teha algsest maatriksist koopia.

Programmi näide

Näide on koostatud pärast mõlema lisaülesande lahendamist.

Ava mind pildi nägemiseks

Pärast tundi peaksid oskama järgmist

  • Peaksid oskama erineva pikkusega arve kasutama koodis, sh 64-bitist täisarvu.
  • Mõistma mis hetkel täisarvu ületäitumised juhtuvad koodis
  • Olema suuteline visualiseerima kahedimensioonilist massiivi (maatriksit)
  • Suutma deklareerida ja indekseerida kahedimensioonilist massiivi
  • Suutma indekseerida kindlaid osi kahedimensioonilisest massiivist (nt esimene või viimane rida, kolm esimest rida, teine element kolmandast reast jne)
  • Mõistma ja olema suuteline kasutama maatriksi diagonaalide omadusi
  • Suutma käia maatriksit läbi nii rida-rea haaval kui ka veerg-veeru haaval.

Täiendavat materjali

7. labor: sorteerimine

Labori materjal

Esitamisele kuuluvad ülesanded

Selles tunnis on üks tunnitöö millele on välja pakutud kaks lisaülesannet.

Tunnitöö: Mullsorteerimine

Tunnitöö raames sorteerid kasutaja poolt sisestatud arvujada kasutades mullsorteerimise algoritmi.

Nõuded
  • Kasutajalt küsitakse 5 täisarvu, mis salvestatakse massiivi.
  • Sorteeri massiiv kasutades mullsorteerimise algoritmi.
  • Optimeeri tsüklite kestvust sedasi, et asjatult võrdlusi ei sooritataks – just nii nagu oli slaidil näidatud. Veendu, et kirjutad optimeeringu nii sisemisse kui välimisse tsüklisse!
  • Loenda ja kuva mitu korda arve võrreldi omavahel. Kui tegid optimeerimise korrektselt, peaksid saama täpselt 10 võrdlust.
  • Kuva massiiv kasvavas järjekorras.
  • Kuva massiiv kahanevas järjekorras.
  • Sorteerida tohid kogu programmi vältel massiivi vaid ühel korral! Teises suunas massiivi kuvamiseks uuesti seda sorteerida ei tohi!
  • Luua tuleb neli funktsiooni. Loetelu nõutud funktsioonidest on loetletud allpool.
  • Meeldetuletuseks!
    • Muutujad lowerCamelCase
    • Funktsioonid UpperCamelCase
    • Makrod SCREAMING_SNAKE_CASE
    • Maagilised numbrid koodist asendatud makrotega
    • Massiivi pikkus antakse funktsiooni alati kaasa

Vasta küsimusele: jälgida saab nii võrdluste kui vahetuste arvu. Kumb neist meie optimeeringu tulemusel väheneb, kumb jääb samaks?

Lahenduses nõutavad funktsioonid

Selles programmis tuleb sul kokku luua 4 funktsiooni

  • Numbrite lugemiseks massiivi
  • Massiivi sorteerimiseks
  • Kaks funktsiooni massiivi kuvamiseks
Vihjed
  • Sa saad juba alustada eelmisel nädalal kirjutatud funktsioo! Eelmise nädala tunnitöödest on sul mõned funktsioonid juba olemas. Kopeeri sisse ja vajadusel modifitseeri neid, lisa juurde mis puudu.
  • Mullsorteerimise funktsioon on järjekordne funktsioon mille peaksid oma varasalve panema. Kui funktsiooni endale talletad, võta sealt vahetuste loendamine ära – mida vähem kõrvalmõjusid funktsioonidel on seda parem.
Test 1: Tagurpidine järjestus

Tegu on kõige keerulisema juhuga mullsorteerimiseks. Suurim on esimene, vähim viimane.

Test 2: Juhuslik massiiv

Juhuslik järjekord. Võrdluste arv jääb samaks. Testib ka kitsaid piirjuhte osadel arvutisüsteemidel kui massiivi piirest üle minnakse. Tegu ei ole põhjaliku ja tõendusliku testiga (selleks on spetsiaalsed tööriistad) aga võib mõnel juhul vea nähtavaks tuua.

Lisaülesanne 1: tsüklite täiendav optimeerimine

Algselt kirjeldatud algoritmi üks puudustest on olukord kui massiiv saab oluliselt varem sorteeritud kui algoritmi täielik tööaeg ette näeb. Sellist olukorda on võimalik tuvastada ning ära kasutada.

  • Kui massiiv saab sorteerituks enne viimast välimise tsükli läbikäiku, peata sorteerimine. Väldi tühja töö tegemist
  • Vihjeks: mõtle millised tegevused tehakse sorteerimise käigus ning mida ei tehta arvude puhul mis on juba sorteeritud.
  • Kaitsmisel: Selgita milliste sisendandmete puhul optimeeritud algoritm parema tulemuse annab ning tõesta seda oma tulemusega.

Lisaülesanne 2: Maatriksi sorteerimine

Selles ülesandes hüppad veidike teemades ette ning pead omapäi tutvuma 2-dimensioonilise massiivi ehk maatriksiga.

  • Lahenda ülesanne eraldi programmina, kasutades varasemalt tehtud põhjana. Jäta algne lahendus alles! Varem tehtud funktsioonid kuluvad tulevikus ära!
  • Antud lisaülesande võid lahendada funktsioonideta kuna me pole veel maatriksi edastamisest funktsioonidesse rääkinud.
  • Massiivi asemel tuleb sorteerida 5 x 5 maatriks
  • Sorteerimine toimub rida-rea haaval.
  • Maatriks peab olema algväärtustatud. Kasuta järgnevat maatriksit testimiseks
  • Näite maatriksi väljatrükist ja tsüklitest leiad siit: https://blue.pri.ee/ttu/programmeerimine-i/koodinaited/muutujate-algvaartustamine/
Oodatav tulemus
Vihjeid
  • Soovid oma juba loodud mullsorteerimise funktsiooni ära kasutada? C keeles on võimalik edastada funktsiooni maatriks “rea-kaupa” (tegelikkus on veidi keerulisem aga täidab meie eesmärki. Selleks kutsu funktsioon nii:
    SortArray(numbers[rowIndex], rowLength); Sedasi näeb su kood oluliselt ilusam välja.

Pärast tundi peaksid oskama järgmist

  • Peaksid saama aru mis asi arvu alus on
  • Peaksid teadma enimlevinuid arvusüsteeme, muuhulgas kahend- ja 16ndsüsteemi.
  • Peaksid aru saama mis vahe on positsioonilisel ja mittepositsioonilisel arvusüsteemil.
  • Peaksid aru saama mis asi on bitt ja bait ning mitu bitti on baidis.
  • Peaksid oskama teisendusi arvusüsteemides (10 -> 2, 10 -> 16, 10 -> 8, 2 > 10, 2 -> 16, 16 -> 10, 16 -> 2, 8 -> 10)
  • Peaksid aru saama mis asi on täisarvu ületäitumine
  • Peaksid mõistma, et sorteerimiseks on väga suur hulk algoritme ning õige algoritmi valimine on olulise tähtsusega reaalsetes rakendustes.
  • Peaksid mõistma, et optimeerimisel ja võimsamal riistvaral on oma koht, kuid parem algoritm või lähenemine annab suurema võidu.
  • Peaksid aru saama kuidas mullsort töötab ning oskama seda oma rakendustes kasutada.

Täiendav materjal

Üldised viited

Täisarvude ületäitumine reaalses elus

PR2ET6: Massiivid 2

Labori materjal

Teooriakild 1: Teksti edastamine funktsiooni

Sageli võib tekkida olukord, kus funktsioon ise oleks justkui kenasti korduvkasutatav, kuid kasutajale kuvatav tekst ei sobi. See on tüüpiline üldiste sisend- ja väljundfunktsioonide puhul.

Üks  viis seda lahendada on see mida varem tegid – trükkisid teksti enne sisendi/väljundiga tegeleva funktsiooni väljakutset (nt loe arv, loe massiiv, väljasta massiiv). See jääb jätkuvalt mu soovituseks enamikes olukordades. Sedasi on sul vähem keerukust funktsioonis ja funktsioon jääb kergemini korduvkasutatavaks.

Teise valikuna pakun välja alternatiivi, mis on funktsioonide koostamise mõttes üsna tavapärane. Vaatame ühte põhilist ideed millal funktsioon luua –  Kui kahe koodilõigu vahel on marginaalne erinevus, mis sunnib sind koodi kopeerima, siis lahenda erinevused kasutades funktsiooni parameetreidSee saab meie ka meie lahenduseks – me saame väljastatava teksti või osa tekstist (nt sõna) edastada parameetrina.

Selline meetod töötab üsna hästi kui kasutajale on vaja selgitada mida ta sisestama peab (st mida programm ootab temast). Samuti sobib see enamasti ka näiteks massiivi väljastamisel kui on vaja väljastuse ette panna kirjeldus.

NB! Kaks olulist mõtet veel! Mõlemast neist räägime süviti semestri teises pooles.

  1. Tekst on samamoodi massiiv – see on tähemärkidest koosnev massiiv. Igal tähemärgil on kusjuures oma indeks.
  2. Erinevalt numbrimassiividest ei ole tekstimassiivi puhul meil selle väljastamiseks vajalik pikkust eraldi kaasa anda (pärast viimast sümbolit kasutatakse erisümbolit, mis annab märku kui string ehk sõne lõpeb).

Teooriakild 2: Massiivi vs massiivi liikme edastamine

Eelmises tunnis tutvustasime kuidas peaks massiivi edastamine funktsiooni. Oluline oli

  1. Massiiv edastatakse alati viitena originaal asukohale
  2. Massiivi sisu saime muuta ka alamfunktsioonides, kehtis kõikjal
  3. Massiiviga tuleks kaasa anda selle pikkus
  4. Massiivi edastades kasutame vaid selle nime, ilma ühegi täiendava märgendita.

Samuti meeldetuletuseks, kasutades massiivi nime järel kantsulge keset koodi indekseerime me selle massiivi konkreetset liiget.

Siit saame kokku ka järgmise näite, kus võrdleme massiivi vs üksiku liikme edastust massiivist.

Esitamisele kuuluvad ülesanded

Selles tunnis tuleb lahendada kaks ülesannet. Täiendavalt on pakutud välja lisaülesanded täiendavate punktide teenimiseks.

Ülesanne 1: Uute massiivide koostamine

Antud ülesanne põhineb suuresti algoritmiülesandel. Vastav ülesanne on püstitatud siin:  https://blue.pri.ee/ttu/programmeerimine-i/algoritmide-ulesanded/#Algoritm_3_Negatiivsete_ja_positiivsete_arvude_umberjarjestus

Selle algoritmi lahendus on sulle ette antud. Ülesandele on lisatud algoritmis puuduvaid täiendusi.

Algoritm

Nõuded
  • Programm peab põhinema etteantud algoritmil.
  • Kasutajalt loetakse 6 arvu ja salvestatakse need massiivi
  • Programmi vältel koostatakse teine samapikk massiiv põhimõttel negatiivsed numbrid ettepoole, positiivsed nende järel. Arvu 0 loetakse positiivseks arvuks.
  • Programmi vältel koostatakse ka kolmas massiiv, kuhu kuuluvad vaid nullist suuremad arvud. Massiivi pikkus võib osutuda lühemaks algsest massiivist.
  • Pärast massiivide koostamist väljastatakse järjest kõik 3 massiivi.
  • Programm peab endas sisaldama kokku nelja funktsiooni – arvude lugemiseks kasutajalt, arvude ekraanile väljastamiseks, positiivsetest arvudest koosneva massiivi koostamiseks ning etteantud algoritmi alusel järjestatud massiivi koostamiseks.
  • Kõik enda loodud funktsioonid peavad olema välja kutsutud main()  funktsioonist.
Soovitusi ja vihjeid

Alusta programmi koostamist sisestusest ja massiivi ekraanile kuvamisest. Seda oled juba eelmine kord teinud. Loo vajalik massiiv ja korduvkasuta varasemalt tehtud funktsioone. Kopeerides funktsioone ära unusta ka nendele eelnevat kommentaari kopeerida!

Nüüd lähme ümberjärjestamise juurde. Loo uus massiiv (lisaks olemasolevale), kuhu koostame ümberjärjestatud arvujada. Uue massiivi pikkus on sama nagu esmase massiivi pikkus. Meenuta, et funktsioonist massiivi tagastada ei ole võimalik, seega massiiv tuleb deklareerida  main() funktsioonis ja edastada funktsioonile. Ümberjärjestamise ülesande lahendamiseks jälgi etteantud algoritmi, mis oli esitatud veidi ülevalpool.

Seejärel kutsu uuesti välja massiivi väljastamise funktsioon, sel korral ümberjärjestatud massiivi väljastamiseks. St kood võiks funktsiooni väljakutsete mõttes näha välja umbes sarnane (nimed ei ole olulised):

Siinkohal kui soovid oma main()  funktsiooni puhtamaks saada, siis tasuks massiivi väljastuse ette minev tekst parameetriga kaasa anda. Selleks vaata esimest teooriakildu!

Nüüd liigu viimase funktsiooni juurde, mis peaks ainult positiivsetest arvudest massiivi koostama. Struktuurilt on koostamine on üsna sarnane eelnevalt tehtud ümberjärjestusele, kuid mõned erinevused siiski eksisteerivad. Kui ümberjärjestatud massiiv oli liikmete arvult samapikk algse massiiviga, siis positiivsete arvude massiiv tuleb suure tõenäosusega lühem. Mõtle, kuidas saada koostatud massiivi pikkus alamfunktsioonist välja,  main()  funktsiooni! Kui pikkus käes, kutsu jälle main()  funktsioonist välja massiivi väljatrükk, et ka kolmas massiiv ekraanile väljastada.

Testimine

Esimese testina proovime tavapärast juhtu, kui arvude hulgas on nii positiivseid kui negatiivseid numbreid.

Arvesta, et antud olukorras võivad ka positiivsed numbrid puududa. Väljastus peaks jääma jätkuvalt arusaadavaks.

Ülesanne 2: kahe arvu võrdlus

  • Loe 5 täisarvu klaviatuurilt
  • Küsi kasutajalt kaks indeksit / järjekorranumbrit.
    • Kontrolli, et need oleksid sobilikus vahemikus enne jätkamist! Vajadusel küsi uuesti.
    • Numeratsioon peab olema sama nagu sisendit küsides.
    • Soovitus: Kontrollimaks et leidsid õiged numbrid, trüki need välja.
  • Leia sisestatud positsioonide põhjal nendele vastavad arvud algsest massiivist. Kasutades neid arve tee järgnevat:
    • Võrdle neid kahte arvu ning kuva nende omavaheline suhe (väiksem, suurem, võrdne)
    • Koosta jagamistehe ning kuva selle vastus. Tehe tuleb koostada sedasi, et suurem arv on jagatav ning väiksem arv on jagaja.
    • Vastus anna ühe komakohaga
  • Ülesandes on vaja luua neli funktsiooni. Funktsioonid on sulle vähemal või rohkemal määral kirjeldatud järgnevas peatükis.
Loodavad funktsioonid

1. Massiivi lugemine. Selleks korduvkasuta koodi varasematest programmidest. Kopeeri funktsioon koos sellele eelneva kommentaariga.

2. Indeksi lugemine. Selleks tuleks luua uus funktsioon. Loome korduvkasutatava funktsiooni, mida saad tulevikus kasutada igal korral, kui on vaja kasutajalt lugeda täisarv kindlas vahemikus (nt 0 … 5, -10 … 10 jne). Kui tegid eelmine nädal lisaülesande ära, on sul see funktsioon suure tõenäosusega juba olemas. 

Pakun välja kaks funktsiooni varianti, Vali kumb meelepärasem tundub ja realiseeri see.

Esimene versioon eeldab, et kasutajale esitatav küsimus küsitakse väljaspool seda funktsiooni.

Teine versioon eeldab, et küsimus saadetakse funktsiooni kaasa ja väljastatakse selle sees. Vaata esimest teooriakildu.

3. Arvude võrdlemine. Siia funktsiooni tuleks edastada 2 arvu, mida võrreldakse omavahel ning väljastatakse kumb neist oli suurem (või olid nad võrdsed). Väljastus toimub funktsioonis sees. Väljastus on kujul “a < b”, “a > b” või “a = b”

NB! Arvude edastamiseks siia funktsiooni vaata teist infokildu!

4. Jagatise teostamine.  Siia funktsiooni edastatakse samamoodi kaks arvu. Taaskord toimub arvude võrdlemine nagu ka eelmine kord, kuid sel korral määrab võrdluse tulemus jagamistehte operandide järjekorra.

Näide lahendusest

NB! Näites on nähtavale jäetud silumiseks kasutatavad read (algusega DEBUG), mida soovitan ka sinul alguses teha. Kui oled indeksite põhjal arvude valimises kindel ja kõik töötab, soovitan need välja kommenteerida.

Testid

Järgnevalt pakun välja osalise loetelu testidest:

  • Proovi koodi sisenditega, mis peaksid andma tulemuse ilma ühegi veata.
  • Proovi indekseid, mis on massiivi piiridest väljas.  Katseta seda nii esimese kui teise sisendiga.
  • Proovi massiivi piiridest välja jäävaid indekseid korduvalt, et programm ei läheks edasi enne kui sobilik sisend on saadud.
  • Proovi piirjuhtusid
    • Kui loendasid 0 – 4, proovi -1, 0, 4, 5
    • Kui loendasid 1 – 5, proovi 0, 1, 5, 6
  • Proovi sisendeid, mis testiksid läbi kõik 3 võrdlusjuhtu (<, >, ==)
  • Proovi nulliga jagamist. NB! Nulliga jagamine on defineerimata operatsioon. Nulliga jagamine võib jooksutada programmi või isegi kogu arvuti kokku (mikrokontrollerite puhul on tavapärane, et terve seade taaskäivitab end nulliga jagamise tulemusel). Nulliga jagamistehet ei tohi sooritada!

Lisaülesanne 1: ühekordsed numbrid

Ülesanne on tunnitöö #1 laiendus.

Nõuded
  • Ülesanne peab olema tehtud laiendusena baasülesandele. Baasülesande funktsionaalsus peab säilima täies ulatuses.
  • Lahenduses võivad korraga esineda mõlema edasijõudnute ülesande tulemused.
  • Loo uus massiiv olemasolevate arvude põhjal. Uus massiiv tuleb luua põhimõttel, et kõik numbrid tohivad esineda vaid ühekordselt.
Näide lahendusest

Lisaülesanne 2: paarid

Ülesanne on tunnitöö #1 laiendus.

Nõuded
  • Ülesanne peab olema tehtud laiendusena baasülesandele. Baasülesande funktsionaalsus peab säilima täies ulatuses.
  • Lahenduses võivad korraga esineda mõlema edasijõudnute ülesande tulemused.
  • Leia ja kuva massiivis olevate arvude ja nende vastandarvude paarid.
  • Samu arve tohib paarina kuvada ühekordselt, olenemata arvude järjestusest või korduste arvust.
Testimine

Testimisel veendu, et paarid ei korduks.

Pärast tundi peaksid

  • Oskama sõnesid (teksti) funktsioonidesse edastada
  • Oskama edastada nii terviklikku massiivi kui üksikut massiivi liiget funktsiooni
  • Teadma ja oskama koostada ning kasutada massiive, kus massiivi kõik liikmed (kohad) ei ole kasutusel.
  • tundma end mugavamalt massiivi käsitledes ka juhtudel, kus läbikäik pole esimesest viimase elemendini.
  • oskama kopeerida ühest massiivist arve teise massiivi, kusjuures kasutades kahte erinevat indeksit ühes samas tsüklis erinevate massiivide indekseerimiseks.
  • Tundma ennast juba natuke kodusemalt funktsioone kasutades.

PR1ET5: Massiivid

Labori materjal

Esitamisele kuuluvad ülesanded

Selle nädala tunnitöö on jupitatud kaheks osaks. Alguses lahenda esimene osa ja esita oma lahendus. Seejärel laienda lahendust teise osaga ning esita oma lahendus uuesti.  Baasülesandele on sel korral pakutud  2 laiendavat lisaülesannet.

Ülesanne 1 osa 1: ekstreemumite leidmine

Ülesande esimene osa on tunnis tehtud UML tegevusdiagrammi realisatsioon C programmikoodina. Esimeses osas pead sa kokku looma 4 funktsiooni lisaks main()  funktsioonile!

Lae alla ülesande aluskood: https://blue.pri.ee/ttu/files/iax0583/aluskoodid/5_minmax_template.c

Nõuded
  • Esimene ülesande osa peab vastama tunnis tehtud UML tegevusdiagramile.
  • Ülesande lahendamiseks pead looma 4 funktsiooni. Funktsioonid on aluskoodis kirjeldatud kommentaaridena. Kirjuta oma funktsioon kohe kommentaari järgi. Lisa puuduvad elemendid nagu makrod, muutujate deklaratsioonid, funktsioonide prototüübid ja väljakutsed.
  • Klaviatuurilt loetakse 6 täisarvu, mis salvestatakse massiivi.
  • Sisestuse kulg peab olema kasutajale arusaadav, näidates mitmendat arvu parasjagu sisestatakse ning mitu kokku kasutajalt oodatakse.
  • Massiivist leitakse ja väljastatakse suurim sisestatud arv. Vähim arv tuleb leida funktsioonis, mis tagastab tulemuse. Tulemuse väljastus toimub main() funktsioonis.
  • Massiivist leitakse ja väljastatakse vähim sisestatud arv. Suurim arv tuleb leida funktsioonis, mis tagastab tulemuse. Tulemuse väljastus toimub main() funktsioonis.
  • Väljastatakse algselt sisestatud massiivi kõik liikmed. Väljastus loo eraldi funktsioonis.
Ülesande lahendamise juhend

NB! Enne funktsioonide loomist loe läbi aluskoodis olev funktsiooni kirjeldus ja veendu, et saad sellest aru (st mida funktsioon teeb, mis on selle parameetrid ja kas ning mida see funktsioon tagastab. Iga funktsioon tuleb realiseerida ettekirjutatud funktsiooni kommentaari järel.

  1. Alusta funktsiooni  ReadIntArray()  lahendamisest. See on esimene funktsioon kohe pärast main() funktsiooni. Sul tuleb kirjutada tsükkel, mille igal kordusel küsitakse kasutajalt väärtus ning seejärel loetakse see massiivi.
  2. Testimaks kas see töötab, pead selle funktsiooni välja kutsuma. Selleks pead esmalt massiivi deklareerima kus arve hoida. Seejärel kutsu funktsioon  ReadIntArray()  välja, andes talle kaasa loodud massiiv ning selle pikkus.
    Eeldusel, et pikkust kirjeldav makro nimi on NUM_CNT ja massiivi nimi on numbers , võiks selle funktsiooni väljakutse näha välja midagi sarnast: ReadIntArray(numbers, NUM_CNT);  Proovi nüüd kas massiivi arvude lugemine toimis.
  3. Veendumaks, et numbrid ka korrektselt loetud said peaksid massiivi sisu välja trükkima. Selleks realiseeri funktsioon PrintArray()   ja kutsu see välja main() funktsioonist. Sel korral pead tagastuse tüübi ja parameetrid ise valima. Kui funktsioon tehtud ja välja kutsutud, peaksid nägema oma massiivi sisestatud numbreid.
  4. Nüüd tuleb sul veel viimased kaks funktsiooni lõpetada. Mõlemad on kirjeldatud kommentaaridena aluskoodis. Lõpeta funktsioonid ja väljasta tulemused.
    NB! Tulemust tohid väljastada vaid main() funktsioonis. Min ja max väärtuste leidmiste funktsioonides väljastada tulemust ei tohi! Selleks pead tulemuse nendest funktsioonidest esmalt tagastama. 
Testimine

Test 1: min esimene, max viimane

Test 2: min viimane, max esimene

Test 3: Negatiivne min. Min ja max on massiivi keskel.

Ülesanne 1 osa 2: asukohtade ja korduste arvu leidmine

Ülesande esimeses osas leidsid massiivist ekstreemväärtused. Teises osas tuleb leida nende positsioonid ning mitu korda väärtused massiivis esinesid.

Nõuded
  • Kuva kõik positsioonid, kus asus massiivi suurem väärtus. Tulemus tuleb leida ja väljastada eraldi funktsioonis
  • Kuva kõik positsioonid, kus asus massiivi väikseim väärtus. Tulemus tuleb leida ja väljastada eraldi funktsioonis
  • Kuva mitu korda suurim ja suurim väärtus massiivis eksisteeris. Tulemus tuleb leida eraldi funktsioonis, tagastada ning seejärel väljastada main()  funktsioonis.
  • Kuvatavad positsioonid peavad olema vastavuses sisestusega.
Ülesande lahendamise juhend

Selle osa lahendamiseks pead looma kokku kaks funktsiooni. Mõlemad funktsioonid on kirjeldatud funktsiooni kommentaaridena. Kopeeri funktsiooni kommentaar enda koodi ja kirjuta lahendus selle järel

Esimene funktsioon väljastab eelnevalt leitud ekstreemumväärtuse kõik asukohad massiivis. Selle lahendamiseks pead looma tsükli, mis käib läbi kõik massiivi liikmed. Iga kord, kui massiivi liikme väärtus on sama kui sinu otsitav (nt minimaalne väärtus massiivis), pead väljastama ekraanile oma praeguse asukoha tsüklis (tsükli praeguse korduse väärtus on seotud massiivi positsiooniga). St kogu funktsioon sisaldab ühte tsüklit, ühte tingimuslauset ja ühte väljastuslauset – ongi kõik.

Loodavat funktsiooni pead korduvkasutama (st 2x välja kutsuma) nii minimaalse kui maksimaalse väärtuse asukohtade kuvamiseks! Tulemustele eelnev tekst (nt “Min value position(s)”) tuleks väljastada main() funktsioonis, enne selle funktsiooni väljakutset.

Kui funktsioon valmis, kontrolli, et see töötab enne kui lähed järgmist funktsiooni lahendama!

Teine funktsioon saab olema vägagi sarnane eelmisele. Sel korral aga peame loendama (st ühte täisarvulist muutujat suurendama sobilikul hetkel) väljastamise asemel. Väljastust selles funktsioonis teha ei tohi! Funktsioon peab oma tulemuse tagastama. Tulemus väljastatakse main() funktsioonis.

Testimine

Test 1: min ja max on ühekordsed

Test 2: min ja max korduvad

Lisaülesanne 1: Tulemuste leidmine massiivist

Selles osas leiame kolm täiendavat tulemust massiivist

Nõuded
  • Loo kolm funktsiooni, vastavalt summa, korrutise ja aritmeetilise keskmise leidmiseks.
  • Aritmeetilise keskmise funktsiooni sisuks ei tohiks olla koopia summa funktsioonist (väldi koodi kopeerimist!). Selle asemel kasuta summa leidmise funktsiooni keskmise leidmise osana.
  • Kõik kolm funktsiooni saavad parameetriteks massiivi ja selle pikkuse ning peavad oma tulemused tagastama. Tulemused väljastatakse main()  funktsioonis.
  • Kuva aritmeetiline keskmine kolme komakohaga
Testimine

Selle ülesande kõige suuremaks komistuskiviks on õige aritmeetilise keskmise leidine.

Lisaülesanne 2: n-arvu sisestus

Pakkumaks kasutajale veidi kasulikumat programmi, peaks kasutaja saama otsustada mitme numbri pealt ta statistikat soovib leida. Pakume kasutajale võimaluse sisestada sisestatavate arvude koguse.

NB! Kuigi suur osa C keele kompilaatoritest toetab muutuva pikkusega massiivide (VLA – variable length array) kasutamist, ei ole see kõigi C standardite kohustusliku osana. St tugi võib kompilaatoris puududa täielikult)

Täiendavalt on VLAde puhul ka teisi probleeme – nt on need sageli aeglasemad kui staatilise suurusega massiivid. VLAd sisaldav kood sisaldab rohkem käske, mis omakorda vajab rohkem protsessori tsükleid (aega) rakenduse jooksutamiseks. Samuti kui ühtegi rangelt nõutud piirangut ei ole, siis on üsna lihtne kogu programm kokku jooksutada, andes ette lihtsalt suurema numbri (nt tahan sisestada 1 000 000 numbrit).

Seetõttu ei ole sul sel korral lubatud kasutada massiive, mille pikkus on määratud teise muutuja kaudu (nt int numbers[numberCount]; , kus numberCount  on täisarvuline muutuja, mis saab oma väärtuse programmi töö ajal). Standardis toetatud universaalne lahendus on kasutada dünaamilist mälu, kuid seda vaatame Programmeerimine 2 aine raames.

Selle ülesande raames peaksid leidma ja määrama maksimaalse võimaliku suuruse, millest kasutaja rohkem numbreid sisestada ei saa. See tähendab, et suure tõenäosusega jääb suur osa massiivi pesadest kasutama. Õnneks on suurused väikesed, seega märkimisväärset probleemi see ei tekita meile.

NB! Enamjaolt on selles aines VLAde kasutamine lubatud. Piirang on seatud ülesandepõhiselt.

Nõuded
  • Luba kasutajal pärast programmi käivitamist otsustada mitme numbriga programm töötab.
  • Piira programmi poolt toetatud numbrite kogust vastavalt loodud massiivi suurusega,
  • Kasutaja poolt sisestuse küsimine peab olema teostatud eraldi funktsioonis, mille pead looma selle ülesande jaoks. Funktsioon tohib alles siis tagastada, kui sisestatud number on sobilik.
    • Kasuta funktsiooni parameetreid piirangute seadistamiseks.
    • Funktsioon mille lood peaks olema korduvkasutatav teistes sarnastes situatsioonides (kuid teiste piirangutega)
  • Numbrite vahemiku võid ise otsustada mõistlikus vahemikus (nt kuni 50 numbrit).
  • Ebasobiva numbrite arvu korral loo veakäitumine.
  • Muutuva pikkusega massiivi (VLA – variable length array) kasutada ei tohi.
  • NB! Vaata üle ka koodimisstiil! Muutuja ei tohi olla kirjutatud samas stiilis nagu makro (tüüpviga).
Testimine

Testi hoolikalt kindlasti järgmist

  • Minimaalne lubatud numbrite arv
  • Maksimaalne lubatud numbrite arv
  • Numbrite arv, mis on erinev algsest

Pärast tundi peaksid

  • Tutvuma kodutöö 1 nõuete ja tutvustavate videotega
  • Teadma mida tähendab tüübiteisendus ning kuidas seda kasutada (type casting)
  • Teadma mis asi on murdarvude esitustäpsus ning mis probleeme sellega esineda võib
  • Teadma mis asi on püsikomaarv (fixed point notation) ja mis on ujukomaarv (floating point notation).
  • Teadma mis asi on matemaatika teek (math.h), kuidas seda kasutada, mis seal sees on ning kuidas lisada kompilaatorile täiendav lipp, et see ka kompileeruks.
  • Teadma mis asi on massiiv
  • Oskama massiivi deklareerida
  • Oskama massiivi algväärtustada
  • Oskama indekseerida igat massiivi liiget
  • Oskama indekseerida massiive kasutades tsükleid
  • Oskama leida ekstreemväärtusi arvujadast

Täiendav materjal

3. labor: tsüklid

Labori materjal

Esitamisele kuuluvad ülesanded

Selles laboris on 2 baasülesannet, mille raames lood kokku 5 programmi. Täiendavalt on laboris 2 lisaülesannet, mis tohib olla kirjutatud ühe programmina.

Ülesanne 1: 5-arvu summa.

Selle ülesande raames tuleb sul luua programm, mis leiab viie kasutaja poolt sisestatud arvu summa. Programm tuleb sul luua 3 korda – üks programm iga tsükli tüübi kohta. Kõik kolm loodavat programmi täidavad sama ülesannet.

Näidis oodatavast tulemusest
Nõuded
  • Programm küsib kasutajalt 5 arvu.
  • Pärast arvu sisestamist kasutaja poolt tuleb väljastada praegune summa.
  • Pärast viimase arvu sisestamist kuvatakse lõppsumma. Vahesummat enam ei kuvata.
  • Programm peab andma kasutajale arusaadava väljundi mida temast oodatakse.
  • Programmis ei tohi olla maagilisi arve.
  • Programmi disain peab olema selline, et kui sama ülesannet tuleks teha 10, 20 või ka 1000 arvu korral, siis selleks peaksid muutma programmikoodis vaid ühte numbrit! Testi seda enne esitamist – tehes muudatuse vaid ühes kohas kogu programmis peab see töötama näiteks 7 arvuga.
Vihjeid
  • Mõtle hoolikalt läbi milliseid muutujaid sul vaja on! Olenemata sellest mitme arvu summat sa leiad on muutujate arv alati sama.
  • Tsüklite puhul on soovitatav loendamist alustada nullist. Seda kuna arvutite puhul hakatakse loendama nullist ning väga paljud süsteemid sõltuvad sellest. Tavaline arvutikasutaja aga hakkab loendama ühest. Selleks
    • (i + 1) võtab muutuja i väärtuse ning kasutab seda suurendatud väärtust konkreetse tehte juures. Küll aga ei suurenda see i enda väärtust. Sedasi saame ajutiselt kasutada ühe võrra suuremat väärtust. Näiteks printf("%d", i + 1);
    • Operatsioonid nagu i++, ++i, i += 1 ja i = i + 1 jällegi suurendavad i väärtust jäädavalt.

Ülesanne 2: kassasüsteem tsüklitega

Selle ülesande juures lisame mõned elementaarsed veakontrollid eelmisel nädalal tehtud tunnitööle. Aluskoodiks võid kasutada nii enda eelmise nädala programmi kui ka meie poolt antud valmislahendust.

Tunnitöö 2 aluskood: [ kassaregister ]

Näidis oodatavast tulemusest

Nõuded

Programmi tuleb lisada järgnev funktsionaalsus:

1. Kliendikaardi ja lisasoodustuse saamise kontroll.

  • Küsi sisestust senikaua kuniks sisestatakse kas 1 või 0.
  • Kui sisestus polnud sobilik – st polnud 1 või 0, kuva veateade!
  • Soovitus: Kasuta realisatsiooniks järelkontrolliga tsüklit.

2. PIN-koodi tohib sisestada kuni 3 korda.

  • Kui programmi jooksul on PIN koodi 3 korda valesti sisestatud, kuva veateade ja sulge programm.
  • Kui enne kordade arvu täitumist sisestatakse õige PIN kood, kontrolli jääki ja soorita võimalusel tehing.
  • Soovitus: kasuta eelkontrolliga loendavat tsüklit ja katkestust.

Lisaülesanded

Lisaülesanne 1: Mario torn
  • Kasutades üksteise sisse paigutatud tsükleid, loo trellidest treppide kujutis, kokku 13 trepiastet
  • Treppide ülemises otsas peab olema mehike
    Vihje: ASCII stickman
  • Kõige ülemise astme laius peab olema piisav, et mehikesel oleks jalgealune stabiilne. Iga järgnev aste on ühe võrra laiem.
  • Iga rea lõpus näita mitu tellist kulus rea jaoks ja palju on kokku kulunud.
  • Joondus peab nii nagu järgneval näidisel!
Lisaülesanne 2: Torni peegeldus ja kõrgus
  • Küsi kasutajalt platvormi kõige alumise astme laius (vahemikus 7 – 20)
  • Trepid on sel korral peegeldatud kujul, täpselt nii nagu Mario mängus.
  • Kõige madalam trepiaste peab algama ekraani vasakust osast. Sellele ei tohi eelneda tühikuid.
Vihjeid

Pärast tundi peaksid 

  • Teadma mis sammud läbitakse selleks, et meie kirjutatavast lähtekoodist saaks arvuti poolt jooksutatav masinkood
  • Teadma mis asi on #define makro ja kuidas see töötab
  • Teadma mis asi on maagiline number ning kuidas neid likvideerida
  • Teadma probleemidest, mis kaasnevad algväärtustamata muutujatega
  • Oskama kasutada kõiki kolme tüüpi tsükleid kindla korduste arvuga.
  • Oskama luua tsüklit, mille korduste arv pole piiratud
  • Teadma kuidas inkrementeerida ja dekrementeerida.
  • Teadma mis vahe on eel- ja järelkontrolliga tsüklitel
  • Suutma koodiplokke korrektselt üksteise sisse panna (nt tingimuslause tsükli sees, tsükkel tsükli sees, …)
  • Oskama kasutada kontrollauseid break; ja continue;
  • Teadma, et me EI KASUTA goto lauset ning miks me seda ei tee
  • Oskama kasutada avaldist või konstanti printf argumendina
  • Oskama modelleerida tsükleid UMLis

Täiendav materjal

1. labor: Tere maailm

Labori materjal

Esitamisele kuuluvad ülesanded

Selles laboris kuulub enamik tööd koos läbi tegemisele. Laboris kuulub esitamisele üks baasülesanne ja üks lisaülesanne.

Ülesanne 1: Paarsuse kontroll (baasülesanne)

Nõuded
  • Kasutajalt küsitakse ja seejärel loetakse sisse täisarv.
  • Programm väljastab kas sisestatud arv oli paaris või paaritu.
Pseudokood

Pseudokood on üks võimalus kirjeldada algoritme. Pseudokood on sarnaselt programmile struktuurne, kuid ei hõlma endas programmeerimiskeeltele omaseid reegleid ning jääb seega inimloetavaks.

Ülesande taust

Mooduljagamine on laialdaselt kasutusel kõiksugu kontrollkoodide arvutamisel. Näiteks kontrollimaks kas isikukood või pangakaardi number on korrektne.

Meie ülesande jaoks rakendame mooduljagamist kahega ehk teostame paarsuse kontrolli – kas arv on paaris või paaritu. Paarsuse kontroll on üks lihtsamatest veakontrollidest näiteks andmesides – kas väärtusega ‘1’ bittide arv andmepaketis on paaris või paaritu? Sedasi on võimalik näiteks kontrollida kas andmete ülekandmisel ühest arvutist teise tekkis viga (ja nagu öeldud, vaid väga lihtsad juhud).

Testimine

Sellel programmil on 2 võimalikku tulemust – arv on paaris või paaritu. Programmi põhjalikuks testimiseks tuleb testida eraldi mõlemat juhtu.

Test 1: paarisarv

Test 2: Paaritu arv

Ära unusta oma tunnitööd ette näitamast!

Lisaülesanne: Kolme ja viiega jagamine

Enne edasijõudnute ülesande tegemist lahenda ära tavaülesanne!

Loe loogikaavaldiste kasutamise kohta (eng): https://blue.pri.ee/ttu/coding-guides/conditional-statements/#Logical_operators

Nõuded
  • Kasutajalt küsitakse ja seejärel loetakse sisse täisarv
  • Programm väljastab kas arv jagus kolmega, viiega, mõlemaga neist või mitte kummagagi ning väljastab leitu.
  • Programm leiab jagatise täisosad ja jäägid sellest arvust jagades seda nii kolme kui viiega. Kõik neli tulemust väljastatakse olenemata sisendist.
  • Arvutustehteid (nt jagamisi) tohid teha vaid ühekordselt. Kui tulemust läheb vaja kasutada mitmes kohas, tuleb need eelnevalt salvestada muutujatesse.
Ülesande taust

Ülesanne põhineb klassikalisel intervjuuküsimusel mida kasutakse tarkvaraarendajate värbamisel. Tegu on nn  FizzBuzz ülesande muudetud versiooniga.

Testimine

Lähtuvalt koostatud tingimustest peab ülesandel olema 4 erinevat võimalikku tulemust.

Test 1: Arv, mis jagub nii kolme kui viiega

Test 2: Arv mis jagub ainult kolmega

Viimased 2 testi mõtle ise välja. Veendu, et lahendus töötab korrektselt kõigil juhtudel.

Pärast seda tundi peaksid

  • Mõistma ainega seotud nõudeid, sh kuidas saada aines hinne.
  • Oskama sisse logida Linuxisse ülikooli arvutis
  • Teadma mis on peamised rakendused mida kasutame
  • Teadma kust vajalikku materjali leiab
  • Teadma mis on C keel ja kus seda peamiselt kasutatakse
  • Teadma milline on programmi struktuur ning olema võimeline ka selles lihtsa programmi kirjutama ning käivitama. Peaksid mõistma järgmiseid programmeerimisega seotud mõisteid ja kontseptsioone
    • #include preprotsessori käsklus
    • Mis on main() funktsioon, miks ta eriline on
    • Kuidas deklareerida muutujat, mis on andmetüüp
    • Kuidas trükkida teksti kasutades printf funktsiooni, vahetada rida, printida välja ühe või mitme muutuja sisu.
    • Klaviatuurilt väärtuste lugemine ja salvestamine (printf funktsioon)
    • Elementaarsed matemaatika operatsioonid
    • Kergemad tingimuslaused (if/else)
    • Täisarvu jagatis, moodularvutus
  • Mõistma mis asi on algoritm
  • Mõistma, mis asi on UML ja miks seda kasutatakse. Saama aru selle algsetest elementidest (algus, lõpp, tegevus, hargnemine, koondumine). Pead olema võimeline lihtsama UML diagrammi kokku panna.

Täiendav materjal