- •Введение
- •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. Структура типов данных в языке Паскаль
- •Содержание
2.4. Разработка алгоритма и программы для примера
Уровень 1
1. Задача А0.2. Условие то же, что для А0.
Координатами x,yзаданыnточек плоскости.
Найти:
процент точек, удаление которых от начала координат больше заданной величины rи притом обе координаты положительны;
среднее удаление всех точек от начала координат.
2. Входные данные
целn– число точек; простая переменная;
вещ r– критическое удаление; простая переменная;
вещ x– абсциссы точек; одномерный массив;
вещy– ординаты точек; одномерный массив.
3. Выходные данные
вещp – искомый процент точек; простая переменная;
вещ sa– среднее удаление точек от начала координат; простая переменная.
4. Аномалии. В данной подзадаче отсутствуют.
5. Функциональные тесты
Это понятие рассматривается применительно к программе в целом. Для подзадач не используется.
6. Метод
● Пусть np - число точек, удовлетворяющих условию; тогда
p=(np/n)100. (1)
Чтобы найти p, надо найти np.
● Пусть s- сумма расстояний всех точек от начала координат; тогда
sa=s/n.(2)
Чтобы найти sa, надо найтиs.
● Для поиска npиsнеобходимо просмотреть все точки. При этом суммировать расстояния следует для всех точек, а считать число удовлетворяющих условию – после проверки условия.
● Пусть i- текущий номер точки,si- ее расстояние от начала координат; тогда
si=sqrt(x[i]x[i]+y[i]y[i]) (3)
Просмотру точек соответствует процесс изменения iот 1 до n.
● Запишем сформулированное в виде некоторой полуформальной схемы, полностью соответствующей нужной последовательности действий.
Положим сначала np:=0;s:=0 (суммирование начинается с 0).
Повторяем, меняяiот 1 доn:
- определить si:
si:=sqrt(x[i]*x[i]+y[i]*y[i]);
- прибавить si к s:
s:=s+si;
- если si>r и x[i]>0 и y[i]>0, то
- увеличитьnpна 1:
np:=np+1;
конец.
Найти p:
p:=(np/n)*100;
Найти sa:
sa :=s/n;
7. Алгоритм
Для записи алгоритма подзадачи на псевдокоде воспользуемся таблицей базовых структур из приложения 1.
Так как этот алгоритм не является самостоятельным, он не требует собственного заголовка и описаний переменных. Описания используемых в нем промежуточных данных, а именно: цел np; вещ s,si; надо добавить в соответствующий раздел описаний основного алгоритма.
Этот фрагмент надо просто подставить вместо соответствующей абстракции.
8. Программа на паскале
{А0.2 - обработка}
np:=0; s:=0;
for i := 1 to n do
begin
si:=sqrt(x[i]*x[i]+y[i]*y[i]);
s:=s+si;
if (si>r) and (x[i]>0) and (y[i]>0) then
np:=np+1;
end;
p=(real(np)/n)*100;
sa=s/n;
9. Структурные тесты
Для тестирования всей последовательностиоператоров достаточно любого из функциональных тестов.
В алгоритме один цикл, внутри которого – последовательность операторов и ветвление. Любой из функциональных тестов удовлетворяет условиям тестирования цикла.
Условие в ветвлениивыполняется на тесте 1.
Функциональные тесты покрывают структурные.
2.5. Отладка полной программы
Заменим в тексте последнего отлаженного варианта программы заглушку полным текстом программы подзадачи. Отладим программу, сначала исправив ошибки синтаксиса, а затем – пропуская тесты 1 и 2.
В итоге для каждого из тестов программа должна выдавать соответствующий результат. В обоих случаях выводимая информация будет полностью идентична той, что получалась при работе программы с заглушками! Это дополнительная положительная сторона нисходящей отладки: то, что должно получиться в итоге, сравнивается с уже виденным и знакомым.