Этап. Детализируем операцию определения x. Определение x выполняется последовательным сокращением отрезка [x1, x2]

13423
знака
1
таблица
0
изображений

5 этап. Детализируем операцию определения x. Определение x выполняется последовательным сокращением отрезка [x1, x2].

Определить x:

цикл - пока x2-x1>eps

сократить отрезок [x1, x2]

все - цикл

Все.

6 этап. Детализируем операцию сокращения отрезка [x1, x2]. Интервал определения x сокращаем делением пополам и отбрасываем половину, которая не удовлетворяет условию f(x1)<=y<=f(x2):

Сократить интервал определения x:

xt=(x1+x2)/2

если f(xt)>y

то x2:=xt

иначе x1:=xt

все - если

Все.

Таким образом, за 6 этапов разработан следующий алгоритм:

Программа:

Ввести y, n, eps

x1:=1

цикл - пока f(x1)>y

x1:=x1/2

все - цикл

x2:=1

цикл - пока f(x2)< y

x2:=x2*2

все - цикл

цикл - пока x2-x1>eps

xt:=(x1+x2)/2

если f(xt)>y

то x2:=xt

иначе x1:=xt

все - если

все - цикл

Вывести xt, y

Конец.

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

Плюсы и минусы методик программирования

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

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

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

Другие проблемы структурного программирования

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

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

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

     o      Еще более неправы те, кто стремится "упаковать" максимум информации в одну строку. Другое соглашение относится к именам переменных и называется "венгерской нотацией".

     o      Вы улучшите читабельность, если будете следовать взаимному порядку операторов, описанному в исходной версии языка. Скажем, считается, что в Паскале блок описания констант const должен стоять перед блоком описания типов type. Среда программирования, скорее всего не посчитает ошибкой, если вы поменяете эти разделы местами, но из соображений читабельности лучше этого не делать.

     o      Создавать "говорящие" идентификаторы. Если вы используете только однобуквенные переменные "a", "x", "n", как в простейших версиях Бейсика, или идентификаторы-аббревиатуры "nklm", "prs", как писали на старом Fortranе, ждите неприятностей. Вам придется по крайней мере тащить через весь проект длинные таблицы, объясняющие назначение параметров. Name всегда лучше х, а OldValue - понятнее a.

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

     o      Наконец, по возможности делать подпрограммы небольшими, оптимально - не более одной печатной страницы.

Необходимо снижать трудоемкость тестирования и отладки программы (Стоимость разработки - на 80% состоит из стоимости тестирования и отладки. Поэтому, к сожалению, именно на них и начинают экономить многие нынешние разработчики). Здесь существует только один путь: аккуратней составлять код и тщательнее планировать тестирование. В серьезных компаниях формируют отдельный отдел бета-тестирования, который занимается вылавливанием ошибок - как интерфейсных, так и внутренних.

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

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

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


Информация о работе «Метод пошаговой детализации в программировании»
Раздел: Информатика, программирование
Количество знаков с пробелами: 13423
Количество таблиц: 1
Количество изображений: 0

Похожие работы

Скачать
22592
0
4

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

Скачать
5575
0
4

... Детализация псевдокода Вывести результаты ALENA5 дает  следующее: Вывести наибольший отрицательный элемент массива T12 Вывести наименьший положительный элемент массива T12 5. Выполняем структурное программирование с использованием стандартных приемов: BEGIN CLRSCR; {ochicshaem ekran} Writeln('Vvedite 12 elementov vectora T12: '); for i:=1 to 12 do {organizovivaem cikl po ...

Скачать
231244
5
6

... По теореме 9.3 в силу результатов шагов 3 и 8. (Шаг 10). Имеет место свойство (9.4) по теореме 9.5 в силу результатов шагов 1 и 9. Литература к лекции 9. 9.1. С.А. Абрамов. Элементы программирования. - М.: Наука, 1982. С. 85-94. 9.2. М. Зелковец, А. Шоу, Дж. Гэннон. Принципы разработки программного обеспечения. - М.: Мир, 1982. С. 98-105. Лекция 10. ТЕСТИРОВАНИЕ И ОТЛАДКА ПРОГРАММНОГО ...

Скачать
29193
3
0

... профессором Н. Виртом, язык назван в честь французского математика и по замыслу автора предназначался для обучения программированию. Однако язык получился на столько удачным, что стал одним из основных инструментов прикладных и системных программистов при решении задач вычислительного и информационно-логического характера. В 1979 году был подготовлен проект описания языка – Британский стандарт ...

0 комментариев


Наверх