Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet9/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   5   6   7   8   9   10   11   12   ...   71
Bog'liq
Abramyan-Pascal2016-1


Глава 2. Электронный задачник Programming Taskbook 
19 
же количество пройденных тестов. В данном случае информационная па-
нель содержит текст «Ознакомительный запуск: ни выполнена ни одна из 
операций ввода-вывода». 
Ознакомившись с условиями задачи, мы можем закрыть окно, щелк-
нув на кнопке «Выход (Esc)» или нажав клавишу Esc. Для завершения про-
граммы можно также нажать клавишу F9, т. е. ту же клавишу, которая ис-
пользовалась для запуска программы. 
2.3.
Решение задачи 
Решение задачи надо ввести в заготовку после процедуры Task. Разу-
меется, мы можем описывать переменные (а также константы, типы, про-
цедуры и функции) в традиционном для Паскаля разделе описаний, однако 
в данной книге мы будем активно пользоваться возможностью 
PascalABC.NET, разрешающей описывать переменные непосредственно в 
разделе операторов (см. п. 1.1). Поскольку наши решения всегда будут це-
ликом располагаться в разделе операторов, договоримся для краткости 
приводить только содержимое этого раздела, опуская обязательную дирек-
тиву uses подключения модуля PT4, а также обрамляющие раздел операто-
ров операторные скобки begin-end. 
Начнем с реализации функции TriangleP. Чтобы проиллюстрировать 
еще одну рассмотренную ранее особенность PascalABC.NET, связанную с 
лямбда-выражениями (см. п. 1.3), реализуем эту функцию в виде проце-
дурной переменной, присвоив ей соответствующее лямбда-выражение: 
Task('Proc20'); 
var TriangleP: (real, real) -> real; 
TriangleP := (a, h) -> 2 * Sqrt(Sqr(a / 2) + Sqr(h)) + a; 
Вначале мы описали процедурную переменную TriangleP, определив ее 
тип как функцию, принимающую два вещественных параметра и возвра-
щающую вещественный результат. Затем мы присвоили этой переменной 
лямбда-выражение, которое по двум параметрам a и h — основанию и вы-
соте равнобедренного треугольника — вычисляет периметр этого тре-
угольника. Для нахождения боковой стороны мы использовали формулу, 
приведенную в условии задачи, а для операций возведения в квадрат и из-
влечения квадратного корня — стандартные функции Паскаля Sqr и Sqrt. 
Чтобы проверить, что данный фрагмент программы не содержит оши-
бок, запустим программу еще раз. Поскольку мы по-прежнему не вводим и 
не выводим данные, текст информационной панели не изменится, хотя 
набор исходных данных окажется другим. При каждом запуске программы 
задачник генерирует новый набор тестовых данных (используя при этом 
датчик случайных чисел), поэтому для решения задачи необходимо запро-
граммировать алгоритм, правильного обрабатывающий любые допустимые 


20 
наборы исходных данных. Заметим, что при компиляции программы будет 
выведено предупреждение: «Переменной 'TriangleP' присвоено значение, 
но оно нигде далее не используется». Подобные предупреждения не пре-
пятствуют компиляции и запуску программы, однако обычно свидетель-
ствую о каких-либо недочетах в ее реализации. 
Нам осталось проверить правильность полученной функции, вычислив 
с ее помощью периметры трех треугольников, основания и высоты кото-
рых будут предложены задачником. Для получения исходных данных бу-
дем использовать функции ввода (см. п. 1.2). Результат, возвращенный 
функцией TriangleP, мы можем сразу переслать задачнику для проверки
используя одну из процедур вывода (допустимо использовать как Write, так 
и Print, а также их модификации Writeln и Println; при выполнении заданий с 
применением задачника все эти варианты процедур вывода работают оди-
наково). Приведем фрагмент, который надо добавить в конец предыдущего 
варианта решения: 
var a := ReadReal; 
var h := ReadReal; 
Write(TriangleP(a, h)); 

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   5   6   7   8   9   10   11   12   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling