7.

Maijas pirmā programma

Nākamajā reizē Maija un Pēcis pie mašīnas devās ar stingru apņemšanos programmēt. Maija bija pieprasījusi izbeigt tukšās runas un sākt darboties.

— Runas nemaz nav tik tukšas, kā tev liekas. Tu tikai, tāpat kā visi mazi bērni, slikti saproti, kas tev ir labi un kas slikti.

— Izbeidz, vectētiņ, pļāpāt un labāk stāsti, kas vēl vajadzīgs, lai sāktu programmēt.

Programmas ķieģelītis — operators

OPERATORS— Vajadzīgs pavisam nedaudz. Vispirms iegaumē, ka programmēšanas valodas veido operatori. Katrs operators ir komanda, ar ko mašīnai pavēl kaut ko konkrētu izdarīt. Operatori programmēšanas valodām ir pamatsastāvdaļa — gluži tāpat kā vārdi latviešu valodai. Tikai operatoru ir daudz mazāk nekā vārdu. Progammēšanas pamatu veido četri operatori. Pagājušajā reizē tu iepazinies ar diviem no tiem; arī vārdu «operators» mēs jau lietojām. Palikuši vairs tikai divi pamatoperatori.

Operatori ir jāklausa
Operatori ir jāklausa

— Tos divus es gan pagājušoreiz kaut kā nepamanīju. Varbūt viens bija PRINT?

PIEŠĶIRE— Jā, viens no tiem bija izvades operators PRINT. Bet otrs bija piešķires operators. Ievadīdama rindiņu A=12, tu patiesībā ievadīji piešķires operatoru — mašīnai pavēlēji piešķirt mainīgajam A vērtību 12. Var teikt, ka piešķires operators tiek apzīmēts ar vienlīdzības zīmi «=», no kuras pa kreisi raksta to mainīgo, kuram jāpiešķir vērtība, bet pa labi pašu vērtību — vai nu kā skaitli, vai arī kā aritmētisku izteiksmi, kura jāaprēķina. Vai atceries, mēs runājām par aritmētiskajām izteiksmēm izvades operatorā PRINT. Pilnīgi to pašu var teikt par izteiksmēm, kas piešķires operatorā drīkst atrasties pa labi no vienlīdzības zīmes.

Viss par mainīgajiem

MAINĪGAISLaikam vajadzētu pateikt, kas tas mainīgais vispār tāds ir, bet tas man būs par grūtu. Nu ... tas ir kaut kas tāds, kas atrodas mašīnā, kam ir sava vērtība un kas var piedalīties kaut kādās darbībās, kurās tam var mainīties vērtība — un tikpat labi arī nemainīties. Un vēl mainīgajam vienmēr ir apzīmējums. Teiksim, pēdējā piemērā mainīgajam apzīmējums ir burts «A», bet vērtība — skaitlis 12.

Ilustrācija

— To es nesaprotu. Tev iznāk apmēram tā: mainīgajam A apzīmējums ir burts «A». Tā jau ir kaut kāda bezjēdzība.

— Bet vai to tu saproti, ka skolniecei Saprātiņai uzvārds ir «Saprātiņa»?

— To es saprotu.

— Nu tā. Skaidrs taču, ka skolniece nav tas pats, kas viņas uzvārds. Un, tāpat kā skolniecei ir uzvārds, mainīgajam ir apzīmējums. Atšķirība starp skolnieci un mainīgo, protams, ir — kaut vai tāda, ka Saprātiņa eksistē neatkarīgi no tā, kā viņu sauc un vai vispār viņu kaut kā sauc, bet mainīgie mašīnā sāk eksistēt tikai tajā brīdī, kad tos kaut kā nosauc, kad tie pirmo reizi parādās piešķires operatorā no vienādības zīmes pa kreisi. Iztēlojies, ka interpretators katram mainīgajam mašīnas atmiņā atvēl vietu, kur glabāt tā vērtību, vai — vēl vienkāršāk — katrs mainīgais ir kastīte, uz kuras uzrakstīts apzīmējums un kurā glabājas tā vērtība. Un, kad vērtība mainīgajam47 tiek piešķirta pirmoreiz, tad interpretators izveido tādu kastīti ar visu nosaukumu un vērtību.

