VĒL PROGRAMMU PIEMĒRI: Tipiski skolu programmēšanas 8 uzdevumi, pārnesti uz Scratch

8. Kredīta aprēķins jeb PMT()

Izveidosim Scratch šaurā lokā plaši pazīstamo Excel funkciju PMT().
 

Tas ir aizņēmumu, kredītu aprēķinu uzdevums, kas ļauj labāk saprast summas un palīdz atbildīgi izlemt aizņemties vai nē. Uzdevums no reālās dzīves varētu būt šāds: "Preces cena ir 2000,00 €, prasītā sākuma iemaksa ir 0%, gada procentu likme 12%. Aprēķināt situācijas parametrus, ņemot kredītu uz 3 gadiem”. Tad tipiski dotās vērtības ievada Microsoft Excel vai OpenOffice.org Calc tabulā, lietojot funkciju PMT(). Aizdevuma summa = Cena * (1 - sākuma iemaksa %). Ja maksājuma periods ir 1 mēnesis, tad ikmēneša maksājuma summu rādīs finanšu funkcija PMT(Rate; NPer; PV; FV; Type) jeb PMT(procentu likme; maksājumu skaits; aizdevuma summa): Perioda iemaksa =PMT(gada procentu likme / 12; gadu skaits * 12; - Aizdevuma summa; gala summa; maksājuma tips), te pēdējos divus argumentus var nenorādīt, jo tie tipiski ir 0 (gala summa ir nulle un atmaksu veic katra mēneša sākumā nevis beigās). Pēc tam ir viegli aprēķināt kopējo samaksāto summu un bankas komisiju jeb ieņēmumu. Šādi viegli var papētīt rezultāta atkarību no procentu likmes un termiņa. PMT() funkcijs izpildījuma piemērs Excel alternatīvā OO.o Calc dots 22. att.


PMT()

22. att. MS Excel funkcijas PMT() piemērs, izpildīts OpenOffice.org Calc.


Mēs esam pieraduši finanšu aprēķinus veikt Microsoft Excel vai alternatīvās, līdzīgās programmās. Bet kā būtu, ja šo programmu nebūtu, vai tās nebūtu mums pieejamas. Tad atbilstošo aprēķinu varētu uzprogrammēt. Piemēram, plaši pazīstamajā tīmekļa lapu veidošanas servera puses valodā PHP šis kods aizdevumam bez pirmās iemaksas būtu šāds, tikai jāuzmanās, lai viss ir 1 mēnesim: periodsgados*12, gadaprocenti/12:

<?php
    $iprocenti = 12/12/100;
        // Jo jāpāriet uz mēnešiem no gada un koeficienta formu no %.
    $nilgums = 3*12;
    $psumma = 2000;
    function PMT($i, $n, $p)
    { return $i * $p / (1 - pow((1 + $i), -$n));
    }
    echo "Mēnesī jāatmaksā: ".(number_format(PMT($iprocenti, $nilgums, $psumma),2));
    ?>

Šis jaunas funkcijas definēšanas un izmantošanas PHP kods ir gandrīz pašsaprotams, tikai jāpaskaidro, ka pow() ir eksponentes funkcija PHP, kur pirmais mainīgais ir bāze, bet otrais- pakāpe.
 

Rēķinot ar kalkulatoru, mēnesī atdodamā summa, ko arī atgriež funkcija PMT(), būs:
= 12/1200 * 2000 / (1 - (1+12/1200)^(-3*12)). Mjā, kaut kā pagari, lai bankā sarunas karstumā ar šo nenokļūdītos- cik labi, ka mums ir Excel vai cita programma, kas māk to ātri sarēķināt!
 

Nelielu problēmu, aprēķinu programmējot Scratch rada tas, ka Scratch tieši nav pakāpes funkcijas, skat. http://wiki.scratch.mit.edu/wiki/%28%29_of_%28%29_%28Operators_block%29. No situācijias var iziet 2 veidos: a) izmantojot logaritmu ( y^x = 10^(x*lg(y)) ) vai b) vienkārši veidojot ciklu ar reizināšanu iekšā, skat. http://wiki.scratch.mit.edu/wiki/Solving_Exponents.

 

Ja veido ciklu, lai ietaupītu jūsu laiku eksperimentiem, pateikšu, ka Scratch nemāk izpildīt a=a*a, kaut māk a=a+1. Līdz ar to b variantā ciklā jāveido 1-2 pagaidu mainīgie starpvērtībām. Vēl jāpiebilst, ka Scratch nevar darboties ar ļoti lieliem skaitļiem, kas pie katra datora resursiem var atšķirties, jo programma pildās lokāli Flash spraudnī. Tādēļ tiek veikta rezultāta pārbaude: ja mainīgais, pereizināts ar, piemēram, 10, nemainās, tā saturs ir bezgalība vai 0, vai ir kļūdas paziņojums. Tad šajā gadījumā atgriešam speciālu atbildi, aicinot ievadīt mazākus skaitļus.

 

UZMANĪBU: nelietojiet programmu lieliem reāliem kredītu aprēķiniem, jo Scratch limitu dēļ tā pareizi strādā tikai ne visai lieliem skaitļiem! Bet nelielus kredītus ar šo sarēķināt var.

 

Kā iepriekšējās tēmās aplūkojām, Scratch noapaļošanas funkcija strādā tikai veselos skaitļos, tādēļ izmantojam iepriekš algoritmu: reizinam ar 100, tad noapaļojam, tad dalam ar 100 un tiek iegūts rezultāts ar 2 cipariem aiz komata.
 

pmt kods

23. att. PMT programmas kods, tajā pakāpes funkcijas problēma atrisināta a veidā.


pmt atrisinajums

24. att. Programma darbībā.


Programmas adrese: http://scratch.mit.edu/projects/26351807/ .


UZDEVUMI:

a) papildiniet programmu, lai tā parāda, kāda ir kopējā atmaksājamā summa un cik notās ir komisija jeb aizdevēja kopējie ieņēmumi;

b) papildiniet programmu ar iespēju norādīt 1. iemaksas % vai summu;

c) izpētiet, šeit izmantotā PMT() formula atbilst kredīta atmaksai mēneša sākumā vai beigās, modificējiet formulu otram variantam (finansu funkciju formulas internetā var atrast, diemžēl dažos resursos tās ir kļūdainas);

d) izveidojiet analogu programu uzkrājumu veidošanas aprēķinu Microsoft Excel funkcijai FV(), skat. http://www.frickcpa.com/tvom/TVOM_formulas.asp.