Maija Saprātiņa uzzina, kas ir algoritms
Nākamreiz Maija un Pēcis satikās Pēča mājās, jo viņš gribēja pastāstīt, kas ir programma, programmēšana un programmēšanas valoda. Bet par to var runāt arī bez paša elektroniskā skaitļotāja.
Pārrunas ar Algoritmu tiešām bija vainagojušās ar panākumiem. Maijas apmācīšanai tika iedots mašīnlaiks — kad var strādāt ar ESM — un par skolotāju iecelts Pēcis. Turklāt Algoritms piebilda, ka runa varot būt tikai par nopietnu mācīšanos, nevis par kaut kādu trādirīdi, kā dažreiz iedomājoties. Maijai gan šī piezīme likās pilnīgi lieka un klaji audzinoša, bet Algoritma klātbūtnē viņa to neteica.
Kļuvis par skolotāju, Pēcis sarunai rūpīgi gatavojās un visu, ko zināja, pamatīgi apdomāja. Un, jāsaka, viņš zināja diezgan daudz.
Tiesa gan, sākumā viņš centās izteikties pārāk gudri.
Pirms programmas vienmēr ir algoritms
— Pirms sākam diskutēt par programmas un programmēšanas jēdzieniem, jāizanalizē fundamentālais algoritma jēdziens.
— Kas, kas?
— Tas, ka vispirms vajag saprast, kas ir algoritms.
— Nu labi. Gribu dzirdēt.
ALGORITMS— Tā, kā skolā jāatbild stundās, es tev izskaidrot nevaru. Bet, ja runājam vienkārši, algoritms ir priekšraksti, pēc kuriem jārīkojas, lai kaut ko izdarītu. Jeb varbūt tā... Ar algoritmu tiek izskaidrots, kas jādara, lai kaut ko izdarītu. Bet šim izskaidrojumam jābūt ļoti skaidram un precīzam. Katru reizi, uzsākot kaut ko darīt, jāparedz visi iespējamie iznākumi, kā arī jāizplāno, kas katra iznākuma gadījumā jādara. Laikam nav visai skaidrs?
— Kāpēc gan ne! Aizej tur, nezin kur, izdari to, nezin ko.
— Hm. Tad varbūt aplūkosim kādu piemēru. Ņemsim algoritmu, kā pirmklasnieks Pēcītis nāk mājās no skolas.
— Tu pats, vai?
— Nav svarīgi. Ja mājāsnākšanas procesu aplūkotu sīki, algoritms būtu ļoti sarežģīts, bet vispārīgos vilcienos, tikai skaidrības labad, to var izklāstīt pavisam viegli. Visīsākais Pēcīša ceļš no skolas uz mājām Programmistu bulvārī 38 ir tāds, kā šeit uzbildēts. Viss sarežģās tāpēc, ka namu nr. 36 nevar apiet no kreisās puses, ja tur skraida suns Briesmonis, ko saimnieks bieži palaiž savā vaļā. Dažu iemeslu dēļ, kurus sīkāk aplūkot nav vajadzības, Briesmonis Pēcīti ļoti neieredz. Tātad, ja Briesmonis nav piesiets, namu nr. 36 vajag apiet no labās puses. Bet arī šeit iespējami sarežģījumi, jo te var spēlēties piekasīgais un lecīgais mocītājs Bidzis Huligāns. Tas ir vēl sliktāk, nekā sastapties ar Briesmoni.

Algoritmus attēlo ar blokshēmām
— To, ko es pastāstīju, var attēlot shematiski — ar algoritma blokshēmu. Paskaties uz šo zīmējumu.

BLOKSHĒMABlokshēmā taisnstūrveida blokos aprakstītas tās Pēcīša darbības, kuras neprasa nekādus spriedumus, nekādus lēmumus, bet rombveida blokos attēloti jautājumi, uz kuriem Pēcītim ir jāatbild ar «jā» vai «nē», izmantojot informāciju, kuru viņš iegūst darbības gaitā. Atkarībā no atbildes iespējama divējāda turpmākā darbība. Kā redzi, blokshēmā ir divi rombi ar jautājumiem «Vai Briesmonis skraida?» un «Vai Bidzis Huligāns spēlējas?».
— Jā-ā, shēma ir interesanta, it sevišķi Bidzis Huligāns. Bet saki, lūdzu, vai es pareizi saprotu: ja Briesmonis skraida un Bidzis Huligāns spēlējas, tad Pēcītis tā arī grozīs galvu gan pa labi, gan pa kreisi?
Svarīgs jēdziens — «cikls»
CIKLS— Tieši tā. Viņam būs jāgroza galva tik ilgi, kamēr uz vienu no šiem jautājumiem varēs atbildēt «nē» vai arī viņš pats nokritīs zemē aiz noguruma. Bet zinātniski var teikt, ka algoritmā ir cikls. Spriežot pēc jautājuma, to tu jau esi pamanījusi. Cikls sanāk tāpēc, ka, Briesmonim skraidot un Bidzim Huligānam spēlējoties, bultiņa no pēdējā romba atgriezīsies blokā «Paskatīties pa kreisi». Šim ciklam ir divas izejas pēc nosacījuma. Lūk, shēmā es tās esmu atzīmējis. Citu izeju no cikla nav, tātad citādi tas nevar beigties. Tas arī ir viss.
— Labi. Diez kādas gudrības tās nu nav, bet nāksies tomēr pierast. Un tad vēl. Kad man ir izdevies atrisināt kādu uzdevumu matemātikā, es dažkārt «pārdomāju»: bet kas būs, ja šo nosacījumu mainīs? kas būs, ja šis leņķis nebūs taisns kā uzdevumā, bet šaurs? kas... un tā tālāk. Varbūt pārdomāsim arī tavu algoritmu?
— Nu?
— Piemēram, ja Pēcītim vajadzētu izdarīt visvisādus sarežģītus pagriezienus, kā mūsu mikrorajonā, tad tavā algoritmā faktiski neko jaunu nevajadzētu paredzēt: tu gluži vienkārši pievienotu vēl kādus taisnstūrveida blokus.
— Jā, protams.
— Tālāk. Ja Pēcītim būtu iespējams ne tikai pagriezties pa labi vai pa kreisi, bet arī doties taisni? 23 Tur viņam draudētu, teiksim, sastapšanās ar sētnieci, kura atkal dažu iemeslu dēļ varētu sākt Pēcīti pāraudzināt, bet viņam to nemaz negribas. Ko lai dara šādā gadījumā?

