9.

Pats grūtākais operators

69Nākamās nodarbības sākumā Pēcis bija noskaņots diezgan augstprātīgi.

— Nu, ko tev, Saprātiņa, lai saku? Programma, kuru tu pagājušoreiz ar tādām mokām sastādīji, protams, ir nāvīgi triviāla. Un tomēr tā drusku jau ir līdzīga īstai programmai. Tai, piemēram, ir gabals... ko es saku, gabaliņš!... kur notiek datu ievade, tāds pats mazs, mazs izvades gabaliņš un vēl mazāks gabaliņš, kas ievaddatus pārstrādā par izvaddatiem.

— Esmu līdz sirds dziļumiem sašutusi. Ko tu no manis galu galā gribi!

— Mieru, tikai mieru. To es saku tāpat, lai tu nedomātu, ka visu jau esi apguvusi. Bez tam es gribēju arī uzsvērt, ka jebkurai programmai ir šīs trīs sastāvdaļas, kuras var attēlot tādā kā blokshēmā:

Ilustrācija
Ilustrācija

— Nu, vai zini...

— Zinu, zinu, bet labāk izsauc savu programmu, un to mazliet uzlabosim, lai tā pārstāj būt tik taisna kā miets un lai tajā parādās kaut kāda loģika.

— Atkal! Izsaukt programmas no diska es taču nemāku!

— Tūlīt, tūlīt. Tās izsauc ar pavēli OLD. Ko «ould» latviski nozīmē?

— Vecs.

— Bet pēc OLD apraksti to failu, kurā programma glabājas. Tieši tāpat kā pagājušoreiz, kad programmu noglabāji, izmantodama pavēli SAVE.

OLD DK1:CELS

READY

70READY ir, tātad viss kārtībā. Tagad programmu pārveidosim tā, lai Celsija grādos tiktu pārvērsta viena Fārenheita grādu vērtība, tad otra un tā tālāk, cik vien vajag.

— Kā lai to izdara?

— Var rīkoties dažādi. Es ieteiktu šādu variantu. Pēc tam kad viena vērtība ir pārvērsta, programma lietotājam jautā: «Vai jūs gribat turpināt darbu?» Un gaida skaitļa ievadi. Ja lietotājs ievada nulli, tas nozīmē, ka darbs tiek pārtraukts, bet, ja citu skaitli, tad darbs tiek turpināts.

Kā lai izvada jautājumu par darba turpināšanu — tam tev jau jābūt skaidram: izmantojot operatoru PRINT. Tāpat ir skaidrs, kā ievada skaitli, kas būs beigu pazīme, — ar operatora INPUT palīdzību. Šis skaitlis būs kaut kā jāapzīmē, piemēram, ar Z.

Tagad — sazarošanās operators

Diemžēl, lai uzzinātu, vai skaitlis ir vai nav nulle, ar vecajiem operatoriem nepietiek: tam nepieciešams jauns operators — nosacītās pārejas jeb sazarošanās operators IF... THEN. Vai zini, ko tas nozīmē?

— «If» nozīmē «ja», bet «zen»... Varbūt «tad»?

— Jā, tā šie vārdi tiek tulkoti. Bet pašu nosacītās pārejas operatoru jeb, kā to dažkārt īsuma labad sauc, operatoru IF būs grūtāk saprast nekā iepriekšējos. Tāpēc aizturi elpu, kamēr nebūšu beidzis. Vispirms raksta IF, pēc tam loģisko nosacījumu, piemēram, mūsu gadījumā tā būs izteiksme Z=Ø, pēc tam THEN, bet pēc tam tās rindas numuru, no kuras darbs jāsāk, ja — un šis «ja» ir ļoti svarīgs — loģiskais nosacījums ir patiess, tas ir, Z tiešām ir vienāds ar nulli. Bet, ja nav, — tad darbs tiek turpināts tālāk, izpildot nākamo operatoru. Skaties:

Ilustrācija

71Es pats arī ne jau uzreiz aptvēru, kas ir loģiskais nosacījums, jo dažkārt tas izskatās gluži pēc piešķires operatora. Atšķirība ir tāda, ka šeit, izpildot operatoru, mainīgā Z vērtība nekļūs vienāda ar nulli, bet paliks tāda pati, kāda bijusi, — divi, desmit, un galu galā tikpat labi tā varēja būt arī nulle.

Ilustrācija

Uzrakstīsim, kā šo operatoru varētu pārtulkot latviski.

IFZ=ØTHEN6ØØBeisikā
Jamainīgā Z vērtība ir vienāda ar nullitadjāpāriet uz rindu ar numuru 600Latviski

Re, kas sanāk: zīme «=» piešķires operatorā nozīmēja «tiek piešķirta vērtība», bet operatora IF loģiskajā nosacījumā tā tiek lasīta kā «vienāds», tāpat kā aritmētikā.

Protams, ir arī citas iespējas, kā operatorā IF salīdzināt divus skaitļus. Var sastādīt beisika un latviešu valodas vārdnīciņu par loģiskajiem nosacījumiem, kurus drīkst izmantot nosacītās pārejas operatorā. Nekādi citi tur nevar būt.

