Программирование в среде Visual Basic for Applications (1082430), страница 9
Текст из файла (страница 9)
10.1. Рис. 10.1. Решение задачи о неравномерных платежах Ссуда введена в ячейке В2 со знаком минус, так как эти деньги у вас забирают в ячейку В8, где вычисляется разность между текущим объемом вклада и размером ссуды, введем формулу =Доход (В7; В2:В5) 1)2:(Э5). В данном случае найденное значение равно 857.91. Так как результат положителен, данная сделка выгодна.
Отметим, что метод Коня возвращает строки диапазона платеж, а свойство Сопит считает число элементов объекта. Таким образом, платеж.йоттз.Соипс определяет число строк в диапазоне платеж. Если требуется найти число столбцов диапазона платеж, то нужно использовать конструкцию платеж.Со1щппз.Сопит. 67 1О. Операторы цикла Рассмотрим пример использования оператора Ехй Еог.
Функция Тест ((21) определяет номер первого вхождения элемента Ь в вектор а. Если среди компонент вектора а нет элементов, равных Ь, функция Тест принимает значение, равное минус единице. Гипст1оп Тест(а Ая Чатгапт, )з Ая )Зат1апс) Ая тпиедет Рги 1, п Ая тпиедет, и Ая Воо1еап п = а.аотя.сопит*а.со1изипя.сопит Еа1яе Вот з. = 1 То п тт а(1) = )з т)зеп Тест = с = ттие Ехги Рот Епа ТГ Мехи з. 11 т = Га1яе Т)зеп Тест = -1 Епс) Гипссгоп Приведем еще один пример использования оператора цикла (~2~) Пусть нужно вычислить 1 я (ы из 2~' х;+ ((~,~Ьззс» ! ! з=! /=! л 1+ ~~) хз з=! х= ),Ь= где х — вектор из и компонент; Ь и с — матрицы размерности тхт, причем п = 3, т = 2. Введем в диапазон А1:АЗ компоненты вектора х, а в диапазоны В1:С2 и В1:Е2 — компоненты матриц Ь и с соответственно. Найдем значение я тремя способами.
Первый способ. На листе модуля вводится следующая функция пользователя: Программирование в среде (г(юиа! Вав!с/ог Аррбса!!от 68 Орг1оп Ваве 1 Рипсгтоп О(х, Ь, с Ая Частапг) Ая Роивте Ргп вк, в2, яЗ Ая РоиЬ1е, 1, З, п, и Ая 1пгедес п = х.коыя.соипг Ь.ксив.Соипг в1=0 Рос 1 = 1 То п в1 = в1 + х(1) иехг 1 в2 = 0 Рог 1 = 1 То и Рог З = 1 То и в2 = в2 + Ь(1, 3) * с(1 З) иехг иехг 1 яЗ = 0 Рог 1 = 1 То п яЗ = яЗ е х(1) " 2 Мехг 1 О = (2 * я1 + я2 " 2)/(1 + яЗ) Епс) Рипсгтоп В ячейку А8 введем формулу =О(А1:АЗ;В1:С2;Р1:Е2) Второй способ. В ячейку Аб введем формулу (= (2*СУММ (А1: АЗ) +СУММПРОИЗВ (В1: С2; 01: Е2) "2) / (1+ СУММКВ (А1:АЗ) ) ) ИЛИ ( — (2 *СУММ (А1: АЗ) + СУММ (В1:С2*01: Е2) "2) / (1+СУММ (А1:АЗ "2) ) ) Третий способ.
На лист модуля вводится функция пользователя: Рппсгтоп Я (х, Ь, с Ая Чаг1апг) Ав РоиЬ1е Ртт в1, я2, яЗ Ав РоиЬ1е Я1 = Арр11сагтоп.вшп(х) в2 = Арр11сагтоп.випРсос)исг(Ь, с) яЗ = Арр11сагтоп.липпЯЧ х) Я = (2 * я1 + я2 " 2)/(1 + яЗ) Еио Риисг1ои В ячейку А7 введем формулу =Я(А1:АЗ;В1:С2;Р1:Е2) 69 10. Операторы цикла 10.2. Оператор цикла Рог-Еас)1-Меха Для перебора объектов из группы подобных объектов, например ячеек из диапазона или элементов массива, удобно использовать оператор цикла Рог-Еасп-Мех1.
Оператор цикла Еог-Еас))-МехЕ имеет следующий синтаксис: Рот Еаса Элемент 1п Группа БЛОК ОПЕРАТОРОВ [Ехье Рот] БЛОК ОПЕРАТОРОВ Иехт Элемент Например, приводимая ниже процедура Знак заменяет все положительные числа диапазона ячеек А1:В2 знаком «+», все отрицательные числа — знаком «-», а нули оставляет без изменения (~2)): Ортьоп Ехр11сьт ЯпЬ Знак() Рьт с Аа ОЬ)ест Рот Еаса с 1п ХотхаЬеетн ("Лист1").Напое("А1:В2") тт таинллет1с(с.Ча1не) ТЬеп 11 с.Ча1пе > О ТЬеп с.Ча1пе епс] те ?Й таипметьс(с.Ча1пе) ТЬеп 1Е с.Ча1пе < О ТЬеп с.Ча1пе Епл) тя тт 1аипеетьс(с.Ча1пе) ТЬеп тг с.уа1пе = О ТЬеп с.уа1пе = О епй тг Иехт с Епл] ЯпЬ В процедуре Знак использовалась функция 1ВХшпег[с (Выражение), которая возвращает Тгне, если выражение может быть описано как числовое, и ЕаЬе — в противном случае.
Следующая процедура Цвет в зависимости от содержимого ячейки выделенной области, которая возвращается методом Яе1есйоп, изменяет цвет ее фона. Кроме того, если содержимое ячейки положительно, то изменяется цвет, размер и тип шрифта [[2)). Программирование в среде )г(яиа( Вая(с1ог Аррйсанояя 70 Яиь цвет() Р1п а Ая ОЬйест Еох Еасп а 1п Яе1естаоп 11 1яишпех1с(а.Ча1ие] ТЬеп 11 а.Ча1ие > О ТЬеи а.1птеткох.со1от1пс)ех = 8 а.воат-во1с) = Ттие а.коих.со1от1пдех = 5 а.Гопт.Яъхе = 20 Епс1 11 Епс) 15 11 Тяишяет1с (а.Ча1ие) ТЬеп 11 а.Ча1ие < О ТЬеп а.1псетаот.со1оттпс)ех = 4 Епс) 11 11 1яиитехкс(а.Ча1ие) ТЬеп 11 а.Ча1ие — О ТЬеп а.1птетаот.со1от1пс)ех = 6 Епс] 15 нехс а Епд ЯиЬ Яаае Размер шрифта, например В)отКЯЬеетя("Лист1").наиде("В2") Ропт.Яхве = 12 Жирный шрифт Во1ст Курсивный шрифт 1та11с Со1отйпйех Цвет символов.
Следующий пример задает зеленый цвет: В)отКЯЬеетя("Лист1"].Канде("В2"). еопс.со1от1пс]ех=4 Цвет в ЧВА задается целым числом от 1 до 56. В табл. 1О.! приведены некоторые из них ()пс]ет14пе Подчеркнутый шрифт. Данное свойство может принимать одно из следующих значений: х1Мопе — отсутствие подчеркивания, х1Я1пд1е или х1Я1пд1еАссоипсйпд — одинар- ное подчеркивание, х1()оиЬ1е или х1)ЗоиЬ1еАссоипс1пд — двойное подчеркивание В данной процедуре яоп4 — шрифт диапазона ячеек — является объектом.
Этот объект имеет следующие свойства: 71 10. Операторы цикла Таблица 10.1. Таблица кодов цвета В приведенной выше программе!птег(ог также является объектом, характеризующим фон указанного диапазона и имеющим следующее свойство: Со1от?поен (Цвет) . Например, зеленый цвет можно задать ячейке следующим образом: Канде("В2").Хптетгот. Со1отгпс(ех = 4. Диапазон ячеек обладает следующими свойствами: ишаоетуотеав (Числовой формат) Рассмотрим пример, задающий числовой формат с двумя знаками после десятичной точки: Калде("В2").
НпыЬетроттат = "0.00" ИтарТехс (Многострочный текст) . Например, Калде("В2") .Ча1се="Многострочный текст" Канде("В2").Хтартехт = Ттпе 10.3. Оператор цикла %И!е-%еп(1 Оператор цикла %ЬПе — Жепе используется для организации цикла с неизвестным заранее числом шагов. 72 Программирование в среде Уииа!Вая!с~отАрр!сса((оля Оператор имеет следующий синтаксис: ХЬ11е УСЛОВИЕ БЛОК ОПЕРАТОРОВ Хепс( Цикл %)ТПе-%еп(! обеспечивает многократное выполнение блока операторов, пока УСЛОВИЕ принимает значение Тгпе.
Приведенная ниже функция Доход 2 вычисляет то же значение, что и функция Доход, но с использованием цикла %!)Пе — %еп(!. Орохоп Ваяе 1 Рцпсгтоп Доход 2 (процент Ая ВоцЬ1е, платеж Ая Наг1апп, год Ая Нагьапп) Ая Роцвте 01ж 1, д, и Ая ьппедег, я Ая ОооЬ1е и = платеж .Вона .Сснпл я = 0 т ХЬ11е 1 <= и я = я + платеж(1) /(1 + процент) ( (год (1) — год (1) ) /305) — 1+1 Хепс) Доход 2 = я Епс) Рцпсс1оп Рассмотрим еще один пример выравнивания по центру содержимого всех ячеек, начиная с активной, сверху вниз, до тех пор, пока не встретится пустая ячейка [[Ц). 1=0 ХЬ11е АсС1несе11.СЬапде(1,0)<>Епрпу Асо1несе11.Се11(1,0).ног1хопла1А11дпжепо=х1Сеппет тек+1 Хепд 10.4.
Операторы цикла Ро-Ьоор В УВА для организации циклов с неизвестным заранее числом шагов используются и другие операторы цикла: Ро %!)ПеЬоор, Ро 1)п!П-Ьоор, Ро — Ьоор %!)Пе и Ро — Ьоор 1)и!П. 10. Операторы цикла Перечисленные операторы имеют следующий синтаксис: 1. По ИК11е УСЛОВИЕ БЛОК ОПЕРАТОРОВ [Ех1е По] БЛОК ОПЕРАТОРОВ Ьоор 2. По Пос11 УСЛОВИЕ БЛОК ОПЕРАТОРОВ [Ех1С По] БЛОК ОПЕРАТОРОВ Ьоор 3.
По БЛОК ОПЕРАТОРОВ [Ех1О По] БЛОК ОПЕРАТОРОВ Ьоор ХА11е УСЛОВИЕ 4. По БЛОК ОПЕРАТОРОВ [Ех1С По] БЛОК ОПЕРАТОРОВ Ьоор ЫС11 УСЛОВИЕ Оператор Ро %'Ы[е — Ьоор обеспечивает многократное выполнение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор Ро ППЯ-Ьоор — пока УСЛОВИЕ не соблюдается.
Операторы Ро — Ьоор %[зйе и Ро-Ьоор цпИ отличаются от перечисленных выше двух операторов тем, что сначала блок операторов выполняется по крайней мере один раз, а потом проверяется УСЛОВИЕ. Оператор Ехй Ро обеспечивает досрочный выход из оператора цикла. Приведем пример использования цикла Ро-Ьоор %Ы[е при нахождении корня уравнения Ях) = О методом Ньютона ([2)). Для нахождения приближенного значения корня уравнения методом Ньютона необходимо задать начальное приближение хо, а затем определить последующие приближения к корню методом итераций по формуле 74 Програл|мироваяие в среде ~Ъиа( Вав)сгог Аррйсаиояя 7 [х„,) 1 [х„,) гдеп =1,2, ... Процесс останавливается при выполнении неравенства ~ х„- х„) ~ < с, где с — точность определения корня.
В следующей программе методом Ньютона решается уравнение х = 2 ([2)). За начальное приближение к корню взято чисг ло 3, а корень вычисляется с точностью до 0,00001. Найденное значение корня с помощью метода Ас11уеСе11 выводится в активную ячейку. Ороьоп Ехр11сьп Рцпспяоп Р(х Ая Эоць1е) Ая Ооць1е Р = х " 2 - 2 Уравнение Г(х)= х2-2=0 Еп|) Рцпсоьоп Рцпсоьоп ЭР(х Ая Эоць1е) Ая Ооць1е РР = 2 * х Производная функции Г(х) Еп|) Рцпсоьоп ВцЬ ММ ( ) Сопев Еря = 0.00001 ' тонность определения корня 01|а хО, х Ав Поць1е х = 3 по хо = х х = х — Р(х) /ЭР(х) Ьоор ИЬ11е АЬя(х — хо) > ЕРЯ АспьуеСеЬ1.Ча1це = х Еп|) ЯцЬ Примером использования цикла 00-1.оор Пп1П может служить следующая программа нахождения корня уравненияЯх) = 0 методом деления отрезка пополам [[2)). В этой программе находится корень уравнения х = 2 с точностью до е = 0,00001.
За отрезок начальной локализации корня берется отрезок (О, 2). Рцпсоьоп Р (х) Р = х " 2 — 2 ' уравнение Г(х)= х2-2=0 Еп|) Рцпсо1оп вцЬ ВМ ( ) Рте с, РС Ая Поць1е Ш|а а, Ь, Ерв, ВМ Ая Поць1е 10. Операторы цикла 75 а = 0: Ь = 2: Еря = 0.00001 11 Р(а) * Р(Ь) >= 0 ТЬеп Мяовох "Функция не меняет знак" а "на концах отрезка локализации корня" ехьс ЯцЬ Епд 11 по с = (а е Ь) /2 РС = Р(с) * Р(а) 11 РС < 0 Тпеп Ь = с Е1яе а = с ьоор ппс11 Ь -а < Еря ЕМ=с Асоьчесе11.оттяее(хоиоттяее:=-1, со1цльпОРРяее:=0).Ча1це — "Корень" Ассачесе11.ча1це Асе1чесе11.ОРРяее(хоиОРРяее;=-1, со1цхпп011яее:"1) .Ча1це — "Значение функции" Аспьчесе11.ОРРяео(хоиотгяеп:=О, со1оапогГяео:=1).Ча1це = РС Епс( ЯцЬ В процедуре ВМ использовался метод О1Ье1.