— Tad pievieno taisnstūrveida bloku «Paskatīties taisni uz priekšu» un rombisko bloku ar nosacījuma «Vai sētniece strādā?» pārbaudi. Lūk, šeit apakšā tūlīt pēc bloka ar Bidzi Huligānu.
— Man tā arī likās. Bet pasaki, lūk, ko. Vai ir obligāti, lai no blokiem ar nosacījuma pārbaudēm, kā tu tos sauc, izietu tieši divas bultiņas — viena ar atbildi «jā», otra ar atbildi «nē»? Bet kas būtu, ja uzdotu jautājumu, kuram var būt vairāki atbilžu varianti un ne tik vienkārši kā «jā» un «nē»? Vai tas būs uzskatāms par algoritmu vai vairs ne? Nu, teiksim, jautājums «Cik tev gadu?» vai «Uz kurieni tu ej, Pēcīt?». Ir taču skaidrs, ka ar tādiem jautājumiem, uz kuriem jāatbild tikai ar «jā» vai «nē», daudzmaz sarežģītas darbības nevar aprakstīt.
— Tā... Vienu mirkli... Dziļi roc, es skatos... Arī šajā gadījumā visu var attēlot ar rombveida bloku virkni! Blokos jāpārbauda visi nosacījumi «Vai Pēcītis iet uz mājām?», «Vai uz skolu?», «Vai uz pulciņu?» un tā tālāk. Uz visiem šiem jautājumiem var atbildēt ar «jā» vai «nē». Iznāk, ka tik slikti nemaz nav — pat sarežģītākas darbības var aprakstīt ar tādiem jautājumiem, uz kuriem jāatbild tikai ar «jā» vai «nē». Algoritmos, kā tu drīz sapratīsi, tikai tādi jautājumi vien var būt.
— Skaidrs. Tagad pasaki — kāpēc pašā sākumā tu teici, ka īstais algoritms Pēcīša iešanai uz mājām esot daudz sarežģītāks?
Ievads robottehnikā
— Nu, kā tad, ka sarežģītāks! Iedomājies tādu robotu, kas Pēcīša vietā ietu uz skolu un, protams, arī no skolas uz mājām...
— Oho! Tādu robotu man gan gribētos!
— Un piedevām vēl šis robots būtu ļoti līdzīgs Pēcītim, pat viņa sarežģītajās attiecībās ar Briesmoni un Bidzi Huligānu. Kas šim robotam būtu jāprot? Ja runājam par iešanu no skolas uz mājām, tad vispirms tam būtu jāprot iziet no skolas. Bet ko 24 nozīmē iziet no skolas? Pirmkārt, atvērt durvis. Tas ir, atrast durvju rokturi, nospiest to uz leju, pēc tam durvis pavilkt uz savu pusi, atvērt, cik vajag, pa izveidojušos spraugu izspiesties laukā un durvis aizvērt. Tas viss jādara, pastāvīgi kontrolējot savas darbības: vai rokturis pietiekami nospiests uz leju, vai durvis netiek vilktas par stipru, vai tās ir pietiekami atvērtas. Pie tam robotam ir jāzina, kas darāms dažādās avārijas situācijās.
— Kādas gan te var būt avārijas?!
— Tā dēvē novirzes no paredzētās notikumu gaitas. Piemēram, tās durvis ir aizslēgtas, un visus bērnus un robotus laiž ārā pa sāndurvīm, vai arī puikas ir noskrūvējuši durvju rokturi, vai arī tāda negaidīta situācija, kur durvis jau atvērtas vai pusatvērtas. Robota programmā visas šīs situācijas ir jāparedz. Un sīki jāizskaidro, kas katrā gadījumā darāms. Mēs runājam par durvju atvēršanu, bet tas vēl ir tikai pārsteigumiem un briesmām pilnā ceļa sākums. Un, visbeidzot, katra darbība, par kuru es runāju, arī ir jāsadala atsevišķās vienkāršākās darbībās, kuras gluži tāpat var nepavisam nebūt vienkāršas.

— Jā-ā... Kļūst skaidrs, kāpēc līdz šim vēl nav robotu, kas bērnu vietā ietu uz skolu. Žēl gan...
— Labi. Šodienai pietiks.
— Pietiks gan. Laba daudz nevajag.