КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Доходы Расходы
Приведем точную постановку задачи и опишем метод ее решения. Постановка задачиМетод решения Определение достатка семьи. Дано: S = Sd - Sr D = (дох1, ..., дох N) - доходы, Sd = сN R = (расх1, ..., расхМ) - расходы, сk = сk-1 + dk где дох = (имя, d), [k = (1...N)] расх = (стат, r). с0 = 0 Треб.: S - достаток семьи. Sr = bM Где: bi = bi-1 + ri S = Sum (d1, …, dN) - Sum (r1, .... rM). [i = (1 ... M)] При: N, M > 0. b0 = 0
Для решения задачи на ЭВМ в качестве представления данных примем два списка операторовdata, а для организации вывода результирующих данных - следующий сценарий. СценарийПредставление данных Подсчет достатка 'doch: ' доходы Доходы семьи:data «папа», 300000 <имяk> <dk> *data «мама», 120000 ... ... data «брат», 200000 Доходов = <Sd>data «», 0 Расходы семьи: <статk> <rk>* rash: ' расходы ... ... data «питание», 200000 Расходов = <Sd>data «одежда», 120000 Достаток = <S>data «транспорт», 60000 data «», 0
Приведем соответствующие этому сценарию и выбранному методу представления данных алгоритмы и программу на Бейсике:
алг «достаток семьи» 'достаток семьи нач 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). Что и требовалось доказать. Следовательно, весь комплекс алгоритмов и программа в целом правильны.
|