Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Ж. Составление документации на программу




Е. Счет, обработка и анализ результатов вычислений.

Сущность этапа: проведение необходимых объемов вычислений по разработанной программе, сопоставление полученных результатов с логическими закономерностями реального процесса или явления.

Документирование не должно начинаться тогда, когда разработка программы закончена. Оно должно выполняться одновременно с разработкой программы, начиная с этапа постановки задачи. Независимо от того, насколько хороша программа, она будет работать только в том случае, если для ее использования имеются надлежащие инструкции.

Составление и оформление программной документации ведётся параллельно с разработкой и отладкой программ и является весьма ответственной частью работы по разработке программного изделия. Разработка и оформление программной документации осуществляются в соответствии с правилами, устанавливаемыми комплексом государственных стандартов, получивших общее название Единая система программной документации (ЕСПД). Состав и назначение ЕСПД устанавливается ГОСТ 19.001-77. Виды и содержание программных документов устанавливаются ГОСТ 19.101-77.

Документация на программу должна содержать:

1. Наименование задачи и ее назначение.

2. Автор и дата разработки.

3. Математическое описание задачи и обоснование выбора численного метода решения.

4. Блок-схема алгоритма.

5. Таблица идентификаторов и текст программы на языке программирования с необходимыми комментариями.

6. Контрольный вариант для проверки работоспособности программы. Исходные данные и результаты.

7. Общие сведения о программе: используемые подпрограммы, язык, время выполнения, требуемый объем памяти, место хранения и способ обращения к ней.

8. Литература.

 

3.2. Программирование по принципу сверху вниз

Когда поставленная задача требует составления сложной программы, обычно человеку не удается сразу представить себе детальный вид этой программы в ее эффективной реализации, так как для этого пришлось бы удерживать в голове большой объем информации.

Сделать объем осмысливаемой информации посильным позволяет метод программирования сверху вниз, который основывается на том, что задача разбивается на несколько более простых частей, и при дальнейшей детализации мы думаем о каждой части отдельно. Части задачи выделяются таким образом, чтобы их можно было программировать более или менее независимо. При этом составляется план решения задачи, пунктами которого являются выделенные части. Затем аналогично проводится детализация выделенных частей. В принципе допускается любое количество таких уровней детализации, которые вводятся до тех пор, пока не станет полностью ясно, как программировать все выделенные части задачи в виде отдельных фрагментов алгоритма.

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

Пусть требуется написать процедуру, вычисляющую k-е гармоническое число h(k)=1+1/2+...+1/k в виде несократимой дроби числитель/знаменатель. Первый набросок процедуры может быть таким:

1. Procedure Harm (k: integer; var num, denum: integer);

2. Объявления переменных и других объектов

3. Begin

4. Положить h(0)=0

5. For n: =1 to k do

6. Begin

7. h(n):=h(n-1)+1/n

8. Вычислить НОД дроби и сократить ее

9. end

10. end;

 

Строки 2,4,7 и 8 написаны на естественном языке, остальные - на формальном языке (Паскале).

В этом наброске выделен заголовок процедуры, указаны ее параметры и намечены основные фрагменты будущей программы: задание начального гармонического числа h(0) и цикла для вычисления h(k).

В цикле указана рекуррентная формула для h(k) и сокращение дроби на наибольший общий делитель.

Напишем вторую итерацию программы, детализируя указанные строки. Фраза "Положить h(0)=0" уточняется операторами num:=0; denum:=1; а строка 7 - операторами num:=n*num+denum; denum:=n*denum. Здесь num - числитель, а denum - знаменатель очередной дроби h(n). Вычисление НОД числителя и знаменателя удобно оформить в виде функции NOD(a,b); тогда фраза 8 будет детализирована операторами: d:=NOD(num,denum); num:=num div d; denum:=denum div d. В результате этих уточнений вторая итерация процедуры примет вид:

1. Procedure Harm (k: integer; var num, denum: integer);

2. Объявления переменных и других объектов

3. Begin

4. Положить h(0)=0

4.1. num:=0; denum:=1;

5. For n: =1 to k do

6. Begin

7. h(n): =h(n-1)+1/n

7.1. num: =n*num+denum; denum: =n*denum;

8. Вычислить НОД дроби и сократить ее

8.1. d: =NOD (num, denum); num: =num div d;

denum:=denum div d

9. end

10. end;

 

Теперь осталось вставить в программу описания переменных n,d и функции NOD, чтобы получить окончательную версию программы.

 

Program Ex1;

Var k,num,denum,n,d:integer;

{Вычислить НОД дроби и сократить ее}

Function NOD(a,b:integer):integer;

Begin

If b=0 then NOD: =a else NOD: =NOD (b, a mod b)

End;

 

Begin

Read (k);

{Положить h(0)=0}

num: =0; denum:=1; For n:=1 to k do

begin

{h(n): =h(n-1)+1/n} num:=n*num+denum; denum:=n*denum;

d:=NOD(num, denum); num:=num div d; denum:=denum div d

end;

write(num,'/', denum)

End.

 

Обозревая составленную таким способом программу, мы можем при желании отвлечься от подробностей ее окончательного вида и перейти к рассмотрению того промежуточного уровня ее описания, на котором уже присутствуют интересующие нас детали, но еще нет более частных деталей, которые при данном рассмотрении для нас несущественны.

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

