Приведем соответствующие этому сценарию и выбранному методу представления данных алгоритмы и программу на Бейсике:
алг «достаток семьи» 'достаток семьи
нач cls
вывод («Подсчет достатка»)? «Подсчет достатка»
вывод («Доходы семьи:»)? «Доходы семьи:»
подсчет_доходов gosub dchs 'доходы
вывод («Доходов=», Sd)? «Доходов=», Sd
вывод («Расходы семьи:»)? «Расходы семьи:»
подсчет_расходов gosub rashs 'расходы
вывод («Расходов =», Sr)? «Расходов=», Sr
S:= Sd - Sr S = Sd - Sr
вывод («Достаток=», S)? «Достаток=», S
кон end
алг «подсчет доходов» dchs: 'подсчет доходов»
нач '
загрузка_доходов restore doch 'доходы
Sd:= 0 Sd = 0
цикл do
чтение (имя, d) read namS, d
при имя = «» вых if nam$ = «» then exit do
вывод (имя, d)? nam$, d
Sd = Sd + d Sd = Sd + d
кцикл loop
кон return
алг «подсчет расходов» rashs ' подсчет расходов
нач '
загрузка_расходов restore rach 'расходы
Sr:= 0 Sr = 0
цикл do
чтение (стат, r) read stat$, r
при стат = «» вых if st$ = «» then exit do
вывод (стат, r)? st$, r
Sr = Sr + r Sr = Sr + r
кцикл loop
кон return
Правильность составленного комплекса алгоритмов и программы расчета достатка семьи можно проверить по описанию результатов их выполнения:
|
|
«достаток семьи»«подсчет доходов»«подсчет расходов»
Подсчет достатка
Доходы семьи: Sd0 = 0 [k = 0] Sr0 = 0 [i = 0]
<подсчет_доходов>
Доходов = <Sd>
Расходы семьи: [k =(1...N)] [i =(1...M)]
<подсчет_расходов> <имяk> <dk> <стат1> <r1>
Расходов = < Sr> Sdk = Sd/k-l/+dk Sri == Sri-1 + ri
{ S = Sd - Sr
Достаток = <S>
Для обоснования правильности всего комплекса алгоритмов и программы в целом необходимо показать правильность каждого из вспомогательных алгоритмов: «подсчет доходов» и «подсчет расходов».
Для первого алгоритма для первых шагов вычисления получаем:
Sd0 = 0,
Sd1 = Sd0 + d1 = d1,
Sd2 = Sd1 + d2 = d1 + d2.
Для последующих шагов можно заключить, что
Sdk = Sdk-1 + dk = d1 + d2 +... + dk-1 + dk.
Это доказывается с помощью математической индукции. В силу этого утверждения окончательным результатом вычислений станет сумма доходов
SdN = d1 + d2 +... + dN-1 + dN.
Следовательно, алгоритм подсчета доходов - правильный.
Для второго алгоритма подсчета расходов получаются аналогичные оценки:
Sr0 = 0,
Sr1 = Sr0 + r1 = r1,
Sr2 = Sr1 + r2 = r1 + r2
и для последующих шагов вычислений:
Sri = Sri-1 + ri = r1 + r2 +... + ri-1+ ri.
Это доказывается также с помощью математической индукции. На основании этого утверждения можно сделать заключение о конечном результате выполнения алгоритма:
SrM = r1 + r2 +... + rM-1+ rM.
Следовательно, алгоритм подсчет расходов правильный. Но в основном алгоритме содержится единственная расчетная формула
S = Sd - Sr.
В силу доказанных утверждений о результатах выполнения алгоритмов «подсчета доходов» и «подсчета расходов» конечным результатом вычислений станет величина
|
|
S = Sd - Sr = (d1 + d2 +... + dN) - (r1 + r2 +... + rM).
Что и требовалось доказать. Следовательно, весь комплекс алгоритмов и программа в целом правильны.