Ilustrācija

Nekas briesmīgs nenotiek, ja programmists kļūdās un, piemēram, kādā aritmētiskajā izteiksmē izmanto mainīgo, kuram vērtība vēl nemaz nav piešķirta. Interpretators pieņem, ka tā ir nulle.

Beisiku var tulkot latviski

Tagad mūsu slaveno piešķires operatoru A=12 no beisika pārtulkosim latviski. Iznāks apmēram tā:

A=12Beisikā
Mainīgajam ar apzīmējumu «A»piešķirt vērtībudivpadsmitLatviski

Parasti gan programmisti saka nevis «mainīgais ar apzīmējumu «A»», bet gluži vienkārši «mainīgais A».

Ko vēl? Vēl varu pastāstīt, kā mainīgos apzīmē. Tos apzīmē ar jebkuru latīņu burtu un ciparu — divām zīmēm — vai arī tikai ar burtu. Tādi ir spēles noteikumi beisikā. Ja saskaita visas iespējas, tad iznāk, ka vispār var būt 286 dažādi mainīgo apzīmējumi.

— Vai nebūs par maz?

— Tev pietiks. Tagad pārtulkosim latviski šādu izvades operatoru:

PRINTA, B, CBeisikā
Izvadītmainīgo A, B un C vērtībasLatviski
Ilustrācija

— Šis tulkojums gan ir ļoti vienkāršs.

— Kāds nu ir, tāds ir. Vēl varu pateikt, ka ar izvades operatoru PRINT iespējams izvadīt ne tikai skaitļus, bet arī citas zīmes, piemēram, burtus. Var izvadīt jebkuru tekstu. Dara šādi: pēc vārda PRINT raksta vajadzīgo tekstu pēdiņās vai apostrofos. Nu, raksti. Ai, pagaidi, mēs taču neesam izsaukuši beisika interpretatoru! Tā, viss kārtībā. Interpretators ir gatavs lieliem darbiem.

— Ko gan lai izvadu?...

PRINT "SVEIKS"
SVEIKS

— Ceru, tu saproti, ka šādi, tiešajā režīmā, tekstu uz ekrāna izvadīt nav nekādas jēgas, — tu varēji uzrakstīt vārdu SVEIKS, un tev tas uz ekrāna arī būtu. Parasti tekstu uz ekrāna izvada, ja programmas darba gaitā vajag kaut ko paziņot par darba rezultātiem.

— Interesanti gan, kā es to varu saprast, ja tu vēl ne vārda neesi teicis par programmām!

Programmas veidošana

PROGRAMMAS RINDA— Jau saku. Rakstīdama operatorus ar rindu numuriem sākumā, tu iegūsi programmu. Ja operatoru ievadi bez numura sākumā, tad šis operators tiek izpildīts uzreiz — tas ir tiešais režīms, kuru tu jau zini. Bet, ja operatoru ievadi ar rindas numuru priekšā, tad interpretators šo operatoru iegaumē un no visiem šiem numurētajiem operatoriem atmiņā izveido programmu. Atceries — atmiņā! Bieži vien to nesaprot.

— Vajadzētu pamēģināt ... Saki, lūdzu: vai par numuru var būt jebkurš skaitlis?

— Jebkurš naturāls skaitlis, bet tikai mazāks par 215—1=32767. Pirms sāc ievadīt programmu, tā ir kaut kā jānosauc un nosaukums jāpaziņo interpretatoram — ar vārdu NEW.

— Cerams, ka «ņū» angliski nozīmē «jauns»?

— Jā. Ievadi vārdu NEW un programmas nosaukumu. Uz priekšu!

NEW SUPER

— Vai tā būs labi?

— Pa pirmo! Jā, starp citu, programmas nosaukumā nedrīkst būt vairāk par deviņiem burtiem un cipariem, bet pirmais simbols obligāti ir burts.

— Paklau, bet vai NEW ir jauns operators?

PAVĒLE— Ne gluži. NEW ir nevis operators, bet gan beisika pavēle. Pavēles atšķirībā no operatora nodarbojas ar pašām programmām un ir izpildāmas tikai tiešajā režīmā. Bet operatori programmās strādā ar ievaddatiem un mainīgo vērtībām.

Labi. Programma nu ir nosaukta, vari sākt to ievadīt. Vispirms uzraksti rindas numuru ...

1 A_

Bet kāpēc tu sāc ar vieninieku?!

— Kā tad citādāk! Viens, divi, trīs ... Tā arī numurēšu.

Kā numurē rindas!

— Redzi, tā var gan, bet tā nedara. Programmisti rēķinās ar to, ka vēlāk programmu vajadzēs pārveidot un turklāt ne vienu reizi vien — kaut kas būs kļūdains, kaut kas tiks izdomāts no jauna. Un tad var izrādīties, ka vajag iespiest vēl vienu rindu, piemēram, starp rindām ar numuriem 3 un 4. Bet to tu nevarēsi, jo ar daļskaitļiem numurēt nevar! Tāpēc 50parasti rindas numurē nevis pēc kārtas, bet ar kaut kādu soli, piemēram, 10, 20, 30 un tā tālāk. Programmas izpildīšanai ir tāds likums — operatorus izpilda rindu numuru augšanas kārtībā, ja nav īpaši norādīts, kura rinda ir jāizpilda nākamā. Ja ir rindas ar numuriem 10 un 20, bet nav ar numuriem no 11 līdz 19, tad nekāda brēka netiek sacelta, un, ja tev vēlāk rodas vēlēšanās, piemēram, izveidot rindu ar numuru 15, tu to vienmēr vari izdarīt, gluži vienkārši ievadot rindu ar šo numuru. Ir pilnīgi vienalga, kādā numuru kārtībā programma tiek ievadīta.

Ilustrācija

— Varu arī ievadīt tā, kā tu saki. Bet ko lai daru ar šo rindiņu, kuru es sāku rakstīt?

— Šo rindu var anulēt. Es to izdarīšu tavā vietā.

— Labi, sākšu ar numuru 10.

10 A=12
20B=20

Ai, pēc numura 20 es aizmirsu atstarpi! Vai rindu atkal vajag anulēt?

— Vispār nebija nekādas runas par to, ka pēc rindas numura būtu vajadzīga atstarpe.

— Man liekas, ka tā tur iederētos.

— Vari neuztraukties, atstarpi pēc rindas numura interpretators ieliks pats. Vēl vairāk, tu vari jebkurā vietā likt atstarpes un vari nelikt, liekās interpretators tik un tā izmetīs un vajadzīgās saliks. Turpini vien tālāk.

30 C=A+B
40 PRINT A,B,C

— Tas arī ir viss.

— Vēl būtu vēlams pievienot operatoru END. Ko tas nozīmē angliski?

— «End» nozīmē «beigas» vai «beigt».

— Jā, END programmā norāda, ka vairāk operatoru tajā nav, jeb, kā saka programmisti, operators END norāda programmas fiziskās beigas. Programmai vēl ir arī loģiskās beigas51 — tad, kad programma ar operatora STOP palīdzību tiek apturēta. Tātad nu tev būs vēl divi operatori. Bet tie nav pamatoperatori, tāpēc nedomā, ka esi jau iemācījusies programmēt.

Programmu aptur operators STOP
Programmu aptur operators STOP
50 END

— Vai operators END ir jāievada šādi?

— Tieši tā. Šajā gadījumā programmas loģiskās beigas sakritīs ar fiziskajām un interpretators apstāsies.

Ievades pārbaude ...

— Tagad programma ir ievadīta. Kaut arī uz ekrāna tu redzi visas rindas, kuras esi ievadījusi, tomēr vēl viena pārbaude nenāks par ļaunu. Ir iespējams apskatīt visu programmu, kas atrodas atmiņā, ar pavēles LIST palīdzību. «List»

LIST

SUPER     21-NOV-86   14:35:20