BeisikāLatviski
=vienāds
<mazāks
>lielāks
<=mazāks vai vienāds
>=lielāks vai vienāds
<>nav vienāds

72Tā, sazarošanās operatoru «ja A mazāks par B, tad ej uz rindu 600» var un vajag rakstīt šādi: IF A<B THEN 6ØØ. Dažkārt operatoru IF sauc arī par salīdzināšanas operatoru.

Maija veido dialogu ar mašīnu

— Labi, sāksim tavas gudrības pārbaudīt praksē! Jaunievedums būs jāliek... tur, kur bija iznīcinātā rinda ar numuru 80. Interesanti, cik rindas būs jāpieliek?... Šķiet, ka ne pārāk daudz, — numurēšu tās ar soli 5. Vispirms jautājums par darba turpināšanu.

80 PRINT "JA BEIDZAT, IEVADIET 0"

Vai tavs lietotājs šo teikumu sapratīs?

— Kas to lai zina? Varēji uzrakstīt arī vairāk kaut ko tādu, ka var ievadīt jebkuru citu skaitli, ja vien ir vēlēšanās turpināt. Vispār Algoritms mums mācīja, ka, gudrojot paskaidrojumus, svarīgi ir atrast zelta vidusceļu, citādi, ja izvadīsi maz, lietotājs nesapratīs, bet, ja izvadīsi daudz, ekrāns būs pilns ar tekstu un cilvēkam tavos prātojumos būs grūti orientēties.

Pie kā noved liekvārdība programmas izvadā
Pie kā noved liekvārdība programmas izvadā

— Tagad paredzam skaitļa Z ievadi. Tas ir vienkārši.

85 INPUT Z

73Un nu — slavenais nosacītās pārejas operators. Ļauj padomāt. Kad būs uzrakstīts «ja Z=0, tad ej uz..», nebūs zināms, uz kurieni jāiet... bet tas jau arī nav svarīgi, jo tā, vienalga, nav pareizi. Jāpāriet tieši tad, kad Z nav vienāds ar nulli! Un tas jāraksta šādi:

90 IF Z<>0 THEN 30

— Tā. Tas nu ir gatavs. Vēl palūgsim izvadīt tīru rindu.

25 PRINT

— Izskatās gluži labi. Vēl tikai pēc nosacītās pārejas ieliec operatoru STOP. Tas te gan ir vajadzīgs tikai kārtības labad, jo interpretators, sasniedzis programmas pēdējo rindu, darbu tik un tā beigs.

95 STOP

Tagad es programmu pārnumurēšu.

RESEQ

READY
Ilustrācija

Pēc tam, pirms programmu laidīšu, es to pārbaudīšu. Bet visu skatīties man nevajag. Pietiks, ja pārbaudīšu beigas, kur sākas grozījumi, tas ir, no astoņdesmitās rindas, piedod, no rindas ar numuru astoņdesmit. Tā kā klāt ir nākusi rinda 25, tad, programmu pārnumurējot, rinda ar numuru 80 kļūs par rindu ar numuru 90.

LISTNH 90-200
90 PRINT "JA BEIDZAT, IEVADIET 0"
100 INPUT Z
110 IF Z<>0 THEN 40
120 STOP
130 END

READY

Pārnumurēšanas īpatnības

Paraugies, lūk, šeit! Šausmas! Rindā 110! Kad es to ievadīju, tad pēc THEN rakstīju 30, un to vēl var redzēt uz ekrāna. Taču pēc pārnumurēšanas šo 30 mašīna ir pārtaisījusi par 40. Kas te notiks, ja mašīna visu bojā?!

— Tā nemaz nav bojāšana. Tu taču pati teici, ka rindas 25 iespiešana visu pārbīdīs. Pēc pārnumurēšanas rinda ar numuru 30 kļuvusi par rindu ar numuru 40, un tātad tagad jāpāriet tieši uz rindu ar numuru 40. Tāpēc arī interpretators pēc THEN mainīja numuru.

— Baigi gudri gan izdomāts!

— Kā tad savādāk! Kurš, it īpaši lielā programmā, varētu pats atrast un izlabot visus nosacītās pārejas operatorus!

— Citādi izskatās tā nekas. Es laižu!

RUNNH

PROGRAMMA PAHRVEIDO FAHRENHEITA GRAHDUS
 PAR CELSIJA GRAHDIEM

 IEVADIET TEMPERATUHRU
 FAHRENHEITA GRAHDOS
? -50
TAS BUHS -45.5556 CELSIJA GRAHDI
JA BEIDZAT,IEVADIET 0
? 0_

75Tagad darbu beigsim.

STOP AT LINE 120

READY

— Paskaties: ja mašīnu apstādina operators STOP, tad interpretators par to ziņo un parāda, kādā numura rindā tas ir noticis. Protams, angliski. Bet vispār ar šo programmu strādāt beidzam, vari to noglabāt uz diska.

SAVE DK1:CELS

— Būtu interesanti uzzināt, vai ar to pašu faila apzīmējumu programmu diskā var ierakstīt otrreiz.

