
- •Содержание
- •Предисловие
- •1. Этапы разработки программы
- •1.1. Формальная постановка задачи
- •1.2. Выбор метода решения
- •1.3. Внешняя спецификация программы
- •1.4. Разработка алгоритма
- •1.5. Кодирование алгоритма на языке программирования
- •1.6. Испытания программы на тестах
- •Вопросы для самоконтроля
- •2. Язык для записи алгоритмов
- •2.1. Базовые типы величин
- •2.2. Объявление величин в алгоритме
- •2.3. Структура компьютера с позиций программы
- •2.4. Базовые операции
- •2.5. Управляющие структуры
- •2.6. Структура алгоритма
- •Вопросы для самоконтроля
- •3. Введение в язык программирования паскаль
- •3.1. Краткая характеристика языка
- •Алфавит, лексемы, разделители
- •3.1.2. Структура программы
- •3.2. Средства кодирования вычислительных операций
- •3.2.1. Операция ввода
- •3.2.2. Операция присваивания
- •3.2.3. Операция вывода
- •3.3. Средства кодирования управляющих конструкций
- •3.3.1. Кодирование структуры «Ветвление»
- •3.3.2. Кодирование структуры «Цикл»
- •3.4. Кодирование алгоритма в целом
- •Заключение
- •Вопросы для самоконтроля
- •Разработка алгоритмов методом пошаговой детализации
- •4.1. Структура алгоритма
- •4.2. Описание действий
- •4.3. Обратная подстановка
- •4.4. Пример
- •4.4.1. Разработка внешней спецификации
- •4.4.2. Разработка главного алгоритма
- •4.4.3. Подстановка
- •4.4.4. Кодирование на языке Паскаль
- •4.4.5. Разработка алгоритма подпрограммы сортировки
- •4.5. Вопросы для самоконтроля
- •5.Тестирование
- •5.1. Общие принципы тестирования
- •5.2. Виды тестирования
- •5.3. Стратегии тестирования
- •5.3.1. Методы стратегии «черного ящика»
- •5.3.2. Методы стратегии «белого ящика»
- •5.4. Правила записи трассировки
- •Вопросы для самоконтроля
- •6. Характеристики качества программы
- •Вопросы для самоконтроля
- •Вопросы для самоконтроля (продолжение)
- •7. Типовые алгоритмы обработки массивов
- •А1. Ввод массива с клавиатуры
- •А7. Выбор элементов по условию
- •А8. Проверка выполнения некоторого условия
- •Пример 2. ”Найти значение элемента, встречающегося в массиве наибольшее количество раз”.
- •Пример 3. В матрице a[1..N, 1..M] поменять местами первый и третий отрицательные элементы, встретившиеся при просмотре матрицы по строкам слева направо и сверху вниз.
- •8. Обработка символьной информации
- •8.1. Обработка строк
- •8.2. Особенности ввода информации строкового вида
- •Вопросы для самоконтроля
- •9. Типы данных, задаваемых пользователем
- •9.1. Множества
- •9.2. Записи
- •9.3. Оператор with
- •Вопросы для самоконтроля
- •10. Файлы
- •Введение
- •10.2. Классификация файлов в Турбо-Паскале
- •10.3. Объявление файла
- •10.4. Открытие и закрытие файла
- •10.5. Чтение и запись
- •10.6. Текстовые файлы
- •10.7. Нетипизированные файлы
- •10.8. Пример. Программа работы с файлами
- •Вопросы для самоконтроля
- •11. Подпрограммы
- •11.1. Область действия идентификаторов
- •11.2. Способы передачи параметров
- •11.3. Примеры
- •Вопросы для самоконтроля
- •12. Динамические структуры данных
- •12.1. Указатели
- •12.2. Динамические структуры типа «Список»
- •12.3. Средства языка Паскаль для организации списков
- •12.4. Типовые алгоритмы работы со списками
- •А1. Инициализация списка. (Создание нового и пустого списка)
- •А2. Добавить элемент в конец односвязного списка
- •А9. Добавить элемент в упорядоченный односвязный список
- •Задачи для закрепления материала
- •Вопросы для самоконтроля
- •13. Динамические структуры данных типа «дерево»
- •13.1. Определение дерева и способы представления в программе
- •13.2. Рекурсия
- •1. Наличие тривиального случая.
- •2. Определение сложного случая в терминах более простого.
- •13.3. Алгоритмы работы с деревьями
- •А1. Вычисление суммы значений информационных полей элементов
- •А2. Подсчет количества узлов в бинарном дереве
- •А3. Подсчет количества листьев бинарного дерева
- •A5. Поиск элемента в двоичном упорядоченном дереве
- •Вопросы для самоконтроля
- •14. Модули
- •14.1. Введение
- •14.2. Форма модульной программы
- •14.3. Стандарты структурного программирования
- •14.4. Модули в турбо-паскале
- •14.5. Использование модулей
- •14.6. Стандартные модули Турбо-Паскаля
- •14.7. Пример использования модулей
- •Вопросы для самоконтроля
- •15. Основы объектно-ориентированного программирования
- •15.1. Основные понятия
- •15.2. Объявление классов объектов
- •15.3. Статические и динамические объекты
- •15.4. Правила построения и использования объектов а. Правила наследования
- •Б. Виртуальные методы
- •В. Ранее и позднее связывание
- •Г. Совместимость классов объектов
- •Вопросы для самоконтроля
- •Заключение
- •Библиографический список
1.3. Внешняя спецификация программы
Решение задачи на ЭВМ предполагает наличие соответствующей прикладной программы. Процесс решения заключается в подготовке исходных данных, вводе их в ЭВМ и получении результатов выполнения программы. Внешняя спецификация программы – это полное и точное описание результатов ее выполнения для всевозможных входных ситуаций.
Внешняя спецификация программы может рассматриваться, с одной стороны, формальной инструкцией по использованию программы, а с другой – формальным техническим заданием на ее разработку.
Разработанные алгоритм и программа считаются правильными, если результаты их выполнения при любых входных данных строго соответствуют требованиям внешней спецификации. Любое несоответствие результатов считается свидетельством ошибки алгоритма или программы.
Внешняя спецификация прикладной программы включает:
назначение программы;
описание входных данных;
описание формы представления результатов при допустимых входных данных;
перечисление аномалий во входных данных и реакций программы на них.
Описание входных данных включает перечень данных, которые должны быть введены с внешнего устройства в процессе выполнения программы, и их типы: числа целые или вещественные, символы или строки символов и др. (Понятие типа данных будет введено позже).
Аномалии входных данных - это различные нарушения условий допустимости входных данных. К аномалиям относят такие значения входных данных, для которых нельзя применять реализованный в программе метод решения. Так, для описанного выше метода Эвклида, входные данные не могут быть равны нулю, так что аномалией можно считать случай, когда либо первое, либо второе входное число равно нулю.
В качестве примера приведем внешнюю спецификацию программы решения квадратного уравнения, формальная постановка которой была приведена ранее.
Внешняя спецификация:
Назначение:
Решение квадратного уравнения
Входн. данные:
a, b, c - вещественные числа
Вых. данные:
КВАДРАТНОЕ УРАВНЕНИЕ
<a>*X^2+<b>*X+<c>=0
< результаты-решения >
где результаты-решения:
КОРНИ: X1 = <x1> X2 = <x2>
где х1, y1 - вещественные числа.
Аномалии входных данных:
(1) при (a=0)
Недопустимо: а = 0
(2) при (b2-4ac) < 0
Вырождено: b^2-4ac < 0
Программа может быть хорошей и плохой.
В случае плохой программы могут иметь место:
непонятный текст выходных данных;
аварийное завершение ее при недопустимых входных данных. (При этом часто отсутствуют сообщения с разъяснением причины).
Программа считается хорошей, если выполнены следующие требования:
текст выходных данных легко понимается, и в него включены не только результаты решения, но и входные данные решаемой задачи;
тексты с выходными данными легко записываются и легко исправляются;
при обнаружении аномалий формируется легко понимаемый текст с диагностикой выявленных ошибок в данных.
Для описания форм текстов выходных данных часто используют специальные средства, называемые нормальными формами Бэкуса. Нормальные формы позволяют описывать некоторую совокупность текстов с определенной структурой составляющих. Их можно использовать также и при описании форм записи алгоритмов. Мы воспользуемся некоторыми из них. В частности, переменные элементы формы и части текстов в нормальных формах мы будем обозначать заключенными в угловые скобки словами или словосочетаниями, в которых отдельные слова соединены знаками дефиса.
Например, текст выходных данных программы, решающей задачу расчета мощности электрической цепи, мог бы получить следующую форму:
Вых. данные: Образец:
ЭЛЕКТРИЧЕСКАЯ ЦЕПЬ: ЭЛЕКТРИЧЕСКАЯ ЦЕПЬ:
<r1>+(<r2>||<r3>) ом 1.0 + (1.0 || <1.0) ом
НАПРЯЖЕНИЕ: U=<u> B НАПРЯЖЕНИЕ: U= 3.0 B
<результаты-решения> МОЩНОСТЬ: W= 6.0 ВТ
Здесь
<r1>,<r2>,<r3> - обозначения конкретных числовых значений сопротивлений,
<u> - обозначение конкретного значения напряжения,
а <результаты-решения> - это составляющая выходного текста, которая варьируется в зависимости от значений входных данных.
Структура составляющих текстов может задаваться раздельным описанием форм отдельных составляющих, перечисленных в разделах "где". Та же самая структура составляющих может быть описана раскрытием описаний отдельных частей в рамках общих форм.
Общая форма выходных текстов программ должна включать заголовок, входные данные и результаты решения поставленной задачи.
Ниже приводится конкретный пример двух вариантов описания выходных текстов для задачи расчета электрической цепи.
Вариант 1. Вариант 2.
Вых. данные: Вых. данные:
ЭЛЕКТРИЧЕСКАЯ ЦЕПЬ:
<входные-данные> R1 + ( R2 || R3 ) ом
<результаты-решения> НАПРЯЖЕНИЕ: U=<u> B
ЭЛЕКТРИЧЕСКАЯ ЦЕПЬ:
б) КОРОТКОЕ ЗАМЫКАНИЕ: Rобщ=0
где входные-данные:
R1=<r1> R2=<r2> R3=<r3> в) СОПРОТИВЛЕНИЕ < 0
НАПРЯЖЕНИЕ: U=<u> B
где результаты-решения:
а) б)
КОРОТКОЕ ЗАМЫКАНИЕ: Rобщ=0
в)
Для альтернативных вариантов различных составляющих в нормальных формах используют фигурные скобки, в которых перечисляются альтернативы.
В приведенных же выше описаниях вместо фигурных скобок альтернативы помечены буквами а), б), в). Альтернативами здесь являются результаты решения, вид которых зависит от конкретного набора входных данных.
Для описания составляющих, которые могут войти или не войти в текст выходных данных, обычно применяют квадратные скобки.
Пример.
результаты-решения: образец: