22.

Ko vēl var izdarīt

— Tagad tev parādīšu apsolītos uzdevumus. Ir gan ļoti vienkārši, gan arī ļoti sarežģīti. Algoritms teica, ka programmistam jau no paša sākuma jāprot noteikt programmas sarežģītību, to, cik ilgi viņš ar programmu noņemsies.

  1. Spēle ar skaitļiem. Mašīna «iedomājas» vienu skaitli no 1 līdz 1000. Spēlētājam šis skaitlis ir jāuzmin. Minēt drīkst ne vairāk kā desmit reižu. Mašīna, katrreiz saņēmusi minējumu, pasaka, vai tās skaitlis ir lielāks vai mazāks. Izdomāt spēles algoritmu.
  2. Tā pati spēle, taču šoreiz skaitli iedomājas spēlētājs, bet mašīna min.
  3. Tās pašas spēles, kas bija iepriekšējos uzdevumos, bet vienu reizi drīkst mānīties — pateikt, ka skaitlis ir lielāks vai mazāks par pareizo, kad patiesībā nav.
  4. Sportloto. Sastādīt programmas šīs spēles cienītājiem. Vienu, kas izdrukā sešus skaitļus no 49 vai piecus no 36, protams, gadījumskaitļus. Otrai programmai uz diska jāuzkrāj informācija par visiem skaitļiem, kas laimējuši sportloto izlozēs, jāmeklē kopsakars starp šiem skaitļiem un pēc tā jāparedz nākamās izlozes rezultāti.
Ilustrācija
  1. Noprogrammēt šādu spēli: spēlētājs nosauc skaitli no 1 līdz 10, otrs tam pieskaita skaitli robežās no 1 līdz 10 un paziņo summu. Un tā tālāk. 209 Tas, kurš pirmais nosauc summu 100, ir uzvarētājs. Programma var būt gan pirmā, gan otrā spēlētāja lomā. Izdomāt tādu spēlēšanas algoritmu, kas nodrošina uzvaru. Noprogrammēt šo algoritmu. Sastādīt vēl vienu programmu, kura uz uzvaras algoritmu nepārietu uzreiz no paša spēles sākuma, lai pretspēlētājs šo algoritmu nevarētu uzminēt. Bet, ja programma «jūt», ka pretspēlētājs šo algoritmu zina, tad nākamajā spēlē uz uzvaras algoritmu tā pāriet iespējami agri.
  2. Bulgāru tautas uzdevums. Vienam zemniekam ir 25 bifeļgovis. Pirmā dienā dod 1 litru piena, otrā — 2 litrus un tā tālāk līdz divdesmit piektajai, kura dienā dod 25 litrus. Kā lai zemnieks šīs govis taisnīgi sadala starp saviem pieciem dēliem? Katram jāsaņem vienāds govju skaits un no šīm govīm dienā jāizslauc vienāds daudzums piena. Sastādīt programmu uzdevuma atrisināšanai!
  3. Sastādīt programmu, kas ievadīto skaitli no 1 līdz 10 000 izdrukātu ar vārdiem latviski, krieviski, angliski, vāciski. Piemēram, ievadot «25», tiek izdrukāts «divdesmit pieci». Un otrādi — ievadot «divdesmit pieci», izdrukā «25».
  4. Sastādīt programmu, kas jebkuru ievadīto skaitli no 1 līdz 1000 izvadītu romiešu numerācijā un otrādi.
  5. Mašīnā tiek ievadīti trīs pozitīvi skaitļi. Programmai janoteic, vai šie skaitļi der par trijstūra malām. Vai iegūtais trijstūris būs vienādmalu, vienādsānu vai dažādmalu? Vai tas būs taisnleņķa, šaurleņķa vai platleņķa trijstūris? Kāds būs trijstūra laukums? Aprēķināt trijstūra augstumus. Vai no šiem augstumiem var izveidot jaunu trijstūri? Ja var, tad vai tas būs vienādmalu, vienādsānu vai dažādmalu trijstūris? (Skaitļa X kvadrātsakni izrēķina funkcija SQR(X).)
  6. Spēle «Trīs drakoni». Programma izvada divus veselus gadījumskaitļus no 1 līdz 100. Pretspēlētājam jāievada trešais. Ja visi trīs skaitļi der par trijstūra malām, tad spēlētājs iegūst 3 punktus, ja neder, tad zaudē 33. Ja trijstūris ir vienādsānu, tad klāt nāk trīs punkti, ja vienādmalu, tad — 33. Ja trijstūris ir taisnleņķa, tad spēlētājs uzvar un saņem nosaukumu «trīskārtējais 210 lielmeistars». Uzvarai jāsavāc 33×3+3 punkti. Spēli sarežģī tas, ka pirms skaitļu pārbaudes trīsreiz pēc kārtas tiek izraudzīts gadījumskaitlis 1, 2 vai 3. Ja pirmajā reizē uzkrīt trīs, tad parādās pirmais drakons. No sākotnējiem trim skaitļiem tas izvēlas to, kurš dalās ar trīs (ja tāds ir), un šo skaitli samazina par vienu trešdaļu. Ja otrreiz uzkrīt trīs, parādās otrais drakons un skaitli, kurš dalās ar trīs (ja tāds ir), palielina par vienu trešdaļu. Un, ja trešajā reizē uzkrīt trīs, tad parādās trešais drakons un mazāko skaitli pareizina ar trīs.

