Пример выполнения простого задания: Begin3
На данной странице приводится пошаговое описание процесса решения в системе Borland
Delphi следующего простого учебного задания из группы Begin.
Begin3°. Даны стороны прямоугольника a и b.
Найти его площадь S = ab и
периметр P = 2(a + b).
Создание программы-заготовки и знакомство с заданием
Для создания проекта, содержащего заготовку для требуемого задания, следует
воспользоваться программным модулем PT4Load. Для этого достаточно
перейти в рабочий каталог задачника и с помощью ярлыка Load.lnk запустить программу-утилиту PT4Load.exe.
При этом на экране появится окно модуля PT4Load, в котором следует указать
имя нужного задания.
Отметим, что в заголовке этого окна указывается краткое имя той программной
среды, для которой будет создана заготовка. В случае среды Borland Delphi версии 7
заголовок содержит текст [DELPHI7]; аналогичный текст, отличающийся только
номером, указывается для других версий Delphi. В случае среды Free Pascal Lazarus 0.9 заголовок
будет содержать текст [LAZARUS1].
Проект-заготовка, созданный для системы Delphi версии от 3 до 7 и
предназначенный для выполнения задания Begin3, будет состоять из единственного
файла Begin3.dpr, содержащего следующий текст (такой же файл входит в проект,
создаваемый в Delphi 2006):
{$D+,L+,I+,Q+,R+,S+}
program Begin3;
uses PT4;
begin
Task('Begin3');
end.
Данная программа содержит оператор uses подключения модуля PT4, а также
вызов процедуры Task, инициализирующей задание Begin3. В начале программы указываются
некоторые директивы компилятора, устанавливающие режим компиляции, наиболее
подходящий для выполнения учебных заданий; в частности, включается режим
контроля за ошибками, связанными с вводом-выводом (I+), целочисленным
переполнением (Q+) и выходом индексов за допустимый диапазон (R+).
Аналогичным образом выглядит и программа-заготовка, созданная для систем
программирования Free Pascal Lazarus, Pascal ABC и PascalABC.NET. Она лишь не будет содержать строку с директивами
компилятора.
Программа-заготовка для системы Pascal ABC и PascalABC.NET сохраняется в файле с расширением
.pas, а заготовка для системы Free Pascal Lazarus в файле с расширением .lpr.
Отметим, что при выполнении заданий в среде Free Pascal Lazarus рекомендуется отключить отладчик, встроенный в эту среду.
Для этого следует выполнить команду меню «Окружение | Параметры отладчика...» («Environment | Debugger Options...»)
и в появившемся окне выбрать в выпадающем списке «Тип отладчика и путь» («Debugger type and path») вариант «(none)».
Желательно также снять флажок «Показывать сообщение при остановке» («Show message on stop»); в противном случае
после завершения каждого тестового запуска программы на экран будет выводиться дополнительное диалоговое окно
с текстом «Выполнение остановлено» («Execution stopped»). После установки требуемых настроек следует закрыть диалоговое
окно настройки параметров отладчика, нажав кнопку «OK».
При компиляции программы в среде Lazarus
на экране может отображаться окно с информацией о результатах компиляции. Поскольку для закрытия этого окна
требуются дополнительные действия, желательно отключить его вывод на экран. Для этого надо выполнить команду меню
«Окружение | Параметры окружения...» («Environment | Environment Options...»),
в появившемся окне перейти на вкладку «Файлы» («Files») и снять флажок
«Показывать диалог компиляции» («Show compile dialog»),
после чего закрыть окно
настройки параметров, нажав кнопку «OK», и повторно загрузить среду Lazarus.
Запустим программу, нажав клавишу [F9], чтобы увидеть на экране окно
задачника с формулировкой задания и примером исходных данных.
Запуск нашей программы был признан ознакомительным (и поэтому
правильность решения не анализировалась), так как в ходе ее выполнения не было
совершено ни одной операции ввода-вывода.
Ввод исходных данных
Приступая к решению задания, надо прежде всего организовать ввод в
программу исходных данных. В нашем случае исходными данными являются
вещественные числа a и b, определяющие стороны прямоугольника (в области
исходных данных эти числа выделены желтым цветом и снабжены комментариями).
При вводе исходных данных важно правильно указывать их тип, в противном
случае задачник зафиксирует ошибку. Продемонстрируем это на примере нашей
программы, организовав считывание исходных данные в переменные целого типа,
используя процедуру GetN. Для этого закроем окно задачника (нажав кнопку
«Выход», клавишу Esc или клавишу [F9]) и дополним нашу программу
следующим образом (для краткости мы здесь и в дальнейшем не будем указывать
строки с директивами компилятора и заголовком program):
uses PT4;
var
a, b: integer;
begin
Task('Begin3');
GetN(a);
GetN(b);
end.
Повторно запустив программу, мы увидим, что исходные данные изменились.
При каждом запуске генерируется новый набор исходных данных, поэтому для
успешного решения задания необходимо запрограммировать алгоритм, правильно
обрабатывающий любой допустимый набор исходных данных.
Поскольку мы попытались ввести исходные данные (т. е.
продемонстрировали намерение выполнить задание), данный запуск программы уже
не считается ознакомительным. Однако тип исходных данных был выбран нами
неправильно, поэтому на информационной панели будет выведена следующая
информация об ошибке (на красном фоне): «Неверно указан тип при вводе
исходных данных. Для ввода 1-го элемента (вещественного типа) использована
переменная целого типа».
Для правильного ввода исходных данных в нашем случае надо использовать
процедуру GetR, обеспечивающую ввод данных типа real. Исправим
соответствующим образом нашу программу:
uses PT4;
var
a, b: real;
begin
Task('Begin3');
GetR(a);
GetR(b);
end.
Теперь ввод данных выполнен правильно. Однако наша программа не выводит
результатов, поэтому ее работа опять признана ошибочной с диагностикой
«Выведены не все результирующие данные. Количество выведенных данных: 0
(из 2)».
Вычисления и вывод полученных данных
Выполним необходимые вычисления и выведем результаты, используя
процедуру PutR:
uses PT4;
var
a, b, S, P: real;
begin
Task('Begin3');
GetR(a);
GetR(b);
S := a * b;
P := 2 * (a + b);
PutR(P);
PutR(S);
end.
После запуска программы мы можем убедиться, что найденные значения
выведены в разделе результирующих данных. Но из-за того, что вначале мы вывели
значение периметра P, а затем значение площади S, решение по-прежнему
признано неверным, а сообщение об ошибке имеет вид «Ошибочное
решение». Подобное сообщение означает, что все исходные данные были
введены, все результирующие данные выведены, но значения полученных
результатов не совпадают с контрольными. Перейдя на вкладку «Пример
верного решения», мы можем убедиться в том, что площадь и периметр
найдены верно и нарушен только порядок их вывода.
Таким образом, важно не только найти правильные значения результирующих
данных, но и вывести их в нужном порядке. Для того чтобы указать этот порядок, в
разделе результатов используется поясняющий текст (см. приведенный выше рисунок
окна задачника). Заметим, что исходные данные тоже важно вводить именно в том
порядке, в котором они указаны в окне задачника. Общее правило здесь следующее:
ввод и вывод данных производится по строкам (слева направо), а строки
просматриваются сверху вниз. Иными словами, данные, отображаемые в окне
задачника, вводятся и выводятся в том порядке, в котором читается обычный текст на
русском языке.
Правильное решение и его тестирование
Исправим допущенную ошибку, поменяв местами два последних оператора:
PutR(S);
PutR(P);
После запуска исправленной программы на информационной панели окна
задачника будет выведено сообщение на зеленом фоне: «Верное решение. Тест
номер 1 (из 3)».
Таким образом, мы провели первое успешное испытание нашей программы.
Однако однократное успешное испытание алгоритма еще не означает, что он является
правильным. Для того чтобы получить уверенность в правильности алгоритма, его
надо протестировать несколько раз на различных наборах данных. Количество
тестовых испытаний, требующихся для каждого учебного задания, различно и может
меняться в пределах от 3 до 9 (для простого задания Begin3 число испытаний равно
3). Если нужное количество испытаний, проведенных подряд, прошло успешно, то на
информационной панели появится сообщение «Задание выполнено!».
Если же в ходе очередного испытания будет получено неверное решение, то счетчик
количества успешных испытаний для данного задания будет сброшен в 0, и после
исправления алгоритма программу придется тестировать заново.
В нашем случае алгоритм является правильным, поэтому после трех запусков на
информационной панели появится текст «Задание выполнено!».
Выполнение задания Begin3 завершено.
С помощью модуля PT4Results можно просмотреть информацию о ходе
выполнения задания.
uses PT4;
var
a, b: real;
begin
Task('Begin3');
GetR(a);
GetR(b);
PutR(a * b);
PutR(2 * (a + b));
end.
Примечание 2. При выполнении заданий в средах Pascal ABC и PascalABC.NET
для ввода-вывода данных можно использовать стандартные процедуры Read-Write, причем
при одном вызове этих процедур можно вводить или выводить несколько элементов данных.
Поэтому вариант решения задания Begin3 в этих средах будет еще более коротким:
uses PT4;
var
a, b: real;
begin
Task('Begin3');
Read(a, b);
Write(a * b, 2 * (a + b));
end.
|