Программирование в среде Visual Basic for Applications (1082430), страница 14
Текст из файла (страница 14)
14.1. Модель управления запасами 108 Программирование в среде Ияиа! Вал с1от А рр!гса((оля вычисляющая вероятность события. Эту формулу протаскиваем за маркер заполнения на диапазон Е9:29. Стоимость продукции вводится в ячейки Пб (Продажа), Еб (Покупка) и Еб (Возврат) из диалоговых окон ввода 1рис. 14.2) с помощью процедуры Са1с, назначенной кнопке Я1аг$. Кроме того, процедура Я1агт выводит найденные значения максимальной прибыли и оптимального объема закупки газет в диалоговое окно, представленное на рис.
14.2. ВиЬ Са1с() Рйт т, ч Ая ОоиЬ1е Каппе("Продажа" ).Ча1пе 1протвох("Введите стоимость продажи") Каппе("Покупка" ).Ча1ие 1прпт Вох("Введите стоимость покупки") КапЧе (" Возврат" ) .Ча1ие = 1прчтВох("Введите стоимость возврата") т = Каппе("Максимальная прибыль" ) .Ча1пе ч = Капуе("Оптимальный объем").Ча1ие т = Космат(т, "().()()") МяоВох "Максимальная прибыль: " й й СЬт(13) й "Оптимальный объем: " й ч, чЬ1птотпаттоп, "Расчет прибыли" Епд БчЬ В ячейках И2:316 1см.
рис. 14.1) с помощью функции пользователя Прибыль, которая будет описана ниже, вычисляются финансовые исходы при всевозможных вариантах событий покупки журналов и их реализации. Ортйоп Вазе 1 Рипст1оп Прибыль (покуп Ая Чатйапт) Ая Чат1апт о1т икона, 1, 1, цпрод, цпок Р1м Цсдач Ая 1птеоет, Кея() Ая 1птеЧет Ивоне = покуп.Кока.сопля Цпрод = Калде("Продажа" ).Ча1ее цпок = Каппе("Покупка" ).ча1че Подач = Калде("Возврат" ).Ча1пе Кеоьт Кея (Итоне, НКоыя) Рот 1 = 1 то ИКоыя Рот З = 1 То ИКохя 1г ь <= 1 тпеп кея(1, 1) = покуп(1) " (Ппрод — Ппок) 1 1 1 > З ТЬеп Кея (1, 1) = покуп(]) * 14. Модель управления запасами (Цпрод — Цпок) †(покуп (1) — покуп (З)) * [цпок — подач) алехе алехе 1 Прибыль = Нев Епд Гппсовоп 109 Рнс.
14.2. Диалоговые окна модели управления запасами В ячейках ЫЗ:1.17 с помощью формулы (1=МУМНОЖ (Г12 гн16; ТРАНСП (Р9 гц9) ) ) находим ожидаемую прибыль, соответствующую различным вариантам покупки журналов. Напомним, что при выполнении операции над массивами для подтверждения ввода формулы необходимо нажать комбинацию клавиш С(г1+Б))1((+Еп(ег. 110 Программирование в среде ~Ъиа( Вае(с1ог Арр((са?(она В ячейке 117 (Максимальиаи прибыль) с помощью формулы =НАИБОЛЬШИЙ(1,13:1.17;1) вычисляем максимальную прибыль.
Ее также можно найти, воспользовавшись функцией МАКС, находящей максимальный элемент из списка ьМАКС (1 13:? 17) В ячейке 118 по формуле =(ПОИСКПОЗ(НАИБОЛЬШИЙ(Ь13сп17?1)?Ь13: Ь17;0)-1)*5 вычисляем соответствующий оптимальный объем покупок газет. Затем процедура Са!с выводит эти оптимальные значения в окне сообщений. Функция НАИБОЛЬШИЙ (ЬАКСЕ) возвращает ?с-е наибольшее значение из множества данных. Эта функция используется, чтобы выбрать значение по его относительному местоположению. Например, функцию НАИБОЛЬШИЙ можно использовать, чтобы определить наилучший, второй или третий результат в баллах, показанный при тестировании.
Приведем синтаксис использованной выше функции НАИБОЛЬШИЙ. Синтаксис: НАИБОЛЬШИЙ(массив? К) где ° массив — это массив или диапазон, для которых определяется )с-е наибольшее значение; ° к — это позиция (начиная с наибольшей) в массиве или в диапазоне. Функция Еогша1 осуществляет форматирование значения вычисляемого выражения по указанному формату. Синтаксис: рос?нас (выражение, формат) где ° выражение — любое допустимое в УВА выражение; 14. Модель управления запасами ° формат — любое допустимое или определенное пользователем значение формата; примером встроенного числового формата является Ихей, резервирующий две цифры после десятичной точки и как минимум одну — до нее.
При построении пользовательского числового формата можно употреблять следующие символы: Символ «О» резервирует позицию цифрового разряда. Отображает цифру или нуль. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, в которой в строке формата находится «О», то функция отображает именно эту цифру аргумента, если нет — в этой позиции отображается нуль. Символ «$» резервирует позицию цифрового разряда. Отображает цифру или ничего не отображает. Если у числа, представленного аргументом, есть какая-нибудь цифра в той позиции разряда, в которой в строке формата находится «$», функция отображает эту цифру аргумента, если нет — в этой позиции не отображается ничего.
Действие этого символа аналогично действию «О», за исключением того, что нули в начале и конце числа не отображаются. Символ «. » резервирует позицию десятичного разделителя. Указание точки в строке формата определяет, сколько разрядов необходимо отображать слева и справа от десятичной точки. Символ «Ъ» резервирует процентное отображение числа. Символ «, » — разделитель разряда сотен от разряда тысяч. ° Символ «: » — разделитель часов, минут и секунд в категории форматов Время. ° Символ «/» — разделитель дня, месяца и года в категории форматов Дата. ° Символы «К+, ь,-, е+, е-» — разделители мантиссы и порядка в экспоненциальном формате.
Программирование в среде !//виа/ Вав/сГот Арр//саг/онв В процедуре Са!с функция гогпза1 (геяц!1, «№. №№») осуществляет форматирование значения, записанного в переменную геяп!Ь Ее можно было бы записать с использованием встроенного формата следующим образом: г'огпза1 (геяцИ, «и'!ха»). Под дробную часть этого значения отводится две позиции и не менее одной позиции под его целую часть.
Другие встроенные форматы приведены в табл. 14.1. Таблица 14.1. Встроенные форматы Формагн Сепега! ХшпЬег Сштепсу Бгапдагд Регсеп! Бс!епг!Вс Уев/Хо Тгие/Еа!зе Оп/Ой' Сепега! !за!е 1.опя Оа!е Мед!шп Оа!е ЗЬог! Оаге 1.опя Типе Мед!шп Типе эЬог! Типе Описание Отображает число как оно есть Денежный формат с двумя цифрами после деся- тичной точки Отображает число с разделителем тысяч и двумя цифрами после десятичной точки Отображает число в формате процентов с двумя цифрами после десятичной точки Отображает число в стандартном экспоненциаль- ном формате Отображает Хо, если О, и Уез, если 1 Отображает Еа1зе, если О, и Тгие, если 1 Отображает О!Т, если О, и Оп, если 1 Отображает дату или время Отображает дату в длинном формате согласно системным установкам Отображает дату в среднем формате согласно системным установкам Отображает дату в коротком формате согласно системным установкам Отображает время в длинном формате согласно системным установкам Отображает время в среднем формате согласно системным установкам Отображает время в коротком формате согласно системным установкам !4.
Модель уиравлеиия запасами Отметим, что задачу о продаже журналов можно решить, не создавая массив финансовых исходов при всех возможных вариантах событий покупки журналов и их реализации, при помощи следующей программы. орвьоп Вазе() ЯиЬ Яа1е () 01з пк, пр, вз Ав ОоиЬ1е пьи рг(4), ЯЯ(4) Ав ЭоиЬ1е 01и 1, 3, и Ав тпгедет Птв вь, в2 Ав РоиЬ1е п=4 пр=капде (" продажа" ) .Ча1ие пк=капче ("покупка") .Ча1ие Вз=капче("возврат" ) .Ча1ие Рот 3=0 То п Рог 1=0 То рт (1) =Се11в (9, 1 + б ) . Ча1ие нехг 1 в1=0 Рог 1 = 0 То в 1=в 1+5* (1* (пр-пк) — (3-1) * (пк-вз) ) *рт (1) нехт 1 в2=0 Рот 1=3+1 То п в2=в2+5*3* (пр — пк) *рт (1) брехт 1 ЯЯ(3)=в1 + в2 Се11в(3 + 22, 14).Ча1ие = 5 * Се11в(б + 22, 15).Ча1ие = ЯЯ(3) нехг Рот 3=0 То п тт Се11в(3 + 22, 15).Ча1ие= Арр11оатьоп.Мах (капуе(се11в(22, 15), Се11в(п + 22, 15))) ТЬеп Се11в(3 + 22, 15) .Ропп.со1ог1пдех = 3 СЕ11В (3 + 22, 14) .РОПГ . СО1ОГ1идЕХ = 3 Епс) тт нехт Епд ЯиЬ Программа Яа1е определяет оптимальный объем продаж и максимальную ожидаемую прибыль, выделяя их красным цветом.
114 Программирование в среде ~Ъиа( Вав(стог Аррйсанопв Приведем еще один пример процедуры построения матрицы Я2)). Рассмотрим задачу построения матрицы б размерности п,хп, с '((), ~ <~, с,(о) = с() - 7) + Сз((), > 1, где и, = 7; С = (4, 3,2, 1,4, 3, 2). На листе модуля напишем следующую функцию пользователя: ОрСТоп Ваве 1 Оре1оп Ехр11с1С Еппсоьоп О(С Ав Чах1апе) Ае Чах1апо Овт Н, 1, З Ав 1поедех, К() Ав 1пеедес И = С.
СО1шппа. Соопс Кенте К(Н, Н) Еох 1=1 То и Кос 1=1 То Н 11 1 <= 3 Тпеп К(1, 1) = С(1) 2 1й 1 > З Треп К(1, 1) с(1 — 1) — с(1)"3 нехс э алехе 1 О = К Епо Еппсеьоп Введем в диапазон ячеек А1:С1 компоненты вектора С. Выделим диапазон ячеек АЗ:С9, куда будет записана матрица б. В этот диапазон введем формулу 15. Отладка программы При написании программ часто допускаются ошибки. На некоторые ошибки ЧВА указывает сразу, выдавая сообщение об ошибке синтаксиса.
Такие ошибки легко исправить, так как их местоположение локализовано и указана их причина. Другой тип ошибок возникает при запуске программы. В этом случае появляется диалоговое окно Ошибка макроса с сообщением об ошибке. При нажатии кнопки Справка этого диалогового окна ЧВА предложит возможные причины появления данной ошибки. Нажатие кнопки Перейти активизирует лист модуля в том месте, где допущена ошибка, выделяя ее синим цветом. Щелчок на кнопке Отладка открывает окно Отладка, в котором место ошибки выделено рамкой.
Наиболее коварными являются логические ошибки (когда программа работает, но выдает неверные результаты). В этом случае полезно использовать средства отладки, которые позволяют лучше понять, как в действительности работает программа, проследить за каждым шагом ее работы.