13.

Skaitļotājs vai skolotājs?

103Nākamajā dienā Pēcis atnesa mazliet sarežģītākas programmas.

— Tu jau būsi dzirdējusi, daži uzskata, ka mašīnas var ne sliktāk par cilvēkiem mācīt bērnus. Drīz skolotājus aizstāšot elektroniskie skaitļotāji. Citi savukārt iebilst, ka mašīnas neko jēdzīgu nespēšot iemācīt. Kamēr viņi strīdas, izpētīsim vienu apmācības programmu. Pavisam vienkāršu, protams. Apmācības programmas parasti jau arī nav sarežģītas. Uzskata, ka pats grūtākais un svarīgākais ir nevis programmēt, bet gan iepriekš izdomāt, kā programma mācīs, lai kaut ko tomēr iemācītu.

Ilustrācija

Mācību par to, kā jāmāca, sauc par metodiku

Mana programma māca, patiesībā atkārto, reizrēķinu. Un metodika ir šāda. Ņemam divus veselus gadījumskaitļus no 1 līdz 9. Vēlāk par gadījumskaitļiem pastāstīšu vairāk. Ja pirmais ir vienāds ar vienu, tad to apmainām ar 7. Ja otrais, tad ar 8. Abus skaitļus parādām skolēnam; viņam tie ir galvā jāsareizina un rezultāts jāievada. Ja rezultāts ir pareizs, tad labi, ja nepareizs, tad atceramies, ka bija kļūda. Tā darām tik reizes, cik skolēns grib. 104Pašās beigās izvadām atzīmi.

— Un kur tad te ir metodika?

— Metodika ir tāda, ka mēs nemaz nedodam piemērus, kur piedalās vieninieks, — 1×2 vai 7×1, tos visi māk atrisināt. Toties mēs palielinām to piemēru skaitu, kur piedalās 7 vai 8.

— Tātad tu uzskati, ka ar deviņi ir vieglāk reizināt nekā ar septiņi vai astoņi.

— Ir jau arī. Attiecīgo skaitli vajag pareizināt ar desmit un no rezultāta atņemt to pašu skaitli, piemēram:

7×9=7×10−7=7×(10−1)=63.

— Labi jau, labi, vai tad es reizrēķinu nezinu!

— Tagad vari skatīties programmu.

10 REM PROGRAMMA REIZREHKJINA ATKAHRTOSHANAI
20 REM A UN B - GADIHJUMSKAITLJI, X - TO REIZINAHJUMS
30 REM P - PIEMEHRU SKAITS , P1 - ATZIHME,
32 REM K - KLJUHDU SKAITS
35 \
40 FOR I=1 TO 24 \ PRINT  \ NEXT I
50 PRINT "SVEIKS, MAZAIS DRAUGS !" \ PRINT
60 PRINT " TAGAD ATKAHRTOSIM REIZREHKJINU"
70 PRINT "ES JAUTAHSHU, TU ATBILDEHSI"
80 PRINT " CIK DAUDZ PIEMEHRU TEV RAHDIHT"; \ INPUT P
85 \
90 IF P>=5 THEN 120
100 PRINT "TAS IR PAR MAZ, NJEMSIM 5" \ P=5
110 GO TO 140
120 IF P<=100 THEN 140
130 PRINT "TAS IR PAR DAUDZ,NJEMSIM 100" \ P=100
140 PRINT  \ PRINT  \ PRINT "   UZMANIHBU !!!  STARTS !!!"
150 K=0 \  \ REM SAHKUMA' KLJUHDU SKAITS IR NULLE
155 \
160 FOR I=1 TO P
170 A=INT(RND*9)+1 \  \ REM PIRMA' SKAITLJA IZVEHLE
180 IF A<>1 THEN 200
190 A=7 \  \ REM  JA A=1, TAD NJEMAM 7
200 B=INT(RND*9)+1 \  \ REM OTRA' SKAITLJA IZVEHLE
210 IF B<>1 THEN 230
220 B=8 \  \ REM  JA B=1, TAD NJEMAM 8
230 PRINT "CIK IR ";A;" REIZ ";B;" ";
240 INPUT X \  \ REM ATBILDES IEVADE
250 IF X=A*B THEN 280
260 K=K+1 \  \ REM PALIELINAHM KLJUHDU SKAITU
270 PRINT "      NEPAREIZI ! ";A;" REIZ ";B;" IR ";A*B
280 NEXT I
285 \
290 IF K=0 THEN 360
300 PRINT "PAREIZI BIJA ";P-K;" NEPAREIZI ";K;" PIEMEHRI"
310 P1=INT((P-K)/P*5+.5) \  \ REM ATZIHMES IZVEHLE
320 IF P1<>0 THEN 340
330 P1=1 \  \ REM ATZIHMES 0 NAV
340 PRINT "VAREHJA BUHT LABAHK! LIEKU ";P1
350 GO TO 370
360 PRINT "LIELISKI !!!  MALACIS !!!  LIEKU PIECI !!!"
370 PRINT  \ PRINT
375 \
380 PRINT "JA GRIBI TURPINAHT, IEVADI 1" \ INPUT Z
390 IF Z=1 THEN 80
400 PRINT  \ PRINT " DARBA BEIGAS. UZ REDZEHSHANOS!"
410 STOP
420 END

