Do
Сls
Цикл
Нач
Цикл
Нач
Цикл
Нач
T t
Т т
T t
I I
I I
I I
Решение прикладных задач
Данные об учениках фамилия вес рост
Нач
вывод («Данные об учениках») вывод («фамилия вес рост») s: = 0 цикл
чтение fam$, r, v при fam$=«» выход вывод (fam$, v, r) s: = s + v кцикл vsum = s вывод («суммарный вec=»,vsum) кон
{
Результаты выполнения на экране и в памяти ЭВМ
S0 = 0
<famk> <vk> <rk>
sk = sk-1 + vk
[k = (1...n)] vsum = sn
суммарный вес= <vsum>
Сопоставление описания результатов выполнения с описаниями сценария и выбранного метода говорит об их полном соответствии. Следовательно, составленные алгоритм и программа правильные.
Решение задач на ЭВМ является одним из основных источников для создания алгоритмов и программ. Экономические задачи и проблемы обработки данных - один из важнейших классов прикладных задач, решаемых на ЭВМ.
Применение компьютеров для решения экономических задач существенно упрощает работу по подготовке и обработке данных. Одной из причин в использовании ЭВМ для решения этих задач - снижение трудоемкости и уменьшение числа ошибок при обработке данных.
|
|
Для решения многих экономических задач на ЭВМ используются электронные таблицы и специальные пакеты программ. Однако решение любых новых прикладных задач на ЭВМ предполагает необходимость создания новых алгоритмов и программ на основе определенных математических методов решения и обработки данных.
Особое значение правильность алгоритмов имеет для экономических задач, поскольку ошибки в их решении могут дорого стоить. Неправильные экономические расчеты могут нанести материальный ущерб или даже привести к банкротству целую организацию.
Для предотвращения ошибок можно использовать систематические методы конструирования алгоритмов и программ с одновременным анализом их правильности. Последовательное применение этих методов обеспечивает составление прикладных алгоритмов и программ с гарантиями их правильности.
Общий принцип систематического подхода к составлению алгоритмов и программ заключается в последовательной разработке спецификаций: постановок задач, способов и методов их решения, а также сценариев работы в процессе решения задач.
Составление программ
задача -» способы
постановка —> методы
сценарий -» алгоритмы
ЭВМ <— программы
Систематический анализ правильности алгоритмов и программ сводится к сопоставлению этих спецификаций друг с другом: программ - с алгоритмами, алгоритмов - со сценариями и описаниями методов, а методы решения - с постановками задач.
Анализ правильности
задача <- способ
постановка <— методы
сценарий <- алгоритмы
|
|
ЭВМ —> программы
Приведем примеры систематической разработки алгоритмов и программ решения эконо-мических задач на ЭВМ с обоснованием их правильности. Главной особенностью этих задач явля-ется то, что все они относятся к задачам обработки данных.
Первый пример экономической задачи - определение средней зарплаты в организации. До-пустим, что данные о зарплате представлены таблицей:
фамилия Иванов | должность директор | зарплата 300000 |
Петров | менеджер | |
Сидорова | секретарь |
Приведем постановку задачи и описание метода вычисления средней зарплаты.
Метод расчета
Постановка задачи
Определение средней зарплаты.
Дано:
(D1,..., DN) - данные о сотрудниках,
где D = [Fam, Т, Z] - состав данных,
S0 = 0 Sk = Sk-i*(k-l)/k + Zk/k [k=(l...N)] гсредн = SN |
Fam - фамилия, D1 - должность,
{ |
Z - зарплата.
Треб: Zcpeдн - средняя зарплата.
Где: Zcpeдн = (Z1 + Z2 +... + ZN)/N.
При: N > 0.
Прежде всего убедимся, что выбранный метод вычисления правилен. Для этого воспользу-емся индукцией. Рассмотрим результаты вычислений на первых трех шагах. При k = 1 результат
При k = 2 результат При k = 3 результат |
S1=S0(1 - 1)/1 +Z1/1 =Z1/1.
S2 = Si(2 - l)/2 + Z2/2 = Zi/2 + Z2/2.
S3 = S2(3 - 1)/3 + Z3/3 = (Z1 + Z2)/3 + Z3/3. По этим трем результатам можно утверждать, что в общем случае результатом k-го шага вычислений будет
Sk = (Z1 +... + Zk-1)/k. Справедливость этого утверждения можно доказать по индукции. Допустим, что оно спра-ведливо для (k-l)-ro шага:
Sk-1 = (Z1 +... + Zk-1)/(k-l). Тогда из описания метода вычислений очередное k-e значение будет равно
Sk = Sk-1(k-l)/k + Zk/k = = (Z1 +... + Zk-1)/(k-l)⋅(k-l)/k + Zk/k = (Z1 +... + Zk-1)/k + Zk/k. Что и требовалось показать. Следовательно, в силу математической индукции это утвер-ждение справедливо для всех k = 1, 2,..., N. В частности, для последнего шага вычислений при k = N конечным результатом будет
SN = (Z1 +... + ZN-1)/N + ZN/N = (Z1 +... + ZN)/N. Таким образом, выбранный метод дает правильный результат для любой последовательно-сти величин Z1, Z2,..., ZN.
Для конструирования алгоритма и программы решения задачи на ЭВМ примем следующий сценарий, а для представления данных воспользуемся операторами data.
Сценарий
список сотрудников:
{<фам> <должн> <з/плата>}*
{................. }
Представление данных
dan: 'данные сотрудников
data «Иванов»,«директор», 300000
data «Петров»,«менеджер», 240000
средняя з/плата= <Zcpeд> data «Сидорова»,«секретарь», 120000
data «», «», 0
При выбранных сценарии, методе расчета и представлении данных систематическое кон-струирование приводит к следующим алгоритму и программе. |
Алгоритм
алг «средняя зарплата»
вывод («список сотрудников:»)
s:= 0: k:= 0
чтение (fam$, dl$, zpl) при fam$ = «» выход вывод (fam$, dl$, z) k:= k + 1
s:= s*(k - 1)/k + z/k кцикл zsr = s
вывод («средняя 3/nлama=»,zsr) кон
Программа ' средняя зарплата cls? «список сотрудников:» s = 0: k = 0 do
read fam$, dl$, zpl if fam$ = «» then exit do? fam$; dl$; z k = k + 1
s = s*(k - 1)/k + z/k loop zsr = s
? «средняя з/плата=»; zsr end
Для полного обоснования отсутствия ошибок в приведенном алгоритме и программе при-ведем описание результатов их выполнения на ЭВМ. |
Алгоритм
алг «средняя зарплата»
вывод («список сотрудников:»)
s:= 0: k:= 0
чтение (fam$, dl$, z) при fam$ = «» выход вывод (fam$, dl$, z) k:=k + 1
s:= s*(k - 1)/k + z/k кцикл zsr = s
вывод («средняя з/nлama=»,zsr) кон
Результаты выполнения
список сотрудников:
S0 = 0 [ k = 0 ]
<famk> <dlk> <zk> }* Г [ k= (l...N) ] I sk = sk - l- (k - l)/k + zk/k
zsr = sN
<zsr> |
средняя з/плата=
Сравнение результатов выполнения программы с описанием метода вычисления и выбран-ного сценария подтверждает их соответствие друг другу и как следствие правильности выбранно-го метода вычислений - правильность составленных алгоритма и программы расчета средней зар-платы.
В качестве второго примера рассмотрим решение типичной задачи подсчета суммарной стоимости товаров с выделением товаров наибольшей стоимости. Допустим, что исходные данные представлены следующей таблицей:
|
|
товар яблоки | цена 8000 | кол-во 3 |
бананы | ||
арбузы |
Приведем постановку задачи и описание способа ее решения.
Постановка задачиСпособ решения
Определение суммарной
и максимальной стоимости товаров.
Дано:
s0 = 0 от k = 1 до N цикл sk = sk-1 + СkМk если k = 1 то mах1 = С11М11 инеc СkМk > mахk-1 то mахk = СkМk все кцикл |
(Di,..., Dn) - данные о товарах,
где D = [Tov, С, М] - состав данных,
Tov - товар, С - цена товара,
М - количество товара,
Треб:
Sum - суммарная стоимость товаров,
TovMax - товар максимальной
стоимости.
Где:
Sum = С1М1 + С2М2 +... + СNМN,
TovMax: CM = Мах(СiМb...,СNМN).
При: N > 0.
Прежде чем приступить к составлению алгоритмов и программ, убедимся в правильности выбранного способа решения. Для этого проверим результаты на первых шагах, в середине и в конце вычислений. На первом шаге при к = 1 результат
Si = So + С1М1 = С1М1, maxi = СiМi.
На втором шаге вычислений будут получены следующие значения:
S2 = Si + С2М2 = С1М1 + С2М2,
max2 = ГС2М2, при С2М2 > тахЛ = Мах(тахь С2М2), I тахь при С2М2 < maxi J = Мах(тахь С2М2). На третьем и последующих шагах в общем случае будут получаться результаты:
sk = Sk-i + CkMk = CiMi +... + СкМк, maxk = Max(maxk-i, СkМk) = Мах(СiМb..., СкМк). Для доказательства этих утверждений необходимо предположить, что они выполняются для случая к-1:
Sk-i =CiMi +...+ Ck-iMk-i, maxk-i = Max(CiMb...,Ck-iMk-i), и подставить эти выражения в соотношения для Sk и mахk:
sk = Sk-i + CkMk = CiMi +... Ck-iMk-i + СкМк, maxk = Max(maxk-i, СkМk) = Мах(СiМb..., СкМк). В силу математической индукции эти утверждения верны для всех к = 1, 2,..., N. Поэтому на последнем шаге вычислений при к = N будут получены окончательные результаты:
sN = sN-i + CNMN = С1М1 +... + CNMN, maxN = Max(maxN_i, СNМN) = Max(CiMb..., СNМN). Что и требовалось в постановке задачи. Следовательно, выбранный способ решения поставленной задачи правилен и на его основе можно приступать к составлению соответствующих алгоритма и программы.
Для систематичности разработки примем следующий сценарий диалога и представление исходных данных в операторах data.
Сценарий
Представление данных
список товаров товар цена кол-во \<товl> <сl> <т / > 1 *
|
|
сумма = <Sum>
dan: 'сведения о товарах data яблоки, 8000, 3 data бананы, 4000, 2
Максимум data арбузы, 1000, 20
<товар> <стоим> data «», 0, 0
Приведем алгоритм и программу решения поставленной задачи в соответствии с выбран- |
ным сценарием и представлением данных.
Алгоритм
алг «сумма и максимум»
вывод («список товаров»)
вывод («товар цена кол-во»)
s:= 0; k = 0
чтение (тов, с, т) при тов = «» выход k:= k + 1 вывод (тов, с, т) s:=s + cm если k = 1 то max:= c⋅m ToвMax:= тов инес c(m > max то max:= c⋅m ToвMax:= тов кесли кцикл
вывод («cyммa=»,s) вывод («Максимум») вывод (ToвMax, max) кон
Программа
' сумма и максимум
? «список товаров»
? «товар цена кол-во»
s = 0: k = 0
read tv$, с, m if tv$ = «» then exit do k = k + 1? fv$; с; m s= s + c(m if k = 1 then max = c ⋅ m ТМ$ = tv$
elseif c(m > max then max = c ⋅ m TM = tv$ end if loop
? «cyммa=»,s? «Максимум»? TM$, max end
Сравнение результатов выполнения представленных алгоритма и программы с описанием выбранного способа решения показывает их полное соответствие друг другу.
Алгоритм
алг «сумма и максимум» нач
вывод («список товаров») вывод («товар цена кол-во») s:= 0; k = 0 цикл
чтение (тов, с, т) при тов = «» выход k:=k+1
вывод (тов, с, т) s:= s + с⋅т если k = 1 то
тах:= c⋅m
ТовМах:= тов uнес c⋅m > тах то
тах:= с⋅т
ТовМах:= тов кесли кцикл вывод («сумма=», s)
<
Результаты выполнения