8.

Neliels labums no programmēšanas

60— Nu, Maija. Pagaidām tu zini tikai dažus operatorus, tomēr ar tiem pietiek, lai uzrakstītu kaut kam derīgu programmu. Protams, nekāds lielais šis derīgums nebūs, bet viss jāsāk ar mazumiņu. Vai tu esi lasījusi kaut ko no Džeka Londona?

— Es? Jā... bet kāpēc tu to gribi zināt?

— Pašlaik es viņu lasu, visvisādus stāstus par piedzīvojumiem Aļaskā, un gaisa temperatūra tur vienmēr dota Fārenheita grādos. Es zinu, ka šos grādus pārvērst par Celsija grādiem nav sarežģīti, bet nekādi nevaru iegaumēt vajadzīgās skaitliskās konstantes. Uzraksti nelielu programmu, kas noderētu tādiem kā es. Algoritms kādreiz smējās, ka visās programmēšanas grāmatiņās esot šī grādu pārvēršanas programma.

— Vienmēr laipni. Bet kas šai programmai ir jādara?

Fārenheita un Celsija grādi

— Pēc tam kad tā temperatūru ar ievades operatoru palīdzību ir saņēmusi Fārenheita grādos, uz ekrāna jāizvada temperatūras vērtība Celsija grādos. Formulu, pēc kuras no Fārenheita grādiem F var pāriet uz Celsija grādiem C, es tev norakstīju no grāmatas.

C = 59 (F - 32)

— Ļauj padomāt. Manuprāt, tā būs ļoti vienkārša programma. Es to tūdaļ ievadīšu.

— Nesteidzies. Vispirms izdomā nosaukumu un paziņo interpretatoram, ka vēlies ievadīt jaunu programmu.

— Labi, šo programmu es nosaukšu CELS.

NEW CELS

READY
10 INPUT F
20 C=(5/9)*(F-32)
30 PRINT C
40 END

Tas ir viss. Vai varu to palaist?

— Laid vien.

RUNNH
?

— Ievadi -50. Vai zini, kāpēc šī vērtība mani interesē? Džeks Londons raksta, ka pie šīs temperatūras spļāviens sasalstot, sniegu nesasniedzis.

— Brrr. Tev gan ir intereses!

? -50
-45.5556

READY

— Skaidrs. Es gan domāju, ka temperatūra būs zemāka. Kas attiecas uz programmu, tā, protams, strādā, tomēr par pirmklasīgu nosaukt to nevar, drīzāk jau par pirmklasniecisku.

— Ko?! Kas tev vēl ir vajadzīgs?!

— Mieru, tikai mieru. Ja paskatās uz programmas tekstu, tad nav gluži skaidrs, ko tā dara...

— Bet vai tad tu nezini?!

Programmai ir jābūt saprotamai!

— Zinu gan, bet saproti jel, ka programmas gandrīz vienmēr sastāda tādēļ, lai tās varētu lietot arī citi, bet, ja kāds paskatīsies uz šādu programmu, tad nekā nesapratīs. Protams, tu te vari sēdēt un visiem skaidrot, ko katrs burts nozīmē, 62bet ilgi tu to neizturēsi. Arī tu pati, taisīdama programmas tikai sev, jau pēc pāris mēnešiem būsi aizmirsusi, kas tām bija jādara. Tāda esot visas programmēšanas vēstures rūgtā pieredze... Un kā ir tad, kad programma strādā? Vai tu esi droša, ka spēsi paturēt prātā visas jautājumzīmes, kas parādās uz ekrāna? Ja viena vai divas, tad nekas; bet ja tavā programmā būs paredzēta daudzu skaitļu ievade? Ko tad? Ar savām jautājumzīmēm sajauksi galvu jebkuram lietotājam. Tāpēc pierodi lietotājam ērtības sagādāt jau no mazām dienām.

— Es tevi nesaprotu! Tu taču pats teici, ka bez jautājumzīmēm nebūšot saprotams, ka ir vajadzīga ievade, bet tagad par tām ņirdz un par mani arī. Neko citu taču nevar izdarīt. Vismaz tu man neko citu neesi skaidrojis.

