КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Доходы Расходы
Кон Кцикл Кесли Чтение (тов, с, т) Цикл Нач вывод («список товаров») список товаров вывод («товар цена кол-во») товар цена кол-во s:= 0; k = 0 s0 =0 [k = 0] при тов = «» выход k:=k+1 [k= 1,2,...,N] вывод (тов, с, т) { <тов> <с> <m> }* s:= s + с×т sk = sk-1 + ck×mk если k = 1 то при k = 1 тах:= c×m max1 = c1×m1 ТовМах:= тов ToвMaх1 = тов1 uнес c×m > тах то при сk×mk > mах тах:= с×т mахk = сk×mk ТовМах:= тов ТовМахk = товk вывод («сумма=», s) cуммa = <sN> вывод («Максимум») Максимум вывод (ТовМах, тах) <ToвMaxN> <maxN>
Из расмотренных примеров следует, что правильность алгоритмов и программ зависит прежде всего от правильности выбранных методов решения. Составление соответствующих им алгоритмов и программ сводится к решению технических проблем. Можно утверждать, что правильные алгоритмы и программы - это корректная реализация правильных методов решения. Ошибки в выбранных методах решения носят не алгоритмический, а принципиальный характер и их следует искать не с помощью отладки программ на ЭВМ, а исследованием самих методов. Рассмотрим самую популярную экономическую задачу - расчет семейного бюджета в целях анализа достатка семьи. Напомним, что достаток семьи - это остаток от разности доходов и расходов:
достаток = доходы - расходы.
Допустим, что данные о семейном бюджете представлены двумя таблицами: - таблицей доходов и таблицей расходов:
Приведем точную постановку задачи и опишем метод ее решения. Постановка задачиМетод решения Определение достатка семьи. Дано: 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 nam$, 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> <статi> <ri> Расходов = < 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).
Что и требовалось доказать. Следовательно, весь комплекс алгоритмов и программа в целом правильны.
Дата добавления: 2014-11-25; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |