PR1ET2: tingimuslaused

Praktikumi materjal

Esitamisele kuuluvad ülesanded

Selles praktikumis on kaks baasülesannet, millest esimene toetub poe kassasüsteemile ja teine poe kaubakaalule. Esimest ülesannet laiendab lisaülesanne, mis lisab boonuspunktide kasutamise võimaluse.

Ülesanne 1 [W02-1]: poekassa

Poekassa ülesandes simuleerime lihtsat kassasüsteemi rakendust, eesmärgiga harjutada tingimuslausete koostamist. Juhindu etteantud aluskoodis olevatest kommentaaridest ning kirjuta vajalikud koodiread pärast kommentaari!

Nõuded
  • Programm peab loogiliselt olema üks-ühene etteantud algoritmiga
  • Programm peab olema ehitatud etteantud aluskoodi põhjale. Sinu ülesanne on lisada vajalikud printf , scanf  laused, arvutustehted ja tingimuslaused sinna kuhu vaja. Juhindu kommentaaridest ja etteantud tegevusdiagrammist.
  • Ära muuda muutujate nimetusi ega programmi struktuuri.
  • Soovitus: Kontrollimaks, et programm käitub korrektselt ja muutujad omavad neid väärtusi, mida ootad, tasub lisada vahele mõni täiendav printf  lause.

Lae alla ülesande 1 aluskood: [et]

Algoritm

Testimine

Järgnevalt pakun välja mõned olulised testid loodavale programmile. NB! Vähemalt ühe olulise testjuhu olen jätnud katmata. Kas tead millise?

Kliki minul, et näha testjuhte!

Test 1: Klient, kellele soodustust ei rakendata, ja sooritab eduka makse. Testime ka murdarvu kasutamist.

Test 2: Klient, kellel on kliendikaart ja lisasoodustus.

Test 3: Klient, kellel on täpselt vajaminev rahasumma kontol.

Test 4: Klient, kes saab ostu sooritada vaid pärast soodustuse rakendamist.

Test 5: Klient, kelle kontol pole piisavalt raha.

Test 6: Klient, kes ei tea oma PIN koodi.

Ülesanne 2 [W02-2]: poekaal

Ülesande raames tuleb luua programm, mis simuleerib toidupoes asetsevat toidukaalu.

Tunnis luuakse ülesande struktuur UML tegevusdiagrammina. Sinu programm peab omama vähemalt samaväärset funktsionaalsust.

Nõuded
  • Kaalul peab olema kokku vähemalt neli erinevat tootevalikut
  • Tootevalikud on esindatud numbri (tootekood) ja nime kombinatsioonidega (nt 1 – banaan)
  • Kasutaja sisestab klaviatuurilt täisarvulise tootekoodi ja reaalarvulise koguse (kilogrammides)
  • Valitud tootekoodi ja toote kilohinna vaste leidmine tuleb realiseerida kasutades switch  lauset
  • Korrektse kaalu ja koodi korral väljastatakse kasutajale valitud tootekood ja toote nimetus, toote kilohind, sisestatud kaal ning kogusumma
  • Väljastatavad rahasummad peavad olema esitatud kahe komakohaga, kaalu puhul võid kasutada kahte või kolme komakohta.
  • Vigase tootekoodi või kaalu korral tuleb väljastada veateade ning programm täitmine katkestada

Lae alla ülesande 2 aluskood: 2_2_scale_base.c

Algoritm

Koopia algoritmist neile, kes jõuavad tunnis kiiremini teise ülesandeni või kaotavad oma koopia algoritmist. Algoritm lahendatakse tunnis läbi koos.

Testimine

Test 1: Korrektse sisestuse korral antakse tulemuseks hind

Test 2: Vigase tootekoodi puhul antakse veateade

Test 3: Vigase kaalu puhul antakse veateade

Lisaülesanne [W02-3]: boonuskonto

Lisaülesandeks on esimese tunniülesande laiendus.  Selleks lisame kasutajale võimaluse kasutada boonuspunkte.

Ülesannet lahendades mõtle hoolikalt kõigele mis võib valesti minna igas tehingu etapis ning kuidas need omavahel seotud on!

Pane tähele – ülesande lahenduse tulemusena tekib üks pikk spagett – kood, mis on kõik ühes funktsioonis. Selle vastu hakkame võitlema alates neljandast nädalast.

Nõuded
  • Programmi lisatakse kasutaja boonuspunktide arv, algväärtustatuna. Boonuspunktid saavad olla vaid täisarvulised numbrid (nt 1 boonuspunkt, 15 boonuspunkti)
  • Enne tehingu sooritamist kuvatakse kasutajale tema boonuspunktide arv ning kui palju punkte tohib maksimaalselt selle ostu jaoks kasutada, arvestades boonuspunktide reegleid.
  • Seejärel küsitakse kasutajalt kas ta soovib boonuspunkte kasutada, kui jah, siis küsitakse kui palju ta soovib kasutada
  • Boonuspunktide reeglid
    • 1 boonuspunkt võrdsustatakse tehingutes 1 eurosendiga
    • Maksimaalselt saab ostu eest tasuda 90% ulatuses boonuspunktides, mis arvestatakse makstavast summast pärast soodustusi
    • Kui kasutaja sisestab suurema boonuspunktide summa kui tal on või kui tohib ostu eest kasutada, asendatakse see maksimaalse lubatud boonuspunktide arvuga
  • Ülejäänud tehingu loogika on täpselt sama
  • Tehingu lõppedes kuvatakse kasutajale täiendavalt tema boonuskonto jääk
Vajaminevad teadmised

Meeldetuletuseks eelmisest tunnist – kahe täisarvu vaheline jagatis on alati täisarv. Kui on vaja teha jagatis, mille tulemus peab olema ujukomaarv (ehk komaga number), siis peab vähemalt üks jagatises osalevatest numbritest olema komaga arv. See muudab kogu tehte murdarvu jagatiseks.

Näiteks 1 / 100 annab täisarvu 0, kuid 1,0 / 100 või 1 / 100,0 annab ujukomaarvu 0,01.

Korrutamisel reaalarvuga sellist probleemi ei ole – st 10 * 0,01 annab tulemuseks 0,1.

Testimine

Esimeses näites on kasutaja, kes kasutab soodustust. Ilma soodustuseta poleks võimalik ostu sooritada.

Teises testnäites on kasutaja, kes ei soovi oma boonuspunkte kasutada.

Kasutaja soovib kasutada rohkem boonuspunkte kui tal on. Tehing ei lähe läbi kuna raha on liiga vähe, boonuspunktide jääk jääb endiseks.

 

Pärast tundi peaksid

  • Teadma, mis asi on tõeväärtustabel ja kuidas seda lugeda
  • Oskama koostada liittingimusi
  • Oskama inversiooni ja tingimuse lühivormi kasutada
  • Oskama algväärtustada muutujat deklareerimise hetkel
  • Teadma, mida De Morgani seadus tähendab
  • Oskama koodiplokke üksteise sisse pesastada tingimuslausete näitel
  • Oskama kasutada sama muutujat mõlemal pool võrdlusmärki tehetes
  • Oskama kasutada ja väljastada murdarvu määratud komakohtade arvuga
  • Teadma kuidas switch lause töötab ning oskama seda kasutada programmikoodis
  • Oskama modelleerida switch lauset tegevusdiagrammina
  • Oskama modelleerida tingimuslauset alternatiivkujul, ilma kommentaarikastita
  • Oskama kasutada ujumisradu (eraldisi, swim lane)
  • Oskama modelleerida algoritme ja koostada programme, millel on mitu erinevat lõppu

Täiendav materjal