- •Введение
- •1. Общие положения
- •1.1. Понятие алгоритма. Данные в задачах и алгоритмах
- •1.2. Понятие о технологии разработки программ. Принципы и этапы разработки программ
- •1.3. Состав документации по отдельным этапам
- •1. Задача
- •9. Структурные тесты
- •1.4. Нисходящая разработка и нисходящая отладка
- •2. Процесс разработки программы на примере решения типовой задачи
- •2.1. Разработка алгоритма и программы уровня 0 с заглушками
- •2. Входные данные
- •3. Выходные данные
- •5. Функциональные тесты
- •6. Метод
- •7. Алгоритм
- •8. Программа на паскале. Диалоговый вариант
- •9. Структурные тесты
- •2.2. Отладка программы с заглушкой
- •2.3. Общая схема перехода от метода к алгоритму решения
- •2.4. Разработка алгоритма и программы для примера
- •2. Входные данные
- •5. Функциональные тесты
- •6. Метод
- •7. Алгоритм
- •8. Программа на паскале
- •9. Структурные тесты
- •2.5. Отладка полной программы
- •2.6. Список заданий
- •3. Организация хранения данных с позиций эффективности отладки и использования программы
- •3.1. Как лучше хранить, вводить и выводить данные
- •3.2. Использование текстовых файлов для хранения входных и выходных данных
- •3.3. Использование параметров в Паскаль-программах
- •3.4. Задание
- •4. Некоторые методы решения типовых задач
- •4.1. Поиск экстремальных значений (максимума, минимума) в одномерном массиве
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.2. Поиск элемента, удовлетворяющего заданному условию
- •2. Входные данные
- •6. Метод
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.3. Задача со сложной логикой
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.4. Упорядочение одномерного массива
- •3. Выходные данные
- •6_А. Метод включения
- •6_Б. Метод пузырька
- •4.5. Список заданий
- •5. Работа с двумерными массивами (матрицами)
- •5.1. Схема обработки матриц
- •5.2. Ввод и вывод матрицы
- •5.3. Пример решения задачи
- •3. Выходные данные
- •6. Метод
- •5.4. Список заданий
- •6. Оформление алгоритмов в виде процедур
- •6.1. Основные положения
- •6.2. Кодирование процедур на языке Паскаль
- •6.3. Специфика оформления процедур ввода – вывода
- •6.4. Рекомендации по оформлению процедур
- •6.5. Примеры разработки процедур
- •3. Выходные данные
- •6. Метод
- •3 Истина, если все элементы строки больше 1, ложь, в противном случае . Выходные данные
- •7. Описание процедуры
- •8. Кодирование на паскале
- •9. Структурные тесты
- •2. Входные данные
- •3. Выходные данные
- •4. Аномалии не рассматриваем
- •6. Метод
- •7. Алгоритм
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •8. Кодирование на паскале
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •8. Кодирование на паскале
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •7. Описание процедуры
- •8. Кодирование на Паскале
- •6.6. Список заданий
- •7. Внешние модули (unit) в турбо-Паскале
- •7.1. Суть и описание модуля
- •7.2. Связь модуля с другими модулями и главной программой. Область действия описаний объектов
- •7.3. Специфика оформления процедур ввода – вывода в модулях
- •7.4. Примеры оформления процедур во внешних модулях
- •7.5. Задания
- •7.6. Обработка многомодульных программ в среде турбо-Паскаль
- •8. Контрольные вопросы к главе 1
- •К главе 2
- •К главе 3
- •К главе 6
- •К главе 7
- •Заключение
- •Литература
- •Приложение 1. Базовые структуры алгоритмов
- •Приложение 2. Простые типы в Паскале
- •Приложение 3. Структура типов данных в языке Паскаль
- •Содержание
1.4. Нисходящая разработка и нисходящая отладка
Суть нисходящей разработки(нисходящего проектирования, проектирования сверху вниз) состоит в пошаговой декомпозиции (разложении) задачи на точно определенные подзадачи.
Формальных критериев декомпозиции не существует, поэтому процесс, особенно для нестандартных задач, является в большой степени творческим и требует навыка и опыта. Парадоксальным на первый взгляд, но наиболее конструктивным критерием выделения подзадач является такой: каждая подзадача должна быть сформулирована кратко, точно и емко («Найти сумму..», «Проверить наличие элементов …» и т.д.).
Процесс разработки является иерархическим. На каждом уровне проектирования полагаем, что каждая выделенная подзадача реализуема, и, не интересуясь деталями этой реализации, рассматриваем ее как единое обобщенное действие, называемое абстракцией. Подзадача некоторого уровня раскрывается на следующем, также путем разложения на подзадачи – и т.д., до получения подзадач, алгоритм решения которых можно непосредственно записать на языке программирования.
Ниже приведена общая схема нисходящего проектирования.
На любом уровне проектирования одни элементы алгоритма уже доведены до исполнительного уровня и могут быть закодированы, другие же представлены в виде абстракций. Нисходящая отладкапредставляет собой постепенный процесс отладки такого незавершенного кода программы на каждом уровне.
В основе ее лежит тот факт, что любая подзадача связана с остальными только своим интерфейсом, т.е. совокупностью получаемых ею входных данных и передаваемых дальше выходных данных. Можно взять некоторый тест и вместо операций по решению подзадачи вставить операции, формирующие соответствующие тесту выходные значения. Совокупность таких операций называетсязаглушкой(илиимитатором).
Заглушка должна только получить входные данные подзадачи и напрямую сформировать результаты согласно тесту, поэтому тексты заглушек должны быть максимально простыми. Подставив вместо подзадач заглушки, мы будем иметь, с одной стороны, законченную с точки зрения компьютера программу; с другой стороны, ее результаты работы на рассматриваемомтесте не будут отличаться от результатов итоговой программы.
Такой процесс отладки дает на каждом уровне два важных результата:
возможность отладки уже готовых частей программы;
возможность отладки взаимодействия подзадач, т.е. логики передачи данных между ними.
При этом то, что уже отлажено, далее меняться не должно, и все усилия можно сосредоточить на раскрытии еще не решенных подзадач.
2. Процесс разработки программы на примере решения типовой задачи
2.1. Разработка алгоритма и программы уровня 0 с заглушками
Уровень 0
1. Абстракция А0.Задача«Точки в круге».
Координатами x,yзаданыnточек плоскости. Найти:
процент точек, удаление которых от начала координат больше заданной величины rи притом обе координаты положительны;
среднее удаление всех точек от начала координат.
Пример с иллюстрацией, на базе которого затем построим тесты:
Возьмем
r=3 см,n=5. Вне
круга с радиусом r=3 лежит 1 точка с
положительными координатами: x[i]=4,y[i]=3. Искомый
процент равен 1/5 (20%). Среднее
удаление всех точек от начала координат равно
3.9.