— Paskatīsimies, kā tu taisies bērnus mocīt. Šis jaunais operators REM man ļoti patīk: nav par to sevišķi jādomā, viss tāpat ir skaidrs. Bet tas cikla operators — rindā 40 — tur ir ko padomāt! Oho! Un vēl trīs operatori vienā rindā!

Ilustrācija

— Nekas sevišķs. Šis cikls uz ekrāna izvada 24 tukšas rindas. Vārdu sakot, attīra ekrānu, jo tam ir tieši 24 rindas.

— Tā, tālāk ir mīļa papļāpāšana. Iemidzina bērna modrību. Tā vajag! Kaut kas sākas rindā 80: ievada piemēru skaitu. Un jau nākamajā rindā to salīdzina ar 5...

— Tas ir tāpēc, lai pārbaudītu ievadu. Ievads vienmēr ir jāpārbauda. Vai maz kur cilvēks var kļūdīties. Šajā vietā, manuprāt, pareizais piemēru skaits ir no 5 līdz 100. Ja lietotājs kļūdas dēļ vai tīšuprāt ievada citu skaitli, es to nomainu vai nu ar 5 rindā 100, vai arī ar 100 rindā 130.

— Skaidrs! Sak, tu, «mazais draugs», vari ievadīt, cik gribi, bet es pateikšu, cik «njemsim». Tas tiešām izskatās pēc pedagoģijas.

— Bet tas taču ir saprātīgi: neņemt pārāk daudz un neņemt tikai vienu vai divus piemērus!

— Ir jau, ir. Es tāpat vien. Nav jau klase, kur jāsēž mierīgi. Skatāmies tālāk. Rinda 140 ir pilnīgi saprotama. Šeit tu gribi bērnu nobaidīt. Rindā 150 mainīgajam K tu piešķir vērtību 0. Kas bija K? Skatāmies piezīmēs sākumā. Kļūdu skaits. Ahā! Pašā sākumā kļūdu vēl nav, tāpēc kļūdu skaits ir nulle. Tālāk nāk cikls... Sākas rindā 160...

Interesanti, kur gan tas beidzas? Rindā 280. Un šajā ciklā viss acīmredzot arī notiek. Bet kas tas — rindā 170? Nekā nesaprotu.

Gadījumskaitļu ģenerators — funkcija RND

GADĪJUMSKAITĻI— Šeit parādās jauna iebūvētā funkcija, kura dod gadījumskaitļus. Tās apzīmējums ir RND, kas ir saīsinājums no angļu vārda random — to izrunā «rendom», un tas nozīmē «uz gadījumu attiecīgs, ar gadījumu saistīts». Nu ir īstais brīdis parunāt par gadījumskaitļiem. Visvienkāršākais veids, kā tādus iegūt, ir mest spēļu kauliņu. Daudzkārt metot, visi skaitļi no viena līdz seši uzkritīs gandrīz vienādi bieži. Bet to, kāds skaitlis uzkritīs katrā reizē, protams, pateikt nevar. Vienīgais, ko var pateikt, ir tas, ka jebkura skaitļa uzkrišanas varbūtība ir viena sestdaļa.

— Bet gadījumskaitļi? Kas tad ir gadījumskaitļi?

— Ja, metot kauliņu, mēs pierakstīsim skaitļus, kas uzkrīt, tad arī iegūsim vienmērīgi sadalītus gadījumskaitļus: 2, 3, 1, 5, 4, 3, 2, 1 utt.

Bet tagad iedomājies metamo kauliņu, kuram ir divdesmit skaldnes un uz skaldnēm — skaitļi no viens līdz divdesmit. Metot šo kauliņu un pierakstot uzkritušos skaitļus, tu dabūsi vienmērīgi sadalītus naturālos gadījumskaitļus no 1 līdz 20.

Gadījumskaitļa izvēle
Gadījumskaitļa izvēle

