- •5. Проектирование разветвляющихся вычислительных процессов
- •5.1. Условный оператор
- •5.2. Проектирование приложения, реализующего разветвляющийся вычислительный процесс
- •Используемые переменные
- •5.2.5. Интерфейс с пользователем
- •5.2.6. Код программы
- •5.2.7. Реализация проекта
- •5.2.8. Анализ проекта
- •5.2.9. Выполнение программы и анализ полученных результатов
- •5.4. Пример использования оператора выбора
- •6. Проектирование приложений с циклами
- •6.1. Назначение операторов цикла
- •6.2. Условные циклы
- •6.3. Проектирование приложения на базе условного цикла с верхним окончанием
- •Используемые переменные
- •6.3.5. Интерфейс с пользователем
- •6.3.6. Код программы
- •6.3.7. Анализ проекта
- •6.3.8. Выполнение программы и анализ полученных результатов
- •6.4. Проектирование приложения с использованием условного цикла с нижним окончанием
- •Используемые переменные
- •6.4.5. Интерфейс с пользователем
- •6.4.6. Код программы
- •6.4.7. Анализ проекта
- •6.4.8. Выполнение программы и анализ полученных результатов
- •Планируемые расходы на ремонт офиса
- •6.5. Цикл со счетчиком
- •6.6. Проектирование приложения с использованием цикла со счетчиком
- •6.6.7. Реализация проекта
- •6.6.8. Анализ проекта
- •6.6.9. Выполнение программы и анализ полученных результатов
- •Остаток товаров на 17.09.01
- •7. Массивы данных
- •7.1. Общие сведения о сложных типах
- •Стоимость товаров
- •7.2. Описание и обращение к массивам
- •7.3. Динамические массивы
- •7.4. Использование массивов при решении экономической задачи
- •Используемые данные
- •7.4.5. Интерфейс с пользователем
- •7.4.6. Код программы
- •7.4.7. Реализация проекта
- •7.4.8. Анализ проекта
- •7.4.9. Выполнение программы и анализ полученных результатов
- •Прайс-лист
- •8. Массивы элементов управления
- •8.1. Назначение и создание массивов элементов управления
- •"Группа переключателей"
- •8.2.4. Структура данных
- •Используемые данные
- •8.2.5. Интерфейс с пользователем
- •8.2.6. Код программы
- •8.2.7. Реализация проекта
- •8.2.8. Анализ проекта
- •8.2.9. Выполнение программы и анализ полученных результатов
- •9. Пользовательский тип данных
- •9.1. Определение и обращение
- •9.2. Оператор присоединения With
- •10. Файлы
- •10.1. Назначение файлов
- •10.2. Операции с файлами
- •10.3. Режимы доступа
- •10.4. Файлы с произвольным доступом
- •10.5. Проектирование приложения с файлами
- •10.5.1. Постановка задачи
- •10.5.2. Экономико-математическая модель
- •10.5.3. Алгоритм решения задачи
- •10.5.4. Структура данных
- •10.5.5. Интерфейс с пользователем
- •10.5.6. Код проекта
- •10.5.7. Реализация проекта
- •10.5.8. Анализ проекта
- •9.5.9. Выполнение программы и анализ полученных результатов
- •Данные по заказу на крепежные изделия
- •11. Процедуры и функции
- •11.1. Назначение процедур и их виды
- •11.2. Описание процедур
- •11.3 Вызов процедуры
- •11.4. Функции
- •11.5. Использование процедур и функций при решении экономической задачи
- •11.5.1. Код проекта
- •11.5.2. Реализация проекта
11.5. Использование процедур и функций при решении экономической задачи
Рассмотрим использование аппарата процедур и функций на примере задачи о поиске изделия с максимальной потребностью в стали, которая рассматривалась в п. 10.5.
Приложение, которое разрабатывается в данном примере, полностью совпадает с предыдущим по постановке задачи, экономико-математической модели, алгоритму решения, структуре данных и интерфейсу с пользователем. В отличие от него этап "Максимальная потребность" разбивается на следующие два подэтапа:
Поиск изделия с максимальной потребностью в стали
Вывод информации о найденном изделии
Каждый подэтап оформляется в виде процедуры (Поиск и ВыводМах).
11.5.1. Код проекта
Информационно подэтапы связаны следующим образом: найденная на первом подэтапе величина максимальной потребности и номер записи соответствующего изделия, передаются на второй подэтап для вывода информации. Эти две величины представлены в коде как параметры процедур. Причем для процедуры Поиск они будут выходными (в них помещается результат работы процедуры), а для процедуры ВыводМах – входными (их значения используются для работы процедуры).
При описании процедур формальные параметры указываются с их типами:
Поиск(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