Kodused ülesanded
Ülesannete lahendused paigutada malli (kodu2.zip) (saadaval ka Moodle'is kodutöö esitamise all) ja fail kodu2.cpp
laadida Moodlesse. Ülesanded 2 ja 4 kontrollitakse käsitsi.
1. Kolmnurk
Kirjuta programmilõik (funktsioon kolmnurk
), mis ootab kasutajalt kolmnurga kõrgust (mitte kuvada küsimisel teksti) ja kuvab ekraanile tärnidega täidetud võrdhaarse kolmnurga. Näiteks n = 5 korral saame järgmise kujundi:
![]() |
2. Naelad ja kilod
Kirjuta programmilõik (funktsioon tabel
), mis kuvab ekraanile naela ja kilogrammi võrdlustabeli. Programm küsib kasutajalt alguse, sammu ja lõpu (ilma küsiva tekstita). Tekita kaks 10 sümboli laiust tulpa. Tulba pealkirjad eraldatakse andmetest tärnidereaga. Näiteks, algusega 2.2, sammuga 0.4 ja lõpuga 4.0 kuvatakse järgmine tabel:
![]() |
NB! Ülearuseid tühikuid rea lõpus ei tohi olla! Võrdle väga täpselt oma programmi väljundit Moodle testi väljundiga!
std::print
kasutamisel uurida seda Githubi linki.
cout
ja <<
kasutamisel uuri <iomanip>
päisefaili.
3. Krediitkaardi numbri valideerimine (Luhni algoritm)
Kirjuta programm (funktsioon krediitkaart
), mis ootab kasutajalt krediitkaardi numbrit (mitte küsida tekstiga). Programm peab hakkama saama vähemalt 16-kohalise täisarvuga. Programm kuvab ekraanile, kas krediitkaardi number on "korrektne" või "vigane". Aluseks võta Luhni algoritm.
Krediitkaardi numbrite testimiseks saad kasutada järgnevat veebilehte: https://www.dcode.fr/luhn-algorithm.
Sõltuvalt lahendusviisist on vaja aru saada erinevustest täisarvutüüpidel.
Uuri täisarvu erinevaid tüüpe ja nende esitusvahemikke.
4. Blackjack ehk 21
Kirjuta lihtne mängu blackjack simulatsioon (funktsioon blackjack
). Siin ülesandes on lihtsustatud blackjack.
Blackjackis võistlevad diiler ja mängija. Võidab see, kelle kaartide summa on lähedam arvule 21 (kuid mitte suurem kui 21). Diileril on käes kaardid, mille summa on vähemalt 16 ja mitte suurem kui 21. Diileri kaardisumma on mängija eest peidetud. Mängija saab järjest tõmmata kaarte ja lõpuks loobuda.
Mängija võidab, kui
- kaartide summa on täpselt 21
- loobumise hetkel on mängija kaartide summa lähemal arvule 21 (kuid mitte suurem kui 21) kui diileri oma.
Mängija kaotab, kui
- kaartide summa on üle 21
- loobumise hetkel on diileril kaartide summa sama või suurem mängija omast.
Selles ülesandes on vaja kasutada juhuarvude genereerimiseks Mersenne Twister pseudojuhuslike arvude genereerimist. Pseudojuhuslike arvude generaator on fikseeritud algoritm, mida algväärtustatakse RNG arvuga ehk seemnega (seed). Sama seemne korral genereeritakse samad arvud samas järjestuses. Seemneks kasuta unsigned long
või unsigned int
tüüpi arvu. Generaatoriks on mt19937
, mis asub päises <random>
.
Saadud juhuslik arv teisenda õigesse vahemikku mooduliga, mitte uniform_int_distribution
.
Näiteks programmijupi
mt19937 gen{25}; cout << gen() << " " << gen() << " " << gen() << '\n';
käivitamisel saame alati tulemuseks
3737154692 2989580606 2500860378
Programm peab
- küsima kasutajalt RNG arvu Mersenne Twister generaatori algväärtustamiseks
- looma suvalise arvu lõigul [16-21], mis tähistab diileri kätt
- järjest genereerima kaarte lõigul [2-11] ja küsima kasutajalt, kas ta soovib jätkata
- kui kasutaja vastab valesti küsimisele (j/e), siis kuvama "Proovi uuesti!" ja ootama sobivat sisendit.
Programm peab arvestama reaalse olukorraga, kus kaardipakis on täpselt neli sama väärtusega kaarti, st rohkem kui neli sama numbriga kaarti ei saa tekkida. Sellises olukorras on vaja tõmmata uus kaart kuni sobivani.
Näidisväljundeid programmi tööst:
![]() |
=======================
![]() |
=======================
![]() |
=======================
![]() |
Võrdle väga täpselt oma programmi väljundit Moodle testi väljundiga! Erinevuste leidmiseks saab kasutada online võrdlejat, nt https://www.diffchecker.com/text-compare/