- •Введение
- •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. Структура типов данных в языке Паскаль
- •Содержание
3. Организация хранения данных с позиций эффективности отладки и использования программы
3.1. Как лучше хранить, вводить и выводить данные
После исправления синтаксических ошибок, диагностируемых компилятором, работа программы проверяется на тестах. При этом задание входных данных в режиме диалога создает целый ряд трудностей:
одни и те же данные приходится набирать заново для каждого прогона теста столько раз, сколько потребуется для отладки программы на этом тесте;
сделав хотя бы одну ошибку при наборе, надо завершить (прервать или закончить набор данных) программу, перезапустить и начать все заново;
значения данных хранятся отдельно от компьютера, на бумаге.
Прежде всего это долго; но главное – это отвлекает от собственно отладки и вынуждает уделять массу внимания очень простому на первый взгляд моменту – набору на клавиатуре заранее подготовленных данных. К тому же в общем случае нельзя предугадать, какие ошибки могут быть сделаны при наборе и как на них отреагирует программа. Решение, что делать при совершении ошибки, приходится принимать «на ходу».
Вывод результатов на экран также часто сопровождается неудобствами:
если экран не очищается в программе, вообще непросто разобраться в его содержимом, если очищается – теряются предшествующие результаты;
при достаточно объемном выводе его начало оказывается за пределами экрана;
анализировать результаты можно только визуально; нельзя даже указать нужный элемент с помощью курсора;
нельзя сравнить результаты нескольких тестов (либо последовательных прогонов одного теста), специально не записав их.
Гораздо удобнее до отладки занести данные всех тестов в файлы на диске и организовать чтение данных из этих файлов. Применительно к выводу удобно организовать запись результатов в файлы. Практически для этого требуются несложные умения работы с текстовыми файлами. Именно в таком утилитарном аспекте рассмотрены файлы в § 3.1.
Следующий вопрос связан с тем, что файлов данных может быть несколько, а программа одна. Если, например, все входные данные для каждого теста хранятся в одном файле, то программа за один запуск прочитает только один файл.
Простейший, но не лучший выход – каждый раз в программе изменять имя файла. Это несложно, но формально каждый раз будет отлаживаться другаяпрограмма! Нарушается важное правило программирования:текст программы не должен меняться при изменении данных.
Второй, не лучший, выход – заносить поочередно данные в один и тот же файл.
В § 3.2 предлагается использовать третий, универсальный и в высшей степени удобный способ использования файлов данных – задание имен файлов как параметров программы. В этом случае текст программы неизменен, а конкретные имена файлов задаются при ее запуске на выполнение. Достоинства этого способа:
полное отделение программы от данных; данные можно готовить отдельно и независимо от программы;
можно запускать программу на любом числе тестов, не меняя ни тестовых файлов, ни текста программы – основное удобство отладки;
задавая в качестве имен файлов имена стандартных устройств ввода-вывода, можно работать полностью или частично в режиме диалога; дополнительное удобство отладки – ввод входных данных из файла и вывод результатов на экран.
Все сказанное в полной мере относится и к процессу эксплуатации программы. В инструкции пользователю необходимо только указать, какие параметры и в каком порядке должны быть заданы при запуске программы.
Важно отметить, что описываемые механизмы работы с файлами в других языках высокого уровня – Си, Фортране – полностью аналогичны механизмам в языке Паскаль.