10 A=12
20 B=20
30 C=A+B
40 PRINT A,B,C
50 END

angliski nozīmē «sastādīt sarakstu», bet tas ir pēc vārdnīcas, pie mums tas nozīmē «parādīt programmu». Tā ir otra beisika pavēle, ko tu uzzini. Pavēle tāpēc, ka darbojas ar pašu programmu.

— Jā, tev ir taisnība. Tagad pēc numura 20 jau ir atstarpe.

— Tā tam arī jābūt. Vēl, kā tu redzi, pirms programmas teksta ir izvadīta rinda ar programmas nosaukumu, šodienas datumu un pulksteņlaiku. Lai šī rinda neparādītos, izmanto pavēli LISTNH.

... un programmas palaišana

Ja viss ir labi, programmu vajag palaist. Tas izdarāms ar pavēli RUN.

Visi pie darba!
Visi pie darba!

— Hā! Angliski «ran» taču nozīmē «skriet»!

— Ne tikai skriet, bet arī darboties — tā var teikt par mašīnām un programmām. Ievadām šo pavēli.

RUN

SUPER     21-NOV-86   14:46:30

 12            20            32

READY

Kā redzi, viss ir kārtībā. Sākumā interpretators izvada programmas nosaukumu, pēc tam — pašas programmas darba rezultātus. Ja programmas nosaukumu tev nevajag, tā izvadi var atslēgt, izmantojot pavēles RUN variantu RUNNH. Pašlaik programma savu darbu ir beigusi: tu redzi interpretatora ziņojumu READY, bet mainīgo vērtības vēl arvien atrodas mašīnas atmiņā katra savā kastītē, un interpretators tiek tām klāt. Tās var pārbaudīt un pat pārveidot, izmantojot tiešā režīma iespējas.

— Interesanti, kādas gan iespējas es varētu izmantot?

— Piemēram, izvadīt A un C vērtību reizinājumu.

— Ar operatoru PRINT?

— Pats par sevi saprotams.

PRINT A*C
 384

— Tā, ļauj padomāt. Rezultāts ir pareizs.

— Par to nešaubies.

— Klusu! Man ir ideja.

A=10

READY
PRINT A,C
 10            32

Es domāju, ka varbūt, mainot A vērtību, mainīsies arī C vērtība. C taču ir A un B summa.

— Nu nē! Lai dabūtu jaunu summu, vajag no jauna palaist programmu un pie tam ar jauno mainīgā A vērtību. Bet, tā kā šim mainīgajam vērtība tiek piešķirta rindā ar numuru 10, tad šī rinda ir jāpārveido. Rindas pārveidošana ir ārkārtīgi vienkārša: ar to pašu numuru jāievada jaunā, vajadzīgā rinda.

10 A=10

Un tagad programmu var palaist. Izmanto pavēli RUNNH.

RUNNH
 10            20            30

READY

— Nav jau diez ko ērti te tā mainīt, ja kaut kas ir jāaprēķina ar citādiem skaitļiem.

Ievade programmas darba gaitā

IEVADES OPERATORS— Protams. Ja beisika programma būs jālaiž vairākkārt, katru reizi ar citādiem skaitļiem, tad vajag lietot ievades operatoru INPUT. Tas ir jauns — trešais — pamatoperators.

— «Input», «input» ... Ko tas latviski varētu nozīmēt?

— Tas nozīmē «ievade» vai «ievadīt», varbūt vēl «ielikt». Katrreiz, kad interpretators programmā sastop ievades operatoru INPUT, tas mašīnai liek gaidīt55 ievadi no displeja, un, lai tu zinātu, ka tā jau kaut ko gaida, uz ekrāna tiek izvadīta jautājumzīme. Bet tas, kas tai jāgaida, kura mainīgā vērtība šajā brīdī ir jāievada, programmistam ir jāuzraksta tūlīt pēc vārda INPUT. Ja tādi mainīgie tev ir vairāki, tad tie cits no cita jāatdala ar komatu. Arī rindu ar INPUT no beisika var pārtulkot latviešu valodā.