Метод разработки программ, продемонстрированный нами на очень простой задаче, оказывается особенно полезным при разработке больших программ, когда на ранних стадиях проектирования можно вести отладку всей задачи и даже предъявлять ее к опытной эксплуатации.

Пусть большая программа М вызывает модули А и В, а те, в свою очередь - C,D и E,F, как показано на рисунке 3.1:

 

 
 

 

 


Рис. 3.1 Структура вызовов модулей программой М методом снизу вверх

 

Рассмотрим теперь, как происходит отладка программы М методом сверху вниз. Программа М пишется первой, чтобы отладить ее, нужны программы А и В, но их нет. Тогда вместо этих программ создаются так называемые заглушки, представляющие собой очень простую версию будущей программы. Пусть, например, модуль А вычисляет значения интеграла от функции f(x) на [a,b], причем функция может быть задана аналитически или таблично, а границы отрезка определяются модулями C и D. Если f(x) задана аналитически, то модуль А переводит ее в специальное представление и вычисляет требуемые значения. Если же f(x) задана таблично, то модуль А находит значения функции некоторым специальным методом. Как видим модуль А делает достаточно сложную работу. Однако заглушка для А может быть очень простой: для любых f(x), a и b она всегда выдает одно и то же число, т.е. имеет вид:

Function ModA(a,b:real; var f:text):real;

Begin ModA:=3 end;

Имея заглушки для А и В, можно отладить всю программу М: проверить ее логику, ввод, вывод и другие детали. Если обозначить через * заглушку, то программу М в этом варианте можно записать как М(*,*).

Итак, можно предложить, к примеру, следующую схему разработки и отладки программы М:

1) М(*,*)

2) М(А(*,*),*)

3) М(А(*,*),В(*,*))

4) М(А(С,*),В(*,*))

5) М(А(С,D),В(*,*))

6) М(А(С,D),В(E,*))

7) М(А(С,D),В(E,F))

Когда добавляется очередной модуль, он проверяется путем выполнения всей программы в том виде, в каком она существует в данный момент. При этом преследуется двоякая цель: проверить подсоединяемый модуль и проконтролировать правильность его взаимодействия с уже созданной частью программы.

Преимущество разработки и отладки сложной программы методом сверху вниз очевидно: программа довольно быстро начинает работать, хотя многие ее модули еще не написаны. Накладные расходы метода в виде заглушек в большинстве случаев вполне приемлемы и окупаются быстрым запуском программы в эксплуатацию.

Остановимся на некоторых характеристиках программы, таких как степень комментированности и сложность.

Степень комментированности вычисляется как отношение числа символов в комментариях к общему числу символов в программе. Хорошим стилем считается комментированность в пределах 10-20%. Сложность программы равна числу условий плюс 1. Под условием понимается любая проверка в программе, приводящая к ветвлению вычислительного процесса. Сюда попадают выбирающие операторы, циклы и оператор перехода goto. Если сложность ниже 10 единиц, то получившаяся программа считается приемлемой. В противном случае ее рекомендуется перепроектировать, чтобы сложности составляющих ее процедур, функций и операторной части были по отдельности меньше 10 единиц. Как показывают специально проведенные исследования, программы с большей сложностью гораздо труднее понимать и отлаживать. (Для процедуры Harm комментированность составляет 27,4%, а сложность составляет 3 единицы).

 

3.3. Программирование по принципу снизу вверх

 

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

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

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

1) создать C, D;

2) A(C,D);

3) создать E,F;

4) B(E,F);

5) M(A(C,D),B(E,F)).

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

Программирование снизу вверх оказывается особенно эффективным, если имеется готовый набор фрагментов алгоритмов, оформленных в виде процедур Паскаля. Тогда мы можем выбрать из этого набора те процедуры, которые пригодятся для выполнения отдельных этапов требуемого вычисления. Затем из этих процедур мы конструируем более крупные фрагменты, нацеленные на частичное решение поставленной задачи, реализуем эти фрагменты и, постепенно наращивая и уточняя получаемые конструкции, пытаемся прийти в конце концов к решению нашей задачи.

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

 

3.4. Принципы структурированного программирования

 

Выбирающие операторы, оператор цикла и оператор процедуры позволяют организовать паскалевскими средствами без использования операторов перехода выбор, повторение и обращение к функции. Однако такая стандартизация структур управления последовательностью счета служит в структурированном программировании и средством для достижения гораздо более важной цели: писать удобочитаемые программы.

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

Структурированное программирование основывается на принципе разработки программы сверху вниз с постепенной детализацией.

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

1) последовательным перечислением нескольких более мелких действий;

2) выбором одного из нескольких более мелких действий в зависимости от определенных условий;

3) циклическим повторением более мелкого действия при определенных значениях параметров;

4) использованием более мелкого действия как процедуры или подпрограммы.

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

 

Вопросы для самоконтроля

1. В чём заключается первый этап проектирования постановки и формулировки задачи.

2. Что включает в себя этап математического описания задачи.

3. Что такое математическая модель?

4. Какие типы алгоритмов вы знаете?

5. Назовите известные вам формы представления алгоритма?

6. В чем заключается принцип программирования «снизу вверх»?

7. В чем заключается принцип программирования «сверху вниз»?

 


ГЛАВА 4




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 697; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.043 сек.