Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пособие_по_алгоритмизации_и_программированию

..pdf
Скачиваний:
60
Добавлен:
11.04.2015
Размер:
492.32 Кб
Скачать

11

Вситуациях, когда количество повторений цикла заранее неизвестно, можно воспользоваться циклическими структурами с условиями.

Вструктуре с предусловием условие, контролирующее необходимость про-

должения циклических действий, проверяется перед телом цикла (рисунок 4).

Если «Условие» выполняется, тело цикла повторяется, если нет – управление передаётся на следующий за циклом блок алгоритма (рисунок 4):

Вход

Нет

Условие

Да

Тело цикла

Выход

Рисунок 4 – Блок-схема циклического алгоритма с предусловием

В структуре с постусловием условие, проверяющее, будут ли повторяться циклические действия, размещается после тела цикла (рисунок 5).

Вход

Тело цикла

Да

Нет

 

Условие

Выход

Рисунок 5 – Блок-схема циклического алгоритма с постусловием

Различие между циклическими структурами с условием заключается в том, что в алгоритме с предусловием тело цикла может не выполняться ни разу

(это зависит от результата проверки «Условия»), а в алгоритме с постусловием тело цикла обязательно будет исполнено по крайней мере один раз.

12

Программирование вычислительных задач на языке VBA

Линейная структура

Создадим процедуру для расчёта показателей платежеспособности и финан-

совой устойчивости предприятия.

Денежные средства, расчеты и прочие активы предприятия:

D = R + S ,

( 1 )

где R – расчёты с дебиторами,

S – денежные средства.

Коэффициент срочной ликвидности:

 

 

 

 

S + ( R

R F

)

 

 

 

 

 

 

 

 

 

 

 

K S

=

100

 

 

,

( 2 )

 

 

 

T DK FP

 

 

 

 

 

 

 

где F

резерв по сомнительным долгам,

 

 

T

общая сумма расчётов и прочих пассивов,

 

DK

долгосрочные кредиты,

 

 

 

 

 

 

 

 

FP

фонды потребления.

 

 

 

 

 

 

 

 

Коэффициент текущей ликвидности:

 

 

 

 

KT

=

 

Z + D

,

( 3 )

 

 

 

 

 

 

 

 

 

 

T DK FP

 

 

 

 

 

 

 

где Z

запасы и затраты.

 

 

 

 

 

 

 

 

Математическая постановка задачи предполагает реализацию алгоритма ли-

нейной структуры – все действия выполняются однократно и последовательно друг за другом.

Используем для построения блок-схемы и в качестве имён переменных в программном коде создаваемой процедуры обозначения экономических харак-

теристик, указанные в формулах (1 ) – ( 3 ).

13

Блок-схему решаемой задачи представим в виде:

Начало

Ввод R, S

D = R + S

Вывод D

Ввод F, T, DK, FP

 

 

 

 

 

S + (R

R F

)

 

 

 

 

 

 

KS

=

 

 

100

 

 

 

 

T DK

FP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод K S

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

KT

=

 

 

Z + D

 

 

 

 

 

 

 

 

 

T DK FP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вывод KT

Конец

Рисунок 6 – Блок-схема задачи линейной структуры

Создадим процедуру для выполнения расчётов. Ввод исходных данных и вывод полученных результатов организуем с помощью диалоговых окон [ 3 ].

Программный код процедуры будет иметь следующий вид (комментарии,

указанные после символов апострофа, не являются обязательными и использу-

ются только для пояснения выполняемых действий):

Public Sub Показатели_предприятия() 'Объявление типов переменных

Dim R As Single, S As Single, D As Single

Dim F As Single, T As Single, DK As Single

Dim FP As Single, KS As Single, Z As Single, KT As Single

14

'Ввод исходных данных

R = InputBox("Введите расчёты с дебиторами")

S = InputBox("Введите денежные средства")

'Вычисление денежных средств, расчётов и прочих активов

D = R + S

'Вывод полученного результата

MsgBox ("Денежные средства, расчёты и прочие активы " & _ "для предприятия равны " & D)

'Ввод исходных данных

F = InputBox("Введите резерв по сомнительным долгам")

T = InputBox("Введите общую сумму расчётов и прочих пассивов") DK = InputBox("Введите долгосрочные кредиты")