Datus no ekrāna saņem INPUT
Datus no ekrāna saņem INPUT
INPUTA, BBeisikā
Sagaidīt no displejamainīgo A un B vērtību ievadiLatviski

IEVADEIEVADSIegaumē atšķirību starp vārdiem «ievade» un «ievads»! Ievade ir tas, ko tu izdari, kad nospied taustiņu; ievads ir tā informācija, kas nokļūst atmiņā. Ievade ir process, kura rezultāts ir ievads. Gluži tāpat ir ar vārdiem «izvade» un «izvads».

— Manā programmā šim ievades operatoram acīmredzot ir jābūt desmitajā rindā. Es it kā mainīgā A vērtības piešķires operatora vietā ielieku ievades operatoru ... Vai ne?

— Mainīgā A vērtības piešķiršana tev notiek pirmajā, nevis desmitajā rindā. Tev programmā vispār nav desmit rindu.

— Nu labi, rindā ar numuru desmit. Vai tu gribi, lai es tā saku?

— Jā, domāju, ka tā būs pareizāk; vēl var teikt — rindā 10. Bet vispār tev ir taisnība, šajā rindā var ielikt ievades operatoru.

10 INPUT A

Tagad palaid programmu.

RUNNH
?_

Redzi nu. Jautājumzīme ir — mašīna stāv un gaida A vērtību. Vari ievadīt vajadzīgo vērtību.

?500
 500           20            520

READY

— Skaidrs. Tagad šo programmu, protams, var laist daudz reižu, bet man ar nožēlu jāatzīst, ka tās intelektuālais līmenis varētu būt augstāks. Diez vai šī programma tautsaimniecībā varēs būt noderīga.

Programmas pārrakstīšana no atmiņas uz diska

— Nekas, nekas. Tev viss vēl priekšā. Bet tagad, kamēr mūsu laiks vēl nav beidzies, es tev gribu pastāstīt, kā programma glabāšanai tiek izvadīta uz diska.

— To gan vajag. Šai vēsturiskajai programmai ir jāglabājas mūžīgi.

— Tik ātri jau tas neizdosies. Vispirms uz diska ir jāatrod brīva vieta, kur programmu ierakstīt.

FAILSUn tagad iegaumē jaunu vārdu: tā vieta uz diska, kurai ir nosaukums un kura ir atvēlēta, lai kaut ko glabātu — kaut vai programmu —, ir fails. Atklāti sakot, es ne uzreiz sapratu, kas ir fails, un varbūt tu arī šo jēdzienu apradīsi tikai vēlāk, kad dabūsi ar šiem failiem pastrādāt, bet īstenība ir tāda: ja gribi programmēt, tad centies apjēgt, kas ir fails. Bet pati programma uz diska tiek saglabāta ar pavēli SAVE.

— «Seiv» — tas, manuprāt, ir «glābt». Kas tad te ir glābjams?

FAILA APRAKSTS— «Glābt», pie mums «uzglabāt», bet galu galā arī «glābt» nemaz nav tik slikti — paglābt no izzušanas. Pēc SAVE ir jānāk faila aprakstam, citiem vārdiem sakot, ziņām par to: kā apzīmēsi failu, kurā rakstīsi programmu, un kurā vietā šis fails ir jāizveido. Ar apzīmējumu ir vienkārši. Ar vietu, kur fails 57ar programmu glabāsies, ir grūtāk, šeit ir jāzina, kā šīs vietas pieņemts apzīmēt operacionālajā sistēmā. Nu, bet šodien, lai noglabātu šo programmu uz diska, tev pietiks ar pašu vienkāršāko faila aprakstu, kas ir šāds:

Programmu uz diska noglabā SAVE
Programmu uz diska noglabā SAVE
Ilustrācija

Vispirms jāuzrāda tās iekārtas kods, kur fails tiks izveidots. Kods vienmēr sastāv no diviem burtiem, un, ja iekārta ir disks, tad šie burti būs DK. Seko iekārtas numurs, jo vajag pilnīgi vienādas iekārtas atšķirt citu no citas. Pēc iekārtas numura jāliek kols. Un, visbeidzot, kolam seko faila apzīmējums, kas var saturēt līdz deviņām zīmēm, no kurām pirmā zīme, protams, ir burts.