Bet atgriezīsimies pie funkcijas RND, kura, starp citu, no citām funkcijām atšķiras ar to, ka tai nav argumenta. Izsaukdami šo funkciju, iegūstam gadījumskaitļus, kas vienmērīgi sadalīti intervālā no 0 līdz 1.

— Nē, to es nesaprotu.

— Labi, mēģināšu vienkāršāk. Kad es izsaucu šo funkciju, tad tā piever acis un ar asu zīmuli biksta intervālā no 0 līdz 1. Un trāpa kādā skaitlī, piemēram, 1070,76812. Nākamreiz tā trāpa pavisam citā skaitlī, piemēram, 0,38631. Pie tam jebkurā vietā tā trāpa ar vienu un to pašu varbūtību. Nav tā, ka tai gribētos iebikstīt tuvāk vieniniekam vai tuvāk pusei — 0,5.

Ilustrācija

Citiem vārdiem sakot, ar funkciju RND mēs mašīnai liekam «iedomāties» vienu skaitli no 0 līdz 1.

— Beidzot es sāku saprast.

— Varbūt sapratīsi vēl labāk, ja uzzināsi, kāpēc tas man ir vajadzīgs.

Kādēļ vajadzīgi gadījumskaitļi!

Es gribu it kā izgatavot metamo kauliņu ar deviņām skaldnēm, lai man būtu gadījumskaitļi no 1 līdz 9, kurus likšu skolēnam sareizināt. Bet tāda kauliņa nav un nemaz nevar būt. Tāpēc es intervālu no 0 līdz 1 sadalu deviņās vienādās daļās un funkcijai RND ļauju «durt» šajā intervālā. Ja tā trāpa piektajā daļā, tad es saku, ka man ir uzkritis piecnieks, ja trešajā, tad trijnieks un tā tālāk. Funkcija RND man dod skaitli S starp nulli un vieninieku, 108tā ka atliek tikai noteikt, kurā no deviņām intervāla daļām tas atrodas. To dara šādi: šo skaitli izdala ar vienu devītdaļu un uzzina, cik devītdaļas tajā ieiet. Piemēram, ja S=0,76812, tad, dalīdami ar 1/9 jeb, kas ir tas pats, reizinādami ar 9, dabūsim 6,91308. Tātad šis skaitlis atrodas aiz sešām devītdaļām, bet tuvāk par septiņām devītdaļām — septītajā intervālā.

Kauliņus var uzmest ar funkciju RND
Kauliņus var uzmest ar funkciju RND

Kā atrast šo septītnieku vai, sliktākajā gadījumā, sešinieku? Šeit palīgā nāk funkcija INT, ar kuru mēs jau esam pazīstami. Pasaki — kāda ir veselā daļa no 6,91308?

— Nu, seši taču.

— Lai izrēķinātu, kurā intervāla [0;1] daļā ir trāpīts, vajag izdarīt ļoti maz — pie šīs veselās daļas pieskaitīt vieninieku. Tas tiek darīts rindā 170. Un arī rindā 200, kur notiek otrā skaitļa izvēle. Atkārtoju, ka, katrreiz no jauna izmantodami funkciju RND, mēs iegūstam jaunu gadījumskaitli. Pilnīgi tāpat mēs izrīkotos arī gadījumā, ja vajadzētu veselu gadījumskaitli, nevis no 1 līdz 9, bet gan no 1 līdz N. Tad skaitļa 9 vietā mums būtu mainīgais N, kuram savlaicīgi esam piešķīruši vajadzīgo vērtību.

— Bet tu esi par tālu aizskrējis. Es tā arī nesapratu, kas notiek rindā 180. Ā! Šeit tu iegūto skaitli salīdzini ar vieninieku, un, tā kā vieninieki tev nepatīk, tad gadījumā, ja mainīgā A vērtība ir viens, tu to pārveido par septiņi.

— Un pilnīgi to pašu es daru arī ar mainīgo B. Skaties rindas ar numuriem no 200 līdz 220.

— Labi. Un rinda 230 acīmredzot no nabaga bērna grib uzzināt, kāds tad īsti ir reizinājums.

— Jā gan. Bet neskrien tik ātri, šo rindu, manuprāt, ir vērts papētīt. Vai redzi atstarpi pēc CIK IR, tāpat arī pirms un pēc REIZ? Tas tāpēc, ka mainīgo A un B vērtības tiek izvadītas uzreiz pēc CIK IR un REIZ, — vai redzi semikolus pirms un pēc A un B? Šeit ir vēl kāds sīkumiņš: pēc B vērtības izvadām atstarpi, jo nākamais ir operators INPUT, kurš tajā pašā rindā parādīs jautājumzīmi. Un būs glītāk, ja šo jautājumzīmi un B vērtību atdalīs atstarpe.

