81 Kontrolltöö näidisülesanne 1: Pakiautomaat

Oleme jõudmas “Tarkvaraarenduse” kursusega lõpule. Selles osas uusi asju enam ei tutvustata, see-eest püüame õpitu kokku võtta.

Järgnevate ülesannete läbilahendamine annab teatud kindlustunde, et õpitud oskutes on vajalik tase saavutatud. Siiski ei kata need ülesanded päris kõike õpitut.

Ülesanne. Pakiautomaat

Pakiautomaadi kapid on määratud kahe koordinaadiga — esimene näitab korrust ja teine näitab, mitmes kapp see korrusel on. Nummerdamine algab nullist ja korruste loendamine ülalt.

Näiteks

00 01 01 03 04
10 11 12 13 14
20 21 22 23 24

Kappide sisu on kirjas tekstifailis kapid.txt. Tühja kappi tähistab -. Eraldajaks on koma.

-,kiri,-,pakk,kiri
pakk,-,-,-,pakk
-,-,-,-,pakk

Tekstifailis uksekoodid.txt on neljakohalised kordumatud uksekoodid ning vastavate kappide koordinaadid. Eraldajaks on koma.

0132,0,1
9142,0,3
8112,0,4
4444,1,0
5131,1,4
0000,2,4

Kirjuta programm, mis teeb järgnevat.

Kõigepealt koostab programm kapisisude faili kapid.txt põhjal kahemõõtmelise järjendi ning väljastab selle ekraanile. Ülaltoodud faili korral:

[['-', 'kiri', '-', 'pakk', 'kiri'],
['pakk', '-', '-', '-', 'pakk'],
['-', '-', '-', '-', 'pakk']]

Järjend on siin mitmel real illustreerimiseks, programm võib selle ühes reas väljastada.

Uksekoodide failist uksekoodid.txt loeb programm andmed sõnastikku, kus võtmeteks on uksekoodid (sõnedena) ja väärtusteks vastavate kappide koordinaadid (andmestruktuur on lahendaja valida).

Seejärel küsib programm kasutajalt tegevuse, mis sisestatakse numbri abil.

Võimalikud valikud on järgmised.

  1. Saadetise kättesaamine
    • Kasutajalt küsitakse uksekood.
    • Kui selline uksekood on olemas, siis „avatakse” vastav kapp ning teatatakse, mis on selle sisu. Vastav kirje eemaldatakse sõnastikust ja kapi sisude järjendis määratakse vastavale kohale väärtus -.
    • Kui sellist uksekoodi ei ole, väljastatakse ekraanile vastav teade.
  2. Tühjade kappide arvu küsimine
    • Ekraanile väljastatakse tühjade kappide arv.
  3. Saadetise saatmine
    • Kui tühje kappe pole, siis väljastatakse vastav teade.
    • Kui tühje kappe on, siis küsitakse kasutajalt, mida ta tahab saata. Saadetis paigutatakse ükskõik millisesse tühja kappi ja tehakse muudatus kappide sisu järjendis. Uksekood (nelja numbrimärgiga sõne) genereeritakse juhuslikult ning kui sellist uksekoodi veel pole, täiendatakse uksekoodide sõnastikku. Uksekoodi genereeritakse senikaua, kuni saadakse selline, mida veel pole.
    • Kasutajalt küsitakse, kellele ta tahab paki saata.
    • Postifirmale „saadetakse” (ekraanile väljastatakse) sõnum uue saadetise andmete ja kapi uksekoodiga.

Pärast tegevust väljastatakse kappide sisu järjend ning uksekoodide sõnastik ekraanile.

Järgnevad näited on üksteisest sõltumatud. Kõik lähtuvad ülaltoodud failidest.

Näide 1 a

[['-', 'kiri', '-', 'pakk', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
Palun valige tegevus: 1
Palun sisestage uksekood: 3232
Sellist uksekoodi ei ole.
[['-', 'kiri', '-', 'pakk', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
{'0132': (0, 1), '9142': (0, 3), '8112': (0, 4), '4444': (1, 0), '5131': (1, 4), '0000': (2, 4)}

Näide 1 b

[['-', 'kiri', '-', 'pakk', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
Palun valige tegevus: 1
Palun sisestage uksekood: 9142
Avaneb kapp (0, 3), milles on pakk
[['-', 'kiri', '-', '-', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
{'0132': (0, 1), '8112': (0, 4), '4444': (1, 0), '5131': (1, 4), '0000': (2, 4)}

Näide 2

[['-', 'kiri', '-', 'pakk', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
Palun valige tegevus: 2
Praegu on 9 tühja kappi
[['-', 'kiri', '-', 'pakk', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
{'0132': (0, 1), '9142': (0, 3), '8112': (0, 4), '4444': (1, 0), '5131': (1, 4), '0000': (2, 4)}

Näide 3

[['-', 'kiri', '-', 'pakk', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
Palun valige tegevus: 3
Mida tahate saata? kiri
Kellele tahate saata? Lottele
Sõnum postifirmale: Kapis (0, 0) on kiri, mis saadeti Lottele. Uksekood on 5465.
[['kiri', 'kiri', '-', 'pakk', 'kiri'], ['pakk', '-', '-', '-', 'pakk'], ['-', '-', '-', '-', 'pakk']]
{'0132': (0, 1), '9142': (0, 3), '8112': (0, 4), '4444': (1, 0), '5131': (1, 4), '0000': (2, 4), '5465': (0, 0)}

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, ja Säde Mai Krusberg jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut