- •Мпс россии
- •Оглавление
- •1.Общие сведения для начинающего программиста
- •1.1. Компьютеры и программы
- •1.2. Программные приложения
- •1.3. Программа и алгоритм
- •1.4. Visual Basic – популярный язык программирования.
- •2. Проектирование Windows-приложения
- •2.1. Экранная форма, программный модуль, программный проект
- •2.2. Этапы создания приложения
- •2.2.1. Начальный этап проектирования - постановка задачи
- •2.2.2. Разработка интерфейса
- •2.2.3. Программирование
- •2.2.4 Заключительный этап проектирования
- •3. Основные конструкции языка программирования Visual Basic
- •3.1. Алфавит
- •3.2. Данные
- •3.2.1. Переменная
- •3.2.2. Константы
- •3.3. Оператор присваивания
- •3.4. Выражения и функции
- •3.4.2. Функции
- •3.4.3. Финансовые функции
- •3.5. Операторы условного и безусловного переходов
- •3.6. Операторы программирования повторений
- •3.6.1. Цикл со счетчиком
- •3.6.2. Вложенные циклы
- •3.6.3. Цикл с условием
- •4. Пример проектирования Windows-приложений Решение некоторых финансовых операций
- •Комментарии к работе приложения
- •Литература
- •Часть 1
3.4.3. Финансовые функции
В языке Visual Basic есть больше десятка встроенных финансово-математических (или просто финансовых) функций. Приведём описания лишь трёх из них. Это функции Рmt, РV и Rate (каждая из них — функция трёх аргументов).
1. Функция Рmt(ratе, преr, рv) возвращает величину периодического взноса в банк, который должен выплачивать клиент этого банка, чтобы в определённый срок вернуть банку взятые у него деньги (кредит);
ratе (1-й аргумент функции Рmt) - это банковская процентная ставка, относящаяся к периоду выплаты (ставка — по англ. ratе). Например, если клиент выплачивает взнос ежемесячно, а банк берёт 12 % годовых, то значение ratе равно 0.01;
преr (2-й аргумент функции Рmt) - это общее число периодов выплат (от англ. питber оf реriods). Например, если, кредит взят на два года, а выплаты ежемесячные, то значение преr равно 24;
рv (3-й аргумент функции Рmt) - это величина кредита (или приведённой стоимости - по англ. рresent valие) - сумма в рублях или иных единицах, которую клиент взял в банке.
2. Функция РV(rate, nper, pmt) имеет дело с теми же величинами, что и функция Рmt, но возвращает величину приведённой стоимости (кредита) при заданной величине периодической выплаты ртt (от англ. рaument – выплата).
3. Аналогично функция Ratе(nper, ртt, рv) имеет дело с теми же величинами, что и функция Рmt, но возвращает величину банковской процентной ставки, относящейся к периоду выплаты.
На рис. 3.8 приведено окно приложения, единственное назначение которого - демонстрация работы трёх вышеперечисленных функций.
Рис. 3.8. Окно приложения, демонстрирующее работу финансовых
функций Рmt, РV и Rate
Программный код этого приложения следующий:
Код 3.11
Private Sub Command1_Click()
End
End Sub
Private Sub пуск_Click()
Dim Выплата As Currency, Кредит As Currency, Прирост As Single
Print "Pmt - Выплата; pv - Кредит;";
Print "nper - Число платежей; rate - Прирост."
p = InputBox("Ввести проц. ставку кредита", , "Ввод")
k = InputBox("Ввести количество периодов", , "Ввод")
c = InputBox("Ввести величину кредита", , "Ввод")
Выплата = Pmt(p, k, c): Выплата = CInt(Выплата * 10) / 10
Text1.Text = "Ежемесячные выплаты составят " _
& Str(Выплата) & "р."
'Применение функции Pmt.
Print "rate = 0.01;nper = 120;pv = 150000"
Print "Pmt(rate,nper,pv)="; Выплата
Кредит = PV(0.01, 120, -2500)
'Применение функции PV.
Print "rate = 0.01;nper = 120;mpt = - 2500"
Print "PV(rate,nper,mpt) ="; Кредит
Прирост = Rate(120, -2500, 150000)
'Применение функции Rate.
Print "nper =1 20;pmt = - 2500;pv=150000"
Print "Rate(nper,mpt,pv) ="; Прирост
Для «печати» результатов работы программы на экранной форме в данной программе использована встроенная процедура Visual basic, которая называется методом Рrint. (Более подробно речь об этом методе будет идти в подразд. 5.2.)
Пример 3.12
С помощью представленных финансовых функций можно сделать следующее приложение.
На экранной форме четыре текстовых поля и три командные кнопки. Текстовые поля предназначены для ввода или вывода следующих величин:
1) годового банковского прироста стоимости (в процентах);
2) числа периодических (например, ежемесячных) выплат;
3) суммы полученного у банка кредита (приведённой стоимости);
4) величины одной выплаты.
1-ю, 3-ю и 4-ю величину этого списка можно находить с помощью представленных выше финансовых функций, если остальные величины этого списка известны.
Для этой цели и служат командные кнопки. Для каждой из них написана отдельная процедура-событие (Прирост_Click, Кредит_Сlick и Выплата _Сlick). Щелчок каждой из этих кнопок после ввода трёх чисел в три текстовых поля вызывает появление четвёртого числа в текстовом поле, оставшемся незаполненным.
На рис. 3.9 показана работа данного приложения - нахождение значения годового прироста при известных значениях числа выплат (24), суммы кредита (120000 руб.) и величины ежемесячной выплаты (6000 руб.)
Рис. 3.9.
Окно работающего приложения «Кредит
в Сбербанке»
Программный код для этого приложения состоит из объявления типов четырех переменных и описания трех процедур-событий:
Код 3.12
Dim r Аs Single, n As Integer, v As Currency, p As Currency
/ Процедура нахождения ежемесячной выплаты:
Private Sub Выплата_Click()
г= Val(Техt1.Техt)
n= Val(Техt2.Техt)
v= Val(Техt3.Техt)
r = r / 1200: р = -Рmt(r,n,v)
Техt4.Техt = Str(р)
Еnd Sub
‘Процедура нахождения суммы кредита:
Private Sub Кредит_Сlick()
г= Val(Техt1.Техt)
n= Val(Техt2.Техt)
p= Val(Техt4.Техt)
r = r / 1200: р = -p: v=pv(r,n,p)
Техt3.Техt = Str(v)
Еnd Sub
‘Процедура нахождения величины прироста:
Private Sub Прирост_Сlick()
N = Val(Техt2.Техt)
V = Val(Техt3.Техt)
P = Val(Техt4.Техt)
P = -p: r = 1200*Rate(n,p,v)
Техt1.Техt = Str(r)
Еnd Sub
Выражения как функции
По своей сути арифметические выражения ничем не отличаются от функций. Так же как и функции, они возвращают значения, а входящие в них константы, переменные, другие выражения можно считать их аргументами.
Например, арифметическое выражение А * (В + С/В) можно считать функцией умножения с двумя аргументами. Первый аргумент - это переменная А, а второй - это выражение (В + С/В), которое, в свою очередь, можно считать функцией сложения двух аргументов: В и С/Л (В - переменная, а С/В - функция деления).
Нетрудно сообразить, что любое арифметическое выражение - это сложная функция. И в большинстве случаев (как в приведённом примере) это функция двух аргументов. Функцию двух аргументов часто называют бинарной функцией.
Известно, что в Бейсике функция обозначается так:
ИмяФункции(СписокАргументов)
Такое обозначение называется префиксным, так как ИмяФункции записывается перед Аргументами, является префиксом (приставкой).
Если функция бинарная, то для упрощения записи во многих языках принято использовать не префиксное, а инфиксное обозначение, при котором ИмяФункции записывается между двумя её Аргументами:
Аргумент1 ИмяФункции Аргумент2
Именно так записываются арифметические и логические выражения в Бейсике и во многих других языках программирования.
Обычное, привычное для вас инфиксное обозначение А * (В + С/В) можно, конечно, представить и в префиксном виде:
* (А, + (В, /(С, В))).
Но такая форма записи, особенно когда выражение сложное, содержит большое количество скобок. Они очень затрудняют понимание этого выражения.
Но не надо забывать, что инфиксная запись требует строгого соблюдения правила старшинства операций. Именно эти правила помогают иногда резко сократить число скобок. Например, вместо того чтобы писать
(((А + (В * С)) – (В/Е)) + Р),
мы пишем
А + В * С – В/Е + Р.
Но иногда скобки необходимы:
(А + В)/(С – В),
такую «дробь» без скобок не запишешь!
А иногда скобки ставят даже тогда, когда они и не нужны, просто чтобы не запутаться. Например, в записи
Str(X^2+Y^2)*(2*N)
вторая пара скобок не нужна, но она и не повредит правильному пониманию того, какое действие за каким следует. А вот первая пара скобок необходима!