— Uh, cik sarežģīti!

— Nepavisam. Tas ir tikpat vienkārši kā programmēt beisikā! Vai gribi, es tev parādīšu dažus piemēriņus?

Vai sekojošie failu apraksti ir pareizi?

DK0:C

— It kā būtu pareizs.

— Kā tad! Ņem vērā, ka iekārtas numuru Ø var arī nerakstīt.

DK3:ZET

— Pareizs.

— Vispār jā, bet tikai tad, ja mašīnai ir četri diski: nulltais, pirmais, otrais un trešais.

LP:

— Jā, nu man gan nav ko teikt. Ko tas varētu nozīmēt?

— Nav arī nekāds brīnums, jo es tev neko neesmu teicis par tādu iekārtas kodu. To, ka tas ir iekārtas kods, tu varēji arī iedomāties, jo te ir divi burti un beigās kols. Vārdu sakot, tas ir drukas iekārtas kods.

Programmas pārrakstīšana no atmiņas uz papīra

Ilustrācija

Pavēlē SAVE tas tiek uzrādīts faila apraksta vietā, ja programmu vajag saglabāt uz papīra, tas ir, nodrukāt. Jāuzrāda tikai drukas iekārtas kods un nekas vairāk. Pamēģini, nodrukā savu programmu.

SAVE LP:

— Tas acīmredzot ir viss. Es sapratu, ka vairāk nekas nav jāraksta.

— Skaidrs, ka ne. Rakstot uz diska, vajadzētu uzrādīt arī faila apzīmējumu, lai mašīna citreiz šo failu varētu atrast. Bet uz drukas iekārtas nekas tāds nebūs jādara un to arī nevar izdarīt, jo uzdrukāto programmu tu aiznesīsi prom. Varu vēl piebilst, ka pavēle SAVE LP: ir ļoti līdzīga pavēlei LIST, tikai viena programmu izvada uz ekrāna, turpretī otra — uz drukas iekārtas.

— Viss! Nospiežu ievades taustiņu.

10 INPUT A
20 B=20
30 C=A+B
40 PRINT A,B,C
50 END

Vai, cik smuki uzdrukāja!

— Vari to saglabāt piemiņai. Mazbērniem parādīsi, ar kādām mašīnām esi jaunībā strādājusi. Bet tagad savu programmu uzraksti uz diska, un skrienam mājās, ir jau vēls. LP: vietā norādi iekārtu un faila apzīmējumu.

— Bet diska numurs? Vai var kuru katru uzrādīt?

— Nē, nē! Jāuzrāda tikai tas, uz kura tev atļauj rakstīt un ir brīva vieta. Šoreiz gan nekādu problēmu nav, tāpēc ka uz disku iekārtas Nr. 1 ir uzlikts man piešķirtais disks, uz kura brīvas vietas vēl ir daudz. Tā ka vari rakstīt uz mana diska.

SAVE DK1:_

— Bet tagad — faila apzīmējums. Kādam tam jābūt?

— Kā — kādam?! Kādu gribi, tādu liec! Un pacenties to neaizmirst, lai nākamreiz, kad ievajadzēsies, varētu savu programmu atrast.

— Un kā es to varēšu atrast?

— Par to parunāšu tad, kad būs jāmeklē. Tagad izdomā faila apzīmējumu.

SAVE DK1:PIRMFAIL

— Failu ar manu pirmo programmu loģiski būtu apzīmēt kā PIRMFAIL.

— Normāli. Nospied ievades taustiņu, un tava programma tiks uzrakstīta uz diska. Un tagad iemācies vēl vienu pavēli — BYE — «bai», kas latviski nozīmē «atā». Beidzot darbu, šī pavēle katrreiz ir jādod, lai beisika interpretators mašīnas vadību nodotu atpakaļ operacionālajai sistēmai.

Ej atpūties!
Ej atpūties!