- •Ю. В. Любицкий
- •Предисловие
- •Введение
- •Этапы решения вычислительных задач на ЭВМ
- •Алгоритмизация вычислительных процессов
- •Понятие алгоритма
- •Основные свойства алгоритма
- •Формы представления алгоритмов
- •Представление алгоритмов в графическом виде
- •Типы алгоритмических структур
- •Программирование вычислительных задач на языке VBA
- •Линейная структура
- •Разветвляющаяся структура
- •Циклическая структура
- •Заключение
- •Библиографический список
- •Приложение А – Индивидуальные задания для алгоритмов линейной структуры
- •Приложение Б – Индивидуальные задания для алгоритмов разветвляющейся структуры
- •Приложение В – Индивидуальные задания для алгоритмов циклической структуры
- •Вариант 6
- •Составьте программу для расчёта количества изделий, выпускаемого некоторым предприятием в течение каждого месяца года. Программа должна предусматривать вычисление среднего годового значения количества изделий.
- •Вариант 7
- •Вариант 8
- •Рассчитайте суммарные субсидии на производство 1, 3, 5, 7 млн яиц, а также 600, 900, 1 200, 1 500 тонн молока. Определите, размер субсидий для производства какого вида животноводческой продукции больше.
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Составьте программу для расчёта платы за перевозку экспортных и импортных грузов по железной дороге на расстояние 1 000 км в зависимости от массы груза
- •Составьте программу для расчёта платы за перевозку экспортных и импортных грузов по железной дороге массой 50 тонн в зависимости от расстояния
- •Вариант 19
- •Составьте программу для расчёта платы за перевозку наливных грузов в цистернах общего парка в зависимости от расстояния
- •Вариант 20
- •Вариант 21
- •Вариант 22
- •Вариант 23
- •Вариант 24
- •Вариант 25
- •Вариант 26
- •Вариант 27
- •Вариант 28
- •Вариант 29
18
Разветвляющаяся структура
Создадим процедуру для расчёта стоимости жилищно-коммунальных услуг в г. Хабаровске, исходя из численности семьи и типа дома, в котором она проживает:
|
Стоимость (руб. в месяц) |
||
|
|
|
|
Тип дома |
на одиноко |
на одного члена |
на одного члена |
|
проживающего |
семьи из двух |
семьи из трёх и |
|
гражданина |
человек |
более человек |
Многоквартирный |
1172 |
972 |
955 |
|
|
|
|
Жилой |
351 |
259 |
251 |
|
|
|
|
Поставленная задача предполагает выполнение вычислений по нескольким ветвям в зависимости от типа дома и количественного состава семьи.
Для построения блок-схемы используем следующие обозначения (в программном коде они будут являться именами переменных):
S – стоимость жилищно-коммунальных услуг;
TD – тип дома;
R – количество членов семьи. Блок схема будет иметь вид:
|
|
|
Начало |
|
|
|
|
|
|
Ввод |
|
|
|
|
|
|
TD, R |
|
|
|
|
да |
|
|
нет |
|
|
|
|
|
TD = «Жилой» |
|
|
|
да |
|
нет |
|
да |
нет |
|
|
|
|
|
|
||
|
R = 1 |
|
|
|
R = 1 |
|
|
да |
|
нет |
|
да |
нет |
|
|
R = 2 |
|
|
R = 2 |
|
S = 351 |
S = R |
259 |
S = R 251 |
S = 1172 |
S = R 972 |
S = R 955 |
|
|
|
Вывод S |
|
|
|
|
|
|
Конец |
|
|
|
Рисунок 11 – Блок-схема задачи разветвляющейся структуры
19
Создадим пользовательскую форму для расчёта стоимости жилищнокоммунальных услуг (рисунок 12). Технологии вывода формы на экран, добавления в форму элементов управления, создания процедур обработки событий достаточно подробно рассмотрены в работе [ 7 ].
Рисунок 12 – Проект создаваемой пользовательской формы
Дадим форме имя «Услуги», в заголовке окна формы предусмотрим вывод текста «ЖКХ» (рисунок 12).
Разместим на рабочем листе MS Excel командную кнопку и создадим процедуру, которая будет выполняться при нажатии этой кнопки и загружать форму в оперативную память, а также выводить её на экран [ 7 ]:
Private Sub CommandButton1_Click()
Услуги.Show
End Sub
В форме размещены следующие элементы управления.
Надписи: РАСЧЁТ стоимости жилищно-коммунальных услуг – Label1, Тип дома – Label2, Количество проживающих – Label3.
Поле со списком Тип дома – ComboBox1.
Текстовые поля: Количество проживающих – TextBox1, Стоимость услуг – TextBox2.
Кнопки: Стоимость услуг – CommandButton1, Сброс – CommandButton2, Закрыть – CommandButton3.
20
Поле со списком Тип дома и текстовое поле Количество проживающих
будут использоваться для ввода исходных данных для решения задачи, текстовое поле Стоимость услуг – для отображения полученного результата.
Для формирования значений данных в поле со списком Тип дома («Многоквартирный» и «Жилой») создадим процедуру Initialize (инициализация), которая будет выполняться автоматически перед выводом пользовательской формы на экран [ 7 ]:
Private Sub UserForm_Initialize()
ComboBox1.AddItem "Многоквартирный"
ComboBox1.AddItem "Жилой"
End Sub
Удаление из полей формы введённых в них ранее значений данных организуем с помощью нажатия кнопки Сброс. Для этого создадим процедуру, которая будет выполняться в результате этого действия [ 7 ]:
Private Sub CommandButton2_Click()
ComboBox1.Value = ""
TextBox1.Value = ""
TextBox2.Value = ""
End Sub
Закрытие формы и её удаление из оперативной памяти будут осуществляться при нажатии кнопки Закрыть. Выполняемая при этом процедура имеет следующий вид [ 7 ]:
Private Sub CommandButton3_Click()
Unload Услуги
End Sub
Рассмотренные действия и созданные с их помощью процедуры предназначены лишь для организации работы с формой и ввода через неё исходных данных для дальнейших вычислений. Расчёт стоимости жилищно-коммунальных услуг будет производиться при нажатии кнопки Стоимость услуг.
21
Составим программный код, который будет выполняться при обработке данного события.
Так как в рамках поставленной задачи вычислительный процесс может реализовываться по различным ветвям в зависимости от выполнения некоторых условий, программный код должен включать условные операторы.
Наиболее часто используется конструкция, имеющая следующий синтаксис (здесь и далее в квадратных скобках указаны необязательные элементы):
If условие 1 Then операторы 1
[ ElseIf условие 2 Then
операторы 2
ElseIf условие n Then
операторы n
Else
операторы k ]
End If
Данная конструкция может применяться для решения любых сложных задач, например, когда в условиях используются значения различных переменных.
Вначале проверяется «условие 1». Если оно выполняется (результат равен логическому значению ИСТИНА), выполняется первый блок операторов («операторы 1»), затем управление передаётся оператору программного кода, следующему за End If. Если «условие 1» не выполняется (результат равен логическому значению ЛОЖЬ), последовательно проверяются условия после ключевых слов ElseIf. Если некоторое из них выполняется, реализуется соответствующий блок операторов после ключевого слова Then, и управление передаётся оператору, следующему за End If. В ситуациях, когда ни одно из условий от 1 до n не выполняется, исполняется блок операторов после ключевого слова Else («операторы k»).
Блоки, следующие после ключевых слов ElseIf и Else, не являются обязательными. Любые блоки могут содержать вложенные условные операторы.
22
Условный оператор можно представить и в виде одной строки:
If условие Then операторы 1 [ Else операторы 2 ]
Если «условие» выполняется, реализуются «операторы 1», если нет – «операторы 2».
Процедура для решения поставленной задачи может иметь следующий вид:
Private Sub CommandButton1_Click() |
|
|
Dim S As Long, TD As String, R As Integer |
'Объявление типов переменных |
|
TD = ComboBox1.Text |
|
'Ввод сведений о типе дома |
R = TextBox1.Text |
'Ввод данных о количестве проживающих |
|
If TD = "Жилой" Then |
|
|
If R = 1 Then |
|
|
S = 351 |
|
|
ElseIf R = 2 Then |
|
|
S = R * 259 |
|
|
Else |
|
|
S = R * 251 |
|
|
End If |
|
|
Else |
|
|
If R = 1 Then |
|
|
S = 1172 |
|
|
ElseIf R = 2 Then |
|
|
S = R * 972 |
|
|
Else |
|
|
S = R * 955 |
|
|
End If |
|
|
End If |
|
|
TextBox2.Text = S |
'Вывод полученного результата |
|
End Sub |
|
|
23
Альтернативой рассмотренной конструкции является конструкция Select Case, имеющая следующий синтаксис:
Select Case проверяемая характеристика Case условие 1
операторы 1 [ Case условие 2
операторы 2
Case условие n операторы n
Case Else
операторы k ]
End Select
Эту конструкцию удобно применять в ситуациях, когда для организации ветвления вычислительного процесса в разных условиях проверки используется одна и та же характеристика.
Проверяемая характеристика может быть числовым или строковым выражением, переменной, константой. Её значение последовательно сравнивается с условиями 1, 2, n. Если некоторое условие выполняется, исполняются операторы блока, расположенного за этим условием, затем управление передаётся на оператор программного кода, следующий за End Select. Если ни одно из условий не выполняется, реализуются операторы после ключевых слов Case Else (операторы k).
Условия могут быть заданы различными способами:
в виде константы или выражения (условие выполняется, если значение проверяемой характеристики равно используемой константе или результату вычислений по заданному выражению);
с помощью операции сравнения, перед которой указывается ключевое слово Is (например, Is < 100);
в виде диапазона значений (указываются границы диапазона, разделённые ключевым словом To, например, 50 To 100).
24
Изменим программный код созданной ранее процедуры. Ветвление вычислительного процесса, учитывающее количественный состав семьи, оформим с помощью конструкции Select Case:
Private Sub CommandButton1_Click() |
|
|
Dim S As Long, TD As String, R As Integer |
'Объявление типов переменных |
|
TD = ComboBox1.Text |
|
'Ввод сведений о типе дома |
R = TextBox1.Text |
'Ввод данных о количестве проживающих |
|
If TD = "Жилой" Then |
|
|
Select Case R |
|
|
Case 1 |
|
|
S = 351 |
|
|
Case 2 |
|
|
S = R * 259 |
|
|
Case Else |
|
|
S = R * 251 |
|
|
End Select |
|
|
Else |
|
|
Select Case R |
|
|
Case 1 |
|
|
S = 1172 |
|
|
Case 2 |
|
|
S = R * 972 |
|
|
Case Else |
|
|
S = R * 955 |
|
|
End Select |
|
|
End If |
|
|
TextBox2.Text = S |
|
'Вывод полученного результата |
End Sub |
|
|