Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [ 21 ] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Dim i, j, n As Integer, s As Double n - платеж.Rows.Count s = 0

For i = 1 To n

s = s + платеж (i) /

(1 + процент)((год(1) - год(1))/Зб5) Next i Доход = s End Function

Решим с помощью функции Доход следующую задачу. Предположим, что 11.01.97 у вас берут в долг 10 ООО руб. и предлагают вернуть; 20.12.97 - 2 ООО руб., 18.10.98- 4 ООО руб., 12.04.99-7 ООО руб. Имеет ли смысл эта сделка при годовой ставке 10 %?

Для решения этой задачи введем данные, как показано на рис. 10.1.

Неравномерные платежи

Ссуда

-10 000,00р.

11.01.97

Возврат

2 000.00р.

Даты

20.12.97

4 000,00р.

18.10.98

7 000,00р.

12.04.99

Годовая процентная ставка

Разность между чистым текущим

объемом вклада и размером ссуды

857,91р.

Рис. 10.1. Решение задачи о неравномерных платежах

Ссуда введена в ячейке В2 со знаком минус, так как эти деньги у вас забирают в ячейку В8, где вычисляется разность между текущим объемом вклада и размером ссуды, введем формулу =Доход (В7 ; В2 : В5; D2 : D5). В данном случае найденное значение равно 857.91. Так как результат положителен, данная сделка выгодна.

Отметим, что метод Rows возвращает строки диапазона платеж, а свойство Count считает число элементов объекта. Таким образом, плaтeж.Rows.Count определяет число строк в диапазоне платеж. Если требуется найти число столбцов диапазона платеж, то нужно использовать конструкцию плaтeж.Columns.Count.



Рассмотрим пример использования оператора Exit For. Функция Тест ([2]) определяет номер первого вхождения элемента b в вектор а. Если среди компонент вектора а нет элементов, равных Ь, функция Тест принимает значение, равное минус единице.

Function Тест(а As Variant, b As Variant)

As Integer Dim i, n As Integer, t As Boolean n = a.Rows.Count*a.Columns.Count

t = False For i = 1 To n If a(i) = b Then TecT = i t = True Exit For End If Next i

If t = False Then Тест = -1 End Function

Приведем еще один пример использования оператора цикла ([2]). Пусть нужно вычислить

12 5;

.4 5

где X - вектор из n компонент; b и с - матрицы размерности тхт, причем п = 3,т = 2.

Введем в диапазон А1:АЗ компоненты вектора jc, а в диапазоны В1:С2 и D1:E2 - компоненты матриц Ьис соответственно. Найдем значение s тремя способами.

Первый способ. На листе модуля вводится следующая функция пользователя:



Option Base 1

Function Q(x, b, с As Variant) As Double

Dim si, s2, s3 As Double, i, j, n, m As Integer

n = X.Rows.Count

m = b.Rows.Count

si = 0

For i = I To n

si = si + x(i) Next i s2 = 0

For i = 1 To m For j = 1 To m

s2 = s2 + b(i, j) * с(i, j) Next j Next i s3 = 0

For i = 1 To n

s3 = s3 + x(i) " 2 Next i

Q = (2 * si + s2 " 2)/(l + s3) End Function

В ячейку A8 введем формулу

=Q(Al:A3;Bl:C2;DI:E2)

Второй способ, в ячейку А6 введем формулу

{=(2*CyMM(Al:A3)+CyMMnPOM3B(Bl:C2;Dl:E2) "2) /(1 + СУММКВ(А1:АЗ))}

{-(2*СУММ(А1:АЗ)+

СУММ(В1:С2*01:Е2)2)/(1+СУММ(А1:А32))}

Третий способ. На лист модуля вводится функция пользователя:

Function S(x, Ъ, с As Variant) As Double Dim si, s2, s3 As Double

SI = Application.Sum(x)

s2 = Application.SumProduct(b, c)

s3 = Application.SurnSq x)

S = (2 * si + s2 " 2)/(1 + s3) End Function

В ячейку A7 введем формулу

=S(A1:A3;B1:C2;D1:E2)



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [ 21 ] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57