12.

Neliels ieskats grāmatvedībā

Šī programma aprēķina ienākuma nodokli, ja ir dots algas lielums.

— Vai dieniņ, cik nopietnas lietas! Es, piemēram, nekad neesmu interesējusies par to, cik mani senči saņem un kādus nodokļus maksā.

Bērniem līdz 16 gadiem lasīt atļauts

— Varēji arī painteresēties. Tiesa, arī es pats, tikai strādājot ar šo programmu, uzzināju, pēc kāda algoritma tiek aprēķināts ienākuma nodoklis. Un algoritms ir šāds. No algas līdz 70 rubļiem nekādu nodokli neatvelk — tas ir tā sauktais neapliekamais minimums. Nodokli neatvelk arī no kapeikām. Ja tev pienākas 71 rbl. 99 kap., tad nodoklis būs jāmaksā no 71 rubļa. No 71, 72 vai 73 rubļiem nodokli N aprēķina pēc formulas:

N=0.34A−23.89,

98kur A ir aprēķinātā alga. Tālākajām summām formulas ir šādas:

N=0.35A−24.60, ja 74≤A≤76;
N=0.34A−23.79, ja 77≤A≤90;
N=0.12A−3.80, ja 91≤A≤100.

Visbeidzot, sākot ar 101 rubli, nodokli maksā kā no 100 rubļiem un vēl 13% no summas virs 100 rubļiem jeb pēc formulas:

N=0.13A−4.80.

— Neko daudz es vis nesapratu.

— Tad skaties blokshēmu.

Ilustrācija

99Un tagad pati programma.

10 PRINT "PROGRAMMA APREHKJINA IENAHKUMA NODOKLI"
20 REM A - ALGA, N - NODOKLIS
30 M=70 \  \ REM MINIMAHLA' NEAPLIEKAMA' ALGA
40 R1=.34 \  \ REM KOEFICIENTS FORMULA' N=R1*A-Z
50 R2=.35
60 R3=.12
70 R4=.13
80 S1=73 \  \ REM KONSTANTES FORMULU MAINJAI
90 S2=76 \ S3=90
100 Z1=23.89 \  \ REM KOEFICIENTI FORMULAHS
110 Z2=24.6
120 Z3=23.79
130 Z4=3.8
140 Z5=4.8
150 S4=100
155 \
160 PRINT  \ PRINT "IEVADIET ALGAS LIELUMU RUBLJOS"
170 INPUT A1
180 A=INT(A1) \ REM NODOKLI APREHKJINA TIKAI NO RUBLJIEM
185 \
190 REM SAHKAS NODOKLJA APREHKJINAHSHANA ***************
200 IF A>M THEN 220
210 PRINT "ALGA ";A;" RBLJ. NETIEK APLIKTA" \ GO TO 350
220 IF A>S1 THEN 240
230 N=R1*A-Z1 \ GO TO 310 \  \ REM     0.34*A-23.89
240 IF A>S2 THEN 260
250 N=R2*A-Z2 \ GO TO 310 \  \ REM     0.35*A-24.60
260 IF A>S3 THEN 280
270 N=R1*A-Z3 \ GO TO 310 \  \ REM     0.34*A-23.79
280 IF A>S4 THEN 300
290 N=R3*A-Z4 \ GO TO 310 \  \ REM     0.12*A-3.80
300 N=R4*A-Z5 \  \ REM                 0.13*A-4.80
305 \
310 REM NODOKLIS IR APREHKJINAHTS ***********************
320 K=INT(N*100+.5) \ N=K/100
330 R=INT(N) \ K=K-R*100 \ REM APREHKJINA RBLJ. UN KAP.
340 PRINT " NODOKLIS IR ";R;" RBLJ. ";K;" KAP."
350 PRINT  \ PRINT "IEVADIET 0, JA BEIDZAT DARBU";
360 INPUT Z
370 IF Z<>0 THEN 160
380 STOP
390 END

— Dod šurp to programmu, tūlīt es to nokritizēšu. Tā, tā... Pirmajā rindā izdrukāts, ko programma dara. Ļoti labi. Otrajā rindā piezīmes — alga, nodoklis...

100— Nākamajās rindās es izveidoju aprēķināšanai vajadzīgās konstantes. Piemēram, ar M apzīmēju neapliekamo minimumu. Ja šo minimumu paaugstinās, programmā būs jāmaina tikai rinda 30. Tad pa visu programmu nebūs jāmeklē, kur tiek izmantots 70 un ko šis 70 nozīmē. Tāpat ir arī ar citām konstantēm, kuras jāizmanto visās piecās formulās.

Ilustrācija

— Ahā! Tas viss notiek rindās ar numuriem no 30 līdz 150. To es saprotu. Tad nāk algas ievade rindā 170. Bet rindā 180? Kas te notiek?

Funkcijas, kas vajadzīgas visiem

IEBŪVĒTĀS FUNKCIJAS— Te? Pats interesantākais šajā programmā. Parādās pirmā iebūvētā funkcija tavā programmista praksē. Dažreiz cilvēkam ar mainīgo vērtībām vajag izdarīt kaut ko sevišķu, no četrām aritmētiskajām darbībām atšķirīgu. Tādam nolūkam ir paredzētas iebūvētās funkcijas. Tām, tāpat kā mainīgajiem, ir savs apzīmējums, piemēram, INT, pēc kura iekavās raksta to aritmētisko izteiksmi, ar kuras vērtību ir jādara tas, ko funkcija dara.