— Kā tad, ka var!

— Bet vai iepriekšējais fails ar tādu pašu apzīmējumu tiks aizmirsts?

— Tu gribēji teikt — nodzēsts, nevis aizmirsts. Nē, tas netiks nodzēsts. Tu pat varētu tikt pie tā klāt, ja labāk zinātu operacionālo sistēmu. Pavēle OLD izsauks tikai pēdējo variantu.

— Man jau arī tikai šis pēdējais variants būs vajadzīgs, es tāpat vien pavaicāju. Tad nu ievadu šo te rindu.

Ko Maija jau prot!

— Kārtībā. Tagad mēs šo tavu pēdējo programmu varētu pārdomāt. Vai tev tagad būtu grūti uzrakstīt tādu programmu, kas darītu otrādi — Celsija grādus pārvērstu Fārenheita grādos?

— Nemaz. Tur, kur rakstīts FAHRENHEITA, es ieliktu CELSIJA, bet CELSIJA vietā rakstītu FAHRENHEITA.

— Diemžēl pašu galveno tu nepateici. Jāpārveido arī formula, kas aprēķina mainīgā C vērtību.

— Ak, jā! Tādas formulas gan vēl nav, bet es domāju, ka to nebūs grūti iegūt no iepriekšējās.

76— Protams, ne. Tā būs šāda:

F = 95 C + 32

Bet tam nav nozīmes, jo mēs to pašlaik nemaz netaisāmies programmēt. Saki — vai tu tagad varētu sastādīt programmu, kas, piemēram, kilometrus pārvērstu centimetros?

— Kāda gan var būt runa, profesor! Es pat zinu formulu, kas šeit jāizmanto. Ja vēlies, es varētu uztaisīt programmu, kas centimetrus pārvērstu kilometros vai pat collas — centimetros!

— Lieliski! Bet sekundes — gados?

— Jūs mani apvainojat, biedri profesor!

Ilustrācija

— Tātad iznāk, ka mūsu programma ir ļoti viegli pārtaisāma par tādu, kas vienas mērvienības pārvērstu citās neatkarīgi no tā, par kādām mērvienībām ir runa.

— Diezin vai tam ir nozīme, ka mēs vienas mērvienības pārvēršam citās...

— Lūk! Tieši to es arī gribēju dzirdēt. Svarīgi ir tas, ka aprēķins notiek pēc kaut kādas formulas, vienalga, pēc kādas. Tā var būt ātruma aprēķināšana pēc dotā attāluma un laika, tā var būt algas aprēķināšana pēc izstrādāto normu skaita un izcenojuma; tā var būt kuba tilpuma aprēķināšana pēc vienas malas vai cilindra tilpuma aprēķināšana pēc rādiusa un augstuma.

— Tikpat labi tā varētu būt arī laukuma aprēķināšana.

— Cits piemērs. Ar lielām mokām tu esi atrisinājusi vienu matemātikas uzdevumu. Piemēram, tādu: no punkta A uz punktu B ar ātrumu v1 brauc vilciens, tam pretī ar ātrumu v2 brauc otrs vilciens. Pēc cik ilga laika tie saskriesies, ja attālums starp punktiem A un B ir m kilometru.

— Labāk būtu automašīnas — tās var pabraukt viena otrai garām.

— Tas ir pilnīgi vienalga. Ja vēlies, tad lai tās būtu vardes. Svarīgi ir tas, ka abas drāžas viena otrai pretī. Ja tu šādu uzdevumu esi atrisinājusi, tad vari noprogrammēt satikšanās laika formulu

T = mv1+v2

77un, ievadījusi ātrumus v1, v2 un attālumu m, dabūsi satikšanās laiku. Un tā ir ar jebkuru līdzīgu formulu. Un ar nelīdzīgu arī. Galvenais, lai būtu formula.

— Tomēr ir arī atšķirības. Mūsu pirmajā programmā bija jāievada tikai viens skaitlis — Fārenheita grādi. Bet, lai rēķinātu pēc tavas vilcienu satikšanās formulas, vajag ievadīt trīs skaitļus.

— Jā, tāda atšķirība ir. Bet, vienalga, tagad mēs varam sastādīt programmu jebkurai pasaules formulai.

Saproti jel — blokshēmas šīm programmām būs vienādas, bet programmas darīs kaut ko it kā pavisam atšķirīgu.

— Kāpēc tad «it kā»?

— Tāpēc, ka tās atšķirības rodas tikai tad, kad tu nāc un sāc iedziļināties lietas būtībā: kas pēc šīs formulas tiek rēķināts? ko ievada? ko izvada? Kad tu gribi saprast, kāda tam visam ir jēga. Mašīna nevar ne gribēt, ne saprast, tā tikai dara to, kas tai ir uzdots, — aprēķina pēc attiecīgās formulas. Un tad arī starp formulām nav lielas atšķirības. Vai saprati?

— Ne visai. Bet gan jau. Līdz nākamajai reizei sapratīšu. Tagad tik un tā jādodas projām, jo šitie jaunatnācēji, kas grib tikt pie mašīnas, man jau pūš pakausī.