pascalabcnet/TestSuite/CompilationSamples/PT4Exam.pas

164 lines
4.6 KiB
ObjectPascal
Raw Permalink Normal View History

2017-03-08 00:30:47 +03:00
/// Модуль электронного задачника PT for Exam
2015-05-14 22:35:07 +03:00
unit PT4Exam;
2015-05-14 22:35:07 +03:00
//------------------------------------------------------------------------------
// Модуль для подключения задачника PT for Exam
// Версия 2.3
// Copyright © 2014-2019 М.Э.Абрамян
2015-05-14 22:35:07 +03:00
//------------------------------------------------------------------------------
interface
procedure Task(name: string);
procedure FinExam;
/// Выводит строку S в разделе отладки окна задачника
procedure Show(S: string);
/// Выводит набор данных в разделе отладки окна задачника.
/// Вещественные числа выводятся в формате, настроенном
/// с помощью функции SetPrecision (по умолчанию 2 дробных знака).
/// Если аргументом является последовательность, то после вывода
/// ее элементов выполняется автоматический переход на новую строку.
procedure Show(params args: array of object);
/// Выполняет переход на новую экранную строку
/// в разделе отладки окна задачника
procedure ShowLine;
/// Выводит набор данных в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку.
/// Вещественные числа выводятся в формате, настроенном
/// с помощью функции SetPrecision (по умолчанию 2 дробных знака).
/// Если аргументом является последовательность, то после вывода
/// ее элементов выполняется автоматический переход на новую строку.
procedure ShowLine(params args: array of object);
/// Задает ширину W области вывода для числовых и строковых данных
/// в разделе отладки. Влияет на последующие вызовы функций
/// Show и ShowLine.
procedure SetWidth(W: Integer);
/// Настраивает формат вывода вещественных чисел в разделе отладки
/// окна задачника. Если N > 0, то число выводится в формате
/// с фиксированной точкой и N дробными знаками. Если N = 0,
/// то число выводится в экспоненциальном формате, число дробных
/// знаков определяется шириной поля вывода
2017-03-08 00:30:47 +03:00
procedure SetPrecision(N: integer);
/// Обеспечивает автоматическое скрытие всех разделов
/// окна задачника, кроме раздела отладки
2017-03-08 00:30:47 +03:00
procedure HideTask;
2015-05-14 22:35:07 +03:00
implementation
uses
PT4, System.IO, System.Text;
procedure ToWin(s: string);
begin
var fs: StreamReader := new StreamReader(s);
var fs1: StreamWriter := new StreamWriter('$$.tmp', false,
Encoding.Default);
fs1.Write(fs.ReadToEnd);
fs.Close;
fs1.Close;
System.IO.File.Delete(s);
System.IO.File.Move('$$.tmp',s);
end;
var
NextTask: boolean := False;
s1, s2: string;
procedure Task(name: string);
var
f: textfile;
begin
PT4.Task(name);
if NextTask then
exit;
NextTask := True;
GetS(s1);
GetS(s2);
if not FileExists(s1) then
begin
s1 := 'null1.tst';
Assign(f, s1);
Rewrite(f);
Close(f);
end;
if s2 = '' then
begin
2015-05-14 22:35:07 +03:00
s2 := 'null2.tst';
end;
2015-05-14 22:35:07 +03:00
Assign(input, s1);
Reset(input);
Assign(output, s2);
Rewrite(output);
end;
procedure FinExam;
begin
Sleep(100);
2015-05-14 22:35:07 +03:00
Close(input);
Close(output);
if s1 = 'null1.tst' then
Erase(input);
if s2 = 'null2.tst' then
Erase(output)
else
ToWin(s2);
NextTask := false;
Sleep(100);
2015-05-14 22:35:07 +03:00
end;
// == Версия 1.3. Дополнения ==
2017-03-08 00:30:47 +03:00
procedure Show(S: string);
begin
PT4.Show(S);
end;
procedure Show(params args: array of object);
2017-03-08 00:30:47 +03:00
begin
PT4.Show(args);
2017-03-08 00:30:47 +03:00
end;
procedure ShowLine;
begin
PT4.ShowLine;
end;
procedure ShowLine(params args: array of object);
2017-03-08 00:30:47 +03:00
begin
PT4.ShowLine(args);
2017-03-08 00:30:47 +03:00
end;
procedure SetWidth(W: Integer);
2017-03-08 00:30:47 +03:00
begin
PT4.SetWidth(W);
2017-03-08 00:30:47 +03:00
end;
procedure HideTask;
begin
PT4.HideTask;
end;
procedure SetPrecision(N: Integer);
begin
PT4.SetPrecision(N);
end;
2015-05-14 22:35:07 +03:00
initialization
finalization
FinExam;
end.