Kad trijstūra perimetrs ir 33, programma izraugās gadījumskaitli 1, 2 vai 3. Drakons, kuram ir šis numurs, tiek aizdzīts pazemē.

  1. Skaitļu minēšana. Programma izvēlas četrus gadījumskaitļus no 1 līdz 9 un no tiem sastāda simbolu virkni. Pretspēlētājam tā ir jāuzmin. Pēc katras minēšanas programma paziņo, cik cipari ir uzminēti — cik reizes «iedegas zaļā uguntiņa» — un cik cipari gan ir nosaukti, bet ielikti nepareizās vietās — cik reizes «iedegas dzeltenā uguntiņa». Piemēram, programmas izraudzītais skaitlis ir 6834.
Spēlētāja minējumiProgrammas atbildes — «uguntiņas»
33331 zaļa
33662 dzeltenas
66332 zaļas
76331 zaļa, 1 dzeltena
68333 zaļas
68432 zaļas, 2 dzeltenas
6834Uzminēts septiņos gājienos.
  1. Sacenšas divi spēlētāji. Pirmais aizgriežas prom, un otrais mašīnā ievada vārdu. Programma nodzēš ekrānu un ievadīto vārdu otrajam spēlētājam parāda sajauktā burtu secībā. Piemēram, ievadīts vārds MOTORS, tiek parādīts — TROMSO. Otrajam spēlētājam ievadītais vārds ir jāuzmin. Pēc tam spēlētāji apmainās vietām. Programma fiksē katra spēlētāja apdomāšanās laiku un minējumu skaitu.
  2. Spēle «Karātavas». Sacenšas divi spēlētāji. Pirmais 211 aizgriežas prom, un otrais mašīnā ievada vārdu. Programma nodzēš ekrānu un parāda ievadītā vārda pirmo un pēdējo burtu, pārējo burtu vietā ir svītras. Piemēram, ievadīts SKOLNIEKS, parādīts S - - - - - - - S. Pirmais spēlētājs min burtus pa vienam, un programma pārbauda, vai tie kādā vietā der. Ja der, tad attiecīgā svītra tiek nomainīta pret burtu. Programma fiksē minējumu skaitu.
  3. «Mākslīgais intelekts». Programma uz ekrāna izvada uzaicinājumu aprunāties. Ja atbildei tiek ievadīts teikums, kas beidzas ar izsaukuma zīmi, programma izvada «Lūdzu, mierīgāk!». Ja tas beidzas ar jautājumzīmi, programma izvada «Mazliet jāpadomā». Pārējos gadījumos programma ar vienādu varbūtību atbild «Esmu par to dzirdējusi» vai «Un kas tad ir?». Katrai atbildei seko piedāvājums «Parunāsimies vēl».
  4. Atmiņas pārbaude. Uz īsu brīdi programma parāda kādu brīvi izraudzītu burtu (izmantojot funkciju RND). Spēlētājam tas pats burts ir jāievada. Tad programma parāda divus brīvi izraudzītus burtus. Un tā tālāk, līdz kamēr spēlētājs kļūdās. Programma fiksē, cik burtu viņš atcerējies.
  5. Statistiskā modelēšana. M metrus garā ielas malā brīvi izraudzītās vietās piestāj vairākas vienādas automašīnas. Cik automašīnu šādā stāvvietā vidēji varēs atrasties, ja viena aizņem K metrus? Sastādīt programmu šādas situācijas modelēšanai: uz nogriezni [0;1] tiek mesti mazāki nogriežņi ar garumu K/M. Katrreiz, kad mestais nogrieznis uzkrīt virsū kādam no iepriekš uzmestajiem nogriežņiem, mešana jāatkārto. Mešana tiek pārtraukta, kad uz nogriežņa vairs nav vienlaidu brīvas vietas, kuras garums pārsniegtu K/M. Tad tiek saskaitīts, cik mazo nogriežņu iegājis nogrieznī [0;1]. Modelēšanu atkārto 1000 (vai vairāk) reižu un aprēķina nogriežņa [0;1] vidējo ietilpību.
  6. Sastādīt programmu, kas diskā glabātu PSRS hokeja vai futbola čempionāta spēļu rezultātus un pēc pieprasījuma izdrukātu pašreizējo stāvokli turnīrā.
  7. Esperanto valodā visi darbības vārdi tagadnē beidzas ar -as, pagātnē ar -is. Citu vārdu ar šādām galotnēm nav. Sastādīt programmu, kas 212 teikumos tagadni nomainītu ar pagātni. Ņemt vērā, ka pēc vārda var būt gan atstarpe, gan pieturzīme. Vai šā uzdevuma risināšanā esperanto valoda ir jāzina?
  8. Izstrādāt jaunu programmēšanas valodu BALVA, kas nozīmē — beisika atveidojums latviešu valodā. Operatori tajā tiek doti nevis beisikā, bet gan latviešu valodā. Piemēram, GO TO vietā ir EJ UZ; RETURN vietā — ATGRIEZIES; FOR, TO, STEP vietā attiecīgi — PRIEKSH, LIHDZ, SOLIS. Sastādīt programmu, kas balvas programmas pārveidotu par beisika programmām. Balvas programma ir failā uz diska — katra rinda kā simbolu virkne. Un otrādi — beisika programma uz diska jāuzraksta kā simbolu virkņu fails.
  9. Izdevniecība veic kādas grāmatas lasītāju anketēšanu. (Paraugs — anketa grāmatas beigās.) Sastādīt anketēšanas rezultātu apstrādes programmu. Vispirms visi iesūtīto anketu dati ir jāuzkrāj diskā, pēc tam jānolasa un jānoskaidro, piemēram, kā grāmatu ir sapratuši 10—15 gadu vecie lasītāji, kā 30—40 gadu vecie; kas tajā ir paticis zēniem un kas meitenēm; kura vieta grāmatā nav izdevusies; ko varēja saīsināt; par ko pastāstīt plašāk. Izdomāt, kādu informāciju šāda anketēšanas rezultātu apstrāde var dot vēl.
  10. Sastādīt 20 apmācības un atkārtošanas programmas par visu ceturksnī apgūto mācību vielu. Var arī tādas, kas apmācību veic spēles formā — līdzīgi «Trim drakoniem» (sk. 10. uzd.).

— 20 programmas! Neko teikt — asprātīgi! Vai vairāk izdomāt nevarēji?

— Kāpēc gan ne? Ķeries tik pie darba!

— Un tā anketēšana! Kam velti tērēt laiku tādai programmai, ja labi zināms, ka neatsūtīs vairāk par dažām anketām?

— Bet ja nu atsūta, ja negrib citiem izbojāt spēlēšanos?

— Var jau būt ... Un vispār, laiks beigt.

Bija jauks vasaras vakars. Pāri pilsētai tikko bija pārskrējusi lietusgāze, un saule pirms rietēšanas steidza apžāvēt slapjos trotuārus. Neviens nepievērsa uzmanību zēnam un meitenei, kas zem bulvāra liepām nesteigdamies gāja uz stacijas pusi. Negaidīti meitene tik strauji apgriezās riņķī, ka ar somu trāpīja savam pavadonim vēderā, un izsaucās:

— Dzīve ir lieliska vēl arī tāpēc, ka cilvēks var programmēt!

Tas gan nebija viņas izdomāts izteiciens, bet ne Pēcis, ne pa peļķēm lēkājošie zvirbuļi neiebilda.