1 Постановка задачи
2 Описание алгоритма
3 Организация входных и выходных данных
4 Выбор состава технических и программных средств.
Решение задачи начинается с ее постановки. Постановка задачи - точная формулировка решения задачи на компьютере с описанием входной и выходной информации. Входная информация по задаче – это данные, поступающие на вход задачи и используемые для ее решения. Выходная информация может быть представлена в виде документов, кадров на экране монитора, информации в базе данных, выходного сигнала устройству управления.
В данном разделе дается точное описание исходных данных, условий задачи и целей ее решения. На этом этапе условия задачи, записанные в форме различных словесных описаний, необходимо выразить на формальном языке математики. Обычно математическая модель – это набор уравнений, неравенств и ограничений, приближенно описывающих задачу. При построении математической модели отбрасываются некоторые свойства реальной задачи, мало влияющие на решение.
В этом разделе могут быть описаны основные приемы программирования и типы данных, используемые при решении аналогичных задач. Например, если в задаче используются динамические структуры, то перечисляются виды динамических структур данных и основные процедуры по работе с динамическими структурами. Если задача заключается в формировании базы данных и дальнейшей работе с базой, то приводится описание используемых типов данных (характеристика данных записного типа) и приемы работы с файлами.
Далее описываются возможные пути решения задачи с указанием их достоинств и недостатков. Выбирается и обосновывается метод решения задачи. Описываются ограничения, накладываемые на исходные данные, необходимая разрядность и точность представления исходных данных и результатов решения. Указываются возможные пределы изменения входных параметров задачи.
Пример
Разработать программу, моделирующую игру «Лабиринт», с использованием динамической структуры «связанный список». Играющий должен найти выход из двумерного лабиринта. Лабиринт состоит из смежных комнат. Каждая комната может иметь четыре двери, направленные на север, юг, запад и восток. Одна из комнат содержит выход из лабиринта. Играющий, попав в очередную комнату, может попросить подсказку о направлении движения в сторону выхода из лабиринта. Подсказка представляет собой вопрос теста и четыре варианта ответа по дисциплине «Программирование на языке высокого уровня». Правильный ответ соответствует двери, ведущей к выходу. Представляемые играющему вопросы и варианты ответа должны считываться из файла, хранящегося на диске.
После описания общих положений тематики работы, необходимо указать конкретные методы решения поставленной задачи. Математическая формулировка в данном случае заменяется словесным описанием.
Предположим, что помещения здания соединяются между собой так, как показано на рисунке 1.
Рисунок 1. Пример плана помещений
Информация о плане здания должна храниться в файле в последовательности: номер комнаты; номера комнат, смежных с данной. Смежные комнаты перечислены в порядке: север, восток, юг, запад (рисунок 2). Порядок следования помещений в этом списке может быть любым, как и последовательность номеров помещений на плане.
Рисунок 2. Информация о плане здания, представленном на рисунке 3
Для последующей обработки файл с данными считывается и помещается в список, исходя из номера помещения (рисунок 3). Spi – указатель на начало списка.
Рисунок 3. Начало списка помещений после первого прочтения,
представленного на рисунке 2 файла
Затем файл считывается еще раз и с учетом наличия дверей генерируется связь помещений (рисунок 4).
Рисунок 4. Начало списка помещений после второго прочтения,
представленного на рисунке 4 файла
Звездочкой помечены ссылки, равные Nil.
Перемещение игрока в лабиринте осуществляется путем выбора им одного из вариантов направления движения. Игрок вводит номер комнаты, с которой начинается путешествие. Если такого помещения в лабиринте нет, то об этом выдается сообщение. Если такая комната существует, то играющему предлагается выбрать направление движения, которое можно определить, воспользовавшись подсказкой. Помощь заключается в том, что на экран высвечивается вопрос по теме курса “Программирование на языке высокого уровня” и 4 варианта ответа. Правильный ответ указывает направление дальнейшего движения. Неправильный ответ дает неверное направление или вызывает сообщение о невозможности передвижения. Вывод подсказки на экран и выбор правильного ответа осуществляются с помощью специальной процедуры, которая обращается к файлу на диске.
Признаком окончания игры является ссылка на помещение с номером 999.
В программе необходимо предусмотреть возможность создания и корректирования файлов плана помещения и подсказки.
В разделе дается обобщенное словесное описание алгоритма решения поставленной задачи, излагаются основные требования к алгоритму и пути их реализации. Приводится схема алгоритма, состоящая из укрупненных модулей. Дается пояснение назначения и состава каждого модуля. Обобщенный алгоритм обычно использует обозначения и термины исходной задачи.
На следующем этапе каждый модуль детализируется. Выделяются укрупненные команды, реализуемые по вспомогательным алгоритмам. Тот же подход применяется при разработке вспомогательных алгоритмов.
Пример
В программе решаются три независимые друг от друга подзадачи.
1. Перемещение по лабиринту.
2. Запись на диск плана помещений здания.
3. Запись на диск файла подсказки.
Задача “Перемещение по лабиринту” решается в два этапа: 1) формирование списка помещений; 2) выбор направления движения и переход из одного помещения в другое.
Обобщенная схема алгоритма приведена на рисунке 5.
Рисунок 5. Обобщенная схема алгоритма
При формировании списка плана помещений сначала производится считывание номеров комнат из текстового файла и построение связанного списка, затем построение многосвязанного списка, содержащего в себе план помещений здания (рисунок 6).
Рисунок 6. Формирование списка плана помещений
Перемещение по лабиринту начинается с выбора номера помещения для начала путешествия. Если такого помещения нет, то игра заканчивается. Если такое помещение в лабиринте есть, то игроку предоставляется возможность выбрать направление движения или воспользоваться файлом подсказки. Укрупненная схема алгоритма приведена на рисунке 7.
Рисунок 7. Схема алгоритма этапа “Перемещение по лабиринту”
Блок “Выбор направления движения” может быть детализирован на этапе разработки программы.
Аналогично детализируются все составляющие алгоритма.
На этапе разработки технического проекта детализация на уровне операторов программы необязательна.
Данный раздел содержит описание и обоснование выбора метода организации входных и выходных данных.
Файл, содержащий план лабиринта, может быть организован непосредственно в приложении. Для этого разрабатывается отдельный фрагмент программы. Структура файла приведена на рисунке 2. В текстовом файле в одной строке записаны номер комнаты и номера комнат смежных помещений. Смежные помещения располагаются в порядке: норд, ост, зюйд, вест. Если смежное помещение отсутствует, то вводится значение 0. Номера комнат в файле могут располагаться в произвольном порядке. Важным является то, что информация о комнате должна быть расположена в отдельной строке.
Разрабатываемое приложение предусматривает использование файлов прямого доступа.
В файлах прямого доступа хранится информация подсказки. Подсказкой является правильный ответ тестового задания, который соответствует двери, ведущей к выходу из лабиринта. Файл–помощь может быть сформирован непосредственно в приложении. Для этого разрабатывается отдельный фрагмент программы. Количество компонентов файла равно количеству помещений в здании-лабиринте. Номер компоненты файла соответствует номеру помещения. Правильный ответ расположен в положении, определяющем верное направление. Компонент типизированного файла имеет тип “запись”, где отводится поле для хранения вопроса по теме курса и поле – массив предлагаемых ответов.
Структура файла подсказки:
Запись:
Поле вопроса
Поле 4–х ответов
Файл подсказки для структуры помещений, приведенной на рисунке 1, может содержать, например, следующие тестовые задания:
Что является стандартной файловой переменной?
Con
Prn
F
Input
Правильно описана файловая переменная текстового типа
F4: text80;
F1: File of String;
F: File of String[80];
F2: Text;
Какая процедура предназначена для связи файловой переменной с физическим файлом на диске?
Reset
Rewrite
Assign
Read
Какая процедура предназначена для чтения данных из типизированного файла?
Readln
ReadBlock
Input
Read
Если Var a, b: ^Real; то для a и b справедливо
New(a^)
a:= a/b
a^:= a^ mod b^
a^:= sin(b^)