Использование процедур и функций при решении экономической задачи
Рассмотрим использование аппарата процедур и функций на примере задачи о поиске изделия с максимальной потребностью в стали, которая рассматривалась в п. 10.5.
Приложение, которое разрабатывается в данном примере, полностью совпадает с предыдущим по постановке задачи, экономико-математической модели, алгоритму решения, структуре данных и интерфейсу с пользователем. В отличие от него этап "Максимальная потребность" разбивается на следующие два подэтапа:
1. Поиск изделия с максимальной потребностью в стали
2. Вывод информации о найденном изделии
Каждый подэтап оформляется в виде процедуры (Поиск и ВыводМах).
Код проекта
Информационно подэтапы связаны следующим образом: найденная на первом подэтапе величина максимальной потребности и номер записи соответствующего изделия, передаются на второй подэтап для вывода информации. Эти две величины представлены в коде как параметры процедур. Причем для процедуры Поиск они будут выходными (в них помещается результат работы процедуры), а для процедуры ВыводМах – входными (их значения используются для работы процедуры).
При описании процедур формальные параметры указываются с их типами:
Поиск(sngMaxПотребность As Single, iMax As Integer)
и
ВыводMax(sngMaxПотребность As Single, iMax As Integer)
Код тел этих процедур полностью повторяет код соответствующих фрагментов предыдущего примера за исключением того, что для вычисления потребности в стали на один вид изделия (Норма * Количество) используется функция fncПотребность, формальными параметрами которой являются sngНорма и intКоличество. Результат функции принадлежит к дробному типу (Single), что и указано в заголовке функции. Тело функции в данном примере достаточно простое. Оно состоит из одного оператора присваивания, в левой части которого указано имя функции.
Процедуры Поиск и ВыводМах соответствуют подэтапам этапа «Максимальная потребность». Этот этап реализуется процедурой Максимальная_потребность. Поскольку эта процедура не получает никаких данных от предыдущих этапов, а последующих этапов совсем нет, то она не имеет параметров (после имени в описании поставлены пустые скобки).
Действие процедуры Максимальная_потребность состоит в организации выполнения двух ее подэтапов, что в теле процедуры представлено последовательным вызовом процедур Поиск и ВыводМах. В учебных целях здесь использованы разные формы вызова. При вызове процедур вместо формальных указаны фактические параметры. Они описаны как переменные в вызывающей процедуре Максимальная_потребность. В данном случае они по имени совпадают с формальными, что в общем случае необязательно. Важно совпадение только по типу.
При вызове функции fncПотребность в процедуре Поиск в качестве фактических параметров указаны поля записи udtСведения, что отражено точками перед именами полей.
Процедура Максимальная_потребность вызывается из процедуры cmdМаксимальная_потребность_Click, которая обрабатывает событие "Щелчок на кнопке «cmdМаксимальная_потребность»". Поскольку процедура Максимальная_потребность не имеет параметров, то при ее вызове указывается только имя процедуры.
Таким образом, этап поиска изделия с максимальной потребностью в стали имеет иерархическую структуру управления: процедура обработки события щелчка на кнопке «cmdМаксимальная_потреб-ность_Click» вызывает процедуру общего назначения Максимальная_потребность, а та в свою очередь – процедуры общего назначения Поиск и ВыводМах. Процедура Поиск вызывает функцию fncПотребность. Вызов процедур и функции может быть представлен схемой (рис. 11.1).
Процедура сmdМаксимальная_потребность_Click хранится вместе с формой frmПотребность_в_стали, а процедуры общего назначения Максимальная_потребность, Поиск и ВыводМах, а также функция fncПотребность – в модуле «Общие_описания».
Рис. 11.1. Схема вызова процедур и функций
Вместе с формой frmПотребность_в_стали также хранятся процедуры cmdСоздание_Click и cmdВывод_Click, а вместе с формой frmВид_продукции хранится процедура cmdЗаписать_Click. Эти процедуры полностью совпадают с одноименными процедурами предыдущего проекта и поэтому здесь не приводятся.
Код процедуры сmdМаксимальная_потребность_Click и использующихся в ней процедур общего назначения приведен ниже:
Option Explicit
'Пользовательский тип данных
Public Type Запись
strНаименование As String * 7
sngНорма As Single
intКоличество As Integer
End Type
'Переменная пользовательского типа
Public udtСведения As Запись
'Счетчик записей
Public i As Integer
Public Sub Максимальная_потребность()
Dim sngMaxПотребность As Single
Dim iMax As Integer 'Номер максим. изделия
Call Поиск(sngMaxПотребность, iMax)
ВыводMax sngMaxПотребность, iMax
End Sub
Public Sub Поиск(sngMaxПотребность As Single, iMax As Integer)
'Открытие файла
Open frmПотребность_в_стали.txtИмя_файла _
For Random As #1 Len = Len(udtСведения)
'Чтение первой записи
i = 1
Get #1, i, udtСведения
With udtСведения
'Предположение, что максимум будет у первого изделия
sngMaxПотребность = fncПотребность(.sngНорма, .intКоличество)
iMax = i
'Определение максимума путем сравнения
' потребностей в стали по остальным изделиям
Do
i = i + 1
Get #1, i, udtСведения
If fncПотребность(.sngНорма, .intКоличество) > sngMaxПотребность Then
sngMaxПотребность = fncПотребность(.sngНорма, .intКоличество)
iMax = i
End If
Loop Until EOF(1)
End With
End Sub
Public Sub ВыводMax(sngMaxПотребность As Single, _
iMax As Integer)
'Чтение записи с максим. потребностью
Get #1, iMax, udtСведения
'Вывод пустой формы для информации по максим. потребности
frmМаксимальная_потребность.Show
With udtСведения
'Вывод информации по изделию с максим. потребностью
frmМаксимальная_потребность.Print _
Tab(1), "Наименование:"; Tab(33); .strНаименование, _
Tab(1), "Норма:"; Tab(33); .sngНорма, _
Tab(1), "Количество:"; Tab(33); .intКоличество, _
Tab(1), "Потребность:"; Tab(33); sngMaxПотребность
End With
'Закрытие файла
Close #1
End Sub
Public Function fncПотребность(sngНорма As Single, _
intКоличество As Integer) As Single
fncПотребность = sngНорма * intКоличество
End Function
Реализация проекта
Поскольку проект, не использующий процедур и функций, уже имеется, то достаточно его скопировать и путем редактирования и перемещения фрагментов кода процедуры сmdМаксимальная_потребность_Click, а также небольшой модификации можно получить новый проект.
Анализ проекта
Использование процедур и функций в данном случае позволяет более четко представлять структуру кода, что может быть полезным в дальнейшем, если потребуется изменение или дополнение в его назначении.
Если бы проект создавался не на основе существующего, то использование процедур и функций с самого начала позволило бы упростить отладку проекта, так как найти ошибку и устранить ее проще в небольшом фрагменте кода (процедуре или функции).
Дата добавления: 2020-10-14; просмотров: 346;