Пример выполнения простого задания: Begin3
На данной странице приводится пошаговое описание процесса решения в системе
Microsoft Visual Basic следующего простого учебного задания из группы Begin.
Begin3°. Даны стороны прямоугольника a и b. Найти его площадь
S = ab и периметр P = 2(a + b).
Создание программы-заготовки и знакомство с заданием
Для создания проекта, содержащего заготовку для требуемого задания, следует
воспользоваться программным модулем PT4Load. Для этого достаточно
перейти в рабочий каталог задачника и с помощью ярлыка Load.lnk запустить программу-утилиту
PT4Load.exe (при использовании сред Visual Basic 56 можно также использовать
«Add-Ins | PT4 Load», встроенную в меню Visual Basic).
При этом на экране появится окно модуля PT4Load, в котором
следует указать имя нужного задания. Отметим, что в заголовке этого окна указывается краткое
имя той программной среды, для которой будет создана заготовка. В случае среды
Visual Basic версии 5.0, 6.0, 2003, 2005, 2008, 2010 заголовок будет содержать текст [VB5], [VB6],
[VB7], [VB8], [VB9] , [VB10] соответственно.
Созданный проект-заготовка будет состоять из нескольких файлов, однако для решения
задания нам потребуется только один файл: Begin3.bas для VB5-6 и Begin3.vb для VB.NET.
Именно этот файл будет загружен в редактор используемой программной среды.
Приведем содержимое файлов Begin3.bas и Begin3.vb:
[VB5-6, файл Begin3.bas]
Option Explicit
Sub Solve()
Task "Begin3"
End Sub
[VB.NET, файл Begin3.vb]
Option Strict On
Imports System.Math
Imports PT4.VisualBasic
Module PT4Tasks
Sub Solve()
Task("Begin3")
End Sub
End Module
Файл Begin3.bas содержит описание процедуры Solve, в которой вызывается
процедура Task,
инициализирующая задание Begin3. Файл Begin3.vb тоже содержит описание процедуры Solve
с вызовом процедуры Task; кроме того, в нем содержатся операторы Imports, необходимые для подключения
к программе дополнительных классов. Решение задания необходимо запрограммировать
в процедуре Solve (хотя, разумеется, в решении могут использоваться другие процедуры и функции,
описанные в данном проекте).
Приведенные программы-заготовки демонстрируют одно из важных различий в версиях VB5-6 и VB.NET:
при вызове процедур в VB.NET список их параметров обязательно заключается в скобки,
в то время как в VB5-6 это делать не следует. Отметим, что при соответствующих
настройках (которые устанавливаются по умолчанию) редактор среды Visual Studio .NET
сам заключает параметры процедур в скобки, если это забыл сделать программист.
В файлах Begin3.bas и Begin3.vbs отсутствует описание процедуры Main, которая является
стартовой при выполнении программы как для VB5-6, так и для VB.NET. Эта процедура
описана в файле pt4main, также созданном при генерации проекта-заготовки для данного задания
(для VB5-6 файл pt4main имеет расширение .bas, для VB.NET расширение .vb).
Именно в процедуре Main происходит вызов процедуры Solve, решающей задание.
Поскольку содержимое файла pt4main не требует редактирования, данный файл не
загружается в редактор программной среды. Однако он входит в проект, в чем можно убедиться,
посмотрев на окно проекта (данное окно имеет заголовок "Project" для среды Microsoft Visual Basic 5 и 6
и "Solution Explorer" для среды Microsoft Visual Studio .NET).
Слева приведен вид данного окна для VB5-6, а справа для VB.NET.
Запустим программу, нажав клавишу [F5], чтобы увидеть на экране окно
задачника с формулировкой задания и примером исходных данных.
Запуск нашей программы был признан ознакомительным (и поэтому
правильность решения не анализировалась), так как в ходе ее выполнения не было
выполнено ни одной операции ввода-вывода.
Ввод исходных данных
Приступая к решению задания, надо прежде всего организовать ввод в
программу исходных данных. В нашем случае исходными данными являются
вещественные числа a и b, определяющие стороны прямоугольника (в области
исходных данных эти числа выделены желтым цветом и снабжены комментариями).
При вводе исходных данных важно правильно указывать их тип, в противном
случае задачник зафиксирует ошибку. Продемонстрируем это на примере нашей
программы, организовав считывание исходных данные в переменные целого типа,
используя процедуру GetN. Для этого закроем окно задачника (нажав кнопку
«Выход», клавишу [Esc] или клавишу [F5]) и дополним текст процедуры
Solve следующим образом:
[VB5-6]
Sub Solve()
Task "Begin3"
Dim a As Integer, b As Integer
GetN a
GetN b
End Sub
[VB.NET]
Sub Solve()
Task("Begin3")
Dim a, b As Integer
GetN(a)
GetN(b)
End Sub
Данный фрагмент программы демонстрирует еще одну особенность VB.NET:
переменные одного типа в VB.NET можно при описании перечислять через запятую,
указывая для них общий описатель типа. В VB5-6 подобный способ описания приведет
к другому результату: все переменные списка, кроме последней, получат тип Variant,
и только последняя переменная будет иметь тип, указанный после слова As.
Таким образом, если бы все переменные в варианте программы для VB5-6 были
описаны в виде одного списка, то переменная a получила бы тип Variant,
что привело бы к ошибке компиляции из-за несоответствия типа параметров для процедуры GetN.
Поэтому в программах на VB5-6 следует описывать каждую переменную по отдельности,
тогда как в программах на VB.NET допустимо объединять переменные одного типа в общий список.
Повторно запустив программу, мы увидим, что исходные данные изменились.
При каждом запуске генерируется новый набор исходных данных, поэтому для
успешного решения задания необходимо запрограммировать алгоритм, правильно
обрабатывающий любой допустимый набор исходных данных.
Поскольку мы попытались ввести исходные данные (т. е.
продемонстрировали намерение выполнить задание), данный запуск программы уже
не считается ознакомительным. Однако тип исходных данных был выбран нами
неправильно, поэтому на информационной панели будет выведена следующая
информация об ошибке (на красном фоне): «Неверно указан тип при вводе
исходных данных. Для ввода 1-го элемента (вещественного типа) использована
переменная целого типа».
Для правильного ввода исходных данных в нашем случае надо использовать
процедуру GetD, обеспечивающую ввод данных типа Double. Исправим
соответствующим образом процедуру Solve:
[VB5-6]
Sub Solve()
Task "Begin3"
Dim a As Double, b As Double
GetD a
GetD b
End Sub
[VB.NET]
Sub Solve()
Task("Begin3")
Dim a, b As Double
GetD(a)
GetD(b)
End Sub
Теперь ввод данных выполнен правильно. Однако наша программа не выводит
результатов, поэтому ее работа опять признана ошибочной с диагностикой
«Выведены не все результирующие данные. Количество выведенных данных: 0
(из 2)».
Вычисления и вывод полученных данных
Выполним необходимые вычисления и выведем результаты, используя
процедуру PutD:
[VB5-6]
Sub Solve()
Task "Begin3"
Dim a As Double, b As Double
GetD a
GetD b
Dim S As Double, P As Double
S = a * b
P = 2 * (a + b)
PutD P
PutD S
End Sub
[VB.NET]
Sub Solve()
Task("Begin3")
Dim a, b As Double
GetD(a)
GetD(b)
Dim S, P As Double
S = a * b
P = 2 * (a + b)
PutD(P)
PutD(S)
End Sub
После запуска программы мы можем убедиться, что найденные значения
выведены в разделе результирующих данных. Но из-за того, что вначале мы вывели
значение периметра P, а затем значение площади S, решение по-прежнему
признано неверным, а сообщение об ошибке имеет вид «Ошибочное
решение». Подобное сообщение означает, что все исходные данные были
введены, все результирующие данные выведены, но значения полученных
результатов не совпадают с контрольными. Перейдя на вкладку «Пример
верного решения», мы можем убедиться в том, что площадь и периметр
найдены верно и нарушен только порядок их вывода.
Таким образом, важно не только найти правильные значения результирующих
данных, но и вывести их в нужном порядке. Для того чтобы указать этот порядок, в
разделе результатов используется поясняющий текст (см. приведенный выше рисунок
окна задачника). Заметим, что исходные данные тоже важно вводить именно в том
порядке, в котором они указаны в окне задачника. Общее правило здесь следующее:
ввод и вывод данных производится по строкам (слева направо), а строки
просматриваются сверху вниз. Иными словами, данные, отображаемые в окне
задачника, вводятся и выводятся в том порядке, в котором читается обычный текст на
русском языке.
Правильное решение и его тестирование
Исправим допущенную ошибку, поменяв местами два последних оператора в
процедуре Solve:
[VB5-6]
PutD S
PutD P
[VB.NET]
PutD(S)
PutD(P)
После запуска исправленной программы не информационной панели окна
задачника будет выведено сообщение на зеленом фоне: «Верное решение. Тест
номер 1 (из 3)».
Таким образом, мы провели первое успешное испытание нашей программы.
Однако однократное успешное испытание алгоритма еще не означает, что он является
правильным. Для того чтобы получить уверенность в правильности алгоритма, его
надо протестировать несколько раз на различных наборах данных. Количество
тестовых испытаний, требующихся для каждого учебного задания, различно и может
меняться в пределах от 3 до 9 (для простого задания Begin3 число испытаний равно
3). Если нужное количество испытаний, проведенных подряд, прошло успешно, то на
информационной панели появится сообщение «Задание выполнено!».
Если же в ходе очередного испытания будет получено неверное решение, то счетчик
количества успешных испытаний для данного задания будет сброшен в 0, и после
исправления алгоритма программу придется тестировать заново.
В нашем случае алгоритм является правильным, поэтому после трех запусков на
информационной панели окна задачника появится текст «Задание
выполнено!». Выполнение задания Begin3 завершено.
С помощью модуля PT4Results можно просмотреть информацию о ходе
выполнения задания. Проще всего это сделать, используя команду «Add-Ins |
PT4 Results» меню Visual Basic. Напомним, что команда «Add-Ins | PT4
Load» из этого же меню позволяет создать заготовку для выполнения нового
задания.
[VB5-6]
Sub Solve()
Task "Begin3"
Dim a As Double, b As Double
GetD a
GetD b
PutD a * b
PutD 2 * (a + b)
End Sub
[VB.NET]
Sub Solve()
Task("Begin3")
Dim a, b As Double
GetD(a)
GetD(b)
PutD(a * b)
PutD(2 * (a + b))
End Sub
|