— Ja tu proti tekstu izvadīt ar operatora PRINT palīdzību, tad nekā cita tev nevajag. Sākumā uz ekrāna izvadi kaut ko tamlīdzīgu: programma, kas Fārenheita grādus pārvērš par Celsija grādiem. Pēc tam lietotājam pasaki, ka jāievada Fārenheita grādi. Bet, izvadīdama rezultātus, izvadi arī tekstu, kurā būtu pateikts, kas tas ir par skaitli, — nu, norādīts, ka tie ir Celsija grādi.

Priekšāteikšana ir obligāta
Priekšāteikšana ir obligāta

— Jā-ā-ā... Tā jau darba būs divreiz vairāk.

— Varbūt pat trīsreiz. Bet saki, lūdzu, — kam tev programmēšana, ja vieglas dzīves tīkojas?

— Uh, kašķis! Nomocīšos gan es ar tevi.

Maija patielējās, patielējās, bet beigu beigās tomēr izdarīja tā, kā Pēcis teica. Pārāk ātri tas negāja: 63bija gan jāpadomā, gan arī šādas tādas kļūdas jāizlabo, jo reizi pa reizei ne tas taustiņš nospiedās, kuru vajadzēja. Bet, kad viss beidzot bija kārtībā, Maija ievadīja pavēli LISTNH un uz ekrāna parādījās programma

5 PRINT "PROGRAMMA PAHRVEIDO FAHRENHEITA
  GRAHDUS"
6 PRINT " PAR CELSIJA GRAHDIEM"
7 PRINT " IEVADIET TEMPERATUHRU"
8 PRINT " FAHRENHEITA GRAHDOS"
10 INPUT F
20 C=(5/9)*(F-32)
25 PRINT "TAS BUHS"
30 PRINT C
35 PRINT "CELSIJA GRAHDI"
40 END

— Nu paskaties, mocītāj, uz šo programmēšanas šedevru!

— Kolosāli! Bet jāpaskatās, kā tas strādā. Palaid, lai pārveido tos pašus -50 Fārenheita grādus.

RUNNH

PROGRAMMA PAHRVEIDO FAHRENHEITA GRAHDUS
 PAR CELSIJA GRAHDIEM
 IEVADIET TEMPERATUHRU
 FAHRENHEITA GRAHDOS
? -50
TAS BUHS  -45.5556 CELSIJA GRAHDI
-45.5556
CELSIJA GRAHDI

READY

Ahā, sanāk tāpat! Tātad tu vismaz neko neesi sabojājusi. Nu, vai tagad nav glītāk?

Maija uzlabo izvadi

— Ir. Bet varēja būt pavisam skaisti. Man nepatīk, ka starp ziņojumu par programmas darbu un lūgumu ievadīt temperatūru nav nekāda intervāla. Es gribētu, lai tur būtu tukša rindiņa — tie tomēr ir dažādi ziņojumi. Bet to, jādomā, nevar izdarīt.

— Kāpēc gan ne! Tu vari ielikt PRINT bez nekā, un tev izvadīs tukšu rindiņu!

— Skaidrs... Bet pagaidi. Starp rindām ar numuriem 6 un 7 es taču neko nevaru iespiest! Ko lai dara? Vai lai visu ievadu no jauna ar citiem numuriem?

PĀRNUMURĒŠANA— Protams, ne! Tādos gadījumos izmanto pavēli RESEQ — «risēk» — tas laikam ir saīsinājums no angļu vārda resequence, kam, manuprāt, jānozīmē «sakārtot no jauna». Vārdnīcā tādu vārdu man neizdevās atrast. Un tātad šī pavēle liek pārnumurēt visas rindas, sākot ar pirmo — 10, 20, 30, 40 un tā tālāk.

— Interesanti būtu izmēģināt.

RESEQ

READY
LISTNH
10 PRINT "PROGRAMMA PAHRVEIDO FAHRENHEITA
  GRAHDUS"
