- •Введение
- •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. Структура типов данных в языке Паскаль
- •Содержание
7. Алгоритм
алг points(n,r,x,y,p,sa);
арг
цел n; вещ r; вещ x[n],y[n];
рез
вещ p,sa;
нач
цел i;
{A0.1. Ввод-вывод входных данных}
{вывод заголовка в выходной документ}
вывод по обр5;
{ввод входных данных}
вывод по обр1.1; ввод(n) по обр1.2; {ввод n }
вывод по обр2.1; ввод(r) по обр2.2; {ввод r }
вывод по обр3; ввод(x[i],y[i],i=1,n) по обр4; {ввод x,y }
{вывод входных данных в выходной документ}
вывод(n,r) по обр6;
вывод по обр7;
вывод(x[i],y[i],i=1,n) по обр8;
{A0.2. Обработка}
{A0.3 - вывод результатов}
вывод(p,sa) по обр9;
кон;
конpoints;
8. Программа на паскале. Диалоговый вариант
programpoints(input,output);{ввод с клавиатуры, вывод на экран}
uses crt; {подключение модуля для работы с экраном}
{раздел определения констант}
const
nmax=100; {верхняя граница массива}
{раздел описания типов - пустой}
{раздел описания переменных}
var
n,i:integer;
r,p,sa:real;
x,y:array[1..nmax] of real;
{раздел операторов}
begin
clrscr; {очистка экрана}
{A0.1 - ввод-вывод входных данных}
{вывод заголовка в выходной документ}
writeln(' ':9,'Точки'); {вывод c переходом на следующую строку}
{ввод входных данных}
writeln('Количество точек n:');readln(dat,n); {обр 1.1,1.2}
writeln('Критическое удаление r:');readln(dat,r); { обр 2.1,2.2}
{ввод массивов x и y}
writeln('Абсциссы и ординаты:'); {обр3}
fori:=1tondo
readln(dat,x[i],y[i]); {обр4: ввод 2 элементов и переход на след. строку}
{вывод входных данных в выходной документ}
{вывод n, r по обр6}
writeln(' Количество точек =',n:3);
writeln(' Критическое удаление = ',r:4:1);
{вывод массивов x и y}
writeln(' Абсциссы и ординаты: '); {обр7}
for i:=1 to n do
writeln(' ':5,x[i]:5:1,' ':8,y[i]:5:1); {обр8}
{A0.2. Обработка}
{A0.3 - вывод результатов}
writeln(' Искомый процент точек = ',p:4:1); {p по обр9}
writeln(' Среднее удаление = ',sa:4:1); {sa по обр9}
end.
9. Структурные тесты
Для тестирования последовательности операторов достаточно любого из функциональных тестов.
Тест для тестирования любого цикла должен обеспечивать хотя бы однократное выполнение цикла и выход из него. В алгоритме два цикла – ввод и вывод массивов. Любой из функциональных тестов удовлетворяет условиям тестирования.
Функциональные тесты покрывают структурные.
2.2. Отладка программы с заглушкой
Фактически в пунктах 7 и 8 представлены дваалгоритма, дающих заранее заложенные в них результаты. Закодируем алгоритм задачи А0 с первой заглушкой. Отладим программу. В итоге, пропустив тест 1, при правильной работе программы получим результат, соответствующий этому тесту.
Затем проделаем то же для второй заглушки и теста 2.
Смысл этой деятельности состоит в том, что ввод-вывод отлаживается отдельно от обработки. Введя тестовые данные и получив правильный результат вывода для каждого теста, можно быть уверенным, что ввод и вывод выполнены верно, далее к соответствующим частям программы не возвращаться и целенаправленно заниматься только решением задачи.
Замечание. Нисходящая отладка – это в высшей степени эффективная технология отладки. Однако надо учесть, что это –процесс, который следует осуществить, для того чтобы ощутить его эффективность, а не набор положений для устного ответа. Вы можете игнорировать эти рекомендации, но не рассчитывайте в этом случае и на приобретение навыков грамотной и эффективной отладки!