Starp citu, to jautājumzīmi operators INPUT rāda vienmēr, atcelt tās rādīšanu nevar, un tāpēc izvadā pirms INPUT es lietotājam parasti uzstādu jautājumus. Kā šajā gadījumā: CIK IR. Nevis ATRODI vai kaut ko citu.

109— Nu labi. Atbilde ir ievadīta, un tu to salīdzini ar pareizo rezultātu rindā 250.

— Ja viss ir pareizi, es veidoju nākamo piemēru. Pie tam, kā redzi, es eju uz operatoru NEXT, lai tas palielinātu cikla mainīgo — piemēru skaitītāju — un vispār lai cikla operators darbotos tā, kā vajag.

— Un, ja atbilde ir nepareiza, tad palielini izdarīto kļūdu skaitu un izvadi nepatīkamu ziņojumu.

— Arī pareizo atbildi. Lai cilvēks zina.

— Tagad cikls tā kā būtu beidzies, visi piemēri ir aplūkoti un mēs atrodamies rindā 290. Kas bija K? Kļūdu skaits. Pārbaudām, vai kļūdu skaits ir nulle... Ja nulle, tad ejam uz rindu 360, bet, ja nav... Ahā, tiek izvadīts gan pareizo, gan nepareizo atbilžu skaits, vai ne?

— Pilnīgi pareizi.

— Un kas ir tas P1 rindā 310? Vai atzīme? Un tā tu aprēķini atzīmi?!

Atzīmes tik un tā ir jāliek!

— Jā. Pareizo piemēru skaitu es izdalu ar visu piemēru skaitu un uzzinu, kāda daļa no piemēriem bija pareiza. Un tagad gribu uzzināt, cik piektdaļas no visiem piemēriem ir bijušas pareizas. Mana vērtēšanas sistēma ir šāda: ja cilvēks zināja 4/5 piemēru, lieku viņam četri, ja 3/5, tad trīs un tā tālāk līdz vieniniekam. Tāpēc pareizo piemēru daļu es dalu ar vienu piektdaļu — tāpat, kā darīju, kad meklēju gadījumskaitli no 1 līdz 9. Tā es iegūstu atzīmi, bet tikai ar decimāldaļām aiz komata, piemēram, 2,8 vai 4,6. Ja no šā skaitļa es paņemšu veselo daļu, atzīme būs zemāka. 2,8 vajadzētu noapaļot 110uz 3, bet skolēns saņems divnieku, 4,6 vajag noapaļot uz 5, bet iznāks četrinieks. Lai tā nenotiktu, es vēl pieskaitu 0,5.

Kādu atzīmi viņš man ieliks?...
Kādu atzīmi viņš man ieliks?...

— Ļoti laipni no tavas puses.

— Un vēl kas. Ja pareizu atbilžu bērnam ir ļoti maz vai nav nevienas, tad atzīme var iznākt nulle, kas mūsu skolā nav paredzēts. Tāpēc rindas 320 un 330 šajā gadījumā P1 vērtību pārveido par 1. Un tad nāk...

— Tad nāk pati atzīme. Tas ir brīnišķīgi! Es runāju par izteicienu «varēja būt labāk»! Tas skaidri apliecina, ka elektroniskais skaitļotājs var būt skolotāja lomā. Ja kāds par to vēl šaubījās, tad, ieraudzījis šo frāzi uz ekrāna, pārliecināsies, ka skaitļotāji tiešām var aizstāt skolotājus.

— Nezinu, man gan liekas, ka skaitļotājs skolotājam var tikai mazdrusciņ palīdzēt, šādus tādus sīkumus pamācīdams.

— Beisikān, tu taču visu uztver bezjēdzīgi nopietni! Es lieliski saprotu, ka mašīna nevar aizstāt skolotāju, pat nedrīkst, jo kurš tad gribēs kaitināt mašīnu! Un vai tad mašīnai varēs iestāstīt, ka tev vakar vakarā drausmīgi sāpēja galva un tu nevarēji iemācīties reizrēķinu un tāpēc cāli likt tev nedrīkst.

— Atgriezīsimies pie programmas.

— Nekas tur daudz vairs nav palicis. Rinda 360 izvada... Kad tad tā izvada? Ā-ā! Uz šo rindu atnāk no rindas 290, ja kļūdu nav vispār. Un pēc tam jautājums, vai turpināt. Tas nu ir kā vienmēr.

— Un tagad...

— Tagad vajag atpūsties. Nemaz nebija tik vienkārši šos tavus gara darbus pētīt. Drāžam uz pagalmu patrakot. Es tikai paķeršu badmintona raketes.