Vēl viens algoritms
Kad nākamajā dienā Maija un Pēcis atkal satikās, lai nodarbības turpinātu, Pēcis ierosināja:
— Šodien izpētīsim vēl vienu algoritmu.
— Paklau, vai algoritmu un vispārīgu spriedelējumu jau nebūs diezgan? Labāk pastāsti, kā jāstrādā ar ESM.
— Mmm... Es tomēr uzskatu, ka šo algoritmu vajag paskatīties. Tur ir kāda nianse. Manuprāt, ļoti svarīga. Es ātri.
— Nu labi...
Algoritms iesācējiem
— Tas ir algoritms mācībām vidusskolā. Protams, arī stipri vienkāršots. Skaidrs, ka vienpadsmit mācību gadu uz vienas papīra lapas pilnībā attēlot nevar.
— Nu, nu!
— Algoritma blokshēma ir šāda:

SKAITĪTĀJSTā svarīgā nianse šajā algoritmā ir klašu skaitītājs K. Pareizāk sakot, pabeigto klašu skaitītājs, tāpēc ka, skolu sākot, šim skaitītājam piešķir vērtību nulle, bet pēc katras klases beigšanas tā vērtību palielina par vienu.
— Bet ļoti dīvaini, ka tūlīt pēc tam, kad šim skaitītājam tika piešķirta vērtība nulle, tiek pārbaudīts, vai tā nav vienāda ar vienpadsmit. Kas te ko pārbaudīt?
— Pašā skolas sākumā tāda pārbaude patiešām ir lieka, kaut arī kļūdu tā nerada. Bet, ja tu blokshēmu izskatīsi līdz beigām, tad redzēsi, ka pēc katras klases beigšanas uz šo bloku vajag atgriezties un pārbaudīt, vai skaitītājs nav vienāds ar vienpadsmit, tas ir, vai tu jau neesi beigusi vidusskolu. Kāpēc gan veltīgi censties un iet uz skolu, ja tā jau ir pabeigta?!

Darbs ar klašu skaitītāju
— Jā, bet saki — vai tu neesi kļūdījies, uzrakstīdams tādu dīvainu vienādību K=K+1? Tā taču nekad nevar būt!
— Nevar gan. Bet K=K+1 šeit nenozīmē to, ka skaitlis K ir vienāds pats ar sevi plus viens. Šī izteiksme nozīmē sekojošo: lieluma K pašreizējai vērtībai pieskaitīt vienu vienību un rezultātu pasludināt par lieluma K jauno vērtību. Programmisti saka arī tā: lielumam K piešķirt tā vērtību, kas palielināta par vienu. Jeb pavisam īsi: K vērtību palielināt par vienu. Patiesībā zīme «=» šeit nozīmē nevis «vienāds», bet gan «piešķirt vērtību» jeb vienkārši «piešķirt». Programmēšanā tādas atšķirības no pierastā gadās bieži.
— Nekas, pieradīsim. Kā mēs varētu pārdomāt tavu jauno algoritmu? Protams, tas nav pilnīgs, kā arī tu pats atzini. Bet visvairāk man nepatīk tas, ka tu neesi paredzējis iespējamību no skolas aiziet pēc astotās klases beigšanas. Ļauj, es to pievienošu algoritmam, redzēsim, kas iznāks.
Maija uzlabo algoritmu
Es domāju, ka nosacījuma «Vai K=8?» pārbaude nepieciešama pirms pārbaudes «Vai K=11?». Tad, ja astoņas klases nav pabeigtas, nekas sevišķs nenotiek, ejam tālāk pārbaudīt nosacījumu «Vai K=11?». Bet ja astoņas klases jau ir pabeigtas?... Tad pārbaudām nosacījumu «Vai tu gribi mācīties PTV?». Ja gribi, tad, protams, ej un mācies, bet, ja ne... Tad zini ko?! Ej taisnā ceļā uz taisnstūrveida bloku «Nopietni mācīties vienu gadu», jo nav nekādas vajadzības atgriezties un pārbaudīt, vai K=11, ja nupat mēs šo K pārbaudījām un konstatējām, ka tas ir vienāds ar astoņi un nekādi nevar būt vienpadsmit.
— Starp citu, varētu arī pārbaudīt, nekādas kļūdas nebūtu, tikai lieks darbs. Bet, lūdzu, savus izdomājumus attēlo grafiski.
— No jauna es uzzīmēšu tikai nelielu blokshēmas daļu. Zaļā krāsā es zīmēju papildinājumus, bet melnā — to, kas bija jau iepriekš.

— Uzzīmēts ir lieliski, un sevišķi skaisti izceļas tie tavi zaļumi. Bet, lai cik žēl man arī būtu, tavā algoritmā ir drausmīga kļūda, kas to, par spīti daiļajam noformējumam, padara pilnīgi nederīgu.
Kļūda!
— Nav ko priecāties, ja arī būtu kļūda. Hm... es gan nekā kļūdaina neredzu.
— Bet tu paskaties šurp: tūlīt pēc tam, kad K vērtība palielināta, bultiņa no apakšas pienāk blokā ar pārbaudi «Vai K=11?». Tieši šī bultiņa veido ciklu, un tagad tev iznāk...
— Ā-ā-ā... Iznāk, ka pārbaude «Vai K=8?» paliek ārpus cikla un notiek tikai vienreiz mūžā, kad K=0 un cilvēks tikko ir uzsācis skolas gaitas. Rezultātā jaunā nosacījuma pievienošana faktiski neko nedod. Jā-ā-ā...
— Nekā briesmīga jau nav. Šī kļūda ir viegli izlabojama: bultiņa, kura ieiet blokā ar pārbaudi «Vai K=11?», jāpārceļ uz augšu, lai tā ieietu jaunajā blokā ar pārbaudi «Vai K=8?». Lūk, tā, kā es tagad izlabošu.
— Skaidrs. Tagad jau nu viss ir pareizi.
— Nekad nevar zināt, vai viss ir pareizi. Kļūdas gadās vienmēr un muļķīgas kļūdas arī. Bet varu tevi iepriecināt: programmisti to zina ļoti labi un par kļūdām nevienu nebar. Programmēt — tas nav tas pats, kas rakstīt kontroldarbu. Programmistam ir jāprot kļūdas meklēt, meklēšanai jāgatavojas un meklēšana jāmācās, cik nu var iemācīties. Galvenais — nevajag no sevis iedomāties diezin ko, bet vajag nopietni strādāt un censties, ne tā kā...

— Vai tev neliekas, ka baigi esi aizrāvies ar manis audzināšanu? Bet es tev varu atklāt, ka man ir pilns audzinātāju komplekts, pie tam nevis kaut kādi sliņķi un haltūristi, bet godīgi darba darītāji, kuri raujas melnās miesās un pie tam ar milzīgiem panākumiem.
Kaut arī Pēcim tā vis nelikās, strīdēties viņš nesāka, bet ierosināja vēlreiz kopumā izskatīt visu blokshēmu un tad beigt.