FP = InputBox("Введите фонды потребления") 'Вычисление коэффициента срочной ликвидности

KS = (S + (R - R * F / 100)) / (T - DK - FP) 'Вывод полученного результата

MsgBox ("Коэффициент срочной ликвидности равен " & KS) 'Ввод исходных данных

Z = InputBox("Введите запасы и затраты") 'Вычисление коэффициента текущей ликвидности

KT = (Z + D) / (T - DK - FP) 'Вывод полученного результата

MsgBox ("Коэффициент текущей ликвидности равен " & KT) End Sub

Выполним расчёт при следующих значениях

исходных данных:

R =

2 350 тыс. руб., S = 5 100 тыс. руб., F = 10 %, T

= 7 200 тыс. руб.,

DK =

750 тыс. руб., FP = 375 тыс. руб., Z = 14 200 тыс. руб.

 

В ходе выполнения программного кода на экране монитора последовательно будут появляться диалоговые окна, в поля которых следует вводить исходные данные для вычислений, или в которых будут отображаться полученные резуль-

таты (некоторые из этих окон изображены на рисунке 7).

15

Рисунок 7 – Диалоговые окна для ввода исходных данных и вывода полученных результатов

С помощью VBA можно создать новую (пользовательскую) функцию MS Excel, которая будет использоваться аналогично стандартным встроенным функ-

циям, таким как СУММ, СРЗНАЧ и др.

Программный код при создании пользовательской функции обязательно должен быть введён в модуле VBA Module1, Module2 и др. Если создать поль-

зовательскую функцию в модулях Лист или ЭтаКнига, она не будет видна при

вводе формул в ячейки рабочего листа.

Создадим пользовательскую функцию MS Excel для расчёта коэффициента

текущей ликвидности.

Предварительно нужно создать модуль (Insert → Module), если он не был

создан заранее, и активизировать его. Затем выполняются действия

Insert → Procedure. В появившемся диалоговом окне вводится имя процедуры,

указывается её тип – Function (процедура-функция), определяется область дей-

ствия функции – Public (рисунок 8):

16

Рисунок 8 – Диалоговое окно для создания процедуры

Ключевое слово Public указывает, что процедура-функция будет доступна для всех других процедур во всех модулях открытых проектов. Если использо-

вать ключевое слово Private, созданная пользовательская функция не будет вид-

на в диалоговом окне Мастер функций при попытках ввести её в формулу.

После нажатия кнопки OK вводим программный код процедуры:

Public Function Текущая_ликвидность(R As Single, S As Single, _

T As Single, DK As Single, FP As Single, Z As Single) As Single Dim D As Single

D = R + S

Текущая_ликвидность = (Z + D) / (T - DK - FP)

End Function

Обратите внимание, что в программном коде процедуры-функции имя про-

цедуры используется в качестве имени переменной, которой будет присваивать-

ся вычисленное в процедуре итоговое значение. После завершения выполнения процедуры-функции она всегда возвращает текущее значение переменной, имя которой совпадает с названием функции.

В круглых скобках после имени процедуры через запятую перечисляются имена переменных (и объявляются их типы), значения которых будут вводиться в диалоговом окне, появляющемся при вызове данной пользовательской функ-

ции, и использоваться при выполнении процедуры в качестве исходных данных для расчёта.

17

Воспользоваться созданной пользовательской функцией можно обычным

способом:

1)выполнить команды Вставка → Функция или нажать кнопку fx в строке формул;

2)в появившемся диалоговом окне Мастер функций выбрать категорию

Определённые пользователем, затем имя нужной функции (рисунок 9);

Рисунок 9 – Диалоговое окно для выбора пользовательской функции

3) в диалоговом окне второго шага Мастера функций ввести значения ар-

гументов функции с клавиатуры или с помощью ссылок на нужные ячейки рабо-

чего листа (рисунок 10).

Рисунок 10 – Диалоговое окно для ввода значений исходных данных

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

Рассмотренные действия и созданные с их помощью процедуры предназна-

чены лишь для организации работы с формой и ввода через неё исходных дан-

ных для дальнейших вычислений. Расчёт стоимости жилищно-коммунальных услуг будет производиться при нажатии кнопки Стоимость услуг.