20 PRINT " PAR CELSIJA GRAHDIEM"
30 PRINT " IEVADIET TEMPERATUHRU"
40 PRINT " FAHRENHEITA GRAHDOS"
50 INPUT F
60 C=(5/9)*(F-32)
70 PRINT "TAS BUHS"
80 PRINT C
90 PRINT "CELSIJA GRAHDI"
100 END

— Jā, šis tas no taviem solījumiem piepildās. Vēl man nepatīk, ka rezultāts tika izvadīts veselās trijās rindās. Es gribētu, lai man iznāk skaists izvads vienā rindiņā: TAS BUHS -45.5556 CELSIJA GRAHDI. Vai tas ir iespējams?

65— Protams, ir. Pirmkārt, ar vienu un to pašu operatoru tu vari izvadīt gan simbolus, gan skaitļus, tā ka droši varēji rakstīt PRINT «TAS BUHS», C.

— Skaidrs. Un pēc komata — «CELSIJA GRAHDI».

IZVADA ZONA— Nesteidzies. Ja pēc izvades operatora PRINT ir izvadvienību saraksts, kur šīs vienības, tāpat kā šajā piemērā, ir atdalītas ar komatiem, tad iznāks tā: ekrāna rinda tiks sadalīta zonās pa četrpadsmit zīmēm katrā. Un katrā zonā parādīsies viena izvadvienība. Vai arī vairākās zonās — ja vienā nesaies. Es ceru, tu saproti, ka mainīgo skaitliskās vērtības jeb skaitļi vienmēr ietilps vienā zonā...

— Ceri vien, ceri.

— Izvadāmie simboli zonā tiks izvietoti no kreisās puses, un, tā kā to būs mazāk par 14, tad zonas labā puse paliks tukša. Ja atceries, tad tavas pirmās programmas izvadā starp A, B un C vērtībām bija atstāta diezgan liela atstarpe.

— Jā! Tā tiešām bija, es vēl pabrīnījos, bet jautāt neko nejautāju.

— Atdalot ar komatiem, tev iznāks ļoti daudz tukšas vietas starp skaitli -45.5556 un tekstu CELSIJA GRAHDI. No tā viegli izvairīties: izvadvienības cita no citas jāatdala nevis ar komatu, bet ar semikolu, un tad attiecīgo mainīgo vērtības tiek izvadītas cieši cita pēc citas.

— Tad es to pašu izvadīšu vēlreiz, tikai šīs, kā tu saki, izvadvienības atdalīšu ar semikoliem, nevis ar komatiem!

— Gluži to pašu izvadīt nevajag. Ņem vērā, ka mašīna atstarpes starp izvadvienībām neliks, tev pašai tās ir jāparedz un jāieprogrammē. Tātad, lai būtu skaisti, pēc TAS BUHS jāparedz viena atstarpe. Tāpat arī pirms CELSIJA GRAHDI.

— Drausmīga sīkumainība, bet es, liekas, sapratu un varu pamēģināt.

70 PRINT "TAS BUHS ";C;" CELSIJA GRAHDI"

Vai programmu var palaist?

— Nē, nevar. Kaut gan... laid vien, redzēsim, kas iznāks.

RUNNH
PROGRAMMA PAHRVEIDO FAHRENHEITA GRAHDUS
 PAR CELSIJA GRAHDIEM
 IEVADIET TEMPERATUHRU
 FAHRENHEITA GRAHDOS
? -50
TAS BUHS
-45.5556
CELSIJA GRAHDI

READY

— Tā kā par daudz izvadīja...

Atkal kļūda!

— Iznāca tā, kā vajadzēja, kā bija paredzēts programmā. Tu visu izvadi pārnesi uz rindu 70, bet nākamās rindas ar numuriem 80 un 90, kurās arī paredzēta izvade, atstāji, kā ir, un tās tika izpildītas. Vari tās apskatīties ar pavēļu LIST un LISTNH palīdzību. Starp citu, šīs pavēles paredz šādu iespēju: ja pavēlei seko rindas numurs, tad tiks parādīta tikai šī rinda, ja divi numuri no — līdz ar domuzīmi vidū, tad parādīsies visas rindas ar numuriem šajās robežās. Tā, piemēram, LIST 7Ø parādīs rindu 70, LIST 7Ø—9Ø — rindas ar numuriem starp 70 un 90. Es domāju, ka tieši šī pavēle tev tagad jāievada.

