Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4928.pdf
Скачиваний:
11
Добавлен:
13.11.2022
Размер:
831 Кб
Скачать

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

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]