This commit is contained in:
Бондарев Иван 2017-10-08 15:11:13 +02:00
parent e7bb339d8e
commit bab33a265b
10 changed files with 783 additions and 752 deletions

View file

@ -38,9 +38,13 @@ namespace CodeCompletion
int i = 0;
foreach (string s in files)
{
string fname = Path.GetFileNameWithoutExtension(s);
if (fname == "__RedirectIOMode" || fname == "__RunMode" || fname == "PABCExtensions")
continue;
SymInfo si = new SymInfo(Path.GetFileNameWithoutExtension(s), SymbolKind.Namespace, null);
si.IsUnitNamespace = true;
si.description = GetUnitDescription(s);
standard_units[i++] = si;
}
}
@ -50,6 +54,23 @@ namespace CodeCompletion
}
}
private string GetUnitDescription(string fileName)
{
var reader = File.OpenText(fileName);
string line = null;
string doc = "";
while (!reader.EndOfStream)
{
line = reader.ReadLine();
if (line.StartsWith("///"))
doc += line.Substring(3) + Environment.NewLine;
else if (line.StartsWith("unit"))
break;
}
reader.Close();
return doc;
}
bool ICodeCompletionDomConverter.IsCompiled
{
get

View file

@ -79,7 +79,7 @@ namespace VisualPascalABC
{
if (!dict.ContainsKey(si))
dict[si] = data;
if (!dict2.ContainsKey(si.description))
if (!string.IsNullOrEmpty(si.description) && !dict2.ContainsKey(si.description))
dict2[si.description] = data;
}

View file

@ -137,7 +137,7 @@ namespace VisualPascalABC
if (VisualPABCSingleton.MainForm.UserOptions.CodeCompletionDot)
{
PascalABCCompiler.Parsers.KeywordKind keyw = KeywordChecker.TestForKeyword(editor.Document.TextContent, editor.ActiveTextAreaControl.TextArea.Caret.Offset - 1);
if (keyw == PascalABCCompiler.Parsers.KeywordKind.New || VisualPABCSingleton.MainForm.UserOptions.EnableSmartIntellisense && keyw == PascalABCCompiler.Parsers.KeywordKind.Uses)
if (keyw == PascalABCCompiler.Parsers.KeywordKind.New || keyw == PascalABCCompiler.Parsers.KeywordKind.Uses)
{
completionDataProvider = new CodeCompletionProvider();
codeCompletionWindow = PABCNETCodeCompletionWindow.ShowCompletionWindow(

View file

@ -451,7 +451,13 @@ namespace VisualPascalABC
if (new_space)
mis = dconv.GetTypes(e, line, col, out sel_si);
else if (keyw == PascalABCCompiler.Parsers.KeywordKind.Uses && mis == null)
mis = dconv.GetNamespaces();
{
if (WorkbenchServiceFactory.Workbench.UserOptions.EnableSmartIntellisense)
mis = dconv.GetNamespaces();
else
mis = CodeCompletion.DomConverter.standard_units;
}
else
if (!ctrl_space)
{

View file

@ -1,3 +1,5 @@
// Copyright (©) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit Graph3D;
{$reference 'PresentationFramework.dll'}

View file

@ -1,4 +1,6 @@
///Основной модуль графики
// Copyright (©) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
///Основной модуль графики
unit GraphWPF;
interface
@ -28,21 +30,21 @@ var CountVisuals := 0;
procedure Invoke(d: System.Delegate; params args: array of object);
type
/// Тип клавиши
/// Тип клавиши
Key = System.Windows.Input.Key;
/// Цветовые константы
/// Цветовые константы
Colors = System.Windows.Media.Colors;
/// Тип цвета
/// Тип цвета
Color = System.Windows.Media.Color;
/// Тип цвета
/// Тип цвета
GColor = System.Windows.Media.Color;
/// Тип прямоугольника
/// Тип прямоугольника
GRect = System.Windows.Rect;
GWindow = Window;
GPen = System.Windows.Media.Pen;
GPoint = System.Windows.Point;
GBrush = System.Windows.Media.Brush;
/// Тип стиля шрифта
/// Тип стиля шрифта
FontStyle = (Normal,Bold,Italic,BoldItalic);
///!#
@ -51,7 +53,7 @@ type
c := Colors.White;
function BrushConstruct := new SolidColorBrush(c);
public
/// Цвет кисти
/// Цвет кисти
property Color: GColor read c write c;
end;
@ -67,13 +69,13 @@ type
Result.LineJoin := PenLineJoin.Round;
end;
public
/// Цвет пера
/// Цвет пера
property Color: GColor read c write c;
/// Ширина пера
/// Ширина пера
property Width: real read th write th;
/// Текущая координата X пера
/// Текущая координата X пера
property X: real read fx;
/// Текущая координата Y пера
/// Текущая координата Y пера
property Y: real read fy;
end;
@ -101,13 +103,13 @@ type
function TypefaceClone := tf;
function BrushConstruct := new SolidColorBrush(c);
public
/// Цвет шрифта
/// Цвет шрифта
property Color: GColor read c write c;
/// Имя шрифта
/// Имя шрифта
property Name: string read GetName write SetName;
/// Размер шрифта в единицах по 1/96 дюйма
/// Размер шрифта в единицах по 1/96 дюйма
property Size: real read sz write sz;
/// Стиль шрифта
/// Стиль шрифта
property Style: FontStyle write SetFS;
end;
@ -125,268 +127,268 @@ type
procedure SetCaption(c: string);
function GetCaption: string;
public
/// Отступ графического окна от левого края экрана
/// Отступ графического окна от левого края экрана
property Left: real read GetLeft write SetLeft;
/// Отступ графического окна от верхнего края экрана
/// Отступ графического окна от верхнего края экрана
property Top: real read GetTop write SetTop;
/// Ширина клиентской части графического окна
/// Ширина клиентской части графического окна
property Width: real read GetWidth write SetWidth;
/// Высота клиентской части графического окна
/// Высота клиентской части графического окна
property Height: real read GetHeight write SetHeight;
/// Заголовок графического окна
/// Заголовок графического окна
property Caption: string read GetCaption write SetCaption;
/// Заголовок графического окна
/// Заголовок графического окна
property Title: string read GetCaption write SetCaption;
/// Очищает графическое окно белым цветом
/// Очищает графическое окно белым цветом
procedure Clear;
/// Очищает графическое окно цветом c
/// Очищает графическое окно цветом c
procedure Clear(c: Color);
/// Устанавливает размеры клиентской части графического окна
/// Устанавливает размеры клиентской части графического окна
procedure SetSize(w, h: real);
/// Устанавливает отступ графического окна от левого верхнего края экрана
/// Устанавливает отступ графического окна от левого верхнего края экрана
procedure SetPos(l, t: real);
/// Сохраняет содержимое графического окна в файл с именем fname
/// Сохраняет содержимое графического окна в файл с именем fname
procedure Save(fname: string);
/// Восстанавливает содержимое графического окна из файла с именем fname
/// Восстанавливает содержимое графического окна из файла с именем fname
procedure Load(fname: string);
/// Заполняет содержимое графического окна обоями из файла с именем fname
/// Заполняет содержимое графического окна обоями из файла с именем fname
procedure Fill(fname: string);
/// Закрывает графическое окно и завершает приложение
/// Закрывает графическое окно и завершает приложение
procedure Close;
/// Сворачивает графическое окно
/// Сворачивает графическое окно
procedure Minimize;
/// Максимизирует графическое окно
/// Максимизирует графическое окно
procedure Maximize;
/// Возвращает графическое окно к нормальному размеру
/// Возвращает графическое окно к нормальному размеру
procedure Normalize;
/// Центрирует графическое окно по центру экрана
/// Центрирует графическое окно по центру экрана
procedure CenterOnScreen;
/// Возвращает центр графического окна
/// Возвращает центр графического окна
function Center: Point;
/// Возвращает прямоугольник клиентской области окна
/// Возвращает прямоугольник клиентской области окна
function ClientRect: GRect;
end;
/// Виды системы координат
/// Виды системы координат
CoordType = (MathematicalCoords,ScreenCoords);
/// Константы выравнивания текста относительно точки
/// Константы выравнивания текста относительно точки
Alignment = (LeftTop,CenterTop,RightTop,LeftCenter,Center,RightCenter,LeftBottom,CenterBottom,RightBottom);
/// Рисует эллипс с центром в точке (x,y) и радиусами rx и ry
/// Рисует эллипс с центром в точке (x,y) и радиусами rx и ry
procedure Ellipse(x,y,rx,ry: real);
/// Рисует контур эллипса с центром в точке (x,y) и радиусами rx и ry
/// Рисует контур эллипса с центром в точке (x,y) и радиусами rx и ry
procedure DrawEllipse(x,y,rx,ry: real);
/// Рисует внутренность эллипса с центром в точке (x,y) и радиусами rx и ry
/// Рисует внутренность эллипса с центром в точке (x,y) и радиусами rx и ry
procedure FillEllipse(x,y,rx,ry: real);
/// Рисует эллипс с центром в точке (x,y), радиусами rx и ry и цветом внутренности c
/// Рисует эллипс с центром в точке (x,y), радиусами rx и ry и цветом внутренности c
procedure Ellipse(x,y,rx,ry: real; c: Color);
/// Рисует контур эллипса с центром в точке (x,y), радиусами rx и ry и цветом c
/// Рисует контур эллипса с центром в точке (x,y), радиусами rx и ry и цветом c
procedure DrawEllipse(x,y,rx,ry: real; c: Color);
/// Рисует внутренность эллипса с центром в точке (x,y), радиусами rx и ry и цветом c
/// Рисует внутренность эллипса с центром в точке (x,y), радиусами rx и ry и цветом c
procedure FillEllipse(x,y,rx,ry: real; c: Color);
/// Рисует окружность с центром в точке (x,y) и радиусом r
/// Рисует окружность с центром в точке (x,y) и радиусом r
procedure Circle(x,y,r: real);
/// Рисует контур окружности с центром в точке (x,y) и радиусом r
/// Рисует контур окружности с центром в точке (x,y) и радиусом r
procedure DrawCircle(x,y,r: real);
/// Рисует внутренность окружности с центром в точке (x,y) и радиусом r
/// Рисует внутренность окружности с центром в точке (x,y) и радиусом r
procedure FillCircle(x,y,r: real);
/// Рисует окружность с центром в точке (x,y), радиусом r и цветом c
/// Рисует окружность с центром в точке (x,y), радиусом r и цветом c
procedure Circle(x,y,r: real; c: Color);
/// Рисует контур окружности с центром в точке (x,y), радиусом r и цветом c
/// Рисует контур окружности с центром в точке (x,y), радиусом r и цветом c
procedure DrawCircle(x,y,r: real; c: Color);
/// Рисует внутренность окружности с центром в точке (x,y), радиусом r и цветом c
/// Рисует внутренность окружности с центром в точке (x,y), радиусом r и цветом c
procedure FillCircle(x,y,r: real; c: Color);
/// Рисует прямоугольник с координатами вершин (x,y) и (x+w,y+h)
/// Рисует прямоугольник с координатами вершин (x,y) и (x+w,y+h)
procedure Rectangle(x,y,w,h: real);
/// Рисует контур прямоугольника с координатами вершин (x,y) и (x+w,y+h)
/// Рисует контур прямоугольника с координатами вершин (x,y) и (x+w,y+h)
procedure DrawRectangle(x,y,w,h: real);
/// Рисует внутренность прямоугольника с координатами вершин (x,y) и (x+w,y+h)
/// Рисует внутренность прямоугольника с координатами вершин (x,y) и (x+w,y+h)
procedure FillRectangle(x,y,w,h: real);
/// Рисует прямоугольник с координатами вершин (x,y) и (x+w,y+h) цветом c
/// Рисует прямоугольник с координатами вершин (x,y) и (x+w,y+h) цветом c
procedure Rectangle(x,y,w,h: real; c: Color);
/// Рисует контур прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c
/// Рисует контур прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c
procedure DrawRectangle(x,y,w,h: real; c: Color);
/// Рисует внутренность прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c
/// Рисует внутренность прямоугольника с координатами вершин (x,y) и (x+w,y+h) цветом c
procedure FillRectangle(x,y,w,h: real; c: Color);
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX
procedure Arc(x, y, r, angle1, angle2: real);
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенную между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure Arc(x, y, r, angle1, angle2: real; c: Color);
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX
procedure Sector(x, y, r, angle1, angle2: real);
/// Рисует контур сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX
/// Рисует контур сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX
procedure DrawSector(x, y, r, angle1, angle2: real);
/// Рисует внутренность сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX
/// Рисует внутренность сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX
procedure FillSector(x, y, r, angle1, angle2: real);
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенный между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure Sector(x, y, r, angle1, angle2: real; c: Color);
/// Рисует контур сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
/// Рисует контур сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure DrawSector(x, y, r, angle1, angle2: real; c: Color);
/// Рисует внутренность сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
/// Рисует внутренность сектора окружности с центром в точке (x,y) и радиусом r, заключенного между двумя лучами, образующими углы angle1 и angle2 с осью OX, цветом c
procedure FillSector(x, y, r, angle1, angle2: real; c: Color);
/// Рисует отрезок прямой от точки (x,y) до точки (x1,y1)
/// Рисует отрезок прямой от точки (x,y) до точки (x1,y1)
procedure Line(x,y,x1,y1: real);
/// Рисует отрезок прямой от точки (x,y) до точки (x1,y1) цветом c
/// Рисует отрезок прямой от точки (x,y) до точки (x1,y1) цветом c
procedure Line(x,y,x1,y1: real; c: Color);
/// Устанавливает текущую позицию рисования в точку (x,y)
/// Устанавливает текущую позицию рисования в точку (x,y)
procedure MoveTo(x,y: real);
/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y)
/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y)
procedure LineTo(x,y: real);
/// Перемещает текущую позицию рисования на вектор (dx,dy)
/// Перемещает текущую позицию рисования на вектор (dx,dy)
procedure MoveRel(dx,dy: real);
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
procedure LineRel(dx,dy: real);
/// Перемещает текущую позицию рисования на вектор (dx,dy)
/// Перемещает текущую позицию рисования на вектор (dx,dy)
procedure MoveOn(dx,dy: real);
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
/// Рисует отрезок от текущей позиции до точки, смещённой на вектор (dx,dy). Текущая позиция переносится в новую точку
procedure LineOn(dx,dy: real);
/// Рисует ломаную, заданную массивом точек
/// Рисует ломаную, заданную массивом точек
procedure PolyLine(points: array of Point);
/// Рисует ломаную заданную массивом точек и цветом
/// Рисует ломаную заданную массивом точек и цветом
procedure PolyLine(points: array of Point; c: Color);
/// Рисует многоугольник, заданный массивом точек
/// Рисует многоугольник, заданный массивом точек
procedure Polygon(points: array of Point);
/// Рисует контур многоугольника, заданного массивом точек
/// Рисует контур многоугольника, заданного массивом точек
procedure DrawPolygon(points: array of Point);
/// Рисует внутренность многоугольника, заданного массивом точек
/// Рисует внутренность многоугольника, заданного массивом точек
procedure FillPolygon(points: array of Point);
/// Рисует многоугольник, заданный массивом точек и цветом
/// Рисует многоугольник, заданный массивом точек и цветом
procedure Polygon(points: array of Point; c: Color);
/// Рисует контур многоугольника, заданного массивом точек и цветом
/// Рисует контур многоугольника, заданного массивом точек и цветом
procedure DrawPolygon(points: array of Point; c: GColor);
/// Рисует внутренность многоугольника, заданного массивом точек и цветом
/// Рисует внутренность многоугольника, заданного массивом точек и цветом
procedure FillPolygon(points: array of Point; c: GColor);
/// Рисует изображение из файла fname в позиции (x,y)
/// Рисует изображение из файла fname в позиции (x,y)
procedure DrawImage(x,y: real; fname: string);
/// Рисует изображение из файла fname в позиции (x,y) размера w на h
/// Рисует изображение из файла fname в позиции (x,y) размера w на h
procedure DrawImage(x,y,w,h: real; fname: string);
/// Рисует немасштабированное изображение из файла fname в позиции (x,y)
/// Рисует немасштабированное изображение из файла fname в позиции (x,y)
procedure DrawImageUnscaled(x,y: real; fname: string);
/// Выводит видеоиз файла fname в позицию (x,y)
/// Выводит видеоиз файла fname в позицию (x,y)
procedure DrawVideo(x,y: real; fname: string);
/// Ширина изображения в пикселах
/// Ширина изображения в пикселах
function ImageWidth(fname: string): integer;
/// Высота изображения в пикселах
/// Высота изображения в пикселах
function ImageHeight(fname: string): integer;
/// Размер изображения в пикселах
/// Размер изображения в пикселах
function ImageSize(fname: string): (integer,integer);
/// Ширина текста при выводе
/// Ширина текста при выводе
function TextWidth(text: string): real;
/// Высота текста при выводе
/// Высота текста при выводе
function TextHeight(text: string): real;
/// Размер текста при выводе
/// Размер текста при выводе
function TextSize(text: string): Size;
/// Текущая кисть
/// Текущая кисть
var Brush: BrushType;
/// Текущее перо
/// Текущее перо
var Pen: PenType;
/// Текущий шрифт
/// Текущий шрифт
var Font: FontType;
/// Текущее окно
/// Текущее окно
var Window: WindowType;
var
/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши
/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши
OnMouseDown: procedure(x, y: real; mousebutton: integer);
/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши
/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши
OnMouseUp: procedure(x, y: real; mousebutton: integer);
/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши
/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши
OnMouseMove: procedure(x, y: real; mousebutton: integer);
/// Событие нажатия клавиши
/// Событие нажатия клавиши
OnKeyDown: procedure(k: Key);
/// Событие отжатия клавиши
/// Событие отжатия клавиши
OnKeyUp: procedure(k: Key);
/// Событие нажатия символьной клавиши
/// Событие нажатия символьной клавиши
OnKeyPress: procedure(ch: char);
/// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255)
/// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255)
function RGB(r,g,b: byte): Color;
/// Возвращает цвет по красной, зеленой и синей составляющей и параметру прозрачности (в диапазоне 0..255)
/// Возвращает цвет по красной, зеленой и синей составляющей и параметру прозрачности (в диапазоне 0..255)
function ARGB(a,r,g,b: byte): Color;
/// Возвращает случайный цвет
/// Возвращает случайный цвет
function RandomColor: Color;
/// Возвращает случайный цвет
/// Возвращает случайный цвет
function clRandom: Color;
/// Возвращает точку с координатами (x,y)
/// Возвращает точку с координатами (x,y)
function Pnt(x,y: real): GPoint;
/// Возвращает прямоугольник с координатами угла (x,y), шириной w и высотой h
/// Возвращает прямоугольник с координатами угла (x,y), шириной w и высотой h
function Rect(x,y,w,h: real): GRect;
/// Возвращает однотонную цветную кисть, заданную цветом
/// Возвращает однотонную цветную кисть, заданную цветом
function ColorBrush(c: Color): GBrush;
/// Возвращает однотонное цветное перо, заданное цветом
/// Возвращает однотонное цветное перо, заданное цветом
function ColorPen(c: Color): GPen;
/// Начать анимацию, основанную на кадре
/// Начать анимацию, основанную на кадре
procedure BeginFrameBasedAnimation(Draw: procedure; frate: integer := 60);
/// Начать анимацию, основанную на кадре
/// Начать анимацию, основанную на кадре
procedure BeginFrameBasedAnimation(Draw: procedure(frame: integer); frate: integer := 60);
/// Завершить анимацию, основанную на кадре
/// Завершить анимацию, основанную на кадре
procedure EndFrameBasedAnimation;
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; text: string; align: Alignment := Alignment.Center);
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; text: string; c: GColor; align: Alignment := Alignment.Center);
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: integer; align: Alignment := Alignment.Center);
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: real; align: Alignment := Alignment.Center);
/// Выводит строку в прямоугольник
/// Выводит строку в прямоугольник
procedure DrawText(r: GRect; text: string; align: Alignment := Alignment.Center);
/// Выводит целое в прямоугольник
/// Выводит целое в прямоугольник
procedure DrawText(r: GRect; number: integer; align: Alignment := Alignment.Center);
/// Выводит вещественное в прямоугольник
/// Выводит вещественное в прямоугольник
procedure DrawText(r: GRect; number: real; align: Alignment := Alignment.Center);
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: integer; c: GColor; align: Alignment := Alignment.Center);
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: real; c: GColor; align: Alignment := Alignment.Center);
/// Выводит строку в прямоугольник
/// Выводит строку в прямоугольник
procedure DrawText(r: GRect; text: string; c: GColor; align: Alignment := Alignment.Center);
/// Выводит целое в прямоугольник
/// Выводит целое в прямоугольник
procedure DrawText(r: GRect; number: integer; c: GColor; align: Alignment := Alignment.Center);
/// Выводит вещественное в прямоугольник
/// Выводит вещественное в прямоугольник
procedure DrawText(r: GRect; number: real; c: GColor; align: Alignment := Alignment.Center);
/// Выводит строку в позицию (x,y)
/// Выводит строку в позицию (x,y)
procedure TextOut(x, y: real; text: string; align: Alignment := Alignment.LeftTop);
/// Выводит строку в позицию (x,y) цветом c
/// Выводит строку в позицию (x,y) цветом c
procedure TextOut(x, y: real; text: string; c: GColor; align: Alignment := Alignment.LeftTop);
/// Выводит целое в позицию (x,y)
/// Выводит целое в позицию (x,y)
procedure TextOut(x, y: real; text: integer; align: Alignment := Alignment.LeftTop);
/// Выводит целое в позицию (x,y) цветом c
/// Выводит целое в позицию (x,y) цветом c
procedure TextOut(x, y: real; text: integer; c: GColor; align: Alignment := Alignment.LeftTop);
/// Выводит вещественное в позицию (x,y)
/// Выводит вещественное в позицию (x,y)
procedure TextOut(x, y: real; text: real; align: Alignment := Alignment.LeftTop);
/// Выводит вещественное в позицию (x,y) цветом c
/// Выводит вещественное в позицию (x,y) цветом c
procedure TextOut(x, y: real; text: real; c: GColor; align: Alignment := Alignment.LeftTop);
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике, задаваемом координатами x1,y1,x2,y2,
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике, задаваемом координатами x1,y1,x2,y2,
procedure DrawGraph(f: real -> real; a, b, min, max, x, y, w, h: real);
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике r
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике r
procedure DrawGraph(f: real -> real; a, b, min, max: real; r: GRect);
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, на полное графическое окно
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, на полное графическое окно
procedure DrawGraph(f: real -> real; a, b, min, max: real);
/// Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике, задаваемом координатами x1,y1,x2,y2,
/// Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике, задаваемом координатами x1,y1,x2,y2,
procedure DrawGraph(f: real -> real; a, b: real; x, y, w, h: real);
/// Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике r
/// Рисует график функции f, заданной на отрезке [a,b], в прямоугольнике r
procedure DrawGraph(f: real -> real; a, b: real; r: GRect);
/// Рисует график функции f, заданной на отрезке [-5,5], в прямоугольнике r
/// Рисует график функции f, заданной на отрезке [-5,5], в прямоугольнике r
procedure DrawGraph(f: real -> real; r: GRect);
/// Рисует график функции f, заданной на отрезке [a,b], на полное графическое окно
/// Рисует график функции f, заданной на отрезке [a,b], на полное графическое окно
procedure DrawGraph(f: real -> real; a, b: real);
/// Рисует график функции f, заданной на отрезке [-5,5], на полное графическое окно
/// Рисует график функции f, заданной на отрезке [-5,5], на полное графическое окно
procedure DrawGraph(f: real -> real);
procedure SetMathematicCoords(x1: real := -10; x2: real := 10; drawcoords: boolean := true);
@ -497,7 +499,7 @@ end;
function ScaleToDevice: (real,real);
begin
var pSource := PresentationSource.FromVisual(MainWindow);
if pSource = nil then // не знаю, почему
if pSource = nil then // не знаю, почему
begin
Result := (1.0,1.0);
exit
@ -668,7 +670,7 @@ function ImageHeight(fname: string) := Invoke&<integer>(ImHelper.Create(fname).I
function ImageSize(fname: string) := Invoke&<(integer,integer)>(ImHelper.Create(fname).ISz);
// Нет свойств посмотреть размеры видео!
// Нет свойств посмотреть размеры видео!
procedure DrawVideoP(x,y,w,h: real; fname: string);
begin
var dc := GetDC();
@ -679,7 +681,7 @@ begin
dc.Close();
end;
// А теперь займёмся полигонами...
// А теперь займёмся полигонами...
procedure DrawPolygonOrPolyline(Self: DrawingContext;
b: GBrush; p: GPen; points: array of Point; draw_polygon: boolean); extensionmethod;
begin
@ -808,11 +810,11 @@ procedure Rectangle(x,y,w,h: real; c: GColor) := InvokeVisual(RectanglePC,x,y,w,
procedure DrawRectangle(x,y,w,h: real; c: GColor) := InvokeVisual(DrawRectanglePC,x,y,w,h,c);
procedure FillRectangle(x,y,w,h: real; c: GColor) := InvokeVisual(FillRectanglePC,x,y,w,h,c);
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы angle1 и angle2 с осью OX (angle1 и angle2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)
/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы angle1 и angle2 с осью OX (angle1 и angle2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)
procedure Arc(x, y, r, angle1, angle2: real) := InvokeVisual(ArcP,x, y, r, angle1, angle2);
procedure Arc(x, y, r, angle1, angle2: real; c: GColor) := InvokeVisual(ArcPC,x, y, r, angle1, angle2, c);
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы angle1 и angle2 с осью OX (angle1 и angle2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)
/// Рисует сектор окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы angle1 и angle2 с осью OX (angle1 и angle2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки)
procedure Sector(x, y, r, angle1, angle2: real) := InvokeVisual(SectorP,x, y, r, angle1, angle2);
procedure DrawSector(x, y, r, angle1, angle2: real) := InvokeVisual(DrawSectorP,x, y, r, angle1, angle2);
procedure FillSector(x, y, r, angle1, angle2: real) := InvokeVisual(FillSectorP,x, y, r, angle1, angle2);
@ -849,11 +851,11 @@ procedure DrawImage(x,y,w,h: real; fname: string) := InvokeVisual(DrawImageWHP,x
procedure DrawImageUnscaled(x,y: real; fname: string) := InvokeVisual(DrawImageUnscaledP,x,y,fname);
procedure DrawVideo(x,y: real; fname: string) := InvokeVisual(DrawVideoP,x,y,fname);
/// Ширина текста при выводе
/// Ширина текста при выводе
function TextWidth(text: string) := Invoke&<real>(TextV.Create(text).TextWidth);
/// Высота текста при выводе
/// Высота текста при выводе
function TextHeight(text: string) := Invoke&<real>(TextV.Create(text).TextHeight);
/// Размер текста при выводе
/// Размер текста при выводе
function TextSize(text: string): Size := Invoke&<Size>(TextV.Create(text).TextSize);
procedure TextOutHelper(x,y: real; text: string) := InvokeVisual(DrawTextP,x,y,text);
@ -887,7 +889,7 @@ begin
end;
// Println(dw,dh);
case align of
Alignment.LeftTop: {ничего};
Alignment.LeftTop: {ничего};
Alignment.LeftCenter: y += dh;
Alignment.LeftBottom: y += 2*dh;
Alignment.CenterTop: x += dw;
@ -903,37 +905,37 @@ begin
Alignment.LeftBottom, Alignment.CenterBottom, Alignment.RightBottom: y -= h;
end;
end;
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; text: string; align: Alignment);
begin
DrawTextHelper(x, y, w, h, text,align);
TextOutHelper(x,y,text)
end;
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит строку в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; text: string; c: GColor; align: Alignment);
begin
DrawTextHelper(x, y, w, h,text,align);
TextOutHelper(x,y,text,c)
end;
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: integer; align: Alignment) := DrawText(x, y, w, h, '' + number,align);
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: real; align: Alignment) := DrawText(x, y, w, h, '' + number,align);
/// Выводит строку в прямоугольник
/// Выводит строку в прямоугольник
procedure DrawText(r: GRect; text: string; align: Alignment) := DrawText(r.x,r.y,r.Width,r.Height,text,align);
/// Выводит целое в прямоугольник
/// Выводит целое в прямоугольник
procedure DrawText(r: GRect; number: integer; align: Alignment) := DrawText(r.x,r.y,r.Width,r.Height,number,align);
/// Выводит вещественное в прямоугольник
/// Выводит вещественное в прямоугольник
procedure DrawText(r: GRect; number: real; align: Alignment) := DrawText(r.x,r.y,r.Width,r.Height,number,align);
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит целое в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: integer; c: GColor; align: Alignment) := DrawText(x, y, w, h, '' + number,c,align);
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
/// Выводит вещественное в прямоугольник к координатами левого верхнего угла (x,y)
procedure DrawText(x, y, w, h: real; number: real; c: GColor; align: Alignment) := DrawText(x, y, w, h, '' + number,c,align);
/// Выводит строку в прямоугольник
/// Выводит строку в прямоугольник
procedure DrawText(r: GRect; text: string; c: GColor; align: Alignment) := DrawText(r.x,r.y,r.Width,r.Height,text,c,align);
/// Выводит целое в прямоугольник
/// Выводит целое в прямоугольник
procedure DrawText(r: GRect; number: integer; c: GColor; align: Alignment) := DrawText(r.x,r.y,r.Width,r.Height,number,c,align);
/// Выводит вещественное в прямоугольник
/// Выводит вещественное в прямоугольник
procedure DrawText(r: GRect; number: real; c: GColor; align: Alignment) := DrawText(r.x,r.y,r.Width,r.Height,number,c,align);
{function ConvertAlign(align: Alignment): Alignment;
@ -970,7 +972,7 @@ type
function RealToScreenY(y: real) := y1 - my * (y + min);
end;
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике, задаваемом параметрами x,y,w,h,
/// Рисует график функции f, заданной на отрезке [a,b] по оси абсцисс и на отрезке [min,max] по оси ординат, в прямоугольнике, задаваемом параметрами x,y,w,h,
procedure DrawGraph(f: real-> real; a, b, min, max, x, y, w, h: real);
begin
var coefx := w / (b - a);
@ -978,7 +980,7 @@ begin
var fso := new FS(coefx, coefy, a, min, max, x, y, f);
// Линии
// Линии
{Pen.Color := Color.LightGray;
var hx := 1.0;
@ -1015,7 +1017,7 @@ begin
yy -= hy
end;
// Оси
// Оси
Pen.Color := Color.Blue;
var x0 := fso.RealToScreenX(0);
@ -1024,7 +1026,7 @@ begin
Line(x0,y1,x0,y2);
Line(x1,y0,x2,y0);}
// График
// График
Pen.Color := Colors.Black;
Rectangle(x, y, w, h);
@ -1090,7 +1092,7 @@ procedure WindowType.Clear := app.Dispatcher.Invoke(WindowTypeClearP);
procedure WindowType.Clear(c: Color);
begin
raise new System.NotImplementedException('WindowType.Clear(c) пока не реализовано. Честное слово - в будущем!')
raise new System.NotImplementedException('WindowType.Clear(c) пока не реализовано. Честное слово - в будущем!')
end;
procedure WindowTypeSetSizeP(w, h: real);
@ -1168,7 +1170,7 @@ function YMax := YOrigin/GlobalScale;
procedure DrawGridP;
begin
if CurrentCoordType = ScreenCoords then
raise new Exception('Рисование координатной сетки возможно только в математическом режиме');
raise new Exception('Рисование координатной сетки возможно только в математическом режиме');
var xfrom := Round(XMin);
var xto := Round(XMax);
@ -1218,7 +1220,7 @@ begin
// 0 x0 Window.Width
GlobalScale := Window.Width/(x2-x1);
XOrigin := -x1*GlobalScale;
// -ymin*scale - сколько надо отступить от низа окна
// -ymin*scale - сколько надо отступить от низа окна
// Window.Height + ymin*scale
YOrigin := Window.Height + ymin*GlobalScale;
SetMathematicCoordsScaleP(XOrigin,YOrigin,GlobalScale);
@ -1237,7 +1239,7 @@ begin
GlobalScale := scale;
var m: Transform := new MatrixTransform(scale,0,0,scale,x0,y0);
Host.RenderTransform := m;
Pen.Width := Pen.Width * scale; // нет!
Pen.Width := Pen.Width * scale; // нет!
end;
procedure SetStandardCoords(scale,x0,y0: real) := Invoke(SetStandardCoordsP,scale,x0,y0);
@ -1299,7 +1301,7 @@ var mre := new ManualResetEvent(false);
var OnDraw: procedure := nil;
var OnDraw1: procedure(frame: integer) := nil;
var FrameRate := 60; // кадров в секунду. Можно меньше!
var FrameRate := 60; // кадров в секунду. Можно меньше!
var LastUpdatedTime := new System.TimeSpan(integer.MinValue);
var FrameNum := 0;
@ -1310,13 +1312,13 @@ begin
begin
var e1 := RenderingEventArgs(e).RenderingTime;
var dt := e1 - LastUpdatedTime;
var delta := 1000/Framerate; // через какое время обновлять
var delta := 1000/Framerate; // через какое время обновлять
if dt.TotalMilliseconds < delta then
exit
else LastUpdatedTime := e1;
FrameNum += 1;
Window.Clear;
CountVisuals := integer.MinValue; // чтобы не было паузы после 1000 объектов
CountVisuals := integer.MinValue; // чтобы не было паузы после 1000 объектов
end;
if OnDraw<>nil then
OnDraw()
@ -1362,7 +1364,7 @@ begin
Font := new FontType;
Window := new WindowType;
MainWindow.Title := 'Графика WPF';
MainWindow.Title := 'Графика WPF';
var (w,h) := (800,600);
(MainWindow.Width, MainWindow.Height) := (w + wplus, h + hplus);
@ -1390,5 +1392,5 @@ begin
MainFormThread.SetApartmentState(ApartmentState.STA);
MainFormThread.Start;
mre.WaitOne; // Основная программа не начнется пока не будут инициализированы все компоненты приложения
mre.WaitOne; // Основная программа не начнется пока не будут инициализированы все компоненты приложения
end.

View file

@ -1,16 +1,16 @@
/// Модуль электронного задачника Programming Taskbook 4
/// Модуль электронного задачника Programming Taskbook 4
unit PT4;
//------------------------------------------------------------------------------
// Модуль для подключения задачника Programming Taskbook
// Версия 4.15
// Copyright (c) 2006-2008 DarkStar, SSM
// Copyright (c) 2010 М.Э.Абрамян, дополнения к версии 1.3
// Copyright (c) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13
// Copyright (c) 2015 М.Э.Абрамян, дополнения к версии 4.14
// Copyright (c) 2016 М.Э.Абрамян, дополнения к версии 4.15
// Copyright (c) 2017 М.Э.Абрамян, дополнения к версии 4.17
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017
// Модуль для подключения задачника Programming Taskbook
// Версия 4.15
// Copyright (©) 2006-2008 DarkStar, SSM
// Copyright (©) 2010 М.Э.Абрамян, дополнения к версии 1.3
// Copyright (©) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13
// Copyright (©) 2015 М.Э.Абрамян, дополнения к версии 4.14
// Copyright (©) 2016 М.Э.Абрамян, дополнения к версии 4.15
// Copyright (©) 2017 М.Э.Абрамян, дополнения к версии 4.17
// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2017
//------------------------------------------------------------------------------
{$apptype windows}
@ -22,9 +22,9 @@ uses System,
System.Collections,
System.Runtime.InteropServices;
type
/// Тип указателя на узел списка
/// Тип указателя на узел списка
PNode = ^TNode;
/// Тип узла списка
/// Тип узла списка
TNode = record
Data: integer;
Next,Prev,Left,Right,Parent: PNode;
@ -80,240 +80,240 @@ type
property Data: integer read getData write SetData;
end;
/// Вывести формулировку задания
/// Вывести формулировку задания
procedure Task(name: string);
/// Ввести и вернуть значение целого типа
/// Ввести и вернуть значение целого типа
function GetInt: integer;
/// Ввести и вернуть значение целого типа
/// Ввести и вернуть значение целого типа
function GetInteger: integer;
/// Ввести и вернуть значение вещественного типа
/// Ввести и вернуть значение вещественного типа
function GetReal: real;
/// Ввести и вернуть значение вещественного типа
/// Ввести и вернуть значение вещественного типа
function GetDouble: real;
/// Ввести и вернуть значение символьного типа
/// Ввести и вернуть значение символьного типа
function GetChar: char;
/// Ввести и вернуть значение строкового типа
/// Ввести и вернуть значение строкового типа
function GetString: string;
/// Ввести и вернуть значение логического типа
/// Ввести и вернуть значение логического типа
function GetBool: boolean;
/// Ввести и вернуть значение логического типа
/// Ввести и вернуть значение логического типа
function GetBoolean: boolean;
/// Ввести и вернуть значение типа Node
/// Ввести и вернуть значение типа Node
function GetNode: Node;
/// Ввести и вернуть значение типа PNode
/// Ввести и вернуть значение типа PNode
function GetPNode: PNode;
/// Возвращает введенное значение типа integer
/// Возвращает введенное значение типа integer
function ReadInteger: integer;
/// Возвращает введенное значение типа real
/// Возвращает введенное значение типа real
function ReadReal: real;
/// Возвращает введенное значение типа char
/// Возвращает введенное значение типа char
function ReadChar: char;
/// Возвращает введенное значение типа string
/// Возвращает введенное значение типа string
function ReadString: string;
/// Возвращает введенное значение типа boolean
/// Возвращает введенное значение типа boolean
function ReadBoolean: boolean;
/// Возвращает введенное значение типа PNode
/// Возвращает введенное значение типа PNode
function ReadPNode: PNode;
/// Возвращает введенное значение типа Node
/// Возвращает введенное значение типа Node
function ReadNode: Node;
/// Возвращает введенное значение типа integer
/// Возвращает введенное значение типа integer
function ReadlnInteger: integer;
/// Возвращает введенное значение типа real
/// Возвращает введенное значение типа real
function ReadlnReal: real;
/// Возвращает введенное значение типа char
/// Возвращает введенное значение типа char
function ReadlnChar: char;
/// Возвращает введенное значение типа string
/// Возвращает введенное значение типа string
function ReadlnString: string;
/// Возвращает введенное значение типа boolean
/// Возвращает введенное значение типа boolean
function ReadlnBoolean: boolean;
/// Возвращает введенное значение типа PNode
/// Возвращает введенное значение типа PNode
function ReadlnPNode: PNode;
/// Возвращает введенное значение типа Node
/// Возвращает введенное значение типа Node
function ReadlnNode: Node;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
function ReadInteger(prompt: string): integer;
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
function ReadReal(prompt: string): real;
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
function ReadChar(prompt: string): char;
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
function ReadString(prompt: string): string;
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadBoolean(prompt: string): boolean;
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
function ReadPNode(prompt: string): PNode;
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
function ReadNode(prompt: string): Node;
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа integer.
/// Строковое приглашение prompt игнорируется
function ReadlnInteger(prompt: string): integer;
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа real.
/// Строковое приглашение prompt игнорируется
function ReadlnReal(prompt: string): real;
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа char.
/// Строковое приглашение prompt игнорируется
function ReadlnChar(prompt: string): char;
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа string.
/// Строковое приглашение prompt игнорируется
function ReadlnString(prompt: string): string;
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadlnBoolean(prompt: string): boolean;
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа PNode.
/// Строковое приглашение prompt игнорируется
function ReadlnPNode(prompt: string): PNode;
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает введенное значение типа Node.
/// Строковое приглашение prompt игнорируется
function ReadlnNode(prompt: string): Node;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
// == Версия 4.17. Дополнения ==
// == Версия 4.17. Дополнения ==
/// Возвращает кортеж из двух введенных значений типа integer
/// Возвращает кортеж из двух введенных значений типа integer
function ReadInteger2: (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real
/// Возвращает кортеж из двух введенных значений типа real
function ReadReal2: (real, real);
/// Возвращает кортеж из двух введенных значений типа char
/// Возвращает кортеж из двух введенных значений типа char
function ReadChar2: (char, char);
/// Возвращает кортеж из двух введенных значений типа string
/// Возвращает кортеж из двух введенных значений типа string
function ReadString2: (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean
/// Возвращает кортеж из двух введенных значений типа boolean
function ReadBoolean2: (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node
/// Возвращает кортеж из двух введенных значений типа Node
function ReadNode2: (Node, Node);
/// Возвращает кортеж из двух введенных значений типа integer
/// Возвращает кортеж из двух введенных значений типа integer
function ReadlnInteger2: (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real
/// Возвращает кортеж из двух введенных значений типа real
function ReadlnReal2: (real, real);
/// Возвращает кортеж из двух введенных значений типа char
/// Возвращает кортеж из двух введенных значений типа char
function ReadlnChar2: (char, char);
/// Возвращает кортеж из двух введенных значений типа string
/// Возвращает кортеж из двух введенных значений типа string
function ReadlnString2: (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean
/// Возвращает кортеж из двух введенных значений типа boolean
function ReadlnBoolean2: (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node
/// Возвращает кортеж из двух введенных значений типа Node
function ReadlnNode2: (Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer
/// Возвращает кортеж из трех введенных значений типа integer
function ReadInteger3: (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real
/// Возвращает кортеж из трех введенных значений типа real
function ReadReal3: (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char
/// Возвращает кортеж из трех введенных значений типа char
function ReadChar3: (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string
/// Возвращает кортеж из трех введенных значений типа string
function ReadString3: (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean
/// Возвращает кортеж из трех введенных значений типа boolean
function ReadBoolean3: (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node
/// Возвращает кортеж из трех введенных значений типа Node
function ReadNode3: (Node, Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer
/// Возвращает кортеж из трех введенных значений типа integer
function ReadlnInteger3: (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real
/// Возвращает кортеж из трех введенных значений типа real
function ReadlnReal3: (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char
/// Возвращает кортеж из трех введенных значений типа char
function ReadlnChar3: (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string
/// Возвращает кортеж из трех введенных значений типа string
function ReadlnString3: (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean
/// Возвращает кортеж из трех введенных значений типа boolean
function ReadlnBoolean3: (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node
/// Возвращает кортеж из трех введенных значений типа Node
function ReadlnNode3: (Node, Node, Node);
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadInteger2(prompt: string): (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadReal2(prompt: string): (real, real);
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadChar2(prompt: string): (char, char);
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadString2(prompt: string): (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadBoolean2(prompt: string): (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadNode2(prompt: string): (Node, Node);
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadlnInteger2(prompt: string): (integer, integer);
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadlnReal2(prompt: string): (real, real);
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadlnChar2(prompt: string): (char, char);
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadlnString2(prompt: string): (string, string);
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadlnBoolean2(prompt: string): (boolean, boolean);
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из двух введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadlnNode2(prompt: string): (Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadInteger3(prompt: string): (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadReal3(prompt: string): (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadChar3(prompt: string): (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadString3(prompt: string): (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadBoolean3(prompt: string): (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadNode3(prompt: string): (Node, Node, Node);
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа integer.
/// Строковое приглашение prompt игнорируется
function ReadlnInteger3(prompt: string): (integer, integer, integer);
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа real.
/// Строковое приглашение prompt игнорируется
function ReadlnReal3(prompt: string): (real, real, real);
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа char.
/// Строковое приглашение prompt игнорируется
function ReadlnChar3(prompt: string): (char, char, char);
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа string.
/// Строковое приглашение prompt игнорируется
function ReadlnString3(prompt: string): (string, string, string);
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа boolean.
/// Строковое приглашение prompt игнорируется
function ReadlnBoolean3(prompt: string): (boolean, boolean, boolean);
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
/// Возвращает кортеж из трех введенных значений типа Node.
/// Строковое приглашение prompt игнорируется
function ReadlnNode3(prompt: string): (Node, Node, Node);
// == Версия 4.17. Конец дополнений ==
// == Версия 4.17. Конец дополнений ==
procedure GetR(var param: real);
@ -341,9 +341,9 @@ procedure Put(param: boolean);
procedure Put(param: PNode);
procedure Put(param: Node);
//Ввод этих данных не поддерживается
//Ввод этих данных не поддерживается
///- read(a,b,...)
/// Вводит значения a,b,... из окна электронного задачника
/// Вводит значения a,b,... из окна электронного задачника
procedure read(var x: byte);
///--
procedure read(var x: shortint);
@ -381,21 +381,21 @@ procedure Readln;
procedure Print(params args: array of object);
procedure Println(params args: array of object);
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
procedure Print(s: string);
procedure Println(s: string);
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
/// Освобождает память, выделенную динамически, на которую указывает p
/// Освобождает память, выделенную динамически, на которую указывает p
procedure Dispose(p: pointer);
// Фиктивная пустая процедура - для Intellisense
// Нет, нельзя пользоваться - закрываются процедуры write системного модуля
// Фиктивная пустая процедура - для Intellisense
// Нет, нельзя пользоваться - закрываются процедуры write системного модуля
///- write(a,b,...)
/// Выводит значения a,b,... в окно электронного задачника
/// Выводит значения a,b,... в окно электронного задачника
//procedure write;
///--
@ -403,162 +403,162 @@ procedure __InitModule__;
///--
procedure __FinalizeModule__;
// == Версия 1.3. Дополнения ==
// == Версия 1.3. Дополнения ==
/// Выводит строку S в разделе отладки окна задачника
/// Выводит строку S в разделе отладки окна задачника
procedure Show(S: string);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
procedure Show(S: string; A: integer; W: integer);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций
procedure Show(S: string; A: real; W: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника
/// Выводит число A с комментарием S в разделе отладки окна задачника
procedure Show(S: string; A: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника
/// Выводит число A с комментарием S в разделе отладки окна задачника
procedure Show(S: string; A: real);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
procedure Show(A: integer; W: integer);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций
procedure Show(A: real; W: integer);
/// Выводит число A в разделе отладки окна задачника
/// Выводит число A в разделе отладки окна задачника
procedure Show(A: integer);
/// Выводит число A в разделе отладки окна задачника
/// Выводит число A в разделе отладки окна задачника
procedure Show(A: real);
/// Выполняет переход на новую экранную строку
/// в разделе отладки окна задачника
/// Выполняет переход на новую экранную строку
/// в разделе отладки окна задачника
procedure ShowLine;
/// Выводит строку S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит строку S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(S: string);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: integer; W: integer);
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки
/// окна задачника; для вывода числа отводится W экранных позиций.
/// После вывода данных выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: real; W: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: integer);
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A с комментарием S в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(S: string; A: real);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
procedure ShowLine(A: integer; W: integer);
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника;
/// для вывода отводится W экранных позиций.
/// После вывода числа выполняет переход на новую экранную строку
procedure ShowLine(A: real; W: integer);
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(A: integer);
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
/// Выводит число A в разделе отладки окна задачника,
/// после чего выполняет переход на новую экранную строку
procedure ShowLine(A: real);
/// Настраивает формат вывода вещественных чисел в разделе отладки
/// окна задачника. Если N > 0, то число выводится в формате
/// с фиксированной точкой и N дробными знаками. Если N = 0,
/// то число выводится в экспоненциальном формате, число дробных
/// знаков определяется шириной поля вывода
/// Настраивает формат вывода вещественных чисел в разделе отладки
/// окна задачника. Если N > 0, то число выводится в формате
/// с фиксированной точкой и N дробными знаками. Если N = 0,
/// то число выводится в экспоненциальном формате, число дробных
/// знаков определяется шириной поля вывода
procedure SetPrecision(N: integer);
/// Обеспечивает автоматическое скрытие всех разделов
/// окна задачника, кроме раздела отладки
/// Обеспечивает автоматическое скрытие всех разделов
/// окна задачника, кроме раздела отладки
procedure HideTask;
// == Конец дополнений к версии 1.3 ==
// == Конец дополнений к версии 1.3 ==
// == Версия 4.14. Дополнения ==
// == Версия 4.14. Дополнения ==
/// Вводит n целых чисел
/// и возвращает введенные числа в виде массива
/// Вводит n целых чисел
/// и возвращает введенные числа в виде массива
function ReadArrInteger(n: integer): array of integer;
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде массива
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде массива
function ReadArrReal(n: integer): array of real;
/// Вводит n строк
/// и возвращает введенные строки в виде массива
/// Вводит n строк
/// и возвращает введенные строки в виде массива
function ReadArrString(n: integer): array of string;
/// Вводит n целых чисел
/// и возвращает введенные числа в виде последовательности
/// Вводит n целых чисел
/// и возвращает введенные числа в виде последовательности
function ReadSeqInteger(n: integer): sequence of integer;
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде последовательности
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде последовательности
function ReadSeqReal(n: integer): sequence of real;
/// Вводит n строк
/// и возвращает введенные строки в виде последовательности
/// Вводит n строк
/// и возвращает введенные строки в виде последовательности
function ReadSeqString(n: integer): sequence of string;
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде последовательности
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqInteger(): sequence of integer;
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде последовательности
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqReal(): sequence of real;
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде последовательности
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqString(): sequence of string;
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде массива
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде массива
function ReadArrInteger(): array of integer;
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде массива
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде массива
function ReadArrReal(): array of real;
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде массива
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде массива
function ReadArrString(): array of string;
/// Вводит целую матрицу размера m на n по строкам
/// Вводит целую матрицу размера m на n по строкам
function ReadMatrInteger(m,n: integer): array [,] of integer;
/// Вводит размеры матрицы и затем целую матрицу указанных размеров по строкам
/// Вводит размеры матрицы и затем целую матрицу указанных размеров по строкам
function ReadMatrInteger(): array [,] of integer;
/// Вводит вещественную матрицу размера m на n по строкам
/// Вводит вещественную матрицу размера m на n по строкам
function ReadMatrReal(m,n: integer): array [,] of real;
/// Вводит размеры матрицы и затем вещественную матрицу указанных размеров по строкам
/// Вводит размеры матрицы и затем вещественную матрицу указанных размеров по строкам
function ReadMatrReal(): array [,] of real;
/// Вводит матрицу из строк размера m на n по строкам
/// Вводит матрицу из строк размера m на n по строкам
function ReadMatrString(m,n: integer): array [,] of string;
/// Вводит размеры матрицы и затем строковую матрицу указанных размеров по строкам
/// Вводит размеры матрицы и затем строковую матрицу указанных размеров по строкам
function ReadMatrString(): array [,] of string;
procedure ReadMatr(var m, n: integer; var a: array [,] of integer);
@ -603,7 +603,7 @@ procedure WriteMatr<T>(a: array of array of T);
procedure WriteMatr<T>(a: List<List<T>>);
// == Дополнения 2016.07
// == Дополнения 2016.07
procedure PrintMatr<T>(a: array[,] of T);
@ -611,16 +611,16 @@ procedure PrintMatr<T>(a: array of array of T);
procedure PrintMatr<T>(a: List<List<T>>);
// == Конец дополнений 2016.07
// == Конец дополнений 2016.07
// == Конец дополнений к версии 4.14 ==
// == Конец дополнений к версии 4.14 ==
implementation
const
NotSupportedReadTypeMessage = 'Ввод данных типа {0} не поддерживается';
NotSupportedWriteTypeMessage = 'Вывод данных типа {0} не поддерживается';
eMessage = 'Попытка обращения к объекту Node после вызова его метода Dispose';
NotSupportedReadTypeMessage = 'Ввод данных типа {0} не поддерживается';
NotSupportedWriteTypeMessage = 'Вывод данных типа {0} не поддерживается';
eMessage = 'Попытка обращения к объекту Node после вызова его метода Dispose';
var
loadNodes: ArrayList;
@ -1058,7 +1058,7 @@ begin
end;
// -----------------------------------------------------
// Функции Get
// Функции Get
// -----------------------------------------------------
function GetInt: integer;
var val:integer;
@ -1094,7 +1094,7 @@ end;
function GetString: string;
var val: System.Text.StringBuilder;
begin
val := new System.Text.StringBuilder(200);//TODO почему 200?
val := new System.Text.StringBuilder(200);//TODO почему 200?
_gets(val);
result := val.ToString;
end;
@ -1125,8 +1125,8 @@ var
p: IntPtr;
sNode: InternalNode;
begin
//raise new NotSupportedException('Работа с динамическими структурами задачника PT4 не поддерживается в этой версии компилятора. Исправление ошибки планируется в следуйщей версии');
//result := new PT4Node(sNode, p);// fixme здесь ошибка генерации кода!
//raise new NotSupportedException('Работа с динамическими структурами задачника PT4 не поддерживается в этой версии компилятора. Исправление ошибки планируется в следуйщей версии');
//result := new PT4Node(sNode, p);// fixme здесь ошибка генерации кода!
p := IntPtr.Zero;
sNode.Data := 0;
sNode.Next := IntPtr.Zero;
@ -1225,7 +1225,7 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
function ReadInteger(prompt: string): integer;
begin
@ -1297,9 +1297,9 @@ begin
Result := GetNode;
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
// == Версия 4.17. Дополнения ==
// == Версия 4.17. Дополнения ==
function ReadInteger2: (integer, integer);
begin
@ -1541,11 +1541,11 @@ begin
Result := (GetNode, GetNode, GetNode);
end;
// == Версия 4.17. Конец дополнений ==
// == Версия 4.17. Конец дополнений ==
// -----------------------------------------------------
// Процедуры Put
// Процедуры Put
// -----------------------------------------------------
procedure PutInt(val: integer);
begin
@ -1594,7 +1594,7 @@ begin
end;
// -----------------------------------------------------
// Генерация исключений
// Генерация исключений
// -----------------------------------------------------
procedure RaisePTAndCheckPT(e: Exception);
begin
@ -1719,7 +1719,7 @@ begin
Print(args);
end;
// == Версия 4.15. Дополнения ==
// == Версия 4.15. Дополнения ==
procedure Print(s: string);
begin
@ -1731,7 +1731,7 @@ begin
write(s);
end;
// == Версия 4.15. Конец дополнений ==
// == Версия 4.15. Конец дополнений ==
{procedure write;
begin
@ -1769,7 +1769,7 @@ begin
var ip := IntPtr(PointerOutput(args[i]).p);
_PutP(ip);
end
// == Версия 4.17. Дополнения ==
// == Версия 4.17. Дополнения ==
else if args[i].GetType.FullName.StartsWith('System.Tuple') then
foreach var e in args[i].GetType.GetProperties do
InternalWrite(Arr(e.GetValue(args[i],nil)))
@ -1779,7 +1779,7 @@ begin
while e.MoveNext do
InternalWrite(Arr(e.Current));
end
// == Версия 4.17. Конец дополнений ==
// == Версия 4.17. Конец дополнений ==
else GenerateNotSupportedWriteTypeException(args[i].GetType.ToString);
end;
@ -1815,7 +1815,7 @@ begin
if InfoT=0 then
Console.WriteLine(InfoS);
FreePT;
// == Начало дополнений к версии 4.13 ==
// == Начало дополнений к версии 4.13 ==
var fpt := FinishPT;
if fpt = 1 then exit;
var asm := System.Reflection.Assembly.GetExecutingAssembly;
@ -1864,10 +1864,10 @@ begin
inc(i);
fpt := FinishPT;
end;
// == Конец дополнений к версии 4.13 ==
// == Конец дополнений к версии 4.13 ==
end;
// == Версия 1.3. Дополнения ==
// == Версия 1.3. Дополнения ==
var
D: integer := 2;
@ -1989,9 +1989,9 @@ begin
D := N;
end;
// == Конец дополнений к версии 1.3 ==
// == Конец дополнений к версии 1.3 ==
// == Версия 4.14. Дополнения ==
// == Версия 4.14. Дополнения ==
function ReadSeqInteger(): sequence of integer;
begin
@ -2263,7 +2263,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure WriteAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2272,7 +2272,7 @@ begin
PT4.Put(e);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Write<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2280,14 +2280,14 @@ begin
PT4.Put(e);
end;
/// Выводит элементы динамического массива
/// Выводит элементы динамического массива
procedure Write<T>(self: array of T); extensionmethod;
begin
for var i:=0 to self.Length-1 do
PT4.Put(self[i]);
end;
/// Выводит элементы матрицы
/// Выводит элементы матрицы
procedure Write<T>(self: array [,] of T); extensionmethod;
begin
for var i:=0 to self.GetLength(0)-1 do
@ -2295,7 +2295,7 @@ begin
PT4.Put(self[i,j]);
end;
// == Дополнения 2016.07
// == Дополнения 2016.07
procedure PrintMatr<T>(a: array[,] of T);
begin
@ -2318,7 +2318,7 @@ begin
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
/// Выводит размер и элементы последовательности
procedure PrintAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2327,7 +2327,7 @@ begin
PT4.Put(e);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure PrintAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -2335,7 +2335,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит размер и элементы динамического массива
/// Выводит размер и элементы динамического массива
procedure WriteAll<T>(self: array of T); extensionmethod;
begin
PT4.Put(self.Length);
@ -2343,7 +2343,7 @@ begin
PT4.Put(self[i]);
end;
/// Выводит элементы последовательности
/// Выводит элементы последовательности
procedure Writeln<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
@ -2351,14 +2351,14 @@ begin
PT4.Put(e);
end;
/// Выводит элементы динамического массива
/// Выводит элементы динамического массива
procedure Writeln<T>(self: array of T); extensionmethod;
begin
for var i:=0 to self.Length-1 do
PT4.Put(self[i]);
end;
/// Выводит элементы матрицы
/// Выводит элементы матрицы
procedure Writeln<T>(self: array [,] of T); extensionmethod;
begin
for var i:=0 to self.GetLength(0)-1 do
@ -2366,13 +2366,13 @@ begin
PT4.Put(self[i,j]);
end;
// == Конец дополнений 2016.07
// == Конец дополнений 2016.07
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
function Show<TSource>(self: sequence of TSource; cmt: string; selector: System.Func<TSource, string>): sequence of TSource; extensionmethod;
begin
@ -2385,17 +2385,17 @@ begin
result := self;
end;
/// Выводит в разделе отладки окна задачника
/// размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
/// Выводит в разделе отладки окна задачника
/// размер последовательности и значения,
/// полученные из элементов последовательности
/// с помощью указанного лямбда-выражения
function Show<TSource>(Self: sequence of TSource; selector: System.Func<TSource, string>): sequence of TSource; extensionmethod;
begin
result := self.Show('', selector);
end;
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и ее элементы
/// Выводит в разделе отладки окна задачника
/// комментарий cmt, размер последовательности и ее элементы
function Show<TSource>(Self: sequence of TSource; cmt: string): sequence of TSource; extensionmethod;
begin
result := self;
@ -2414,14 +2414,14 @@ begin
end;
/// Выводит в разделе отладки окна задачника
/// размер последовательности и ее элементы.
/// Выводит в разделе отладки окна задачника
/// размер последовательности и ее элементы.
function Show<TSource>(Self: sequence of TSource): sequence of TSource; extensionmethod;
begin
result := self.Show('');
end;
// == Конец дополнений к версии 4.14 ==
// == Конец дополнений к версии 4.14 ==
initialization
__InitModule;

View file

@ -4,7 +4,7 @@ unit PT4Exam;
//------------------------------------------------------------------------------
// Модуль для подключения задачника PT for Exam
// Версия 1.2
// Copyright (c) 2014-2017 М.Э.Абрамян
// Copyright (©) 2014-2017 М.Э.Абрамян
//------------------------------------------------------------------------------

View file

@ -1,242 +1,242 @@
/// Конструктор учебных заданий для задачника Programming Taskbook.
/// Версия 1.5 от 27.03.2017 (С) М. Э. Абрамян, 2016-2017.
/// Все компоненты конструктора могут вызываться либо как классовые методы класса pt,
/// либо как обычные константы и процедуры.
/// Конструктор учебных заданий для задачника Programming Taskbook.
/// Версия 1.5 от 27.03.2017 (©) М. Э. Абрамян, 2016-2017.
/// Все компоненты конструктора могут вызываться либо как классовые методы класса pt,
/// либо как обычные константы и процедуры.
unit PT4MakerNetX;
interface
const
OptionAllLanguages = 1; // группа доступна для всех языков
OptionPascalLanguages = 2; // группа доступна для всех реализаций Паскаля
OptionNETLanguages = 4; // группа доступна для всех NET-языков
OptionUseAddition = 8; // группа доступна только при наличии файла дополнений
OptionHideExamples = 16; // не отображать раздел с примером верного решения
OptionAllLanguages = 1; // группа доступна для всех языков
OptionPascalLanguages = 2; // группа доступна для всех реализаций Паскаля
OptionNETLanguages = 4; // группа доступна для всех NET-языков
OptionUseAddition = 8; // группа доступна только при наличии файла дополнений
OptionHideExamples = 16; // не отображать раздел с примером верного решения
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр topic определяет имя подгруппы и является необязательным.
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр topic определяет имя подгруппы и является необязательным.
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
procedure NewTask(topic, tasktext: string);
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
procedure NewTask(tasktext: string);
/// Добавляет комментарий в новой строке раздела исходных даннных.
/// Добавляет комментарий в новой строке раздела исходных даннных.
procedure DataComm(comm: string);
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
procedure Data(comm: string; a: object);
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
procedure Data(comm1: string; a1: object; comm2: string);
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
procedure Data(comm1: string; a1: object; comm2: string; a2: object);
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string);
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object);
/// Добавляет последовательность логических данных в раздел исходных данных.
/// Добавляет последовательность логических данных в раздел исходных данных.
procedure Data(seq: sequence of boolean);
/// Добавляет последовательность целых чисел в раздел исходных данных.
/// Добавляет последовательность целых чисел в раздел исходных данных.
procedure Data(seq: sequence of integer);
/// Добавляет последовательность вещественных чисел в раздел исходных данных.
/// Добавляет последовательность вещественных чисел в раздел исходных данных.
procedure Data(seq: sequence of real);
/// Добавляет последовательность символов в раздел исходных данных.
/// Добавляет последовательность символов в раздел исходных данных.
procedure Data(seq: sequence of char);
/// Добавляет последовательность строк в раздел исходных данных.
/// Добавляет последовательность строк в раздел исходных данных.
procedure Data(seq: sequence of string);
/// Добавляет комментарий в новой строке раздела результатов.
/// Добавляет комментарий в новой строке раздела результатов.
procedure ResComm(comm: string);
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
procedure Res(comm: string; a: object);
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
procedure Res(comm1: string; a1: object; comm2: string);
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
procedure Res(comm1: string; a1: object; comm2: string; a2: object);
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string);
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object);
/// Добавляет последовательность логических данных в раздел результатов.
/// Добавляет последовательность логических данных в раздел результатов.
procedure Res(seq: sequence of boolean);
/// Добавляет последовательность целых чисел в раздел результатов.
/// Добавляет последовательность целых чисел в раздел результатов.
procedure Res(seq: sequence of integer);
/// Добавляет последовательность вещественных чисел в раздел результатов.
/// Добавляет последовательность вещественных чисел в раздел результатов.
procedure Res(seq: sequence of real);
/// Добавляет последовательность символов в раздел результатов.
/// Добавляет последовательность символов в раздел результатов.
procedure Res(seq: sequence of char);
/// Добавляет последовательность строк в раздел результатов.
/// Добавляет последовательность строк в раздел результатов.
procedure Res(seq: sequence of string);
/// Задает минимальную ширину поля вывода для числовых данных
/// (числа выравниваются по правому краю поля вывода,
/// т.е. при необходимости дополняются слева пробелами).
/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется.
/// По умолчанию минимальная ширина поля вывода полагается равной 0.
/// Задает минимальную ширину поля вывода для числовых данных
/// (числа выравниваются по правому краю поля вывода,
/// т.е. при необходимости дополняются слева пробелами).
/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется.
/// По умолчанию минимальная ширина поля вывода полагается равной 0.
procedure SetWidth(n: integer);
/// Задает формат отображения вещественных чисел:
/// с фиксированной точкой и n дробными знаками при n > 0,
/// с плавающей точкой и n дробными знаками при n < 0,
/// с плавающей точкой и 6 дробными знаками при n = 0.
/// Если n по модулю превосходит 10, то вызов процедуры игнорируется.
/// По умолчанию устанавливается формат с фиксированной точкой
/// и 2 дробными знаками.
/// Задает формат отображения вещественных чисел:
/// с фиксированной точкой и n дробными знаками при n > 0,
/// с плавающей точкой и n дробными знаками при n < 0,
/// с плавающей точкой и 6 дробными знаками при n = 0.
/// Если n по модулю превосходит 10, то вызов процедуры игнорируется.
/// По умолчанию устанавливается формат с фиксированной точкой
/// и 2 дробными знаками.
procedure SetPrecision(n: integer);
/// Задает количество тестовых запусков, выполняемых
/// для проверки правильности программы (от 2 до 10).
/// По умолчанию число тестовых запусков полагается равным 5.
/// Задает количество тестовых запусков, выполняемых
/// для проверки правильности программы (от 2 до 10).
/// По умолчанию число тестовых запусков полагается равным 5.
procedure SetTestCount(n: integer);
/// Задает минимально необходимое количество элементов
/// исходных данных, которое требуется ввести для правильного
/// решения задачи в случае текущего набора исходных данных.
/// При отсутствии процедуры предполагается,
/// что для правильного решения надо ввести все исходные данные.
/// Задает минимально необходимое количество элементов
/// исходных данных, которое требуется ввести для правильного
/// решения задачи в случае текущего набора исходных данных.
/// При отсутствии процедуры предполагается,
/// что для правильного решения надо ввести все исходные данные.
procedure SetRequiredDataCount(n: integer);
/// Возвращает номер текущего тестового запуска
/// (запуски нумеруются от 1).
/// Возвращает номер текущего тестового запуска
/// (запуски нумеруются от 1).
function CurrentTest: integer;
/// Генерирует случайное целов в диапазоне от M до N включительно.
/// Если M >= N, то возвращает M.
/// Генерирует случайное целов в диапазоне от M до N включительно.
/// Если M >= N, то возвращает M.
function Random(M, N: integer): integer;
/// Генерирует случайное вещественное на промежутке [A, B).
/// Если промежуток [A, B) пуст, то возвращает A.
/// Генерирует случайное вещественное на промежутке [A, B).
/// Если промежуток [A, B) пуст, то возвращает A.
function Random(A, B: real): real;
/// Генерирует случайную строку длины len, состоящую
/// из цифр и строчных (т.е. маленьких) латинских букв.
/// Генерирует случайную строку длины len, состоящую
/// из цифр и строчных (т.е. маленьких) латинских букв.
function RandomName(len: integer): string;
/// Создает новую группу с кратким описанием GroupDescription,
/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or.
/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4).
/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task.
/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую
/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные).
/// Создает новую группу с кратким описанием GroupDescription,
/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or.
/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4).
/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task.
/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую
/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные).
procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0);
/// Обеспечивает регистрацию созданной группы в электронном задачнике.
/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string),
/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные).
/// Обеспечивает регистрацию созданной группы в электронном задачнике.
/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string),
/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные).
procedure ActivateNET(S: string);
/// Импортирует в создаваемую группу существующее задание
/// из группы GroupName с номером TaskNumber. Должна вызываться
/// в процедуре с именем, начинающемся с текста Task.
/// Импортирует в создаваемую группу существующее задание
/// из группы GroupName с номером TaskNumber. Должна вызываться
/// в процедуре с именем, начинающемся с текста Task.
procedure UseTask(GroupName: string; TaskNumber: integer);
/// Возвращает массив из 116 русских слов.
/// Возвращает массив из 116 русских слов.
function GetWords: array of string;
/// Возвращает массив из 116 английских слов.
/// Возвращает массив из 116 английских слов.
function GetEnWords: array of string;
/// Возвращает массив из 61 русского предложения.
/// Возвращает массив из 61 русского предложения.
function GetSentences: array of string;
/// Возвращает массив из 61 английского предложения.
/// Возвращает массив из 61 английского предложения.
function GetEnSentences: array of string;
/// Возвращает массив из 85 русских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает массив из 85 русских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
function GetTexts: array of string;
/// Возвращает массив из 85 английских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает массив из 85 английских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
function GetEnTexts: array of string;
/// Возвращает случайное русское слово из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное русское слово из массива,
/// входящего в конструктор учебных заданий.
function RandomWord: string;
/// Возвращает случайное английское слово из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное английское слово из массива,
/// входящего в конструктор учебных заданий.
function RandomEnWord: string;
/// Возвращает случайное русское предложение из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное русское предложение из массива,
/// входящего в конструктор учебных заданий.
function RandomSentence: string;
/// Возвращает случайное английское предложение из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное английское предложение из массива,
/// входящего в конструктор учебных заданий.
function RandomEnSentence: string;
/// Возвращает случайный русский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает случайный русский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
function RandomText: string;
/// Возвращает случайный английский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает случайный английский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
function RandomEnText: string;
/// Добавляет в задание исходный файл целых чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
/// Добавляет в задание исходный файл целых чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
procedure DataFileInteger(FileName: string);
/// Добавляет в задание исходный файл вещественных чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
/// Добавляет в задание исходный файл вещественных чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
procedure DataFileReal(FileName: string);
/// Добавляет в задание исходный символьный файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Символы должны
/// храниться в файле в однобайтной кодировке.
/// Добавляет в задание исходный символьный файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Символы должны
/// храниться в файле в однобайтной кодировке.
procedure DataFileChar(FileName: string);
/// Добавляет в задание исходный строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе исходных данных.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
/// Добавляет в задание исходный строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе исходных данных.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
procedure DataFileString(FileName: string);
/// Добавляет в задание исходный текстовый файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Длина каждой строки
/// текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
/// Добавляет в задание исходный текстовый файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Длина каждой строки
/// текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
procedure DataText(FileName: string; LineCount: integer := 4);
/// Добавляет в задание результирующий файл целых чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Добавляет в задание результирующий файл целых чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
procedure ResFileInteger(FileName: string);
/// Добавляет в задание результирующий файл вещественных чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Добавляет в задание результирующий файл вещественных чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
procedure ResFileReal(FileName: string);
/// Добавляет в задание результирующий символьный файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Символы должны храниться в файле в однобайтной кодировке.
/// Добавляет в задание результирующий символьный файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Символы должны храниться в файле в однобайтной кодировке.
procedure ResFileChar(FileName: string);
/// Добавляет в задание результирующий строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе результатов.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
/// Добавляет в задание результирующий строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе результатов.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
procedure ResFileString(FileName: string);
/// Добавляет в задание результирующий текстовый файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Длина каждой строки текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
/// Добавляет в задание результирующий текстовый файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Длина каждой строки текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
procedure ResText(FileName: string; LineCount: integer := 5);
type pt = class
@ -245,395 +245,395 @@ type pt = class
begin
end;
public
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна для всех языков.
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна для всех языков.
class function OptionAllLanguages: integer;
begin
result := PT4MakerNetX.OptionAllLanguages;
end;
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна для всех реализаций языка Pascal.
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна для всех реализаций языка Pascal.
class function OptionPascalLanguages: integer;
begin
result := PT4MakerNetX.OptionPascalLanguages;
end;
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна для всех NET-языков.
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна для всех NET-языков.
class function OptionNETLanguages: integer;
begin
result := PT4MakerNetX.OptionNETLanguages;
end;
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна только при наличии связанного с ней файла дополнений.
/// Дополнительная опция для процедуры NewGroup:
/// группа доступна только при наличии связанного с ней файла дополнений.
class function OptionUseAddition: integer;
begin
result := PT4MakerNetX.OptionUseAddition;
end;
/// Дополнительная опция для процедуры NewGroup:
/// в заданиях данной группы не будет отображаться пример верного решения.
/// Дополнительная опция для процедуры NewGroup:
/// в заданиях данной группы не будет отображаться пример верного решения.
class function OptionHideExamples: integer;
begin
result := PT4MakerNetX.OptionHideExamples;
end;
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр topic определяет имя подгруппы (является необязательным).
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр topic определяет имя подгруппы (является необязательным).
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
class procedure NewTask(topic, tasktext: string);
begin
PT4MakerNetX.NewTask(topic, tasktext);
end;
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
/// Процедура, с которой должно начинаться определение нового задания.
/// Должна вызываться в процедуре с именем, начинающемся с текста Task.
/// Параметр tasktext содержит формулировку задания; отдельные строки
/// формулировки должны разделяться символами #13, #10 или #13#10.
class procedure NewTask(tasktext: string);
begin
PT4MakerNetX.NewTask(tasktext);
end;
/// Добавляет комментарий в новой строке раздела исходных даннных.
/// Добавляет комментарий в новой строке раздела исходных даннных.
class procedure DataComm(comm: string);
begin
PT4MakerNetX.DataComm(comm);
end;
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
class procedure Data(comm: string; a: object);
begin
PT4MakerNetX.Data(comm, a);
end;
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
class procedure Data(comm1: string; a1: object; comm2: string);
begin
PT4MakerNetX.Data(comm1, a1, comm2);
end;
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
class procedure Data(comm1: string; a1: object; comm2: string; a2: object);
begin
PT4MakerNetX.Data(comm1, a1, comm2, a2);
end;
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string);
begin
PT4MakerNetX.Data(comm1, a1, comm2, a2, comm3);
end;
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
/// Добавляет данные и комментарии в новой строке раздела исходных даннных.
class procedure Data(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object);
begin
PT4MakerNetX.Data(comm1, a1, comm2, a2, comm3, a3);
end;
/// Добавляет последовательность логических данных в раздел исходных данных.
/// Добавляет последовательность логических данных в раздел исходных данных.
class procedure Data(seq: sequence of boolean);
begin
PT4MakerNetX.Data(seq);
end;
/// Добавляет последовательность целых чисел в раздел исходных данных.
/// Добавляет последовательность целых чисел в раздел исходных данных.
class procedure Data(seq: sequence of integer);
begin
PT4MakerNetX.Data(seq);
end;
/// Добавляет последовательность вещественных чисел в раздел исходных данных.
/// Добавляет последовательность вещественных чисел в раздел исходных данных.
class procedure Data(seq: sequence of real);
begin
PT4MakerNetX.Data(seq);
end;
/// Добавляет последовательность символов в раздел исходных данных.
/// Добавляет последовательность символов в раздел исходных данных.
class procedure Data(seq: sequence of char);
begin
PT4MakerNetX.Data(seq);
end;
/// Добавляет последовательность строк в раздел исходных данных.
/// Добавляет последовательность строк в раздел исходных данных.
class procedure Data(seq: sequence of string);
begin
PT4MakerNetX.Data(seq);
end;
/// Добавляет комментарий в новой строке раздела результатов.
/// Добавляет комментарий в новой строке раздела результатов.
class procedure ResComm(comm: string);
begin
PT4MakerNetX.ResComm(comm);
end;
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
class procedure Res(comm: string; a: object);
begin
PT4MakerNetX.Res(comm, a);
end;
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
class procedure Res(comm1: string; a1: object; comm2: string);
begin
PT4MakerNetX.Res(comm1, a1, comm2);
end;
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
class procedure Res(comm1: string; a1: object; comm2: string; a2: object);
begin
PT4MakerNetX.Res(comm1, a1, comm2, a2);
end;
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string);
begin
PT4MakerNetX.Res(comm1, a1, comm2, a2, comm3);
end;
/// Добавляет данные и комментарии в новой строке раздела результатов.
/// Добавляет данные и комментарии в новой строке раздела результатов.
class procedure Res(comm1: string; a1: object; comm2: string; a2: object; comm3: string; a3: object);
begin
PT4MakerNetX.Res(comm1, a1, comm2, a2, comm3, a3);
end;
/// Добавляет последовательность логических данных в раздел результатов.
/// Добавляет последовательность логических данных в раздел результатов.
class procedure Res(seq: sequence of boolean);
begin
PT4MakerNetX.Res(seq);
end;
/// Добавляет последовательность целых чисел в раздел результатов.
/// Добавляет последовательность целых чисел в раздел результатов.
class procedure Res(seq: sequence of integer);
begin
PT4MakerNetX.Res(seq);
end;
/// Добавляет последовательность вещественных чисел в раздел результатов.
/// Добавляет последовательность вещественных чисел в раздел результатов.
class procedure Res(seq: sequence of real);
begin
PT4MakerNetX.Res(seq);
end;
/// Добавляет последовательность символов в раздел результатов.
/// Добавляет последовательность символов в раздел результатов.
class procedure Res(seq: sequence of char);
begin
PT4MakerNetX.Res(seq);
end;
/// Добавляет последовательность строк в раздел результатов.
/// Добавляет последовательность строк в раздел результатов.
class procedure Res(seq: sequence of string);
begin
PT4MakerNetX.Res(seq);
end;
/// Задает минимальную ширину поля вывода для числовых данных
/// (числа выравниваются по правому краю поля вывода,
/// т.е. при необходимости дополняются слева пробелами).
/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется.
/// По умолчанию минимальная ширина поля вывода полагается равной 0.
/// Задает минимальную ширину поля вывода для числовых данных
/// (числа выравниваются по правому краю поля вывода,
/// т.е. при необходимости дополняются слева пробелами).
/// Если n не лежит в диапазоне 0..10, то вызов процедуры игнорируется.
/// По умолчанию минимальная ширина поля вывода полагается равной 0.
class procedure SetWidth(n: integer);
begin
PT4MakerNetX.SetWidth(n);
end;
/// Задает формат отображения вещественных чисел:
/// с фиксированной точкой и n дробными знаками при n > 0,
/// с плавающей точкой и n дробными знаками при n < 0,
/// с плавающей точкой и 6 дробными знаками при n = 0.
/// Если n по модулю превосходит 10, то вызов процедуры игнорируется.
/// По умолчанию устанавливается формат с фиксированной точкой
/// и 2 дробными знаками.
/// Задает формат отображения вещественных чисел:
/// с фиксированной точкой и n дробными знаками при n > 0,
/// с плавающей точкой и n дробными знаками при n < 0,
/// с плавающей точкой и 6 дробными знаками при n = 0.
/// Если n по модулю превосходит 10, то вызов процедуры игнорируется.
/// По умолчанию устанавливается формат с фиксированной точкой
/// и 2 дробными знаками.
class procedure SetPrecision(n: integer);
begin
PT4MakerNetX.SetPrecision(n);
end;
/// Задает количество тестовых запусков, выполняемых
/// для проверки правильности программы (от 2 до 10).
/// По умолчанию число тестовых запусков полагается равным 5.
/// Задает количество тестовых запусков, выполняемых
/// для проверки правильности программы (от 2 до 10).
/// По умолчанию число тестовых запусков полагается равным 5.
class procedure SetTestCount(n: integer);
begin
PT4MakerNetX.SetTestCount(n);
end;
/// Задает минимально необходимое количество элементов
/// исходных данных, которое требуется ввести для правильного
/// решения задачи в случае текущего набора исходных данных.
/// При отсутствии процедуры предполагается,
/// что для правильного решения надо ввести все исходные данные.
/// Задает минимально необходимое количество элементов
/// исходных данных, которое требуется ввести для правильного
/// решения задачи в случае текущего набора исходных данных.
/// При отсутствии процедуры предполагается,
/// что для правильного решения надо ввести все исходные данные.
class procedure SetRequiredDataCount(n: integer);
begin
PT4MakerNetX.SetRequiredDataCount(n);
end;
/// Возвращает номер текущего тестового запуска
/// (запуски нумеруются от 1).
/// Возвращает номер текущего тестового запуска
/// (запуски нумеруются от 1).
class function CurrentTest: integer;
begin
result := PT4MakerNetX.CurrentTest;
end;
/// Генерирует случайное целов в диапазоне от M до N включительно.
/// Если M >= N, то возвращает M.
/// Генерирует случайное целов в диапазоне от M до N включительно.
/// Если M >= N, то возвращает M.
class function Random(M, N: integer): integer;
begin
result := PT4MakerNetX.Random(M, N);
end;
/// Генерирует случайное вещественное на промежутке [A, B).
/// Если промежуток [A, B) пуст, то возвращает A.
/// Генерирует случайное вещественное на промежутке [A, B).
/// Если промежуток [A, B) пуст, то возвращает A.
class function Random(A, B: real): real;
begin
result := PT4MakerNetX.Random(A, B);
end;
/// Генерирует случайную строку длины len, состоящую
/// из цифр и строчных (т.е. маленьких) латинских букв.
/// Генерирует случайную строку длины len, состоящую
/// из цифр и строчных (т.е. маленьких) латинских букв.
class function RandomName(len: integer): string;
begin
result := PT4MakerNetX.RandomName(len);
end;
/// Создает новую группу с кратким описанием GroupDescription,
/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or.
/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4).
/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task.
/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую
/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные).
/// Создает новую группу с кратким описанием GroupDescription,
/// информацией об авторе GroupAuthor и набором необязательных опций, объединяемых операцией or.
/// Имя группы определяется по имени библиотеки (путем отбрасывания префикса PT4).
/// В группу включаются задания, определенные в процедурах, имена которых начинаются с текста Task.
/// Процедура NewGroup должна быть вызвана в процедуре inittaskgroup без параметров, которую
/// необходимо описать в библиотеке с группой заданий (все буквы в имени inittaskgroup - строчные).
class procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer := 0);
begin
PT4MakerNetX.NewGroup(GroupDescription, GroupAuthor, Options);
end;
/// Обеспечивает регистрацию созданной группы в электронном задачнике.
/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string),
/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные).
/// Обеспечивает регистрацию созданной группы в электронном задачнике.
/// Процедура ActivateNET(S) должна быть вызвана в процедуре activate(S: string),
/// которую необходимо описать в библиотеке с группой заданий (все буквы в имени activate - строчные).
class procedure ActivateNET(S: string);
begin
PT4MakerNetX.ActivateNET(S);
end;
/// Импортирует в создаваемую группу существующее задание
/// из группы GroupName с номером TaskNumber. Должна вызываться
/// в процедуре с именем, начинающемся с текста Task.
/// Импортирует в создаваемую группу существующее задание
/// из группы GroupName с номером TaskNumber. Должна вызываться
/// в процедуре с именем, начинающемся с текста Task.
class procedure UseTask(GroupName: string; TaskNumber: integer);
begin
PT4MakerNetX.UseTask(GroupName, TaskNumber);
end;
/// Возвращает массив из 116 русских слов.
/// Возвращает массив из 116 русских слов.
class function GetWords: array of string;
begin
result := PT4MakerNetX.GetWords;
end;
/// Возвращает массив из 116 английских слов.
/// Возвращает массив из 116 английских слов.
class function GetEnWords: array of string;
begin
result := PT4MakerNetX.GetEnWords;
end;
/// Возвращает массив из 61 русского предложения.
/// Возвращает массив из 61 русского предложения.
class function GetSentences: array of string;
begin
result := PT4MakerNetX.GetSentences;
end;
/// Возвращает массив из 61 английского предложения.
/// Возвращает массив из 61 английского предложения.
class function GetEnSentences: array of string;
begin
result := PT4MakerNetX.GetEnSentences;
end;
/// Возвращает массив из 85 русских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает массив из 85 русских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
class function GetTexts: array of string;
begin
result := PT4MakerNetX.GetTexts;
end;
/// Возвращает массив из 85 английских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает массив из 85 английских многострочных текстов.
/// Каждая строка текста оканчивается символами #13#10.
class function GetEnTexts: array of string;
begin
result := PT4MakerNetX.GetEnTexts;
end;
/// Возвращает случайное русское слово из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное русское слово из массива,
/// входящего в конструктор учебных заданий.
class function RandomWord: string;
begin
result := PT4MakerNetX.RandomWord;
end;
/// Возвращает случайное английское слово из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное английское слово из массива,
/// входящего в конструктор учебных заданий.
class function RandomEnWord: string;
begin
result := PT4MakerNetX.RandomEnWord;
end;
/// Возвращает случайное русское предложение из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное русское предложение из массива,
/// входящего в конструктор учебных заданий.
class function RandomSentence: string;
begin
result := PT4MakerNetX.RandomSentence;
end;
/// Возвращает случайное английское предложение из массива,
/// входящего в конструктор учебных заданий.
/// Возвращает случайное английское предложение из массива,
/// входящего в конструктор учебных заданий.
class function RandomEnSentence: string;
begin
result := PT4MakerNetX.RandomEnSentence;
end;
/// Возвращает случайный русский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает случайный русский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
class function RandomText: string;
begin
result := PT4MakerNetX.RandomText;
end;
/// Возвращает случайный английский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
/// Возвращает случайный английский многострочный текст из массива,
/// входящего в конструктор учебных заданий.
/// Каждая строка текста оканчивается символами #13#10.
class function RandomEnText: string;
begin
result := PT4MakerNetX.RandomEnText;
end;
/// Добавляет в задание исходный файл целых чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
/// Добавляет в задание исходный файл целых чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
class procedure DataFileInteger(FileName: string);
begin
PT4MakerNetX.DataFileInteger(FileName);
end;
/// Добавляет в задание исходный файл вещественных чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
/// Добавляет в задание исходный файл вещественных чисел
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных.
class procedure DataFileReal(FileName: string);
begin
PT4MakerNetX.DataFileReal(FileName);
end;
/// Добавляет в задание исходный символьный файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Символы должны
/// храниться в файле в однобайтной кодировке.
/// Добавляет в задание исходный символьный файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Символы должны
/// храниться в файле в однобайтной кодировке.
class procedure DataFileChar(FileName: string);
begin
PT4MakerNetX.DataFileChar(FileName);
end;
/// Добавляет в задание исходный строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе исходных данных.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
/// Добавляет в задание исходный строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе исходных данных.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
class procedure DataFileString(FileName: string);
begin
PT4MakerNetX.DataFileString(FileName);
end;
/// Добавляет в задание исходный текстовый файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Длина каждой строки
/// текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
/// Добавляет в задание исходный текстовый файл
/// с именем FileName и отображает его содержимое
/// в разделе исходных данных. Длина каждой строки
/// текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
class procedure DataText(FileName: string; LineCount: integer := 4);
begin
PT4MakerNetX.DataText(FileName);
end;
/// Добавляет в задание результирующий файл целых чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Добавляет в задание результирующий файл целых чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
class procedure ResFileInteger(FileName: string);
begin
PT4MakerNetX.ResFileInteger(FileName);
end;
/// Добавляет в задание результирующий файл вещественных чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Добавляет в задание результирующий файл вещественных чисел
/// с именем FileName и отображает его содержимое в разделе результатов.
class procedure ResFileReal(FileName: string);
begin
PT4MakerNetX.ResFileReal(FileName);
end;
/// Добавляет в задание результирующий символьный файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Символы должны храниться в файле в однобайтной кодировке.
/// Добавляет в задание результирующий символьный файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Символы должны храниться в файле в однобайтной кодировке.
class procedure ResFileChar(FileName: string);
begin
PT4MakerNetX.ResFileChar(FileName);
end;
/// Добавляет в задание результирующий строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе результатов.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
/// Добавляет в задание результирующий строковый файл
/// с элементами типа ShortString и именем FileName
/// и отображает его содержимое в разделе результатов.
/// Длина элементов файла не должна превосходить 70 символов.
/// Строки должны храниться в файле в однобайтной кодировке.
class procedure ResFileString(FileName: string);
begin
PT4MakerNetX.ResFileString(FileName);
end;
/// Добавляет в задание результирующий текстовый файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Длина каждой строки текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
/// Добавляет в задание результирующий текстовый файл
/// с именем FileName и отображает его содержимое в разделе результатов.
/// Длина каждой строки текстового файла не должна превосходить 70 символов.
/// Текст должен храниться в файле в однобайтной кодировке.
class procedure ResText(FileName: string; LineCount: integer := 5);
begin
PT4MakerNetX.ResText(FileName);
@ -647,13 +647,13 @@ uses System.Reflection, PT4TaskMakerNET, System.Windows.Forms, System;
const
alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
ErrMes1 = 'Error: Раздел размером более 5 строк не может содержать файловые данные.';
ErrMes2 = 'Error: При наличии файловых данных раздел не может содержать более 5 строк.';
ErrMes3 = 'Error: Количество исходных данных превысило 200.';
ErrMes4 = 'Error: Количество результирующих данных превысило 200.';
ErrMes5 = 'Error: При определении задания первой должна вызываться процедура NewTask.';
ErrMes6 = 'Error: При определении задания не указаны исходные данные.';
ErrMes7 = 'Error: При определении задания не указаны результирующие данные.';
ErrMes1 = 'Error: Раздел размером более 5 строк не может содержать файловые данные.';
ErrMes2 = 'Error: При наличии файловых данных раздел не может содержать более 5 строк.';
ErrMes3 = 'Error: Количество исходных данных превысило 200.';
ErrMes4 = 'Error: Количество результирующих данных превысило 200.';
ErrMes5 = 'Error: При определении задания первой должна вызываться процедура NewTask.';
ErrMes6 = 'Error: При определении задания не указаны исходные данные.';
ErrMes7 = 'Error: При определении задания не указаны результирующие данные.';
var
yd, yr, ye, nd, nr, pr, wd: integer;
@ -722,18 +722,18 @@ begin
if nt then exit;
PT4TaskMakerNET.CreateTask(topic);
PT4TaskMakerNET.TaskText(tasktext);
nt := true; // вызвана процедура NewTask
ut := false; // было подключено существующее задание (процедурой UseTask)
ye := 1; // текущий номер строки для вывода сообщения об ошибке
yd := 0; // текущий номер строки в разделе исходных данных
yr := 0; // текущий номер строки в разделе результатов
nd := 0; // количество элементов исходных данных
nr := 0; // количество элементов результирующих данных
fd := false; // наличие файловых данных в разделе исходных данных
fr := false; // наличие файловых данных в разделе результатов
pr := 2; // текущая точность вывода вещественных данных
fmt := 'f2'; // текущий формат вывода вещественных данных
wd := 0; // текущая ширина поля вывода для чисел
nt := true; // вызвана процедура NewTask
ut := false; // было подключено существующее задание (процедурой UseTask)
ye := 1; // текущий номер строки для вывода сообщения об ошибке
yd := 0; // текущий номер строки в разделе исходных данных
yr := 0; // текущий номер строки в разделе результатов
nd := 0; // количество элементов исходных данных
nr := 0; // количество элементов результирующих данных
fd := false; // наличие файловых данных в разделе исходных данных
fr := false; // наличие файловых данных в разделе результатов
pr := 2; // текущая точность вывода вещественных данных
fmt := 'f2'; // текущий формат вывода вещественных данных
wd := 0; // текущая ширина поля вывода для чисел
end;
function wreal(w: integer; x: real): integer;
@ -1202,7 +1202,7 @@ end;
procedure NewGroup(GroupDescription, GroupAuthor: string; Options: integer);
begin
if not AcceptedLanguage(Options) then exit; // недопустимый текущий язык
if not AcceptedLanguage(Options) then exit; // недопустимый текущий язык
var ass := Assembly.GetCallingAssembly;
var GroupName := GetGroupName(ass.FullName);
var nm := 'PT4' + GroupName;
@ -1216,8 +1216,8 @@ begin
end;
if tasks.Count = 0 then
begin
Show('Группа ' + GroupName + ' не содержит заданий'#13#10+
'(имена процедур с заданиями должны начинаться с текста "Task").');
Show('Группа ' + GroupName + ' не содержит заданий'#13#10+
'(имена процедур с заданиями должны начинаться с текста "Task").');
exit;
end;
if Options and OptionUseAddition = OptionUseAddition then

View file

@ -6,7 +6,7 @@ unit PT4TaskMakerNET;
//------------------------------------------------------------------------------
// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET
//
// Copyright (c) 2013 М.Э.Абрамян
// Copyright (©) 2013 М.Э.Абрамян
// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2013
//------------------------------------------------------------------------------