— Lūdzu!

LISTNH 70-90

70 PRINT "TAS BUHS ";C;" CELSIJA GRAHDI"
80 PRINT C
90 PRINT "CELSIJA GRAHDI"

— Paskaties uzmanīgi! Izvades operators rindā ar numuru 70 izvadīs visu, kas tev vajadzīgs. Bet 67rindas 80 un 90? Tās ir gluži liekas un tāpēc jānodzēš. Ak, jā! Es taču vēl neesmu teicis, kā to dara. Uzraksti rindas numuru un nospied ievades taustiņu — rinda ar šo numuru tiks nodzēsta. Pacenties nekļūdīties, citādi var tikt nodzēsta vajadzīgā rinda, varbūt pat tava vismīļākā.

— Labi, es to darīšu ār-kār-tī-gi uzmanīgi.

80
90

Viss kārtībā. Es laižu.

Programmisti un kļūdas

— Atkal tu steidzies! Pasēdi, padomā, varbūt vēl atradīsi kaut ko labojamu vai uzlabojamu. Kāda jēga laist kļūdainu programmu?! Protams, par kļūdām tevi neviens nebārs. Programmēšanā kļūdas ir neizbēgamas, un neviens tev nevaicās, cik bija kļūdu. Galvenais, ka tikai programma strādātu. Un, ja strādā, tad viss ir kārtībā.

Domāšana ir vislabākās zāles pret kļūdām programmās
Domāšana ir vislabākās zāles pret kļūdām programmās

— Par programmistu attieksmi pret kļūdām neņemos spriest. Bet kāpēc lai nepalaižu programmu, ja tā jau ir gatava? Ja strādās pareizi — labi. Ja nepareizi, tad arī sākšu domāt, kas par vainu. Nepareiza programma mašīnu taču nesabojās!

— Protams, ne. Bet runa nav par to. Svarīgi ir tas, cik tu laika iztērēsi — gan sava, gan mašīnas 68laika. Varu atklāt noslēpumu — arī mašīnlaiks ir nauda. Bet, ja nauda tevi neinteresē, tad vēl paliek problēmas sportiskā puse: kurš labāks programmists, tas ātrāk strādā — ātrāk izlabo savas kļūdas.

— Pietiek pļāpāt! Tad jau redzēs.

RUNNH

PROGRAMMA PAHRVEIDO FAHRENHEITA GRAHDUS
 PAR CELSIJA GRAHDIEM
 IEVADIET TEMPERATUHRU
 FAHRENHEITA GRAHDOS
? -50
TAS BUHS -45.5556 CELSIJA GRAHDI

— Tev laimējās. Viss iznāca tā, kā tu gribēji.

— Tā ir nevis laime, bet gan augsta meistarība.

— Kā tad citādi! Bet tagad mums jābeidz darbs un tātad šī programma jānoglabā uz diska.

— Vai, piedod! Esmu pilnīgi aizmirsusi, kā to dara.

— Neuztraucies! Sākumā viss aizmirstas. Vēlāk, kad būsi pieradusi, lieliski atcerēsies gan beisiku, gan operacionālo sistēmu, gan arī citu skaitļošanas mašīnu īpatnības, ja ar tām nāksies iepazīties. Bet, lai noglabātu programmu, dod komandu SAVE, pēc kuras nāk faila apraksts jeb, citiem vārdiem sakot, iekārtas kods un faila apzīmējums.

— Jaunu apzīmējumu man negribas domāt. Failu apzīmēšu šādi:

SAVE DK1:CELS

— Viss ir pareizi. Nospied ievades taustiņu, un programma tiks uzrakstīta uz pirmā diska.