— Bet kāpēc tās sauc par iebūvētajām funkcijām?

— Tāpēc, ka tās jau ir pašā beisika interpretatorā, vienalga, vai programmistam tās vajag vai ne. Un vēl tāpēc, lai tās atšķirtu no tām, kuras vajadzības gadījumā var izveidot pats programmists, bet par to vēlāk.

— Un ko tas INT varētu nozīmēt?

— INT ir saīsinājums no angļu vārda integer, ko izrunā «intidžer» un kas nozīmē «vesels», protams, 101ja runa ir par skaitļiem, nevis par cilvēkiem. Funkcija INT atrod skaitļa veselo daļu, precīzāk, tās aritmētiskās izteiksmes veselo daļu, kura ir uzrakstīta iekavās aiz INT. Piemēram, ja A=4,56789, tad INT(A) būs 4. Vienkārši, vai ne?

Veselo daļu atrod iebūvētā funkcija INT
Veselo daļu atrod iebūvētā funkcija INT

— Cik vērtīga ir programmēšana! Cilvēks pilnīgi par velti atkārto un padziļina aritmētikas zināšanas.

— Atgriežamies pie rindas 180. Kā jau teicu, nodokli aprēķina tikai no rubļiem, kapeikas jāatmet, kas, runājot matemātiski, nozīmē paņemt algas veselo daļu.

— Skaidrs! Un ko nozīmē rindā 190 redzamās zvaigznītes?

— Neko sevišķu. Tās tur ir tikai izskata pēc: programmas sākumdaļu atdala no galvenās daļas, kur notiek viss svarīgākais. Piezīmju operatoru var izmantot arī šādos nolūkos.

— Ahā! Rinda 200 algu jau salīdzina ar neapliekamo minimumu. Ja alga lielāka, tad rindai ar numuru 210 pārlec pāri. Tā jāizpilda tad, ja alga ir mazāka par neapliekamo minimumu. Kā tad! Šajā rindā tiek izvadīts ziņojums, ka alga ar nodokli nav apliekama, un vadība tiek nodota kaut kur uz priekšu. Gan jau vēlāk redzēs.

Tālāk. Rindā 220 tiek pārbaudīts, vai alga nav lielāka par 73 rubļiem. Nu jā, un uz rindu 230 nonāk tikai tad, ja alga ir lielāka par neapliekamo minimumu — tātad par 70 rubļiem — un bez tam nav lielāka par 73 rubļiem. Liekas, ka viss norit pareizi.

— Un pilnīgi tāpat notiek aprēķināšana arī pēc pārējām formulām. Viss šeit ir rūpīgi pārbaudīts, lai nodokļi tiktu noteikti ar precizitāti līdz kapeikai.

— Bet, kad nodoklis ir aprēķināts, notiek kaut kas neparasts. Es domāju rindu 320.

Noapaļošanas kļūdas skaitļotājā ir neizbēgamas

— Redzi, izdarot aprēķinus, mašīnā rodas noapaļošanas kļūdas un, teiksim, 5 vietā var iznākt 4,99999, kas, protams, ir gandrīz 5. Bet, ja mašīna izvadīs, ka nodoklis ir 4,99999 rubļi, tad jebkurš grāmatvedis smiesies, vēderu turēdams. Diemžēl 102pirmie programmas varianti tā arī darīja, un tāpēc bija vajadzīga šī rinda 320. Šeit es daru sekojošo. Vispirms, pareizinot ar simtu, rubļus pārvēršu kapeikās un tad pieskaitu puskapeiku, lai gadījumā, ja 500 kapeiku vietā esmu ieguvis 499,9999 kapeikas, man būtu 500,499 kapeikas, no kurām, paņemot veselo daļu, iznāks 500 kapeikas, kā arī vajag. Ja rezultāts man bija pareizs, tad puskapeikas pieskaitīšana veselo daļu nekādi neietekmēs.

Pagaidi! Kapeikas jānoapaļo citādi!
Pagaidi! Kapeikas jānoapaļo citādi!

Vēl es aprēķinātajā nodoklī gribu atdalīt rubļus un kapeikas, piemēram, ja nodoklis sanāk 5,42 rubļi, tad man vajag atsevišķi izvadīt 5 un 42. Tādas rubļu un kapeiku atdalīšanas saprašana nav pārāk vienkārša. Skaties, šeit rindā 330 es no kopējā kapeiku skaita K atņemu veselo rubļu skaitu, kas pareizināts ar simtu. Rezultātā man būs...

— Kapeiku skaits! Tas taču nemaz nav tik sarežģīti!

— Un seko rezultāta izvade un jautājums, vai lietotājs ar šo programmu vēl grib strādāt. Es šo programmu pārbaudīju visām vērtībām no 71 līdz 90 rubļiem, dažām starp 90 un 100, kā arī dažām, kas lielākas par 100. Un vienmēr izrēķinātais nodoklis sakrita ar to, kas iznāk pēc tabulām, kuras izmanto grāmatveži. Tās tabulas jau arī ir sastādītas pēc šīm formulām.

— Nu labi. Vispār man sāk likties, ka šīs tavas programmas tiešām var papētīt — šis tas kļūst skaidrāks. Varbūt rīt varam arī citas paskatīties, ja tev vēl ir.

— Ir, ir. Paskatīsimies.