diff --git a/Compiler/ICompiler.cs b/Compiler/ICompiler.cs index 729956211..f5ed8a91c 100644 --- a/Compiler/ICompiler.cs +++ b/Compiler/ICompiler.cs @@ -6,7 +6,7 @@ using System.Text; using PascalABCCompiler.SemanticTreeConverters; using PascalABCCompiler.Errors; -/// DarkStar +///В разработке DarkStar namespace PascalABCCompiler { diff --git a/Compiler/SemanticTreeConverters/SemanticTreeConvertersController.cs b/Compiler/SemanticTreeConverters/SemanticTreeConvertersController.cs index 3d41fddb5..c6eeaac87 100644 --- a/Compiler/SemanticTreeConverters/SemanticTreeConvertersController.cs +++ b/Compiler/SemanticTreeConverters/SemanticTreeConvertersController.cs @@ -76,7 +76,7 @@ namespace PascalABCCompiler.SemanticTreeConverters } catch (Exception) { - // dll + //если dll не нетовская } } diff --git a/CompilerTools/EventedStreamReaderList.cs b/CompilerTools/EventedStreamReaderList.cs index d3aeb82ca..b2ffbb878 100644 --- a/CompilerTools/EventedStreamReaderList.cs +++ b/CompilerTools/EventedStreamReaderList.cs @@ -105,7 +105,7 @@ namespace PascalABCCompiler { int read = s.EndRead(ar); - // byteoffset , + // Новое поле byteoffset говорит о том, что с прошлого раза мы учли дополнительный байт read += so.byteoffset; if (read > 0) { @@ -121,8 +121,8 @@ namespace PascalABCCompiler string str = en.GetString(so.buffer, 0, read); - // , str newstr - // + // К сожалению, ошибочный байт устанавливается за счет разницы длин str и newstr + // Надо бы оптимизировать byte prevbyte = 0; if (str.Length != newstr.Length) diff --git a/Grammars/Oberon00/oberon00yacc.cs b/Grammars/Oberon00/oberon00yacc.cs index 2c60d7c87..48a8045c5 100644 --- a/Grammars/Oberon00/oberon00yacc.cs +++ b/Grammars/Oberon00/oberon00yacc.cs @@ -59,7 +59,7 @@ public abstract class ScanBase : AbstractScanner { public class GPPGParser: ShiftReduceParser { // Verbatim content from oberon00.y - public syntax_tree_node root; // + public syntax_tree_node root; // Корневой узел синтаксического дерева public GPPGParser(AbstractScanner scanner) : base(scanner) { } // End verbatim content from oberon00.y @@ -257,16 +257,16 @@ public class GPPGParser: ShiftReduceParser // END, ident, COMMA { if (ValueStack[ValueStack.Depth-8].id.name != ValueStack[ValueStack.Depth-2].id.name) - PT.AddError(" "+ValueStack[ValueStack.Depth-2].id.name+" "+ValueStack[ValueStack.Depth-8].id.name,LocationStack[LocationStack.Depth-2]); + PT.AddError("Имя "+ValueStack[ValueStack.Depth-2].id.name+" должно совпадать с именем модуля "+ValueStack[ValueStack.Depth-8].id.name,LocationStack[LocationStack.Depth-2]); - // + // Подключение стандартной библиотеки ident_list il = new ident_list(); il.Add(new ident("Oberon00System")); unit_or_namespace un = new unit_or_namespace(il); uses_list ul = new uses_list(); ul.units.Insert(0, un); - // + // Формирование главного модуля var b = new block(ValueStack[ValueStack.Depth-6].decl, ValueStack[ValueStack.Depth-4].sl, LocationStack[LocationStack.Depth-6].Merge(LocationStack[LocationStack.Depth-2])); var r = new program_module(null, ul, b, null,CurrentLocationSpan); r.Language = LanguageId.Oberon00; @@ -274,7 +274,7 @@ public class GPPGParser: ShiftReduceParser } break; case 3: // module -> INVISIBLE, expr -{ // Intellisense +{ // Для Intellisense root = ValueStack[ValueStack.Depth-1].ex; } break; diff --git a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas index ea3fbe35c..90db0e939 100644 --- a/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas +++ b/Grammars/Oberon10Independent (by Juliet)/Install/PascalABC.NET/LibSource/Oberon00System.pas @@ -1,27 +1,27 @@ // (c) Mikst, Juliet 2010 -/// Oberon +/// Системный модуль для языка Oberon unit Oberon00System; interface type - /// (TRUE | FALSE) + /// Логический тип (TRUE | FALSE) BOOLEAN = System.boolean; - /// + /// Целое число INTEGER = System.Int32; - /// + /// Короткое целое число SHORTINT = System.byte; - /// + /// Длинное целое число LONGINT = System.int64; - /// + /// Вещественное число REAL = System.double; - /// + /// Длинное вещественное число LONGREAL = System.double; - /// + /// Символ CHAR = System.char; - /// + /// Строка STRING = System.string; - /// + /// Множество целых iset = array of integer; procedure Print(o: object); @@ -38,7 +38,7 @@ begin Console.Write(o); end; -/// +/// Вывести значение procedure Println(o: object); begin Console.WriteLine(o); diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00.cs b/Grammars/Oberon10Independent (by Juliet)/oberon00.cs index c3ca74bee..8fd285398 100644 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00.cs +++ b/Grammars/Oberon10Independent (by Juliet)/oberon00.cs @@ -685,7 +685,7 @@ int NextState() { case eofNum: switch (currentStart) { case 50: -PT.AddError(" ", yylloc); +PT.AddError("Комментарий не закрыт", yylloc); break; } if (yywrap()) @@ -779,7 +779,7 @@ int tryParseInt; yylval.lVal = tryParseLong; return (int)Tokens.LONGINTNUM; } - PT.AddError(" ", yylloc); + PT.AddError("Слишком длинное целое", yylloc); break; case 26: yylval.sVal = PT.GetStringContent(yytext); @@ -791,7 +791,7 @@ try{ return (int)Tokens.CHAR_CONST; } catch (System.ArgumentException){ - PT.AddError(" ", yylloc); + PT.AddError("Некорректный код символа", yylloc); } break; case 28: @@ -802,7 +802,7 @@ double tryParseDouble; yylval.rVal = tryParseDouble; return (int)Tokens.REALNUM; } - PT.AddError(" ", yylloc); + PT.AddError("Слишком длинное вещественное", yylloc); break; case 29: var _yytext = yytext.Substring(0, yytext.Length - 1); @@ -816,7 +816,7 @@ var _yytext = yytext.Substring(0, yytext.Length - 1); yylval.lVal = tryParseHexLong; return (int)Tokens.LONGINTNUM; } - PT.AddError(" ", yylloc); + PT.AddError("Слишком длинное шестнадцатеричное целое", yylloc); break; case 31: return (int)Tokens.DOUBLEPOINT; @@ -945,7 +945,7 @@ static int mlCommentCnt = 0; PT.AddError(errorMsg,yylloc); } -// , +// Статический класс, определяющий ключевые слова языка public static class Keywords { private static Dictionary keywords = new Dictionary(); diff --git a/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs b/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs index b2585b5d2..715a644b1 100644 --- a/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs +++ b/Grammars/Oberon10Independent (by Juliet)/oberon00yacc.cs @@ -39,40 +39,40 @@ public struct ValueType public bool bVal; public string sVal; public int iVal; - public long lVal; // + public long lVal; // Длинное целое public char cVal; public double rVal; - public pascal_set_constant sc; // - - public named_type_reference ntr; // - public type_definition tdef; // - public diapason dpsn; // - public array_type arrt; // - public class_definition cldef; // - public indexers_types indts; // - public ref_type rft; // - public ident_list il; // - public ident id; // - public oberon_ident_with_export_marker obrid; // - public oberon_export_marker obrem; // - public var_def_statement vds; // - public variable_definitions vdss; // - public type_declarations td; // - public type_declaration tdec; // - public expression ex; // - public expression_list el; // - public Operators ops; // () - public block bl; // - public statement st; // - public statement_list sl; // - public case_variants cvars; // CASE - public case_variant cvar; // CASE - public declaration decsec; // - public declarations decl; // - public simple_const_definition scd; // - public consts_definitions_list cdl; // - public procedure_definition pd; // - public dot_node dn; // - public addressed_value adrv; // + public pascal_set_constant sc; // Константа - множество + public named_type_reference ntr; // Именованное определение типа + public type_definition tdef; // Сам тип + public diapason dpsn; // Тип диапазон + public array_type arrt; // Тип массив + public class_definition cldef; // Определение записи + public indexers_types indts; // Тип типы индексов массива + public ref_type rft; // Тип указатель + public ident_list il; // Список идентификаторов + public ident id; // Идентификатор + public oberon_ident_with_export_marker obrid; // Обероновский уточненный идентификатор + public oberon_export_marker obrem; // Обероновская экспортная метка + public var_def_statement vds; // Описание переменных + public variable_definitions vdss; // Секция описания переменных + public type_declarations td; // Секция определения типов + public type_declaration tdec; // Описание типа + public expression ex; // Выражение + public expression_list el; // Список выражений + public Operators ops; // Операторы (операции) + public block bl; // Программный блок + public statement st; // Оператор программный + public statement_list sl; // Список операторов + public case_variants cvars; // Список вариантов оператора CASE + public case_variant cvar; // Вариант оператора CASE + public declaration decsec; // Описание + public declarations decl; // Список описаний + public simple_const_definition scd; // Определение константы + public consts_definitions_list cdl; // Список описаний констант + public procedure_definition pd; // Описание процедуры + public dot_node dn; // Узел в точечной нотации + public addressed_value adrv; // Адресованное значение } // Abstract base class for GPLEX scanners public abstract class ScanBase : AbstractScanner { @@ -84,8 +84,8 @@ public abstract class ScanBase : AbstractScanner { public class GPPGParser: ShiftReduceParser { // Verbatim content from oberon00.y -// GPPGParser, , gppg - public syntax_tree_node root; // +// Эти объявления добавляются в класс GPPGParser, представляющий собой парсер, генерируемый системой gppg + public syntax_tree_node root; // Корневой узел синтаксического дерева public GPPGParser(AbstractScanner scanner) : base(scanner) { } // End verbatim content from oberon00.y @@ -527,17 +527,17 @@ public class GPPGParser: ShiftReduceParser case 2: // module -> MODULE, ident, SEMICOLUMN, mainblock, ident, COMMA { if (ValueStack[ValueStack.Depth-5].id.name != ValueStack[ValueStack.Depth-2].id.name) - PT.AddError(" " + ValueStack[ValueStack.Depth-2].id.name + " " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]); + PT.AddError("Имя " + ValueStack[ValueStack.Depth-2].id.name + " должно совпадать с именем модуля " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]); - // Oberon00System, PascalABC.NET + // Подключение стандартного модуля Oberon00System, написанного на PascalABC.NET var ul = new uses_list("Oberon00System"); - // ( ) + // Формирование модуля основной программы (используется фабричный метод вместо конструктора) root = program_module.create(ValueStack[ValueStack.Depth-5].id, ul, ValueStack[ValueStack.Depth-3].bl, CurrentLocationSpan); } break; case 3: // module -> INVISIBLE, expr -{ // Intellisense +{ // Для Intellisense root = ValueStack[ValueStack.Depth-1].ex; } break; @@ -892,7 +892,7 @@ public class GPPGParser: ShiftReduceParser expression step; if (ValueStack[ValueStack.Depth-4].ex != null) step = ValueStack[ValueStack.Depth-4].ex; else step = new int32_const(1, LocationStack[LocationStack.Depth-4]); - // while + // Будем моделировать цикл через while statement_list forStmnt = GetForThroughWhile(ValueStack[ValueStack.Depth-9].id, ValueStack[ValueStack.Depth-7].ex, ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-2].sl, step, LocationStack[LocationStack.Depth-8], CurrentLocationSpan); CurrentSemanticValue.st = forStmnt; CurrentSemanticValue.st.source_context = CurrentLocationSpan; @@ -901,21 +901,21 @@ public class GPPGParser: ShiftReduceParser case 85: // ForStep -> BY, ConstExpr { int32_const step32 = ValueStack[ValueStack.Depth-1].ex as int32_const; - if (step32 != null) { // ( ) - if (step32.val == 0) PT.AddError(" ", LocationStack[LocationStack.Depth-2]); + if (step32 != null) { // шаг является просто целым числом (без знака) + if (step32.val == 0) PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]); else CurrentSemanticValue.ex = new int32_const(step32.val, CurrentLocationSpan); } - else { // , + else { // в значении шага либо присутствует знак, либо это вообще не целое un_expr stepMinus = ValueStack[ValueStack.Depth-1].ex as un_expr; int32_const stepMinusTerm = stepMinus.subnode as int32_const; bool signMinus = (stepMinusTerm != null) && (stepMinus.operation_type == Operators.Minus); if (signMinus) if (stepMinusTerm.val == 0) - PT.AddError(" ", LocationStack[LocationStack.Depth-2]); + PT.AddError("Шаг цикла не может быть нулевым", LocationStack[LocationStack.Depth-2]); else CurrentSemanticValue.ex = new un_expr(stepMinusTerm, Operators.Minus, LocationStack[LocationStack.Depth-1]); else - PT.AddError(" ", LocationStack[LocationStack.Depth-2]); + PT.AddError("Шаг цикла должен быть целым числом", LocationStack[LocationStack.Depth-2]); } } break; @@ -1121,7 +1121,7 @@ public class GPPGParser: ShiftReduceParser break; case 122: // ArrayType -> ARRAY, OF, TypeDef { - // + // открытый массив diapason dp = new diapason(new int32_const(0), new int32_const(0)); indexers_types inxr = new indexers_types(); inxr.Add(dp); @@ -1130,7 +1130,7 @@ public class GPPGParser: ShiftReduceParser break; case 123: // ArrayType -> ARRAY, LengthList, OF, TypeDef { - // array n of char, + // Будем искать array n of char, чтобы заменить на строку named_type_reference ntr = ValueStack[ValueStack.Depth-1].tdef as named_type_reference; bool complexArr = (ntr != null) && (ntr.names.Count == 1) && (ntr.names[0].name == "char"); @@ -1161,14 +1161,14 @@ public class GPPGParser: ShiftReduceParser break; case 127: // Length -> ConstExpr { - // - // , + // В обероне в массиве указывается целочисленная длина + // Поэтому надо проверить, что выражение относится к целому типу object[] types = {ValueStack[ValueStack.Depth-1].ex}; bool isLength = typeof(int32_const) == System.Type.GetTypeArray(types)[0]; if (isLength) CurrentSemanticValue.dpsn = GetDiapasonByArrLength(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); else - PT.AddError(" ", LocationStack[LocationStack.Depth-1]); + PT.AddError("Длина должна быть целым числом", LocationStack[LocationStack.Depth-1]); } break; case 128: // PointerType -> POINTER, TO, TypeDef @@ -1218,8 +1218,8 @@ public class GPPGParser: ShiftReduceParser if (ValueStack[ValueStack.Depth-1].decsec != null) ValueStack[ValueStack.Depth-2].decl.Add(ValueStack[ValueStack.Depth-1].decsec); CurrentSemanticValue.decl = ValueStack[ValueStack.Depth-2].decl; - CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // , .. - // (, ) + CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // Необходимо показать место в программе, т.к. неявно это не сделано + // (например, в конструкторе) } break; case 137: // ProcedureDeclarationSect -> PROCEDURE, ident, maybeformalparams, maybereturn, @@ -1287,11 +1287,11 @@ public class GPPGParser: ShiftReduceParser } -/* , - for, while */ +/* Возвращает последовательность операторов, соответсвующую + циклу for, моделируемому через while */ public static statement_list GetForThroughWhile(ident id, expression expr, expression endExpr, statement_list stmnts, expression step, SourceContext assignSC, SourceContext wholeSC){ - // while + // Будем моделировать цикл через while statement_list forStmnt = new statement_list(); ident endFor = new ident("_oberon_for_end_"); forStmnt.Add(new var_statement(new var_def_statement( @@ -1302,14 +1302,14 @@ public static statement_list GetForThroughWhile(ident id, expression expr, expre false)) ); forStmnt.Add( new assign(id, expr, Operators.Assignment, assignSC) ); - statement_list posStatementList = new statement_list(); // + statement_list posStatementList = new statement_list(); // при положительном шаге posStatementList.Add(stmnts); posStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); while_node posWhile = new while_node( new bin_expr(id, endFor, Operators.LessEqual), posStatementList, WhileCycleType.While); - statement_list negStatementList = new statement_list(); // + statement_list negStatementList = new statement_list(); // при отрицательном шаге negStatementList.Add(stmnts); negStatementList.Add( new assign(id, step, Operators.AssignmentAddition) ); while_node negWhile = new while_node( @@ -1324,8 +1324,8 @@ public static statement_list GetForThroughWhile(ident id, expression expr, expre return forStmnt; } -/* , - */ +/* Возвращает многомерный массив, в котором при необходимости + массив символов заменен на строку */ public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList, SourceContext lenListSC, SourceContext wholeSC){ List indxrs = lenList.indexers; @@ -1333,15 +1333,15 @@ public static type_definition GetArrWithStrInsteadCharArr(indexers_types lenList int32_const len = new int32_const(); len.val = (dp.right as int32_const).val + 1; type_definition result = new string_num_definition(len, new ident("string", lenListSC), wholeSC); - if (indxrs.Count > 1) { // ... + if (indxrs.Count > 1) { // надо делать массив массивов ... строк indxrs.RemoveAt(indxrs.Count - 1); result = new array_type(lenList, result, wholeSC); } return result; } -/* 0..Length-1, - , */ +/* Возвращает диапазон 0..Length-1, полученный по обероновской длине + массива, и необходимый для паскалевского синтаксического узла */ public static diapason GetDiapasonByArrLength(expression lenExpr, SourceContext lenSC){ int32_const zero = new int32_const(); zero.val = 0; diff --git a/InstallerSamples/!MainFeatures/01_First/Amp.pas b/InstallerSamples/!MainFeatures/01_First/Amp.pas index a7c48162d..64c8ee9f9 100644 --- a/InstallerSamples/!MainFeatures/01_First/Amp.pas +++ b/InstallerSamples/!MainFeatures/01_First/Amp.pas @@ -1,9 +1,9 @@ -// & +// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова var &begin,&end: integer; begin &begin := 1; &end := 2; - var t: System.Type := &begin.GetType; // System.Type & + var t: System.Type := &begin.GetType; // в System.Type использовать & не надо write(&begin,' ',&end,' ',t); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/01_First/AssignExt.pas b/InstallerSamples/!MainFeatures/01_First/AssignExt.pas index d045b6aff..3ba218714 100644 --- a/InstallerSamples/!MainFeatures/01_First/AssignExt.pas +++ b/InstallerSamples/!MainFeatures/01_First/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Умножение на 3 writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/InstallerSamples/!MainFeatures/01_First/AutoVars.pas b/InstallerSamples/!MainFeatures/01_First/AutoVars.pas index 2756e7242..25797a7bb 100644 --- a/InstallerSamples/!MainFeatures/01_First/AutoVars.pas +++ b/InstallerSamples/!MainFeatures/01_First/AutoVars.pas @@ -1,5 +1,5 @@ -// -// for +// Автоопределение типа переменной +// Описание переменной в заголовке цикла for begin var x := 2; for var i:=1 to 10 do diff --git a/InstallerSamples/!MainFeatures/01_First/BlockVar.pas b/InstallerSamples/!MainFeatures/01_First/BlockVar.pas index 2edf55601..d1257db6c 100644 --- a/InstallerSamples/!MainFeatures/01_First/BlockVar.pas +++ b/InstallerSamples/!MainFeatures/01_First/BlockVar.pas @@ -1,11 +1,11 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real := x; // + var v: real := x; // вспомогательная переменная x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/01_First/Foreach.pas b/InstallerSamples/!MainFeatures/01_First/Foreach.pas index ae3f476bc..2f2f8119c 100644 --- a/InstallerSamples/!MainFeatures/01_First/Foreach.pas +++ b/InstallerSamples/!MainFeatures/01_First/Foreach.pas @@ -1,24 +1,24 @@ -// foreach +// Пример иллюстрирует возможности оператора foreach var a: array [1..5] of integer := (1,3,5,7,9); s: set of integer; l: List; begin - write('foreach : ':35); + write('foreach по обычному массиву: ':35); foreach x: integer in a do Print(x); writeln; s := [2..5,10..14]; - write('foreach : ':35); + write('foreach по множеству: ':35); foreach var x in s do Print(x); writeln; l := new List; l.Add(7); l.Add(2); l.Add(5); - write('foreach : ':35); + write('foreach по динамическому массиву: ':35); foreach var x in l do Print(x); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/01_First/Print.pas b/InstallerSamples/!MainFeatures/01_First/Print.pas index b28b9289e..3d61f6519 100644 --- a/InstallerSamples/!MainFeatures/01_First/Print.pas +++ b/InstallerSamples/!MainFeatures/01_First/Print.pas @@ -1,4 +1,4 @@ -/// Print +/// Вывод с помощью Print begin Print(1,2,3) end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/01_First/RandomDiap.pas b/InstallerSamples/!MainFeatures/01_First/RandomDiap.pas index c12b560b5..7bea343d6 100644 --- a/InstallerSamples/!MainFeatures/01_First/RandomDiap.pas +++ b/InstallerSamples/!MainFeatures/01_First/RandomDiap.pas @@ -1,5 +1,5 @@ -// +// Генерация случайного числа в заданном диапазоне begin var i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/01_First/RealExtNums.pas b/InstallerSamples/!MainFeatures/01_First/RealExtNums.pas index 4bf290727..5e099f699 100644 --- a/InstallerSamples/!MainFeatures/01_First/RealExtNums.pas +++ b/InstallerSamples/!MainFeatures/01_First/RealExtNums.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(1/0); writeln(sqrt(-1)); diff --git a/InstallerSamples/!MainFeatures/01_First/SimpleNewFeatures.pas b/InstallerSamples/!MainFeatures/01_First/SimpleNewFeatures.pas index 24bf8fb26..60cef0d77 100644 --- a/InstallerSamples/!MainFeatures/01_First/SimpleNewFeatures.pas +++ b/InstallerSamples/!MainFeatures/01_First/SimpleNewFeatures.pas @@ -1,27 +1,27 @@ -// PascalABC.NET +// Простейшие новые возможности языка PascalABC.NET -// +// Инициализация переменной при описании var i: integer := 1; -// +// Автоопределение типа переменной при инициализации var r := 2.5; begin - // + // Внутриблочные описания переменных var s: real := 1.0; - // ( - ) + // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) for j: integer := 1 to 10 do - s += j; // += + s += j; // Операция += для чисел var p := 1; - // + // Описание переменной в заголовке цикла с автоопределением типа for var j := 1 to 10 do - p *= j; // *= + p *= j; // Операция *= var str := ''; for c: char := 'a' to 'z' do - str += c; // += + str += c; // Операция += для строк end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/01_First/StandardTypes.pas b/InstallerSamples/!MainFeatures/01_First/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/InstallerSamples/!MainFeatures/01_First/StandardTypes.pas +++ b/InstallerSamples/!MainFeatures/01_First/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/InstallerSamples/!MainFeatures/01_First/WriteAll.pas b/InstallerSamples/!MainFeatures/01_First/WriteAll.pas index 9aade8ace..7b9ca40ce 100644 --- a/InstallerSamples/!MainFeatures/01_First/WriteAll.pas +++ b/InstallerSamples/!MainFeatures/01_First/WriteAll.pas @@ -1,12 +1,12 @@ -/// write +/// Вывод различных типов процедурой write begin - // , , , + // Вывод, целого, строки, вещественного Writeln(1,' ',2.5); - // + // Вывод множества Writeln([1..10]); - // + // Вывод логического Writeln(True); var a: array [1..10] of integer; - // ( ) + // Вывод массива (выводится его тип) Writeln(a); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/01_First/WriteFormat.pas b/InstallerSamples/!MainFeatures/01_First/WriteFormat.pas index 7e060018f..a6ea0c119 100644 --- a/InstallerSamples/!MainFeatures/01_First/WriteFormat.pas +++ b/InstallerSamples/!MainFeatures/01_First/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); - // + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/CharFunc.pas b/InstallerSamples/!MainFeatures/02_Types/CharFunc.pas index fb28b2ac8..95bed5ad7 100644 --- a/InstallerSamples/!MainFeatures/02_Types/CharFunc.pas +++ b/InstallerSamples/!MainFeatures/02_Types/CharFunc.pas @@ -1,4 +1,4 @@ -// Ord, Chr, OrdUnicode, ChrUnicode +// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode var c: char; i: integer; @@ -6,14 +6,14 @@ var begin writeln('sizeof(char) = ',sizeof(char)); writeln; - c := ''; + c := 'Ж'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); writeln; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/Dynarray.pas b/InstallerSamples/!MainFeatures/02_Types/Dynarray.pas index 746b47274..63d162f37 100644 --- a/InstallerSamples/!MainFeatures/02_Types/Dynarray.pas +++ b/InstallerSamples/!MainFeatures/02_Types/Dynarray.pas @@ -1,4 +1,4 @@ -// +// Процедуры и методы работы с динамическим массивом uses System; procedure Print(a: array of integer); @@ -11,30 +11,30 @@ end; var a: array of integer; begin - SetLength(a,10); // . : a := new integer[10]; + SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := PABCSystem.Random(100); - // + // Вывод всех элементов массива Print(a); - // ( & , - // array - // Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении + // класса Array) &Array.Sort(a); Print(a); - // + // Обращение массива &Array.Reverse(a); Print(a); - // . SetLength + // Изменение размерамассиав с сохранением элементов. То же делает SetLength &Array.Resize(a,a.Length+2); Print(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 50); Writeln(i); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/Enum.pas b/InstallerSamples/!MainFeatures/02_Types/Enum.pas index b9d3d0a87..db92312ee 100644 --- a/InstallerSamples/!MainFeatures/02_Types/Enum.pas +++ b/InstallerSamples/!MainFeatures/02_Types/Enum.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/InitRecords.pas b/InstallerSamples/!MainFeatures/02_Types/InitRecords.pas index 4706c7177..5befeb806 100644 --- a/InstallerSamples/!MainFeatures/02_Types/InitRecords.pas +++ b/InstallerSamples/!MainFeatures/02_Types/InitRecords.pas @@ -1,8 +1,8 @@ -// +// Инициализаторы полей записи type Frac = record num: integer := 0; - denom := 1; // - denom: integer + denom := 1; // автоопределеине типа - denom: integer end; var diff --git a/InstallerSamples/!MainFeatures/02_Types/PointerToRef.pas b/InstallerSamples/!MainFeatures/02_Types/PointerToRef.pas index e8b16f921..8a07a43a9 100644 --- a/InstallerSamples/!MainFeatures/02_Types/PointerToRef.pas +++ b/InstallerSamples/!MainFeatures/02_Types/PointerToRef.pas @@ -1,4 +1,4 @@ -// . : +// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы type A = class i: integer; diff --git a/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/Pointers.pas b/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/Pointers.pas index ea8ee15ba..42aa2fc6d 100644 --- a/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/Pointers.pas +++ b/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/Pointers.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,12 +32,12 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin var p1 := p; p := p^.next; - Dispose(p1); // + Dispose(p1); // Память обязательно возвращать end; end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/References.pas b/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/References.pas index 0f3c23c36..fabbe9d1f 100644 --- a/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/References.pas +++ b/InstallerSamples/!MainFeatures/02_Types/PointersVsRef/References.pas @@ -1,5 +1,5 @@ -// -// +// Использование ссылок вместо указателей для создания односвязного списка +// Мы рекомендуем именно этот способ type Node = class data: integer; @@ -11,18 +11,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -30,6 +30,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/Sets.pas b/InstallerSamples/!MainFeatures/02_Types/Sets.pas index 21022da8a..a404ba7bd 100644 --- a/InstallerSamples/!MainFeatures/02_Types/Sets.pas +++ b/InstallerSamples/!MainFeatures/02_Types/Sets.pas @@ -1,15 +1,15 @@ -// -// +// Работа с множествами +// Базовый тип для множества может быть произвольным var - s1: set of string := ['','','','']; - s2: set of string := ['','','']; + s1: set of string := ['Иванов','Попов','Сидорова','Петров']; + s2: set of string := ['Козлов','Петров','Иванов']; begin - writeln(' s1: ',s1); - writeln(' s2: ',s2); - writeln(' s1 s2: ',s1+s2); - writeln(' s1 s2: ',s1*s2); - writeln(' s1 s2: ',s1-s2); - Include(s1,''); - Exclude(s1,''); - writeln(' s1: ',s1); + writeln('Множество s1: ',s1); + writeln('Множество s2: ',s2); + writeln('Объединение множеств s1 и s2: ',s1+s2); + writeln('Пересечение множеств s1 и s2: ',s1*s2); + writeln('Разность множеств s1 и s2: ',s1-s2); + Include(s1,'Умнов'); + Exclude(s1,'Иванов'); + writeln('Множество s1: ',s1); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/StringInteger.pas b/InstallerSamples/!MainFeatures/02_Types/StringInteger.pas index 60f5db050..ce86a50a3 100644 --- a/InstallerSamples/!MainFeatures/02_Types/StringInteger.pas +++ b/InstallerSamples/!MainFeatures/02_Types/StringInteger.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/StringMethods.pas b/InstallerSamples/!MainFeatures/02_Types/StringMethods.pas index 69cf7ddb1..609eb8234 100644 --- a/InstallerSamples/!MainFeatures/02_Types/StringMethods.pas +++ b/InstallerSamples/!MainFeatures/02_Types/StringMethods.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/StringTypes.pas b/InstallerSamples/!MainFeatures/02_Types/StringTypes.pas index 4cb3e8a0f..7e89b95d1 100644 --- a/InstallerSamples/!MainFeatures/02_Types/StringTypes.pas +++ b/InstallerSamples/!MainFeatures/02_Types/StringTypes.pas @@ -1,17 +1,17 @@ -// string, string[n], shortstring +// Строки string, string[n], shortstring var - s: string; // , s, - s10: string[10]; // ss + s: string; // память, занимаемая s, зависит от ее длины + s10: string[10]; // память под ss фиксирована ss: shortstring := s; f: file of string[10]; - // f: file of string; - + // f: file of string; - ошибка begin s := '12345678901234567890'; - s10 := s; // + s10 := s; // обрезание writeln(s10); s += s; s += s; s += s; s += s; writeln(s); - writeln(' = ',s.Length); + writeln('Длина строки = ',s.Length); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/StructTypeEquiv.pas b/InstallerSamples/!MainFeatures/02_Types/StructTypeEquiv.pas index 2dec49906..8648f73fd 100644 --- a/InstallerSamples/!MainFeatures/02_Types/StructTypeEquiv.pas +++ b/InstallerSamples/!MainFeatures/02_Types/StructTypeEquiv.pas @@ -1,4 +1,4 @@ -// . Delphi - +// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность var a: array of integer; a1: array of integer; @@ -18,6 +18,6 @@ begin a := a1; s := s1; p := p1; - r := r1; // Delphi - proc(a,s,p,r); // - + r := r1; // В Delphi ни одно из этих присваиваний не сработает + proc(a,s,p,r); // Этот вызов - тоже end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/02_Types/UntypedFile.pas b/InstallerSamples/!MainFeatures/02_Types/UntypedFile.pas index c49eaa091..24bb11de5 100644 --- a/InstallerSamples/!MainFeatures/02_Types/UntypedFile.pas +++ b/InstallerSamples/!MainFeatures/02_Types/UntypedFile.pas @@ -1,4 +1,4 @@ -// +// Бестиповые файлы var f: file; i: integer; @@ -8,11 +8,11 @@ var begin assign(f,'a.dat'); rewrite(f); - // + // Записываем в файл данные любых типов write(f,1,2.5,'Hello'); close(f); reset(f); - // + // Считываем эти данные из файла read(f,i,r,s); write(i,' ',r,' ',s); close(f); diff --git a/InstallerSamples/!MainFeatures/03_Subroutines/FuncParams.pas b/InstallerSamples/!MainFeatures/03_Subroutines/FuncParams.pas index 1e87cffe7..ceb59baad 100644 --- a/InstallerSamples/!MainFeatures/03_Subroutines/FuncParams.pas +++ b/InstallerSamples/!MainFeatures/03_Subroutines/FuncParams.pas @@ -1,4 +1,4 @@ -// +// Переменное число параметров function Sum(params arg: array of integer): integer; begin Result := 0; diff --git a/InstallerSamples/!MainFeatures/03_Subroutines/Overload.pas b/InstallerSamples/!MainFeatures/03_Subroutines/Overload.pas index 09e4321ce..f3b5eaef1 100644 --- a/InstallerSamples/!MainFeatures/03_Subroutines/Overload.pas +++ b/InstallerSamples/!MainFeatures/03_Subroutines/Overload.pas @@ -1,4 +1,4 @@ -// +// Перегрузка имен подпрограмм procedure proc(i: integer); begin writeln('integer'); diff --git a/InstallerSamples/!MainFeatures/03_Subroutines/ProcVars.pas b/InstallerSamples/!MainFeatures/03_Subroutines/ProcVars.pas index e6b1774e5..073617a04 100644 --- a/InstallerSamples/!MainFeatures/03_Subroutines/ProcVars.pas +++ b/InstallerSamples/!MainFeatures/03_Subroutines/ProcVars.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/InstallerSamples/!MainFeatures/03_Subroutines/SwapT.pas b/InstallerSamples/!MainFeatures/03_Subroutines/SwapT.pas index 906247f7a..645e791bf 100644 --- a/InstallerSamples/!MainFeatures/03_Subroutines/SwapT.pas +++ b/InstallerSamples/!MainFeatures/03_Subroutines/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,13 +11,13 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); var c := 2.5; var d := 3.3; writeln; - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('До Swap c={0}, d={1}',c,d); Swap(c,d); - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('После Swap c={0}, d={1}',c,d); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/04_Units/CallC#/CallCS.pas b/InstallerSamples/!MainFeatures/04_Units/CallC#/CallCS.pas index f2af72ec0..d118c77ac 100644 --- a/InstallerSamples/!MainFeatures/04_Units/CallC#/CallCS.pas +++ b/InstallerSamples/!MainFeatures/04_Units/CallC#/CallCS.pas @@ -1,5 +1,5 @@ -// add Class1, ClassLibrary1 -// Class1 ClassLibrary1.dll, C# +// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1 +// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C# {$reference ClassLibrary1.dll} uses ClassLibrary1; diff --git a/InstallerSamples/!MainFeatures/04_Units/DllTest/MyDll.pas b/InstallerSamples/!MainFeatures/04_Units/DllTest/MyDll.pas index 3d9b4026c..8d5974158 100644 --- a/InstallerSamples/!MainFeatures/04_Units/DllTest/MyDll.pas +++ b/InstallerSamples/!MainFeatures/04_Units/DllTest/MyDll.pas @@ -1,4 +1,4 @@ -// Dll- +// Dll-библиотека library MyDll; const n = 10; diff --git a/InstallerSamples/!MainFeatures/04_Units/DllTest/main.pas b/InstallerSamples/!MainFeatures/04_Units/DllTest/main.pas index bb2c74f49..42e9893c6 100644 --- a/InstallerSamples/!MainFeatures/04_Units/DllTest/main.pas +++ b/InstallerSamples/!MainFeatures/04_Units/DllTest/main.pas @@ -1,6 +1,6 @@ -// - -// dll-, PascalABC.NET, , -// +// Это - главная программа +// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, +// не подключая пространства имен {$reference mydll.dll} begin diff --git a/InstallerSamples/!MainFeatures/04_Units/NativeDll/CallNative.pas b/InstallerSamples/!MainFeatures/04_Units/NativeDll/CallNative.pas index 5876266f3..294747533 100644 --- a/InstallerSamples/!MainFeatures/04_Units/NativeDll/CallNative.pas +++ b/InstallerSamples/!MainFeatures/04_Units/NativeDll/CallNative.pas @@ -1,6 +1,6 @@ -// dll -function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // +// Вызов функции из обычной dll +function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции -begin // +begin // основная программа writeln(add(2,3)); end. diff --git a/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas b/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas index 81199623c..98617cdfc 100644 --- a/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas +++ b/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas @@ -1,7 +1,7 @@ -uses MyUnit; // +uses MyUnit; // подключили модуль var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6); begin - writeln(' = ',Max(a)); + writeln('Максимальный элемент в массиве = ',Max(a)); end. diff --git a/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas b/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas index 06ec89d2e..70fb761e3 100644 --- a/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas +++ b/InstallerSamples/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas @@ -1,8 +1,8 @@ -/// -unit MyUnit; // +/// Модуль упрощенной структуры +unit MyUnit; // имя модуля должно совпадать с именем файла -// -/// +// Документирующие комментарии отображаются при наведении на имя курсора мыши +/// Возвращает максимальный элемент в массиве function Max(a: array of integer): integer; begin Result := integer.MinValue; diff --git a/InstallerSamples/!MainFeatures/04_Units/SystemUnitTest.pas b/InstallerSamples/!MainFeatures/04_Units/SystemUnitTest.pas index d05210d39..262e7f035 100644 --- a/InstallerSamples/!MainFeatures/04_Units/SystemUnitTest.pas +++ b/InstallerSamples/!MainFeatures/04_Units/SystemUnitTest.pas @@ -1,12 +1,12 @@ -// uses, PABCSystem +// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem uses System; begin - // Random, System, Random - // PABCSystem, + // Имя Random, определенное в пространстве имен System, перекрывает имя Random + // в модуле PABCSystem, который неявно подключается первым var r: Random := new Random(); writeln(r.Next(10)); - // Random , + // Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится var i: integer := PABCSystem.Random(10); writeln(i); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/05_Graph/ABC.pas b/InstallerSamples/!MainFeatures/05_Graph/ABC.pas index df9c3d346..de94d7aba 100644 --- a/InstallerSamples/!MainFeatures/05_Graph/ABC.pas +++ b/InstallerSamples/!MainFeatures/05_Graph/ABC.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; diff --git a/InstallerSamples/!MainFeatures/05_Graph/GraphABCTest.pas b/InstallerSamples/!MainFeatures/05_Graph/GraphABCTest.pas index 818687764..cd8f125a1 100644 --- a/InstallerSamples/!MainFeatures/05_Graph/GraphABCTest.pas +++ b/InstallerSamples/!MainFeatures/05_Graph/GraphABCTest.pas @@ -1,4 +1,4 @@ -// GraphABC +// Иллюстрация простейших возможностей GraphABC uses GraphABC; begin diff --git a/InstallerSamples/!MainFeatures/05_Graph/MouseEvents.pas b/InstallerSamples/!MainFeatures/05_Graph/MouseEvents.pas index 064766eae..f48183e0a 100644 --- a/InstallerSamples/!MainFeatures/05_Graph/MouseEvents.pas +++ b/InstallerSamples/!MainFeatures/05_Graph/MouseEvents.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация обработки событий мыши uses GraphABC; procedure MouseDown(x,y,mb: integer); @@ -12,7 +12,7 @@ begin end; begin - // + // Привязка обработчиков к событиям OnMouseDown := MouseDown; OnMouseMove := MouseMove end. diff --git a/InstallerSamples/!MainFeatures/06_Classes/AllFromObject.pas b/InstallerSamples/!MainFeatures/06_Classes/AllFromObject.pas index 1efc3f03b..ffa81bc06 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/AllFromObject.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/AllFromObject.pas @@ -1,4 +1,4 @@ -// - Object +// Все типы кроме указателей - производные от Object var i: integer; r: real; @@ -10,5 +10,5 @@ begin o := r; writeln(o.GetType); if o.GetType=typeof(real) then - writeln(' o - '); + writeln('В переменной o - вещественный тип'); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/06_Classes/Boxing.pas b/InstallerSamples/!MainFeatures/06_Classes/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/Boxing.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/InstallerSamples/!MainFeatures/06_Classes/ClassConstructor.pas b/InstallerSamples/!MainFeatures/06_Classes/ClassConstructor.pas index f7a00c36e..11679be8a 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/ClassConstructor.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Пример использования классового (статического) конструктора type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/06_Classes/GarbageCollection.pas b/InstallerSamples/!MainFeatures/06_Classes/GarbageCollection.pas index a4d6893e3..12954600f 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/GarbageCollection.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/GarbageCollection.pas @@ -1,4 +1,4 @@ -// : nil +// Сборка мусора: для освобождения объекта присвойте переменной nil var l := new List; begin @@ -7,5 +7,5 @@ begin l.Add(2); foreach var x in l do Print(x); - l := nil; // , , + l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/06_Classes/Interf.pas b/InstallerSamples/!MainFeatures/06_Classes/Interf.pas index eb28f2e84..065251331 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/Interf.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/Interf.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация использования интерфейсов type IShape = interface procedure Draw; diff --git a/InstallerSamples/!MainFeatures/06_Classes/OperatorOverloading.pas b/InstallerSamples/!MainFeatures/06_Classes/OperatorOverloading.pas index e6071b4bf..0fe1ee658 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/OperatorOverloading.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/OperatorOverloading.pas @@ -1,4 +1,4 @@ -// +// Перегрузка операций type Frac = record private diff --git a/InstallerSamples/!MainFeatures/06_Classes/PersonInternal.pas b/InstallerSamples/!MainFeatures/06_Classes/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/PersonInternal.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/06_Classes/Records.pas b/InstallerSamples/!MainFeatures/06_Classes/Records.pas index 26f54af7a..e95d97a88 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/Records.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/Records.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/InstallerSamples/!MainFeatures/06_Classes/Stack.pas b/InstallerSamples/!MainFeatures/06_Classes/Stack.pas index dda2835c3..d818e96ea 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/Stack.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/InstallerSamples/!MainFeatures/06_Classes/Where.pas b/InstallerSamples/!MainFeatures/06_Classes/Where.pas index 872cf309b..4b932d35a 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/Where.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/Where.pas @@ -1,4 +1,4 @@ -// Where - +// Секция Where - ограничение на типы параметров uses System,System.Collections.Generic; type @@ -15,7 +15,7 @@ type var m: MyClass; - //m1: MyClass; // + //m1: MyClass; // ошибка begin end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/06_Classes/WriteRecord.pas b/InstallerSamples/!MainFeatures/06_Classes/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/InstallerSamples/!MainFeatures/06_Classes/WriteRecord.pas +++ b/InstallerSamples/!MainFeatures/06_Classes/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/InstallerSamples/!MainFeatures/07_NetLibs/DateTime.pas b/InstallerSamples/!MainFeatures/07_NetLibs/DateTime.pas index 3820db357..01e72e36d 100644 --- a/InstallerSamples/!MainFeatures/07_NetLibs/DateTime.pas +++ b/InstallerSamples/!MainFeatures/07_NetLibs/DateTime.pas @@ -1,31 +1,31 @@ Uses System; -var d1, d2, d3: DateTime; // - ts: TimeSpan; // +var d1, d2, d3: DateTime; // Объекты для хранения даты и времени + ts: TimeSpan; // Объект для хранения промежутков времени begin - // - + // Получение текущей даты - вызов статического метода d1 := DateTime.Now; Writeln(d1); - // + // Дата и время через один месяц d2 := d1.AddMonths(1); Writeln(d2); - // 12 + // Дата и время на 12 часов раньше d2 := d1.AddHours(-12); Writeln(d2); - // - (, ,) + // Формирование даты - вызов конструктора объекта (год, месяц,число) d3 := new DateTime(2001, 1, 1); Writeln(d3); - // , ( ) + // Определение времени, прошедшего с начала тысячелетия (разность дат) ts := d1.Subtract(d3); - // ( - ) + // Промежуток времени в днях (результат - вещественное число) Writeln(ts.TotalDays); - // , , + // Промежуток времени в днях, часах, минутах и секундах Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds); end. \ No newline at end of file diff --git a/InstallerSamples/!MainFeatures/07_NetLibs/FormWebBrowser.pas b/InstallerSamples/!MainFeatures/07_NetLibs/FormWebBrowser.pas index d385a110e..840d6506d 100644 --- a/InstallerSamples/!MainFeatures/07_NetLibs/FormWebBrowser.pas +++ b/InstallerSamples/!MainFeatures/07_NetLibs/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser {$apptype windows} {$reference System.Windows.Forms.dll} diff --git a/InstallerSamples/!MainFeatures/07_NetLibs/LinkedList.pas b/InstallerSamples/!MainFeatures/07_NetLibs/LinkedList.pas index 303712765..dd1474e39 100644 --- a/InstallerSamples/!MainFeatures/07_NetLibs/LinkedList.pas +++ b/InstallerSamples/!MainFeatures/07_NetLibs/LinkedList.pas @@ -1,4 +1,4 @@ -// LinkedList - - +// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора uses System.Collections,System.Collections.Generic; procedure print(l: ICollection); diff --git a/InstallerSamples/!MainFeatures/07_NetLibs/Reflection.pas b/InstallerSamples/!MainFeatures/07_NetLibs/Reflection.pas index f9741e92f..99deddba5 100644 --- a/InstallerSamples/!MainFeatures/07_NetLibs/Reflection.pas +++ b/InstallerSamples/!MainFeatures/07_NetLibs/Reflection.pas @@ -1,4 +1,4 @@ -// . DateTime +// Отражение типов. Выводятся все члены типа DateTime uses System,System.Reflection; begin diff --git a/InstallerSamples/!MainFeatures/07_NetLibs/WinFormWithButton.pas b/InstallerSamples/!MainFeatures/07_NetLibs/WinFormWithButton.pas index aaec8b62b..a0f0c2c8c 100644 --- a/InstallerSamples/!MainFeatures/07_NetLibs/WinFormWithButton.pas +++ b/InstallerSamples/!MainFeatures/07_NetLibs/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения {$apptype windows} {$reference System.Windows.Forms.dll} @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/InstallerSamples/!Tutorial/01_First/Assign1.pas b/InstallerSamples/!Tutorial/01_First/Assign1.pas index 42322042f..ac5fe9ee8 100644 --- a/InstallerSamples/!Tutorial/01_First/Assign1.pas +++ b/InstallerSamples/!Tutorial/01_First/Assign1.pas @@ -1,12 +1,12 @@ -// +// Использование вспомогательных переменных var r: real; begin - write(' r: '); + write('Введите r: '); readln(r); - var r2,r4,r8: real; // + var r2,r4,r8: real; // вспомогательные переменные r2 := r * r; r4 := r2 * r2; r8 := r4 * r4; - writeln(r,' 8 = ',r8); + writeln(r,' в степени 8 = ',r8); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/Assign2.pas b/InstallerSamples/!Tutorial/01_First/Assign2.pas index e255b6f1f..13b2ad3a9 100644 --- a/InstallerSamples/!Tutorial/01_First/Assign2.pas +++ b/InstallerSamples/!Tutorial/01_First/Assign2.pas @@ -1,12 +1,12 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real; // + var v: real; // вспомогательная переменная v := x; x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/AssignExt.pas b/InstallerSamples/!Tutorial/01_First/AssignExt.pas index 69455e9c0..109d1f089 100644 --- a/InstallerSamples/!Tutorial/01_First/AssignExt.pas +++ b/InstallerSamples/!Tutorial/01_First/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Увеличение в 3 раза writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/InstallerSamples/!Tutorial/01_First/Boolean1.pas b/InstallerSamples/!Tutorial/01_First/Boolean1.pas index 8549b432e..630763ae6 100644 --- a/InstallerSamples/!Tutorial/01_First/Boolean1.pas +++ b/InstallerSamples/!Tutorial/01_First/Boolean1.pas @@ -1,16 +1,16 @@ -// . and, or not +// Логический тип. Логические выражения с and, or и not var b: boolean; x: integer; begin - write(' x ( 1 9): '); + write('Введите x (от 1 до 9): '); readln(x); b := x=5; writeln('x=5? ',b); b := (x>=3) and (x<=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := (x=3) or (x=4) or (x=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := not Odd(x); - writeln('x - ? ',b); + writeln('x - четное? ',b); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/Calculations1.pas b/InstallerSamples/!Tutorial/01_First/Calculations1.pas index 1a3aac935..f6ba098ae 100644 --- a/InstallerSamples/!Tutorial/01_First/Calculations1.pas +++ b/InstallerSamples/!Tutorial/01_First/Calculations1.pas @@ -1,7 +1,7 @@ -// +// Вывод результатов вычислений begin - writeln(':'); -// + writeln('Вычисления:'); +// Вывод пустой строки writeln; writeln('121 + 363 = ',121+363); writeln('121 - 363 = ',121-363); diff --git a/InstallerSamples/!Tutorial/01_First/Calculations2.pas b/InstallerSamples/!Tutorial/01_First/Calculations2.pas index a870b6f5f..ff692f587 100644 --- a/InstallerSamples/!Tutorial/01_First/Calculations2.pas +++ b/InstallerSamples/!Tutorial/01_First/Calculations2.pas @@ -1,10 +1,10 @@ -// . +// Вывод результатов вычислений. Используются именованные константы const a = 121; b = 363; begin - writeln(':'); + writeln('Вычисления:'); writeln; writeln(a,' + ',b,' = ',a+b); writeln(a,' - ',b,' = ',a-b); diff --git a/InstallerSamples/!Tutorial/01_First/Calculations3.pas b/InstallerSamples/!Tutorial/01_First/Calculations3.pas index e76a5c373..255a9b131 100644 --- a/InstallerSamples/!Tutorial/01_First/Calculations3.pas +++ b/InstallerSamples/!Tutorial/01_First/Calculations3.pas @@ -1,8 +1,8 @@ -// . +// Вывод результатов вычислений. Используются переменные и процедура ввода var a,b: integer; begin - writeln(' a b:'); + writeln('Введите a и b:'); readln(a,b); writeln; writeln(a,' + ',b,' = ',a+b); diff --git a/InstallerSamples/!Tutorial/01_First/DivMod1.pas b/InstallerSamples/!Tutorial/01_First/DivMod1.pas index 73461e4ad..37fc92a04 100644 --- a/InstallerSamples/!Tutorial/01_First/DivMod1.pas +++ b/InstallerSamples/!Tutorial/01_First/DivMod1.pas @@ -1,10 +1,10 @@ -// div mod +// Операции div и mod var a: integer; begin - write(' a: '); + write('Введите a: '); readln(a); - writeln(' : ',a mod 10); - writeln(' : ',a div 10); - writeln(' a , 0: ',a mod 2); + writeln('Последняя цифра числа: ',a mod 10); + writeln('Число без последней цифры: ',a div 10); + writeln('Если число a четно, то 0: ',a mod 2); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/DivMod2.pas b/InstallerSamples/!Tutorial/01_First/DivMod2.pas index 8ba18f637..7a008006b 100644 --- a/InstallerSamples/!Tutorial/01_First/DivMod2.pas +++ b/InstallerSamples/!Tutorial/01_First/DivMod2.pas @@ -1,11 +1,11 @@ -// div mod +// Операции div и mod var a: integer := 247; begin - write(' : '); - // + write('Цифры числа в обратном порядке: '); + // Выводим последнюю цифру write(a mod 10,' '); - // + // Отбрасываем последнюю цифру a := a div 10; write(a mod 10,' '); a := a div 10; diff --git a/InstallerSamples/!Tutorial/01_First/Eof.pas b/InstallerSamples/!Tutorial/01_First/Eof.pas index 7dbc0f14f..6fbf05213 100644 --- a/InstallerSamples/!Tutorial/01_First/Eof.pas +++ b/InstallerSamples/!Tutorial/01_First/Eof.pas @@ -1,4 +1,4 @@ -// eof. Shift-F9 +// Демонстрация работы функции eof. Запускать по Shift-F9 var s: char; begin while not eof do diff --git a/InstallerSamples/!Tutorial/01_First/Eoln.pas b/InstallerSamples/!Tutorial/01_First/Eoln.pas index 8c5711e4d..9d1ff68a2 100644 --- a/InstallerSamples/!Tutorial/01_First/Eoln.pas +++ b/InstallerSamples/!Tutorial/01_First/Eoln.pas @@ -1,4 +1,4 @@ -// eoln +// Демонстрация работы функции eoln begin while not eoln do begin diff --git a/InstallerSamples/!Tutorial/01_First/HelloWorld.pas b/InstallerSamples/!Tutorial/01_First/HelloWorld.pas index b1bce0920..0ce413328 100644 --- a/InstallerSamples/!Tutorial/01_First/HelloWorld.pas +++ b/InstallerSamples/!Tutorial/01_First/HelloWorld.pas @@ -1,5 +1,5 @@ -// +// Первая программа program HelloWorld; begin - writeln(', !'); + writeln('Привет, мир!'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/Random1.pas b/InstallerSamples/!Tutorial/01_First/Random1.pas index 1f982a093..e8738e012 100644 --- a/InstallerSamples/!Tutorial/01_First/Random1.pas +++ b/InstallerSamples/!Tutorial/01_First/Random1.pas @@ -1,13 +1,13 @@ -// +// Генерация случайного числа var i: integer; r: real; begin i := Random(100); - writeln(' 0..99: ',i); + writeln('Случайное целое в диапазоне 0..99: ',i); i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); r := Random; - writeln(' [0,1): ',r); + writeln('Случайное вещественное в диапазоне [0,1): ',r); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/Random2.pas b/InstallerSamples/!Tutorial/01_First/Random2.pas index 7e06c292a..edb94ebd9 100644 --- a/InstallerSamples/!Tutorial/01_First/Random2.pas +++ b/InstallerSamples/!Tutorial/01_First/Random2.pas @@ -1,10 +1,10 @@ -// +// Бросание кубиков var k1,k2: integer; begin k1 := Random(1,6); k2 := Random(1,6); - writeln(' : ',k1,' ',k2); - writeln(' : ',k1+k2); + writeln('Очки на кубиках: ',k1,' ',k2); + writeln('Сумма очков: ',k1+k2); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/ReadString.pas b/InstallerSamples/!Tutorial/01_First/ReadString.pas index d3c73b506..a214b05b6 100644 --- a/InstallerSamples/!Tutorial/01_First/ReadString.pas +++ b/InstallerSamples/!Tutorial/01_First/ReadString.pas @@ -1,8 +1,8 @@ -// +// Ввод строки var s: string; begin - write(' : '); + write('Введите Ваше имя: '); readln(s); - writeln(', ',s); + writeln('Здравствуйте, ',s); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/Shl.pas b/InstallerSamples/!Tutorial/01_First/Shl.pas index 5c47af256..5a381c181 100644 --- a/InstallerSamples/!Tutorial/01_First/Shl.pas +++ b/InstallerSamples/!Tutorial/01_First/Shl.pas @@ -1,6 +1,6 @@ -// shl +// Демонстрация операции shl begin - writeln(' '); + writeln('Степени двойки'); writeln(' n 2^n'); for var i:=0 to 30 do writeln(i:2,(1 shl i):12); diff --git a/InstallerSamples/!Tutorial/01_First/StandFun.pas b/InstallerSamples/!Tutorial/01_First/StandFun.pas index 369ddac57..5d820f901 100644 --- a/InstallerSamples/!Tutorial/01_First/StandFun.pas +++ b/InstallerSamples/!Tutorial/01_First/StandFun.pas @@ -1,14 +1,14 @@ -// +// Стандартные функции var x: real; begin - write(' x: '); + write('Введите x: '); readln(x); - writeln(' ',x,' ',sqr(x)); - writeln(x,' 5 ',power(x,5)); - writeln(' ',x,' ',sqrt(x)); - writeln(' ',x,' ',abs(x)); - writeln(' ',x,' ',ln(x)); - writeln(' ',x,' ',sin(x)); - writeln(' ',x,' ',cos(x)); + writeln('Квадрат ',x,' равен ',sqr(x)); + writeln(x,' в степени 5 равно ',power(x,5)); + writeln('Квадратный корень из ',x,' равен ',sqrt(x)); + writeln('Модуль ',x,' равен ',abs(x)); + writeln('Натуральный логарифм ',x,' равен ',ln(x)); + writeln('Синус ',x,' равен ',sin(x)); + writeln('Косинус ',x,' равен ',cos(x)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/01_First/StandardTypes.pas b/InstallerSamples/!Tutorial/01_First/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/InstallerSamples/!Tutorial/01_First/StandardTypes.pas +++ b/InstallerSamples/!Tutorial/01_First/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/InstallerSamples/!Tutorial/01_First/StringPlus.pas b/InstallerSamples/!Tutorial/01_First/StringPlus.pas index d301057c1..f267a010f 100644 --- a/InstallerSamples/!Tutorial/01_First/StringPlus.pas +++ b/InstallerSamples/!Tutorial/01_First/StringPlus.pas @@ -1,4 +1,4 @@ -// +// Сложение строк var s1: string := 'Pascal'; var s2: string := 'NET'; diff --git a/InstallerSamples/!Tutorial/01_First/WriteFormat.pas b/InstallerSamples/!Tutorial/01_First/WriteFormat.pas index 12be8c1c3..81b23cce6 100644 --- a/InstallerSamples/!Tutorial/01_First/WriteFormat.pas +++ b/InstallerSamples/!Tutorial/01_First/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); - // + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/02_Errors/CompilerError1.pas b/InstallerSamples/!Tutorial/02_Errors/CompilerError1.pas index 2c81d9e25..89b2f9ac6 100644 --- a/InstallerSamples/!Tutorial/02_Errors/CompilerError1.pas +++ b/InstallerSamples/!Tutorial/02_Errors/CompilerError1.pas @@ -1,5 +1,5 @@ -// . -// , , +// Исправьте ошибку компиляции. +// Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку var i: integer begin diff --git a/InstallerSamples/!Tutorial/02_Errors/CompilerError2.pas b/InstallerSamples/!Tutorial/02_Errors/CompilerError2.pas index 5644dc696..965d64a33 100644 --- a/InstallerSamples/!Tutorial/02_Errors/CompilerError2.pas +++ b/InstallerSamples/!Tutorial/02_Errors/CompilerError2.pas @@ -1,4 +1,4 @@ -// . r +// Исправьте ошибки компиляции. Опишите переменную r begin r := 2.5; witeln(r); diff --git a/InstallerSamples/!Tutorial/02_Errors/CompilerError3.pas b/InstallerSamples/!Tutorial/02_Errors/CompilerError3.pas index a054bef9b..77ac7ce3b 100644 --- a/InstallerSamples/!Tutorial/02_Errors/CompilerError3.pas +++ b/InstallerSamples/!Tutorial/02_Errors/CompilerError3.pas @@ -1,4 +1,4 @@ -// . "" +// Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки var k: real; diff --git a/InstallerSamples/!Tutorial/02_Errors/CompilerError4.pas b/InstallerSamples/!Tutorial/02_Errors/CompilerError4.pas index 64d349a40..f4ad2ff53 100644 --- a/InstallerSamples/!Tutorial/02_Errors/CompilerError4.pas +++ b/InstallerSamples/!Tutorial/02_Errors/CompilerError4.pas @@ -1,4 +1,4 @@ -// , x +// Исправьте ошибки компиляции, изменив тип переменной x var x: integer; begin diff --git a/InstallerSamples/!Tutorial/02_Errors/RuntimeError1.pas b/InstallerSamples/!Tutorial/02_Errors/RuntimeError1.pas index 1bd7d699d..07b8eb262 100644 --- a/InstallerSamples/!Tutorial/02_Errors/RuntimeError1.pas +++ b/InstallerSamples/!Tutorial/02_Errors/RuntimeError1.pas @@ -1,5 +1,5 @@ -// -// , +// Введите не число +// Посмотрите, как выглядит ошибка при выполнении программы var i: integer; begin diff --git a/InstallerSamples/!Tutorial/02_Errors/RuntimeError2.pas b/InstallerSamples/!Tutorial/02_Errors/RuntimeError2.pas index 5a2a0cc69..c505b4c3f 100644 --- a/InstallerSamples/!Tutorial/02_Errors/RuntimeError2.pas +++ b/InstallerSamples/!Tutorial/02_Errors/RuntimeError2.pas @@ -1,4 +1,4 @@ -// , 0 +// Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0 var i: integer := 0; begin diff --git a/InstallerSamples/!Tutorial/02_Errors/RuntimeError3.pas b/InstallerSamples/!Tutorial/02_Errors/RuntimeError3.pas index a63a7d716..bd7e13190 100644 --- a/InstallerSamples/!Tutorial/02_Errors/RuntimeError3.pas +++ b/InstallerSamples/!Tutorial/02_Errors/RuntimeError3.pas @@ -1,4 +1,4 @@ -// 0 +// При обычном делении на 0 ошибки не возникает var r: real := 0; begin diff --git a/InstallerSamples/!Tutorial/02_Errors/RuntimeError4.pas b/InstallerSamples/!Tutorial/02_Errors/RuntimeError4.pas index de00f217a..e5d2f7412 100644 --- a/InstallerSamples/!Tutorial/02_Errors/RuntimeError4.pas +++ b/InstallerSamples/!Tutorial/02_Errors/RuntimeError4.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(sqrt(-1)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/03_Robot_Drawman/DMa1.pas b/InstallerSamples/!Tutorial/03_Robot_Drawman/DMa1.pas index 9f60a20fe..fde4bef24 100644 --- a/InstallerSamples/!Tutorial/03_Robot_Drawman/DMa1.pas +++ b/InstallerSamples/!Tutorial/03_Robot_Drawman/DMa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L DM +// Исполнитель Чертежник - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания uses Drawman; begin diff --git a/InstallerSamples/!Tutorial/03_Robot_Drawman/RBa1.pas b/InstallerSamples/!Tutorial/03_Robot_Drawman/RBa1.pas index 5162e32a4..e7c59265c 100644 --- a/InstallerSamples/!Tutorial/03_Robot_Drawman/RBa1.pas +++ b/InstallerSamples/!Tutorial/03_Robot_Drawman/RBa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L RB +// Исполнитель Робот - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания uses Robot; begin diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr1.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr1.pas index 1a55d87d0..1b3eb122e 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr1.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr1.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Линии. Размеры окна. Заголовок окна uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Первая графическая программа'; Line(0,0,Window.Width-1,Window.Height-1); Line(0,Window.Height-1,Window.Width-1,0); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr2.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr2.pas index a4f21e187..0471c2aa8 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr2.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr2.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Точка. Случайный цвет. Скорость работы uses GraphABC,Utils; begin for var i:=1 to 100000 do SetPixel(Random(Window.Width),Random(Window.Height),clRandom); - writeln(' : ',Milliseconds/1000,' '); + writeln('Время работы: ',Milliseconds/1000,' секунд'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr3.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr3.pas index 66e1f3881..de0d7ae58 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr3.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr3.pas @@ -1,8 +1,8 @@ -// . +// Графика. Свойства кисти и пера uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Свойства кисти и пера'; Pen.Color := Color.Red; Pen.Width := 3; Pen.Style := psDashDot; diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr4.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr4.pas index e6c2025a1..7c060dd57 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr4.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr4.pas @@ -1,8 +1,8 @@ -// . Draw Fill - +// Графика. Draw и Fill - процедуры uses GraphABC; begin - Window.Title := 'Draw Fill - '; + Window.Title := 'Draw и Fill - процедуры'; for var i := 1 to 100 do begin Pen.Color := clRandom; diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr5.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr5.pas index 4cbaac953..979566e61 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr5.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr5.pas @@ -1,10 +1,10 @@ -// . Pie +// Графика. Pie uses GraphABC; const r = 200; begin - Window.Title := ' '; + Window.Title := 'Круговая гистограмма'; var x := Window.Center.X; var y := Window.Center.Y; Brush.Color := clRandom; diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr6.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr6.pas index b127200f3..6430311b0 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr6.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr6.pas @@ -1,8 +1,8 @@ -// . +// Графика. Прозрачность uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация прозрачности'; Brush.Color := clRed; FillRectangle(50,50,100,Window.Height - 50); diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr7.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr7.pas index ef1f7ca6a..3eacff030 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr7.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr7.pas @@ -1,4 +1,4 @@ -// . +// Графика. Сохраниение изображения графического окна в файл и загрузка из файла uses GraphABC; const @@ -6,7 +6,7 @@ const filename = 'GraphWindow.bmp'; begin - Window.Title := 'Window.Save Window.Load'; + Window.Title := 'Window.Save и Window.Load'; SetWindowSize(320,240); for var x:=0 to Window.Width - 1 do diff --git a/InstallerSamples/!Tutorial/04_Graphics/Gr8.pas b/InstallerSamples/!Tutorial/04_Graphics/Gr8.pas index 278994fb4..678a0a382 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/Gr8.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/Gr8.pas @@ -1,9 +1,9 @@ -// . +// Графика. Сглаживание uses GraphABC; begin - Window.Title := ' '; - TextOut(40,20,' '); + Window.Title := 'Демонстрация сглаживания'; + TextOut(40,20,'Со сглаживанием'); Pen.Width := 2; Ellipse(40,60,300,200); @@ -11,7 +11,7 @@ begin Line(600,130,340,200); SetSmoothingOff; - TextOut(40,240,' '); + TextOut(40,240,'Без сглаживания'); Ellipse(40,280,300,420); Line(340,280,600,350); Line(600,350,340,420); diff --git a/InstallerSamples/!Tutorial/04_Graphics/GrAnim1.pas b/InstallerSamples/!Tutorial/04_Graphics/GrAnim1.pas index 71dde4512..67e0b2d54 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/GrAnim1.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/GrAnim1.pas @@ -1,8 +1,8 @@ -// . "" . +// Графика. Пример "наивной" анимации. Эффект мерцания uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация простой анимации'; var y := 200; Brush.Color := clGreen; for var x := 70 to 500 do diff --git a/InstallerSamples/!Tutorial/04_Graphics/GrAnim2.pas b/InstallerSamples/!Tutorial/04_Graphics/GrAnim2.pas index bad081cf2..b88e17046 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/GrAnim2.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/GrAnim2.pas @@ -1,17 +1,17 @@ -// . LockDrawing-Redraw. +// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Анимация без мерцания'; var y := 200; Brush.Color := clGreen; - // + // Отключаем рисование в окне LockDrawing; for var x := 70 to 500 do begin Window.Clear(clWhite); Circle(x,y,50); - // + // Перерисовываем окно из внеэранного буфера Redraw; Sleep(3); end; diff --git a/InstallerSamples/!Tutorial/04_Graphics/GrCoord1.pas b/InstallerSamples/!Tutorial/04_Graphics/GrCoord1.pas index 169a52366..8da8ac886 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/GrCoord1.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/GrCoord1.pas @@ -1,15 +1,15 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; - // + // Поворот Coordinate.Angle := 30; - // + // Масштаб Coordinate.Scale := 3; - // - + // Начало координат - в центре окна Coordinate.Origin := Window.Center; Brush.Color := clMoneyGreen; diff --git a/InstallerSamples/!Tutorial/04_Graphics/GrCoord2.pas b/InstallerSamples/!Tutorial/04_Graphics/GrCoord2.pas index d5e2ba3f8..e81b9b651 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/GrCoord2.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/GrCoord2.pas @@ -1,8 +1,8 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; Coordinate.Origin := Window.Center; diff --git a/InstallerSamples/!Tutorial/04_Graphics/GrFont1.pas b/InstallerSamples/!Tutorial/04_Graphics/GrFont1.pas index 54600ef1d..40446966c 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/GrFont1.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/GrFont1.pas @@ -1,8 +1,8 @@ -// +// Демонстрация работы со шрифтами uses GraphABC; begin - Window.Title := ''; + Window.Title := 'Шрифты'; SetWindowSize(760,460); Font.Name := 'Arial'; Font.Style := fsBoldItalic; diff --git a/InstallerSamples/!Tutorial/04_Graphics/GrFont2.pas b/InstallerSamples/!Tutorial/04_Graphics/GrFont2.pas index 04b15835c..17947a8ff 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/GrFont2.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/GrFont2.pas @@ -1,10 +1,10 @@ -// TextWidth TextHeight +// Демонстрация использования TextWidth и TextHeight uses GraphABC; const s = 'Width & Height'; begin - Window.Title := ' '; + Window.Title := 'Текст по центру'; Window.IsFixedSize := True; SetWindowSize(700,300); Window.Center; diff --git a/InstallerSamples/!Tutorial/04_Graphics/GrPoly.pas b/InstallerSamples/!Tutorial/04_Graphics/GrPoly.pas index 7abc91298..68f80312d 100644 --- a/InstallerSamples/!Tutorial/04_Graphics/GrPoly.pas +++ b/InstallerSamples/!Tutorial/04_Graphics/GrPoly.pas @@ -1,11 +1,11 @@ -// Polyline, Polygon, Curve, ClosedCurve -// +// Процедуры Polyline, Polygon, Curve, ClosedCurve +// Перенос начала системы координат uses GraphABC; var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); begin - Window.Title := ' '; + Window.Title := 'Рисование по массиву точек'; Brush.Color := Color.Beige; Coordinate.SetOrigin(60,30); Polyline(a); diff --git a/InstallerSamples/!Tutorial/04a_ABCObjects/ABC1.pas b/InstallerSamples/!Tutorial/04a_ABCObjects/ABC1.pas index dda84ddc0..0fe49e801 100644 --- a/InstallerSamples/!Tutorial/04a_ABCObjects/ABC1.pas +++ b/InstallerSamples/!Tutorial/04a_ABCObjects/ABC1.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; @@ -13,7 +13,7 @@ var z: StarABC; begin - Window.Title := 'ABCObjects: '; + Window.Title := 'ABCObjects: свойства графических объектов'; z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); r := new RectangleABC(100,100,200,100,Color.Gold); Pause; diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case1.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case1.pas index 8c5bfd0e0..9f2c5a27c 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case1.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case1.pas @@ -1,15 +1,15 @@ -// +// Оператор выбора var x: integer; begin - writeln(' (1..5): '); + writeln('Введите оценку (1..5): '); readln(x); case x of - 1: writeln(''); - 2: writeln(''); - 3: writeln(''); - 4: writeln(''); - 5: writeln(''); - else writeln(' '); + 1: writeln('Единица'); + 2: writeln('Двойка'); + 3: writeln('Тройка'); + 4: writeln('Четверка'); + 5: writeln('Пятерка'); + else writeln('Такой оценки нет'); end; end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case2.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case2.pas index 5bad5a41d..a6b257bbd 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case2.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case2.pas @@ -1,12 +1,12 @@ -// +// Оператор выбора var day: integer; begin - writeln(' (1..7): '); + writeln('Введите номер дня недели (1..7): '); readln(day); case day of - 1..5: writeln(''); - 6,7: writeln(''); - else writeln(' '); + 1..5: writeln('Будний'); + 6,7: writeln('Выходной'); + else writeln('Неверный день недели'); end; end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case3.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case3.pas index 7e7613a2f..bd061c036 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case3.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case3.pas @@ -1,12 +1,12 @@ -// +// Оператор выбора var c: char; begin - writeln(' : '); + writeln('Введите символ: '); readln(c); case c of - '0'..'9': writeln(' '); - 'a'..'z','A'..'Z': writeln(' '); - ''..'',''..'': writeln(' '); + '0'..'9': writeln('Это цифра'); + 'a'..'z','A'..'Z': writeln('Это английская буква'); + 'а'..'я','А'..'Я': writeln('Это русская буква'); end; end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case4.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case4.pas index 49673d294..ce699c1ca 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case4.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/Case4.pas @@ -1,4 +1,4 @@ -// . +// Оператор выбора. Случайная фигура uses GraphABC; begin diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If1.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If1.pas index 53dd71338..a76e75399 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If1.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If1.pas @@ -1,4 +1,4 @@ -// . +// Условный оператор. Полная форма var x: integer := 5; y: integer := 3; diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If2.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If2.pas index 04caabbf0..e0274b8e0 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If2.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If2.pas @@ -1,9 +1,9 @@ -// . +// Условный оператор. Сокращенная форма var pass: string; begin - writeln(' : '); + writeln('Введите пароль: '); readln(pass); if pass = 'NET' then - writeln(' '); + writeln('Пароль правильный'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If3.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If3.pas index f7a241c26..ef8a1e72d 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If3.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If3.pas @@ -1,14 +1,14 @@ -// . or and +// Условный оператор. Логические условия с or и and var x: integer; begin - writeln(' x ( 1 99): '); + writeln('Введите x (от 1 до 99): '); readln(x); if (x>=1) and (x<=9) then - writeln(' '); - // Odd - , True x - + writeln('Однозначное число'); + // Odd - функция, возвращающая True только если x - нечетно if Odd(x) and (x>=10) and (x<=99) then - writeln(' '); + writeln('Нечетное двузначное число'); if (x=3) or (x=9) or (x=27) or (x=81) then - writeln(' '); + writeln('Степень тройки'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If4.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If4.pas index ae25cbd92..41008a92a 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If4.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If4.pas @@ -1,18 +1,18 @@ -// +// Вложенные условные операторы var x: integer; begin - writeln(' (1..5): '); + writeln('Введите оценку (1..5): '); readln(x); if (x=1) then - writeln('') + writeln('Единица') else if (x=2) then - writeln('') + writeln('Двойка') else if (x=3) then - writeln('') + writeln('Тройка') else if (x=4) then - writeln('') + writeln('Четверка') else if (x=5) then - writeln('') - else writeln(' ') + writeln('Пятерка') + else writeln('Такой оценки нет') end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If5.pas b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If5.pas index 8371ce053..074bf783b 100644 --- a/InstallerSamples/!Tutorial/05_IfCaseBoolean/If5.pas +++ b/InstallerSamples/!Tutorial/05_IfCaseBoolean/If5.pas @@ -1,19 +1,19 @@ -// . +// Вложенные условные операторы. Антонимы var s: string; begin - writeln(' (,,,,): '); + writeln('Введите слово из списка (черный,высокий,свет,радость,умный): '); readln(s); - write(': '); - if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else writeln(' ') + write('Антоним: '); + if (s='черный') then + writeln('белый') + else if (s='высокий') then + writeln('низкий') + else if (s='свет') then + writeln('тьма') + else if (s='радость') then + writeln('горе') + else if (s='умный') then + writeln('глупый') + else writeln('Такого слова в списке нет') end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1.pas index 8e22a54a8..5545f146f 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1.pas @@ -1,21 +1,21 @@ -// for +// Цикл for const n = 20; var i: integer; begin - writeln(' 1 ',n,':'); + writeln('Числа от 1 до ',n,':'); for i:=1 to n do write(i,' '); writeln; writeln; - writeln(' ',n,' 1:'); + writeln('Числа от ',n,' до 1:'); for i:=n downto 1 do write(i,' '); writeln; writeln; - writeln(' :'); + writeln('Маленькие английские буквы:'); for c: char := 'a' to 'z' do write(c,' '); writeln; diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1a.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1a.pas index ecaa51b01..600a4a7bc 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1a.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For1a.pas @@ -1,16 +1,16 @@ -// for. 2 +// Цикл for. Шаг цикла 2 const n = 25; var i: integer; begin - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); for i:=1 to n do write(2*i,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); var x := 2; for i:=1 to n do begin @@ -20,13 +20,13 @@ begin writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); for i:=1 to n do write(2*i-1,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); x := 1; for i:=1 to n do begin diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For2.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For2.pas index 02e54e033..f94af5449 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For2.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For2.pas @@ -1,15 +1,15 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; var i: integer; begin - write(' : '); + write('Случайные оценки: '); for i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For3.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For3.pas index 686ee6d9b..269346125 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For3.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For3.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; begin for var i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for var i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For4.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For4.pas index 98749099e..d10ab5ca5 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For4.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For4.pas @@ -1,9 +1,9 @@ -// for. +// ÷икл for. —умма всех двузначных чисел var s: integer; begin s := 0; for var i:=10 to 99 do - s := s + i; // s += i - writeln(' = ',s); + s := s + i; // можно s += i + writeln('—умма всех двузначных чисел = ',s); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For5.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For5.pas index c8d828d7f..5b1a9a4cd 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For5.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For5.pas @@ -1,13 +1,13 @@ -// for. a n +// ÷икл for. a в степени n var a: real; n: integer; begin - write(' a,n: '); + write('¬ведите a,n: '); readln(a,n); var p: real := 1; for var i:=1 to n do - p := p * a; // p *= a - writelnFormat('{0} {1} = {2}',a,n,p); + p := p * a; // можно p *= a + writelnFormat('{0} в степени {1} = {2}',a,n,p); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For8.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For8.pas index 794b027bf..5167640b8 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For8.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For8.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Максимум из введенных чисел const n = 10; var max: real; begin - writelnFormat(' {0} ',n); - max := integer.MinValue; // + writelnFormat('Введите {0} чисел',n); + max := integer.MinValue; // самое маленькое целое число for var i:=1 to n do begin var x: real; @@ -13,5 +13,5 @@ begin if x>max then max := x; end; - writeln(' ',max); + writeln('Максимальное равно ',max); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For9.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For9.pas index 4e807283f..7ca1357f1 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/For9.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/For9.pas @@ -1,4 +1,4 @@ -// for. . break +// Цикл for. Поиск значения. Оператор break const n = 10; var @@ -6,9 +6,9 @@ var found: boolean; begin - writeln(' : '); + writeln('Введите число для поиска: '); readln(k); - writelnFormat(' {0} ',n); + writelnFormat('Введите {0} чисел',n); found := False; for var i:=1 to n do begin @@ -21,6 +21,6 @@ begin end; end; if found then - writeln('') - else writeln(' '); + writeln('Найдено') + else writeln('Не найдено'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor1.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor1.pas index 411feb626..c6f2b1322 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor1.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor1.pas @@ -1,8 +1,8 @@ -// for. +// Вложенные циклы for. Таблица умножения const n = 9; begin - writeln(' '); + writeln('Таблица умножения'); for var i:=1 to n do begin for var j:=1 to n do diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor2.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor2.pas index ed75c12e2..002e2d5c0 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor2.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForFor2.pas @@ -1,4 +1,4 @@ -// for +// Вложенные циклы for const n = 6; begin diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForGra1.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForGra1.pas index 7097f70be..a7028177b 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForGra1.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/ForGra1.pas @@ -1,4 +1,4 @@ -// for. +// Вложенные циклы for. Сетка из квадртов uses GraphABC; const diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo1.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo1.pas index e233fd20c..804e65685 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo1.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo1.pas @@ -1,14 +1,14 @@ -// +// Алгоритм определения простоты числа var N: integer; IsPrime: boolean; begin - writeln(' : '); + writeln('Введите число: '); readln(N); IsPrime := True; - for var i:=2 to round(sqrt(N)) do // , <= (sqrt(N)) + for var i:=2 to round(sqrt(N)) do // если число составное, то один из его сомножителей <= (sqrt(N)) if N mod i = 0 then begin IsPrime := False; @@ -16,6 +16,6 @@ begin end; if IsPrime then - writeln(' ',N,' ') - else writeln(' ',N,' '); + writeln('Число ',N,' простое') + else writeln('Число ',N,' составное'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo2.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo2.pas index 8028f87e4..1d02bcd1f 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo2.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/algo2.pas @@ -1,14 +1,14 @@ -// x +// Алгоритм вычисления значения многочлена в точке x по схеме Горнера const n=5; var x,a: real; begin - writeln(' x: '); + writeln('Введите значение x: '); readln(x); - writeln(' (',n+1,' ): '); + writeln('Введите коэффициенты многочлена (',n+1,' штук): '); read(a); var s := a; for var i:=1 to n do @@ -17,5 +17,5 @@ begin s := s*x + a; end; - writeln(' ',x,' ',s); + writeln('Значение многочлена в точке ',x,' равно ',s); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat1.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat1.pas index f5bb0a55e..6621f57de 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat1.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat1.pas @@ -1,12 +1,12 @@ -// repeat. +// Цикл repeat. Контроль ввода var mark: integer; begin repeat - writeln(' (2..5): '); + writeln('Введите оценку (2..5): '); readln(mark); if (mark<2) or (mark>5) then - writeln(' . '); + writeln('Оценка неверная. Повторите ввод'); until (mark>=2) and (mark<=5); - writeln(' ',mark); + writeln('Вы ввели оценку ',mark); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat2.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat2.pas index da13faadc..da416f808 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat2.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/repeat2.pas @@ -1,13 +1,13 @@ -// repeat. +// Цикл repeat. Алгоритм Евклида нахождения наибольшего общего делителя var A,B: integer; begin - write(' : '); + write('Введите два целых числа: '); readln(A,B); repeat var C := A mod B; A := B; B := C; until B=0; - write(' = ',A); + write('Наибольший общий делитель = ',A); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/while1.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/while1.pas index 46ca9f83a..bf8f62300 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/while1.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/while1.pas @@ -1,8 +1,8 @@ -// while. 3 +// Цикл while. Вывод чисел с шагом 3 const n = 60; begin - writeln(' 1 ',n,', 3'); + writeln('Числа от 1 до ',n,', кратные 3'); var x := 3; while x<=n do begin diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/while2.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/while2.pas index f24c07321..ff9996415 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/while2.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/while2.pas @@ -1,6 +1,6 @@ -// while. 2 +// Цикл while. Степени 2 begin - writeln(' 2'); + writeln('Степени 2'); var i := 1; var p := 1; while i<32 do diff --git a/InstallerSamples/!Tutorial/06_ForWhileRepeat/while3.pas b/InstallerSamples/!Tutorial/06_ForWhileRepeat/while3.pas index 9f6819686..35345d005 100644 --- a/InstallerSamples/!Tutorial/06_ForWhileRepeat/while3.pas +++ b/InstallerSamples/!Tutorial/06_ForWhileRepeat/while3.pas @@ -1,10 +1,10 @@ -// while. +// ÷икл while. —умма цифр положительного числа var m: integer; begin - writeln(' : '); + writeln('¬ведите положительное число: '); read(m); - write(' : '); + write('÷ифры числа в обратном пор¤дке: '); var s := 0; while m>0 do begin @@ -14,5 +14,5 @@ begin m := m div 10; end; writeln; - writeln(' = ',s); + writeln('—умма цифр = ',s); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/Char1.pas b/InstallerSamples/!Tutorial/07_CharString/Char1.pas index bfa54f96e..0093f5157 100644 --- a/InstallerSamples/!Tutorial/07_CharString/Char1.pas +++ b/InstallerSamples/!Tutorial/07_CharString/Char1.pas @@ -1,4 +1,4 @@ -// Ord Chr +// Стандартные функции Ord Chr var i: integer; c: char; @@ -6,8 +6,8 @@ var begin c := 'z'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); i := 193; c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/Char2.pas b/InstallerSamples/!Tutorial/07_CharString/Char2.pas index 9d0b9dc50..d89fd87a7 100644 --- a/InstallerSamples/!Tutorial/07_CharString/Char2.pas +++ b/InstallerSamples/!Tutorial/07_CharString/Char2.pas @@ -1,13 +1,13 @@ -// OrdUnicode ChrUnicode +// Стандартные функции OrdUnicode ChrUnicode var i: integer; c: char; begin - c := ''; + c := 'Д'; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); i := 1046; c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/Char3.pas b/InstallerSamples/!Tutorial/07_CharString/Char3.pas index d58cb25ab..25dd82795 100644 --- a/InstallerSamples/!Tutorial/07_CharString/Char3.pas +++ b/InstallerSamples/!Tutorial/07_CharString/Char3.pas @@ -1,9 +1,9 @@ -// UpperCase LowerCase +// Стандартные функции UpperCase LowerCase var c: char; begin - c := ''; - writelnFormat(' {0} : {1}',c,UpperCase(c)); + c := 'д'; + writelnFormat('Символ {0} в верхнем регистре: {1}',c,UpperCase(c)); c := 'F'; - writelnFormat(' {0} : {1}',c,LowerCase(c)); + writelnFormat('Символ {0} в нижнем регистре: {1}',c,LowerCase(c)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/CharTable.pas b/InstallerSamples/!Tutorial/07_CharString/CharTable.pas index 420d2f615..220cb62fa 100644 --- a/InstallerSamples/!Tutorial/07_CharString/CharTable.pas +++ b/InstallerSamples/!Tutorial/07_CharString/CharTable.pas @@ -1,4 +1,4 @@ -// +// Таблица символов и их кодов begin for var i:=32 to 255 do begin diff --git a/InstallerSamples/!Tutorial/07_CharString/String1.pas b/InstallerSamples/!Tutorial/07_CharString/String1.pas index 201a1407a..d6785340d 100644 --- a/InstallerSamples/!Tutorial/07_CharString/String1.pas +++ b/InstallerSamples/!Tutorial/07_CharString/String1.pas @@ -1,4 +1,4 @@ -// . + +=. +// Строки. Операция + и оператор +=. Доступ по индексу var s: string := 'Pascal'; diff --git a/InstallerSamples/!Tutorial/07_CharString/String2.pas b/InstallerSamples/!Tutorial/07_CharString/String2.pas index aeb792233..a2a26c791 100644 --- a/InstallerSamples/!Tutorial/07_CharString/String2.pas +++ b/InstallerSamples/!Tutorial/07_CharString/String2.pas @@ -1,4 +1,4 @@ -// . SetLength, Length Length +// Строки. Процедура SetLength, функция Length и свойство Length var s: string; diff --git a/InstallerSamples/!Tutorial/07_CharString/String3.pas b/InstallerSamples/!Tutorial/07_CharString/String3.pas index 75982b627..5a2a97b3e 100644 --- a/InstallerSamples/!Tutorial/07_CharString/String3.pas +++ b/InstallerSamples/!Tutorial/07_CharString/String3.pas @@ -1,4 +1,4 @@ -// . +// Строки. Строка может иметь произвольную длину var s: string; begin @@ -7,6 +7,6 @@ begin s += s; s += s; s += s; - writeln(' = ',s.Length); - writeln('C: ',s); + writeln('Длина строки = ',s.Length); + writeln('Cтрока: ',s); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/String4.pas b/InstallerSamples/!Tutorial/07_CharString/String4.pas index e8553759f..7c765fc61 100644 --- a/InstallerSamples/!Tutorial/07_CharString/String4.pas +++ b/InstallerSamples/!Tutorial/07_CharString/String4.pas @@ -1,4 +1,4 @@ -// . 255 +// Строки фиксированной длины. Длина не может быть больше 255 var s: string[9]; s1: shortstring; // shortstring = string[255] @@ -6,7 +6,7 @@ var begin slong := 'PascalABC.NET'; - writeln('C : ',slong); + writeln('Cтрока произвольной длины: ',slong); s := slong; - writeln('C : ',s); + writeln('Cтрока фиксированной длины обрезается: ',s); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/String5.pas b/InstallerSamples/!Tutorial/07_CharString/String5.pas index 615d927e3..e4e667578 100644 --- a/InstallerSamples/!Tutorial/07_CharString/String5.pas +++ b/InstallerSamples/!Tutorial/07_CharString/String5.pas @@ -1,18 +1,18 @@ -// . +// Строки. Стандартные подпрограммы работы со строками var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := Trim(s); - writeln(' Trim: ''',s,''''); + writeln('После вызова функции Trim: ''',s,''''); var p := Pos(s1,s); - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); Delete(s,7,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); Insert('ABC.',s,7); - writeln(' ''ABC.'': ',s); - writeln(' : ',Copy(s,1,9)); - writeln(' : ',Copy(s,11,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',Copy(s,1,9)); + writeln('Последняя часть строки: ',Copy(s,11,3)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/String6.pas b/InstallerSamples/!Tutorial/07_CharString/String6.pas index 69cf7ddb1..609eb8234 100644 --- a/InstallerSamples/!Tutorial/07_CharString/String6.pas +++ b/InstallerSamples/!Tutorial/07_CharString/String6.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/StringInteger1.pas b/InstallerSamples/!Tutorial/07_CharString/StringInteger1.pas index 7fe544add..484f91218 100644 --- a/InstallerSamples/!Tutorial/07_CharString/StringInteger1.pas +++ b/InstallerSamples/!Tutorial/07_CharString/StringInteger1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := IntToStr(i); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '567'; i := StrToInt(s); - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/StringInteger2.pas b/InstallerSamples/!Tutorial/07_CharString/StringInteger2.pas index 4f4e00fe4..5dfe155aa 100644 --- a/InstallerSamples/!Tutorial/07_CharString/StringInteger2.pas +++ b/InstallerSamples/!Tutorial/07_CharString/StringInteger2.pas @@ -1,18 +1,18 @@ -// <-> (Val Str) +// Преобразование целое <-> строка в старом стиле (Val и Str) var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; Str(i,s); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; var err: integer; Val(s,i,err); if err=0 then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/StringInteger3.pas b/InstallerSamples/!Tutorial/07_CharString/StringInteger3.pas index 60f5db050..ce86a50a3 100644 --- a/InstallerSamples/!Tutorial/07_CharString/StringInteger3.pas +++ b/InstallerSamples/!Tutorial/07_CharString/StringInteger3.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/StringReal1.pas b/InstallerSamples/!Tutorial/07_CharString/StringReal1.pas index 4cad78fbe..4b1037b65 100644 --- a/InstallerSamples/!Tutorial/07_CharString/StringReal1.pas +++ b/InstallerSamples/!Tutorial/07_CharString/StringReal1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование вещественное <-> строка var s: string; r: real; begin - // + // Преобразование целого в строку r := 3.1415; s := FloatToStr(r); - writelnFormat(': {0}. : ''{1}''',r,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',r,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '3.1415'; r := StrToFloat(s); - writelnFormat(': ''{0}''. : {1}',s,r); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,r); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/07_CharString/UpLowCase.pas b/InstallerSamples/!Tutorial/07_CharString/UpLowCase.pas index d2fde4a79..2c7303586 100644 --- a/InstallerSamples/!Tutorial/07_CharString/UpLowCase.pas +++ b/InstallerSamples/!Tutorial/07_CharString/UpLowCase.pas @@ -1,4 +1,4 @@ -// UpperCase, LowerCase +// Использование стандартных функций UpperCase, LowerCase var c: char; begin @@ -8,13 +8,13 @@ begin for c:='A' to 'Z' do write(LowerCase(c)); writeln; - for c:='' to '' do + for c:='А' to 'Я' do write(UpperCase(c)); writeln; - for c:='' to '' do + for c:='а' to 'я' do write(LowerCase(c)); writeln; - var s := ' '; + var s := 'Папа у Васи силён в математике'; s := UpperCase(s); writeln(s); s := LowerCase(s); diff --git a/InstallerSamples/!Tutorial/08_ProcFunc/Fun1.pas b/InstallerSamples/!Tutorial/08_ProcFunc/Fun1.pas index 74b93d8ef..9aeffb0e6 100644 --- a/InstallerSamples/!Tutorial/08_ProcFunc/Fun1.pas +++ b/InstallerSamples/!Tutorial/08_ProcFunc/Fun1.pas @@ -1,4 +1,4 @@ -// . +// Определение функции. Вывод таблицы ее значений function MyFun(x: real): real; begin @@ -13,7 +13,7 @@ const begin var h := (b-a)/n; var x := a; - writeln(' MyFun:'); + writeln('Таблица значений функции MyFun:'); for var i := 0 to n do begin writeln(x:5:2,MyFun(x):10:4); diff --git a/InstallerSamples/!Tutorial/08_ProcFunc/Fun2.pas b/InstallerSamples/!Tutorial/08_ProcFunc/Fun2.pas index 099b7c14e..4994822e4 100644 --- a/InstallerSamples/!Tutorial/08_ProcFunc/Fun2.pas +++ b/InstallerSamples/!Tutorial/08_ProcFunc/Fun2.pas @@ -1,4 +1,4 @@ -// Power +// Функция Power function Power(x: real; n: integer): real; begin @@ -13,5 +13,5 @@ var begin x := 2; n := 5; - writelnFormat('{0} {1} = {2}',x,n,Power(x,n)); + writelnFormat('{0} в степени {1} = {2}',x,n,Power(x,n)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/08_ProcFunc/Proc1.pas b/InstallerSamples/!Tutorial/08_ProcFunc/Proc1.pas index 46c6d9d06..95f40b8a0 100644 --- a/InstallerSamples/!Tutorial/08_ProcFunc/Proc1.pas +++ b/InstallerSamples/!Tutorial/08_ProcFunc/Proc1.pas @@ -1,4 +1,4 @@ -// +// Параметры процедур procedure Operations(a,b: integer); begin diff --git a/InstallerSamples/!Tutorial/08_ProcFunc/Proc2.pas b/InstallerSamples/!Tutorial/08_ProcFunc/Proc2.pas index 58e44205f..498b595b6 100644 --- a/InstallerSamples/!Tutorial/08_ProcFunc/Proc2.pas +++ b/InstallerSamples/!Tutorial/08_ProcFunc/Proc2.pas @@ -1,4 +1,4 @@ -// - +// Параметры-переменные procedure DivMod(a,b: integer; var d,m: integer); begin diff --git a/InstallerSamples/!Tutorial/08_ProcFunc/Proc3.pas b/InstallerSamples/!Tutorial/08_ProcFunc/Proc3.pas index 11113aae9..ccbdb03a0 100644 --- a/InstallerSamples/!Tutorial/08_ProcFunc/Proc3.pas +++ b/InstallerSamples/!Tutorial/08_ProcFunc/Proc3.pas @@ -1,4 +1,4 @@ -// +// Упаковка параметров в запись uses GraphABC; type diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas index 19cf5b5fa..3fc2eafc6 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr1.pas @@ -1,6 +1,6 @@ -// . -// SetLength -// foreach ( ) +// Использование динамического массива. +// Процедура SetLength выделения памяти под динамический массив +// Оператор foreach (массив доступен только на чтение) var a: array of integer; begin @@ -8,7 +8,7 @@ begin SetLength(a,n); for var i:=0 to a.Length-1 do a[i] := Random(1,99); - writeln(' : '); + writeln('Содержимое случайного динамического массива целых: '); foreach var x in a do Print(x); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas index b4bc25edf..b5e877dc4 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr2.pas @@ -1,17 +1,17 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln(' :'); + writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:'); var n := 20; - a := new integer[n]; // + a := new integer[n]; // Другой способ выделения памяти for var i:=0 to a.Length-1 do a[i] := i; - writeln(' b[5]: a[5]=',a[5]); + writeln('До присваивания b[5]: a[5]=',a[5]); var b: array of integer; b := a; b[5] := 666; - writeln(' b[5]: a[5]=',a[5]); + writeln('После присваивания b[5]: a[5]=',a[5]); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas index d84873bf1..8c7e97bc4 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr3.pas @@ -1,8 +1,8 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln('SetLength :'); + writeln('SetLength при повторном вызове не портит старые элементы:'); SetLength(a,5); for var i:=0 to a.Length-1 do a[i] := i+1; diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas index 2679cb1ab..47fb8c953 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArr4.pas @@ -1,13 +1,13 @@ -// +// Передача динамического массива в качестве параметра -procedure WriteArr(a: array of integer); // var , .. +procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект begin foreach x: integer in a do write(x,' '); writeln; end; -procedure CreateRandomArr(var a: array of integer; n: integer); // var , .. +procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив begin a := new integer[n]; for var i:=0 to a.Length-1 do @@ -17,7 +17,7 @@ end; var a: array of integer; begin - writeln(' : '); + writeln('Случайный целый массив: '); CreateRandomArr(a,30); WriteArr(a); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas index 27ec4523e..f8e2d5104 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr1.pas @@ -1,4 +1,4 @@ -// +// Ошибка невыделения памяти для динамического массива var a: array of integer; begin diff --git a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas index 66511c0b0..cd1da4b02 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/DynArrErr2.pas @@ -1,4 +1,4 @@ -// +// Ошибка выхода за границы диапазона для динамического массива var a: array of integer; begin diff --git a/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas b/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas index 89335b549..a0f618c87 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/SortByChoice.pas @@ -1,4 +1,4 @@ -// +// Сортировка выбором procedure SortByChoice(a: array of real); begin for var i:=0 to a.Length-2 do @@ -34,9 +34,9 @@ var a: array of real; begin a := CreateRandomArr(20); - writeln(' : '); + writeln('Содержимое массива: '); WriteArr(a); SortByChoice(a); - writeln(' : '); + writeln('После сортировки выбором: '); WriteArr(a); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/StaticArr1.pas b/InstallerSamples/!Tutorial/09_Arrays/StaticArr1.pas index 998aaa7f0..f20116db9 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/StaticArr1.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/StaticArr1.pas @@ -1,4 +1,4 @@ -// +// Использование массива const n=10; var a: array [1..n] of real; @@ -6,7 +6,7 @@ var a: array [1..n] of real; begin for var i:=1 to n do a[i] := Random*10; - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); foreach x: real in a do write(x:4:2,' '); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/StaticArr2.pas b/InstallerSamples/!Tutorial/09_Arrays/StaticArr2.pas index b4a567dd0..49ce9793c 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/StaticArr2.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/StaticArr2.pas @@ -1,4 +1,4 @@ -// +// Передача массива как параметра подпрограмм const n=10; type RealArr = array [1..n] of real; @@ -19,6 +19,6 @@ var a: RealArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); PrintArr(a,n); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Arrays/StaticArr3.pas b/InstallerSamples/!Tutorial/09_Arrays/StaticArr3.pas index e34c7a385..1d382c6c1 100644 --- a/InstallerSamples/!Tutorial/09_Arrays/StaticArr3.pas +++ b/InstallerSamples/!Tutorial/09_Arrays/StaticArr3.pas @@ -1,4 +1,4 @@ -// exit +// Процедура exit выхода из подпрограммы const n=10; type IntArr = array [1..n] of integer; @@ -23,7 +23,7 @@ begin if a[i]=k then begin Result := i; - exit; // + exit; // выход из процедуры end; end; @@ -31,11 +31,11 @@ var a: IntArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Случайный массив целых: '); PrintArr(a,n); var ind := IndexOf(a,n,7); if ind>0 then - writeln(' 7 ', ind) - else writeln(' 7 '); + writeln('Индекс первого элемента 7 равен ', ind) + else writeln('Элемент 7 отсутствует'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas index 95f73275e..fb2a6d4f2 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas @@ -1,7 +1,7 @@ -// -// MyUnit, " " +// Демонстрация секций инициализации и финализации модулей +// Откройте модуль MyUnit, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению" uses MyUnit; begin - writeln(' ') + writeln('Основная программа') end. diff --git a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas index 31bbfc876..1887dbc7f 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitInitFin/MyUnit.pas @@ -1,7 +1,7 @@ unit MyUnit; initialization - writeln(' . ') + writeln('Секция инициализации. Выполняется до начала основной программы') finalization - writeln(' . ') + writeln('Секция финализации. Выполняется после окончания основной программы') end. diff --git a/InstallerSamples/!Tutorial/09_Units/UnitNames/MainSameNames.pas b/InstallerSamples/!Tutorial/09_Units/UnitNames/MainSameNames.pas index 6dca9b8b8..4f881ad42 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitNames/MainSameNames.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitNames/MainSameNames.pas @@ -1,7 +1,7 @@ -// -uses MyA,MyB; // , +// Алгоритм поиска имен в модулях +uses MyA,MyB; // Имена вначале ищутся в основной программе, а затем в модулях в порядке справа налево begin - p; // MyB.p - MyA.p; // MyA.p, p, + p; // Вызывается MyB.p + MyA.p; // Если надо вызвать MyA.p, следует использовать имя p, уточненное именем модуля end. diff --git a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas index 7b6fc9cba..09db6bfe0 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MainProgram.pas @@ -1,13 +1,13 @@ -uses MyUnit; // +uses MyUnit; // подключили модуль const Sz = 10; var a: IntArr; begin - Assert(sz<=Size,' <='+Size.ToString); + Assert(sz<=Size,'Размер массива должен быть <='+Size.ToString); FillArr(a,Sz); - writeln(' : '); + writeln('Содержимое массива: '); WriteArr(a,Sz); - writeln(' : ',Min(a,Sz)); + writeln('Минимальный элемент: ',Min(a,Sz)); end. diff --git a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas index 5fcce6515..87c14332c 100644 --- a/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas +++ b/InstallerSamples/!Tutorial/09_Units/UnitStructure/MyUnit.pas @@ -1,5 +1,5 @@ -/// -unit MyUnit; // +/// Модуль упрощенной структуры +unit MyUnit; // имя модуля должно совпадать с именем файла const Size = 100; @@ -7,15 +7,15 @@ type IntArr = array [1..Size] of integer; var Delimiter: string := ' '; -// -/// +// Документирующие комментарии отображаются при наведении на имя курсора мыши +/// Заполняет массив случайными числами procedure FillArr(var a: IntArr; n: integer); begin for var i:=1 to n do a[i] := Random(100); end; -/// +/// Выводит массив procedure WriteArr(const a: IntArr; n: integer); begin for var i:=1 to n do @@ -23,7 +23,7 @@ begin writeln; end; -/// +/// Возвращает минимальный элемент в массиве function Min(const a: IntArr; n: integer): integer; begin Result := a[1]; diff --git a/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas b/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas index 31cb1448c..9033bd4d8 100644 --- a/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas +++ b/InstallerSamples/!Tutorial/10_Matrices/Matr1.pas @@ -1,4 +1,4 @@ -// . goto +// Поиск значения в случайной матрице. Использование оператора goto const sz = 10; m = 4; @@ -11,12 +11,12 @@ label 1; var matr: Matrix; begin - // m x n + // Заполнение матрицы m x n случайными числами for var i := 1 to m do for var j := 1 to n do matr[i,j] := Random(100); - // + // Вывод матрицы for var i := 1 to m do begin for var j := 1 to n do @@ -24,17 +24,17 @@ begin writeln; end; - // 5? + // Есть ли в матрице элемент 5? var found5 := False; for var i := 1 to m do for var j := 1 to n do if matr[i,j]=5 then begin found5 := True; - goto 1; // ! + goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу end; 1: if found5 then - writeln(' 5 ') - else writeln(' 5 ') + writeln('Элемент 5 найден') + else writeln('Элемент 5 не найден') end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas b/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas index b0161cdfd..42df846a3 100644 --- a/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas +++ b/InstallerSamples/!Tutorial/10_Matrices/Matr2.pas @@ -1,4 +1,4 @@ -// +// Матрица как динамический массив массивов type Matrix = array of array of integer; function CreateMatrix(m,n: integer): Matrix; diff --git a/InstallerSamples/!Tutorial/11_Enums/Enum1.pas b/InstallerSamples/!Tutorial/11_Enums/Enum1.pas index b9d3d0a87..db92312ee 100644 --- a/InstallerSamples/!Tutorial/11_Enums/Enum1.pas +++ b/InstallerSamples/!Tutorial/11_Enums/Enum1.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/11_Enums/Enum2.pas b/InstallerSamples/!Tutorial/11_Enums/Enum2.pas index aca2145b3..77eef43d4 100644 --- a/InstallerSamples/!Tutorial/11_Enums/Enum2.pas +++ b/InstallerSamples/!Tutorial/11_Enums/Enum2.pas @@ -1,4 +1,4 @@ -// +// ѕеречислимый тип uses System; type Months = (January,February,March,April,May,June,July,August,September,October,November,December); @@ -6,14 +6,14 @@ type Months = (January,February,March,April,May,June,July,August,September,Octob begin var t: &Type := typeof(Months); var names: array of string := Enum.GetNames(t); - writeln(' '); + writeln('÷икл по именам перечислимого типа'); foreach name: string in names do write(name,' '); writeln; writeln; var v: &Array := Enum.GetValues(t); var mm: array of Months := new Months[v.Length]; - writeln(' '); + writeln('÷икл по массиву всех значений перечислимого типа'); for var i:=0 to v.Length-1 do mm[i] := Months(v.GetValue(i)); diff --git a/InstallerSamples/!Tutorial/12_Files/File1.pas b/InstallerSamples/!Tutorial/12_Files/File1.pas index 7a8b83ac3..8eb62692a 100644 --- a/InstallerSamples/!Tutorial/12_Files/File1.pas +++ b/InstallerSamples/!Tutorial/12_Files/File1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Типизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'a.dat'; var f: file of integer; @@ -9,7 +9,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); for var i:=1 to 10 do begin var x := random(100); @@ -22,7 +22,7 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); for var i:=1 to 10 do begin var x: integer; diff --git a/InstallerSamples/!Tutorial/12_Files/Text1.pas b/InstallerSamples/!Tutorial/12_Files/Text1.pas index 152912db3..72b941890 100644 --- a/InstallerSamples/!Tutorial/12_Files/Text1.pas +++ b/InstallerSamples/!Tutorial/12_Files/Text1.pas @@ -1,4 +1,4 @@ -// , +// Программа, выводящая текст из своего файла var f: Text; diff --git a/InstallerSamples/!Tutorial/12_Files/Text2.pas b/InstallerSamples/!Tutorial/12_Files/Text2.pas index 51edde25c..cd46adb75 100644 --- a/InstallerSamples/!Tutorial/12_Files/Text2.pas +++ b/InstallerSamples/!Tutorial/12_Files/Text2.pas @@ -1,7 +1,7 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt var f: Text; - a: array of string := ('','','','','','',''); + a: array of string := ('Каждый','охотник','желает','знать','где','сидит','фазан'); begin assign(f,'a.txt'); @@ -9,5 +9,5 @@ begin for var i:=0 to a.Length-1 do writeln(f,a[i]); close(f); - writeln(' a.txt'); + writeln('Текст записан в файл a.txt'); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/12_Files/Text3.pas b/InstallerSamples/!Tutorial/12_Files/Text3.pas index 86572c050..31daacb7d 100644 --- a/InstallerSamples/!Tutorial/12_Files/Text3.pas +++ b/InstallerSamples/!Tutorial/12_Files/Text3.pas @@ -1,4 +1,4 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt const n = 30; filename = 'pifagor.txt'; @@ -15,5 +15,5 @@ begin writeln(f); end; close(f); - writeln(' '+filename); + writeln('Таблица умножения записана в файл '+filename); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/12_Files/Untyped1.pas b/InstallerSamples/!Tutorial/12_Files/Untyped1.pas index 15f1eb52a..7c932ddc3 100644 --- a/InstallerSamples/!Tutorial/12_Files/Untyped1.pas +++ b/InstallerSamples/!Tutorial/12_Files/Untyped1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Нетипизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'u.dat'; var @@ -14,7 +14,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); r := random*10; for var i:=0 to 10 do @@ -26,7 +26,7 @@ begin // writeln(s); writeln(c); writeln(k); - // + // Запись в файл данных разных типов write(f,r); // writeln(f,s); write(f,c); @@ -37,9 +37,9 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); - // + // Чтение из файла данных разных типов read(f,r,{s,}c,k); writeln(r); // writeln(s); diff --git a/InstallerSamples/!Tutorial/13_Pointers/Pointer1.pas b/InstallerSamples/!Tutorial/13_Pointers/Pointer1.pas index d2c232b76..3d041c74c 100644 --- a/InstallerSamples/!Tutorial/13_Pointers/Pointer1.pas +++ b/InstallerSamples/!Tutorial/13_Pointers/Pointer1.pas @@ -1,16 +1,16 @@ -// +// Типизированные указатели var i: integer := 5; j: integer := 3; p: ^integer; begin - writeln(' i j: ',i,' ',j); - p := @i; // p i, p i - writeln(' ',p,' ',p^); // p^ - , p + writeln('Исходные значения переменных i и j: ',i,' ',j); + p := @i; // в p записывается адрес i, p указывает на i + writeln('По адресу ',p,' находится значение ',p^); // p^ - то, на что указывает p p^ := 2; p := @j; - writeln(' ',p,' ',p^); + writeln('По адресу ',p,' находится значение ',p^); p^ += 1; - writeln(' i j: ',i,' ',j); + writeln('Новые значения переменных i и j: ',i,' ',j); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/13_Pointers/Pointer2.pas b/InstallerSamples/!Tutorial/13_Pointers/Pointer2.pas index d7a4734e4..f3006767d 100644 --- a/InstallerSamples/!Tutorial/13_Pointers/Pointer2.pas +++ b/InstallerSamples/!Tutorial/13_Pointers/Pointer2.pas @@ -1,6 +1,6 @@ -// -// , -// +// Бестиповые указатели +// Им можно присваивать любой адрес, но для использования необходимо +// явное приведение к типизированному указателю var i: integer := 5; r: real := 3.14; @@ -11,12 +11,12 @@ type preal = ^real; begin - writeln(' i r: '); + writeln('Исходные значения переменных i и r: '); writeln(i,' ',r); p := @i; pinteger(p)^ := 8; p := @r; preal(p)^ += 1; - writeln(' i r: '); + writeln('Новые значения переменных i и r: '); writeln(i,' ',r); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/13_Pointers/Pointer3.pas b/InstallerSamples/!Tutorial/13_Pointers/Pointer3.pas index 673bf7cfb..c7100897e 100644 --- a/InstallerSamples/!Tutorial/13_Pointers/Pointer3.pas +++ b/InstallerSamples/!Tutorial/13_Pointers/Pointer3.pas @@ -1,11 +1,11 @@ -// +// Выделение динамической памяти var p: ^real; begin - // p + // Выделили динамическую память и в p записали ее адрес New(p); p^ := 3; - writeln(' = ',p^); - // , p + writeln('Значение в динамичесской памяти = ',p^); + // Возврат динамической памяти, на оторую указывает p Dispose(p); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/13_Pointers/Pointer4.pas b/InstallerSamples/!Tutorial/13_Pointers/Pointer4.pas index 69194f83e..0faeeb6f0 100644 --- a/InstallerSamples/!Tutorial/13_Pointers/Pointer4.pas +++ b/InstallerSamples/!Tutorial/13_Pointers/Pointer4.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,7 +32,7 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin diff --git a/InstallerSamples/!Tutorial/13_Pointers/ProcPointer1.pas b/InstallerSamples/!Tutorial/13_Pointers/ProcPointer1.pas index a41f8464e..2d54f9fb4 100644 --- a/InstallerSamples/!Tutorial/13_Pointers/ProcPointer1.pas +++ b/InstallerSamples/!Tutorial/13_Pointers/ProcPointer1.pas @@ -1,4 +1,4 @@ -// +// Процедурные переменные function add(a,b: integer): integer; begin @@ -15,7 +15,7 @@ var p: function (a,b: integer): integer; begin p := add; - writeln(' 2 3 ',p(2,3)); + writeln('Сумма 2 и 3 равна ',p(2,3)); p := mult; - writeln(' 2 3 ',p(2,3)); + writeln('Произведение 2 и 3 равно ',p(2,3)); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/13_Pointers/ProcPointer2.pas b/InstallerSamples/!Tutorial/13_Pointers/ProcPointer2.pas index db0a05a81..2ba35543b 100644 --- a/InstallerSamples/!Tutorial/13_Pointers/ProcPointer2.pas +++ b/InstallerSamples/!Tutorial/13_Pointers/ProcPointer2.pas @@ -1,4 +1,4 @@ -// +// Процедурная переменная как параметр procedure for_each(a: array of real; p: procedure(var r: real)); begin for var i := 0 to a.Length-1 do @@ -18,10 +18,10 @@ end; var a: array of real := (1,2,3,6,7); begin - writeln(' : '); + writeln('Содержимое массива: '); for_each(a,print); writeln; for_each(a,mult2); - writeln(' 2: '); + writeln('Содержимое массива после умножения его элеметов на 2: '); for_each(a,print); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/13_Pointers/Reference.pas b/InstallerSamples/!Tutorial/13_Pointers/Reference.pas index 42529cd9b..5dd358cd0 100644 --- a/InstallerSamples/!Tutorial/13_Pointers/Reference.pas +++ b/InstallerSamples/!Tutorial/13_Pointers/Reference.pas @@ -1,4 +1,4 @@ -// +// Использование ссылок вместо указателей для создания односвязного списка type Node = class data: integer; @@ -10,18 +10,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -29,6 +29,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/14_Records/Rec1.pas b/InstallerSamples/!Tutorial/14_Records/Rec1.pas index ea1b45732..5b6b049e9 100644 --- a/InstallerSamples/!Tutorial/14_Records/Rec1.pas +++ b/InstallerSamples/!Tutorial/14_Records/Rec1.pas @@ -8,16 +8,16 @@ type procedure WritePerson(const p: Person); begin - writelnFormat(': {0} : {1} : {2} : {3}',p.Name,p.Sex,p.Age,p.Weight); + writelnFormat('Фамилия: {0} Пол: {1} Возраст: {2} Вес: {3}',p.Name,p.Sex,p.Age,p.Weight); end; var - p: Person := (Name: ''; Age: 20; Weight: 64; Sex: Male); + p: Person := (Name: 'Иванов'; Age: 20; Weight: 64; Sex: Male); p1: Person; begin - p1 := p; // + p1 := p; // Присваивание записей var p2: Person; - p2.Name := ''; + p2.Name := 'Петрова'; p2.Age := 18; p2.Weight := 50; p2.Sex := Female; @@ -26,7 +26,7 @@ begin var p3: Person; with p3 do begin - Name := ''; + Name := 'Сидоров'; Age := 24; Weight := 80; Sex := Male; diff --git a/InstallerSamples/!Tutorial/14_Records/Rec2.pas b/InstallerSamples/!Tutorial/14_Records/Rec2.pas index 26f54af7a..e95d97a88 100644 --- a/InstallerSamples/!Tutorial/14_Records/Rec2.pas +++ b/InstallerSamples/!Tutorial/14_Records/Rec2.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/InstallerSamples/!Tutorial/15_Classes/Inheritance1.pas b/InstallerSamples/!Tutorial/15_Classes/Inheritance1.pas index 2521b8227..94c4e7ccd 100644 --- a/InstallerSamples/!Tutorial/15_Classes/Inheritance1.pas +++ b/InstallerSamples/!Tutorial/15_Classes/Inheritance1.pas @@ -1,4 +1,4 @@ -// . +// Наследование. Полиморфизм и виртуальные функции type Person = class private @@ -9,10 +9,10 @@ type begin name := n; age := a; end; - procedure Print; virtual; // . - + procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках begin var s := GetType.ToString; - write(': ',Copy(s,pos('.',s)+1,Length(s)):7,' : ',name,' : ',age); + write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,' Имя: ',name,' Возраст: ',age); end; procedure Println; begin @@ -21,19 +21,19 @@ type end; end; - Pupil = class(Person) // Pupil - Person + Pupil = class(Person) // Pupil - наследник Person private clas: integer; public constructor (n: string; a,c: integer); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора clas := c; end; procedure Print; override; begin inherited Print; - write(' : ',clas); + write(' Класс: ',clas); end; end; @@ -43,23 +43,23 @@ type public constructor (n: string; a: integer; p: string); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора predm := p; end; procedure Print; override; begin inherited Print; - write(' : ',predm); + write(' Предмет: ',predm); end; end; -var a: array of Person := new Person[4]; // - . +var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов begin - a[0] := new Pupil('',11,5); - a[1] := new Teacher(' ',30,''); - a[2] := new Person('',65); - a[3] := new Pupil('',12,6); + a[0] := new Pupil('Вова',11,5); + a[1] := new Teacher('Марья Ивановна',30,'Информатика'); + a[2] := new Person('Иванов',65); + a[3] := new Pupil('Вася',12,6); for var i:=0 to a.Length-1 do a[i].Println; diff --git a/InstallerSamples/!Tutorial/15_Classes/PersonExternal.pas b/InstallerSamples/!Tutorial/15_Classes/PersonExternal.pas index 961250cb9..5d205a700 100644 --- a/InstallerSamples/!Tutorial/15_Classes/PersonExternal.pas +++ b/InstallerSamples/!Tutorial/15_Classes/PersonExternal.pas @@ -1,6 +1,6 @@ -// -// : -// , +// Описание методов вне интерфейса класса +// Удобство: интерфейс лучше виден +// Если класс описан в модуле, то реализация методов помещается в секцию реализации модуля type Person = class private @@ -19,12 +19,12 @@ end; procedure Person.Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; var p: Person; begin - p := new Person('',20); + p := new Person('Иванов',20); p.Print; end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/15_Classes/PersonInternal.pas b/InstallerSamples/!Tutorial/15_Classes/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/InstallerSamples/!Tutorial/15_Classes/PersonInternal.pas +++ b/InstallerSamples/!Tutorial/15_Classes/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/15_Classes/Properties.pas b/InstallerSamples/!Tutorial/15_Classes/Properties.pas index cb1b81fb1..aa6958bad 100644 --- a/InstallerSamples/!Tutorial/15_Classes/Properties.pas +++ b/InstallerSamples/!Tutorial/15_Classes/Properties.pas @@ -1,14 +1,14 @@ -// (properties) +// Свойства (properties) type - /// + /// Класс персоны Person = class private nm: string; ag: integer; - procedure SetAge(a: integer); // + procedure SetAge(a: integer); // Процедура доступа к свойству располагается обычно в приватной секции begin - if a<0 then // - a := 0; // , + if a<0 then // Перед установкой значения свойства мы можем сделать дополнительные проверки + a := 0; // и скорректировать значение свойства, либо сгенерировать исключение ag := a; end; public @@ -16,20 +16,20 @@ type begin nm := n; ag := a; end; - /// - property Name: string read nm; // Name nm - /// + /// Имя персоны + property Name: string read nm; // Свойство Name доступно только на чтение и возвращает значение поля nm + /// Возраст персоны property Age: integer read ag write SetAge; procedure Print; begin - writeln(': ',nm,' : ',ag); + writeln('Имя: ',nm,' Возраст: ',ag); end; end; -var p: Person := new Person('', 20); +var p: Person := new Person('Иванов', 20); begin - writeln(': ',p.Name); // Name , - - p.Age := -1; // : = 0 - writeln(': ',p.Age); + writeln('Имя: ',p.Name); // Менять Name нельзя, доступ - только на чтение + p.Age := -1; // Попытка изменения возраста на отрицательное значение приводит к корректировке: возраст становится = 0 + writeln('Возраст: ',p.Age); end. \ No newline at end of file diff --git a/InstallerSamples/!Tutorial/16_Exceptions/Try1.pas b/InstallerSamples/!Tutorial/16_Exceptions/Try1.pas index 086f8de6b..c879e8a2f 100644 --- a/InstallerSamples/!Tutorial/16_Exceptions/Try1.pas +++ b/InstallerSamples/!Tutorial/16_Exceptions/Try1.pas @@ -1,14 +1,14 @@ -// . +// Простейшая обработка исключений. Ввод с ошибкой var a: integer; begin try - writeln(' : '); - // :) + writeln('Введите число: '); + // При вводе попробуйте совершить ошибку :) readln(a); - writeln(' '); + writeln('Число введено верно '); except - writeln(' '); + writeln('Ошибка ввода'); end; - writeln(' '); + writeln('Выполнение программы продолжено'); end. diff --git a/InstallerSamples/!Tutorial/16_Exceptions/Try2.pas b/InstallerSamples/!Tutorial/16_Exceptions/Try2.pas index 986a2493a..4145b1fe0 100644 --- a/InstallerSamples/!Tutorial/16_Exceptions/Try2.pas +++ b/InstallerSamples/!Tutorial/16_Exceptions/Try2.pas @@ -1,15 +1,15 @@ -// +// Обработка нескольких исключений var x: integer; begin try - writeln(' (1 - 0): '); + writeln('Введите число (1 - ошибка деления на 0): '); readln(x); x := 10 div (x-1); except on System.FormatException do - writeln(' '); + writeln('Ошибка ввода'); on System.DivideByZeroException do - writeln(' 0'); + writeln('Деление на 0'); end; end. diff --git a/InstallerSamples/!Tutorial/16_Exceptions/Try3.pas b/InstallerSamples/!Tutorial/16_Exceptions/Try3.pas index 22139ddc2..4fcc48113 100644 --- a/InstallerSamples/!Tutorial/16_Exceptions/Try3.pas +++ b/InstallerSamples/!Tutorial/16_Exceptions/Try3.pas @@ -1,15 +1,15 @@ -// finally -// finally , +// Иллюстрация finally +// Секция finally выполняется независимо от того, произошло исключение или нет var x: integer := 0; begin try if Random(2)=0 then x := 10 div x; - writeln(' '); + writeln('Выполнение продолжается'); finally - writeln(' finally'); + writeln('Сработала секция finally'); end; - // , - writeln(' finally'); + // Если возникает исключение, то этот оператор не выполняется + writeln('После секции finally'); end. diff --git a/InstallerSamples/!Tutorial/16_Exceptions/Try4.pas b/InstallerSamples/!Tutorial/16_Exceptions/Try4.pas index 879a1005e..2f61a1b0b 100644 --- a/InstallerSamples/!Tutorial/16_Exceptions/Try4.pas +++ b/InstallerSamples/!Tutorial/16_Exceptions/Try4.pas @@ -1,8 +1,8 @@ -// . +// Исключения. Генерация исключения function f(x: integer): integer; begin if x=0 then - raise new System.Exception(' f 0'); + raise new System.Exception('Аргумент функции f не может быть равен 0'); Result := 10 mod x; end; diff --git a/InstallerSamples/!Tutorial/17_Interfaces/Interf1.pas b/InstallerSamples/!Tutorial/17_Interfaces/Interf1.pas index 368c24a18..fdb7216ed 100644 --- a/InstallerSamples/!Tutorial/17_Interfaces/Interf1.pas +++ b/InstallerSamples/!Tutorial/17_Interfaces/Interf1.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections.Generic; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -48,14 +48,14 @@ var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); &Array.Sort(a,new SortByName); - WriteArray(' : ',a); + WriteArray('Сортировка по имени: ',a); &Array.Sort(a,new SortByAge); - WriteArray(' : ',a); + WriteArray('Сортировка по возрасту: ',a); end. diff --git a/InstallerSamples/!Tutorial/17_Interfaces/Interf2.pas b/InstallerSamples/!Tutorial/17_Interfaces/Interf2.pas index d8ce89d91..2993568aa 100644 --- a/InstallerSamples/!Tutorial/17_Interfaces/Interf2.pas +++ b/InstallerSamples/!Tutorial/17_Interfaces/Interf2.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections.Generic; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -32,12 +32,12 @@ var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); - writeln(' = ',&Array.FindIndex(a,(s: Student)-> s.name = '')); + writeln('Индекс Козлова = ',&Array.FindIndex(a,(s: Student)-> s.name = 'Козлов')); end. diff --git a/InstallerSamples/!Tutorial/18_Dll/Main.pas b/InstallerSamples/!Tutorial/18_Dll/Main.pas index 7de809b56..368b2e0a8 100644 --- a/InstallerSamples/!Tutorial/18_Dll/Main.pas +++ b/InstallerSamples/!Tutorial/18_Dll/Main.pas @@ -1,11 +1,11 @@ -// , MyLib.dll -// MyLib.pas +// Основная программа, использующая библиотеку MyLib.dll +// MyLib.pas должен быть предварительно откомпилирован {$reference 'MyLib.dll'} var f: Frac; begin - writeln(' 2 3 ',add(2,3)); + writeln('Сумма чисел 2 и 3 равна ',add(2,3)); writeln('MyPi = ',MyPi); f := new Frac(2,3); f.Print; diff --git a/InstallerSamples/!Tutorial/18_Dll/MyLib.pas b/InstallerSamples/!Tutorial/18_Dll/MyLib.pas index bf978785d..89708ec46 100644 --- a/InstallerSamples/!Tutorial/18_Dll/MyLib.pas +++ b/InstallerSamples/!Tutorial/18_Dll/MyLib.pas @@ -1,4 +1,4 @@ -// , Ctrl-F9. MyLib.dll +// Откомпилируйте библиотеку, нажав Ctrl-F9. В папке должен появиться файл MyLib.dll library MyLib; diff --git a/InstallerSamples/Algorithms/Eratosthenes.pas b/InstallerSamples/Algorithms/Eratosthenes.pas index 87ef05e68..6c03a535b 100644 --- a/InstallerSamples/Algorithms/Eratosthenes.pas +++ b/InstallerSamples/Algorithms/Eratosthenes.pas @@ -1,4 +1,4 @@ -// " " - +// "Решето Эратосфена" - вычисление простых чисел const n = 100000; var primes: set of integer; @@ -18,9 +18,9 @@ begin end; end; - writeln(' < ',n,':'); + writeln('Простые числа < ',n,':'); writeln(primes); writeln; - writeln(' : ',Milliseconds/1000); + writeln('Время вычисления: ',Milliseconds/1000); end. diff --git a/InstallerSamples/Algorithms/MazeGen.pas b/InstallerSamples/Algorithms/MazeGen.pas index 11642afc9..9f0fea7bf 100644 --- a/InstallerSamples/Algorithms/MazeGen.pas +++ b/InstallerSamples/Algorithms/MazeGen.pas @@ -1,10 +1,10 @@ -// +// Программа генерации случайных лабиринтов uses GraphABC; const - szw = 70; // + szw = 70; // размер лабиринта szh = 50; - cellsz = 10; // + cellsz = 10; // размер ячейки type point = record @@ -32,10 +32,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -45,28 +45,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n := Random(todonum); x := todo[n].x; y := todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat dd:=Random (4); until not ((maze[x + dx[dd]][y + dy[dd]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl dd) or 32); maze[x + dx[dd]][y + dy[dd]] := maze[x + dx[dd]][y + dy[dd]] and not (1 shl (dd xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -77,8 +77,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -86,19 +86,19 @@ begin for var x:=1 to szw-2 do for var y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz); end; end; begin - Window.Title := ' '; + Window.Title := 'Генерация лабиринта'; SetWindowSize(szw*cellsz,szh*cellsz); Init; Draw; diff --git a/InstallerSamples/Algorithms/PrimeNumbers.pas b/InstallerSamples/Algorithms/PrimeNumbers.pas index ad7481733..bb0174db0 100644 --- a/InstallerSamples/Algorithms/PrimeNumbers.pas +++ b/InstallerSamples/Algorithms/PrimeNumbers.pas @@ -1,6 +1,6 @@ -// +// Генерация больших простых чисел begin - writeln(' : '); + writeln('Большие простые числа: '); var count := 0; var beg := Random(1000000000)+2; for var i:=beg to beg+5000 do diff --git a/InstallerSamples/Algorithms/Recursion/ESquares.pas b/InstallerSamples/Algorithms/Recursion/ESquares.pas index fffe646fc..ceb9752cd 100644 --- a/InstallerSamples/Algorithms/Recursion/ESquares.pas +++ b/InstallerSamples/Algorithms/Recursion/ESquares.pas @@ -1,4 +1,4 @@ -// E-. +// E-квадраты. Демонстрация рекурсии uses GraphABC; const mw = 2.9; @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ': E-'; + Window.Title := 'Рекурсия: E-квадраты'; SetWindowSize(750,530); Pen.Color := clWhite; ESquares(4,125,18,490); diff --git a/InstallerSamples/Algorithms/Recursion/Hanoi.pas b/InstallerSamples/Algorithms/Recursion/Hanoi.pas index 42720cfb3..c315a89fa 100644 --- a/InstallerSamples/Algorithms/Recursion/Hanoi.pas +++ b/InstallerSamples/Algorithms/Recursion/Hanoi.pas @@ -1,46 +1,46 @@ -// +// Ханойские башни uses GraphABC; type - /// + /// Тип диска DiskType = record - /// + /// Диаметр диска Sz: integer; - /// + /// Цвет диска Color: GraphABC.Color; end; - /// + /// Тип массива дисков на стержне DiskArr = array of DiskType; const - /// + /// Количество дисков CountDisks = 8; - /// + /// Высота диска DiskHeight = 12; - /// + /// Приращение ширины диска DiskWidthDelta = 12; h = CountDisks * DiskWidthDelta * 2 + 20; - /// y- + /// y-координата основания пирамид дисков y0 = DiskHeight * CountDisks + 80; hh = 30; - /// x- + /// x-координата первого стержня x1 = h div 2 + hh; - /// x- + /// x-координата второго стержня x2 = x1 + h; - /// x- + /// x-координата третьего стержня x3 = x2 + h; - /// , + /// Пауза, мс delay = 50; var - /// + /// Массив пирамид дисков Tower: array [1..3] of DiskArr; - /// + /// Массив количеств дисков в пирамидах DisksInTower: array [1..3] of integer; - /// + /// Номер хода MoveNumber: integer; -/// +/// Рисование пирамиды procedure DrawTower(a: DiskArr; n: integer; x0,y0: integer); begin Brush.Color := clBlack; @@ -52,18 +52,18 @@ begin end; end; -/// +/// Рисование всех пирамид и информационной строки procedure DrawAll; begin DrawTower(Tower[1],DisksInTower[1],x1,y0); DrawTower(Tower[2],DisksInTower[2],x2,y0); DrawTower(Tower[3],DisksInTower[3],x3,y0); Brush.Color := clWhite; - TextOut(20,20,' = '+IntToStr(MoveNumber)); + TextOut(20,20,'Число перемещений дисков = '+IntToStr(MoveNumber)); Redraw; end; -/// FromN ToN +/// Перемещение диска со стержня FromN на стержень ToN procedure MoveDisk(FromN, ToN: integer); begin Inc(MoveNumber); @@ -75,7 +75,7 @@ begin DrawAll; end; -/// " " +/// Основная екурсивная процедура алгоритма "Ханойские башни" procedure MoveTower(n: integer; FromN, ToN, WorkN: integer); begin if n=0 then exit; @@ -84,7 +84,7 @@ begin MoveTower(n-1, WorkN, ToN, FromN); end; -/// +/// Инициализация массивов procedure InitTowers; begin SetLength(Tower[1],CountDisks); @@ -100,12 +100,12 @@ begin end; end; -/// +/// Инициализация окна procedure InitWindow; begin SetWindowSize(x3+x1,y0+50); CenterWindow; - Window.Title := ' '; + Window.Title := 'Ханойские башни'; Font.Size := 14; Font.Name := 'Arial'; end; diff --git a/InstallerSamples/Algorithms/Recursion/Knapsack.pas b/InstallerSamples/Algorithms/Recursion/Knapsack.pas index 49bd0dfd7..53993e66c 100644 --- a/InstallerSamples/Algorithms/Recursion/Knapsack.pas +++ b/InstallerSamples/Algorithms/Recursion/Knapsack.pas @@ -1,5 +1,5 @@ -// . B . -// +// Задача о ранце. В массиве B заданы веса предметов. +// Выдать все варианты полной комплектации ранца частью этих предметов const Sz=100; type IntArr = array [1..Sz] of integer; @@ -22,15 +22,15 @@ var if space=0 then PrintArr(Subset,ns) else if (space<0) or (i>nb) then - exit // - else // B + exit // отсечение + else // продолжение перебора всех подмножеств множества B begin - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент ns += 1; Subset[ns] := B[i]; space := space - B[i]; - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать взять i-тый элемент space := space + B[i]; ns -= 1; end; @@ -43,8 +43,8 @@ end; procedure FillArr(var B: IntArr; var n: integer); begin - n:=5; // - B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // + n:=5; // количество предметов + B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // веса предметов end; var diff --git a/InstallerSamples/Algorithms/Recursion/Permutations.pas b/InstallerSamples/Algorithms/Recursion/Permutations.pas index ce5c126d0..1df728329 100644 --- a/InstallerSamples/Algorithms/Recursion/Permutations.pas +++ b/InstallerSamples/Algorithms/Recursion/Permutations.pas @@ -1,4 +1,4 @@ -// +// Все перестановки const n = 4; var a: array of integer; @@ -9,13 +9,13 @@ begin a.Println; for var i:=0 to m-1 do begin - Swap(a[i],a[m-1]); // + Swap(a[i],a[m-1]); // ставим каждый на место последнего Perm(m-1); Swap(a[i],a[m-1]); end; end; begin - a := Range(1,n).ToArray(); // a 1 n + a := Range(1,n).ToArray(); // заполнение массива a числами от 1 до n Perm(n); end. \ No newline at end of file diff --git a/InstallerSamples/Algorithms/Recursion/TreeDraw.pas b/InstallerSamples/Algorithms/Recursion/TreeDraw.pas index 91bb7f805..3251ca1dc 100644 --- a/InstallerSamples/Algorithms/Recursion/TreeDraw.pas +++ b/InstallerSamples/Algorithms/Recursion/TreeDraw.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева uses GraphABC; const @@ -7,7 +7,7 @@ const delay = 10; procedure DrawTree(x,y,dx,level: integer); -// : , , +// обход: левое поддерево, корень, правое begin if level>0 then begin @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ' '; + Window.Title := 'Рекурсивное рисование бинарного дерева'; SetSmoothingOff; SetWindowSize(800,30+Levels*LevelHeight); DrawTree(WindowWidth div 2,10,WindowWidth div 5,Levels); diff --git a/InstallerSamples/Algorithms/SortArrays/ArrayLib.pas b/InstallerSamples/Algorithms/SortArrays/ArrayLib.pas index e9b98c503..a06ade6a4 100644 --- a/InstallerSamples/Algorithms/SortArrays/ArrayLib.pas +++ b/InstallerSamples/Algorithms/SortArrays/ArrayLib.pas @@ -1,6 +1,6 @@ unit ArrayLib; -/// +/// Вывод массива procedure WriteArray(a: array of T); begin for var i:=0 to a.Length-1 do @@ -15,7 +15,7 @@ begin writeln; end; -/// +/// Создание массива и заполнение его случайными числами procedure CreateRandom(var a: array of integer; n: integer); begin a := new integer[n]; diff --git a/InstallerSamples/Algorithms/SortArrays/QuickSort.pas b/InstallerSamples/Algorithms/SortArrays/QuickSort.pas index ab76e444b..fe22f86be 100644 --- a/InstallerSamples/Algorithms/SortArrays/QuickSort.pas +++ b/InstallerSamples/Algorithms/SortArrays/QuickSort.pas @@ -1,7 +1,7 @@ -// . +// Быстрая сортировка Ч. Хоара uses ArrayLib; -/// a[l]..a[r] a[l]..a[q] <= a[q+1]..a[r] +/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r] function Partition(a: array of integer; l,r: integer): integer; begin var i := l - 1; @@ -25,7 +25,7 @@ begin end; end; -/// +/// Сортировка частей procedure QuickSort(a: array of integer; l,r: integer); begin if l>=r then exit; @@ -40,9 +40,9 @@ var a: array of integer; begin CreateRandom(a,n); - writeln(' : '); + writeln('До сортировки: '); Writeln(a); QuickSort(a,0,a.Length-1); - writeln(' : '); + writeln('После сортировки: '); Writeln(a); end. diff --git a/InstallerSamples/Algorithms/SortArrays/SelectionSort.pas b/InstallerSamples/Algorithms/SortArrays/SelectionSort.pas index 3396fc679..33c891042 100644 --- a/InstallerSamples/Algorithms/SortArrays/SelectionSort.pas +++ b/InstallerSamples/Algorithms/SortArrays/SelectionSort.pas @@ -1,4 +1,4 @@ -// +// Сортировка выбором uses ArrayLib; procedure SelectionSort(a: array of real); @@ -29,9 +29,9 @@ var a: array of real; begin a := CreateRandomArr(20); - writeln(' : '); + writeln('Содержимое массива: '); Writeln(a); SelectionSort(a); - writeln(' : '); + writeln('После сортировки выбором: '); Writeln(a); end. \ No newline at end of file diff --git a/InstallerSamples/Applications/GraphApplications/Paporotnik/Paporotnik.pas b/InstallerSamples/Applications/GraphApplications/Paporotnik/Paporotnik.pas index 6224d87c8..3d689e7a5 100644 --- a/InstallerSamples/Applications/GraphApplications/Paporotnik/Paporotnik.pas +++ b/InstallerSamples/Applications/GraphApplications/Paporotnik/Paporotnik.pas @@ -1,17 +1,17 @@ -/// " " +///Модуль для рисования фракталов семейства "Лист папоротника" unit Paporotnik; uses GraphABC; type - /// + ///Настройки фрактала PaporotnikFractalInitalData = record data: array of array of real; P0,P1,P2,P3:real; end; - /// " " + ///Фрактал "Лист папоротника" PaporotnikFractal = class private data: array of array of real; diff --git a/InstallerSamples/Applications/GraphApplications/Paporotnik/PaporotnikData.pas b/InstallerSamples/Applications/GraphApplications/Paporotnik/PaporotnikData.pas index 6eb296f99..38069519a 100644 --- a/InstallerSamples/Applications/GraphApplications/Paporotnik/PaporotnikData.pas +++ b/InstallerSamples/Applications/GraphApplications/Paporotnik/PaporotnikData.pas @@ -1,10 +1,10 @@ -/// +///Константы задающие фракталы unit PaporotnikData; uses Paporotnik; var - /// + ///Папоротник с изогнутым листом PaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.0000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0400, -0.0400, 0.8500, 0, 1.6000), @@ -15,7 +15,7 @@ var P2: 7; P3: 7); - /// + ///Папоротник с прямым листом SimplePaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.00, 0.00, 0.00, 0.16, 0, 0.00), ( 0.85, 0.00, 0.00, 0.85, 0, 1.60), @@ -26,7 +26,7 @@ var P2: 7; P3: 7); - /// + ///Елка ElkaData: PaporotnikFractalInitalData := ( data: (( 0.1000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0000, 0.0000, 0.8500, 0, 1.6000), diff --git a/InstallerSamples/Applications/TextEditor/TextEditor.pas b/InstallerSamples/Applications/TextEditor/TextEditor.pas index 69f8a547e..52aa99e8c 100644 --- a/InstallerSamples/Applications/TextEditor/TextEditor.pas +++ b/InstallerSamples/Applications/TextEditor/TextEditor.pas @@ -8,7 +8,7 @@ uses System.Windows.Forms; const TextFileExt = 'txt'; - TextFileFilter = ' (*.'+TextFileExt+')|*.'+TextFileExt; + TextFileFilter = 'Текстовые файлы (*.'+TextFileExt+')|*.'+TextFileExt; var myForm: Form; @@ -16,7 +16,7 @@ var procedure SaveFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default); f.Write(TextBox1.Text); f.Close; @@ -24,7 +24,7 @@ end; procedure OpenFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default); TextBox1.Text := f.ReadToEnd; f.Close; @@ -37,14 +37,14 @@ end; procedure MenuSaveClick(sender:object; args:System.EventArgs); begin - // + //Диалог для выбора файла var sd := new SaveFileDialog; - // + //Расширение поумолчанию sd.DefaultExt := TextFileExt; - // + //Фильтр для диалга sd.Filter := TextFileFilter; if sd.ShowDialog=DialogResult.OK then - // sd.ShowDialog + //если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то SaveFile(sd.FileName); end; @@ -59,31 +59,31 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Простой текстовый редактор'; TextBox1 := new TextBox; TextBox1.Multiline := True; TextBox1.Height := 100; TextBox1.Dock := DockStyle.Fill; - // + //Полосы прокрутки TextBox1.ScrollBars := ScrollBars.Both; - // + //Устанавливаем шрифт TextBox1.Font := new System.Drawing.Font('Courier New',10); myForm.Controls.Add(TextBox1); - // + //Создаем меню var toolStrip1 := new ToolStrip; toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden; - var miFile := new ToolStripMenuItem(''); - miFile.DropDownItems.Add(new ToolStripMenuItem('', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem(' ...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('',nil,FormClose)); + var miFile := new ToolStripMenuItem('Файл'); + miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose)); toolStrip1.Items.Add(miFile); myForm.Controls.Add(toolStrip1); - // - // = 1, + //Посмотрим в аргументы командной строки + //Если их количество = 1, то открываем if CommandLineArgs.Length = 1 then OpenFile(CommandLineArgs[0]); diff --git a/InstallerSamples/CheckedTasks/DrawMan/DMpp17.pas b/InstallerSamples/CheckedTasks/DrawMan/DMpp17.pas index f830b2e75..3c2c23b71 100644 --- a/InstallerSamples/CheckedTasks/DrawMan/DMpp17.pas +++ b/InstallerSamples/CheckedTasks/DrawMan/DMpp17.pas @@ -1,4 +1,4 @@ -// pp17 +// Выполнение задания pp17 для Чертежника uses Drawman; procedure Spir(n: integer); diff --git a/InstallerSamples/CheckedTasks/DrawMan/DrawManMakeTask/DMTasks.pas b/InstallerSamples/CheckedTasks/DrawMan/DrawManMakeTask/DMTasks.pas index d742fceb1..ff4c76f11 100644 --- a/InstallerSamples/CheckedTasks/DrawMan/DrawManMakeTask/DMTasks.pas +++ b/InstallerSamples/CheckedTasks/DrawMan/DrawManMakeTask/DMTasks.pas @@ -9,7 +9,7 @@ implementation procedure FirstDM; var i,a: integer; begin - TaskText(' mydm1. , '); + TaskText('Задание mydm1. Начертите, используя цикл'); Field(14,8); DoToPoint(7,7); a:=6; @@ -40,7 +40,7 @@ end; procedure SecondDM; begin - TaskText(' mydm2. , Cross'); + TaskText('Задание mydm2. Начертите, используя процедуру Cross'); Field(18,12); DoToPoint(3,8); DoCross; @@ -53,7 +53,7 @@ begin end; begin - RegisterGroup('mydm',' ','DMTasks',2); + RegisterGroup('mydm','Мои задания для Чертежника','DMTasks',2); RegisterTask('mydm1',FirstDM); RegisterTask('mydm2',SecondDM); end. diff --git a/InstallerSamples/CheckedTasks/DrawMan/random_DM.pas b/InstallerSamples/CheckedTasks/DrawMan/random_DM.pas index b1e906fad..c9f2904c0 100644 --- a/InstallerSamples/CheckedTasks/DrawMan/random_DM.pas +++ b/InstallerSamples/CheckedTasks/DrawMan/random_DM.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация использования случайных чисел для Чертежника. Лучи uses DrawMan; begin diff --git a/InstallerSamples/CheckedTasks/PT4/Dynamic2.pas b/InstallerSamples/CheckedTasks/PT4/Dynamic2.pas index 91aedef2f..4888d1972 100644 --- a/InstallerSamples/CheckedTasks/PT4/Dynamic2.pas +++ b/InstallerSamples/CheckedTasks/PT4/Dynamic2.pas @@ -1,4 +1,4 @@ -// Dynamic2 Programming Taskbook +// Пример решения задачи Dynamic2 из электронного задачника Programming Taskbook uses PT4; var p1,p2: PNode; @@ -11,8 +11,8 @@ begin begin write(p1^.Data); n += 1; - p2 := p1; { } - p1 := p1^.Next; { } + p2 := p1; { сохраняем адрес текущего элемента } + p1 := p1^.Next; { и переходим к следующему элементу } end; write(n, p2); end. \ No newline at end of file diff --git a/InstallerSamples/CheckedTasks/PT4/File48.pas b/InstallerSamples/CheckedTasks/PT4/File48.pas index 89b1caf86..b6c906d29 100644 --- a/InstallerSamples/CheckedTasks/PT4/File48.pas +++ b/InstallerSamples/CheckedTasks/PT4/File48.pas @@ -1,4 +1,4 @@ -// File48 Programming Taskbook +// Пример решения задачи File48 из электронного задачника Programming Taskbook uses PT4; var f: array [1..4] of file of integer; diff --git a/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas b/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas index 7ff72a2c6..2fed7f414 100644 --- a/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas +++ b/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas @@ -10,9 +10,9 @@ procedure Demo3; var a, b: real; begin - CreateTask(' , '); - TaskText(' ~{a} ~{b}.', 0, 2); - TaskText(' {S}~=~{a}\*{b} ' + + CreateTask('Ввод и вывод данных, оператор присваивания'); + TaskText('Даны стороны прямоугольника~{a} и~{b}.', 0, 2); + TaskText('Найти его площадь {S}~=~{a}\*{b} и периметр ' + '{P}~=~2\*({a}\;+\;{b}).', 0, 4); a := (1 + Random(100)) / 10; b := (1 + Random(100)) / 10; @@ -28,10 +28,10 @@ var m, n, i, j, k: integer; a: array [1..5, 1..8] of real; begin - CreateTask(' (): '); - TaskText(' ~{M}\;\x\;{N} ' + - ' ~{K} (1~\l~{K}~\l~{M}).', 0, 2); - TaskText(' {K}- .', 0, 4); + CreateTask('Двумерные массивы (матрицы): вывод элементов'); + TaskText('Дана матрица размера~{M}\;\x\;{N} ' + + 'и целое число~{K} (1~\l~{K}~\l~{M}).', 0, 2); + TaskText('Вывести элементы {K}-й строки данной матрицы.', 0, 4); m := 2 + Random(4); n := 4 + Random(5); k := 1; @@ -53,13 +53,13 @@ end; procedure Demo5; var s: string; begin - CreateTask(' : '); - TaskText(' ~{S}.', 0, 2); - TaskText(' .', 0, 4); + CreateTask('Символы и строки: основные операции'); + TaskText('Дана строка~{S}.', 0, 2); + TaskText('Вывести ее первый и последний символ.', 0, 4); s := WordSample(Random(WordCount)); DataS('S = ', s, 0, 3); - ResultC(' : ', s[1], xLeft, 3); - ResultC(' : ', s[length(s)], xRight, 3); + ResultC('Первый символ: ', s[1], xLeft, 3); + ResultC('Последний символ: ', s[length(s)], xRight, 3); SetTestCount(4); end; @@ -84,16 +84,16 @@ var s: ShortString; c: char; begin - CreateTask(' '); - TaskText(' ~{K} (>\,0) .', 0, 1); - TaskText(' : , ' + - ' {K}~', 0, 2); - TaskText(' , , ' + - ' {K}- ', 0, 3); - TaskText(' ( ~{K}, ' + - ' ', 0, 4); - TaskText(' , ' + - ' ).', 0, 5); + CreateTask('Символьные и строковые файлы'); + TaskText('Дано целое число~{K} (>\,0) и строковый файл.', 0, 1); + TaskText('Создать два новых файла: строковый, содержащий ' + + 'первые {K}~символов', 0, 2); + TaskText('каждой строки исходного файла, и символьный, ' + + 'содержащий {K}-й символ', 0, 3); + TaskText('каждой строки (если длина строки меньше~{K}, ' + + 'то в строковый файл', 0, 4); + TaskText('записывается вся строка, а в символьный файл ' + + 'записывается пробел).', 0, 5); s1 := '1' + FileName(5) + '.tst'; s2 := '2' + FileName(5) + '.tst'; s3 := '3' + FileName(5) + '.tst'; @@ -124,13 +124,13 @@ begin Close(fs2); Close(fc3); DataN('K =', k, 0, 1, 2); - DataS(' : ', s1, 3, 2); - DataS(' : ', s2, 3, 4); - DataS(' : ', s3, 3, 5); - DataComment(' :', xRight, 2); + DataS('Имя исходного файла: ', s1, 3, 2); + DataS('Имя результирующего строкового файла: ', s2, 3, 4); + DataS('Имя результирующего символьного файла: ', s3, 3, 5); + DataComment('Содержимое исходного файла:', xRight, 2); DataFileS(s1, 3, jmax + 3); - ResultComment(' :', 0, 2); - ResultComment(' :', 0, 4); + ResultComment('Содержимое результирующего строкового файла:', 0, 2); + ResultComment('Содержимое результирующего символьного файла:', 0, 4); ResultFileS(s2, 3, k + 3); ResultFileC(s3, 5, 4); end; @@ -141,9 +141,9 @@ var s, s1, s2: string; t1, t2: text; begin - CreateTask(' : '); - TaskText(' .', 0, 2); - TaskText(' .', 0, 4); + CreateTask('Текстовые файлы: основные операции'); + TaskText('Дан текстовый файл.', 0, 2); + TaskText('Удалить из него все пустые строки.', 0, 4); s1 := FileName(6) + '.tst'; s2 := '#' + FileName(6) + '.tst'; s := TextSample(Random(TextCount)); @@ -164,7 +164,7 @@ begin ResultFileT(s1, 1, 5); Rename(t2, s1); DataFileT(s1, 2, 5); - DataS(' : ', s1, 0, 1); + DataS('Имя файла: ', s1, 0, 1); SetTestCount(3); end; @@ -194,7 +194,7 @@ begin p2^.Next := nil; SetPointer(1, p1); SetPointer(2, p2); - ResultP(' : ', 2, 0, 2); + ResultP('Последний элемент: ', 2, 0, 2); ResultList(1, 0, 3); ShowPointer(2); DataP('', 1, 0, 2); @@ -210,38 +210,38 @@ end; procedure Demo8; begin - CreateTask(' : '); - TaskText(' ~{P}_1 ' + - '- TNode,', 0, 1); - TaskText(' Next. ' + - ' Prev TNode,', 0, 2); - TaskText(' (\I\i) ' + - ' \I\i, ', 0, 3); - TaskText(' ' + - '( Next),', 0, 4); - TaskText(' ( Prev). Prev ' + - ' ', 0, 5); - TaskText(' \N. ' + - ' .', 0, 0); + CreateTask('Динамические структуры данных: двусвязный список'); + TaskText('Дан указатель~{P}_1 на начало непустой цепочки ' + + 'элементов-записей типа TNode,', 0, 1); + TaskText('связанных между собой с помощью поля Next. Используя ' + + 'поле Prev записи TNode,', 0, 2); + TaskText('преобразовать исходную (\Iодносвязную\i) цепочку ' + + 'в \Iдвусвязную\i, в которой каждый', 0, 3); + TaskText('элемент связан не только с последующим элементом ' + + '(с помощью поля Next),', 0, 4); + TaskText('но и с предыдущим (с помощью поля Prev). Поле Prev ' + + 'первого элемента положить', 0, 5); + TaskText('равным \N. Вывести указатель на последний элемент ' + + 'преобразованной цепочки.', 0, 0); Demo8Data; end; procedure Demo8Net; begin - CreateTask(' : '); - TaskText(' ~{A}_1 ' + - '- Node,', 0, 1); - TaskText(' Next. ' + - ' Prev', 0, 2); - TaskText(' , ' + - '(\I\i) \I\i,', 0, 3); - TaskText(' ' + - ' ( ', 0, 4); - TaskText(' Next), ( ' + - ' Prev). Prev', 0, 5); - TaskText(' \O. ' + - '~{A}_2 ', 0, 0); - TaskText(' .', 0, 0); + CreateTask('Динамические структуры данных: двусвязный список'); + TaskText('Дана ссылка~{A}_1 на начало непустой цепочки ' + + 'элементов-объектов типа Node,', 0, 1); + TaskText('связанных между собой с помощью своих свойств Next. ' + + 'Используя свойства Prev', 0, 2); + TaskText('данных объектов, преобразовать исходную ' + + '(\Iодносвязную\i) цепочку в \Iдвусвязную\i,', 0, 3); + TaskText('в которой каждый элемент связан не только ' + + 'с последующим элементом (с помощью', 0, 4); + TaskText('свойства Next), но и с предыдущим (с помощью ' + + 'свойства Prev). Свойство Prev', 0, 5); + TaskText('первого элемента положить равным \O. Вывести ' + + 'ссылку~{A}_2 на последний', 0, 0); + TaskText('элемент преобразованной цепочки.', 0, 0); SetObjectStyle; Demo8Data; end; @@ -261,31 +261,31 @@ begin end; begin - CreateGroup('Demo', ' ', '. . , 2009', + CreateGroup('Demo', 'Примеры различных задач', 'М. Э. Абрамян, 2009', 'df6yui13dffdsttd', 9, InitTask); - CommentText(' '); - CommentText('\I \i \MPT4TaskMaker\m.'); + CommentText('Данная группа демонстрирует различные возможности'); + CommentText('\Iконструктора учебных заданий\i \MPT4TaskMaker\m.'); - Subgroup(' , '); - CommentText(' , '); - CommentText(' Begin.\P '); - CommentText(' .\P'); + Subgroup('Ввод и вывод данных, оператор присваивания'); + CommentText('В этой подгруппе содержатся задания, импортированные'); + CommentText('из группы Begin.\PПриводимый ниже абзац преамбулы'); + CommentText('также импортирован из данной группы.\P'); UseComment('Begin'); - Subgroup(' (): '); - CommentText(' Matrix7.'); + Subgroup('Двумерные массивы (матрицы): вывод элементов'); + CommentText('Данное задание дублирует задание Matrix7.'); - Subgroup(' '); - CommentText(' File63. '); - CommentText(', \I\i .'); + Subgroup('Символьные и строковые файлы'); + CommentText('Данное задание дублирует задание File63. Оно демонстрирует'); + CommentText('особенности, связанные с двоичными \Iстроковыми\i файлами.'); - Subgroup(' : '); - CommentText(' Text16.'); + Subgroup('Текстовые файлы: основные операции'); + CommentText('Данное задание дублирует задание Text16.'); - Subgroup(' : '); - CommentText(' Dynamic30.'); - CommentText(' ObjDyn30 '); - CommentText(' \<\> .'); + Subgroup('Динамические структуры данных: двусвязный список'); + CommentText('Первое задание дублирует задание Dynamic30.'); + CommentText('Второе задание дублирует задание ObjDyn30 и представляет'); + CommentText('собой \<объектный\> вариант первого задания.'); RegisterGroup('PT4Demo'); end. \ No newline at end of file diff --git a/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas b/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas index b95239aa4..9736d7ae3 100644 --- a/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas +++ b/InstallerSamples/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas @@ -1,7 +1,7 @@ uses PT4, PT4Demo; begin -// -// MakeText +// для отображения окна задачника +// надо закомментировать вызов процедуры MakeText MakeText('Demo'); Task('Demo7?'); end. \ No newline at end of file diff --git a/InstallerSamples/CheckedTasks/PT4/String9.pas b/InstallerSamples/CheckedTasks/PT4/String9.pas index 69173970b..44715e324 100644 --- a/InstallerSamples/CheckedTasks/PT4/String9.pas +++ b/InstallerSamples/CheckedTasks/PT4/String9.pas @@ -1,4 +1,4 @@ -// String9 Programming Taskbook +// Пример решения задачи String9 из электронного задачника Programming Taskbook uses PT4; var n: integer; diff --git a/InstallerSamples/CheckedTasks/Robot/RBcc17.pas b/InstallerSamples/CheckedTasks/Robot/RBcc17.pas index 4e40b2b95..59285e1a8 100644 --- a/InstallerSamples/CheckedTasks/Robot/RBcc17.pas +++ b/InstallerSamples/CheckedTasks/Robot/RBcc17.pas @@ -1,4 +1,4 @@ -// cc17 +// Выполнение задания cc17 для Робота uses Robot; begin diff --git a/InstallerSamples/CheckedTasks/Robot/RobotMakeTask/RobTasks.pas b/InstallerSamples/CheckedTasks/Robot/RobotMakeTask/RobTasks.pas index 547214ce7..d1ae196f3 100644 --- a/InstallerSamples/CheckedTasks/Robot/RobotMakeTask/RobTasks.pas +++ b/InstallerSamples/CheckedTasks/Robot/RobotMakeTask/RobTasks.pas @@ -8,7 +8,7 @@ implementation procedure FirstRob; begin - TaskText(' myrob1. '); + TaskText('Задание myrob1. Закрасить помеченные клетки'); Field(10,6); HorizontalWall(0,3,4); VerticalWall(4,3,2); @@ -22,7 +22,7 @@ end; procedure SecondRob; var n,i: integer; begin - TaskText(' myrob2. '); + TaskText('Задание myrob2. Закрасить клетки под закрашенными'); n:=Random(4)+7; Field(n,4); RobotBeginEnd(1,3,n,3); @@ -39,6 +39,6 @@ end; begin RegisterTask('myrob1',FirstRob); RegisterTask('myrob2',SecondRob); - RegisterGroup('myrob', ' ', 'RobTasks', 2); + RegisterGroup('myrob', 'Мои задания для Робота', 'RobTasks', 2); end. diff --git a/InstallerSamples/CheckedTasks/Robot/random_Robot.pas b/InstallerSamples/CheckedTasks/Robot/random_Robot.pas index 2f6f917c7..4ab24f209 100644 --- a/InstallerSamples/CheckedTasks/Robot/random_Robot.pas +++ b/InstallerSamples/CheckedTasks/Robot/random_Robot.pas @@ -1,4 +1,4 @@ - // . + // Демонстрация использования случайных чисел для Робота. Случайное блуждание uses Robot; begin diff --git a/InstallerSamples/Games/15.pas b/InstallerSamples/Games/15.pas index b75b36d6b..23206ab8b 100644 --- a/InstallerSamples/Games/15.pas +++ b/InstallerSamples/Games/15.pas @@ -1,16 +1,16 @@ -// 15 +// Игра в 15 uses GraphABC,ABCObjects,ABCButtons; const -/// +/// размер поля n = 4; -/// +/// размер фишки sz = 100; -/// +/// зазор между фишками zz = 10; -/// +/// отступ от левого и правого краев x0 = 20; -/// +/// отступ от верхнего и нижнего краев y0 = 20; var @@ -22,9 +22,9 @@ var EmptyCellX,EmptyCellY: integer; MovesCount: integer; - EndOfGame: boolean; // True + EndOfGame: boolean; // True если все фишки стоят на своих местах -// +// Поменять местами две фишки procedure Swap(var p,p1: SquareABC); begin PABCSystem.Swap(p,p1); @@ -36,20 +36,20 @@ begin p1.Top := i; end; -// , +// Определить, являются ли клетки соседями function Sosedi(x1,y1,x2,y2: integer): boolean; begin Result := (abs(x1-x2)=1) and (y1=y2) or (abs(y1-y2)=1) and (x1=x2) end; -// +// Заполнить вспомогательный массив цифр procedure FillDigitsArr; begin for var i:=1 to n*n-1 do digits[i] := i; end; -// . +// Перемешать вспомогательный массив цифр. Количество обменов должно быть четным procedure MeshDigitsArr; var x: integer; begin @@ -61,13 +61,13 @@ begin Swap(digits[i],digits[x]); end; if n mod 2=0 then - Swap(digits[1],digits[2]); // + Swap(digits[1],digits[2]); // количество обменов должно быть четным end; -// . - 0 +// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 procedure Fill15ByDigitsArr; begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // + Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол EmptyCellX := n; EmptyCellY := n; var i := 1; @@ -80,18 +80,18 @@ begin end; end; -// +// Перемешать массив фишек procedure Mesh15; begin MeshDigitsArr; Fill15ByDigitsArr; MovesCount := 0; EndOfGame := False; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.Color := RGB(200,200,255); end; -// +// Создать массив фишек procedure Create15; begin EmptyCellX := n; @@ -111,7 +111,7 @@ begin Fill15ByDigitsArr; end; -// , +// Проверить, все ли фишки стоят на своих местах function IsSolution: boolean; var x,y,i: integer; begin @@ -132,24 +132,24 @@ end; procedure MouseDown(x,y,mb: integer); begin - if EndOfGame then // , "" + if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" exit; - if ObjectUnderPoint(x,y)=nil then // E , + if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; - var fx := (x-x0) div (sz+zz) + 1; // , + var fx := (x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью var fy := (y-y0) div (sz+zz) + 1; if (fx>n) or (fy>n) then exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // , + if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами begin Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); EmptyCellX := fx; EmptyCellY := fy; Inc(MovesCount); - StatusRect.Text := ' : ' + IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: ' + IntToStr(MovesCount); if IsSolution then begin - StatusRect.Text := '! : ' + IntToStr(MovesCount); + StatusRect.Text := 'Победа! Сделано ходов: ' + IntToStr(MovesCount); StatusRect.Color := RGB(255,200,200); EndOfGame := True; end @@ -158,18 +158,18 @@ end; begin SetSmoothingOff; - Window.Title := ' 15'; + Window.Title := 'Игра в 15'; Window.IsFixedSize := True; SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); EndOfGame := False; Create15; - MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'',clLightGray); + MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); MeshButton.OnClick := Mesh15; StatusRect := new RectangleABC(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); StatusRect.TextVisible := True; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.BorderWidth := 2; StatusRect.BorderColor := RGB(80,80,255); diff --git a/InstallerSamples/Games/Animals/Animals.pas b/InstallerSamples/Games/Animals/Animals.pas index a6cd053a8..b8eda8322 100644 --- a/InstallerSamples/Games/Animals/Animals.pas +++ b/InstallerSamples/Games/Animals/Animals.pas @@ -1,6 +1,6 @@ -// " ". -// " " -// : " " - " " +// Самообучающаяся игра "Угадай животное". +// Старайтесь на вопрос "Чем отличается" вводить самый общий ответ +// Например: "Чем отличается чиж от ежа" - "Умеет летать" type TNode = class s: string; @@ -15,7 +15,7 @@ type var f: text; -/// +/// Сохранить дерево в файл procedure SaveToFile(p: TNode); begin if p=nil then @@ -28,7 +28,7 @@ begin SaveToFile(p.right); end; -/// +/// Загрузить дерево из файла function LoadFromFile: TNode; var s: string; @@ -52,10 +52,10 @@ var s,q: string; begin - writeln(' '); + writeln('Загадайте животное'); assign(f, 'animals_data.txt'); if not FileExists('animals_data.txt') then - root := new TNode('') + root := new TNode('Собака') else begin reset(f); @@ -66,7 +66,7 @@ begin p := root; while p.left<>nil do begin - write(p.s+'? (0 - , 1 - ): '); + write(p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then p := p.left @@ -74,15 +74,15 @@ begin p := p.right end; - write(' '+p.s+'? (0 - , 1 - ): '); + write('Это '+p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then - writeln(' !') + writeln('Я угадала!') else begin - write(' . ? '); + write('Я проиграла. Что это за животное? '); readln(s); - write(' , '+p.s+': '); + write('Введите вопрос, отличающий это животное от '+p.s+': '); readln(q); p1 := new TNode(s); p2 := new TNode(p.s); diff --git a/InstallerSamples/Games/Battle.pas b/InstallerSamples/Games/Battle.pas index e6cbcf543..8e7c03bc5 100644 --- a/InstallerSamples/Games/Battle.pas +++ b/InstallerSamples/Games/Battle.pas @@ -1,34 +1,34 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи c : color; public CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); @@ -161,17 +161,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -196,7 +196,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -205,14 +205,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -251,35 +251,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); - SetWindowCaption(' '); + SetWindowCaption('Битва за жизнь'); SetFontSize(7); SetFontName('Arial'); SetBrushColor(BkColor); FillRectangle(0, 0, Width, Height); SetFontColor(clWhite); - TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); - TextOut(10, ymax + 20+1*18, ' . - '); - TextOut(10, ymax + 20+2*18, ' . , .'); - TextOut(10, ymax + 20+3*18, ' : - , , ,'); - TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); - TextOut(10, ymax + 20+5*18, ' , ; - , .'); + TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); + TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); + TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); + TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); + TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); + TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; - //c - . - //CanRazm - - // . - //MaxKol - . - //Kol - . - //MaxLife - . - // , , , . - //MinFood - , - // ( ; -1). - //Speed - . 2 . - //See - - . + //c - цвет. + //CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя + // её последовательными размножениями. + //MaxKol - максимально допустимое количество рыб данного вида. + //Kol - количество рыб данного вида в текущий момент времени. + //MaxLife - максимальная продолжительность жизни. + // После того, как рыба сделает больше шагов, чем это число, она умирает. + //MinFood - минимальное количество съеденных жертв, необходимое для размножения + // (только для хищников; для жертв это количество принято за -1). + //Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. + //See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -289,7 +289,7 @@ begin SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); - // + //Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -302,7 +302,7 @@ begin StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); - // , - . + //И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; //i:=0;c:=getallcount;LockDrawing; repeat diff --git a/InstallerSamples/Games/BookWorm/BookWormABCNET.pas b/InstallerSamples/Games/BookWorm/BookWormABCNET.pas index 8dda5579f..df73f6178 100644 --- a/InstallerSamples/Games/BookWorm/BookWormABCNET.pas +++ b/InstallerSamples/Games/BookWorm/BookWormABCNET.pas @@ -1,8 +1,8 @@ uses GraphABC,ABCObjects,ABCButtons,Events; const -/// - freqcharstr=''; +/// Примерная частота повторяемости букв + freqcharstr='аааааааааааааааааааааааааабббббввввввввггггдддддддееееееееееееееееееееежжззззииииииииииииииииииийккккккккккккккклллллллллллммммммнннннннннннннннннооооооооооооооооооооооооппппппппрррррррррррррррррссссссссссссстттттттттттттттууууууффххцццчччшшщыыьььььэюяяяя'; const MaxWordLen = 12; @@ -12,20 +12,20 @@ type MySquareABC = class(SquareABC) end; var -/// +/// Доска с буквами MainBoard: ObjectBoardABC; -/// 1 +/// Доска высоты 1 для размещения слова WordBoard: ObjectBoardABC; -/// WordBoard +/// Номер первого незанятого символа на доске WordBoard cur: integer; -/// +/// Количество ходов moves: integer; -/// +/// Очки score: integer; -/// +/// Прямоугольник для отображения информации Status: RectangleABC; -/// ( words.txt) +/// Существует ли такое слово (все слова хранятся в файле words.txt) function WordExists(s: string): boolean; var f: text; @@ -49,7 +49,7 @@ end; procedure MyMouseDown(x,y,mb: integer); begin -// +// Нажата левая мышь if mb=1 then begin if cur>WordBoard.DimX then @@ -71,7 +71,7 @@ begin end; end else -// +// Нажата правая мышь begin for var xx:=1 to cur-1 do WordBoard[xx,1].Visible := False; @@ -83,19 +83,19 @@ begin end; end; -/// " " +/// Обработчик кнопки "Новая игра" procedure BtNewClick; begin score := 0; moves := 0; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); MyMouseDown(1,1,2); for var xx:=1 to MainBoard.DimX do for var yy:=1 to MainBoard.DimY do MainBoard[xx,yy].Text := UpCase(freqcharstr[Random(255)+1]); end; -/// " " +/// Обработчик кнопки "Сказать слово" procedure BtWordClick; begin if WordBoard.Color<>clYellow then @@ -113,15 +113,15 @@ begin end; cur := 1; WordBoard.Color := clSkyBlue; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); end; -/// "" +/// Обработчик кнопки "Подсказка" procedure BtPleaseClick; var f: text; str,maxstr: string; - arr,work: array [''..''] of integer; + arr,work: array ['а'..'я'] of integer; maxlen: integer; function CanConstructWord(s: string): boolean; @@ -142,7 +142,7 @@ var begin // BtPleaseClick maxlen := 0; maxstr := ''; - for var c:='' to '' do + for var c:='а' to 'я' do arr[c]:=0; for var xx:=1 to MainBoard.DimX do @@ -169,7 +169,7 @@ procedure InitWindow; begin SetWindowSize(640,480); Window.IsFixedSize := True; - Window.Title := ' !'; + Window.Title := 'Знай русские слова!'; Brush.Color := clMoneyGreen; FillRect(0,0,WindowWidth,WindowHeight); end; @@ -183,11 +183,11 @@ end; procedure InitButtons; begin - var btword := new ButtonABC(70,410,180,30,' ',clGray); - var btnew := new ButtonABC(280,410,100,30,'',clLightGray); - var btplease := new ButtonABC(410,410,160,30,'',clGray); + var btword := new ButtonABC(70,410,180,30,'Сказать слово',clGray); + var btnew := new ButtonABC(280,410,100,30,'Заново',clLightGray); + var btplease := new ButtonABC(410,410,160,30,'Подсказка',clGray); -// +// Привязка обработчиков к кнопкам btword.OnClick := BtWordClick; btnew.OnClick := BtNewClick; btplease.OnClick := BtPleaseClick; @@ -197,7 +197,7 @@ end; procedure InitInterface; begin Status := new RectangleABC(70,350,500,30,clSkyBlue); - Status.Text := ': 0 : 0'; + Status.Text := 'Ходов: 0 Очков: 0'; WordBoard := new ObjectBoardABC(20,40,MaxWordLen,1,50,50,clSkyBlue); MainBoard := new ObjectBoardABC(220,120,4,4,50,50,clMoneyGreen); MainBoard.BorderColor := clGreen; diff --git a/InstallerSamples/Games/DeleteByMouse.pas b/InstallerSamples/Games/DeleteByMouse.pas index c0cc6959c..77203faa2 100644 --- a/InstallerSamples/Games/DeleteByMouse.pas +++ b/InstallerSamples/Games/DeleteByMouse.pas @@ -3,22 +3,22 @@ uses ABCObjects,GraphABC; const CountSquares = 20; var - /// + /// Текущая цифра CurrentDigit: integer; - /// + /// Количество ошибок Mistakes: integer; - /// + /// Строка информации StatusRect: RectangleABC; -/// +/// Вывод информационной строки procedure DrawStatusText; begin if CurrentDigit<=CountSquares then - StatusRect.Text := ' : ' + IntToStr(CurrentDigit-1) + ' : ' + IntToStr(Mistakes) - else StatusRect.Text := ' . : ' + IntToStr(Milliseconds div 1000) + ' . : ' + IntToStr(Mistakes); + StatusRect.Text := 'Удалено квадратов: ' + IntToStr(CurrentDigit-1) + ' Ошибок: ' + IntToStr(Mistakes) + else StatusRect.Text := 'Игра окончена. Время: ' + IntToStr(Milliseconds div 1000) + ' с. Ошибок: ' + IntToStr(Mistakes); end; -/// +/// Обработчик события мыши procedure MyMouseDown(x,y,mb: integer); begin var ob := ObjectUnderPoint(x,y); @@ -38,7 +38,7 @@ begin end; begin - Window.Title := ': '; + Window.Title := 'Игра: удали все квадраты по порядку'; Window.IsFixedSize := True; for var i:=1 to CountSquares do begin @@ -51,6 +51,6 @@ begin CurrentDigit := 1; Mistakes := 0; DrawStatusText; - // + // Установка обработчиков OnMouseDown := MyMouseDown; end. \ No newline at end of file diff --git a/InstallerSamples/Games/KillThem.pas b/InstallerSamples/Games/KillThem.pas index 70ed78b38..0ed3a4842 100644 --- a/InstallerSamples/Games/KillThem.pas +++ b/InstallerSamples/Games/KillThem.pas @@ -6,34 +6,34 @@ const var kLeftKey,kRightKey: boolean; kSpaceKey: integer; - /// + /// Игрок Player: RectangleABC; - /// + /// Таймер движения врагов t: Timer; - /// + /// Флаг конца игры EndOfGame: boolean; - /// + /// Количество неигровых объектов StaticObjectsCount: integer; - /// + /// Счетчик выигрышей Wins: integer; - /// + /// Счетчик проигрышей Falls: integer; - /// + /// Информационная строка InfoString: RectangleABC; - /// + /// Сообщение в начале игры NewGame: RoundRectABC; type KeysType = (kLeft,kRight); - /// + /// Класс пули Pulya = class(CircleABC) public constructor Create(x,y: integer); procedure Move; override; end; - /// + /// Класс врага Enemy = class(RectangleABC) public constructor Create(x,y,w: integer); @@ -53,7 +53,7 @@ begin if Top<0 then Visible := False; for var j:=StaticObjectsCount to Objects.Count-1 do - // + // При столкновении пуля и объект становятся невидимыми if (Objects[j]<>Self) and Intersect(Objects[j]) then begin Objects[j].Visible := False; @@ -85,7 +85,7 @@ begin EndOfGame := True; end; -/// +/// Количество врагов function NumberOfEnemies: integer; begin Result := 0; @@ -94,7 +94,7 @@ begin Result += 1; end; -/// +/// Создание игрока и врагов procedure CreateObjects; begin Player := new RectangleABC(280,WindowHeight-30,100,20,clPlayer); @@ -106,21 +106,21 @@ begin end; end; -/// +/// Разрушение игрока и врагов procedure DestroyObjects; begin for var i:=Objects.Count-1 downto StaticObjectsCount do Objects[i].Destroy; end; -/// +/// Перемещение врагов procedure MoveObjects; begin for var i:=StaticObjectsCount+1 to Objects.Count-1 do Objects[i].Move; end; -/// +/// Удаление уничтоженных объектов procedure DestroyKilledObjects; begin for var i:=ObjectsCount-1 downto StaticObjectsCount+1 do @@ -128,7 +128,7 @@ begin Objects[i].Destroy; end; -/// +/// Обработчик нажатия клавиши procedure KeyDown(Key: integer); begin case Key of @@ -138,7 +138,7 @@ vk_Space: if kSpaceKey=2 then kSpaceKey := 1; end; end; -/// +/// Обработчик отжатия клавиши procedure KeyUp(Key: integer); begin case Key of @@ -148,16 +148,16 @@ vk_Space: kSpaceKey := 2; end; end; -/// +/// Изменение информационной строки procedure ChangeInfoString; begin - InfoString.Text := ': '+IntToStr(NumberOfEnemies)+' : '+IntToStr(Wins)+' : '+IntToStr(Falls); + InfoString.Text := 'Врагов: '+IntToStr(NumberOfEnemies)+' Побед: '+IntToStr(Wins)+' Поражений: '+IntToStr(Falls); end; -/// +/// Обработчик нажатия символьной клавиши procedure KeyPress(Key: char); begin - if (Key in ['G','','g','']) and EndOfGame then + if (Key in ['G','П','g','п']) and EndOfGame then begin NewGame.Visible := False; EndOfGame := False; @@ -169,14 +169,14 @@ begin end; end; -/// +/// Обработчик отжатия мыши procedure MouseUp(x,y,mb: integer); begin if NewGame.PTInside(x,y) then KeyPress('G'); end; -/// +/// Обработчик таймера procedure TimerProc; begin if kLeftKey and (Player.Left>0) then @@ -193,7 +193,7 @@ begin RedrawObjects; ChangeInfoString; var n := NumberOfEnemies; - // , + // Страховка от случая, когда процедура таймера выполняется одновременно в нескольких потоках if n=0 then EndOfGame := True; if EndOfGame then @@ -211,7 +211,7 @@ begin end; begin - Window.Title := ''; + Window.Title := 'Стрелялка'; Window.IsFixedSize := True; ClearWindow(clBlack); LockDrawingObjects; @@ -224,7 +224,7 @@ begin var zz := 100; NewGame := new RoundRectABC(zz,200,400,200,30,Color.Violet); NewGame.Center := Window.Center; - NewGame.Text := 'G - '; + NewGame.Text := 'G - Новая игра'; StaticObjectsCount := Objects.Count; ChangeInfoString; RedrawObjects; diff --git a/InstallerSamples/Games/Life.pas b/InstallerSamples/Games/Life.pas index 17989df4f..8c0af5175 100644 --- a/InstallerSamples/Games/Life.pas +++ b/InstallerSamples/Games/Life.pas @@ -1,23 +1,23 @@ -// "" -// +// Игра "Жизнь" на торе +// Оптимизация хешированием по равномерной сетке uses GraphABC; const -/// +/// Ширина клетки w = 4; -/// +/// Количество клеток по ширине m = 300; -/// +/// Количество клеток по высоте n = 220; -/// +/// Отступ поля от левой границы окна x0 = 1; -/// +/// Отступ поля от верхней границы окна y0 = 21; mm = m + 1; nn = n + 1; -/// +/// Количество клеток сетки по горизонтали mk = 15; -/// +/// Количество клеток сетки по вертикали nk = 10; var @@ -28,7 +28,7 @@ var gen: integer; hn,hm: integer; -/// +/// Нарисовать ячейку procedure DrawCell(i,j: integer); begin DrawInBuffer := False; @@ -37,7 +37,7 @@ begin DrawInBuffer := True; end; -/// +/// Стереть ячейку procedure ClearCell(i,j: integer); begin DrawInBuffer := False; @@ -46,7 +46,7 @@ begin DrawInBuffer := True; end; -/// +/// Нарисовать все изменившиеся ячейки procedure DrawConfiguration; begin for var i:=1 to n do @@ -59,7 +59,7 @@ begin end; end; -/// +/// Нарисовать все ячейки procedure DrawConfigurationFull; begin for var i:=1 to n do @@ -68,7 +68,7 @@ begin else ClearCell(i,j); end; -/// +/// Нарисовать поле procedure DrawField; begin Pen.Color := clLightGray; @@ -88,7 +88,7 @@ begin end; end; -/// +/// Увеличить массив соседей для данной клетки procedure IncSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -106,7 +106,7 @@ begin SosediB[i2,j2] += 1; end; -/// +/// Уменьшить массив соседей для данной клетки procedure DecSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -124,7 +124,7 @@ begin SosediB[i2,j2] -= 1; end; -/// (i,j) +/// Поставить ячейку в клетку (i,j) procedure SetCell(i,j: integer); begin if b[i,j]=0 then @@ -136,7 +136,7 @@ begin CountCells += 1; end; -/// (i,j) +/// Убрать ячейку из клетки (i,j) procedure UnSetCell(i,j: integer); begin if b[i,j]=1 then @@ -148,7 +148,7 @@ begin CountCells -= 1; end; -/// +/// Инициализировать массивы и конфигурацию поля procedure Init; var xc := n div 2; @@ -173,7 +173,7 @@ begin SetCell(xc+1,yc+1); end; -/// +/// Обработать ячейку procedure ProcessCell(i,j: integer); begin case SosediA[i,j] of @@ -197,7 +197,7 @@ begin end; {case} end; -/// +/// Перейти к следующему поколению procedure NextGen; begin for var ik:=1 to nk do @@ -256,33 +256,33 @@ begin end; end; -/// +/// Перерисовка содержимого окна procedure LifeRedrawProc; begin Redraw; DrawConfigurationFull; end; -/// +/// Вывод номера поколения и количества ячеек procedure DrawInfo; begin Brush.Color := clWhite; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(WindowWidth - 130,0,': '+IntToStr(CountCells)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(WindowWidth - 130,0,'Жителей: '+IntToStr(CountCells)+' '); end; begin SetConsoleIO; if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm := m div mk; hn := n div nk; SetWindowSize(x0+m*w,y0+n*w); CenterWindow; - Window.Title := ' ""'; + Window.Title := 'Игра "Жизнь"'; Window.IsFixedSize := True; Font.Name := 'Arial'; Font.Size := 10; diff --git a/InstallerSamples/Games/Matches.pas b/InstallerSamples/Games/Matches.pas index 29aac08f7..0ea31f7ed 100644 --- a/InstallerSamples/Games/Matches.pas +++ b/InstallerSamples/Games/Matches.pas @@ -1,12 +1,12 @@ -// "" +// Игра "Спички" const InitialCount=15; var - /// + /// Текущее количество спичек Count: integer; - /// , + /// Количество спичек, которое берет игрок Num: integer; - /// + /// Номер текущего игрока Player: integer; begin @@ -18,12 +18,12 @@ begin begin var Correct: boolean; repeat - write(' . ',Count,' . '); - write(' ? '); + write('Ваш ход. На столе ',Count,' спичек. '); + write('Сколько спичек Вы берете? '); readln(Num); Correct := (Num>=1) and (Num<=3) and (Num<=Count); if not Correct then - writeln('! !'); + writeln('Неверно! Повторите ввод!'); until Correct; end else @@ -31,7 +31,7 @@ begin Num := Random(1,3); if Num>Count then Num := Count; - writeln(' . ',Num,' '); + writeln('Мой ход. Я взял ',Num,' спичек'); end; Count -= Num; if Player=1 then @@ -40,6 +40,6 @@ begin until Count=0; if Player=1 then - writeln(' !') - else writeln(' !'); + writeln('Вы победили!') + else writeln('Вы проиграли!'); end. diff --git a/InstallerSamples/Games/NewLife.pas b/InstallerSamples/Games/NewLife.pas index d432c1649..f4bc91131 100644 --- a/InstallerSamples/Games/NewLife.pas +++ b/InstallerSamples/Games/NewLife.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; @@ -303,10 +303,10 @@ begin AssignArray(b,nn+1,mm+1); AssignArray(sosedia,nn+1,mm+1); AssignArray(sosedib,nn+1,mm+1); - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -335,8 +335,8 @@ begin DrawInBuffer := True; SetBrushColor(ClearColor); SetFontColor(FillColor); - TextOut(25, 0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25, 0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); if gen mod 1000 = 0 then begin mil1:=Milliseconds; writeln(gen,' ',(mil1-mil)/1000); diff --git a/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteCreation.pas b/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteCreation.pas index 5d5cf74ca..efe2a13cd 100644 --- a/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteCreation.pas +++ b/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteCreation.pas @@ -1,14 +1,14 @@ -// +// Создание спрайта и его состояний uses GraphABC,ABCSprites,ABCObjects,Events; var s: SpriteABC; begin - Window.Title := ' '; + Window.Title := 'Создание спрайта'; SetWindowSize(400,300); CenterWindow; - // + // Создание спрайта и добавление в него кадров s := new SpriteABC(150,100,'SpriteFrames\multi1.bmp'); s.Add('SpriteFrames\multi2.bmp'); s.Add('SpriteFrames\multi3.bmp'); @@ -16,14 +16,14 @@ begin s.Add('SpriteFrames\multi4.bmp'); s.Add('SpriteFrames\multi5.bmp'); - // - s.AddState('fly',4); // - 4 - s.AddState('stand',1); // - 1 - s.AddState('sit',1); // - 1 + // Добавление состояний к спрайту + s.AddState('fly',4); // Летать - 4 кадра + s.AddState('stand',1); // Стоять - 1 кадр + s.AddState('sit',1); // Сидеть - 1 кадр - // - (1..10) + // Задание скорости спрайт-анимации (1..10) s.Speed := 9; - // "" + // Сохранение спрайта в "длинный" рисунок и создание информационного файла спрайта s.SaveWithInfo('spr.png'); end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteUsing.pas b/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteUsing.pas index d189884e5..df48901ad 100644 --- a/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteUsing.pas +++ b/InstallerSamples/Graphics/ABCObjects/Sprites/gr_SpriteUsing.pas @@ -1,4 +1,4 @@ -// +// Переключение состояний спрайта щелчком мыши uses GraphABC,ABCSprites,ABCObjects,Events; var @@ -9,19 +9,19 @@ procedure MyMouseDown(x,y,mb: integer); begin if s.PtInside(x,y) then begin - // + // Переход к следующему состоянию спрайта if s.Statemax |y|>max -// x,y , i +// Демонстрация фрактальной графики. Множество Мандельброта +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -14,7 +14,7 @@ const dy = 300; begin - Window.Title := ': '; + Window.Title := 'Фракталы: множество Мандельброта'; SetWindowSize(600,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -37,6 +37,6 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/Paporotnik.pas b/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/Paporotnik.pas index 6224d87c8..3d689e7a5 100644 --- a/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/Paporotnik.pas +++ b/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/Paporotnik.pas @@ -1,17 +1,17 @@ -/// " " +///Модуль для рисования фракталов семейства "Лист папоротника" unit Paporotnik; uses GraphABC; type - /// + ///Настройки фрактала PaporotnikFractalInitalData = record data: array of array of real; P0,P1,P2,P3:real; end; - /// " " + ///Фрактал "Лист папоротника" PaporotnikFractal = class private data: array of array of real; diff --git a/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/PaporotnikData.pas b/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/PaporotnikData.pas index 6eb296f99..38069519a 100644 --- a/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/PaporotnikData.pas +++ b/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik/PaporotnikData.pas @@ -1,10 +1,10 @@ -/// +///Константы задающие фракталы unit PaporotnikData; uses Paporotnik; var - /// + ///Папоротник с изогнутым листом PaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.0000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0400, -0.0400, 0.8500, 0, 1.6000), @@ -15,7 +15,7 @@ var P2: 7; P3: 7); - /// + ///Папоротник с прямым листом SimplePaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.00, 0.00, 0.00, 0.16, 0, 0.00), ( 0.85, 0.00, 0.00, 0.85, 0, 1.60), @@ -26,7 +26,7 @@ var P2: 7; P3: 7); - /// + ///Елка ElkaData: PaporotnikFractalInitalData := ( data: (( 0.1000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0000, 0.0000, 0.8500, 0, 1.6000), diff --git a/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik1.pas b/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik1.pas index 251b260b6..7bbe65202 100644 --- a/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik1.pas +++ b/InstallerSamples/Graphics/GraphABC/Fractals/Paporotnik1.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Папоротник +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -17,7 +17,7 @@ const dy = 130; begin - Window.Title := ': '; + Window.Title := 'Фракталы: папоротник'; SetWindowSize(800,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -38,5 +38,5 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/InstallerSamples/Graphics/GraphABC/Hypno.pas b/InstallerSamples/Graphics/GraphABC/Hypno.pas index 00a0ae749..ecb95b404 100644 --- a/InstallerSamples/Graphics/GraphABC/Hypno.pas +++ b/InstallerSamples/Graphics/GraphABC/Hypno.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация прозрачности uses GraphABC; begin diff --git a/InstallerSamples/Graphics/GraphABC/Mosaic.pas b/InstallerSamples/Graphics/GraphABC/Mosaic.pas index 02efa3c44..4aee71d02 100644 --- a/InstallerSamples/Graphics/GraphABC/Mosaic.pas +++ b/InstallerSamples/Graphics/GraphABC/Mosaic.pas @@ -1,4 +1,4 @@ -// . +// Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const @@ -13,10 +13,10 @@ const var a: array [0..n,0..m] of Color; begin - Window.Title := ''; + Window.Title := 'Мозаика'; Window.SetSize(800,600); - // + // Заполнение массива случайными цветами for var i:=0 to n-1 do for var j:=0 to m-1 do begin diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp1.pas b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp1.pas index b1bc57c41..b97abd212 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp1.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp1.pas @@ -1,7 +1,7 @@ -// - , -// , Stamp. +// Штампы - это классы графических фигур, хранящие их параметры +// В любой момент можно нарисовать графическую фигуру, вызвав метод Stamp. -// +// Класс штампа прямоугольника uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp2.pas b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp2.pas index 1c41b6d59..08aad5d4f 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp2.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp2.pas @@ -1,4 +1,4 @@ -// +// Класс штампа ряда прямоугольников uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp3.pas b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp3.pas index 0e6a90aca..8b5a79c23 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp3.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp3.pas @@ -1,4 +1,4 @@ -// - +// Класс штампа прямоугольника с методами увеличения-уменьшения uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp4.pas b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp4.pas index 3ba40f6cb..0775030b4 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp4.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp4.pas @@ -1,4 +1,4 @@ -// - +// Класс штампа прямоугольника с методами увеличения-уменьшения от центра uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp5.pas b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp5.pas index d6ed6053d..78226a572 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/Stamp5.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/Stamp5.pas @@ -1,4 +1,4 @@ -// +// Класс штампа треугольника uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/StampCompound.pas b/InstallerSamples/Graphics/GraphABC/Stamps/StampCompound.pas index 1f4b5c634..f8f44be70 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/StampCompound.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/StampCompound.pas @@ -1,4 +1,4 @@ -// +// Класс штампа составного объекта uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/StampCross.pas b/InstallerSamples/Graphics/GraphABC/Stamps/StampCross.pas index c4f523078..4b554fd12 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/StampCross.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/StampCross.pas @@ -1,4 +1,4 @@ -// +// Класс штампа креста uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/StampPoly.pas b/InstallerSamples/Graphics/GraphABC/Stamps/StampPoly.pas index e9afc6017..ced69f117 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/StampPoly.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/StampPoly.pas @@ -1,4 +1,4 @@ -// +// Класс штампа правильного многоугольника uses GraphABC; type diff --git a/InstallerSamples/Graphics/GraphABC/Stamps/StampText.pas b/InstallerSamples/Graphics/GraphABC/Stamps/StampText.pas index 9111e314e..d7a26fc52 100644 --- a/InstallerSamples/Graphics/GraphABC/Stamps/StampText.pas +++ b/InstallerSamples/Graphics/GraphABC/Stamps/StampText.pas @@ -1,4 +1,4 @@ -// +// Класс штампа текста uses GraphABC; type @@ -23,9 +23,9 @@ type end; begin - var txt := new TextStamp(200,200,14,'!'); + var txt := new TextStamp(200,200,14,'Привет!'); txt.Stamp; txt.MoveOn(0,40); - txt.Text := ' !'; + txt.Text := 'До свидания!'; txt.Stamp; end. \ No newline at end of file diff --git a/InstallerSamples/Graphics/GraphABC/Star.pas b/InstallerSamples/Graphics/GraphABC/Star.pas index 2dd11d3dc..76054f2f8 100644 --- a/InstallerSamples/Graphics/GraphABC/Star.pas +++ b/InstallerSamples/Graphics/GraphABC/Star.pas @@ -1,8 +1,8 @@ uses GraphABC; const - n = 17; // - n1 = 7; // + n = 17; // количество точек + n1 = 7; // через сколько точек соединять begin var a := -Pi/2; diff --git a/InstallerSamples/Graphics/GraphABC/Tentacles.pas b/InstallerSamples/Graphics/GraphABC/Tentacles.pas index a460d6630..1de368e86 100644 --- a/InstallerSamples/Graphics/GraphABC/Tentacles.pas +++ b/InstallerSamples/Graphics/GraphABC/Tentacles.pas @@ -1,12 +1,12 @@ -// "". midletPascal :) +//Программа "Щупальца". Порт с midletPascal :) uses GraphABC; const - S = 14; // - - N = 18; // - - W = 2; // + S = 14; // Кол-во щупалец + N = 18; // Кол-во звеньев в каждом из них + W = 2; //Ширина щупалец var i, j: Integer; @@ -14,16 +14,16 @@ var tx, ty: Real; k, d: Real; - // - + // Углы поворота звеньев относительно друг-друга a: array [1..N] of Real; - // + // Длина одного звена len: Real; begin Pen.Width := W; SetWindowSize(320, 320); - SetWindowTitle(''); + SetWindowTitle('Щупальца'); if Window.Width > Window.Height then len := Window.Height / 1.8 / N @@ -34,7 +34,7 @@ begin var k1 := 1; - // + // Главный цикл repeat if Window.Width > Window.Height then @@ -42,17 +42,17 @@ begin else len := Window.Width / 1.8 / N; - LockDrawing(); // ( ) - ClearWindow(ClBlack); // + LockDrawing(); //Блокируем рисование(для оптимизации) + ClearWindow(ClBlack); // Стираем всё - // + // Расчёт коэфицента поворота if random(50) = 0 then k := random(360) * pi / 180; - // + // Поворот всех щупалец a[1] := a[1] + sin(k) / 15; - // + // Интерполяция углов между щупальцами for i := 2 to N do a[i] := a[i] + (a[i - 1] - a[i]) * 0.1; for j := 0 to S - 1 do @@ -63,7 +63,7 @@ begin begin SetPenColor(Color.FromArgb(255, trunc(255 - 255 * i / N), 255)); - // :) + // Немного школьной тригонометрии :) tx := x + cos(j * d + a[i]) * len; ty := y + sin(j * d + a[i]) * len; Line(trunc(x), trunc(y), trunc(tx), trunc(ty)); @@ -71,10 +71,10 @@ begin y := ty; end; end; - Redraw(); // + Redraw(); //Перерисуем изображение k1 += 1; - SetWindowTitle('( . FPS ' + Format('{0,5:f2}',k1/Milliseconds*1000)+')'); + SetWindowTitle('Щупальца( Средн. FPS ' + Format('{0,5:f2}',k1/Milliseconds*1000)+')'); sleep(5); until false; diff --git a/InstallerSamples/Graphics/GraphABC/ThroughTheUniverse.pas b/InstallerSamples/Graphics/GraphABC/ThroughTheUniverse.pas index ca464dd75..a6840cd4d 100644 --- a/InstallerSamples/Graphics/GraphABC/ThroughTheUniverse.pas +++ b/InstallerSamples/Graphics/GraphABC/ThroughTheUniverse.pas @@ -1,33 +1,33 @@ -// " ". midletPascal +//Программа "Скозь вселенную". Порт с midletPascal uses GraphABC; type - // - + // Описываем тип-элемент Звезда TStar = record - X, Y, Z : real; // + X, Y, Z : real; // Положение в пространстве end; const - MAX_STARS = 1000; // - - SPEED = 200; // , / + MAX_STARS = 1000; // Кол-во звёздочек + SPEED = 200; // Скорость, в единицах/сек var i : Integer; - // :) + // Наши звёздочки :) Stars : array [1..MAX_STARS] of TStar; - // + // Ширина и высота дисплея scr_W : Integer; scr_H : Integer; - // + // Время time, dt : Integer; - // (i), (c) + // Рисует текущую звёздочку (i), цвета (c) procedure SetPix(c: Integer); var sx, sy : Integer; begin - // , 3D 2D + // Данные действия, проецируют 3D точку на 2D полоскость дисплея try sx := trunc(scr_W / 2 + Stars[i].X * 200 / (Stars[i].Z + 200)); sy := trunc(scr_H / 2 - Stars[i].Y * 200 / (Stars[i].Z + 200)); @@ -45,7 +45,7 @@ uses GraphABC; scr_W := Window.Width; scr_H := Window.Height; - // + //случайным образом раскидаем звёздочки randomize; for i := 1 to MAX_STARS do begin @@ -54,30 +54,30 @@ uses GraphABC; Stars[i].Z := random(1900); end; - // ( ) + // Очистка содержимого дисплея (чёрный цвет) ClearWindow(Color.Black); time := Milliseconds; - // + // Главный цикл отрисовки repeat scr_W := Window.Width; scr_H := Window.Height; - dt := Milliseconds - time; // , - time := Milliseconds; // + dt := Milliseconds - time; // Сколько мс прошло, с прошлой отрисовки + time := Milliseconds; // Засекаем время for i := 1 to MAX_STARS do begin - // + // Затираем звёздочку с предыдущего кадра SetPix(0); - // + // Изменяем её позицию в зависимости прошедшего с последней отрисовки времени Stars[i].Z := Stars[i].Z - SPEED * dt/1000; - // "" - + // Если звезда "улетела" за позицию камеры - генерируем её вдали if Stars[i].Z <= -200 then begin Stars[i].X := random(scr_W * 4) - scr_W * 2; Stars[i].Y := random(scr_H * 4) - scr_H * 2; - Stars[i].Z := 1900; // :) + Stars[i].Z := 1900; // Откидываем звезду далеко вперёд :) end; - // ( Z ) + // Рисуем звёздочку в новом положении (цвет зависит от Z координаты) SetPix(trunc(255 - 255 * (Stars[i].Z + 200) / 2100)); end; sleep(10); diff --git a/InstallerSamples/Graphics/GraphABC/graph3d.pas b/InstallerSamples/Graphics/GraphABC/graph3d.pas index 55b1e5338..ea0587a05 100644 --- a/InstallerSamples/Graphics/GraphABC/graph3d.pas +++ b/InstallerSamples/Graphics/GraphABC/graph3d.pas @@ -1,6 +1,6 @@ -// KuMir/PMir -// -// :) +// Пример из пакета KuMir/PMir +// Публикуется практически без изменений +// Дорог как память :) Uses GraphABC; var Xmin,Xmax,Xstep: real; @@ -57,8 +57,8 @@ begin end; begin - SetWindowCaption(' '); + SetWindowCaption('График функции двух переменных'); SetWindowSize(600,400); - dx := 2; { X } - gr(100); { Y <= MaxN } + dx := 2; { разрешение по оси X } + gr(100); { количество линий по Y <= MaxN } end. diff --git a/InstallerSamples/Graphics/GraphABC/graphic.pas b/InstallerSamples/Graphics/GraphABC/graphic.pas index 20809900e..77a0a3bff 100644 --- a/InstallerSamples/Graphics/GraphABC/graphic.pas +++ b/InstallerSamples/Graphics/GraphABC/graphic.pas @@ -1,6 +1,6 @@ -// drawGraph -// OY -// +// Процедура drawGraph рисования графика функции в полном окне +// с масштабированием по оси OY +// Перерисовывает график при изменении размеров окна uses GraphABC; type FUN = function (x: real): real; @@ -10,8 +10,8 @@ begin Result := x*sin(x)*exp(-0.1*x); end; -// l (logical) - -// s (screen) - +// l (logical) - логические координаты +// s (screen) - физические координаты procedure drawGraph(x1,x2: real; f: FUN); var xl0,wl,yl0,hl: real; @@ -56,7 +56,7 @@ begin // drawGraph yl0 := min; hl := -(max-min); - // + // Нарисовать оси системы координат Line(0,LtoSy(0),ws,LtoSy(0)); Line(LtoSx(0),0,LtoSx(0),hs); @@ -75,7 +75,7 @@ end; begin LockDrawing; - SetWindowCaption(' : '); + SetWindowCaption('График функции: масштабирование'); drawGraph(0,60,f); Redraw; OnResize := Resize; diff --git a/InstallerSamples/Graphics/GraphABC/rain.pas b/InstallerSamples/Graphics/GraphABC/rain.pas index c496bf0f6..17f971f4d 100644 --- a/InstallerSamples/Graphics/GraphABC/rain.pas +++ b/InstallerSamples/Graphics/GraphABC/rain.pas @@ -1,4 +1,4 @@ -// +// Имитация кругов на воде от капель дождя uses GraphABC; const speed = 2; @@ -20,7 +20,7 @@ end; const z=50; begin - Window.Title := ' '; + Window.Title := 'Капли дождя'; SetWindowSize(800,600); while True do Kaplia(Random(z,WindowWidth-z),Random(z,WindowHeight-z)); diff --git a/InstallerSamples/LINQ/Consonants.pas b/InstallerSamples/LINQ/Consonants.pas index 916a8d987..3b88cd93a 100644 --- a/InstallerSamples/LINQ/Consonants.pas +++ b/InstallerSamples/LINQ/Consonants.pas @@ -1,4 +1,4 @@ -// +// Вывод английских согласных var vowel: string := 'aeiouy'; begin diff --git a/InstallerSamples/LINQ/First3Min.pas b/InstallerSamples/LINQ/First3Min.pas index c7fd38749..0c2454143 100644 --- a/InstallerSamples/LINQ/First3Min.pas +++ b/InstallerSamples/LINQ/First3Min.pas @@ -1,4 +1,4 @@ -// 3 +// Первые 3 минимума begin SeqRandom(20).Println.Sorted.Distinct.Take(3).Println; end. \ No newline at end of file diff --git a/InstallerSamples/LINQ/FunTable.pas b/InstallerSamples/LINQ/FunTable.pas index c42354be5..33273e831 100644 --- a/InstallerSamples/LINQ/FunTable.pas +++ b/InstallerSamples/LINQ/FunTable.pas @@ -1,4 +1,4 @@ -// sin +// Вывод таблицы значений функции sin begin Range(0,Pi,20).Select(x->Format('({0:f4}, {1:f7})',x,sin(x))).Println(NewLine); diff --git a/InstallerSamples/LINQ/MonteCarlo.pas b/InstallerSamples/LINQ/MonteCarlo.pas index e7605ae42..67f11a46a 100644 --- a/InstallerSamples/LINQ/MonteCarlo.pas +++ b/InstallerSamples/LINQ/MonteCarlo.pas @@ -1,4 +1,4 @@ -// Pi - +// Вычисление числа Pi методом Монте-Карло begin var n := 10000000; diff --git a/InstallerSamples/LINQ/Palindroms.pas b/InstallerSamples/LINQ/Palindroms.pas index 12470ea92..03f4a42a5 100644 --- a/InstallerSamples/LINQ/Palindroms.pas +++ b/InstallerSamples/LINQ/Palindroms.pas @@ -1,4 +1,4 @@ -// , +// Вывести все палиндромы в строке, упорядоченные по длине begin var s := ' hello aha paap zz '; diff --git a/InstallerSamples/LINQ/SumInv.pas b/InstallerSamples/LINQ/SumInv.pas index 42634c76b..c17199dab 100644 --- a/InstallerSamples/LINQ/SumInv.pas +++ b/InstallerSamples/LINQ/SumInv.pas @@ -1,5 +1,5 @@ -// -// , - +// Сравнение производительности обычного алгоритма накопления суммы +// и метода, использующего лямбда-выражение begin var n := 100000000; var q := Range(1,n).Select(x->1/x).Sum(); diff --git a/InstallerSamples/LanguageFeatures/Boxing.pas b/InstallerSamples/LanguageFeatures/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/InstallerSamples/LanguageFeatures/Boxing.pas +++ b/InstallerSamples/LanguageFeatures/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/InstallerSamples/LanguageFeatures/ClassConstructor.pas b/InstallerSamples/LanguageFeatures/ClassConstructor.pas index 52a2acd20..c9f9d8d3c 100644 --- a/InstallerSamples/LanguageFeatures/ClassConstructor.pas +++ b/InstallerSamples/LanguageFeatures/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Иллюстрация использования статических (классовых) конструкторов type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/InstallerSamples/LanguageFeatures/DllTest/MyDll.pas b/InstallerSamples/LanguageFeatures/DllTest/MyDll.pas index 3d9b4026c..8d5974158 100644 --- a/InstallerSamples/LanguageFeatures/DllTest/MyDll.pas +++ b/InstallerSamples/LanguageFeatures/DllTest/MyDll.pas @@ -1,4 +1,4 @@ -// Dll- +// Dll-библиотека library MyDll; const n = 10; diff --git a/InstallerSamples/LanguageFeatures/DllTest/main.pas b/InstallerSamples/LanguageFeatures/DllTest/main.pas index 39e3b0f4e..39a4f7e00 100644 --- a/InstallerSamples/LanguageFeatures/DllTest/main.pas +++ b/InstallerSamples/LanguageFeatures/DllTest/main.pas @@ -1,6 +1,6 @@ -// - -// dll-, PascalABC.NET, , -// +// Это - главная программа +// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, +// не подключая пространства имен #reference 'mydll.dll' begin diff --git a/InstallerSamples/LanguageFeatures/ForeachExamples.pas b/InstallerSamples/LanguageFeatures/ForeachExamples.pas index 97457129d..a227823f6 100644 --- a/InstallerSamples/LanguageFeatures/ForeachExamples.pas +++ b/InstallerSamples/LanguageFeatures/ForeachExamples.pas @@ -1,5 +1,5 @@ -// , -// foreach +// Пример иллюстрирует всевозможные типы контейнеров, +// по которым можно перемещаться с помощью оператора foreach uses System.Collections.Generic; @@ -15,7 +15,7 @@ var begin for var i:=1 to n do a[i] := Random(100); - // foreach + // Цикл foreach по статическому массиву foreach x in a do write(x,' '); writeln; @@ -24,7 +24,7 @@ begin for var i:=0 to n-1 do b[i] := Random(100); - // foreach + // Цикл foreach по динамическому массиву foreach x in b do write(x,' '); writeln; diff --git a/InstallerSamples/LanguageFeatures/ForeachForSet.pas b/InstallerSamples/LanguageFeatures/ForeachForSet.pas index e74eee07e..5044ff296 100644 --- a/InstallerSamples/LanguageFeatures/ForeachForSet.pas +++ b/InstallerSamples/LanguageFeatures/ForeachForSet.pas @@ -1,4 +1,4 @@ -// . - , - +// Цикл по множеству. Порядок - не по алфавиту, поскольку множества реализованы на базе хеш-таблиц begin foreach c: char in ['a'..'z'] do Write(c); diff --git a/InstallerSamples/LanguageFeatures/ForeachIEnumerable.pas b/InstallerSamples/LanguageFeatures/ForeachIEnumerable.pas index b7deda0e5..911e6c1ec 100644 --- a/InstallerSamples/LanguageFeatures/ForeachIEnumerable.pas +++ b/InstallerSamples/LanguageFeatures/ForeachIEnumerable.pas @@ -1,9 +1,9 @@ -// IEnumerable -// foreach +// Пример иллюстрирует реализацию классом интерфейса IEnumerable +// для использования его в операторе foreach uses System.Collections; type - // + // Генератор чисел Фибоначчи FibGen = class(IEnumerable, IEnumerator) private a,b,n,i: integer; @@ -44,7 +44,7 @@ type var f: FibGen; begin - writeln(' '); + writeln('Числа Фибоначчи'); f := new FibGen(25); foreach var x in f do write(x,' '); diff --git a/InstallerSamples/LanguageFeatures/FracOperatorOverload.pas b/InstallerSamples/LanguageFeatures/FracOperatorOverload.pas index d876aa633..9491ae6be 100644 --- a/InstallerSamples/LanguageFeatures/FracOperatorOverload.pas +++ b/InstallerSamples/LanguageFeatures/FracOperatorOverload.pas @@ -1,4 +1,4 @@ -// . "" +// Перегрузка операций. Класс "Дробь" type Frac = record private @@ -9,7 +9,7 @@ type Self.n := n; Self.m := m; end; - class function operator+(f1,f2: Frac): Frac; // + class function operator+(f1,f2: Frac): Frac; // операция перегружается как классовая функция begin Result.n := f1.n*f2.m+f1.m*f2.n; Result.m := f1.n*f1.m; @@ -19,7 +19,7 @@ type Result.n := f1.n*f2.m-f1.m*f2.n; Result.m := f1.n*f1.m; end; - function ToString: string; override; // Frac write + function ToString: string; override; // Требуется переопределить эту функцию чтобы выводить переменные типа Frac в write begin Result := Format('{0}/{1}',n,m); end; @@ -31,6 +31,6 @@ begin f := new Frac(2,3); f1 := new Frac(1,2); writelnFormat('{0} + {1} = {2} ',f,f1,f+f1); - // f+f1 Frac.operator+(f,f1) + // f+f1 переводится компилятором в Frac.operator+(f,f1) writelnFormat('{0} - {1} = {2} ',f,f1,f-f1); end. \ No newline at end of file diff --git a/InstallerSamples/LanguageFeatures/Generics/GenericClasses/Stack.pas b/InstallerSamples/LanguageFeatures/Generics/GenericClasses/Stack.pas index dda2835c3..d818e96ea 100644 --- a/InstallerSamples/LanguageFeatures/Generics/GenericClasses/Stack.pas +++ b/InstallerSamples/LanguageFeatures/Generics/GenericClasses/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/FindT.pas b/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/FindT.pas index 7828ce4f0..09eea2c38 100644 --- a/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/FindT.pas +++ b/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/FindT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров function IndexOf(a: array of T; val: T): integer; begin @@ -12,10 +12,10 @@ begin end; end; -var a: array of string := ('', '', '', ''); +var a: array of string := ('Ваня', 'Коля', 'Саша', 'Сережа'); begin - var s := ''; - writelnFormat(' ''{0}'' {1}',s,IndexOf(a,s)); + var s := 'Сережа'; + writelnFormat('Индекс элемент со значением ''{0}'' равен {1}',s,IndexOf(a,s)); end. diff --git a/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/SwapT.pas b/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/SwapT.pas index 38161cff4..f8b0bcae9 100644 --- a/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/SwapT.pas +++ b/InstallerSamples/LanguageFeatures/Generics/GenericProcFun/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,7 +11,7 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); end. \ No newline at end of file diff --git a/InstallerSamples/LanguageFeatures/IndexProperties.pas b/InstallerSamples/LanguageFeatures/IndexProperties.pas index 5937f73cd..7b35e9e54 100644 --- a/InstallerSamples/LanguageFeatures/IndexProperties.pas +++ b/InstallerSamples/LanguageFeatures/IndexProperties.pas @@ -1,4 +1,4 @@ -// . +// Индексные свойства. Массив цветных квадратов uses GraphABC; const @@ -11,17 +11,17 @@ type VisualArray = class private a: array of Color; - procedure SetItem(i: integer; x: Color); // , i- + procedure SetItem(i: integer; x: Color); // Процедура, устанавливающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); a[i] := x; Draw(i); end; - function GetItem(i: integer): Color; // , i- + function GetItem(i: integer): Color; // Функция, возвращающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); Result := a[i]; end; public @@ -32,29 +32,29 @@ type a[i] := clWhite; Draw; end; - /// i- + /// Рисует i-тый квадрат procedure Draw(i: integer); begin Brush.Color := a[i]; Rectangle(sz+sz*i,sz,sz+sz*(i+1)+1,sz+sz); end; - /// + /// Рисует массив цветных квадратов procedure Draw; begin for var i:=0 to a.Length-1 do Draw(i); end; - /// + /// Индексное свойство по умолчанию property Item[i: integer]: Color read GetItem write SetItem; default; end; var arr: VisualArray; begin - Window.Title := ' '; + Window.Title := 'Иллюстрация индексных свойств'; arr := new VisualArray(dim); SetWindowSize(sz*(dim+2),3*sz); - arr[0] := clGreen; // arr.Items[0] = arr[0] Items + arr[0] := clGreen; // arr.Items[0] = arr[0] поскольку свойство Items является свойством по умолчанию Sleep(delay); arr[1] := clBlack; Sleep(delay); diff --git a/InstallerSamples/LanguageFeatures/ParamsConcat.pas b/InstallerSamples/LanguageFeatures/ParamsConcat.pas index 1050caa42..6f66ceed6 100644 --- a/InstallerSamples/LanguageFeatures/ParamsConcat.pas +++ b/InstallerSamples/LanguageFeatures/ParamsConcat.pas @@ -1,4 +1,4 @@ -// Concat +// Создание функции Concat с переменным числом параметров function Concat(params strs: array of string): string; begin diff --git a/InstallerSamples/LanguageFeatures/ParamsWriteln.pas b/InstallerSamples/LanguageFeatures/ParamsWriteln.pas index 42bc7aa32..e31fc4699 100644 --- a/InstallerSamples/LanguageFeatures/ParamsWriteln.pas +++ b/InstallerSamples/LanguageFeatures/ParamsWriteln.pas @@ -1,4 +1,4 @@ -// MyWriteln +// Создание процедуры MyWriteln с переменным числом параметров procedure MyWriteln(params args: array of object); begin diff --git a/InstallerSamples/LanguageFeatures/ProcParam.pas b/InstallerSamples/LanguageFeatures/ProcParam.pas index d2708bbb0..5a77aa708 100644 --- a/InstallerSamples/LanguageFeatures/ProcParam.pas +++ b/InstallerSamples/LanguageFeatures/ProcParam.pas @@ -1,6 +1,6 @@ -// -// PascalABC.NET -// .NET +// Иллюстрация процедурных переменных как параметров подпрограмм +// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов +// Процедурный тип реализован через делегаты .NET procedure for_each(var a: array of real; p: procedure(var r: real)); var i: integer; begin diff --git a/InstallerSamples/LanguageFeatures/ProcVars.pas b/InstallerSamples/LanguageFeatures/ProcVars.pas index b6d6dbce7..6a4e88dd5 100644 --- a/InstallerSamples/LanguageFeatures/ProcVars.pas +++ b/InstallerSamples/LanguageFeatures/ProcVars.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/InstallerSamples/LanguageFeatures/Students.pas b/InstallerSamples/LanguageFeatures/Students.pas index 7e47e9082..1bb0dc994 100644 --- a/InstallerSamples/LanguageFeatures/Students.pas +++ b/InstallerSamples/LanguageFeatures/Students.pas @@ -1,4 +1,4 @@ -// +//Перегрузка операторов type Student = class Name: string; @@ -10,7 +10,7 @@ type Self.Height := Height; end; class function operator<(left,right: Student): boolean; - // + // Сравнение по росту begin Result := left.Height < right.Height; end; diff --git a/InstallerSamples/LanguageFeatures/WriteRecord.pas b/InstallerSamples/LanguageFeatures/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/InstallerSamples/LanguageFeatures/WriteRecord.pas +++ b/InstallerSamples/LanguageFeatures/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/InstallerSamples/NETLibraries/NET4.0/BigIntegerExample.pas b/InstallerSamples/NETLibraries/NET4.0/BigIntegerExample.pas index f2d077d0b..fb473bcfd 100644 --- a/InstallerSamples/NETLibraries/NET4.0/BigIntegerExample.pas +++ b/InstallerSamples/NETLibraries/NET4.0/BigIntegerExample.pas @@ -1,4 +1,4 @@ -// . 100! +// Использование длинных целых. Вычисление 100! {$reference 'System.Numerics.dll'} uses System.Numerics; diff --git a/InstallerSamples/NETLibraries/NET4.0/ComplexExample.pas b/InstallerSamples/NETLibraries/NET4.0/ComplexExample.pas index 5c6eb3d46..818b4fecb 100644 --- a/InstallerSamples/NETLibraries/NET4.0/ComplexExample.pas +++ b/InstallerSamples/NETLibraries/NET4.0/ComplexExample.pas @@ -1,17 +1,17 @@ -// +// Использование комплексных чисел {$reference 'System.Numerics.dll'} uses System.Numerics; begin var a := new Complex(0,1); - writeln(' : ', a); + writeln('Мнимая единица: ', a); var b := Complex.Sqrt(a); - writeln(' : ', b); + writeln('Главный корень из мнимой единицы: ', b); var c := a*a; - writeln(' : ', c); + writeln('Квадрат мнимой единицы: ', c); var d := new Complex(1,2); - writelnFormat(' {0} {1}', d,d.Magnitude); + writelnFormat('Модуль {0} равен {1}', d,d.Magnitude); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/NET4.0/StopWatch.pas b/InstallerSamples/NETLibraries/NET4.0/StopWatch.pas index 0e5262c42..98c6be5fe 100644 --- a/InstallerSamples/NETLibraries/NET4.0/StopWatch.pas +++ b/InstallerSamples/NETLibraries/NET4.0/StopWatch.pas @@ -1,4 +1,4 @@ -// Stopwatch - ( 0.001 ) +// Stopwatch - класс высокоточного таймера (с точностью до 0.001 с) begin var stopWatch := new System.Diagnostics.Stopwatch; stopWatch.Start; @@ -7,5 +7,5 @@ begin stopWatch.Stop; var ts := stopWatch.Elapsed; - writelnFormat(' : {0:00}:{1:00}:{2:00}.{3:000}',ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds); + writelnFormat('Время работы: {0:00}:{1:00}:{2:00}.{3:000}',ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/NET4.0/TupleCreate.pas b/InstallerSamples/NETLibraries/NET4.0/TupleCreate.pas index 2e991a62d..9d07269f5 100644 --- a/InstallerSamples/NETLibraries/NET4.0/TupleCreate.pas +++ b/InstallerSamples/NETLibraries/NET4.0/TupleCreate.pas @@ -1,10 +1,10 @@ -// +// Создание кортежей uses System; begin - var a := Tuple.Create('',24); + var a := Tuple.Create('Иванов',24); writeln(a.Item1,' ',a.Item2); - var b := Tuple.Create('',17,1,11); + var b := Tuple.Create('Петров',17,1,11); writeln(b.Item1,' ',b.Item2,' ',b.Item3,' ',b.Item4); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/System.Array/SystemArray1.pas b/InstallerSamples/NETLibraries/System.Array/SystemArray1.pas index 76e2e438b..2bce6941d 100644 --- a/InstallerSamples/NETLibraries/System.Array/SystemArray1.pas +++ b/InstallerSamples/NETLibraries/System.Array/SystemArray1.pas @@ -13,25 +13,25 @@ var a: array of integer; begin SetLength(a, Size); - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := Random(100); - // + // Вывод всех элементов массива PrintArray(a); - // ( & , - // array Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении класса Array) &Array.Sort(a); PrintArray(a); - // + // Обращение массива &Array.Reverse(a); PrintArray(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 99); Writeln(i); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/System.DateTime/DateTime1.pas b/InstallerSamples/NETLibraries/System.DateTime/DateTime1.pas index cfb28ed3f..9832b1c44 100644 --- a/InstallerSamples/NETLibraries/System.DateTime/DateTime1.pas +++ b/InstallerSamples/NETLibraries/System.DateTime/DateTime1.pas @@ -1,32 +1,32 @@ Uses System; var - d1, d2, d3: DateTime; // - ts: TimeSpan; // + d1, d2, d3: DateTime; // Объекты для хранения даты и времени + ts: TimeSpan; // Объект для хранения промежутков времени begin - // - + // Получение текущей даты - вызов статического метода d1 := DateTime.Now; Writeln(d1); - // + // Дата и время через один месяц d2 := d1.AddMonths(1); Writeln(d2); - // 12 + // Дата и время на 12 часов раньше d2 := d1.AddHours(-12); Writeln(d2); - // - (, ,) + // Формирование даты - вызов конструктора объекта (год, месяц,число) d3 := new DateTime(2001, 1, 1); Writeln(d3); - // , ( ) + // Определение времени, прошедшего с начала тысячелетия (разность дат) ts := d1.Subtract(d3); - // ( - ) + // Промежуток времени в днях (результат - вещественное число) Writeln(ts.TotalDays); - // , , + // Промежуток времени в днях, часах, минутах и секундах WritelnFormat('{0} {1}:{2}:{3}',ts.Days,ts.Hours,ts.Minutes,ts.Seconds); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/System.DateTime/DateTime2.pas b/InstallerSamples/NETLibraries/System.DateTime/DateTime2.pas index 39da1fb0a..f444870fc 100644 --- a/InstallerSamples/NETLibraries/System.DateTime/DateTime2.pas +++ b/InstallerSamples/NETLibraries/System.DateTime/DateTime2.pas @@ -6,28 +6,28 @@ var begin s := '27.03.2008 9:58:17'; - // DateTime + //Попытка преобразования строки в объект DateTime if not DateTime.TryParse(s, d) then begin - Writeln(' '); + Writeln('Строка не содержит значение даты и времени'); Exit; end; - // + // Проверка високосности заданного года с помощью статического метода if DateTime.IsLeapYear(d.Year) then - Writeln(' ') + Writeln('Год високосный') else - Writeln(' '); + Writeln('Год невисокосный'); - // + // Преобразование даты и времени в строковое представление s := d.ToString; Writeln(s); - // + // Преобразование даты в строковое представление s := d.ToShortDateString; Writeln(s); - // + // Преобразование времени в строковое представление s := d.ToShortTimeString; Writeln(s); diff --git a/InstallerSamples/NETLibraries/System.DateTime/DateTimeInterval.pas b/InstallerSamples/NETLibraries/System.DateTime/DateTimeInterval.pas index 89ace1bd8..b7afdf928 100644 --- a/InstallerSamples/NETLibraries/System.DateTime/DateTimeInterval.pas +++ b/InstallerSamples/NETLibraries/System.DateTime/DateTimeInterval.pas @@ -1,16 +1,16 @@ -// System.DateTime -// +// Работа с классом System.DateTime +// Вычисление времени выполнения фрагмента кода uses System, PABCSystem; var dt: DateTime := DateTime.Now; begin - // + // Делаем случайную паузу var ms := Random(1000); Writeln('Sleep','(',ms,')'); Sleep(ms); - // DateTime.Now + // Сравниваем с показаниями DateTime.Now Writeln((DateTime.Now-dt).TotalMilliseconds,'ms'); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/System.Net/DownloadFile.pas b/InstallerSamples/NETLibraries/System.Net/DownloadFile.pas index b110fb74b..3d6f11cc2 100644 --- a/InstallerSamples/NETLibraries/System.Net/DownloadFile.pas +++ b/InstallerSamples/NETLibraries/System.Net/DownloadFile.pas @@ -1,4 +1,4 @@ -// +// Скачивание файла uses System.Net; const diff --git a/InstallerSamples/NETLibraries/System.Net/MailSend.pas b/InstallerSamples/NETLibraries/System.Net/MailSend.pas index 2834203fa..666b6e7a2 100644 --- a/InstallerSamples/NETLibraries/System.Net/MailSend.pas +++ b/InstallerSamples/NETLibraries/System.Net/MailSend.pas @@ -1,4 +1,4 @@ -// SMTP- SMTPServerName toReceiver! +// Исправьте имя SMTP-сервера SMTPServerName и адрес получателя toReceiver! uses System.Net.Mail; const diff --git a/InstallerSamples/NETLibraries/System.Net/Ping.pas b/InstallerSamples/NETLibraries/System.Net/Ping.pas index 59ec18f6c..269017b70 100644 --- a/InstallerSamples/NETLibraries/System.Net/Ping.pas +++ b/InstallerSamples/NETLibraries/System.Net/Ping.pas @@ -1,4 +1,4 @@ -// Ping +// Использование Ping uses System.Net.NetworkInformation; const address = 'www.yandex.ru'; @@ -7,8 +7,8 @@ begin var p := new Ping(); try var res := p.Send(address); - writeln('IP : ',res.Address); - writeln(' : ',res.RoundtripTime,' '); + writeln('IP адрес сервера: ',res.Address); + writeln('Время отклика: ',res.RoundtripTime,' мс'); except on e: Exception do write(e.Message); diff --git a/InstallerSamples/NETLibraries/System.Net/WebClient.pas b/InstallerSamples/NETLibraries/System.Net/WebClient.pas index d89660eb7..0e5b12e81 100644 --- a/InstallerSamples/NETLibraries/System.Net/WebClient.pas +++ b/InstallerSamples/NETLibraries/System.Net/WebClient.pas @@ -1,4 +1,4 @@ -// WebClient +// Использование WebClient uses System.Net; begin diff --git a/InstallerSamples/NETLibraries/System.Parallel/Parallel2.pas b/InstallerSamples/NETLibraries/System.Parallel/Parallel2.pas index 9f034fe13..8b4fd3e05 100644 --- a/InstallerSamples/NETLibraries/System.Parallel/Parallel2.pas +++ b/InstallerSamples/NETLibraries/System.Parallel/Parallel2.pas @@ -25,20 +25,20 @@ type BTask = Task; begin - var ss: array of int64 := (1265713689122381, 1265713689122461, 1265713689142451, 1265713689542501); // - + var ss: array of int64 := (1265713689122381, 1265713689122461, 1265713689142451, 1265713689542501); // Все числа - простые var tb := new BTask[4]; - // 4 - // tb[i] Result! + // Запуск 4 потоков из пула потоков + // У каждого tb[i] свой Result! for var i := 0 to ss.Length - 1 do tb[i] := Task.Factory.StartNew((new Int(ss[i])).IsPrime); - // , tb[i].Result + // Если поток не закончился, то обращение к tb[i].Result приостанавливает основную программу for var i := 0 to tb.Length - 1 do writeln(tb[i].Result); - // + // В эту точку мы попадем только после окончания всех четырех потоков writeln(Milliseconds); - // + // Последовательное выполнение var t := Milliseconds; for var i := 0 to ss.Length - 1 do writeln((new Int(ss[i])).IsPrime); diff --git a/InstallerSamples/NETLibraries/System.Parallel/Parallel3.pas b/InstallerSamples/NETLibraries/System.Parallel/Parallel3.pas index 493b1732a..c058cad1e 100644 --- a/InstallerSamples/NETLibraries/System.Parallel/Parallel3.pas +++ b/InstallerSamples/NETLibraries/System.Parallel/Parallel3.pas @@ -13,9 +13,9 @@ type Result := False; break; end; - // lock . - // , , - // , lock, + // lock не позволяет нескольким потокам одновременно выполнять эту секцию. + // Это обязательно, иначе если несколько потоков одновременно будут пытаться добавить значение в список, список может оказаться испорченным + // Секция, охраняемая lock, называется критической lock l do if Result then l.Add(N); @@ -32,15 +32,15 @@ begin Parallel.For(ii,ii+hh,ls.AddSimple); writeln(ls.l.Count); - // ls.l := ls.l.OrderBy(x->x).ToList(); - , - + // ls.l := ls.l.OrderBy(x->x).ToList(); - это можно включить для проверки того, что в обоих списках - одинаковые простые числа for var i:=0 to ls.l.Count-1 do write(ls.l[i],' '); - // , ! + // Надо обратить внимание, что выводится неупорядоченная последовательность простых чисел ! writeln; - writeln(' = ',Milliseconds); + writeln('Время выполнения = ',Milliseconds); - // , + // То же, но непараллельно var ls1 := new ListSimple; var t := Milliseconds; @@ -50,8 +50,8 @@ begin for var i:=0 to ls1.l.Count-1 do write(ls1.l[i],' '); writeln; - writeln(' = ',Milliseconds-t); + writeln('Время выполнения = ',Milliseconds-t); - // , - writeln(' = ',ls.l.Except(ls1.l).Count()); + // Проверка того, что списки простых как множества совпадают + writeln('Количество элементов в разности множеств = ',ls.l.Except(ls1.l).Count()); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/System.String/StringConvert.pas b/InstallerSamples/NETLibraries/System.String/StringConvert.pas index 7cfedf189..fe2a5b8a6 100644 --- a/InstallerSamples/NETLibraries/System.String/StringConvert.pas +++ b/InstallerSamples/NETLibraries/System.String/StringConvert.pas @@ -4,16 +4,16 @@ var r: real; begin - // - s := '123,3443'; // - Windows + // Преобразование строки в число + s := '123,3443'; // Дробная часть отделяется запятой - настройки Windows if not real.TryParse(s, r) then - Writeln(' s ') + Writeln('Строка s не является строковым представлением вещественного числа') else Writeln(r); if not integer.TryParse(s, i) then - Writeln(' s '); + Writeln('Строка s не является строковым представлением целого числа'); - // + // Преобразование числа в строку i := 10; s := i.ToString; Writeln(s); diff --git a/InstallerSamples/NETLibraries/System.String/StringMethods1.pas b/InstallerSamples/NETLibraries/System.String/StringMethods1.pas index 201b87861..b0db02e3c 100644 --- a/InstallerSamples/NETLibraries/System.String/StringMethods1.pas +++ b/InstallerSamples/NETLibraries/System.String/StringMethods1.pas @@ -1,30 +1,30 @@ var s1,s2: string; begin - // + // Определение длины строки s1 := 'ABCDEFGH'; Writeln(s1.Length); - // + // Сравнение строк без учета регистра символов s1 := 'AAA'; s2 := 'aaa'; - if String.Compare(s1, s2, {ignoreCase - } true) = 0 then - Writeln(' '); + if String.Compare(s1, s2, {ignoreCase - без учета регистра} true) = 0 then + Writeln('Строки совпадают с точностью до регистра букв'); - // + // Определение вхождений подстрок s1 := 'Long string'; s2 := 'string'; if s1.EndsWith(s2) then - Writeln(' s1 , s2'); + Writeln('В конце строки s1 содержится подстрока, совпадающая с s2'); - // + // Поиск индекса вхождения подстроки в строку Writeln(s1.IndexOf(s2)); - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/System.String/StringMethods2.pas b/InstallerSamples/NETLibraries/System.String/StringMethods2.pas index ee01cc1f2..13cc3e57e 100644 --- a/InstallerSamples/NETLibraries/System.String/StringMethods2.pas +++ b/InstallerSamples/NETLibraries/System.String/StringMethods2.pas @@ -1,15 +1,15 @@ var s1,s2: string; begin - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); - // , + // Вставка, удаление и замена подстрок s1 := 'ABCDEFGH'; s2 := s1.Insert(2, 'xxx'); Writeln(s2); @@ -20,18 +20,18 @@ begin s2 := s2.Remove(2, 3); Writeln(s2); - s1 := ' '; - s2 := s1.Replace('', ''); + s1 := 'слово слово слово'; + s2 := s1.Replace('слов', 'молок'); Writeln(s2); - // + // Удаление пробельных символов в концах строки s1 := ' xxx xxx '; Writeln('|', s1, '|'); s1 := s1.Trim; Writeln('|', s1, '|'); - // - s1 := ''; + // Смена регистра символов + s1 := 'абвгд'; s1 := s1.ToUpper; Writeln(s1); end. \ No newline at end of file diff --git a/InstallerSamples/NETLibraries/System.String/StringSplit.pas b/InstallerSamples/NETLibraries/System.String/StringSplit.pas index 12acf274f..184c12c2e 100644 --- a/InstallerSamples/NETLibraries/System.String/StringSplit.pas +++ b/InstallerSamples/NETLibraries/System.String/StringSplit.pas @@ -6,19 +6,19 @@ var s: string := '12 765 765 76'; begin - // + // Разбиение строки на массив подстрок с заданным разелителем str_arr := s.Split(' '); - // + // Соединение массива подстрок с новым разделителем s := string.Join('+', str_arr); Write(s, '='); - // + // Формирование целочисленного массива по массиву подстрок SetLength(int_arr, str_arr.Length); for var i:=0 to int_arr.Length-1 do integer.TryParse(str_arr[i], int_arr[i]); - // + // Вычисление суммы элементов целочисленного массива var sum := 0; foreach v: integer in int_arr do sum += v; diff --git a/InstallerSamples/NETLibraries/System.Timers.Timer/SystemTimer.pas b/InstallerSamples/NETLibraries/System.Timers.Timer/SystemTimer.pas index 1b55e5f23..8223bd886 100644 --- a/InstallerSamples/NETLibraries/System.Timers.Timer/SystemTimer.pas +++ b/InstallerSamples/NETLibraries/System.Timers.Timer/SystemTimer.pas @@ -1,4 +1,4 @@ -//, +=, -=, System.Timers.Timer +//События, +=, -=, демонстрация работы таймера System.Timers.Timer uses System; var Timer:System.Timers.Timer; diff --git a/InstallerSamples/NETLibraries/System.Windows.Forms/FormWebBrowser.pas b/InstallerSamples/NETLibraries/System.Windows.Forms/FormWebBrowser.pas index 0986173ae..51a1936b7 100644 --- a/InstallerSamples/NETLibraries/System.Windows.Forms/FormWebBrowser.pas +++ b/InstallerSamples/NETLibraries/System.Windows.Forms/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser {$apptype windows} {$reference 'System.Windows.Forms.dll'} diff --git a/InstallerSamples/NETLibraries/System.Windows.Forms/MouseDraw.pas b/InstallerSamples/NETLibraries/System.Windows.Forms/MouseDraw.pas index 6d4ff2ad7..db17bcf29 100644 --- a/InstallerSamples/NETLibraries/System.Windows.Forms/MouseDraw.pas +++ b/InstallerSamples/NETLibraries/System.Windows.Forms/MouseDraw.pas @@ -1,4 +1,4 @@ -// . Windows.Forms, +// Рисование мышью на форме. Иллюстрация Windows.Forms, событий {$apptype windows} {$reference 'System.Windows.Forms.dll'} {$reference 'System.Drawing.dll'} @@ -12,15 +12,15 @@ type MyForm = class(Form) private g: Graphics; - // + // Предыдущие координаты мыши x,y: integer; public constructor; begin Size := new System.Drawing.Size(640,480); StartPosition := FormStartPosition.CenterScreen; - Text := ' '; - // + Text := 'Рисование мышью на форме'; + // Привязка обработчиков к событиям MouseDown += OnMouseDown; MouseMove += OnMouseMove; Resize += OnResize; diff --git a/InstallerSamples/NETLibraries/System.Windows.Forms/WinFormWithButton.pas b/InstallerSamples/NETLibraries/System.Windows.Forms/WinFormWithButton.pas index ea6cf05da..ecfa4dbbb 100644 --- a/InstallerSamples/NETLibraries/System.Windows.Forms/WinFormWithButton.pas +++ b/InstallerSamples/NETLibraries/System.Windows.Forms/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения {$apptype windows} {$reference 'System.Windows.Forms.dll'} @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/InstallerSamples/OMPSamples/Hanoi.pas b/InstallerSamples/OMPSamples/Hanoi.pas index 6e8b8a490..9b02ba6d0 100644 --- a/InstallerSamples/OMPSamples/Hanoi.pas +++ b/InstallerSamples/OMPSamples/Hanoi.pas @@ -1,7 +1,7 @@ -// -// , +//Демонстрация использования параллельных секций на примере задачи о ханойских башнях +// Вывод решения закомментирован, так как он занимает большую часть времени -// +//параллельная процедура procedure MovePiramidParallel(n: integer; f, t, w: integer); begin if n = 0 then @@ -9,17 +9,17 @@ begin {$omp parallel sections} begin MovePiramidParallel(n - 1, f, w, t); - //writelnFormat(' {0} {1}', f, t); + //writelnFormat('Переложить диск с {0} на {1}', f, t); MovePiramidParallel(n - 1, w, t, f); end; end; -// +//последовательная процедура procedure MovePiramid(n: integer; f, t, w: integer); begin if n = 0 then exit; MovePiramid(n - 1, f, w, t); - //writelnFormat(' {0} {1}', f, t); + //writelnFormat('Переложить диск с {0} на {1}', f, t); MovePiramid(n - 1, w, t, f); end; @@ -27,9 +27,9 @@ end; begin var m0 := Milliseconds; MovePiramid(27, 1, 2, 3); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Последовательное выполнение: ', Milliseconds - m0, 'ms'); var m1 := Milliseconds; MovePiramidParallel(27, 1, 2, 3); - writeln(' : ', Milliseconds - m1, 'ms'); + writeln('Параллельное выполнение: ', Milliseconds - m1, 'ms'); end. \ No newline at end of file diff --git a/InstallerSamples/OMPSamples/MultMatrix.pas b/InstallerSamples/OMPSamples/MultMatrix.pas index bcb549ef8..13796ffbf 100644 --- a/InstallerSamples/OMPSamples/MultMatrix.pas +++ b/InstallerSamples/OMPSamples/MultMatrix.pas @@ -30,8 +30,8 @@ begin var b := Arrays.CreateRandomRealMatrix(n,n); var c := new real[n,n]; ParallelMult(a,b,c,n); - writeln(' : ',Milliseconds,' '); + writeln('Параллельное перемножение матриц: ',Milliseconds,' миллисекунд'); var d := Milliseconds; Mult(a,b,c,n); - writeln(' : ',Milliseconds-d,' '); + writeln('Последовательное перемножение матриц: ',Milliseconds-d,' миллисекунд'); end. \ No newline at end of file diff --git a/InstallerSamples/OMPSamples/Mutual Lock.pas b/InstallerSamples/OMPSamples/Mutual Lock.pas index d04513699..03e18485a 100644 --- a/InstallerSamples/OMPSamples/Mutual Lock.pas +++ b/InstallerSamples/OMPSamples/Mutual Lock.pas @@ -1,4 +1,4 @@ -// +// Демонстрация использования критических секций и возможных взаимоблокировок begin {$omp parallel sections} begin diff --git a/InstallerSamples/OMPSamples/QuickSort.pas b/InstallerSamples/OMPSamples/QuickSort.pas index 8ff551141..ca6541c4e 100644 --- a/InstallerSamples/OMPSamples/QuickSort.pas +++ b/InstallerSamples/OMPSamples/QuickSort.pas @@ -1,11 +1,11 @@ -// +//Демонстрация использования параллельных секций на примере быстрой сортировки var a: array of integer; var b: array of integer; -// Partition - A[l]..A[r] A[l]..A[q] <= A[q+1]..A[r] +// Partition - разделение A[l]..A[r] на части A[l]..A[q] <= A[q+1]..A[r] function Partition(a: array of integer; l, r: integer): integer; begin var i := l - 1; @@ -29,7 +29,7 @@ begin end; end; - // c + // Параллельная cортировка частей procedure Sort(A: array of integer; l, r: integer); begin if l >= r then @@ -41,13 +41,13 @@ begin Sort(A, j + 1, r); end; end; -// +// Параллельная сортировка procedure QuickSortParrallel(A: array of integer); begin Sort(A, 0, a.Length - 1) end; -// +//Последовательная Сортировка частей procedure SortSeq(a: array of integer; l, r: integer); begin if l >= r then @@ -56,12 +56,12 @@ begin SortSeq(A, l, j); SortSeq(A, j + 1, r); end; -// +//Последовательная сортировка procedure QuickSortSeq(A: array of integer); begin SortSeq(A, 0, a.Length - 1) end; - // + //заполнение массивов равными значениями для обоих сортировок procedure FillRandArr(A, B: array of integer); begin Randomize; @@ -71,7 +71,7 @@ begin b[i] := a[i]; end; end; - // + //Вывод массива procedure printArr(A: array of integer); begin Randomize; @@ -87,10 +87,10 @@ begin FillRandArr(a, b); var m1 := Milliseconds; QuickSortSeq(B); - writeln(' : ', Milliseconds - m1, 'ms'); + writeln('Последовательное выполнение: ', Milliseconds - m1, 'ms'); var m0 := Milliseconds; QuickSortParrallel(a); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Параллельное выполнение: ', Milliseconds - m0, 'ms'); end. \ No newline at end of file diff --git a/InstallerSamples/OMPSamples/SqrSinArrays.pas b/InstallerSamples/OMPSamples/SqrSinArrays.pas index 18e240721..3c7de0fb9 100644 --- a/InstallerSamples/OMPSamples/SqrSinArrays.pas +++ b/InstallerSamples/OMPSamples/SqrSinArrays.pas @@ -1,25 +1,25 @@ -// for -// +// демонстрация работы параллельного for +//заполнение массива procedure FillRandArr(A: array of real); begin Randomize; for var i := 0 to A.Length - 1 do a[i] := Random(1000); end; - // + // вывод массива procedure printArr(A: array of real); begin for var i := 0 to A.Length - 1 do writeln(a[i]); end; -// +// Последовательное вычисление квадратов синусов procedure SqrSinArr(A: array of real; var C: array of real); begin for var i := 0 to A.Length - 1 do C[i] := sqr(sin(A[i])); end; -// +// Параллельное вычисление квадратов синусов procedure SqrSinArrParallel(A: array of real; var C: array of real); begin @@ -38,10 +38,10 @@ begin var m0 := Milliseconds; SqrSinArrParallel(A, C); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Параллельное выполнение: ', Milliseconds - m0, 'ms'); m0 := Milliseconds; SqrSinArr(A, C); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Последовательное выполнение: ', Milliseconds - m0, 'ms'); end. \ No newline at end of file diff --git a/InstallerSamples/OMPSamples/SumOfPrime.pas b/InstallerSamples/OMPSamples/SumOfPrime.pas index dc81e4467..ef2c2e624 100644 --- a/InstallerSamples/OMPSamples/SumOfPrime.pas +++ b/InstallerSamples/OMPSamples/SumOfPrime.pas @@ -1,8 +1,8 @@ -// parallel for c -// n -// +// Демонстрация работы директивы parallel for c опцией редукции +// на примере вычисления суммы простых чисел среди первых n +// натуральных чисел -// n +// проверка на простоту числа n function IsPrime(n:integer):boolean; begin result:=false; @@ -11,7 +11,7 @@ begin exit; result:=true; end; -// +//Последовательное вычисление суммы простых чисел function SumOfPrimesSeq(n:integer):int64; begin var sum:int64:=0; @@ -20,7 +20,7 @@ begin sum:=sum+i; result:=sum; end; -// +//Параллельное вычисление суммы простых чисел function SumOfPrimesPar(n:integer):int64; begin var sum:int64:=0; diff --git a/InstallerSamples/OMPSamples/Write Critical.pas b/InstallerSamples/OMPSamples/Write Critical.pas index 28a70b6a1..c850aa8b4 100644 --- a/InstallerSamples/OMPSamples/Write Critical.pas +++ b/InstallerSamples/OMPSamples/Write Critical.pas @@ -1,7 +1,7 @@ -// -// . - -// , -// , . . +// Вывод в параллельной секции без использования критических секций +// и с их использованием. В первом случае из-за параллельного доступа +// к разделяемому ресурсу возможно, что строки будут выводиться +// на одной строке, и в произвольно порядке. Во втором случае такого не будет. begin {$omp parallel sections} begin diff --git a/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas b/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas index 94048fdb0..4f8bcf2ab 100644 --- a/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas +++ b/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas @@ -1,5 +1,5 @@ -// . -// . GlobalVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл GlobalVars.pas uses Utils; begin @@ -11,5 +11,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas b/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas index 79810714a..6cd714a35 100644 --- a/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas +++ b/InstallerSamples/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas @@ -1,5 +1,5 @@ -// . -// . BlockVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл BlockVars.pas uses Utils; var @@ -13,5 +13,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/InstallerSamples/Other/SpeedTests/Milli.pas b/InstallerSamples/Other/SpeedTests/Milli.pas index 860adadd3..92f5c8d9f 100644 --- a/InstallerSamples/Other/SpeedTests/Milli.pas +++ b/InstallerSamples/Other/SpeedTests/Milli.pas @@ -1,4 +1,4 @@ -// Milliseconds +// Демонстрация функции Milliseconds uses Utils; const n = 5000; diff --git a/InstallerSamples/Other/UnmanagedGraphics/Mand.pas b/InstallerSamples/Other/UnmanagedGraphics/Mand.pas index 783ef0f95..846547d33 100644 --- a/InstallerSamples/Other/UnmanagedGraphics/Mand.pas +++ b/InstallerSamples/Other/UnmanagedGraphics/Mand.pas @@ -1,7 +1,7 @@ { - dll: -1. \GraphTest\GraphTest.dpr Delphi -2. \GraphTest\copy_up.bat +Для создания dll: +1. Откомпилируйте проект \GraphTest\GraphTest.dpr с помощью Delphi +2. Запустите файл \GraphTest\copy_up.bat } procedure SetWindowSize(width, height : integer); external 'GraphTest.dll' name 'SetWindowSize'; diff --git a/InstallerSamples/Other/UnmanagedGraphics/MessageBox.pas b/InstallerSamples/Other/UnmanagedGraphics/MessageBox.pas index c54320ad9..df7998740 100644 --- a/InstallerSamples/Other/UnmanagedGraphics/MessageBox.pas +++ b/InstallerSamples/Other/UnmanagedGraphics/MessageBox.pas @@ -2,5 +2,5 @@ function MessageBox(h:integer;m,c:string;t:integer):integer; external 'User32.dll' name 'MessageBox'; begin - MessageBox(0,'!','',0); + MessageBox(0,'Привет!','Сообщение',0); end. \ No newline at end of file diff --git a/InstallerSamples/StandardUnits/CRT/Bill.pas b/InstallerSamples/StandardUnits/CRT/Bill.pas index ff5f43f30..91f57c0ea 100644 --- a/InstallerSamples/StandardUnits/CRT/Bill.pas +++ b/InstallerSamples/StandardUnits/CRT/Bill.pas @@ -1,22 +1,22 @@ -// . -// Shift+F9 !!! +// Отражение шарика от стенок. Консольный режим +// Для запуска программы используйте Shift+F9 !!! uses CRT; const -// +// Ширина поля w = 80; -// +// Высота поля h = 24; var -/// +/// Координаты шарика ax,ay: integer; -/// +/// Вектор перемещения шарика vx,vy: integer; -/// +/// Массив клеток поля a: array [1..w,1..h] of char; -/// a +/// Очистка массива a procedure CleanA; begin for var j := 1 to h do @@ -24,21 +24,21 @@ begin A[i,j] := ' ' end; -/// +/// Создание горизонтальной стены procedure HorizWall(x,y,L: integer); begin for var i := x to x+L-1 do A[i,y] := '*' end; -/// +/// Создание вертикальной стены procedure VertWall(x,y,L: integer); begin for var j := y to y+L-1 do A[x,j] := '*' end; -/// +/// Заполнение поля стенами procedure Fill; begin CleanA; @@ -51,7 +51,7 @@ begin HorizWall(49,14,31); end; -/// +/// Перерисовка экрана procedure DrawScreen; begin TextColor(White); @@ -61,13 +61,13 @@ begin write(A[i,j]) end; -/// True, +/// Возвращает True, если на пути шарика препятствие function FilledInFront: boolean; begin Result := (A[ax+vx,ay]<>' ') or (A[ax,ay+vy]<>' ') or (A[ax+vx,ay+vy]<>' ') end; -/// +/// Меняет направление шарика procedure ChangeDirection; begin if A[ax+vx,ay]<>' ' then @@ -82,35 +82,35 @@ begin Sleep(10); end; -/// +/// Рисует шарик procedure ShowBall; begin GotoXY(ax,ay); write('B'); end; -/// +/// Стирает шарик procedure HideBall; begin GotoXY(ax,ay); write(' '); end; -/// +/// Устанавливает вектор движение шарика procedure SetBallCoords(x,y: integer); begin ax := x; ay := y end; -/// +/// Устанавливает координаты шарика procedure SetBallVeloc(vx0,vy0: integer); begin vx := vx0; vy := vy0 end; -/// (x,y) +/// Перемещает шарик к позиции (x,y) procedure MoveTo(x,y: integer); begin HideBall; @@ -118,14 +118,14 @@ begin ShowBall end; -/// (dx,dy) +/// Перемещает шарик на вектор (dx,dy) procedure MoveOn(dx,dy: integer); begin MoveTo(ax+dx,ay+dy); end; BEGIN - SetWindowTitle(' ( CRT)'); + SetWindowTitle('Биллиард (ностальгия по CRT)'); HideCursor; Fill; diff --git a/InstallerSamples/StandardUnits/CRT/CPaint.pas b/InstallerSamples/StandardUnits/CRT/CPaint.pas index e6e3d73b8..5ea9b4078 100644 --- a/InstallerSamples/StandardUnits/CRT/CPaint.pas +++ b/InstallerSamples/StandardUnits/CRT/CPaint.pas @@ -1,6 +1,6 @@ -// -// GotoXY, TextBackGround -// Shift+F9 !!! +// Рисование курсором в консольном окне +// Иллюстрация GotoXY, TextBackGround +// Для запуска программы используйте Shift+F9 !!! uses Crt; var @@ -32,7 +32,7 @@ begin draw := True; color := Green; ClrScr; - SetWindowTitle(' (Esc-, Num 5 - )'); + SetWindowTitle('Рисование курсором (Esc-выход, Num 5 - изменение цвета)'); TextBackGround(color); GotoXY(WindowWidth div 2,WindowHeight div 2); var c: char; @@ -44,7 +44,7 @@ begin begin c := ReadKey; case c of - // Num 5 + // Изменение цвета по клавише Num 5 {5} #12: begin color := color + 1; if color=16 then diff --git a/InstallerSamples/StandardUnits/CRT/CRTColors.pas b/InstallerSamples/StandardUnits/CRT/CRTColors.pas index b356e8219..5b205c89d 100644 --- a/InstallerSamples/StandardUnits/CRT/CRTColors.pas +++ b/InstallerSamples/StandardUnits/CRT/CRTColors.pas @@ -1,9 +1,9 @@ -// CRT- -// Shift+F9 !!! +// Стандартные CRT-цвета +// Для запуска программы используйте Shift+F9 !!! uses CRT; begin - SetWindowTitle(' CRT-'); + SetWindowTitle('Стандартные CRT-цвета'); for var i:=0 to 15 do begin TextBackground(i); diff --git a/InstallerSamples/StandardUnits/CRT/SimpleTextEditor.pas b/InstallerSamples/StandardUnits/CRT/SimpleTextEditor.pas index 31ee5835d..b8dc321c4 100644 --- a/InstallerSamples/StandardUnits/CRT/SimpleTextEditor.pas +++ b/InstallerSamples/StandardUnits/CRT/SimpleTextEditor.pas @@ -1,9 +1,9 @@ -// -// Shift+F9 !!! +// Простейший текстовый редактор +// Для запуска программы используйте Shift+F9 !!! uses CRT; begin - SetWindowTitle(' (Enter - , Esc - )'); + SetWindowTitle('Текстовый редактор (Enter - новая строка, Esc - выход)'); clrScr; repeat var c := ReadKey; diff --git a/InstallerSamples/StandardUnits/FormsABC/CalcIntegral.pas b/InstallerSamples/StandardUnits/FormsABC/CalcIntegral.pas index 5d4c5cc65..d73a20be5 100644 --- a/InstallerSamples/StandardUnits/FormsABC/CalcIntegral.pas +++ b/InstallerSamples/StandardUnits/FormsABC/CalcIntegral.pas @@ -24,24 +24,24 @@ var f2 := new FlowBreak; N := new IntegerField('N:'); f3 := new FlowBreak; - tl := new TextLabel(': '); + tl := new TextLabel('Функция: '); f4 := new FlowBreak; cb := new ComboBox; f5 := new FlowBreak(50); s1 := new Space(20); - ok := new Button(''); + ok := new Button('Вычислить'); tb: TextBox; procedure MyClick; begin var f := funs[cb.SelectedIndex]; var res := CalcIntegral(a.Value,b.Value,N.Value,f); - tb.AddLine(Format('({0},{1},{2},{3}) = {4}',a.Value,b.Value,N.Value,cb.SelectedValue,res.ToString)); + tb.AddLine(Format('Интеграл({0},{1},{2},{3}) = {4}',a.Value,b.Value,N.Value,cb.SelectedValue,res.ToString)); end; procedure InitControls; begin - MainForm.Title := ' '; + MainForm.Title := 'Вычисление определенного интеграла'; MainForm.SetSize(500,350); MainForm.CenterOnScreen; b.Value := 1; diff --git a/InstallerSamples/StandardUnits/FormsABC/PaintBoxDraw.pas b/InstallerSamples/StandardUnits/FormsABC/PaintBoxDraw.pas index 126ada6ee..3f5e16280 100644 --- a/InstallerSamples/StandardUnits/FormsABC/PaintBoxDraw.pas +++ b/InstallerSamples/StandardUnits/FormsABC/PaintBoxDraw.pas @@ -32,13 +32,13 @@ begin end; var - Scale := new RealField(': '); + Scale := new RealField('Масштаб: '); l1 := new FlowBreak; dx := new IntegerField('dx: '); l2 := new FlowBreak; dy := new IntegerField('dy: '); l3 := new FlowBreak(20); - b := new Button(' '); + b := new Button(' Нарисовать '); p: PaintBox; @@ -60,7 +60,7 @@ begin end; begin - MainForm.Title := ' '; + MainForm.Title := 'Множество Мандельброта'; MainForm.SetSize(700, 600); MainPanel.Dock := Dockstyle.Left; MainPanel.Width := 120; diff --git a/InstallerSamples/StandardUnits/FormsABC/f0.pas b/InstallerSamples/StandardUnits/FormsABC/f0.pas index 1c2864444..9d99a2983 100644 --- a/InstallerSamples/StandardUnits/FormsABC/f0.pas +++ b/InstallerSamples/StandardUnits/FormsABC/f0.pas @@ -14,11 +14,11 @@ begin a := new IntegerField('a:'); b := new IntegerField('b:'); LineBreak; - sum := new IntegerField(':',220); + sum := new IntegerField('Сумма:',220); LineBreak; - prod := new IntegerField(':',220); + prod := new IntegerField('Произведение:',220); LineBreak; EmptyLine(20); - d := new Button(''); + d := new Button('Вычислить'); d.Click += MyClick; end. \ No newline at end of file diff --git a/InstallerSamples/StandardUnits/FormsABC/f0_MV.pas b/InstallerSamples/StandardUnits/FormsABC/f0_MV.pas index 7b92dc009..0c3888204 100644 --- a/InstallerSamples/StandardUnits/FormsABC/f0_MV.pas +++ b/InstallerSamples/StandardUnits/FormsABC/f0_MV.pas @@ -25,12 +25,12 @@ type a := new IntegerField('a:'); b := new IntegerField('b:'); LineBreak; - sum := new IntegerField(':',220); + sum := new IntegerField('Сумма:',220); LineBreak; - prod := new IntegerField(':',220); + prod := new IntegerField('Произведение:',220); LineBreak; EmptyLine(20); - var d := new Button(''); + var d := new Button('Вычислить'); d.Click += MyClick; end; end; diff --git a/InstallerSamples/StandardUnits/FormsABC/f0_class.pas b/InstallerSamples/StandardUnits/FormsABC/f0_class.pas index 98f26e4dc..fc4696033 100644 --- a/InstallerSamples/StandardUnits/FormsABC/f0_class.pas +++ b/InstallerSamples/StandardUnits/FormsABC/f0_class.pas @@ -15,12 +15,12 @@ type a := new IntegerField('a:'); b := new IntegerField('b:'); LineBreak; - sum := new IntegerField(':',220); + sum := new IntegerField('Сумма:',220); LineBreak; - prod := new IntegerField(':',220); + prod := new IntegerField('Произведение:',220); LineBreak; EmptyLine(20); - var d := new Button(''); + var d := new Button('Вычислить'); d.Click += MyClick; end; end; diff --git a/InstallerSamples/StandardUnits/Timers/Timer2.pas b/InstallerSamples/StandardUnits/Timers/Timer2.pas index 87cdc04d8..073c3a6b9 100644 --- a/InstallerSamples/StandardUnits/Timers/Timer2.pas +++ b/InstallerSamples/StandardUnits/Timers/Timer2.pas @@ -1,4 +1,4 @@ -// "". . +// "Собачка". Иллюстрация использования таймера. uses GraphABC, Timers; var @@ -47,7 +47,7 @@ begin end; begin - SetWindowCaption('""'); + SetWindowCaption('"Собачка"'); SetSmoothingOff; OnMouseMove:=MouseMove; xx := 100; yy := 100; diff --git a/Localization/StringResources.cs b/Localization/StringResources.cs index f87d05150..fa58a9094 100644 --- a/Localization/StringResources.cs +++ b/Localization/StringResources.cs @@ -490,7 +490,7 @@ namespace PascalABCCompiler ICollection col = pi.GetValue(obj, noIndex) as ICollection; if (col != null) foreach (object ob in col) - // + //не расматриваем формы if (!(ob is System.Windows.Forms.Form)) SetTextForAllObjects(ob, prefix); } @@ -499,7 +499,7 @@ namespace PascalABCCompiler IContainer cont = pi.GetValue(obj, noIndex) as IContainer; if (cont != null) foreach (object ob in cont.Components) - // + //не расматриваем формы if (!(ob is System.Windows.Forms.Form)) SetTextForAllObjects(ob, prefix); } @@ -600,7 +600,7 @@ namespace PascalABCCompiler } static StringResources() { - //TODO: + //TODO: сделать так чтобы язык поумолчанию был в ресурсе /*StringResourcesLanguage.ConfigFileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName) + "\\lng\\languages.dat"; if (StringResourcesLanguage.AccessibleLanguages.Count > 0) StringResourcesLanguage.CurrentLanguageName = StringResourcesLanguage.AccessibleLanguages[0]; diff --git a/NETGenerator/CodeGenerator.cs b/NETGenerator/CodeGenerator.cs index 4a65efd37..072900d50 100644 --- a/NETGenerator/CodeGenerator.cs +++ b/NETGenerator/CodeGenerator.cs @@ -2,8 +2,8 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) /*************************************************************************** * - * Compiler - * SemanticTree + * Интерфейс доступа к кодогенераторам для Compiler + * Зависит от SemanticTree * ***************************************************************************/ diff --git a/NETGenerator/NETGenegratorTools.cs b/NETGenerator/NETGenegratorTools.cs index b9d57b578..302c57456 100644 --- a/NETGenerator/NETGenegratorTools.cs +++ b/NETGenerator/NETGenegratorTools.cs @@ -303,10 +303,10 @@ namespace PascalABCCompiler.NETGenerator else if (elem_type.IsGenericParameter) il.Emit(OpCodes.Ldelem, elem_type); else - if (elem_type.IsValueType)// + if (elem_type.IsValueType)//если это структура { - il.Emit(OpCodes.Ldelema, elem_type);// a? - // . . get_val + il.Emit(OpCodes.Ldelema, elem_type);//почему a? + // проверки нужно ли заменять тип возвр. знач. метода get_val массива на указатель if (ldobj || !(elem_type != TypeFactory.VoidType && elem_type.IsValueType && !TypeFactory.IsStandType(elem_type))) il.Emit(OpCodes.Ldobj, elem_type); } @@ -380,8 +380,8 @@ namespace PascalABCCompiler.NETGenerator UInt64 UInt64 = Convert.ToUInt64(value); if (UInt64 > Int64.MaxValue) { - // . . - // C#, + //Это будет медленно работать. Надо переделать. + //Надо разобраться как сссделано в C#, там все нормально Int64 tmp = (Int64)(UInt64 - Int64.MaxValue - 1); il.Emit(OpCodes.Ldc_I8, tmp); il.Emit(OpCodes.Conv_U8); @@ -408,16 +408,16 @@ namespace PascalABCCompiler.NETGenerator //il.Emit(OpCodes.Ldc_I4, (Int32)value); LdcIntConst(il, (Int32)value); else - throw new Exception(" PushLdc " + value.GetType().ToString()); + throw new Exception("Немогу положить PushLdc для " + value.GetType().ToString()); break; } } public static void PushCast(ILGenerator il, Type tp, Type from_value_type) { - if (IsPointer(tp)) //INTPTR TODO Unbox_Any + if (IsPointer(tp)) //INTPTR TODO Здесть проблема с Unbox_Any return; - //(ssyy) 15.05.08 + //(ssyy) Вставил 15.05.08 if (from_value_type != null) { il.Emit(OpCodes.Box, from_value_type); @@ -557,7 +557,7 @@ namespace PascalABCCompiler.NETGenerator public static void PushTypeOf(ILGenerator il, Type tp) { il.Emit(OpCodes.Ldtoken, tp); - //TODO ! + //TODO это надо ускорить хештаблицей! il.EmitCall(OpCodes.Call, typeof(Type).GetMethod("GetTypeFromHandle"), null); } diff --git a/Optimizer/Optimizer.cs b/Optimizer/Optimizer.cs index 292996e13..5fd525ca3 100644 --- a/Optimizer/Optimizer.cs +++ b/Optimizer/Optimizer.cs @@ -662,7 +662,7 @@ namespace PascalABCCompiler switch (en.semantic_node_type) { case semantic_node_type.exit_procedure: - /* */ + /*ничего писать не надо*/ break; case semantic_node_type.typeof_operator: //VisitTypeOfOperator((typeof_operator)en); diff --git a/ParserTools/ParserTools/GPBParserTools.cs b/ParserTools/ParserTools/GPBParserTools.cs index dc4ae5738..94effb695 100644 --- a/ParserTools/ParserTools/GPBParserTools.cs +++ b/ParserTools/ParserTools/GPBParserTools.cs @@ -12,7 +12,7 @@ using GoldParser; namespace PascalABCCompiler.ParserTools { - public class GPBParser // , , . : + public class GPBParser // Странный класс, не являющийся парсером, а служащий для передачи информации. Состоит из двух частей: ссылок на парсер и грамматику и информации для передачи { public Parser LRParser; public Grammar LanguageGrammar; @@ -85,7 +85,7 @@ namespace PascalABCCompiler.ParserTools private const int max_char_const=0xFFFF; public int LineCorrection = 0; - public GoldParser.Parser parser; // - ! SSM 19.01.12 + public GoldParser.Parser parser; // Ужас - два разных парсера! SSM 19.01.12 public virtual void check_comment_text(GPBParser parser) { @@ -248,8 +248,8 @@ namespace PascalABCCompiler.ParserTools public virtual const_node create_int_const(GPBParser parser, System.Globalization.NumberStyles NumberStyles) { - // - // - 0 + + //таблица целых констант на уровне синтаксиса + // не может быть - 0 + // 32--------16----8----|----8----16--------32----------------64(bits) // [ int64 )[ int32 ]( int64 ]( uint64 ] string text = parser.LRParser.TokenString; diff --git a/ParserTools/ParserTools/SourceContextMap.cs b/ParserTools/ParserTools/SourceContextMap.cs index 479e0c178..b5245d68d 100644 --- a/ParserTools/ParserTools/SourceContextMap.cs +++ b/ParserTools/ParserTools/SourceContextMap.cs @@ -45,7 +45,7 @@ namespace PascalABCCompiler.ParserTools SourceContext Find(SourceContext tf) { - //TODO + //TODO Надо сделать половинным делением //foreach (SourceContext t in AreaList.Keys) // if (tf.In(t)) // return t; @@ -66,7 +66,7 @@ namespace PascalABCCompiler.ParserTools } public SourceContext GetSourceContext(SourceContext scv) { - // !!! + //Это надо считать только по мере надобности!!! SourceContext scvf; if (CurrentSourceContext != null && scv.In(CurrentSourceContext)) scvf = CurrentSourceContext; diff --git a/ParserTools/ParsersController.cs b/ParserTools/ParsersController.cs index ee6c791aa..0d21a13eb 100644 --- a/ParserTools/ParsersController.cs +++ b/ParserTools/ParsersController.cs @@ -60,7 +60,7 @@ namespace PascalABCCompiler.Parsers { LastParser = (IParser)obj; Parsers.Add(LastParser); - LastParser.Reset();// + LastParser.Reset();//Здесь поисходит инициализация парсеров LastParser.SourceFilesProvider = sourceFilesProvider; if (ParserConnected != null) ParserConnected(LastParser); diff --git a/Parsers/KuMir-gppg-Parser/KuMir00yacc.cs b/Parsers/KuMir-gppg-Parser/KuMir00yacc.cs index 07e239a52..74f9031a8 100644 --- a/Parsers/KuMir-gppg-Parser/KuMir00yacc.cs +++ b/Parsers/KuMir-gppg-Parser/KuMir00yacc.cs @@ -70,7 +70,7 @@ public abstract class ScanBase : AbstractScanner { public class GPPGParser: ShiftReduceParser { // Verbatim content from KuMir00.y - public syntax_tree_node root; // + public syntax_tree_node root; // Корневой узел синтаксического дерева public GPPGParser(AbstractScanner scanner) : base(scanner) { } public int unit_number; public System.Collections.ArrayList _units = new System.Collections.ArrayList(); // for modules @@ -566,7 +566,7 @@ public class GPPGParser: ShiftReduceParser case 2: // module -> Separators_Opt, Global_part, TK_ALG, ident, Separators, TK_BEGIN, // StatementSequence, TK_END, EmptyLines, Sub_declarations { - // + // Формирование главной программы program_module _program_module; program_name _program_name = new program_name(ValueStack[ValueStack.Depth-7].id); if ((_units[this.unit_number - 1] as unit_data).initialization.subnodes.Count != 0) @@ -651,7 +651,7 @@ public class GPPGParser: ShiftReduceParser } break; case 4: // module -> INVISIBLE, expr -{ // Intellisense +{ // Для Intellisense root = ValueStack[ValueStack.Depth-1].ex; } break; diff --git a/Parsers/Oberon00Parser/oberon00.cs b/Parsers/Oberon00Parser/oberon00.cs index 69dfd0410..e86d150b1 100644 --- a/Parsers/Oberon00Parser/oberon00.cs +++ b/Parsers/Oberon00Parser/oberon00.cs @@ -682,7 +682,7 @@ int NextState() { case eofNum: switch (currentStart) { case 47: -PT.AddError(" ", yylloc); +PT.AddError("Комментарий не закрыт", yylloc); break; } if (yywrap()) @@ -767,7 +767,7 @@ int tryParseInt; yylval.lVal = tryParseLong; return (int)Tokens.LONGINTNUM; } - PT.AddError(" ", yylloc); + PT.AddError("Слишком длинное целое", yylloc); break; case 23: yylval.sVal = PT.GetStringContent(yytext); @@ -779,7 +779,7 @@ try{ return (int)Tokens.CHAR_CONST; } catch (System.ArgumentException){ - PT.AddError(" ", yylloc); + PT.AddError("Некорректный код символа", yylloc); } break; case 25: @@ -790,7 +790,7 @@ double tryParseDouble; yylval.rVal = tryParseDouble; return (int)Tokens.REALNUM; } - PT.AddError(" ", yylloc); + PT.AddError("Слишком длинное вещественное", yylloc); break; case 26: var _yytext = yytext.Substring(0, yytext.Length - 1); @@ -804,7 +804,7 @@ var _yytext = yytext.Substring(0, yytext.Length - 1); yylval.lVal = tryParseHexLong; return (int)Tokens.LONGINTNUM; } - PT.AddError(" ", yylloc); + PT.AddError("Слишком длинное шестнадцатеричное целое", yylloc); break; case 28: return (int)Tokens.DOUBLEPOINT; @@ -933,7 +933,7 @@ static int mlCommentCnt = 0; PT.AddError(errorMsg,yylloc); } -// , +// Статический класс, определяющий ключевые слова языка public static class Keywords { private static Dictionary keywords = new Dictionary(); diff --git a/Parsers/Oberon00Parser/oberon00yacc.cs b/Parsers/Oberon00Parser/oberon00yacc.cs index 379f47f72..1d82a3bb3 100644 --- a/Parsers/Oberon00Parser/oberon00yacc.cs +++ b/Parsers/Oberon00Parser/oberon00yacc.cs @@ -37,26 +37,26 @@ public struct ValueType public bool bVal; public string sVal; public int iVal; - public long lVal; // + public long lVal; // Длинное целое public char cVal; public double rVal; - public pascal_set_constant sc; // - - public named_type_reference ntr; // - public ident_list il; // - public ident id; // - public var_def_statement vds; // - public variable_definitions vdss; // - public expression ex; // - public expression_list el; // - public block bl; // - public statement st; // - public statement_list sl; // - public declaration decsec; // - public declarations decl; // + public pascal_set_constant sc; // Константа - множество + public named_type_reference ntr; // Именованное определение типа + public ident_list il; // Список идентификаторов + public ident id; // Идентификатор + public var_def_statement vds; // Описание переменных + public variable_definitions vdss; // Секция описания переменных + public expression ex; // Выражение + public expression_list el; // Список выражений + public block bl; // Программный блок + public statement st; // Оператор + public statement_list sl; // Список операторов + public declaration decsec; // Описание + public declarations decl; // Список описаний public Operators op; - public simple_const_definition scd; // - public consts_definitions_list cdl; // - public procedure_definition pd; // + public simple_const_definition scd; // Определение константы + public consts_definitions_list cdl; // Список описаний констант + public procedure_definition pd; // Описание процедуры } // Abstract base class for GPLEX scanners public abstract class ScanBase : AbstractScanner { @@ -68,8 +68,8 @@ public abstract class ScanBase : AbstractScanner { public class GPPGParser: ShiftReduceParser { // Verbatim content from oberon00.y -// GPPGParser, , gppg - public syntax_tree_node root; // +// Эти объявления добавляются в класс GPPGParser, представляющий собой парсер, генерируемый системой gppg + public syntax_tree_node root; // Корневой узел синтаксического дерева public GPPGParser(AbstractScanner scanner) : base(scanner) { } // End verbatim content from oberon00.y @@ -337,17 +337,17 @@ public class GPPGParser: ShiftReduceParser case 2: // module -> MODULE, ident, SEMICOLUMN, mainblock, ident, COMMA { if (ValueStack[ValueStack.Depth-5].id.name != ValueStack[ValueStack.Depth-2].id.name) - PT.AddError(" " + ValueStack[ValueStack.Depth-2].id.name + " " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]); + PT.AddError("Имя " + ValueStack[ValueStack.Depth-2].id.name + " должно совпадать с именем модуля " + ValueStack[ValueStack.Depth-5].id.name, LocationStack[LocationStack.Depth-2]); - // Oberon00System, PascalABC.NET + // Подключение стандартного модуля Oberon00System, написанного на PascalABC.NET var ul = new uses_list("Oberon00System"); - // ( ) + // Формирование модуля основной программы (используется фабричный метод вместо конструктора) root = program_module.create(ValueStack[ValueStack.Depth-5].id, ul, ValueStack[ValueStack.Depth-3].bl, CurrentLocationSpan); } break; case 3: // module -> INVISIBLE, expr -{ // Intellisense +{ // Для Intellisense root = ValueStack[ValueStack.Depth-1].ex; } break; @@ -662,8 +662,8 @@ public class GPPGParser: ShiftReduceParser if (ValueStack[ValueStack.Depth-1].decsec != null) ValueStack[ValueStack.Depth-2].decl.Add(ValueStack[ValueStack.Depth-1].decsec); CurrentSemanticValue.decl = ValueStack[ValueStack.Depth-2].decl; - CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // , .. - // (, ) + CurrentSemanticValue.decl.source_context = CurrentLocationSpan; // Необходимо показать место в программе, т.к. невно это не сделано + // (например, в конструкторе) } break; case 73: // ProcedureDeclarationSect -> PROCEDURE, ident, maybeformalparams, maybereturn, diff --git a/Parsers/PascalABCParser/PascalABCParserTools.cs b/Parsers/PascalABCParser/PascalABCParserTools.cs index c978acd26..bfb482799 100644 --- a/Parsers/PascalABCParser/PascalABCParserTools.cs +++ b/Parsers/PascalABCParser/PascalABCParserTools.cs @@ -31,7 +31,7 @@ namespace PascalABCCompiler.PascalABCParser int NewLineLength = Environment.NewLine.Length; int GetLinesCount(string s) { - // + //Не учитывает последний перевод если за ним ничего int i = s.IndexOf(Environment.NewLine); int res = 0; if (i >= 0 && i < s.Length - NewLineLength) diff --git a/Parsers/PascalABCParser/pascalabc_lrparser.cs b/Parsers/PascalABCParser/pascalabc_lrparser.cs index 93b2fec1d..e8706bc3a 100644 --- a/Parsers/PascalABCParser/pascalabc_lrparser.cs +++ b/Parsers/PascalABCParser/pascalabc_lrparser.cs @@ -144,7 +144,7 @@ namespace PascalABCCompiler.PascalABCParser } ////////////////////////////////////tasha_16.04.2010 - /// SSM pascalabc_lparser_rules , .. partial , . + /// SSM перенес из pascalabc_lparser_rules сюда, т.к. это partial класс, а та часть генерировалась автоматически. Голову отрывать надо int lambda_num = 0; List pascalABC_lambda_definitions = new List(); List pascalABC_var_statements = new List(); diff --git a/Parsers/PascalABCParserNewSaushkin/ShiftReduceParserCode.cs b/Parsers/PascalABCParserNewSaushkin/ShiftReduceParserCode.cs index 0baa14e72..cc7cdcba4 100644 --- a/Parsers/PascalABCParserNewSaushkin/ShiftReduceParserCode.cs +++ b/Parsers/PascalABCParserNewSaushkin/ShiftReduceParserCode.cs @@ -767,7 +767,7 @@ namespace QUT.Gppg public static LexLocation MergeAll(params LexLocation[] locs) { - // - + // первая - корректная var l = locs[0]; for (int i = 1; i < locs.Length; i++) { @@ -784,7 +784,7 @@ namespace QUT.Gppg public static LexLocation MergeAll1(params LexLocation[] locs) { - // + // сливаем все до последней корректной var ind = -1; for (int i = locs.Length - 1; i >= 0; i--) { diff --git a/ReleaseGenerators/ForPerformanceOptimization.pas b/ReleaseGenerators/ForPerformanceOptimization.pas index dda84ddc0..0fe49e801 100644 --- a/ReleaseGenerators/ForPerformanceOptimization.pas +++ b/ReleaseGenerators/ForPerformanceOptimization.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; @@ -13,7 +13,7 @@ var z: StarABC; begin - Window.Title := 'ABCObjects: '; + Window.Title := 'ABCObjects: свойства графических объектов'; z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); r := new RectangleABC(100,100,200,100,Color.Gold); Pause; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas index a7c48162d..64c8ee9f9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Amp.pas @@ -1,9 +1,9 @@ -// & +// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова var &begin,&end: integer; begin &begin := 1; &end := 2; - var t: System.Type := &begin.GetType; // System.Type & + var t: System.Type := &begin.GetType; // в System.Type использовать & не надо write(&begin,' ',&end,' ',t); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas index d045b6aff..3ba218714 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Умножение на 3 writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas index 2756e7242..25797a7bb 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/AutoVars.pas @@ -1,5 +1,5 @@ -// -// for +// Автоопределение типа переменной +// Описание переменной в заголовке цикла for begin var x := 2; for var i:=1 to 10 do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas index 2edf55601..d1257db6c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/BlockVar.pas @@ -1,11 +1,11 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real := x; // + var v: real := x; // вспомогательная переменная x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas index 82e2e12dc..2b546058b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/Foreach.pas @@ -1,4 +1,4 @@ -// foreach +// Пример иллюстрирует возможности оператора foreach uses System.Collections.Generic; var @@ -7,20 +7,20 @@ var l: List; begin - write('foreach : ':35); + write('foreach по обычному массиву: ':35); foreach x: integer in a do write(x,' '); writeln; s := [2..5,10..14]; - write('foreach : ':35); + write('foreach по множеству: ':35); foreach x: integer in s do write(x,' '); writeln; l := new List; l.Add(7); l.Add(2); l.Add(5); - write('foreach : ':35); + write('foreach по динамическому массиву: ':35); foreach x: integer in l do write(x,' '); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas index c12b560b5..7bea343d6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RandomDiap.pas @@ -1,5 +1,5 @@ -// +// Генерация случайного числа в заданном диапазоне begin var i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas index 4bf290727..5e099f699 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/RealExtNums.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(1/0); writeln(sqrt(-1)); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas index 24bf8fb26..60cef0d77 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/SimpleNewFeatures.pas @@ -1,27 +1,27 @@ -// PascalABC.NET +// Простейшие новые возможности языка PascalABC.NET -// +// Инициализация переменной при описании var i: integer := 1; -// +// Автоопределение типа переменной при инициализации var r := 2.5; begin - // + // Внутриблочные описания переменных var s: real := 1.0; - // ( - ) + // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) for j: integer := 1 to 10 do - s += j; // += + s += j; // Операция += для чисел var p := 1; - // + // Описание переменной в заголовке цикла с автоопределением типа for var j := 1 to 10 do - p *= j; // *= + p *= j; // Операция *= var str := ''; for c: char := 'a' to 'z' do - str += c; // += + str += c; // Операция += для строк end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas index 9aade8ace..7b9ca40ce 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteAll.pas @@ -1,12 +1,12 @@ -/// write +/// Вывод различных типов процедурой write begin - // , , , + // Вывод, целого, строки, вещественного Writeln(1,' ',2.5); - // + // Вывод множества Writeln([1..10]); - // + // Вывод логического Writeln(True); var a: array [1..10] of integer; - // ( ) + // Вывод массива (выводится его тип) Writeln(a); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas index 7e060018f..a6ea0c119 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/01_First/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); - // + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas index fb28b2ac8..95bed5ad7 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/CharFunc.pas @@ -1,4 +1,4 @@ -// Ord, Chr, OrdUnicode, ChrUnicode +// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode var c: char; i: integer; @@ -6,14 +6,14 @@ var begin writeln('sizeof(char) = ',sizeof(char)); writeln; - c := ''; + c := 'Ж'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); writeln; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas index 746b47274..63d162f37 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Dynarray.pas @@ -1,4 +1,4 @@ -// +// Процедуры и методы работы с динамическим массивом uses System; procedure Print(a: array of integer); @@ -11,30 +11,30 @@ end; var a: array of integer; begin - SetLength(a,10); // . : a := new integer[10]; + SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := PABCSystem.Random(100); - // + // Вывод всех элементов массива Print(a); - // ( & , - // array - // Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении + // класса Array) &Array.Sort(a); Print(a); - // + // Обращение массива &Array.Reverse(a); Print(a); - // . SetLength + // Изменение размерамассиав с сохранением элементов. То же делает SetLength &Array.Resize(a,a.Length+2); Print(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 50); Writeln(i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas index b9d3d0a87..db92312ee 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Enum.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas index 4706c7177..5befeb806 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/InitRecords.pas @@ -1,8 +1,8 @@ -// +// Инициализаторы полей записи type Frac = record num: integer := 0; - denom := 1; // - denom: integer + denom := 1; // автоопределеине типа - denom: integer end; var diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas index e8b16f921..8a07a43a9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointerToRef.pas @@ -1,4 +1,4 @@ -// . : +// Указатели на ссылочные типы запрещены. Исключение: указатели на строки и динамические массивы type A = class i: integer; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas index ea8ee15ba..42aa2fc6d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/Pointers.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,12 +32,12 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin var p1 := p; p := p^.next; - Dispose(p1); // + Dispose(p1); // Память обязательно возвращать end; end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas index 0f3c23c36..fabbe9d1f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/PointersVsRef/References.pas @@ -1,5 +1,5 @@ -// -// +// Использование ссылок вместо указателей для создания односвязного списка +// Мы рекомендуем именно этот способ type Node = class data: integer; @@ -11,18 +11,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -30,6 +30,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas index 21022da8a..a404ba7bd 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/Sets.pas @@ -1,15 +1,15 @@ -// -// +// Работа с множествами +// Базовый тип для множества может быть произвольным var - s1: set of string := ['','','','']; - s2: set of string := ['','','']; + s1: set of string := ['Иванов','Попов','Сидорова','Петров']; + s2: set of string := ['Козлов','Петров','Иванов']; begin - writeln(' s1: ',s1); - writeln(' s2: ',s2); - writeln(' s1 s2: ',s1+s2); - writeln(' s1 s2: ',s1*s2); - writeln(' s1 s2: ',s1-s2); - Include(s1,''); - Exclude(s1,''); - writeln(' s1: ',s1); + writeln('Множество s1: ',s1); + writeln('Множество s2: ',s2); + writeln('Объединение множеств s1 и s2: ',s1+s2); + writeln('Пересечение множеств s1 и s2: ',s1*s2); + writeln('Разность множеств s1 и s2: ',s1-s2); + Include(s1,'Умнов'); + Exclude(s1,'Иванов'); + writeln('Множество s1: ',s1); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas index 60f5db050..ce86a50a3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringInteger.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas index 69cf7ddb1..609eb8234 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringMethods.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas index 4cb3e8a0f..7e89b95d1 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StringTypes.pas @@ -1,17 +1,17 @@ -// string, string[n], shortstring +// Строки string, string[n], shortstring var - s: string; // , s, - s10: string[10]; // ss + s: string; // память, занимаемая s, зависит от ее длины + s10: string[10]; // память под ss фиксирована ss: shortstring := s; f: file of string[10]; - // f: file of string; - + // f: file of string; - ошибка begin s := '12345678901234567890'; - s10 := s; // + s10 := s; // обрезание writeln(s10); s += s; s += s; s += s; s += s; writeln(s); - writeln(' = ',s.Length); + writeln('Длина строки = ',s.Length); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas index 2dec49906..8648f73fd 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/StructTypeEquiv.pas @@ -1,4 +1,4 @@ -// . Delphi - +// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность var a: array of integer; a1: array of integer; @@ -18,6 +18,6 @@ begin a := a1; s := s1; p := p1; - r := r1; // Delphi - proc(a,s,p,r); // - + r := r1; // В Delphi ни одно из этих присваиваний не сработает + proc(a,s,p,r); // Этот вызов - тоже end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas index c49eaa091..24bb11de5 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/02_Types/UntypedFile.pas @@ -1,4 +1,4 @@ -// +// Бестиповые файлы var f: file; i: integer; @@ -8,11 +8,11 @@ var begin assign(f,'a.dat'); rewrite(f); - // + // Записываем в файл данные любых типов write(f,1,2.5,'Hello'); close(f); reset(f); - // + // Считываем эти данные из файла read(f,i,r,s); write(i,' ',r,' ',s); close(f); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas index 81e9a13a6..e23578348 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/FuncParams.pas @@ -1,4 +1,4 @@ -// +// Переменное число параметров function Sum(params arg: array of integer): integer; begin Result := 0; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas index 09e4321ce..f3b5eaef1 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/Overload.pas @@ -1,4 +1,4 @@ -// +// Перегрузка имен подпрограмм procedure proc(i: integer); begin writeln('integer'); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas index e6b1774e5..073617a04 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/ProcVars.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas index 906247f7a..645e791bf 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/03_Subroutines/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,13 +11,13 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); var c := 2.5; var d := 3.3; writeln; - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('До Swap c={0}, d={1}',c,d); Swap(c,d); - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('После Swap c={0}, d={1}',c,d); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas index f2af72ec0..d118c77ac 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/CallC#/CallCS.pas @@ -1,5 +1,5 @@ -// add Class1, ClassLibrary1 -// Class1 ClassLibrary1.dll, C# +// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1 +// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C# {$reference ClassLibrary1.dll} uses ClassLibrary1; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas index 3d9b4026c..8d5974158 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/MyDll.pas @@ -1,4 +1,4 @@ -// Dll- +// Dll-библиотека library MyDll; const n = 10; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas index bb2c74f49..42e9893c6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/DllTest/main.pas @@ -1,6 +1,6 @@ -// - -// dll-, PascalABC.NET, , -// +// Это - главная программа +// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, +// не подключая пространства имен {$reference mydll.dll} begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas index 5876266f3..294747533 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/NativeDll/CallNative.pas @@ -1,6 +1,6 @@ -// dll -function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // +// Вызов функции из обычной dll +function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции -begin // +begin // основная программа writeln(add(2,3)); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas index 81199623c..98617cdfc 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MainProgram.pas @@ -1,7 +1,7 @@ -uses MyUnit; // +uses MyUnit; // подключили модуль var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6); begin - writeln(' = ',Max(a)); + writeln('Максимальный элемент в массиве = ',Max(a)); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas index 06ec89d2e..70fb761e3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SimpleUnit/MyUnit.pas @@ -1,8 +1,8 @@ -/// -unit MyUnit; // +/// Модуль упрощенной структуры +unit MyUnit; // имя модуля должно совпадать с именем файла -// -/// +// Документирующие комментарии отображаются при наведении на имя курсора мыши +/// Возвращает максимальный элемент в массиве function Max(a: array of integer): integer; begin Result := integer.MinValue; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas index d05210d39..262e7f035 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/04_Units/SystemUnitTest.pas @@ -1,12 +1,12 @@ -// uses, PABCSystem +// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem uses System; begin - // Random, System, Random - // PABCSystem, + // Имя Random, определенное в пространстве имен System, перекрывает имя Random + // в модуле PABCSystem, который неявно подключается первым var r: Random := new Random(); writeln(r.Next(10)); - // Random , + // Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится var i: integer := PABCSystem.Random(10); writeln(i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas index df9c3d346..de94d7aba 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/ABC.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas index 818687764..cd8f125a1 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/GraphABCTest.pas @@ -1,4 +1,4 @@ -// GraphABC +// Иллюстрация простейших возможностей GraphABC uses GraphABC; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas index 064766eae..f48183e0a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/05_Graph/MouseEvents.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация обработки событий мыши uses GraphABC; procedure MouseDown(x,y,mb: integer); @@ -12,7 +12,7 @@ begin end; begin - // + // Привязка обработчиков к событиям OnMouseDown := MouseDown; OnMouseMove := MouseMove end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas index 1bf1fd91f..f33bcd697 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/AllFromObject.pas @@ -1,4 +1,4 @@ -// - Object +// Все типы - производные от Object var i: integer; r: real; @@ -10,5 +10,5 @@ begin o := r; writeln(o.GetType); if o.GetType=typeof(real) then - writeln(' o - '); + writeln('В переменной o - вещественный тип'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas index f7a00c36e..11679be8a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Пример использования классового (статического) конструктора type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas index 9182e55ca..e9361cc02 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/GarbageCollection.pas @@ -1,4 +1,4 @@ -// : nil +// Сборка мусора: для освобождения объекта присвойте переменной nil uses System.Collections.Generic; var l: List := new List; @@ -9,5 +9,5 @@ begin l.Add(2); foreach x:integer in l do write(x,' '); - l := nil; // , , + l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas index 89c00da6f..7deff8846 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Interf.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация использованя интерфейсов type IShape = interface procedure Draw; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas index 879445ac5..1b62ef27b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/OperatorOverloading.pas @@ -1,4 +1,4 @@ -// +// Перегрузка операций type Frac = record private diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas index 26f54af7a..e95d97a88 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Records.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas index dda2835c3..d818e96ea 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas index 872cf309b..4b932d35a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/Where.pas @@ -1,4 +1,4 @@ -// Where - +// Секция Where - ограничение на типы параметров uses System,System.Collections.Generic; type @@ -15,7 +15,7 @@ type var m: MyClass; - //m1: MyClass; // + //m1: MyClass; // ошибка begin end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/06_Classes/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas index 3820db357..01e72e36d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/DateTime.pas @@ -1,31 +1,31 @@ Uses System; -var d1, d2, d3: DateTime; // - ts: TimeSpan; // +var d1, d2, d3: DateTime; // Объекты для хранения даты и времени + ts: TimeSpan; // Объект для хранения промежутков времени begin - // - + // Получение текущей даты - вызов статического метода d1 := DateTime.Now; Writeln(d1); - // + // Дата и время через один месяц d2 := d1.AddMonths(1); Writeln(d2); - // 12 + // Дата и время на 12 часов раньше d2 := d1.AddHours(-12); Writeln(d2); - // - (, ,) + // Формирование даты - вызов конструктора объекта (год, месяц,число) d3 := new DateTime(2001, 1, 1); Writeln(d3); - // , ( ) + // Определение времени, прошедшего с начала тысячелетия (разность дат) ts := d1.Subtract(d3); - // ( - ) + // Промежуток времени в днях (результат - вещественное число) Writeln(ts.TotalDays); - // , , + // Промежуток времени в днях, часах, минутах и секундах Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas index d385a110e..840d6506d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser {$apptype windows} {$reference System.Windows.Forms.dll} diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas index 303712765..dd1474e39 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/LinkedList.pas @@ -1,4 +1,4 @@ -// LinkedList - - +// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора uses System.Collections,System.Collections.Generic; procedure print(l: ICollection); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas index f9741e92f..99deddba5 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/Reflection.pas @@ -1,4 +1,4 @@ -// . DateTime +// Отражение типов. Выводятся все члены типа DateTime uses System,System.Reflection; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas index aaec8b62b..a0f0c2c8c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!MainFeatures/07_NetLibs/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения {$apptype windows} {$reference System.Windows.Forms.dll} @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas index 42322042f..ac5fe9ee8 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign1.pas @@ -1,12 +1,12 @@ -// +// Использование вспомогательных переменных var r: real; begin - write(' r: '); + write('Введите r: '); readln(r); - var r2,r4,r8: real; // + var r2,r4,r8: real; // вспомогательные переменные r2 := r * r; r4 := r2 * r2; r8 := r4 * r4; - writeln(r,' 8 = ',r8); + writeln(r,' в степени 8 = ',r8); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas index e255b6f1f..13b2ad3a9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Assign2.pas @@ -1,12 +1,12 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real; // + var v: real; // вспомогательная переменная v := x; x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas index 69455e9c0..109d1f089 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Увеличение в 3 раза writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas index 8549b432e..630763ae6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Boolean1.pas @@ -1,16 +1,16 @@ -// . and, or not +// Логический тип. Логические выражения с and, or и not var b: boolean; x: integer; begin - write(' x ( 1 9): '); + write('Введите x (от 1 до 9): '); readln(x); b := x=5; writeln('x=5? ',b); b := (x>=3) and (x<=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := (x=3) or (x=4) or (x=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := not Odd(x); - writeln('x - ? ',b); + writeln('x - четное? ',b); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas index 1a3aac935..f6ba098ae 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations1.pas @@ -1,7 +1,7 @@ -// +// Вывод результатов вычислений begin - writeln(':'); -// + writeln('Вычисления:'); +// Вывод пустой строки writeln; writeln('121 + 363 = ',121+363); writeln('121 - 363 = ',121-363); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas index a870b6f5f..ff692f587 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations2.pas @@ -1,10 +1,10 @@ -// . +// Вывод результатов вычислений. Используются именованные константы const a = 121; b = 363; begin - writeln(':'); + writeln('Вычисления:'); writeln; writeln(a,' + ',b,' = ',a+b); writeln(a,' - ',b,' = ',a-b); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas index e76a5c373..255a9b131 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Calculations3.pas @@ -1,8 +1,8 @@ -// . +// Вывод результатов вычислений. Используются переменные и процедура ввода var a,b: integer; begin - writeln(' a b:'); + writeln('Введите a и b:'); readln(a,b); writeln; writeln(a,' + ',b,' = ',a+b); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas index 73461e4ad..37fc92a04 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod1.pas @@ -1,10 +1,10 @@ -// div mod +// Операции div и mod var a: integer; begin - write(' a: '); + write('Введите a: '); readln(a); - writeln(' : ',a mod 10); - writeln(' : ',a div 10); - writeln(' a , 0: ',a mod 2); + writeln('Последняя цифра числа: ',a mod 10); + writeln('Число без последней цифры: ',a div 10); + writeln('Если число a четно, то 0: ',a mod 2); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas index 8ba18f637..7a008006b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/DivMod2.pas @@ -1,11 +1,11 @@ -// div mod +// Операции div и mod var a: integer := 247; begin - write(' : '); - // + write('Цифры числа в обратном порядке: '); + // Выводим последнюю цифру write(a mod 10,' '); - // + // Отбрасываем последнюю цифру a := a div 10; write(a mod 10,' '); a := a div 10; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas index b1bce0920..0ce413328 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/HelloWorld.pas @@ -1,5 +1,5 @@ -// +// Первая программа program HelloWorld; begin - writeln(', !'); + writeln('Привет, мир!'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas index 1f982a093..e8738e012 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random1.pas @@ -1,13 +1,13 @@ -// +// Генерация случайного числа var i: integer; r: real; begin i := Random(100); - writeln(' 0..99: ',i); + writeln('Случайное целое в диапазоне 0..99: ',i); i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); r := Random; - writeln(' [0,1): ',r); + writeln('Случайное вещественное в диапазоне [0,1): ',r); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas index 7e06c292a..edb94ebd9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Random2.pas @@ -1,10 +1,10 @@ -// +// Бросание кубиков var k1,k2: integer; begin k1 := Random(1,6); k2 := Random(1,6); - writeln(' : ',k1,' ',k2); - writeln(' : ',k1+k2); + writeln('Очки на кубиках: ',k1,' ',k2); + writeln('Сумма очков: ',k1+k2); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas index d3c73b506..a214b05b6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/ReadString.pas @@ -1,8 +1,8 @@ -// +// Ввод строки var s: string; begin - write(' : '); + write('Введите Ваше имя: '); readln(s); - writeln(', ',s); + writeln('Здравствуйте, ',s); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas index 5c47af256..5a381c181 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/Shl.pas @@ -1,6 +1,6 @@ -// shl +// Демонстрация операции shl begin - writeln(' '); + writeln('Степени двойки'); writeln(' n 2^n'); for var i:=0 to 30 do writeln(i:2,(1 shl i):12); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas index 369ddac57..5d820f901 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandFun.pas @@ -1,14 +1,14 @@ -// +// Стандартные функции var x: real; begin - write(' x: '); + write('Введите x: '); readln(x); - writeln(' ',x,' ',sqr(x)); - writeln(x,' 5 ',power(x,5)); - writeln(' ',x,' ',sqrt(x)); - writeln(' ',x,' ',abs(x)); - writeln(' ',x,' ',ln(x)); - writeln(' ',x,' ',sin(x)); - writeln(' ',x,' ',cos(x)); + writeln('Квадрат ',x,' равен ',sqr(x)); + writeln(x,' в степени 5 равно ',power(x,5)); + writeln('Квадратный корень из ',x,' равен ',sqrt(x)); + writeln('Модуль ',x,' равен ',abs(x)); + writeln('Натуральный логарифм ',x,' равен ',ln(x)); + writeln('Синус ',x,' равен ',sin(x)); + writeln('Косинус ',x,' равен ',cos(x)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas index d301057c1..f267a010f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/StringPlus.pas @@ -1,4 +1,4 @@ -// +// Сложение строк var s1: string := 'Pascal'; var s2: string := 'NET'; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas index 12be8c1c3..81b23cce6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/01_First/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); - // + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas index 2c81d9e25..89b2f9ac6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError1.pas @@ -1,5 +1,5 @@ -// . -// , , +// Исправьте ошибку компиляции. +// Обратите внимание, что курсор позиционируется в конце слова, вызвавшего ошибку var i: integer begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas index 5644dc696..965d64a33 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError2.pas @@ -1,4 +1,4 @@ -// . r +// Исправьте ошибки компиляции. Опишите переменную r begin r := 2.5; witeln(r); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas index a054bef9b..77ac7ce3b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError3.pas @@ -1,4 +1,4 @@ -// . "" +// Исправьте ошибку компиляции. Не всегда надо "верить" тексту ошибки var k: real; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas index 64d349a40..f4ad2ff53 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/CompilerError4.pas @@ -1,4 +1,4 @@ -// , x +// Исправьте ошибки компиляции, изменив тип переменной x var x: integer; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas index 1bd7d699d..07b8eb262 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError1.pas @@ -1,5 +1,5 @@ -// -// , +// Введите не число +// Посмотрите, как выглядит ошибка при выполнении программы var i: integer; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas index 5a2a0cc69..c505b4c3f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError2.pas @@ -1,4 +1,4 @@ -// , 0 +// Посмотрите, как выглядит ошибка выполнения при целочисленном делении на 0 var i: integer := 0; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas index a63a7d716..bd7e13190 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError3.pas @@ -1,4 +1,4 @@ -// 0 +// При обычном делении на 0 ошибки не возникает var r: real := 0; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas index de00f217a..e5d2f7412 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/02_Errors/RuntimeError4.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(sqrt(-1)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas index 9f60a20fe..fde4bef24 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/DMa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L DM +// Исполнитель Чертежник - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания uses Drawman; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas index 5162e32a4..e7c59265c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/03_Robot_Drawman/RBa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L RB +// Исполнитель Робот - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания uses Robot; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas index 1a55d87d0..1b3eb122e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr1.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Линии. Размеры окна. Заголовок окна uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Первая графическая программа'; Line(0,0,Window.Width-1,Window.Height-1); Line(0,Window.Height-1,Window.Width-1,0); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas index a4f21e187..0471c2aa8 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr2.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Точка. Случайный цвет. Скорость работы uses GraphABC,Utils; begin for var i:=1 to 100000 do SetPixel(Random(Window.Width),Random(Window.Height),clRandom); - writeln(' : ',Milliseconds/1000,' '); + writeln('Время работы: ',Milliseconds/1000,' секунд'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas index 66e1f3881..de0d7ae58 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr3.pas @@ -1,8 +1,8 @@ -// . +// Графика. Свойства кисти и пера uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Свойства кисти и пера'; Pen.Color := Color.Red; Pen.Width := 3; Pen.Style := psDashDot; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas index e6c2025a1..7c060dd57 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr4.pas @@ -1,8 +1,8 @@ -// . Draw Fill - +// Графика. Draw и Fill - процедуры uses GraphABC; begin - Window.Title := 'Draw Fill - '; + Window.Title := 'Draw и Fill - процедуры'; for var i := 1 to 100 do begin Pen.Color := clRandom; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas index 4cbaac953..979566e61 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr5.pas @@ -1,10 +1,10 @@ -// . Pie +// Графика. Pie uses GraphABC; const r = 200; begin - Window.Title := ' '; + Window.Title := 'Круговая гистограмма'; var x := Window.Center.X; var y := Window.Center.Y; Brush.Color := clRandom; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas index b127200f3..6430311b0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr6.pas @@ -1,8 +1,8 @@ -// . +// Графика. Прозрачность uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация прозрачности'; Brush.Color := clRed; FillRectangle(50,50,100,Window.Height - 50); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas index ef1f7ca6a..3eacff030 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr7.pas @@ -1,4 +1,4 @@ -// . +// Графика. Сохраниение изображения графического окна в файл и загрузка из файла uses GraphABC; const @@ -6,7 +6,7 @@ const filename = 'GraphWindow.bmp'; begin - Window.Title := 'Window.Save Window.Load'; + Window.Title := 'Window.Save и Window.Load'; SetWindowSize(320,240); for var x:=0 to Window.Width - 1 do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas index 278994fb4..678a0a382 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/Gr8.pas @@ -1,9 +1,9 @@ -// . +// Графика. Сглаживание uses GraphABC; begin - Window.Title := ' '; - TextOut(40,20,' '); + Window.Title := 'Демонстрация сглаживания'; + TextOut(40,20,'Со сглаживанием'); Pen.Width := 2; Ellipse(40,60,300,200); @@ -11,7 +11,7 @@ begin Line(600,130,340,200); SetSmoothingOff; - TextOut(40,240,' '); + TextOut(40,240,'Без сглаживания'); Ellipse(40,280,300,420); Line(340,280,600,350); Line(600,350,340,420); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas index 71dde4512..67e0b2d54 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim1.pas @@ -1,8 +1,8 @@ -// . "" . +// Графика. Пример "наивной" анимации. Эффект мерцания uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация простой анимации'; var y := 200; Brush.Color := clGreen; for var x := 70 to 500 do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas index bad081cf2..b88e17046 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrAnim2.pas @@ -1,17 +1,17 @@ -// . LockDrawing-Redraw. +// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Анимация без мерцания'; var y := 200; Brush.Color := clGreen; - // + // Отключаем рисование в окне LockDrawing; for var x := 70 to 500 do begin Window.Clear(clWhite); Circle(x,y,50); - // + // Перерисовываем окно из внеэранного буфера Redraw; Sleep(3); end; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas index 169a52366..8da8ac886 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord1.pas @@ -1,15 +1,15 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; - // + // Поворот Coordinate.Angle := 30; - // + // Масштаб Coordinate.Scale := 3; - // - + // Начало координат - в центре окна Coordinate.Origin := Window.Center; Brush.Color := clMoneyGreen; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas index d5e2ba3f8..e81b9b651 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrCoord2.pas @@ -1,8 +1,8 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; Coordinate.Origin := Window.Center; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas index 54600ef1d..40446966c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont1.pas @@ -1,8 +1,8 @@ -// +// Демонстрация работы со шрифтами uses GraphABC; begin - Window.Title := ''; + Window.Title := 'Шрифты'; SetWindowSize(760,460); Font.Name := 'Arial'; Font.Style := fsBoldItalic; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas index 04b15835c..17947a8ff 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrFont2.pas @@ -1,10 +1,10 @@ -// TextWidth TextHeight +// Демонстрация использования TextWidth и TextHeight uses GraphABC; const s = 'Width & Height'; begin - Window.Title := ' '; + Window.Title := 'Текст по центру'; Window.IsFixedSize := True; SetWindowSize(700,300); Window.Center; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas index 7abc91298..68f80312d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04_Graphics/GrPoly.pas @@ -1,11 +1,11 @@ -// Polyline, Polygon, Curve, ClosedCurve -// +// Процедуры Polyline, Polygon, Curve, ClosedCurve +// Перенос начала системы координат uses GraphABC; var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); begin - Window.Title := ' '; + Window.Title := 'Рисование по массиву точек'; Brush.Color := Color.Beige; Coordinate.SetOrigin(60,30); Polyline(a); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas index dda84ddc0..0fe49e801 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/04a_ABCObjects/ABC1.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; @@ -13,7 +13,7 @@ var z: StarABC; begin - Window.Title := 'ABCObjects: '; + Window.Title := 'ABCObjects: свойства графических объектов'; z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); r := new RectangleABC(100,100,200,100,Color.Gold); Pause; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas index 8c5bfd0e0..9f2c5a27c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case1.pas @@ -1,15 +1,15 @@ -// +// Оператор выбора var x: integer; begin - writeln(' (1..5): '); + writeln('Введите оценку (1..5): '); readln(x); case x of - 1: writeln(''); - 2: writeln(''); - 3: writeln(''); - 4: writeln(''); - 5: writeln(''); - else writeln(' '); + 1: writeln('Единица'); + 2: writeln('Двойка'); + 3: writeln('Тройка'); + 4: writeln('Четверка'); + 5: writeln('Пятерка'); + else writeln('Такой оценки нет'); end; end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas index 5bad5a41d..a6b257bbd 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case2.pas @@ -1,12 +1,12 @@ -// +// Оператор выбора var day: integer; begin - writeln(' (1..7): '); + writeln('Введите номер дня недели (1..7): '); readln(day); case day of - 1..5: writeln(''); - 6,7: writeln(''); - else writeln(' '); + 1..5: writeln('Будний'); + 6,7: writeln('Выходной'); + else writeln('Неверный день недели'); end; end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas index 7e7613a2f..bd061c036 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case3.pas @@ -1,12 +1,12 @@ -// +// Оператор выбора var c: char; begin - writeln(' : '); + writeln('Введите символ: '); readln(c); case c of - '0'..'9': writeln(' '); - 'a'..'z','A'..'Z': writeln(' '); - ''..'',''..'': writeln(' '); + '0'..'9': writeln('Это цифра'); + 'a'..'z','A'..'Z': writeln('Это английская буква'); + 'а'..'я','А'..'Я': writeln('Это русская буква'); end; end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas index 49673d294..ce699c1ca 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/Case4.pas @@ -1,4 +1,4 @@ -// . +// Оператор выбора. Случайная фигура uses GraphABC; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas index 53dd71338..a76e75399 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If1.pas @@ -1,4 +1,4 @@ -// . +// Условный оператор. Полная форма var x: integer := 5; y: integer := 3; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If2.pas index 04caabbf0..e0274b8e0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If2.pas @@ -1,9 +1,9 @@ -// . +// Условный оператор. Сокращенная форма var pass: string; begin - writeln(' : '); + writeln('Введите пароль: '); readln(pass); if pass = 'NET' then - writeln(' '); + writeln('Пароль правильный'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If3.pas index f7a241c26..ef8a1e72d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If3.pas @@ -1,14 +1,14 @@ -// . or and +// Условный оператор. Логические условия с or и and var x: integer; begin - writeln(' x ( 1 99): '); + writeln('Введите x (от 1 до 99): '); readln(x); if (x>=1) and (x<=9) then - writeln(' '); - // Odd - , True x - + writeln('Однозначное число'); + // Odd - функция, возвращающая True только если x - нечетно if Odd(x) and (x>=10) and (x<=99) then - writeln(' '); + writeln('Нечетное двузначное число'); if (x=3) or (x=9) or (x=27) or (x=81) then - writeln(' '); + writeln('Степень тройки'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas index ae25cbd92..41008a92a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If4.pas @@ -1,18 +1,18 @@ -// +// Вложенные условные операторы var x: integer; begin - writeln(' (1..5): '); + writeln('Введите оценку (1..5): '); readln(x); if (x=1) then - writeln('') + writeln('Единица') else if (x=2) then - writeln('') + writeln('Двойка') else if (x=3) then - writeln('') + writeln('Тройка') else if (x=4) then - writeln('') + writeln('Четверка') else if (x=5) then - writeln('') - else writeln(' ') + writeln('Пятерка') + else writeln('Такой оценки нет') end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas index 8371ce053..074bf783b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/05_IfCaseBoolean/If5.pas @@ -1,19 +1,19 @@ -// . +// Вложенные условные операторы. Антонимы var s: string; begin - writeln(' (,,,,): '); + writeln('Введите слово из списка (черный,высокий,свет,радость,умный): '); readln(s); - write(': '); - if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else writeln(' ') + write('Антоним: '); + if (s='черный') then + writeln('белый') + else if (s='высокий') then + writeln('низкий') + else if (s='свет') then + writeln('тьма') + else if (s='радость') then + writeln('горе') + else if (s='умный') then + writeln('глупый') + else writeln('Такого слова в списке нет') end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas index 8e22a54a8..5545f146f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1.pas @@ -1,21 +1,21 @@ -// for +// Цикл for const n = 20; var i: integer; begin - writeln(' 1 ',n,':'); + writeln('Числа от 1 до ',n,':'); for i:=1 to n do write(i,' '); writeln; writeln; - writeln(' ',n,' 1:'); + writeln('Числа от ',n,' до 1:'); for i:=n downto 1 do write(i,' '); writeln; writeln; - writeln(' :'); + writeln('Маленькие английские буквы:'); for c: char := 'a' to 'z' do write(c,' '); writeln; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas index ecaa51b01..600a4a7bc 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For1a.pas @@ -1,16 +1,16 @@ -// for. 2 +// Цикл for. Шаг цикла 2 const n = 25; var i: integer; begin - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); for i:=1 to n do write(2*i,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); var x := 2; for i:=1 to n do begin @@ -20,13 +20,13 @@ begin writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); for i:=1 to n do write(2*i-1,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); x := 1; for i:=1 to n do begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas index 02e54e033..f94af5449 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For2.pas @@ -1,15 +1,15 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; var i: integer; begin - write(' : '); + write('Случайные оценки: '); for i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas index 60df12fdc..945e1ce5b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For3.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; begin for var i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas index 98749099e..d10ab5ca5 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For4.pas @@ -1,9 +1,9 @@ -// for. +// ÷икл for. —умма всех двузначных чисел var s: integer; begin s := 0; for var i:=10 to 99 do - s := s + i; // s += i - writeln(' = ',s); + s := s + i; // можно s += i + writeln('—умма всех двузначных чисел = ',s); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas index c8d828d7f..5b1a9a4cd 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For5.pas @@ -1,13 +1,13 @@ -// for. a n +// ÷икл for. a в степени n var a: real; n: integer; begin - write(' a,n: '); + write('¬ведите a,n: '); readln(a,n); var p: real := 1; for var i:=1 to n do - p := p * a; // p *= a - writelnFormat('{0} {1} = {2}',a,n,p); + p := p * a; // можно p *= a + writelnFormat('{0} в степени {1} = {2}',a,n,p); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas index 794b027bf..5167640b8 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For8.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Максимум из введенных чисел const n = 10; var max: real; begin - writelnFormat(' {0} ',n); - max := integer.MinValue; // + writelnFormat('Введите {0} чисел',n); + max := integer.MinValue; // самое маленькое целое число for var i:=1 to n do begin var x: real; @@ -13,5 +13,5 @@ begin if x>max then max := x; end; - writeln(' ',max); + writeln('Максимальное равно ',max); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas index 4e807283f..7ca1357f1 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/For9.pas @@ -1,4 +1,4 @@ -// for. . break +// Цикл for. Поиск значения. Оператор break const n = 10; var @@ -6,9 +6,9 @@ var found: boolean; begin - writeln(' : '); + writeln('Введите число для поиска: '); readln(k); - writelnFormat(' {0} ',n); + writelnFormat('Введите {0} чисел',n); found := False; for var i:=1 to n do begin @@ -21,6 +21,6 @@ begin end; end; if found then - writeln('') - else writeln(' '); + writeln('Найдено') + else writeln('Не найдено'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas index 411feb626..c6f2b1322 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor1.pas @@ -1,8 +1,8 @@ -// for. +// Вложенные циклы for. Таблица умножения const n = 9; begin - writeln(' '); + writeln('Таблица умножения'); for var i:=1 to n do begin for var j:=1 to n do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas index ed75c12e2..002e2d5c0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForFor2.pas @@ -1,4 +1,4 @@ -// for +// Вложенные циклы for const n = 6; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas index 7097f70be..a7028177b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/ForGra1.pas @@ -1,4 +1,4 @@ -// for. +// Вложенные циклы for. Сетка из квадртов uses GraphABC; const diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas index ba48b426f..a6713302b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo1.pas @@ -1,14 +1,14 @@ -// +// Алгоритм определения простоты числа var N: integer; IsSimple: boolean; begin - writeln(' : '); + writeln('Введите число: '); readln(N); IsSimple := True; - for var i:=2 to round(sqrt(N)) do // , <= (sqrt(N)) + for var i:=2 to round(sqrt(N)) do // если число составное, то один из его сомножителей <= (sqrt(N)) if N mod i = 0 then begin IsSimple := False; @@ -16,6 +16,6 @@ begin end; if IsSimple then - writeln(' ',N,' ') - else writeln(' ',N,' '); + writeln('Число ',N,' простое') + else writeln('Число ',N,' составное'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas index 8028f87e4..1d02bcd1f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/algo2.pas @@ -1,14 +1,14 @@ -// x +// Алгоритм вычисления значения многочлена в точке x по схеме Горнера const n=5; var x,a: real; begin - writeln(' x: '); + writeln('Введите значение x: '); readln(x); - writeln(' (',n+1,' ): '); + writeln('Введите коэффициенты многочлена (',n+1,' штук): '); read(a); var s := a; for var i:=1 to n do @@ -17,5 +17,5 @@ begin s := s*x + a; end; - writeln(' ',x,' ',s); + writeln('Значение многочлена в точке ',x,' равно ',s); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas index f5bb0a55e..6621f57de 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat1.pas @@ -1,12 +1,12 @@ -// repeat. +// Цикл repeat. Контроль ввода var mark: integer; begin repeat - writeln(' (2..5): '); + writeln('Введите оценку (2..5): '); readln(mark); if (mark<2) or (mark>5) then - writeln(' . '); + writeln('Оценка неверная. Повторите ввод'); until (mark>=2) and (mark<=5); - writeln(' ',mark); + writeln('Вы ввели оценку ',mark); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas index da13faadc..da416f808 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/repeat2.pas @@ -1,13 +1,13 @@ -// repeat. +// Цикл repeat. Алгоритм Евклида нахождения наибольшего общего делителя var A,B: integer; begin - write(' : '); + write('Введите два целых числа: '); readln(A,B); repeat var C := A mod B; A := B; B := C; until B=0; - write(' = ',A); + write('Наибольший общий делитель = ',A); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas index 46ca9f83a..bf8f62300 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while1.pas @@ -1,8 +1,8 @@ -// while. 3 +// Цикл while. Вывод чисел с шагом 3 const n = 60; begin - writeln(' 1 ',n,', 3'); + writeln('Числа от 1 до ',n,', кратные 3'); var x := 3; while x<=n do begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas index f24c07321..ff9996415 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while2.pas @@ -1,6 +1,6 @@ -// while. 2 +// Цикл while. Степени 2 begin - writeln(' 2'); + writeln('Степени 2'); var i := 1; var p := 1; while i<32 do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas index 9f6819686..35345d005 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/06_ForWhileRepeat/while3.pas @@ -1,10 +1,10 @@ -// while. +// ÷икл while. —умма цифр положительного числа var m: integer; begin - writeln(' : '); + writeln('¬ведите положительное число: '); read(m); - write(' : '); + write('÷ифры числа в обратном пор¤дке: '); var s := 0; while m>0 do begin @@ -14,5 +14,5 @@ begin m := m div 10; end; writeln; - writeln(' = ',s); + writeln('—умма цифр = ',s); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas index bfa54f96e..0093f5157 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char1.pas @@ -1,4 +1,4 @@ -// Ord Chr +// Стандартные функции Ord Chr var i: integer; c: char; @@ -6,8 +6,8 @@ var begin c := 'z'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); i := 193; c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas index 9d0b9dc50..d89fd87a7 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char2.pas @@ -1,13 +1,13 @@ -// OrdUnicode ChrUnicode +// Стандартные функции OrdUnicode ChrUnicode var i: integer; c: char; begin - c := ''; + c := 'Д'; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); i := 1046; c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas index d58cb25ab..25dd82795 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/Char3.pas @@ -1,9 +1,9 @@ -// UpperCase LowerCase +// Стандартные функции UpperCase LowerCase var c: char; begin - c := ''; - writelnFormat(' {0} : {1}',c,UpperCase(c)); + c := 'д'; + writelnFormat('Символ {0} в верхнем регистре: {1}',c,UpperCase(c)); c := 'F'; - writelnFormat(' {0} : {1}',c,LowerCase(c)); + writelnFormat('Символ {0} в нижнем регистре: {1}',c,LowerCase(c)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas index 420d2f615..220cb62fa 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/CharTable.pas @@ -1,4 +1,4 @@ -// +// Таблица символов и их кодов begin for var i:=32 to 255 do begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas index 201a1407a..d6785340d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String1.pas @@ -1,4 +1,4 @@ -// . + +=. +// Строки. Операция + и оператор +=. Доступ по индексу var s: string := 'Pascal'; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas index aeb792233..a2a26c791 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String2.pas @@ -1,4 +1,4 @@ -// . SetLength, Length Length +// Строки. Процедура SetLength, функция Length и свойство Length var s: string; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas index 75982b627..5a2a97b3e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String3.pas @@ -1,4 +1,4 @@ -// . +// Строки. Строка может иметь произвольную длину var s: string; begin @@ -7,6 +7,6 @@ begin s += s; s += s; s += s; - writeln(' = ',s.Length); - writeln('C: ',s); + writeln('Длина строки = ',s.Length); + writeln('Cтрока: ',s); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas index e8553759f..7c765fc61 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String4.pas @@ -1,4 +1,4 @@ -// . 255 +// Строки фиксированной длины. Длина не может быть больше 255 var s: string[9]; s1: shortstring; // shortstring = string[255] @@ -6,7 +6,7 @@ var begin slong := 'PascalABC.NET'; - writeln('C : ',slong); + writeln('Cтрока произвольной длины: ',slong); s := slong; - writeln('C : ',s); + writeln('Cтрока фиксированной длины обрезается: ',s); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas index 615d927e3..e4e667578 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String5.pas @@ -1,18 +1,18 @@ -// . +// Строки. Стандартные подпрограммы работы со строками var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := Trim(s); - writeln(' Trim: ''',s,''''); + writeln('После вызова функции Trim: ''',s,''''); var p := Pos(s1,s); - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); Delete(s,7,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); Insert('ABC.',s,7); - writeln(' ''ABC.'': ',s); - writeln(' : ',Copy(s,1,9)); - writeln(' : ',Copy(s,11,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',Copy(s,1,9)); + writeln('Последняя часть строки: ',Copy(s,11,3)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas index 69cf7ddb1..609eb8234 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/String6.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas index 7fe544add..484f91218 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := IntToStr(i); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '567'; i := StrToInt(s); - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas index 4f4e00fe4..5dfe155aa 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger2.pas @@ -1,18 +1,18 @@ -// <-> (Val Str) +// Преобразование целое <-> строка в старом стиле (Val и Str) var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; Str(i,s); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; var err: integer; Val(s,i,err); if err=0 then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas index 60f5db050..ce86a50a3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringInteger3.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas index 4cad78fbe..4b1037b65 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/StringReal1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование вещественное <-> строка var s: string; r: real; begin - // + // Преобразование целого в строку r := 3.1415; s := FloatToStr(r); - writelnFormat(': {0}. : ''{1}''',r,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',r,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '3.1415'; r := StrToFloat(s); - writelnFormat(': ''{0}''. : {1}',s,r); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,r); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas index d2fde4a79..2c7303586 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/07_CharString/UpLowCase.pas @@ -1,4 +1,4 @@ -// UpperCase, LowerCase +// Использование стандартных функций UpperCase, LowerCase var c: char; begin @@ -8,13 +8,13 @@ begin for c:='A' to 'Z' do write(LowerCase(c)); writeln; - for c:='' to '' do + for c:='А' to 'Я' do write(UpperCase(c)); writeln; - for c:='' to '' do + for c:='а' to 'я' do write(LowerCase(c)); writeln; - var s := ' '; + var s := 'Папа у Васи силён в математике'; s := UpperCase(s); writeln(s); s := LowerCase(s); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas index 74b93d8ef..9aeffb0e6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun1.pas @@ -1,4 +1,4 @@ -// . +// Определение функции. Вывод таблицы ее значений function MyFun(x: real): real; begin @@ -13,7 +13,7 @@ const begin var h := (b-a)/n; var x := a; - writeln(' MyFun:'); + writeln('Таблица значений функции MyFun:'); for var i := 0 to n do begin writeln(x:5:2,MyFun(x):10:4); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas index 099b7c14e..4994822e4 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Fun2.pas @@ -1,4 +1,4 @@ -// Power +// Функция Power function Power(x: real; n: integer): real; begin @@ -13,5 +13,5 @@ var begin x := 2; n := 5; - writelnFormat('{0} {1} = {2}',x,n,Power(x,n)); + writelnFormat('{0} в степени {1} = {2}',x,n,Power(x,n)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas index 46c6d9d06..95f40b8a0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc1.pas @@ -1,4 +1,4 @@ -// +// Параметры процедур procedure Operations(a,b: integer); begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas index 58e44205f..498b595b6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc2.pas @@ -1,4 +1,4 @@ -// - +// Параметры-переменные procedure DivMod(a,b: integer; var d,m: integer); begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas index 11113aae9..ccbdb03a0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/08_ProcFunc/Proc3.pas @@ -1,4 +1,4 @@ -// +// Упаковка параметров в запись uses GraphABC; type diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas index a973c54d9..1a683cae4 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr1.pas @@ -1,6 +1,6 @@ -// . -// SetLength -// foreach ( ) +// Использование динамического массива. +// Процедура SetLength выделения памяти под динамический массив +// Оператор foreach (массив доступен только на чтение) var a: array of integer; begin @@ -8,7 +8,7 @@ begin SetLength(a,n); for var i:=0 to a.Length-1 do a[i] := Random(1,9); - writeln(' : '); + writeln('Содержимое случайного динамического массива целых: '); foreach x: integer in a do write(x,' '); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas index b4bc25edf..b5e877dc4 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr2.pas @@ -1,17 +1,17 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln(' :'); + writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:'); var n := 20; - a := new integer[n]; // + a := new integer[n]; // Другой способ выделения памяти for var i:=0 to a.Length-1 do a[i] := i; - writeln(' b[5]: a[5]=',a[5]); + writeln('До присваивания b[5]: a[5]=',a[5]); var b: array of integer; b := a; b[5] := 666; - writeln(' b[5]: a[5]=',a[5]); + writeln('После присваивания b[5]: a[5]=',a[5]); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas index 19d53438f..0f2acfb79 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr3.pas @@ -1,8 +1,8 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln('SetLength :'); + writeln('SetLength при повторном вызове не портит старые элементы:'); SetLength(a,5); for var i:=0 to a.Length-1 do a[i] := i+1; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas index 2679cb1ab..47fb8c953 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArr4.pas @@ -1,13 +1,13 @@ -// +// Передача динамического массива в качестве параметра -procedure WriteArr(a: array of integer); // var , .. +procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект begin foreach x: integer in a do write(x,' '); writeln; end; -procedure CreateRandomArr(var a: array of integer; n: integer); // var , .. +procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив begin a := new integer[n]; for var i:=0 to a.Length-1 do @@ -17,7 +17,7 @@ end; var a: array of integer; begin - writeln(' : '); + writeln('Случайный целый массив: '); CreateRandomArr(a,30); WriteArr(a); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas index 27ec4523e..f8e2d5104 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr1.pas @@ -1,4 +1,4 @@ -// +// Ошибка невыделения памяти для динамического массива var a: array of integer; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas index 66511c0b0..cd1da4b02 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/DynArrErr2.pas @@ -1,4 +1,4 @@ -// +// Ошибка выхода за границы диапазона для динамического массива var a: array of integer; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas index 89335b549..a0f618c87 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/SortByChoice.pas @@ -1,4 +1,4 @@ -// +// Сортировка выбором procedure SortByChoice(a: array of real); begin for var i:=0 to a.Length-2 do @@ -34,9 +34,9 @@ var a: array of real; begin a := CreateRandomArr(20); - writeln(' : '); + writeln('Содержимое массива: '); WriteArr(a); SortByChoice(a); - writeln(' : '); + writeln('После сортировки выбором: '); WriteArr(a); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr1.pas index 998aaa7f0..f20116db9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr1.pas @@ -1,4 +1,4 @@ -// +// Использование массива const n=10; var a: array [1..n] of real; @@ -6,7 +6,7 @@ var a: array [1..n] of real; begin for var i:=1 to n do a[i] := Random*10; - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); foreach x: real in a do write(x:4:2,' '); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr2.pas index b4a567dd0..49ce9793c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr2.pas @@ -1,4 +1,4 @@ -// +// Передача массива как параметра подпрограмм const n=10; type RealArr = array [1..n] of real; @@ -19,6 +19,6 @@ var a: RealArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); PrintArr(a,n); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr3.pas index e34c7a385..1d382c6c1 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Arrays/StaticArr3.pas @@ -1,4 +1,4 @@ -// exit +// Процедура exit выхода из подпрограммы const n=10; type IntArr = array [1..n] of integer; @@ -23,7 +23,7 @@ begin if a[i]=k then begin Result := i; - exit; // + exit; // выход из процедуры end; end; @@ -31,11 +31,11 @@ var a: IntArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Случайный массив целых: '); PrintArr(a,n); var ind := IndexOf(a,n,7); if ind>0 then - writeln(' 7 ', ind) - else writeln(' 7 '); + writeln('Индекс первого элемента 7 равен ', ind) + else writeln('Элемент 7 отсутствует'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas index 95f73275e..fb2a6d4f2 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MainInitFinDemo.pas @@ -1,7 +1,7 @@ -// -// MyUnit, " " +// Демонстрация секций инициализации и финализации модулей +// Откройте модуль MyUnit, нажав на имени модуля правой мышью и выбрав пункт "Перейти к определению" uses MyUnit; begin - writeln(' ') + writeln('Основная программа') end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas index 31bbfc876..1887dbc7f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitInitFin/MyUnit.pas @@ -1,7 +1,7 @@ unit MyUnit; initialization - writeln(' . ') + writeln('Секция инициализации. Выполняется до начала основной программы') finalization - writeln(' . ') + writeln('Секция финализации. Выполняется после окончания основной программы') end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas index 6dca9b8b8..4f881ad42 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitNames/MainSameNames.pas @@ -1,7 +1,7 @@ -// -uses MyA,MyB; // , +// Алгоритм поиска имен в модулях +uses MyA,MyB; // Имена вначале ищутся в основной программе, а затем в модулях в порядке справа налево begin - p; // MyB.p - MyA.p; // MyA.p, p, + p; // Вызывается MyB.p + MyA.p; // Если надо вызвать MyA.p, следует использовать имя p, уточненное именем модуля end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas index 7b6fc9cba..09db6bfe0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MainProgram.pas @@ -1,13 +1,13 @@ -uses MyUnit; // +uses MyUnit; // подключили модуль const Sz = 10; var a: IntArr; begin - Assert(sz<=Size,' <='+Size.ToString); + Assert(sz<=Size,'Размер массива должен быть <='+Size.ToString); FillArr(a,Sz); - writeln(' : '); + writeln('Содержимое массива: '); WriteArr(a,Sz); - writeln(' : ',Min(a,Sz)); + writeln('Минимальный элемент: ',Min(a,Sz)); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas index 5fcce6515..87c14332c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/09_Units/UnitStructure/MyUnit.pas @@ -1,5 +1,5 @@ -/// -unit MyUnit; // +/// Модуль упрощенной структуры +unit MyUnit; // имя модуля должно совпадать с именем файла const Size = 100; @@ -7,15 +7,15 @@ type IntArr = array [1..Size] of integer; var Delimiter: string := ' '; -// -/// +// Документирующие комментарии отображаются при наведении на имя курсора мыши +/// Заполняет массив случайными числами procedure FillArr(var a: IntArr; n: integer); begin for var i:=1 to n do a[i] := Random(100); end; -/// +/// Выводит массив procedure WriteArr(const a: IntArr; n: integer); begin for var i:=1 to n do @@ -23,7 +23,7 @@ begin writeln; end; -/// +/// Возвращает минимальный элемент в массиве function Min(const a: IntArr; n: integer): integer; begin Result := a[1]; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas index 31cb1448c..9033bd4d8 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr1.pas @@ -1,4 +1,4 @@ -// . goto +// Поиск значения в случайной матрице. Использование оператора goto const sz = 10; m = 4; @@ -11,12 +11,12 @@ label 1; var matr: Matrix; begin - // m x n + // Заполнение матрицы m x n случайными числами for var i := 1 to m do for var j := 1 to n do matr[i,j] := Random(100); - // + // Вывод матрицы for var i := 1 to m do begin for var j := 1 to n do @@ -24,17 +24,17 @@ begin writeln; end; - // 5? + // Есть ли в матрице элемент 5? var found5 := False; for var i := 1 to m do for var j := 1 to n do if matr[i,j]=5 then begin found5 := True; - goto 1; // ! + goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу end; 1: if found5 then - writeln(' 5 ') - else writeln(' 5 ') + writeln('Элемент 5 найден') + else writeln('Элемент 5 не найден') end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas index b0161cdfd..42df846a3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/10_Matrices/Matr2.pas @@ -1,4 +1,4 @@ -// +// Матрица как динамический массив массивов type Matrix = array of array of integer; function CreateMatrix(m,n: integer): Matrix; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas index b9d3d0a87..db92312ee 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum1.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas index aca2145b3..77eef43d4 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/11_Enums/Enum2.pas @@ -1,4 +1,4 @@ -// +// ѕеречислимый тип uses System; type Months = (January,February,March,April,May,June,July,August,September,October,November,December); @@ -6,14 +6,14 @@ type Months = (January,February,March,April,May,June,July,August,September,Octob begin var t: &Type := typeof(Months); var names: array of string := Enum.GetNames(t); - writeln(' '); + writeln('÷икл по именам перечислимого типа'); foreach name: string in names do write(name,' '); writeln; writeln; var v: &Array := Enum.GetValues(t); var mm: array of Months := new Months[v.Length]; - writeln(' '); + writeln('÷икл по массиву всех значений перечислимого типа'); for var i:=0 to v.Length-1 do mm[i] := Months(v.GetValue(i)); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas index 7a8b83ac3..8eb62692a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Типизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'a.dat'; var f: file of integer; @@ -9,7 +9,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); for var i:=1 to 10 do begin var x := random(100); @@ -22,7 +22,7 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); for var i:=1 to 10 do begin var x: integer; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas index f2d768790..d6cd9778c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/File2.pas @@ -1,19 +1,19 @@ -// +// Файлы строк фиксированной длины type Str20 = string[20]; var s: Str20; - f: file of Str20; // file of string , string ! + f: file of Str20; // file of string определить нельзя, поскольку string имеет переменную длину! begin assign(f,'str.dat'); rewrite(f); - write(f,' '); - write(f,' '); - write(f,' '); + write(f,'Иванов Иван Иванович'); + write(f,'Петров Петр Петрович'); + write(f,'Сидоров Александр Евг'); close(f); reset(f); - writeln(' : '); + writeln('Содержимое файла строк: '); for var i := 1 to FileSize(f) do begin read(f,s); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas index 152912db3..72b941890 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text1.pas @@ -1,4 +1,4 @@ -// , +// Программа, выводящая текст из своего файла var f: Text; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas index 51edde25c..cd46adb75 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text2.pas @@ -1,7 +1,7 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt var f: Text; - a: array of string := ('','','','','','',''); + a: array of string := ('Каждый','охотник','желает','знать','где','сидит','фазан'); begin assign(f,'a.txt'); @@ -9,5 +9,5 @@ begin for var i:=0 to a.Length-1 do writeln(f,a[i]); close(f); - writeln(' a.txt'); + writeln('Текст записан в файл a.txt'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas index 86572c050..31daacb7d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Text3.pas @@ -1,4 +1,4 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt const n = 30; filename = 'pifagor.txt'; @@ -15,5 +15,5 @@ begin writeln(f); end; close(f); - writeln(' '+filename); + writeln('Таблица умножения записана в файл '+filename); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas index 15f1eb52a..7c932ddc3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/12_Files/Untyped1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Нетипизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'u.dat'; var @@ -14,7 +14,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); r := random*10; for var i:=0 to 10 do @@ -26,7 +26,7 @@ begin // writeln(s); writeln(c); writeln(k); - // + // Запись в файл данных разных типов write(f,r); // writeln(f,s); write(f,c); @@ -37,9 +37,9 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); - // + // Чтение из файла данных разных типов read(f,r,{s,}c,k); writeln(r); // writeln(s); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas index d2c232b76..3d041c74c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer1.pas @@ -1,16 +1,16 @@ -// +// Типизированные указатели var i: integer := 5; j: integer := 3; p: ^integer; begin - writeln(' i j: ',i,' ',j); - p := @i; // p i, p i - writeln(' ',p,' ',p^); // p^ - , p + writeln('Исходные значения переменных i и j: ',i,' ',j); + p := @i; // в p записывается адрес i, p указывает на i + writeln('По адресу ',p,' находится значение ',p^); // p^ - то, на что указывает p p^ := 2; p := @j; - writeln(' ',p,' ',p^); + writeln('По адресу ',p,' находится значение ',p^); p^ += 1; - writeln(' i j: ',i,' ',j); + writeln('Новые значения переменных i и j: ',i,' ',j); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas index d7a4734e4..f3006767d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer2.pas @@ -1,6 +1,6 @@ -// -// , -// +// Бестиповые указатели +// Им можно присваивать любой адрес, но для использования необходимо +// явное приведение к типизированному указателю var i: integer := 5; r: real := 3.14; @@ -11,12 +11,12 @@ type preal = ^real; begin - writeln(' i r: '); + writeln('Исходные значения переменных i и r: '); writeln(i,' ',r); p := @i; pinteger(p)^ := 8; p := @r; preal(p)^ += 1; - writeln(' i r: '); + writeln('Новые значения переменных i и r: '); writeln(i,' ',r); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas index 673bf7cfb..c7100897e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer3.pas @@ -1,11 +1,11 @@ -// +// Выделение динамической памяти var p: ^real; begin - // p + // Выделили динамическую память и в p записали ее адрес New(p); p^ := 3; - writeln(' = ',p^); - // , p + writeln('Значение в динамичесской памяти = ',p^); + // Возврат динамической памяти, на оторую указывает p Dispose(p); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas index 69194f83e..0faeeb6f0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Pointer4.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,7 +32,7 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas index a41f8464e..2d54f9fb4 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer1.pas @@ -1,4 +1,4 @@ -// +// Процедурные переменные function add(a,b: integer): integer; begin @@ -15,7 +15,7 @@ var p: function (a,b: integer): integer; begin p := add; - writeln(' 2 3 ',p(2,3)); + writeln('Сумма 2 и 3 равна ',p(2,3)); p := mult; - writeln(' 2 3 ',p(2,3)); + writeln('Произведение 2 и 3 равно ',p(2,3)); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas index db0a05a81..2ba35543b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/ProcPointer2.pas @@ -1,4 +1,4 @@ -// +// Процедурная переменная как параметр procedure for_each(a: array of real; p: procedure(var r: real)); begin for var i := 0 to a.Length-1 do @@ -18,10 +18,10 @@ end; var a: array of real := (1,2,3,6,7); begin - writeln(' : '); + writeln('Содержимое массива: '); for_each(a,print); writeln; for_each(a,mult2); - writeln(' 2: '); + writeln('Содержимое массива после умножения его элеметов на 2: '); for_each(a,print); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas index 42529cd9b..5dd358cd0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/13_Pointers/Reference.pas @@ -1,4 +1,4 @@ -// +// Использование ссылок вместо указателей для создания односвязного списка type Node = class data: integer; @@ -10,18 +10,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -29,6 +29,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas index ea1b45732..5b6b049e9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec1.pas @@ -8,16 +8,16 @@ type procedure WritePerson(const p: Person); begin - writelnFormat(': {0} : {1} : {2} : {3}',p.Name,p.Sex,p.Age,p.Weight); + writelnFormat('Фамилия: {0} Пол: {1} Возраст: {2} Вес: {3}',p.Name,p.Sex,p.Age,p.Weight); end; var - p: Person := (Name: ''; Age: 20; Weight: 64; Sex: Male); + p: Person := (Name: 'Иванов'; Age: 20; Weight: 64; Sex: Male); p1: Person; begin - p1 := p; // + p1 := p; // Присваивание записей var p2: Person; - p2.Name := ''; + p2.Name := 'Петрова'; p2.Age := 18; p2.Weight := 50; p2.Sex := Female; @@ -26,7 +26,7 @@ begin var p3: Person; with p3 do begin - Name := ''; + Name := 'Сидоров'; Age := 24; Weight := 80; Sex := Male; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas index 26f54af7a..e95d97a88 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/14_Records/Rec2.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas index 2521b8227..94c4e7ccd 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Inheritance1.pas @@ -1,4 +1,4 @@ -// . +// Наследование. Полиморфизм и виртуальные функции type Person = class private @@ -9,10 +9,10 @@ type begin name := n; age := a; end; - procedure Print; virtual; // . - + procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках begin var s := GetType.ToString; - write(': ',Copy(s,pos('.',s)+1,Length(s)):7,' : ',name,' : ',age); + write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,' Имя: ',name,' Возраст: ',age); end; procedure Println; begin @@ -21,19 +21,19 @@ type end; end; - Pupil = class(Person) // Pupil - Person + Pupil = class(Person) // Pupil - наследник Person private clas: integer; public constructor (n: string; a,c: integer); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора clas := c; end; procedure Print; override; begin inherited Print; - write(' : ',clas); + write(' Класс: ',clas); end; end; @@ -43,23 +43,23 @@ type public constructor (n: string; a: integer; p: string); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора predm := p; end; procedure Print; override; begin inherited Print; - write(' : ',predm); + write(' Предмет: ',predm); end; end; -var a: array of Person := new Person[4]; // - . +var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов begin - a[0] := new Pupil('',11,5); - a[1] := new Teacher(' ',30,''); - a[2] := new Person('',65); - a[3] := new Pupil('',12,6); + a[0] := new Pupil('Вова',11,5); + a[1] := new Teacher('Марья Ивановна',30,'Информатика'); + a[2] := new Person('Иванов',65); + a[3] := new Pupil('Вася',12,6); for var i:=0 to a.Length-1 do a[i].Println; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas index 961250cb9..5d205a700 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonExternal.pas @@ -1,6 +1,6 @@ -// -// : -// , +// Описание методов вне интерфейса класса +// Удобство: интерфейс лучше виден +// Если класс описан в модуле, то реализация методов помещается в секцию реализации модуля type Person = class private @@ -19,12 +19,12 @@ end; procedure Person.Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; var p: Person; begin - p := new Person('',20); + p := new Person('Иванов',20); p.Print; end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas index cb1b81fb1..aa6958bad 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/15_Classes/Properties.pas @@ -1,14 +1,14 @@ -// (properties) +// Свойства (properties) type - /// + /// Класс персоны Person = class private nm: string; ag: integer; - procedure SetAge(a: integer); // + procedure SetAge(a: integer); // Процедура доступа к свойству располагается обычно в приватной секции begin - if a<0 then // - a := 0; // , + if a<0 then // Перед установкой значения свойства мы можем сделать дополнительные проверки + a := 0; // и скорректировать значение свойства, либо сгенерировать исключение ag := a; end; public @@ -16,20 +16,20 @@ type begin nm := n; ag := a; end; - /// - property Name: string read nm; // Name nm - /// + /// Имя персоны + property Name: string read nm; // Свойство Name доступно только на чтение и возвращает значение поля nm + /// Возраст персоны property Age: integer read ag write SetAge; procedure Print; begin - writeln(': ',nm,' : ',ag); + writeln('Имя: ',nm,' Возраст: ',ag); end; end; -var p: Person := new Person('', 20); +var p: Person := new Person('Иванов', 20); begin - writeln(': ',p.Name); // Name , - - p.Age := -1; // : = 0 - writeln(': ',p.Age); + writeln('Имя: ',p.Name); // Менять Name нельзя, доступ - только на чтение + p.Age := -1; // Попытка изменения возраста на отрицательное значение приводит к корректировке: возраст становится = 0 + writeln('Возраст: ',p.Age); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas index 086f8de6b..c879e8a2f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try1.pas @@ -1,14 +1,14 @@ -// . +// Простейшая обработка исключений. Ввод с ошибкой var a: integer; begin try - writeln(' : '); - // :) + writeln('Введите число: '); + // При вводе попробуйте совершить ошибку :) readln(a); - writeln(' '); + writeln('Число введено верно '); except - writeln(' '); + writeln('Ошибка ввода'); end; - writeln(' '); + writeln('Выполнение программы продолжено'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas index 986a2493a..4145b1fe0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try2.pas @@ -1,15 +1,15 @@ -// +// Обработка нескольких исключений var x: integer; begin try - writeln(' (1 - 0): '); + writeln('Введите число (1 - ошибка деления на 0): '); readln(x); x := 10 div (x-1); except on System.FormatException do - writeln(' '); + writeln('Ошибка ввода'); on System.DivideByZeroException do - writeln(' 0'); + writeln('Деление на 0'); end; end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas index 22139ddc2..4fcc48113 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try3.pas @@ -1,15 +1,15 @@ -// finally -// finally , +// Иллюстрация finally +// Секция finally выполняется независимо от того, произошло исключение или нет var x: integer := 0; begin try if Random(2)=0 then x := 10 div x; - writeln(' '); + writeln('Выполнение продолжается'); finally - writeln(' finally'); + writeln('Сработала секция finally'); end; - // , - writeln(' finally'); + // Если возникает исключение, то этот оператор не выполняется + writeln('После секции finally'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas index 879a1005e..2f61a1b0b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/16_Exceptions/Try4.pas @@ -1,8 +1,8 @@ -// . +// Исключения. Генерация исключения function f(x: integer): integer; begin if x=0 then - raise new System.Exception(' f 0'); + raise new System.Exception('Аргумент функции f не может быть равен 0'); Result := 10 mod x; end; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas index 9643367e4..d96590acc 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf1.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -48,14 +48,14 @@ var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); &Array.Sort(a,new SortByName); - WriteArray(' : ',a); + WriteArray('Сортировка по имени: ',a); &Array.Sort(a,new SortByAge); - WriteArray(' : ',a); + WriteArray('Сортировка по возрасту: ',a); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas index 96a630dfd..8dc63b9f7 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/17_Interfaces/Interf2.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -30,19 +30,19 @@ end; function IsKozlov(s: Student): boolean; begin - Result := s.name = '' + Result := s.name = 'Козлов' end; var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); - writeln(' = ',&Array.FindIndex(a,IsKozlov)); + writeln('Индекс Козлова = ',&Array.FindIndex(a,IsKozlov)); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas index 879b7a9b4..d5ff4f5c3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/Main.pas @@ -1,11 +1,11 @@ -// , MyLib.dll -// MyLib.pas +// Основная программа, использующая библиотеку MyLib.dll +// MyLib.pas должен быть предварительно откомпилирован #reference 'MyLib.dll' var f: Frac; begin - writeln(' 2 3 ',add(2,3)); + writeln('Сумма чисел 2 и 3 равна ',add(2,3)); writeln('MyPi = ',MyPi); f := new Frac(2,3); f.Print; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas index bf978785d..89708ec46 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/!Tutorial/18_Dll/MyLib.pas @@ -1,4 +1,4 @@ -// , Ctrl-F9. MyLib.dll +// Откомпилируйте библиотеку, нажав Ctrl-F9. В папке должен появиться файл MyLib.dll library MyLib; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas index 2ade3d11a..49a1cdb99 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Eratosphen.pas @@ -1,4 +1,4 @@ -// " " - +// "Решето Эратосфена" - вычисление простых чисел const n = 50000; var primes: set of integer; @@ -18,9 +18,9 @@ begin end; end; - writeln(' < ',n,':'); + writeln('Простые числа < ',n,':'); writeln(primes); writeln; - writeln(' : ',Milliseconds/1000); + writeln('Время вычисления: ',Milliseconds/1000); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas index 72e187241..003aa4c1b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/MazeGen.pas @@ -1,10 +1,10 @@ -// +// Программа генерации случайных лабиринтов uses GraphABC; const - szw = 70; // + szw = 70; // размер лабиринта szh = 50; - cellsz = 10; // + cellsz = 10; // размер ячейки type point = record @@ -32,10 +32,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -45,28 +45,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n := Random(todonum); x := todo[n].x; y := todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat d:=Random (4); until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl d) or 32); maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -77,8 +77,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -86,19 +86,19 @@ begin for var x:=1 to szw-2 do for var y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz); end; end; begin - Window.Title := ' '; + Window.Title := 'Генерация лабиринта'; SetWindowSize(szw*cellsz,szh*cellsz); Init; Draw; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas index fffe646fc..ceb9752cd 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/ESquares.pas @@ -1,4 +1,4 @@ -// E-. +// E-квадраты. Демонстрация рекурсии uses GraphABC; const mw = 2.9; @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ': E-'; + Window.Title := 'Рекурсия: E-квадраты'; SetWindowSize(750,530); Pen.Color := clWhite; ESquares(4,125,18,490); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas index 42720cfb3..c315a89fa 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Hanoi.pas @@ -1,46 +1,46 @@ -// +// Ханойские башни uses GraphABC; type - /// + /// Тип диска DiskType = record - /// + /// Диаметр диска Sz: integer; - /// + /// Цвет диска Color: GraphABC.Color; end; - /// + /// Тип массива дисков на стержне DiskArr = array of DiskType; const - /// + /// Количество дисков CountDisks = 8; - /// + /// Высота диска DiskHeight = 12; - /// + /// Приращение ширины диска DiskWidthDelta = 12; h = CountDisks * DiskWidthDelta * 2 + 20; - /// y- + /// y-координата основания пирамид дисков y0 = DiskHeight * CountDisks + 80; hh = 30; - /// x- + /// x-координата первого стержня x1 = h div 2 + hh; - /// x- + /// x-координата второго стержня x2 = x1 + h; - /// x- + /// x-координата третьего стержня x3 = x2 + h; - /// , + /// Пауза, мс delay = 50; var - /// + /// Массив пирамид дисков Tower: array [1..3] of DiskArr; - /// + /// Массив количеств дисков в пирамидах DisksInTower: array [1..3] of integer; - /// + /// Номер хода MoveNumber: integer; -/// +/// Рисование пирамиды procedure DrawTower(a: DiskArr; n: integer; x0,y0: integer); begin Brush.Color := clBlack; @@ -52,18 +52,18 @@ begin end; end; -/// +/// Рисование всех пирамид и информационной строки procedure DrawAll; begin DrawTower(Tower[1],DisksInTower[1],x1,y0); DrawTower(Tower[2],DisksInTower[2],x2,y0); DrawTower(Tower[3],DisksInTower[3],x3,y0); Brush.Color := clWhite; - TextOut(20,20,' = '+IntToStr(MoveNumber)); + TextOut(20,20,'Число перемещений дисков = '+IntToStr(MoveNumber)); Redraw; end; -/// FromN ToN +/// Перемещение диска со стержня FromN на стержень ToN procedure MoveDisk(FromN, ToN: integer); begin Inc(MoveNumber); @@ -75,7 +75,7 @@ begin DrawAll; end; -/// " " +/// Основная екурсивная процедура алгоритма "Ханойские башни" procedure MoveTower(n: integer; FromN, ToN, WorkN: integer); begin if n=0 then exit; @@ -84,7 +84,7 @@ begin MoveTower(n-1, WorkN, ToN, FromN); end; -/// +/// Инициализация массивов procedure InitTowers; begin SetLength(Tower[1],CountDisks); @@ -100,12 +100,12 @@ begin end; end; -/// +/// Инициализация окна procedure InitWindow; begin SetWindowSize(x3+x1,y0+50); CenterWindow; - Window.Title := ' '; + Window.Title := 'Ханойские башни'; Font.Size := 14; Font.Name := 'Arial'; end; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas index 49bd0dfd7..53993e66c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/Knapsack.pas @@ -1,5 +1,5 @@ -// . B . -// +// Задача о ранце. В массиве B заданы веса предметов. +// Выдать все варианты полной комплектации ранца частью этих предметов const Sz=100; type IntArr = array [1..Sz] of integer; @@ -22,15 +22,15 @@ var if space=0 then PrintArr(Subset,ns) else if (space<0) or (i>nb) then - exit // - else // B + exit // отсечение + else // продолжение перебора всех подмножеств множества B begin - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент ns += 1; Subset[ns] := B[i]; space := space - B[i]; - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать взять i-тый элемент space := space + B[i]; ns -= 1; end; @@ -43,8 +43,8 @@ end; procedure FillArr(var B: IntArr; var n: integer); begin - n:=5; // - B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // + n:=5; // количество предметов + B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // веса предметов end; var diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas index 91bb7f805..3251ca1dc 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Recursion/TreeDraw.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева uses GraphABC; const @@ -7,7 +7,7 @@ const delay = 10; procedure DrawTree(x,y,dx,level: integer); -// : , , +// обход: левое поддерево, корень, правое begin if level>0 then begin @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ' '; + Window.Title := 'Рекурсивное рисование бинарного дерева'; SetSmoothingOff; SetWindowSize(800,30+Levels*LevelHeight); DrawTree(WindowWidth div 2,10,WindowWidth div 5,Levels); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas index ad7481733..bb0174db0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/Simple/SimpleNumbers.pas @@ -1,6 +1,6 @@ -// +// Генерация больших простых чисел begin - writeln(' : '); + writeln('Большие простые числа: '); var count := 0; var beg := Random(1000000000)+2; for var i:=beg to beg+5000 do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas index e9b98c503..a06ade6a4 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/ArrayLib.pas @@ -1,6 +1,6 @@ unit ArrayLib; -/// +/// Вывод массива procedure WriteArray(a: array of T); begin for var i:=0 to a.Length-1 do @@ -15,7 +15,7 @@ begin writeln; end; -/// +/// Создание массива и заполнение его случайными числами procedure CreateRandom(var a: array of integer; n: integer); begin a := new integer[n]; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas index 012c18004..9a778619a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/QuickSort.pas @@ -1,10 +1,10 @@ -// . +// Быстрая сортировка Ч. Хоара uses ArrayLib; -/// +/// Быстрая сортировка procedure QuickSort(a: array of integer); -/// a[l]..a[r] a[l]..a[q] <= a[q+1]..a[r] +/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r] function Partition(l,r: integer): integer; begin var i := l - 1; @@ -28,7 +28,7 @@ procedure QuickSort(a: array of integer); end; end; -/// +/// Сортировка частей procedure sort(l,r: integer); begin if l>=r then exit; @@ -47,9 +47,9 @@ var a: array of integer; begin CreateRandom(a,n); - writeln(' : '); + writeln('До сортировки: '); WriteArray(a); QuickSort(a); - writeln(' : '); + writeln('После сортировки: '); WriteArray(a); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas index 99bd41fcd..ed67282aa 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Algorithms/SortArrays/SortByChoice.pas @@ -1,4 +1,4 @@ -// +// Сортировка выбором uses ArrayLib; procedure SortByChoice(a: array of real); @@ -29,9 +29,9 @@ var a: array of real; begin a := CreateRandomArr(20); - writeln(' : '); + writeln('Содержимое массива: '); WriteArray(a); SortByChoice(a); - writeln(' : '); + writeln('После сортировки выбором: '); WriteArray(a); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/15.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/15.pas index b75b36d6b..23206ab8b 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/15.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/15.pas @@ -1,16 +1,16 @@ -// 15 +// Игра в 15 uses GraphABC,ABCObjects,ABCButtons; const -/// +/// размер поля n = 4; -/// +/// размер фишки sz = 100; -/// +/// зазор между фишками zz = 10; -/// +/// отступ от левого и правого краев x0 = 20; -/// +/// отступ от верхнего и нижнего краев y0 = 20; var @@ -22,9 +22,9 @@ var EmptyCellX,EmptyCellY: integer; MovesCount: integer; - EndOfGame: boolean; // True + EndOfGame: boolean; // True если все фишки стоят на своих местах -// +// Поменять местами две фишки procedure Swap(var p,p1: SquareABC); begin PABCSystem.Swap(p,p1); @@ -36,20 +36,20 @@ begin p1.Top := i; end; -// , +// Определить, являются ли клетки соседями function Sosedi(x1,y1,x2,y2: integer): boolean; begin Result := (abs(x1-x2)=1) and (y1=y2) or (abs(y1-y2)=1) and (x1=x2) end; -// +// Заполнить вспомогательный массив цифр procedure FillDigitsArr; begin for var i:=1 to n*n-1 do digits[i] := i; end; -// . +// Перемешать вспомогательный массив цифр. Количество обменов должно быть четным procedure MeshDigitsArr; var x: integer; begin @@ -61,13 +61,13 @@ begin Swap(digits[i],digits[x]); end; if n mod 2=0 then - Swap(digits[1],digits[2]); // + Swap(digits[1],digits[2]); // количество обменов должно быть четным end; -// . - 0 +// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 procedure Fill15ByDigitsArr; begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // + Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол EmptyCellX := n; EmptyCellY := n; var i := 1; @@ -80,18 +80,18 @@ begin end; end; -// +// Перемешать массив фишек procedure Mesh15; begin MeshDigitsArr; Fill15ByDigitsArr; MovesCount := 0; EndOfGame := False; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.Color := RGB(200,200,255); end; -// +// Создать массив фишек procedure Create15; begin EmptyCellX := n; @@ -111,7 +111,7 @@ begin Fill15ByDigitsArr; end; -// , +// Проверить, все ли фишки стоят на своих местах function IsSolution: boolean; var x,y,i: integer; begin @@ -132,24 +132,24 @@ end; procedure MouseDown(x,y,mb: integer); begin - if EndOfGame then // , "" + if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" exit; - if ObjectUnderPoint(x,y)=nil then // E , + if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; - var fx := (x-x0) div (sz+zz) + 1; // , + var fx := (x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью var fy := (y-y0) div (sz+zz) + 1; if (fx>n) or (fy>n) then exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // , + if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами begin Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); EmptyCellX := fx; EmptyCellY := fy; Inc(MovesCount); - StatusRect.Text := ' : ' + IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: ' + IntToStr(MovesCount); if IsSolution then begin - StatusRect.Text := '! : ' + IntToStr(MovesCount); + StatusRect.Text := 'Победа! Сделано ходов: ' + IntToStr(MovesCount); StatusRect.Color := RGB(255,200,200); EndOfGame := True; end @@ -158,18 +158,18 @@ end; begin SetSmoothingOff; - Window.Title := ' 15'; + Window.Title := 'Игра в 15'; Window.IsFixedSize := True; SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); EndOfGame := False; Create15; - MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'',clLightGray); + MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); MeshButton.OnClick := Mesh15; StatusRect := new RectangleABC(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); StatusRect.TextVisible := True; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.BorderWidth := 2; StatusRect.BorderColor := RGB(80,80,255); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas index a6cd053a8..b8eda8322 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Animals/Animals.pas @@ -1,6 +1,6 @@ -// " ". -// " " -// : " " - " " +// Самообучающаяся игра "Угадай животное". +// Старайтесь на вопрос "Чем отличается" вводить самый общий ответ +// Например: "Чем отличается чиж от ежа" - "Умеет летать" type TNode = class s: string; @@ -15,7 +15,7 @@ type var f: text; -/// +/// Сохранить дерево в файл procedure SaveToFile(p: TNode); begin if p=nil then @@ -28,7 +28,7 @@ begin SaveToFile(p.right); end; -/// +/// Загрузить дерево из файла function LoadFromFile: TNode; var s: string; @@ -52,10 +52,10 @@ var s,q: string; begin - writeln(' '); + writeln('Загадайте животное'); assign(f, 'animals_data.txt'); if not FileExists('animals_data.txt') then - root := new TNode('') + root := new TNode('Собака') else begin reset(f); @@ -66,7 +66,7 @@ begin p := root; while p.left<>nil do begin - write(p.s+'? (0 - , 1 - ): '); + write(p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then p := p.left @@ -74,15 +74,15 @@ begin p := p.right end; - write(' '+p.s+'? (0 - , 1 - ): '); + write('Это '+p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then - writeln(' !') + writeln('Я угадала!') else begin - write(' . ? '); + write('Я проиграла. Что это за животное? '); readln(s); - write(' , '+p.s+': '); + write('Введите вопрос, отличающий это животное от '+p.s+': '); readln(q); p1 := new TNode(s); p2 := new TNode(p.s); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas index e6cbcf543..8e7c03bc5 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Battle.pas @@ -1,34 +1,34 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи c : color; public CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); @@ -161,17 +161,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -196,7 +196,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -205,14 +205,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -251,35 +251,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); - SetWindowCaption(' '); + SetWindowCaption('Битва за жизнь'); SetFontSize(7); SetFontName('Arial'); SetBrushColor(BkColor); FillRectangle(0, 0, Width, Height); SetFontColor(clWhite); - TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); - TextOut(10, ymax + 20+1*18, ' . - '); - TextOut(10, ymax + 20+2*18, ' . , .'); - TextOut(10, ymax + 20+3*18, ' : - , , ,'); - TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); - TextOut(10, ymax + 20+5*18, ' , ; - , .'); + TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); + TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); + TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); + TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); + TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); + TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; - //c - . - //CanRazm - - // . - //MaxKol - . - //Kol - . - //MaxLife - . - // , , , . - //MinFood - , - // ( ; -1). - //Speed - . 2 . - //See - - . + //c - цвет. + //CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя + // её последовательными размножениями. + //MaxKol - максимально допустимое количество рыб данного вида. + //Kol - количество рыб данного вида в текущий момент времени. + //MaxLife - максимальная продолжительность жизни. + // После того, как рыба сделает больше шагов, чем это число, она умирает. + //MinFood - минимальное количество съеденных жертв, необходимое для размножения + // (только для хищников; для жертв это количество принято за -1). + //Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. + //See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -289,7 +289,7 @@ begin SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); - // + //Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -302,7 +302,7 @@ begin StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); - // , - . + //И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; //i:=0;c:=getallcount;LockDrawing; repeat diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas index 7171c4f49..0ab555846 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/BookWorm/BookWormABCNET.pas @@ -1,8 +1,8 @@ uses GraphABC,ABCObjects,ABCButtons,Events; const -/// - freqcharstr=''; +/// Примерная частота повторяемости букв + freqcharstr='аааааааааааааааааааааааааабббббввввввввггггдддддддееееееееееееееееееееежжззззииииииииииииииииииийккккккккккккккклллллллллллммммммнннннннннннннннннооооооооооооооооооооооооппппппппрррррррррррррррррссссссссссссстттттттттттттттууууууффххцццчччшшщыыьььььэюяяяя'; const MaxWordLen = 12; @@ -12,20 +12,20 @@ type MySquareABC = class(SquareABC) end; var -/// +/// Доска с буквами MainBoard: ObjectBoardABC; -/// 1 +/// Доска высоты 1 для размещения слова WordBoard: ObjectBoardABC; -/// WordBoard +/// Номер первого незанятого символа на доске WordBoard cur: integer; -/// +/// Количество ходов moves: integer; -/// +/// Очки score: integer; -/// +/// Прямоугольник для отображения информации Status: RectangleABC; -/// ( words.txt) +/// Существует ли такое слово (все слова хранятся в файле words.txt) function WordExists(s: string): boolean; var f: text; @@ -49,7 +49,7 @@ end; procedure MyMouseDown(x,y,mb: integer); begin -// +// Нажата левая мышь if mb=1 then begin if cur>WordBoard.DimX then @@ -71,7 +71,7 @@ begin end; end else -// +// Нажата правая мышь begin for var xx:=1 to cur-1 do WordBoard[xx,1].Visible := False; @@ -83,19 +83,19 @@ begin end; end; -/// " " +/// Обработчик кнопки "Новая игра" procedure BtNewClick; begin score := 0; moves := 0; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); MyMouseDown(1,1,2); for var xx:=1 to MainBoard.DimX do for var yy:=1 to MainBoard.DimY do MainBoard[xx,yy].Text := UpCase(freqcharstr[Random(255)+1]); end; -/// " " +/// Обработчик кнопки "Сказать слово" procedure BtWordClick; begin if WordBoard.Color<>clYellow then @@ -113,15 +113,15 @@ begin end; cur := 1; WordBoard.Color := clSkyBlue; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); end; -/// "" +/// Обработчик кнопки "Подсказка" procedure BtPleaseClick; var f: text; str,maxstr: string; - arr,work: array [''..''] of integer; + arr,work: array ['а'..'я'] of integer; maxlen: integer; function CanConstructWord(s: string): boolean; @@ -142,7 +142,7 @@ var begin // BtPleaseClick maxlen := 0; maxstr := ''; - for var c:='' to '' do + for var c:='а' to 'я' do arr[c]:=0; for var xx:=1 to MainBoard.DimX do @@ -169,7 +169,7 @@ procedure InitWindow; begin SetWindowSize(640,480); Window.IsFixedSize := True; - Window.Title := ' !'; + Window.Title := 'Знай русские слова!'; Brush.Color := clMoneyGreen; FillRect(0,0,WindowWidth,WindowHeight); end; @@ -183,11 +183,11 @@ end; procedure InitButtons; begin - var btword := new ButtonABC(70,410,180,30,' ',clGray); - var btnew := new ButtonABC(280,410,100,30,'',clLightGray); - var btplease := new ButtonABC(410,410,160,30,'',clGray); + var btword := new ButtonABC(70,410,180,30,'Сказать слово',clGray); + var btnew := new ButtonABC(280,410,100,30,'Заново',clLightGray); + var btplease := new ButtonABC(410,410,160,30,'Подсказка',clGray); -// +// Привязка обработчиков к кнопкам btword.OnClick := BtWordClick; btnew.OnClick := BtNewClick; btplease.OnClick := BtPleaseClick; @@ -197,7 +197,7 @@ end; procedure InitInterface; begin Status := new RectangleABC(70,350,500,30,clSkyBlue); - Status.Text := ': 0 : 0'; + Status.Text := 'Ходов: 0 Очков: 0'; WordBoard := new ObjectBoardABC(20,40,MaxWordLen,1,50,50,clSkyBlue); MainBoard := new ObjectBoardABC(220,120,4,4,50,50,clMoneyGreen); MainBoard.BorderColor := clGreen; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas index c0cc6959c..77203faa2 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/DeleteByMouse.pas @@ -3,22 +3,22 @@ uses ABCObjects,GraphABC; const CountSquares = 20; var - /// + /// Текущая цифра CurrentDigit: integer; - /// + /// Количество ошибок Mistakes: integer; - /// + /// Строка информации StatusRect: RectangleABC; -/// +/// Вывод информационной строки procedure DrawStatusText; begin if CurrentDigit<=CountSquares then - StatusRect.Text := ' : ' + IntToStr(CurrentDigit-1) + ' : ' + IntToStr(Mistakes) - else StatusRect.Text := ' . : ' + IntToStr(Milliseconds div 1000) + ' . : ' + IntToStr(Mistakes); + StatusRect.Text := 'Удалено квадратов: ' + IntToStr(CurrentDigit-1) + ' Ошибок: ' + IntToStr(Mistakes) + else StatusRect.Text := 'Игра окончена. Время: ' + IntToStr(Milliseconds div 1000) + ' с. Ошибок: ' + IntToStr(Mistakes); end; -/// +/// Обработчик события мыши procedure MyMouseDown(x,y,mb: integer); begin var ob := ObjectUnderPoint(x,y); @@ -38,7 +38,7 @@ begin end; begin - Window.Title := ': '; + Window.Title := 'Игра: удали все квадраты по порядку'; Window.IsFixedSize := True; for var i:=1 to CountSquares do begin @@ -51,6 +51,6 @@ begin CurrentDigit := 1; Mistakes := 0; DrawStatusText; - // + // Установка обработчиков OnMouseDown := MyMouseDown; end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas index 70ed78b38..0ed3a4842 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/KillThem.pas @@ -6,34 +6,34 @@ const var kLeftKey,kRightKey: boolean; kSpaceKey: integer; - /// + /// Игрок Player: RectangleABC; - /// + /// Таймер движения врагов t: Timer; - /// + /// Флаг конца игры EndOfGame: boolean; - /// + /// Количество неигровых объектов StaticObjectsCount: integer; - /// + /// Счетчик выигрышей Wins: integer; - /// + /// Счетчик проигрышей Falls: integer; - /// + /// Информационная строка InfoString: RectangleABC; - /// + /// Сообщение в начале игры NewGame: RoundRectABC; type KeysType = (kLeft,kRight); - /// + /// Класс пули Pulya = class(CircleABC) public constructor Create(x,y: integer); procedure Move; override; end; - /// + /// Класс врага Enemy = class(RectangleABC) public constructor Create(x,y,w: integer); @@ -53,7 +53,7 @@ begin if Top<0 then Visible := False; for var j:=StaticObjectsCount to Objects.Count-1 do - // + // При столкновении пуля и объект становятся невидимыми if (Objects[j]<>Self) and Intersect(Objects[j]) then begin Objects[j].Visible := False; @@ -85,7 +85,7 @@ begin EndOfGame := True; end; -/// +/// Количество врагов function NumberOfEnemies: integer; begin Result := 0; @@ -94,7 +94,7 @@ begin Result += 1; end; -/// +/// Создание игрока и врагов procedure CreateObjects; begin Player := new RectangleABC(280,WindowHeight-30,100,20,clPlayer); @@ -106,21 +106,21 @@ begin end; end; -/// +/// Разрушение игрока и врагов procedure DestroyObjects; begin for var i:=Objects.Count-1 downto StaticObjectsCount do Objects[i].Destroy; end; -/// +/// Перемещение врагов procedure MoveObjects; begin for var i:=StaticObjectsCount+1 to Objects.Count-1 do Objects[i].Move; end; -/// +/// Удаление уничтоженных объектов procedure DestroyKilledObjects; begin for var i:=ObjectsCount-1 downto StaticObjectsCount+1 do @@ -128,7 +128,7 @@ begin Objects[i].Destroy; end; -/// +/// Обработчик нажатия клавиши procedure KeyDown(Key: integer); begin case Key of @@ -138,7 +138,7 @@ vk_Space: if kSpaceKey=2 then kSpaceKey := 1; end; end; -/// +/// Обработчик отжатия клавиши procedure KeyUp(Key: integer); begin case Key of @@ -148,16 +148,16 @@ vk_Space: kSpaceKey := 2; end; end; -/// +/// Изменение информационной строки procedure ChangeInfoString; begin - InfoString.Text := ': '+IntToStr(NumberOfEnemies)+' : '+IntToStr(Wins)+' : '+IntToStr(Falls); + InfoString.Text := 'Врагов: '+IntToStr(NumberOfEnemies)+' Побед: '+IntToStr(Wins)+' Поражений: '+IntToStr(Falls); end; -/// +/// Обработчик нажатия символьной клавиши procedure KeyPress(Key: char); begin - if (Key in ['G','','g','']) and EndOfGame then + if (Key in ['G','П','g','п']) and EndOfGame then begin NewGame.Visible := False; EndOfGame := False; @@ -169,14 +169,14 @@ begin end; end; -/// +/// Обработчик отжатия мыши procedure MouseUp(x,y,mb: integer); begin if NewGame.PTInside(x,y) then KeyPress('G'); end; -/// +/// Обработчик таймера procedure TimerProc; begin if kLeftKey and (Player.Left>0) then @@ -193,7 +193,7 @@ begin RedrawObjects; ChangeInfoString; var n := NumberOfEnemies; - // , + // Страховка от случая, когда процедура таймера выполняется одновременно в нескольких потоках if n=0 then EndOfGame := True; if EndOfGame then @@ -211,7 +211,7 @@ begin end; begin - Window.Title := ''; + Window.Title := 'Стрелялка'; Window.IsFixedSize := True; ClearWindow(clBlack); LockDrawingObjects; @@ -224,7 +224,7 @@ begin var zz := 100; NewGame := new RoundRectABC(zz,200,400,200,30,Color.Violet); NewGame.Center := Window.Center; - NewGame.Text := 'G - '; + NewGame.Text := 'G - Новая игра'; StaticObjectsCount := Objects.Count; ChangeInfoString; RedrawObjects; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas index 97f03f564..87956714a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Life.pas @@ -1,23 +1,23 @@ -// "" -// +// Игра "Жизнь" на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; const -/// +/// Ширина клетки w = 4; -/// +/// Количество клеток по ширине m = 300; -/// +/// Количество клеток по высоте n = 220; -/// +/// Отступ поля от левой границы окна x0 = 1; -/// +/// Отступ поля от верхней границы окна y0 = 21; mm = m + 1; nn = n + 1; -/// +/// Количество клеток сетки по горизонтали mk = 15; -/// +/// Количество клеток сетки по вертикали nk = 10; var @@ -28,7 +28,7 @@ var gen: integer; hn,hm: integer; -/// +/// Нарисовать ячейку procedure DrawCell(i,j: integer); begin DrawInBuffer := False; @@ -37,7 +37,7 @@ begin DrawInBuffer := True; end; -/// +/// Стереть ячейку procedure ClearCell(i,j: integer); begin DrawInBuffer := False; @@ -46,7 +46,7 @@ begin DrawInBuffer := True; end; -/// +/// Нарисовать все изменившиеся ячейки procedure DrawConfiguration; begin for var i:=1 to n do @@ -59,7 +59,7 @@ begin end; end; -/// +/// Нарисовать все ячейки procedure DrawConfigurationFull; begin for var i:=1 to n do @@ -68,7 +68,7 @@ begin else ClearCell(i,j); end; -/// +/// Нарисовать поле procedure DrawField; begin Pen.Color := clLightGray; @@ -88,7 +88,7 @@ begin end; end; -/// +/// Увеличить массив соседей для данной клетки procedure IncSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -106,7 +106,7 @@ begin SosediB[i2,j2] += 1; end; -/// +/// Уменьшить массив соседей для данной клетки procedure DecSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -124,7 +124,7 @@ begin SosediB[i2,j2] -= 1; end; -/// (i,j) +/// Поставить ячейку в клетку (i,j) procedure SetCell(i,j: integer); begin if b[i,j]=0 then @@ -136,7 +136,7 @@ begin CountCells += 1; end; -/// (i,j) +/// Убрать ячейку из клетки (i,j) procedure UnSetCell(i,j: integer); begin if b[i,j]=1 then @@ -148,7 +148,7 @@ begin CountCells -= 1; end; -/// +/// Инициализировать массивы и конфигурацию поля procedure Init; var xc := n div 2; @@ -173,7 +173,7 @@ begin SetCell(xc+1,yc+1); end; -/// +/// Обработать ячейку procedure ProcessCell(i,j: integer); begin case SosediA[i,j] of @@ -197,7 +197,7 @@ begin end; {case} end; -/// +/// Перейти к следующему поколению procedure NextGen; var ifirst,jfirst,ilast,jlast: integer; begin @@ -257,32 +257,32 @@ begin end; end; -/// +/// Перерисовка содержимого окна procedure LifeRedrawProc; begin Redraw; DrawConfigurationFull; end; -/// +/// Вывод номера поколения и количества ячеек procedure DrawInfo; begin Brush.Color := clWhite; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(WindowWidth - 130,0,': '+IntToStr(CountCells)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(WindowWidth - 130,0,'Жителей: '+IntToStr(CountCells)+' '); end; begin if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm := m div mk; hn := n div nk; SetWindowSize(x0+m*w,y0+n*w); CenterWindow; - Window.Title := ' ""'; + Window.Title := 'Игра "Жизнь"'; Window.IsFixedSize := True; Font.Name := 'Arial'; Font.Size := 10; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas index 29aac08f7..0ea31f7ed 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/Matches.pas @@ -1,12 +1,12 @@ -// "" +// Игра "Спички" const InitialCount=15; var - /// + /// Текущее количество спичек Count: integer; - /// , + /// Количество спичек, которое берет игрок Num: integer; - /// + /// Номер текущего игрока Player: integer; begin @@ -18,12 +18,12 @@ begin begin var Correct: boolean; repeat - write(' . ',Count,' . '); - write(' ? '); + write('Ваш ход. На столе ',Count,' спичек. '); + write('Сколько спичек Вы берете? '); readln(Num); Correct := (Num>=1) and (Num<=3) and (Num<=Count); if not Correct then - writeln('! !'); + writeln('Неверно! Повторите ввод!'); until Correct; end else @@ -31,7 +31,7 @@ begin Num := Random(1,3); if Num>Count then Num := Count; - writeln(' . ',Num,' '); + writeln('Мой ход. Я взял ',Num,' спичек'); end; Count -= Num; if Player=1 then @@ -40,6 +40,6 @@ begin until Count=0; if Player=1 then - writeln(' !') - else writeln(' !'); + writeln('Вы победили!') + else writeln('Вы проиграли!'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas index 72e0c9aa2..acb6036b1 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/Games/NewLife.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; @@ -302,10 +302,10 @@ begin AssignArray(b,nn+1,mm+1); AssignArray(sosedia,nn+1,mm+1); AssignArray(sosedib,nn+1,mm+1); - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -334,8 +334,8 @@ begin DrawInBuffer := True; SetBrushColor(ClearColor); SetFontColor(FillColor); - TextOut(25, 0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25, 0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); if gen mod 1000 = 0 then begin mil1:=Milliseconds; writeln(gen,' ',(mil1-mil)/1000); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas index 6224d87c8..3d689e7a5 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/Paporotnik.pas @@ -1,17 +1,17 @@ -/// " " +///Модуль для рисования фракталов семейства "Лист папоротника" unit Paporotnik; uses GraphABC; type - /// + ///Настройки фрактала PaporotnikFractalInitalData = record data: array of array of real; P0,P1,P2,P3:real; end; - /// " " + ///Фрактал "Лист папоротника" PaporotnikFractal = class private data: array of array of real; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/PaporotnikData.pas b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/PaporotnikData.pas index 6eb296f99..38069519a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/PaporotnikData.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Applications/GraphApplications/Paporotnik/PaporotnikData.pas @@ -1,10 +1,10 @@ -/// +///Константы задающие фракталы unit PaporotnikData; uses Paporotnik; var - /// + ///Папоротник с изогнутым листом PaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.0000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0400, -0.0400, 0.8500, 0, 1.6000), @@ -15,7 +15,7 @@ var P2: 7; P3: 7); - /// + ///Папоротник с прямым листом SimplePaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.00, 0.00, 0.00, 0.16, 0, 0.00), ( 0.85, 0.00, 0.00, 0.85, 0, 1.60), @@ -26,7 +26,7 @@ var P2: 7; P3: 7); - /// + ///Елка ElkaData: PaporotnikFractalInitalData := ( data: (( 0.1000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0000, 0.0000, 0.8500, 0, 1.6000), diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DMpp17.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DMpp17.pas index f830b2e75..3c2c23b71 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DMpp17.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DMpp17.pas @@ -1,4 +1,4 @@ -// pp17 +// Выполнение задания pp17 для Чертежника uses Drawman; procedure Spir(n: integer); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas index 7123569bd..5ad9e6a56 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/DrawManMakeTask/DrawManAddTasks.pas @@ -1,12 +1,12 @@ -/// +/// Дополнительный модуль для исполнителя Чертежник с заданиями unit DrawManAddTasks; -// pcu- PascalABC.NET\bin\Lib +// После компиляции pcu-файл модуля желательно разместить в папке PascalABC.NET\bin\Lib uses DrawMan,DMTaskMaker; procedure my1; begin - TaskText(' my1. , '); + TaskText('Задание my1. Начертите, используя циклы'); Field(14,14); DoToPoint(1,7); var k := 1; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas index b1e906fad..c9f2904c0 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/DrawMan/random_DM.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация использования случайных чисел для Чертежника. Лучи uses DrawMan; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas index 91aedef2f..4888d1972 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/Dynamic2.pas @@ -1,4 +1,4 @@ -// Dynamic2 Programming Taskbook +// Пример решения задачи Dynamic2 из электронного задачника Programming Taskbook uses PT4; var p1,p2: PNode; @@ -11,8 +11,8 @@ begin begin write(p1^.Data); n += 1; - p2 := p1; { } - p1 := p1^.Next; { } + p2 := p1; { сохраняем адрес текущего элемента } + p1 := p1^.Next; { и переходим к следующему элементу } end; write(n, p2); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas index 89b1caf86..b6c906d29 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/File48.pas @@ -1,4 +1,4 @@ -// File48 Programming Taskbook +// Пример решения задачи File48 из электронного задачника Programming Taskbook uses PT4; var f: array [1..4] of file of integer; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas index 42c600313..b8647c5bc 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4Demo.pas @@ -10,9 +10,9 @@ procedure Demo3; var a, b: real; begin - StartTask(' , '); - TaskText(' ~{a} ~{b}.', 0, 2); - TaskText(' {S}~=~{a}\*{b} {P}~=~2\*({a}\;+\;{b}).', 0, 4); + StartTask('Ввод и вывод данных, оператор присваивания'); + TaskText('Даны стороны прямоугольника~{a} и~{b}.', 0, 2); + TaskText('Найти его площадь {S}~=~{a}\*{b} и периметр {P}~=~2\*({a}\;+\;{b}).', 0, 4); a := (1 + Random(100)) / 10; b := (1 + Random(100)) / 10; DataR('a = ', a, xLeft, 3, 4); @@ -27,9 +27,9 @@ var m, n, i, j, k: integer; a: array [1..5, 1..8] of real; begin - StartTask(' (): '); - TaskText(' ~{M}\;\x\;{N} \ ~{K} (1~\l~{K}~\l~{M}).', 0, 2); - TaskText(' {K}- .', 0, 4); + StartTask('Двумерные массивы (матрицы): вывод элементов'); + TaskText('Дана матрица размера~{M}\;\x\;{N} и\ целое число~{K} (1~\l~{K}~\l~{M}).', 0, 2); + TaskText('Вывести элементы {K}-й строки данной матрицы.', 0, 4); m := 2 + Random(4); n := 4 + Random(5); k := 1; @@ -52,13 +52,13 @@ end; procedure Demo5; var s: string; begin - StartTask(' : '); - TaskText(' ~{S}.', 0, 2); - TaskText(' .', 0, 4); + StartTask('Символы и строки: основные операции'); + TaskText('Дана строка~{S}.', 0, 2); + TaskText('Вывести ее первый и последний символ.', 0, 4); s := SampleWord(Random(SampleWordCount)); DataS('S = ', s, 0, 3); - ResultC(' : ', s[1], xLeft, 3); - ResultC(' : ', s[length(s)], xRight, 3); + ResultC('Первый символ: ', s[1], xLeft, 3); + ResultC('Последний символ: ', s[length(s)], xRight, 3); SetNumberOfTests(4); end; @@ -83,12 +83,12 @@ var s: shortstring; c: char; begin - StartTask(' '); - TaskText(' ~{K} (>\,0) .', 0, 1); - TaskText(' : , {K}~', 0, 2); - TaskText(' , , {K}- ', 0, 3); - TaskText(' ( ~{K}, ', 0, 4); - TaskText(' , ).', 0, 5); + StartTask('Символьные и строковые файлы'); + TaskText('Дано целое число~{K} (>\,0) и строковый файл.', 0, 1); + TaskText('Создать два новых файла: строковый, содержащий первые {K}~символов', 0, 2); + TaskText('каждой строки исходного файла, и символьный, содержащий {K}-й символ', 0, 3); + TaskText('каждой строки (если длина строки меньше~{K}, то в строковый файл', 0, 4); + TaskText('записывается вся строка, а в символьный файл записывается пробел).', 0, 5); s1 := '1' + FileName(5) + '.tst'; s2 := '2' + FileName(5) + '.tst'; s3 := '3' + FileName(5) + '.tst'; @@ -119,13 +119,13 @@ begin Close(fs2); Close(fc3); DataN('K =', k, 0, 1, 2); - DataS(' : ', s1, 3, 2); - DataS(' : ', s2, 3, 4); - DataS(' : ', s3, 3, 5); - DataComment(' :', xRight, 2); + DataS('Имя исходного файла: ', s1, 3, 2); + DataS('Имя результирующего строкового файла: ', s2, 3, 4); + DataS('Имя результирующего символьного файла: ', s3, 3, 5); + DataComment('Содержимое исходного файла:', xRight, 2); DataFileS(s1, 3, jmax + 3); - ResultComment(' :', 0, 2); - ResultComment(' :', 0, 4); + ResultComment('Содержимое результирующего строкового файла:', 0, 2); + ResultComment('Содержимое результирующего символьного файла:', 0, 4); ResultFileS(s2, 3, k + 3); ResultFileC(s3, 5, 4); end; @@ -137,9 +137,9 @@ var s1, s2: string; t1, t2: text; begin - StartTask(' : '); - TaskText(' .', 0, 2); - TaskText(' .', 0, 4); + StartTask('Текстовые файлы: основные операции'); + TaskText('Дан текстовый файл.', 0, 2); + TaskText('Удалить из него все пустые строки.', 0, 4); s1 := FileName(6) + '.tst'; s2 := '#' + FileName(6) + '.tst'; SampleText(Random(SampleTextCount), n, S); @@ -158,7 +158,7 @@ begin ResultFileT(s1, 1, 5); Rename(t2, s1); DataFileT(s1, 2, 5); - DataS(' : ', s1, 0, 1); + DataS('Имя файла: ', s1, 0, 1); SetNumberOfTests(3); end; @@ -169,13 +169,13 @@ var i, n: integer; p, p1, p2: PNode; begin - StartTask(' : '); - TaskText(' ~{P}_1 - TNode,', 0, 1); - TaskText(' Next. Prev TNode,', 0, 2); - TaskText(' (\I\i) \I\i, ', 0, 3); - TaskText(' ( Next),', 0, 4); - TaskText(' ( Prev). Prev ', 0, 5); - TaskText('~\N. .', 0, 0); + StartTask('Динамические структуры данных: двусвязный список'); + TaskText('Дан указатель~{P}_1 на начало непустой цепочки элементов-записей типа TNode,', 0, 1); + TaskText('связанных между собой с помощью поля Next. Используя поле Prev записи TNode,', 0, 2); + TaskText('преобразовать исходную (\Iодносвязную\i) цепочку в \Iдвусвязную\i, в которой каждый', 0, 3); + TaskText('элемент связан не только с последующим элементом (с помощью поля Next),', 0, 4); + TaskText('но и с предыдущим (с помощью поля Prev). Поле Prev первого элемента положить', 0, 5); + TaskText('равным~\N. Вывести указатель на последний элемент преобразованной цепочки.', 0, 0); if Random(4) = 0 then n := 1 else @@ -195,7 +195,7 @@ begin p2^.Next := nil; SetPointer(1, p1); SetPointer(2, p2); - ResultP(' : ', 2, 0, 2); + ResultP('Адрес последнего элемента: ', 2, 0, 2); ResultList(1, 0, 3); ShowPointer(2); DataP('', 1, 0, 2); @@ -214,14 +214,14 @@ var i, n: integer; p, p1, p2: PNode; begin - StartTask(' : '); - TaskText(' ~{A}_1 - Node,', 0, 1); - TaskText(' Next. Prev', 0, 2); - TaskText(' , (\I\i) \I\i,', 0, 3); - TaskText(' ( ', 0, 4); - TaskText(' Next), ( Prev). Prev', 0, 5); - TaskText(' ~\O. ~{A}_2 ', 0, 0); - TaskText(' .', 0, 0); + StartTask('Динамические структуры данных: двусвязный список'); + TaskText('Дана ссылка~{A}_1 на начало непустой цепочки элементов-объектов типа Node,', 0, 1); + TaskText('связанных между собой с помощью своих свойств Next. Используя свойства Prev', 0, 2); + TaskText('данных объектов, преобразовать исходную (\Iодносвязную\i) цепочку в \Iдвусвязную\i,', 0, 3); + TaskText('в которой каждый элемент связан не только с последующим элементом (с помощью', 0, 4); + TaskText('свойства Next), но и с предыдущим (с помощью свойства Prev). Свойство Prev', 0, 5); + TaskText('первого элемента положить равным~\O. Вывести ссылку~{A}_2 на последний', 0, 0); + TaskText('элемент преобразованной цепочки.', 0, 0); SetObjectStyle; if Random(4) = 0 then n := 1 @@ -242,7 +242,7 @@ begin p2^.Next := nil; SetPointer(1, p1); SetPointer(2, p2); - ResultP(' : ', 2, 0, 2); + ResultP('Последний элемент: ', 2, 0, 2); ResultList(1, 0, 3); ShowPointer(2); DataP('', 1, 0, 2); @@ -276,34 +276,34 @@ begin end; begin - AddGroup('Demo', ' ', '. . , 2008', + AddGroup('Demo', 'Примеры различных задач', 'М. Э. Абрамян, 2008', 'qwqfsdf13dfttd', 9, InitTask); - AddCommentText(' '); - AddCommentText(' \MPT4TaskMaker\m.'); + AddCommentText('Демонстрируются различные возможности'); + AddCommentText('конструктора учебных заданий \MPT4TaskMaker\m.'); - SubgroupComment(' , '); - AddCommentText(' \I\i'); - AddCommentText(' \SBegin\s. '); - AddCommentText('\P \SBegin\s.\P'); + SubgroupComment('Ввод и вывод данных, оператор присваивания'); + AddCommentText('В данной подгруппе два первых задания \Iимпортированы\i'); + AddCommentText('из группы \SBegin\s. '); + AddCommentText('\PПриводимый ниже абзац преамбулы также импортирован из группы \SBegin\s.\P'); UseCommentText('Begin'); - SubgroupComment(' (): '); - AddCommentText(' Matrix7.'); + SubgroupComment('Двумерные массивы (матрицы): вывод элементов'); + AddCommentText('Данное задание дублирует задание Matrix7.'); - SubgroupComment(' '); - AddCommentText(' File63. '); - AddCommentText(', \I\i .'); - AddCommentText(' \MFileName\m.'); + SubgroupComment('Символьные и строковые файлы'); + AddCommentText('Данное задание дублирует задание File63. Оно демонстрирует'); + AddCommentText('особенности, связанные с двоичными \Iстроковыми\i файлами.'); + AddCommentText('При реализации задания используется вспомогательная функция \MFileName\m.'); - SubgroupComment(' : '); - AddCommentText(' Text16.'); + SubgroupComment('Текстовые файлы: основные операции'); + AddCommentText('Данное задание дублирует задание Text16.'); - SubgroupComment(' : '); - AddCommentText(' Dynamic30.'); - AddCommentText('\P ObjDyn30. , , '); - AddCommentText(' . :'); - AddCommentText(' \<\> , .NET.'); + SubgroupComment('Динамические структуры данных: двусвязный список'); + AddCommentText('Первое задание дублирует задание Dynamic30.'); + AddCommentText('\PВторое задание дублирует задание ObjDyn30. Его реализация совпадает, по существу, '); + AddCommentText('с реализацией предыдущего задания. Отличия проявляются лишь в стиле формулировки:'); + AddCommentText('во втором задании использован \<объектный\> стиль, характерный для среды .NET.'); RegisterGroup; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas index b95239aa4..9736d7ae3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/PT4TaskMaker/PT4DemoTest.pas @@ -1,7 +1,7 @@ uses PT4, PT4Demo; begin -// -// MakeText +// для отображения окна задачника +// надо закомментировать вызов процедуры MakeText MakeText('Demo'); Task('Demo7?'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas index 69173970b..44715e324 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/PT4/String9.pas @@ -1,4 +1,4 @@ -// String9 Programming Taskbook +// Пример решения задачи String9 из электронного задачника Programming Taskbook uses PT4; var n: integer; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas index 4e40b2b95..59285e1a8 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RBcc17.pas @@ -1,4 +1,4 @@ -// cc17 +// Выполнение задания cc17 для Робота uses Robot; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas index 04a3de795..6bf966b38 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/RobotMakeTask/RobotAddTasks.pas @@ -4,7 +4,7 @@ uses Robot,RobotTaskMaker; procedure my1; begin - TaskText(' my1. '); + TaskText('Задание my1. Закрасить помеченные клетки'); Field(15,11); RobotBeginEnd(1,1,15,11); Tag(8,6); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas index 2f6f917c7..4ab24f209 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/CheckedTasks/Robot/random_Robot.pas @@ -1,4 +1,4 @@ - // . + // Демонстрация использования случайных чисел для Робота. Случайное блуждание uses Robot; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas index 52a2acd20..c9f9d8d3c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Иллюстрация использования статических (классовых) конструкторов type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas index 3d9b4026c..8d5974158 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/MyDll.pas @@ -1,4 +1,4 @@ -// Dll- +// Dll-библиотека library MyDll; const n = 10; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas index 39e3b0f4e..39a4f7e00 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/DllTest/main.pas @@ -1,6 +1,6 @@ -// - -// dll-, PascalABC.NET, , -// +// Это - главная программа +// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, +// не подключая пространства имен #reference 'mydll.dll' begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas index 97457129d..a227823f6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachExamples.pas @@ -1,5 +1,5 @@ -// , -// foreach +// Пример иллюстрирует всевозможные типы контейнеров, +// по которым можно перемещаться с помощью оператора foreach uses System.Collections.Generic; @@ -15,7 +15,7 @@ var begin for var i:=1 to n do a[i] := Random(100); - // foreach + // Цикл foreach по статическому массиву foreach x in a do write(x,' '); writeln; @@ -24,7 +24,7 @@ begin for var i:=0 to n-1 do b[i] := Random(100); - // foreach + // Цикл foreach по динамическому массиву foreach x in b do write(x,' '); writeln; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas index e74eee07e..5044ff296 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachForSet.pas @@ -1,4 +1,4 @@ -// . - , - +// Цикл по множеству. Порядок - не по алфавиту, поскольку множества реализованы на базе хеш-таблиц begin foreach c: char in ['a'..'z'] do Write(c); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas index 84d0b4fd1..b30140fa1 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ForeachIEnumerable.pas @@ -1,9 +1,9 @@ -// IEnumerable -// foreach +// Пример иллюстрирует реализацию классом интерфейса IEnumerable +// для использования его в операторе foreach uses System.Collections; type - // + // Генератор чисел Фибоначчи FibGen = class(IEnumerable, IEnumerator) private a,b,n,i: integer; @@ -44,7 +44,7 @@ type var f: FibGen; begin - writeln(' '); + writeln('Числа Фибоначчи'); f := new FibGen(25); foreach x: integer in f do write(x,' '); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/FracOperatorOverload.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/FracOperatorOverload.pas index d876aa633..9491ae6be 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/FracOperatorOverload.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/FracOperatorOverload.pas @@ -1,4 +1,4 @@ -// . "" +// Перегрузка операций. Класс "Дробь" type Frac = record private @@ -9,7 +9,7 @@ type Self.n := n; Self.m := m; end; - class function operator+(f1,f2: Frac): Frac; // + class function operator+(f1,f2: Frac): Frac; // операция перегружается как классовая функция begin Result.n := f1.n*f2.m+f1.m*f2.n; Result.m := f1.n*f1.m; @@ -19,7 +19,7 @@ type Result.n := f1.n*f2.m-f1.m*f2.n; Result.m := f1.n*f1.m; end; - function ToString: string; override; // Frac write + function ToString: string; override; // Требуется переопределить эту функцию чтобы выводить переменные типа Frac в write begin Result := Format('{0}/{1}',n,m); end; @@ -31,6 +31,6 @@ begin f := new Frac(2,3); f1 := new Frac(1,2); writelnFormat('{0} + {1} = {2} ',f,f1,f+f1); - // f+f1 Frac.operator+(f,f1) + // f+f1 переводится компилятором в Frac.operator+(f,f1) writelnFormat('{0} - {1} = {2} ',f,f1,f-f1); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericClasses/Stack.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericClasses/Stack.pas index dda2835c3..d818e96ea 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericClasses/Stack.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericClasses/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas index 7828ce4f0..09eea2c38 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/FindT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров function IndexOf(a: array of T; val: T): integer; begin @@ -12,10 +12,10 @@ begin end; end; -var a: array of string := ('', '', '', ''); +var a: array of string := ('Ваня', 'Коля', 'Саша', 'Сережа'); begin - var s := ''; - writelnFormat(' ''{0}'' {1}',s,IndexOf(a,s)); + var s := 'Сережа'; + writelnFormat('Индекс элемент со значением ''{0}'' равен {1}',s,IndexOf(a,s)); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas index 38161cff4..f8b0bcae9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Generics/GenericProcFun/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,7 +11,7 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas index 5937f73cd..7b35e9e54 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/IndexProperties.pas @@ -1,4 +1,4 @@ -// . +// Индексные свойства. Массив цветных квадратов uses GraphABC; const @@ -11,17 +11,17 @@ type VisualArray = class private a: array of Color; - procedure SetItem(i: integer; x: Color); // , i- + procedure SetItem(i: integer; x: Color); // Процедура, устанавливающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); a[i] := x; Draw(i); end; - function GetItem(i: integer): Color; // , i- + function GetItem(i: integer): Color; // Функция, возвращающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); Result := a[i]; end; public @@ -32,29 +32,29 @@ type a[i] := clWhite; Draw; end; - /// i- + /// Рисует i-тый квадрат procedure Draw(i: integer); begin Brush.Color := a[i]; Rectangle(sz+sz*i,sz,sz+sz*(i+1)+1,sz+sz); end; - /// + /// Рисует массив цветных квадратов procedure Draw; begin for var i:=0 to a.Length-1 do Draw(i); end; - /// + /// Индексное свойство по умолчанию property Item[i: integer]: Color read GetItem write SetItem; default; end; var arr: VisualArray; begin - Window.Title := ' '; + Window.Title := 'Иллюстрация индексных свойств'; arr := new VisualArray(dim); SetWindowSize(sz*(dim+2),3*sz); - arr[0] := clGreen; // arr.Items[0] = arr[0] Items + arr[0] := clGreen; // arr.Items[0] = arr[0] поскольку свойство Items является свойством по умолчанию Sleep(delay); arr[1] := clBlack; Sleep(delay); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas index 1050caa42..6f66ceed6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsConcat.pas @@ -1,4 +1,4 @@ -// Concat +// Создание функции Concat с переменным числом параметров function Concat(params strs: array of string): string; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas index 42bc7aa32..e31fc4699 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ParamsWriteln.pas @@ -1,4 +1,4 @@ -// MyWriteln +// Создание процедуры MyWriteln с переменным числом параметров procedure MyWriteln(params args: array of object); begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas index d2708bbb0..5a77aa708 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcParam.pas @@ -1,6 +1,6 @@ -// -// PascalABC.NET -// .NET +// Иллюстрация процедурных переменных как параметров подпрограмм +// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов +// Процедурный тип реализован через делегаты .NET procedure for_each(var a: array of real; p: procedure(var r: real)); var i: integer; begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas index b6d6dbce7..6a4e88dd5 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/ProcVars.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas index 7e47e9082..1bb0dc994 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/Students.pas @@ -1,4 +1,4 @@ -// +//Перегрузка операторов type Student = class Name: string; @@ -10,7 +10,7 @@ type Self.Height := Height; end; class function operator<(left,right: Student): boolean; - // + // Сравнение по росту begin Result := left.Height < right.Height; end; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas index 636383ef8..34728301e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/TemplatePair.pas @@ -1,6 +1,6 @@ -// C++ (template) +// Иллюстрация шаблонов классов в стиле C++ (template) type - /// + /// Пара объектов Pair = template class public First: T; @@ -16,7 +16,7 @@ type end; end; - /// , + /// Пара объектов, каждый из которых можно складывать с объектом того же типа PairForPlus = template class(Pair) public class function operator+(Left,Right: PairForPlus): PairForPlus; @@ -32,8 +32,8 @@ var a,b: PairForPlus; begin - a := new PairForPlus(1, '+'); - b := new PairForPlus(2, ''); + a := new PairForPlus(1, 'один+'); + b := new PairForPlus(2, 'два'); Writeln(r); Writeln(a + b); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/LanguageFeatures/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas index 76e2e438b..2bce6941d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Array/SystemArray1.pas @@ -13,25 +13,25 @@ var a: array of integer; begin SetLength(a, Size); - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := Random(100); - // + // Вывод всех элементов массива PrintArray(a); - // ( & , - // array Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении класса Array) &Array.Sort(a); PrintArray(a); - // + // Обращение массива &Array.Reverse(a); PrintArray(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 99); Writeln(i); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas index cfb28ed3f..9832b1c44 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime1.pas @@ -1,32 +1,32 @@ Uses System; var - d1, d2, d3: DateTime; // - ts: TimeSpan; // + d1, d2, d3: DateTime; // Объекты для хранения даты и времени + ts: TimeSpan; // Объект для хранения промежутков времени begin - // - + // Получение текущей даты - вызов статического метода d1 := DateTime.Now; Writeln(d1); - // + // Дата и время через один месяц d2 := d1.AddMonths(1); Writeln(d2); - // 12 + // Дата и время на 12 часов раньше d2 := d1.AddHours(-12); Writeln(d2); - // - (, ,) + // Формирование даты - вызов конструктора объекта (год, месяц,число) d3 := new DateTime(2001, 1, 1); Writeln(d3); - // , ( ) + // Определение времени, прошедшего с начала тысячелетия (разность дат) ts := d1.Subtract(d3); - // ( - ) + // Промежуток времени в днях (результат - вещественное число) Writeln(ts.TotalDays); - // , , + // Промежуток времени в днях, часах, минутах и секундах WritelnFormat('{0} {1}:{2}:{3}',ts.Days,ts.Hours,ts.Minutes,ts.Seconds); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas index 39da1fb0a..f444870fc 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTime2.pas @@ -6,28 +6,28 @@ var begin s := '27.03.2008 9:58:17'; - // DateTime + //Попытка преобразования строки в объект DateTime if not DateTime.TryParse(s, d) then begin - Writeln(' '); + Writeln('Строка не содержит значение даты и времени'); Exit; end; - // + // Проверка високосности заданного года с помощью статического метода if DateTime.IsLeapYear(d.Year) then - Writeln(' ') + Writeln('Год високосный') else - Writeln(' '); + Writeln('Год невисокосный'); - // + // Преобразование даты и времени в строковое представление s := d.ToString; Writeln(s); - // + // Преобразование даты в строковое представление s := d.ToShortDateString; Writeln(s); - // + // Преобразование времени в строковое представление s := d.ToShortTimeString; Writeln(s); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas index 89ace1bd8..b7afdf928 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.DateTime/DateTimeInterval.pas @@ -1,16 +1,16 @@ -// System.DateTime -// +// Работа с классом System.DateTime +// Вычисление времени выполнения фрагмента кода uses System, PABCSystem; var dt: DateTime := DateTime.Now; begin - // + // Делаем случайную паузу var ms := Random(1000); Writeln('Sleep','(',ms,')'); Sleep(ms); - // DateTime.Now + // Сравниваем с показаниями DateTime.Now Writeln((DateTime.Now-dt).TotalMilliseconds,'ms'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas index 7cfedf189..fe2a5b8a6 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringConvert.pas @@ -4,16 +4,16 @@ var r: real; begin - // - s := '123,3443'; // - Windows + // Преобразование строки в число + s := '123,3443'; // Дробная часть отделяется запятой - настройки Windows if not real.TryParse(s, r) then - Writeln(' s ') + Writeln('Строка s не является строковым представлением вещественного числа') else Writeln(r); if not integer.TryParse(s, i) then - Writeln(' s '); + Writeln('Строка s не является строковым представлением целого числа'); - // + // Преобразование числа в строку i := 10; s := i.ToString; Writeln(s); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas index 201b87861..b0db02e3c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods1.pas @@ -1,30 +1,30 @@ var s1,s2: string; begin - // + // Определение длины строки s1 := 'ABCDEFGH'; Writeln(s1.Length); - // + // Сравнение строк без учета регистра символов s1 := 'AAA'; s2 := 'aaa'; - if String.Compare(s1, s2, {ignoreCase - } true) = 0 then - Writeln(' '); + if String.Compare(s1, s2, {ignoreCase - без учета регистра} true) = 0 then + Writeln('Строки совпадают с точностью до регистра букв'); - // + // Определение вхождений подстрок s1 := 'Long string'; s2 := 'string'; if s1.EndsWith(s2) then - Writeln(' s1 , s2'); + Writeln('В конце строки s1 содержится подстрока, совпадающая с s2'); - // + // Поиск индекса вхождения подстроки в строку Writeln(s1.IndexOf(s2)); - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas index ee01cc1f2..13cc3e57e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringMethods2.pas @@ -1,15 +1,15 @@ var s1,s2: string; begin - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); - // , + // Вставка, удаление и замена подстрок s1 := 'ABCDEFGH'; s2 := s1.Insert(2, 'xxx'); Writeln(s2); @@ -20,18 +20,18 @@ begin s2 := s2.Remove(2, 3); Writeln(s2); - s1 := ' '; - s2 := s1.Replace('', ''); + s1 := 'слово слово слово'; + s2 := s1.Replace('слов', 'молок'); Writeln(s2); - // + // Удаление пробельных символов в концах строки s1 := ' xxx xxx '; Writeln('|', s1, '|'); s1 := s1.Trim; Writeln('|', s1, '|'); - // - s1 := ''; + // Смена регистра символов + s1 := 'абвгд'; s1 := s1.ToUpper; Writeln(s1); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas index 12acf274f..184c12c2e 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.String/StringSplit.pas @@ -6,19 +6,19 @@ var s: string := '12 765 765 76'; begin - // + // Разбиение строки на массив подстрок с заданным разелителем str_arr := s.Split(' '); - // + // Соединение массива подстрок с новым разделителем s := string.Join('+', str_arr); Write(s, '='); - // + // Формирование целочисленного массива по массиву подстрок SetLength(int_arr, str_arr.Length); for var i:=0 to int_arr.Length-1 do integer.TryParse(str_arr[i], int_arr[i]); - // + // Вычисление суммы элементов целочисленного массива var sum := 0; foreach v: integer in int_arr do sum += v; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas index 1b55e5f23..8223bd886 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Timers.Timer/SystemTimer.pas @@ -1,4 +1,4 @@ -//, +=, -=, System.Timers.Timer +//События, +=, -=, демонстрация работы таймера System.Timers.Timer uses System; var Timer:System.Timers.Timer; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas index d385a110e..840d6506d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser {$apptype windows} {$reference System.Windows.Forms.dll} diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas index 1de1978d7..139865687 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/MouseDraw.pas @@ -1,4 +1,4 @@ -// . Windows.Forms, +// Рисование мышью на форме. Иллюстрация Windows.Forms, событий {$apptype windows} {$reference System.Windows.Forms.dll} {$reference System.Drawing.dll} @@ -12,15 +12,15 @@ type MyForm = class(Form) private g: Graphics; - // + // Предыдущие координаты мыши x,y: integer; public constructor; begin Size := new System.Drawing.Size(640,480); StartPosition := FormStartPosition.CenterScreen; - Text := ' '; - // + Text := 'Рисование мышью на форме'; + // Привязка обработчиков к событиям MouseDown += OnMouseDown; MouseMove += OnMouseMove; Resize += OnResize; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas index 6ac3f951b..c544ac9d8 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/TextEditor/TextEditor.pas @@ -8,7 +8,7 @@ uses System.Windows.Forms; const TextFileExt = 'txt'; - TextFileFilter = ' (*.'+TextFileExt+')|*.'+TextFileExt; + TextFileFilter = 'Текстовые файлы (*.'+TextFileExt+')|*.'+TextFileExt; var myForm: Form; @@ -16,7 +16,7 @@ var procedure SaveFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default); f.Write(TextBox1.Text); f.Close; @@ -24,7 +24,7 @@ end; procedure OpenFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default); TextBox1.Text := f.ReadToEnd; f.Close; @@ -37,14 +37,14 @@ end; procedure MenuSaveClick(sender:object; args:System.EventArgs); begin - // + //Диалог для выбора файла var sd := new SaveFileDialog; - // + //Расширение поумолчанию sd.DefaultExt := TextFileExt; - // + //Фильтр для диалга sd.Filter := TextFileFilter; if sd.ShowDialog=DialogResult.OK then - // sd.ShowDialog + //если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то SaveFile(sd.FileName); end; @@ -59,31 +59,31 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Простой текстовый редактор'; TextBox1 := new TextBox; TextBox1.Multiline := True; TextBox1.Height := 100; TextBox1.Dock := DockStyle.Fill; - // + //Полосы прокрутки TextBox1.ScrollBars := ScrollBars.Both; - // + //Устанавливаем шрифт TextBox1.Font := new System.Drawing.Font('Courier New',10); myForm.Controls.Add(TextBox1); - // + //Создаем меню var toolStrip1 := new ToolStrip; toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden; - var miFile := new ToolStripMenuItem(''); - miFile.DropDownItems.Add(new ToolStripMenuItem('', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem(' ...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('',nil,FormClose)); + var miFile := new ToolStripMenuItem('Файл'); + miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose)); toolStrip1.Items.Add(miFile); myForm.Controls.Add(toolStrip1); - // - // = 1, + //Посмотрим в аргументы командной строки + //Если их количество = 1, то открываем if CommandLineArgs.Length = 1 then OpenFile(CommandLineArgs[0]); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas index aaec8b62b..a0f0c2c8c 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/NETLibraries/System.Windows.Forms/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения {$apptype windows} {$reference System.Windows.Forms.dll} @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas index 94048fdb0..4f8bcf2ab 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/BlockVars.pas @@ -1,5 +1,5 @@ -// . -// . GlobalVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл GlobalVars.pas uses Utils; begin @@ -11,5 +11,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas index 79810714a..6cd714a35 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/CalculationsGlobalLocal/GlobalVars.pas @@ -1,5 +1,5 @@ -// . -// . BlockVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл BlockVars.pas uses Utils; var @@ -13,5 +13,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas index 860adadd3..92f5c8d9f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Other/SpeedTests/Milli.pas @@ -1,4 +1,4 @@ -// Milliseconds +// Демонстрация функции Milliseconds uses Utils; const n = 5000; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas index 783ef0f95..846547d33 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/Mand.pas @@ -1,7 +1,7 @@ { - dll: -1. \GraphTest\GraphTest.dpr Delphi -2. \GraphTest\copy_up.bat +Для создания dll: +1. Откомпилируйте проект \GraphTest\GraphTest.dpr с помощью Delphi +2. Запустите файл \GraphTest\copy_up.bat } procedure SetWindowSize(width, height : integer); external 'GraphTest.dll' name 'SetWindowSize'; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas index c54320ad9..df7998740 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/Other/UnmanagedGraphics/MessageBox.pas @@ -2,5 +2,5 @@ function MessageBox(h:integer;m,c:string;t:integer):integer; external 'User32.dll' name 'MessageBox'; begin - MessageBox(0,'!','',0); + MessageBox(0,'Привет!','Сообщение',0); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas index 5d5cf74ca..efe2a13cd 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteCreation.pas @@ -1,14 +1,14 @@ -// +// Создание спрайта и его состояний uses GraphABC,ABCSprites,ABCObjects,Events; var s: SpriteABC; begin - Window.Title := ' '; + Window.Title := 'Создание спрайта'; SetWindowSize(400,300); CenterWindow; - // + // Создание спрайта и добавление в него кадров s := new SpriteABC(150,100,'SpriteFrames\multi1.bmp'); s.Add('SpriteFrames\multi2.bmp'); s.Add('SpriteFrames\multi3.bmp'); @@ -16,14 +16,14 @@ begin s.Add('SpriteFrames\multi4.bmp'); s.Add('SpriteFrames\multi5.bmp'); - // - s.AddState('fly',4); // - 4 - s.AddState('stand',1); // - 1 - s.AddState('sit',1); // - 1 + // Добавление состояний к спрайту + s.AddState('fly',4); // Летать - 4 кадра + s.AddState('stand',1); // Стоять - 1 кадр + s.AddState('sit',1); // Сидеть - 1 кадр - // - (1..10) + // Задание скорости спрайт-анимации (1..10) s.Speed := 9; - // "" + // Сохранение спрайта в "длинный" рисунок и создание информационного файла спрайта s.SaveWithInfo('spr.png'); end. \ No newline at end of file diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas index d189884e5..df48901ad 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/ABCObjects/Sprites/gr_SpriteUsing.pas @@ -1,4 +1,4 @@ -// +// Переключение состояний спрайта щелчком мыши uses GraphABC,ABCSprites,ABCObjects,Events; var @@ -9,19 +9,19 @@ procedure MyMouseDown(x,y,mb: integer); begin if s.PtInside(x,y) then begin - // + // Переход к следующему состоянию спрайта if s.State' ') or (A[ax,ay+vy]<>' ') or (A[ax+vx,ay+vy]<>' ') end; -/// +/// Меняет направление шарика procedure ChangeDirection; begin if A[ax+vx,ay]<>' ' then @@ -82,35 +82,35 @@ begin Sleep(10); end; -/// +/// Рисует шарик procedure ShowBall; begin GotoXY(ax,ay); write('B'); end; -/// +/// Стирает шарик procedure HideBall; begin GotoXY(ax,ay); write(' '); end; -/// +/// Устанавливает вектор движение шарика procedure SetBallCoords(x,y: integer); begin ax := x; ay := y end; -/// +/// Устанавливает координаты шарика procedure SetBallVeloc(vx0,vy0: integer); begin vx := vx0; vy := vy0 end; -/// (x,y) +/// Перемещает шарик к позиции (x,y) procedure MoveTo(x,y: integer); begin HideBall; @@ -118,14 +118,14 @@ begin ShowBall end; -/// (dx,dy) +/// Перемещает шарик на вектор (dx,dy) procedure MoveOn(dx,dy: integer); begin MoveTo(ax+dx,ay+dy); end; BEGIN - SetWindowTitle(' ( CRT)'); + SetWindowTitle('Биллиард (ностальгия по CRT)'); HideCursor; Fill; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas index e6e3d73b8..5ea9b4078 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CPaint.pas @@ -1,6 +1,6 @@ -// -// GotoXY, TextBackGround -// Shift+F9 !!! +// Рисование курсором в консольном окне +// Иллюстрация GotoXY, TextBackGround +// Для запуска программы используйте Shift+F9 !!! uses Crt; var @@ -32,7 +32,7 @@ begin draw := True; color := Green; ClrScr; - SetWindowTitle(' (Esc-, Num 5 - )'); + SetWindowTitle('Рисование курсором (Esc-выход, Num 5 - изменение цвета)'); TextBackGround(color); GotoXY(WindowWidth div 2,WindowHeight div 2); var c: char; @@ -44,7 +44,7 @@ begin begin c := ReadKey; case c of - // Num 5 + // Изменение цвета по клавише Num 5 {5} #12: begin color := color + 1; if color=16 then diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas index b356e8219..5b205c89d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/CRTColors.pas @@ -1,9 +1,9 @@ -// CRT- -// Shift+F9 !!! +// Стандартные CRT-цвета +// Для запуска программы используйте Shift+F9 !!! uses CRT; begin - SetWindowTitle(' CRT-'); + SetWindowTitle('Стандартные CRT-цвета'); for var i:=0 to 15 do begin TextBackground(i); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas index 31ee5835d..b8dc321c4 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/CRT/SimpleTextEditor.pas @@ -1,9 +1,9 @@ -// -// Shift+F9 !!! +// Простейший текстовый редактор +// Для запуска программы используйте Shift+F9 !!! uses CRT; begin - SetWindowTitle(' (Enter - , Esc - )'); + SetWindowTitle('Текстовый редактор (Enter - новая строка, Esc - выход)'); clrScr; repeat var c := ReadKey; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas index 5383ec6fb..0d069ec7f 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Flame.pas @@ -17,20 +17,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer := new array of byte[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas index cc4f40efc..27570e5d3 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Dragon.pas @@ -1,4 +1,4 @@ -// KuMir/PMir +// Пример из пакета KuMir/PMir program Dragon; uses GraphABC,Utils; @@ -12,7 +12,7 @@ var begin SetWindowSize(790,500); - Window.Title := ' '; + Window.Title := 'Кривая Дракона'; var f := True; for var a := 1 to 64 do begin @@ -66,5 +66,5 @@ begin dx := t; UnLockDrawing; end; - write(' = ',Milliseconds/1000,' '); + write('Время работы = ',Milliseconds/1000,' с'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas index a132ee23b..1a3a48c7a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Mandelbrot.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Множество Мандельброта +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -14,7 +14,7 @@ const dy = 300; begin - Window.Title := ': '; + Window.Title := 'Фракталы: множество Мандельброта'; SetWindowSize(600,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -37,6 +37,6 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas index 6224d87c8..3d689e7a5 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/Paporotnik.pas @@ -1,17 +1,17 @@ -/// " " +///Модуль для рисования фракталов семейства "Лист папоротника" unit Paporotnik; uses GraphABC; type - /// + ///Настройки фрактала PaporotnikFractalInitalData = record data: array of array of real; P0,P1,P2,P3:real; end; - /// " " + ///Фрактал "Лист папоротника" PaporotnikFractal = class private data: array of array of real; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/PaporotnikData.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/PaporotnikData.pas index 6eb296f99..38069519a 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/PaporotnikData.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik/PaporotnikData.pas @@ -1,10 +1,10 @@ -/// +///Константы задающие фракталы unit PaporotnikData; uses Paporotnik; var - /// + ///Папоротник с изогнутым листом PaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.0000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0400, -0.0400, 0.8500, 0, 1.6000), @@ -15,7 +15,7 @@ var P2: 7; P3: 7); - /// + ///Папоротник с прямым листом SimplePaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.00, 0.00, 0.00, 0.16, 0, 0.00), ( 0.85, 0.00, 0.00, 0.85, 0, 1.60), @@ -26,7 +26,7 @@ var P2: 7; P3: 7); - /// + ///Елка ElkaData: PaporotnikFractalInitalData := ( data: (( 0.1000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0000, 0.0000, 0.8500, 0, 1.6000), diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik1.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik1.pas index 251b260b6..7bbe65202 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik1.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Fractals/Paporotnik1.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Папоротник +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -17,7 +17,7 @@ const dy = 130; begin - Window.Title := ': '; + Window.Title := 'Фракталы: папоротник'; SetWindowSize(800,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -38,5 +38,5 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas index 02efa3c44..4aee71d02 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Mosaic.pas @@ -1,4 +1,4 @@ -// . +// Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const @@ -13,10 +13,10 @@ const var a: array [0..n,0..m] of Color; begin - Window.Title := ''; + Window.Title := 'Мозаика'; Window.SetSize(800,600); - // + // Заполнение массива случайными цветами for var i:=0 to n-1 do for var j:=0 to m-1 do begin diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas index 2dd11d3dc..76054f2f8 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/Star.pas @@ -1,8 +1,8 @@ uses GraphABC; const - n = 17; // - n1 = 7; // + n = 17; // количество точек + n1 = 7; // через сколько точек соединять begin var a := -Pi/2; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas index 55b1e5338..ea0587a05 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graph3d.pas @@ -1,6 +1,6 @@ -// KuMir/PMir -// -// :) +// Пример из пакета KuMir/PMir +// Публикуется практически без изменений +// Дорог как память :) Uses GraphABC; var Xmin,Xmax,Xstep: real; @@ -57,8 +57,8 @@ begin end; begin - SetWindowCaption(' '); + SetWindowCaption('График функции двух переменных'); SetWindowSize(600,400); - dx := 2; { X } - gr(100); { Y <= MaxN } + dx := 2; { разрешение по оси X } + gr(100); { количество линий по Y <= MaxN } end. diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graphic.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graphic.pas index 20809900e..77a0a3bff 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graphic.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/graphic.pas @@ -1,6 +1,6 @@ -// drawGraph -// OY -// +// Процедура drawGraph рисования графика функции в полном окне +// с масштабированием по оси OY +// Перерисовывает график при изменении размеров окна uses GraphABC; type FUN = function (x: real): real; @@ -10,8 +10,8 @@ begin Result := x*sin(x)*exp(-0.1*x); end; -// l (logical) - -// s (screen) - +// l (logical) - логические координаты +// s (screen) - физические координаты procedure drawGraph(x1,x2: real; f: FUN); var xl0,wl,yl0,hl: real; @@ -56,7 +56,7 @@ begin // drawGraph yl0 := min; hl := -(max-min); - // + // Нарисовать оси системы координат Line(0,LtoSy(0),ws,LtoSy(0)); Line(LtoSx(0),0,LtoSx(0),hs); @@ -75,7 +75,7 @@ end; begin LockDrawing; - SetWindowCaption(' : '); + SetWindowCaption('График функции: масштабирование'); drawGraph(0,60,f); Redraw; OnResize := Resize; diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas index c496bf0f6..17f971f4d 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/GraphABC/rain.pas @@ -1,4 +1,4 @@ -// +// Имитация кругов на воде от капель дождя uses GraphABC; const speed = 2; @@ -20,7 +20,7 @@ end; const z=50; begin - Window.Title := ' '; + Window.Title := 'Капли дождя'; SetWindowSize(800,600); while True do Kaplia(Random(z,WindowWidth-z),Random(z,WindowHeight-z)); diff --git a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas index 87cdc04d8..073c3a6b9 100644 --- a/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas +++ b/ReleaseGenerators/Samples/_SVN/Pas/StandardUnits/Timers/Timer2.pas @@ -1,4 +1,4 @@ -// "". . +// "Собачка". Иллюстрация использования таймера. uses GraphABC, Timers; var @@ -47,7 +47,7 @@ begin end; begin - SetWindowCaption('""'); + SetWindowCaption('"Собачка"'); SetSmoothingOff; OnMouseMove:=MouseMove; xx := 100; yy := 100; diff --git a/SemanticTree/SemanticTree.cs b/SemanticTree/SemanticTree.cs index 4d06115e6..584dbd6e9 100644 --- a/SemanticTree/SemanticTree.cs +++ b/SemanticTree/SemanticTree.cs @@ -6,34 +6,34 @@ using System.Collections.Generic; namespace PascalABCCompiler.SemanticTree { - // . - //basic- , , . - //common- , .., . - //compiled-, , . + //Вид объекта. + //basic-базовый объект, не определяемый в программе, например метод сложения двух целых чисел. + //common-обычный тип, метод и т.д., определяемый пользователем. + //compiled-тип, метод или другой узел, определяемый пользователем. public enum node_kind {basic,common,compiled,indefinite}; - // . ? . + //Уровень доступа класса. Хотя зачем я это пишу? И так понятно из названия. public enum type_access_level {tal_public,tal_internal}; - // ? + //Как мы будем представлять ссылочные и размерные типы? //public enum reference_or_value_type {reference_type,value_type}; - // - , , . + //Расположение элемента - в функции, в классе, в пространстве имен. public enum node_location_kind {in_function_location,in_class_location,in_namespace_location, in_block_location, indefinite}; - // . + //Уровень доступа к элементам класса. public enum field_access_level { fal_private, fal_internal, fal_protected, fal_public }; - //, . + //Обычный, статический или виртуальный элемент класса. public enum polymorphic_state {ps_static,ps_common,ps_virtual,ps_virtual_abstract}; public enum type_special_kind { none_kind, not_set_kind, array_kind, enum_kind, typed_file, binary_file, short_string, array_wrapper, record, set_type, base_set_type, diap_type, text_file }; public enum attribute_qualifier_kind {none_kind, return_kind, assembly_kind, param_kind, type_kind, field_kind, event_kind, property_kind, method_kind} - // - . + //Тип передачи параметра - по ссылке или по значению. public enum parameter_type {value,var,cnst}; - // . + //Тип базовой функции. public enum basic_function_type { none, @@ -60,8 +60,8 @@ namespace PascalABCCompiler.SemanticTree ultob,ultosb,ultos,ultous,ultoi,ultoui,ultol,ultochar,ultof,ultod, //ulong to ... ftod, ftob,ftosb,ftos,ftous,ftoi,ftoui,ftol,ftoul,ftochar, //float to ... dtob,dtosb,dtos,dtous,dtoi,dtoui,dtol,dtoul,dtof, dtochar, - objassign,objeq,objnoteq, // . - //write,writei,writed,writec,writeb,read,readi,readd,readc,readb,expd,absd,absi //temporary functions ( . .) + objassign,objeq,objnoteq, //присваивание и эквивалентность объектов по ссылке. + //write,writei,writed,writec,writeb,read,readi,readd,readc,readb,expd,absd,absi //temporary functions (Нужны только на начальном этапе отладки. Потом обязательно удалить.) objtoobj, boolinc, booldec, boolsinc, boolsdec, booltoi, enumgr, enumgreq, enumsm, enumsmeq, booltob, booltosb, booltos, booltous, booltoui, booltol, booltoul }; @@ -70,44 +70,44 @@ namespace PascalABCCompiler.SemanticTree public enum generic_parameter_kind { gpk_none, gpk_class, gpk_value }; - // . + //Документ в котором описан этот узел. public interface IDocument { - // . + //Полный путь к файлу. string file_name { get; } } - // . + //Документ и позиция в которой описан этот узел. public interface ILocation { - //, . + //Строка, в которой распологается начало данного элемента. int begin_line_num { get; } - //, . + //Столбец, в которой распологается начало данного элемента. int begin_column_num { get; } - //, . + //Строка, в которой распологается конец данного элемента. int end_line_num { get; } - //, . + //Столбец, в которой распологается конец данного элемента. int end_column_num { get; } - //, . + //Документ, в котором определен данный элемент дерева. IDocument document { get; @@ -122,13 +122,13 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Базовый интерфейс для всех интерфейсов узлов дерева. public interface ISemanticNode { void visit(ISemanticVisitor visitor); } - // , ( , ..). . + //Базовый класс, для пердставления определений в программе (определений типов, переменных и т.д.). Никогда не создается. public interface IDefinitionNode : ISemanticNode { string Documentation @@ -141,22 +141,22 @@ namespace PascalABCCompiler.SemanticTree } } - // , . . + //Базовый интерфейс для классов, которые описывают типы. Никогда не создается. public interface ITypeNode : IDefinitionNode { - // - (basic), (common) (compiled). + //Вид узла - базовый(basic), обычный (common) или экспортируемый (compiled). node_kind node_kind { get; } - // . , . + //Имя типа. Для языков не чувствительных к регистрам хранит имя в том виде, в каком тип объявлен. string name { get; } - // . object- =null. + //Базовый тип для данного типа. Для object-а =null. ITypeNode base_type { get; @@ -209,7 +209,7 @@ namespace PascalABCCompiler.SemanticTree get; } - // generic- + //Является ли generic-параметром bool is_generic_parameter { get; @@ -225,13 +225,13 @@ namespace PascalABCCompiler.SemanticTree get; } - // + //Зависит ли от некоторого неопределенного типа bool depended_from_indefinite { get; } - // generic-, + //Описание generic-типа, содержащее данный параметр ICommonTypeNode generic_type_container { get; @@ -244,12 +244,12 @@ namespace PascalABCCompiler.SemanticTree //\ssyy } - // . - // .Net . , . - // , . - // compiled_type_node. - // name base_type. - // , . . + //Интерфейс для описания базовых типов. + //При генерации .Net кода этот класс не нужен. Он может пригодится, например для генерации машинного кода. + //Там он может быть использован, например для представления целых чисел. + //Хотя возможно в этом случае удобнее использовать compiled_type_node. + //Для него могут быть не определены свойства name и base_type. + //В общем когда понадобится, тогда и будем думать. Пока этот интерфейс нигде не должен использоваться. public interface IBasicTypeNode : ITypeNode { @@ -263,16 +263,16 @@ namespace PascalABCCompiler.SemanticTree } } - // , . + //Синонимы типов, определяемые пользователем в программе. public interface ITypeSynonym : IDefinitionNode, ILocated { - // . , . + //Имя типа. Для языков не чувствительных к регистрам хранит имя в том виде, в каком тип объявлен. string name { get; } - //, + //Тип, которому даётся синоним ITypeNode original_type { get; @@ -293,7 +293,7 @@ namespace PascalABCCompiler.SemanticTree } } - // generic- + //Интерфейс для generic-типов public interface IGenericInstance { List generic_parameters @@ -302,7 +302,7 @@ namespace PascalABCCompiler.SemanticTree } } - // generic- + //Интерфейс для generic-инстанций public interface IGenericTypeInstance: IGenericInstance, ICommonTypeNode { ITypeNode original_generic @@ -336,38 +336,38 @@ namespace PascalABCCompiler.SemanticTree { } - // , . + //Описывет обычные типы, определяемые пользователем в программе. public interface ICommonTypeNode : ITypeNode, INamespaceMemberNode, ILocated { bool IsSealed { get; } - // public internal. + //Тип public или internal. type_access_level type_access_level { get; } - // . + //Методы типа. ICommonMethodNode[] methods { get; } - // . + //Поля типа. ICommonClassFieldNode[] fields { get; } - // . + //Свойства типа. ICommonPropertyNode[] properties { get; } - //, . + //Константы, определенные в типе. IClassConstantDefinitionNode[] constants { get; @@ -403,7 +403,7 @@ namespace PascalABCCompiler.SemanticTree get; } - //(ssyy) generic- + //(ssyy) Является ли описанием generic-типа bool is_generic_type_definition { get; @@ -425,18 +425,18 @@ namespace PascalABCCompiler.SemanticTree } } - // , . - // System.Reflection. - // .Net. . - // , , - // System.Reflection . ( ) - // . , - // , dll-. , .. - // . System.Reflection - // . . + //Интерфейс для описания типов, экспортируемых из сборки. + //Для представления откомпилированных типов я обращаюсь непосредственно к System.Reflection. + //Это завязывает нашу систему на .Net. Можно избавится от этого с помощью введения дополнительного уровня абстракции. + //Для этого нужно определить, какие данные нам нужны от откомпилированных типов, и сделать еще одну прослойку + //между System.Reflection и нашими типами. Тогда при генерации кода под другую платформу (например машинного кода) + //нужно будет только привязать прослойку к другому источнику данных. Например, информация о типах будет + //браться не из сборок, а из dll-библиотек. Я не могу сейчас сделать эту прослойку, т.к. я пока не определил + //какие запросы нужны к откомпилированным модулям. Поэтому пока я использую System.Reflection в котором + //вроде все есть. Потом нужно будет обсудить вопрос создания этой прослойки. public interface ICompiledTypeNode : ITypeNode { - // . + //Откомпилированный тип. System.Type compiled_type { get; @@ -448,7 +448,7 @@ namespace PascalABCCompiler.SemanticTree } } - //, 0 . + //Интерфейс, представляющий индексируемый с 0 массив. public interface IRefTypeNode : ITypeNode { ITypeNode pointed_type @@ -496,9 +496,9 @@ namespace PascalABCCompiler.SemanticTree } } - // statement-. , . - // , . - // , , :-). + //Базовый интерфейс для statement-ов. Объекты, реализующие только этот интерфейс нигде не должны создаваться. + //Должны создаваться классы, реализующие интерфейсы производные от данного интерфейса. + //Звучит очень запутано, но вобщем то, что написано выше не очень важно :-). public interface IStatementNode : ISemanticNode, ILocated { @@ -512,35 +512,35 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Базовый интерфейс для выражений. public interface IExpressionNode : IStatementNode { - // . + //Тип выражения. ITypeNode type { get; } } - // . . + //Базовый интерфейс для вызовов функций. Нигде не создается. public interface IFunctionCallNode : IExpressionNode { - // . - // . - // . + //Список фактических параметров. Количество и типы формальных и фактических параметров сверяется + //на этапе построения семантического дерева. При необходимости при построении семантического дерева + //вставляются узлы преобрызования типов. IExpressionNode[] real_parameters { get; } - // . + //Вызываемый метод. IFunctionNode function { get; } //ssyy - // + //Нужно для генерации унаследованных интерфейсных функций bool last_result_function_call { get; @@ -550,10 +550,10 @@ namespace PascalABCCompiler.SemanticTree } - // . + //Вызов базового метода. public interface IBasicFunctionCallNode : IFunctionCallNode { - // . + //Вызываемый метод. IBasicFunctionNode basic_function { get; @@ -570,49 +570,49 @@ namespace PascalABCCompiler.SemanticTree } - // , . + //Вызов функции, определенной в пространстве имен. public interface ICommonNamespaceFunctionCallNode : IFunctionCallNode { - // . + //Вызываемый метод. ICommonNamespaceFunctionNode namespace_function { get; } } - // , . + //Вызов функции, определенной в другой функции. public interface ICommonNestedInFunctionFunctionCallNode : IFunctionCallNode { - // . + //Вызываемый метод. ICommonNestedInFunctionFunctionNode common_function { get; } - // . + //Статическая глубина вложенной функции. int static_depth { get; } } - // . + //Вызов метода класса. public interface ICommonMethodCallNode : INonStaticMethodCallNode { - // . + //Вызываемый метод. ICommonMethodNode method { get; } - // , . + //Экземпляр класса, данный метод которого нужно вызвать. IExpressionNode obj { get; } } - //, this . + //Узел, соответствующий указателю this в программе. public interface IThisNode : IExpressionNode { } @@ -659,23 +659,23 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Вызов статичекого метода класса. public interface ICommonStaticMethodCallNode : IFunctionCallNode { - // . + //Вызываемый метод. ICommonMethodNode static_method { get; } - //, . + //Тип, статический метод которого вызываем. ICommonTypeNode common_type { get; } } - // common-. + //Вызов конструктора common-класса. public interface ICommonConstructorCall : ICommonStaticMethodCallNode { //ssyy @@ -683,16 +683,16 @@ namespace PascalABCCompiler.SemanticTree //\ssyy } - // . + //Вызов откомпилированного метода. public interface ICompiledMethodCallNode : INonStaticMethodCallNode { - // . + //Вызываемый метод. ICompiledMethodNode compiled_method { get; } - // , . + //Экземпляр класса, данный метод которого нужно вызвать. IExpressionNode obj { get; @@ -700,16 +700,16 @@ namespace PascalABCCompiler.SemanticTree } - // , . + //Вызов статического метода, откомптлированного класса. public interface ICompiledStaticMethodCallNode : IFunctionCallNode { - // . + //Вызываемый метод. ICompiledMethodNode static_method { get; } - //, . + //Тип, статический метод которого мы вызываем. ICompiledTypeNode compiled_type { get; @@ -721,7 +721,7 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Вызов конструктора откомпилированного метода. public interface ICompiledConstructorCall : IFunctionCallNode { ICompiledConstructorNode constructor @@ -739,118 +739,118 @@ namespace PascalABCCompiler.SemanticTree //\ssyy } - // . . + //Базовый интерфейс для описания функций. Никогда не создается. public interface IFunctionNode : IDefinitionNode { - // - (basic), (common) (compiled). + //Вид узла - базовый (basic), обычный (common) или экспортируемый (compiled). node_kind node_kind { get; } - // . + //Список формальных параметров функции. IParameterNode[] parameters { get; } - // . + //Тип возвращаемого значения функции. ITypeNode return_value_type { get; } - // . - , . + //Имя функции. Для языков не чувствительных к регистру - в том виде, в котором функция определена. string name { get; } - // - , , . + //Расположение функции - в функции, в классе, в пространстве имен. node_location_kind node_location_kind { get; } - // generic- + //Является ли generic-функцией bool is_generic_function { get; } - // - generic-. 0 -generic. + //Число типов-параметров generic-функции. 0 для не-generic. int generic_parameters_count { get; } } - // . + //Интерфейс члена класса. public interface IClassMemberNode { - //, . + //Тип, содержащий этот член класса. ITypeNode comperehensive_type { get; } - //, . + //Статический, обычный или виртуальный метод. polymorphic_state polymorphic_state { get; } - // . + //Уровень доступа к члену класса. field_access_level field_access_level { get; } } - // . + //Интерфейс члена откомпилированного класса. public interface ICompiledClassMemberNode : IClassMemberNode { - //, . + //Тип, содержащий член класса. ICompiledTypeNode comprehensive_type { get; } } - // . + //Интерфейс члена обычного класса. public interface ICommonClassMemberNode : IClassMemberNode { - //, . + //Тип, содержащий член класса. ICommonTypeNode common_comprehensive_type { get; } } - // , . + //Интерфейс переменной или функции, определенной внутри функции. public interface IFunctionMemberNode { - //, . + //Функция, содержащая этот обьъект. ICommonFunctionNode function { get; } } - // , . + //Интерфейс переменной или функции, определенной в пространстве имен. public interface INamespaceMemberNode { - // , . + //Пространство имен, в котором определен элемент. ICommonNamespaceNode comprehensive_namespace { get; } } - // , (, ). + //Класс для описания базовых, нигде не определенных функций (например, сложение двух целых чисел). public interface IBasicFunctionNode : IFunctionNode { - // . + //Какая именно это базовая функция. basic_function_type basic_function_type { get; @@ -862,7 +862,7 @@ namespace PascalABCCompiler.SemanticTree None, New, Dispose, NewArray } - // , . + //Интерфейс для описания функции, определяемой пользователем. public interface ICommonFunctionNode : IFunctionNode, ILocated { SpecialFunctionKind SpecialFunctionKind @@ -875,47 +875,47 @@ namespace PascalABCCompiler.SemanticTree get; } - // , . + //Список переменных, определяемых в функции. ILocalVariableNode[] var_definition_nodes { get; } - // . + //Список вложенных функций. ICommonNestedInFunctionFunctionNode[] functions_nodes { get; } - // . + //Код функции. IStatementNode function_code { get; } - //, . - null. + //Переменная, которая содержит возвращаемое значение функции. Для процедур - null. ILocalVariableNode return_variable { get; } - //, . + //Константы, определенные в функции. ICommonFunctionConstantDefinitionNode[] constants { get; } - //Generic- + //Generic-параметры функции List generic_params { get; } } - //, . + //Функция, определенная непосредственно в пространстве имен. public interface ICommonNamespaceFunctionNode : ICommonFunctionNode, INamespaceMemberNode { - // , . + //Прстранство имен, в котором определена эта функция. ICommonNamespaceNode namespace_node { get; @@ -927,13 +927,13 @@ namespace PascalABCCompiler.SemanticTree } } - //, . + //Функция, определенная в другой функции. public interface ICommonNestedInFunctionFunctionNode : ICommonFunctionNode, IFunctionMemberNode { } - // , . + //Метод класса, определяемый пользователем. public interface ICommonMethodNode : ICommonFunctionNode, ICommonClassMemberNode { bool is_constructor @@ -960,10 +960,10 @@ namespace PascalABCCompiler.SemanticTree } - // (compiled) . + //Класс для описания экспортируемых (compiled) функций. public interface ICompiledMethodNode : IFunctionNode, ICompiledClassMemberNode { - // . + //Откомпилированный метод. System.Reflection.MethodInfo method_info { get; @@ -975,7 +975,7 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Вызов конструктора откомпилированного типа. public interface ICompiledConstructorNode : IFunctionNode, ICompiledClassMemberNode { System.Reflection.ConstructorInfo constructor_info @@ -984,71 +984,71 @@ namespace PascalABCCompiler.SemanticTree } } - // if. + //Интерфейс для описания конструкции if. public interface IIfNode : IStatementNode { - //. + //Условие. IExpressionNode condition { get; } - // then. + //Тело then. IStatementNode then_body { get; } - // else. if then = null. + //Тело else. Если if без then это свойство = null. IStatementNode else_body { get; } } - // while. + //Интерфейс для конструкции while. public interface IWhileNode : IStatementNode { - //. + //Условие. IExpressionNode condition { get; } - // while. + //Тело while. IStatementNode body { get; } } - // repeat. + //Интерфейс для конструкции repeat. public interface IRepeatNode : IStatementNode { - // do .. while (repeat .. until). + //Тело do .. while (repeat .. until). IStatementNode body { get; } - //. + //Условие. IExpressionNode condition { get; } } - // for. - //For - C++/C# - . for . + //Класс для описания конструкции for. + //For - C++/C# - овский. Для моделирования паскалевского for он преобразуется в эту конструкцию. public interface IForNode : IStatementNode { - // . + //Инициализация переменных цикла. IStatementNode initialization_statement { get; } - // . + //Условие продолжения цикла. IExpressionNode while_expr { get; @@ -1059,13 +1059,13 @@ namespace PascalABCCompiler.SemanticTree get; } - // . + //Изменение счетчиков цикла. IStatementNode increment_statement { get; } - // . + //Тело цикла. IStatementNode body { get; @@ -1221,22 +1221,22 @@ namespace PascalABCCompiler.SemanticTree { } - // swithc. + //Один из вариантов констракции swithc. public interface ICaseVariantNode : IStatementNode { - //, , . + //Выражения, при которых нужно исполгить код, соответствующий этому узлу. IExpressionNode[] expressions { get; } - //, , . + //Диапазоны, при попадании в которые нужно исполнить код, соответствующий этому узлу. IRangExpression[] ranges { get; } - // . + //Код этого узла. IStatementNode statement { get; @@ -1256,24 +1256,24 @@ namespace PascalABCCompiler.SemanticTree } }*/ - // statement-. + //Интерфейс для описания списка statement-ов. public interface IStatementsListNode : IStatementNode { ILocalBlockVariableNode[] LocalVariables { get; } - // statement-. + //Список statement-ов. IStatementNode[] statements { get; } - // + //Положение левой логической скобки ILocation LeftLogicalBracketLocation { get; } - // + //Положение правой логической скобки ILocation RightLogicalBracketLocation { get; @@ -1345,7 +1345,7 @@ namespace PascalABCCompiler.SemanticTree } */ - // . + //Узел пространства имен. public interface INamespaceNode : IDefinitionNode { string namespace_name @@ -1354,22 +1354,22 @@ namespace PascalABCCompiler.SemanticTree } } - // , . + //Узел пространства имен, определенного пользователем. public interface ICommonNamespaceNode : INamespaceNode, ILocated { - // , . + //Пространства имен, вложенные в это пространство имен. ICommonNamespaceNode[] nested_namespaces { get; } - // , . + //Пространство имен, в которое вложенно это пространство имен. INamespaceNode comprehensive_namespace { get; } - //, namespace. + //Типы, описанные в namespace. ICommonTypeNode[] types { get; @@ -1385,19 +1385,19 @@ namespace PascalABCCompiler.SemanticTree get; } - //, namespace. + //Переменные, описанные в этом namespace. ICommonNamespaceVariableNode[] variables { get; } - //, namespace. + //Функции, описанные в namespace. ICommonNamespaceFunctionNode[] functions { get; } - //, namespace. . + //Константы, описанные в namespace. Они должны экспортироваться как нибудь. INamespaceConstantDefinitionNode[] constants { get; @@ -1414,16 +1414,16 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Откомпилированное пространство имен. public interface ICompiledNamespaceNode : INamespaceNode { } - /// dll. + /// Базовый интерфейс для программ и dll. public interface IProgramBase : IDefinitionNode, ILocated { - // , dll. + //Пространства имен, содержащиеся в программе или dll. ICommonNamespaceNode[] namespaces { get; @@ -1435,40 +1435,40 @@ namespace PascalABCCompiler.SemanticTree } } - // dll . + //Узел dll библиотеки. public interface IDllNode : IProgramBase { - // dll. + //Метод инициализации dll. ICommonNamespaceFunctionNode initialization_function { get; } - // dll. + //Метод финализации dll. ICommonNamespaceFunctionNode finalization_function { get; } } - // . + //Корневой узел программы. public interface IProgramNode : IProgramBase { - // . . - // ( ), - // . + //Главная функция. Ее выполнение равносильно выполнению программы. + //Она включает вызовы методов инициализации модулей (в начале), выполнение основной программы + //и вызовы методов финализации модулей. ICommonNamespaceFunctionNode main_function { get; } - // generic-, . + //Инстанции generic-типов, использующиеся в программе. List generic_type_instances { get; } - // generic-, . + //Инстанции generic-типов, использующиеся в программе. List generic_function_instances { get; @@ -1480,13 +1480,13 @@ namespace PascalABCCompiler.SemanticTree } } - // , ( ). + //Тип выражений, которые могут возвращать адрес (например переменная). public interface IAddressedExpressionNode : IExpressionNode { } - // return. + //Оператор return. public interface IReturnNode : IStatementNode { IExpressionNode return_value @@ -1495,8 +1495,8 @@ namespace PascalABCCompiler.SemanticTree } } - //ssyy - // return .ctor. + //ssyy добавил + //Оператор return из .ctor. /*public interface ICtorReturnNode : IStatementNode { }*/ @@ -1504,130 +1504,130 @@ namespace PascalABCCompiler.SemanticTree public interface IReferenceNode : IAddressedExpressionNode { - // . + //Определение локальной переменной. IVAriableDefinitionNode Variable { get; } } - //, . + //Интерфейс, представляющий обращение к локальной переменной в теле программы. public interface ILocalVariableReferenceNode : IReferenceNode { - // . + //Определение локальной переменной. ILocalVariableNode variable { get; } - // , . + //Разность статических глубин, между определением и вхождением. int static_depth { get; } } - //, . + //Интерфейс, представляющий обращение к локальной переменной в блоке. public interface ILocalBlockVariableReferenceNode : IReferenceNode { - // . + //Определение локальной переменной. ILocalBlockVariableNode Variable { get; } } - //, , namespace. + //Интерфейс, представляющий обращение к переменной, определенной непосредственно в namespace. public interface INamespaceVariableReferenceNode : IReferenceNode { - //. + //Переменная. ICommonNamespaceVariableNode variable { get; } } - //, . + //Интерфейс, представляющий обращение к полю класса. public interface ICommonClassFieldReferenceNode : IReferenceNode { - // . + //Поле класса. ICommonClassFieldNode field { get; } - // . + //Объект класса. IExpressionNode obj { get; } } - //, . + //Интерфейс, представляющий обращение к статическому полю класса. public interface IStaticCommonClassFieldReferenceNode : IReferenceNode { - // . + //Статическое поле класса. ICommonClassFieldNode static_field { get; } - //, . + //Класс, к статическому методу которого мы обращаемся. ICommonTypeNode class_type { get; } } - // . + //Обращение к полю откомпилированного класса. public interface ICompiledFieldReferenceNode : IReferenceNode { - // . + //Поле класса. ICompiledClassFieldNode field { get; } - // . + //Объект класса. IExpressionNode obj { get; } } - //, . + //Интерфейс, представляющий обращение к статическому полю откомпилированного класса. public interface IStaticCompiledFieldReferenceNode : IReferenceNode { - // . + //Поле класса. ICompiledClassFieldNode static_field { get; } - //, . + //Класс, к статическому полю которого мы обращаемся. ICompiledTypeNode class_type { get; } } - // . + //Обращение к параметру метода. public interface ICommonParameterReferenceNode : IReferenceNode { - // , . + //Параметр метода, к которому мы обращаемся. ICommonParameterNode parameter { get; } - // , . + //Разность статических глубин, между обращением к параметру и методом в котором он объявлен. int static_depth { get; } } - // ( , , ..). + //Базовый узел для представления констант в теле программы (не именованных констант, а чисел, строк и т.д.). public interface IConstantNode : IExpressionNode { object value @@ -1636,130 +1636,130 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Интерфейс для представления булевских констант. public interface IBoolConstantNode : IConstantNode { - // . + //Значение константы. bool constant_value { get; } } - // byte . + //Интерфейс для представления byte констант. public interface IByteConstantNode : IConstantNode { - // . + //Значение константы. byte constant_value { get; } } - // signed byte . + //Интерфейс для представления signed byte констант. public interface ISByteConstantNode : IConstantNode { - // . + //Значение константы. sbyte constant_value { get; } } - // signed short . + //Интерфейс для представления signed short констант. public interface IShortConstantNode : IConstantNode { - // . + //Значение константы. short constant_value { get; } } - // unsigned short . + //Интерфейс для представления unsigned short констант. public interface IUShortConstantNode : IConstantNode { - // . + //Значение константы. ushort constant_value { get; } } - // int . + //Интерфейс для представления int констант. public interface IIntConstantNode : IConstantNode { - // . + //Значение константы. int constant_value { get; } } - // unsigned int . + //Интерфейс для представления unsigned int констант. public interface IUIntConstantNode : IConstantNode { - // . + //Значение константы. uint constant_value { get; } } - // long . + //Интерфейс для представления long констант. public interface ILongConstantNode : IConstantNode { - // . + //Значение константы. long constant_value { get; } } - // unsigned long . + //Интерфейс для представления unsigned long констант. public interface IULongConstantNode : IConstantNode { - // . + //Значение константы. ulong constant_value { get; } } - // float . + //Интерфейс для представления float констант. public interface IFloatConstantNode : IConstantNode { - // . + //Значение константы. float constant_value { get; } } - // double . + //Интерфейс для представления double констант. public interface IDoubleConstantNode : IConstantNode { - // . + //Значение константы. double constant_value { get; } } - // char ( 2- char - widechar delphi). + //Интерфейс для представления char констант (этот класс для 2-байтных char - widechar в delphi). public interface ICharConstantNode : IConstantNode { - // . + //Значение константы. char constant_value { get; } } - // string-. + //Интерфейс для представления string-констант. public interface IStringConstantNode : IConstantNode { - // . + //Значение константы. string constant_value { get; @@ -1860,32 +1860,32 @@ namespace PascalABCCompiler.SemanticTree }*/ - /*// . + /*//Узел для представления оператора присваивания. public interface IAssignNode : IExpressionNode { - // . + //Чему присваиванием. IAddressedExpressionNode to { get; } - // . + //Что присваиваем. IExpressionNode from { get; } }*/ - // , , . . + //Базовй интерфейс для формальных параметров функций, локальных переменных, глобальных переменных программы и модуля и полей класса. Нигде не создается. public interface IVAriableDefinitionNode : IDefinitionNode { - // . + //Имя переменной. string name { get; } - // . + //Тип переменной. ITypeNode type { get; @@ -1896,24 +1896,24 @@ namespace PascalABCCompiler.SemanticTree get; } - // . + //Раположение переменной. node_location_kind node_location_kind { get; } } - // . + //Интерфейс для описания локальных переменных. public interface ILocalVariableNode : IVAriableDefinitionNode, IFunctionMemberNode, ILocated { - //, . . + //Используется, ли переменная во вложенных функчиях. Исрользуется для оптимизации. bool is_used_as_unlocal { get; } } - // . + //Интерфейс для описания локальных переменных. public interface ILocalBlockVariableNode : IVAriableDefinitionNode, ILocated { IStatementsListNode Block @@ -1922,19 +1922,19 @@ namespace PascalABCCompiler.SemanticTree } } - //, , . + //Интерфейс, представляющий глобальную переменную, описанную в модуле или программе. public interface ICommonNamespaceVariableNode : IVAriableDefinitionNode, INamespaceMemberNode, ILocated { } - // . + //Интерфейс для описания полей класса. public interface ICommonClassFieldNode: IVAriableDefinitionNode, ICommonClassMemberNode, ILocated { } - //, . + //Переменная, определенная в откомпилированном классе. public interface ICompiledClassFieldNode : IVAriableDefinitionNode, ICompiledClassMemberNode { System.Reflection.FieldInfo compiled_field @@ -1943,16 +1943,16 @@ namespace PascalABCCompiler.SemanticTree } } - // , , . + //Базовый интерфейс для интерфейсов, представляющих параметры базовых, обычных и откомпилированных функций. public interface IParameterNode : IVAriableDefinitionNode { - // . + //Тип параметра. parameter_type parameter_type { get; } - //, . + //Функция, в которой описан этот праметр. IFunctionNode function { get; @@ -1974,61 +1974,61 @@ namespace PascalABCCompiler.SemanticTree } } - // common . + //Интерфейс для представления параметров common функций. public interface ICommonParameterNode : IParameterNode, ILocated { - //, . + //Функция, в которой определен параметер. ICommonFunctionNode common_function { get; } - // . + //Используется ли параметр во вложенных функциях. bool is_used_as_unlocal { get; } } - //, . + //Интерфейс, представляющий параметры базовых функций. public interface IBasicParameterNode : IParameterNode { } - //, . + //Интерфейс, представляющий параметры откомпилироанных функций. public interface ICompiledParameterNode : IParameterNode { - //, . + //Функция, в которой определен параметер. ICompiledMethodNode compiled_function { get; } } - //, . + //Интерфейс, описывающий определение константы. public interface IConstantDefinitionNode : IDefinitionNode { - // . + //Имя константы. string name { get; } - // . + //Тип константы. ITypeNode type { get; } - // . + //Значение константы. IConstantNode constant_value { get; } } - //, . + //Константа, определенная в классе. public interface IClassConstantDefinitionNode : IConstantDefinitionNode, IClassMemberNode, ILocated { @@ -2042,7 +2042,7 @@ namespace PascalABCCompiler.SemanticTree } } - //, . + //Константа, определенная в пространстве имен. public interface INamespaceConstantDefinitionNode : IConstantDefinitionNode, ILocated { ICommonNamespaceNode comprehensive_namespace @@ -2051,7 +2051,7 @@ namespace PascalABCCompiler.SemanticTree } } - //, . + //Константа, определенная в функции. public interface ICommonFunctionConstantDefinitionNode : IConstantDefinitionNode, ILocated { ICommonFunctionNode comprehensive_function @@ -2060,7 +2060,7 @@ namespace PascalABCCompiler.SemanticTree } } - //, . + //Константа, определенная в откомпилированном типе. public interface ICompiledConstantNode : IConstantDefinitionNode { ICompiledTypeNode comprehensive_type @@ -2069,40 +2069,40 @@ namespace PascalABCCompiler.SemanticTree } } - //, . . + //Узел, описывающий свойство класса. Никогда не создается. public interface IPropertyNode : IDefinitionNode { - // (basic, common, compiled). + //Вид объекта (basic, common, compiled). node_kind node_kind { get; } - // . + //Имя свойства. string name { get; } - //, . + //Тип, который содержит это свойство. ITypeNode comprehensive_type { get; } - // . + //Тип свойства. ITypeNode property_type { get; } - //, . + //Функция, которая возвращает значение свойства. IFunctionNode get_function { get; } - //, . + //Функция, которая устанавливает значение свойства. IFunctionNode set_function { get; @@ -2114,56 +2114,56 @@ namespace PascalABCCompiler.SemanticTree } } - // . + //Определяемое пользователем свойство. public interface ICommonPropertyNode : IPropertyNode, ICommonClassMemberNode, ILocated { - //, . + //Тип, который содержит это свойство. /*ICommonTypeNode common_comprehensive_type { get; }*/ - //, . + //Функция, которая возвращает значение свойства. /*ICommonClassMemberNode get_common_function { get; } - //, . + //Функция, которая устанавливает значение свойства. ICommonClassMemberNode set_common_function { get; }*/ } - // . , . + //Базовое свойство. Пока нигде не нужно, но для реализации машинного кода может очень пригодится. public interface IBasicPropertyNode : IPropertyNode { } - // . + //Свойство в откомпилированном типе. public interface ICompiledPropertyNode : IPropertyNode, ICompiledClassMemberNode { - // . + //Свойство в сборке. System.Reflection.PropertyInfo property_info { get; } - //, . + //Тип, который содержит это свойство. ICompiledTypeNode compiled_comprehensive_type { get; } - //, . + //Функция, которая возвращает значение свойства. ICompiledMethodNode compiled_get_method { get; } - //, . + //Функция, которая устанавливает значение свойства. ICompiledMethodNode compiled_set_method { get; @@ -2224,13 +2224,13 @@ namespace PascalABCCompiler.SemanticTree public interface ILabelNode : IDefinitionNode, ILocated { - // . , . + //Имя метки. Для языков не чувствительных к регистрам хранит имя в том виде, в каком тип объявлен. string name { get; } - // + //встречена ли метка в коде /*bool is_defined { get; @@ -2241,13 +2241,13 @@ namespace PascalABCCompiler.SemanticTree public interface ILabeledStatementNode : IStatementNode, ILocated { - //, statement + //Метка, которой помечен statement ILabelNode label { get; } - // + //Сама инструкция IStatementNode statement { get; @@ -2257,7 +2257,7 @@ namespace PascalABCCompiler.SemanticTree public interface IGotoStatementNode : IStatementNode, ILocated { - //, + //Метка, на которую происходит переход ILabelNode label { get; @@ -2479,19 +2479,19 @@ namespace PascalABCCompiler.SemanticTree } public interface ILambdaFunctionNode : IExpressionNode { - // - (basic), (common) (compiled). + //Вид узла - базовый (basic), обычный (common) или экспортируемый (compiled). node_kind node_kind { get; } - // . + //Список формальных параметров функции. IParameterNode[] parameters { get; } - // . + //Тип возвращаемого значения функции. ITypeNode return_value_type { get; @@ -2507,19 +2507,19 @@ namespace PascalABCCompiler.SemanticTree get; } - // - , , . + //Расположение функции - в функции, в классе, в пространстве имен. node_location_kind node_location_kind { get; } - // generic- + //Является ли generic-функцией bool is_generic_function { get; } - // - generic-. 0 -generic. + //Число типов-параметров generic-функции. 0 для не-generic. int generic_parameters_count { get; @@ -2527,15 +2527,15 @@ namespace PascalABCCompiler.SemanticTree } public interface ILambdaFunctionCallNode : IExpressionNode { - // . - // . - // . + //Список фактических параметров. Количество и типы формальных и фактических параметров сверяется + //на этапе построения семантического дерева. При необходимости при построении семантического дерева + //вставляются узлы преобрызования типов. IExpressionNode[] parameters { get; } - // . + //Вызываемый метод. ILambdaFunctionNode lambda { get; diff --git a/SyntaxTree/tree/WalkingVisitorNew.cs b/SyntaxTree/tree/WalkingVisitorNew.cs index 40b0ecfae..531d42160 100644 --- a/SyntaxTree/tree/WalkingVisitorNew.cs +++ b/SyntaxTree/tree/WalkingVisitorNew.cs @@ -5,12 +5,12 @@ using System.Collections.Generic; namespace PascalABCCompiler.SyntaxTree { - // : - //1. , OnEnter OnLeave - // . . + //Два варианта использования визитора: + //1. Создать экземпляр этого класса, привязать к OnEnter и OnLeave обработчики посещений узла + //и запустить обход. Визитор обойдет дерево и для каждого узла вызовет эти обработчики. // - //2. , . - // visit' ( base.visit), . + //2. Унаследовать от этого класса свой класс, в котором переорпеделить обработку нужных узлов. + //Не забывать при этом о вызове visit'ов для подузлов (или base.visit), если это нужно. public delegate void VisitorDelegateNew(syntax_tree_node node); @@ -20,7 +20,7 @@ namespace PascalABCCompiler.SyntaxTree protected VisitorDelegateNew OnEnter; protected VisitorDelegateNew OnLeave; - protected bool visitNode = true; // OnEnter false + protected bool visitNode = true; // в OnEnter можно сделать false public virtual void ProcessNode(syntax_tree_node Node) { diff --git a/TestSamples/ABCObjectsLib.pas b/TestSamples/ABCObjectsLib.pas index 9e55c0095..ef433266b 100644 --- a/TestSamples/ABCObjectsLib.pas +++ b/TestSamples/ABCObjectsLib.pas @@ -1,7 +1,7 @@ -/// , , -/// . -/// , -/// . +///Модуль реализует векторные графические объекты с возможностью масштабирования, наложения друг на друга, +///создания составных графических объектов и многократного их вложения друг в друга. +///Каждый векторный графический объект перерисовывает себя при перемещении, изменении размеров +///и частичном перекрытии другими объектами. library ABCObjectsLib; //#apptype windows @@ -17,7 +17,7 @@ type ContainerABC = class; GRectangle = System.Drawing.Rectangle; - /// + /// Базовый класс для всех графических объектов ObjectABC = class private fx,fy: integer; @@ -31,7 +31,7 @@ type _dx,_dy: integer; procedure SetCoords(x,y: integer); public - // InternalDraw: ( ). Draw(fx,fy) + // InternalDraw: низкоуровневая процедура (не вызывается пользователем). Просто вызывает Draw(fx,fy) procedure InternalDraw; procedure SetVis(v: boolean); procedure SetColor(cl: GColor); @@ -63,102 +63,102 @@ type procedure DrawText(x,y: integer; g: Graphics); procedure Init(x,y,w,h: integer; cl: GColor); procedure InitBy(g: ObjectABC); - // Draw: . + // Draw: переопределяется в подклассах. Рисует объект на текущей канве procedure Draw(x,y: integer; g: Graphics); virtual; begin end; procedure Draw(x,y: integer); public - /// (w,h) cl (x,y) + /// Создает графический объект размера (w,h) цвета cl с координатами левого верхнего угла (x,y) constructor Create(x,y,w,h: integer; cl: GColor); - /// - g + /// Создает графический объект - копию объекта g constructor Create(g: ObjectABC); - /// + /// Уничтожает графический объект destructor Destroy; - // Redraw: ( ). - // , drawRect(Bounds). - // , (., ) - // ( ) + // Redraw: низкоуровневая процедура (не вызывается пользователем). + // Обновляет изображение объекта на экране, вызывая drawRect(Bounds). + // Вызывается в ситуациях, когда границы объекта не изменяются (напр., смена цвета) + // или увеличиваются (добавление нового объекта к фигуре) procedure Redraw; - // RedrawNow - , LockDrawing + // RedrawNow - вызывает перерисовку объекта, несмотря на LockDrawing procedure RedrawNow; - /// (x,y) + /// Перемещает левый верхний угол графического объекта к точке (x,y) procedure MoveTo(x,y: integer); - /// (a,b) + /// Перемещает графический объект на вектор (a,b) procedure MoveOn(a,b: integer); - /// , dx,dy + /// Перемещает графический объект на вектор, задаваемый свойствами dx,dy procedure Move; virtual; - /// f (f>1 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 00,' <0'); +// Assert(f>0,'масштабный коэффициент<0'); Width := round(Width*f); Height := round(Height*f); end; @@ -1289,7 +1289,7 @@ end; //------ BoundedObjectABC ------- constructor BoundedObjectABC.Create(x,y,w,h: integer; cl: GColor); begin -// ? +// А нужно ли это? Init(x,y,w,h,cl); end; @@ -1707,7 +1707,7 @@ begin fh := TextHeight(Text); if not __LockDrawingObjects then DrawAfterChangeBounds(r,Bounds) -// Redraw; // ! +// Redraw; // это неверно! end; procedure TextABC.SetTB(b: boolean); @@ -1829,7 +1829,7 @@ end; procedure RegularPolygonABC.SetWidth(Width: integer); begin if Width mod 2 = 0 then - Width := Width - 1; // + Width := Width - 1; // Ширина и высота должны быть нечетными ObjectABCSetSize(Width,Width); end; @@ -2229,7 +2229,7 @@ begin p := Picture.Create(fname); p.Transparent := True; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2240,7 +2240,7 @@ procedure MultiPictureABC.Init(x,y,w: integer; p: Picture); begin Self.p := p; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2304,7 +2304,7 @@ procedure MultiPictureABC.ChangePicture(w: integer; fname: string); begin p.Load(fname); if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; Width := w; @@ -2320,7 +2320,7 @@ begin Inc(cnt); p1 := Picture.Create(fname); if (p1.Width<>Width) or (p1.Height<>Height) then - raise Exception.Create(' '+fname+' MultiPictureABC'); + raise Exception.Create('Размеры картинки в файле '+fname+' отличаются от размеров MultiPictureABC'); p1.Transparent := Transparent; p.Width := p.Width + Width; r1 := new System.Drawing.Rectangle(0,0,Width,Height); @@ -2331,7 +2331,7 @@ end; procedure MultiPictureABC.SetCurrentPicture(i: integer); begin if (i<1) or (i>Count) then - raise Exception.Create(' '+IntToStr(i)+' '+IntToStr(i)+'..'+IntToStr(Count)); + raise Exception.Create('Номер картинки '+IntToStr(i)+' находится вне диапазона '+IntToStr(i)+'..'+IntToStr(Count)); cur := i; Redraw; end; @@ -2675,7 +2675,7 @@ begin if ob=nil then Exit; ob.dx := x; - ob.dy := y; // dx dy + ob.dy := y; // использую dx и dy для задания клеточных координат на доске ob.Center := new Point(Left+CellSizeX*(x-1)+CellSizeX div 2,Top+CellSizeY*(y-1)+CellSizeY div 2); end; diff --git a/TestSamples/ABCObjectsLibTest.pas b/TestSamples/ABCObjectsLibTest.pas index 0e0270424..0ed4c4b9f 100644 --- a/TestSamples/ABCObjectsLibTest.pas +++ b/TestSamples/ABCObjectsLibTest.pas @@ -1,4 +1,4 @@ -// StarABC +// Изменение свойств объекта StarABC #reference 'ABCObjectsLib.dll' #reference 'System.Drawing.dll' diff --git a/TestSamples/CompilationSamples/15.pas b/TestSamples/CompilationSamples/15.pas index a9af62830..2ced031ef 100644 --- a/TestSamples/CompilationSamples/15.pas +++ b/TestSamples/CompilationSamples/15.pas @@ -1,5 +1,5 @@ // 87.117.14.184 -// 15 +// Игра в 15 uses GraphABC,ABCObjects,ABCButtons,Events; const @@ -17,7 +17,7 @@ var EmptyCellX,EmptyCellY: integer; MovesCount: integer; - EndOfGame: boolean; // True + EndOfGame: boolean; // True если все фишки стоят на своих местах procedure Swap(var x,y: integer); var v: integer; @@ -27,7 +27,7 @@ begin y:=v; end; -// +// Поменять местами две фишки procedure Swap(var p,p1: SquareABC); var v: SquareABC; @@ -44,13 +44,13 @@ begin p1.Top:=i; end; -// , +// Определить, являются ли клетки соседями function Sosedi(x1,y1,x2,y2: integer): boolean; begin Result:=(abs(x1-x2)=1) and (y1=y2) or (abs(y1-y2)=1) and (x1=x2) end; -// +// Заполнить вспомогательный массив цифр procedure FillDigitsArr; var i: integer; begin @@ -58,7 +58,7 @@ begin digits[i]:=i; end; -// . +// Перемешать вспомогательный массив цифр. Количество обменов должно быть четным procedure MeshDigitsArr; var i,x: integer; begin @@ -70,14 +70,14 @@ begin Swap(digits[i],digits[x]); end; if n mod 2=0 then - Swap(digits[1],digits[2]); // + Swap(digits[1],digits[2]); // количество обменов должно быть четным end; -// . - 0 +// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 procedure Fill15ByDigitsArr; var x,y,i: integer; begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // + Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол EmptyCellX:=n; EmptyCellY:=n; i:=1; @@ -90,18 +90,18 @@ begin end; end; -// +// Перемешать массив фишек procedure Mesh15; begin MeshDigitsArr; Fill15ByDigitsArr; MovesCount:=0; EndOfGame:=False; - StatusRect.Text:=' : '+IntToStr(MovesCount); + StatusRect.Text:='Количество ходов: '+IntToStr(MovesCount); StatusRect.Color:=RGB(200,200,255); end; -// +// Создать массив фишек procedure Create15; var x,y: integer; begin @@ -122,7 +122,7 @@ begin Fill15ByDigitsArr; end; -// , +// Проверить, все ли фишки стоят на своих местах function IsSolution: boolean; var x,y,i: integer; begin @@ -144,24 +144,24 @@ end; procedure MouseDown(x,y,mb: integer); var fx,fy: integer; begin - if EndOfGame then // , "" + if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" exit; - if ObjectUnderPoint(x,y)=nil then // E , + if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; - fx:=(x-x0) div (sz+zz) + 1; // , + fx:=(x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью fy:=(y-y0) div (sz+zz) + 1; if (fx>n) or (fy>n) then exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // , + if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами begin Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); EmptyCellX:=fx; EmptyCellY:=fy; Inc(MovesCount); - StatusRect.Text:=' : '+IntToStr(MovesCount); + StatusRect.Text:='Количество ходов: '+IntToStr(MovesCount); if IsSolution then begin - StatusRect.Text:='! : '+IntToStr(MovesCount); + StatusRect.Text:='Победа! Сделано ходов: '+IntToStr(MovesCount); StatusRect.Color:=RGB(255,200,200); EndOfGame:=True; end @@ -170,18 +170,18 @@ end; begin SetSmoothingOff; - SetWindowCaption(' 15'); + SetWindowCaption('Игра в 15'); SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); EndOfGame:=False; Create15; - MeshButton:=ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'',clLightGray); + MeshButton:=ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); MeshButton.OnClick:=Mesh15; StatusRect:=RectangleABC.Create(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); StatusRect.TextVisible:=True; MovesCount:=0; - StatusRect.Text:=' : '+IntToStr(MovesCount); + StatusRect.Text:='Количество ходов: '+IntToStr(MovesCount); StatusRect.BorderWidth:=2; StatusRect.BorderColor:=RGB(80,80,255);//StatusRect.Color; diff --git a/TestSamples/CompilationSamples/ABC.pas b/TestSamples/CompilationSamples/ABC.pas index df9c3d346..de94d7aba 100644 --- a/TestSamples/CompilationSamples/ABC.pas +++ b/TestSamples/CompilationSamples/ABC.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; diff --git a/TestSamples/CompilationSamples/ABCObjectsLibTest.pas b/TestSamples/CompilationSamples/ABCObjectsLibTest.pas index 36ff0932d..30971bbb4 100644 --- a/TestSamples/CompilationSamples/ABCObjectsLibTest.pas +++ b/TestSamples/CompilationSamples/ABCObjectsLibTest.pas @@ -1,4 +1,4 @@ -// StarABC +// Изменение свойств объекта StarABC #reference 'D:\Miks\_samples\ABCObjectsLib.dll' #reference 'System.Drawing.dll' diff --git a/TestSamples/CompilationSamples/AllFromObject.pas b/TestSamples/CompilationSamples/AllFromObject.pas index 1bf1fd91f..f33bcd697 100644 --- a/TestSamples/CompilationSamples/AllFromObject.pas +++ b/TestSamples/CompilationSamples/AllFromObject.pas @@ -1,4 +1,4 @@ -// - Object +// Все типы - производные от Object var i: integer; r: real; @@ -10,5 +10,5 @@ begin o := r; writeln(o.GetType); if o.GetType=typeof(real) then - writeln(' o - '); + writeln('В переменной o - вещественный тип'); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Amp.pas b/TestSamples/CompilationSamples/Amp.pas index a7c48162d..64c8ee9f9 100644 --- a/TestSamples/CompilationSamples/Amp.pas +++ b/TestSamples/CompilationSamples/Amp.pas @@ -1,9 +1,9 @@ -// & +// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова var &begin,&end: integer; begin &begin := 1; &end := 2; - var t: System.Type := &begin.GetType; // System.Type & + var t: System.Type := &begin.GetType; // в System.Type использовать & не надо write(&begin,' ',&end,' ',t); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Assign1.pas b/TestSamples/CompilationSamples/Assign1.pas index 42322042f..ac5fe9ee8 100644 --- a/TestSamples/CompilationSamples/Assign1.pas +++ b/TestSamples/CompilationSamples/Assign1.pas @@ -1,12 +1,12 @@ -// +// Использование вспомогательных переменных var r: real; begin - write(' r: '); + write('Введите r: '); readln(r); - var r2,r4,r8: real; // + var r2,r4,r8: real; // вспомогательные переменные r2 := r * r; r4 := r2 * r2; r8 := r4 * r4; - writeln(r,' 8 = ',r8); + writeln(r,' в степени 8 = ',r8); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Assign2.pas b/TestSamples/CompilationSamples/Assign2.pas index e255b6f1f..13b2ad3a9 100644 --- a/TestSamples/CompilationSamples/Assign2.pas +++ b/TestSamples/CompilationSamples/Assign2.pas @@ -1,12 +1,12 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real; // + var v: real; // вспомогательная переменная v := x; x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/AssignExt.pas b/TestSamples/CompilationSamples/AssignExt.pas index d045b6aff..3ba218714 100644 --- a/TestSamples/CompilationSamples/AssignExt.pas +++ b/TestSamples/CompilationSamples/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Умножение на 3 writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/TestSamples/CompilationSamples/AssignExt2.pas b/TestSamples/CompilationSamples/AssignExt2.pas index d045b6aff..3ba218714 100644 --- a/TestSamples/CompilationSamples/AssignExt2.pas +++ b/TestSamples/CompilationSamples/AssignExt2.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Умножение на 3 writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/TestSamples/CompilationSamples/AutoVars.pas b/TestSamples/CompilationSamples/AutoVars.pas index 2756e7242..25797a7bb 100644 --- a/TestSamples/CompilationSamples/AutoVars.pas +++ b/TestSamples/CompilationSamples/AutoVars.pas @@ -1,5 +1,5 @@ -// -// for +// Автоопределение типа переменной +// Описание переменной в заголовке цикла for begin var x := 2; for var i:=1 to 10 do diff --git a/TestSamples/CompilationSamples/BlockVar.pas b/TestSamples/CompilationSamples/BlockVar.pas index 2edf55601..d1257db6c 100644 --- a/TestSamples/CompilationSamples/BlockVar.pas +++ b/TestSamples/CompilationSamples/BlockVar.pas @@ -1,11 +1,11 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real := x; // + var v: real := x; // вспомогательная переменная x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/BlockVars.pas b/TestSamples/CompilationSamples/BlockVars.pas index 94048fdb0..4f8bcf2ab 100644 --- a/TestSamples/CompilationSamples/BlockVars.pas +++ b/TestSamples/CompilationSamples/BlockVars.pas @@ -1,5 +1,5 @@ -// . -// . GlobalVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл GlobalVars.pas uses Utils; begin @@ -11,5 +11,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSamples/CompilationSamples/Boolean1.pas b/TestSamples/CompilationSamples/Boolean1.pas index 8549b432e..630763ae6 100644 --- a/TestSamples/CompilationSamples/Boolean1.pas +++ b/TestSamples/CompilationSamples/Boolean1.pas @@ -1,16 +1,16 @@ -// . and, or not +// Логический тип. Логические выражения с and, or и not var b: boolean; x: integer; begin - write(' x ( 1 9): '); + write('Введите x (от 1 до 9): '); readln(x); b := x=5; writeln('x=5? ',b); b := (x>=3) and (x<=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := (x=3) or (x=4) or (x=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := not Odd(x); - writeln('x - ? ',b); + writeln('x - четное? ',b); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Boxing.pas b/TestSamples/CompilationSamples/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/TestSamples/CompilationSamples/Boxing.pas +++ b/TestSamples/CompilationSamples/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/TestSamples/CompilationSamples/CPaint.pas b/TestSamples/CompilationSamples/CPaint.pas index 5c6341856..1a6d1228f 100644 --- a/TestSamples/CompilationSamples/CPaint.pas +++ b/TestSamples/CompilationSamples/CPaint.pas @@ -1,4 +1,4 @@ -// ReadKey . +//Концепция ReadKey в селедующих версиях будет изменена. uses crt; var c: char; diff --git a/TestSamples/CompilationSamples/CRTColors.pas b/TestSamples/CompilationSamples/CRTColors.pas index 26aa31fc4..ae062c375 100644 --- a/TestSamples/CompilationSamples/CRTColors.pas +++ b/TestSamples/CompilationSamples/CRTColors.pas @@ -1,5 +1,5 @@ -// CRT- -// CRT +// Стандартные CRT-цвета +// Работа с модулем CRT uses CRT; diff --git a/TestSamples/CompilationSamples/Calculations1.pas b/TestSamples/CompilationSamples/Calculations1.pas index 1a3aac935..f6ba098ae 100644 --- a/TestSamples/CompilationSamples/Calculations1.pas +++ b/TestSamples/CompilationSamples/Calculations1.pas @@ -1,7 +1,7 @@ -// +// Вывод результатов вычислений begin - writeln(':'); -// + writeln('Вычисления:'); +// Вывод пустой строки writeln; writeln('121 + 363 = ',121+363); writeln('121 - 363 = ',121-363); diff --git a/TestSamples/CompilationSamples/Calculations2.pas b/TestSamples/CompilationSamples/Calculations2.pas index a870b6f5f..ff692f587 100644 --- a/TestSamples/CompilationSamples/Calculations2.pas +++ b/TestSamples/CompilationSamples/Calculations2.pas @@ -1,10 +1,10 @@ -// . +// Вывод результатов вычислений. Используются именованные константы const a = 121; b = 363; begin - writeln(':'); + writeln('Вычисления:'); writeln; writeln(a,' + ',b,' = ',a+b); writeln(a,' - ',b,' = ',a-b); diff --git a/TestSamples/CompilationSamples/Calculations3.pas b/TestSamples/CompilationSamples/Calculations3.pas index e76a5c373..255a9b131 100644 --- a/TestSamples/CompilationSamples/Calculations3.pas +++ b/TestSamples/CompilationSamples/Calculations3.pas @@ -1,8 +1,8 @@ -// . +// Вывод результатов вычислений. Используются переменные и процедура ввода var a,b: integer; begin - writeln(' a b:'); + writeln('Введите a и b:'); readln(a,b); writeln; writeln(a,' + ',b,' = ',a+b); diff --git a/TestSamples/CompilationSamples/CallCS.pas b/TestSamples/CompilationSamples/CallCS.pas index 27ff33168..6a732b23b 100644 --- a/TestSamples/CompilationSamples/CallCS.pas +++ b/TestSamples/CompilationSamples/CallCS.pas @@ -1,5 +1,5 @@ -// add Class1, ClassLibrary1 -// Class1 ClassLibrary1.dll, C# +// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1 +// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C# {$reference 'ClassLibrary1.dll'} uses ClassLibrary1; diff --git a/TestSamples/CompilationSamples/CallNative.pas b/TestSamples/CompilationSamples/CallNative.pas index 5876266f3..294747533 100644 --- a/TestSamples/CompilationSamples/CallNative.pas +++ b/TestSamples/CompilationSamples/CallNative.pas @@ -1,6 +1,6 @@ -// dll -function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // +// Вызов функции из обычной dll +function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции -begin // +begin // основная программа writeln(add(2,3)); end. diff --git a/TestSamples/CompilationSamples/CharFunc.pas b/TestSamples/CompilationSamples/CharFunc.pas index fb28b2ac8..95bed5ad7 100644 --- a/TestSamples/CompilationSamples/CharFunc.pas +++ b/TestSamples/CompilationSamples/CharFunc.pas @@ -1,4 +1,4 @@ -// Ord, Chr, OrdUnicode, ChrUnicode +// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode var c: char; i: integer; @@ -6,14 +6,14 @@ var begin writeln('sizeof(char) = ',sizeof(char)); writeln; - c := ''; + c := 'Ж'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); writeln; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/ClassConstructor.pas b/TestSamples/CompilationSamples/ClassConstructor.pas index f7a00c36e..11679be8a 100644 --- a/TestSamples/CompilationSamples/ClassConstructor.pas +++ b/TestSamples/CompilationSamples/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Пример использования классового (статического) конструктора type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/CursorMove.pas b/TestSamples/CompilationSamples/CursorMove.pas index 5943805e2..b71cdbf04 100644 --- a/TestSamples/CompilationSamples/CursorMove.pas +++ b/TestSamples/CompilationSamples/CursorMove.pas @@ -1,4 +1,4 @@ -// ReadKey . +//Концепция ReadKey в селедующих версиях будет изменена. uses CRT; var diff --git a/TestSamples/CompilationSamples/DMpp17.pas b/TestSamples/CompilationSamples/DMpp17.pas index f830b2e75..3c2c23b71 100644 --- a/TestSamples/CompilationSamples/DMpp17.pas +++ b/TestSamples/CompilationSamples/DMpp17.pas @@ -1,4 +1,4 @@ -// pp17 +// Выполнение задания pp17 для Чертежника uses Drawman; procedure Spir(n: integer); diff --git a/TestSamples/CompilationSamples/DS0003.pas b/TestSamples/CompilationSamples/DS0003.pas index 13d2d0908..cdb03e3b8 100644 --- a/TestSamples/CompilationSamples/DS0003.pas +++ b/TestSamples/CompilationSamples/DS0003.pas @@ -1,4 +1,4 @@ -// +// Таблица символов и их кодов var i: integer; begin cls; diff --git a/TestSamples/CompilationSamples/DS0004.pas b/TestSamples/CompilationSamples/DS0004.pas index d9729639f..9eedee17c 100644 --- a/TestSamples/CompilationSamples/DS0004.pas +++ b/TestSamples/CompilationSamples/DS0004.pas @@ -4,8 +4,8 @@ begin raise new Exception('xxx'); except //on e:exception do - //writeln(': ',e); - writeln('!'); + //writeln('Исключение: ',e); + writeln('Исключение!'); end; readln; end. diff --git a/TestSamples/CompilationSamples/DS0005.pas b/TestSamples/CompilationSamples/DS0005.pas index 28083ec09..9668ae142 100644 --- a/TestSamples/CompilationSamples/DS0005.pas +++ b/TestSamples/CompilationSamples/DS0005.pas @@ -11,7 +11,7 @@ begin raise new MyException; except on e:myexception do - writeln(': ',e); + writeln('Исключение: ',e); end; readln; end. diff --git a/TestSamples/CompilationSamples/DS0010.pas b/TestSamples/CompilationSamples/DS0010.pas index 5c492079d..250128d18 100644 --- a/TestSamples/CompilationSamples/DS0010.pas +++ b/TestSamples/CompilationSamples/DS0010.pas @@ -1,4 +1,4 @@ -// PCU +//Ошибка чтения из PCU uses DS0010_unit; var c: DS0010_unit.cc; diff --git a/TestSamples/CompilationSamples/DS0011.pas b/TestSamples/CompilationSamples/DS0011.pas index cdc3254ba..e76765e6c 100644 --- a/TestSamples/CompilationSamples/DS0011.pas +++ b/TestSamples/CompilationSamples/DS0011.pas @@ -1,4 +1,4 @@ -// PCU( ) +//Ошибка чтения из PCU(возможно коструктора) uses DS0011_unit; var c: cc; diff --git a/TestSamples/CompilationSamples/DS0024.pas b/TestSamples/CompilationSamples/DS0024.pas index b0ff6312a..b67992e6f 100644 --- a/TestSamples/CompilationSamples/DS0024.pas +++ b/TestSamples/CompilationSamples/DS0024.pas @@ -16,9 +16,9 @@ var f: Form; begin - // + // так не компилицца f.Invoke(proc(p)); p1 := P; - // + // а так компилицца f.Invoke(p1); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/DS0031.pas b/TestSamples/CompilationSamples/DS0031.pas index 32ed51bd0..6be1f3e3b 100644 --- a/TestSamples/CompilationSamples/DS0031.pas +++ b/TestSamples/CompilationSamples/DS0031.pas @@ -1,6 +1,6 @@ uses GraphABC; -// +// Фрактальный папоротник const Iterations = 1000000; @@ -9,7 +9,7 @@ const Width = Height div 2; Size = Height/10 - 2; Dx = Width div 2 - 15; - // + //неправильное позиционирование курсора Dc = Iterations div Brightness; data: array [0..19] of real = ( 0.00, 0.85, 0.20, -0.15, diff --git a/TestSamples/CompilationSamples/DateTime2.pas b/TestSamples/CompilationSamples/DateTime2.pas index 3820db357..01e72e36d 100644 --- a/TestSamples/CompilationSamples/DateTime2.pas +++ b/TestSamples/CompilationSamples/DateTime2.pas @@ -1,31 +1,31 @@ Uses System; -var d1, d2, d3: DateTime; // - ts: TimeSpan; // +var d1, d2, d3: DateTime; // Объекты для хранения даты и времени + ts: TimeSpan; // Объект для хранения промежутков времени begin - // - + // Получение текущей даты - вызов статического метода d1 := DateTime.Now; Writeln(d1); - // + // Дата и время через один месяц d2 := d1.AddMonths(1); Writeln(d2); - // 12 + // Дата и время на 12 часов раньше d2 := d1.AddHours(-12); Writeln(d2); - // - (, ,) + // Формирование даты - вызов конструктора объекта (год, месяц,число) d3 := new DateTime(2001, 1, 1); Writeln(d3); - // , ( ) + // Определение времени, прошедшего с начала тысячелетия (разность дат) ts := d1.Subtract(d3); - // ( - ) + // Промежуток времени в днях (результат - вещественное число) Writeln(ts.TotalDays); - // , , + // Промежуток времени в днях, часах, минутах и секундах Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/DivMod1.pas b/TestSamples/CompilationSamples/DivMod1.pas index 73461e4ad..37fc92a04 100644 --- a/TestSamples/CompilationSamples/DivMod1.pas +++ b/TestSamples/CompilationSamples/DivMod1.pas @@ -1,10 +1,10 @@ -// div mod +// Операции div и mod var a: integer; begin - write(' a: '); + write('Введите a: '); readln(a); - writeln(' : ',a mod 10); - writeln(' : ',a div 10); - writeln(' a , 0: ',a mod 2); + writeln('Последняя цифра числа: ',a mod 10); + writeln('Число без последней цифры: ',a div 10); + writeln('Если число a четно, то 0: ',a mod 2); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/DivMod2.pas b/TestSamples/CompilationSamples/DivMod2.pas index 8ba18f637..7a008006b 100644 --- a/TestSamples/CompilationSamples/DivMod2.pas +++ b/TestSamples/CompilationSamples/DivMod2.pas @@ -1,11 +1,11 @@ -// div mod +// Операции div и mod var a: integer := 247; begin - write(' : '); - // + write('Цифры числа в обратном порядке: '); + // Выводим последнюю цифру write(a mod 10,' '); - // + // Отбрасываем последнюю цифру a := a div 10; write(a mod 10,' '); a := a div 10; diff --git a/TestSamples/CompilationSamples/DrawManAddTasks.pas b/TestSamples/CompilationSamples/DrawManAddTasks.pas index 7123569bd..5ad9e6a56 100644 --- a/TestSamples/CompilationSamples/DrawManAddTasks.pas +++ b/TestSamples/CompilationSamples/DrawManAddTasks.pas @@ -1,12 +1,12 @@ -/// +/// Дополнительный модуль для исполнителя Чертежник с заданиями unit DrawManAddTasks; -// pcu- PascalABC.NET\bin\Lib +// После компиляции pcu-файл модуля желательно разместить в папке PascalABC.NET\bin\Lib uses DrawMan,DMTaskMaker; procedure my1; begin - TaskText(' my1. , '); + TaskText('Задание my1. Начертите, используя циклы'); Field(14,14); DoToPoint(1,7); var k := 1; diff --git a/TestSamples/CompilationSamples/Dynarray2.pas b/TestSamples/CompilationSamples/Dynarray2.pas index 746b47274..63d162f37 100644 --- a/TestSamples/CompilationSamples/Dynarray2.pas +++ b/TestSamples/CompilationSamples/Dynarray2.pas @@ -1,4 +1,4 @@ -// +// Процедуры и методы работы с динамическим массивом uses System; procedure Print(a: array of integer); @@ -11,30 +11,30 @@ end; var a: array of integer; begin - SetLength(a,10); // . : a := new integer[10]; + SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := PABCSystem.Random(100); - // + // Вывод всех элементов массива Print(a); - // ( & , - // array - // Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении + // класса Array) &Array.Sort(a); Print(a); - // + // Обращение массива &Array.Reverse(a); Print(a); - // . SetLength + // Изменение размерамассиав с сохранением элементов. То же делает SetLength &Array.Resize(a,a.Length+2); Print(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 50); Writeln(i); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/ESquares.pas b/TestSamples/CompilationSamples/ESquares.pas index 2617646f7..925e70493 100644 --- a/TestSamples/CompilationSamples/ESquares.pas +++ b/TestSamples/CompilationSamples/ESquares.pas @@ -1,4 +1,4 @@ -// E-. +// E-квадраты. Демонстрация рекурсии uses GraphABC; const mw = 2.9; @@ -23,7 +23,7 @@ end; var s: string; r: integer; begin - SetWindowCaption(': '); + SetWindowCaption('Рекурсия: квадраты'); SetWindowSize(750,530); SetPenColor(clWhite); SetBrushColor(clRandom); diff --git a/TestSamples/CompilationSamples/Enum2.pas b/TestSamples/CompilationSamples/Enum2.pas index b9d3d0a87..db92312ee 100644 --- a/TestSamples/CompilationSamples/Enum2.pas +++ b/TestSamples/CompilationSamples/Enum2.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/FieldRobotStampProba2.pas b/TestSamples/CompilationSamples/FieldRobotStampProba2.pas index b9bf607c7..740cae483 100644 --- a/TestSamples/CompilationSamples/FieldRobotStampProba2.pas +++ b/TestSamples/CompilationSamples/FieldRobotStampProba2.pas @@ -3,7 +3,7 @@ const MAX_DimX = 200; MAX_DimY = 200; - MaxConds = 10000; // - ! + MaxConds = 10000; // сколько максимально условий может проверить Робот - направлено против зацикливания! MaxMoveNum = 10000; var @@ -31,15 +31,15 @@ type procedure DrawCentered; procedure Draw0; procedure Draw(px,py: integer); - procedure DrawCell(x,y: integer); { } + procedure DrawCell(x,y: integer); { нарисовать одну ячейку } procedure Clear; function IsSolution: boolean; - // + // примитивы для постановщика procedure DrawLastRobotPos; procedure DrawTag(x,y: integer); procedure SetDim(DX,DY,CellSz: integer); - procedure SetPaintSystem(x,y: integer); { - } - procedure SetTag(x,y: integer); { } + procedure SetPaintSystem(x,y: integer); { пометить ячейку как нарисованную - постановщик} + procedure SetTag(x,y: integer); { пометить ячейку как помеченную } procedure SetTagRect(x1,y1,x2,y2: integer); procedure SetFirstRobotPos(x,y: integer); procedure MoveRobotToFirstPos; @@ -47,11 +47,11 @@ type procedure SetFirstLastRobotPos(x,y,x1,y1: integer); procedure HorizWall(x,y,len: integer); procedure VertWall(x,y,len: integer); - // + // примитивы для выполнителя procedure DrawRobot; procedure MoveRobot(x,y: integer); - procedure SetPaintUser(x,y: integer); { - } - procedure SetRobotPos(x,y: integer); // MoveRobot + procedure SetPaintUser(x,y: integer); { пометить ячейку как нарисованную - выполнитель} + procedure SetRobotPos(x,y: integer); // синоним MoveRobot function WallFromLeft(x,y: integer): boolean; function WallFromRight(x,y: integer): boolean; function WallFromUp(x,y: integer): boolean; diff --git a/TestSamples/CompilationSamples/Flame.pas b/TestSamples/CompilationSamples/Flame.pas index e1639c602..c22cb7467 100644 --- a/TestSamples/CompilationSamples/Flame.pas +++ b/TestSamples/CompilationSamples/Flame.pas @@ -17,20 +17,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer: array of array of byte := new array of byte[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, i, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/TestSamples/CompilationSamples/Foreach2.pas b/TestSamples/CompilationSamples/Foreach2.pas index 82e2e12dc..2b546058b 100644 --- a/TestSamples/CompilationSamples/Foreach2.pas +++ b/TestSamples/CompilationSamples/Foreach2.pas @@ -1,4 +1,4 @@ -// foreach +// Пример иллюстрирует возможности оператора foreach uses System.Collections.Generic; var @@ -7,20 +7,20 @@ var l: List; begin - write('foreach : ':35); + write('foreach по обычному массиву: ':35); foreach x: integer in a do write(x,' '); writeln; s := [2..5,10..14]; - write('foreach : ':35); + write('foreach по множеству: ':35); foreach x: integer in s do write(x,' '); writeln; l := new List; l.Add(7); l.Add(2); l.Add(5); - write('foreach : ':35); + write('foreach по динамическому массиву: ':35); foreach x: integer in l do write(x,' '); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/FormWebBrowser.pas b/TestSamples/CompilationSamples/FormWebBrowser.pas index 0986173ae..51a1936b7 100644 --- a/TestSamples/CompilationSamples/FormWebBrowser.pas +++ b/TestSamples/CompilationSamples/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser {$apptype windows} {$reference 'System.Windows.Forms.dll'} diff --git a/TestSamples/CompilationSamples/FuncParams.pas b/TestSamples/CompilationSamples/FuncParams.pas index 81e9a13a6..e23578348 100644 --- a/TestSamples/CompilationSamples/FuncParams.pas +++ b/TestSamples/CompilationSamples/FuncParams.pas @@ -1,4 +1,4 @@ -// +// Переменное число параметров function Sum(params arg: array of integer): integer; begin Result := 0; diff --git a/TestSamples/CompilationSamples/GarbageCollection.pas b/TestSamples/CompilationSamples/GarbageCollection.pas index 9182e55ca..e9361cc02 100644 --- a/TestSamples/CompilationSamples/GarbageCollection.pas +++ b/TestSamples/CompilationSamples/GarbageCollection.pas @@ -1,4 +1,4 @@ -// : nil +// Сборка мусора: для освобождения объекта присвойте переменной nil uses System.Collections.Generic; var l: List := new List; @@ -9,5 +9,5 @@ begin l.Add(2); foreach x:integer in l do write(x,' '); - l := nil; // , , + l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/GlobalVars.pas b/TestSamples/CompilationSamples/GlobalVars.pas index 79810714a..6cd714a35 100644 --- a/TestSamples/CompilationSamples/GlobalVars.pas +++ b/TestSamples/CompilationSamples/GlobalVars.pas @@ -1,5 +1,5 @@ -// . -// . BlockVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл BlockVars.pas uses Utils; var @@ -13,5 +13,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSamples/CompilationSamples/GrAnim1.pas b/TestSamples/CompilationSamples/GrAnim1.pas index 71dde4512..67e0b2d54 100644 --- a/TestSamples/CompilationSamples/GrAnim1.pas +++ b/TestSamples/CompilationSamples/GrAnim1.pas @@ -1,8 +1,8 @@ -// . "" . +// Графика. Пример "наивной" анимации. Эффект мерцания uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация простой анимации'; var y := 200; Brush.Color := clGreen; for var x := 70 to 500 do diff --git a/TestSamples/CompilationSamples/GrAnim2.pas b/TestSamples/CompilationSamples/GrAnim2.pas index bad081cf2..b88e17046 100644 --- a/TestSamples/CompilationSamples/GrAnim2.pas +++ b/TestSamples/CompilationSamples/GrAnim2.pas @@ -1,17 +1,17 @@ -// . LockDrawing-Redraw. +// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Анимация без мерцания'; var y := 200; Brush.Color := clGreen; - // + // Отключаем рисование в окне LockDrawing; for var x := 70 to 500 do begin Window.Clear(clWhite); Circle(x,y,50); - // + // Перерисовываем окно из внеэранного буфера Redraw; Sleep(3); end; diff --git a/TestSamples/CompilationSamples/GrCoord1.pas b/TestSamples/CompilationSamples/GrCoord1.pas index 169a52366..8da8ac886 100644 --- a/TestSamples/CompilationSamples/GrCoord1.pas +++ b/TestSamples/CompilationSamples/GrCoord1.pas @@ -1,15 +1,15 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; - // + // Поворот Coordinate.Angle := 30; - // + // Масштаб Coordinate.Scale := 3; - // - + // Начало координат - в центре окна Coordinate.Origin := Window.Center; Brush.Color := clMoneyGreen; diff --git a/TestSamples/CompilationSamples/GrCoord2.pas b/TestSamples/CompilationSamples/GrCoord2.pas index d5e2ba3f8..e81b9b651 100644 --- a/TestSamples/CompilationSamples/GrCoord2.pas +++ b/TestSamples/CompilationSamples/GrCoord2.pas @@ -1,8 +1,8 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; Coordinate.Origin := Window.Center; diff --git a/TestSamples/CompilationSamples/GrFont1.pas b/TestSamples/CompilationSamples/GrFont1.pas index 7efb0bdaf..346f33c55 100644 --- a/TestSamples/CompilationSamples/GrFont1.pas +++ b/TestSamples/CompilationSamples/GrFont1.pas @@ -1,8 +1,8 @@ -// +// Демонстрация работы со шрифтами uses GraphABC; begin - Window.Title := ''; + Window.Title := 'Шрифты'; SetWindowSize(750,520); Font.Name := 'Arial'; Font.Style := fsBoldItalic; diff --git a/TestSamples/CompilationSamples/GrFont2.pas b/TestSamples/CompilationSamples/GrFont2.pas index 04b15835c..17947a8ff 100644 --- a/TestSamples/CompilationSamples/GrFont2.pas +++ b/TestSamples/CompilationSamples/GrFont2.pas @@ -1,10 +1,10 @@ -// TextWidth TextHeight +// Демонстрация использования TextWidth и TextHeight uses GraphABC; const s = 'Width & Height'; begin - Window.Title := ' '; + Window.Title := 'Текст по центру'; Window.IsFixedSize := True; SetWindowSize(700,300); Window.Center; diff --git a/TestSamples/CompilationSamples/GrPoly.pas b/TestSamples/CompilationSamples/GrPoly.pas index 7abc91298..68f80312d 100644 --- a/TestSamples/CompilationSamples/GrPoly.pas +++ b/TestSamples/CompilationSamples/GrPoly.pas @@ -1,11 +1,11 @@ -// Polyline, Polygon, Curve, ClosedCurve -// +// Процедуры Polyline, Polygon, Curve, ClosedCurve +// Перенос начала системы координат uses GraphABC; var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); begin - Window.Title := ' '; + Window.Title := 'Рисование по массиву точек'; Brush.Color := Color.Beige; Coordinate.SetOrigin(60,30); Polyline(a); diff --git a/TestSamples/CompilationSamples/GraphABCTest.pas b/TestSamples/CompilationSamples/GraphABCTest.pas index 818687764..cd8f125a1 100644 --- a/TestSamples/CompilationSamples/GraphABCTest.pas +++ b/TestSamples/CompilationSamples/GraphABCTest.pas @@ -1,4 +1,4 @@ -// GraphABC +// Иллюстрация простейших возможностей GraphABC uses GraphABC; begin diff --git a/TestSamples/CompilationSamples/Hanoi.pas b/TestSamples/CompilationSamples/Hanoi.pas index 49e83abdf..38ff96674 100644 --- a/TestSamples/CompilationSamples/Hanoi.pas +++ b/TestSamples/CompilationSamples/Hanoi.pas @@ -1,4 +1,4 @@ -// +// Ханойские башни uses GraphABC; type @@ -77,12 +77,12 @@ begin SetFontSize(14); SetFontName('Arial'); SetBrushColor(clWhite); - TextOut(20,20,' ='+IntToStr(num)); + TextOut(20,20,'Число перемещений дисков='+IntToStr(num)); Redraw; end; begin - SetWindowCaption(' '); + SetWindowCaption('Ханойские башни'); SetWindowSize(760,400); Init; LockDrawing; diff --git a/TestSamples/CompilationSamples/HanoyB_1.pas b/TestSamples/CompilationSamples/HanoyB_1.pas index 6f990370a..d61a6192b 100644 --- a/TestSamples/CompilationSamples/HanoyB_1.pas +++ b/TestSamples/CompilationSamples/HanoyB_1.pas @@ -71,20 +71,20 @@ begin f1:=0;d:=0;h:=0; xm:=300;ym:=20; fc:=clGreen; - s:=' ?'; + s:='Показать ПРИМЕР перемещения ?'; Messag(xm,ym,s); SetBrushColor(clSilver); SetFontColor(clGreen); - TextOut(120,600,' I III.'); - TextOut(80,620,' , II.'); + TextOut(120,600,'Вам необходимо переместить БАШНЮ с позиции I на позицию III.'); + TextOut(80,620,'Перемещать можно только по одному сегменту,используя дополнительную позицию II.'); SetFontColor(clRed); - TextOut(130,640,' .'); + TextOut(130,640,'Нельзя устанавливать сегмент большего размера на меньший.'); SetFontColor(clBrown); - TextOut(100,660,' , .'); + TextOut(100,660,'Выберите мышью перемещаемый сегмент, а затем место для перемещения.'); SetFontColor(clGray); SetFontSize(8); - TextOut(600,685,' - PascalABC 2007 .'); + TextOut(600,685,'Разработка - Владимир ДЕГТЯРЬ PascalABC 2007 г.'); SetFontColor(clBlue); TextOut(50,685,'E-mail: degvv@mail.ru'); SetFontSize(16); @@ -95,8 +95,8 @@ begin Inc(d); SetBrushColor(clSilver); SetFontColor(clBlue); - TextOut(10,70,' - '+intToStr(d div 2)); - TextOut(750,70,' - '+intToStr(h)); + TextOut(10,70,'КОЛИЧЕСТВО ХОДОВ - '+intToStr(d div 2)); + TextOut(750,70,'КОЛИЧЕСТВО ОШИБОК - '+intToStr(h)); end; procedure Show; @@ -149,7 +149,7 @@ begin begin xm:=300;ym:=40; fc:=clRed; - s:=' !';Inc(h); + s:='Такое перемещение НЕДОПУСТИМО !';Inc(h); Messag(xm,ym,s);Sleep(2000);HideMessag(xm,ym);exit; end; pc:=clLime;bc:=clLime;fc:=bc;Segment; @@ -168,7 +168,7 @@ begin HideMessag(xm,ym); xm:=400;ym:=70; fc:=clBrown; - s:=' '; + s:='НОВАЯ ИГРА'; Messag(xm,ym,s); fc:=clBlack; if f1= 0 then @@ -215,7 +215,7 @@ end; begin SetWindowSize(1050,750); - SetWindowCaption(' << >> V 1.2'); + SetWindowCaption(' Логическаая головоломка << ХАНОЙСКАЯ БАШНЯ >> V 1.2'); mc[0]:= clRed; mc[1]:= clGreen; diff --git a/TestSamples/CompilationSamples/HelloWorld.pas b/TestSamples/CompilationSamples/HelloWorld.pas index b1bce0920..0ce413328 100644 --- a/TestSamples/CompilationSamples/HelloWorld.pas +++ b/TestSamples/CompilationSamples/HelloWorld.pas @@ -1,5 +1,5 @@ -// +// Первая программа program HelloWorld; begin - writeln(', !'); + writeln('Привет, мир!'); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/InitRecords2.pas b/TestSamples/CompilationSamples/InitRecords2.pas index 4706c7177..5befeb806 100644 --- a/TestSamples/CompilationSamples/InitRecords2.pas +++ b/TestSamples/CompilationSamples/InitRecords2.pas @@ -1,8 +1,8 @@ -// +// Инициализаторы полей записи type Frac = record num: integer := 0; - denom := 1; // - denom: integer + denom := 1; // автоопределеине типа - denom: integer end; var diff --git a/TestSamples/CompilationSamples/IntToBytes.pas b/TestSamples/CompilationSamples/IntToBytes.pas index 96b8e47ae..9bf43798c 100644 --- a/TestSamples/CompilationSamples/IntToBytes.pas +++ b/TestSamples/CompilationSamples/IntToBytes.pas @@ -4,7 +4,7 @@ var v: integer; begin - write(' : '); + write('Введите целое число: '); readln(v); WriteMemoryToScreen(@v, sizeof(integer)); readln; diff --git a/TestSamples/CompilationSamples/Interf.pas b/TestSamples/CompilationSamples/Interf.pas index 89c00da6f..7deff8846 100644 --- a/TestSamples/CompilationSamples/Interf.pas +++ b/TestSamples/CompilationSamples/Interf.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация использованя интерфейсов type IShape = interface procedure Draw; diff --git a/TestSamples/CompilationSamples/Knapsack.pas b/TestSamples/CompilationSamples/Knapsack.pas index 3f032a34b..04e78c862 100644 --- a/TestSamples/CompilationSamples/Knapsack.pas +++ b/TestSamples/CompilationSamples/Knapsack.pas @@ -1,5 +1,5 @@ -// . B . -// +// Задача о ранце. В массиве B заданы веса предметов. +// Выдать все варианты полной комплектации ранца частью этих предметов const Sz=100; type IArr=array [1..Sz] of integer; @@ -21,13 +21,13 @@ var procedure TrySolve0(i: integer); begin if space=0 then PrintArr(Subset,ns) - else if (space<0) or (i>nb) then exit // - else // B + else if (space<0) or (i>nb) then exit // отсечение + else // продолжение перебора всех подмножеств множества B begin - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент Inc(ns); Subset[ns]:=B[i]; space:=space-B[i]; - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать взять i-тый элемент space:=space+B[i]; Dec(ns); end; end; diff --git a/TestSamples/CompilationSamples/Life.pas b/TestSamples/CompilationSamples/Life.pas index 260aa84bf..b624968d9 100644 --- a/TestSamples/CompilationSamples/Life.pas +++ b/TestSamples/CompilationSamples/Life.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке //#apptype console @@ -282,10 +282,10 @@ begin end; begin - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -296,8 +296,8 @@ begin SetFontName('Arial'); SetFontSize(10); Init; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); DrawField; DrawConfiguration; mil:=Milliseconds; @@ -306,8 +306,8 @@ begin begin gen:=gen+1; SetBrushColor(clWhite); - TextOut(25,0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); a:=b; SosediA:=SosediB; diff --git a/TestSamples/CompilationSamples/LifeU.pas b/TestSamples/CompilationSamples/LifeU.pas index d4b2f8adf..aae12e698 100644 --- a/TestSamples/CompilationSamples/LifeU.pas +++ b/TestSamples/CompilationSamples/LifeU.pas @@ -280,10 +280,10 @@ end; procedure Start; begin - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -294,8 +294,8 @@ begin SetFontName('Arial'); SetFontSize(10); Init; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); DrawField; DrawConfiguration; mil:=Milliseconds; @@ -304,8 +304,8 @@ begin begin gen:=gen+1; SetBrushColor(clWhite); - TextOut(25,0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); a:=b; SosediA:=SosediB; diff --git a/TestSamples/CompilationSamples/LinkedList.pas b/TestSamples/CompilationSamples/LinkedList.pas index 303712765..dd1474e39 100644 --- a/TestSamples/CompilationSamples/LinkedList.pas +++ b/TestSamples/CompilationSamples/LinkedList.pas @@ -1,4 +1,4 @@ -// LinkedList - - +// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора uses System.Collections,System.Collections.Generic; procedure print(l: ICollection); diff --git a/TestSamples/CompilationSamples/List.pas b/TestSamples/CompilationSamples/List.pas index 7411e4c40..cb4799e61 100644 --- a/TestSamples/CompilationSamples/List.pas +++ b/TestSamples/CompilationSamples/List.pas @@ -71,8 +71,8 @@ type function PopFront: T; begin if IsEmpty then - result := nil // , ? - //- . + result := nil //Любой тип может принять такое значение, не правда ли? + //Вообще-то здесь нужно выбросить исключение. else begin result := start.info; @@ -86,8 +86,8 @@ type function PopBack: T; begin if IsEmpty then - result := nil // , ? - //- . + result := nil //Любой тип может принять такое значение, не правда ли? + //Вообще-то здесь нужно выбросить исключение. else begin result := last.info; @@ -129,11 +129,11 @@ type end; procedure Clear; begin - // , , , ! + //Чисто не там, где убирают, а там, где мусор убирается сам! start := nil; last := nil; end; - procedure Sort; // - + procedure Sort; //выбором - по неубыванию var x: T; tek, p, min: ListNode; diff --git a/TestSamples/CompilationSamples/MainProgram.pas b/TestSamples/CompilationSamples/MainProgram.pas index 81199623c..98617cdfc 100644 --- a/TestSamples/CompilationSamples/MainProgram.pas +++ b/TestSamples/CompilationSamples/MainProgram.pas @@ -1,7 +1,7 @@ -uses MyUnit; // +uses MyUnit; // подключили модуль var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6); begin - writeln(' = ',Max(a)); + writeln('Максимальный элемент в массиве = ',Max(a)); end. diff --git a/TestSamples/CompilationSamples/Matr1.pas b/TestSamples/CompilationSamples/Matr1.pas index 31cb1448c..9033bd4d8 100644 --- a/TestSamples/CompilationSamples/Matr1.pas +++ b/TestSamples/CompilationSamples/Matr1.pas @@ -1,4 +1,4 @@ -// . goto +// Поиск значения в случайной матрице. Использование оператора goto const sz = 10; m = 4; @@ -11,12 +11,12 @@ label 1; var matr: Matrix; begin - // m x n + // Заполнение матрицы m x n случайными числами for var i := 1 to m do for var j := 1 to n do matr[i,j] := Random(100); - // + // Вывод матрицы for var i := 1 to m do begin for var j := 1 to n do @@ -24,17 +24,17 @@ begin writeln; end; - // 5? + // Есть ли в матрице элемент 5? var found5 := False; for var i := 1 to m do for var j := 1 to n do if matr[i,j]=5 then begin found5 := True; - goto 1; // ! + goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу end; 1: if found5 then - writeln(' 5 ') - else writeln(' 5 ') + writeln('Элемент 5 найден') + else writeln('Элемент 5 не найден') end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Matr2.pas b/TestSamples/CompilationSamples/Matr2.pas index b0161cdfd..42df846a3 100644 --- a/TestSamples/CompilationSamples/Matr2.pas +++ b/TestSamples/CompilationSamples/Matr2.pas @@ -1,4 +1,4 @@ -// +// Матрица как динамический массив массивов type Matrix = array of array of integer; function CreateMatrix(m,n: integer): Matrix; diff --git a/TestSamples/CompilationSamples/MazeGen.pas b/TestSamples/CompilationSamples/MazeGen.pas index 8d43ab89d..e60daf38f 100644 --- a/TestSamples/CompilationSamples/MazeGen.pas +++ b/TestSamples/CompilationSamples/MazeGen.pas @@ -1,10 +1,10 @@ -// +// Программа генерации случайных лабиринтов uses GraphABC; const - szw=70; // + szw=70; // размер лабиринта szh=50; - cellsz=10; // + cellsz=10; // размер ячейки type point=record @@ -33,10 +33,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -46,28 +46,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n:= Random(todonum); x:= todo[n].x; y:= todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat d:=Random (4); until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl d) or 32); maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -78,8 +78,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -88,19 +88,19 @@ begin for x:=1 to szw-2 do for y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz ); end; end; begin - SetWindowCaption(' '); + SetWindowCaption('Генерация лабиринта'); SetWindowSize(800,600); dx[2]:=-1;dx[3]:=1; dy[0]:=-1;dy[1]:=1; diff --git a/TestSamples/CompilationSamples/MouseEvents.pas b/TestSamples/CompilationSamples/MouseEvents.pas index 064766eae..f48183e0a 100644 --- a/TestSamples/CompilationSamples/MouseEvents.pas +++ b/TestSamples/CompilationSamples/MouseEvents.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация обработки событий мыши uses GraphABC; procedure MouseDown(x,y,mb: integer); @@ -12,7 +12,7 @@ begin end; begin - // + // Привязка обработчиков к событиям OnMouseDown := MouseDown; OnMouseMove := MouseMove end. diff --git a/TestSamples/CompilationSamples/MyUnit.pas b/TestSamples/CompilationSamples/MyUnit.pas index 06ec89d2e..70fb761e3 100644 --- a/TestSamples/CompilationSamples/MyUnit.pas +++ b/TestSamples/CompilationSamples/MyUnit.pas @@ -1,8 +1,8 @@ -/// -unit MyUnit; // +/// Модуль упрощенной структуры +unit MyUnit; // имя модуля должно совпадать с именем файла -// -/// +// Документирующие комментарии отображаются при наведении на имя курсора мыши +/// Возвращает максимальный элемент в массиве function Max(a: array of integer): integer; begin Result := integer.MinValue; diff --git a/TestSamples/CompilationSamples/OperatorOverloading.pas b/TestSamples/CompilationSamples/OperatorOverloading.pas index 879445ac5..1b62ef27b 100644 --- a/TestSamples/CompilationSamples/OperatorOverloading.pas +++ b/TestSamples/CompilationSamples/OperatorOverloading.pas @@ -1,4 +1,4 @@ -// +// Перегрузка операций type Frac = record private diff --git a/TestSamples/CompilationSamples/Overload.pas b/TestSamples/CompilationSamples/Overload.pas index 09e4321ce..f3b5eaef1 100644 --- a/TestSamples/CompilationSamples/Overload.pas +++ b/TestSamples/CompilationSamples/Overload.pas @@ -1,4 +1,4 @@ -// +// Перегрузка имен подпрограмм procedure proc(i: integer); begin writeln('integer'); diff --git a/TestSamples/CompilationSamples/Permutations.pas b/TestSamples/CompilationSamples/Permutations.pas index 1b9b6924f..8a4659e6a 100644 --- a/TestSamples/CompilationSamples/Permutations.pas +++ b/TestSamples/CompilationSamples/Permutations.pas @@ -1,4 +1,4 @@ -// n +// Генерация всех перестановок длины n procedure swap(var a,b: integer); var v: integer; begin diff --git a/TestSamples/CompilationSamples/PersonInternal.pas b/TestSamples/CompilationSamples/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/TestSamples/CompilationSamples/PersonInternal.pas +++ b/TestSamples/CompilationSamples/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/PifagorTable.pas b/TestSamples/CompilationSamples/PifagorTable.pas index bee493044..33b79631c 100644 --- a/TestSamples/CompilationSamples/PifagorTable.pas +++ b/TestSamples/CompilationSamples/PifagorTable.pas @@ -3,7 +3,7 @@ const n=10; var i,j: integer; begin - writeln(' '); + writeln('Таблица умножения'); for i:=1 to n do begin for j:=1 to n do diff --git a/TestSamples/CompilationSamples/Pointers2.pas b/TestSamples/CompilationSamples/Pointers2.pas index ea8ee15ba..42aa2fc6d 100644 --- a/TestSamples/CompilationSamples/Pointers2.pas +++ b/TestSamples/CompilationSamples/Pointers2.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,12 +32,12 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin var p1 := p; p := p^.next; - Dispose(p1); // + Dispose(p1); // Память обязательно возвращать end; end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Posl.pas b/TestSamples/CompilationSamples/Posl.pas index f1f234934..cec3adfeb 100644 --- a/TestSamples/CompilationSamples/Posl.pas +++ b/TestSamples/CompilationSamples/Posl.pas @@ -1,4 +1,4 @@ -// B . +// В массиве B задано множество элементов. Вывести все его подмножества const Sz=100; type IArr=array [1..Sz] of integer; @@ -21,8 +21,8 @@ var if i>nb then PrintArr(Subset,ns) else begin - TrySolve0(i+1); // i- - Inc(ns); Subset[ns]:=B[i]; TrySolve0(i+1); Dec(ns); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент + Inc(ns); Subset[ns]:=B[i]; TrySolve0(i+1); Dec(ns); // попробовать взять i-тый элемент end; end; diff --git a/TestSamples/CompilationSamples/ProcParam.pas b/TestSamples/CompilationSamples/ProcParam.pas index d2708bbb0..5a77aa708 100644 --- a/TestSamples/CompilationSamples/ProcParam.pas +++ b/TestSamples/CompilationSamples/ProcParam.pas @@ -1,6 +1,6 @@ -// -// PascalABC.NET -// .NET +// Иллюстрация процедурных переменных как параметров подпрограмм +// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов +// Процедурный тип реализован через делегаты .NET procedure for_each(var a: array of real; p: procedure(var r: real)); var i: integer; begin diff --git a/TestSamples/CompilationSamples/ProcVars.pas b/TestSamples/CompilationSamples/ProcVars.pas index dfb57588b..c41dcc7c7 100644 --- a/TestSamples/CompilationSamples/ProcVars.pas +++ b/TestSamples/CompilationSamples/ProcVars.pas @@ -1,10 +1,10 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= var p: procedure; procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -16,11 +16,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов статического метода класса'); end; end; diff --git a/TestSamples/CompilationSamples/ProcVars2.pas b/TestSamples/CompilationSamples/ProcVars2.pas index e6b1774e5..073617a04 100644 --- a/TestSamples/CompilationSamples/ProcVars2.pas +++ b/TestSamples/CompilationSamples/ProcVars2.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/TestSamples/CompilationSamples/QuickSort.pas b/TestSamples/CompilationSamples/QuickSort.pas index a0bde3ee7..32b4d52dd 100644 --- a/TestSamples/CompilationSamples/QuickSort.pas +++ b/TestSamples/CompilationSamples/QuickSort.pas @@ -1,4 +1,4 @@ -// . +// Быстрая сортировка Ч. Хоара const Sz=100; type IArr=array [1..Sz] of integer; @@ -35,8 +35,8 @@ procedure QuickSort(var A: IArr; n: integer); i:=l; j:=r; x:=A[(l+r) div 2]; repeat - while A[i]= x - while A[j]>x do Dec(j); // <= x + while A[i]= x + while A[j]>x do Dec(j); // ищем последний элемент <= x if i<=j then begin swap(A[i],A[j]); @@ -59,9 +59,9 @@ var A: IArr; begin cls; FillRandom(A,n); - writeln(' : '); + writeln('До сортировки: '); Print(A,n); - writeln(' : '); + writeln('После сортировки: '); QuickSort(A,n); Print(A,n); end. diff --git a/TestSamples/CompilationSamples/RBcc17.pas b/TestSamples/CompilationSamples/RBcc17.pas index 4e40b2b95..59285e1a8 100644 --- a/TestSamples/CompilationSamples/RBcc17.pas +++ b/TestSamples/CompilationSamples/RBcc17.pas @@ -1,4 +1,4 @@ -// cc17 +// Выполнение задания cc17 для Робота uses Robot; begin diff --git a/TestSamples/CompilationSamples/Random1.pas b/TestSamples/CompilationSamples/Random1.pas index 1f982a093..e8738e012 100644 --- a/TestSamples/CompilationSamples/Random1.pas +++ b/TestSamples/CompilationSamples/Random1.pas @@ -1,13 +1,13 @@ -// +// Генерация случайного числа var i: integer; r: real; begin i := Random(100); - writeln(' 0..99: ',i); + writeln('Случайное целое в диапазоне 0..99: ',i); i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); r := Random; - writeln(' [0,1): ',r); + writeln('Случайное вещественное в диапазоне [0,1): ',r); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Random2.pas b/TestSamples/CompilationSamples/Random2.pas index 7e06c292a..edb94ebd9 100644 --- a/TestSamples/CompilationSamples/Random2.pas +++ b/TestSamples/CompilationSamples/Random2.pas @@ -1,10 +1,10 @@ -// +// Бросание кубиков var k1,k2: integer; begin k1 := Random(1,6); k2 := Random(1,6); - writeln(' : ',k1,' ',k2); - writeln(' : ',k1+k2); + writeln('Очки на кубиках: ',k1,' ',k2); + writeln('Сумма очков: ',k1+k2); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/RandomDiap.pas b/TestSamples/CompilationSamples/RandomDiap.pas index c12b560b5..7bea343d6 100644 --- a/TestSamples/CompilationSamples/RandomDiap.pas +++ b/TestSamples/CompilationSamples/RandomDiap.pas @@ -1,5 +1,5 @@ -// +// Генерация случайного числа в заданном диапазоне begin var i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/RandomSearchTree.pas b/TestSamples/CompilationSamples/RandomSearchTree.pas index 582be1db3..c0fd4a5d0 100644 --- a/TestSamples/CompilationSamples/RandomSearchTree.pas +++ b/TestSamples/CompilationSamples/RandomSearchTree.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева поиска uses GraphABC; type @@ -45,6 +45,6 @@ var begin for i:=1 to 30 do Add(t,Random(100)); - SetWindowCaption(' '); + SetWindowCaption('Двоичное дерево поиска'); DrawTree(t,WindowWidth div 2,10,WindowWidth div 4); end. diff --git a/TestSamples/CompilationSamples/RandomSearchTreeU.pas b/TestSamples/CompilationSamples/RandomSearchTreeU.pas index d08d5191c..555dc9aa7 100644 --- a/TestSamples/CompilationSamples/RandomSearchTreeU.pas +++ b/TestSamples/CompilationSamples/RandomSearchTreeU.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева поиска unit RandomSearchTreeU; uses GraphABC; @@ -47,6 +47,6 @@ var begin for i:=1 to 30 do Add(t,Random(100)); - SetWindowCaption(' '); + SetWindowCaption('Двоичное дерево поиска'); DrawTree(t,WindowWidth div 2,10,WindowWidth div 4); end. diff --git a/TestSamples/CompilationSamples/ReadSignalTest.pas b/TestSamples/CompilationSamples/ReadSignalTest.pas index b2b7bc3be..c67d01070 100644 --- a/TestSamples/CompilationSamples/ReadSignalTest.pas +++ b/TestSamples/CompilationSamples/ReadSignalTest.pas @@ -1,23 +1,23 @@ var s:string; i,j:integer; begin - write(' : '); + write('Введите строку: '); readln(s); - writeln(' : ',s); - write(' : '); + writeln('Вы ввели: ',s); + write('Введите число: '); readln(i); - writeln(' : ',i); + writeln('Вы ввели: ',i); i:=i div i; { ss 1 2 1 } - write(' : '); + write('Введите два числа: '); readln(i,j); - writeln(' : ',i,' ',j); + writeln('Вы ввели: ',i,' ',j); writeln('Sleep(1000)'); sleep(1000); - writeln(''); + writeln('Конец'); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/ReadSignalTest2.pas b/TestSamples/CompilationSamples/ReadSignalTest2.pas index 6d774185d..b7195e88f 100644 --- a/TestSamples/CompilationSamples/ReadSignalTest2.pas +++ b/TestSamples/CompilationSamples/ReadSignalTest2.pas @@ -3,19 +3,19 @@ var s:string; i,j:integer; begin // i:=i div i; - write(' : '); + write('Введите строку: '); readln(s); - writeln(' : ',s); + writeln('Вы ввели: ',s); - write(' : '); + write('Введите число: '); readln(i); - writeln(' : ',i); + writeln('Вы ввели: ',i); - write(' : '); + write('Введите два числа: '); readln(i,j); - writeln(' : ',i,' ',j); + writeln('Вы ввели: ',i,' ',j); writeln('Sleep(1000)'); sleep(1000); - writeln(''); + writeln('Конец'); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/ReadString.pas b/TestSamples/CompilationSamples/ReadString.pas index d3c73b506..a214b05b6 100644 --- a/TestSamples/CompilationSamples/ReadString.pas +++ b/TestSamples/CompilationSamples/ReadString.pas @@ -1,8 +1,8 @@ -// +// Ввод строки var s: string; begin - write(' : '); + write('Введите Ваше имя: '); readln(s); - writeln(', ',s); + writeln('Здравствуйте, ',s); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/RealExtNums.pas b/TestSamples/CompilationSamples/RealExtNums.pas index 4bf290727..5e099f699 100644 --- a/TestSamples/CompilationSamples/RealExtNums.pas +++ b/TestSamples/CompilationSamples/RealExtNums.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(1/0); writeln(sqrt(-1)); diff --git a/TestSamples/CompilationSamples/Records.pas b/TestSamples/CompilationSamples/Records.pas index 26f54af7a..e95d97a88 100644 --- a/TestSamples/CompilationSamples/Records.pas +++ b/TestSamples/CompilationSamples/Records.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSamples/CompilationSamples/References.pas b/TestSamples/CompilationSamples/References.pas index 0f3c23c36..fabbe9d1f 100644 --- a/TestSamples/CompilationSamples/References.pas +++ b/TestSamples/CompilationSamples/References.pas @@ -1,5 +1,5 @@ -// -// +// Использование ссылок вместо указателей для создания односвязного списка +// Мы рекомендуем именно этот способ type Node = class data: integer; @@ -11,18 +11,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -30,6 +30,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/RobotAddTasks.pas b/TestSamples/CompilationSamples/RobotAddTasks.pas index 04a3de795..6bf966b38 100644 --- a/TestSamples/CompilationSamples/RobotAddTasks.pas +++ b/TestSamples/CompilationSamples/RobotAddTasks.pas @@ -4,7 +4,7 @@ uses Robot,RobotTaskMaker; procedure my1; begin - TaskText(' my1. '); + TaskText('Задание my1. Закрасить помеченные клетки'); Field(15,11); RobotBeginEnd(1,1,15,11); Tag(8,6); diff --git a/TestSamples/CompilationSamples/SY0008.pas b/TestSamples/CompilationSamples/SY0008.pas index 49baefce7..bc04960f9 100644 --- a/TestSamples/CompilationSamples/SY0008.pas +++ b/TestSamples/CompilationSamples/SY0008.pas @@ -1,4 +1,4 @@ -// +//Ошибка при повторной компиляции uses SY0008_unit; var diff --git a/TestSamples/CompilationSamples/Sets2.pas b/TestSamples/CompilationSamples/Sets2.pas index 21022da8a..a404ba7bd 100644 --- a/TestSamples/CompilationSamples/Sets2.pas +++ b/TestSamples/CompilationSamples/Sets2.pas @@ -1,15 +1,15 @@ -// -// +// Работа с множествами +// Базовый тип для множества может быть произвольным var - s1: set of string := ['','','','']; - s2: set of string := ['','','']; + s1: set of string := ['Иванов','Попов','Сидорова','Петров']; + s2: set of string := ['Козлов','Петров','Иванов']; begin - writeln(' s1: ',s1); - writeln(' s2: ',s2); - writeln(' s1 s2: ',s1+s2); - writeln(' s1 s2: ',s1*s2); - writeln(' s1 s2: ',s1-s2); - Include(s1,''); - Exclude(s1,''); - writeln(' s1: ',s1); + writeln('Множество s1: ',s1); + writeln('Множество s2: ',s2); + writeln('Объединение множеств s1 и s2: ',s1+s2); + writeln('Пересечение множеств s1 и s2: ',s1*s2); + writeln('Разность множеств s1 и s2: ',s1-s2); + Include(s1,'Умнов'); + Exclude(s1,'Иванов'); + writeln('Множество s1: ',s1); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/SimpleNewFeatures.pas b/TestSamples/CompilationSamples/SimpleNewFeatures.pas index 24bf8fb26..60cef0d77 100644 --- a/TestSamples/CompilationSamples/SimpleNewFeatures.pas +++ b/TestSamples/CompilationSamples/SimpleNewFeatures.pas @@ -1,27 +1,27 @@ -// PascalABC.NET +// Простейшие новые возможности языка PascalABC.NET -// +// Инициализация переменной при описании var i: integer := 1; -// +// Автоопределение типа переменной при инициализации var r := 2.5; begin - // + // Внутриблочные описания переменных var s: real := 1.0; - // ( - ) + // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) for j: integer := 1 to 10 do - s += j; // += + s += j; // Операция += для чисел var p := 1; - // + // Описание переменной в заголовке цикла с автоопределением типа for var j := 1 to 10 do - p *= j; // *= + p *= j; // Операция *= var str := ''; for c: char := 'a' to 'z' do - str += c; // += + str += c; // Операция += для строк end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Stack.pas b/TestSamples/CompilationSamples/Stack.pas index dda2835c3..d818e96ea 100644 --- a/TestSamples/CompilationSamples/Stack.pas +++ b/TestSamples/CompilationSamples/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/TestSamples/CompilationSamples/StandFun.pas b/TestSamples/CompilationSamples/StandFun.pas index 369ddac57..5d820f901 100644 --- a/TestSamples/CompilationSamples/StandFun.pas +++ b/TestSamples/CompilationSamples/StandFun.pas @@ -1,14 +1,14 @@ -// +// Стандартные функции var x: real; begin - write(' x: '); + write('Введите x: '); readln(x); - writeln(' ',x,' ',sqr(x)); - writeln(x,' 5 ',power(x,5)); - writeln(' ',x,' ',sqrt(x)); - writeln(' ',x,' ',abs(x)); - writeln(' ',x,' ',ln(x)); - writeln(' ',x,' ',sin(x)); - writeln(' ',x,' ',cos(x)); + writeln('Квадрат ',x,' равен ',sqr(x)); + writeln(x,' в степени 5 равно ',power(x,5)); + writeln('Квадратный корень из ',x,' равен ',sqrt(x)); + writeln('Модуль ',x,' равен ',abs(x)); + writeln('Натуральный логарифм ',x,' равен ',ln(x)); + writeln('Синус ',x,' равен ',sin(x)); + writeln('Косинус ',x,' равен ',cos(x)); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/StandardTypes.pas b/TestSamples/CompilationSamples/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/TestSamples/CompilationSamples/StandardTypes.pas +++ b/TestSamples/CompilationSamples/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/TestSamples/CompilationSamples/StringInteger.pas b/TestSamples/CompilationSamples/StringInteger.pas index 60f5db050..ce86a50a3 100644 --- a/TestSamples/CompilationSamples/StringInteger.pas +++ b/TestSamples/CompilationSamples/StringInteger.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/StringMethods.pas b/TestSamples/CompilationSamples/StringMethods.pas index 69cf7ddb1..609eb8234 100644 --- a/TestSamples/CompilationSamples/StringMethods.pas +++ b/TestSamples/CompilationSamples/StringMethods.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/StringPlus.pas b/TestSamples/CompilationSamples/StringPlus.pas index d301057c1..f267a010f 100644 --- a/TestSamples/CompilationSamples/StringPlus.pas +++ b/TestSamples/CompilationSamples/StringPlus.pas @@ -1,4 +1,4 @@ -// +// Сложение строк var s1: string := 'Pascal'; var s2: string := 'NET'; diff --git a/TestSamples/CompilationSamples/StringTypes.pas b/TestSamples/CompilationSamples/StringTypes.pas index 4cb3e8a0f..7e89b95d1 100644 --- a/TestSamples/CompilationSamples/StringTypes.pas +++ b/TestSamples/CompilationSamples/StringTypes.pas @@ -1,17 +1,17 @@ -// string, string[n], shortstring +// Строки string, string[n], shortstring var - s: string; // , s, - s10: string[10]; // ss + s: string; // память, занимаемая s, зависит от ее длины + s10: string[10]; // память под ss фиксирована ss: shortstring := s; f: file of string[10]; - // f: file of string; - + // f: file of string; - ошибка begin s := '12345678901234567890'; - s10 := s; // + s10 := s; // обрезание writeln(s10); s += s; s += s; s += s; s += s; writeln(s); - writeln(' = ',s.Length); + writeln('Длина строки = ',s.Length); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/StructTypeEquiv.pas b/TestSamples/CompilationSamples/StructTypeEquiv.pas index 2dec49906..8648f73fd 100644 --- a/TestSamples/CompilationSamples/StructTypeEquiv.pas +++ b/TestSamples/CompilationSamples/StructTypeEquiv.pas @@ -1,4 +1,4 @@ -// . Delphi - +// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность var a: array of integer; a1: array of integer; @@ -18,6 +18,6 @@ begin a := a1; s := s1; p := p1; - r := r1; // Delphi - proc(a,s,p,r); // - + r := r1; // В Delphi ни одно из этих присваиваний не сработает + proc(a,s,p,r); // Этот вызов - тоже end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Students.pas b/TestSamples/CompilationSamples/Students.pas index 564529f3c..bae1edb76 100644 --- a/TestSamples/CompilationSamples/Students.pas +++ b/TestSamples/CompilationSamples/Students.pas @@ -1,4 +1,4 @@ -// +//Перегрузка операторов type Student = class Name: string; diff --git a/TestSamples/CompilationSamples/SwapT.pas b/TestSamples/CompilationSamples/SwapT.pas index 906247f7a..645e791bf 100644 --- a/TestSamples/CompilationSamples/SwapT.pas +++ b/TestSamples/CompilationSamples/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,13 +11,13 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); var c := 2.5; var d := 3.3; writeln; - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('До Swap c={0}, d={1}',c,d); Swap(c,d); - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('После Swap c={0}, d={1}',c,d); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/SystemUnitTest.pas b/TestSamples/CompilationSamples/SystemUnitTest.pas index d05210d39..262e7f035 100644 --- a/TestSamples/CompilationSamples/SystemUnitTest.pas +++ b/TestSamples/CompilationSamples/SystemUnitTest.pas @@ -1,12 +1,12 @@ -// uses, PABCSystem +// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem uses System; begin - // Random, System, Random - // PABCSystem, + // Имя Random, определенное в пространстве имен System, перекрывает имя Random + // в модуле PABCSystem, который неявно подключается первым var r: Random := new Random(); writeln(r.Next(10)); - // Random , + // Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится var i: integer := PABCSystem.Random(10); writeln(i); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/TTimer.pas b/TestSamples/CompilationSamples/TTimer.pas index 18252f2d3..706589e61 100644 --- a/TestSamples/CompilationSamples/TTimer.pas +++ b/TestSamples/CompilationSamples/TTimer.pas @@ -1,4 +1,4 @@ -// +//Тест интерфейсов и делегатов uses System, System.Timers; diff --git a/TestSamples/CompilationSamples/Template.pas b/TestSamples/CompilationSamples/Template.pas index 3e8257ca5..5b301a607 100644 --- a/TestSamples/CompilationSamples/Template.pas +++ b/TestSamples/CompilationSamples/Template.pas @@ -23,8 +23,8 @@ var a,b: Pair; begin - a := new Pair(1, ' '); - b := new Pair(2, ''); + a := new Pair(1, 'один '); + b := new Pair(2, 'два'); Writeln(a + b); readln; end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/TextEditor.pas b/TestSamples/CompilationSamples/TextEditor.pas index 7ef481b8c..f1e3e361c 100644 --- a/TestSamples/CompilationSamples/TextEditor.pas +++ b/TestSamples/CompilationSamples/TextEditor.pas @@ -8,7 +8,7 @@ uses System.Windows.Forms; const TextFileExt = 'txt'; - TextFileFilter = ' (*.'+TextFileExt+')|*.'+TextFileExt; + TextFileFilter = 'Текстовые файлы (*.'+TextFileExt+')|*.'+TextFileExt; var myForm: Form; @@ -17,7 +17,7 @@ var procedure SaveFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default); f.Write(TextBox1.Text); f.Close; @@ -25,7 +25,7 @@ end; procedure OpenFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default); TextBox1.Text := f.ReadToEnd; f.Close; @@ -39,14 +39,14 @@ end; procedure MenuSaveClick(sender:object; args:System.EventArgs); begin - // + //Диалог для выбора файла var sd := new SaveFileDialog; - // + //Расширение поумолчанию sd.DefaultExt := TextFileExt; - // + //Фильтр для диалга sd.Filter := TextFileFilter; if sd.ShowDialog=DialogResult.OK then - // sd.ShowDialog + //если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то SaveFile(sd.FileName); end; @@ -61,31 +61,31 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Простой текстовый редактор'; TextBox1 := new TextBox; TextBox1.Multiline := true; TextBox1.Height := 100; TextBox1.Dock := DockStyle.Fill; - // + //Полосы прокрутки TextBox1.ScrollBars := ScrollBars.Both; - // + //Устанавливаем шрифт TextBox1.Font := new System.Drawing.Font('Courier New',10); myForm.Controls.Add(TextBox1); - // + //Создаем меню var toolStrip1 := new ToolStrip; toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden; - var miFile := new ToolStripMenuItem(''); - miFile.DropDownItems.Add(new ToolStripMenuItem('', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem(' ...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('',nil,FormClose)); + var miFile := new ToolStripMenuItem('Файл'); + miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose)); toolStrip1.Items.Add(miFile); myForm.Controls.Add(toolStrip1); - // - // = 1, + //Посмотрим в аргументы командной строки + //Если их количество = 1, то открываем if CommandLineArgs.Length = 1 then OpenFile(CommandLineArgs[0]); diff --git a/TestSamples/CompilationSamples/Timer2.pas b/TestSamples/CompilationSamples/Timer2.pas index a4e2bb7e6..86d6eb326 100644 --- a/TestSamples/CompilationSamples/Timer2.pas +++ b/TestSamples/CompilationSamples/Timer2.pas @@ -1,4 +1,4 @@ -// "". . +// "Собачка". Иллюстрация использования таймера. uses GraphABC, Timers; var @@ -51,7 +51,7 @@ begin end; begin - SetWindowCaption('""'); + SetWindowCaption('"Собачка"'); OnMouseMove:=MouseMove; xx:=100; yy:=100; px:=xx; py:=yy; diff --git a/TestSamples/CompilationSamples/TreeDraw.pas b/TestSamples/CompilationSamples/TreeDraw.pas index a47b69373..c595aa5b7 100644 --- a/TestSamples/CompilationSamples/TreeDraw.pas +++ b/TestSamples/CompilationSamples/TreeDraw.pas @@ -1,10 +1,10 @@ -// +// Рекурсивное рисование двоичного дерева uses GraphABC; const dy=60; procedure DrawTree(x,y,dx,level: integer); -// : , , +// обход: левое, корень, правое begin if level=0 then Exit; DrawTree(x-dx,y+dy,dx div 2,level-1); diff --git a/TestSamples/CompilationSamples/TryExcept1.pas b/TestSamples/CompilationSamples/TryExcept1.pas index 0c56f079a..73f5e3b2e 100644 --- a/TestSamples/CompilationSamples/TryExcept1.pas +++ b/TestSamples/CompilationSamples/TryExcept1.pas @@ -3,7 +3,7 @@ begin writeln(1); raise new Exception('xxx'); except - writeln('!'); + writeln('Исключение!'); end; readln; end. diff --git a/TestSamples/CompilationSamples/TryExcept2.pas b/TestSamples/CompilationSamples/TryExcept2.pas index 31f361281..274631f24 100644 --- a/TestSamples/CompilationSamples/TryExcept2.pas +++ b/TestSamples/CompilationSamples/TryExcept2.pas @@ -4,7 +4,7 @@ begin raise new Exception('xxx'); except on e:Exception do - writeln(': ',e); + writeln('Исключение: ',e); end; readln; end. diff --git a/TestSamples/CompilationSamples/TryFinally.pas b/TestSamples/CompilationSamples/TryFinally.pas index 3fc2c62fa..b5a9ed7fa 100644 --- a/TestSamples/CompilationSamples/TryFinally.pas +++ b/TestSamples/CompilationSamples/TryFinally.pas @@ -1,9 +1,9 @@ -// finally - , +// Иллюстрация finally - срабатывает независимо от того, произошло исключение или нет begin try if Random(2)=1 then - raise Exception.Create('-!'); + raise Exception.Create('Ку-ку!'); finally write(1); readln; diff --git a/TestSamples/CompilationSamples/UntypedFile.pas b/TestSamples/CompilationSamples/UntypedFile.pas index c49eaa091..24bb11de5 100644 --- a/TestSamples/CompilationSamples/UntypedFile.pas +++ b/TestSamples/CompilationSamples/UntypedFile.pas @@ -1,4 +1,4 @@ -// +// Бестиповые файлы var f: file; i: integer; @@ -8,11 +8,11 @@ var begin assign(f,'a.dat'); rewrite(f); - // + // Записываем в файл данные любых типов write(f,1,2.5,'Hello'); close(f); reset(f); - // + // Считываем эти данные из файла read(f,i,r,s); write(i,' ',r,' ',s); close(f); diff --git a/TestSamples/CompilationSamples/UpLowCase.pas b/TestSamples/CompilationSamples/UpLowCase.pas index 24b122fd6..ae41aac8d 100644 --- a/TestSamples/CompilationSamples/UpLowCase.pas +++ b/TestSamples/CompilationSamples/UpLowCase.pas @@ -1,4 +1,4 @@ -// UpCase LowCase UpperCase LowerCase +// Функции UpCase LowCase UpperCase LowerCase var c: char; s: string; @@ -10,13 +10,13 @@ begin for c:='A' to 'Z' do write(LowCase(c)); writeln; - for c:='' to '' do + for c:='А' to 'Я' do write(UpCase(c)); writeln; - for c:='' to '' do + for c:='а' to 'я' do write(LowCase(c)); writeln; - s:=' '; + s:='Папа у Васи силён в математике'; s:=UpperCase(s); writeln(s); s:=LowerCase(s); diff --git a/TestSamples/CompilationSamples/VPNController.pas b/TestSamples/CompilationSamples/VPNController.pas index 5950045fb..0c0657059 100644 --- a/TestSamples/CompilationSamples/VPNController.pas +++ b/TestSamples/CompilationSamples/VPNController.pas @@ -18,7 +18,7 @@ begin Writeln(Pr.StandardOutput.ReadToEnd); //Pr.WaitForExit(); except - Writeln(': ' + Command); + Writeln('Ошибка: Не могу выполнить ' + Command); end; end; @@ -80,22 +80,22 @@ begin exit; end; while true do begin - SleepSEC(CheckPeriod,' {0} '); + SleepSEC(CheckPeriod,'Следующая проверка через {0} секунд'); if not PingAdress(VPNIP) then begin if not PingAdress(IP) then begin Writeln; - WritelnWithTime(' .. '+ IP); + WritelnWithTime('Невозможно восстановить связть т.к. отуствует доступ к удаленному узлу '+ IP); end else begin Writeln; - WritelnWithTime(' ' + VPNIP); - WritelnWithTime(' '+ServiceName+'...'); + WritelnWithTime('Нет связи с узлом ' + VPNIP); + WritelnWithTime('Перзапускаю '+ServiceName+'...'); StartAndWait('NET','STOP '+ServiceName); - SleepSEC(VPNRestartWait,' '+ServiceName+'... {0}'); + SleepSEC(VPNRestartWait,'Ожидаю запуска '+ServiceName+'... {0}'); Writeln; StartAndWait('NET','START '+ServiceName); end; end else begin - WriteWithTime(' '); + WriteWithTime('Все в норме'); end; end; end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/Where.pas b/TestSamples/CompilationSamples/Where.pas index 872cf309b..4b932d35a 100644 --- a/TestSamples/CompilationSamples/Where.pas +++ b/TestSamples/CompilationSamples/Where.pas @@ -1,4 +1,4 @@ -// Where - +// Секция Where - ограничение на типы параметров uses System,System.Collections.Generic; type @@ -15,7 +15,7 @@ type var m: MyClass; - //m1: MyClass; // + //m1: MyClass; // ошибка begin end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/WinFormWithButton.pas b/TestSamples/CompilationSamples/WinFormWithButton.pas index 9bf65a198..4b21fb94c 100644 --- a/TestSamples/CompilationSamples/WinFormWithButton.pas +++ b/TestSamples/CompilationSamples/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения #apptype windows #reference 'System.Windows.Forms.dll' @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/TestSamples/CompilationSamples/WriteAll.pas b/TestSamples/CompilationSamples/WriteAll.pas index 9aade8ace..7b9ca40ce 100644 --- a/TestSamples/CompilationSamples/WriteAll.pas +++ b/TestSamples/CompilationSamples/WriteAll.pas @@ -1,12 +1,12 @@ -/// write +/// Вывод различных типов процедурой write begin - // , , , + // Вывод, целого, строки, вещественного Writeln(1,' ',2.5); - // + // Вывод множества Writeln([1..10]); - // + // Вывод логического Writeln(True); var a: array [1..10] of integer; - // ( ) + // Вывод массива (выводится его тип) Writeln(a); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/WriteFormat.pas b/TestSamples/CompilationSamples/WriteFormat.pas index 12be8c1c3..81b23cce6 100644 --- a/TestSamples/CompilationSamples/WriteFormat.pas +++ b/TestSamples/CompilationSamples/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); - // + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/WriteFormat2.pas b/TestSamples/CompilationSamples/WriteFormat2.pas index 7e060018f..a6ea0c119 100644 --- a/TestSamples/CompilationSamples/WriteFormat2.pas +++ b/TestSamples/CompilationSamples/WriteFormat2.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); - // + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/WriteRecord.pas b/TestSamples/CompilationSamples/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/TestSamples/CompilationSamples/WriteRecord.pas +++ b/TestSamples/CompilationSamples/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSamples/CompilationSamples/anim_nonblinking.pas b/TestSamples/CompilationSamples/anim_nonblinking.pas index 3762042b1..3f3620766 100644 --- a/TestSamples/CompilationSamples/anim_nonblinking.pas +++ b/TestSamples/CompilationSamples/anim_nonblinking.pas @@ -8,10 +8,10 @@ begin for i:=1 to 500 do begin SetBrushColor(clGreen); - FillEllipse(i,100,i+100,200); + FillEllipse(i,100,i흍,200); Redraw; Sleep(1); SetBrushColor(clWhite); - FillRect(i,100,i+100,200); + FillRect(i,100,i흍,200); end; end. diff --git a/TestSamples/CompilationSamples/animals.pas b/TestSamples/CompilationSamples/animals.pas index 99bd5f292..e72ea0d1a 100644 --- a/TestSamples/CompilationSamples/animals.pas +++ b/TestSamples/CompilationSamples/animals.pas @@ -46,10 +46,10 @@ begin end; begin - writeln(' '); + writeln('Загадайте животное'); assign(f, 'animals_data.txt'); if not FileExists('animals_data.txt') then - root := new TNode('') + root := new TNode('Собака') else begin reset(f); @@ -68,15 +68,15 @@ begin p:=p.right end; - write(' '+p.s+'? '); + write('Это '+p.s+'? '); readln(x); if x=1 then - writeln(' !') + writeln('Я угадала!') else begin - write(' . ? '); + write('Я проиграла. Что это за животное? '); readln(s); - write(' , '+p.s+': '); + write('Введите вопрос, отличающий это животное от '+p.s+': '); readln(q); p1 := new TNode(s); p2 := new TNode(p.s); diff --git a/TestSamples/CompilationSamples/arr_test4.pas b/TestSamples/CompilationSamples/arr_test4.pas index 028d688ff..3a848aef7 100644 --- a/TestSamples/CompilationSamples/arr_test4.pas +++ b/TestSamples/CompilationSamples/arr_test4.pas @@ -1,9 +1,9 @@ -var work,work1: array [''..''] of integer; +var work,work1: array ['а'..'я'] of integer; begin - work['']:=1; + work['а']:=1; work1:=work; - writeln(work1['']); + writeln(work1['а']); readln; end. diff --git a/TestSamples/CompilationSamples/balls.pas b/TestSamples/CompilationSamples/balls.pas index 929ef6f78..0deebc050 100644 --- a/TestSamples/CompilationSamples/balls.pas +++ b/TestSamples/CompilationSamples/balls.pas @@ -1,5 +1,5 @@ -// -// CRT, , +// Блуждание мячиков по полю +// Работа с модулем CRT, наследование, полиморфизм uses CRT; diff --git a/TestSamples/CompilationSamples/balls1.pas b/TestSamples/CompilationSamples/balls1.pas index 18c49d638..71e30129a 100644 --- a/TestSamples/CompilationSamples/balls1.pas +++ b/TestSamples/CompilationSamples/balls1.pas @@ -1,5 +1,5 @@ -// -// CRT, , +// Блуждание мячиков по полю +// Работа с модулем CRT, наследование, полиморфизм uses CRT; diff --git a/TestSamples/CompilationSamples/battle.pas b/TestSamples/CompilationSamples/battle.pas index d8078806d..651ccd80f 100644 --- a/TestSamples/CompilationSamples/battle.pas +++ b/TestSamples/CompilationSamples/battle.pas @@ -1,34 +1,34 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи c : color; public CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); @@ -161,17 +161,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -196,7 +196,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -205,14 +205,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].MinFood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -251,35 +251,35 @@ SetSmoothing(False); SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); -SetWindowCaption(' '); +SetWindowCaption('Битва за жизнь'); SetFontSize(7); SetFontName('Arial'); SetBrushColor(BkColor); FillRectangle(0, 0, Width, Height); SetFontColor(clWhite); -TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); -TextOut(10, ymax + 20+1*18, ' . - '); -TextOut(10, ymax + 20+2*18, ' . , .'); -TextOut(10, ymax + 20+3*18, ' : - , , ,'); -TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); -TextOut(10, ymax + 20+5*18, ' , ; - , .'); +TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); +TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); +TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); +TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); +TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); +TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; -//c - . -//CanRazm - -// . -//MaxKol - . -//Kol - . -//MaxLife - . -// , , , . -//MinFood - , -// ( ; -1). -//Speed - . 2 . -//See - - . +//c - цвет. +//CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя +// её последовательными размножениями. +//MaxKol - максимально допустимое количество рыб данного вида. +//Kol - количество рыб данного вида в текущий момент времени. +//MaxLife - максимальная продолжительность жизни. +// После того, как рыба сделает больше шагов, чем это число, она умирает. +//MinFood - минимальное количество съеденных жертв, необходимое для размножения +// (только для хищников; для жертв это количество принято за -1). +//Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. +//See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -289,7 +289,7 @@ opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); -// +//Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -302,7 +302,7 @@ p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); -// , - . +//И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; //i:=0;c:=getallcount;LockDrawing; repeat diff --git a/TestSamples/CompilationSamples/battle2.pas b/TestSamples/CompilationSamples/battle2.pas index 984615c76..be644a465 100644 --- a/TestSamples/CompilationSamples/battle2.pas +++ b/TestSamples/CompilationSamples/battle2.pas @@ -1,33 +1,33 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; c:color; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -37,15 +37,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -79,7 +79,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -94,19 +94,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var i, imin: integer; dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -115,11 +115,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -137,10 +137,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if (d < dmin) and (abs(dx0 - t.dx0) < epsustupi) and @@ -157,17 +157,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -191,7 +191,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -200,14 +200,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -234,35 +234,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); -SetWindowCaption(' '); +SetWindowCaption('Битва за жизнь'); SetFontSize(10); SetFontName('Arial'); SetBrushColor(BkColor); FillRect(0, 0, Width + 2000, Height + 1500); SetFontColor(clWhite); -TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); -TextOut(10, ymax + 20+1*18, ' . - '); -TextOut(10, ymax + 20+2*18, ' . , .'); -TextOut(10, ymax + 20+3*18, ' : - , , ,'); -TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); -TextOut(10, ymax + 20+5*18, ' , ; - , .'); +TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); +TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); +TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); +TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); +TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); +TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; -//c - . -//CanRazm - -// . -//MaxKol - . -//Kol - . -//MaxLife - . -// , , , . -//MinFood - , -// ( ; -1). -//Speed - . 2 . -//See - - . +//c - цвет. +//CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя +// её последовательными размножениями. +//MaxKol - максимально допустимое количество рыб данного вида. +//Kol - количество рыб данного вида в текущий момент времени. +//MaxLife - максимальная продолжительность жизни. +// После того, как рыба сделает больше шагов, чем это число, она умирает. +//MinFood - минимальное количество съеденных жертв, необходимое для размножения +// (только для хищников; для жертв это количество принято за -1). +//Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. +//See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -272,7 +272,7 @@ opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); -// +//Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -285,7 +285,7 @@ p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); -// , - . +//И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; repeat tek:= tek.next; diff --git a/TestSamples/CompilationSamples/battle2u.pas b/TestSamples/CompilationSamples/battle2u.pas index a82ad646e..d7afff5ea 100644 --- a/TestSamples/CompilationSamples/battle2u.pas +++ b/TestSamples/CompilationSamples/battle2u.pas @@ -1,34 +1,34 @@ unit battle2u; uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; c:color; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var i, imin: integer; dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if (d < dmin) and (abs(dx0 - t.dx0) < epsustupi) and @@ -158,17 +158,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -192,7 +192,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -201,14 +201,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -235,35 +235,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); -SetWindowCaption(' '); +SetWindowCaption('Битва за жизнь'); SetFontSize(10); SetFontName('Arial'); SetBrushColor(BkColor); FillRect(0, 0, Width + 2000, Height + 1500); SetFontColor(clWhite); -TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); -TextOut(10, ymax + 20+1*18, ' . - '); -TextOut(10, ymax + 20+2*18, ' . , .'); -TextOut(10, ymax + 20+3*18, ' : - , , ,'); -TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); -TextOut(10, ymax + 20+5*18, ' , ; - , .'); +TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); +TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); +TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); +TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); +TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); +TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; -//c - . -//CanRazm - -// . -//MaxKol - . -//Kol - . -//MaxLife - . -// , , , . -//MinFood - , -// ( ; -1). -//Speed - . 2 . -//See - - . +//c - цвет. +//CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя +// её последовательными размножениями. +//MaxKol - максимально допустимое количество рыб данного вида. +//Kol - количество рыб данного вида в текущий момент времени. +//MaxLife - максимальная продолжительность жизни. +// После того, как рыба сделает больше шагов, чем это число, она умирает. +//MinFood - минимальное количество съеденных жертв, необходимое для размножения +// (только для хищников; для жертв это количество принято за -1). +//Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. +//See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -273,7 +273,7 @@ opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); -// +//Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -286,7 +286,7 @@ p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); -// , - . +//И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; repeat tek:= tek.next; diff --git a/TestSamples/CompilationSamples/brown_moving1.pas b/TestSamples/CompilationSamples/brown_moving1.pas index c78e72dd8..14c10d41b 100644 --- a/TestSamples/CompilationSamples/brown_moving1.pas +++ b/TestSamples/CompilationSamples/brown_moving1.pas @@ -1,4 +1,4 @@ -// +// Броуновское движение uses GraphABC; var x,y: integer; @@ -18,7 +18,7 @@ var i: integer; const len=3; begin - SetWindowCaption(' '); + SetWindowCaption('Броуновское движение'); SetWindowSize(640,480); SetBrushColor(clBlack); FillRect(0,0,WindowWidth div 2,WindowHeight-1); @@ -26,15 +26,15 @@ begin x:=Windowwidth div 2; y:=WindowHeight div 2; { Sleep(1000);} - TextOut(5,5,'!'); + TextOut(5,5,'Начало!'); MoveTo(x,y); for i:=1 to 100000 do begin // if i mod 5 = 0 then Sleep(1); - if i mod 1000 = 0 then TextOut(5,25,IntToStr(i)+' '); + if i mod 1000 = 0 then TextOut(5,25,IntToStr(i)+' итераций'); SetPenColor(RGB(Random(256),Random(256),Random(256))); LineOn(Random(2*len+1)-len,Random(2*len+1)-len) end; - TextOut(5,45,'!'); + TextOut(5,45,'Конец!'); // writeln(Milliseconds); end. diff --git a/TestSamples/CompilationSamples/classlist.pas b/TestSamples/CompilationSamples/classlist.pas index 84371952b..4909025e1 100644 --- a/TestSamples/CompilationSamples/classlist.pas +++ b/TestSamples/CompilationSamples/classlist.pas @@ -1,4 +1,4 @@ -// +// Демонстрация класса односвязного списка целых с внутренним итератором uses System; type diff --git a/TestSamples/CompilationSamples/classlist2.pas b/TestSamples/CompilationSamples/classlist2.pas index 282321db7..4d52b826e 100644 --- a/TestSamples/CompilationSamples/classlist2.pas +++ b/TestSamples/CompilationSamples/classlist2.pas @@ -1,4 +1,4 @@ -// +// Демонстрация класса односвязного списка целых с внутренним итератором //using System; type ttest = class diff --git a/TestSamples/CompilationSamples/del1.pas b/TestSamples/CompilationSamples/del1.pas index 05ca9202f..6e6b5b647 100644 --- a/TestSamples/CompilationSamples/del1.pas +++ b/TestSamples/CompilationSamples/del1.pas @@ -1,4 +1,4 @@ -// PCU +//Тест делегатов с использованием PCU uses del1_u, del1_u2; @@ -16,6 +16,6 @@ begin PrintEvent += MyProc; PrintEvent += MyProc2; PrintEvent += MyProc3; - PrintEvent(20); // 20, 40, 60 + PrintEvent(20); //Выведет 20, 40, 60 readln; end. diff --git a/TestSamples/CompilationSamples/figures.pas b/TestSamples/CompilationSamples/figures.pas index 23748806c..4e32886ff 100644 --- a/TestSamples/CompilationSamples/figures.pas +++ b/TestSamples/CompilationSamples/figures.pas @@ -1,6 +1,6 @@ -// . -// . -// . +// Демонстрация полиморфизма. +// Многократное вложение контейнеров друг в друга. +// Клонирование объектов. uses GraphABC; type @@ -156,7 +156,7 @@ var begin SetWindowSize(800,400); - SetWindowCaption(''); + SetWindowCaption('Фигуры'); Glaz:=FigureContainer.Create; Glaz.Add(RectG.Create(0,0,70,70)); @@ -178,7 +178,7 @@ begin FC1.MoveCoords(400,0); FC1.Show; -// Glaz.Destroy; - , FC FC1 +// Glaz.Destroy; - не надо, это делают FC и FC1 // Glaz1.Destroy; FC.Destroy; FC1.Destroy; diff --git a/TestSamples/CompilationSamples/files.pas b/TestSamples/CompilationSamples/files.pas index 7c4298049..62050f464 100644 --- a/TestSamples/CompilationSamples/files.pas +++ b/TestSamples/CompilationSamples/files.pas @@ -1,10 +1,10 @@ -// +//Работа с текстовыми файлами var f : Text; s : string; begin AssignFile(f,'output.txt'); Rewrite(f); - writeln(f,' '); + writeln(f,'Это текстовый файл '); writeln(f,235); writeln(f,3.14); writeln(f,'string'); diff --git a/TestSamples/CompilationSamples/for_test3.pas b/TestSamples/CompilationSamples/for_test3.pas index ed502f983..966f280b2 100644 --- a/TestSamples/CompilationSamples/for_test3.pas +++ b/TestSamples/CompilationSamples/for_test3.pas @@ -1,6 +1,6 @@ var i: integer; -// ! +//Работает верно! begin i:= 10; diff --git a/TestSamples/CompilationSamples/forw1.pas b/TestSamples/CompilationSamples/forw1.pas index 156f988e3..8285945ac 100644 --- a/TestSamples/CompilationSamples/forw1.pas +++ b/TestSamples/CompilationSamples/forw1.pas @@ -1,4 +1,4 @@ -// forward- +// forward-объявления для локальных подпрограмм запрещены procedure f(i:integer); forward; procedure f(i: integer); diff --git a/TestSamples/CompilationSamples/gr2.pas b/TestSamples/CompilationSamples/gr2.pas index 1fdd1d26f..ec66f94c1 100644 --- a/TestSamples/CompilationSamples/gr2.pas +++ b/TestSamples/CompilationSamples/gr2.pas @@ -18,6 +18,6 @@ begin Brush.Color := clRandom; Rectangle(10,10,500,400); end; - TextOut(10,10,'');} + TextOut(10,10,'Конец');} end. diff --git a/TestSamples/CompilationSamples/gr_ButtonProba.pas b/TestSamples/CompilationSamples/gr_ButtonProba.pas index b632c0ebe..6ba2546a5 100644 --- a/TestSamples/CompilationSamples/gr_ButtonProba.pas +++ b/TestSamples/CompilationSamples/gr_ButtonProba.pas @@ -4,12 +4,12 @@ var b: ButtonABC; procedure Click; begin - b.Text:='!'; + b.Text:='Нажали!'; end; begin - b:=ButtonABC.Create(10,10,240,'12345678901234567',clMoneyGreen); - b := new ButtonABC(10,10,240,'12345678901234567',clMoneyGreen); + b:=ButtonABC.Create(10,10,240,'Кнопка12345678901234567',clMoneyGreen); + b := new ButtonABC(10,10,240,'Кнопка12345678901234567',clMoneyGreen); b.OnClick:=Click; end. diff --git a/TestSamples/CompilationSamples/gr_Move_Param.pas b/TestSamples/CompilationSamples/gr_Move_Param.pas index 06afff757..4a268a1d9 100644 --- a/TestSamples/CompilationSamples/gr_Move_Param.pas +++ b/TestSamples/CompilationSamples/gr_Move_Param.pas @@ -1,4 +1,4 @@ -// +// Движение по траектории uses ABCObjects,GraphABC; const @@ -11,7 +11,7 @@ type x,y: real; end; -function Position(t: real): PointR; // +function Position(t: real): PointR; // астроида var si,co: real; begin si := sin(1.5 * t); @@ -20,7 +20,7 @@ begin Result.y := co*co*co; end; -function Position1(t: real): PointR; // +function Position1(t: real): PointR; // фигура Лиссажу begin Result.x := cos(4*t); Result.y := cos(2.97221*t + 2*Pi/3); @@ -49,7 +49,7 @@ var t: real; begin - SetWindowCaption(' '); + SetWindowCaption('Движение по траектории'); SetWindowSize(640,480); CenterWindow; diff --git a/TestSamples/CompilationSamples/gr_Move_Param_my.pas b/TestSamples/CompilationSamples/gr_Move_Param_my.pas index bebb0cee0..988aef822 100644 --- a/TestSamples/CompilationSamples/gr_Move_Param_my.pas +++ b/TestSamples/CompilationSamples/gr_Move_Param_my.pas @@ -1,4 +1,4 @@ -// +// Движение по траектории uses ABCObjects,GraphABC; const @@ -10,7 +10,7 @@ type x,y: real; end; -function Position(t: real): PointR; // +function Position(t: real): PointR; // астроида var si,co: real; begin si := sin(1.5 * t); @@ -19,7 +19,7 @@ begin Result.y := co*co*co; end; -function Position1(t: real): PointR; // +function Position1(t: real): PointR; // фигура Лиссажу begin Result.x := cos(4*t); Result.y := cos(2.97221*t + 2*Pi/3); @@ -48,7 +48,7 @@ var t: real; begin - SetWindowCaption(' '); + SetWindowCaption('Движение по траектории'); SetWindowSize(800,600); CenterWindow; diff --git a/TestSamples/CompilationSamples/gr_MovingObjects.pas b/TestSamples/CompilationSamples/gr_MovingObjects.pas index 7e190ea83..bdcc2032d 100644 --- a/TestSamples/CompilationSamples/gr_MovingObjects.pas +++ b/TestSamples/CompilationSamples/gr_MovingObjects.pas @@ -25,7 +25,7 @@ var i: integer; begin - SetWindowCaption(' '); + SetWindowCaption('Движущиеся объекты'); //SetSmoothingOff; LockDrawingObjects; for i:=1 to n do diff --git a/TestSamples/CompilationSamples/gradient.pas b/TestSamples/CompilationSamples/gradient.pas index e80965ac9..9ef9c6ad7 100644 --- a/TestSamples/CompilationSamples/gradient.pas +++ b/TestSamples/CompilationSamples/gradient.pas @@ -1,4 +1,4 @@ -// . . +// Градиентная заливка. Выполнена интерполяцией по каждой составляющей цвета. uses GraphABC; var i,j: integer; @@ -12,7 +12,7 @@ begin end; begin - SetWindowCaption(''); + SetWindowCaption('Градиент'); SetWindowSize(256*3,400); r[0]:=255; diff --git a/TestSamples/CompilationSamples/gradient2.pas b/TestSamples/CompilationSamples/gradient2.pas index c5a15ba59..8dff0d651 100644 --- a/TestSamples/CompilationSamples/gradient2.pas +++ b/TestSamples/CompilationSamples/gradient2.pas @@ -1,4 +1,4 @@ -// . . +// Градиентная заливка. Выполнена интерполяцией по каждой составляющей цвета. uses GraphABC; var i,j: integer; @@ -31,7 +31,7 @@ begin LinearInterp(0,255,g[j],g[(j+1) mod 3],i), LinearInterp(0,255,b[j],b[(j+1) mod 3],i)); - SetWindowCaption(''); + SetWindowCaption('Градиент'); SetWindowSize(256*3,400); LockDrawing; for i:=0 to 256*3 do diff --git a/TestSamples/CompilationSamples/graphic2.pas b/TestSamples/CompilationSamples/graphic2.pas index 63a899bb5..7c4d0b439 100644 --- a/TestSamples/CompilationSamples/graphic2.pas +++ b/TestSamples/CompilationSamples/graphic2.pas @@ -1,6 +1,6 @@ -// drawGraph -// OY -// +// Процедура drawGraph рисования графика функции в полном окне +// с масштабированием по оси OY +// Перерисовывает график при изменении размеров окна uses GraphABC; type FUN = function (x: real): real; @@ -10,8 +10,8 @@ begin f:=x*sin(x)*exp(-0.1*x); end; -// l (logical) - -// s (screen) - +// l (logical) - логические координаты +// s (screen) - физические координаты procedure drawGraph(x1,x2: real; f: FUN); var xl,xl0,wl,yl,yl0,hl: real; @@ -74,7 +74,7 @@ end; begin SetWindowSize(800,600); LockDrawing; - SetWindowCaption(' : '); + SetWindowCaption('График функции: масштабирование'); drawGraph(0,60,f); Redraw; // OnResize:=Resize; diff --git a/TestSamples/CompilationSamples/init_fields_in_class.pas b/TestSamples/CompilationSamples/init_fields_in_class.pas index 041dce35d..0b06709be 100644 --- a/TestSamples/CompilationSamples/init_fields_in_class.pas +++ b/TestSamples/CompilationSamples/init_fields_in_class.pas @@ -25,6 +25,6 @@ begin writeln(cc.st2);} writeln(cc.static_r.x);//,' ',cc.static_r.y); writeln(cc.i); - // + //нужен статический конструктор readln; end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/life2.pas b/TestSamples/CompilationSamples/life2.pas index a7c248f74..55a061251 100644 --- a/TestSamples/CompilationSamples/life2.pas +++ b/TestSamples/CompilationSamples/life2.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке uses GraphABC,Utils; const @@ -286,10 +286,10 @@ begin end; begin - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -297,8 +297,8 @@ begin SetWindowSize(x0+m*w,y0+n*w); SetFontName('Arial'); SetFontSize(10); - TextOut(25,0,' '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); Init; DrawField; DrawConfiguration; @@ -308,8 +308,8 @@ begin begin gen:=gen+1; SetBrushColor(clWhite); - TextOut(25,0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); a:=b; SosediA:=SosediB; diff --git a/TestSamples/CompilationSamples/main.pas b/TestSamples/CompilationSamples/main.pas index c19815d51..0f93fbd20 100644 --- a/TestSamples/CompilationSamples/main.pas +++ b/TestSamples/CompilationSamples/main.pas @@ -1,6 +1,6 @@ -// - -// dll-, PascalABC.NET, , -// +// Это - главная программа +// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, +// не подключая пространства имен {$reference 'mydll.dll'} begin diff --git a/TestSamples/CompilationSamples/mandelb.pas b/TestSamples/CompilationSamples/mandelb.pas index 0db59168f..618d41911 100644 --- a/TestSamples/CompilationSamples/mandelb.pas +++ b/TestSamples/CompilationSamples/mandelb.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация фрактальной графики. Множество Мандельброта uses GraphABC; const @@ -11,7 +11,7 @@ var // z=z^2+c begin SetWindowSize(400,300); - SetWindowCaption(': '); + SetWindowCaption('Фракталы: множество Мандельброта'); for ix:=0 to WindowWidth-1 do for iy:=0 to WindowHeight-1 do begin diff --git a/TestSamples/CompilationSamples/methods_in_record_test.pas b/TestSamples/CompilationSamples/methods_in_record_test.pas index 99c4c6c2b..b033da648 100644 --- a/TestSamples/CompilationSamples/methods_in_record_test.pas +++ b/TestSamples/CompilationSamples/methods_in_record_test.pas @@ -3,7 +3,7 @@ type x:integer; function ToString: String; override; begin - result := '! ' + x.tostring; + result := 'Работает! ' + x.tostring; end; end; diff --git a/TestSamples/CompilationSamples/milli.pas b/TestSamples/CompilationSamples/milli.pas index e913226e3..cc68419fc 100644 --- a/TestSamples/CompilationSamples/milli.pas +++ b/TestSamples/CompilationSamples/milli.pas @@ -1,4 +1,4 @@ -// Milliseconds +// Демонстрация функции Milliseconds uses Utils; const n=5000; var diff --git a/TestSamples/CompilationSamples/mosaic.pas b/TestSamples/CompilationSamples/mosaic.pas index 77470af7e..0ccfb39b3 100644 --- a/TestSamples/CompilationSamples/mosaic.pas +++ b/TestSamples/CompilationSamples/mosaic.pas @@ -1,4 +1,4 @@ -// . +// Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const diff --git a/TestSamples/CompilationSamples/ms0002.pas b/TestSamples/CompilationSamples/ms0002.pas index ba7238cd5..b5d418661 100644 --- a/TestSamples/CompilationSamples/ms0002.pas +++ b/TestSamples/CompilationSamples/ms0002.pas @@ -1,4 +1,4 @@ -// +// падает begin writeln(longint.MaxValue); readln; diff --git a/TestSamples/CompilationSamples/ms0003.pas b/TestSamples/CompilationSamples/ms0003.pas index 881d9f49a..073271529 100644 --- a/TestSamples/CompilationSamples/ms0003.pas +++ b/TestSamples/CompilationSamples/ms0003.pas @@ -1,4 +1,4 @@ -// +// падает begin writeln(word.MaxValue); readln; diff --git a/TestSamples/CompilationSamples/ms0004.pas b/TestSamples/CompilationSamples/ms0004.pas index 8a9c896ef..45d89a840 100644 --- a/TestSamples/CompilationSamples/ms0004.pas +++ b/TestSamples/CompilationSamples/ms0004.pas @@ -1,5 +1,5 @@ -// -// +// Не должно компилироваться +// А оно вдобавок и падает begin writeln(System.Int64.MaxValue); readln; diff --git a/TestSamples/CompilationSamples/ms0024.pas b/TestSamples/CompilationSamples/ms0024.pas index 3e02ed11d..e1318b7ea 100644 --- a/TestSamples/CompilationSamples/ms0024.pas +++ b/TestSamples/CompilationSamples/ms0024.pas @@ -1,4 +1,4 @@ -// +// Типизированные константы должны работать const a: integer = 2; b: array [1..3] of integer = (1,2,3); diff --git a/TestSamples/CompilationSamples/ms0026.pas b/TestSamples/CompilationSamples/ms0026.pas index 4be1277e2..c4ff97e57 100644 --- a/TestSamples/CompilationSamples/ms0026.pas +++ b/TestSamples/CompilationSamples/ms0026.pas @@ -1,4 +1,4 @@ -// +// Должно работать var i: record i,r: real end; begin diff --git a/TestSamples/CompilationSamples/ms0032.pas b/TestSamples/CompilationSamples/ms0032.pas index 372a56ad2..e65d68693 100644 --- a/TestSamples/CompilationSamples/ms0032.pas +++ b/TestSamples/CompilationSamples/ms0032.pas @@ -1,4 +1,4 @@ -// +// Падает type A=record end; var aa:a; diff --git a/TestSamples/CompilationSamples/ms0046.pas b/TestSamples/CompilationSamples/ms0046.pas index d6cfc3c6c..576d95601 100644 --- a/TestSamples/CompilationSamples/ms0046.pas +++ b/TestSamples/CompilationSamples/ms0046.pas @@ -1,4 +1,4 @@ -// double +// Тип double должен быть определен var a: double; r:real; begin diff --git a/TestSamples/CompilationSamples/ms0056.pas b/TestSamples/CompilationSamples/ms0056.pas index 003f30d54..9c4650349 100644 --- a/TestSamples/CompilationSamples/ms0056.pas +++ b/TestSamples/CompilationSamples/ms0056.pas @@ -1,4 +1,4 @@ -// ! +// Должно работать! var i: integer; l: longint; diff --git a/TestSamples/CompilationSamples/ms0075.pas b/TestSamples/CompilationSamples/ms0075.pas index cde3b1dec..549d853d2 100644 --- a/TestSamples/CompilationSamples/ms0075.pas +++ b/TestSamples/CompilationSamples/ms0075.pas @@ -1,9 +1,9 @@ -// +// Это должно работать -var work: array [''..''] of integer; +var work: array ['а'..'я'] of integer; begin - Inc(work['']); - writeln(work['']); + Inc(work['а']); + writeln(work['а']); readln; end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/ms0078.pas b/TestSamples/CompilationSamples/ms0078.pas index 71cee41e9..74eb2dedb 100644 --- a/TestSamples/CompilationSamples/ms0078.pas +++ b/TestSamples/CompilationSamples/ms0078.pas @@ -1,4 +1,4 @@ -// +// Хотелось бы чтобы это работало var i: integer; begin diff --git a/TestSamples/CompilationSamples/ms0079.pas b/TestSamples/CompilationSamples/ms0079.pas index 7c6f25486..718950605 100644 --- a/TestSamples/CompilationSamples/ms0079.pas +++ b/TestSamples/CompilationSamples/ms0079.pas @@ -1,4 +1,4 @@ -// +// Хотелось бы чтобы это работало var i: integer; begin diff --git a/TestSamples/CompilationSamples/ms0092.pas b/TestSamples/CompilationSamples/ms0092.pas index 52b20d3f4..6de89cd84 100644 --- a/TestSamples/CompilationSamples/ms0092.pas +++ b/TestSamples/CompilationSamples/ms0092.pas @@ -1,4 +1,4 @@ -// !!! 26 - ! - ! +// Работает неверно!!! С версии 26 - точно! Или - всегда! var i,j: integer; diff --git a/TestSamples/CompilationSamples/ms0096.pas b/TestSamples/CompilationSamples/ms0096.pas index b8da6a62a..36710f225 100644 --- a/TestSamples/CompilationSamples/ms0096.pas +++ b/TestSamples/CompilationSamples/ms0096.pas @@ -16,7 +16,7 @@ type var a: Field; ships: array[1..10] of ship; - b: array [0..n+1, 0..n+1] of CellState; // + b: array [0..n+1, 0..n+1] of CellState; // выстрелы procedure Clear(var a: Field); var x,y: integer; @@ -206,7 +206,7 @@ begin Ships[i].life:=ships[i].len; if not TryPlaceShips(100) then begin - write(' '); + write('Не удалось расположить корабли'); exit; end; end; @@ -218,7 +218,7 @@ var i: integer; begin if b[x,y]<>NeStrelial then exit; i:=a[x,y]; - if i>0 then // + if i>0 then // попал begin Dec(Ships[i].life); if Ships[i].life = 0 then @@ -261,7 +261,7 @@ procedure IntellectualTryPli; begin d:=unknown; x:=prevgoodx; y:=prevgoody; - // + // определить направление корабля if (b[x,y+1]=Popal) or (b[x,y-1]=Popal) then d:=vert else if (b[x+1,y]=Popal) or (b[x-1,y]=Popal) then @@ -291,7 +291,7 @@ procedure IntellectualTryPli; y:=y-1 until b[x,y]<>Popal; if b[x,y]=NeStrelial then Exit; - writeln(': , '); + writeln('Ошибка: корабль не потоплен, но выстрелов больше нет'); writeln(prevgoodx,' ',prevgoody); end; end; @@ -299,7 +299,7 @@ procedure IntellectualTryPli; var x,y: integer; begin - if b[prevgoodx,prevgoody]=Popal then // - - + if b[prevgoodx,prevgoody]=Popal then // что-то интеллектуальное - добивать SearchNextPli(x,y) else repeat diff --git a/TestSamples/CompilationSamples/ms151.pas b/TestSamples/CompilationSamples/ms151.pas index 2f8f76f4c..ff8d6109a 100644 --- a/TestSamples/CompilationSamples/ms151.pas +++ b/TestSamples/CompilationSamples/ms151.pas @@ -1,4 +1,4 @@ -// +// массив файлов не инициализируется var ff: array [1..4] of file of integer; begin diff --git a/TestSamples/CompilationSamples/ms152.pas b/TestSamples/CompilationSamples/ms152.pas index 72ec4bf4f..01a3725ff 100644 --- a/TestSamples/CompilationSamples/ms152.pas +++ b/TestSamples/CompilationSamples/ms152.pas @@ -1,4 +1,4 @@ -// +// должно компилироваться begin var s: string := '111'; var c: char := s[1]; diff --git a/TestSamples/CompilationSamples/oper_test.pas b/TestSamples/CompilationSamples/oper_test.pas index 920a36cb7..014b20e2d 100644 --- a/TestSamples/CompilationSamples/oper_test.pas +++ b/TestSamples/CompilationSamples/oper_test.pas @@ -29,7 +29,7 @@ end; function ToString:string;override; begin - // ? + //Это почему не можеш? result:=string.Format('{0}({1})',name,height); end; diff --git a/TestSamples/CompilationSamples/params_Writeln.pas b/TestSamples/CompilationSamples/params_Writeln.pas index 2abc1f16c..77f6ae47f 100644 --- a/TestSamples/CompilationSamples/params_Writeln.pas +++ b/TestSamples/CompilationSamples/params_Writeln.pas @@ -1,4 +1,4 @@ -// +//Процедуры с переменным числом параметров procedure writeln(params args:array of object); var i:integer; diff --git a/TestSamples/CompilationSamples/params_test2.pas b/TestSamples/CompilationSamples/params_test2.pas index 1566bfe78..2e78ba0c8 100644 --- a/TestSamples/CompilationSamples/params_test2.pas +++ b/TestSamples/CompilationSamples/params_test2.pas @@ -8,7 +8,7 @@ var x:array of integer; begin - //test; //? + //test; //должно? test(1); test(1,2); SetLength(x,2); diff --git a/TestSamples/CompilationSamples/polygon.pas b/TestSamples/CompilationSamples/polygon.pas index dfed54157..c67fe2e9e 100644 --- a/TestSamples/CompilationSamples/polygon.pas +++ b/TestSamples/CompilationSamples/polygon.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация возможностей векторной графики. Правильные многоугольники uses Turtle,GraphABC; procedure MnogoUg(r: real; n: integer); @@ -21,7 +21,7 @@ end; var i: integer; begin - SetWindowCaption(' : '); + SetWindowCaption('Черепашья графика: правильные многоугольники'); Init; SetWindowSize(730,300); ToPoint(60,90); diff --git a/TestSamples/CompilationSamples/procfuncpointer.pas b/TestSamples/CompilationSamples/procfuncpointer.pas index 4f4f2631c..45070e3d3 100644 --- a/TestSamples/CompilationSamples/procfuncpointer.pas +++ b/TestSamples/CompilationSamples/procfuncpointer.pas @@ -1,4 +1,4 @@ -// +// Тест процедурных переменных procedure p(i: integer); begin writeln(i); diff --git a/TestSamples/CompilationSamples/props.pas b/TestSamples/CompilationSamples/props.pas index b61035aca..5594ad74f 100644 --- a/TestSamples/CompilationSamples/props.pas +++ b/TestSamples/CompilationSamples/props.pas @@ -1,4 +1,4 @@ -// +//Тест базовой работоспособности интерфейсов type inter = interface function getnn: integer; diff --git a/TestSamples/CompilationSamples/props2.pas b/TestSamples/CompilationSamples/props2.pas index dde55ccb2..de02ac64b 100644 --- a/TestSamples/CompilationSamples/props2.pas +++ b/TestSamples/CompilationSamples/props2.pas @@ -1,4 +1,4 @@ -// +//Тест базовой работоспособности интерфейсов type inter = interface function getnn: integer; diff --git a/TestSamples/CompilationSamples/rain.pas b/TestSamples/CompilationSamples/rain.pas index 028966036..6983b13df 100644 --- a/TestSamples/CompilationSamples/rain.pas +++ b/TestSamples/CompilationSamples/rain.pas @@ -1,4 +1,4 @@ -// +// Имитация кругов на воде от капель дождя uses GraphABC; const @@ -23,7 +23,7 @@ end; const z=50; begin - SetWindowCaption(' '); + SetWindowCaption('Капли дождя'); while True do Kaplia(Random(WindowWidth-2*z)+z,Random(WindowHeight-2*z)+z); end. diff --git a/TestSamples/CompilationSamples/random_DM.pas b/TestSamples/CompilationSamples/random_DM.pas index b1e906fad..c9f2904c0 100644 --- a/TestSamples/CompilationSamples/random_DM.pas +++ b/TestSamples/CompilationSamples/random_DM.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация использования случайных чисел для Чертежника. Лучи uses DrawMan; begin diff --git a/TestSamples/CompilationSamples/random_Robot.pas b/TestSamples/CompilationSamples/random_Robot.pas index 2f6f917c7..4ab24f209 100644 --- a/TestSamples/CompilationSamples/random_Robot.pas +++ b/TestSamples/CompilationSamples/random_Robot.pas @@ -1,4 +1,4 @@ - // . + // Демонстрация использования случайных чисел для Робота. Случайное блуждание uses Robot; begin diff --git a/TestSamples/CompilationSamples/redirecttest1.pas b/TestSamples/CompilationSamples/redirecttest1.pas index 04f50cff6..9e5f7c086 100644 --- a/TestSamples/CompilationSamples/redirecttest1.pas +++ b/TestSamples/CompilationSamples/redirecttest1.pas @@ -1,5 +1,5 @@ begin - writeln('...1'); + writeln('Запущен...1'); while true do begin write('1 '); sleep(200); diff --git a/TestSamples/CompilationSamples/redirecttest2.pas b/TestSamples/CompilationSamples/redirecttest2.pas index e1a8da09c..cda9ff9c4 100644 --- a/TestSamples/CompilationSamples/redirecttest2.pas +++ b/TestSamples/CompilationSamples/redirecttest2.pas @@ -1,5 +1,5 @@ begin - writeln('...2'); + writeln('Запущен...2'); while true do begin write('2 '); sleep(200); diff --git a/TestSamples/CompilationSamples/robotmaketest.pas b/TestSamples/CompilationSamples/robotmaketest.pas index 14d8ad7f4..39428535b 100644 --- a/TestSamples/CompilationSamples/robotmaketest.pas +++ b/TestSamples/CompilationSamples/robotmaketest.pas @@ -1,14 +1,14 @@ uses Robot,RobotTaskMaker,RobotField; procedure Rob2; - const h=10;// - w=15;// - step=1;// + const h=10;//высота поля + w=15;//ширина поля + step=1;//отступ помеченных клеток от края поля var a,i: byte; begin - TaskText(' '); + TaskText('Закрасить клетки вокруг прямоугольника'); Field(w,h); - a:=Random(h div 3)+step+1;// + a:=Random(h div 3)+step+1;//отступ прямоуголька от края поля HorizontalWall(a,a,w-a*2); HorizontalWall(a,h-a,w-a*2); VerticalWall(a,a,h-a*2); diff --git a/TestSamples/CompilationSamples/romashka.pas b/TestSamples/CompilationSamples/romashka.pas index fd320d868..2e1e0fde0 100644 --- a/TestSamples/CompilationSamples/romashka.pas +++ b/TestSamples/CompilationSamples/romashka.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация возможносткй векторной графики. Ромашка uses Turtle,GraphABC; const @@ -34,7 +34,7 @@ end; var i: integer; begin - SetWindowCaption(' : '); + SetWindowCaption('Черепашья графика: ромашка'); SetWindowSize(500,500); Init; for i:=0 to N-1 do diff --git a/TestSamples/CompilationSamples/rotate.pas b/TestSamples/CompilationSamples/rotate.pas index 96ae88b56..e1283fb26 100644 --- a/TestSamples/CompilationSamples/rotate.pas +++ b/TestSamples/CompilationSamples/rotate.pas @@ -1,4 +1,4 @@ -// +// Вращение многоугольника uses Turtle,GraphABC; procedure MnogoUg(r: real; n: integer); @@ -26,7 +26,7 @@ var i,di: integer; begin - SetWindowCaption(' : '); + SetWindowCaption('Черепашья графика: вращение'); SetWindowSize(320,165); Init; i:=5; diff --git a/TestSamples/CompilationSamples/serpinsky.pas b/TestSamples/CompilationSamples/serpinsky.pas index 8bd36ab92..bd2fa252a 100644 --- a/TestSamples/CompilationSamples/serpinsky.pas +++ b/TestSamples/CompilationSamples/serpinsky.pas @@ -1,4 +1,4 @@ -// . forward- +// Ковер Серпинского. Иллюстрация forward-объявлений uses GraphABC; var @@ -64,7 +64,7 @@ begin b:=a; x:=10; y:=10; - SetWindowCaption(' '); + SetWindowCaption('Ковер Серпинского'); SetWindowSize(590,590); MoveTo(x,y); AA(N); lrel(a,b); diff --git a/TestSamples/CompilationSamples/setpixel.pas b/TestSamples/CompilationSamples/setpixel.pas index 400a078fb..b20da66eb 100644 --- a/TestSamples/CompilationSamples/setpixel.pas +++ b/TestSamples/CompilationSamples/setpixel.pas @@ -1,4 +1,4 @@ -// SetPixel. +// Демонстрация возможностей функции SetPixel. uses GraphABC; var i,j: integer; @@ -43,7 +43,7 @@ begin SetFontSize(14); SetFontName('Arial'); SetFontColor(clRed); - TextOut(50,WindowHeight div 2-14,' GraphABC!'); + TextOut(50,WindowHeight div 2-14,'Модуль GraphABC!'); end. diff --git a/TestSamples/CompilationSamples/settest.pas b/TestSamples/CompilationSamples/settest.pas index 0389b2de1..47d7f046e 100644 --- a/TestSamples/CompilationSamples/settest.pas +++ b/TestSamples/CompilationSamples/settest.pas @@ -1,9 +1,9 @@ var s: set of string; begin - s := ['','','']; - s := s + ['','','']; - if '' in s then - write(''); + s := ['бегемот','жираф','крокодил']; + s := s + ['жираф','крокодил','какаду']; + if 'какаду' in s then + write('какаду'); write(s); end. diff --git a/TestSamples/CompilationSamples/shl.pas b/TestSamples/CompilationSamples/shl.pas index 56553e2db..1f4f89367 100644 --- a/TestSamples/CompilationSamples/shl.pas +++ b/TestSamples/CompilationSamples/shl.pas @@ -1,6 +1,6 @@ var i: integer; begin - writeln(' '); + writeln('Степени двойки'); writeln(' n 2^n'); for i:=0 to 30 do writeln(i.tostring+' '+(1 shl i).tostring); diff --git a/TestSamples/CompilationSamples/simp.pas b/TestSamples/CompilationSamples/simp.pas index b01535ac8..a98588aff 100644 --- a/TestSamples/CompilationSamples/simp.pas +++ b/TestSamples/CompilationSamples/simp.pas @@ -6,7 +6,7 @@ var ii : integer; const max = 100; max2 = max+10; -// +// Генерация больших простых чисел var i, j, count: integer; f: boolean; beg: integer; diff --git a/TestSamples/CompilationSamples/simplenumbers.pas b/TestSamples/CompilationSamples/simplenumbers.pas index e1a02ef47..ae3728111 100644 --- a/TestSamples/CompilationSamples/simplenumbers.pas +++ b/TestSamples/CompilationSamples/simplenumbers.pas @@ -1,5 +1,5 @@ -// +// Генерация больших простых чисел var i,j,r,count: integer; f: boolean; beg: integer; diff --git a/TestSamples/CompilationSamples/stack2.pas b/TestSamples/CompilationSamples/stack2.pas index df6455aeb..1c193904f 100644 --- a/TestSamples/CompilationSamples/stack2.pas +++ b/TestSamples/CompilationSamples/stack2.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания класса стека на базе списка type pnode=^node; node=record @@ -27,7 +27,7 @@ type function top: integer; begin if empty then begin - writeln(' '); + writeln('попытка взять элемент с пустого стека'); exit; end; top:=t^.data; @@ -36,7 +36,7 @@ type var v: pnode; begin if empty then begin - writeln(' '); + writeln('попытка взять элемент с пустого стека'); exit; end; pop:=top; diff --git a/TestSamples/CompilationSamples/surface.pas b/TestSamples/CompilationSamples/surface.pas index 59a4114f1..8576dcc9b 100644 --- a/TestSamples/CompilationSamples/surface.pas +++ b/TestSamples/CompilationSamples/surface.pas @@ -1,4 +1,4 @@ -// KuMir/PMir +// Пример из пакета KuMir/PMir Uses GraphABC; var Xmin,Xmax,Xstep: real; @@ -55,8 +55,8 @@ begin end; begin - SetWindowCaption(' '); + SetWindowCaption('График функции двух переменных'); SetWindowSize(600,400); - dx:=5; { X } - gr(50); { Y <= MaxN } + dx:=5; { разрешение по оси X } + gr(50); { количество линий по Y <= MaxN } end. diff --git a/TestSamples/CompilationSamples/test_basic_types.pas b/TestSamples/CompilationSamples/test_basic_types.pas index e42c86a65..3aef9b0ce 100644 --- a/TestSamples/CompilationSamples/test_basic_types.pas +++ b/TestSamples/CompilationSamples/test_basic_types.pas @@ -23,7 +23,7 @@ begin writeln(i); r:=b/10; writeln(r); - i:=f+1; //! + i:=f+1; //ньхайю! writeln(i); readln; end. \ No newline at end of file diff --git a/TestSamples/CompilationSamples/test_rusencoding.pas b/TestSamples/CompilationSamples/test_rusencoding.pas index 6f67163e4..559ec11fb 100644 --- a/TestSamples/CompilationSamples/test_rusencoding.pas +++ b/TestSamples/CompilationSamples/test_rusencoding.pas @@ -1,6 +1,6 @@ uses crt; begin - Writeln(''); // !!! + Writeln('РАБОТАЕТ'); // и коментарии работают!!! readkey; end. diff --git a/TestSamples/CompilationSamples/test_sharp_const.pas b/TestSamples/CompilationSamples/test_sharp_const.pas index f22d1552f..bd36aa219 100644 --- a/TestSamples/CompilationSamples/test_sharp_const.pas +++ b/TestSamples/CompilationSamples/test_sharp_const.pas @@ -1,7 +1,7 @@ var s:string; begin s:='xxx'; - s:=s+#13#10'!'#13#10'!'; + s:=s+#13#10'!'#13#10'ОГО!'; //s:=s+'1310'+'xxx'; writeln(s); readln; diff --git a/TestSamples/CompilationSamples/test_sizeof.pas b/TestSamples/CompilationSamples/test_sizeof.pas index c056c5887..660392551 100644 --- a/TestSamples/CompilationSamples/test_sizeof.pas +++ b/TestSamples/CompilationSamples/test_sizeof.pas @@ -3,7 +3,7 @@ type x:integer; y:real; a:array[1..10] of integer; - //: ? ! + //вопрос: а как передать масив в неуправляемый код? такой масив не передаш! end; diff --git a/TestSamples/CompilationSamples/tor.pas b/TestSamples/CompilationSamples/tor.pas index 35cd9014b..feaa299df 100644 --- a/TestSamples/CompilationSamples/tor.pas +++ b/TestSamples/CompilationSamples/tor.pas @@ -8,7 +8,7 @@ type begin Height:=600; Width:=800; - Text:=''; + Text:='Гусеница'; BackColor:=Color.FromArgb(255,255,255,255); end; end; diff --git a/TestSamples/CompilationSamples/typed_files.pas b/TestSamples/CompilationSamples/typed_files.pas index d4e97bdba..431ebe23a 100644 --- a/TestSamples/CompilationSamples/typed_files.pas +++ b/TestSamples/CompilationSamples/typed_files.pas @@ -37,7 +37,7 @@ begin writeln(f3.ElementType); writeln('in unit:'); writeln(ff.ElementType); -// write(ff,ff); ! ! +// write(ff,ff); неправильноя ошибка при общей компиляции! перектрытие имен! test; //cc := new c; //writeln('in class:'); diff --git a/TestSamples/CompilationSamples/uRobot.pas b/TestSamples/CompilationSamples/uRobot.pas index 811c874f0..6a8bf94e9 100644 --- a/TestSamples/CompilationSamples/uRobot.pas +++ b/TestSamples/CompilationSamples/uRobot.pas @@ -8,11 +8,11 @@ const maxDimY=30; var - x,y: integer; // - Delay: integer; // - DimX,DimY: integer; // - Cellsz: integer; // - x0,y0: integer; // + x,y: integer; // текущие координаты Робота + Delay: integer; // пауза между ходами + DimX,DimY: integer; // размеры поля + Cellsz: integer; // размер клетки поля + x0,y0: integer; // левый верхний углл поля в пикселах HorizWalls: array [1..maxDimX,0..maxDimY] of boolean; VertWalls: array [0..maxDimX,1..maxDimY] of boolean; Painted: array [1..maxDimX,1..maxDimY] of integer; @@ -288,5 +288,5 @@ begin end; initialization - SetWindowCaption(''); + SetWindowCaption('Робот'); end. diff --git a/TestSamples/CompilationSamples/u_Flame.pas b/TestSamples/CompilationSamples/u_Flame.pas index 7a5492bb0..4bd212ca4 100644 --- a/TestSamples/CompilationSamples/u_Flame.pas +++ b/TestSamples/CompilationSamples/u_Flame.pas @@ -18,20 +18,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer: array of array of byte := new array of byte[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, i, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/TestSamples/CompilationSamples/u_MazeGen.pas b/TestSamples/CompilationSamples/u_MazeGen.pas index bfc9698bd..7b273a0e2 100644 --- a/TestSamples/CompilationSamples/u_MazeGen.pas +++ b/TestSamples/CompilationSamples/u_MazeGen.pas @@ -1,12 +1,12 @@ -// +// Программа генерации случайных лабиринтов unit u_MazeGen; uses GraphABC; const - szw=70; // + szw=70; // размер лабиринта szh=50; - cellsz=10; // + cellsz=10; // размер ячейки type point=record @@ -35,10 +35,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -48,28 +48,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n:= Random(todonum); x:= todo[n].x; y:= todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat d:=Random (4); until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl d) or 32); maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -80,8 +80,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -90,19 +90,19 @@ begin for x:=1 to szw-2 do for y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz ); end; end; begin - SetWindowCaption(' '); + SetWindowCaption('Генерация лабиринта'); SetWindowSize(800,600); dx[2]:=-1;dx[3]:=1; dy[0]:=-1;dy[1]:=1; diff --git a/TestSamples/CompilationSamples/u_RandomSearchTree.pas b/TestSamples/CompilationSamples/u_RandomSearchTree.pas index add53b44c..6a671080f 100644 --- a/TestSamples/CompilationSamples/u_RandomSearchTree.pas +++ b/TestSamples/CompilationSamples/u_RandomSearchTree.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева поиска unit u_RandomSearchTree; uses GraphABC; @@ -47,6 +47,6 @@ var begin for i:=1 to 30 do Add(t,Random(100)); - SetWindowCaption(' '); + SetWindowCaption('Двоичное дерево поиска'); DrawTree(t,WindowWidth div 2,10,WindowWidth div 4); end. diff --git a/TestSamples/CompilationSamples/u_Students.pas b/TestSamples/CompilationSamples/u_Students.pas index 96c74d665..f86f2fdd7 100644 --- a/TestSamples/CompilationSamples/u_Students.pas +++ b/TestSamples/CompilationSamples/u_Students.pas @@ -1,5 +1,5 @@ unit u_Students; -// +//Перегрузка операторов type Student = class Name: string; diff --git a/TestSamples/CompilationSamples/u_balls.pas b/TestSamples/CompilationSamples/u_balls.pas index f1aa89dd4..6c0077d6a 100644 --- a/TestSamples/CompilationSamples/u_balls.pas +++ b/TestSamples/CompilationSamples/u_balls.pas @@ -1,5 +1,5 @@ -// -// CRT, , +// Блуждание мячиков по полю +// Работа с модулем CRT, наследование, полиморфизм unit u_balls; uses CRT; diff --git a/TestSamples/Errors/ErrorGraphABCDll/GraphABC.pas b/TestSamples/Errors/ErrorGraphABCDll/GraphABC.pas index 45fe84a64..60da9f893 100644 --- a/TestSamples/Errors/ErrorGraphABCDll/GraphABC.pas +++ b/TestSamples/Errors/ErrorGraphABCDll/GraphABC.pas @@ -14,11 +14,11 @@ uses System.Drawing.Drawing2D; type -/// +/// Тип цвета Color = System.Drawing.Color; -/// GraphABC +/// Тип исключения GraphABC GraphABCException = class(Exception) end; -/// +/// Тип точки Point = System.Drawing.Point; var @@ -214,82 +214,82 @@ type FontStyleType = (fsNormal, fsBold, fsItalic, fsBoldItalic, fsUnderline, fsBoldUnderline, fsItalicUnderline, fsBoldItalicUnderline); BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела с координатами (x,y) function GetPixel(x,y: integer): Color; -/// (x,y) +/// Устанавливает текущую позицию рисования в точку (x,y) procedure MoveTo(x,y: integer); -/// (x,y). (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer); -/// (x,y) c. (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer; c: Color); -/// (x1,y1) (x2,y2) +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Рисует окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r +/// Рисует заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Рисует ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Рисует кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); {procedure FillCircle(x,y,r: integer; c: Color); @@ -318,221 +318,221 @@ procedure Polygon(a: array of Point; c: Color); procedure Polyline(a: array of Point; c: Color);} //-------------------------------------------- -//// +//// Цвета //-------------------------------------------- -/// , (r), (g) (b) (r,g b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) function RGB(r,g,b: byte): Color; -/// , (r), (g) (b) (a) (a,r,g,b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) function ARGB(a,r,g,b: byte): Color; -/// r (r - 0 255) +/// Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) function RedColor(r: byte): Color; -/// g (g - 0 255) +/// Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) function GreenColor(g: byte): Color; -/// b (b - 0 255) +/// Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) function BlueColor(b: byte): Color; -/// +/// Возвращает случайный цвет function clRandom: Color; -/// +/// Возвращает красную составляющую цвета function GetRed(c: Color): integer; -/// +/// Возвращает зеленую составляющую цвета function GetGreen(c: Color): integer; -/// +/// Возвращает синюю составляющую цвета function GetBlue(c: Color): integer; //-------------------------------------------- -//// +//// Перья //-------------------------------------------- -/// +/// Устанавливает цвет текущего пера procedure SetPenColor(c: Color); -/// +/// Возвращает цвет текущего пера function PenColor: Color; -/// +/// Устанавливает ширину текущего пера procedure SetPenWidth(Width: integer); -/// +/// Возвращает ширину текущего пера function PenWidth: integer; -/// +/// Устанавливает стиль текущего пера procedure SetPenStyle(style: DashStyle); -/// +/// Возвращает стиль текущего пера function PenStyle: DashStyle; -/// +/// Устанавливает режим текущего пера procedure SetPenMode(m: integer); -/// +/// Возвращает режим текущего пера function PenMode: integer; -/// x- +/// Возвращают x-координату текущей позиции рисования function PenX: integer; -/// y- +/// Возвращают y-координату текущей позиции рисования function PenY: integer; //-------------------------------------------- -//// +//// Кисти //-------------------------------------------- -/// +/// Устанавливает цвет текущей кисти procedure SetBrushColor(c: Color); -/// +/// Возвращает цвет текущей кисти function BrushColor: Color; -/// +/// Устанавливает цвет текущей кисти procedure SetBrushStyle(bs: BrushStyleType); -/// +/// Возвращает цвет текущей кисти function BrushStyle: BrushStyleType; -/// +/// Устанавливает штриховку текущей кисти procedure SetBrushHatch(bh: HatchStyle); -/// +/// Возвращает штриховку текущей кисти function BrushHatch: HatchStyle; -/// +/// Устанавливает цвет заднего плана текущей штриховой кисти procedure SetHatchBrushBackgroundColor(c: Color); -/// +/// Возвращает цвет заднего плана текущей штриховой кисти function HatchBrushBackgroundColor: Color; -/// +/// Устанавливает второй цвет текущей градиентной кисти procedure SetGradientBrushSecondColor(c: Color); -/// +/// Возвращает второй цвет текущей градиентной кисти function GradientBrushSecondColor: Color; //-------------------------------------------- -//// +//// Шрифты //-------------------------------------------- -/// +/// Устанавливает размер текущего шрифта в пунктах procedure SetFontSize(size: integer); -/// +/// Возвращает размер текущего шрифта в пунктах function FontSize: integer; -/// +/// Устанавливает имя текущего шрифта procedure SetFontName(name: string); -/// +/// Возвращает имя текущего шрифта function FontName: string; -/// +/// Устанавливает цвет текущего шрифта procedure SetFontColor(c: Color); -/// +/// Возвращает цвет текущего шрифта function FontColor: Color; -/// +/// Устанавливает стиль текущего шрифта procedure SetFontStyle(fs: FontStyleType); -/// +/// Возвращает стиль текущего шрифта function FontStyle: FontStyleType; -/// s +/// Возвращает ширину строки s в пикселях при текущих настройках шрифта function TextWidth(s: string): integer; -/// s +/// Возвращает высоту строки s в пикселях при текущих настройках шрифта function TextHeight(s: string): integer; //-------------------------------------------- -//// +//// Графическое окно //-------------------------------------------- -/// +/// Очищает графическое окно белым цветом procedure ClearWindow; -/// c +/// Очищает графическое окно цветом c procedure ClearWindow(c: Color); -/// +/// Возвращает ширину клиентской части графического окна в пикселах function WindowWidth: integer; -/// +/// Возвращает высоту клиентской части графического окна в пикселах function WindowHeight: integer; -/// +/// Возвращает отступ графического окна от левого края экрана в пикселах function WindowLeft: integer; -/// +/// Возвращает отступ графического окна от верхнего края экрана в пикселах function WindowTop: integer; -/// +/// Возвращает центр графического окна function WindowCenter: Point; -/// True, i , False +/// Возвращает True, если графическое iокно имеет фиксированный размер, и False в противном случае function WindowIsFixedSize: boolean; -/// +/// Устанавливает ширину клиентской части графического окна в пикселах procedure SetWindowWidth(w: integer); -/// +/// Устанавливает высоту клиентской части графического окна в пикселах procedure SetWindowHeight(h: integer); -/// +/// Устанавливает отступ графического окна от левого края экрана в пикселах procedure SetWindowLeft(l: integer); -/// +/// Устанавливает отступ графического окна от верхнего края экрана в пикселах procedure SetWindowTop(t: integer); -/// , +/// Устанавливает, имеет ли графическое окно фиксированный размер procedure SetWindowIsFixedSize(b: boolean); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetWindowSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetWindowPos(l,t: integer); -/// ( WindowWidth) +/// Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) function GraphBoxWidth: integer; -/// ( WindowHeight) +/// Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) function GraphBoxHeight: integer; -/// +/// Возвращает отступ графического компонента от левого края окна в пикселах function GraphBoxLeft: integer; -/// +/// Возвращает отступ графического компонента от верхнего края окна в пикселах function GraphBoxTop: integer; -/// +/// Возвращает заголовок графического окна function WindowCaption: string; -/// +/// Возвращает заголовок графического окна function WindowTitle: string; -/// +/// Устанавливает заголовок графического окна procedure SetWindowCaption(s: string); -/// +/// Устанавливает заголовок графического окна procedure SetWindowTitle(s: string); -/// +/// Устанавливает ширину и высоту клиентской части графического окна в пикселах procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// fname +/// Сохраняет содержимое графического окна в файл с именем fname procedure SaveWindow(fname: string); -/// fname +/// Восстанавливает содержимое графического окна из файла с именем fname procedure LoadWindow(fname: string); -/// fname +/// Заполняет содержимое графического окна обоями из файла с именем fname procedure FillWindow(fname: string); -/// +/// Закрывает графическое окно и завершает приложение procedure CloseWindow; -/// +/// Возвращает ширину экрана в пикселях function ScreenWidth: integer; -/// +/// Возвращает высоту экрана в пикселях function ScreenHeight: integer; -/// +/// Центрирует графическое окно по центру экрана procedure CenterWindow; -/// +/// Максимизирует графическое окно procedure MaximizeWindow; -/// +/// Сворачивает графическое окно procedure MinimizeWindow; -/// +/// Возвращает графическое окно к нормальному размеру procedure NormalizeWindow; //-------------------------------------------- -//// +//// Буферизация рисования //-------------------------------------------- -/// . LockDrawing +/// Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure Redraw; ///-- procedure FullRedraw; -/// . Redraw +/// Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure LockDrawing; -/// +/// Снимает блокировку рисования на графическом окне и осуществляет его перерисовку procedure UnlockDrawing; //-------------------------------------------- -//// +//// Сглаживание //-------------------------------------------- -/// +/// Устанавливает режим сглаживания procedure SetSmoothing(sm: boolean); -/// +/// Включает режим сглаживания procedure SetSmoothingOn; -/// +/// Выключает режим сглаживания procedure SetSmoothingOff; -/// True, +/// Возвращает True, если режим сглаживания установлен function SmoothingIsOn: boolean; //-------------------------------------------- -//// +//// Вспомогательные подпрограммы //-------------------------------------------- -/// . +/// Блокирует прорисовку графики. Вызывается для синхронизации procedure LockGraphics; -/// . +/// Разблокирует прорисовку графики. Вызывается для синхронизации procedure UnLockGraphics; -/// (x0,y0) +/// Устанавливает начало координат в точку (x0,y0) procedure SetCoordinateOrigin(x0,y0: integer); -/// . +/// Инициализирует графическое окно. Используется для внутренних целей procedure InitGraphABC; type -/// GraphABC +/// Тип пера GraphABC GraphABCPen = class private _NETPen: System.Drawing.Pen; @@ -548,23 +548,23 @@ type function GetX: integer; function GetY: integer; public - /// .NET + /// Текущее перо .NET property NETPen: System.Drawing.Pen read _NETPen write SetNETPen; - /// + /// Цвет пера property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Ширина пера property Width: integer read GetWidth write SetWidth; - /// + /// Стиль пера property Style: DashStyle read GetStyle write SetStyle; - /// + /// Режим пера property Mode: integer read GetMode write SetMode; - /// X- + /// X-координата текущей позиции пера property X: integer read GetX; - /// Y- + /// Y-координата текущей позиции пера property Y: integer read GetY; end; -/// GraphABC +/// Тип кисти GraphABC GraphABCBrush = class private _NETBrush: System.Drawing.Brush; @@ -580,21 +580,21 @@ type procedure SetGradientSecondColor(c: GraphABC.Color); function GetGradientSecondColor: GraphABC.Color; public -/// .NET +/// Текущая кисть .NET property NETBrush: System.Drawing.Brush read _NETBrush write SetNETBrush; -/// +/// Цвет кисти property Color: GraphABC.Color read GetColor write SetColor; -/// +/// Стиль кисти property Style: BrushStyleType read GetStyle write SetStyle; -/// +/// Штриховка кисти property Hatch: HatchStyle read GetHatch write SetHatch; -/// +/// Цвет заднего плана штриховой кисти property HatchBackgroundColor: GraphABC.Color read GetHatchBackgroundColor write SetHatchBackgroundColor; -/// +/// Второй цвет градиентной кисти property GradientSecondColor: GraphABC.Color read GetGradientSecondColor write SetGradientSecondColor; end; -/// GraphABC +/// Тип шрифта GraphABC GraphABCFont = class private _NETFont: System.Drawing.Font; @@ -608,15 +608,15 @@ type procedure SetName(nm: string); function GetName: string; public -/// .NET +/// Текущий шрифт .NET property NETFont: System.Drawing.Font read _NETFont write SetNETFont; - /// + /// Цвет шрифта property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Стиль шрифта property Style: FontStyleType read GetStyle write SetStyle; - /// + /// Размер шрифта в пунктах property Size: integer read GetSize write SetSize; - /// + /// Наименование шрифта property Name: string read GetName write SetName; end; @@ -635,51 +635,51 @@ type procedure SetIsFixedSize(b: boolean); function GetIsFixedSize: boolean; public -/// +/// Отступ графического окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; -/// +/// Отступ графического окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; -/// +/// Ширина клиентской части графического окна в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота клиентской части графического окна в пикселах property Height: integer read GetHeight write SetHeight; -/// +/// Заголовок графического окна property Caption: string read GetCaption write SetCaption; -/// +/// Заголовок графического окна property Title: string read GetCaption write SetCaption; -/// +/// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; -/// +/// Очищает графическое окно белым цветом procedure Clear; -/// c +/// Очищает графическое окно цветом c procedure Clear(c: Color); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetPos(l,t: integer); -/// , +/// Устанавливает положение, размеры и цвет графического окна procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// 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; end; -/// GraphABC +/// Тип рисунка GraphABC Picture = class private bmp,savedbmp: Bitmap; @@ -694,123 +694,123 @@ type procedure SetTransparentColor(c: GraphABC.Color); function GetTransparentColor: GraphABC.Color; public -/// w h +/// Создает рисунок размера w на h пикселей constructor Create(w,h: integer); -/// fname +/// Создает рисунок из файла с именем fname constructor Create(fname: string); -/// r +/// Создает рисунок из прямоугольника r графического окна constructor Create(r: System.Drawing.Rectangle); // Create from screen -/// fname +/// Загружает рисунок из файла с именем fname procedure Load(fname: string); -/// fname +/// Сохраняет рисунок в файл с именем fname procedure Save(fname: string); -/// w h +/// Устанавливает размер рисунка w на h пикселей procedure SetSize(w,h: integer); -/// +/// Ширина рисунка в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота рисунка в пикселах property Height: integer read GetHeight write SetHeight; -/// ; TransparentColor +/// Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor property Transparent: boolean read istransp write SetTransparent; -/// . Transparent := True +/// Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True property TransparentColor: GraphABC.Color read GetTransparentColor write SetTransparentColor; -/// True, p, False . +/// Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным function Intersect(p: Picture): boolean; -/// (x,y) +/// Выводит рисунок в позиции (x,y) procedure Draw(x,y: integer); -/// (x,y) g +/// Выводит рисунок в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; g: Graphics); -/// (x,y), (w,h) +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer); -/// (x,y), (w,h), g +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; g: Graphics); -/// , r, (x,y) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y) g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , r, (x,y), (w,h) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y), (w,h), g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); -/// src p dst +/// Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); -/// src bmp dst +/// Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); -/// +/// Зеркально отображает рисунок относительно горизонтальной оси симметрии procedure FlipHorizontal; -/// +/// Зеркально отображает рисунок относительно вертикальной оси симметрии procedure FlipVertical; -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела (x,y) рисунка function GetPixel(x,y: integer): Color; -/// (x1,y1) (x2,y2) +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Выводит на рисунке окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// (x,y) r +/// Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); -/// +/// Очищает рисунок белым цветом procedure Clear; -/// c +/// Очищает рисунок цветом c procedure Clear(c: Color); end; @@ -829,22 +829,22 @@ type procedure Init; protected function IsInputKey(keyData: Keys): boolean; override; - procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // ! + procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // сами все перерисовываем! public constructor (w,h: integer); end; -/// +/// Возвращает окно графического приложения function Window: GraphABCWindow; -/// +/// Возвращает главную форму графического приложения function MainForm: Form; -/// +/// Возвращает графический компонент function GraphABCControl: ABCControl; -/// +/// Возвращает текущее перо function Pen: GraphABCPen; -/// +/// Возвращает текущую кисть function Brush: GraphABCBrush; -/// +/// Возвращает текущий шрифт function Font: GraphABCFont; function GraphWindowGraphics: Graphics; @@ -852,26 +852,26 @@ function GraphBufferGraphics: Graphics; function GraphBufferBitmap: Bitmap; var -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseDown: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши OnMouseUp: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 0, , 1, , 2, +/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseMove: procedure (x,y,mousebutton: integer); -/// +/// Событие нажатия клавиши OnKeyDown: procedure (key: integer); -/// +/// Событие отжатия клавиши OnKeyUp: procedure (key: integer); -/// +/// Событие нажатия символьной клавиши OnKeyPress: procedure (ch: char); -/// +/// Событие изменения размера графического окна OnResize: procedure; -/// +/// Событие закрытия графического окна OnClose: procedure; -/// . nil, +/// Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка RedrawProc: procedure; -/// +/// Следует ли рисовать во внеэкранном буфере DrawInBuffer: boolean; implementation @@ -881,7 +881,7 @@ uses GraphABCHelper; const - FILE_NOT_FOUND_MESSAGE = ' {0} '; + FILE_NOT_FOUND_MESSAGE = 'Файл {0} не найден'; type Proc1Integer = procedure(x: integer); @@ -1208,12 +1208,12 @@ begin Result := bmp.Height; end; -// +// Логика установки прозрачности // 1. Transparent := True - savedbmp:=bmp; bmp:=bmp.Clone; bmp.MakeTransparent(transpcolor); // 2. Transparent := False - bmp.Dispose; bmp := savedbmp; savedbmp := nil; // 3. Transparentcolor := c -// a) Transparent = False, -// ) Transparent = True, bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); +// a) Если Transparent = False, то просто присвоить +// б) Если Transparent = True, то bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); function Picture.GetTransparentColor: Color; begin @@ -1282,7 +1282,7 @@ begin gb := Graphics.FromImage(bmp); gb.DrawImage(oldbmp,0,0); oldbmp.Dispose; -// TODO , , - +// TODO не знаю, может, надо что-то делать для прозрачной { if istransp then begin end} @@ -2063,7 +2063,7 @@ begin ExtFloodFill(hdc, x, y, bc, 1); SelectObject(hdc, holdBrush); - var hbmp := bmp.GetHbitmap(); // GDI Bitmap + var hbmp := bmp.GetHbitmap(); // Создается GDI Bitmap var memdc: IntPtr := CreateCompatibleDC(hdc); SelectObject(memdc,hbmp); @@ -2362,7 +2362,7 @@ end; function TextWidth(s: string): integer; begin -// 1. , 1 +// добавил 1. Без нее рисует, занимая 1 лишний пиксел Result := round(gr.MeasureString(s,Font.NETFont,0,new StringFormat(StringFormat.GenericTypographic)).Width) + 1; end; @@ -2452,7 +2452,7 @@ begin end end; -procedure ChangeFormPos(l,t: integer); // +procedure ChangeFormPos(l,t: integer); // вспомогательная begin MainForm.Left := l; MainForm.Top := t; @@ -2465,7 +2465,7 @@ begin f.Invoke(p,l,t); end; -procedure ChangeFormClientSize(w,h: integer); // +procedure ChangeFormClientSize(w,h: integer); // вспомогательная begin MainForm.ClientSize := new System.Drawing.Size(w,h); ResizeHelper; diff --git a/TestSamples/Flame.pas b/TestSamples/Flame.pas index d6c9522ad..6d9a81ccb 100644 --- a/TestSamples/Flame.pas +++ b/TestSamples/Flame.pas @@ -17,20 +17,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer := new array of byte[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/TestSamples/FormatterTests/input/15.pas b/TestSamples/FormatterTests/input/15.pas index a9af62830..2ced031ef 100644 --- a/TestSamples/FormatterTests/input/15.pas +++ b/TestSamples/FormatterTests/input/15.pas @@ -1,5 +1,5 @@ // 87.117.14.184 -// 15 +// Игра в 15 uses GraphABC,ABCObjects,ABCButtons,Events; const @@ -17,7 +17,7 @@ var EmptyCellX,EmptyCellY: integer; MovesCount: integer; - EndOfGame: boolean; // True + EndOfGame: boolean; // True если все фишки стоят на своих местах procedure Swap(var x,y: integer); var v: integer; @@ -27,7 +27,7 @@ begin y:=v; end; -// +// Поменять местами две фишки procedure Swap(var p,p1: SquareABC); var v: SquareABC; @@ -44,13 +44,13 @@ begin p1.Top:=i; end; -// , +// Определить, являются ли клетки соседями function Sosedi(x1,y1,x2,y2: integer): boolean; begin Result:=(abs(x1-x2)=1) and (y1=y2) or (abs(y1-y2)=1) and (x1=x2) end; -// +// Заполнить вспомогательный массив цифр procedure FillDigitsArr; var i: integer; begin @@ -58,7 +58,7 @@ begin digits[i]:=i; end; -// . +// Перемешать вспомогательный массив цифр. Количество обменов должно быть четным procedure MeshDigitsArr; var i,x: integer; begin @@ -70,14 +70,14 @@ begin Swap(digits[i],digits[x]); end; if n mod 2=0 then - Swap(digits[1],digits[2]); // + Swap(digits[1],digits[2]); // количество обменов должно быть четным end; -// . - 0 +// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 procedure Fill15ByDigitsArr; var x,y,i: integer; begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // + Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол EmptyCellX:=n; EmptyCellY:=n; i:=1; @@ -90,18 +90,18 @@ begin end; end; -// +// Перемешать массив фишек procedure Mesh15; begin MeshDigitsArr; Fill15ByDigitsArr; MovesCount:=0; EndOfGame:=False; - StatusRect.Text:=' : '+IntToStr(MovesCount); + StatusRect.Text:='Количество ходов: '+IntToStr(MovesCount); StatusRect.Color:=RGB(200,200,255); end; -// +// Создать массив фишек procedure Create15; var x,y: integer; begin @@ -122,7 +122,7 @@ begin Fill15ByDigitsArr; end; -// , +// Проверить, все ли фишки стоят на своих местах function IsSolution: boolean; var x,y,i: integer; begin @@ -144,24 +144,24 @@ end; procedure MouseDown(x,y,mb: integer); var fx,fy: integer; begin - if EndOfGame then // , "" + if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" exit; - if ObjectUnderPoint(x,y)=nil then // E , + if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; - fx:=(x-x0) div (sz+zz) + 1; // , + fx:=(x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью fy:=(y-y0) div (sz+zz) + 1; if (fx>n) or (fy>n) then exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // , + if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами begin Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); EmptyCellX:=fx; EmptyCellY:=fy; Inc(MovesCount); - StatusRect.Text:=' : '+IntToStr(MovesCount); + StatusRect.Text:='Количество ходов: '+IntToStr(MovesCount); if IsSolution then begin - StatusRect.Text:='! : '+IntToStr(MovesCount); + StatusRect.Text:='Победа! Сделано ходов: '+IntToStr(MovesCount); StatusRect.Color:=RGB(255,200,200); EndOfGame:=True; end @@ -170,18 +170,18 @@ end; begin SetSmoothingOff; - SetWindowCaption(' 15'); + SetWindowCaption('Игра в 15'); SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); EndOfGame:=False; Create15; - MeshButton:=ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'',clLightGray); + MeshButton:=ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); MeshButton.OnClick:=Mesh15; StatusRect:=RectangleABC.Create(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); StatusRect.TextVisible:=True; MovesCount:=0; - StatusRect.Text:=' : '+IntToStr(MovesCount); + StatusRect.Text:='Количество ходов: '+IntToStr(MovesCount); StatusRect.BorderWidth:=2; StatusRect.BorderColor:=RGB(80,80,255);//StatusRect.Color; diff --git a/TestSamples/FormatterTests/input/ABC.pas b/TestSamples/FormatterTests/input/ABC.pas index df9c3d346..de94d7aba 100644 --- a/TestSamples/FormatterTests/input/ABC.pas +++ b/TestSamples/FormatterTests/input/ABC.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; diff --git a/TestSamples/FormatterTests/input/ABCObjectsLibTest.pas b/TestSamples/FormatterTests/input/ABCObjectsLibTest.pas index 36ff0932d..30971bbb4 100644 --- a/TestSamples/FormatterTests/input/ABCObjectsLibTest.pas +++ b/TestSamples/FormatterTests/input/ABCObjectsLibTest.pas @@ -1,4 +1,4 @@ -// StarABC +// Изменение свойств объекта StarABC #reference 'D:\Miks\_samples\ABCObjectsLib.dll' #reference 'System.Drawing.dll' diff --git a/TestSamples/FormatterTests/input/AllFromObject.pas b/TestSamples/FormatterTests/input/AllFromObject.pas index 1bf1fd91f..f33bcd697 100644 --- a/TestSamples/FormatterTests/input/AllFromObject.pas +++ b/TestSamples/FormatterTests/input/AllFromObject.pas @@ -1,4 +1,4 @@ -// - Object +// Все типы - производные от Object var i: integer; r: real; @@ -10,5 +10,5 @@ begin o := r; writeln(o.GetType); if o.GetType=typeof(real) then - writeln(' o - '); + writeln('В переменной o - вещественный тип'); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Amp.pas b/TestSamples/FormatterTests/input/Amp.pas index a7c48162d..64c8ee9f9 100644 --- a/TestSamples/FormatterTests/input/Amp.pas +++ b/TestSamples/FormatterTests/input/Amp.pas @@ -1,9 +1,9 @@ -// & +// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова var &begin,&end: integer; begin &begin := 1; &end := 2; - var t: System.Type := &begin.GetType; // System.Type & + var t: System.Type := &begin.GetType; // в System.Type использовать & не надо write(&begin,' ',&end,' ',t); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Assign1.pas b/TestSamples/FormatterTests/input/Assign1.pas index 42322042f..ac5fe9ee8 100644 --- a/TestSamples/FormatterTests/input/Assign1.pas +++ b/TestSamples/FormatterTests/input/Assign1.pas @@ -1,12 +1,12 @@ -// +// Использование вспомогательных переменных var r: real; begin - write(' r: '); + write('Введите r: '); readln(r); - var r2,r4,r8: real; // + var r2,r4,r8: real; // вспомогательные переменные r2 := r * r; r4 := r2 * r2; r8 := r4 * r4; - writeln(r,' 8 = ',r8); + writeln(r,' в степени 8 = ',r8); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Assign2.pas b/TestSamples/FormatterTests/input/Assign2.pas index e255b6f1f..13b2ad3a9 100644 --- a/TestSamples/FormatterTests/input/Assign2.pas +++ b/TestSamples/FormatterTests/input/Assign2.pas @@ -1,12 +1,12 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real; // + var v: real; // вспомогательная переменная v := x; x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/AssignExt.pas b/TestSamples/FormatterTests/input/AssignExt.pas index d045b6aff..3ba218714 100644 --- a/TestSamples/FormatterTests/input/AssignExt.pas +++ b/TestSamples/FormatterTests/input/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Умножение на 3 writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/TestSamples/FormatterTests/input/AssignExt2.pas b/TestSamples/FormatterTests/input/AssignExt2.pas index d045b6aff..3ba218714 100644 --- a/TestSamples/FormatterTests/input/AssignExt2.pas +++ b/TestSamples/FormatterTests/input/AssignExt2.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Умножение на 3 writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/TestSamples/FormatterTests/input/AutoVars.pas b/TestSamples/FormatterTests/input/AutoVars.pas index 2756e7242..25797a7bb 100644 --- a/TestSamples/FormatterTests/input/AutoVars.pas +++ b/TestSamples/FormatterTests/input/AutoVars.pas @@ -1,5 +1,5 @@ -// -// for +// Автоопределение типа переменной +// Описание переменной в заголовке цикла for begin var x := 2; for var i:=1 to 10 do diff --git a/TestSamples/FormatterTests/input/BlockVar.pas b/TestSamples/FormatterTests/input/BlockVar.pas index 2edf55601..d1257db6c 100644 --- a/TestSamples/FormatterTests/input/BlockVar.pas +++ b/TestSamples/FormatterTests/input/BlockVar.pas @@ -1,11 +1,11 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real := x; // + var v: real := x; // вспомогательная переменная x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/BlockVars.pas b/TestSamples/FormatterTests/input/BlockVars.pas index 94048fdb0..4f8bcf2ab 100644 --- a/TestSamples/FormatterTests/input/BlockVars.pas +++ b/TestSamples/FormatterTests/input/BlockVars.pas @@ -1,5 +1,5 @@ -// . -// . GlobalVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл GlobalVars.pas uses Utils; begin @@ -11,5 +11,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSamples/FormatterTests/input/Boolean1.pas b/TestSamples/FormatterTests/input/Boolean1.pas index 8549b432e..630763ae6 100644 --- a/TestSamples/FormatterTests/input/Boolean1.pas +++ b/TestSamples/FormatterTests/input/Boolean1.pas @@ -1,16 +1,16 @@ -// . and, or not +// Логический тип. Логические выражения с and, or и not var b: boolean; x: integer; begin - write(' x ( 1 9): '); + write('Введите x (от 1 до 9): '); readln(x); b := x=5; writeln('x=5? ',b); b := (x>=3) and (x<=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := (x=3) or (x=4) or (x=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := not Odd(x); - writeln('x - ? ',b); + writeln('x - четное? ',b); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Boxing.pas b/TestSamples/FormatterTests/input/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/TestSamples/FormatterTests/input/Boxing.pas +++ b/TestSamples/FormatterTests/input/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/TestSamples/FormatterTests/input/CPaint.pas b/TestSamples/FormatterTests/input/CPaint.pas index 5c6341856..1a6d1228f 100644 --- a/TestSamples/FormatterTests/input/CPaint.pas +++ b/TestSamples/FormatterTests/input/CPaint.pas @@ -1,4 +1,4 @@ -// ReadKey . +//Концепция ReadKey в селедующих версиях будет изменена. uses crt; var c: char; diff --git a/TestSamples/FormatterTests/input/CRTColors.pas b/TestSamples/FormatterTests/input/CRTColors.pas index 26aa31fc4..ae062c375 100644 --- a/TestSamples/FormatterTests/input/CRTColors.pas +++ b/TestSamples/FormatterTests/input/CRTColors.pas @@ -1,5 +1,5 @@ -// CRT- -// CRT +// Стандартные CRT-цвета +// Работа с модулем CRT uses CRT; diff --git a/TestSamples/FormatterTests/input/Calculations1.pas b/TestSamples/FormatterTests/input/Calculations1.pas index 1a3aac935..f6ba098ae 100644 --- a/TestSamples/FormatterTests/input/Calculations1.pas +++ b/TestSamples/FormatterTests/input/Calculations1.pas @@ -1,7 +1,7 @@ -// +// Вывод результатов вычислений begin - writeln(':'); -// + writeln('Вычисления:'); +// Вывод пустой строки writeln; writeln('121 + 363 = ',121+363); writeln('121 - 363 = ',121-363); diff --git a/TestSamples/FormatterTests/input/Calculations2.pas b/TestSamples/FormatterTests/input/Calculations2.pas index a870b6f5f..ff692f587 100644 --- a/TestSamples/FormatterTests/input/Calculations2.pas +++ b/TestSamples/FormatterTests/input/Calculations2.pas @@ -1,10 +1,10 @@ -// . +// Вывод результатов вычислений. Используются именованные константы const a = 121; b = 363; begin - writeln(':'); + writeln('Вычисления:'); writeln; writeln(a,' + ',b,' = ',a+b); writeln(a,' - ',b,' = ',a-b); diff --git a/TestSamples/FormatterTests/input/Calculations3.pas b/TestSamples/FormatterTests/input/Calculations3.pas index e76a5c373..255a9b131 100644 --- a/TestSamples/FormatterTests/input/Calculations3.pas +++ b/TestSamples/FormatterTests/input/Calculations3.pas @@ -1,8 +1,8 @@ -// . +// Вывод результатов вычислений. Используются переменные и процедура ввода var a,b: integer; begin - writeln(' a b:'); + writeln('Введите a и b:'); readln(a,b); writeln; writeln(a,' + ',b,' = ',a+b); diff --git a/TestSamples/FormatterTests/input/CallCS.pas b/TestSamples/FormatterTests/input/CallCS.pas index 33cc38f52..2e86f0797 100644 --- a/TestSamples/FormatterTests/input/CallCS.pas +++ b/TestSamples/FormatterTests/input/CallCS.pas @@ -1,5 +1,5 @@ -// add Class1, ClassLibrary1 -// Class1 ClassLibrary1.dll, C# +// Вызов статического метода add класса Class1, помещенного в пространство имен ClassLibrary1 +// Класс Class1 помещен в библиотеку ClassLibrary1.dll, откомпилированную на C# #reference 'ClassLibrary1.dll' uses ClassLibrary1; diff --git a/TestSamples/FormatterTests/input/CallNative.pas b/TestSamples/FormatterTests/input/CallNative.pas index 5876266f3..294747533 100644 --- a/TestSamples/FormatterTests/input/CallNative.pas +++ b/TestSamples/FormatterTests/input/CallNative.pas @@ -1,6 +1,6 @@ -// dll -function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // +// Вызов функции из обычной dll +function add(a,b: integer): integer; external 'NativeDll.dll' name 'add'; // объявление внешней функции -begin // +begin // основная программа writeln(add(2,3)); end. diff --git a/TestSamples/FormatterTests/input/CharFunc.pas b/TestSamples/FormatterTests/input/CharFunc.pas index fb28b2ac8..95bed5ad7 100644 --- a/TestSamples/FormatterTests/input/CharFunc.pas +++ b/TestSamples/FormatterTests/input/CharFunc.pas @@ -1,4 +1,4 @@ -// Ord, Chr, OrdUnicode, ChrUnicode +// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode var c: char; i: integer; @@ -6,14 +6,14 @@ var begin writeln('sizeof(char) = ',sizeof(char)); writeln; - c := ''; + c := 'Ж'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); writeln; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/ClassConstructor.pas b/TestSamples/FormatterTests/input/ClassConstructor.pas index f7a00c36e..11679be8a 100644 --- a/TestSamples/FormatterTests/input/ClassConstructor.pas +++ b/TestSamples/FormatterTests/input/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Пример использования классового (статического) конструктора type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/CursorMove.pas b/TestSamples/FormatterTests/input/CursorMove.pas index 5943805e2..b71cdbf04 100644 --- a/TestSamples/FormatterTests/input/CursorMove.pas +++ b/TestSamples/FormatterTests/input/CursorMove.pas @@ -1,4 +1,4 @@ -// ReadKey . +//Концепция ReadKey в селедующих версиях будет изменена. uses CRT; var diff --git a/TestSamples/FormatterTests/input/DMpp17.pas b/TestSamples/FormatterTests/input/DMpp17.pas index f830b2e75..3c2c23b71 100644 --- a/TestSamples/FormatterTests/input/DMpp17.pas +++ b/TestSamples/FormatterTests/input/DMpp17.pas @@ -1,4 +1,4 @@ -// pp17 +// Выполнение задания pp17 для Чертежника uses Drawman; procedure Spir(n: integer); diff --git a/TestSamples/FormatterTests/input/DS0003.pas b/TestSamples/FormatterTests/input/DS0003.pas index 13d2d0908..cdb03e3b8 100644 --- a/TestSamples/FormatterTests/input/DS0003.pas +++ b/TestSamples/FormatterTests/input/DS0003.pas @@ -1,4 +1,4 @@ -// +// Таблица символов и их кодов var i: integer; begin cls; diff --git a/TestSamples/FormatterTests/input/DS0004.pas b/TestSamples/FormatterTests/input/DS0004.pas index d9729639f..9eedee17c 100644 --- a/TestSamples/FormatterTests/input/DS0004.pas +++ b/TestSamples/FormatterTests/input/DS0004.pas @@ -4,8 +4,8 @@ begin raise new Exception('xxx'); except //on e:exception do - //writeln(': ',e); - writeln('!'); + //writeln('Исключение: ',e); + writeln('Исключение!'); end; readln; end. diff --git a/TestSamples/FormatterTests/input/DS0005.pas b/TestSamples/FormatterTests/input/DS0005.pas index 28083ec09..9668ae142 100644 --- a/TestSamples/FormatterTests/input/DS0005.pas +++ b/TestSamples/FormatterTests/input/DS0005.pas @@ -11,7 +11,7 @@ begin raise new MyException; except on e:myexception do - writeln(': ',e); + writeln('Исключение: ',e); end; readln; end. diff --git a/TestSamples/FormatterTests/input/DS0010.pas b/TestSamples/FormatterTests/input/DS0010.pas index 5c492079d..250128d18 100644 --- a/TestSamples/FormatterTests/input/DS0010.pas +++ b/TestSamples/FormatterTests/input/DS0010.pas @@ -1,4 +1,4 @@ -// PCU +//Ошибка чтения из PCU uses DS0010_unit; var c: DS0010_unit.cc; diff --git a/TestSamples/FormatterTests/input/DS0011.pas b/TestSamples/FormatterTests/input/DS0011.pas index cdc3254ba..e76765e6c 100644 --- a/TestSamples/FormatterTests/input/DS0011.pas +++ b/TestSamples/FormatterTests/input/DS0011.pas @@ -1,4 +1,4 @@ -// PCU( ) +//Ошибка чтения из PCU(возможно коструктора) uses DS0011_unit; var c: cc; diff --git a/TestSamples/FormatterTests/input/DS0024.pas b/TestSamples/FormatterTests/input/DS0024.pas index 0e6a11f2f..8c47cbefc 100644 --- a/TestSamples/FormatterTests/input/DS0024.pas +++ b/TestSamples/FormatterTests/input/DS0024.pas @@ -16,9 +16,9 @@ var f: Form; begin - // + // так не компилицца f.Invoke(proc(p)); p1 := P; - // + // а так компилицца f.Invoke(p1); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/DS0031.pas b/TestSamples/FormatterTests/input/DS0031.pas index 32ed51bd0..6be1f3e3b 100644 --- a/TestSamples/FormatterTests/input/DS0031.pas +++ b/TestSamples/FormatterTests/input/DS0031.pas @@ -1,6 +1,6 @@ uses GraphABC; -// +// Фрактальный папоротник const Iterations = 1000000; @@ -9,7 +9,7 @@ const Width = Height div 2; Size = Height/10 - 2; Dx = Width div 2 - 15; - // + //неправильное позиционирование курсора Dc = Iterations div Brightness; data: array [0..19] of real = ( 0.00, 0.85, 0.20, -0.15, diff --git a/TestSamples/FormatterTests/input/DateTime2.pas b/TestSamples/FormatterTests/input/DateTime2.pas index 3820db357..01e72e36d 100644 --- a/TestSamples/FormatterTests/input/DateTime2.pas +++ b/TestSamples/FormatterTests/input/DateTime2.pas @@ -1,31 +1,31 @@ Uses System; -var d1, d2, d3: DateTime; // - ts: TimeSpan; // +var d1, d2, d3: DateTime; // Объекты для хранения даты и времени + ts: TimeSpan; // Объект для хранения промежутков времени begin - // - + // Получение текущей даты - вызов статического метода d1 := DateTime.Now; Writeln(d1); - // + // Дата и время через один месяц d2 := d1.AddMonths(1); Writeln(d2); - // 12 + // Дата и время на 12 часов раньше d2 := d1.AddHours(-12); Writeln(d2); - // - (, ,) + // Формирование даты - вызов конструктора объекта (год, месяц,число) d3 := new DateTime(2001, 1, 1); Writeln(d3); - // , ( ) + // Определение времени, прошедшего с начала тысячелетия (разность дат) ts := d1.Subtract(d3); - // ( - ) + // Промежуток времени в днях (результат - вещественное число) Writeln(ts.TotalDays); - // , , + // Промежуток времени в днях, часах, минутах и секундах Writeln(ts.Days, ' ', ts.Hours, ':', ts.Minutes, ':', ts.Seconds); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/DivMod1.pas b/TestSamples/FormatterTests/input/DivMod1.pas index 73461e4ad..37fc92a04 100644 --- a/TestSamples/FormatterTests/input/DivMod1.pas +++ b/TestSamples/FormatterTests/input/DivMod1.pas @@ -1,10 +1,10 @@ -// div mod +// Операции div и mod var a: integer; begin - write(' a: '); + write('Введите a: '); readln(a); - writeln(' : ',a mod 10); - writeln(' : ',a div 10); - writeln(' a , 0: ',a mod 2); + writeln('Последняя цифра числа: ',a mod 10); + writeln('Число без последней цифры: ',a div 10); + writeln('Если число a четно, то 0: ',a mod 2); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/DivMod2.pas b/TestSamples/FormatterTests/input/DivMod2.pas index 8ba18f637..7a008006b 100644 --- a/TestSamples/FormatterTests/input/DivMod2.pas +++ b/TestSamples/FormatterTests/input/DivMod2.pas @@ -1,11 +1,11 @@ -// div mod +// Операции div и mod var a: integer := 247; begin - write(' : '); - // + write('Цифры числа в обратном порядке: '); + // Выводим последнюю цифру write(a mod 10,' '); - // + // Отбрасываем последнюю цифру a := a div 10; write(a mod 10,' '); a := a div 10; diff --git a/TestSamples/FormatterTests/input/DrawManAddTasks.pas b/TestSamples/FormatterTests/input/DrawManAddTasks.pas index 7123569bd..5ad9e6a56 100644 --- a/TestSamples/FormatterTests/input/DrawManAddTasks.pas +++ b/TestSamples/FormatterTests/input/DrawManAddTasks.pas @@ -1,12 +1,12 @@ -/// +/// Дополнительный модуль для исполнителя Чертежник с заданиями unit DrawManAddTasks; -// pcu- PascalABC.NET\bin\Lib +// После компиляции pcu-файл модуля желательно разместить в папке PascalABC.NET\bin\Lib uses DrawMan,DMTaskMaker; procedure my1; begin - TaskText(' my1. , '); + TaskText('Задание my1. Начертите, используя циклы'); Field(14,14); DoToPoint(1,7); var k := 1; diff --git a/TestSamples/FormatterTests/input/Dynarray2.pas b/TestSamples/FormatterTests/input/Dynarray2.pas index 746b47274..63d162f37 100644 --- a/TestSamples/FormatterTests/input/Dynarray2.pas +++ b/TestSamples/FormatterTests/input/Dynarray2.pas @@ -1,4 +1,4 @@ -// +// Процедуры и методы работы с динамическим массивом uses System; procedure Print(a: array of integer); @@ -11,30 +11,30 @@ end; var a: array of integer; begin - SetLength(a,10); // . : a := new integer[10]; + SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := PABCSystem.Random(100); - // + // Вывод всех элементов массива Print(a); - // ( & , - // array - // Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении + // класса Array) &Array.Sort(a); Print(a); - // + // Обращение массива &Array.Reverse(a); Print(a); - // . SetLength + // Изменение размерамассиав с сохранением элементов. То же делает SetLength &Array.Resize(a,a.Length+2); Print(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 50); Writeln(i); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/ESquares.pas b/TestSamples/FormatterTests/input/ESquares.pas index 2617646f7..925e70493 100644 --- a/TestSamples/FormatterTests/input/ESquares.pas +++ b/TestSamples/FormatterTests/input/ESquares.pas @@ -1,4 +1,4 @@ -// E-. +// E-квадраты. Демонстрация рекурсии uses GraphABC; const mw = 2.9; @@ -23,7 +23,7 @@ end; var s: string; r: integer; begin - SetWindowCaption(': '); + SetWindowCaption('Рекурсия: квадраты'); SetWindowSize(750,530); SetPenColor(clWhite); SetBrushColor(clRandom); diff --git a/TestSamples/FormatterTests/input/Enum2.pas b/TestSamples/FormatterTests/input/Enum2.pas index b9d3d0a87..db92312ee 100644 --- a/TestSamples/FormatterTests/input/Enum2.pas +++ b/TestSamples/FormatterTests/input/Enum2.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/FieldRobotStampProba2.pas b/TestSamples/FormatterTests/input/FieldRobotStampProba2.pas index b9bf607c7..740cae483 100644 --- a/TestSamples/FormatterTests/input/FieldRobotStampProba2.pas +++ b/TestSamples/FormatterTests/input/FieldRobotStampProba2.pas @@ -3,7 +3,7 @@ const MAX_DimX = 200; MAX_DimY = 200; - MaxConds = 10000; // - ! + MaxConds = 10000; // сколько максимально условий может проверить Робот - направлено против зацикливания! MaxMoveNum = 10000; var @@ -31,15 +31,15 @@ type procedure DrawCentered; procedure Draw0; procedure Draw(px,py: integer); - procedure DrawCell(x,y: integer); { } + procedure DrawCell(x,y: integer); { нарисовать одну ячейку } procedure Clear; function IsSolution: boolean; - // + // примитивы для постановщика procedure DrawLastRobotPos; procedure DrawTag(x,y: integer); procedure SetDim(DX,DY,CellSz: integer); - procedure SetPaintSystem(x,y: integer); { - } - procedure SetTag(x,y: integer); { } + procedure SetPaintSystem(x,y: integer); { пометить ячейку как нарисованную - постановщик} + procedure SetTag(x,y: integer); { пометить ячейку как помеченную } procedure SetTagRect(x1,y1,x2,y2: integer); procedure SetFirstRobotPos(x,y: integer); procedure MoveRobotToFirstPos; @@ -47,11 +47,11 @@ type procedure SetFirstLastRobotPos(x,y,x1,y1: integer); procedure HorizWall(x,y,len: integer); procedure VertWall(x,y,len: integer); - // + // примитивы для выполнителя procedure DrawRobot; procedure MoveRobot(x,y: integer); - procedure SetPaintUser(x,y: integer); { - } - procedure SetRobotPos(x,y: integer); // MoveRobot + procedure SetPaintUser(x,y: integer); { пометить ячейку как нарисованную - выполнитель} + procedure SetRobotPos(x,y: integer); // синоним MoveRobot function WallFromLeft(x,y: integer): boolean; function WallFromRight(x,y: integer): boolean; function WallFromUp(x,y: integer): boolean; diff --git a/TestSamples/FormatterTests/input/Flame.pas b/TestSamples/FormatterTests/input/Flame.pas index e1639c602..c22cb7467 100644 --- a/TestSamples/FormatterTests/input/Flame.pas +++ b/TestSamples/FormatterTests/input/Flame.pas @@ -17,20 +17,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer: array of array of byte := new array of byte[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, i, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/TestSamples/FormatterTests/input/Foreach2.pas b/TestSamples/FormatterTests/input/Foreach2.pas index 82e2e12dc..2b546058b 100644 --- a/TestSamples/FormatterTests/input/Foreach2.pas +++ b/TestSamples/FormatterTests/input/Foreach2.pas @@ -1,4 +1,4 @@ -// foreach +// Пример иллюстрирует возможности оператора foreach uses System.Collections.Generic; var @@ -7,20 +7,20 @@ var l: List; begin - write('foreach : ':35); + write('foreach по обычному массиву: ':35); foreach x: integer in a do write(x,' '); writeln; s := [2..5,10..14]; - write('foreach : ':35); + write('foreach по множеству: ':35); foreach x: integer in s do write(x,' '); writeln; l := new List; l.Add(7); l.Add(2); l.Add(5); - write('foreach : ':35); + write('foreach по динамическому массиву: ':35); foreach x: integer in l do write(x,' '); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/FormWebBrowser.pas b/TestSamples/FormatterTests/input/FormWebBrowser.pas index a8e7352f0..f2ad9945f 100644 --- a/TestSamples/FormatterTests/input/FormWebBrowser.pas +++ b/TestSamples/FormatterTests/input/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser #apptype windows #reference 'System.Windows.Forms.dll' diff --git a/TestSamples/FormatterTests/input/FuncParams.pas b/TestSamples/FormatterTests/input/FuncParams.pas index 81e9a13a6..e23578348 100644 --- a/TestSamples/FormatterTests/input/FuncParams.pas +++ b/TestSamples/FormatterTests/input/FuncParams.pas @@ -1,4 +1,4 @@ -// +// Переменное число параметров function Sum(params arg: array of integer): integer; begin Result := 0; diff --git a/TestSamples/FormatterTests/input/GarbageCollection.pas b/TestSamples/FormatterTests/input/GarbageCollection.pas index 9182e55ca..e9361cc02 100644 --- a/TestSamples/FormatterTests/input/GarbageCollection.pas +++ b/TestSamples/FormatterTests/input/GarbageCollection.pas @@ -1,4 +1,4 @@ -// : nil +// Сборка мусора: для освобождения объекта присвойте переменной nil uses System.Collections.Generic; var l: List := new List; @@ -9,5 +9,5 @@ begin l.Add(2); foreach x:integer in l do write(x,' '); - l := nil; // , , + l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/GlobalVars.pas b/TestSamples/FormatterTests/input/GlobalVars.pas index 79810714a..6cd714a35 100644 --- a/TestSamples/FormatterTests/input/GlobalVars.pas +++ b/TestSamples/FormatterTests/input/GlobalVars.pas @@ -1,5 +1,5 @@ -// . -// . BlockVars.pas +// Сравнение скорости работы глобальных и внутриблочных переменных. +// См. также файл BlockVars.pas uses Utils; var @@ -13,5 +13,5 @@ begin i += 1; end; writeln(s); - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSamples/FormatterTests/input/GrAnim1.pas b/TestSamples/FormatterTests/input/GrAnim1.pas index 71dde4512..67e0b2d54 100644 --- a/TestSamples/FormatterTests/input/GrAnim1.pas +++ b/TestSamples/FormatterTests/input/GrAnim1.pas @@ -1,8 +1,8 @@ -// . "" . +// Графика. Пример "наивной" анимации. Эффект мерцания uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация простой анимации'; var y := 200; Brush.Color := clGreen; for var x := 70 to 500 do diff --git a/TestSamples/FormatterTests/input/GrAnim2.pas b/TestSamples/FormatterTests/input/GrAnim2.pas index bad081cf2..b88e17046 100644 --- a/TestSamples/FormatterTests/input/GrAnim2.pas +++ b/TestSamples/FormatterTests/input/GrAnim2.pas @@ -1,17 +1,17 @@ -// . LockDrawing-Redraw. +// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Анимация без мерцания'; var y := 200; Brush.Color := clGreen; - // + // Отключаем рисование в окне LockDrawing; for var x := 70 to 500 do begin Window.Clear(clWhite); Circle(x,y,50); - // + // Перерисовываем окно из внеэранного буфера Redraw; Sleep(3); end; diff --git a/TestSamples/FormatterTests/input/GrCoord1.pas b/TestSamples/FormatterTests/input/GrCoord1.pas index 169a52366..8da8ac886 100644 --- a/TestSamples/FormatterTests/input/GrCoord1.pas +++ b/TestSamples/FormatterTests/input/GrCoord1.pas @@ -1,15 +1,15 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; - // + // Поворот Coordinate.Angle := 30; - // + // Масштаб Coordinate.Scale := 3; - // - + // Начало координат - в центре окна Coordinate.Origin := Window.Center; Brush.Color := clMoneyGreen; diff --git a/TestSamples/FormatterTests/input/GrCoord2.pas b/TestSamples/FormatterTests/input/GrCoord2.pas index d5e2ba3f8..e81b9b651 100644 --- a/TestSamples/FormatterTests/input/GrCoord2.pas +++ b/TestSamples/FormatterTests/input/GrCoord2.pas @@ -1,8 +1,8 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; Coordinate.Origin := Window.Center; diff --git a/TestSamples/FormatterTests/input/GrFont1.pas b/TestSamples/FormatterTests/input/GrFont1.pas index 7efb0bdaf..346f33c55 100644 --- a/TestSamples/FormatterTests/input/GrFont1.pas +++ b/TestSamples/FormatterTests/input/GrFont1.pas @@ -1,8 +1,8 @@ -// +// Демонстрация работы со шрифтами uses GraphABC; begin - Window.Title := ''; + Window.Title := 'Шрифты'; SetWindowSize(750,520); Font.Name := 'Arial'; Font.Style := fsBoldItalic; diff --git a/TestSamples/FormatterTests/input/GrFont2.pas b/TestSamples/FormatterTests/input/GrFont2.pas index 04b15835c..17947a8ff 100644 --- a/TestSamples/FormatterTests/input/GrFont2.pas +++ b/TestSamples/FormatterTests/input/GrFont2.pas @@ -1,10 +1,10 @@ -// TextWidth TextHeight +// Демонстрация использования TextWidth и TextHeight uses GraphABC; const s = 'Width & Height'; begin - Window.Title := ' '; + Window.Title := 'Текст по центру'; Window.IsFixedSize := True; SetWindowSize(700,300); Window.Center; diff --git a/TestSamples/FormatterTests/input/GrPoly.pas b/TestSamples/FormatterTests/input/GrPoly.pas index 7abc91298..68f80312d 100644 --- a/TestSamples/FormatterTests/input/GrPoly.pas +++ b/TestSamples/FormatterTests/input/GrPoly.pas @@ -1,11 +1,11 @@ -// Polyline, Polygon, Curve, ClosedCurve -// +// Процедуры Polyline, Polygon, Curve, ClosedCurve +// Перенос начала системы координат uses GraphABC; var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); begin - Window.Title := ' '; + Window.Title := 'Рисование по массиву точек'; Brush.Color := Color.Beige; Coordinate.SetOrigin(60,30); Polyline(a); diff --git a/TestSamples/FormatterTests/input/GraphABCTest.pas b/TestSamples/FormatterTests/input/GraphABCTest.pas index 818687764..cd8f125a1 100644 --- a/TestSamples/FormatterTests/input/GraphABCTest.pas +++ b/TestSamples/FormatterTests/input/GraphABCTest.pas @@ -1,4 +1,4 @@ -// GraphABC +// Иллюстрация простейших возможностей GraphABC uses GraphABC; begin diff --git a/TestSamples/FormatterTests/input/Hanoi.pas b/TestSamples/FormatterTests/input/Hanoi.pas index 49e83abdf..38ff96674 100644 --- a/TestSamples/FormatterTests/input/Hanoi.pas +++ b/TestSamples/FormatterTests/input/Hanoi.pas @@ -1,4 +1,4 @@ -// +// Ханойские башни uses GraphABC; type @@ -77,12 +77,12 @@ begin SetFontSize(14); SetFontName('Arial'); SetBrushColor(clWhite); - TextOut(20,20,' ='+IntToStr(num)); + TextOut(20,20,'Число перемещений дисков='+IntToStr(num)); Redraw; end; begin - SetWindowCaption(' '); + SetWindowCaption('Ханойские башни'); SetWindowSize(760,400); Init; LockDrawing; diff --git a/TestSamples/FormatterTests/input/HanoyB_1.pas b/TestSamples/FormatterTests/input/HanoyB_1.pas index 6f990370a..d61a6192b 100644 --- a/TestSamples/FormatterTests/input/HanoyB_1.pas +++ b/TestSamples/FormatterTests/input/HanoyB_1.pas @@ -71,20 +71,20 @@ begin f1:=0;d:=0;h:=0; xm:=300;ym:=20; fc:=clGreen; - s:=' ?'; + s:='Показать ПРИМЕР перемещения ?'; Messag(xm,ym,s); SetBrushColor(clSilver); SetFontColor(clGreen); - TextOut(120,600,' I III.'); - TextOut(80,620,' , II.'); + TextOut(120,600,'Вам необходимо переместить БАШНЮ с позиции I на позицию III.'); + TextOut(80,620,'Перемещать можно только по одному сегменту,используя дополнительную позицию II.'); SetFontColor(clRed); - TextOut(130,640,' .'); + TextOut(130,640,'Нельзя устанавливать сегмент большего размера на меньший.'); SetFontColor(clBrown); - TextOut(100,660,' , .'); + TextOut(100,660,'Выберите мышью перемещаемый сегмент, а затем место для перемещения.'); SetFontColor(clGray); SetFontSize(8); - TextOut(600,685,' - PascalABC 2007 .'); + TextOut(600,685,'Разработка - Владимир ДЕГТЯРЬ PascalABC 2007 г.'); SetFontColor(clBlue); TextOut(50,685,'E-mail: degvv@mail.ru'); SetFontSize(16); @@ -95,8 +95,8 @@ begin Inc(d); SetBrushColor(clSilver); SetFontColor(clBlue); - TextOut(10,70,' - '+intToStr(d div 2)); - TextOut(750,70,' - '+intToStr(h)); + TextOut(10,70,'КОЛИЧЕСТВО ХОДОВ - '+intToStr(d div 2)); + TextOut(750,70,'КОЛИЧЕСТВО ОШИБОК - '+intToStr(h)); end; procedure Show; @@ -149,7 +149,7 @@ begin begin xm:=300;ym:=40; fc:=clRed; - s:=' !';Inc(h); + s:='Такое перемещение НЕДОПУСТИМО !';Inc(h); Messag(xm,ym,s);Sleep(2000);HideMessag(xm,ym);exit; end; pc:=clLime;bc:=clLime;fc:=bc;Segment; @@ -168,7 +168,7 @@ begin HideMessag(xm,ym); xm:=400;ym:=70; fc:=clBrown; - s:=' '; + s:='НОВАЯ ИГРА'; Messag(xm,ym,s); fc:=clBlack; if f1= 0 then @@ -215,7 +215,7 @@ end; begin SetWindowSize(1050,750); - SetWindowCaption(' << >> V 1.2'); + SetWindowCaption(' Логическаая головоломка << ХАНОЙСКАЯ БАШНЯ >> V 1.2'); mc[0]:= clRed; mc[1]:= clGreen; diff --git a/TestSamples/FormatterTests/input/HelloWorld.pas b/TestSamples/FormatterTests/input/HelloWorld.pas index b1bce0920..0ce413328 100644 --- a/TestSamples/FormatterTests/input/HelloWorld.pas +++ b/TestSamples/FormatterTests/input/HelloWorld.pas @@ -1,5 +1,5 @@ -// +// Первая программа program HelloWorld; begin - writeln(', !'); + writeln('Привет, мир!'); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/InitRecords2.pas b/TestSamples/FormatterTests/input/InitRecords2.pas index 4706c7177..5befeb806 100644 --- a/TestSamples/FormatterTests/input/InitRecords2.pas +++ b/TestSamples/FormatterTests/input/InitRecords2.pas @@ -1,8 +1,8 @@ -// +// Инициализаторы полей записи type Frac = record num: integer := 0; - denom := 1; // - denom: integer + denom := 1; // автоопределеине типа - denom: integer end; var diff --git a/TestSamples/FormatterTests/input/IntToBytes.pas b/TestSamples/FormatterTests/input/IntToBytes.pas index 96b8e47ae..9bf43798c 100644 --- a/TestSamples/FormatterTests/input/IntToBytes.pas +++ b/TestSamples/FormatterTests/input/IntToBytes.pas @@ -4,7 +4,7 @@ var v: integer; begin - write(' : '); + write('Введите целое число: '); readln(v); WriteMemoryToScreen(@v, sizeof(integer)); readln; diff --git a/TestSamples/FormatterTests/input/Interf.pas b/TestSamples/FormatterTests/input/Interf.pas index 89c00da6f..7deff8846 100644 --- a/TestSamples/FormatterTests/input/Interf.pas +++ b/TestSamples/FormatterTests/input/Interf.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация использованя интерфейсов type IShape = interface procedure Draw; diff --git a/TestSamples/FormatterTests/input/Knapsack.pas b/TestSamples/FormatterTests/input/Knapsack.pas index 3f032a34b..04e78c862 100644 --- a/TestSamples/FormatterTests/input/Knapsack.pas +++ b/TestSamples/FormatterTests/input/Knapsack.pas @@ -1,5 +1,5 @@ -// . B . -// +// Задача о ранце. В массиве B заданы веса предметов. +// Выдать все варианты полной комплектации ранца частью этих предметов const Sz=100; type IArr=array [1..Sz] of integer; @@ -21,13 +21,13 @@ var procedure TrySolve0(i: integer); begin if space=0 then PrintArr(Subset,ns) - else if (space<0) or (i>nb) then exit // - else // B + else if (space<0) or (i>nb) then exit // отсечение + else // продолжение перебора всех подмножеств множества B begin - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент Inc(ns); Subset[ns]:=B[i]; space:=space-B[i]; - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать взять i-тый элемент space:=space+B[i]; Dec(ns); end; end; diff --git a/TestSamples/FormatterTests/input/Life.pas b/TestSamples/FormatterTests/input/Life.pas index 260aa84bf..b624968d9 100644 --- a/TestSamples/FormatterTests/input/Life.pas +++ b/TestSamples/FormatterTests/input/Life.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке //#apptype console @@ -282,10 +282,10 @@ begin end; begin - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -296,8 +296,8 @@ begin SetFontName('Arial'); SetFontSize(10); Init; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); DrawField; DrawConfiguration; mil:=Milliseconds; @@ -306,8 +306,8 @@ begin begin gen:=gen+1; SetBrushColor(clWhite); - TextOut(25,0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); a:=b; SosediA:=SosediB; diff --git a/TestSamples/FormatterTests/input/LifeU.pas b/TestSamples/FormatterTests/input/LifeU.pas index d4b2f8adf..aae12e698 100644 --- a/TestSamples/FormatterTests/input/LifeU.pas +++ b/TestSamples/FormatterTests/input/LifeU.pas @@ -280,10 +280,10 @@ end; procedure Start; begin - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -294,8 +294,8 @@ begin SetFontName('Arial'); SetFontSize(10); Init; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); DrawField; DrawConfiguration; mil:=Milliseconds; @@ -304,8 +304,8 @@ begin begin gen:=gen+1; SetBrushColor(clWhite); - TextOut(25,0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); a:=b; SosediA:=SosediB; diff --git a/TestSamples/FormatterTests/input/LinkedList.pas b/TestSamples/FormatterTests/input/LinkedList.pas index 303712765..dd1474e39 100644 --- a/TestSamples/FormatterTests/input/LinkedList.pas +++ b/TestSamples/FormatterTests/input/LinkedList.pas @@ -1,4 +1,4 @@ -// LinkedList - - +// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора uses System.Collections,System.Collections.Generic; procedure print(l: ICollection); diff --git a/TestSamples/FormatterTests/input/List.pas b/TestSamples/FormatterTests/input/List.pas index 7411e4c40..cb4799e61 100644 --- a/TestSamples/FormatterTests/input/List.pas +++ b/TestSamples/FormatterTests/input/List.pas @@ -71,8 +71,8 @@ type function PopFront: T; begin if IsEmpty then - result := nil // , ? - //- . + result := nil //Любой тип может принять такое значение, не правда ли? + //Вообще-то здесь нужно выбросить исключение. else begin result := start.info; @@ -86,8 +86,8 @@ type function PopBack: T; begin if IsEmpty then - result := nil // , ? - //- . + result := nil //Любой тип может принять такое значение, не правда ли? + //Вообще-то здесь нужно выбросить исключение. else begin result := last.info; @@ -129,11 +129,11 @@ type end; procedure Clear; begin - // , , , ! + //Чисто не там, где убирают, а там, где мусор убирается сам! start := nil; last := nil; end; - procedure Sort; // - + procedure Sort; //выбором - по неубыванию var x: T; tek, p, min: ListNode; diff --git a/TestSamples/FormatterTests/input/MainProgram.pas b/TestSamples/FormatterTests/input/MainProgram.pas index 81199623c..98617cdfc 100644 --- a/TestSamples/FormatterTests/input/MainProgram.pas +++ b/TestSamples/FormatterTests/input/MainProgram.pas @@ -1,7 +1,7 @@ -uses MyUnit; // +uses MyUnit; // подключили модуль var a: array of integer := (1,5,3,7,3,6,4,5,1,8,3,5,6); begin - writeln(' = ',Max(a)); + writeln('Максимальный элемент в массиве = ',Max(a)); end. diff --git a/TestSamples/FormatterTests/input/Matr1.pas b/TestSamples/FormatterTests/input/Matr1.pas index 31cb1448c..9033bd4d8 100644 --- a/TestSamples/FormatterTests/input/Matr1.pas +++ b/TestSamples/FormatterTests/input/Matr1.pas @@ -1,4 +1,4 @@ -// . goto +// Поиск значения в случайной матрице. Использование оператора goto const sz = 10; m = 4; @@ -11,12 +11,12 @@ label 1; var matr: Matrix; begin - // m x n + // Заполнение матрицы m x n случайными числами for var i := 1 to m do for var j := 1 to n do matr[i,j] := Random(100); - // + // Вывод матрицы for var i := 1 to m do begin for var j := 1 to n do @@ -24,17 +24,17 @@ begin writeln; end; - // 5? + // Есть ли в матрице элемент 5? var found5 := False; for var i := 1 to m do for var j := 1 to n do if matr[i,j]=5 then begin found5 := True; - goto 1; // ! + goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу end; 1: if found5 then - writeln(' 5 ') - else writeln(' 5 ') + writeln('Элемент 5 найден') + else writeln('Элемент 5 не найден') end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Matr2.pas b/TestSamples/FormatterTests/input/Matr2.pas index b0161cdfd..42df846a3 100644 --- a/TestSamples/FormatterTests/input/Matr2.pas +++ b/TestSamples/FormatterTests/input/Matr2.pas @@ -1,4 +1,4 @@ -// +// Матрица как динамический массив массивов type Matrix = array of array of integer; function CreateMatrix(m,n: integer): Matrix; diff --git a/TestSamples/FormatterTests/input/MazeGen.pas b/TestSamples/FormatterTests/input/MazeGen.pas index 8d43ab89d..e60daf38f 100644 --- a/TestSamples/FormatterTests/input/MazeGen.pas +++ b/TestSamples/FormatterTests/input/MazeGen.pas @@ -1,10 +1,10 @@ -// +// Программа генерации случайных лабиринтов uses GraphABC; const - szw=70; // + szw=70; // размер лабиринта szh=50; - cellsz=10; // + cellsz=10; // размер ячейки type point=record @@ -33,10 +33,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -46,28 +46,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n:= Random(todonum); x:= todo[n].x; y:= todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat d:=Random (4); until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl d) or 32); maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -78,8 +78,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -88,19 +88,19 @@ begin for x:=1 to szw-2 do for y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz ); end; end; begin - SetWindowCaption(' '); + SetWindowCaption('Генерация лабиринта'); SetWindowSize(800,600); dx[2]:=-1;dx[3]:=1; dy[0]:=-1;dy[1]:=1; diff --git a/TestSamples/FormatterTests/input/MouseEvents.pas b/TestSamples/FormatterTests/input/MouseEvents.pas index 064766eae..f48183e0a 100644 --- a/TestSamples/FormatterTests/input/MouseEvents.pas +++ b/TestSamples/FormatterTests/input/MouseEvents.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация обработки событий мыши uses GraphABC; procedure MouseDown(x,y,mb: integer); @@ -12,7 +12,7 @@ begin end; begin - // + // Привязка обработчиков к событиям OnMouseDown := MouseDown; OnMouseMove := MouseMove end. diff --git a/TestSamples/FormatterTests/input/MyUnit.pas b/TestSamples/FormatterTests/input/MyUnit.pas index 06ec89d2e..70fb761e3 100644 --- a/TestSamples/FormatterTests/input/MyUnit.pas +++ b/TestSamples/FormatterTests/input/MyUnit.pas @@ -1,8 +1,8 @@ -/// -unit MyUnit; // +/// Модуль упрощенной структуры +unit MyUnit; // имя модуля должно совпадать с именем файла -// -/// +// Документирующие комментарии отображаются при наведении на имя курсора мыши +/// Возвращает максимальный элемент в массиве function Max(a: array of integer): integer; begin Result := integer.MinValue; diff --git a/TestSamples/FormatterTests/input/OperatorOverloading.pas b/TestSamples/FormatterTests/input/OperatorOverloading.pas index 879445ac5..1b62ef27b 100644 --- a/TestSamples/FormatterTests/input/OperatorOverloading.pas +++ b/TestSamples/FormatterTests/input/OperatorOverloading.pas @@ -1,4 +1,4 @@ -// +// Перегрузка операций type Frac = record private diff --git a/TestSamples/FormatterTests/input/Overload.pas b/TestSamples/FormatterTests/input/Overload.pas index 09e4321ce..f3b5eaef1 100644 --- a/TestSamples/FormatterTests/input/Overload.pas +++ b/TestSamples/FormatterTests/input/Overload.pas @@ -1,4 +1,4 @@ -// +// Перегрузка имен подпрограмм procedure proc(i: integer); begin writeln('integer'); diff --git a/TestSamples/FormatterTests/input/Permutations.pas b/TestSamples/FormatterTests/input/Permutations.pas index 1b9b6924f..8a4659e6a 100644 --- a/TestSamples/FormatterTests/input/Permutations.pas +++ b/TestSamples/FormatterTests/input/Permutations.pas @@ -1,4 +1,4 @@ -// n +// Генерация всех перестановок длины n procedure swap(var a,b: integer); var v: integer; begin diff --git a/TestSamples/FormatterTests/input/PersonInternal.pas b/TestSamples/FormatterTests/input/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/TestSamples/FormatterTests/input/PersonInternal.pas +++ b/TestSamples/FormatterTests/input/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/PifagorTable.pas b/TestSamples/FormatterTests/input/PifagorTable.pas index bee493044..33b79631c 100644 --- a/TestSamples/FormatterTests/input/PifagorTable.pas +++ b/TestSamples/FormatterTests/input/PifagorTable.pas @@ -3,7 +3,7 @@ const n=10; var i,j: integer; begin - writeln(' '); + writeln('Таблица умножения'); for i:=1 to n do begin for j:=1 to n do diff --git a/TestSamples/FormatterTests/input/Pointers2.pas b/TestSamples/FormatterTests/input/Pointers2.pas index ea8ee15ba..42aa2fc6d 100644 --- a/TestSamples/FormatterTests/input/Pointers2.pas +++ b/TestSamples/FormatterTests/input/Pointers2.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,12 +32,12 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin var p1 := p; p := p^.next; - Dispose(p1); // + Dispose(p1); // Память обязательно возвращать end; end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Posl.pas b/TestSamples/FormatterTests/input/Posl.pas index f1f234934..cec3adfeb 100644 --- a/TestSamples/FormatterTests/input/Posl.pas +++ b/TestSamples/FormatterTests/input/Posl.pas @@ -1,4 +1,4 @@ -// B . +// В массиве B задано множество элементов. Вывести все его подмножества const Sz=100; type IArr=array [1..Sz] of integer; @@ -21,8 +21,8 @@ var if i>nb then PrintArr(Subset,ns) else begin - TrySolve0(i+1); // i- - Inc(ns); Subset[ns]:=B[i]; TrySolve0(i+1); Dec(ns); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент + Inc(ns); Subset[ns]:=B[i]; TrySolve0(i+1); Dec(ns); // попробовать взять i-тый элемент end; end; diff --git a/TestSamples/FormatterTests/input/ProcParam.pas b/TestSamples/FormatterTests/input/ProcParam.pas index d2708bbb0..5a77aa708 100644 --- a/TestSamples/FormatterTests/input/ProcParam.pas +++ b/TestSamples/FormatterTests/input/ProcParam.pas @@ -1,6 +1,6 @@ -// -// PascalABC.NET -// .NET +// Иллюстрация процедурных переменных как параметров подпрограмм +// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов +// Процедурный тип реализован через делегаты .NET procedure for_each(var a: array of real; p: procedure(var r: real)); var i: integer; begin diff --git a/TestSamples/FormatterTests/input/ProcVars.pas b/TestSamples/FormatterTests/input/ProcVars.pas index dfb57588b..c41dcc7c7 100644 --- a/TestSamples/FormatterTests/input/ProcVars.pas +++ b/TestSamples/FormatterTests/input/ProcVars.pas @@ -1,10 +1,10 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= var p: procedure; procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -16,11 +16,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов статического метода класса'); end; end; diff --git a/TestSamples/FormatterTests/input/ProcVars2.pas b/TestSamples/FormatterTests/input/ProcVars2.pas index e6b1774e5..073617a04 100644 --- a/TestSamples/FormatterTests/input/ProcVars2.pas +++ b/TestSamples/FormatterTests/input/ProcVars2.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/TestSamples/FormatterTests/input/QuickSort.pas b/TestSamples/FormatterTests/input/QuickSort.pas index a0bde3ee7..32b4d52dd 100644 --- a/TestSamples/FormatterTests/input/QuickSort.pas +++ b/TestSamples/FormatterTests/input/QuickSort.pas @@ -1,4 +1,4 @@ -// . +// Быстрая сортировка Ч. Хоара const Sz=100; type IArr=array [1..Sz] of integer; @@ -35,8 +35,8 @@ procedure QuickSort(var A: IArr; n: integer); i:=l; j:=r; x:=A[(l+r) div 2]; repeat - while A[i]= x - while A[j]>x do Dec(j); // <= x + while A[i]= x + while A[j]>x do Dec(j); // ищем последний элемент <= x if i<=j then begin swap(A[i],A[j]); @@ -59,9 +59,9 @@ var A: IArr; begin cls; FillRandom(A,n); - writeln(' : '); + writeln('До сортировки: '); Print(A,n); - writeln(' : '); + writeln('После сортировки: '); QuickSort(A,n); Print(A,n); end. diff --git a/TestSamples/FormatterTests/input/RBcc17.pas b/TestSamples/FormatterTests/input/RBcc17.pas index 4e40b2b95..59285e1a8 100644 --- a/TestSamples/FormatterTests/input/RBcc17.pas +++ b/TestSamples/FormatterTests/input/RBcc17.pas @@ -1,4 +1,4 @@ -// cc17 +// Выполнение задания cc17 для Робота uses Robot; begin diff --git a/TestSamples/FormatterTests/input/Random1.pas b/TestSamples/FormatterTests/input/Random1.pas index 1f982a093..e8738e012 100644 --- a/TestSamples/FormatterTests/input/Random1.pas +++ b/TestSamples/FormatterTests/input/Random1.pas @@ -1,13 +1,13 @@ -// +// Генерация случайного числа var i: integer; r: real; begin i := Random(100); - writeln(' 0..99: ',i); + writeln('Случайное целое в диапазоне 0..99: ',i); i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); r := Random; - writeln(' [0,1): ',r); + writeln('Случайное вещественное в диапазоне [0,1): ',r); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Random2.pas b/TestSamples/FormatterTests/input/Random2.pas index 7e06c292a..edb94ebd9 100644 --- a/TestSamples/FormatterTests/input/Random2.pas +++ b/TestSamples/FormatterTests/input/Random2.pas @@ -1,10 +1,10 @@ -// +// Бросание кубиков var k1,k2: integer; begin k1 := Random(1,6); k2 := Random(1,6); - writeln(' : ',k1,' ',k2); - writeln(' : ',k1+k2); + writeln('Очки на кубиках: ',k1,' ',k2); + writeln('Сумма очков: ',k1+k2); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/RandomDiap.pas b/TestSamples/FormatterTests/input/RandomDiap.pas index c12b560b5..7bea343d6 100644 --- a/TestSamples/FormatterTests/input/RandomDiap.pas +++ b/TestSamples/FormatterTests/input/RandomDiap.pas @@ -1,5 +1,5 @@ -// +// Генерация случайного числа в заданном диапазоне begin var i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/RandomSearchTree.pas b/TestSamples/FormatterTests/input/RandomSearchTree.pas index 582be1db3..c0fd4a5d0 100644 --- a/TestSamples/FormatterTests/input/RandomSearchTree.pas +++ b/TestSamples/FormatterTests/input/RandomSearchTree.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева поиска uses GraphABC; type @@ -45,6 +45,6 @@ var begin for i:=1 to 30 do Add(t,Random(100)); - SetWindowCaption(' '); + SetWindowCaption('Двоичное дерево поиска'); DrawTree(t,WindowWidth div 2,10,WindowWidth div 4); end. diff --git a/TestSamples/FormatterTests/input/RandomSearchTreeU.pas b/TestSamples/FormatterTests/input/RandomSearchTreeU.pas index d08d5191c..555dc9aa7 100644 --- a/TestSamples/FormatterTests/input/RandomSearchTreeU.pas +++ b/TestSamples/FormatterTests/input/RandomSearchTreeU.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева поиска unit RandomSearchTreeU; uses GraphABC; @@ -47,6 +47,6 @@ var begin for i:=1 to 30 do Add(t,Random(100)); - SetWindowCaption(' '); + SetWindowCaption('Двоичное дерево поиска'); DrawTree(t,WindowWidth div 2,10,WindowWidth div 4); end. diff --git a/TestSamples/FormatterTests/input/ReadSignalTest.pas b/TestSamples/FormatterTests/input/ReadSignalTest.pas index b2b7bc3be..c67d01070 100644 --- a/TestSamples/FormatterTests/input/ReadSignalTest.pas +++ b/TestSamples/FormatterTests/input/ReadSignalTest.pas @@ -1,23 +1,23 @@ var s:string; i,j:integer; begin - write(' : '); + write('Введите строку: '); readln(s); - writeln(' : ',s); - write(' : '); + writeln('Вы ввели: ',s); + write('Введите число: '); readln(i); - writeln(' : ',i); + writeln('Вы ввели: ',i); i:=i div i; { ss 1 2 1 } - write(' : '); + write('Введите два числа: '); readln(i,j); - writeln(' : ',i,' ',j); + writeln('Вы ввели: ',i,' ',j); writeln('Sleep(1000)'); sleep(1000); - writeln(''); + writeln('Конец'); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/ReadSignalTest2.pas b/TestSamples/FormatterTests/input/ReadSignalTest2.pas index 6d774185d..b7195e88f 100644 --- a/TestSamples/FormatterTests/input/ReadSignalTest2.pas +++ b/TestSamples/FormatterTests/input/ReadSignalTest2.pas @@ -3,19 +3,19 @@ var s:string; i,j:integer; begin // i:=i div i; - write(' : '); + write('Введите строку: '); readln(s); - writeln(' : ',s); + writeln('Вы ввели: ',s); - write(' : '); + write('Введите число: '); readln(i); - writeln(' : ',i); + writeln('Вы ввели: ',i); - write(' : '); + write('Введите два числа: '); readln(i,j); - writeln(' : ',i,' ',j); + writeln('Вы ввели: ',i,' ',j); writeln('Sleep(1000)'); sleep(1000); - writeln(''); + writeln('Конец'); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/ReadString.pas b/TestSamples/FormatterTests/input/ReadString.pas index d3c73b506..a214b05b6 100644 --- a/TestSamples/FormatterTests/input/ReadString.pas +++ b/TestSamples/FormatterTests/input/ReadString.pas @@ -1,8 +1,8 @@ -// +// Ввод строки var s: string; begin - write(' : '); + write('Введите Ваше имя: '); readln(s); - writeln(', ',s); + writeln('Здравствуйте, ',s); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/RealExtNums.pas b/TestSamples/FormatterTests/input/RealExtNums.pas index 4bf290727..5e099f699 100644 --- a/TestSamples/FormatterTests/input/RealExtNums.pas +++ b/TestSamples/FormatterTests/input/RealExtNums.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(1/0); writeln(sqrt(-1)); diff --git a/TestSamples/FormatterTests/input/Records.pas b/TestSamples/FormatterTests/input/Records.pas index 26f54af7a..e95d97a88 100644 --- a/TestSamples/FormatterTests/input/Records.pas +++ b/TestSamples/FormatterTests/input/Records.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSamples/FormatterTests/input/References.pas b/TestSamples/FormatterTests/input/References.pas index 0f3c23c36..fabbe9d1f 100644 --- a/TestSamples/FormatterTests/input/References.pas +++ b/TestSamples/FormatterTests/input/References.pas @@ -1,5 +1,5 @@ -// -// +// Использование ссылок вместо указателей для создания односвязного списка +// Мы рекомендуем именно этот способ type Node = class data: integer; @@ -11,18 +11,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -30,6 +30,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/RobotAddTasks.pas b/TestSamples/FormatterTests/input/RobotAddTasks.pas index 04a3de795..6bf966b38 100644 --- a/TestSamples/FormatterTests/input/RobotAddTasks.pas +++ b/TestSamples/FormatterTests/input/RobotAddTasks.pas @@ -4,7 +4,7 @@ uses Robot,RobotTaskMaker; procedure my1; begin - TaskText(' my1. '); + TaskText('Задание my1. Закрасить помеченные клетки'); Field(15,11); RobotBeginEnd(1,1,15,11); Tag(8,6); diff --git a/TestSamples/FormatterTests/input/SY0008.pas b/TestSamples/FormatterTests/input/SY0008.pas index 49baefce7..bc04960f9 100644 --- a/TestSamples/FormatterTests/input/SY0008.pas +++ b/TestSamples/FormatterTests/input/SY0008.pas @@ -1,4 +1,4 @@ -// +//Ошибка при повторной компиляции uses SY0008_unit; var diff --git a/TestSamples/FormatterTests/input/Sets2.pas b/TestSamples/FormatterTests/input/Sets2.pas index 21022da8a..a404ba7bd 100644 --- a/TestSamples/FormatterTests/input/Sets2.pas +++ b/TestSamples/FormatterTests/input/Sets2.pas @@ -1,15 +1,15 @@ -// -// +// Работа с множествами +// Базовый тип для множества может быть произвольным var - s1: set of string := ['','','','']; - s2: set of string := ['','','']; + s1: set of string := ['Иванов','Попов','Сидорова','Петров']; + s2: set of string := ['Козлов','Петров','Иванов']; begin - writeln(' s1: ',s1); - writeln(' s2: ',s2); - writeln(' s1 s2: ',s1+s2); - writeln(' s1 s2: ',s1*s2); - writeln(' s1 s2: ',s1-s2); - Include(s1,''); - Exclude(s1,''); - writeln(' s1: ',s1); + writeln('Множество s1: ',s1); + writeln('Множество s2: ',s2); + writeln('Объединение множеств s1 и s2: ',s1+s2); + writeln('Пересечение множеств s1 и s2: ',s1*s2); + writeln('Разность множеств s1 и s2: ',s1-s2); + Include(s1,'Умнов'); + Exclude(s1,'Иванов'); + writeln('Множество s1: ',s1); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/SimpleNewFeatures.pas b/TestSamples/FormatterTests/input/SimpleNewFeatures.pas index 24bf8fb26..60cef0d77 100644 --- a/TestSamples/FormatterTests/input/SimpleNewFeatures.pas +++ b/TestSamples/FormatterTests/input/SimpleNewFeatures.pas @@ -1,27 +1,27 @@ -// PascalABC.NET +// Простейшие новые возможности языка PascalABC.NET -// +// Инициализация переменной при описании var i: integer := 1; -// +// Автоопределение типа переменной при инициализации var r := 2.5; begin - // + // Внутриблочные описания переменных var s: real := 1.0; - // ( - ) + // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) for j: integer := 1 to 10 do - s += j; // += + s += j; // Операция += для чисел var p := 1; - // + // Описание переменной в заголовке цикла с автоопределением типа for var j := 1 to 10 do - p *= j; // *= + p *= j; // Операция *= var str := ''; for c: char := 'a' to 'z' do - str += c; // += + str += c; // Операция += для строк end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Stack.pas b/TestSamples/FormatterTests/input/Stack.pas index dda2835c3..d818e96ea 100644 --- a/TestSamples/FormatterTests/input/Stack.pas +++ b/TestSamples/FormatterTests/input/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/TestSamples/FormatterTests/input/StandFun.pas b/TestSamples/FormatterTests/input/StandFun.pas index 369ddac57..5d820f901 100644 --- a/TestSamples/FormatterTests/input/StandFun.pas +++ b/TestSamples/FormatterTests/input/StandFun.pas @@ -1,14 +1,14 @@ -// +// Стандартные функции var x: real; begin - write(' x: '); + write('Введите x: '); readln(x); - writeln(' ',x,' ',sqr(x)); - writeln(x,' 5 ',power(x,5)); - writeln(' ',x,' ',sqrt(x)); - writeln(' ',x,' ',abs(x)); - writeln(' ',x,' ',ln(x)); - writeln(' ',x,' ',sin(x)); - writeln(' ',x,' ',cos(x)); + writeln('Квадрат ',x,' равен ',sqr(x)); + writeln(x,' в степени 5 равно ',power(x,5)); + writeln('Квадратный корень из ',x,' равен ',sqrt(x)); + writeln('Модуль ',x,' равен ',abs(x)); + writeln('Натуральный логарифм ',x,' равен ',ln(x)); + writeln('Синус ',x,' равен ',sin(x)); + writeln('Косинус ',x,' равен ',cos(x)); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/StandardTypes.pas b/TestSamples/FormatterTests/input/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/TestSamples/FormatterTests/input/StandardTypes.pas +++ b/TestSamples/FormatterTests/input/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/TestSamples/FormatterTests/input/StringInteger.pas b/TestSamples/FormatterTests/input/StringInteger.pas index 60f5db050..ce86a50a3 100644 --- a/TestSamples/FormatterTests/input/StringInteger.pas +++ b/TestSamples/FormatterTests/input/StringInteger.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/StringMethods.pas b/TestSamples/FormatterTests/input/StringMethods.pas index 69cf7ddb1..609eb8234 100644 --- a/TestSamples/FormatterTests/input/StringMethods.pas +++ b/TestSamples/FormatterTests/input/StringMethods.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/StringPlus.pas b/TestSamples/FormatterTests/input/StringPlus.pas index d301057c1..f267a010f 100644 --- a/TestSamples/FormatterTests/input/StringPlus.pas +++ b/TestSamples/FormatterTests/input/StringPlus.pas @@ -1,4 +1,4 @@ -// +// Сложение строк var s1: string := 'Pascal'; var s2: string := 'NET'; diff --git a/TestSamples/FormatterTests/input/StringTypes.pas b/TestSamples/FormatterTests/input/StringTypes.pas index 4cb3e8a0f..7e89b95d1 100644 --- a/TestSamples/FormatterTests/input/StringTypes.pas +++ b/TestSamples/FormatterTests/input/StringTypes.pas @@ -1,17 +1,17 @@ -// string, string[n], shortstring +// Строки string, string[n], shortstring var - s: string; // , s, - s10: string[10]; // ss + s: string; // память, занимаемая s, зависит от ее длины + s10: string[10]; // память под ss фиксирована ss: shortstring := s; f: file of string[10]; - // f: file of string; - + // f: file of string; - ошибка begin s := '12345678901234567890'; - s10 := s; // + s10 := s; // обрезание writeln(s10); s += s; s += s; s += s; s += s; writeln(s); - writeln(' = ',s.Length); + writeln('Длина строки = ',s.Length); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/StructTypeEquiv.pas b/TestSamples/FormatterTests/input/StructTypeEquiv.pas index 2dec49906..8648f73fd 100644 --- a/TestSamples/FormatterTests/input/StructTypeEquiv.pas +++ b/TestSamples/FormatterTests/input/StructTypeEquiv.pas @@ -1,4 +1,4 @@ -// . Delphi - +// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность var a: array of integer; a1: array of integer; @@ -18,6 +18,6 @@ begin a := a1; s := s1; p := p1; - r := r1; // Delphi - proc(a,s,p,r); // - + r := r1; // В Delphi ни одно из этих присваиваний не сработает + proc(a,s,p,r); // Этот вызов - тоже end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Students.pas b/TestSamples/FormatterTests/input/Students.pas index 564529f3c..bae1edb76 100644 --- a/TestSamples/FormatterTests/input/Students.pas +++ b/TestSamples/FormatterTests/input/Students.pas @@ -1,4 +1,4 @@ -// +//Перегрузка операторов type Student = class Name: string; diff --git a/TestSamples/FormatterTests/input/SwapT.pas b/TestSamples/FormatterTests/input/SwapT.pas index 906247f7a..645e791bf 100644 --- a/TestSamples/FormatterTests/input/SwapT.pas +++ b/TestSamples/FormatterTests/input/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,13 +11,13 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); var c := 2.5; var d := 3.3; writeln; - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('До Swap c={0}, d={1}',c,d); Swap(c,d); - writelnFormat(' Swap c={0}, d={1}',c,d); + writelnFormat('После Swap c={0}, d={1}',c,d); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/SystemUnitTest.pas b/TestSamples/FormatterTests/input/SystemUnitTest.pas index d05210d39..262e7f035 100644 --- a/TestSamples/FormatterTests/input/SystemUnitTest.pas +++ b/TestSamples/FormatterTests/input/SystemUnitTest.pas @@ -1,12 +1,12 @@ -// uses, PABCSystem +// Иллюстрация поиска имен вначале справа налево в секции uses, а затем в системном модуле PABCSystem uses System; begin - // Random, System, Random - // PABCSystem, + // Имя Random, определенное в пространстве имен System, перекрывает имя Random + // в модуле PABCSystem, который неявно подключается первым var r: Random := new Random(); writeln(r.Next(10)); - // Random , + // Именно поэтому перед данным Random необходимо явно указывать имя модуля, в котором он находится var i: integer := PABCSystem.Random(10); writeln(i); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/TTimer.pas b/TestSamples/FormatterTests/input/TTimer.pas index 18252f2d3..706589e61 100644 --- a/TestSamples/FormatterTests/input/TTimer.pas +++ b/TestSamples/FormatterTests/input/TTimer.pas @@ -1,4 +1,4 @@ -// +//Тест интерфейсов и делегатов uses System, System.Timers; diff --git a/TestSamples/FormatterTests/input/Template.pas b/TestSamples/FormatterTests/input/Template.pas index 3e8257ca5..5b301a607 100644 --- a/TestSamples/FormatterTests/input/Template.pas +++ b/TestSamples/FormatterTests/input/Template.pas @@ -23,8 +23,8 @@ var a,b: Pair; begin - a := new Pair(1, ' '); - b := new Pair(2, ''); + a := new Pair(1, 'один '); + b := new Pair(2, 'два'); Writeln(a + b); readln; end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/TextEditor.pas b/TestSamples/FormatterTests/input/TextEditor.pas index 7ef481b8c..f1e3e361c 100644 --- a/TestSamples/FormatterTests/input/TextEditor.pas +++ b/TestSamples/FormatterTests/input/TextEditor.pas @@ -8,7 +8,7 @@ uses System.Windows.Forms; const TextFileExt = 'txt'; - TextFileFilter = ' (*.'+TextFileExt+')|*.'+TextFileExt; + TextFileFilter = 'Текстовые файлы (*.'+TextFileExt+')|*.'+TextFileExt; var myForm: Form; @@ -17,7 +17,7 @@ var procedure SaveFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default); f.Write(TextBox1.Text); f.Close; @@ -25,7 +25,7 @@ end; procedure OpenFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default); TextBox1.Text := f.ReadToEnd; f.Close; @@ -39,14 +39,14 @@ end; procedure MenuSaveClick(sender:object; args:System.EventArgs); begin - // + //Диалог для выбора файла var sd := new SaveFileDialog; - // + //Расширение поумолчанию sd.DefaultExt := TextFileExt; - // + //Фильтр для диалга sd.Filter := TextFileFilter; if sd.ShowDialog=DialogResult.OK then - // sd.ShowDialog + //если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то SaveFile(sd.FileName); end; @@ -61,31 +61,31 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Простой текстовый редактор'; TextBox1 := new TextBox; TextBox1.Multiline := true; TextBox1.Height := 100; TextBox1.Dock := DockStyle.Fill; - // + //Полосы прокрутки TextBox1.ScrollBars := ScrollBars.Both; - // + //Устанавливаем шрифт TextBox1.Font := new System.Drawing.Font('Courier New',10); myForm.Controls.Add(TextBox1); - // + //Создаем меню var toolStrip1 := new ToolStrip; toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden; - var miFile := new ToolStripMenuItem(''); - miFile.DropDownItems.Add(new ToolStripMenuItem('', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem(' ...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('',nil,FormClose)); + var miFile := new ToolStripMenuItem('Файл'); + miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose)); toolStrip1.Items.Add(miFile); myForm.Controls.Add(toolStrip1); - // - // = 1, + //Посмотрим в аргументы командной строки + //Если их количество = 1, то открываем if CommandLineArgs.Length = 1 then OpenFile(CommandLineArgs[0]); diff --git a/TestSamples/FormatterTests/input/Timer2.pas b/TestSamples/FormatterTests/input/Timer2.pas index a4e2bb7e6..86d6eb326 100644 --- a/TestSamples/FormatterTests/input/Timer2.pas +++ b/TestSamples/FormatterTests/input/Timer2.pas @@ -1,4 +1,4 @@ -// "". . +// "Собачка". Иллюстрация использования таймера. uses GraphABC, Timers; var @@ -51,7 +51,7 @@ begin end; begin - SetWindowCaption('""'); + SetWindowCaption('"Собачка"'); OnMouseMove:=MouseMove; xx:=100; yy:=100; px:=xx; py:=yy; diff --git a/TestSamples/FormatterTests/input/TreeDraw.pas b/TestSamples/FormatterTests/input/TreeDraw.pas index a47b69373..c595aa5b7 100644 --- a/TestSamples/FormatterTests/input/TreeDraw.pas +++ b/TestSamples/FormatterTests/input/TreeDraw.pas @@ -1,10 +1,10 @@ -// +// Рекурсивное рисование двоичного дерева uses GraphABC; const dy=60; procedure DrawTree(x,y,dx,level: integer); -// : , , +// обход: левое, корень, правое begin if level=0 then Exit; DrawTree(x-dx,y+dy,dx div 2,level-1); diff --git a/TestSamples/FormatterTests/input/TryExcept1.pas b/TestSamples/FormatterTests/input/TryExcept1.pas index 0c56f079a..73f5e3b2e 100644 --- a/TestSamples/FormatterTests/input/TryExcept1.pas +++ b/TestSamples/FormatterTests/input/TryExcept1.pas @@ -3,7 +3,7 @@ begin writeln(1); raise new Exception('xxx'); except - writeln('!'); + writeln('Исключение!'); end; readln; end. diff --git a/TestSamples/FormatterTests/input/TryExcept2.pas b/TestSamples/FormatterTests/input/TryExcept2.pas index 31f361281..274631f24 100644 --- a/TestSamples/FormatterTests/input/TryExcept2.pas +++ b/TestSamples/FormatterTests/input/TryExcept2.pas @@ -4,7 +4,7 @@ begin raise new Exception('xxx'); except on e:Exception do - writeln(': ',e); + writeln('Исключение: ',e); end; readln; end. diff --git a/TestSamples/FormatterTests/input/TryFinally.pas b/TestSamples/FormatterTests/input/TryFinally.pas index 3fc2c62fa..b5a9ed7fa 100644 --- a/TestSamples/FormatterTests/input/TryFinally.pas +++ b/TestSamples/FormatterTests/input/TryFinally.pas @@ -1,9 +1,9 @@ -// finally - , +// Иллюстрация finally - срабатывает независимо от того, произошло исключение или нет begin try if Random(2)=1 then - raise Exception.Create('-!'); + raise Exception.Create('Ку-ку!'); finally write(1); readln; diff --git a/TestSamples/FormatterTests/input/UntypedFile.pas b/TestSamples/FormatterTests/input/UntypedFile.pas index c49eaa091..24bb11de5 100644 --- a/TestSamples/FormatterTests/input/UntypedFile.pas +++ b/TestSamples/FormatterTests/input/UntypedFile.pas @@ -1,4 +1,4 @@ -// +// Бестиповые файлы var f: file; i: integer; @@ -8,11 +8,11 @@ var begin assign(f,'a.dat'); rewrite(f); - // + // Записываем в файл данные любых типов write(f,1,2.5,'Hello'); close(f); reset(f); - // + // Считываем эти данные из файла read(f,i,r,s); write(i,' ',r,' ',s); close(f); diff --git a/TestSamples/FormatterTests/input/UpLowCase.pas b/TestSamples/FormatterTests/input/UpLowCase.pas index 24b122fd6..ae41aac8d 100644 --- a/TestSamples/FormatterTests/input/UpLowCase.pas +++ b/TestSamples/FormatterTests/input/UpLowCase.pas @@ -1,4 +1,4 @@ -// UpCase LowCase UpperCase LowerCase +// Функции UpCase LowCase UpperCase LowerCase var c: char; s: string; @@ -10,13 +10,13 @@ begin for c:='A' to 'Z' do write(LowCase(c)); writeln; - for c:='' to '' do + for c:='А' to 'Я' do write(UpCase(c)); writeln; - for c:='' to '' do + for c:='а' to 'я' do write(LowCase(c)); writeln; - s:=' '; + s:='Папа у Васи силён в математике'; s:=UpperCase(s); writeln(s); s:=LowerCase(s); diff --git a/TestSamples/FormatterTests/input/VPNController.pas b/TestSamples/FormatterTests/input/VPNController.pas index 5950045fb..0c0657059 100644 --- a/TestSamples/FormatterTests/input/VPNController.pas +++ b/TestSamples/FormatterTests/input/VPNController.pas @@ -18,7 +18,7 @@ begin Writeln(Pr.StandardOutput.ReadToEnd); //Pr.WaitForExit(); except - Writeln(': ' + Command); + Writeln('Ошибка: Не могу выполнить ' + Command); end; end; @@ -80,22 +80,22 @@ begin exit; end; while true do begin - SleepSEC(CheckPeriod,' {0} '); + SleepSEC(CheckPeriod,'Следующая проверка через {0} секунд'); if not PingAdress(VPNIP) then begin if not PingAdress(IP) then begin Writeln; - WritelnWithTime(' .. '+ IP); + WritelnWithTime('Невозможно восстановить связть т.к. отуствует доступ к удаленному узлу '+ IP); end else begin Writeln; - WritelnWithTime(' ' + VPNIP); - WritelnWithTime(' '+ServiceName+'...'); + WritelnWithTime('Нет связи с узлом ' + VPNIP); + WritelnWithTime('Перзапускаю '+ServiceName+'...'); StartAndWait('NET','STOP '+ServiceName); - SleepSEC(VPNRestartWait,' '+ServiceName+'... {0}'); + SleepSEC(VPNRestartWait,'Ожидаю запуска '+ServiceName+'... {0}'); Writeln; StartAndWait('NET','START '+ServiceName); end; end else begin - WriteWithTime(' '); + WriteWithTime('Все в норме'); end; end; end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/Where.pas b/TestSamples/FormatterTests/input/Where.pas index 872cf309b..4b932d35a 100644 --- a/TestSamples/FormatterTests/input/Where.pas +++ b/TestSamples/FormatterTests/input/Where.pas @@ -1,4 +1,4 @@ -// Where - +// Секция Where - ограничение на типы параметров uses System,System.Collections.Generic; type @@ -15,7 +15,7 @@ type var m: MyClass; - //m1: MyClass; // + //m1: MyClass; // ошибка begin end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/WinFormWithButton.pas b/TestSamples/FormatterTests/input/WinFormWithButton.pas index 9bf65a198..4b21fb94c 100644 --- a/TestSamples/FormatterTests/input/WinFormWithButton.pas +++ b/TestSamples/FormatterTests/input/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения #apptype windows #reference 'System.Windows.Forms.dll' @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/TestSamples/FormatterTests/input/WriteAll.pas b/TestSamples/FormatterTests/input/WriteAll.pas index 9aade8ace..7b9ca40ce 100644 --- a/TestSamples/FormatterTests/input/WriteAll.pas +++ b/TestSamples/FormatterTests/input/WriteAll.pas @@ -1,12 +1,12 @@ -/// write +/// Вывод различных типов процедурой write begin - // , , , + // Вывод, целого, строки, вещественного Writeln(1,' ',2.5); - // + // Вывод множества Writeln([1..10]); - // + // Вывод логического Writeln(True); var a: array [1..10] of integer; - // ( ) + // Вывод массива (выводится его тип) Writeln(a); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/WriteFormat.pas b/TestSamples/FormatterTests/input/WriteFormat.pas index 12be8c1c3..81b23cce6 100644 --- a/TestSamples/FormatterTests/input/WriteFormat.pas +++ b/TestSamples/FormatterTests/input/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); - // + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/WriteFormat2.pas b/TestSamples/FormatterTests/input/WriteFormat2.pas index 7e060018f..a6ea0c119 100644 --- a/TestSamples/FormatterTests/input/WriteFormat2.pas +++ b/TestSamples/FormatterTests/input/WriteFormat2.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); - // + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/WriteRecord.pas b/TestSamples/FormatterTests/input/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/TestSamples/FormatterTests/input/WriteRecord.pas +++ b/TestSamples/FormatterTests/input/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSamples/FormatterTests/input/anim_nonblinking.pas b/TestSamples/FormatterTests/input/anim_nonblinking.pas index 3762042b1..3f3620766 100644 --- a/TestSamples/FormatterTests/input/anim_nonblinking.pas +++ b/TestSamples/FormatterTests/input/anim_nonblinking.pas @@ -8,10 +8,10 @@ begin for i:=1 to 500 do begin SetBrushColor(clGreen); - FillEllipse(i,100,i+100,200); + FillEllipse(i,100,i흍,200); Redraw; Sleep(1); SetBrushColor(clWhite); - FillRect(i,100,i+100,200); + FillRect(i,100,i흍,200); end; end. diff --git a/TestSamples/FormatterTests/input/animals.pas b/TestSamples/FormatterTests/input/animals.pas index 99bd5f292..e72ea0d1a 100644 --- a/TestSamples/FormatterTests/input/animals.pas +++ b/TestSamples/FormatterTests/input/animals.pas @@ -46,10 +46,10 @@ begin end; begin - writeln(' '); + writeln('Загадайте животное'); assign(f, 'animals_data.txt'); if not FileExists('animals_data.txt') then - root := new TNode('') + root := new TNode('Собака') else begin reset(f); @@ -68,15 +68,15 @@ begin p:=p.right end; - write(' '+p.s+'? '); + write('Это '+p.s+'? '); readln(x); if x=1 then - writeln(' !') + writeln('Я угадала!') else begin - write(' . ? '); + write('Я проиграла. Что это за животное? '); readln(s); - write(' , '+p.s+': '); + write('Введите вопрос, отличающий это животное от '+p.s+': '); readln(q); p1 := new TNode(s); p2 := new TNode(p.s); diff --git a/TestSamples/FormatterTests/input/arr_test4.pas b/TestSamples/FormatterTests/input/arr_test4.pas index 028d688ff..3a848aef7 100644 --- a/TestSamples/FormatterTests/input/arr_test4.pas +++ b/TestSamples/FormatterTests/input/arr_test4.pas @@ -1,9 +1,9 @@ -var work,work1: array [''..''] of integer; +var work,work1: array ['а'..'я'] of integer; begin - work['']:=1; + work['а']:=1; work1:=work; - writeln(work1['']); + writeln(work1['а']); readln; end. diff --git a/TestSamples/FormatterTests/input/balls.pas b/TestSamples/FormatterTests/input/balls.pas index 929ef6f78..0deebc050 100644 --- a/TestSamples/FormatterTests/input/balls.pas +++ b/TestSamples/FormatterTests/input/balls.pas @@ -1,5 +1,5 @@ -// -// CRT, , +// Блуждание мячиков по полю +// Работа с модулем CRT, наследование, полиморфизм uses CRT; diff --git a/TestSamples/FormatterTests/input/balls1.pas b/TestSamples/FormatterTests/input/balls1.pas index 18c49d638..71e30129a 100644 --- a/TestSamples/FormatterTests/input/balls1.pas +++ b/TestSamples/FormatterTests/input/balls1.pas @@ -1,5 +1,5 @@ -// -// CRT, , +// Блуждание мячиков по полю +// Работа с модулем CRT, наследование, полиморфизм uses CRT; diff --git a/TestSamples/FormatterTests/input/battle.pas b/TestSamples/FormatterTests/input/battle.pas index d8078806d..651ccd80f 100644 --- a/TestSamples/FormatterTests/input/battle.pas +++ b/TestSamples/FormatterTests/input/battle.pas @@ -1,34 +1,34 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи c : color; public CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); @@ -161,17 +161,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -196,7 +196,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -205,14 +205,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].MinFood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -251,35 +251,35 @@ SetSmoothing(False); SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); -SetWindowCaption(' '); +SetWindowCaption('Битва за жизнь'); SetFontSize(7); SetFontName('Arial'); SetBrushColor(BkColor); FillRectangle(0, 0, Width, Height); SetFontColor(clWhite); -TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); -TextOut(10, ymax + 20+1*18, ' . - '); -TextOut(10, ymax + 20+2*18, ' . , .'); -TextOut(10, ymax + 20+3*18, ' : - , , ,'); -TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); -TextOut(10, ymax + 20+5*18, ' , ; - , .'); +TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); +TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); +TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); +TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); +TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); +TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; -//c - . -//CanRazm - -// . -//MaxKol - . -//Kol - . -//MaxLife - . -// , , , . -//MinFood - , -// ( ; -1). -//Speed - . 2 . -//See - - . +//c - цвет. +//CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя +// её последовательными размножениями. +//MaxKol - максимально допустимое количество рыб данного вида. +//Kol - количество рыб данного вида в текущий момент времени. +//MaxLife - максимальная продолжительность жизни. +// После того, как рыба сделает больше шагов, чем это число, она умирает. +//MinFood - минимальное количество съеденных жертв, необходимое для размножения +// (только для хищников; для жертв это количество принято за -1). +//Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. +//See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -289,7 +289,7 @@ opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); -// +//Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -302,7 +302,7 @@ p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); -// , - . +//И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; //i:=0;c:=getallcount;LockDrawing; repeat diff --git a/TestSamples/FormatterTests/input/battle2.pas b/TestSamples/FormatterTests/input/battle2.pas index 984615c76..be644a465 100644 --- a/TestSamples/FormatterTests/input/battle2.pas +++ b/TestSamples/FormatterTests/input/battle2.pas @@ -1,33 +1,33 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; c:color; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -37,15 +37,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -79,7 +79,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -94,19 +94,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var i, imin: integer; dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -115,11 +115,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -137,10 +137,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if (d < dmin) and (abs(dx0 - t.dx0) < epsustupi) and @@ -157,17 +157,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -191,7 +191,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -200,14 +200,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -234,35 +234,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); -SetWindowCaption(' '); +SetWindowCaption('Битва за жизнь'); SetFontSize(10); SetFontName('Arial'); SetBrushColor(BkColor); FillRect(0, 0, Width + 2000, Height + 1500); SetFontColor(clWhite); -TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); -TextOut(10, ymax + 20+1*18, ' . - '); -TextOut(10, ymax + 20+2*18, ' . , .'); -TextOut(10, ymax + 20+3*18, ' : - , , ,'); -TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); -TextOut(10, ymax + 20+5*18, ' , ; - , .'); +TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); +TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); +TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); +TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); +TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); +TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; -//c - . -//CanRazm - -// . -//MaxKol - . -//Kol - . -//MaxLife - . -// , , , . -//MinFood - , -// ( ; -1). -//Speed - . 2 . -//See - - . +//c - цвет. +//CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя +// её последовательными размножениями. +//MaxKol - максимально допустимое количество рыб данного вида. +//Kol - количество рыб данного вида в текущий момент времени. +//MaxLife - максимальная продолжительность жизни. +// После того, как рыба сделает больше шагов, чем это число, она умирает. +//MinFood - минимальное количество съеденных жертв, необходимое для размножения +// (только для хищников; для жертв это количество принято за -1). +//Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. +//See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -272,7 +272,7 @@ opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); -// +//Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -285,7 +285,7 @@ p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); -// , - . +//И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; repeat tek:= tek.next; diff --git a/TestSamples/FormatterTests/input/battle2u.pas b/TestSamples/FormatterTests/input/battle2u.pas index a82ad646e..d7afff5ea 100644 --- a/TestSamples/FormatterTests/input/battle2u.pas +++ b/TestSamples/FormatterTests/input/battle2u.pas @@ -1,34 +1,34 @@ unit battle2u; uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; c:color; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var i, imin: integer; dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if (d < dmin) and (abs(dx0 - t.dx0) < epsustupi) and @@ -158,17 +158,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -192,7 +192,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -201,14 +201,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -235,35 +235,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); -SetWindowCaption(' '); +SetWindowCaption('Битва за жизнь'); SetFontSize(10); SetFontName('Arial'); SetBrushColor(BkColor); FillRect(0, 0, Width + 2000, Height + 1500); SetFontColor(clWhite); -TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); -TextOut(10, ymax + 20+1*18, ' . - '); -TextOut(10, ymax + 20+2*18, ' . , .'); -TextOut(10, ymax + 20+3*18, ' : - , , ,'); -TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); -TextOut(10, ymax + 20+5*18, ' , ; - , .'); +TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); +TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); +TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); +TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); +TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); +TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; -//c - . -//CanRazm - -// . -//MaxKol - . -//Kol - . -//MaxLife - . -// , , , . -//MinFood - , -// ( ; -1). -//Speed - . 2 . -//See - - . +//c - цвет. +//CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя +// её последовательными размножениями. +//MaxKol - максимально допустимое количество рыб данного вида. +//Kol - количество рыб данного вида в текущий момент времени. +//MaxLife - максимальная продолжительность жизни. +// После того, как рыба сделает больше шагов, чем это число, она умирает. +//MinFood - минимальное количество съеденных жертв, необходимое для размножения +// (только для хищников; для жертв это количество принято за -1). +//Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. +//See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -273,7 +273,7 @@ opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); -// +//Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -286,7 +286,7 @@ p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); -// , - . +//И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; repeat tek:= tek.next; diff --git a/TestSamples/FormatterTests/input/brown_moving1.pas b/TestSamples/FormatterTests/input/brown_moving1.pas index c78e72dd8..14c10d41b 100644 --- a/TestSamples/FormatterTests/input/brown_moving1.pas +++ b/TestSamples/FormatterTests/input/brown_moving1.pas @@ -1,4 +1,4 @@ -// +// Броуновское движение uses GraphABC; var x,y: integer; @@ -18,7 +18,7 @@ var i: integer; const len=3; begin - SetWindowCaption(' '); + SetWindowCaption('Броуновское движение'); SetWindowSize(640,480); SetBrushColor(clBlack); FillRect(0,0,WindowWidth div 2,WindowHeight-1); @@ -26,15 +26,15 @@ begin x:=Windowwidth div 2; y:=WindowHeight div 2; { Sleep(1000);} - TextOut(5,5,'!'); + TextOut(5,5,'Начало!'); MoveTo(x,y); for i:=1 to 100000 do begin // if i mod 5 = 0 then Sleep(1); - if i mod 1000 = 0 then TextOut(5,25,IntToStr(i)+' '); + if i mod 1000 = 0 then TextOut(5,25,IntToStr(i)+' итераций'); SetPenColor(RGB(Random(256),Random(256),Random(256))); LineOn(Random(2*len+1)-len,Random(2*len+1)-len) end; - TextOut(5,45,'!'); + TextOut(5,45,'Конец!'); // writeln(Milliseconds); end. diff --git a/TestSamples/FormatterTests/input/classlist.pas b/TestSamples/FormatterTests/input/classlist.pas index 84371952b..4909025e1 100644 --- a/TestSamples/FormatterTests/input/classlist.pas +++ b/TestSamples/FormatterTests/input/classlist.pas @@ -1,4 +1,4 @@ -// +// Демонстрация класса односвязного списка целых с внутренним итератором uses System; type diff --git a/TestSamples/FormatterTests/input/classlist2.pas b/TestSamples/FormatterTests/input/classlist2.pas index 282321db7..4d52b826e 100644 --- a/TestSamples/FormatterTests/input/classlist2.pas +++ b/TestSamples/FormatterTests/input/classlist2.pas @@ -1,4 +1,4 @@ -// +// Демонстрация класса односвязного списка целых с внутренним итератором //using System; type ttest = class diff --git a/TestSamples/FormatterTests/input/del1.pas b/TestSamples/FormatterTests/input/del1.pas index 05ca9202f..6e6b5b647 100644 --- a/TestSamples/FormatterTests/input/del1.pas +++ b/TestSamples/FormatterTests/input/del1.pas @@ -1,4 +1,4 @@ -// PCU +//Тест делегатов с использованием PCU uses del1_u, del1_u2; @@ -16,6 +16,6 @@ begin PrintEvent += MyProc; PrintEvent += MyProc2; PrintEvent += MyProc3; - PrintEvent(20); // 20, 40, 60 + PrintEvent(20); //Выведет 20, 40, 60 readln; end. diff --git a/TestSamples/FormatterTests/input/figures.pas b/TestSamples/FormatterTests/input/figures.pas index 23748806c..4e32886ff 100644 --- a/TestSamples/FormatterTests/input/figures.pas +++ b/TestSamples/FormatterTests/input/figures.pas @@ -1,6 +1,6 @@ -// . -// . -// . +// Демонстрация полиморфизма. +// Многократное вложение контейнеров друг в друга. +// Клонирование объектов. uses GraphABC; type @@ -156,7 +156,7 @@ var begin SetWindowSize(800,400); - SetWindowCaption(''); + SetWindowCaption('Фигуры'); Glaz:=FigureContainer.Create; Glaz.Add(RectG.Create(0,0,70,70)); @@ -178,7 +178,7 @@ begin FC1.MoveCoords(400,0); FC1.Show; -// Glaz.Destroy; - , FC FC1 +// Glaz.Destroy; - не надо, это делают FC и FC1 // Glaz1.Destroy; FC.Destroy; FC1.Destroy; diff --git a/TestSamples/FormatterTests/input/files.pas b/TestSamples/FormatterTests/input/files.pas index 7c4298049..62050f464 100644 --- a/TestSamples/FormatterTests/input/files.pas +++ b/TestSamples/FormatterTests/input/files.pas @@ -1,10 +1,10 @@ -// +//Работа с текстовыми файлами var f : Text; s : string; begin AssignFile(f,'output.txt'); Rewrite(f); - writeln(f,' '); + writeln(f,'Это текстовый файл '); writeln(f,235); writeln(f,3.14); writeln(f,'string'); diff --git a/TestSamples/FormatterTests/input/for_test3.pas b/TestSamples/FormatterTests/input/for_test3.pas index ed502f983..966f280b2 100644 --- a/TestSamples/FormatterTests/input/for_test3.pas +++ b/TestSamples/FormatterTests/input/for_test3.pas @@ -1,6 +1,6 @@ var i: integer; -// ! +//Работает верно! begin i:= 10; diff --git a/TestSamples/FormatterTests/input/forw1.pas b/TestSamples/FormatterTests/input/forw1.pas index 156f988e3..8285945ac 100644 --- a/TestSamples/FormatterTests/input/forw1.pas +++ b/TestSamples/FormatterTests/input/forw1.pas @@ -1,4 +1,4 @@ -// forward- +// forward-объявления для локальных подпрограмм запрещены procedure f(i:integer); forward; procedure f(i: integer); diff --git a/TestSamples/FormatterTests/input/gr2.pas b/TestSamples/FormatterTests/input/gr2.pas index 1fdd1d26f..ec66f94c1 100644 --- a/TestSamples/FormatterTests/input/gr2.pas +++ b/TestSamples/FormatterTests/input/gr2.pas @@ -18,6 +18,6 @@ begin Brush.Color := clRandom; Rectangle(10,10,500,400); end; - TextOut(10,10,'');} + TextOut(10,10,'Конец');} end. diff --git a/TestSamples/FormatterTests/input/gr_ButtonProba.pas b/TestSamples/FormatterTests/input/gr_ButtonProba.pas index b632c0ebe..6ba2546a5 100644 --- a/TestSamples/FormatterTests/input/gr_ButtonProba.pas +++ b/TestSamples/FormatterTests/input/gr_ButtonProba.pas @@ -4,12 +4,12 @@ var b: ButtonABC; procedure Click; begin - b.Text:='!'; + b.Text:='Нажали!'; end; begin - b:=ButtonABC.Create(10,10,240,'12345678901234567',clMoneyGreen); - b := new ButtonABC(10,10,240,'12345678901234567',clMoneyGreen); + b:=ButtonABC.Create(10,10,240,'Кнопка12345678901234567',clMoneyGreen); + b := new ButtonABC(10,10,240,'Кнопка12345678901234567',clMoneyGreen); b.OnClick:=Click; end. diff --git a/TestSamples/FormatterTests/input/gr_Move_Param.pas b/TestSamples/FormatterTests/input/gr_Move_Param.pas index 06afff757..4a268a1d9 100644 --- a/TestSamples/FormatterTests/input/gr_Move_Param.pas +++ b/TestSamples/FormatterTests/input/gr_Move_Param.pas @@ -1,4 +1,4 @@ -// +// Движение по траектории uses ABCObjects,GraphABC; const @@ -11,7 +11,7 @@ type x,y: real; end; -function Position(t: real): PointR; // +function Position(t: real): PointR; // астроида var si,co: real; begin si := sin(1.5 * t); @@ -20,7 +20,7 @@ begin Result.y := co*co*co; end; -function Position1(t: real): PointR; // +function Position1(t: real): PointR; // фигура Лиссажу begin Result.x := cos(4*t); Result.y := cos(2.97221*t + 2*Pi/3); @@ -49,7 +49,7 @@ var t: real; begin - SetWindowCaption(' '); + SetWindowCaption('Движение по траектории'); SetWindowSize(640,480); CenterWindow; diff --git a/TestSamples/FormatterTests/input/gr_Move_Param_my.pas b/TestSamples/FormatterTests/input/gr_Move_Param_my.pas index bebb0cee0..988aef822 100644 --- a/TestSamples/FormatterTests/input/gr_Move_Param_my.pas +++ b/TestSamples/FormatterTests/input/gr_Move_Param_my.pas @@ -1,4 +1,4 @@ -// +// Движение по траектории uses ABCObjects,GraphABC; const @@ -10,7 +10,7 @@ type x,y: real; end; -function Position(t: real): PointR; // +function Position(t: real): PointR; // астроида var si,co: real; begin si := sin(1.5 * t); @@ -19,7 +19,7 @@ begin Result.y := co*co*co; end; -function Position1(t: real): PointR; // +function Position1(t: real): PointR; // фигура Лиссажу begin Result.x := cos(4*t); Result.y := cos(2.97221*t + 2*Pi/3); @@ -48,7 +48,7 @@ var t: real; begin - SetWindowCaption(' '); + SetWindowCaption('Движение по траектории'); SetWindowSize(800,600); CenterWindow; diff --git a/TestSamples/FormatterTests/input/gr_MovingObjects.pas b/TestSamples/FormatterTests/input/gr_MovingObjects.pas index 7e190ea83..bdcc2032d 100644 --- a/TestSamples/FormatterTests/input/gr_MovingObjects.pas +++ b/TestSamples/FormatterTests/input/gr_MovingObjects.pas @@ -25,7 +25,7 @@ var i: integer; begin - SetWindowCaption(' '); + SetWindowCaption('Движущиеся объекты'); //SetSmoothingOff; LockDrawingObjects; for i:=1 to n do diff --git a/TestSamples/FormatterTests/input/gradient.pas b/TestSamples/FormatterTests/input/gradient.pas index e80965ac9..9ef9c6ad7 100644 --- a/TestSamples/FormatterTests/input/gradient.pas +++ b/TestSamples/FormatterTests/input/gradient.pas @@ -1,4 +1,4 @@ -// . . +// Градиентная заливка. Выполнена интерполяцией по каждой составляющей цвета. uses GraphABC; var i,j: integer; @@ -12,7 +12,7 @@ begin end; begin - SetWindowCaption(''); + SetWindowCaption('Градиент'); SetWindowSize(256*3,400); r[0]:=255; diff --git a/TestSamples/FormatterTests/input/gradient2.pas b/TestSamples/FormatterTests/input/gradient2.pas index c5a15ba59..8dff0d651 100644 --- a/TestSamples/FormatterTests/input/gradient2.pas +++ b/TestSamples/FormatterTests/input/gradient2.pas @@ -1,4 +1,4 @@ -// . . +// Градиентная заливка. Выполнена интерполяцией по каждой составляющей цвета. uses GraphABC; var i,j: integer; @@ -31,7 +31,7 @@ begin LinearInterp(0,255,g[j],g[(j+1) mod 3],i), LinearInterp(0,255,b[j],b[(j+1) mod 3],i)); - SetWindowCaption(''); + SetWindowCaption('Градиент'); SetWindowSize(256*3,400); LockDrawing; for i:=0 to 256*3 do diff --git a/TestSamples/FormatterTests/input/graphic2.pas b/TestSamples/FormatterTests/input/graphic2.pas index 63a899bb5..7c4d0b439 100644 --- a/TestSamples/FormatterTests/input/graphic2.pas +++ b/TestSamples/FormatterTests/input/graphic2.pas @@ -1,6 +1,6 @@ -// drawGraph -// OY -// +// Процедура drawGraph рисования графика функции в полном окне +// с масштабированием по оси OY +// Перерисовывает график при изменении размеров окна uses GraphABC; type FUN = function (x: real): real; @@ -10,8 +10,8 @@ begin f:=x*sin(x)*exp(-0.1*x); end; -// l (logical) - -// s (screen) - +// l (logical) - логические координаты +// s (screen) - физические координаты procedure drawGraph(x1,x2: real; f: FUN); var xl,xl0,wl,yl,yl0,hl: real; @@ -74,7 +74,7 @@ end; begin SetWindowSize(800,600); LockDrawing; - SetWindowCaption(' : '); + SetWindowCaption('График функции: масштабирование'); drawGraph(0,60,f); Redraw; // OnResize:=Resize; diff --git a/TestSamples/FormatterTests/input/init_fields_in_class.pas b/TestSamples/FormatterTests/input/init_fields_in_class.pas index 041dce35d..0b06709be 100644 --- a/TestSamples/FormatterTests/input/init_fields_in_class.pas +++ b/TestSamples/FormatterTests/input/init_fields_in_class.pas @@ -25,6 +25,6 @@ begin writeln(cc.st2);} writeln(cc.static_r.x);//,' ',cc.static_r.y); writeln(cc.i); - // + //нужен статический конструктор readln; end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/life2.pas b/TestSamples/FormatterTests/input/life2.pas index a7c248f74..55a061251 100644 --- a/TestSamples/FormatterTests/input/life2.pas +++ b/TestSamples/FormatterTests/input/life2.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке uses GraphABC,Utils; const @@ -286,10 +286,10 @@ begin end; begin - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -297,8 +297,8 @@ begin SetWindowSize(x0+m*w,y0+n*w); SetFontName('Arial'); SetFontSize(10); - TextOut(25,0,' '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); Init; DrawField; DrawConfiguration; @@ -308,8 +308,8 @@ begin begin gen:=gen+1; SetBrushColor(clWhite); - TextOut(25,0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25,0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); a:=b; SosediA:=SosediB; diff --git a/TestSamples/FormatterTests/input/main.pas b/TestSamples/FormatterTests/input/main.pas index 39e3b0f4e..39a4f7e00 100644 --- a/TestSamples/FormatterTests/input/main.pas +++ b/TestSamples/FormatterTests/input/main.pas @@ -1,6 +1,6 @@ -// - -// dll-, PascalABC.NET, , -// +// Это - главная программа +// Именами из dll-библиотеки, написанной на PascalABC.NET, можно пользоваться, +// не подключая пространства имен #reference 'mydll.dll' begin diff --git a/TestSamples/FormatterTests/input/mandelb.pas b/TestSamples/FormatterTests/input/mandelb.pas index 0db59168f..618d41911 100644 --- a/TestSamples/FormatterTests/input/mandelb.pas +++ b/TestSamples/FormatterTests/input/mandelb.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация фрактальной графики. Множество Мандельброта uses GraphABC; const @@ -11,7 +11,7 @@ var // z=z^2+c begin SetWindowSize(400,300); - SetWindowCaption(': '); + SetWindowCaption('Фракталы: множество Мандельброта'); for ix:=0 to WindowWidth-1 do for iy:=0 to WindowHeight-1 do begin diff --git a/TestSamples/FormatterTests/input/methods_in_record_test.pas b/TestSamples/FormatterTests/input/methods_in_record_test.pas index 99c4c6c2b..b033da648 100644 --- a/TestSamples/FormatterTests/input/methods_in_record_test.pas +++ b/TestSamples/FormatterTests/input/methods_in_record_test.pas @@ -3,7 +3,7 @@ type x:integer; function ToString: String; override; begin - result := '! ' + x.tostring; + result := 'Работает! ' + x.tostring; end; end; diff --git a/TestSamples/FormatterTests/input/milli.pas b/TestSamples/FormatterTests/input/milli.pas index e913226e3..cc68419fc 100644 --- a/TestSamples/FormatterTests/input/milli.pas +++ b/TestSamples/FormatterTests/input/milli.pas @@ -1,4 +1,4 @@ -// Milliseconds +// Демонстрация функции Milliseconds uses Utils; const n=5000; var diff --git a/TestSamples/FormatterTests/input/mosaic.pas b/TestSamples/FormatterTests/input/mosaic.pas index 77470af7e..0ccfb39b3 100644 --- a/TestSamples/FormatterTests/input/mosaic.pas +++ b/TestSamples/FormatterTests/input/mosaic.pas @@ -1,4 +1,4 @@ -// . +// Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const diff --git a/TestSamples/FormatterTests/input/ms0002.pas b/TestSamples/FormatterTests/input/ms0002.pas index ba7238cd5..b5d418661 100644 --- a/TestSamples/FormatterTests/input/ms0002.pas +++ b/TestSamples/FormatterTests/input/ms0002.pas @@ -1,4 +1,4 @@ -// +// падает begin writeln(longint.MaxValue); readln; diff --git a/TestSamples/FormatterTests/input/ms0003.pas b/TestSamples/FormatterTests/input/ms0003.pas index 881d9f49a..073271529 100644 --- a/TestSamples/FormatterTests/input/ms0003.pas +++ b/TestSamples/FormatterTests/input/ms0003.pas @@ -1,4 +1,4 @@ -// +// падает begin writeln(word.MaxValue); readln; diff --git a/TestSamples/FormatterTests/input/ms0004.pas b/TestSamples/FormatterTests/input/ms0004.pas index 8a9c896ef..45d89a840 100644 --- a/TestSamples/FormatterTests/input/ms0004.pas +++ b/TestSamples/FormatterTests/input/ms0004.pas @@ -1,5 +1,5 @@ -// -// +// Не должно компилироваться +// А оно вдобавок и падает begin writeln(System.Int64.MaxValue); readln; diff --git a/TestSamples/FormatterTests/input/ms0024.pas b/TestSamples/FormatterTests/input/ms0024.pas index 3e02ed11d..e1318b7ea 100644 --- a/TestSamples/FormatterTests/input/ms0024.pas +++ b/TestSamples/FormatterTests/input/ms0024.pas @@ -1,4 +1,4 @@ -// +// Типизированные константы должны работать const a: integer = 2; b: array [1..3] of integer = (1,2,3); diff --git a/TestSamples/FormatterTests/input/ms0026.pas b/TestSamples/FormatterTests/input/ms0026.pas index 4be1277e2..c4ff97e57 100644 --- a/TestSamples/FormatterTests/input/ms0026.pas +++ b/TestSamples/FormatterTests/input/ms0026.pas @@ -1,4 +1,4 @@ -// +// Должно работать var i: record i,r: real end; begin diff --git a/TestSamples/FormatterTests/input/ms0032.pas b/TestSamples/FormatterTests/input/ms0032.pas index 372a56ad2..e65d68693 100644 --- a/TestSamples/FormatterTests/input/ms0032.pas +++ b/TestSamples/FormatterTests/input/ms0032.pas @@ -1,4 +1,4 @@ -// +// Падает type A=record end; var aa:a; diff --git a/TestSamples/FormatterTests/input/ms0046.pas b/TestSamples/FormatterTests/input/ms0046.pas index d6cfc3c6c..576d95601 100644 --- a/TestSamples/FormatterTests/input/ms0046.pas +++ b/TestSamples/FormatterTests/input/ms0046.pas @@ -1,4 +1,4 @@ -// double +// Тип double должен быть определен var a: double; r:real; begin diff --git a/TestSamples/FormatterTests/input/ms0056.pas b/TestSamples/FormatterTests/input/ms0056.pas index 003f30d54..9c4650349 100644 --- a/TestSamples/FormatterTests/input/ms0056.pas +++ b/TestSamples/FormatterTests/input/ms0056.pas @@ -1,4 +1,4 @@ -// ! +// Должно работать! var i: integer; l: longint; diff --git a/TestSamples/FormatterTests/input/ms0075.pas b/TestSamples/FormatterTests/input/ms0075.pas index cde3b1dec..549d853d2 100644 --- a/TestSamples/FormatterTests/input/ms0075.pas +++ b/TestSamples/FormatterTests/input/ms0075.pas @@ -1,9 +1,9 @@ -// +// Это должно работать -var work: array [''..''] of integer; +var work: array ['а'..'я'] of integer; begin - Inc(work['']); - writeln(work['']); + Inc(work['а']); + writeln(work['а']); readln; end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/ms0078.pas b/TestSamples/FormatterTests/input/ms0078.pas index 71cee41e9..74eb2dedb 100644 --- a/TestSamples/FormatterTests/input/ms0078.pas +++ b/TestSamples/FormatterTests/input/ms0078.pas @@ -1,4 +1,4 @@ -// +// Хотелось бы чтобы это работало var i: integer; begin diff --git a/TestSamples/FormatterTests/input/ms0079.pas b/TestSamples/FormatterTests/input/ms0079.pas index 7c6f25486..718950605 100644 --- a/TestSamples/FormatterTests/input/ms0079.pas +++ b/TestSamples/FormatterTests/input/ms0079.pas @@ -1,4 +1,4 @@ -// +// Хотелось бы чтобы это работало var i: integer; begin diff --git a/TestSamples/FormatterTests/input/ms0092.pas b/TestSamples/FormatterTests/input/ms0092.pas index 52b20d3f4..6de89cd84 100644 --- a/TestSamples/FormatterTests/input/ms0092.pas +++ b/TestSamples/FormatterTests/input/ms0092.pas @@ -1,4 +1,4 @@ -// !!! 26 - ! - ! +// Работает неверно!!! С версии 26 - точно! Или - всегда! var i,j: integer; diff --git a/TestSamples/FormatterTests/input/ms0096.pas b/TestSamples/FormatterTests/input/ms0096.pas index b8da6a62a..36710f225 100644 --- a/TestSamples/FormatterTests/input/ms0096.pas +++ b/TestSamples/FormatterTests/input/ms0096.pas @@ -16,7 +16,7 @@ type var a: Field; ships: array[1..10] of ship; - b: array [0..n+1, 0..n+1] of CellState; // + b: array [0..n+1, 0..n+1] of CellState; // выстрелы procedure Clear(var a: Field); var x,y: integer; @@ -206,7 +206,7 @@ begin Ships[i].life:=ships[i].len; if not TryPlaceShips(100) then begin - write(' '); + write('Не удалось расположить корабли'); exit; end; end; @@ -218,7 +218,7 @@ var i: integer; begin if b[x,y]<>NeStrelial then exit; i:=a[x,y]; - if i>0 then // + if i>0 then // попал begin Dec(Ships[i].life); if Ships[i].life = 0 then @@ -261,7 +261,7 @@ procedure IntellectualTryPli; begin d:=unknown; x:=prevgoodx; y:=prevgoody; - // + // определить направление корабля if (b[x,y+1]=Popal) or (b[x,y-1]=Popal) then d:=vert else if (b[x+1,y]=Popal) or (b[x-1,y]=Popal) then @@ -291,7 +291,7 @@ procedure IntellectualTryPli; y:=y-1 until b[x,y]<>Popal; if b[x,y]=NeStrelial then Exit; - writeln(': , '); + writeln('Ошибка: корабль не потоплен, но выстрелов больше нет'); writeln(prevgoodx,' ',prevgoody); end; end; @@ -299,7 +299,7 @@ procedure IntellectualTryPli; var x,y: integer; begin - if b[prevgoodx,prevgoody]=Popal then // - - + if b[prevgoodx,prevgoody]=Popal then // что-то интеллектуальное - добивать SearchNextPli(x,y) else repeat diff --git a/TestSamples/FormatterTests/input/ms151.pas b/TestSamples/FormatterTests/input/ms151.pas index 2f8f76f4c..ff8d6109a 100644 --- a/TestSamples/FormatterTests/input/ms151.pas +++ b/TestSamples/FormatterTests/input/ms151.pas @@ -1,4 +1,4 @@ -// +// массив файлов не инициализируется var ff: array [1..4] of file of integer; begin diff --git a/TestSamples/FormatterTests/input/ms152.pas b/TestSamples/FormatterTests/input/ms152.pas index 72ec4bf4f..01a3725ff 100644 --- a/TestSamples/FormatterTests/input/ms152.pas +++ b/TestSamples/FormatterTests/input/ms152.pas @@ -1,4 +1,4 @@ -// +// должно компилироваться begin var s: string := '111'; var c: char := s[1]; diff --git a/TestSamples/FormatterTests/input/oper_test.pas b/TestSamples/FormatterTests/input/oper_test.pas index 920a36cb7..014b20e2d 100644 --- a/TestSamples/FormatterTests/input/oper_test.pas +++ b/TestSamples/FormatterTests/input/oper_test.pas @@ -29,7 +29,7 @@ end; function ToString:string;override; begin - // ? + //Это почему не можеш? result:=string.Format('{0}({1})',name,height); end; diff --git a/TestSamples/FormatterTests/input/params_Writeln.pas b/TestSamples/FormatterTests/input/params_Writeln.pas index 2abc1f16c..77f6ae47f 100644 --- a/TestSamples/FormatterTests/input/params_Writeln.pas +++ b/TestSamples/FormatterTests/input/params_Writeln.pas @@ -1,4 +1,4 @@ -// +//Процедуры с переменным числом параметров procedure writeln(params args:array of object); var i:integer; diff --git a/TestSamples/FormatterTests/input/params_test2.pas b/TestSamples/FormatterTests/input/params_test2.pas index 1566bfe78..2e78ba0c8 100644 --- a/TestSamples/FormatterTests/input/params_test2.pas +++ b/TestSamples/FormatterTests/input/params_test2.pas @@ -8,7 +8,7 @@ var x:array of integer; begin - //test; //? + //test; //должно? test(1); test(1,2); SetLength(x,2); diff --git a/TestSamples/FormatterTests/input/polygon.pas b/TestSamples/FormatterTests/input/polygon.pas index dfed54157..c67fe2e9e 100644 --- a/TestSamples/FormatterTests/input/polygon.pas +++ b/TestSamples/FormatterTests/input/polygon.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация возможностей векторной графики. Правильные многоугольники uses Turtle,GraphABC; procedure MnogoUg(r: real; n: integer); @@ -21,7 +21,7 @@ end; var i: integer; begin - SetWindowCaption(' : '); + SetWindowCaption('Черепашья графика: правильные многоугольники'); Init; SetWindowSize(730,300); ToPoint(60,90); diff --git a/TestSamples/FormatterTests/input/procfuncpointer.pas b/TestSamples/FormatterTests/input/procfuncpointer.pas index 4f4f2631c..45070e3d3 100644 --- a/TestSamples/FormatterTests/input/procfuncpointer.pas +++ b/TestSamples/FormatterTests/input/procfuncpointer.pas @@ -1,4 +1,4 @@ -// +// Тест процедурных переменных procedure p(i: integer); begin writeln(i); diff --git a/TestSamples/FormatterTests/input/props.pas b/TestSamples/FormatterTests/input/props.pas index b61035aca..5594ad74f 100644 --- a/TestSamples/FormatterTests/input/props.pas +++ b/TestSamples/FormatterTests/input/props.pas @@ -1,4 +1,4 @@ -// +//Тест базовой работоспособности интерфейсов type inter = interface function getnn: integer; diff --git a/TestSamples/FormatterTests/input/props2.pas b/TestSamples/FormatterTests/input/props2.pas index dde55ccb2..de02ac64b 100644 --- a/TestSamples/FormatterTests/input/props2.pas +++ b/TestSamples/FormatterTests/input/props2.pas @@ -1,4 +1,4 @@ -// +//Тест базовой работоспособности интерфейсов type inter = interface function getnn: integer; diff --git a/TestSamples/FormatterTests/input/rain.pas b/TestSamples/FormatterTests/input/rain.pas index 028966036..6983b13df 100644 --- a/TestSamples/FormatterTests/input/rain.pas +++ b/TestSamples/FormatterTests/input/rain.pas @@ -1,4 +1,4 @@ -// +// Имитация кругов на воде от капель дождя uses GraphABC; const @@ -23,7 +23,7 @@ end; const z=50; begin - SetWindowCaption(' '); + SetWindowCaption('Капли дождя'); while True do Kaplia(Random(WindowWidth-2*z)+z,Random(WindowHeight-2*z)+z); end. diff --git a/TestSamples/FormatterTests/input/random_DM.pas b/TestSamples/FormatterTests/input/random_DM.pas index b1e906fad..c9f2904c0 100644 --- a/TestSamples/FormatterTests/input/random_DM.pas +++ b/TestSamples/FormatterTests/input/random_DM.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация использования случайных чисел для Чертежника. Лучи uses DrawMan; begin diff --git a/TestSamples/FormatterTests/input/random_Robot.pas b/TestSamples/FormatterTests/input/random_Robot.pas index 2f6f917c7..4ab24f209 100644 --- a/TestSamples/FormatterTests/input/random_Robot.pas +++ b/TestSamples/FormatterTests/input/random_Robot.pas @@ -1,4 +1,4 @@ - // . + // Демонстрация использования случайных чисел для Робота. Случайное блуждание uses Robot; begin diff --git a/TestSamples/FormatterTests/input/redirecttest1.pas b/TestSamples/FormatterTests/input/redirecttest1.pas index 04f50cff6..9e5f7c086 100644 --- a/TestSamples/FormatterTests/input/redirecttest1.pas +++ b/TestSamples/FormatterTests/input/redirecttest1.pas @@ -1,5 +1,5 @@ begin - writeln('...1'); + writeln('Запущен...1'); while true do begin write('1 '); sleep(200); diff --git a/TestSamples/FormatterTests/input/redirecttest2.pas b/TestSamples/FormatterTests/input/redirecttest2.pas index e1a8da09c..cda9ff9c4 100644 --- a/TestSamples/FormatterTests/input/redirecttest2.pas +++ b/TestSamples/FormatterTests/input/redirecttest2.pas @@ -1,5 +1,5 @@ begin - writeln('...2'); + writeln('Запущен...2'); while true do begin write('2 '); sleep(200); diff --git a/TestSamples/FormatterTests/input/robotmaketest.pas b/TestSamples/FormatterTests/input/robotmaketest.pas index 14d8ad7f4..39428535b 100644 --- a/TestSamples/FormatterTests/input/robotmaketest.pas +++ b/TestSamples/FormatterTests/input/robotmaketest.pas @@ -1,14 +1,14 @@ uses Robot,RobotTaskMaker,RobotField; procedure Rob2; - const h=10;// - w=15;// - step=1;// + const h=10;//высота поля + w=15;//ширина поля + step=1;//отступ помеченных клеток от края поля var a,i: byte; begin - TaskText(' '); + TaskText('Закрасить клетки вокруг прямоугольника'); Field(w,h); - a:=Random(h div 3)+step+1;// + a:=Random(h div 3)+step+1;//отступ прямоуголька от края поля HorizontalWall(a,a,w-a*2); HorizontalWall(a,h-a,w-a*2); VerticalWall(a,a,h-a*2); diff --git a/TestSamples/FormatterTests/input/romashka.pas b/TestSamples/FormatterTests/input/romashka.pas index fd320d868..2e1e0fde0 100644 --- a/TestSamples/FormatterTests/input/romashka.pas +++ b/TestSamples/FormatterTests/input/romashka.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация возможносткй векторной графики. Ромашка uses Turtle,GraphABC; const @@ -34,7 +34,7 @@ end; var i: integer; begin - SetWindowCaption(' : '); + SetWindowCaption('Черепашья графика: ромашка'); SetWindowSize(500,500); Init; for i:=0 to N-1 do diff --git a/TestSamples/FormatterTests/input/rotate.pas b/TestSamples/FormatterTests/input/rotate.pas index 96ae88b56..e1283fb26 100644 --- a/TestSamples/FormatterTests/input/rotate.pas +++ b/TestSamples/FormatterTests/input/rotate.pas @@ -1,4 +1,4 @@ -// +// Вращение многоугольника uses Turtle,GraphABC; procedure MnogoUg(r: real; n: integer); @@ -26,7 +26,7 @@ var i,di: integer; begin - SetWindowCaption(' : '); + SetWindowCaption('Черепашья графика: вращение'); SetWindowSize(320,165); Init; i:=5; diff --git a/TestSamples/FormatterTests/input/serpinsky.pas b/TestSamples/FormatterTests/input/serpinsky.pas index 8bd36ab92..bd2fa252a 100644 --- a/TestSamples/FormatterTests/input/serpinsky.pas +++ b/TestSamples/FormatterTests/input/serpinsky.pas @@ -1,4 +1,4 @@ -// . forward- +// Ковер Серпинского. Иллюстрация forward-объявлений uses GraphABC; var @@ -64,7 +64,7 @@ begin b:=a; x:=10; y:=10; - SetWindowCaption(' '); + SetWindowCaption('Ковер Серпинского'); SetWindowSize(590,590); MoveTo(x,y); AA(N); lrel(a,b); diff --git a/TestSamples/FormatterTests/input/setpixel.pas b/TestSamples/FormatterTests/input/setpixel.pas index 400a078fb..b20da66eb 100644 --- a/TestSamples/FormatterTests/input/setpixel.pas +++ b/TestSamples/FormatterTests/input/setpixel.pas @@ -1,4 +1,4 @@ -// SetPixel. +// Демонстрация возможностей функции SetPixel. uses GraphABC; var i,j: integer; @@ -43,7 +43,7 @@ begin SetFontSize(14); SetFontName('Arial'); SetFontColor(clRed); - TextOut(50,WindowHeight div 2-14,' GraphABC!'); + TextOut(50,WindowHeight div 2-14,'Модуль GraphABC!'); end. diff --git a/TestSamples/FormatterTests/input/settest.pas b/TestSamples/FormatterTests/input/settest.pas index 0389b2de1..47d7f046e 100644 --- a/TestSamples/FormatterTests/input/settest.pas +++ b/TestSamples/FormatterTests/input/settest.pas @@ -1,9 +1,9 @@ var s: set of string; begin - s := ['','','']; - s := s + ['','','']; - if '' in s then - write(''); + s := ['бегемот','жираф','крокодил']; + s := s + ['жираф','крокодил','какаду']; + if 'какаду' in s then + write('какаду'); write(s); end. diff --git a/TestSamples/FormatterTests/input/shl.pas b/TestSamples/FormatterTests/input/shl.pas index 56553e2db..1f4f89367 100644 --- a/TestSamples/FormatterTests/input/shl.pas +++ b/TestSamples/FormatterTests/input/shl.pas @@ -1,6 +1,6 @@ var i: integer; begin - writeln(' '); + writeln('Степени двойки'); writeln(' n 2^n'); for i:=0 to 30 do writeln(i.tostring+' '+(1 shl i).tostring); diff --git a/TestSamples/FormatterTests/input/simp.pas b/TestSamples/FormatterTests/input/simp.pas index b01535ac8..a98588aff 100644 --- a/TestSamples/FormatterTests/input/simp.pas +++ b/TestSamples/FormatterTests/input/simp.pas @@ -6,7 +6,7 @@ var ii : integer; const max = 100; max2 = max+10; -// +// Генерация больших простых чисел var i, j, count: integer; f: boolean; beg: integer; diff --git a/TestSamples/FormatterTests/input/simplenumbers.pas b/TestSamples/FormatterTests/input/simplenumbers.pas index e1a02ef47..ae3728111 100644 --- a/TestSamples/FormatterTests/input/simplenumbers.pas +++ b/TestSamples/FormatterTests/input/simplenumbers.pas @@ -1,5 +1,5 @@ -// +// Генерация больших простых чисел var i,j,r,count: integer; f: boolean; beg: integer; diff --git a/TestSamples/FormatterTests/input/stack2.pas b/TestSamples/FormatterTests/input/stack2.pas index df6455aeb..1c193904f 100644 --- a/TestSamples/FormatterTests/input/stack2.pas +++ b/TestSamples/FormatterTests/input/stack2.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания класса стека на базе списка type pnode=^node; node=record @@ -27,7 +27,7 @@ type function top: integer; begin if empty then begin - writeln(' '); + writeln('попытка взять элемент с пустого стека'); exit; end; top:=t^.data; @@ -36,7 +36,7 @@ type var v: pnode; begin if empty then begin - writeln(' '); + writeln('попытка взять элемент с пустого стека'); exit; end; pop:=top; diff --git a/TestSamples/FormatterTests/input/surface.pas b/TestSamples/FormatterTests/input/surface.pas index 59a4114f1..8576dcc9b 100644 --- a/TestSamples/FormatterTests/input/surface.pas +++ b/TestSamples/FormatterTests/input/surface.pas @@ -1,4 +1,4 @@ -// KuMir/PMir +// Пример из пакета KuMir/PMir Uses GraphABC; var Xmin,Xmax,Xstep: real; @@ -55,8 +55,8 @@ begin end; begin - SetWindowCaption(' '); + SetWindowCaption('График функции двух переменных'); SetWindowSize(600,400); - dx:=5; { X } - gr(50); { Y <= MaxN } + dx:=5; { разрешение по оси X } + gr(50); { количество линий по Y <= MaxN } end. diff --git a/TestSamples/FormatterTests/input/test_basic_types.pas b/TestSamples/FormatterTests/input/test_basic_types.pas index e42c86a65..3aef9b0ce 100644 --- a/TestSamples/FormatterTests/input/test_basic_types.pas +++ b/TestSamples/FormatterTests/input/test_basic_types.pas @@ -23,7 +23,7 @@ begin writeln(i); r:=b/10; writeln(r); - i:=f+1; //! + i:=f+1; //ньхайю! writeln(i); readln; end. \ No newline at end of file diff --git a/TestSamples/FormatterTests/input/test_rusencoding.pas b/TestSamples/FormatterTests/input/test_rusencoding.pas index 6f67163e4..559ec11fb 100644 --- a/TestSamples/FormatterTests/input/test_rusencoding.pas +++ b/TestSamples/FormatterTests/input/test_rusencoding.pas @@ -1,6 +1,6 @@ uses crt; begin - Writeln(''); // !!! + Writeln('РАБОТАЕТ'); // и коментарии работают!!! readkey; end. diff --git a/TestSamples/FormatterTests/input/test_sharp_const.pas b/TestSamples/FormatterTests/input/test_sharp_const.pas index f22d1552f..bd36aa219 100644 --- a/TestSamples/FormatterTests/input/test_sharp_const.pas +++ b/TestSamples/FormatterTests/input/test_sharp_const.pas @@ -1,7 +1,7 @@ var s:string; begin s:='xxx'; - s:=s+#13#10'!'#13#10'!'; + s:=s+#13#10'!'#13#10'ОГО!'; //s:=s+'1310'+'xxx'; writeln(s); readln; diff --git a/TestSamples/FormatterTests/input/test_sizeof.pas b/TestSamples/FormatterTests/input/test_sizeof.pas index c056c5887..660392551 100644 --- a/TestSamples/FormatterTests/input/test_sizeof.pas +++ b/TestSamples/FormatterTests/input/test_sizeof.pas @@ -3,7 +3,7 @@ type x:integer; y:real; a:array[1..10] of integer; - //: ? ! + //вопрос: а как передать масив в неуправляемый код? такой масив не передаш! end; diff --git a/TestSamples/FormatterTests/input/tor.pas b/TestSamples/FormatterTests/input/tor.pas index 35cd9014b..feaa299df 100644 --- a/TestSamples/FormatterTests/input/tor.pas +++ b/TestSamples/FormatterTests/input/tor.pas @@ -8,7 +8,7 @@ type begin Height:=600; Width:=800; - Text:=''; + Text:='Гусеница'; BackColor:=Color.FromArgb(255,255,255,255); end; end; diff --git a/TestSamples/FormatterTests/input/typed_files.pas b/TestSamples/FormatterTests/input/typed_files.pas index d4e97bdba..431ebe23a 100644 --- a/TestSamples/FormatterTests/input/typed_files.pas +++ b/TestSamples/FormatterTests/input/typed_files.pas @@ -37,7 +37,7 @@ begin writeln(f3.ElementType); writeln('in unit:'); writeln(ff.ElementType); -// write(ff,ff); ! ! +// write(ff,ff); неправильноя ошибка при общей компиляции! перектрытие имен! test; //cc := new c; //writeln('in class:'); diff --git a/TestSamples/FormatterTests/input/uRobot.pas b/TestSamples/FormatterTests/input/uRobot.pas index 811c874f0..6a8bf94e9 100644 --- a/TestSamples/FormatterTests/input/uRobot.pas +++ b/TestSamples/FormatterTests/input/uRobot.pas @@ -8,11 +8,11 @@ const maxDimY=30; var - x,y: integer; // - Delay: integer; // - DimX,DimY: integer; // - Cellsz: integer; // - x0,y0: integer; // + x,y: integer; // текущие координаты Робота + Delay: integer; // пауза между ходами + DimX,DimY: integer; // размеры поля + Cellsz: integer; // размер клетки поля + x0,y0: integer; // левый верхний углл поля в пикселах HorizWalls: array [1..maxDimX,0..maxDimY] of boolean; VertWalls: array [0..maxDimX,1..maxDimY] of boolean; Painted: array [1..maxDimX,1..maxDimY] of integer; @@ -288,5 +288,5 @@ begin end; initialization - SetWindowCaption(''); + SetWindowCaption('Робот'); end. diff --git a/TestSamples/FormatterTests/input/u_Flame.pas b/TestSamples/FormatterTests/input/u_Flame.pas index 7a5492bb0..4bd212ca4 100644 --- a/TestSamples/FormatterTests/input/u_Flame.pas +++ b/TestSamples/FormatterTests/input/u_Flame.pas @@ -18,20 +18,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer: array of array of byte := new array of byte[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, i, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/TestSamples/FormatterTests/input/u_MazeGen.pas b/TestSamples/FormatterTests/input/u_MazeGen.pas index bfc9698bd..7b273a0e2 100644 --- a/TestSamples/FormatterTests/input/u_MazeGen.pas +++ b/TestSamples/FormatterTests/input/u_MazeGen.pas @@ -1,12 +1,12 @@ -// +// Программа генерации случайных лабиринтов unit u_MazeGen; uses GraphABC; const - szw=70; // + szw=70; // размер лабиринта szh=50; - cellsz=10; // + cellsz=10; // размер ячейки type point=record @@ -35,10 +35,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -48,28 +48,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n:= Random(todonum); x:= todo[n].x; y:= todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat d:=Random (4); until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl d) or 32); maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -80,8 +80,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -90,19 +90,19 @@ begin for x:=1 to szw-2 do for y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz ); end; end; begin - SetWindowCaption(' '); + SetWindowCaption('Генерация лабиринта'); SetWindowSize(800,600); dx[2]:=-1;dx[3]:=1; dy[0]:=-1;dy[1]:=1; diff --git a/TestSamples/FormatterTests/input/u_RandomSearchTree.pas b/TestSamples/FormatterTests/input/u_RandomSearchTree.pas index add53b44c..6a671080f 100644 --- a/TestSamples/FormatterTests/input/u_RandomSearchTree.pas +++ b/TestSamples/FormatterTests/input/u_RandomSearchTree.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева поиска unit u_RandomSearchTree; uses GraphABC; @@ -47,6 +47,6 @@ var begin for i:=1 to 30 do Add(t,Random(100)); - SetWindowCaption(' '); + SetWindowCaption('Двоичное дерево поиска'); DrawTree(t,WindowWidth div 2,10,WindowWidth div 4); end. diff --git a/TestSamples/FormatterTests/input/u_Students.pas b/TestSamples/FormatterTests/input/u_Students.pas index 96c74d665..f86f2fdd7 100644 --- a/TestSamples/FormatterTests/input/u_Students.pas +++ b/TestSamples/FormatterTests/input/u_Students.pas @@ -1,5 +1,5 @@ unit u_Students; -// +//Перегрузка операторов type Student = class Name: string; diff --git a/TestSamples/FormatterTests/input/u_balls.pas b/TestSamples/FormatterTests/input/u_balls.pas index f1aa89dd4..6c0077d6a 100644 --- a/TestSamples/FormatterTests/input/u_balls.pas +++ b/TestSamples/FormatterTests/input/u_balls.pas @@ -1,5 +1,5 @@ -// -// CRT, , +// Блуждание мячиков по полю +// Работа с модулем CRT, наследование, полиморфизм unit u_balls; uses CRT; diff --git a/TestSamples/GraphABC/GraphABC.pas b/TestSamples/GraphABC/GraphABC.pas index 75d508395..329f011ee 100644 --- a/TestSamples/GraphABC/GraphABC.pas +++ b/TestSamples/GraphABC/GraphABC.pas @@ -14,11 +14,11 @@ uses System.Drawing.Drawing2D; type -/// +/// Тип цвета Color = System.Drawing.Color; -/// GraphABC +/// Тип исключения GraphABC GraphABCException = class(Exception) end; -/// +/// Тип точки Point = System.Drawing.Point; var @@ -214,82 +214,82 @@ type FontStyleType = (fsNormal, fsBold, fsItalic, fsBoldItalic, fsUnderline, fsBoldUnderline, fsItalicUnderline, fsBoldItalicUnderline); BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела с координатами (x,y) function GetPixel(x,y: integer): Color; -/// (x,y) +/// Устанавливает текущую позицию рисования в точку (x,y) procedure MoveTo(x,y: integer); -/// (x,y). (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer); -/// (x,y) c. (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer; c: Color); -/// (x1,y1) (x2,y2) +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Рисует окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r +/// Рисует заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Рисует ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Рисует кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); {procedure FillCircle(x,y,r: integer; c: Color); @@ -318,221 +318,221 @@ procedure Polygon(a: array of Point; c: Color); procedure Polyline(a: array of Point; c: Color);} //-------------------------------------------- -//// +//// Цвета //-------------------------------------------- -/// , (r), (g) (b) (r,g b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) function RGB(r,g,b: byte): Color; -/// , (r), (g) (b) (a) (a,r,g,b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) function ARGB(a,r,g,b: byte): Color; -/// r (r - 0 255) +/// Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) function RedColor(r: byte): Color; -/// g (g - 0 255) +/// Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) function GreenColor(g: byte): Color; -/// b (b - 0 255) +/// Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) function BlueColor(b: byte): Color; -/// +/// Возвращает случайный цвет function clRandom: Color; -/// +/// Возвращает красную составляющую цвета function GetRed(c: Color): integer; -/// +/// Возвращает зеленую составляющую цвета function GetGreen(c: Color): integer; -/// +/// Возвращает синюю составляющую цвета function GetBlue(c: Color): integer; //-------------------------------------------- -//// +//// Перья //-------------------------------------------- -/// +/// Устанавливает цвет текущего пера procedure SetPenColor(c: Color); -/// +/// Возвращает цвет текущего пера function PenColor: Color; -/// +/// Устанавливает ширину текущего пера procedure SetPenWidth(Width: integer); -/// +/// Возвращает ширину текущего пера function PenWidth: integer; -/// +/// Устанавливает стиль текущего пера procedure SetPenStyle(style: DashStyle); -/// +/// Возвращает стиль текущего пера function PenStyle: DashStyle; -/// +/// Устанавливает режим текущего пера procedure SetPenMode(m: integer); -/// +/// Возвращает режим текущего пера function PenMode: integer; -/// x- +/// Возвращают x-координату текущей позиции рисования function PenX: integer; -/// y- +/// Возвращают y-координату текущей позиции рисования function PenY: integer; //-------------------------------------------- -//// +//// Кисти //-------------------------------------------- -/// +/// Устанавливает цвет текущей кисти procedure SetBrushColor(c: Color); -/// +/// Возвращает цвет текущей кисти function BrushColor: Color; -/// +/// Устанавливает цвет текущей кисти procedure SetBrushStyle(bs: BrushStyleType); -/// +/// Возвращает цвет текущей кисти function BrushStyle: BrushStyleType; -/// +/// Устанавливает штриховку текущей кисти procedure SetBrushHatch(bh: HatchStyle); -/// +/// Возвращает штриховку текущей кисти function BrushHatch: HatchStyle; -/// +/// Устанавливает цвет заднего плана текущей штриховой кисти procedure SetHatchBrushBackgroundColor(c: Color); -/// +/// Возвращает цвет заднего плана текущей штриховой кисти function HatchBrushBackgroundColor: Color; -/// +/// Устанавливает второй цвет текущей градиентной кисти procedure SetGradientBrushSecondColor(c: Color); -/// +/// Возвращает второй цвет текущей градиентной кисти function GradientBrushSecondColor: Color; //-------------------------------------------- -//// +//// Шрифты //-------------------------------------------- -/// +/// Устанавливает размер текущего шрифта в пунктах procedure SetFontSize(size: integer); -/// +/// Возвращает размер текущего шрифта в пунктах function FontSize: integer; -/// +/// Устанавливает имя текущего шрифта procedure SetFontName(name: string); -/// +/// Возвращает имя текущего шрифта function FontName: string; -/// +/// Устанавливает цвет текущего шрифта procedure SetFontColor(c: Color); -/// +/// Возвращает цвет текущего шрифта function FontColor: Color; -/// +/// Устанавливает стиль текущего шрифта procedure SetFontStyle(fs: FontStyleType); -/// +/// Возвращает стиль текущего шрифта function FontStyle: FontStyleType; -/// s +/// Возвращает ширину строки s в пикселях при текущих настройках шрифта function TextWidth(s: string): integer; -/// s +/// Возвращает высоту строки s в пикселях при текущих настройках шрифта function TextHeight(s: string): integer; //-------------------------------------------- -//// +//// Графическое окно //-------------------------------------------- -/// +/// Очищает графическое окно белым цветом procedure ClearWindow; -/// c +/// Очищает графическое окно цветом c procedure ClearWindow(c: Color); -/// +/// Возвращает ширину клиентской части графического окна в пикселах function WindowWidth: integer; -/// +/// Возвращает высоту клиентской части графического окна в пикселах function WindowHeight: integer; -/// +/// Возвращает отступ графического окна от левого края экрана в пикселах function WindowLeft: integer; -/// +/// Возвращает отступ графического окна от верхнего края экрана в пикселах function WindowTop: integer; -/// +/// Возвращает центр графического окна function WindowCenter: Point; -/// True, i , False +/// Возвращает True, если графическое iокно имеет фиксированный размер, и False в противном случае function WindowIsFixedSize: boolean; -/// +/// Устанавливает ширину клиентской части графического окна в пикселах procedure SetWindowWidth(w: integer); -/// +/// Устанавливает высоту клиентской части графического окна в пикселах procedure SetWindowHeight(h: integer); -/// +/// Устанавливает отступ графического окна от левого края экрана в пикселах procedure SetWindowLeft(l: integer); -/// +/// Устанавливает отступ графического окна от верхнего края экрана в пикселах procedure SetWindowTop(t: integer); -/// , +/// Устанавливает, имеет ли графическое окно фиксированный размер procedure SetWindowIsFixedSize(b: boolean); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetWindowSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetWindowPos(l,t: integer); -/// ( WindowWidth) +/// Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) function GraphBoxWidth: integer; -/// ( WindowHeight) +/// Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) function GraphBoxHeight: integer; -/// +/// Возвращает отступ графического компонента от левого края окна в пикселах function GraphBoxLeft: integer; -/// +/// Возвращает отступ графического компонента от верхнего края окна в пикселах function GraphBoxTop: integer; -/// +/// Возвращает заголовок графического окна function WindowCaption: string; -/// +/// Возвращает заголовок графического окна function WindowTitle: string; -/// +/// Устанавливает заголовок графического окна procedure SetWindowCaption(s: string); -/// +/// Устанавливает заголовок графического окна procedure SetWindowTitle(s: string); -/// +/// Устанавливает ширину и высоту клиентской части графического окна в пикселах procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// fname +/// Сохраняет содержимое графического окна в файл с именем fname procedure SaveWindow(fname: string); -/// fname +/// Восстанавливает содержимое графического окна из файла с именем fname procedure LoadWindow(fname: string); -/// fname +/// Заполняет содержимое графического окна обоями из файла с именем fname procedure FillWindow(fname: string); -/// +/// Закрывает графическое окно и завершает приложение procedure CloseWindow; -/// +/// Возвращает ширину экрана в пикселях function ScreenWidth: integer; -/// +/// Возвращает высоту экрана в пикселях function ScreenHeight: integer; -/// +/// Центрирует графическое окно по центру экрана procedure CenterWindow; -/// +/// Максимизирует графическое окно procedure MaximizeWindow; -/// +/// Сворачивает графическое окно procedure MinimizeWindow; -/// +/// Возвращает графическое окно к нормальному размеру procedure NormalizeWindow; //-------------------------------------------- -//// +//// Буферизация рисования //-------------------------------------------- -/// . LockDrawing +/// Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure Redraw; ///-- procedure FullRedraw; -/// . Redraw +/// Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure LockDrawing; -/// +/// Снимает блокировку рисования на графическом окне и осуществляет его перерисовку procedure UnlockDrawing; //-------------------------------------------- -//// +//// Сглаживание //-------------------------------------------- -/// +/// Устанавливает режим сглаживания procedure SetSmoothing(sm: boolean); -/// +/// Включает режим сглаживания procedure SetSmoothingOn; -/// +/// Выключает режим сглаживания procedure SetSmoothingOff; -/// True, +/// Возвращает True, если режим сглаживания установлен function SmoothingIsOn: boolean; //-------------------------------------------- -//// +//// Вспомогательные подпрограммы //-------------------------------------------- -/// . +/// Блокирует прорисовку графики. Вызывается для синхронизации procedure LockGraphics; -/// . +/// Разблокирует прорисовку графики. Вызывается для синхронизации procedure UnLockGraphics; -/// (x0,y0) +/// Устанавливает начало координат в точку (x0,y0) procedure SetCoordinateOrigin(x0,y0: integer); -/// . +/// Инициализирует графическое окно. Используется для внутренних целей procedure InitGraphABC; type -/// GraphABC +/// Тип пера GraphABC GraphABCPen = class public _NETPen: System.Drawing.Pen; @@ -548,23 +548,23 @@ type function GetX: integer; function GetY: integer; public - /// .NET + /// Текущее перо .NET property NETPen: System.Drawing.Pen read _NETPen write SetNETPen; - /// + /// Цвет пера property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Ширина пера property Width: integer read GetWidth write SetWidth; - /// + /// Стиль пера property Style: DashStyle read GetStyle write SetStyle; - /// + /// Режим пера property Mode: integer read GetMode write SetMode; - /// X- + /// X-координата текущей позиции пера property X: integer read GetX; - /// Y- + /// Y-координата текущей позиции пера property Y: integer read GetY; end; -/// GraphABC +/// Тип кисти GraphABC GraphABCBrush = class public _NETBrush: System.Drawing.Brush; @@ -580,21 +580,21 @@ type procedure SetGradientSecondColor(c: GraphABC.Color); function GetGradientSecondColor: GraphABC.Color; public -/// .NET +/// Текущая кисть .NET property NETBrush: System.Drawing.Brush read _NETBrush write SetNETBrush; -/// +/// Цвет кисти property Color: GraphABC.Color read GetColor write SetColor; -/// +/// Стиль кисти property Style: BrushStyleType read GetStyle write SetStyle; -/// +/// Штриховка кисти property Hatch: HatchStyle read GetHatch write SetHatch; -/// +/// Цвет заднего плана штриховой кисти property HatchBackgroundColor: GraphABC.Color read GetHatchBackgroundColor write SetHatchBackgroundColor; -/// +/// Второй цвет градиентной кисти property GradientSecondColor: GraphABC.Color read GetGradientSecondColor write SetGradientSecondColor; end; -/// GraphABC +/// Тип шрифта GraphABC GraphABCFont = class public _NETFont: System.Drawing.Font; @@ -608,15 +608,15 @@ type procedure SetName(nm: string); function GetName: string; public -/// .NET +/// Текущий шрифт .NET property NETFont: System.Drawing.Font read _NETFont write SetNETFont; - /// + /// Цвет шрифта property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Стиль шрифта property Style: FontStyleType read GetStyle write SetStyle; - /// + /// Размер шрифта в пунктах property Size: integer read GetSize write SetSize; - /// + /// Наименование шрифта property Name: string read GetName write SetName; end; @@ -635,51 +635,51 @@ type procedure SetIsFixedSize(b: boolean); function GetIsFixedSize: boolean; public -/// +/// Отступ графического окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; -/// +/// Отступ графического окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; -/// +/// Ширина клиентской части графического окна в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота клиентской части графического окна в пикселах property Height: integer read GetHeight write SetHeight; -/// +/// Заголовок графического окна property Caption: string read GetCaption write SetCaption; -/// +/// Заголовок графического окна property Title: string read GetCaption write SetCaption; -/// +/// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; -/// +/// Очищает графическое окно белым цветом procedure Clear; -/// c +/// Очищает графическое окно цветом c procedure Clear(c: Color); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetPos(l,t: integer); -/// , +/// Устанавливает положение, размеры и цвет графического окна procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// 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; end; -/// GraphABC +/// Тип рисунка GraphABC Picture = class public bmp,savedbmp: Bitmap; @@ -694,123 +694,123 @@ type procedure SetTransparentColor(c: GraphABC.Color); function GetTransparentColor: GraphABC.Color; public -/// w h +/// Создает рисунок размера w на h пикселей constructor Create(w,h: integer); -/// fname +/// Создает рисунок из файла с именем fname constructor Create(fname: string); -/// r +/// Создает рисунок из прямоугольника r графического окна constructor Create(r: System.Drawing.Rectangle); // Create from screen -/// fname +/// Загружает рисунок из файла с именем fname procedure Load(fname: string); -/// fname +/// Сохраняет рисунок в файл с именем fname procedure Save(fname: string); -/// w h +/// Устанавливает размер рисунка w на h пикселей procedure SetSize(w,h: integer); -/// +/// Ширина рисунка в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота рисунка в пикселах property Height: integer read GetHeight write SetHeight; -/// ; TransparentColor +/// Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor property Transparent: boolean read istransp write SetTransparent; -/// . Transparent := True +/// Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True property TransparentColor: GraphABC.Color read GetTransparentColor write SetTransparentColor; -/// True, p, False . +/// Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным function Intersect(p: Picture): boolean; -/// (x,y) +/// Выводит рисунок в позиции (x,y) procedure Draw(x,y: integer); -/// (x,y) g +/// Выводит рисунок в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; g: Graphics); -/// (x,y), (w,h) +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer); -/// (x,y), (w,h), g +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; g: Graphics); -/// , r, (x,y) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y) g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , r, (x,y), (w,h) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y), (w,h), g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); -/// src p dst +/// Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); -/// src bmp dst +/// Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); -/// +/// Зеркально отображает рисунок относительно горизонтальной оси симметрии procedure FlipHorizontal; -/// +/// Зеркально отображает рисунок относительно вертикальной оси симметрии procedure FlipVertical; -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела (x,y) рисунка function GetPixel(x,y: integer): Color; -/// (x1,y1) (x2,y2) +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Выводит на рисунке окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// (x,y) r +/// Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); -/// +/// Очищает рисунок белым цветом procedure Clear; -/// c +/// Очищает рисунок цветом c procedure Clear(c: Color); end; @@ -829,22 +829,22 @@ type procedure Init; protected function IsInputKey(keyData: Keys): boolean; override; - procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // ! + procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // сами все перерисовываем! public constructor (w,h: integer); end; -/// +/// Возвращает окно графического приложения function Window: GraphABCWindow; -/// +/// Возвращает главную форму графического приложения function MainForm: Form; -/// +/// Возвращает графический компонент function GraphABCControl: ABCControl; -/// +/// Возвращает текущее перо function Pen: GraphABCPen; -/// +/// Возвращает текущую кисть function Brush: GraphABCBrush; -/// +/// Возвращает текущий шрифт function Font: GraphABCFont; function GraphWindowGraphics: Graphics; @@ -852,26 +852,26 @@ function GraphBufferGraphics: Graphics; function GraphBufferBitmap: Bitmap; var -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseDown: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши OnMouseUp: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 0, , 1, , 2, +/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseMove: procedure (x,y,mousebutton: integer); -/// +/// Событие нажатия клавиши OnKeyDown: procedure (key: integer); -/// +/// Событие отжатия клавиши OnKeyUp: procedure (key: integer); -/// +/// Событие нажатия символьной клавиши OnKeyPress: procedure (ch: char); -/// +/// Событие изменения размера графического окна OnResize: procedure; -/// +/// Событие закрытия графического окна OnClose: procedure; -/// . nil, +/// Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка RedrawProc: procedure; -/// +/// Следует ли рисовать во внеэкранном буфере DrawInBuffer: boolean:=true; implementation @@ -881,7 +881,7 @@ uses GraphABCHelper; const - FILE_NOT_FOUND_MESSAGE = ' {0} '; + FILE_NOT_FOUND_MESSAGE = 'Файл {0} не найден'; type Proc1Integer = procedure(x: integer); @@ -1208,12 +1208,12 @@ begin Result := bmp.Height; end; -// +// Логика установки прозрачности // 1. Transparent := True - savedbmp:=bmp; bmp:=bmp.Clone; bmp.MakeTransparent(transpcolor); // 2. Transparent := False - bmp.Dispose; bmp := savedbmp; savedbmp := nil; // 3. Transparentcolor := c -// a) Transparent = False, -// ) Transparent = True, bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); +// a) Если Transparent = False, то просто присвоить +// б) Если Transparent = True, то bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); function Picture.GetTransparentColor: Color; begin @@ -1282,7 +1282,7 @@ begin gb := Graphics.FromImage(bmp); gb.DrawImage(oldbmp,0,0); oldbmp.Dispose; -// TODO , , - +// TODO не знаю, может, надо что-то делать для прозрачной { if istransp then begin end} @@ -2060,7 +2060,7 @@ begin ExtFloodFill(hdc, x, y, bc, 1); SelectObject(hdc, holdBrush); - var hbmp := bmp.GetHbitmap(); // GDI Bitmap + var hbmp := bmp.GetHbitmap(); // Создается GDI Bitmap var memdc: IntPtr := CreateCompatibleDC(hdc); SelectObject(memdc,hbmp); @@ -2359,7 +2359,7 @@ end; function TextWidth(s: string): integer; begin -// 1. , 1 +// добавил 1. Без нее рисует, занимая 1 лишний пиксел Result := round(gr.MeasureString(s,Font.NETFont,0,new StringFormat(StringFormat.GenericTypographic)).Width) + 1; end; @@ -2449,7 +2449,7 @@ begin end end; -procedure ChangeFormPos(l,t: integer); // +procedure ChangeFormPos(l,t: integer); // вспомогательная begin MainForm.Left := l; MainForm.Top := t; @@ -2462,7 +2462,7 @@ begin f.Invoke(p,l,t); end; -procedure ChangeFormClientSize(w,h: integer); // +procedure ChangeFormClientSize(w,h: integer); // вспомогательная begin MainForm.ClientSize := new System.Drawing.Size(w,h); ResizeHelper; diff --git a/TestSamples/GraphABC/Mandelbrot.pas b/TestSamples/GraphABC/Mandelbrot.pas index ad5bc4286..5b5ede3f4 100644 --- a/TestSamples/GraphABC/Mandelbrot.pas +++ b/TestSamples/GraphABC/Mandelbrot.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Множество Мандельброта +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i //uses GraphABC,Utils; #reference 'GraphABC.dll' @@ -17,7 +17,7 @@ const dy = 300; begin - Window().Title := ': '; + Window().Title := 'Фракталы: множество Мандельброта'; SetWindowSize(600,600); CenterWindow; for var ix:=0 to Window().Width-1 do @@ -40,6 +40,6 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSamples/LifeMiks.pas b/TestSamples/LifeMiks.pas index 13c8392f9..d3d086e74 100644 --- a/TestSamples/LifeMiks.pas +++ b/TestSamples/LifeMiks.pas @@ -1,23 +1,23 @@ -// "" -// +// Игра "Жизнь" на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; const -/// +/// Ширина клетки w = 4; -/// +/// Количество клеток по ширине m = 300; -/// +/// Количество клеток по высоте n = 220; -/// +/// Отступ поля от левой границы окна x0 = 1; -/// +/// Отступ поля от верхней границы окна y0 = 21; mm = m + 1; nn = n + 1; -/// +/// Количество клеток сетки по горизонтали mk = 15; -/// +/// Количество клеток сетки по вертикали nk = 10; var @@ -28,7 +28,7 @@ var gen,mil,mil1: integer; hn,hm: integer; -/// +/// Нарисовать ячейку procedure DrawCell(i,j: integer); begin DrawInBuffer := False; @@ -37,7 +37,7 @@ begin DrawInBuffer := True; end; -/// +/// Стереть ячейку procedure ClearCell(i,j: integer); begin DrawInBuffer := False; @@ -46,7 +46,7 @@ begin DrawInBuffer := True; end; -/// +/// Нарисовать все изменившиеся ячейки procedure DrawConfiguration; begin for var i:=1 to n do @@ -59,7 +59,7 @@ begin end; end; -/// +/// Нарисовать все ячейки procedure DrawConfigurationFull; begin for var i:=1 to n do @@ -68,7 +68,7 @@ begin else ClearCell(i,j); end; -/// +/// Нарисовать поле procedure DrawField; begin Pen.Color := clLightGray; @@ -88,7 +88,7 @@ begin end; end; -/// +/// Увеличить массив соседей для данной клетки procedure IncSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -106,7 +106,7 @@ begin Inc(SosediB[i2,j2]); end; -/// +/// Уменьшить массив соседей для данной клетки procedure DecSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -124,7 +124,7 @@ begin Dec(SosediB[i2,j2]); end; -/// (i,j) +/// Поставить ячейку в клетку (i,j) procedure SetCell(i,j: integer); begin if b[i,j]=0 then @@ -136,7 +136,7 @@ begin CountCells += 1; end; -/// (i,j) +/// Убрать ячейку из клетки (i,j) procedure UnSetCell(i,j: integer); begin if b[i,j]=1 then @@ -148,7 +148,7 @@ begin CountCells -= 1; end; -/// +/// Инициализировать массивы и конфигурацию поля procedure Init; var xc := n div 2; @@ -173,7 +173,7 @@ begin SetCell(xc+1,yc+1); end; -/// +/// Обработать ячейку procedure ProcessCell(i,j: integer); begin case SosediA[i,j] of @@ -197,7 +197,7 @@ begin end; {case} end; -/// +/// Перейти к следующему поколению procedure NextGen; var ifirst,jfirst,ilast,jlast: integer; begin @@ -257,7 +257,7 @@ begin end; end; -/// +/// Процедура перерисовки содержимого окна procedure LifeRedrawProc; begin Redraw; @@ -267,15 +267,15 @@ end; procedure DrawInfo; begin Brush.Color := clWhite; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(WindowWidth - 200,0,': '+IntToStr(CountCells)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(WindowWidth - 200,0,'Жителей: '+IntToStr(CountCells)+' '); end; begin - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm := m div mk; diff --git a/TestSamples/NewLife.pas b/TestSamples/NewLife.pas index 3072fd3b1..54ce1cc14 100644 --- a/TestSamples/NewLife.pas +++ b/TestSamples/NewLife.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; @@ -302,10 +302,10 @@ begin AssignArray(b,nn+1,mm+1); AssignArray(sosedia,nn+1,mm+1); AssignArray(sosedib,nn+1,mm+1); - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -334,8 +334,8 @@ begin DrawInBuffer := True; SetBrushColor(ClearColor); SetFontColor(FillColor); - TextOut(25, 0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25, 0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); if gen mod 1000 = 0 then begin mil1:=Milliseconds; writeln(gen,' ',(mil1-mil)/1000); diff --git a/TestSamples/PABCTestPlugin/PABCTestPlugin.pas b/TestSamples/PABCTestPlugin/PABCTestPlugin.pas index de2d69922..f0675127a 100644 --- a/TestSamples/PABCTestPlugin/PABCTestPlugin.pas +++ b/TestSamples/PABCTestPlugin/PABCTestPlugin.pas @@ -1,14 +1,14 @@ {$apptype dll} -// IVisualPascalABCPlugin, IVisualEnvironmentCompiler +//для доступа к IVisualPascalABCPlugin, IVisualEnvironmentCompiler {$reference PluginsSupport.dll} -// IVisualEnvironmentCompiler.Compiler +//для доступа к IVisualEnvironmentCompiler.Compiler {$reference Compiler.dll} {$reference System.Windows.Forms.dll} {$reference System.Drawing.dll} -// - +//Ресурс - иконка кнопки {$resource PABCTestPlugin_newfile.png} unit PABCTestPlugin; @@ -20,18 +20,18 @@ uses System.Collections.Generic, const NL = #13#10; type - // - *_VisualPascalABCPlugin - // VisualPascalABCPlugins.IVisualPascalABCPlugin - // , : - // 1. pas - // 2. - // 3. + //Тестовый плагин - должен иметь имя *_VisualPascalABCPlugin и реализовывать + //интерфейс VisualPascalABCPlugins.IVisualPascalABCPlugin + //Этот плагин добавляет конпку на панель и в меню, по нажатию на которую: + // 1. создается новый pas файл + // 2. он открывается в оболочке + // 3. он компилируется и запускается PABCTestPlugin_VisualPascalABCPlugin = class(IVisualPascalABCPlugin) private - // + //интерфейс на оболочку компилятора compiler: IVisualEnvironmentCompiler; - // + //для получения нового имени файла function GetNewFileName():string; begin var fileTemplate := 'C:\PABCWork.NET\NewProgram{0}.pas'; @@ -43,51 +43,51 @@ type until(not System.IO.File.Exists(pasFile)); result := pasFile; end; - // + //обработчик нажатия на кнопку procedure Click1; begin - // + //создаем файл var fileName := GetNewFileName; System.IO.File.WriteAllText(fileName, string.Format('begin'+NL+'Write(''Im new program "{0}" :)'');'+NL+'end.', fileName)); - // + //Открываем его в оболочке compiler.ExecuteAction(VisualEnvironmentCompilerAction.OpenFile, fileName); - // + //Запускаем компиляцию и выполнение compiler.ExecuteAction(VisualEnvironmentCompilerAction.Run, nil); end; public - // IVisualEnvironmentCompiler + //обязателен конструктор с одним параметром типа IVisualEnvironmentCompiler constructor(compiler: IVisualEnvironmentCompiler); begin self.compiler := compiler; end; - // + //Обязательно function get_Name:string; begin result := 'PABC Test Plugin'; end; - // + //Обязательно function get_Version:string; begin result := '1.0'; end; - // + //Обязательно function get_Copyright:string; begin result := 'PascalABCNet Team'; end; - // - // : - // . + //Обязательно + //Визуальная оболочка с помощью этой функции получает спиок кнопок на панели и кнопок в меню: + //Плагин должен добавить в соответвующий список необходимые кнопки. procedure GetGUI(MenuItems:List; ToolBarItems:List); begin - // + //Грузим изображение из ресурса var img:Image := Image.FromStream(GetResourceStream('PABCTestPlugin_newfile.png')); - // - var item1 := new PluginGUIItem(' ', ' ', img, Color.Transparent, Click1); - // + //Создаем кнопку + var item1 := new PluginGUIItem('Новый файл', 'Создать новый файл', img, Color.Transparent, Click1); + //Добавляем в меню MenuItems.Add(item1); - // + //Добавляем на панель ToolBarItems.Add(item1); end; diff --git a/TestSamples/PARALAEL/ncalcs.pas b/TestSamples/PARALAEL/ncalcs.pas index 438efe488..33fcb7da3 100644 --- a/TestSamples/PARALAEL/ncalcs.pas +++ b/TestSamples/PARALAEL/ncalcs.pas @@ -1,4 +1,4 @@ -// N +//Допустим надо провести N паралельных вычичлений на отрезках функции function f(l,r:real):real; begin diff --git a/TestSamples/PARALAEL/syntax1.pas b/TestSamples/PARALAEL/syntax1.pas index 01b789668..c65c5df0b 100644 --- a/TestSamples/PARALAEL/syntax1.pas +++ b/TestSamples/PARALAEL/syntax1.pas @@ -1,27 +1,27 @@ -// -// 3 - GetResult SetX SetY +//синхронизация +// длянный код вводит 3 имени - GetResult SetX SetY function GetResult:real set SetX(x: real), SetY(y: real); begin - // SetX SetY + //зайдет сюда когда будут вызваны SetX и SetY result := x*y; end; -// +//асинхронные процедуры procedure CalcX(z:real); async; begin - z := {(z)}; + z := {логика(z)}; SetX(z); end; procedure CalcY(z:real); async; begin - z := {(z)}; + z := {логика(z)}; SetY(z); end; begin - CalcX(3.14);// 1 - CalcY(2.71);// 2 + CalcX(3.14);//запускается в потоке 1 + CalcY(2.71);//запускается в потоке 2 writeln(GetResult); end. \ No newline at end of file diff --git a/TestSamples/PARALAEL/syntax2.pas b/TestSamples/PARALAEL/syntax2.pas index 970d056bb..959938142 100644 --- a/TestSamples/PARALAEL/syntax2.pas +++ b/TestSamples/PARALAEL/syntax2.pas @@ -1,26 +1,26 @@ -// 2 +//синтаксис 2 procedure CalcX(z:real); async; begin - GetResult.x := {(z)}; + GetResult.x := {логика(z)}; end; procedure CalcY(z:real); async; begin - GetResult.y := {(z)}; + GetResult.y := {логика(z)}; end; function GetResult:real; asyncparam x,y:real; var z:real; begin - // GetResult.X:= GetResult.Y:= - // + //зайдет сюда когда будут вызваны GetResult.X:= и GetResult.Y:= + //Выполнится в основном потоке z := x*y; result := z; end; begin - CalcX(3.14);// 1 - CalcY(2.71);// 2 + CalcX(3.14);//запускается в потоке 1 + CalcY(2.71);//запускается в потоке 2 writeln(GetResult); end. \ No newline at end of file diff --git a/TestSamples/Paporotnik/v1/Main.pas b/TestSamples/Paporotnik/v1/Main.pas index c8746d680..48e120729 100644 --- a/TestSamples/Paporotnik/v1/Main.pas +++ b/TestSamples/Paporotnik/v1/Main.pas @@ -1,10 +1,10 @@ -// " " +//Рисование фракталов семейства "Лист папоротника" //(c) DarkStar 2007 uses GraphABC, - PaporotnikData; // - //Paporotnik2Data; // - //ElkaData; // + PaporotnikData; //Лист папоротника + //Paporotnik2Data; //Прямой лист папоротника + //ElkaData; //Елка const Iterations = 1000000; diff --git a/TestSamples/Paporotnik/v1/Paporotnik2Data.pas b/TestSamples/Paporotnik/v1/Paporotnik2Data.pas index 8fabb2bb3..f6e22c484 100644 --- a/TestSamples/Paporotnik/v1/Paporotnik2Data.pas +++ b/TestSamples/Paporotnik/v1/Paporotnik2Data.pas @@ -1,4 +1,4 @@ -// +//Папоротник unit Paporotnik2Data; const diff --git a/TestSamples/Paporotnik/v1/PaporotnikData.pas b/TestSamples/Paporotnik/v1/PaporotnikData.pas index bf8e7ca1f..0e0f120c1 100644 --- a/TestSamples/Paporotnik/v1/PaporotnikData.pas +++ b/TestSamples/Paporotnik/v1/PaporotnikData.pas @@ -1,4 +1,4 @@ -// +//Папоротник с прямыми листьями unit PaporotnikData; const diff --git a/TestSamples/Paporotnik/v2/Paporotnik.pas b/TestSamples/Paporotnik/v2/Paporotnik.pas index 6224d87c8..3d689e7a5 100644 --- a/TestSamples/Paporotnik/v2/Paporotnik.pas +++ b/TestSamples/Paporotnik/v2/Paporotnik.pas @@ -1,17 +1,17 @@ -/// " " +///Модуль для рисования фракталов семейства "Лист папоротника" unit Paporotnik; uses GraphABC; type - /// + ///Настройки фрактала PaporotnikFractalInitalData = record data: array of array of real; P0,P1,P2,P3:real; end; - /// " " + ///Фрактал "Лист папоротника" PaporotnikFractal = class private data: array of array of real; diff --git a/TestSamples/Paporotnik/v2/PaporotnikData.pas b/TestSamples/Paporotnik/v2/PaporotnikData.pas index 6eb296f99..38069519a 100644 --- a/TestSamples/Paporotnik/v2/PaporotnikData.pas +++ b/TestSamples/Paporotnik/v2/PaporotnikData.pas @@ -1,10 +1,10 @@ -/// +///Константы задающие фракталы unit PaporotnikData; uses Paporotnik; var - /// + ///Папоротник с изогнутым листом PaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.0000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0400, -0.0400, 0.8500, 0, 1.6000), @@ -15,7 +15,7 @@ var P2: 7; P3: 7); - /// + ///Папоротник с прямым листом SimplePaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.00, 0.00, 0.00, 0.16, 0, 0.00), ( 0.85, 0.00, 0.00, 0.85, 0, 1.60), @@ -26,7 +26,7 @@ var P2: 7; P3: 7); - /// + ///Елка ElkaData: PaporotnikFractalInitalData := ( data: (( 0.1000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0000, 0.0000, 0.8500, 0, 1.6000), diff --git a/TestSamples/battle.pas b/TestSamples/battle.pas index ca6b1ef3f..504aa48d1 100644 --- a/TestSamples/battle.pas +++ b/TestSamples/battle.pas @@ -1,34 +1,34 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи c : color; public CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie:=new fishtype[types+1]; // +var opisanie:=new fishtype[types+1]; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); @@ -161,17 +161,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -196,7 +196,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -205,14 +205,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -251,35 +251,35 @@ SetSmoothing(False); SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); -SetWindowCaption(' '); +SetWindowCaption('Битва за жизнь'); SetFontSize(7); SetFontName('Arial'); SetBrushColor(BkColor); FillRectangle(0, 0, Width, Height); SetFontColor(clWhite); -TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); -TextOut(10, ymax + 20+1*18, ' . - '); -TextOut(10, ymax + 20+2*18, ' . , .'); -TextOut(10, ymax + 20+3*18, ' : - , , ,'); -TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); -TextOut(10, ymax + 20+5*18, ' , ; - , .'); +TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); +TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); +TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); +TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); +TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); +TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; -//c - . -//CanRazm - -// . -//MaxKol - . -//Kol - . -//MaxLife - . -// , , , . -//MinFood - , -// ( ; -1). -//Speed - . 2 . -//See - - . +//c - цвет. +//CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя +// её последовательными размножениями. +//MaxKol - максимально допустимое количество рыб данного вида. +//Kol - количество рыб данного вида в текущий момент времени. +//MaxLife - максимальная продолжительность жизни. +// После того, как рыба сделает больше шагов, чем это число, она умирает. +//MinFood - минимальное количество съеденных жертв, необходимое для размножения +// (только для хищников; для жертв это количество принято за -1). +//Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. +//See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -289,7 +289,7 @@ opisanie[0]:= fishtype.create(clRed, 1000, 40, 5000, 1, 1, SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); -// +//Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -302,7 +302,7 @@ p:= fish.create(xmax - 10, ymax - 10, rmax, 3, KonKilka, StartAkula); StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); -// , - . +//И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; i:=0;var c:=getallcount();LockDrawing; repeat diff --git a/TestSuite/CompilationSamples/15.pas b/TestSuite/CompilationSamples/15.pas index b75b36d6b..23206ab8b 100644 --- a/TestSuite/CompilationSamples/15.pas +++ b/TestSuite/CompilationSamples/15.pas @@ -1,16 +1,16 @@ -// 15 +// Игра в 15 uses GraphABC,ABCObjects,ABCButtons; const -/// +/// размер поля n = 4; -/// +/// размер фишки sz = 100; -/// +/// зазор между фишками zz = 10; -/// +/// отступ от левого и правого краев x0 = 20; -/// +/// отступ от верхнего и нижнего краев y0 = 20; var @@ -22,9 +22,9 @@ var EmptyCellX,EmptyCellY: integer; MovesCount: integer; - EndOfGame: boolean; // True + EndOfGame: boolean; // True если все фишки стоят на своих местах -// +// Поменять местами две фишки procedure Swap(var p,p1: SquareABC); begin PABCSystem.Swap(p,p1); @@ -36,20 +36,20 @@ begin p1.Top := i; end; -// , +// Определить, являются ли клетки соседями function Sosedi(x1,y1,x2,y2: integer): boolean; begin Result := (abs(x1-x2)=1) and (y1=y2) or (abs(y1-y2)=1) and (x1=x2) end; -// +// Заполнить вспомогательный массив цифр procedure FillDigitsArr; begin for var i:=1 to n*n-1 do digits[i] := i; end; -// . +// Перемешать вспомогательный массив цифр. Количество обменов должно быть четным procedure MeshDigitsArr; var x: integer; begin @@ -61,13 +61,13 @@ begin Swap(digits[i],digits[x]); end; if n mod 2=0 then - Swap(digits[1],digits[2]); // + Swap(digits[1],digits[2]); // количество обменов должно быть четным end; -// . - 0 +// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 procedure Fill15ByDigitsArr; begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // + Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол EmptyCellX := n; EmptyCellY := n; var i := 1; @@ -80,18 +80,18 @@ begin end; end; -// +// Перемешать массив фишек procedure Mesh15; begin MeshDigitsArr; Fill15ByDigitsArr; MovesCount := 0; EndOfGame := False; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.Color := RGB(200,200,255); end; -// +// Создать массив фишек procedure Create15; begin EmptyCellX := n; @@ -111,7 +111,7 @@ begin Fill15ByDigitsArr; end; -// , +// Проверить, все ли фишки стоят на своих местах function IsSolution: boolean; var x,y,i: integer; begin @@ -132,24 +132,24 @@ end; procedure MouseDown(x,y,mb: integer); begin - if EndOfGame then // , "" + if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" exit; - if ObjectUnderPoint(x,y)=nil then // E , + if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; - var fx := (x-x0) div (sz+zz) + 1; // , + var fx := (x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью var fy := (y-y0) div (sz+zz) + 1; if (fx>n) or (fy>n) then exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // , + if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами begin Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); EmptyCellX := fx; EmptyCellY := fy; Inc(MovesCount); - StatusRect.Text := ' : ' + IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: ' + IntToStr(MovesCount); if IsSolution then begin - StatusRect.Text := '! : ' + IntToStr(MovesCount); + StatusRect.Text := 'Победа! Сделано ходов: ' + IntToStr(MovesCount); StatusRect.Color := RGB(255,200,200); EndOfGame := True; end @@ -158,18 +158,18 @@ end; begin SetSmoothingOff; - Window.Title := ' 15'; + Window.Title := 'Игра в 15'; Window.IsFixedSize := True; SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); EndOfGame := False; Create15; - MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'',clLightGray); + MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); MeshButton.OnClick := Mesh15; StatusRect := new RectangleABC(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); StatusRect.TextVisible := True; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.BorderWidth := 2; StatusRect.BorderColor := RGB(80,80,255); diff --git a/TestSuite/CompilationSamples/ABC1.pas b/TestSuite/CompilationSamples/ABC1.pas index dda84ddc0..0fe49e801 100644 --- a/TestSuite/CompilationSamples/ABC1.pas +++ b/TestSuite/CompilationSamples/ABC1.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; @@ -13,7 +13,7 @@ var z: StarABC; begin - Window.Title := 'ABCObjects: '; + Window.Title := 'ABCObjects: свойства графических объектов'; z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); r := new RectangleABC(100,100,200,100,Color.Gold); Pause; diff --git a/TestSuite/CompilationSamples/ABCObjects.pas b/TestSuite/CompilationSamples/ABCObjects.pas index b5eec0a34..36131b2a3 100644 --- a/TestSuite/CompilationSamples/ABCObjects.pas +++ b/TestSuite/CompilationSamples/ABCObjects.pas @@ -1,10 +1,10 @@ // Copyright (c) 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 ABCObjects; //{$apptype windows} @@ -22,7 +22,7 @@ type ContainerABC = class; GRectangle = System.Drawing.Rectangle; - /// + /// Базовый класс для всех графических объектов ObjectABC = class private fx,fy: integer; @@ -36,7 +36,7 @@ type _dx,_dy: integer; procedure SetCoords(x,y: integer); protected - // InternalDraw: ( ). Draw(fx,fy) + // InternalDraw: низкоуровневая процедура (не вызывается пользователем). Просто вызывает Draw(fx,fy) procedure InternalDraw; procedure SetVis(v: boolean); procedure SetColor(cl: GColor); @@ -68,102 +68,102 @@ type procedure DrawText(x,y: integer; g: Graphics); procedure Init(x,y,w,h: integer; cl: GColor); procedure InitBy(g: ObjectABC); - // Draw: . + // Draw: переопределяется в подклассах. Рисует объект на текущей канве procedure Draw(x,y: integer; g: Graphics); virtual; begin end; procedure Draw(x,y: integer); public - /// (w,h) cl (x,y) + /// Создает графический объект размера (w,h) цвета cl с координатами левого верхнего угла (x,y) constructor Create(x,y,w,h: integer; cl: GColor := clWhite); - /// - g + /// Создает графический объект - копию объекта g constructor Create(g: ObjectABC); - /// + /// Уничтожает графический объект destructor Destroy; - // Redraw: ( ). - // , drawRect(Bounds). - // , (., ) - // ( ) + // Redraw: низкоуровневая процедура (не вызывается пользователем). + // Обновляет изображение объекта на экране, вызывая drawRect(Bounds). + // Вызывается в ситуациях, когда границы объекта не изменяются (напр., смена цвета) + // или увеличиваются (добавление нового объекта к фигуре) procedure Redraw; - // RedrawNow - , LockDrawing + // RedrawNow - вызывает перерисовку объекта, несмотря на LockDrawing procedure RedrawNow; - /// (x,y) + /// Перемещает левый верхний угол графического объекта к точке (x,y) procedure MoveTo(x,y: integer); - /// (a,b) + /// Перемещает графический объект на вектор (a,b) procedure MoveOn(a,b: integer); - /// , dx,dy + /// Перемещает графический объект на вектор, задаваемый свойствами dx,dy procedure Move; virtual; - /// f (f>1 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 00,' <0'); +// Assert(f>0,'масштабный коэффициент<0'); Width := round(Width*f); Height := round(Height*f); end; @@ -1272,7 +1272,7 @@ end; //------ BoundedObjectABC ------- constructor BoundedObjectABC.Create(x,y,w,h: integer; cl: GColor); begin -// ? +// А нужно ли это? Init(x,y,w,h,cl); end; @@ -1690,7 +1690,7 @@ begin fh := TextHeight(Text); if not __LockDrawingObjects then DrawAfterChangeBounds(r,Bounds) -// Redraw; // ! +// Redraw; // это неверно! end; procedure TextABC.SetTB(b: boolean); @@ -1812,7 +1812,7 @@ end; procedure RegularPolygonABC.SetWidth(Width: integer); begin if Width mod 2 = 0 then - Width := Width - 1; // + Width := Width - 1; // Ширина и высота должны быть нечетными ObjectABCSetSize(Width,Width); end; @@ -2212,7 +2212,7 @@ begin p := Picture.Create(fname); p.Transparent := True; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2223,7 +2223,7 @@ procedure MultiPictureABC.Init(x,y,w: integer; p: Picture); begin Self.p := p; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2287,7 +2287,7 @@ procedure MultiPictureABC.ChangePicture(w: integer; fname: string); begin p.Load(fname); if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; Width := w; @@ -2303,7 +2303,7 @@ begin Inc(cnt); p1 := Picture.Create(fname); if (p1.Width<>Width) or (p1.Height<>Height) then - raise Exception.Create(' '+fname+' MultiPictureABC'); + raise Exception.Create('Размеры картинки в файле '+fname+' отличаются от размеров MultiPictureABC'); p1.Transparent := Transparent; p.Width := p.Width + Width; r1 := new System.Drawing.Rectangle(0,0,Width,Height); @@ -2314,7 +2314,7 @@ end; procedure MultiPictureABC.SetCurrentPicture(i: integer); begin if (i<1) or (i>Count) then - raise Exception.Create(' '+IntToStr(i)+' '+IntToStr(i)+'..'+IntToStr(Count)); + raise Exception.Create('Номер картинки '+IntToStr(i)+' находится вне диапазона '+IntToStr(i)+'..'+IntToStr(Count)); cur := i; Redraw; end; @@ -2658,7 +2658,7 @@ begin if ob=nil then Exit; ob.dx := x; - ob.dy := y; // dx dy + ob.dy := y; // использую dx и dy для задания клеточных координат на доске ob.Center := new Point(Left+CellSizeX*(x-1)+CellSizeX div 2,Top+CellSizeY*(y-1)+CellSizeY div 2); end; diff --git a/TestSuite/CompilationSamples/ABCSprites.pas b/TestSuite/CompilationSamples/ABCSprites.pas index 601e52ccd..66a3b4e0a 100644 --- a/TestSuite/CompilationSamples/ABCSprites.pas +++ b/TestSuite/CompilationSamples/ABCSprites.pas @@ -1,8 +1,8 @@ // Copyright (c) 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) -/// ABCSprites - . -/// SpriteABC MultiPictureABC. +///Модуль ABCSprites реализует спрайты - анимационные объекты с автоматически меняющимися кадрами. +///Спрайт представляется классом SpriteABC и является разновидностью мультикартинки MultiPictureABC. unit ABCSprites; //#savepcu false @@ -13,9 +13,9 @@ uses ABCObjects,Events,GraphABC,Utils; type SpriteState = record - Name: string; // - Beg: integer; // , - Count: integer; // + Name: string; // имена состояний + Beg: integer; // номера картинок, являющихся началами состояний + Count: integer; // длины состояний constructor Create(n: string; b,c: integer); begin Name := n; @@ -27,10 +27,10 @@ type SpriteABC = class(MultiPictureABC) private States: Array of SpriteState; - curst: integer; // - ticks: integer; // , : 0..10 - act: boolean; // - curtick: integer; // , + curst: integer; // номер текущего состояния + ticks: integer; // сколько тиков проходит до смены кадра, обратно пропорционален скорости: 0..10 + act: boolean; // активен ли спрайт + curtick: integer; // текущий тик, когда он становится равным procedure SetStateName(n: string); function GetStateName: string; procedure SetState(n: integer); @@ -42,75 +42,75 @@ type function GetFrame: integer; protected procedure Init0; - procedure Init(x,y: integer; fname: string); // Add AddState, CheckStates - procedure Init(x,y,w: integer; fname: string); // AddState, CheckStates + procedure Init(x,y: integer; fname: string); // после этого придется вызывать Add и AddState, затем CheckStates + procedure Init(x,y,w: integer; fname: string); // после этого придется вызывать AddState, затем CheckStates procedure Init(x,y,w: integer; p: Picture); procedure InitWithStates(x,y: integer; fname: string); procedure InitBy(g: SpriteABC); public - /// , fname. - /// fname , .spinf - /// , . Add. - /// AddStates CheckStates - /// .spinf, - /// . - /// (x,y) + /// Создает спрайт, загружая его из файла с именем fname. + ///Имя fname может быть либо именем графического файла, либо именем информационного файла спрайта с расширением .spinf + ///Если имя является именем графического файла, то создается спрайт с одним кадром. Остальные кадры добавляются методом Add. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///Если файл имеет расширение .spinf, то он содержит информацию о кадрах и состояниях спрайта и + ///должен сопровождаться соответствующим графическим файлом. + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y: integer; fname: string); - /// , fname. , - /// , . - /// w. fname w, . - /// AddStates CheckStates - /// (x,y) + /// Создает спрайт, загружая его из файла fname. Файл должен хранить рисунок, представляющий собой + ///последовательность кадров одного размера, расположенных по горизонтали. + ///Каждый кадр считается имеющим ширину w. Если ширина рисунка в файле fname не кратна w, то возникает исключение. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y,w: integer; fname: string); - /// , p: Picture. , - /// , . - /// w. w, . - /// AddStates CheckStates - /// (x,y) + /// Создает спрайт, загружая его из объекта p: Picture. Он должен хранить рисунок, представляющий собой + ///последовательность кадров одного размера, расположенных по горизонтали. + ///Каждый кадр считается имеющим ширину w. Если ширина рисунка не кратна w, то возникает исключение. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y,w: integer; p: Picture); - /// - g + /// Создает спрайт - копию спрайта g constructor Create(g: SpriteABC); - /// + /// Удаляет спрайт destructor Destroy; - /// . CheckStates + /// Добавляет состояние к спрайту. После добавления всех состояний следует вызвать CheckStates procedure AddState(name: string; count: integer); - /// . + /// Проверяет корректность набора состояний. Вызывается после добавления всех состояний procedure CheckStates; - /// + /// Добавляет кадр к спрайту procedure Add(fname: string); - /// - /// fname - /// , , .spinf + /// Сохраняет графический и информационный файлы спрайта + /// Имя fname задает имя графического файла + /// Информационный файл сохраняется в тот же каталог, что и графический, имеет то же имя и расширение .spinf procedure SaveWithInfo(fname: string); - /// + /// Переходит к следующему кадру в текущем состоянии procedure NextFrame; - /// ; ticks, 1 NextFrame + /// Переходит к следующему тику таймера; если он равен ticks, то он сбрасывается в 1 и вызывается NextFrame procedure NextTick; - /// + /// Имя состояния property StateName: string read GetStateName write SetStateName; - /// (1..StateCount) + /// Номер состояния (1..StateCount) property State: integer read curst write SetState; - /// + /// Количество состояний property StateCount: integer read GetStateCount; - /// (1..10) + /// Скорость спрайта (1..10) property Speed: integer read GetSpeed write SetSpeed; - /// : True, (.. ), False + /// Активность спрайта: True, если спрайт активен (т.е. происходит его анимация), и False в противном случае property Active: boolean read act write SetActive; - /// + /// Текущий кадр в текущем состоянии property Frame: integer read GetFrame write SetFrame; - /// + /// Возвращает количество кадров в текущем состоянии function FrameCount: integer; - /// + /// Возвращает начальный кадр в текущем состоянии function FrameBeg: integer; - /// + /// Возвращает клон объекта function Clone0: ObjectABC; override; - /// + /// Возвращает клон объекта function Clone: SpriteABC; end; -/// +/// Стартует анимацию всех спрайтов procedure StartSprites; -/// +/// Останавливает анимацию всех спрайтов procedure StopSprites; ///-- @@ -123,8 +123,8 @@ implementation const infoext = '.spinf'; var - _Sprites: System.Collections.ArrayList; // - _t: System.Timers.Timer; // + _Sprites: System.Collections.ArrayList; // массив спрайтов + _t: System.Timers.Timer; // таймер спрайтов timerMs: integer; procedure SpriteABC.Init0; @@ -169,7 +169,7 @@ begin { if not FileExists(fname) then fname := StandardImageFolder + fname;} if not FileExists(fname) then - raise Exception.Create(' '+ExtractFileName(fname)+' '); + raise Exception.Create('Файл '+ExtractFileName(fname)+' не найден'); Init0; @@ -179,7 +179,7 @@ begin Delete(s,i,Length(s)); s := s + infoext; if not FileExists(s) then - raise Exception.Create(' '+ExtractFileName(s)+' ');} + raise Exception.Create('Информационный файл спрайта '+ExtractFileName(s)+' не найден');} try assign(f,fname); @@ -208,7 +208,7 @@ begin on e: Exception do begin writeln(e); - raise Exception.Create(' '); + raise Exception.Create('Ошибка считывания из информационного файла спрайта'); end; end; inherited Init(x,y,w,fname); @@ -270,7 +270,7 @@ begin CheckStates; s:=LowerCase(ExtractFileExt(fname)); if (s<>'.bmp') and (s<>'.jpg') and (s<>'.gif') and (s<>'.png') then - raise Exception.Create(' '); + raise Exception.Create('Задан неверный формат графического файла'); Save(fname); fnameold := fname; i := Pos(s,fname); @@ -278,14 +278,14 @@ begin fname := fname + infoext; assign(f,fname); rewrite(f); - writeln(f,ExtractFileName(fnameold),' // '); - writeln(f,width,' // '); -// writeln(f,count,' // '); - writeln(f,Speed,' // '); - writeln(f,StateCount,' // '); + writeln(f,ExtractFileName(fnameold),' // имя файла спрайта'); + writeln(f,width,' // ширина кадра'); +// writeln(f,count,' // количество кадров'); + writeln(f,Speed,' // скорость'); + writeln(f,StateCount,' // количество состояний'); for i:=0 to StateCount-1 do if i=0 then - writeln(f,States[i].Name,' ',States[i].Count,' // ') + writeln(f,States[i].Name,' ',States[i].Count,' // имена состояний и количество кадров в них') else writeln(f,States[i].Name,' ',States[i].Count); close(f); end; @@ -299,12 +299,12 @@ begin for i:=0 to StateCount-1 do s := s + States[i].Count; if s<>Count then - raise Exception.Create(' '); + raise Exception.Create('Сумма кадров в состояниях спрайта отличается от общего количества кадров'); end; procedure SpriteABC.Add(fname: string); begin -// Assert(StateCount=1,' 1'); +// Assert(StateCount=1,'при добавлении кадров количество состояний должно быть равно 1'); inherited Add(fname); Inc(States[0].Count); end; @@ -359,8 +359,8 @@ end; procedure SpriteABC.SetSpeed(n: integer); begin - // - // ! + // пока нет нулевой скорости + // сделать поправку на изменение тика при уменьшении скорости! if n<1 then n := 1; if n>10 then n := 10; case n of @@ -405,7 +405,7 @@ begin if n>States[curst-1].Count then n := 1; Frame := n; -// Redraw; // ! +// Redraw; // это надо отключать по флагу! end; procedure SpriteABC.SetFrame(n: integer); @@ -496,7 +496,7 @@ var __initialized := false; procedure __InitModule; begin - timerMs := 50; // . + timerMs := 50; // дискретизация таймера. Потом допустима перекалибровка _Sprites := new System.Collections.ArrayList; _t := new System.Timers.Timer(timerMs); _t.Elapsed += TimerProc; diff --git a/TestSuite/CompilationSamples/AllFromObject.pas b/TestSuite/CompilationSamples/AllFromObject.pas index 1bf1fd91f..f33bcd697 100644 --- a/TestSuite/CompilationSamples/AllFromObject.pas +++ b/TestSuite/CompilationSamples/AllFromObject.pas @@ -1,4 +1,4 @@ -// - Object +// Все типы - производные от Object var i: integer; r: real; @@ -10,5 +10,5 @@ begin o := r; writeln(o.GetType); if o.GetType=typeof(real) then - writeln(' o - '); + writeln('В переменной o - вещественный тип'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Amp.pas b/TestSuite/CompilationSamples/Amp.pas index a7c48162d..64c8ee9f9 100644 --- a/TestSuite/CompilationSamples/Amp.pas +++ b/TestSuite/CompilationSamples/Amp.pas @@ -1,9 +1,9 @@ -// & +// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова var &begin,&end: integer; begin &begin := 1; &end := 2; - var t: System.Type := &begin.GetType; // System.Type & + var t: System.Type := &begin.GetType; // в System.Type использовать & не надо write(&begin,' ',&end,' ',t); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Animals.pas b/TestSuite/CompilationSamples/Animals.pas index a6cd053a8..b8eda8322 100644 --- a/TestSuite/CompilationSamples/Animals.pas +++ b/TestSuite/CompilationSamples/Animals.pas @@ -1,6 +1,6 @@ -// " ". -// " " -// : " " - " " +// Самообучающаяся игра "Угадай животное". +// Старайтесь на вопрос "Чем отличается" вводить самый общий ответ +// Например: "Чем отличается чиж от ежа" - "Умеет летать" type TNode = class s: string; @@ -15,7 +15,7 @@ type var f: text; -/// +/// Сохранить дерево в файл procedure SaveToFile(p: TNode); begin if p=nil then @@ -28,7 +28,7 @@ begin SaveToFile(p.right); end; -/// +/// Загрузить дерево из файла function LoadFromFile: TNode; var s: string; @@ -52,10 +52,10 @@ var s,q: string; begin - writeln(' '); + writeln('Загадайте животное'); assign(f, 'animals_data.txt'); if not FileExists('animals_data.txt') then - root := new TNode('') + root := new TNode('Собака') else begin reset(f); @@ -66,7 +66,7 @@ begin p := root; while p.left<>nil do begin - write(p.s+'? (0 - , 1 - ): '); + write(p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then p := p.left @@ -74,15 +74,15 @@ begin p := p.right end; - write(' '+p.s+'? (0 - , 1 - ): '); + write('Это '+p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then - writeln(' !') + writeln('Я угадала!') else begin - write(' . ? '); + write('Я проиграла. Что это за животное? '); readln(s); - write(' , '+p.s+': '); + write('Введите вопрос, отличающий это животное от '+p.s+': '); readln(q); p1 := new TNode(s); p2 := new TNode(p.s); diff --git a/TestSuite/CompilationSamples/ArrayLib.pas b/TestSuite/CompilationSamples/ArrayLib.pas index e9b98c503..a06ade6a4 100644 --- a/TestSuite/CompilationSamples/ArrayLib.pas +++ b/TestSuite/CompilationSamples/ArrayLib.pas @@ -1,6 +1,6 @@ unit ArrayLib; -/// +/// Вывод массива procedure WriteArray(a: array of T); begin for var i:=0 to a.Length-1 do @@ -15,7 +15,7 @@ begin writeln; end; -/// +/// Создание массива и заполнение его случайными числами procedure CreateRandom(var a: array of integer; n: integer); begin a := new integer[n]; diff --git a/TestSuite/CompilationSamples/Arrays.pas b/TestSuite/CompilationSamples/Arrays.pas index 084888c38..ef7ac855c 100644 --- a/TestSuite/CompilationSamples/Arrays.pas +++ b/TestSuite/CompilationSamples/Arrays.pas @@ -8,70 +8,70 @@ interface uses System; -/// , delimiter +/// Выводит массив, используя delimiter в качестве разделителя procedure &Array.Write(delimiter: string := ' '); -/// , delimiter , +/// Выводит массив, используя delimiter в качестве разделителя, и осуществляет переход на новую строку procedure &Array.Writeln(delimiter: string := ' '); -/// 0 99 +/// Заполняет целый массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array of integer); -/// minValue maxValue +/// Заполняет целый массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array of integer; minValue, maxValue: integer); -/// 0 10 +/// Заполняет вещественный массив случайными числами в диапазоне от 0 до 10 procedure FillByRandom(a: array of real); -/// minValue maxValue +/// Заполняет вещественный массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array of real; minValue, maxValue: real); -/// x +/// Заполняет массив значением x procedure FillByValue(a: array of T; x: T); -/// n, 0 99 +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99 function CreateRandomIntegerArray(n: integer): array of integer; -/// n, minValue maxValue +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomIntegerArray(n: integer; minValue, maxValue: integer): array of integer; -/// n, 0 10 +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10 function CreateRandomRealArray(n: integer): array of real; -/// n, minValue maxValue +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomRealArray(n: integer; minValue, maxValue: real): array of real; -/// +/// Вводит целый массив procedure ReadArray(a: array of integer); -/// +/// Вводит вещественный массив procedure ReadArray(a: array of real); -/// +/// Вводит массив строк procedure ReadArray(a: array of string); -/// , delimiter +/// Выводит массив, используя delimiter в качестве разделителя значений procedure WriteArray(a: array of T; delimiter: string := ' '); -/// , delimiter , +/// Выводит массив, используя delimiter в качестве разделителя значений, и осуществляет переход на новую строку procedure WritelnArray(a: array of T; delimiter: string := ' '); -/// +/// Сортирует массив по возрастанию procedure Sort(a: array of T); -/// +/// Сортирует массив по убыванию procedure SortDescending(a: array of T); -/// 0 99 +/// Заполняет двумерный целый массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array [,] of integer); -/// minValue maxValue +/// Заполняет двумерный целый массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer); -/// 0 99 +/// Заполняет двумерный вещественный массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array [,] of real); -/// minValue maxValue +/// Заполняет двумерный вещественный массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array [,] of real; minValue, maxValue: real); -/// x +/// Заполняет массив значением x procedure FillByValue(a: array [,] of T; x: T); -/// n, 0 99 +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99 function CreateRandomIntegerMatrix(m, n: integer): array [,] of integer; -/// n, minValue maxValue +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomIntegerMatrix(m, n: integer; minValue, maxValue: integer): array [,] of integer; -/// n, 0 10 +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10 function CreateRandomRealMatrix(m, n: integer): array [,] of real; -/// n, minValue maxValue +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomRealMatrix(m, n: integer; minValue, maxValue: real): array [,] of real; -/// +/// Выводит двумерный массив procedure WriteMatrix(a: array [,] of T; width: integer := 0); -/// +/// Выводит двумерный массив procedure WriteMatrix(a: array [,] of real; width: integer := 0; digitsAfterPoint: integer := 2); implementation -// ================== ================== +// ================== Одномерные массивы ================== procedure FillByRandom(a: array of integer; minValue, maxValue: integer); begin @@ -172,7 +172,7 @@ begin System.Array.Reverse(a); end; -// ================== ================== +// ================== Двумерные массивы ================== procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer); begin @@ -249,7 +249,7 @@ begin end; end; -// ================== ================== +// ================== Методы расширения для массивов ================== procedure &Array.Write(delimiter: string); begin diff --git a/TestSuite/CompilationSamples/Assign1.pas b/TestSuite/CompilationSamples/Assign1.pas index 42322042f..ac5fe9ee8 100644 --- a/TestSuite/CompilationSamples/Assign1.pas +++ b/TestSuite/CompilationSamples/Assign1.pas @@ -1,12 +1,12 @@ -// +// Использование вспомогательных переменных var r: real; begin - write(' r: '); + write('Введите r: '); readln(r); - var r2,r4,r8: real; // + var r2,r4,r8: real; // вспомогательные переменные r2 := r * r; r4 := r2 * r2; r8 := r4 * r4; - writeln(r,' 8 = ',r8); + writeln(r,' в степени 8 = ',r8); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Assign2.pas b/TestSuite/CompilationSamples/Assign2.pas index e255b6f1f..13b2ad3a9 100644 --- a/TestSuite/CompilationSamples/Assign2.pas +++ b/TestSuite/CompilationSamples/Assign2.pas @@ -1,12 +1,12 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real; // + var v: real; // вспомогательная переменная v := x; x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/AssignExt.pas b/TestSuite/CompilationSamples/AssignExt.pas index 69455e9c0..109d1f089 100644 --- a/TestSuite/CompilationSamples/AssignExt.pas +++ b/TestSuite/CompilationSamples/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Увеличение в 3 раза writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/TestSuite/CompilationSamples/AutoVars.pas b/TestSuite/CompilationSamples/AutoVars.pas index 2756e7242..25797a7bb 100644 --- a/TestSuite/CompilationSamples/AutoVars.pas +++ b/TestSuite/CompilationSamples/AutoVars.pas @@ -1,5 +1,5 @@ -// -// for +// Автоопределение типа переменной +// Описание переменной в заголовке цикла for begin var x := 2; for var i:=1 to 10 do diff --git a/TestSuite/CompilationSamples/Battle.pas b/TestSuite/CompilationSamples/Battle.pas index e6cbcf543..8e7c03bc5 100644 --- a/TestSuite/CompilationSamples/Battle.pas +++ b/TestSuite/CompilationSamples/Battle.pas @@ -1,34 +1,34 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи c : color; public CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); @@ -161,17 +161,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -196,7 +196,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -205,14 +205,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -251,35 +251,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); - SetWindowCaption(' '); + SetWindowCaption('Битва за жизнь'); SetFontSize(7); SetFontName('Arial'); SetBrushColor(BkColor); FillRectangle(0, 0, Width, Height); SetFontColor(clWhite); - TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); - TextOut(10, ymax + 20+1*18, ' . - '); - TextOut(10, ymax + 20+2*18, ' . , .'); - TextOut(10, ymax + 20+3*18, ' : - , , ,'); - TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); - TextOut(10, ymax + 20+5*18, ' , ; - , .'); + TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); + TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); + TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); + TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); + TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); + TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; - //c - . - //CanRazm - - // . - //MaxKol - . - //Kol - . - //MaxLife - . - // , , , . - //MinFood - , - // ( ; -1). - //Speed - . 2 . - //See - - . + //c - цвет. + //CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя + // её последовательными размножениями. + //MaxKol - максимально допустимое количество рыб данного вида. + //Kol - количество рыб данного вида в текущий момент времени. + //MaxLife - максимальная продолжительность жизни. + // После того, как рыба сделает больше шагов, чем это число, она умирает. + //MinFood - минимальное количество съеденных жертв, необходимое для размножения + // (только для хищников; для жертв это количество принято за -1). + //Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. + //See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -289,7 +289,7 @@ begin SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); - // + //Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -302,7 +302,7 @@ begin StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); - // , - . + //И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; //i:=0;c:=getallcount;LockDrawing; repeat diff --git a/TestSuite/CompilationSamples/BigIntegerExample.pas b/TestSuite/CompilationSamples/BigIntegerExample.pas index f2d077d0b..fb473bcfd 100644 --- a/TestSuite/CompilationSamples/BigIntegerExample.pas +++ b/TestSuite/CompilationSamples/BigIntegerExample.pas @@ -1,4 +1,4 @@ -// . 100! +// Использование длинных целых. Вычисление 100! {$reference 'System.Numerics.dll'} uses System.Numerics; diff --git a/TestSuite/CompilationSamples/Bill.pas b/TestSuite/CompilationSamples/Bill.pas index ff5f43f30..91f57c0ea 100644 --- a/TestSuite/CompilationSamples/Bill.pas +++ b/TestSuite/CompilationSamples/Bill.pas @@ -1,22 +1,22 @@ -// . -// Shift+F9 !!! +// Отражение шарика от стенок. Консольный режим +// Для запуска программы используйте Shift+F9 !!! uses CRT; const -// +// Ширина поля w = 80; -// +// Высота поля h = 24; var -/// +/// Координаты шарика ax,ay: integer; -/// +/// Вектор перемещения шарика vx,vy: integer; -/// +/// Массив клеток поля a: array [1..w,1..h] of char; -/// a +/// Очистка массива a procedure CleanA; begin for var j := 1 to h do @@ -24,21 +24,21 @@ begin A[i,j] := ' ' end; -/// +/// Создание горизонтальной стены procedure HorizWall(x,y,L: integer); begin for var i := x to x+L-1 do A[i,y] := '*' end; -/// +/// Создание вертикальной стены procedure VertWall(x,y,L: integer); begin for var j := y to y+L-1 do A[x,j] := '*' end; -/// +/// Заполнение поля стенами procedure Fill; begin CleanA; @@ -51,7 +51,7 @@ begin HorizWall(49,14,31); end; -/// +/// Перерисовка экрана procedure DrawScreen; begin TextColor(White); @@ -61,13 +61,13 @@ begin write(A[i,j]) end; -/// True, +/// Возвращает True, если на пути шарика препятствие function FilledInFront: boolean; begin Result := (A[ax+vx,ay]<>' ') or (A[ax,ay+vy]<>' ') or (A[ax+vx,ay+vy]<>' ') end; -/// +/// Меняет направление шарика procedure ChangeDirection; begin if A[ax+vx,ay]<>' ' then @@ -82,35 +82,35 @@ begin Sleep(10); end; -/// +/// Рисует шарик procedure ShowBall; begin GotoXY(ax,ay); write('B'); end; -/// +/// Стирает шарик procedure HideBall; begin GotoXY(ax,ay); write(' '); end; -/// +/// Устанавливает вектор движение шарика procedure SetBallCoords(x,y: integer); begin ax := x; ay := y end; -/// +/// Устанавливает координаты шарика procedure SetBallVeloc(vx0,vy0: integer); begin vx := vx0; vy := vy0 end; -/// (x,y) +/// Перемещает шарик к позиции (x,y) procedure MoveTo(x,y: integer); begin HideBall; @@ -118,14 +118,14 @@ begin ShowBall end; -/// (dx,dy) +/// Перемещает шарик на вектор (dx,dy) procedure MoveOn(dx,dy: integer); begin MoveTo(ax+dx,ay+dy); end; BEGIN - SetWindowTitle(' ( CRT)'); + SetWindowTitle('Биллиард (ностальгия по CRT)'); HideCursor; Fill; diff --git a/TestSuite/CompilationSamples/BlockVar.pas b/TestSuite/CompilationSamples/BlockVar.pas index 2edf55601..d1257db6c 100644 --- a/TestSuite/CompilationSamples/BlockVar.pas +++ b/TestSuite/CompilationSamples/BlockVar.pas @@ -1,11 +1,11 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real := x; // + var v: real := x; // вспомогательная переменная x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/BookWormABCNET.pas b/TestSuite/CompilationSamples/BookWormABCNET.pas index 8dda5579f..df73f6178 100644 --- a/TestSuite/CompilationSamples/BookWormABCNET.pas +++ b/TestSuite/CompilationSamples/BookWormABCNET.pas @@ -1,8 +1,8 @@ uses GraphABC,ABCObjects,ABCButtons,Events; const -/// - freqcharstr=''; +/// Примерная частота повторяемости букв + freqcharstr='аааааааааааааааааааааааааабббббввввввввггггдддддддееееееееееееееееееееежжззззииииииииииииииииииийккккккккккккккклллллллллллммммммнннннннннннннннннооооооооооооооооооооооооппппппппрррррррррррррррррссссссссссссстттттттттттттттууууууффххцццчччшшщыыьььььэюяяяя'; const MaxWordLen = 12; @@ -12,20 +12,20 @@ type MySquareABC = class(SquareABC) end; var -/// +/// Доска с буквами MainBoard: ObjectBoardABC; -/// 1 +/// Доска высоты 1 для размещения слова WordBoard: ObjectBoardABC; -/// WordBoard +/// Номер первого незанятого символа на доске WordBoard cur: integer; -/// +/// Количество ходов moves: integer; -/// +/// Очки score: integer; -/// +/// Прямоугольник для отображения информации Status: RectangleABC; -/// ( words.txt) +/// Существует ли такое слово (все слова хранятся в файле words.txt) function WordExists(s: string): boolean; var f: text; @@ -49,7 +49,7 @@ end; procedure MyMouseDown(x,y,mb: integer); begin -// +// Нажата левая мышь if mb=1 then begin if cur>WordBoard.DimX then @@ -71,7 +71,7 @@ begin end; end else -// +// Нажата правая мышь begin for var xx:=1 to cur-1 do WordBoard[xx,1].Visible := False; @@ -83,19 +83,19 @@ begin end; end; -/// " " +/// Обработчик кнопки "Новая игра" procedure BtNewClick; begin score := 0; moves := 0; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); MyMouseDown(1,1,2); for var xx:=1 to MainBoard.DimX do for var yy:=1 to MainBoard.DimY do MainBoard[xx,yy].Text := UpCase(freqcharstr[Random(255)+1]); end; -/// " " +/// Обработчик кнопки "Сказать слово" procedure BtWordClick; begin if WordBoard.Color<>clYellow then @@ -113,15 +113,15 @@ begin end; cur := 1; WordBoard.Color := clSkyBlue; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); end; -/// "" +/// Обработчик кнопки "Подсказка" procedure BtPleaseClick; var f: text; str,maxstr: string; - arr,work: array [''..''] of integer; + arr,work: array ['а'..'я'] of integer; maxlen: integer; function CanConstructWord(s: string): boolean; @@ -142,7 +142,7 @@ var begin // BtPleaseClick maxlen := 0; maxstr := ''; - for var c:='' to '' do + for var c:='а' to 'я' do arr[c]:=0; for var xx:=1 to MainBoard.DimX do @@ -169,7 +169,7 @@ procedure InitWindow; begin SetWindowSize(640,480); Window.IsFixedSize := True; - Window.Title := ' !'; + Window.Title := 'Знай русские слова!'; Brush.Color := clMoneyGreen; FillRect(0,0,WindowWidth,WindowHeight); end; @@ -183,11 +183,11 @@ end; procedure InitButtons; begin - var btword := new ButtonABC(70,410,180,30,' ',clGray); - var btnew := new ButtonABC(280,410,100,30,'',clLightGray); - var btplease := new ButtonABC(410,410,160,30,'',clGray); + var btword := new ButtonABC(70,410,180,30,'Сказать слово',clGray); + var btnew := new ButtonABC(280,410,100,30,'Заново',clLightGray); + var btplease := new ButtonABC(410,410,160,30,'Подсказка',clGray); -// +// Привязка обработчиков к кнопкам btword.OnClick := BtWordClick; btnew.OnClick := BtNewClick; btplease.OnClick := BtPleaseClick; @@ -197,7 +197,7 @@ end; procedure InitInterface; begin Status := new RectangleABC(70,350,500,30,clSkyBlue); - Status.Text := ': 0 : 0'; + Status.Text := 'Ходов: 0 Очков: 0'; WordBoard := new ObjectBoardABC(20,40,MaxWordLen,1,50,50,clSkyBlue); MainBoard := new ObjectBoardABC(220,120,4,4,50,50,clMoneyGreen); MainBoard.BorderColor := clGreen; diff --git a/TestSuite/CompilationSamples/Boolean1.pas b/TestSuite/CompilationSamples/Boolean1.pas index 8549b432e..630763ae6 100644 --- a/TestSuite/CompilationSamples/Boolean1.pas +++ b/TestSuite/CompilationSamples/Boolean1.pas @@ -1,16 +1,16 @@ -// . and, or not +// Логический тип. Логические выражения с and, or и not var b: boolean; x: integer; begin - write(' x ( 1 9): '); + write('Введите x (от 1 до 9): '); readln(x); b := x=5; writeln('x=5? ',b); b := (x>=3) and (x<=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := (x=3) or (x=4) or (x=5); - writeln('x=3,4 5? ',b); + writeln('x=3,4 или 5? ',b); b := not Odd(x); - writeln('x - ? ',b); + writeln('x - четное? ',b); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Boxing.pas b/TestSuite/CompilationSamples/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/TestSuite/CompilationSamples/Boxing.pas +++ b/TestSuite/CompilationSamples/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/TestSuite/CompilationSamples/CPaint.pas b/TestSuite/CompilationSamples/CPaint.pas index e6e3d73b8..5ea9b4078 100644 --- a/TestSuite/CompilationSamples/CPaint.pas +++ b/TestSuite/CompilationSamples/CPaint.pas @@ -1,6 +1,6 @@ -// -// GotoXY, TextBackGround -// Shift+F9 !!! +// Рисование курсором в консольном окне +// Иллюстрация GotoXY, TextBackGround +// Для запуска программы используйте Shift+F9 !!! uses Crt; var @@ -32,7 +32,7 @@ begin draw := True; color := Green; ClrScr; - SetWindowTitle(' (Esc-, Num 5 - )'); + SetWindowTitle('Рисование курсором (Esc-выход, Num 5 - изменение цвета)'); TextBackGround(color); GotoXY(WindowWidth div 2,WindowHeight div 2); var c: char; @@ -44,7 +44,7 @@ begin begin c := ReadKey; case c of - // Num 5 + // Изменение цвета по клавише Num 5 {5} #12: begin color := color + 1; if color=16 then diff --git a/TestSuite/CompilationSamples/CRT.pas b/TestSuite/CompilationSamples/CRT.pas index ad8b111c1..338a69ceb 100644 --- a/TestSuite/CompilationSamples/CRT.pas +++ b/TestSuite/CompilationSamples/CRT.pas @@ -2,7 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) /// -/// +/// Модуль для работы с консолью /// unit CRT; @@ -33,80 +33,80 @@ const White = 15; /// -/// +/// Задает заголовок консольного окна /// -/// +/// Заголовок консольного окна procedure SetWindowTitle(s: string); /// -/// +/// Задает заголовок консольного окна /// -/// +/// Заголовок консольного окна procedure SetWindowCaption(s: string); /// -/// +/// Показывает курсор если он скрыт /// procedure ShowCursor; /// -/// +/// Скрывает курсор /// procedure HideCursor; /// -/// +/// Считыват нажатую клавишу /// function ReadKey: char; /// -/// true . ReadKey +/// Возвращает true если была нажата клавиша. Считать символ можно спомощью функции ReadKey /// function KeyPressed: boolean; /// -/// +/// Возвращает высоту экрана /// function WindowWidth: integer; /// -/// +/// Возвращает ширину экрана /// /// function WindowHeight: integer; /// -/// - +/// Возвращает Х-координату курсора /// function WhereX: integer; /// -/// Y- +/// Возвращает Y-координату курсора /// function WhereY: integer; /// -/// (x,y) +/// Переводит курсор в координаты (x,y) /// procedure GotoXY(x, y: integer); procedure Window(x, y, w, h: integer); /// -/// +/// Задает размеры консольного окна /// -/// -/// +/// Ширина +/// Высота procedure SetWindowSize(w, h: integer); procedure SetBufferSize(w, h: integer); /// -/// , +/// Очищает экран, заполняя его текущим цветом фона /// procedure ClrScr; /// -/// +/// Задает цвет фона выводимого текста /// -/// +/// Цвет фона procedure TextBackground(c: integer); /// -/// +/// Задает цвет выводимого текста /// -/// +/// Цвет текста procedure TextColor(c: integer); /// -/// +/// Очищает линию на которой установлен курсор /// procedure ClearLine; /// -/// ms +/// Делает паузу на ms миллисекунд /// procedure Delay(ms: integer); @@ -151,7 +151,7 @@ begin Console.CursorVisible := False; end; -function ReadKey: char;// TODO +function ReadKey: char;// TODO продумать это var KeyInfo: ConsoleKeyInfo; begin @@ -203,7 +203,7 @@ end; procedure Window(x, y, w, h: integer); begin - writeln(' CRT.Window '); + writeln('Функция CRT.Window не реализована'); {Console.WindowLeft:=x; Console.WindowTop:=y; Console.WindowWidth:=w; @@ -281,8 +281,8 @@ begin end else begin - Console.WriteLine(' CRT F9.'); - Console.WriteLine(' , Shift-F9'); + Console.WriteLine('Программу с подключенным модулем CRT нельзя запускать по F9.'); + Console.WriteLine('Запустите программу, используя Shift-F9'); Halt; end; end; diff --git a/TestSuite/CompilationSamples/CRTColors.pas b/TestSuite/CompilationSamples/CRTColors.pas index b356e8219..5b205c89d 100644 --- a/TestSuite/CompilationSamples/CRTColors.pas +++ b/TestSuite/CompilationSamples/CRTColors.pas @@ -1,9 +1,9 @@ -// CRT- -// Shift+F9 !!! +// Стандартные CRT-цвета +// Для запуска программы используйте Shift+F9 !!! uses CRT; begin - SetWindowTitle(' CRT-'); + SetWindowTitle('Стандартные CRT-цвета'); for var i:=0 to 15 do begin TextBackground(i); diff --git a/TestSuite/CompilationSamples/CalcIntegral.pas b/TestSuite/CompilationSamples/CalcIntegral.pas index 5d4c5cc65..d73a20be5 100644 --- a/TestSuite/CompilationSamples/CalcIntegral.pas +++ b/TestSuite/CompilationSamples/CalcIntegral.pas @@ -24,24 +24,24 @@ var f2 := new FlowBreak; N := new IntegerField('N:'); f3 := new FlowBreak; - tl := new TextLabel(': '); + tl := new TextLabel('Функция: '); f4 := new FlowBreak; cb := new ComboBox; f5 := new FlowBreak(50); s1 := new Space(20); - ok := new Button(''); + ok := new Button('Вычислить'); tb: TextBox; procedure MyClick; begin var f := funs[cb.SelectedIndex]; var res := CalcIntegral(a.Value,b.Value,N.Value,f); - tb.AddLine(Format('({0},{1},{2},{3}) = {4}',a.Value,b.Value,N.Value,cb.SelectedValue,res.ToString)); + tb.AddLine(Format('Интеграл({0},{1},{2},{3}) = {4}',a.Value,b.Value,N.Value,cb.SelectedValue,res.ToString)); end; procedure InitControls; begin - MainForm.Title := ' '; + MainForm.Title := 'Вычисление определенного интеграла'; MainForm.SetSize(500,350); MainForm.CenterOnScreen; b.Value := 1; diff --git a/TestSuite/CompilationSamples/Calculations1.pas b/TestSuite/CompilationSamples/Calculations1.pas index 1a3aac935..f6ba098ae 100644 --- a/TestSuite/CompilationSamples/Calculations1.pas +++ b/TestSuite/CompilationSamples/Calculations1.pas @@ -1,7 +1,7 @@ -// +// Вывод результатов вычислений begin - writeln(':'); -// + writeln('Вычисления:'); +// Вывод пустой строки writeln; writeln('121 + 363 = ',121+363); writeln('121 - 363 = ',121-363); diff --git a/TestSuite/CompilationSamples/Calculations2.pas b/TestSuite/CompilationSamples/Calculations2.pas index a870b6f5f..ff692f587 100644 --- a/TestSuite/CompilationSamples/Calculations2.pas +++ b/TestSuite/CompilationSamples/Calculations2.pas @@ -1,10 +1,10 @@ -// . +// Вывод результатов вычислений. Используются именованные константы const a = 121; b = 363; begin - writeln(':'); + writeln('Вычисления:'); writeln; writeln(a,' + ',b,' = ',a+b); writeln(a,' - ',b,' = ',a-b); diff --git a/TestSuite/CompilationSamples/Calculations3.pas b/TestSuite/CompilationSamples/Calculations3.pas index e76a5c373..255a9b131 100644 --- a/TestSuite/CompilationSamples/Calculations3.pas +++ b/TestSuite/CompilationSamples/Calculations3.pas @@ -1,8 +1,8 @@ -// . +// Вывод результатов вычислений. Используются переменные и процедура ввода var a,b: integer; begin - writeln(' a b:'); + writeln('Введите a и b:'); readln(a,b); writeln; writeln(a,' + ',b,' = ',a+b); diff --git a/TestSuite/CompilationSamples/Case1.pas b/TestSuite/CompilationSamples/Case1.pas index 8c5bfd0e0..9f2c5a27c 100644 --- a/TestSuite/CompilationSamples/Case1.pas +++ b/TestSuite/CompilationSamples/Case1.pas @@ -1,15 +1,15 @@ -// +// Оператор выбора var x: integer; begin - writeln(' (1..5): '); + writeln('Введите оценку (1..5): '); readln(x); case x of - 1: writeln(''); - 2: writeln(''); - 3: writeln(''); - 4: writeln(''); - 5: writeln(''); - else writeln(' '); + 1: writeln('Единица'); + 2: writeln('Двойка'); + 3: writeln('Тройка'); + 4: writeln('Четверка'); + 5: writeln('Пятерка'); + else writeln('Такой оценки нет'); end; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Case2.pas b/TestSuite/CompilationSamples/Case2.pas index 5bad5a41d..a6b257bbd 100644 --- a/TestSuite/CompilationSamples/Case2.pas +++ b/TestSuite/CompilationSamples/Case2.pas @@ -1,12 +1,12 @@ -// +// Оператор выбора var day: integer; begin - writeln(' (1..7): '); + writeln('Введите номер дня недели (1..7): '); readln(day); case day of - 1..5: writeln(''); - 6,7: writeln(''); - else writeln(' '); + 1..5: writeln('Будний'); + 6,7: writeln('Выходной'); + else writeln('Неверный день недели'); end; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Case3.pas b/TestSuite/CompilationSamples/Case3.pas index 7e7613a2f..bd061c036 100644 --- a/TestSuite/CompilationSamples/Case3.pas +++ b/TestSuite/CompilationSamples/Case3.pas @@ -1,12 +1,12 @@ -// +// Оператор выбора var c: char; begin - writeln(' : '); + writeln('Введите символ: '); readln(c); case c of - '0'..'9': writeln(' '); - 'a'..'z','A'..'Z': writeln(' '); - ''..'',''..'': writeln(' '); + '0'..'9': writeln('Это цифра'); + 'a'..'z','A'..'Z': writeln('Это английская буква'); + 'а'..'я','А'..'Я': writeln('Это русская буква'); end; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Case4.pas b/TestSuite/CompilationSamples/Case4.pas index 49673d294..ce699c1ca 100644 --- a/TestSuite/CompilationSamples/Case4.pas +++ b/TestSuite/CompilationSamples/Case4.pas @@ -1,4 +1,4 @@ -// . +// Оператор выбора. Случайная фигура uses GraphABC; begin diff --git a/TestSuite/CompilationSamples/Char1.pas b/TestSuite/CompilationSamples/Char1.pas index bfa54f96e..0093f5157 100644 --- a/TestSuite/CompilationSamples/Char1.pas +++ b/TestSuite/CompilationSamples/Char1.pas @@ -1,4 +1,4 @@ -// Ord Chr +// Стандартные функции Ord Chr var i: integer; c: char; @@ -6,8 +6,8 @@ var begin c := 'z'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); i := 193; c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Char2.pas b/TestSuite/CompilationSamples/Char2.pas index 9d0b9dc50..d89fd87a7 100644 --- a/TestSuite/CompilationSamples/Char2.pas +++ b/TestSuite/CompilationSamples/Char2.pas @@ -1,13 +1,13 @@ -// OrdUnicode ChrUnicode +// Стандартные функции OrdUnicode ChrUnicode var i: integer; c: char; begin - c := ''; + c := 'Д'; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); i := 1046; c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Char3.pas b/TestSuite/CompilationSamples/Char3.pas index d58cb25ab..25dd82795 100644 --- a/TestSuite/CompilationSamples/Char3.pas +++ b/TestSuite/CompilationSamples/Char3.pas @@ -1,9 +1,9 @@ -// UpperCase LowerCase +// Стандартные функции UpperCase LowerCase var c: char; begin - c := ''; - writelnFormat(' {0} : {1}',c,UpperCase(c)); + c := 'д'; + writelnFormat('Символ {0} в верхнем регистре: {1}',c,UpperCase(c)); c := 'F'; - writelnFormat(' {0} : {1}',c,LowerCase(c)); + writelnFormat('Символ {0} в нижнем регистре: {1}',c,LowerCase(c)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/CharFunc.pas b/TestSuite/CompilationSamples/CharFunc.pas index fb28b2ac8..95bed5ad7 100644 --- a/TestSuite/CompilationSamples/CharFunc.pas +++ b/TestSuite/CompilationSamples/CharFunc.pas @@ -1,4 +1,4 @@ -// Ord, Chr, OrdUnicode, ChrUnicode +// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode var c: char; i: integer; @@ -6,14 +6,14 @@ var begin writeln('sizeof(char) = ',sizeof(char)); writeln; - c := ''; + c := 'Ж'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); writeln; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/CharTable.pas b/TestSuite/CompilationSamples/CharTable.pas index 420d2f615..220cb62fa 100644 --- a/TestSuite/CompilationSamples/CharTable.pas +++ b/TestSuite/CompilationSamples/CharTable.pas @@ -1,4 +1,4 @@ -// +// Таблица символов и их кодов begin for var i:=32 to 255 do begin diff --git a/TestSuite/CompilationSamples/ClassConstructor.pas b/TestSuite/CompilationSamples/ClassConstructor.pas index 52a2acd20..c9f9d8d3c 100644 --- a/TestSuite/CompilationSamples/ClassConstructor.pas +++ b/TestSuite/CompilationSamples/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Иллюстрация использования статических (классовых) конструкторов type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Collections.pas b/TestSuite/CompilationSamples/Collections.pas index c68618712..2fee38442 100644 --- a/TestSuite/CompilationSamples/Collections.pas +++ b/TestSuite/CompilationSamples/Collections.pas @@ -1,34 +1,34 @@ -/// -/// Stack -/// Queue -/// DynArray -/// SimpleSet -/// AssocArray -/// LinkedList +/// Модуль содержит шаблоны классов +/// Stack — стек +/// Queue — очередь +/// DynArray — динамический массив +/// SimpleSet — простое множество на основе динамического массива +/// AssocArray — простой ассоциативный массив на основе динамического массива пар +/// LinkedList — двусвязный список unit Collections; //------------------------------------------------------------------------------ -// -// 1.0 -// Copyright (c) 2009 ., .., . +// Модуль упрощенных классов коллекций для обучения +// Версия 1.0 +// Copyright (c) 2009 Белякова Ю., Михалкович С.С., Саатчи А. //------------------------------------------------------------------------------ interface // -------------------------------- SingleNode --------------------------------- type - /// + /// Узел с одним полем связи SingleNode = class private - /// , + /// Значение, содержащееся в узле fData: T; - /// + /// Ссылка на следующий элемент fNext: SingleNode; /// - /// + /// Конструктор /// - /// - /// + /// Значение в узле + /// Ссылка на следующий элемент public constructor Create(pData: T; pNext: SingleNode); begin @@ -42,305 +42,305 @@ type // ----------------------------------- Stack ----------------------------------- type - /// Stack + /// Шаблон класса Stack Stack = class private - /// + /// Вершина стека fTop: SingleNode := nil; public - /// + /// Создает пустой стек constructor Create; /// - /// + /// Кладет элемент на вершину стека /// - /// + /// Новый элемент procedure Push(x: T); - /// , + /// Возвращает значение элемента на вершине, снимая его со стека function Pop: T; - /// , + /// Возвращает значение элемента на вершине стека, не снимая его function Top: T; - /// , + /// Возвращает истину, если стек пуст function IsEmpty: boolean; - /// + /// Преобразует содержимое стека в строку function ToString: string; override; - /// + /// Выводит содержимое стека на консоль procedure Print; - /// + /// Выводит содержимое стека на консоль с переходом на новую строку procedure Println; end; // ----------------------------------- Queue ----------------------------------- type - /// Queue + /// Шаблон класса Queue Queue = class private - /// + /// Голова очереди head: SingleNode; - /// + /// Хвост очереди tail: SingleNode; public - /// + /// Создает пустую очередь constructor Create; /// - /// + /// Добавляет элемент в хвост очереди /// - /// + /// Добавляемый элемент procedure Enqueue(x: T); - /// , + /// Возвращает значение элемента в голове, удаляя его из очереди function Dequeue: T; - /// , + /// Возвращает значение элемента в голове очереди, не удаляя его function Top: T; - /// , + /// Возвращает истину, если очередь пуста function IsEmpty: boolean; - /// + /// Преобразует содержимое очереди в строку function ToString: string; override; - /// + /// Выводит содержимое очереди на консоль procedure Print; - /// + /// Выводит содержимое очереди на консоль с переходом на новую строку procedure Println; end; // --------------------------------- DynArray ---------------------------------- const - /// , + /// Минимальная емкость, устанавливаемая при создании массива MIN_CAP = 4; - /// + /// Коэффициент увеличения емкости массива при её нехватке INC_CAP_FACTOR = 2; type - /// DynArray [ ] + /// Шаблон класса DynArray [Динамический массив с автоконтролем памяти] DynArray = class private - /// , + /// Встроенный динамический массив, содержащий данные fData: array of T; - /// + /// Размер массива fSize: integer; - /// + /// Емкость массива fCap: integer; - /// ind x + /// Устанавливает элемент с индексом ind равным x procedure SetElem(index: integer; x: T); - /// ind + /// Возвращает элемент массива с индексом ind function GetElem(index: integer): T; public - /// 0 + /// Создает массив размера 0 constructor Create; - /// size + /// Создает массив размера size constructor Create(psize: integer); /// - /// . . - /// ( newCap , ) + /// Выделяет новую память. Емкость увеличивается. + /// (Если newCap меньше текущей емкости, ничего не происходит) /// - /// + /// Новая емкость массива procedure Reserve(newCap: integer); /// - /// + /// Устанавливает новый размер массива /// - /// + /// Новый размер массива procedure Resize(newSize: integer); /// - /// + /// Добавляет элемент в конец массива /// - /// + /// Добавляемый элемент procedure Add(x: T); /// - /// + /// Вставляет элемент в указанную позицию /// - /// , - /// + /// Позиция, в которую вставляется элемент + /// Вставляемый элемент procedure Insert(pos: integer; x: T); /// - /// + /// Удаляет элемент массива из указанной позиции /// - /// , + /// Позиция, из которой удаляется элемент procedure Remove(pos: integer); /// - /// - /// -1, + /// Возвращает индекс первого элемента массива равного искомому + /// или -1, если такого элемента нет /// - /// + /// Искомый элемент function Find(x: T): integer; - /// () + /// Количество элементов (размер) массива property Count: integer read fSize write Resize; - /// + /// Емкость массива property Capacity: integer read fCap write Reserve; - /// + /// Позволяет обращаться к элементам массива по индексу property Elem[index: integer]: T read GetElem write SetElem; default; - /// + /// Преобразует содержимое массива в строку function ToString: string; override; - /// + /// Выводит содержимое массива на консоль procedure Print; - /// + /// Выводит содержимое массива на консоль с переходом на новую строку procedure Println; end; // -------------------------------- SimpleSet ---------------------------------- type - /// SimpleSet + /// Шаблон класса SimpleSet SimpleSet = class private - /// + /// Элементы множества data: DynArray; public - /// + /// Создает множество constructor Create; /// - /// , + /// Добавляет элемент во множество, если его там еще нет /// - /// + /// Добавляемый элемент procedure Add(x: T); /// - /// , + /// Удаляет элемент из множества, если он там есть /// - /// + /// Удаляемый элемент procedure Remove(x: T); /// - /// , + /// Возвращает истину, если множество содержит элемент /// - /// + /// Искомый элемент function Contains(x: T): boolean; - /// + /// Преобразует содержимое массива в строку function ToString: string; override; - /// + /// Выводит содержимое массива на консоль procedure Print; - /// + /// Выводит содержимое множества на консоль с переходом на новую строку procedure Println; end; // -------------------------------- AssocArray --------------------------------- type - /// AssocArray + /// Шаблон класса AssocArray AssocArray = class private - /// + /// Ключи keys: DynArray; - /// , + /// Значения, соответствующие ключам values: DynArray; - /// key value + /// Устанавливает значение элемента с ключом key равным value procedure SetElem(key: KeyType; value: ValueType); - /// key + /// Возвращает значение элемента с ключом key function GetElem(key: KeyType): ValueType; public - /// + /// Создает ассоциативный массив constructor Create; - /// + /// Позволяет обращаться к элементам массива по ключу property Elem[key: KeyType]: ValueType read GetElem write SetElem; default; - /// + /// Преобразует содержимое ассоциативного массива в строку function ToString: string; override; - /// + /// Выводит содержимое ассоциативного массива на консоль procedure Print; - /// + /// Выводит содержимое ассоциативного массива на консоль с переходом на новую строку procedure Println; end; // ----------------------------- LinkedListNode -------------------------------- type - /// + /// Узел с двумя полями связи LinkedListNode = class private - /// , + /// Значение, содержащееся в узле fData: T; - /// + /// Ссылка на предыдущий элемент fPrev: LinkedListNode; - /// + /// Ссылка на следующий элемент fNext: LinkedListNode; public /// - /// + /// Создает новый узел /// - /// - /// - /// + /// Значение узла + /// Ссылка на предыдущий элемент + /// Ссылка на следующий элемент constructor Create(data: T; prev, next: LinkedListNode); begin fData := data; fNext := next; fPrev := prev; end; - /// , + /// Значение, содержащееся в узле property Value: T read fData write fData; - /// + /// Ссылка на предыдущий элемент — только на чтение property Prev: LinkedListNode read fPrev; - /// + /// Ссылка на следующий элемент — только на чтение property Next: LinkedListNode read fNext; end; // -------------------------------- LinkedList --------------------------------- type - /// + /// Двусвязный линейный список LinkedList = class private - /// () + /// Первый элемент (голова) fFirst: LinkedListNode; - /// () + /// Последний элемент (хвост) fLast: LinkedListNode; public - /// + /// Создает пустой список constructor Create; - /// () + /// Первый элемент (голова) — только на чтение property First: LinkedListNode read fFirst; - /// () + /// Последний элемент (хвост) — только на чтение property Last: LinkedListNode read fLast; /// - /// x + /// Добавляет элемент x в начало списка /// - /// + /// Добавляемый элемент procedure AddFirst(x: T); /// - /// x + /// Добавляет элемент x в конец списка /// - /// + /// Добавляемый элемент procedure AddLast(x: T); - /// + /// Удаляет первый элемент списка procedure RemoveFirst(); - /// + /// Удаляет последний элемент списка procedure RemoveLast(); /// - /// x node + /// Добавляет элемент x перед node /// - /// , - /// + /// Ссылка на элемент, перед которым нужно добавить новый + /// Добавляемый элемент procedure AddBefore(node: LinkedListNode; x: T); /// - /// x node + /// Добавляет элемент x после node /// - /// , - /// + /// Ссылка на элемент, после которого нужно добавить новый + /// Добавляемый элемент procedure AddAfter(node: LinkedListNode; x: T); /// - /// node + /// Удаляет элемент node /// - /// , + /// Ссылка на элемент, который нужно удалить procedure Remove(node: LinkedListNode); - /// + /// Преобразует содержимое списка в строку function ToString: string; override; - /// + /// Выводит содержимое списка на консоль procedure Print; - /// + /// Выводит содержимое списка на консоль с переходом на новую строку procedure Println; end; //============================================================================== implementation -// +//Сообщения исключений const - PopNilStackExceptionMessage = ' '; - TopNilStackExceptionMessage = ' '; + PopNilStackExceptionMessage = 'Попытка снятия элемента с пустого стека'; + TopNilStackExceptionMessage = 'Попытка получения элемента с пустого стека'; - DequeueNilQueueExceptionMessage = ' '; - TopNilQueueExceptionMessage = ' '; + DequeueNilQueueExceptionMessage = 'Попытка удаления элемента из пустой очереди'; + TopNilQueueExceptionMessage = 'Попытка получения элемента из пустой очереди'; - NegativeArraySizeExceptionMessage = ' '; - InsOutOfArrayBoundExceptionMessage = ' '; - RemOutOfArrayBoundExceptionMessage = ' '; - SetElemOutOfBoundExceptionMessage = ' '; - GetElemOutOfBoundExceptionMessage = ' '; + NegativeArraySizeExceptionMessage = 'Попытка присвоить размеру массива отрицательное значение '; + InsOutOfArrayBoundExceptionMessage = 'Попытка вставки за границей массива в позицию '; + RemOutOfArrayBoundExceptionMessage = 'Попытка удаления за границей массива из позиции '; + SetElemOutOfBoundExceptionMessage = 'Попытка присвоить значение элементу за границей массива с индексом '; + GetElemOutOfBoundExceptionMessage = 'Попытка получить значение элемента за границей массива с индексом '; - RemoveFromNilListExceptionMessage = ' '; - AddNilNodeExceptionMessage = ' node '; - RemoveNilNodeExceptionMessage = ' node '; + RemoveFromNilListExceptionMessage = 'Попытка удаления из пустого списка'; + AddNilNodeExceptionMessage = 'Параметр node является нулевой ссылкой'; + RemoveNilNodeExceptionMessage = 'Параметр node является нулевой ссылкой'; // ----------------------------------- Stack ----------------------------------- constructor Stack.Create; @@ -413,7 +413,7 @@ begin else begin tail.next := new SingleNode(x, nil); - tail := tail.next; // (.. ) + tail := tail.next; // элемент удаляется из хвоста очереди (т.е. хвостом становится следующий элемент) end; end; @@ -423,7 +423,7 @@ begin raise new Exception(DequeueNilQueueExceptionMessage); Result := head.data; - head := head.next; // (.. ) + head := head.next; // элемент удаляется из головы очереди (т.е. головой становится следующий элемент) if head = nil then tail := nil; end; @@ -475,7 +475,7 @@ begin raise new Exception(NegativeArraySizeExceptionMessage + pSize.ToString); fSize := pSize; - fCap := INC_CAP_FACTOR * pSize + MIN_CAP; // " " + fCap := INC_CAP_FACTOR * pSize + MIN_CAP; // Устанавливаем емкость "с запасом" SetLength(fData, fCap); end; @@ -496,7 +496,7 @@ begin if newSize > fCap then begin Reserve(INC_CAP_FACTOR * newSize); - for var i := fSize to newSize - 1 do // + for var i := fSize to newSize - 1 do // явным образом заполняем новые элементы fData[i] := default(T); end; fSize := newSize; @@ -524,7 +524,7 @@ begin if (pos < 0) or (pos > fSize - 1) then raise new Exception(RemOutOfArrayBoundExceptionMessage + pos.ToString); - for var i := pos to fSize - 2 do // 1, pos + for var i := pos to fSize - 2 do // сдвиг элементов влево на 1, начиная с позиции pos fData[i] := fData[i + 1]; Resize(fSize - 1); end; @@ -548,7 +548,7 @@ begin fData[index] := x; end; -{ ind} +{Возвращает элемент массива с индексом ind} function DynArray.GetElem(index: integer): T; begin if (index < 0) or (index > fSize - 1) then diff --git a/TestSuite/CompilationSamples/Colors.pas b/TestSuite/CompilationSamples/Colors.pas index af56711da..f7b8cb60b 100644 --- a/TestSuite/CompilationSamples/Colors.pas +++ b/TestSuite/CompilationSamples/Colors.pas @@ -1,3 +1,3 @@ -// Pascal ABC +//Для совместимости с Pascal ABC unit Colors; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ComplexExample.pas b/TestSuite/CompilationSamples/ComplexExample.pas index 5c6eb3d46..818b4fecb 100644 --- a/TestSuite/CompilationSamples/ComplexExample.pas +++ b/TestSuite/CompilationSamples/ComplexExample.pas @@ -1,17 +1,17 @@ -// +// Использование комплексных чисел {$reference 'System.Numerics.dll'} uses System.Numerics; begin var a := new Complex(0,1); - writeln(' : ', a); + writeln('Мнимая единица: ', a); var b := Complex.Sqrt(a); - writeln(' : ', b); + writeln('Главный корень из мнимой единицы: ', b); var c := a*a; - writeln(' : ', c); + writeln('Квадрат мнимой единицы: ', c); var d := new Complex(1,2); - writelnFormat(' {0} {1}', d,d.Magnitude); + writelnFormat('Модуль {0} равен {1}', d,d.Magnitude); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/DMCollect.pas b/TestSuite/CompilationSamples/DMCollect.pas index cf1bb7234..2018bdf9f 100644 --- a/TestSuite/CompilationSamples/DMCollect.pas +++ b/TestSuite/CompilationSamples/DMCollect.pas @@ -34,7 +34,7 @@ type end; function GetItem(i: integer): Cell; begin - Result := Cell(a[i]); //!! Item[i].a.x := 1; !!!!!!! + Result := Cell(a[i]); //!! Не будет работать для Item[i].a.x := 1; !!!!!!! end; procedure SetItem(i: integer; c: Cell); begin @@ -145,20 +145,20 @@ function LessThenCC (C1,C2: Cell): boolean; var vv: vector; ip: boolean; -{ } +{Самое сложное условие} begin vv := initVector(C1.p,C2.p); ip := IsParallel(C1.v,C2.v); - {C1DimX+orx) or (yDimY+ory) then - DrawmanError(': ',' '); + DrawmanError('Чертежник: вышел за границы поля рисования','Задание прервано'); if not PenIsUp then begin DMLine(DMX,DMY,x,y,colorSolve); @@ -419,7 +419,7 @@ begin DMY := y; DrawDM; Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); end; procedure TDMField.OnVector(x,y: integer); @@ -455,14 +455,14 @@ end; procedure TDMField.Stop; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; buttonStep.Enabled := True; t.Suspend; end; procedure TDMField.Start; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Стоп (Enter)'; buttonStep.Enabled := False; t.Resume; end; @@ -501,10 +501,10 @@ end; procedure TDMField.CheckTaskCall; begin if not TaskIsCalled then - DrawManError(' Task ',' '); + DrawManError('Процедура Task вызова задания должна быть первой','Выполнение программы прервано'); end; -//--------- +//--------- Интерфейс и обработчики procedure LoadIni(var settings: IniSettings); var Ini: TIniFile; begin @@ -572,13 +572,13 @@ begin if t.ThreadState = System.Threading.ThreadState.Suspended then begin DMField.StepFlag := False; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Выполняю задание'; DMField.Start; end else begin DMField.StepFlag := True; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Остановился'; DMField.Stop; end; (GraphABCControl as Control).Focus; @@ -589,22 +589,22 @@ begin DMField.StepFlag := True; t.Resume; (GraphABCControl as Control).Focus; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Команда выполнена'; end; procedure buttonHelpClick(o: Object; e: EventArgs); begin - MessageBox.Show(' : .., 2002-07 '#10#13#10#13+ - ' :'#10#13+ - ' PenDown - '#10#13+ - ' PenUp - '#10#13 - ' ToPoint(x,y) - (x,y)'#10#13+ - ' OnVector(a,b) - (a,b)'#10#13 - ' a>0 - , a<0 - , b>0 - , b<0 - '#10#13 - ' Speed(n) - n (n=0..10)'#10#13 - ' Stop - '#10#13 - ' Start - '#10#13, - ' - '); + MessageBox.Show('Разработчик исполнителя Чертежник: Михалкович С.С., 2002-07 '#10#13#10#13+ + 'Команды исполнителя Чертежник:'#10#13+ + ' PenDown - опустить перо'#10#13+ + ' PenUp - поднять перо'#10#13 + ' ToPoint(x,y) - переместиться в точку с координатами (x,y)'#10#13+ + ' OnVector(a,b) - переместиться из текущей точки на вектор (a,b)'#10#13 + ' a>0 - вправо, a<0 - влево, b>0 - вверх, b<0 - вниз'#10#13 + ' Speed(n) - установить скорость n (n=0..10)'#10#13 + ' Stop - остановить Чертежника'#10#13 + ' Start - запустить Чертежника'#10#13, + 'Исполнитель Чертежник - Справка'); (GraphABCControl as Control).Focus; end; @@ -700,7 +700,7 @@ begin buttonHelp.Location := new Point(359, 18); buttonHelp.Size := new Size(107, 24); buttonHelp.TabStop := false; - buttonHelp.Text := ' (F1)'; + buttonHelp.Text := 'Справка (F1)'; // buttonHelp.UseVisualStyleBackColor := true; // // buttonExit @@ -709,7 +709,7 @@ begin buttonExit.Location := new System.Drawing.Point(241, 18); buttonExit.Size := new System.Drawing.Size(107, 24); buttonExit.TabStop := false; - buttonExit.Text := ' (Esc)'; + buttonExit.Text := 'Выход (Esc)'; // buttonExit.UseVisualStyleBackColor := true; // // buttonStep @@ -718,7 +718,7 @@ begin buttonStep.Location := new Point(123, 18); buttonStep.Size := new Size(107, 24); buttonStep.TabStop := false; - buttonStep.Text := ' (Space)'; + buttonStep.Text := 'Шаг (Space)'; // buttonStep.UseVisualStyleBackColor := true; // // buttonStart @@ -727,7 +727,7 @@ begin buttonStart.Location := new Point(5, 18); buttonStart.Size := new Size(107, 24); buttonStart.TabStop := false; - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; // buttonStart.UseVisualStyleBackColor := true; // // tableLayoutPanelBottom @@ -753,7 +753,7 @@ begin labelExState.Location := new Point(5, 2); labelExState.Margin := new Padding(3, 0, 3, 3); labelExState.Size := new Size(453, 15); - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Готов'; labelExState.TextAlign := ContentAlignment.MiddleCenter; // // groupBoxExState @@ -785,7 +785,7 @@ begin labelState.Location := new Point(6, 54); labelState.Margin := new Padding(0); labelState.Size := new Size(83, 17); - labelState.Text := ':'; + labelState.Text := 'Состояние:'; // // labelStep // @@ -794,7 +794,7 @@ begin labelStep.ForeColor := System.Drawing.Color.Black; labelStep.Location := new Point(130, 54); labelStep.Size := new Size(66, 18); - labelStep.Text := ': 0'; + labelStep.Text := 'Шаг: 0'; labelStep.TextAlign := ContentAlignment.MiddleLeft; // // trackBarSpeed @@ -811,7 +811,7 @@ begin labelSpeed.Location := new Point(6, 16); labelSpeed.Margin := new Padding(0); labelSpeed.Size := new Size(73, 17); - labelSpeed.Text := ':'; + labelSpeed.Text := 'Скорость:'; // // tableLayoutPanelTop // @@ -837,7 +837,7 @@ begin labelZad.Location := new Point(6, 3); labelZad.Margin := new Padding(4, 1, 3, 0); labelZad.Size := new Size(668, 14); - labelZad.Text := ''; + labelZad.Text := 'Задание'; labelZad.TextAlign := ContentAlignment.MiddleLeft; // // ExecutorForm @@ -847,7 +847,7 @@ begin MainForm.Controls.Add(tableLayoutPanelTop); MainForm.Controls.Add(BottomPanel); MainForm.MinimumSize := new Size(687, 240); - MainForm.Text := ' '; + MainForm.Text := 'Исполнитель Чертежник'; BottomPanel.ResumeLayout(false); panelBottomLeft.ResumeLayout(false); tableLayoutPanelBottom.ResumeLayout(false); @@ -931,7 +931,7 @@ begin labelExState.Text := s; end; -// - +// Добавил - МА procedure ResDM(TaskName: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'resdm'; // @@ -991,15 +991,15 @@ begin //buttonStart.Enabled := False; //buttonStep.Enabled := False; if DMField.DimX*DMField.DimY=0 then - DrawmanError(': Task',' ') + DrawmanError('Чертежник: Не вызвана процедура Task','Задание отсутствует') else if DMField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Invoke(SetSafeTextLabelExState,': '); - //labelExState.Text := ': '; - // - + labelExState.Invoke(SetSafeTextLabelExState,'Чертежник: Задание выполнено'); + //labelExState.Text := 'Чертежник: Задание выполнено'; + // Добавил - МА try ResDM(DMField.TaskName); except @@ -1008,8 +1008,8 @@ begin end else begin - labelExState.Invoke(SetSafeTextLabelExState,': , '); - //labelExState.Text := ': , '; + labelExState.Invoke(SetSafeTextLabelExState,'Чертежник: Работа окончена, задание не выполнено'); + //labelExState.Text := 'Чертежник: Работа окончена, задание не выполнено'; end; end; diff --git a/TestSuite/CompilationSamples/Drawman.pas b/TestSuite/CompilationSamples/Drawman.pas index b86539232..6b0f85b9d 100644 --- a/TestSuite/CompilationSamples/Drawman.pas +++ b/TestSuite/CompilationSamples/Drawman.pas @@ -1,32 +1,32 @@ // Copyright (c) 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 Drawman; interface -/// n (n=0..10) +/// Устанавливает скорость Чертежника равной n (n=0..10) procedure Speed(n: integer); -/// +/// Поднять перо procedure PenUp; -/// +/// Опустить перо procedure PenDown; -/// (x,y) +/// Переместиться к точке (x,y) procedure ToPoint(x,y: integer); -/// (a,b) +/// Переместиться на вектор (a,b) procedure OnVector(a,b: integer); -/// name +/// Вызывать задание с именем name procedure Task(name: string); -/// 9 11 +/// Создать пустое поле размера 9 на 11 клеток procedure StandardField; -/// n m +/// Создать пустое поле размера n на m клеток procedure Field(n,m: integer); -/// +/// Запустить Чертежника procedure Start; -/// +/// Остановить Чертежника procedure Stop; ///-- @@ -88,7 +88,7 @@ end; procedure StandardField; var x,y: integer; begin - TaskText(' '); + TaskText('Стандартное поле'); x := 9; y := 7; DMTaskMaker.Field(x,y); CorrectFieldBounds; @@ -98,7 +98,7 @@ end; procedure Field(n,m: integer); begin - TaskText(' '+IntToStr(n)+'x'+IntToStr(m)); + TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m)); DMTaskMaker.Field(n,m); CorrectFieldBounds; SetTaskCall; @@ -203,9 +203,9 @@ begin if TasksDictionary.ContainsKey(name) then TasksDictionary[name]() - else DrawManError(name+' - ',' '); + else DrawManError(name+' - нет такого задания для Чертежника','Задание отсутствует'); - // - + // Добавил - МА DMField.TaskName := name; // diff --git a/TestSuite/CompilationSamples/DynArr1.pas b/TestSuite/CompilationSamples/DynArr1.pas index a973c54d9..1a683cae4 100644 --- a/TestSuite/CompilationSamples/DynArr1.pas +++ b/TestSuite/CompilationSamples/DynArr1.pas @@ -1,6 +1,6 @@ -// . -// SetLength -// foreach ( ) +// Использование динамического массива. +// Процедура SetLength выделения памяти под динамический массив +// Оператор foreach (массив доступен только на чтение) var a: array of integer; begin @@ -8,7 +8,7 @@ begin SetLength(a,n); for var i:=0 to a.Length-1 do a[i] := Random(1,9); - writeln(' : '); + writeln('Содержимое случайного динамического массива целых: '); foreach x: integer in a do write(x,' '); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/DynArr2.pas b/TestSuite/CompilationSamples/DynArr2.pas index b4bc25edf..b5e877dc4 100644 --- a/TestSuite/CompilationSamples/DynArr2.pas +++ b/TestSuite/CompilationSamples/DynArr2.pas @@ -1,17 +1,17 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln(' :'); + writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:'); var n := 20; - a := new integer[n]; // + a := new integer[n]; // Другой способ выделения памяти for var i:=0 to a.Length-1 do a[i] := i; - writeln(' b[5]: a[5]=',a[5]); + writeln('До присваивания b[5]: a[5]=',a[5]); var b: array of integer; b := a; b[5] := 666; - writeln(' b[5]: a[5]=',a[5]); + writeln('После присваивания b[5]: a[5]=',a[5]); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/DynArr3.pas b/TestSuite/CompilationSamples/DynArr3.pas index 19d53438f..0f2acfb79 100644 --- a/TestSuite/CompilationSamples/DynArr3.pas +++ b/TestSuite/CompilationSamples/DynArr3.pas @@ -1,8 +1,8 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln('SetLength :'); + writeln('SetLength при повторном вызове не портит старые элементы:'); SetLength(a,5); for var i:=0 to a.Length-1 do a[i] := i+1; diff --git a/TestSuite/CompilationSamples/DynArr4.pas b/TestSuite/CompilationSamples/DynArr4.pas index 2679cb1ab..47fb8c953 100644 --- a/TestSuite/CompilationSamples/DynArr4.pas +++ b/TestSuite/CompilationSamples/DynArr4.pas @@ -1,13 +1,13 @@ -// +// Передача динамического массива в качестве параметра -procedure WriteArr(a: array of integer); // var , .. +procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект begin foreach x: integer in a do write(x,' '); writeln; end; -procedure CreateRandomArr(var a: array of integer; n: integer); // var , .. +procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив begin a := new integer[n]; for var i:=0 to a.Length-1 do @@ -17,7 +17,7 @@ end; var a: array of integer; begin - writeln(' : '); + writeln('Случайный целый массив: '); CreateRandomArr(a,30); WriteArr(a); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/DynArrErr1.pas b/TestSuite/CompilationSamples/DynArrErr1.pas index 27ec4523e..f8e2d5104 100644 --- a/TestSuite/CompilationSamples/DynArrErr1.pas +++ b/TestSuite/CompilationSamples/DynArrErr1.pas @@ -1,4 +1,4 @@ -// +// Ошибка невыделения памяти для динамического массива var a: array of integer; begin diff --git a/TestSuite/CompilationSamples/DynArrErr2.pas b/TestSuite/CompilationSamples/DynArrErr2.pas index 66511c0b0..cd1da4b02 100644 --- a/TestSuite/CompilationSamples/DynArrErr2.pas +++ b/TestSuite/CompilationSamples/DynArrErr2.pas @@ -1,4 +1,4 @@ -// +// Ошибка выхода за границы диапазона для динамического массива var a: array of integer; begin diff --git a/TestSuite/CompilationSamples/Dynamic2.pas b/TestSuite/CompilationSamples/Dynamic2.pas index 91aedef2f..4888d1972 100644 --- a/TestSuite/CompilationSamples/Dynamic2.pas +++ b/TestSuite/CompilationSamples/Dynamic2.pas @@ -1,4 +1,4 @@ -// Dynamic2 Programming Taskbook +// Пример решения задачи Dynamic2 из электронного задачника Programming Taskbook uses PT4; var p1,p2: PNode; @@ -11,8 +11,8 @@ begin begin write(p1^.Data); n += 1; - p2 := p1; { } - p1 := p1^.Next; { } + p2 := p1; { сохраняем адрес текущего элемента } + p1 := p1^.Next; { и переходим к следующему элементу } end; write(n, p2); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Dynarray.pas b/TestSuite/CompilationSamples/Dynarray.pas index 746b47274..63d162f37 100644 --- a/TestSuite/CompilationSamples/Dynarray.pas +++ b/TestSuite/CompilationSamples/Dynarray.pas @@ -1,4 +1,4 @@ -// +// Процедуры и методы работы с динамическим массивом uses System; procedure Print(a: array of integer); @@ -11,30 +11,30 @@ end; var a: array of integer; begin - SetLength(a,10); // . : a := new integer[10]; + SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := PABCSystem.Random(100); - // + // Вывод всех элементов массива Print(a); - // ( & , - // array - // Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении + // класса Array) &Array.Sort(a); Print(a); - // + // Обращение массива &Array.Reverse(a); Print(a); - // . SetLength + // Изменение размерамассиав с сохранением элементов. То же делает SetLength &Array.Resize(a,a.Length+2); Print(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 50); Writeln(i); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ESquares.pas b/TestSuite/CompilationSamples/ESquares.pas index fffe646fc..ceb9752cd 100644 --- a/TestSuite/CompilationSamples/ESquares.pas +++ b/TestSuite/CompilationSamples/ESquares.pas @@ -1,4 +1,4 @@ -// E-. +// E-квадраты. Демонстрация рекурсии uses GraphABC; const mw = 2.9; @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ': E-'; + Window.Title := 'Рекурсия: E-квадраты'; SetWindowSize(750,530); Pen.Color := clWhite; ESquares(4,125,18,490); diff --git a/TestSuite/CompilationSamples/Enum.pas b/TestSuite/CompilationSamples/Enum.pas index b9d3d0a87..db92312ee 100644 --- a/TestSuite/CompilationSamples/Enum.pas +++ b/TestSuite/CompilationSamples/Enum.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Enum1.pas b/TestSuite/CompilationSamples/Enum1.pas index b9d3d0a87..db92312ee 100644 --- a/TestSuite/CompilationSamples/Enum1.pas +++ b/TestSuite/CompilationSamples/Enum1.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Enum2.pas b/TestSuite/CompilationSamples/Enum2.pas index aca2145b3..77eef43d4 100644 --- a/TestSuite/CompilationSamples/Enum2.pas +++ b/TestSuite/CompilationSamples/Enum2.pas @@ -1,4 +1,4 @@ -// +// ѕеречислимый тип uses System; type Months = (January,February,March,April,May,June,July,August,September,October,November,December); @@ -6,14 +6,14 @@ type Months = (January,February,March,April,May,June,July,August,September,Octob begin var t: &Type := typeof(Months); var names: array of string := Enum.GetNames(t); - writeln(' '); + writeln('÷икл по именам перечислимого типа'); foreach name: string in names do write(name,' '); writeln; writeln; var v: &Array := Enum.GetValues(t); var mm: array of Months := new Months[v.Length]; - writeln(' '); + writeln('÷икл по массиву всех значений перечислимого типа'); for var i:=0 to v.Length-1 do mm[i] := Months(v.GetValue(i)); diff --git a/TestSuite/CompilationSamples/Eof.pas b/TestSuite/CompilationSamples/Eof.pas index 7dbc0f14f..6fbf05213 100644 --- a/TestSuite/CompilationSamples/Eof.pas +++ b/TestSuite/CompilationSamples/Eof.pas @@ -1,4 +1,4 @@ -// eof. Shift-F9 +// Демонстрация работы функции eof. Запускать по Shift-F9 var s: char; begin while not eof do diff --git a/TestSuite/CompilationSamples/Eoln.pas b/TestSuite/CompilationSamples/Eoln.pas index 8c5711e4d..9d1ff68a2 100644 --- a/TestSuite/CompilationSamples/Eoln.pas +++ b/TestSuite/CompilationSamples/Eoln.pas @@ -1,4 +1,4 @@ -// eoln +// Демонстрация работы функции eoln begin while not eoln do begin diff --git a/TestSuite/CompilationSamples/Eratosthenes.pas b/TestSuite/CompilationSamples/Eratosthenes.pas index 87ef05e68..6c03a535b 100644 --- a/TestSuite/CompilationSamples/Eratosthenes.pas +++ b/TestSuite/CompilationSamples/Eratosthenes.pas @@ -1,4 +1,4 @@ -// " " - +// "Решето Эратосфена" - вычисление простых чисел const n = 100000; var primes: set of integer; @@ -18,9 +18,9 @@ begin end; end; - writeln(' < ',n,':'); + writeln('Простые числа < ',n,':'); writeln(primes); writeln; - writeln(' : ',Milliseconds/1000); + writeln('Время вычисления: ',Milliseconds/1000); end. diff --git a/TestSuite/CompilationSamples/Events.pas b/TestSuite/CompilationSamples/Events.pas index 38c356134..0bdb95f37 100644 --- a/TestSuite/CompilationSamples/Events.pas +++ b/TestSuite/CompilationSamples/Events.pas @@ -1,3 +1,3 @@ -// Pascal ABC +// Для совместимости с Pascal ABC unit Events; end. diff --git a/TestSuite/CompilationSamples/File1.pas b/TestSuite/CompilationSamples/File1.pas index 7a8b83ac3..8eb62692a 100644 --- a/TestSuite/CompilationSamples/File1.pas +++ b/TestSuite/CompilationSamples/File1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Типизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'a.dat'; var f: file of integer; @@ -9,7 +9,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); for var i:=1 to 10 do begin var x := random(100); @@ -22,7 +22,7 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); for var i:=1 to 10 do begin var x: integer; diff --git a/TestSuite/CompilationSamples/File48.pas b/TestSuite/CompilationSamples/File48.pas index 89b1caf86..b6c906d29 100644 --- a/TestSuite/CompilationSamples/File48.pas +++ b/TestSuite/CompilationSamples/File48.pas @@ -1,4 +1,4 @@ -// File48 Programming Taskbook +// Пример решения задачи File48 из электронного задачника Programming Taskbook uses PT4; var f: array [1..4] of file of integer; diff --git a/TestSuite/CompilationSamples/FindT.pas b/TestSuite/CompilationSamples/FindT.pas index 7828ce4f0..09eea2c38 100644 --- a/TestSuite/CompilationSamples/FindT.pas +++ b/TestSuite/CompilationSamples/FindT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров function IndexOf(a: array of T; val: T): integer; begin @@ -12,10 +12,10 @@ begin end; end; -var a: array of string := ('', '', '', ''); +var a: array of string := ('Ваня', 'Коля', 'Саша', 'Сережа'); begin - var s := ''; - writelnFormat(' ''{0}'' {1}',s,IndexOf(a,s)); + var s := 'Сережа'; + writelnFormat('Индекс элемент со значением ''{0}'' равен {1}',s,IndexOf(a,s)); end. diff --git a/TestSuite/CompilationSamples/Flame.pas b/TestSuite/CompilationSamples/Flame.pas index cfb8266b9..eaaaea7f7 100644 --- a/TestSuite/CompilationSamples/Flame.pas +++ b/TestSuite/CompilationSamples/Flame.pas @@ -18,20 +18,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer := new TByteArray[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/TestSuite/CompilationSamples/For1.pas b/TestSuite/CompilationSamples/For1.pas index 8e22a54a8..5545f146f 100644 --- a/TestSuite/CompilationSamples/For1.pas +++ b/TestSuite/CompilationSamples/For1.pas @@ -1,21 +1,21 @@ -// for +// Цикл for const n = 20; var i: integer; begin - writeln(' 1 ',n,':'); + writeln('Числа от 1 до ',n,':'); for i:=1 to n do write(i,' '); writeln; writeln; - writeln(' ',n,' 1:'); + writeln('Числа от ',n,' до 1:'); for i:=n downto 1 do write(i,' '); writeln; writeln; - writeln(' :'); + writeln('Маленькие английские буквы:'); for c: char := 'a' to 'z' do write(c,' '); writeln; diff --git a/TestSuite/CompilationSamples/For1a.pas b/TestSuite/CompilationSamples/For1a.pas index ecaa51b01..600a4a7bc 100644 --- a/TestSuite/CompilationSamples/For1a.pas +++ b/TestSuite/CompilationSamples/For1a.pas @@ -1,16 +1,16 @@ -// for. 2 +// Цикл for. Шаг цикла 2 const n = 25; var i: integer; begin - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); for i:=1 to n do write(2*i,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); var x := 2; for i:=1 to n do begin @@ -20,13 +20,13 @@ begin writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); for i:=1 to n do write(2*i-1,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); x := 1; for i:=1 to n do begin diff --git a/TestSuite/CompilationSamples/For2.pas b/TestSuite/CompilationSamples/For2.pas index 02e54e033..f94af5449 100644 --- a/TestSuite/CompilationSamples/For2.pas +++ b/TestSuite/CompilationSamples/For2.pas @@ -1,15 +1,15 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; var i: integer; begin - write(' : '); + write('Случайные оценки: '); for i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/For3.pas b/TestSuite/CompilationSamples/For3.pas index 686ee6d9b..269346125 100644 --- a/TestSuite/CompilationSamples/For3.pas +++ b/TestSuite/CompilationSamples/For3.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; begin for var i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for var i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/For4.pas b/TestSuite/CompilationSamples/For4.pas index 98749099e..d10ab5ca5 100644 --- a/TestSuite/CompilationSamples/For4.pas +++ b/TestSuite/CompilationSamples/For4.pas @@ -1,9 +1,9 @@ -// for. +// ÷икл for. —умма всех двузначных чисел var s: integer; begin s := 0; for var i:=10 to 99 do - s := s + i; // s += i - writeln(' = ',s); + s := s + i; // можно s += i + writeln('—умма всех двузначных чисел = ',s); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/For5.pas b/TestSuite/CompilationSamples/For5.pas index c8d828d7f..5b1a9a4cd 100644 --- a/TestSuite/CompilationSamples/For5.pas +++ b/TestSuite/CompilationSamples/For5.pas @@ -1,13 +1,13 @@ -// for. a n +// ÷икл for. a в степени n var a: real; n: integer; begin - write(' a,n: '); + write('¬ведите a,n: '); readln(a,n); var p: real := 1; for var i:=1 to n do - p := p * a; // p *= a - writelnFormat('{0} {1} = {2}',a,n,p); + p := p * a; // можно p *= a + writelnFormat('{0} в степени {1} = {2}',a,n,p); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/For8.pas b/TestSuite/CompilationSamples/For8.pas index 794b027bf..5167640b8 100644 --- a/TestSuite/CompilationSamples/For8.pas +++ b/TestSuite/CompilationSamples/For8.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Максимум из введенных чисел const n = 10; var max: real; begin - writelnFormat(' {0} ',n); - max := integer.MinValue; // + writelnFormat('Введите {0} чисел',n); + max := integer.MinValue; // самое маленькое целое число for var i:=1 to n do begin var x: real; @@ -13,5 +13,5 @@ begin if x>max then max := x; end; - writeln(' ',max); + writeln('Максимальное равно ',max); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/For9.pas b/TestSuite/CompilationSamples/For9.pas index 4e807283f..7ca1357f1 100644 --- a/TestSuite/CompilationSamples/For9.pas +++ b/TestSuite/CompilationSamples/For9.pas @@ -1,4 +1,4 @@ -// for. . break +// Цикл for. Поиск значения. Оператор break const n = 10; var @@ -6,9 +6,9 @@ var found: boolean; begin - writeln(' : '); + writeln('Введите число для поиска: '); readln(k); - writelnFormat(' {0} ',n); + writelnFormat('Введите {0} чисел',n); found := False; for var i:=1 to n do begin @@ -21,6 +21,6 @@ begin end; end; if found then - writeln('') - else writeln(' '); + writeln('Найдено') + else writeln('Не найдено'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ForFor1.pas b/TestSuite/CompilationSamples/ForFor1.pas index 411feb626..c6f2b1322 100644 --- a/TestSuite/CompilationSamples/ForFor1.pas +++ b/TestSuite/CompilationSamples/ForFor1.pas @@ -1,8 +1,8 @@ -// for. +// Вложенные циклы for. Таблица умножения const n = 9; begin - writeln(' '); + writeln('Таблица умножения'); for var i:=1 to n do begin for var j:=1 to n do diff --git a/TestSuite/CompilationSamples/ForFor2.pas b/TestSuite/CompilationSamples/ForFor2.pas index ed75c12e2..002e2d5c0 100644 --- a/TestSuite/CompilationSamples/ForFor2.pas +++ b/TestSuite/CompilationSamples/ForFor2.pas @@ -1,4 +1,4 @@ -// for +// Вложенные циклы for const n = 6; begin diff --git a/TestSuite/CompilationSamples/ForGra1.pas b/TestSuite/CompilationSamples/ForGra1.pas index 7097f70be..a7028177b 100644 --- a/TestSuite/CompilationSamples/ForGra1.pas +++ b/TestSuite/CompilationSamples/ForGra1.pas @@ -1,4 +1,4 @@ -// for. +// Вложенные циклы for. Сетка из квадртов uses GraphABC; const diff --git a/TestSuite/CompilationSamples/Foreach.pas b/TestSuite/CompilationSamples/Foreach.pas index 82e2e12dc..2b546058b 100644 --- a/TestSuite/CompilationSamples/Foreach.pas +++ b/TestSuite/CompilationSamples/Foreach.pas @@ -1,4 +1,4 @@ -// foreach +// Пример иллюстрирует возможности оператора foreach uses System.Collections.Generic; var @@ -7,20 +7,20 @@ var l: List; begin - write('foreach : ':35); + write('foreach по обычному массиву: ':35); foreach x: integer in a do write(x,' '); writeln; s := [2..5,10..14]; - write('foreach : ':35); + write('foreach по множеству: ':35); foreach x: integer in s do write(x,' '); writeln; l := new List; l.Add(7); l.Add(2); l.Add(5); - write('foreach : ':35); + write('foreach по динамическому массиву: ':35); foreach x: integer in l do write(x,' '); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ForeachExamples.pas b/TestSuite/CompilationSamples/ForeachExamples.pas index 97457129d..a227823f6 100644 --- a/TestSuite/CompilationSamples/ForeachExamples.pas +++ b/TestSuite/CompilationSamples/ForeachExamples.pas @@ -1,5 +1,5 @@ -// , -// foreach +// Пример иллюстрирует всевозможные типы контейнеров, +// по которым можно перемещаться с помощью оператора foreach uses System.Collections.Generic; @@ -15,7 +15,7 @@ var begin for var i:=1 to n do a[i] := Random(100); - // foreach + // Цикл foreach по статическому массиву foreach x in a do write(x,' '); writeln; @@ -24,7 +24,7 @@ begin for var i:=0 to n-1 do b[i] := Random(100); - // foreach + // Цикл foreach по динамическому массиву foreach x in b do write(x,' '); writeln; diff --git a/TestSuite/CompilationSamples/ForeachForSet.pas b/TestSuite/CompilationSamples/ForeachForSet.pas index e74eee07e..5044ff296 100644 --- a/TestSuite/CompilationSamples/ForeachForSet.pas +++ b/TestSuite/CompilationSamples/ForeachForSet.pas @@ -1,4 +1,4 @@ -// . - , - +// Цикл по множеству. Порядок - не по алфавиту, поскольку множества реализованы на базе хеш-таблиц begin foreach c: char in ['a'..'z'] do Write(c); diff --git a/TestSuite/CompilationSamples/ForeachIEnumerable.pas b/TestSuite/CompilationSamples/ForeachIEnumerable.pas index 84d0b4fd1..b30140fa1 100644 --- a/TestSuite/CompilationSamples/ForeachIEnumerable.pas +++ b/TestSuite/CompilationSamples/ForeachIEnumerable.pas @@ -1,9 +1,9 @@ -// IEnumerable -// foreach +// Пример иллюстрирует реализацию классом интерфейса IEnumerable +// для использования его в операторе foreach uses System.Collections; type - // + // Генератор чисел Фибоначчи FibGen = class(IEnumerable, IEnumerator) private a,b,n,i: integer; @@ -44,7 +44,7 @@ type var f: FibGen; begin - writeln(' '); + writeln('Числа Фибоначчи'); f := new FibGen(25); foreach x: integer in f do write(x,' '); diff --git a/TestSuite/CompilationSamples/FormWebBrowser.pas b/TestSuite/CompilationSamples/FormWebBrowser.pas index 0986173ae..51a1936b7 100644 --- a/TestSuite/CompilationSamples/FormWebBrowser.pas +++ b/TestSuite/CompilationSamples/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser {$apptype windows} {$reference 'System.Windows.Forms.dll'} diff --git a/TestSuite/CompilationSamples/FormsABC.pas b/TestSuite/CompilationSamples/FormsABC.pas index f6ec72af5..baf3bdacc 100644 --- a/TestSuite/CompilationSamples/FormsABC.pas +++ b/TestSuite/CompilationSamples/FormsABC.pas @@ -22,7 +22,7 @@ type Color = System.Drawing.Color; - /// + /// Поле ввода Field = class private l: &Label; @@ -42,7 +42,7 @@ type property FieldWidth: integer read GetFieldWidth write SetFieldWidth; end; - /// + /// Поле ввода целых значений IntegerField = class(Field) private nonNumberEntered: boolean; @@ -55,7 +55,7 @@ type property Text: string read GetText; end; - /// + /// Поле ввода вещественных значений RealField = class(Field) private nonNumberEntered: boolean; @@ -68,7 +68,7 @@ type property Text: string read GetText; end; - /// + /// Кнопка Button = class private b := new System.Windows.Forms.Button; @@ -78,7 +78,7 @@ type constructor Create(text: string); end; - /// + /// Текстовая метка TextLabel = class private l := new System.Windows.Forms.Label; @@ -86,7 +86,7 @@ type constructor(text: string); end; - /// + /// Флажок CheckBox = class private cb := new System.Windows.Forms.CheckBox; @@ -97,7 +97,7 @@ type property Checked: boolean read GetValue write SetValue; end; - /// + /// Радиокнопка RadioButton = class private rb := new System.Windows.Forms.RadioButton; @@ -108,7 +108,7 @@ type property Checked: boolean read GetValue write SetValue; end; - /// + /// Список ListBox = class private lb := new System.Windows.Forms.ListBox; @@ -130,7 +130,7 @@ type property Count: integer read GetCount; end; - /// + /// Выпадающий список ComboBox = class private cb := new System.Windows.Forms.ComboBox; @@ -155,7 +155,7 @@ type property Width: integer read GetWidth write SetWidth; end; - /// + /// Ползунок TrackBar = class private tb: System.Windows.Forms.TrackBar; @@ -177,7 +177,7 @@ type property Frequency: integer read GetFrequency write SetFrequency; end; - /// + /// Ползунок IntegerUpDown = class private n: System.Windows.Forms.NumericUpDown; @@ -214,7 +214,7 @@ type property Dock: DockStyle read GetDock write SetDock; end; - /// + /// Текстовый редактор TextBox = class(BaseDockControl) private function GetText: string; @@ -235,7 +235,7 @@ type procedure Paste; end; - /// - + /// Веб-браузер WebBrowser = class(BaseDockControl) private function GetText: string; @@ -253,7 +253,7 @@ type property Address: string read GetAddress; end; - /// + /// Окно для рисования PaintBox = class(BaseDockControl) private procedure PResize(sender: Object; e: EventArgs); @@ -273,7 +273,7 @@ type //function pb: PictureBox; end; - /// + /// Пункт меню MenuItem = class; ItemProc = procedure(item: MenuItem); MenuItem = class @@ -294,7 +294,7 @@ type property Item[i: integer]: MenuItem read GetItem; default; end; - /// + /// Главное меню MainMenu = class private m: MenuStrip; @@ -316,7 +316,7 @@ type public end; - /// + /// Тип главной формы MainFormType = class(ContainerControl) private m: Form; @@ -336,33 +336,33 @@ type constructor Create; public event Resize: procedure; - /// + /// Отступ главного окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; - /// + /// Отступ главного окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; - /// + /// Ширина главного окна в пикселах property Width: integer read GetWidth write SetWidth; - /// + /// Высота главного окна в пикселах property Height: integer read GetHeight write SetHeight; - /// + /// Заголовок главного окна property Title: string read GetTitle write SetTitle; - /// + /// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; - /// + /// Устанавливает размеры главного окна в пикселах procedure SetSize(w, h: integer); - /// + /// Устанавливает отступ главного окна от левого верхнего края экрана в пикселах procedure SetPos(l, t: integer); - /// + /// Закрывает главное окно и завершает приложение procedure Close; - /// + /// Сворачивает главное окно procedure Minimize; - /// + /// Максимизирует главное окно procedure Maximize; - /// + /// Возвращает главное окно к нормальному размеру procedure Normalize; - /// + /// Центрирует главное окно по центру экрана procedure CenterOnScreen; - /// .NET- + /// Возвращает главную .NET-форму function NetForm: Form; end; @@ -382,9 +382,9 @@ type constructor Create(f: System.Windows.Forms.Panel); public constructor Create; - /// + /// Ширина панели в пикселах property Width: integer read GetWidth write SetWidth; - /// + /// Высота панели в пикселах property Height: integer read GetHeight write SetHeight; property Dock: DockStyle read GetDock write SetDock; property Border: BorderStyle read GetBorderStyle write SetBorderStyle; @@ -408,7 +408,7 @@ type function ShowDialog: DialogResult; end; - /// + /// Диалог работы с файлами FileDialog = class(CommonDialog) private procedure SetFilter(f: string); @@ -423,24 +423,24 @@ type property InitialDirectory: string read GetInitialDirectory write SetInitialDirectory; end; - /// + /// Диалог открытия файла OpenFileDialog = class(FileDialog) public constructor Create; end; - /// + /// Диалог сохранения файла SaveFileDialog = class(FileDialog) public constructor Create; end; -//------------- --------------- +//------------- Процедуры --------------- -/// +/// Перейти на новую строку procedure LineBreak; -/// +/// Добавить пустую строку procedure EmptyLine(h: integer := 20); -/// +/// Добавить пустое пространство procedure EmptySpace(w: integer := 20); type @@ -459,12 +459,12 @@ type end; end; -//------------- --------------- +//------------- Переменные --------------- var MainForm: MainFormType; MainPanel: FlowPanel; - // : 20.11.10 + // Эксперимент: 20.11.10 ParentControl: ContainerControl; ///-- @@ -482,7 +482,7 @@ var nfi: System.Globalization.NumberFormatInfo; -//------------- --------------- +//------------- Компоненты --------------- //------------- Field --------------- @@ -1471,7 +1471,7 @@ begin Result := FlowLayoutPanel(p).FlowDirection; end; -//------------- --------------- +//------------- Процедуры --------------- procedure LineBreak; begin diff --git a/TestSuite/CompilationSamples/FracOperatorOverload.pas b/TestSuite/CompilationSamples/FracOperatorOverload.pas index d876aa633..9491ae6be 100644 --- a/TestSuite/CompilationSamples/FracOperatorOverload.pas +++ b/TestSuite/CompilationSamples/FracOperatorOverload.pas @@ -1,4 +1,4 @@ -// . "" +// Перегрузка операций. Класс "Дробь" type Frac = record private @@ -9,7 +9,7 @@ type Self.n := n; Self.m := m; end; - class function operator+(f1,f2: Frac): Frac; // + class function operator+(f1,f2: Frac): Frac; // операция перегружается как классовая функция begin Result.n := f1.n*f2.m+f1.m*f2.n; Result.m := f1.n*f1.m; @@ -19,7 +19,7 @@ type Result.n := f1.n*f2.m-f1.m*f2.n; Result.m := f1.n*f1.m; end; - function ToString: string; override; // Frac write + function ToString: string; override; // Требуется переопределить эту функцию чтобы выводить переменные типа Frac в write begin Result := Format('{0}/{1}',n,m); end; @@ -31,6 +31,6 @@ begin f := new Frac(2,3); f1 := new Frac(1,2); writelnFormat('{0} + {1} = {2} ',f,f1,f+f1); - // f+f1 Frac.operator+(f,f1) + // f+f1 переводится компилятором в Frac.operator+(f,f1) writelnFormat('{0} - {1} = {2} ',f,f1,f-f1); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Fun1.pas b/TestSuite/CompilationSamples/Fun1.pas index 74b93d8ef..9aeffb0e6 100644 --- a/TestSuite/CompilationSamples/Fun1.pas +++ b/TestSuite/CompilationSamples/Fun1.pas @@ -1,4 +1,4 @@ -// . +// Определение функции. Вывод таблицы ее значений function MyFun(x: real): real; begin @@ -13,7 +13,7 @@ const begin var h := (b-a)/n; var x := a; - writeln(' MyFun:'); + writeln('Таблица значений функции MyFun:'); for var i := 0 to n do begin writeln(x:5:2,MyFun(x):10:4); diff --git a/TestSuite/CompilationSamples/Fun2.pas b/TestSuite/CompilationSamples/Fun2.pas index 099b7c14e..4994822e4 100644 --- a/TestSuite/CompilationSamples/Fun2.pas +++ b/TestSuite/CompilationSamples/Fun2.pas @@ -1,4 +1,4 @@ -// Power +// Функция Power function Power(x: real; n: integer): real; begin @@ -13,5 +13,5 @@ var begin x := 2; n := 5; - writelnFormat('{0} {1} = {2}',x,n,Power(x,n)); + writelnFormat('{0} в степени {1} = {2}',x,n,Power(x,n)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/FuncParams.pas b/TestSuite/CompilationSamples/FuncParams.pas index 81e9a13a6..e23578348 100644 --- a/TestSuite/CompilationSamples/FuncParams.pas +++ b/TestSuite/CompilationSamples/FuncParams.pas @@ -1,4 +1,4 @@ -// +// Переменное число параметров function Sum(params arg: array of integer): integer; begin Result := 0; diff --git a/TestSuite/CompilationSamples/GarbageCollection.pas b/TestSuite/CompilationSamples/GarbageCollection.pas index 9182e55ca..e9361cc02 100644 --- a/TestSuite/CompilationSamples/GarbageCollection.pas +++ b/TestSuite/CompilationSamples/GarbageCollection.pas @@ -1,4 +1,4 @@ -// : nil +// Сборка мусора: для освобождения объекта присвойте переменной nil uses System.Collections.Generic; var l: List := new List; @@ -9,5 +9,5 @@ begin l.Add(2); foreach x:integer in l do write(x,' '); - l := nil; // , , + l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Gr1.pas b/TestSuite/CompilationSamples/Gr1.pas index 1a55d87d0..1b3eb122e 100644 --- a/TestSuite/CompilationSamples/Gr1.pas +++ b/TestSuite/CompilationSamples/Gr1.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Линии. Размеры окна. Заголовок окна uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Первая графическая программа'; Line(0,0,Window.Width-1,Window.Height-1); Line(0,Window.Height-1,Window.Width-1,0); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Gr2.pas b/TestSuite/CompilationSamples/Gr2.pas index a4f21e187..0471c2aa8 100644 --- a/TestSuite/CompilationSamples/Gr2.pas +++ b/TestSuite/CompilationSamples/Gr2.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Точка. Случайный цвет. Скорость работы uses GraphABC,Utils; begin for var i:=1 to 100000 do SetPixel(Random(Window.Width),Random(Window.Height),clRandom); - writeln(' : ',Milliseconds/1000,' '); + writeln('Время работы: ',Milliseconds/1000,' секунд'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Gr3.pas b/TestSuite/CompilationSamples/Gr3.pas index 66e1f3881..de0d7ae58 100644 --- a/TestSuite/CompilationSamples/Gr3.pas +++ b/TestSuite/CompilationSamples/Gr3.pas @@ -1,8 +1,8 @@ -// . +// Графика. Свойства кисти и пера uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Свойства кисти и пера'; Pen.Color := Color.Red; Pen.Width := 3; Pen.Style := psDashDot; diff --git a/TestSuite/CompilationSamples/Gr4.pas b/TestSuite/CompilationSamples/Gr4.pas index e6c2025a1..7c060dd57 100644 --- a/TestSuite/CompilationSamples/Gr4.pas +++ b/TestSuite/CompilationSamples/Gr4.pas @@ -1,8 +1,8 @@ -// . Draw Fill - +// Графика. Draw и Fill - процедуры uses GraphABC; begin - Window.Title := 'Draw Fill - '; + Window.Title := 'Draw и Fill - процедуры'; for var i := 1 to 100 do begin Pen.Color := clRandom; diff --git a/TestSuite/CompilationSamples/Gr5.pas b/TestSuite/CompilationSamples/Gr5.pas index 4cbaac953..979566e61 100644 --- a/TestSuite/CompilationSamples/Gr5.pas +++ b/TestSuite/CompilationSamples/Gr5.pas @@ -1,10 +1,10 @@ -// . Pie +// Графика. Pie uses GraphABC; const r = 200; begin - Window.Title := ' '; + Window.Title := 'Круговая гистограмма'; var x := Window.Center.X; var y := Window.Center.Y; Brush.Color := clRandom; diff --git a/TestSuite/CompilationSamples/Gr6.pas b/TestSuite/CompilationSamples/Gr6.pas index b127200f3..6430311b0 100644 --- a/TestSuite/CompilationSamples/Gr6.pas +++ b/TestSuite/CompilationSamples/Gr6.pas @@ -1,8 +1,8 @@ -// . +// Графика. Прозрачность uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация прозрачности'; Brush.Color := clRed; FillRectangle(50,50,100,Window.Height - 50); diff --git a/TestSuite/CompilationSamples/Gr7.pas b/TestSuite/CompilationSamples/Gr7.pas index ef1f7ca6a..3eacff030 100644 --- a/TestSuite/CompilationSamples/Gr7.pas +++ b/TestSuite/CompilationSamples/Gr7.pas @@ -1,4 +1,4 @@ -// . +// Графика. Сохраниение изображения графического окна в файл и загрузка из файла uses GraphABC; const @@ -6,7 +6,7 @@ const filename = 'GraphWindow.bmp'; begin - Window.Title := 'Window.Save Window.Load'; + Window.Title := 'Window.Save и Window.Load'; SetWindowSize(320,240); for var x:=0 to Window.Width - 1 do diff --git a/TestSuite/CompilationSamples/Gr8.pas b/TestSuite/CompilationSamples/Gr8.pas index 278994fb4..678a0a382 100644 --- a/TestSuite/CompilationSamples/Gr8.pas +++ b/TestSuite/CompilationSamples/Gr8.pas @@ -1,9 +1,9 @@ -// . +// Графика. Сглаживание uses GraphABC; begin - Window.Title := ' '; - TextOut(40,20,' '); + Window.Title := 'Демонстрация сглаживания'; + TextOut(40,20,'Со сглаживанием'); Pen.Width := 2; Ellipse(40,60,300,200); @@ -11,7 +11,7 @@ begin Line(600,130,340,200); SetSmoothingOff; - TextOut(40,240,' '); + TextOut(40,240,'Без сглаживания'); Ellipse(40,280,300,420); Line(340,280,600,350); Line(600,350,340,420); diff --git a/TestSuite/CompilationSamples/GrAnim1.pas b/TestSuite/CompilationSamples/GrAnim1.pas index 71dde4512..67e0b2d54 100644 --- a/TestSuite/CompilationSamples/GrAnim1.pas +++ b/TestSuite/CompilationSamples/GrAnim1.pas @@ -1,8 +1,8 @@ -// . "" . +// Графика. Пример "наивной" анимации. Эффект мерцания uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация простой анимации'; var y := 200; Brush.Color := clGreen; for var x := 70 to 500 do diff --git a/TestSuite/CompilationSamples/GrAnim2.pas b/TestSuite/CompilationSamples/GrAnim2.pas index bad081cf2..b88e17046 100644 --- a/TestSuite/CompilationSamples/GrAnim2.pas +++ b/TestSuite/CompilationSamples/GrAnim2.pas @@ -1,17 +1,17 @@ -// . LockDrawing-Redraw. +// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Анимация без мерцания'; var y := 200; Brush.Color := clGreen; - // + // Отключаем рисование в окне LockDrawing; for var x := 70 to 500 do begin Window.Clear(clWhite); Circle(x,y,50); - // + // Перерисовываем окно из внеэранного буфера Redraw; Sleep(3); end; diff --git a/TestSuite/CompilationSamples/GrCoord1.pas b/TestSuite/CompilationSamples/GrCoord1.pas index 169a52366..8da8ac886 100644 --- a/TestSuite/CompilationSamples/GrCoord1.pas +++ b/TestSuite/CompilationSamples/GrCoord1.pas @@ -1,15 +1,15 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; - // + // Поворот Coordinate.Angle := 30; - // + // Масштаб Coordinate.Scale := 3; - // - + // Начало координат - в центре окна Coordinate.Origin := Window.Center; Brush.Color := clMoneyGreen; diff --git a/TestSuite/CompilationSamples/GrCoord2.pas b/TestSuite/CompilationSamples/GrCoord2.pas index d5e2ba3f8..e81b9b651 100644 --- a/TestSuite/CompilationSamples/GrCoord2.pas +++ b/TestSuite/CompilationSamples/GrCoord2.pas @@ -1,8 +1,8 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; Coordinate.Origin := Window.Center; diff --git a/TestSuite/CompilationSamples/GrFont1.pas b/TestSuite/CompilationSamples/GrFont1.pas index 54600ef1d..40446966c 100644 --- a/TestSuite/CompilationSamples/GrFont1.pas +++ b/TestSuite/CompilationSamples/GrFont1.pas @@ -1,8 +1,8 @@ -// +// Демонстрация работы со шрифтами uses GraphABC; begin - Window.Title := ''; + Window.Title := 'Шрифты'; SetWindowSize(760,460); Font.Name := 'Arial'; Font.Style := fsBoldItalic; diff --git a/TestSuite/CompilationSamples/GrFont2.pas b/TestSuite/CompilationSamples/GrFont2.pas index 04b15835c..17947a8ff 100644 --- a/TestSuite/CompilationSamples/GrFont2.pas +++ b/TestSuite/CompilationSamples/GrFont2.pas @@ -1,10 +1,10 @@ -// TextWidth TextHeight +// Демонстрация использования TextWidth и TextHeight uses GraphABC; const s = 'Width & Height'; begin - Window.Title := ' '; + Window.Title := 'Текст по центру'; Window.IsFixedSize := True; SetWindowSize(700,300); Window.Center; diff --git a/TestSuite/CompilationSamples/GrPoly.pas b/TestSuite/CompilationSamples/GrPoly.pas index 7abc91298..68f80312d 100644 --- a/TestSuite/CompilationSamples/GrPoly.pas +++ b/TestSuite/CompilationSamples/GrPoly.pas @@ -1,11 +1,11 @@ -// Polyline, Polygon, Curve, ClosedCurve -// +// Процедуры Polyline, Polygon, Curve, ClosedCurve +// Перенос начала системы координат uses GraphABC; var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); begin - Window.Title := ' '; + Window.Title := 'Рисование по массиву точек'; Brush.Color := Color.Beige; Coordinate.SetOrigin(60,30); Polyline(a); diff --git a/TestSuite/CompilationSamples/GraphABC.pas b/TestSuite/CompilationSamples/GraphABC.pas index 9f70a7132..6c392d86a 100644 --- a/TestSuite/CompilationSamples/GraphABC.pas +++ b/TestSuite/CompilationSamples/GraphABC.pas @@ -1,11 +1,11 @@ // Copyright (c) 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 GraphABC; //ne udaljat, IB 7.10.08 -// 2015.01 (mabr) +//с дополнениями 2015.01 (mabr) {$apptype windows} {$reference 'System.Windows.Forms.dll'} {$reference 'System.Drawing.dll'} @@ -20,15 +20,15 @@ uses System.Drawing.Drawing2D; type -/// +/// Тип цвета Color = System.Drawing.Color; -/// +/// Тип стиля штриховки кисти HatchStyle = System.Drawing.Drawing2D.HatchStyle; -/// +/// Тип стиля штриховки пера DashStyle = System.Drawing.Drawing2D.DashStyle; -/// GraphABC +/// Тип исключения GraphABC GraphABCException = class(Exception) end; -/// +/// Тип точки Point = System.Drawing.Point; var @@ -225,95 +225,95 @@ type FontStyleType = (fsNormal, fsBold, fsItalic, fsBoldItalic, fsUnderline, fsBoldUnderline, fsItalicUnderline, fsBoldItalicUnderline); BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient, bsNone); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела с координатами (x,y) function GetPixel(x,y: integer): Color; -/// (x,y) +/// Устанавливает текущую позицию рисования в точку (x,y) procedure MoveTo(x,y: integer); -/// (x,y). (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer); -/// (x,y) c. (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer; c: Color); -/// (x1,y1) (x2,y2) +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Рисует окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r +/// Рисует заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// (x,y) +/// Возвращает точку на плоскости с координатами (x,y) function Pnt(x,y: integer): Point; -/// , points +/// Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Рисует ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Рисует кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// n (x,y) +/// Выводит целое n в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; n: integer); -/// r (x,y) +/// Выводит вещественное r в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; r: real); -/// s, (x,y,x1,y1) +/// Выводит строку s, отцентрированную в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; s: string); -/// n, (x,y,x1,y1) +/// Выводит целое значение n, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; n: integer); -/// r, (x,y,x1,y1) +/// Выводит вещественное значение r, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; r: real); -/// c, (x,y). +/// Заливает область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); {procedure FillCircle(x,y,r: integer; c: Color); @@ -342,271 +342,271 @@ procedure Polygon(a: array of Point; c: Color); procedure Polyline(a: array of Point; c: Color);} //-------------------------------------------- -//// +//// Цвета //-------------------------------------------- -/// , (r), (g) (b) (r,g b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) function RGB(r,g,b: byte): Color; -/// , (r), (g) (b) (a) (a,r,g,b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) function ARGB(a,r,g,b: byte): Color; -/// r (r - 0 255) +/// Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) function RedColor(r: byte): Color; -/// g (g - 0 255) +/// Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) function GreenColor(g: byte): Color; -/// b (b - 0 255) +/// Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) function BlueColor(b: byte): Color; -/// +/// Возвращает случайный цвет function clRandom: Color; -/// +/// Возвращает красную составляющую цвета function GetRed(c: Color): integer; -/// +/// Возвращает зеленую составляющую цвета function GetGreen(c: Color): integer; -/// +/// Возвращает синюю составляющую цвета function GetBlue(c: Color): integer; -/// +/// Возвращает составляющую прозрачности цвета function GetAlpha(c: Color): integer; //-------------------------------------------- -//// +//// Перья //-------------------------------------------- -/// +/// Устанавливает цвет текущего пера procedure SetPenColor(c: Color); -/// +/// Возвращает цвет текущего пера function PenColor: Color; -/// +/// Устанавливает ширину текущего пера procedure SetPenWidth(Width: integer); -/// +/// Возвращает ширину текущего пера function PenWidth: integer; -/// +/// Устанавливает стиль текущего пера procedure SetPenStyle(style: DashStyle); -/// +/// Возвращает стиль текущего пера function PenStyle: DashStyle; -/// +/// Устанавливает режим текущего пера procedure SetPenMode(m: integer); -/// +/// Возвращает режим текущего пера function PenMode: integer; //2015.01> -/// +/// Устанавливает или отменяет режим закругленных концов линий procedure SetPenRoundCap(isRoundCap: boolean); -/// tru, +/// Возвращает truе, если установлен режим закругленных концов линий function PenRoundCap: boolean; //2015.01< -/// x- +/// Возвращают x-координату текущей позиции рисования function PenX: integer; -/// y- +/// Возвращают y-координату текущей позиции рисования function PenY: integer; //-------------------------------------------- -//// +//// Кисти //-------------------------------------------- -/// +/// Устанавливает цвет текущей кисти procedure SetBrushColor(c: Color); -/// +/// Возвращает цвет текущей кисти function BrushColor: Color; -/// +/// Устанавливает цвет текущей кисти procedure SetBrushStyle(bs: BrushStyleType); -/// +/// Возвращает цвет текущей кисти function BrushStyle: BrushStyleType; -/// +/// Устанавливает штриховку текущей кисти procedure SetBrushHatch(bh: HatchStyle); -/// +/// Возвращает штриховку текущей кисти function BrushHatch: HatchStyle; -/// +/// Устанавливает цвет заднего плана текущей штриховой кисти procedure SetHatchBrushBackgroundColor(c: Color); -/// +/// Возвращает цвет заднего плана текущей штриховой кисти function HatchBrushBackgroundColor: Color; -/// +/// Устанавливает второй цвет текущей градиентной кисти procedure SetGradientBrushSecondColor(c: Color); -/// +/// Возвращает второй цвет текущей градиентной кисти function GradientBrushSecondColor: Color; //-------------------------------------------- -//// +//// Шрифты //-------------------------------------------- -/// +/// Устанавливает размер текущего шрифта в пунктах procedure SetFontSize(size: integer); -/// +/// Возвращает размер текущего шрифта в пунктах function FontSize: integer; -/// +/// Устанавливает имя текущего шрифта procedure SetFontName(name: string); -/// +/// Возвращает имя текущего шрифта function FontName: string; -/// +/// Устанавливает цвет текущего шрифта procedure SetFontColor(c: Color); -/// +/// Возвращает цвет текущего шрифта function FontColor: Color; -/// +/// Устанавливает стиль текущего шрифта procedure SetFontStyle(fs: FontStyleType); -/// +/// Возвращает стиль текущего шрифта function FontStyle: FontStyleType; -/// s +/// Возвращает ширину строки s в пикселях при текущих настройках шрифта function TextWidth(s: string): integer; -/// s +/// Возвращает высоту строки s в пикселях при текущих настройках шрифта function TextHeight(s: string): integer; //-------------------------------------------- -//// +//// Графическое окно //-------------------------------------------- -/// +/// Очищает графическое окно белым цветом procedure ClearWindow; -/// c +/// Очищает графическое окно цветом c procedure ClearWindow(c: Color); -/// +/// Возвращает ширину клиентской части графического окна в пикселах function WindowWidth: integer; -/// +/// Возвращает высоту клиентской части графического окна в пикселах function WindowHeight: integer; -/// +/// Возвращает отступ графического окна от левого края экрана в пикселах function WindowLeft: integer; -/// +/// Возвращает отступ графического окна от верхнего края экрана в пикселах function WindowTop: integer; -/// +/// Возвращает центр графического окна function WindowCenter: Point; -/// True, , False +/// Возвращает True, если графическое окно имеет фиксированный размер, и False в противном случае function WindowIsFixedSize: boolean; -/// +/// Устанавливает ширину клиентской части графического окна в пикселах procedure SetWindowWidth(w: integer); -/// +/// Устанавливает высоту клиентской части графического окна в пикселах procedure SetWindowHeight(h: integer); -/// +/// Устанавливает отступ графического окна от левого края экрана в пикселах procedure SetWindowLeft(l: integer); -/// +/// Устанавливает отступ графического окна от верхнего края экрана в пикселах procedure SetWindowTop(t: integer); -/// , +/// Устанавливает, имеет ли графическое окно фиксированный размер procedure SetWindowIsFixedSize(b: boolean); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetWindowSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetWindowPos(l,t: integer); -/// ( WindowWidth) +/// Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) function GraphBoxWidth: integer; -/// ( WindowHeight) +/// Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) function GraphBoxHeight: integer; -/// +/// Возвращает отступ графического компонента от левого края окна в пикселах function GraphBoxLeft: integer; -/// +/// Возвращает отступ графического компонента от верхнего края окна в пикселах function GraphBoxTop: integer; -/// +/// Возвращает заголовок графического окна function WindowCaption: string; -/// +/// Возвращает заголовок графического окна function WindowTitle: string; -/// +/// Устанавливает заголовок графического окна procedure SetWindowCaption(s: string); -/// +/// Устанавливает заголовок графического окна procedure SetWindowTitle(s: string); -/// +/// Устанавливает ширину и высоту клиентской части графического окна в пикселах procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// fname +/// Сохраняет содержимое графического окна в файл с именем fname procedure SaveWindow(fname: string); -/// fname +/// Восстанавливает содержимое графического окна из файла с именем fname procedure LoadWindow(fname: string); -/// fname +/// Заполняет содержимое графического окна обоями из файла с именем fname procedure FillWindow(fname: string); -/// +/// Закрывает графическое окно и завершает приложение procedure CloseWindow; -/// +/// Возвращает ширину экрана в пикселях function ScreenWidth: integer; -/// +/// Возвращает высоту экрана в пикселях function ScreenHeight: integer; -/// +/// Центрирует графическое окно по центру экрана procedure CenterWindow; -/// +/// Максимизирует графическое окно procedure MaximizeWindow; -/// +/// Сворачивает графическое окно procedure MinimizeWindow; -/// +/// Возвращает графическое окно к нормальному размеру procedure NormalizeWindow; //-------------------------------------------- -//// +//// Буферизация рисования //-------------------------------------------- -/// . LockDrawing +/// Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure Redraw; ///-- procedure FullRedraw; -/// . Redraw +/// Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure LockDrawing; -/// +/// Снимает блокировку рисования на графическом окне и осуществляет его перерисовку procedure UnlockDrawing; //-------------------------------------------- -//// +//// Сглаживание //-------------------------------------------- -/// +/// Устанавливает режим сглаживания procedure SetSmoothing(sm: boolean); -/// +/// Включает режим сглаживания procedure SetSmoothingOn; -/// +/// Выключает режим сглаживания procedure SetSmoothingOff; -/// True, +/// Возвращает True, если режим сглаживания установлен function SmoothingIsOn: boolean; //-------------------------------------------- -//// +//// Вспомогательные подпрограммы //-------------------------------------------- -/// . +/// Блокирует прорисовку графики. Вызывается для синхронизации procedure LockGraphics; -/// . +/// Разблокирует прорисовку графики. Вызывается для синхронизации procedure UnLockGraphics; //------------------------------------------------------------ -//// +//// Подпрограммы для работы с системой координат //------------------------------------------------------------ -/// (x0,y0) +/// Устанавливает начало координат в точку (x0,y0) procedure SetCoordinateOrigin(x0,y0: integer); -/// +/// Устанавливает масштаб системы координат procedure SetCoordinateScale(sx,sy: real); -/// +/// Устанавливает поворот системы координат procedure SetCoordinateAngle(a: real); //---------------------------------------- -//// +//// Сервисные подпрограммы //---------------------------------------- -/// , +/// Возвращает прямоугольник, заданный координатами противоположных вершин function Rect(x1,y1,x2,y2: integer): System.Drawing.Rectangle; -/// +/// Возвращает прямоугольник клиентской части главного окна function ClientRectangle: System.Drawing.Rectangle; //------------------------------------------ -//// +//// Рисование графиков функций //------------------------------------------ -/// f [a,b] , x1,y1,x2,y2, +/// Рисует график функции f на отрезке [a,b] в прямоугольнике, задаваемом координатами x1,y1,x2,y2, procedure Draw(f: Func; a,b: real; x1,y1,x2,y2: integer); -/// f [a,b] r +/// Рисует график функции f на отрезке [a,b] в прямоугольнике r procedure Draw(f: Func; a,b: real; r: System.Drawing.Rectangle); -/// f [-5,5] r +/// Рисует график функции f на отрезке [-5,5] в прямоугольнике r procedure Draw(f: Func; r: System.Drawing.Rectangle); -/// f [a,b] +/// Рисует график функции f на отрезке [a,b] на полное графическое окно procedure Draw(f: Func; a,b: real); -/// f [-5,5] +/// Рисует график функции f на отрезке [-5,5] на полное графическое окно procedure Draw(f: Func); //------------------------------------------ -//// +//// Рисование изображений //------------------------------------------ -/// fname x,y +/// Выводит растровое изображение из файла с именем fname в позицию x,y procedure Draw(fname: string; x: integer := 0; y: integer := 0); -/// fname x,y, w h +/// Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его к размеру w на h procedure Draw(fname: string; x,y,w,h: integer); -/// fname x,y, Scale +/// Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его с коэффициентом Scale procedure Draw(fname: string; x,y: integer; Scale: real); -/// . +/// Инициализирует графическое окно. Используется для внутренних целей procedure InitGraphABC; type -/// GraphABC +/// Тип пера GraphABC GraphABCPen = class private _NETPen: System.Drawing.Pen; @@ -626,27 +626,27 @@ type function GetRoundCap: boolean; //2015.01< public - /// .NET + /// Текущее перо .NET property NETPen: System.Drawing.Pen read _NETPen write SetNETPen; - /// + /// Цвет пера property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Ширина пера property Width: integer read GetWidth write SetWidth; - /// + /// Стиль пера property Style: DashStyle read GetStyle write SetStyle; - /// + /// Режим пера property Mode: integer read GetMode write SetMode; - /// X- + /// X-координата текущей позиции пера property X: integer read GetX; - /// Y- + /// Y-координата текущей позиции пера property Y: integer read GetY; //2015.01> - /// + /// Режим закругленных концов линий property RoundCap: boolean read GetRoundCap write SetRoundCap; //2015.01< end; -/// GraphABC +/// Тип кисти GraphABC GraphABCBrush = class private _NETBrush: System.Drawing.Brush; @@ -662,21 +662,21 @@ type procedure SetGradientSecondColor(c: GraphABC.Color); function GetGradientSecondColor: GraphABC.Color; public -/// .NET +/// Текущая кисть .NET property NETBrush: System.Drawing.Brush read _NETBrush write SetNETBrush; -/// +/// Цвет кисти property Color: GraphABC.Color read GetColor write SetColor; -/// +/// Стиль кисти property Style: BrushStyleType read GetStyle write SetStyle; -/// +/// Штриховка кисти property Hatch: HatchStyle read GetHatch write SetHatch; -/// +/// Цвет заднего плана штриховой кисти property HatchBackgroundColor: GraphABC.Color read GetHatchBackgroundColor write SetHatchBackgroundColor; -/// +/// Второй цвет градиентной кисти property GradientSecondColor: GraphABC.Color read GetGradientSecondColor write SetGradientSecondColor; end; -/// GraphABC +/// Тип шрифта GraphABC GraphABCFont = class private _NETFont: System.Drawing.Font; @@ -690,15 +690,15 @@ type procedure SetName(nm: string); function GetName: string; public -/// .NET +/// Текущий шрифт .NET property NETFont: System.Drawing.Font read _NETFont write SetNETFont; - /// + /// Цвет шрифта property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Стиль шрифта property Style: FontStyleType read GetStyle write SetStyle; - /// + /// Размер шрифта в пунктах property Size: integer read GetSize write SetSize; - /// + /// Наименование шрифта property Name: string read GetName write SetName; end; @@ -720,33 +720,33 @@ type function GetMatrix: System.Drawing.Drawing2D.Matrix; public constructor; - /// + /// Устанавливает параметры системы координат procedure SetTransform(x0,y0,angle,sx,sy: real); - /// + /// Устанавливает начало системы координат procedure SetOrigin(x0,y0: integer); - /// + /// Устанавливает масштаб системы координат procedure SetScale(sx,sy: real); - /// + /// Устанавливает масштаб системы координат procedure SetScale(scale: real); - /// ( OY , OX - ) + /// Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо) procedure SetMathematic; - /// ( OY , OX - ) + /// Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо) procedure SetStandard; - /// X- + /// X-координата начала координат относительно левого верхнего угла окна property OriginX: integer read GetOriginX write SetOriginX; - /// Y- + /// Y-координата начала координат относительно левого верхнего угла окна property OriginY: integer read GetOriginY write SetOriginY; - /// + /// Координаты начала координат относительно левого верхнего угла окна property Origin: Point read GetOrigin write SetOrigin; - /// + /// Угол поворота системы координат property Angle: real read GetAngle write SetAngle; - /// X + /// Масштаб системы координат по оси X property ScaleX: real read GetScaleX write SetScaleX; - /// Y + /// Масштаб системы координат по оси Y property ScaleY: real read GetScaleY write SetScaleY; - /// + /// Масштаб системы координат по обоим осям property Scale: real write SetScale; - /// 3x3 + /// Матрица 3x3 преобразований координат property Matrix: System.Drawing.Drawing2D.Matrix read GetMatrix; end; @@ -765,51 +765,51 @@ type procedure SetIsFixedSize(b: boolean); function GetIsFixedSize: boolean; public -/// +/// Отступ графического окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; -/// +/// Отступ графического окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; -/// +/// Ширина клиентской части графического окна в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота клиентской части графического окна в пикселах property Height: integer read GetHeight write SetHeight; -/// +/// Заголовок графического окна property Caption: string read GetCaption write SetCaption; -/// +/// Заголовок графического окна property Title: string read GetCaption write SetCaption; -/// +/// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; -/// +/// Очищает графическое окно белым цветом procedure Clear; -/// c +/// Очищает графическое окно цветом c procedure Clear(c: Color); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetPos(l,t: integer); -/// , +/// Устанавливает положение, размеры и цвет графического окна procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// 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; end; -/// GraphABC +/// Тип рисунка GraphABC Picture = class private bmp,savedbmp: Bitmap; @@ -824,125 +824,125 @@ type procedure SetTransparentColor(c: GraphABC.Color); function GetTransparentColor: GraphABC.Color; public -/// w h +/// Создает рисунок размера w на h пикселей constructor Create(w,h: integer); -/// fname +/// Создает рисунок из файла с именем fname constructor Create(fname: string); -/// r +/// Создает рисунок из прямоугольника r графического окна constructor Create(r: System.Drawing.Rectangle); // Create from screen -/// fname +/// Загружает рисунок из файла с именем fname procedure Load(fname: string); -/// fname +/// Сохраняет рисунок в файл с именем fname procedure Save(fname: string); -/// w h +/// Устанавливает размер рисунка w на h пикселей procedure SetSize(w,h: integer); -/// +/// Ширина рисунка в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота рисунка в пикселах property Height: integer read GetHeight write SetHeight; -/// ; TransparentColor +/// Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor property Transparent: boolean read istransp write SetTransparent; -/// . Transparent := True +/// Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True property TransparentColor: GraphABC.Color read GetTransparentColor write SetTransparentColor; -/// True, p, False . +/// Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным function Intersect(p: Picture): boolean; -/// (x,y) +/// Выводит рисунок в позиции (x,y) procedure Draw(x: integer := 0; y: integer := 0); -/// (x,y) g +/// Выводит рисунок в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; g: Graphics); -/// (x,y), (w,h) +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer); -/// (x,y), (w,h), g +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; g: Graphics); -/// , r, (x,y) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y) g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , r, (x,y), (w,h) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y), (w,h), g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , rotateAngle, (w,h) +/// Выводит рисунок, повернутый на угол rotateAngle, масштабируя его к размеру (w,h) procedure Picture.Draw(x,y: integer; rotateAngle: real; w,h: integer); -/// src p dst +/// Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); -/// src bmp dst +/// Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); -/// +/// Зеркально отображает рисунок относительно горизонтальной оси симметрии procedure FlipHorizontal; -/// +/// Зеркально отображает рисунок относительно вертикальной оси симметрии procedure FlipVertical; -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела (x,y) рисунка function GetPixel(x,y: integer): Color; -/// (x1,y1) (x2,y2) +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Выводит на рисунке окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// (x,y) r +/// Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); -/// +/// Очищает рисунок белым цветом procedure Clear; -/// c +/// Очищает рисунок цветом c procedure Clear(c: Color); end; @@ -961,58 +961,58 @@ type procedure Init; protected function IsInputKey(keyData: Keys): boolean; override; - procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // ! + procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // сами все перерисовываем! public constructor (w,h: integer); end; -/// w h p +/// Создает рисунок размера w на h пикселов и записывает его в переменную p procedure CreatePicture(var p: Picture; w,h: integer); -/// +/// Возвращает окно графического приложения function Window: GraphABCWindow; -/// +/// Возвращает главную форму графического приложения function MainForm: Form; -/// +/// Возвращает графический компонент function GraphABCControl: ABCControl; -/// +/// Возвращает текущее перо function Pen: GraphABCPen; -/// +/// Возвращает текущую кисть function Brush: GraphABCBrush; -/// +/// Возвращает текущий шрифт function Font: GraphABCFont; -/// GraphABC +/// Возвращает систему координат GraphABC function Coordinate: GraphABCCoordinate; function GraphWindowGraphics: Graphics; function GraphBufferGraphics: Graphics; function GraphBufferBitmap: Bitmap; -/// - +/// Устанавливает консольный ввод-вывод procedure SetConsoleIO; -/// - ( ) +/// Устанавливает ввод-вывод через графическое окно (по умолчанию) procedure SetGraphABCIO; var -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseDown: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши OnMouseUp: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 0, , 1, , 2, +/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseMove: procedure (x,y,mousebutton: integer); -/// +/// Событие нажатия клавиши OnKeyDown: procedure (key: integer); -/// +/// Событие отжатия клавиши OnKeyUp: procedure (key: integer); -/// +/// Событие нажатия символьной клавиши OnKeyPress: procedure (ch: char); -/// +/// Событие изменения размера графического окна OnResize: procedure; -/// +/// Событие закрытия графического окна OnClose: procedure; -/// . nil, +/// Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка RedrawProc: procedure; -/// +/// Следует ли рисовать во внеэкранном буфере DrawInBuffer: boolean; ///-- @@ -1025,8 +1025,8 @@ uses GraphABCHelper; const - FILE_NOT_FOUND_MESSAGE = ' {0} '; - BUTTON_ENTER_TEXT = ''; + FILE_NOT_FOUND_MESSAGE = 'Файл {0} не найден'; + BUTTON_ENTER_TEXT = 'Ввести'; type Proc1Integer = procedure(x: integer); @@ -1048,9 +1048,9 @@ type function SetProcessDPIAware(): boolean; external 'user32.dll'; var - // - + // строка-буфер ввода MainThread: Thread; - // - + // строка-буфер ввода readbuffer: string; _Window: GraphABCWindow := new GraphABCWindow; _MainForm: Form; @@ -1119,28 +1119,28 @@ procedure IOGraphABCSystem.write(obj: object); var rem := Window.Width - writecoords.X; if rem = 0 then Result := 0 - else if tw <= rem then // + else if tw <= rem then // строка влазит полностью Result := Length(s) else begin - // ns - + // ns - примерное количество символов до переноса var ns := Round(Length(s)*rem/TextWidth(s)); if ns>Length(s) then ns := Length(s); tw := TextWidth(s.Substring(0,ns)); if tw > rem then while tw > rem do - begin // ns, + begin // начинаем уменьшать ns, пока не влезет ns -= 1; tw := TextWidth(s.Substring(0,ns)); end else if tw = rem then begin - // + // ничего не делать end else begin // tw < rem - // ns + // увеличиваем ns while (ns=1) and (x<=9) then - writeln(' '); - // Odd - , True x - + writeln('Однозначное число'); + // Odd - функция, возвращающая True только если x - нечетно if Odd(x) and (x>=10) and (x<=99) then - writeln(' '); + writeln('Нечетное двузначное число'); if (x=3) or (x=9) or (x=27) or (x=81) then - writeln(' '); + writeln('Степень тройки'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/If4.pas b/TestSuite/CompilationSamples/If4.pas index ae25cbd92..41008a92a 100644 --- a/TestSuite/CompilationSamples/If4.pas +++ b/TestSuite/CompilationSamples/If4.pas @@ -1,18 +1,18 @@ -// +// Вложенные условные операторы var x: integer; begin - writeln(' (1..5): '); + writeln('Введите оценку (1..5): '); readln(x); if (x=1) then - writeln('') + writeln('Единица') else if (x=2) then - writeln('') + writeln('Двойка') else if (x=3) then - writeln('') + writeln('Тройка') else if (x=4) then - writeln('') + writeln('Четверка') else if (x=5) then - writeln('') - else writeln(' ') + writeln('Пятерка') + else writeln('Такой оценки нет') end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/If5.pas b/TestSuite/CompilationSamples/If5.pas index 8371ce053..074bf783b 100644 --- a/TestSuite/CompilationSamples/If5.pas +++ b/TestSuite/CompilationSamples/If5.pas @@ -1,19 +1,19 @@ -// . +// Вложенные условные операторы. Антонимы var s: string; begin - writeln(' (,,,,): '); + writeln('Введите слово из списка (черный,высокий,свет,радость,умный): '); readln(s); - write(': '); - if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else writeln(' ') + write('Антоним: '); + if (s='черный') then + writeln('белый') + else if (s='высокий') then + writeln('низкий') + else if (s='свет') then + writeln('тьма') + else if (s='радость') then + writeln('горе') + else if (s='умный') then + writeln('глупый') + else writeln('Такого слова в списке нет') end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/IndexProperties.pas b/TestSuite/CompilationSamples/IndexProperties.pas index 5937f73cd..7b35e9e54 100644 --- a/TestSuite/CompilationSamples/IndexProperties.pas +++ b/TestSuite/CompilationSamples/IndexProperties.pas @@ -1,4 +1,4 @@ -// . +// Индексные свойства. Массив цветных квадратов uses GraphABC; const @@ -11,17 +11,17 @@ type VisualArray = class private a: array of Color; - procedure SetItem(i: integer; x: Color); // , i- + procedure SetItem(i: integer; x: Color); // Процедура, устанавливающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); a[i] := x; Draw(i); end; - function GetItem(i: integer): Color; // , i- + function GetItem(i: integer): Color; // Функция, возвращающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); Result := a[i]; end; public @@ -32,29 +32,29 @@ type a[i] := clWhite; Draw; end; - /// i- + /// Рисует i-тый квадрат procedure Draw(i: integer); begin Brush.Color := a[i]; Rectangle(sz+sz*i,sz,sz+sz*(i+1)+1,sz+sz); end; - /// + /// Рисует массив цветных квадратов procedure Draw; begin for var i:=0 to a.Length-1 do Draw(i); end; - /// + /// Индексное свойство по умолчанию property Item[i: integer]: Color read GetItem write SetItem; default; end; var arr: VisualArray; begin - Window.Title := ' '; + Window.Title := 'Иллюстрация индексных свойств'; arr := new VisualArray(dim); SetWindowSize(sz*(dim+2),3*sz); - arr[0] := clGreen; // arr.Items[0] = arr[0] Items + arr[0] := clGreen; // arr.Items[0] = arr[0] поскольку свойство Items является свойством по умолчанию Sleep(delay); arr[1] := clBlack; Sleep(delay); diff --git a/TestSuite/CompilationSamples/Inheritance1.pas b/TestSuite/CompilationSamples/Inheritance1.pas index 2521b8227..94c4e7ccd 100644 --- a/TestSuite/CompilationSamples/Inheritance1.pas +++ b/TestSuite/CompilationSamples/Inheritance1.pas @@ -1,4 +1,4 @@ -// . +// Наследование. Полиморфизм и виртуальные функции type Person = class private @@ -9,10 +9,10 @@ type begin name := n; age := a; end; - procedure Print; virtual; // . - + procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках begin var s := GetType.ToString; - write(': ',Copy(s,pos('.',s)+1,Length(s)):7,' : ',name,' : ',age); + write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,' Имя: ',name,' Возраст: ',age); end; procedure Println; begin @@ -21,19 +21,19 @@ type end; end; - Pupil = class(Person) // Pupil - Person + Pupil = class(Person) // Pupil - наследник Person private clas: integer; public constructor (n: string; a,c: integer); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора clas := c; end; procedure Print; override; begin inherited Print; - write(' : ',clas); + write(' Класс: ',clas); end; end; @@ -43,23 +43,23 @@ type public constructor (n: string; a: integer; p: string); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора predm := p; end; procedure Print; override; begin inherited Print; - write(' : ',predm); + write(' Предмет: ',predm); end; end; -var a: array of Person := new Person[4]; // - . +var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов begin - a[0] := new Pupil('',11,5); - a[1] := new Teacher(' ',30,''); - a[2] := new Person('',65); - a[3] := new Pupil('',12,6); + a[0] := new Pupil('Вова',11,5); + a[1] := new Teacher('Марья Ивановна',30,'Информатика'); + a[2] := new Person('Иванов',65); + a[3] := new Pupil('Вася',12,6); for var i:=0 to a.Length-1 do a[i].Println; diff --git a/TestSuite/CompilationSamples/IniFile.pas b/TestSuite/CompilationSamples/IniFile.pas index d98c76b20..21e23761e 100644 --- a/TestSuite/CompilationSamples/IniFile.pas +++ b/TestSuite/CompilationSamples/IniFile.pas @@ -55,7 +55,7 @@ begin if s[1]='[' then // Section begin section := Copy(s,2,Length(s)-2); - // + // есть ли такая секция if IndexOfSection(Section)<0 then sl.Add(Section,new SortedList); end @@ -74,7 +74,7 @@ begin end; end; except - // + // погасить все исключения end; close(f); end; diff --git a/TestSuite/CompilationSamples/InitRecords.pas b/TestSuite/CompilationSamples/InitRecords.pas index 4706c7177..5befeb806 100644 --- a/TestSuite/CompilationSamples/InitRecords.pas +++ b/TestSuite/CompilationSamples/InitRecords.pas @@ -1,8 +1,8 @@ -// +// Инициализаторы полей записи type Frac = record num: integer := 0; - denom := 1; // - denom: integer + denom := 1; // автоопределеине типа - denom: integer end; var diff --git a/TestSuite/CompilationSamples/Interf.pas b/TestSuite/CompilationSamples/Interf.pas index 15453ab15..2825c5b58 100644 --- a/TestSuite/CompilationSamples/Interf.pas +++ b/TestSuite/CompilationSamples/Interf.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация использования интерфейсов type IShape = interface procedure Draw; diff --git a/TestSuite/CompilationSamples/Interf1.pas b/TestSuite/CompilationSamples/Interf1.pas index 9643367e4..d96590acc 100644 --- a/TestSuite/CompilationSamples/Interf1.pas +++ b/TestSuite/CompilationSamples/Interf1.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -48,14 +48,14 @@ var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); &Array.Sort(a,new SortByName); - WriteArray(' : ',a); + WriteArray('Сортировка по имени: ',a); &Array.Sort(a,new SortByAge); - WriteArray(' : ',a); + WriteArray('Сортировка по возрасту: ',a); end. diff --git a/TestSuite/CompilationSamples/Interf2.pas b/TestSuite/CompilationSamples/Interf2.pas index 96a630dfd..8dc63b9f7 100644 --- a/TestSuite/CompilationSamples/Interf2.pas +++ b/TestSuite/CompilationSamples/Interf2.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -30,19 +30,19 @@ end; function IsKozlov(s: Student): boolean; begin - Result := s.name = '' + Result := s.name = 'Козлов' end; var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); - writeln(' = ',&Array.FindIndex(a,IsKozlov)); + writeln('Индекс Козлова = ',&Array.FindIndex(a,IsKozlov)); end. diff --git a/TestSuite/CompilationSamples/KillThem.pas b/TestSuite/CompilationSamples/KillThem.pas index 70ed78b38..0ed3a4842 100644 --- a/TestSuite/CompilationSamples/KillThem.pas +++ b/TestSuite/CompilationSamples/KillThem.pas @@ -6,34 +6,34 @@ const var kLeftKey,kRightKey: boolean; kSpaceKey: integer; - /// + /// Игрок Player: RectangleABC; - /// + /// Таймер движения врагов t: Timer; - /// + /// Флаг конца игры EndOfGame: boolean; - /// + /// Количество неигровых объектов StaticObjectsCount: integer; - /// + /// Счетчик выигрышей Wins: integer; - /// + /// Счетчик проигрышей Falls: integer; - /// + /// Информационная строка InfoString: RectangleABC; - /// + /// Сообщение в начале игры NewGame: RoundRectABC; type KeysType = (kLeft,kRight); - /// + /// Класс пули Pulya = class(CircleABC) public constructor Create(x,y: integer); procedure Move; override; end; - /// + /// Класс врага Enemy = class(RectangleABC) public constructor Create(x,y,w: integer); @@ -53,7 +53,7 @@ begin if Top<0 then Visible := False; for var j:=StaticObjectsCount to Objects.Count-1 do - // + // При столкновении пуля и объект становятся невидимыми if (Objects[j]<>Self) and Intersect(Objects[j]) then begin Objects[j].Visible := False; @@ -85,7 +85,7 @@ begin EndOfGame := True; end; -/// +/// Количество врагов function NumberOfEnemies: integer; begin Result := 0; @@ -94,7 +94,7 @@ begin Result += 1; end; -/// +/// Создание игрока и врагов procedure CreateObjects; begin Player := new RectangleABC(280,WindowHeight-30,100,20,clPlayer); @@ -106,21 +106,21 @@ begin end; end; -/// +/// Разрушение игрока и врагов procedure DestroyObjects; begin for var i:=Objects.Count-1 downto StaticObjectsCount do Objects[i].Destroy; end; -/// +/// Перемещение врагов procedure MoveObjects; begin for var i:=StaticObjectsCount+1 to Objects.Count-1 do Objects[i].Move; end; -/// +/// Удаление уничтоженных объектов procedure DestroyKilledObjects; begin for var i:=ObjectsCount-1 downto StaticObjectsCount+1 do @@ -128,7 +128,7 @@ begin Objects[i].Destroy; end; -/// +/// Обработчик нажатия клавиши procedure KeyDown(Key: integer); begin case Key of @@ -138,7 +138,7 @@ vk_Space: if kSpaceKey=2 then kSpaceKey := 1; end; end; -/// +/// Обработчик отжатия клавиши procedure KeyUp(Key: integer); begin case Key of @@ -148,16 +148,16 @@ vk_Space: kSpaceKey := 2; end; end; -/// +/// Изменение информационной строки procedure ChangeInfoString; begin - InfoString.Text := ': '+IntToStr(NumberOfEnemies)+' : '+IntToStr(Wins)+' : '+IntToStr(Falls); + InfoString.Text := 'Врагов: '+IntToStr(NumberOfEnemies)+' Побед: '+IntToStr(Wins)+' Поражений: '+IntToStr(Falls); end; -/// +/// Обработчик нажатия символьной клавиши procedure KeyPress(Key: char); begin - if (Key in ['G','','g','']) and EndOfGame then + if (Key in ['G','П','g','п']) and EndOfGame then begin NewGame.Visible := False; EndOfGame := False; @@ -169,14 +169,14 @@ begin end; end; -/// +/// Обработчик отжатия мыши procedure MouseUp(x,y,mb: integer); begin if NewGame.PTInside(x,y) then KeyPress('G'); end; -/// +/// Обработчик таймера procedure TimerProc; begin if kLeftKey and (Player.Left>0) then @@ -193,7 +193,7 @@ begin RedrawObjects; ChangeInfoString; var n := NumberOfEnemies; - // , + // Страховка от случая, когда процедура таймера выполняется одновременно в нескольких потоках if n=0 then EndOfGame := True; if EndOfGame then @@ -211,7 +211,7 @@ begin end; begin - Window.Title := ''; + Window.Title := 'Стрелялка'; Window.IsFixedSize := True; ClearWindow(clBlack); LockDrawingObjects; @@ -224,7 +224,7 @@ begin var zz := 100; NewGame := new RoundRectABC(zz,200,400,200,30,Color.Violet); NewGame.Center := Window.Center; - NewGame.Text := 'G - '; + NewGame.Text := 'G - Новая игра'; StaticObjectsCount := Objects.Count; ChangeInfoString; RedrawObjects; diff --git a/TestSuite/CompilationSamples/Knapsack.pas b/TestSuite/CompilationSamples/Knapsack.pas index 49bd0dfd7..53993e66c 100644 --- a/TestSuite/CompilationSamples/Knapsack.pas +++ b/TestSuite/CompilationSamples/Knapsack.pas @@ -1,5 +1,5 @@ -// . B . -// +// Задача о ранце. В массиве B заданы веса предметов. +// Выдать все варианты полной комплектации ранца частью этих предметов const Sz=100; type IntArr = array [1..Sz] of integer; @@ -22,15 +22,15 @@ var if space=0 then PrintArr(Subset,ns) else if (space<0) or (i>nb) then - exit // - else // B + exit // отсечение + else // продолжение перебора всех подмножеств множества B begin - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент ns += 1; Subset[ns] := B[i]; space := space - B[i]; - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать взять i-тый элемент space := space + B[i]; ns -= 1; end; @@ -43,8 +43,8 @@ end; procedure FillArr(var B: IntArr; var n: integer); begin - n:=5; // - B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // + n:=5; // количество предметов + B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // веса предметов end; var diff --git a/TestSuite/CompilationSamples/Life.pas b/TestSuite/CompilationSamples/Life.pas index 913cbbf2d..f829bafe2 100644 --- a/TestSuite/CompilationSamples/Life.pas +++ b/TestSuite/CompilationSamples/Life.pas @@ -1,23 +1,23 @@ -// "" -// +// Игра "Жизнь" на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; const -/// +/// Ширина клетки w = 4; -/// +/// Количество клеток по ширине m = 300; -/// +/// Количество клеток по высоте n = 220; -/// +/// Отступ поля от левой границы окна x0 = 1; -/// +/// Отступ поля от верхней границы окна y0 = 21; mm = m + 1; nn = n + 1; -/// +/// Количество клеток сетки по горизонтали mk = 15; -/// +/// Количество клеток сетки по вертикали nk = 10; var @@ -28,7 +28,7 @@ var gen: integer; hn,hm: integer; -/// +/// Нарисовать ячейку procedure DrawCell(i,j: integer); begin DrawInBuffer := False; @@ -37,7 +37,7 @@ begin DrawInBuffer := True; end; -/// +/// Стереть ячейку procedure ClearCell(i,j: integer); begin DrawInBuffer := False; @@ -46,7 +46,7 @@ begin DrawInBuffer := True; end; -/// +/// Нарисовать все изменившиеся ячейки procedure DrawConfiguration; begin for var i:=1 to n do @@ -59,7 +59,7 @@ begin end; end; -/// +/// Нарисовать все ячейки procedure DrawConfigurationFull; begin for var i:=1 to n do @@ -68,7 +68,7 @@ begin else ClearCell(i,j); end; -/// +/// Нарисовать поле procedure DrawField; begin Pen.Color := clLightGray; @@ -88,7 +88,7 @@ begin end; end; -/// +/// Увеличить массив соседей для данной клетки procedure IncSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -106,7 +106,7 @@ begin SosediB[i2,j2] += 1; end; -/// +/// Уменьшить массив соседей для данной клетки procedure DecSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -124,7 +124,7 @@ begin SosediB[i2,j2] -= 1; end; -/// (i,j) +/// Поставить ячейку в клетку (i,j) procedure SetCell(i,j: integer); begin if b[i,j]=0 then @@ -136,7 +136,7 @@ begin CountCells += 1; end; -/// (i,j) +/// Убрать ячейку из клетки (i,j) procedure UnSetCell(i,j: integer); begin if b[i,j]=1 then @@ -148,7 +148,7 @@ begin CountCells -= 1; end; -/// +/// Инициализировать массивы и конфигурацию поля procedure Init; var xc := n div 2; @@ -173,7 +173,7 @@ begin SetCell(xc+1,yc+1); end; -/// +/// Обработать ячейку procedure ProcessCell(i,j: integer); begin case SosediA[i,j] of @@ -197,7 +197,7 @@ begin end; {case} end; -/// +/// Перейти к следующему поколению procedure NextGen; var ifirst,jfirst,ilast,jlast: integer; begin @@ -257,33 +257,33 @@ begin end; end; -/// +/// Перерисовка содержимого окна procedure LifeRedrawProc; begin Redraw; DrawConfigurationFull; end; -/// +/// Вывод номера поколения и количества ячеек procedure DrawInfo; begin Brush.Color := clWhite; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(WindowWidth - 130,0,': '+IntToStr(CountCells)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(WindowWidth - 130,0,'Жителей: '+IntToStr(CountCells)+' '); end; begin SetConsoleIO; if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm := m div mk; hn := n div nk; SetWindowSize(x0+m*w,y0+n*w); CenterWindow; - Window.Title := ' ""'; + Window.Title := 'Игра "Жизнь"'; Window.IsFixedSize := True; Font.Name := 'Arial'; Font.Size := 10; diff --git a/TestSuite/CompilationSamples/LinkedList.pas b/TestSuite/CompilationSamples/LinkedList.pas index 303712765..dd1474e39 100644 --- a/TestSuite/CompilationSamples/LinkedList.pas +++ b/TestSuite/CompilationSamples/LinkedList.pas @@ -1,4 +1,4 @@ -// LinkedList - - +// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора uses System.Collections,System.Collections.Generic; procedure print(l: ICollection); diff --git a/TestSuite/CompilationSamples/MailSend.pas b/TestSuite/CompilationSamples/MailSend.pas index 2834203fa..666b6e7a2 100644 --- a/TestSuite/CompilationSamples/MailSend.pas +++ b/TestSuite/CompilationSamples/MailSend.pas @@ -1,4 +1,4 @@ -// SMTP- SMTPServerName toReceiver! +// Исправьте имя SMTP-сервера SMTPServerName и адрес получателя toReceiver! uses System.Net.Mail; const diff --git a/TestSuite/CompilationSamples/Mandelbrot.pas b/TestSuite/CompilationSamples/Mandelbrot.pas index a132ee23b..1a3a48c7a 100644 --- a/TestSuite/CompilationSamples/Mandelbrot.pas +++ b/TestSuite/CompilationSamples/Mandelbrot.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Множество Мандельброта +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -14,7 +14,7 @@ const dy = 300; begin - Window.Title := ': '; + Window.Title := 'Фракталы: множество Мандельброта'; SetWindowSize(600,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -37,6 +37,6 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSuite/CompilationSamples/Matches.pas b/TestSuite/CompilationSamples/Matches.pas index 29aac08f7..0ea31f7ed 100644 --- a/TestSuite/CompilationSamples/Matches.pas +++ b/TestSuite/CompilationSamples/Matches.pas @@ -1,12 +1,12 @@ -// "" +// Игра "Спички" const InitialCount=15; var - /// + /// Текущее количество спичек Count: integer; - /// , + /// Количество спичек, которое берет игрок Num: integer; - /// + /// Номер текущего игрока Player: integer; begin @@ -18,12 +18,12 @@ begin begin var Correct: boolean; repeat - write(' . ',Count,' . '); - write(' ? '); + write('Ваш ход. На столе ',Count,' спичек. '); + write('Сколько спичек Вы берете? '); readln(Num); Correct := (Num>=1) and (Num<=3) and (Num<=Count); if not Correct then - writeln('! !'); + writeln('Неверно! Повторите ввод!'); until Correct; end else @@ -31,7 +31,7 @@ begin Num := Random(1,3); if Num>Count then Num := Count; - writeln(' . ',Num,' '); + writeln('Мой ход. Я взял ',Num,' спичек'); end; Count -= Num; if Player=1 then @@ -40,6 +40,6 @@ begin until Count=0; if Player=1 then - writeln(' !') - else writeln(' !'); + writeln('Вы победили!') + else writeln('Вы проиграли!'); end. diff --git a/TestSuite/CompilationSamples/Matr1.pas b/TestSuite/CompilationSamples/Matr1.pas index 31cb1448c..9033bd4d8 100644 --- a/TestSuite/CompilationSamples/Matr1.pas +++ b/TestSuite/CompilationSamples/Matr1.pas @@ -1,4 +1,4 @@ -// . goto +// Поиск значения в случайной матрице. Использование оператора goto const sz = 10; m = 4; @@ -11,12 +11,12 @@ label 1; var matr: Matrix; begin - // m x n + // Заполнение матрицы m x n случайными числами for var i := 1 to m do for var j := 1 to n do matr[i,j] := Random(100); - // + // Вывод матрицы for var i := 1 to m do begin for var j := 1 to n do @@ -24,17 +24,17 @@ begin writeln; end; - // 5? + // Есть ли в матрице элемент 5? var found5 := False; for var i := 1 to m do for var j := 1 to n do if matr[i,j]=5 then begin found5 := True; - goto 1; // ! + goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу end; 1: if found5 then - writeln(' 5 ') - else writeln(' 5 ') + writeln('Элемент 5 найден') + else writeln('Элемент 5 не найден') end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Matr2.pas b/TestSuite/CompilationSamples/Matr2.pas index b0161cdfd..42df846a3 100644 --- a/TestSuite/CompilationSamples/Matr2.pas +++ b/TestSuite/CompilationSamples/Matr2.pas @@ -1,4 +1,4 @@ -// +// Матрица как динамический массив массивов type Matrix = array of array of integer; function CreateMatrix(m,n: integer): Matrix; diff --git a/TestSuite/CompilationSamples/MazeGen.pas b/TestSuite/CompilationSamples/MazeGen.pas index 11642afc9..9f0fea7bf 100644 --- a/TestSuite/CompilationSamples/MazeGen.pas +++ b/TestSuite/CompilationSamples/MazeGen.pas @@ -1,10 +1,10 @@ -// +// Программа генерации случайных лабиринтов uses GraphABC; const - szw = 70; // + szw = 70; // размер лабиринта szh = 50; - cellsz = 10; // + cellsz = 10; // размер ячейки type point = record @@ -32,10 +32,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -45,28 +45,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n := Random(todonum); x := todo[n].x; y := todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat dd:=Random (4); until not ((maze[x + dx[dd]][y + dy[dd]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl dd) or 32); maze[x + dx[dd]][y + dy[dd]] := maze[x + dx[dd]][y + dy[dd]] and not (1 shl (dd xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -77,8 +77,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -86,19 +86,19 @@ begin for var x:=1 to szw-2 do for var y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz); end; end; begin - Window.Title := ' '; + Window.Title := 'Генерация лабиринта'; SetWindowSize(szw*cellsz,szh*cellsz); Init; Draw; diff --git a/TestSuite/CompilationSamples/Mosaic.pas b/TestSuite/CompilationSamples/Mosaic.pas index 02efa3c44..4aee71d02 100644 --- a/TestSuite/CompilationSamples/Mosaic.pas +++ b/TestSuite/CompilationSamples/Mosaic.pas @@ -1,4 +1,4 @@ -// . +// Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const @@ -13,10 +13,10 @@ const var a: array [0..n,0..m] of Color; begin - Window.Title := ''; + Window.Title := 'Мозаика'; Window.SetSize(800,600); - // + // Заполнение массива случайными цветами for var i:=0 to n-1 do for var j:=0 to m-1 do begin diff --git a/TestSuite/CompilationSamples/MouseDraw.pas b/TestSuite/CompilationSamples/MouseDraw.pas index 6d4ff2ad7..db17bcf29 100644 --- a/TestSuite/CompilationSamples/MouseDraw.pas +++ b/TestSuite/CompilationSamples/MouseDraw.pas @@ -1,4 +1,4 @@ -// . Windows.Forms, +// Рисование мышью на форме. Иллюстрация Windows.Forms, событий {$apptype windows} {$reference 'System.Windows.Forms.dll'} {$reference 'System.Drawing.dll'} @@ -12,15 +12,15 @@ type MyForm = class(Form) private g: Graphics; - // + // Предыдущие координаты мыши x,y: integer; public constructor; begin Size := new System.Drawing.Size(640,480); StartPosition := FormStartPosition.CenterScreen; - Text := ' '; - // + Text := 'Рисование мышью на форме'; + // Привязка обработчиков к событиям MouseDown += OnMouseDown; MouseMove += OnMouseMove; Resize += OnResize; diff --git a/TestSuite/CompilationSamples/MouseEvents.pas b/TestSuite/CompilationSamples/MouseEvents.pas index 064766eae..f48183e0a 100644 --- a/TestSuite/CompilationSamples/MouseEvents.pas +++ b/TestSuite/CompilationSamples/MouseEvents.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация обработки событий мыши uses GraphABC; procedure MouseDown(x,y,mb: integer); @@ -12,7 +12,7 @@ begin end; begin - // + // Привязка обработчиков к событиям OnMouseDown := MouseDown; OnMouseMove := MouseMove end. diff --git a/TestSuite/CompilationSamples/MultMatrix.pas b/TestSuite/CompilationSamples/MultMatrix.pas index bcb549ef8..13796ffbf 100644 --- a/TestSuite/CompilationSamples/MultMatrix.pas +++ b/TestSuite/CompilationSamples/MultMatrix.pas @@ -30,8 +30,8 @@ begin var b := Arrays.CreateRandomRealMatrix(n,n); var c := new real[n,n]; ParallelMult(a,b,c,n); - writeln(' : ',Milliseconds,' '); + writeln('Параллельное перемножение матриц: ',Milliseconds,' миллисекунд'); var d := Milliseconds; Mult(a,b,c,n); - writeln(' : ',Milliseconds-d,' '); + writeln('Последовательное перемножение матриц: ',Milliseconds-d,' миллисекунд'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Mutual Lock.pas b/TestSuite/CompilationSamples/Mutual Lock.pas index d04513699..03e18485a 100644 --- a/TestSuite/CompilationSamples/Mutual Lock.pas +++ b/TestSuite/CompilationSamples/Mutual Lock.pas @@ -1,4 +1,4 @@ -// +// Демонстрация использования критических секций и возможных взаимоблокировок begin {$omp parallel sections} begin diff --git a/TestSuite/CompilationSamples/NewLife.pas b/TestSuite/CompilationSamples/NewLife.pas index d432c1649..f4bc91131 100644 --- a/TestSuite/CompilationSamples/NewLife.pas +++ b/TestSuite/CompilationSamples/NewLife.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; @@ -303,10 +303,10 @@ begin AssignArray(b,nn+1,mm+1); AssignArray(sosedia,nn+1,mm+1); AssignArray(sosedib,nn+1,mm+1); - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -335,8 +335,8 @@ begin DrawInBuffer := True; SetBrushColor(ClearColor); SetFontColor(FillColor); - TextOut(25, 0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25, 0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); if gen mod 1000 = 0 then begin mil1:=Milliseconds; writeln(gen,' ',(mil1-mil)/1000); diff --git a/TestSuite/CompilationSamples/Oberon00System.pas b/TestSuite/CompilationSamples/Oberon00System.pas index ea3fbe35c..90db0e939 100644 --- a/TestSuite/CompilationSamples/Oberon00System.pas +++ b/TestSuite/CompilationSamples/Oberon00System.pas @@ -1,27 +1,27 @@ // (c) Mikst, Juliet 2010 -/// Oberon +/// Системный модуль для языка Oberon unit Oberon00System; interface type - /// (TRUE | FALSE) + /// Логический тип (TRUE | FALSE) BOOLEAN = System.boolean; - /// + /// Целое число INTEGER = System.Int32; - /// + /// Короткое целое число SHORTINT = System.byte; - /// + /// Длинное целое число LONGINT = System.int64; - /// + /// Вещественное число REAL = System.double; - /// + /// Длинное вещественное число LONGREAL = System.double; - /// + /// Символ CHAR = System.char; - /// + /// Строка STRING = System.string; - /// + /// Множество целых iset = array of integer; procedure Print(o: object); @@ -38,7 +38,7 @@ begin Console.Write(o); end; -/// +/// Вывести значение procedure Println(o: object); begin Console.WriteLine(o); diff --git a/TestSuite/CompilationSamples/OperatorOverloading.pas b/TestSuite/CompilationSamples/OperatorOverloading.pas index e6071b4bf..0fe1ee658 100644 --- a/TestSuite/CompilationSamples/OperatorOverloading.pas +++ b/TestSuite/CompilationSamples/OperatorOverloading.pas @@ -1,4 +1,4 @@ -// +// Перегрузка операций type Frac = record private diff --git a/TestSuite/CompilationSamples/Overload.pas b/TestSuite/CompilationSamples/Overload.pas index 09e4321ce..f3b5eaef1 100644 --- a/TestSuite/CompilationSamples/Overload.pas +++ b/TestSuite/CompilationSamples/Overload.pas @@ -1,4 +1,4 @@ -// +// Перегрузка имен подпрограмм procedure proc(i: integer); begin writeln('integer'); diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index a415e6961..c34c9779e 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -1,7 +1,7 @@ // Copyright (c) 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) -/// +/// Стандартный модуль /// !! System unit unit PABCSystem; @@ -28,50 +28,50 @@ uses System; const - /// shortint + /// Максимальное значение типа shortint MaxShortInt = shortint.MaxValue; - /// byte + /// Максимальное значение типа byte MaxByte = byte.MaxValue; - /// smallint + /// Максимальное значение типа smallint MaxSmallInt = smallint.MaxValue; - /// word + /// Максимальное значение типа word MaxWord = word.MaxValue; - /// longword + /// Максимальное значение типа longword MaxLongWord = longword.MaxValue; - /// int64 + /// Максимальное значение типа int64 MaxInt64 = int64.MaxValue; - /// uint64 + /// Максимальное значение типа uint64 MaxUInt64 = uint64.MaxValue; - /// double + /// Максимальное значение типа double MaxDouble = real.MaxValue; - /// double + /// Минимальное положительное значение типа double MinDouble = real.Epsilon; - /// real + /// Максимальное значение типа real MaxReal = real.MaxValue; - /// real + /// Минимальное положительное значение типа real MinReal = real.Epsilon; - /// single + /// Максимальное значение типа single MaxSingle = single.MaxValue; - /// single + /// Минимальное положительное значение типа single MinSingle = single.Epsilon; - /// integer + /// Максимальное значение типа integer MaxInt = integer.MaxValue; - /// Pi + /// Константа Pi /// !! Pi constant Pi = 3.141592653589793; - /// E + /// Константа E /// !! E constant E = 2.718281828459045; END_OF_LINE_SYMBOL = #10; - /// + /// Константа перехода на новую строку /// !! The newline string defined for this environment. NewLine = System.Environment.NewLine; function RunTimeSizeOf(t: System.Type): integer; -/// , +/// Содержит аргумены командой строки, с которыми была запущена программа var CommandLineArgs: array of string; @@ -79,16 +79,16 @@ var var __CONFIG__: Dictionary := new Dictionary; -// , +//Маркер того, что это системный модуль ///-- const __IS_SYSTEM_MODULE = true; type - /// + /// Базовый тип объектов object = System.Object; - /// + /// Базовый тип исключений exception = System.Exception; double = System.Double; @@ -97,127 +97,127 @@ type cardinal = System.UInt32; - /// 128- + /// Представляет 128-битное вещественное число /// !! Represents a decimal number decimal = System.Decimal; - /// + /// Представляет произвольно большое целое число BigInteger = System.Numerics.BigInteger; - /// + /// Представляет кортеж Tuple = System.Tuple; - /// + /// Представляет динамический массив List = System.Collections.Generic.List; - /// IComparer + /// Представляет базовый класс для реализации интерфейса IComparer Comparer = System.Collections.Generic.Comparer; - /// + /// Представляет множество значений HashSet = System.Collections.Generic.HashSet; - /// ( -), - + /// Представляет ассоциативный массив (набор пар Ключ-Значение), реализованный на базе хеш-таблицы Dictionary = System.Collections.Generic.Dictionary; - /// - + /// Представляет пару Ключ-Значение для ассоциативного массива KeyValuePair = System.Collections.Generic.KeyValuePair; - /// + /// Представляет двусвязный список LinkedList = System.Collections.Generic.LinkedList; - /// + /// Представляет узел двусвязного списка LinkedListNode = System.Collections.Generic.LinkedListNode; - /// - , " - " + /// Представляет очередь - набор элементов, реализованных по принципу "первый вошел-первый вышел" Queue = System.Collections.Generic.Queue; - /// , + /// Представляет ассоциативный массив, реализованный на базе бинарного дерева поиска SortedDictionary = System.Collections.Generic.SortedDictionary; - /// ( -), + /// Представляет ассоциативный массив (набор пар ключ-значение), реализованный на базе динамического массива пар SortedList = System.Collections.Generic.SortedList; SortedSet = System.Collections.Generic.SortedSet; - /// - , " - " + /// Представляет стек - набор элементов, реализованных по принципу "последний вошел-первый вышел" Stack = System.Collections.Generic.Stack; - /// , + /// Представляет интерфейс, предоставляющий перечислитель для перебора элементов коллекции IEnumerable = System.Collections.Generic.IEnumerable; - /// + /// Представляет интерфейс для перебора элементов коллекции IEnumerator = System.Collections.Generic.IEnumerator; - /// + /// Представляет интерфейс для сравнения двух элементов IComparer = System.Collections.Generic.IComparer; - /// + /// Представляет изменяемую строку символов StringBuilder = System.Text.StringBuilder; - /// + /// Тип кодировки символов Encoding = System.Text.Encoding; - /// + /// Представляет действие без параметров Action0 = System.Action; - /// + /// Представляет действие с одним параметром Action = System.Action; - /// + /// Представляет действие с двумя параметрами Action2 = System.Action; - /// + /// Представляет действие с тремя параметрами Action3 = System.Action; - /// + /// Представляет функцию без параметров Func0 = System.Func; - /// + /// Представляет функцию с одним параметром Func = System.Func; - /// + /// Представляет функцию с двумя параметрами Func2 = System.Func; - /// + /// Представляет функцию с тремя параметрами Func3 = System.Func; - /// , + /// Представляет функцию с одним параметром целого типа, возвращающую целое IntFunc = Func; - /// , + /// Представляет функцию с одним параметром вещественного типа, возвращающую вещественное RealFunc = Func; - /// , + /// Представляет функцию с одним параметром строкового типа, возвращающую строковое StringFunc = Func; - /// , boolean + /// Представляет функцию с одним параметром, возвращающую boolean Predicate = System.Predicate; - /// , boolean + /// Представляет функцию с двумя параметрами, возвращающую boolean Predicate2 = System.Predicate; - /// , boolean + /// Представляет функцию с тремя параметрами, возвращающую boolean Predicate3 = System.Predicate; - /// + /// Представляет регулярное выражение Regex = System.Text.RegularExpressions.Regex; - /// + /// Представляет результаты из отдельного совпадения регулярного выражения Match = System.Text.RegularExpressions.Match; - /// , Regex.Replace + /// Представляет метод, вызываемый при обнаружении совпадения в Regex.Replace MatchEvaluator = System.Text.RegularExpressions.MatchEvaluator; - /// + /// Представляет набор успешных совпадений регулярного выражения MatchCollection = System.Text.RegularExpressions.MatchCollection; - /// + /// Представляет параметры регулярного выражения RegexOptions = System.Text.RegularExpressions.RegexOptions; - /// Regex.Match + /// Представляет результаты из одной группы при выполнении Regex.Match RegexGroup = System.Text.RegularExpressions.Group; - /// Regex.Match + /// Представляет результаты из набора групп при выполнении Regex.Match RegexGroupCollection = System.Text.RegularExpressions.GroupCollection; //------------------------------------------------------------------------------ @@ -245,62 +245,62 @@ type PSingle = ^single;//single //16 PReal = ^real;//double - PDouble = ^double;//double //, , + PDouble = ^double;//double //ошибка, не сохранится, надо исправить //------------------------------------------------------------------------------ ShortString = string[255]; - /// + /// Тип текстового файла Text = class private fi: FileInfo; sr: StreamReader; sw: StreamWriter; public - /// 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; - /// 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; - /// + /// Записывает в текстовый файл значения procedure Write(params o: array of Object); - /// + /// Записывает в текстовый файл значения и переходит на следующую строку procedure Writeln(params o: array of Object); - /// True, + /// Возвращает True, если достигнут конец файла function Eof: boolean; - /// True, + /// Возвращает True, если достигнут конец строки function Eoln: boolean; - /// + /// Закрывает файл procedure Close; - /// , True, + /// Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла function SeekEof: boolean; - /// , True, + /// Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в файле function SeekEoln: boolean; - /// + /// Записывает содержимое буфера файла на диск procedure Flush; - /// + /// Удаляет файл procedure Erase; - /// , newname. + /// Переименовывает файл, давая ему имя newname. procedure Rename(newname: string); - /// + /// Возвращает имя файла function Name: string; - /// + /// Возвращает полное имя файла function FullName: string; - /// + /// Возвращает в виде строки содержимое файла от текущего положения до конца function ReadToEnd: string; end; @@ -309,7 +309,7 @@ type RangeException = class(SystemException) end; CommandLineArgumentOutOfRangeException = class(SystemException) end; - // + // Вспомогательный тип для диапазонного типа ///-- Diapason = record low, high: integer; @@ -324,7 +324,7 @@ type public function GetHashCode(obj: System.Object): integer; end; - // + // Вспомогательный тип для множества ///-- TypedSet = class (System.Collections.IEnumerable) private @@ -372,10 +372,10 @@ function Union(s1, s2: TypedSet): TypedSet; ///-- function Subtract(s1, s2: TypedSet): TypedSet; ///- Include(var s : set of T; el : T) -/// el s +///Добавляет елемент el во множество s procedure Include(var s: TypedSet; el: object); ///- Exclude(var s : set of T; el : T) -/// el s +///Удаляет элемент el из множества s procedure Exclude(var s: TypedSet; el: object); ///-- function Intersect(s1, s2: TypedSet): TypedSet; @@ -435,18 +435,18 @@ type br: BinaryReader; bw: BinaryWriter; public - /// + /// Закрывает файл procedure Close; - /// , + /// Усекает двоичный файл, отбрасывая все элементы с позиции файлового указателя procedure Truncate; - /// True, + /// Возвращает True, если достигнут конец файла function Eof: boolean; - /// + /// Удаляет файл procedure Erase; - /// , newname. + /// Переименовывает файл, давая ему имя newname. procedure Rename(newname: string); ///- write(f: file; a,b,...) - /// a,b,... + /// Выводит значения a,b,... в двоичный файл procedure Write(params vals: array of object); end; @@ -462,11 +462,11 @@ type constructor Create(ElementType: System.Type); constructor Create(ElementType: System.Type; offs: integer; params offsets: array of integer); function ToString: string; override; - /// + /// Возвращает текущую позицию файлового указателя в типизированном файле function FilePos: int64; - /// + /// Возвращает количество элементов в типизированном файле function FileSize: int64; - /// n + /// Устанавливает текущую позицию файлового указателя в типизированном файле на элемент с номером n procedure Seek(n: int64); end; @@ -474,15 +474,15 @@ type BinaryFile = sealed class(AbstractBinaryFile) public function ToString: string; override; - /// + /// Возвращает текущую позицию файлового указателя в бестиповом файле function FilePos: int64; - /// + /// Возвращает количество байт в бестиповом файле function FileSize: int64; - /// n + /// Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n procedure Seek(n: int64); end; - /// / + /// Интерфейс подсистемы ввода/вывода IOSystem = interface function peek: integer; function read_symbol: char; @@ -506,11 +506,11 @@ type end; IOStandardSystem = class(IOSystem) - state := 0; // 0 - char, 1 - char - sym: integer; // 1 Peek + state := 0; // 0 - нет символа в буфере char, 1 - есть символ в буфере char + sym: integer; // буфер в 1 символ для моделирования Peek в консоли public - function peek: integer; virtual; // state sym - function read_symbol: char; virtual; // state sym + function peek: integer; virtual; // использует state и sym + function read_symbol: char; virtual; // использует state и sym procedure read(var x: integer); virtual; procedure read(var x: real); virtual; procedure read(var x: char); virtual; @@ -542,7 +542,7 @@ type function GetEnumerator: System.Collections.IEnumerator; end; - /// , generic- + ///Базовый класс для исключений, бросаемых при создании инстанции generic-типа BadGenericInstanceParameterException = class(Exception) protected InstanceType: System.Type; @@ -550,19 +550,19 @@ type constructor Create(ActualParameterType: System.Type); end; - /// + ///Бросается если тип непригоден для указателей CanNotUseTypeForPointersException = class(BadGenericInstanceParameterException) public function ToString: string; override; end; - /// + ///Бросается если тип непригоден для типизированных файлов CanNotUseTypeForTypedFilesException = class(BadGenericInstanceParameterException) public function ToString: string; override; end; - /// + ///Бросается если тип непригоден для бинарных файлов CanNotUseTypeForFilesException = class(BadGenericInstanceParameterException) public function ToString: string; override; @@ -582,7 +582,7 @@ function GetResourceStream(ResourceFileName: string): Stream; // read - readln // ----------------------------------------------------- ///- read(a,b,...) -/// a,b,... +/// Вводит значения a,b,... с клавиатуры procedure Read; ///-- procedure Read(var x: integer); @@ -611,48 +611,48 @@ procedure Read(var x: single); ///-- procedure Read(var x: boolean); -/// 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; -/// 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; -/// integer, +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры function ReadInteger(prompt: string): integer; -/// real, +/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры function ReadReal(prompt: string): real; -/// char, +/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры function ReadChar(prompt: string): char; -/// string, +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры function ReadString(prompt: string): string; -/// boolean, +/// Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры function ReadBoolean(prompt: string): boolean; -/// integer, , +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnInteger(prompt: string): integer; -/// real, , +/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnReal(prompt: string): real; -/// char, , +/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnChar(prompt: string): char; -/// string, , +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnString(prompt: string): string; -/// boolean, , +/// Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnBoolean(prompt: string): boolean; @@ -662,11 +662,11 @@ procedure ReadShortString(var s: string; n: integer); procedure ReadShortStringFromFile(f: Text; var s: string; n: integer); ///- readln(a,b,...) -/// a,b,... +/// Вводит значения a,b,... с клавиатуры и осуществляет переход на следующую строку procedure Readln; ///- read(f,a,b,...) -/// a,b,... f +/// Вводит значения a,b,... из файла f procedure Read(f: Text); ///-- procedure Read(f: Text; var x: integer); @@ -696,36 +696,36 @@ procedure Read(f: Text; var x: single); procedure Read(f: Text; var x: boolean); ///- readln(f: Text; a,b,...) -/// a,b,... f +/// Вводит значения a,b,... из текстового файла f и осуществляет переход на следующую строку procedure Readln(f: Text); ///-- procedure Readln(f: Text; var x: string); -/// integer, f +/// Возвращает значение типа integer, введенное из текстового файла f function ReadInteger(f: Text): integer; -/// real, f +/// Возвращает значение типа real, введенное из текстового файла f function ReadReal(f: Text): real; -/// char, f +/// Возвращает значение типа char, введенное из текстового файла f function ReadChar(f: Text): char; -/// string, f +/// Возвращает значение типа string, введенное из текстового файла f function ReadString(f: Text): string; -/// boolean, f +/// Возвращает значение типа boolean, введенное из текстового файла f function ReadBoolean(f: Text): boolean; -/// integer, f, +/// Возвращает значение типа integer, введенное из текстового файла f, и переходит на следующую строку function ReadlnInteger(f: Text): integer; -/// real, f, +/// Возвращает значение типа real, введенное из текстового файла f, и переходит на следующую строку function ReadlnReal(f: Text): real; -/// char, f, +/// Возвращает значение типа char, введенное из текстового файла f, и переходит на следующую строку function ReadlnChar(f: Text): char; -/// string, f, +/// Возвращает значение типа string, введенное из текстового файла f, и переходит на следующую строку function ReadlnString(f: Text): string; -/// boolean, f, +/// Возвращает значение типа boolean, введенное из текстового файла f, и переходит на следующую строку function ReadlnBoolean(f: Text): boolean; -/// True, +/// Возвращает True, если достигнут конец строки function Eoln: boolean; -/// True, +/// Возвращает True, если достигнут конец файла function Eof: boolean; ///-- @@ -746,7 +746,7 @@ type // write - writeln // ----------------------------------------------------- ///- write(a,b,...) -/// a,b,... +/// Выводит значения a,b,... на экран procedure write; ///-- procedure write(obj: object); @@ -756,7 +756,7 @@ procedure write(obj1, obj2: object); procedure write(params args: array of object); ///- writeln(a,b,...) -/// a,b,... +/// Выводит значения a,b,... на экран и осуществляет переход на новую строку ///!!- writeln(a,b,...) /// Writes a,b,... to standart output stream and appends newline procedure writeln; @@ -770,7 +770,7 @@ procedure writeln(obj1, obj2: object); procedure writeln(params args: array of object); ///- write(f: Text; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в текстовый файл f procedure write(f: Text); ///-- procedure write(f: Text; val: object); @@ -778,161 +778,161 @@ procedure write(f: Text; val: object); procedure write(f: Text; params args: array of object); ///- writeln(f: Text; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в текстовый файл f и осуществляет переход на новую строку procedure writeln(f: Text); ///-- procedure writeln(f: Text; val: object); ///-- procedure writeln(f: Text; params args: array of object); -/// args formatstr +/// Выводит значения args согласно форматной строке formatstr procedure WriteFormat(formatstr: string; params args: array of object); -/// args formatstr +/// Выводит значения args согласно форматной строке formatstr и осуществляет переход на новую строку procedure WritelnFormat(formatstr: string; params args: array of object); -/// args f formatstr +/// Выводит значения args в текстовый файл f согласно форматной строке formatstr procedure WriteFormat(f: Text; formatstr: string; params args: array of object); -/// args f formatstr -/// +/// Выводит значения args в текстовый файл f согласно форматной строке formatstr +///и осуществляет переход на новую строку procedure WritelnFormat(f: Text; formatstr: string; params args: array of object); -/// s +/// Выводит значения s на экран procedure Print(s: string); -/// args , +/// Выводит значения args на экран, выводя после каждого значения пробел procedure Print(params args: array of object); -/// args , , +/// Выводит значения args на экран, выводя после каждого значения пробел, и переходит на новую строчку procedure Println(params args: array of object); -/// args f, +/// Выводит значения args в текстовый файл f, выводя после каждого значения пробел procedure Print(f: Text; params args: array of object); -/// args f, , +/// Выводит значения args в текстовый файл f, выводя после каждого значения пробел, и переходит на новую строчку procedure Println(f: Text; params args: array of object); // ----------------------------------------------------- // Text files // ----------------------------------------------------- -/// f name +/// Связывает файловую переменную f с именем файла name procedure Assign(f: Text; name: string); -/// f name +/// Связывает файловую переменную f с именем файла name procedure AssignFile(f: Text; name: string); -/// f +/// Закрывает файл f procedure Close(f: Text); -/// f +/// Закрывает файл f procedure CloseFile(f: Text); -/// f +/// Открывает текстовый файл f на чтение procedure Reset(f: Text); -/// f name +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл на чтение procedure Reset(f: Text; name: string); -/// f , . , +/// Открывает текстовый файл f на запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется procedure Rewrite(f: Text); -/// f name f , +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл f на запись, при этом обнуляя его содержимое procedure Rewrite(f: Text; name: string); -/// f +/// Открывает текстовый f файл на дополнение procedure Append(f: Text); -/// f name +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл на дополнение procedure Append(f: Text; name: string); -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на чтение function OpenRead(fname: string): Text; -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на запись function OpenWrite(fname: string): Text; -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на дополнение function OpenAppend(fname: string): Text; -/// True, f +/// Возвращает True, если достигнут конец файла f ///!! Returns True if the file-pointer has reached the end of the file function Eof(f: Text): boolean; -/// True, f +/// Возвращает True, если достигнут конец строки в файле f function Eoln(f: Text): boolean; -/// , True, f +/// Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла f function SeekEof(f: Text): boolean; -/// , True, f +/// Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в файле f function SeekEoln(f: Text): boolean; -/// +/// Записывает содержимое буфера файла на диск procedure Flush(f: Text); -/// , f +/// Удаляет файл, связанный с файловой переменной f procedure Erase(f: Text); -/// , f, newname. +/// Переименовывает файл, связаный с файловой переменной f, давая ему имя newname. procedure Rename(f: Text; newname: string); ///-- procedure TextFileInit(var f: Text); -/// +/// Считывает строки из файла и превращает их в последовательность строк function ReadLines(path: string): sequence of string; -/// en +/// Считывает строки из файла с кодировкой en и превращает их в последовательность строк function ReadLines(path: string; en: Encoding): sequence of string; -/// +/// Считывает строки из файла в массив строк function ReadAllLines(path: string): array of string; -/// en +/// Считывает строки из файла с кодировкой en в массив строк function ReadAllLines(path: string; en: Encoding): array of string; -/// +/// Считывает содержимое файла в строку function ReadAllText(path: string): string; -/// en +/// Считывает содержимое файла с кодировкой en в строку function ReadAllText(path: string; en: Encoding): string; -/// , +/// Создает новый файл, записывает в него строки из последовательности procedure WriteLines(path: string; ss: sequence of string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него строки из последовательности procedure WriteLines(path: string; ss: sequence of string; en: Encoding); -/// , +/// Создает новый файл, записывает в него строки из массива procedure WriteAllLines(path: string; ss: array of string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него строки из массива procedure WriteAllLines(path: string; ss: array of string; en: Encoding); -/// , +/// Создает новый файл, записывает в него содержимое строки procedure WriteAllText(path: string; s: string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него содержимое строки procedure WriteAllText(path: string; s: string; en: Encoding); -/// , +/// Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска function EnumerateFiles(path: string; searchPattern: string := '*.*'): sequence of string; -/// , , +/// Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска, включая подкаталоги function EnumerateAllFiles(path: string; searchPattern: string := '*.*'): sequence of string; -/// +/// Возвращает последовательность имен каталогов по заданному пути function EnumerateDirectories(path: string): sequence of string; -/// , +/// Возвращает последовательность имен каталогов по заданному пути, включая подкаталоги function EnumerateAllDirectories(path: string): sequence of string; // ----------------------------------------------------- // Abstract binary files // ----------------------------------------------------- ///- Assign(f: file of T; name: string) -/// f name +/// Связывает файловую переменную f с именем файла name procedure Assign(f: AbstractBinaryFile; name: string); ///- AssignFile(f: file of T; name: string) -/// f name +/// Связывает файловую переменную f с именем файла name procedure AssignFile(f: AbstractBinaryFile; name: string); ///- Close(f: file of T) -/// f +/// Закрывает файл f procedure Close(f: AbstractBinaryFile); ///- CloseFile(f: file of T) -/// f +/// Закрывает файл f procedure CloseFile(f: AbstractBinaryFile); ///- Reset(f: file of T) -/// f +/// Открывает двоичный файл f на чтение и запись procedure Reset(f: AbstractBinaryFile); ///- Reset(f: file of T; name: string) -/// f name f +/// Связывает файловую переменную f с именем файла name и открывает двоичный файл f на чтение и запись procedure Reset(f: AbstractBinaryFile; name: string); ///- Rewrite(f: file of T) -/// f , . , +/// Открывает двоичный файл f на чтение и запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется procedure Rewrite(f: AbstractBinaryFile); ///- Rewrite(f: file of T) -/// f name , +/// Связывает файловую переменную f с именем файла name и открывает двоичный файл на чтение и запись, при этом обнуляя его содержимое procedure Rewrite(f: AbstractBinaryFile; name: string); ///- Truncate(f: file of T) -/// f, +/// Усекает двоичный файл f, отбрасывая все элементы с позиции файлового указателя procedure Truncate(f: AbstractBinaryFile); ///- Eof(f: file of T) -/// True, f +/// Возвращает True, если достигнут конец файла f function Eof(f: AbstractBinaryFile): boolean; ///- Erase(f: file of T) -/// , f +/// Удаляет файл, связанный с файловой переменной f procedure Erase(f: AbstractBinaryFile); ///- Rename(f: file of T; newname: string) -/// , f, newname. +/// Переименовывает файл, связаный с файловой переменной f, давая ему имя newname. procedure Rename(f: AbstractBinaryFile; newname: string); ///- write(f: file of T; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в типизированный файл f //procedure Write(f: AbstractBinaryFile; val: object; arr: boolean); ///- write(f: file; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в нетипизированный файл f procedure Write(f: AbstractBinaryFile; params vals: array of object); ///-- procedure Writeln(f: AbstractBinaryFile); @@ -945,13 +945,13 @@ procedure Writeln(f: AbstractBinaryFile; params vals: array of object); // Typed files // ----------------------------------------------------- ///- FilePos(f : file of T): int64 -/// f +/// Возвращает текущую позицию файлового указателя в типизированном файле f function FilePos(f: TypedFile): int64; ///- FileSize(f : file of T): int64 -/// f +/// Возвращает количество элементов в типизированном файле f function FileSize(f: TypedFile): int64; ///- Seek(f : file of T; n : int64) -/// f n +/// Устанавливает текущую позицию файлового указателя в типизированном файле f на элемент с номером n procedure Seek(f: TypedFile; n: int64); ///-- procedure TypedFileInit(var f: TypedFile; ElementType: System.Type); @@ -966,13 +966,13 @@ function TypedFileRead(f: TypedFile): object; // Binary files // ----------------------------------------------------- ///- FilePos(f : file): int64 -/// f +/// Возвращает текущую позицию файлового указателя в нетипизированном файле f function FilePos(f: BinaryFile): int64; ///- FileSize(f : file): int64 -/// f +/// Возвращает количество байт в нетипизированном файле f function FileSize(f: BinaryFile): int64; ///- Seek(f : file; n : int64) -/// f n +/// Устанавливает текущую позицию файлового указателя в нетипизированном файле f на байт с номером n procedure Seek(f: BinaryFile; n: int64); ///-- procedure BinaryFileInit(var f: BinaryFile); @@ -982,287 +982,287 @@ function BinaryFileRead(var f: BinaryFile; ElementType: System.Type): object; // ----------------------------------------------------- // Operating System routines // ----------------------------------------------------- -/// +/// Возвращает количество параметров командной строки function ParamCount: integer; -/// i- +/// Возвращает i-тый параметр командной строки function ParamStr(i: integer): string; -/// +/// Возвращает текущий каталог function GetDir: string; -/// +/// Меняет текущий каталог procedure ChDir(s: string); -/// +/// Создает каталог procedure MkDir(s: string); -/// +/// Удаляет каталог procedure RmDir(s: string); -/// . True, +/// Создает каталог. Возвращает True, если каталог успешно создан function CreateDir(s: string): boolean; -/// . , False +/// Удаляет файл. Если файл не может быть удален, то возвращает False function DeleteFile(s: string): boolean; -/// +/// Возвращает текущий каталог function GetCurrentDir: string; -/// . True, +/// Удаляет каталог. Возвращает True, если каталог успешно удален function RemoveDir(s: string): boolean; -/// name, newname. True, +/// Переименовывает файл name, давая ему новое имя newname. Возвращает True, если файл успешно переименован function RenameFile(name, newname: string): boolean; -/// . True, +/// Устанавивает текущий каталог. Возвращает True, если каталог успешно удален function SetCurrentDir(s: string): boolean; -/// name newext +/// Изменяет расширение файла с именем name на newext function ChangeFileNameExtension(name, newext: string): string; -/// True, name +/// Возвращает True, если файл с именем name существует function FileExists(name: string): boolean; -/// +/// Выводит в специальном окне стек вызовов подпрограмм если условие не выполняется procedure Assert(cond: boolean); -/// mes +/// Выводит в специальном окне диагностическое сообщение mes и стек вызовов подпрограмм если условие не выполняется procedure Assert(cond: boolean; mes: string); -/// diskname +/// Возвращает свободное место в байтах на диске с именем diskname function DiskFree(diskname: string): int64; -/// diskname +/// Возвращает размер в байтах на диске с именем diskname function DiskSize(diskname: string): int64; -/// disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +/// Возвращает свободное место в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. function DiskFree(disk: integer): int64; -/// disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +/// Возвращает размер в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. function DiskSize(disk: integer): int64; -/// +/// Возвращает количество миллисекунд с момента начала работы программы function Milliseconds: integer; -/// Milliseconds MillisecondsDelta +/// Возвращает количество миллисекунд с момента последнего вызова Milliseconds или MillisecondsDelta function MillisecondsDelta: integer; -/// +/// Завершает работу программы procedure Halt; -/// , exitCode +/// Завершает работу программы, возвращая код ошибки exitCode procedure Halt(exitCode: integer); -/// Pascal ABC. +/// Для совместимости с Pascal ABC. Не выполняет никаких действий procedure cls; -// , . (SS) +// Непонятно, что делать после такой паузы. Убрал (SS) //procedure Pause; -/// ms +/// Делает паузу на ms миллисекунд procedure Sleep(ms: integer); -/// .exe- +/// Возващает имя запущенного .exe-файла function GetEXEFileName: string; -/// +/// Преобразует указатель к строковому представлению function PointerToString(p: pointer): string; -/// filename +/// Запускает программу или документ с именем filename procedure Exec(filename: string); -/// filename args +/// Запускает программу или документ с именем filename и параметрами командной строки args procedure Exec(filename: string; args: string); -/// filename +/// Запускает программу или документ с именем filename procedure Execute(filename: string); -/// filename args +/// Запускает программу или документ с именем filename и параметрами командной строки args procedure Execute(filename: string; args: string); // ----------------------------------------------------- // File name routines // ----------------------------------------------------- -/// fname +/// Выделяет имя файла из полного имени файла fname function ExtractFileName(fname: string): string; -/// fname +/// Выделяет расширение из полного имени файла fname function ExtractFileExt(fname: string): string; -/// fname +/// Выделяет путь из полного имени файла fname function ExtractFilePath(fname: string): string; -/// fname +/// Выделяет имя диска и путь из полного имени файла fname function ExtractFileDir(fname: string): string; -/// fname +/// Выделяет путь из полного имени файла fname function ExtractFileDrive(fname: string): string; -/// fname +/// Возвращает полное имя файла fname function ExpandFileName(fname: string): string; // ----------------------------------------------------- // Mathematical routines // ----------------------------------------------------- -/// x +/// Возвращает знак числа x function Sign(x: shortint): integer; -/// x +/// Возвращает знак числа x function Sign(x: smallint): integer; -/// x +/// Возвращает знак числа x function Sign(x: integer): integer; -/// x +/// Возвращает знак числа x function Sign(x: BigInteger): integer; -/// x +/// Возвращает знак числа x function Sign(x: longword): integer; -/// x +/// Возвращает знак числа x function Sign(x: int64): integer; -/// x +/// Возвращает знак числа x function Sign(x: uint64): integer; -/// x +/// Возвращает знак числа x function Sign(x: real): integer; -/// x +/// Возвращает модуль числа x function Abs(x: integer): integer; -/// x +/// Возвращает модуль числа x function Abs(x: BigInteger): BigInteger; -/// x +/// Возвращает модуль числа x function Abs(x: longword): longword; -/// x +/// Возвращает модуль числа x function Abs(x: int64): int64; -/// x +/// Возвращает модуль числа x function Abs(x: uint64): uint64; -/// x +/// Возвращает модуль числа x function Abs(x: real): real; -/// x +/// Возвращает синус числа x function Sin(x: real): real; -/// x +/// Возвращает гиперболический синус числа x function Sinh(x: real): real; -/// x +/// Возвращает косинус числа x /// !! Returns the cosine of number x function Cos(x: real): real; -/// x +/// Возвращает гиперболический косинус числа x function Cosh(x: real): real; -/// x +/// Возвращает тангенс числа x function Tan(x: real): real; -/// x +/// Возвращает гиперболический тангенс числа x function Tanh(x: real): real; -/// x +/// Возвращает арксинус числа x function ArcSin(x: real): real; -/// x +/// Возвращает арккосинус числа x function ArcCos(x: real): real; -/// x +/// Возвращает арктангенс числа x function ArcTan(x: real): real; -/// x +/// Возвращает экспоненту числа x function Exp(x: real): real; -/// x +/// Возвращает натуральный логарифм числа x function Ln(x: real): real; -/// x 2 +/// Возвращает логарифм числа x по основанию 2 function Log2(x: real): real; -/// x +/// Возвращает десятичный логарифм числа x function Log10(x: real): real; -/// x base +/// Возвращает логарифм числа x по основанию base function LogN(base, x: real): real; -/// x +/// Возвращает квадратный корень числа x function Sqrt(x: real): real; -/// x +/// Возвращает квадрат числа x function Sqr(x: integer): int64; -/// x +/// Возвращает квадрат числа x function Sqr(x: BigInteger): BigInteger; -/// x +/// Возвращает квадрат числа x function Sqr(x: longword): uint64; -/// x +/// Возвращает квадрат числа x function Sqr(x: int64): int64; -/// x +/// Возвращает квадрат числа x function Sqr(x: uint64): uint64; -/// x +/// Возвращает квадрат числа x function Sqr(x: real): real; -/// x y +/// Возвращает x в степени y function Power(x, y: real): real; -/// x y +/// Возвращает x в степени y function Power(x, y: integer): real; -/// x y +/// Возвращает x в степени y function Power(x: BigInteger; y: integer): BigInteger; -/// x, +/// Возвращает x, округленное до ближайшего целого function Round(x: real): integer; -/// x +/// Возвращает целую часть числа x function Trunc(x: real): integer; -/// x +/// Возвращает целую часть числа x function Int(x: real): real; -/// x +/// Возвращает дробную часть числа x function Frac(x: real): real; -/// <= x +/// Возвращает наибольшее целое <= x function Floor(x: real): integer; -/// >= x +/// Возвращает наименьшее целое >= x function Ceil(x: real): integer; -/// +/// Переводит радианы в градусы function RadToDeg(x: real): real; -/// +/// Переводит градусы в радианы function DegToRad(x: real): real; -/// +/// Инициализирует датчик псевдослучайных чисел procedure Randomize; -/// , seed. seed +/// Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности procedure Randomize(seed: integer); -/// 0 maxValue-1 +/// Возвращает случайное целое в диапазоне от 0 до maxValue-1 function Random(maxValue: integer): integer; -/// a b +/// Возвращает случайное целое в диапазоне от a до b function Random(a, b: integer): integer; -/// [0..1) +/// Возвращает случайное вещественное в диапазоне [0..1) function Random: real; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: byte): byte; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: shortint): shortint; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: smallint): smallint; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: word): word; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: integer): integer; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: BigInteger): BigInteger; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: longword): longword; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: int64): int64; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: uint64): uint64; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: real): real; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: byte): byte; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: shortint): shortint; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: word): word; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: smallint): smallint; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: integer): integer; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: BigInteger): BigInteger; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: longword): longword; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: int64): int64; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: uint64): uint64; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: real): real; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: integer): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: BigInteger): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: longword): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: int64): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: uint64): boolean; // ----------------------------------------------------- // Char and String manipulation // ----------------------------------------------------- -/// Windows +/// Преобразует код в символ в кодировке Windows function Chr(a: byte): char; -/// Windows +/// Преобразует символ в код в кодировке Windows function Ord(a: char): byte; -/// a +/// Возвращает порядковый номер значения a function Ord(a: integer): integer; -/// a +/// Возвращает порядковый номер значения a function Ord(a: longword): longword; -/// a +/// Возвращает порядковый номер значения a function Ord(a: int64): int64; -/// a +/// Возвращает порядковый номер значения a function Ord(a: uint64): uint64; -/// a +/// Возвращает порядковый номер значения a function Ord(a: boolean): integer; -/// Unicode +/// Преобразует код в символ в кодировке Unicode function ChrUnicode(a: word): char; -/// Unicode +/// Преобразует символ в код в кодировке Unicode function OrdUnicode(a: char): word; -/// +/// Преобразует символ в верхний регистр function UpperCase(ch: char): char; -/// +/// Преобразует символ в нижний регистр function LowerCase(ch: char): char; -/// +/// Преобразует символ в верхний регистр function UpCase(ch: char): char; -/// +/// Преобразует символ в нижний регистр function LowCase(ch: char): char; -/// i s +/// Преобразует целое значение i к строковому представлению и записывает результат в s procedure Str(i: integer; var s: string); ///-- procedure Str(i: longword; var s: string); @@ -1270,133 +1270,133 @@ procedure Str(i: longword; var s: string); procedure Str(i: int64; var s: string); ///-- procedure Str(i: uint64; var s: string); -/// r s +/// Преобразует вещественное значение r к строковому представлению и записывает результат в s procedure Str(r: real; var s: string); -/// r s +/// Преобразует вещественное значение r к строковому представлению и записывает результат в s procedure Str(r: single; var s: string); ///-- procedure Str(s1: string; var s: string); -/// subs s. , 0 +/// Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0 function Pos(subs, s: string): integer; -/// subs s from. , 0 +/// Возвращает позицию подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0 function PosEx(subs, s: string; from: integer := 1): integer; -/// +/// Возвращает длину строки function Length(s: string): integer; -/// s n +/// Устанавливает длину строки s равной n procedure SetLength(var s: string; n: integer); ///-- procedure SetLengthForShortString(var s: string; n, sz: integer); -/// source s index +/// Вставляет подстроку source в строку s с позиции index procedure Insert(source: string; var s: string; index: integer); ///-- procedure InsertInShortString(source: string; var s: string; index, n: integer); -/// s count index +/// Удаляет из строки s count символов с позиции index procedure Delete(var s: string; index, count: integer); -/// s count index +/// Возвращает подстроку строки s длины count с позиции index function Copy(s: string; index, count: integer): string; ///-Concat(s1,s2,...): string -/// , s1,s2,... +/// Возвращает строку, являющуюся результатом слияния строк s1,s2,... function Concat(params strs: array of string): string; -/// , s1 s2 +/// Возвращает строку, являющуюся результатом слияния строк s1 и s2 function Concat(s1, s2: string): string; -/// +/// Возвращает строку в нижнем регистре function LowerCase(s: string): string; -/// +/// Возвращает строку в верхнем регистре function UpperCase(s: string): string; -/// , count ch +/// Возвращает строку, состоящую из count символов ch function StringOfChar(ch: char; count: integer): string; -/// +/// Возвращает инвертированную строку function ReverseString(s: string): string; -/// . < 0 s1 0 s1>s2 = 0 s1=s2 +/// Сравнивает строки. Возвращает значение < 0 если s1 0 если s1>s2 и = 0 если s1=s2 function CompareStr(s1, s2: string): integer; -/// count s +/// Возвращает первые count символов строки s function LeftStr(s: string; count: integer): string; -/// count s +/// Возвращает последние count символов строки s function RightStr(s: string; count: integer): string; -/// +/// Возвращает строку с удаленными начальными и конечными пробелами function Trim(s: string): string; -/// +/// Возвращает строку с удаленными начальными пробелами function TrimLeft(s: string): string; -/// +/// Возвращает строку с удаленными конечными пробелами function TrimRight(s: string): string; -/// +/// Преобразует строковое представление целого числа к числовому значению function StrToInt(s: string): integer; -/// +/// Преобразует строковое представление целого числа к числовому значению function StrToInt64(s: string): int64; -/// +/// Преобразует строковое представление вещественного числа к числовому значению function StrToFloat(s: string): real; -/// s value. False +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToInt(s: string; var value: integer): boolean; -/// s value. False +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToInt64(s: string; var value: int64): boolean; -/// s value. False +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToFloat(s: string; var value: real): boolean; -/// s value. False +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToFloat(s: string; var value: single): boolean; -/// +/// Считывает целое из строки function ReadIntegerFromString(s: string; var from: integer): integer; -/// +/// Считывает вещественное из строки function ReadRealFromString(s: string; var from: integer): real; -/// +/// Считывает из строки последовательность символов до пробельного символа function ReadWordFromString(s: string; var from: integer): string; -/// True False +/// Возвращает True если достигнут конец строки или в строке остались только пробельные символы и False в противном случае function StringIsEmpty(s: string; var from: integer): boolean; -/// . True False +/// Считывает целое из строки. Возвращает True если считывание удачно и False в противном случае function TryReadIntegerFromString(s: string; var from: integer; var res: integer): boolean; -/// . True False +/// Считывает вещественное из строки. Возвращает True если считывание удачно и False в противном случае function TryReadRealFromString(s: string; var from: integer; var res: real): boolean; -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: integer; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: shortint; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: smallint; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: int64; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: byte; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: word; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: longword; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: uint64; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: real; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: single; var err: integer); -/// +/// Преобразует целое число к строковому представлению function IntToStr(a: integer): string; -/// +/// Преобразует целое число к строковому представлению function IntToStr(a: int64): string; -/// +/// Преобразует вещественное число к строковому представлению function FloatToStr(a: real): string; -/// , fmtstr pars +/// Возвращает отформатированную строку, построенную по форматной строке fmtstr и списку форматиуемых параметров pars function Format(fmtstr: string; params pars: array of object): string; // ----------------------------------------------------- // Common Routines // ----------------------------------------------------- -/// i 1 +/// Увеличивает значение переменной i на 1 procedure Inc(var i: integer); -/// i n +/// Увеличивает значение переменной i на n procedure Inc(var i: integer; n: integer); -/// i 1 +/// Уменьшает значение переменной i на 1 procedure Dec(var i: integer); -/// i n +/// Уменьшает значение переменной i на n procedure Dec(var i: integer; n: integer); -/// c 1 +/// Увеличивает код символа c на 1 procedure Inc(var c: char); -/// c n +/// Увеличивает код символа c на n procedure Inc(var c: char; n: integer); -/// c 1 +/// Уменьшает код символа c на 1 procedure Dec(var c: char); -/// c n +/// Уменьшает код символа c на n procedure Dec(var c: char; n: integer); ///-- procedure Inc(var b: byte); @@ -1411,48 +1411,48 @@ procedure Dec(var f: boolean); //------------------------------------------------------------------------------ //PRED-SUCC -/// x +/// Возвращает следующее за x значение function succ(x: integer): integer; -/// x +/// Возвращает следующее за x значение function succ(x: boolean): boolean; -/// x +/// Возвращает следующее за x значение function succ(x: byte): byte; -/// x +/// Возвращает следующее за x значение function succ(x: shortint): shortint; -/// x +/// Возвращает следующее за x значение function succ(x: smallint): smallint; -/// x +/// Возвращает следующее за x значение function succ(x: word): word; -/// x +/// Возвращает следующее за x значение function succ(x: longword): longword; -/// x +/// Возвращает следующее за x значение function succ(x: int64): int64; -/// x +/// Возвращает следующее за x значение function succ(x: uint64): uint64; -/// x +/// Возвращает следующее за x значение function succ(x: char): char; -/// x +/// Возвращает предшествующее x значение function pred(x: boolean): boolean; -/// x +/// Возвращает предшествующее x значение function pred(x: byte): byte; -/// x +/// Возвращает предшествующее x значение function pred(x: shortint): shortint; -/// x +/// Возвращает предшествующее x значение function pred(x: smallint): smallint; -/// x +/// Возвращает предшествующее x значение function pred(x: word): word; -/// x +/// Возвращает предшествующее x значение function pred(x: integer): integer; -/// x +/// Возвращает предшествующее x значение function pred(x: longword): longword; -/// x +/// Возвращает предшествующее x значение function pred(x: int64): int64; -/// x +/// Возвращает предшествующее x значение function pred(x: uint64): uint64; -/// x +/// Возвращает предшествующее x значение function pred(x: char): char; -/// +/// Меняет местами значения двух переменных procedure Swap(var a, b: T); // ----------------------------------------------------- @@ -1462,19 +1462,19 @@ procedure Swap(var a, b: T); function Low(i: System.Array): integer; ///- High(i: array): integer function High(i: System.Array): integer; -/// +/// Возвращает длину динамического массива function Length(a: &Array): integer; -/// dim +/// Возвращает длину динамического массива по размерности dim function Length(a: &Array; dim: integer): integer; -/// +/// Создаёт копию динамического массива function Copy(a: &Array): &Array; -/// +/// Сортирует динамический массив по возрастанию procedure Sort(a: array of T); -/// +/// Сортирует список по возрастанию procedure Sort(l: List); -/// +/// Изменяет порядок элементов в динамическом массиве на противоположный procedure Reverse(a: array of T); -/// length index +/// Изменяет порядок элементов на противоположный в диапазоне динамического массива длины length начиная с индекса index procedure Reverse(a: array of T; index,length: integer); //function Copy(a: array of T): array of T; @@ -1484,111 +1484,111 @@ function CopyWithSize(source, dest: &Array): &Array; // ----------------------------------------------------- // Sequences and dynamic arrays // ----------------------------------------------------- -/// a b +/// Возвращает последовательность целых от a до b function Range(a,b: integer): sequence of integer; -/// c1 c2 +/// Возвращает последовательность символов от c1 до c2 function Range(c1,c2: char): sequence of char; -/// [a,b] n +/// Возвращает последовательность вещественных в точках разбиения отрезка [a,b] на n равных частей function Range(a,b: real; n: integer): sequence of real; -/// a b step +/// Возвращает последовательность целых от a до b с шагом step function Range(a,b,step: integer): sequence of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными целыми значениями function ArrRandom(n: integer := 10; a: integer := 0; b: integer := 100): array of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными целыми значениями function ArrRandomInteger(n: integer := 10; a: integer := 0; b: integer := 100): array of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными вещественными значениями function ArrRandomReal(n: integer := 10; a: real := 0; b: real := 10): array of real; -/// n +/// Возвращает последовательность из n случайных целых элементов function SeqRandom(n: integer := 10; a: integer := 0; b: integer := 100): sequence of integer; -/// n +/// Возвращает последовательность из n случайных вещественных элементов function SeqRandomReal(n: integer := 10; a: real := 0; b: real := 10): sequence of real; -/// , +/// Возвращает массив, заполненный указанными элементами function Arr(params a: array of T): array of T; -/// +/// Возвращает последовательность указанных элементов function Seq(params a: array of T): sequence of T; -/// count , f(i) +/// Возвращает массив из count элементов, заполненных значениями f(i) function ArrGen(count: integer; f: integer -> T): array of T; -/// count , f(i), i=from +/// Возвращает массив из count элементов, заполненных значениями f(i), начиная с i=from function ArrGen(count: integer; f: integer -> T; from: integer): array of T; -/// count , first, next +/// Возвращает массив из count элементов, начинающихся с first, с функцией next перехода от предыдущего к следующему function ArrGen(count: integer; first: T; next: T -> T): array of T; -/// count , first second, next +/// Возвращает массив из count элементов, начинающихся с first и second, с функцией next перехода от двух предыдущих к следующему function ArrGen(count: integer; first,second: T; next: (T,T) -> T): array of T; -/// count , f(i) +/// Возвращает последовательность из count элементов, заполненных значениями f(i) function SeqGen(count: integer; f: integer -> T): sequence of T; -/// count , f(i), i=from +/// Возвращает последовательность из count элементов, заполненных значениями f(i), начиная с i=from function SeqGen(count: integer; f: integer -> T; from: integer): sequence of T; -/// count , first, next +/// Возвращает последовательность из count элементов, начинающуюся с first, с функцией next перехода от предыдущего к следующему function SeqGen(count: integer; first: T; next: T -> T): sequence of T; -/// count , first second, next +/// Возвращает последовательность из count элементов, начинающуюся с first и second, с функцией next перехода от двух предыдущих к следующему function SeqGen(count: integer; first,second: T; next: (T,T) -> T): sequence of T; -/// first, next pred +/// Возвращает последовательность элементов с начальным значением first, функцией next перехода от предыдущего к следующему и условием pred продолжения последовательности function SeqWhile(first: T; next: T -> T; pred: T -> boolean): sequence of T; -/// , first second, next pred +/// Возвращает последовательность элементов, начинающуюся с first и second, с функцией next перехода от двух предыдущих к следующему и условием pred продолжения последовательности function SeqWhile(first,second: T; next: (T,T) -> T; pred: T -> boolean): sequence of T; -/// count x +/// Возвращает массив из count элементов x function ArrFill(count: integer; x: T): array of T; -/// count x +/// Возвращает последовательность из count элементов x function SeqFill(count: integer; x: T): sequence of T; -/// m x n, +/// Возвращает матрицу размера m x n, заполненную случайными целыми значениями function MatrixRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer; -/// m x n, +/// Возвращает матрицу размера m x n, заполненную случайными вещественными значениями function MatrixRandomReal(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 10): array [,] of real; -/// 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 ReadArrInteger(const prompt: string; n: integer): array of integer; -/// n , +/// Выводит приглашение к вводу и возвращает массив из n вещественных, введенных с клавиатуры function ReadArrReal(const prompt: string; n: integer): array of real; -/// n , +/// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры function ReadArrString(const prompt: string; 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; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n целых, введенных с клавиатуры function ReadSeqInteger(const prompt: string; n: integer): sequence of integer; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n вещественных, введенных с клавиатуры function ReadSeqReal(const prompt: string; n: integer): sequence of real; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n строк, введенных с клавиатуры function ReadSeqString(const prompt: string; n: integer): sequence of string; // ----------------------------------------------------- // Tuples // ----------------------------------------------------- -/// 2 +/// Возвращает кортеж из 2 элементов function Rec(x1: T1; x2: T2): Tuple; -/// 3 +/// Возвращает кортеж из 3 элементов function Rec(x1: T1; x2: T2; x3: T3): Tuple; -/// 4 +/// Возвращает кортеж из 4 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4): Tuple; -/// 5 +/// Возвращает кортеж из 5 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4; x5: T5): Tuple; -/// 6 +/// Возвращает кортеж из 6 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4; x5: T5; x6: T6): Tuple; // ----------------------------------------------------- // Dict // ----------------------------------------------------- -/// +/// Возвращает словарь пар элементов function Dict(params pairs: array of KeyValuePair): Dictionary; -/// +/// Возвращает пару элементов function KV(key: TKey; value: TVal): KeyValuePair; //------------------------------------------------------------------------------ -// . ! +// Вспомогательные подпрограммы. Из раздела интерфейса не убирать! ///-- function FormatValue(value: object; NumOfChars: integer): string; ///-- @@ -1602,24 +1602,24 @@ procedure StringDefaultPropertySet(var s: string; index: integer; c: char); //procedure InitShortString(var s: ShortString; Length: integer); -/// T +///Проверяет возможность использования указателей на тип T procedure CheckCanUsePointerOnType(T: System.Type); -/// T +///Проверяет возможность записи типа T в файл procedure CheckCanUseTypeForBinaryFiles(T: System.Type); -/// file of T +///Проверяет возможность создания file of T procedure CheckCanUseTypeForTypedFiles(T: System.Type); -/// +///Определяет специальные типы function RuntimeDetermineType(T: System.Type): byte; -/// kind +///Возвращает объект класса в зависимости от значения kind function RuntimeInitialize(kind: byte; variable: object): object; -/// +///Вычисление размера типа на этапе выполнения function GetRuntimeSize: integer; -/// write +///Возвращает строку для вывода в write function _ObjectToString(o: object): string; //------------------------------------------------------------------------------ // WINAPI -// . +// Использование этих функций вводит платформенную зависимость. Желательно обойти ///-- function WINAPI_TerminateProcess(Handle: IntPtr; ExitCode: integer): boolean; //------------------------------------------------------------------------------ @@ -1633,9 +1633,9 @@ var //------------------------------------------------------------------------------ var - /// - + /// Определяет текущую систему ввода-вывода CurrentIOSystem: IOSystem; - /// True, + /// Принимает значение True, если приложение имеет консольное окно IsConsoleApplication: boolean; ///-- RedirectIOInDebugMode := False; @@ -1643,7 +1643,7 @@ var ExecuteBeforeProcessTerminateIn__Mode: procedure(e: Exception); //GCHandlersForReferencePointers := new GCHandlersController; ///-- - ExitCode := 0;//TODO Main + ExitCode := 0;//TODO Сделать возврат в Main ///-- procedure __InitModule__; @@ -1662,23 +1662,23 @@ var DefaultOrdChrEncoding := System.Text.Encoding.GetEncoding(1251); __one_char := new char[1]; __one_byte := new byte[1]; - StartTime: DateTime;// Milliseconds + StartTime: DateTime;// Для Milliseconds const - WRITELN_IN_BINARYFILE_ERROR_MESSAGE = ' Writeln !!Writeln is not applicable to binary files'; + WRITELN_IN_BINARYFILE_ERROR_MESSAGE = 'Операция Writeln не применима к бинарным файлам!!Writeln is not applicable to binary files'; InternalNullBasedArrayName = 'NullBasedArray'; - FILE_NOT_ASSIGNED = ' Assign!!File is not assigned'; - FILE_NOT_OPENED = ' !!File is not opened'; - FILE_NOT_OPENED_FOR_READING = ' !!File is not opened for reading'; - FILE_NOT_OPENED_FOR_WRITING = ' !!File is not opened for writing'; - RANGE_ERROR_MESSAGE = ' !!Out of range'; - EOF_FOR_TEXT_WRITEOPENED = ' Eof , !!Eof function can''t be called for file, opened on writing'; - EOLN_FOR_TEXT_WRITEOPENED = ' Eoln , !!Eoln function can''t be called for file, opened on writing'; - SEEKEOF_FOR_TEXT_WRITEOPENED = ' SeekEof , !!SeekEof function can''t be called for file, opened on writing'; - SEEKEOLN_FOR_TEXT_WRITEOPENED = ' SeekEoln , !!SeekEoln function can''t be called for file, opened on writing'; + FILE_NOT_ASSIGNED = 'Для файловой переменной не вызвана процедура Assign!!File is not assigned'; + FILE_NOT_OPENED = 'Файл не открыт!!File is not opened'; + FILE_NOT_OPENED_FOR_READING = 'Файл не открыт на чтение!!File is not opened for reading'; + FILE_NOT_OPENED_FOR_WRITING = 'Файл не открыт на запись!!File is not opened for writing'; + RANGE_ERROR_MESSAGE = 'Выход за границы диапазона!!Out of range'; + EOF_FOR_TEXT_WRITEOPENED = 'Функция Eof не может быть вызвана для текстового файла, открытого на запись!!Eof function can''t be called for file, opened on writing'; + EOLN_FOR_TEXT_WRITEOPENED = 'Функция Eoln не может быть вызвана для текстового файла, открытого на запись!!Eoln function can''t be called for file, opened on writing'; + SEEKEOF_FOR_TEXT_WRITEOPENED = 'Функция SeekEof не может быть вызвана для текстового файла, открытого на запись!!SeekEof function can''t be called for file, opened on writing'; + SEEKEOLN_FOR_TEXT_WRITEOPENED = 'Функция SeekEoln не может быть вызвана для текстового файла, открытого на запись!!SeekEoln function can''t be called for file, opened on writing'; BAD_TYPE_IN_RUNTIMESIZEOF = 'Bad Type in RunTimeSizeOf'; - PARAMETER_COUNT_MUST_BE_GREATER_0 = ' count > 0!!Parameter count must be > 0'; - PARAMETER_COUNT_MUST_BE_GREATER_1 = ' count > 1!!Parameter count must be > 1'; + PARAMETER_COUNT_MUST_BE_GREATER_0 = 'Параметр count должен быть > 0!!Parameter count must be > 0'; + PARAMETER_COUNT_MUST_BE_GREATER_1 = 'Параметр count должен быть > 1!!Parameter count must be > 1'; function GetCurrentLocale: string; begin @@ -2732,7 +2732,7 @@ end; // StructuredObjectToString //------------------------------------------------------------------------------ -// ToString nil ToString Object +// Возвращает переопределенный в последнем потомке ToString или nil если ToString определен в Object function RedefinedToString(o: object): System.Reflection.MethodInfo; begin var t := o.GetType; @@ -2893,7 +2893,7 @@ begin result := string.CompareOrdinal(left, right) >= 0; end; -/// str n +/// Повторяет строку str n раз function string.operator*(str: string; n: integer): string; begin var sb := new StringBuilder; @@ -2902,7 +2902,7 @@ begin result := sb.ToString; end; -/// str n +/// Повторяет строку str n раз function string.operator*(n: integer; str: string): string; begin var sb := new StringBuilder; @@ -2911,7 +2911,7 @@ begin result := sb.ToString; end; -/// c n +/// Повторяет символ c n раз function char.operator*(c: char; n: integer): string; begin var sb := new StringBuilder; @@ -2920,7 +2920,7 @@ begin result := sb.ToString; end; -/// c n +/// Повторяет символ c n раз function char.operator*(n: integer; c: char): string; begin var sb := new StringBuilder; @@ -2929,25 +2929,25 @@ begin result := sb.ToString; end; -/// str n +/// Добавляет к строке str строковое представление числа n function string.operator+(str: string; n: integer): string; begin result := str + n.ToString; end; -/// str n +/// Добавляет к строке str строковое представление числа n function string.operator+(n: integer; str: string): string; begin result := n.ToString + str; end; -/// str r +/// Добавляет к строке str строковое представление числа r function string.operator+(str: string; r: real): string; begin result := str + r.ToString(nfi); end; -/// str r +/// Добавляет к строке str строковое представление числа r function string.operator+(r: real; str: string): string; begin result := r.ToString(nfi) + str; @@ -2971,7 +2971,7 @@ begin left := sb.ToString; end; -/// +/// Возвращает инверсию строки function string.Inverse(): string; begin var sb := new System.Text.StringBuilder(Self.Length); @@ -3027,7 +3027,7 @@ end;} //------------------------------------------------------------------------------ // Extension methods for IEnumerable //------------------------------------------------------------------------------ -/// , delim +/// Выводит последовательность на экран, используя delim в качестве разделителя function Print(self: sequence of T; delim: string): sequence of T; extensionmethod; begin var g := Self.GetEnumerator(); @@ -3040,13 +3040,13 @@ begin Result := Self; end; -/// , +/// Выводит последовательность на экран, используя пробел в качестве разделителя function Print(self: sequence of T): sequence of T; extensionmethod; begin Result := Self.Print(' '); end; -/// , delim , +/// Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку function Println(self: sequence of T; delim: string): sequence of T; extensionmethod; begin Self.Print(delim); @@ -3054,13 +3054,13 @@ begin Result := Self; end; -/// , , +/// Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку function Println(self: sequence of T): sequence of T; extensionmethod; begin Result := Self.Println(' '); end; -/// , , delim +/// Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя delim в качестве разделителя function System.Collections.Generic.IEnumerable.JoinIntoString(delim: string): string; begin var g := Self.GetEnumerator(); @@ -3072,13 +3072,13 @@ begin Result := sb.ToString; end; -/// , , +/// Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя пробел в качестве разделителя function System.Collections.Generic.IEnumerable.JoinIntoString(): string; begin Result := Self.JoinIntoString(' '); end; -/// +/// Применяет действие к каждому элементу последовательности procedure &ForEach(self: sequence of T; action: T -> ()); extensionmethod; begin foreach x: T in Self do @@ -3095,26 +3095,26 @@ begin Result := Self.OrderBy(Ident&); end; -/// +/// Объединяет две последовательности function System.Collections.Generic.IEnumerable.operator+(a,b: sequence of T): sequence of T; begin Result := a.Concat(b); end; -/// a b +/// Объединяет последовательность a и значение b function System.Collections.Generic.IEnumerable.operator+(a: sequence of T; b: T): sequence of T; begin Result := a.Concat(new T[1](b)); end; -/// b a +/// Объединяет значение b и последовательность a function System.Collections.Generic.IEnumerable.operator+(b: T; a: sequence of T): sequence of T; begin Result := new T[1](b); Result := Result.Concat(a); end; -/// a, n +/// Возвращае последовательность a, повторенную n раз function System.Collections.Generic.IEnumerable.operator*(a: sequence of T; n: integer): sequence of T; begin Result := System.Linq.Enumerable.Empty&(); @@ -3122,13 +3122,13 @@ begin Result := Result.Concat(a); end; -/// a, n +/// Возвращае последовательность a, повторенную n раз function System.Collections.Generic.IEnumerable.operator*(n: integer; a: sequence of T): sequence of T; begin Result := a*n; end; -/// +/// Объединяет два массива function operator+(a, b: array of T): array of T; extensionmethod; begin Result := new T[a.Length+b.Length]; @@ -3629,7 +3629,7 @@ begin Result := sb.ToString; end;} -function read_lexem: string;// SSM 08.03.11 - peek '1 hello'. +function read_lexem: string;// SSM 08.03.11 - пытаюсь исправить с peekом ситуацию с вводом '1 hello'. Должно работать var c: char; sb: System.Text.StringBuilder; @@ -3641,7 +3641,7 @@ begin repeat sb.Append(c); c := char(CurrentIOSystem.peek); - if char.IsWhiteSpace(c) or (c = char(-1)) then // char(-1) - Ctrl-Z + if char.IsWhiteSpace(c) or (c = char(-1)) then // char(-1) - Ctrl-Z во входном потоке break; c := CurrentIOSystem.read_symbol; until False; // accumulate nonspaces @@ -3684,12 +3684,12 @@ begin if not console_alloc then AllocConsole; // SSM 29.11.14 - if state = 1 then // sym - , Peek + if state = 1 then // в sym - символ, считанный предыдущим Peek Result := sym - else // sym + else // в sym ничего нет begin state := 1; - sym := Console.Read(); // + sym := Console.Read(); // считываение в буфер Result := sym; end; end; @@ -3699,13 +3699,13 @@ begin if not console_alloc then AllocConsole; // SSM 29.11.14 - if state = 1 then // sym - , Peek + if state = 1 then // в sym - символ, считанный предыдущим Peek begin state := 0; Result := char(sym); sym := -1; end - else // sym + else // в sym ничего нет Result := char(Console.Read()); end; @@ -3756,7 +3756,7 @@ begin begin var sb := new System.Text.StringBuilder; // SSM 8.04.10 - var c := char(peek()); // char(-1) - , , + var c := char(peek()); // первый раз может быть char(-1) - это значит, что в потоке ввода ничего нет, тогда мы читаем символ while (c <> #13) and (c <> #10) do begin c := read_symbol; @@ -3817,7 +3817,7 @@ begin x := True else if s = 'false' then x := False - else raise new System.FormatException(' '); + else raise new System.FormatException('Входная строка имела неверный формат'); end; procedure IOStandardSystem.readln; @@ -4180,8 +4180,8 @@ end; procedure ReadShortStringFromFile(f: Text; var s: string; n: integer); begin - //x := f.sr.ReadLine;// nil - // .. + //x := f.sr.ReadLine;//если конец файла то вернет nil + //Нельзя эти пользоваться т.к. считывает и конец строки var i := 1; var sb := new System.Text.StringBuilder; repeat @@ -4201,7 +4201,7 @@ begin if s.Length > n then s := s.Substring(0, n); end; -procedure ReadShortString(var s: string; n: integer);// peek. +procedure ReadShortString(var s: string; n: integer);// Снова сделал peek. В прошлый раз была ошибка begin if (input.fi <> nil) and (input.sr <> nil) then begin @@ -4282,8 +4282,8 @@ end; procedure read(f: Text; var x: string); begin - //x := f.sr.ReadLine;// nil - // .. + //x := f.sr.ReadLine;//если конец файла то вернет nil + //Нельзя этим пользоваться т.к. считывает и конец строки if f.fi = nil then raise new System.IO.IOException(GetTranslation(FILE_NOT_ASSIGNED)); if f.sr = nil then @@ -4405,7 +4405,7 @@ begin x := True else if s = 'false' then x := False - else raise new System.FormatException(' '); + else raise new System.FormatException('Входная строка имела неверный формат'); end; function ReadInteger(f: Text): integer; @@ -5092,11 +5092,11 @@ begin break; var i := f.sr.Peek; // if not char.IsWhiteSpace(char(i)) then - if (i <> 32) and (i <> 9) then // + if (i <> 32) and (i <> 9) then // Если это не пробел и не табуляция break; f.sr.Read; until False; - Result := f.sr.EndOfStream or (f.sr.Peek = 13) or (f.sr.Peek = 10); // + Result := f.sr.EndOfStream or (f.sr.Peek = 13) or (f.sr.Peek = 10); // Концом строки end; procedure Flush(f: Text); @@ -5754,10 +5754,10 @@ begin var currentLine := stackTrace.GetFrame(ind).GetFileLineNumber(); var currentFile := stackTrace.GetFrame(ind).GetFileName(); if not IsWDE then - System.Diagnostics.Debug.Assert(cond,' '+currentFile+', '+currentLine.ToString()) + System.Diagnostics.Debug.Assert(cond,'Файл '+currentFile+', строка '+currentLine.ToString()) else if not cond then begin - var err := ' : '+Environment.NewLine+' '+currentFile+', '+currentLine.ToString(); + var err := 'Сбой подтверждения: '+Environment.NewLine+'Файл '+currentFile+', строка '+currentLine.ToString(); writeln(err); System.Threading.Thread.Sleep(500); raise new Exception(); @@ -5778,10 +5778,10 @@ begin var currentLine := stackTrace.GetFrame(ind).GetFileLineNumber(); var currentFile := stackTrace.GetFrame(ind).GetFileName(); if not IsWDE then - System.Diagnostics.Debug.Assert(cond,' '+currentFile+', '+currentLine.ToString()+': '+mes) + System.Diagnostics.Debug.Assert(cond,'Файл '+currentFile+', строка '+currentLine.ToString()+': '+mes) else if not cond then begin - var err := ' : '+mes+Environment.NewLine+' '+currentFile+', '+currentLine.ToString(); + var err := 'Сбой подтверждения: '+mes+Environment.NewLine+'Файл '+currentFile+', строка '+currentLine.ToString(); writeln(err); System.Threading.Thread.Sleep(500); raise new Exception(); @@ -6468,7 +6468,7 @@ begin end; procedure Insert(source: string; var s: string; index: integer); -// Insert +// Insert никогда не возвращает исключения begin if index < 1 then index := 1; @@ -6499,7 +6499,7 @@ begin end; procedure Delete(var s: string; index, count: integer); -// Delete +// Delete никогда не возвращает исключения begin if (index < 1) or (index > s.Length) or (count <= 0) then Exit; @@ -6509,7 +6509,7 @@ begin end; function Copy(s: string; index, count: integer): string; -// Copy +// Copy никогда не возвращает исключения begin if index < 1 then index := 1; @@ -6987,7 +6987,7 @@ end; procedure cls; begin - // + //для совместимости { if IsConsoleApplication then Console.Clear;} end; @@ -7179,7 +7179,7 @@ end; //------------------------------------------------------------------------------ // char ext //------------------------------------------------------------------------------ -// +// Преобразовать символ в цифру function char.ToDigit(self: char): integer; extensionmethod; begin Result := OrdUnicode(self) - OrdUnicode('0'); @@ -7187,31 +7187,31 @@ begin raise new System.FormatException('not a Digit'); end; -// +// Следующий символ function char.Succ(self: char): char; extensionmethod; begin Result := PABCSystem.succ(self); end; -// +// Код символа function char.Code(self: char): integer; extensionmethod; begin Result := word(self); end; -// +// Предыдущий символ function char.Pred(self: char): char; extensionmethod; begin Result := PABCSystem.pred(self); end; -// +// Является ли символ цифрой function char.IsDigit(self: char): boolean; extensionmethod; begin Result := char.IsDigit(self); end; -// +// Является ли символ буквой function char.IsLetter(self: char): boolean; extensionmethod; begin Result := char.IsLetter(self); @@ -7240,31 +7240,31 @@ end; //------------------------------------------------------------------------------ // string ext //------------------------------------------------------------------------------ -/// +/// Преобразует строку в целое function string.ToInteger: integer; begin Result := integer.Parse(Self); end; -/// +/// Преобразует строку в вещественное function string.ToReal: real; begin Result := real.Parse(Self, nfi); end; -/// +/// Преобразует строку в массив слов function string.ToWords(params delim: array of char): array of string; begin Result := Self.Split(delim, System.StringSplitOptions.RemoveEmptyEntries); end; -/// +/// Преобразует строку в массив целых function string.ToIntegers(): array of integer; begin Result := Self.ToWords().Select(s -> StrToInt(s)).ToArray(); end; -/// +/// Преобразует строку в массив вещественных function string.ToReals(): array of real; begin Result := Self.ToWords().Select(s -> StrToFloat(s)).ToArray(); @@ -7377,7 +7377,7 @@ begin exit; if T = typeof(TypedSet) then begin - //TODO: + //TODO: обработать множества raise new CanNotUseTypeForFilesException(T); end; if T = typeof(string) then @@ -7413,17 +7413,17 @@ end; function CanNotUseTypeForPointersException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для указателей.'; end; function CanNotUseTypeForTypedFilesException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для типизированных файлов.'; end; function CanNotUseTypeForFilesException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для файлов.'; end; function RuntimeDetermineType(T: System.Type): byte; diff --git a/TestSuite/CompilationSamples/PT4.pas b/TestSuite/CompilationSamples/PT4.pas index 5225e983b..0e18976a9 100644 --- a/TestSuite/CompilationSamples/PT4.pas +++ b/TestSuite/CompilationSamples/PT4.pas @@ -1,14 +1,14 @@ -/// Programming Taskbook 4 +/// Модуль электронного задачника Programming Taskbook 4 unit PT4; //------------------------------------------------------------------------------ -// Programming Taskbook -// 4.13 +// Модуль для подключения задачника Programming Taskbook +// Версия 4.13 // Copyright (c) 2006-2008 DarkStar, SSM -// Copyright (c) 2010 .., 1.3 -// Copyright (c) 2014-2015 .., 4.13 -// Copyright (c) 2015 .., 4.14 -// Programming Taskbook Copyright (c).., 1998-2015 +// Copyright (c) 2010 М.Э.Абрамян, дополнения к версии 1.3 +// Copyright (c) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13 +// Copyright (c) 2015 М.Э.Абрамян, дополнения к версии 4.14 +// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2015 //------------------------------------------------------------------------------ {$apptype windows} @@ -20,9 +20,9 @@ uses System, System.Collections, System.Runtime.InteropServices; type - /// + /// Тип указателя на узел списка PNode = ^TNode; - /// + /// Тип узла списка TNode = record Data: integer; Next,Prev,Left,Right,Parent: PNode; @@ -78,58 +78,58 @@ 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; procedure GetR(var param: real); @@ -157,9 +157,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); @@ -198,13 +198,13 @@ procedure Print(params args: array of object); procedure Println(params args: array of object); -/// , , p +/// Освобождает память, выделенную динамически, на которую указывает p procedure Dispose(p: pointer); -// - Intellisense -// , - write +// Фиктивная пустая процедура - для Intellisense +// Нет, нельзя пользоваться - закрываются процедуры write системного модуля ///- write(a,b,...) -/// a,b,... +/// Выводит значения a,b,... в окно электронного задачника //procedure write; ///-- @@ -212,162 +212,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); @@ -412,14 +412,14 @@ procedure WriteMatr(a: array of array of T); procedure WriteMatr(a: List>); -// == 4.14 == +// == Конец дополнений к версии 4.14 == implementation const - NotSupportedReadTypeMessage = ' {0} '; - NotSupportedWriteTypeMessage = ' {0} '; - eMessage = ' Node Dispose'; + NotSupportedReadTypeMessage = 'Ввод данных типа {0} не поддерживается'; + NotSupportedWriteTypeMessage = 'Вывод данных типа {0} не поддерживается'; + eMessage = 'Попытка обращения к объекту Node после вызова его метода Dispose'; var loadNodes: ArrayList; @@ -862,7 +862,7 @@ begin end; // ----------------------------------------------------- -// Get +// Функции Get // ----------------------------------------------------- function GetInt: integer; var val:integer; @@ -898,7 +898,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; @@ -930,8 +930,8 @@ var sNode: InternalNode; i: integer; 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; @@ -1031,7 +1031,7 @@ begin end; // ----------------------------------------------------- -// Put +// Процедуры Put // ----------------------------------------------------- procedure PutInt(val: integer); begin @@ -1080,7 +1080,7 @@ begin end; // ----------------------------------------------------- -// +// Генерация исключений // ----------------------------------------------------- procedure RaisePTAndCheckPT(e: Exception); begin @@ -1275,7 +1275,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; @@ -1313,10 +1313,10 @@ begin inc(i); fpt := FinishPT; end; - // == 4.13 == + // == Конец дополнений к версии 4.13 == end; -// == 1.3. == +// == Версия 1.3. Дополнения == var D: integer := 2; @@ -1438,9 +1438,9 @@ begin D := N; end; -// == 1.3 == +// == Конец дополнений к версии 1.3 == -// == 4.14. == +// == Версия 4.14. Дополнения == function ReadSeqInteger(): sequence of integer; begin @@ -1712,7 +1712,7 @@ begin write(a[i][j]); end; -/// +/// Выводит размер и элементы последовательности procedure WriteAll(self: sequence of T); extensionmethod; begin var b := self.ToArray(); @@ -1721,7 +1721,7 @@ begin PT4.Put(e); end; -/// +/// Выводит элементы последовательности procedure Write(self: sequence of T); extensionmethod; begin var b := self.ToArray(); @@ -1729,14 +1729,14 @@ begin PT4.Put(e); end; -/// +/// Выводит элементы динамического массива procedure Write(self: array of T); extensionmethod; begin for var i:=0 to self.Length-1 do PT4.Put(self[i]); end; -/// +/// Выводит элементы матрицы procedure Write(self: array [,] of T); extensionmethod; begin for var i:=0 to self.GetLength(0)-1 do @@ -1744,10 +1744,10 @@ begin PT4.Put(self[i,j]); end; -/// -/// cmt, , -/// -/// - +/// Выводит в разделе отладки окна задачника +/// комментарий cmt, размер последовательности и значения, +/// полученные из элементов последовательности +/// с помощью указанного лямбда-выражения function System.Collections.Generic.IEnumerable.Show (cmt: string; selector: System.Func): System.Collections.Generic.IEnumerable; @@ -1761,10 +1761,10 @@ begin result := self; end; -/// -/// , -/// -/// - +/// Выводит в разделе отладки окна задачника +/// размер последовательности и значения, +/// полученные из элементов последовательности +/// с помощью указанного лямбда-выражения function System.Collections.Generic.IEnumerable.Show (selector: System.Func): System.Collections.Generic.IEnumerable; @@ -1772,8 +1772,8 @@ begin result := self.Show('', selector); end; -/// -/// cmt, +/// Выводит в разделе отладки окна задачника +/// комментарий cmt, размер последовательности и ее элементы function System.Collections.Generic.IEnumerable.Show(cmt: string): System.Collections.Generic.IEnumerable; begin @@ -1792,15 +1792,15 @@ begin string.Format(s, e).Replace(',', '.')); end; -/// -/// . +/// Выводит в разделе отладки окна задачника +/// размер последовательности и ее элементы. function System.Collections.Generic.IEnumerable.Show(): System.Collections.Generic.IEnumerable; begin result := self.Show(''); end; -// == 4.14 == +// == Конец дополнений к версии 4.14 == initialization __InitModule; diff --git a/TestSuite/CompilationSamples/PT4Demo.pas b/TestSuite/CompilationSamples/PT4Demo.pas index 6da995878..2be26f8d4 100644 --- a/TestSuite/CompilationSamples/PT4Demo.pas +++ b/TestSuite/CompilationSamples/PT4Demo.pas @@ -10,9 +10,9 @@ procedure Demo3; var a, b: real; begin - CreateTask(' , '); - TaskText(' ~{a} ~{b}.', 0, 2); - TaskText(' {S}~=~{a}\*{b} ' + + CreateTask('Ввод и вывод данных, оператор присваивания'); + TaskText('Даны стороны прямоугольника~{a} и~{b}.', 0, 2); + TaskText('Найти его площадь {S}~=~{a}\*{b} и периметр ' + '{P}~=~2\*({a}\;+\;{b}).', 0, 4); a := (1 + Random(100)) / 10; b := (1 + Random(100)) / 10; @@ -28,10 +28,10 @@ var m, n, i, j, k: integer; a: array [1..5, 1..8] of real; begin - CreateTask(' (): '); - TaskText(' ~{M}\;\x\;{N} ' + - ' ~{K} (1~\l~{K}~\l~{M}).', 0, 2); - TaskText(' {K}- .', 0, 4); + CreateTask('Двумерные массивы (матрицы): вывод элементов'); + TaskText('Дана матрица размера~{M}\;\x\;{N} ' + + 'и целое число~{K} (1~\l~{K}~\l~{M}).', 0, 2); + TaskText('Вывести элементы {K}-й строки данной матрицы.', 0, 4); m := 2 + Random(4); n := 4 + Random(5); k := 1; @@ -53,13 +53,13 @@ end; procedure Demo5; var s: string; begin - CreateTask(' : '); - TaskText(' ~{S}.', 0, 2); - TaskText(' .', 0, 4); + CreateTask('Символы и строки: основные операции'); + TaskText('Дана строка~{S}.', 0, 2); + TaskText('Вывести ее первый и последний символ.', 0, 4); s := WordSample(Random(WordCount)); DataS('S = ', s, 0, 3); - ResultC(' : ', s[1], xLeft, 3); - ResultC(' : ', s[length(s)], xRight, 3); + ResultC('Первый символ: ', s[1], xLeft, 3); + ResultC('Последний символ: ', s[length(s)], xRight, 3); SetTestCount(4); end; @@ -84,16 +84,16 @@ var s: ShortString; c: char; begin - CreateTask(' '); - TaskText(' ~{K} (>\,0) .', 0, 1); - TaskText(' : , ' + - ' {K}~', 0, 2); - TaskText(' , , ' + - ' {K}- ', 0, 3); - TaskText(' ( ~{K}, ' + - ' ', 0, 4); - TaskText(' , ' + - ' ).', 0, 5); + CreateTask('Символьные и строковые файлы'); + TaskText('Дано целое число~{K} (>\,0) и строковый файл.', 0, 1); + TaskText('Создать два новых файла: строковый, содержащий ' + + 'первые {K}~символов', 0, 2); + TaskText('каждой строки исходного файла, и символьный, ' + + 'содержащий {K}-й символ', 0, 3); + TaskText('каждой строки (если длина строки меньше~{K}, ' + + 'то в строковый файл', 0, 4); + TaskText('записывается вся строка, а в символьный файл ' + + 'записывается пробел).', 0, 5); s1 := '1' + FileName(5) + '.tst'; s2 := '2' + FileName(5) + '.tst'; s3 := '3' + FileName(5) + '.tst'; @@ -124,13 +124,13 @@ begin Close(fs2); Close(fc3); DataN('K =', k, 0, 1, 2); - DataS(' : ', s1, 3, 2); - DataS(' : ', s2, 3, 4); - DataS(' : ', s3, 3, 5); - DataComment(' :', xRight, 2); + DataS('Имя исходного файла: ', s1, 3, 2); + DataS('Имя результирующего строкового файла: ', s2, 3, 4); + DataS('Имя результирующего символьного файла: ', s3, 3, 5); + DataComment('Содержимое исходного файла:', xRight, 2); DataFileS(s1, 3, jmax + 3); - ResultComment(' :', 0, 2); - ResultComment(' :', 0, 4); + ResultComment('Содержимое результирующего строкового файла:', 0, 2); + ResultComment('Содержимое результирующего символьного файла:', 0, 4); ResultFileS(s2, 3, k + 3); ResultFileC(s3, 5, 4); end; @@ -141,9 +141,9 @@ var s, s1, s2: string; t1, t2: text; begin - CreateTask(' : '); - TaskText(' .', 0, 2); - TaskText(' .', 0, 4); + CreateTask('Текстовые файлы: основные операции'); + TaskText('Дан текстовый файл.', 0, 2); + TaskText('Удалить из него все пустые строки.', 0, 4); s1 := FileName(6) + '.tst'; s2 := '#' + FileName(6) + '.tst'; s := TextSample(Random(TextCount)); @@ -164,7 +164,7 @@ begin ResultFileT(s1, 1, 5); Rename(t2, s1); DataFileT(s1, 2, 5); - DataS(' : ', s1, 0, 1); + DataS('Имя файла: ', s1, 0, 1); SetTestCount(3); end; @@ -194,7 +194,7 @@ begin p2^.Next := nil; SetPointer(1, p1); SetPointer(2, p2); - ResultP(' : ', 2, 0, 2); + ResultP('Последний элемент: ', 2, 0, 2); ResultList(1, 0, 3); ShowPointer(2); DataP('', 1, 0, 2); @@ -210,38 +210,38 @@ end; procedure Demo8; begin - CreateTask(' : '); - TaskText(' ~{P}_1 ' + - '- TNode,', 0, 1); - TaskText(' Next. ' + - ' Prev TNode,', 0, 2); - TaskText(' (\I\i) ' + - ' \I\i, ', 0, 3); - TaskText(' ' + - '( Next),', 0, 4); - TaskText(' ( Prev). Prev ' + - ' ', 0, 5); - TaskText(' \N. ' + - ' .', 0, 0); + CreateTask('Динамические структуры данных: двусвязный список'); + TaskText('Дан указатель~{P}_1 на начало непустой цепочки ' + + 'элементов-записей типа TNode,', 0, 1); + TaskText('связанных между собой с помощью поля Next. Используя ' + + 'поле Prev записи TNode,', 0, 2); + TaskText('преобразовать исходную (\Iодносвязную\i) цепочку ' + + 'в \Iдвусвязную\i, в которой каждый', 0, 3); + TaskText('элемент связан не только с последующим элементом ' + + '(с помощью поля Next),', 0, 4); + TaskText('но и с предыдущим (с помощью поля Prev). Поле Prev ' + + 'первого элемента положить', 0, 5); + TaskText('равным \N. Вывести указатель на последний элемент ' + + 'преобразованной цепочки.', 0, 0); Demo8Data; end; procedure Demo8Net; begin - CreateTask(' : '); - TaskText(' ~{A}_1 ' + - '- Node,', 0, 1); - TaskText(' Next. ' + - ' Prev', 0, 2); - TaskText(' , ' + - '(\I\i) \I\i,', 0, 3); - TaskText(' ' + - ' ( ', 0, 4); - TaskText(' Next), ( ' + - ' Prev). Prev', 0, 5); - TaskText(' \O. ' + - '~{A}_2 ', 0, 0); - TaskText(' .', 0, 0); + CreateTask('Динамические структуры данных: двусвязный список'); + TaskText('Дана ссылка~{A}_1 на начало непустой цепочки ' + + 'элементов-объектов типа Node,', 0, 1); + TaskText('связанных между собой с помощью своих свойств Next. ' + + 'Используя свойства Prev', 0, 2); + TaskText('данных объектов, преобразовать исходную ' + + '(\Iодносвязную\i) цепочку в \Iдвусвязную\i,', 0, 3); + TaskText('в которой каждый элемент связан не только ' + + 'с последующим элементом (с помощью', 0, 4); + TaskText('свойства Next), но и с предыдущим (с помощью ' + + 'свойства Prev). Свойство Prev', 0, 5); + TaskText('первого элемента положить равным \O. Вывести ' + + 'ссылку~{A}_2 на последний', 0, 0); + TaskText('элемент преобразованной цепочки.', 0, 0); SetObjectStyle; Demo8Data; end; @@ -261,31 +261,31 @@ begin end; begin - CreateGroup('Demo', ' ', '. . , 2009', + CreateGroup('Demo', 'Примеры различных задач', 'М. Э. Абрамян, 2009', 'df6yui13dffdsttd', 9, InitTask); - CommentText(' '); - CommentText('\I \i \MPT4TaskMaker\m.'); + CommentText('Данная группа демонстрирует различные возможности'); + CommentText('\Iконструктора учебных заданий\i \MPT4TaskMaker\m.'); - Subgroup(' , '); - CommentText(' , '); - CommentText(' Begin.\P '); - CommentText(' .\P'); + Subgroup('Ввод и вывод данных, оператор присваивания'); + CommentText('В этой подгруппе содержатся задания, импортированные'); + CommentText('из группы Begin.\PПриводимый ниже абзац преамбулы'); + CommentText('также импортирован из данной группы.\P'); UseComment('Begin'); - Subgroup(' (): '); - CommentText(' Matrix7.'); + Subgroup('Двумерные массивы (матрицы): вывод элементов'); + CommentText('Данное задание дублирует задание Matrix7.'); - Subgroup(' '); - CommentText(' File63. '); - CommentText(', \I\i .'); + Subgroup('Символьные и строковые файлы'); + CommentText('Данное задание дублирует задание File63. Оно демонстрирует'); + CommentText('особенности, связанные с двоичными \Iстроковыми\i файлами.'); - Subgroup(' : '); - CommentText(' Text16.'); + Subgroup('Текстовые файлы: основные операции'); + CommentText('Данное задание дублирует задание Text16.'); - Subgroup(' : '); - CommentText(' Dynamic30.'); - CommentText(' ObjDyn30 '); - CommentText(' \<\> .'); + Subgroup('Динамические структуры данных: двусвязный список'); + CommentText('Первое задание дублирует задание Dynamic30.'); + CommentText('Второе задание дублирует задание ObjDyn30 и представляет'); + CommentText('собой \<объектный\> вариант первого задания.'); //RegisterGroup('PT4Demo'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/PT4DemoTest.pas b/TestSuite/CompilationSamples/PT4DemoTest.pas index 2a1951d98..4c78fc630 100644 --- a/TestSuite/CompilationSamples/PT4DemoTest.pas +++ b/TestSuite/CompilationSamples/PT4DemoTest.pas @@ -1,7 +1,7 @@ uses PT4, PT4Demo; begin -// -// MakeText +// для отображения окна задачника +// надо закомментировать вызов процедуры MakeText //MakeText('Demo'); Task('Demo7?'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/PT4Exam.pas b/TestSuite/CompilationSamples/PT4Exam.pas index 47bc31c27..0eed7d68a 100644 --- a/TestSuite/CompilationSamples/PT4Exam.pas +++ b/TestSuite/CompilationSamples/PT4Exam.pas @@ -1,10 +1,10 @@ -/// PT for Exam +/// Модуль электронного задачника PT for Exam unit PT4Exam; //------------------------------------------------------------------------------ -// PT for Exam -// 1.1 -// Copyright (c) 2014-2015 .. +// Модуль для подключения задачника PT for Exam +// Версия 1.1 +// Copyright (c) 2014-2015 М.Э.Абрамян //------------------------------------------------------------------------------ diff --git a/TestSuite/CompilationSamples/PT4TaskMakerNET.pas b/TestSuite/CompilationSamples/PT4TaskMakerNET.pas index 47afe4ba7..9e4554c67 100644 --- a/TestSuite/CompilationSamples/PT4TaskMakerNET.pas +++ b/TestSuite/CompilationSamples/PT4TaskMakerNET.pas @@ -1,13 +1,13 @@ -/// Programming Taskbook 4.11 +/// Конструктор для электронного задачника Programming Taskbook 4.11 unit PT4TaskMakerNET; //------------------------------------------------------------------------------ -// Programming Taskbook 4.11 +// Конструктор для электронного задачника Programming Taskbook 4.11 //------------------------------------------------------------------------------ -// NET- PascalABC.NET +// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET // -// Copyright (c) 2013 .. -// Programming Taskbook Copyright (c) ..,1998-2013 +// Copyright (c) 2013 М.Э.Абрамян +// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2013 //------------------------------------------------------------------------------ @@ -26,26 +26,26 @@ const lgVB = $0002; lgCPP = $0004; lg1C = $0040; - lgPython = $0080; // 4.10 + lgPython = $0080; // добавлено в версии 4.10 lgCS = $0100; lgVBNET = $0200; lgPascalNET = $0400; - lgJava = $10000; // 4.11 - lgAll = $FFFFFF; // 4.10 + lgJava = $10000; // добавлено в версии 4.11 + lgAll = $FFFFFF; // изменено в версии 4.10 lgNET = $FF00; lgWithPointers = $003D; - lgWithObjects = $FFF80; // 4.11 + lgWithObjects = $FFF80; // добавлено в версии 4.11 lgPascalABCNET = $0401; type -/// , +/// Процедурный тип, используемый при создании групп заданий TInitTaskProc = procedure(N: integer); -/// +/// Указатель на узел динамической структуры PNode = ^TNode; -/// +/// Узел динамической структуры TNode = record Data: integer; Next: PNode; @@ -55,361 +55,361 @@ type Parent: PNode; end; -/// +/// Добавляет к задачнику новую группу заданий с указанными характеристиками procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; TaskCount: integer; InitTaskProc: TInitTaskProc); -/// +/// Добавляет к создаваемой группе задание из другой группы procedure UseTask(GroupName: string; TaskNumber: integer); -/// +/// Должна указываться первой при определении нового задания procedure CreateTask(SubgroupName: string); overload; -/// +/// Должна указываться первой при определении нового задания procedure CreateTask; overload; -/// -/// ( ) +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) procedure CreateTask(SubgroupName: string; var ProcessCount: integer); overload; -/// -/// ( ) +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) procedure CreateTask(var ProcessCount: integer); overload; -/// , -/// , lgXXX +/// Позволяет определить текущий язык программирования, выбранный для задачника +/// Возвращает значения, связанные с константами lgXXX function CurrentLanguage: integer; -/// -/// ( 'ru', 'en') +/// Возвращает двухбуквенную строку с описанием текущей локали +/// (в даной версии возвращается либо 'ru', либо 'en') function CurrentLocale: string; -/// 'd.dd' -/// ( , 4.10, '4.00') -function CurrentVersion: string; // 4.10 +/// Возвращает номер текущей версии задачника в формате 'd.dd' +/// (для версий, меньших 4.10, возвращает '4.00') +function CurrentVersion: string; // добавлено в версии 4.10 //----------------------------------------------------------------------------- -/// +/// Добавляет к формулировке задания строку procedure TaskText(S: string; X, Y: integer); -/// -/// ( S -/// #13, #10 #13#10; -/// , -/// ) -procedure TaskText(S: string); // 4.11 +/// Определяет все строки формулировки задания +/// (в параметре S отдельные строки формулировки +/// должны разделяться символами #13, #10 или парой #13#10; +/// начальные и конечные пробелы в строках удаляются, +/// пустые строки в формулировку не включаются) +procedure TaskText(S: string); // добавлено в версии 4.11 //----------------------------------------------------------------------------- -/// +/// Добавляет к исходным данным элемент логического типа с комментарием procedure DataB(Cmt: string; B: boolean; X, Y: integer); -/// -procedure DataB(B: boolean; X, Y: integer); // 4.11 +/// Добавляет к исходным данным элемент логического типа +procedure DataB(B: boolean; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным целочисленный элемент с комментарием procedure DataN(Cmt: string; N: integer; X, Y, W: integer); -/// -procedure DataN(N: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным целочисленный элемент +procedure DataN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным два целочисленных элемента с общим комментарием procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); -/// -procedure DataN2(N1, N2: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным два целочисленных элемента +procedure DataN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным три целочисленных элемента с общим комментарием procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); -/// -procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным три целочисленных элемента +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным вещественный элемент с комментарием procedure DataR(Cmt: string; R: real; X, Y, W: integer); -/// -procedure DataR(R: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным вещественный элемент +procedure DataR(R: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным два вещественных элемента с общим комментарием procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); -/// -procedure DataR2(R1, R2: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным два вещественных элемента +procedure DataR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным три вещественных элемента с общим комментарием procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); -/// -procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным три вещественных элемента +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным символьный элемент с комментарием procedure DataC(Cmt: string; C: char; X, Y: integer); -/// -procedure DataC(C: char; X, Y: integer); // 4.11 +/// Добавляет к исходным данным символьный элемент +procedure DataC(C: char; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным строковый элемент с комментарием procedure DataS(Cmt: string; S: string; X, Y: integer); -/// -procedure DataS(S: string; X, Y: integer); // 4.11 +/// Добавляет к исходным данным строковый элемент +procedure DataS(S: string; X, Y: integer); // добавлено в версии 4.11 -/// PNode +/// Добавляет к исходным данным элемент типа PNode с комментарием procedure DataP(Cmt: string; NP: integer; X, Y: integer); -/// PNode -procedure DataP(NP: integer; X, Y: integer); // 4.11 +/// Добавляет к исходным данным элемент типа PNode +procedure DataP(NP: integer; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет комментарий в область исходных данных procedure DataComment(Cmt: string; X, Y: integer); //----------------------------------------------------------------------------- -/// +/// Добавляет к результирующим данным элемент логического типа с комментарием procedure ResultB(Cmt: string; B: boolean; X, Y: integer); -/// -procedure ResultB(B: boolean; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным элемент логического типа +procedure ResultB(B: boolean; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным целочисленный элемент с комментарием procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); -/// -procedure ResultN(N: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным целочисленный элемент +procedure ResultN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным два целочисленных элемента с общим комментарием procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); -/// -procedure ResultN2(N1, N2: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным два целочисленных элемента +procedure ResultN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным три целочисленных элемента с общим комментарием procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); -/// -procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным три целочисленных элемента +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным вещественный элемент с комментарием procedure ResultR(Cmt: string; R: real; X, Y, W: integer); -/// -procedure ResultR(R: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным вещественный элемент +procedure ResultR(R: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным два вещественных элемента с общим комментарием procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); -/// -procedure ResultR2(R1, R2: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным два вещественных элемента +procedure ResultR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным три вещественных элемента с общим комментарием procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); -/// -procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным три вещественных элемента +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным символьный элемент с комментарием procedure ResultC(Cmt: string; C: char; X, Y: integer); -/// -procedure ResultC(C: char; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным символьный элемент +procedure ResultC(C: char; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным строковый элемент с комментарием procedure ResultS(Cmt: string; S: string; X, Y: integer); -/// -procedure ResultS(S: string; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным строковый элемент +procedure ResultS(S: string; X, Y: integer); // добавлено в версии 4.11 -/// PNode +/// Добавляет к результирующим данным элемент типа PNode с комментарием procedure ResultP(Cmt: string; NP: integer; X, Y: integer); -/// PNode -procedure ResultP(NP: integer; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным элемент типа PNode +procedure ResultP(NP: integer; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет комментарий в область результирующих данных procedure ResultComment(Cmt: string; X, Y: integer); //----------------------------------------------------------------------------- -/// +/// Задает число дробных знаков при отображении вещественных чисел procedure SetPrecision(N: integer); -/// , -/// +/// Задает число исходных данных, минимально необходимое +/// для нахождения правильных результирующих данных procedure SetRequiredDataCount(N: integer); -/// ( 2 9), -/// +/// Задает число тестовых испытаний (от 2 до 9), при успешном +/// прохождении которых задание будет считаться выполненным procedure SetTestCount(N: integer); -/// , I- , -/// N , , W, -/// B ( 1) +/// Возвращает горизонтальную координату, начиная с которой следует выводить I-й элемент из набора, +/// содержащего N элементов, при условии, что ширина каждого элемента равна W, а между элементами +/// надо указывать B пробелов (элементы нумеруются от 1) function Center(I, N, W, B: integer): integer; -/// , -/// M N . -/// , M. -function RandomN(M, N: integer): integer; // 4.11 +/// Возвращает псевдослучайное целое число, лежащее +/// в диапазоне от M до N включительно. Если указанный +/// диапазон пуст, то возвращает M. +function RandomN(M, N: integer): integer; // добавлено в версии 4.11 -/// , -/// [A, B). -/// , A. -function RandomR(A, B: real): real; // 4.11 +/// Возвращает псевдослучайное вещественное число, лежащее +/// на полуинтервале [A, B). Если указанный полуинтервал +/// пуст, то возвращает A. +function RandomR(A, B: real): real; // добавлено в версии 4.11 -/// -/// ( ). -/// , 1. -/// , 0. -/// ( 4.10 ) -/// 0. -function CurrentTest: integer; // 4.11 +/// Возвращает порядковый номер текущего тестового запуска +/// (учитываются только успешные тестовые запуски). Если ранее успешных +/// запусков не было, то возвращает 1. Если задание уже выполнено +/// или запущено в демонстрационном режиме, то возвращает 0. +/// При использовании предыдущих версий задачника (до 4.10 включительно) +/// всегда возвращает 0. +function CurrentTest: integer; // добавлено в версии 4.11 //----------------------------------------------------------------------------- -/// (file of integer) +/// Добавляет к исходным данным двоичный файл с целочисленными элементами (file of integer) procedure DataFileN(FileName: string; Y, W: integer); -/// (file of real) +/// Добавляет к исходным данным двоичный файл с вещественными элементами (file of real) procedure DataFileR(FileName: string; Y, W: integer); -/// (file of char) +/// Добавляет к исходным данным двоичный файл с символьными элементами (file of char) procedure DataFileC(FileName: string; Y, W: integer); -/// (file of ShortString) +/// Добавляет к исходным данным двоичный файл со строковыми элементами (file of ShortString) procedure DataFileS(FileName: string; Y, W: integer); -/// +/// Добавляет к исходным данным текстовый файл procedure DataFileT(FileName: string; Y1, Y2: integer); //----------------------------------------------------------------------------- -/// (file of integer) +/// Добавляет к результирующим данным двоичный файл с целочисленными элементами (file of integer) procedure ResultFileN(FileName: string; Y, W: integer); -/// (file of real) +/// Добавляет к результирующим данным двоичный файл с вещественными элементами (file of real) procedure ResultFileR(FileName: string; Y, W: integer); -/// (file of char) +/// Добавляет к результирующим данным двоичный файл с символьными элементами (file of char) procedure ResultFileC(FileName: string; Y, W: integer); -/// (file of ShortString) +/// Добавляет к результирующим данным двоичный файл со строковыми элементами (file of ShortString) procedure ResultFileS(FileName: string; Y, W: integer); -/// +/// Добавляет к результирующим данным текстовый файл procedure ResultFileT(FileName: string; Y1, Y2: integer); //----------------------------------------------------------------------------- -/// NP P +/// Связывает номер NP с указателем P procedure SetPointer(NP: integer; P: PNode); -/// +/// Добавляет к исходным данным линейную динамическую структуру procedure DataList(NP: integer; X, Y: integer); -/// +/// Добавляет к результирующим данным линейную динамическую структуру procedure ResultList(NP: integer; X, Y: integer); -/// +/// Добавляет к исходным данным бинарное дерево procedure DataBinTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к результирующим данным бинарное дерево procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к исходным данным дерево общего вида procedure DataTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к результирующим данным дерево общего вида procedure ResultTree(NP: integer; X, Y1, Y2: integer); -/// NP +/// Отображает в текущей динамической структуре указатель с номером NP procedure ShowPointer(NP: integer); -/// , +/// Помечает в текущей результирующей динамической структуре указатель, требующий создания procedure SetNewNode(NNode: integer); -/// , +/// Помечает в текущей исходной динамической структуре указатель, требующий удаления procedure SetDisposedNode(NNode: integer); //----------------------------------------------------------------------------- -/// - , +/// Возвращает количество слов-образцов для языка, соответствующего текущей локали function WordCount: integer; //116 -/// - , +/// Возвращает количество предложений-образцов для языка, соответствующего текущей локали function SentenceCount: integer; //61 -/// - , +/// Возвращает количество текстов-образцов для языка, соответствующего текущей локали function TextCount: integer; //85 -/// - N ( 0) , +/// Возвращает слово-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали function WordSample(N: integer): string; -/// - N ( 0) , +/// Возвращает предложение-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали function SentenceSample(N: integer): string; -/// - N ( 0) , , -/// #13#10, , -/// MaxLineCount, +/// Возвращает текст-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали, +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка function TextSample(N: integer): string; //----------------------------------------------------------------------------- -/// - +/// Возвращает количество английских слов-образцов function EnWordCount: integer; //116 -/// - +/// Возвращает количество английских предложений-образцов function EnSentenceCount: integer; //61 -/// - +/// Возвращает количество английских текстов-образцов function EnTextCount: integer; //85 -/// - N ( 0) +/// Возвращает английское слово-образец с номером N (нумерация от 0) function EnWordSample(N: integer): string; -/// - N ( 0) +/// Возвращает английское предложение-образец с номером N (нумерация от 0) function EnSentenceSample(N: integer): string; -/// - N ( 0), -/// #13#10, , -/// MaxLineCount, +/// Возвращает английский текст-образец с номером N (нумерация от 0), +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка function EnTextSample(N: integer): string; //----------------------------------------------------------------------------- -/// +/// Добавляет строку комментария к текущей группе или подгруппе заданий procedure CommentText(S: string); -/// ( , -/// ) +/// Добавляет комментарий из другой группы заданий (или ее подгруппы, +/// если ее второй параметр не является пустой строкой) procedure UseComment(GroupName, SubgroupName: string); overload; -/// +/// Добавляет комментарий из другой группы заданий procedure UseComment(GroupName: string); overload; -/// +/// Устанавливает режим добавления комментария к подгруппе заданий procedure Subgroup(SubgroupName: string); //----------------------------------------------------------------------------- -/// , -/// " " PascalABC.NET -/// ( ) +/// Процедура, обеспечивающая отображение динамических структур данных +/// в "объектном стиле" при выполнении заданий в среде PascalABC.NET +/// (при использовании других сред не выполняет никаких действий) procedure SetObjectStyle; //----------------------------------------------------------------------------- -/// ; -/// activate ( ) -/// NET ( activate -/// S, ActivateNET) +/// Процедура для внутреннего использования; она должна быть вызвана +/// из процедуры с именем activate (с маленькой буквы) в любой +/// библиотеке NET с группой заданий (процедура activate имеет +/// тот же строковый параметр S, что и процедура ActivateNET) procedure ActivateNET(S: string); //----------------------------------------------------------------------------- -/// -/// ( ) +/// Устанавливает текущий процесс для последующей передачи ему данных +/// числовых типов (при выполнении задания в параллельном режиме) procedure SetProcess(ProcessRank: integer); //----------------------------------------------------------------------------- @@ -491,12 +491,12 @@ var enwordsample_, ensentencesample_, entextsample_: TSFuncN; commenttext_: TProcS; usecomment_: TProcS2; - subgroup_{, registergroup_}: TProcS; // 4.11 + subgroup_{, registergroup_}: TProcS; // удалено в версии 4.11 setobjectstyle_: TProc; createtask2_: TProcSvN; setprocess_: TProcN; - currentversion_: TSFunc; // 4.10 - currenttest_: TNFunc; // 4.11 + currentversion_: TSFunc; // добавлено в версии 4.10 + currenttest_: TNFunc; // добавлено в версии 4.11 FHandle: integer; @@ -574,8 +574,8 @@ begin setobjectstyle_ := TProc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setobjectstyle'), typeof(TProc))); createtask2_ := TProcSvN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask2'), typeof(TProcSvN))); setprocess_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprocess'), typeof(TProcN))); - currentversion_ := TSFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion'), typeof(TSFunc))); // 4.10 - currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // 4.11 + currentversion_ := TSFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion'), typeof(TSFunc))); // добавлено в версии 4.10 + currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // добавлено в версии 4.11 end; //============================================================================= @@ -1100,7 +1100,7 @@ begin setobjectstyle_; end; -{ // 4.11 +{ // удалено в версии 4.11 procedure RegisterGroup(UnitName: string); begin registergroup_(PChar(UnitName)); diff --git a/TestSuite/CompilationSamples/PaintBoxDraw.pas b/TestSuite/CompilationSamples/PaintBoxDraw.pas index 126ada6ee..3f5e16280 100644 --- a/TestSuite/CompilationSamples/PaintBoxDraw.pas +++ b/TestSuite/CompilationSamples/PaintBoxDraw.pas @@ -32,13 +32,13 @@ begin end; var - Scale := new RealField(': '); + Scale := new RealField('Масштаб: '); l1 := new FlowBreak; dx := new IntegerField('dx: '); l2 := new FlowBreak; dy := new IntegerField('dy: '); l3 := new FlowBreak(20); - b := new Button(' '); + b := new Button(' Нарисовать '); p: PaintBox; @@ -60,7 +60,7 @@ begin end; begin - MainForm.Title := ' '; + MainForm.Title := 'Множество Мандельброта'; MainForm.SetSize(700, 600); MainPanel.Dock := Dockstyle.Left; MainPanel.Width := 120; diff --git a/TestSuite/CompilationSamples/Paporotnik.pas b/TestSuite/CompilationSamples/Paporotnik.pas index 6224d87c8..3d689e7a5 100644 --- a/TestSuite/CompilationSamples/Paporotnik.pas +++ b/TestSuite/CompilationSamples/Paporotnik.pas @@ -1,17 +1,17 @@ -/// " " +///Модуль для рисования фракталов семейства "Лист папоротника" unit Paporotnik; uses GraphABC; type - /// + ///Настройки фрактала PaporotnikFractalInitalData = record data: array of array of real; P0,P1,P2,P3:real; end; - /// " " + ///Фрактал "Лист папоротника" PaporotnikFractal = class private data: array of array of real; diff --git a/TestSuite/CompilationSamples/Paporotnik1.pas b/TestSuite/CompilationSamples/Paporotnik1.pas index 251b260b6..7bbe65202 100644 --- a/TestSuite/CompilationSamples/Paporotnik1.pas +++ b/TestSuite/CompilationSamples/Paporotnik1.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Папоротник +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -17,7 +17,7 @@ const dy = 130; begin - Window.Title := ': '; + Window.Title := 'Фракталы: папоротник'; SetWindowSize(800,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -38,5 +38,5 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSuite/CompilationSamples/PaporotnikData.pas b/TestSuite/CompilationSamples/PaporotnikData.pas index 6eb296f99..38069519a 100644 --- a/TestSuite/CompilationSamples/PaporotnikData.pas +++ b/TestSuite/CompilationSamples/PaporotnikData.pas @@ -1,10 +1,10 @@ -/// +///Константы задающие фракталы unit PaporotnikData; uses Paporotnik; var - /// + ///Папоротник с изогнутым листом PaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.0000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0400, -0.0400, 0.8500, 0, 1.6000), @@ -15,7 +15,7 @@ var P2: 7; P3: 7); - /// + ///Папоротник с прямым листом SimplePaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.00, 0.00, 0.00, 0.16, 0, 0.00), ( 0.85, 0.00, 0.00, 0.85, 0, 1.60), @@ -26,7 +26,7 @@ var P2: 7; P3: 7); - /// + ///Елка ElkaData: PaporotnikFractalInitalData := ( data: (( 0.1000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0000, 0.0000, 0.8500, 0, 1.6000), diff --git a/TestSuite/CompilationSamples/ParamsConcat.pas b/TestSuite/CompilationSamples/ParamsConcat.pas index 1050caa42..6f66ceed6 100644 --- a/TestSuite/CompilationSamples/ParamsConcat.pas +++ b/TestSuite/CompilationSamples/ParamsConcat.pas @@ -1,4 +1,4 @@ -// Concat +// Создание функции Concat с переменным числом параметров function Concat(params strs: array of string): string; begin diff --git a/TestSuite/CompilationSamples/ParamsWriteln.pas b/TestSuite/CompilationSamples/ParamsWriteln.pas index 42bc7aa32..e31fc4699 100644 --- a/TestSuite/CompilationSamples/ParamsWriteln.pas +++ b/TestSuite/CompilationSamples/ParamsWriteln.pas @@ -1,4 +1,4 @@ -// MyWriteln +// Создание процедуры MyWriteln с переменным числом параметров procedure MyWriteln(params args: array of object); begin diff --git a/TestSuite/CompilationSamples/Permutations.pas b/TestSuite/CompilationSamples/Permutations.pas index 00c712eba..a4be0ea84 100644 --- a/TestSuite/CompilationSamples/Permutations.pas +++ b/TestSuite/CompilationSamples/Permutations.pas @@ -1,4 +1,4 @@ -// +// Все перестановки uses Arrays; const n = 4; @@ -11,7 +11,7 @@ begin a.Writeln; for var i:=0 to m-1 do begin - Swap(a[i],a[m-1]); // + Swap(a[i],a[m-1]); // ставим каждый на место последнего Perm(m-1); Swap(a[i],a[m-1]); end; diff --git a/TestSuite/CompilationSamples/PersonExternal.pas b/TestSuite/CompilationSamples/PersonExternal.pas index 961250cb9..5d205a700 100644 --- a/TestSuite/CompilationSamples/PersonExternal.pas +++ b/TestSuite/CompilationSamples/PersonExternal.pas @@ -1,6 +1,6 @@ -// -// : -// , +// Описание методов вне интерфейса класса +// Удобство: интерфейс лучше виден +// Если класс описан в модуле, то реализация методов помещается в секцию реализации модуля type Person = class private @@ -19,12 +19,12 @@ end; procedure Person.Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; var p: Person; begin - p := new Person('',20); + p := new Person('Иванов',20); p.Print; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/PersonInternal.pas b/TestSuite/CompilationSamples/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/TestSuite/CompilationSamples/PersonInternal.pas +++ b/TestSuite/CompilationSamples/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Ping.pas b/TestSuite/CompilationSamples/Ping.pas index 59ec18f6c..269017b70 100644 --- a/TestSuite/CompilationSamples/Ping.pas +++ b/TestSuite/CompilationSamples/Ping.pas @@ -1,4 +1,4 @@ -// Ping +// Использование Ping uses System.Net.NetworkInformation; const address = 'www.yandex.ru'; @@ -7,8 +7,8 @@ begin var p := new Ping(); try var res := p.Send(address); - writeln('IP : ',res.Address); - writeln(' : ',res.RoundtripTime,' '); + writeln('IP адрес сервера: ',res.Address); + writeln('Время отклика: ',res.RoundtripTime,' мс'); except on e: Exception do write(e.Message); diff --git a/TestSuite/CompilationSamples/PointRect.pas b/TestSuite/CompilationSamples/PointRect.pas index 57c590a40..42861e809 100644 --- a/TestSuite/CompilationSamples/PointRect.pas +++ b/TestSuite/CompilationSamples/PointRect.pas @@ -1,5 +1,5 @@ unit PointRect; -// Pascal ABC +//Для совместимости с Pascal ABC end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Pointer1.pas b/TestSuite/CompilationSamples/Pointer1.pas index d2c232b76..3d041c74c 100644 --- a/TestSuite/CompilationSamples/Pointer1.pas +++ b/TestSuite/CompilationSamples/Pointer1.pas @@ -1,16 +1,16 @@ -// +// Типизированные указатели var i: integer := 5; j: integer := 3; p: ^integer; begin - writeln(' i j: ',i,' ',j); - p := @i; // p i, p i - writeln(' ',p,' ',p^); // p^ - , p + writeln('Исходные значения переменных i и j: ',i,' ',j); + p := @i; // в p записывается адрес i, p указывает на i + writeln('По адресу ',p,' находится значение ',p^); // p^ - то, на что указывает p p^ := 2; p := @j; - writeln(' ',p,' ',p^); + writeln('По адресу ',p,' находится значение ',p^); p^ += 1; - writeln(' i j: ',i,' ',j); + writeln('Новые значения переменных i и j: ',i,' ',j); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Pointer2.pas b/TestSuite/CompilationSamples/Pointer2.pas index d7a4734e4..f3006767d 100644 --- a/TestSuite/CompilationSamples/Pointer2.pas +++ b/TestSuite/CompilationSamples/Pointer2.pas @@ -1,6 +1,6 @@ -// -// , -// +// Бестиповые указатели +// Им можно присваивать любой адрес, но для использования необходимо +// явное приведение к типизированному указателю var i: integer := 5; r: real := 3.14; @@ -11,12 +11,12 @@ type preal = ^real; begin - writeln(' i r: '); + writeln('Исходные значения переменных i и r: '); writeln(i,' ',r); p := @i; pinteger(p)^ := 8; p := @r; preal(p)^ += 1; - writeln(' i r: '); + writeln('Новые значения переменных i и r: '); writeln(i,' ',r); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Pointer3.pas b/TestSuite/CompilationSamples/Pointer3.pas index 673bf7cfb..c7100897e 100644 --- a/TestSuite/CompilationSamples/Pointer3.pas +++ b/TestSuite/CompilationSamples/Pointer3.pas @@ -1,11 +1,11 @@ -// +// Выделение динамической памяти var p: ^real; begin - // p + // Выделили динамическую память и в p записали ее адрес New(p); p^ := 3; - writeln(' = ',p^); - // , p + writeln('Значение в динамичесской памяти = ',p^); + // Возврат динамической памяти, на оторую указывает p Dispose(p); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Pointer4.pas b/TestSuite/CompilationSamples/Pointer4.pas index 69194f83e..0faeeb6f0 100644 --- a/TestSuite/CompilationSamples/Pointer4.pas +++ b/TestSuite/CompilationSamples/Pointer4.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,7 +32,7 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin diff --git a/TestSuite/CompilationSamples/Proc1.pas b/TestSuite/CompilationSamples/Proc1.pas index 46c6d9d06..95f40b8a0 100644 --- a/TestSuite/CompilationSamples/Proc1.pas +++ b/TestSuite/CompilationSamples/Proc1.pas @@ -1,4 +1,4 @@ -// +// Параметры процедур procedure Operations(a,b: integer); begin diff --git a/TestSuite/CompilationSamples/Proc2.pas b/TestSuite/CompilationSamples/Proc2.pas index 58e44205f..498b595b6 100644 --- a/TestSuite/CompilationSamples/Proc2.pas +++ b/TestSuite/CompilationSamples/Proc2.pas @@ -1,4 +1,4 @@ -// - +// Параметры-переменные procedure DivMod(a,b: integer; var d,m: integer); begin diff --git a/TestSuite/CompilationSamples/Proc3.pas b/TestSuite/CompilationSamples/Proc3.pas index 11113aae9..ccbdb03a0 100644 --- a/TestSuite/CompilationSamples/Proc3.pas +++ b/TestSuite/CompilationSamples/Proc3.pas @@ -1,4 +1,4 @@ -// +// Упаковка параметров в запись uses GraphABC; type diff --git a/TestSuite/CompilationSamples/ProcParam.pas b/TestSuite/CompilationSamples/ProcParam.pas index d2708bbb0..5a77aa708 100644 --- a/TestSuite/CompilationSamples/ProcParam.pas +++ b/TestSuite/CompilationSamples/ProcParam.pas @@ -1,6 +1,6 @@ -// -// PascalABC.NET -// .NET +// Иллюстрация процедурных переменных как параметров подпрограмм +// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов +// Процедурный тип реализован через делегаты .NET procedure for_each(var a: array of real; p: procedure(var r: real)); var i: integer; begin diff --git a/TestSuite/CompilationSamples/ProcPointer1.pas b/TestSuite/CompilationSamples/ProcPointer1.pas index a41f8464e..2d54f9fb4 100644 --- a/TestSuite/CompilationSamples/ProcPointer1.pas +++ b/TestSuite/CompilationSamples/ProcPointer1.pas @@ -1,4 +1,4 @@ -// +// Процедурные переменные function add(a,b: integer): integer; begin @@ -15,7 +15,7 @@ var p: function (a,b: integer): integer; begin p := add; - writeln(' 2 3 ',p(2,3)); + writeln('Сумма 2 и 3 равна ',p(2,3)); p := mult; - writeln(' 2 3 ',p(2,3)); + writeln('Произведение 2 и 3 равно ',p(2,3)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ProcPointer2.pas b/TestSuite/CompilationSamples/ProcPointer2.pas index db0a05a81..2ba35543b 100644 --- a/TestSuite/CompilationSamples/ProcPointer2.pas +++ b/TestSuite/CompilationSamples/ProcPointer2.pas @@ -1,4 +1,4 @@ -// +// Процедурная переменная как параметр procedure for_each(a: array of real; p: procedure(var r: real)); begin for var i := 0 to a.Length-1 do @@ -18,10 +18,10 @@ end; var a: array of real := (1,2,3,6,7); begin - writeln(' : '); + writeln('Содержимое массива: '); for_each(a,print); writeln; for_each(a,mult2); - writeln(' 2: '); + writeln('Содержимое массива после умножения его элеметов на 2: '); for_each(a,print); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ProcVars.pas b/TestSuite/CompilationSamples/ProcVars.pas index b6d6dbce7..6a4e88dd5 100644 --- a/TestSuite/CompilationSamples/ProcVars.pas +++ b/TestSuite/CompilationSamples/ProcVars.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/TestSuite/CompilationSamples/Properties.pas b/TestSuite/CompilationSamples/Properties.pas index cb1b81fb1..aa6958bad 100644 --- a/TestSuite/CompilationSamples/Properties.pas +++ b/TestSuite/CompilationSamples/Properties.pas @@ -1,14 +1,14 @@ -// (properties) +// Свойства (properties) type - /// + /// Класс персоны Person = class private nm: string; ag: integer; - procedure SetAge(a: integer); // + procedure SetAge(a: integer); // Процедура доступа к свойству располагается обычно в приватной секции begin - if a<0 then // - a := 0; // , + if a<0 then // Перед установкой значения свойства мы можем сделать дополнительные проверки + a := 0; // и скорректировать значение свойства, либо сгенерировать исключение ag := a; end; public @@ -16,20 +16,20 @@ type begin nm := n; ag := a; end; - /// - property Name: string read nm; // Name nm - /// + /// Имя персоны + property Name: string read nm; // Свойство Name доступно только на чтение и возвращает значение поля nm + /// Возраст персоны property Age: integer read ag write SetAge; procedure Print; begin - writeln(': ',nm,' : ',ag); + writeln('Имя: ',nm,' Возраст: ',ag); end; end; -var p: Person := new Person('', 20); +var p: Person := new Person('Иванов', 20); begin - writeln(': ',p.Name); // Name , - - p.Age := -1; // : = 0 - writeln(': ',p.Age); + writeln('Имя: ',p.Name); // Менять Name нельзя, доступ - только на чтение + p.Age := -1; // Попытка изменения возраста на отрицательное значение приводит к корректировке: возраст становится = 0 + writeln('Возраст: ',p.Age); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/QuickSort.pas b/TestSuite/CompilationSamples/QuickSort.pas index 012c18004..9a778619a 100644 --- a/TestSuite/CompilationSamples/QuickSort.pas +++ b/TestSuite/CompilationSamples/QuickSort.pas @@ -1,10 +1,10 @@ -// . +// Быстрая сортировка Ч. Хоара uses ArrayLib; -/// +/// Быстрая сортировка procedure QuickSort(a: array of integer); -/// a[l]..a[r] a[l]..a[q] <= a[q+1]..a[r] +/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r] function Partition(l,r: integer): integer; begin var i := l - 1; @@ -28,7 +28,7 @@ procedure QuickSort(a: array of integer); end; end; -/// +/// Сортировка частей procedure sort(l,r: integer); begin if l>=r then exit; @@ -47,9 +47,9 @@ var a: array of integer; begin CreateRandom(a,n); - writeln(' : '); + writeln('До сортировки: '); WriteArray(a); QuickSort(a); - writeln(' : '); + writeln('После сортировки: '); WriteArray(a); end. diff --git a/TestSuite/CompilationSamples/RBDMUtils.pas b/TestSuite/CompilationSamples/RBDMUtils.pas index 9b402c470..16d9306e3 100644 --- a/TestSuite/CompilationSamples/RBDMUtils.pas +++ b/TestSuite/CompilationSamples/RBDMUtils.pas @@ -1,20 +1,20 @@ unit RBDMUtils; -// ( PT4TaskMaker) +// (недокументированные возможности PT4TaskMaker) interface -// -//taskname - RB DM ( ) +//Записывают в файл результатов информацию о выполненном задании для Робота или Чертежника +//taskname - имя задания без префикса RB и DM (префикс добавляется автоматически) procedure ResRB(taskname: string); procedure ResDM(taskname: string); -// regtasks.dat Lib -// -//Group - ( 1 7 , ), -//Description - ( -// , ), -//TaskCount - ( 1 999), -//Units - , ( ). -// Units , , -// Group, RB DM. +//Записывают в файл regtasks.dat в каталоге Lib информацию о новой группе заданий +//для Робота или Чертежника +//Group - имя группы (от 1 до 7 символов, без префиксов), +//Description - описание группы (первый символ автоматически преобразуется к нижнему +// регистру, так как описание указывается после двоеточия), +//TaskCount - число заданий в группе (от 1 до 999), +//Units - имя модуля, содержащего группу (используется в шаблоне). +// Если Units является пустой строкой, то считается, что имя модуля +// совпадает с именем группы Group, дополненным префиксом RB или DM. function RegisterRB(Group, Description: string; TaskCount: integer; Units: string): integer; function RegisterDM(Group, Description: string; TaskCount: integer; diff --git a/TestSuite/CompilationSamples/RBDMUtilsDemo.pas b/TestSuite/CompilationSamples/RBDMUtilsDemo.pas index b1c892ac8..aa913fd95 100644 --- a/TestSuite/CompilationSamples/RBDMUtilsDemo.pas +++ b/TestSuite/CompilationSamples/RBDMUtilsDemo.pas @@ -1,11 +1,11 @@ uses RBDMUtils; begin ResRB('a1'); - RegisterRB('DemoA',', , '+ - ' ( )',50,''); - RegisterRB('DemoB',' B',500,'Rob'); - RegisterDM('DemoB',' B',50,''); - // , - // PT4Results ( RBa1) - // PT4Load ( ) + RegisterRB('DemoA','Пример, показывающий, что описание группы может быть достаточно '+ + 'длинным (в этом случае включается возможность прокрутки текста)',50,''); + RegisterRB('DemoB','Задания группы B',500,'Rob'); + RegisterDM('DemoB','Задания группы B',50,''); + // После запуска этой программы можно сразу просмотреть результаты ее работы, + // вызвав модуль PT4Results (в нем будет информация о выполнении задания RBa1) + // или модуль PT4Load (в нем появятся сведения о новых наборах Робота и Чертежника) end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/RBa1.pas b/TestSuite/CompilationSamples/RBa1.pas index 5162e32a4..e7c59265c 100644 --- a/TestSuite/CompilationSamples/RBa1.pas +++ b/TestSuite/CompilationSamples/RBa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L RB +// Исполнитель Робот - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания uses Robot; begin diff --git a/TestSuite/CompilationSamples/RBcc17.pas b/TestSuite/CompilationSamples/RBcc17.pas index 4e40b2b95..59285e1a8 100644 --- a/TestSuite/CompilationSamples/RBcc17.pas +++ b/TestSuite/CompilationSamples/RBcc17.pas @@ -1,4 +1,4 @@ -// cc17 +// Выполнение задания cc17 для Робота uses Robot; begin diff --git a/TestSuite/CompilationSamples/Random1.pas b/TestSuite/CompilationSamples/Random1.pas index 1f982a093..e8738e012 100644 --- a/TestSuite/CompilationSamples/Random1.pas +++ b/TestSuite/CompilationSamples/Random1.pas @@ -1,13 +1,13 @@ -// +// Генерация случайного числа var i: integer; r: real; begin i := Random(100); - writeln(' 0..99: ',i); + writeln('Случайное целое в диапазоне 0..99: ',i); i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); r := Random; - writeln(' [0,1): ',r); + writeln('Случайное вещественное в диапазоне [0,1): ',r); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Random2.pas b/TestSuite/CompilationSamples/Random2.pas index 7e06c292a..edb94ebd9 100644 --- a/TestSuite/CompilationSamples/Random2.pas +++ b/TestSuite/CompilationSamples/Random2.pas @@ -1,10 +1,10 @@ -// +// Бросание кубиков var k1,k2: integer; begin k1 := Random(1,6); k2 := Random(1,6); - writeln(' : ',k1,' ',k2); - writeln(' : ',k1+k2); + writeln('Очки на кубиках: ',k1,' ',k2); + writeln('Сумма очков: ',k1+k2); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/RandomDiap.pas b/TestSuite/CompilationSamples/RandomDiap.pas index c12b560b5..7bea343d6 100644 --- a/TestSuite/CompilationSamples/RandomDiap.pas +++ b/TestSuite/CompilationSamples/RandomDiap.pas @@ -1,5 +1,5 @@ -// +// Генерация случайного числа в заданном диапазоне begin var i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ReadString.pas b/TestSuite/CompilationSamples/ReadString.pas index d3c73b506..a214b05b6 100644 --- a/TestSuite/CompilationSamples/ReadString.pas +++ b/TestSuite/CompilationSamples/ReadString.pas @@ -1,8 +1,8 @@ -// +// Ввод строки var s: string; begin - write(' : '); + write('Введите Ваше имя: '); readln(s); - writeln(', ',s); + writeln('Здравствуйте, ',s); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/RealExtNums.pas b/TestSuite/CompilationSamples/RealExtNums.pas index 4bf290727..5e099f699 100644 --- a/TestSuite/CompilationSamples/RealExtNums.pas +++ b/TestSuite/CompilationSamples/RealExtNums.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(1/0); writeln(sqrt(-1)); diff --git a/TestSuite/CompilationSamples/Rec1.pas b/TestSuite/CompilationSamples/Rec1.pas index ea1b45732..5b6b049e9 100644 --- a/TestSuite/CompilationSamples/Rec1.pas +++ b/TestSuite/CompilationSamples/Rec1.pas @@ -8,16 +8,16 @@ type procedure WritePerson(const p: Person); begin - writelnFormat(': {0} : {1} : {2} : {3}',p.Name,p.Sex,p.Age,p.Weight); + writelnFormat('Фамилия: {0} Пол: {1} Возраст: {2} Вес: {3}',p.Name,p.Sex,p.Age,p.Weight); end; var - p: Person := (Name: ''; Age: 20; Weight: 64; Sex: Male); + p: Person := (Name: 'Иванов'; Age: 20; Weight: 64; Sex: Male); p1: Person; begin - p1 := p; // + p1 := p; // Присваивание записей var p2: Person; - p2.Name := ''; + p2.Name := 'Петрова'; p2.Age := 18; p2.Weight := 50; p2.Sex := Female; @@ -26,7 +26,7 @@ begin var p3: Person; with p3 do begin - Name := ''; + Name := 'Сидоров'; Age := 24; Weight := 80; Sex := Male; diff --git a/TestSuite/CompilationSamples/Rec2.pas b/TestSuite/CompilationSamples/Rec2.pas index 26f54af7a..e95d97a88 100644 --- a/TestSuite/CompilationSamples/Rec2.pas +++ b/TestSuite/CompilationSamples/Rec2.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSuite/CompilationSamples/Records.pas b/TestSuite/CompilationSamples/Records.pas index 26f54af7a..e95d97a88 100644 --- a/TestSuite/CompilationSamples/Records.pas +++ b/TestSuite/CompilationSamples/Records.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSuite/CompilationSamples/Reference.pas b/TestSuite/CompilationSamples/Reference.pas index 42529cd9b..5dd358cd0 100644 --- a/TestSuite/CompilationSamples/Reference.pas +++ b/TestSuite/CompilationSamples/Reference.pas @@ -1,4 +1,4 @@ -// +// Использование ссылок вместо указателей для создания односвязного списка type Node = class data: integer; @@ -10,18 +10,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -29,6 +29,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Reflection.pas b/TestSuite/CompilationSamples/Reflection.pas index f9741e92f..99deddba5 100644 --- a/TestSuite/CompilationSamples/Reflection.pas +++ b/TestSuite/CompilationSamples/Reflection.pas @@ -1,4 +1,4 @@ -// . DateTime +// Отражение типов. Выводятся все члены типа DateTime uses System,System.Reflection; begin diff --git a/TestSuite/CompilationSamples/Robot.pas b/TestSuite/CompilationSamples/Robot.pas index 4c2bdbd8e..fbf7b3e1a 100644 --- a/TestSuite/CompilationSamples/Robot.pas +++ b/TestSuite/CompilationSamples/Robot.pas @@ -1,53 +1,53 @@ // Copyright (c) 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 Robot; interface -/// n (n=0..10) +/// Установить скорость Робота равной n (n=0..10) procedure Speed(n: integer); -/// +/// Переместить Робота вправо procedure Right; -/// +/// Переместить Робота влево procedure Left; -/// +/// Переместить Робота вверх procedure Up; -/// +/// Переместить Робота вниз procedure Down; -/// +/// Закрасить текущую ячейку procedure Paint; -/// True, - , False +/// Возвращает True, если справа от Робота - свободно, и False в противном случае function FreeFromRight: boolean; -/// True, - , False +/// Возвращает True, если слева от Робота - свободно, и False в противном случае function FreeFromLeft: boolean; -/// True, - , False +/// Возвращает True, если сверху от Робота - свободно, и False в противном случае function FreeFromUp: boolean; -/// True, - , False +/// Возвращает True, если снизу от Робота - свободно, и False в противном случае function FreeFromDown: boolean; -/// True, - , False +/// Возвращает True, если справа от Робота - стена, и False в противном случае function WallFromRight: boolean; -/// True, - , False +/// Возвращает True, если слева от Робота - стена, и False в противном случае function WallFromLeft: boolean; -/// True, - , False +/// Возвращает True, если сверху от Робота - стена, и False в противном случае function WallFromUp: boolean; -/// True, - , False +/// Возвращает True, если снизу от Робота - стена, и False в противном случае function WallFromDown: boolean; -/// True, , False +/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае function CellIsFree: boolean; -/// True, , False +/// Возвращает True, если текущая ячейка закрашена, и False в противном случае function CellIsPainted: boolean; -/// name +/// Вызывать задание с именем name procedure Task(name: string); -/// 9 11 +/// Создать пустое поле размера 9 на 11 клеток procedure StandardField; -/// n m +/// Создать пустое поле размера n на m клеток procedure Field(n,m: integer); -/// +/// Запустить Робота procedure Start; -/// +/// Остановить Робота procedure Stop; var @@ -170,7 +170,7 @@ end; procedure StandardField; var x,y: integer; begin - TaskText(' '); + TaskText('Стандартное поле'); x := 9; y := 7; RobotTaskMaker.Field(x,y); RobotBeginEnd(x div 2 + 1,y div 2 + 1,0,0); @@ -181,7 +181,7 @@ end; procedure Field(n,m: integer); begin - TaskText(' '+IntToStr(n)+'x'+IntToStr(m)); + TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m)); RobotTaskMaker.Field(n,m); RobotBeginEnd(n div 2 + 1,m div 2 + 1,0,0); CorrectFieldBounds; @@ -360,9 +360,9 @@ begin if TasksDictionary.ContainsKey(name) then TasksDictionary[name]() - else RobotError(name+' - ',' '); + else RobotError(name+' - нет такого задания для Робота','Задание отсутствует'); - // - + // Добавил - МА RobField.TaskName := name; // @@ -405,7 +405,7 @@ begin end; initialization - // + //необходимо инициализировать иначе она не восстановится __InitModule; finalization __FinalizeModule__ diff --git a/TestSuite/CompilationSamples/RobotField.pas b/TestSuite/CompilationSamples/RobotField.pas index e3065a018..582208013 100644 --- a/TestSuite/CompilationSamples/RobotField.pas +++ b/TestSuite/CompilationSamples/RobotField.pas @@ -43,9 +43,9 @@ type CellSize,DimX,DimY,X0,Y0: integer; procedure Draw0; procedure DrawFieldOnly; - procedure DrawCell(x,y: integer); { } + procedure DrawCell(x,y: integer); { нарисовать одну ячейку } public - // - + // Добавил - МА TaskName: string; // constructor Create(sizex,sizey,cellsize: integer); @@ -58,12 +58,12 @@ type property SizeY: integer read DimY; function IsSolution: boolean; procedure CheckTaskCall; - // + // примитивы для постановщика procedure DrawLastRobotPos; procedure DrawTag(x,y: integer); procedure SetDim(DX,DY,CellSz: integer); - procedure SetPaintMaker(x,y: integer); { - } - procedure SetTag(x,y: integer); { } + procedure SetPaintMaker(x,y: integer); { пометить ячейку как нарисованную - постановщик} + procedure SetTag(x,y: integer); { пометить ячейку как помеченную } procedure SetTagRect(x1,y1,x2,y2: integer); procedure SetFirstRobotPos(x,y: integer); procedure MoveRobotToFirstPos; @@ -72,11 +72,11 @@ type procedure HorizWall(x,y,len: integer); procedure VertWall(x,y,len: integer); procedure TaskText(s: string); - // + // примитивы для выполнителя procedure DrawRobot; procedure MoveRobot(x,y: integer); - procedure SetPaintUser(x,y: integer); { - } - procedure SetRobotPos(x,y: integer); // MoveRobot + procedure SetPaintUser(x,y: integer); { пометить ячейку как нарисованную - выполнитель} + procedure SetRobotPos(x,y: integer); // синоним MoveRobot function WallFromLeft(x,y: integer): boolean; function WallFromRight(x,y: integer): boolean; function WallFromUp(x,y: integer): boolean; @@ -157,7 +157,7 @@ var t: System.Threading.Thread; -//------------ ------------- +//------------ Вспомогательные ------------- procedure SetLabelStepText(s: string); begin labelStep.Text := s; @@ -406,8 +406,8 @@ begin DrawCell(vx,vy); DrawCell(x,y); Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); -// labelStep.Invoke(SetLabelStepText,': ' + IntToStr(movenum)); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); +// labelStep.Invoke(SetLabelStepText,'Шаг: ' + IntToStr(movenum)); end; procedure TRobotField.SetRobotPos(x,y: integer); @@ -484,7 +484,7 @@ end; procedure TRobotField.CheckTaskCall; begin if not TaskIsCalled then - RobotError(' Task ',' '); + RobotError('Процедура Task вызова задания должна быть первой','Выполнение программы прервано'); end; procedure TRobotField.Right; @@ -492,7 +492,7 @@ begin CheckTaskCall; if not WallFromRight then MoveRobot(RobotX+1,RobotY) - else RobotError(': '); + else RobotError('Робот: врезался в правую стену'); end; procedure TRobotField.Left; @@ -500,7 +500,7 @@ begin CheckTaskCall; if not WallFromLeft then MoveRobot(RobotX-1,RobotY) - else RobotError(': '); + else RobotError('Робот: врезался в левую стену'); end; procedure TRobotField.Up; @@ -508,7 +508,7 @@ begin CheckTaskCall; if not WallFromUp then MoveRobot(RobotX,RobotY-1) - else RobotError(': '); + else RobotError('Робот: врезался в верхнюю стену'); end; procedure TRobotField.Down; @@ -516,15 +516,15 @@ begin CheckTaskCall; if not WallFromDown then MoveRobot(RobotX,RobotY+1) - else RobotError(': '); + else RobotError('Робот: врезался в нижнюю стену'); end; procedure TRobotField.Paint; begin CheckTaskCall; Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); -// labelStep.Text := ': ' + IntToStr(movenum); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); +// labelStep.Text := 'Шаг: ' + IntToStr(movenum); SetPaintUser(RobotX,RobotY); DrawCell(RobotX,RobotY); end; @@ -591,14 +591,14 @@ end; procedure TRobotField.Stop; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; buttonStep.Enabled := True; t.Suspend; end; procedure TRobotField.Start; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Стоп (Enter)'; buttonStep.Enabled := False; t.Resume; end; @@ -644,7 +644,7 @@ begin Result := ID; end; -//--------- +//--------- Интерфейс и обработчики procedure LoadIni(var settings: IniSettings); var Ini: TIniFile; begin @@ -712,13 +712,13 @@ begin if t.ThreadState = System.Threading.ThreadState.Suspended then begin robField.StepFlag := False; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Выполняю задание'; robField.Start; end else begin robField.StepFlag := True; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Остановился'; robField.Stop; end; (GraphABCControl as Control).Focus; @@ -729,33 +729,33 @@ begin robField.StepFlag := True; t.Resume; (GraphABCControl as Control).Focus; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Команда выполнена'; end; procedure buttonHelpClick(o: Object; e: EventArgs); begin - MessageBox.Show(' : .., 2002-07 '#10#13#10#13+ - ' :'#10#13+ - ' Right - '#10#13+ - ' Left - '#10#13 - ' Up - '#10#13+ - ' Down - '#10#13 - ' Paint - '#10#13 - ' Speed(n) - n (n=0..10)'#10#13 - ' Stop - '#10#13 - ' Start - '#10#13#10#13 - ', :'#10#13 - ' WallFromRight - '#10#13 - ' WallFromLeft - ;'#10#13 - ' WallFromUp - ;'#10#13 - ' WallFromDown - ;'#10#13 - ' FreeFromRight - ;'#10#13 - ' FreeFromLeft - ;'#10#13 - ' FreeFromUp - ;'#10#13 - ' FreeFromDown - ;'#10#13 - ' CellIsPainted - ;'#10#13 - ' CellIsFree - .'#10#13, - ' - '); + MessageBox.Show('Разработчик исполнителя Робот: Михалкович С.С., 2002-07 '#10#13#10#13+ + 'Команды исполнителя Робот:'#10#13+ + ' Right - вправо'#10#13+ + ' Left - влево'#10#13 + ' Up - вверх'#10#13+ + ' Down - вниз'#10#13 + ' Paint - закрасить текущую клетку'#10#13 + ' Speed(n) - установить скорость n (n=0..10)'#10#13 + ' Stop - остановить Робота'#10#13 + ' Start - запустить Робота'#10#13#10#13 + 'Условия, проверяемые исполнителем Робот:'#10#13 + ' WallFromRight - справа стена'#10#13 + ' WallFromLeft - слева стена;'#10#13 + ' WallFromUp - сверху стена;'#10#13 + ' WallFromDown - снизу стена;'#10#13 + ' FreeFromRight - справа свободно;'#10#13 + ' FreeFromLeft - слева свободно;'#10#13 + ' FreeFromUp - сверху свободно;'#10#13 + ' FreeFromDown - снизу свободно;'#10#13 + ' CellIsPainted - клетка закрашена;'#10#13 + ' CellIsFree - клетка не закрашена.'#10#13, + 'Исполнитель Робот - Справка'); (GraphABCControl as Control).Focus; end; @@ -851,7 +851,7 @@ begin buttonHelp.Location := new Point(359, 18); buttonHelp.Size := new Size(107, 24); buttonHelp.TabStop := false; - buttonHelp.Text := ' (F1)'; + buttonHelp.Text := 'Справка (F1)'; // buttonHelp.UseVisualStyleBackColor := true; // // buttonExit @@ -860,7 +860,7 @@ begin buttonExit.Location := new System.Drawing.Point(241, 18); buttonExit.Size := new System.Drawing.Size(107, 24); buttonExit.TabStop := false; - buttonExit.Text := ' (Esc)'; + buttonExit.Text := 'Выход (Esc)'; // buttonExit.UseVisualStyleBackColor := true; // // buttonStep @@ -869,7 +869,7 @@ begin buttonStep.Location := new Point(123, 18); buttonStep.Size := new Size(107, 24); buttonStep.TabStop := false; - buttonStep.Text := ' (Space)'; + buttonStep.Text := 'Шаг (Space)'; // buttonStep.UseVisualStyleBackColor := true; // // buttonStart @@ -878,7 +878,7 @@ begin buttonStart.Location := new Point(5, 18); buttonStart.Size := new Size(107, 24); buttonStart.TabStop := false; - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; // buttonStart.UseVisualStyleBackColor := true; // // tableLayoutPanelBottom @@ -904,7 +904,7 @@ begin labelExState.Location := new Point(5, 2); labelExState.Margin := new Padding(3, 0, 3, 3); labelExState.Size := new Size(453, 15); - labelExState.Text := ': '; + labelExState.Text := 'Робот: Готов'; labelExState.TextAlign := ContentAlignment.MiddleCenter; // // groupBoxExState @@ -936,7 +936,7 @@ begin labelState.Location := new Point(6, 54); labelState.Margin := new Padding(0); labelState.Size := new Size(83, 17); - labelState.Text := ':'; + labelState.Text := 'Состояние:'; // // labelStep // @@ -945,7 +945,7 @@ begin labelStep.ForeColor := System.Drawing.Color.Black; labelStep.Location := new Point(130, 54); labelStep.Size := new Size(66, 18); - labelStep.Text := ': 0'; + labelStep.Text := 'Шаг: 0'; labelStep.TextAlign := ContentAlignment.MiddleLeft; // // trackBarSpeed @@ -962,7 +962,7 @@ begin labelSpeed.Location := new Point(6, 16); labelSpeed.Margin := new Padding(0); labelSpeed.Size := new Size(73, 17); - labelSpeed.Text := ':'; + labelSpeed.Text := 'Скорость:'; // // tableLayoutPanelTop // @@ -988,7 +988,7 @@ begin labelZad.Location := new Point(6, 3); labelZad.Margin := new Padding(4, 1, 3, 0); labelZad.Size := new Size(668, 14); - labelZad.Text := ''; + labelZad.Text := 'Задание'; labelZad.TextAlign := ContentAlignment.MiddleLeft; // // ExecutorForm @@ -998,7 +998,7 @@ begin MainForm.Controls.Add(tableLayoutPanelTop); MainForm.Controls.Add(BottomPanel); MainForm.MinimumSize := new Size(687, 240); - MainForm.Text := ' '; + MainForm.Text := 'Исполнитель Робот'; BottomPanel.ResumeLayout(false); panelBottomLeft.ResumeLayout(false); tableLayoutPanelBottom.ResumeLayout(false); @@ -1049,7 +1049,7 @@ begin MainForm.Bounds := rec; end; -// - +// Добавил - МА procedure ResRB(TaskName: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'resrb'; // @@ -1059,21 +1059,21 @@ begin buttonStart.Enabled := False; buttonStep.Enabled := False; if (robField.DimX*robField.DimY=0) then - RobotError(': Task',' ') + RobotError('Робот: Не вызвана процедура Task','Задание отсутствует') else if robField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Text := ': '; - // - + labelExState.Text := 'Робот: Задание выполнено'; + // Добавил - МА try ResRB(robField.TaskName); except end; // end - else labelExState.Text := ': , '; + else labelExState.Text := 'Робот: Работа окончена, задание не выполнено'; end; var @@ -1150,14 +1150,14 @@ finalization {buttonStart.Enabled := False; buttonStep.Enabled := False; if (robField.DimX*robField.DimY=0) then - RobotError(': Task',' ') + RobotError('Робот: Не вызвана процедура Task','Задание отсутствует') else if robField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Задание выполнено'; end - else labelExState.Text := ': , ';} + else labelExState.Text := 'Робот: Работа окончена, задание не выполнено';} __FinalizeModule; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/RobotZadan.pas b/TestSuite/CompilationSamples/RobotZadan.pas index 11629d802..f4eb6baac 100644 --- a/TestSuite/CompilationSamples/RobotZadan.pas +++ b/TestSuite/CompilationSamples/RobotZadan.pas @@ -181,7 +181,7 @@ end; procedure a1; begin - TaskText(' a1. '); + TaskText('Задание a1. Закрасить помеченные клетки'); Field(7,4); RobotBeginEnd(2,2,1,1); HorizontalWall(1,1,5); @@ -191,7 +191,7 @@ end; procedure a2; var n: integer; begin - TaskText(' a2. '); + TaskText('Задание a2. Закрасить помеченные клетки'); n:=3; Field(n,n); RobotBeginEnd(1,1,1,1); @@ -203,7 +203,7 @@ end; procedure a3; begin - TaskText(' a3. '); + TaskText('Задание a3. Закрасить помеченные клетки'); Field(4,2); RobotBeginEnd(1,1,4,1); TagRect(1,1,4,2); @@ -214,7 +214,7 @@ end; procedure a4; begin - TaskText(' a4. '); + TaskText('Задание a4. Закрасить помеченные клетки'); Field(4,3); RobotBeginEnd(1,3,1,3); Tag(2,3);Tag(3,3);Tag(4,3); @@ -225,14 +225,14 @@ end; procedure c1; begin - TaskText(' c1. '); + TaskText('Задание c1. Дойти до правой клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); end; procedure c2; begin - TaskText(' c2. '); + TaskText('Задание c2. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(1,1,10,1); @@ -240,7 +240,7 @@ end; procedure c3; begin - TaskText(' c3. '); + TaskText('Задание c3. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(2,1,11,1); @@ -248,7 +248,7 @@ end; procedure c4; begin - TaskText(' c4. '); + TaskText('Задание c4. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(1,1,11,1); @@ -257,7 +257,7 @@ end; procedure c5; var i: integer; begin - TaskText(' c5. '); + TaskText('Задание c5. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(1,1,11,11); for i:=1 to 10 do @@ -267,7 +267,7 @@ end; procedure c6; var i: integer; begin - TaskText(' c6. '); + TaskText('Задание c6. Закрасить помеченные клетки'); Field(17,1); RobotBeginEnd(17,1,17,1); for i:=1 to 8 do @@ -277,7 +277,7 @@ end; procedure c7; var i: integer; begin - TaskText(' c7. '); + TaskText('Задание c7. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(2,1,11,2); @@ -291,7 +291,7 @@ end; procedure c8; var i: integer; begin - TaskText(' c8. '); + TaskText('Задание c8. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(1,1,11,1); @@ -302,7 +302,7 @@ end; procedure c9; var i: integer; begin - TaskText(' c9. '); + TaskText('Задание c9. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,2,11,2); for i:=1 to 5 do @@ -314,7 +314,7 @@ end; procedure c10; begin - TaskText(' c10. '); + TaskText('Задание c10. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,1,1,2); TagRect(1,1,10,2); @@ -323,7 +323,7 @@ end; procedure c11; begin - TaskText(' c11. '); + TaskText('Задание c11. Закрасить помеченные клетки'); Field(10,2); RobotBeginEnd(10,1,10,2); HorizontalWall(2,1,9); @@ -332,7 +332,7 @@ end; procedure c12; begin - TaskText(' c12. '); + TaskText('Задание c12. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(6,1,6,1); TagRect(1,1,11,1); @@ -340,7 +340,7 @@ end; procedure c13; begin - TaskText(' c13. '); + TaskText('Задание c13. Закрасить помеченные клетки'); Field(9,9); RobotBeginEnd(9,1,9,1); TagRect(1,1,9,1); @@ -351,7 +351,7 @@ end; procedure c14; begin - TaskText(' c14. '); + TaskText('Задание c14. Закрасить помеченные клетки'); Field(9,9); RobotBeginEnd(1,5,1,5); Tag(5,1); Tag(4,2); Tag(3,3); Tag(2,4); @@ -362,7 +362,7 @@ end; procedure c15; begin - TaskText(' c15. '); + TaskText('Задание c15. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(6,6,6,6); TagRect(6,1,6,11); @@ -372,7 +372,7 @@ end; procedure c16; var i: integer; begin - TaskText(' c16. '); + TaskText('Задание c16. Закрасить помеченные клетки'); Field(12,3); RobotBeginEnd(2,2,2,2); TagRect(2,2,11,2); @@ -389,7 +389,7 @@ end; procedure if1; var r: integer; begin - TaskText(' if1. '); + TaskText('Задание if1. Обойти препятствие и закрасить клетку'); Field(5,5); RobotBeginEnd(2,3,4,3); Tag(4,3); @@ -410,7 +410,7 @@ end; procedure if2; var r1,r2,r3,r4: integer; begin - TaskText(' if2. ( , , )'); + TaskText('Задание if2. Закрасить клетки у стен (стены могут быть независимо слева, справа, сверху и снизу)'); Field(5,5); RobotBeginEnd(3,3,3,3); r1:=random(2); @@ -443,7 +443,7 @@ end; procedure if3; var n,r: integer; begin - TaskText(' if3. ( )'); + TaskText('Задание if3. Закрасить клетку в противоположном углу (Робот может находиться в любом из углов)'); n:=2; Field(n,n); r:=random(4); @@ -476,7 +476,7 @@ end; procedure if4; var r: integer; begin - TaskText(' if4. , ( , , )'); + TaskText('Задание if4. Закрасить клетку, противоположную стене (стена может располагаться слева, справа, сверху или снизу)'); Field(5,5); RobotBegin(3,3); r:=random(4); @@ -509,7 +509,7 @@ end; procedure if5; var r: integer; begin - TaskText(' if5. ( , , )'); + TaskText('Задание if5. Закрасить клетки в зависимости от наличия стены (стена может располагаться слева, справа, сверху или снизу)'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -542,7 +542,7 @@ end; procedure if6; var r: integer; begin - TaskText(' if6. , ( , , )'); + TaskText('Задание if6. Закрасить клетку, противоположную закрашенной (закрашенная клетка может находиться слева, справа, сверху или снизу)'); Field(5,5); RobotBegin(3,3); r:=random(4); @@ -575,7 +575,7 @@ end; procedure if7; var r: integer; begin - TaskText(' if7. , '); + TaskText('Задание if7. Закрасить клетку, противоположную углу'); Field(4,4); r:=random(4); if r=0 then @@ -611,7 +611,7 @@ end; procedure if8; var r1,r2: integer; begin - TaskText(' if8. , if'); + TaskText('Задание if8. Закрасить клетки, используя вложенные операторы if'); Field(6,6); RobotBeginEnd(2,2,3,3); r1:=random(2); @@ -653,7 +653,7 @@ end; procedure if9; var r: integer; begin - TaskText(' if9. '); + TaskText('Задание if9. Закрасить клетки в зависимости от наличия стен слева и справа'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -683,7 +683,7 @@ end; procedure if10; var r: integer; begin - TaskText(' if10. '); + TaskText('Задание if10. Закрасить клетки в зависимости от наличия закрашенных клеток слева и справа'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -710,7 +710,7 @@ end; procedure if11; var r: integer; begin - TaskText(' if11. '); + TaskText('Задание if11. Закрасить первую незакрашенную клетку справа'); Field(5,5); RobotBeginEnd(2,2,4,2); r:=random(3); @@ -734,7 +734,7 @@ end; procedure w1; var n: integer; begin - TaskText(' w1. '); + TaskText('Задание w1. Пройти коридор переменной длины'); n:=random(7)+8; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -743,7 +743,7 @@ end; procedure w2; var n: integer; begin - TaskText(' w2. '); + TaskText('Задание w2. Закрасить коридор переменной длины'); n:=random(7)+8; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -753,7 +753,7 @@ end; procedure w3; var n: integer; begin - TaskText(' w3. '); + TaskText('Задание w3. Дойти до конца стены переменной длины'); n:=random(8)+3; Field(12,3); RobotBeginEnd(1,1,n+1,1); @@ -763,7 +763,7 @@ end; procedure w4; var n,i: integer; begin - TaskText(' w4. '); + TaskText('Задание w4. Дойти до конца закрашенного ряда переменной длины'); n:=random(7)+3; Field(10,3); RobotBeginEnd(2,2,n+1,2); @@ -774,7 +774,7 @@ end; procedure w5; var n,m,i,j: integer; begin - TaskText(' w5. '); + TaskText('Задание w5. Дойти до правого нижнего угла закрашенного прямоугольника переменного размера'); n:=random(7)+3; m:=random(6)+3; Field(10,9); @@ -787,7 +787,7 @@ end; procedure w6; var n,m: integer; begin - TaskText(' w6. '); + TaskText('Задание w6. Найти в стене проход и попасть в правый нижний угол'); n:=random(7)+2; m:=random(12)+2; Field(15,10); @@ -799,7 +799,7 @@ end; procedure w7; var n,m,k: integer; begin - TaskText(' w7. . , - '); + TaskText('Задание w7. Дойти до третьей закрашенной клетки. После первой закрашенной клетки надо идти вверх, после второй - вправо'); n:=random(7)+2; m:=random(7)+1; k:=random(7)+1; @@ -813,7 +813,7 @@ end; procedure w8; var n1,n2,len: integer; begin - TaskText(' w8. '); + TaskText('Задание w8. Закрасить все клетки над стеной переменной длины'); n1:=random(3)+2; n2:=n1+random(4); len:=random(5)+4; @@ -826,7 +826,7 @@ end; procedure w9; var n: integer; begin - TaskText(' w9. '); + TaskText('Задание w9. Перепрыгнуть стену с закрашиванием'); n:=random(7)+2; Field(15,10); RobotBeginEnd(7,10,8,10); @@ -837,7 +837,7 @@ end; procedure w10; var n1,n2,r1,r2: integer; begin - TaskText(' w10. '); + TaskText('Задание w10. Обойти препятствия'); n1:=random(7)+2; n2:=random(7)+2; r1:=4+random(3); @@ -853,7 +853,7 @@ end; procedure w11; var n1,len: integer; begin - TaskText(' w11. '); + TaskText('Задание w11. Закрасить все клетки вокруг стены'); n1:=random(3)+3; len:=random(5)+4; Field(15,5); @@ -865,7 +865,7 @@ end; procedure w12; var n1,n2,len1,len2: integer; begin - TaskText(' w12. '); + TaskText('Задание w12. Закрасить все клетки вокруг прямоугольника'); n1:=random(3)+3; len1:=random(5)+4; n2:=random(3)+3; @@ -885,7 +885,7 @@ end; procedure w13; var n,i,m: integer; begin - TaskText(' w13. , '); + TaskText('Задание w13. Подняться до клетки, имеющей проход налево или проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); @@ -909,7 +909,7 @@ end; procedure w14; var n,m,i: integer; begin - TaskText(' w14. , '); + TaskText('Задание w14. Подняться до клетки, имеющей проход налево и проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); VerticalWall(3,9,2); @@ -934,7 +934,7 @@ end; procedure w15; var n,z,i: integer; begin - TaskText(' w15. , '); + TaskText('Задание w15. Закрасить клетку под первой закрашенной клеткой, под которой свободно'); Field(15,5); RobotBegin(2,3); HorizontalWall(2,3,2); @@ -963,7 +963,7 @@ end; procedure w16; var n,i: integer; begin - TaskText(' w16. '); + TaskText('Задание w16. Идти до конца забора переменной длины'); n:=random(6)+8; Field(15,5); RobotBeginEnd(2,3,n+1,3); @@ -974,7 +974,7 @@ end; procedure w17; var n,i: integer; begin - TaskText(' w17. '); + TaskText('Задание w17. Идти до конца забора переменной длины'); n:=random(6)+1; Field(15,5); RobotBeginEnd(2,3,2*n+1,3); @@ -985,7 +985,7 @@ end; procedure cif1; var n,i,r: integer; begin - TaskText(' cif1. '); + TaskText('Задание cif1. Закрасить все клетки под стенами'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1004,7 +1004,7 @@ end; procedure cif2; var n,i,r: integer; begin - TaskText(' cif2. '); + TaskText('Задание cif2. Закрасить помеченные клетки'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1028,7 +1028,7 @@ end; procedure cif3; var n,i,r: integer; begin - TaskText(' cif3. '); + TaskText('Задание cif3. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1052,7 +1052,7 @@ end; procedure cif4; var n,i,r1,r2: integer; begin - TaskText(' cif4. '); + TaskText('Задание cif4. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1073,7 +1073,7 @@ end; procedure cif5; var n,i,r1,r2: integer; begin - TaskText(' cif5. '); + TaskText('Задание cif5. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1094,7 +1094,7 @@ end; procedure cif6; var n,i,r1,r2: integer; begin - TaskText(' cif6. '); + TaskText('Задание cif6. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1114,7 +1114,7 @@ end; procedure cif7; var n,i,r1,r2: integer; begin - TaskText(' cif7. , '); + TaskText('Задание cif7. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1135,7 +1135,7 @@ end; procedure cif8; var n,i,r1,r2: integer; begin - TaskText(' cif8. , '); + TaskText('Задание cif8. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1159,7 +1159,7 @@ end; procedure cif9; var n,i,r1,r2: integer; begin - TaskText(' cif9. , '); + TaskText('Задание cif9. Закрасить помеченные клетки, используя три условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1183,7 +1183,7 @@ end; procedure cif10; var n,i,r1,r2,r3: integer; begin - TaskText(' cif10. '); + TaskText('Задание cif10. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1207,7 +1207,7 @@ end; procedure cif11; var n,i,r1,r2,r3: integer; begin - TaskText(' cif11. , and'); + TaskText('Задание cif11. Закрасить помеченные клетки, используя в условии две операции and'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1231,7 +1231,7 @@ end; procedure cif12; var n,i,r1,r2,r3: integer; begin - TaskText(' cif12. , and or'); + TaskText('Задание cif12. Закрасить помеченные клетки, используя в условии операции and и or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1255,7 +1255,7 @@ end; procedure cif13; var n,i,r2,r3: integer; begin - TaskText(' cif13. , and or'); + TaskText('Задание cif13. Закрасить помеченные клетки, используя в условии две операции and и одну or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1276,7 +1276,7 @@ end; procedure cif14; var n,i,r2,r3: integer; begin - TaskText(' cif14. , '); + TaskText('Задание cif14. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; Field(n,4); RobotBeginEnd(1,2,n-1,2); @@ -1298,7 +1298,7 @@ end; procedure cif15; var n,i,r2,r3: integer; begin - TaskText(' cif15. , '); + TaskText('Задание cif15. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1320,7 +1320,7 @@ end; procedure cif16; var n: integer; begin - TaskText(' cif16. '); + TaskText('Задание cif16. Перейти в противоположный угол'); Field(9,9); n:=random(4); if n=0 then @@ -1336,7 +1336,7 @@ end; procedure cif17; var n,m,s: integer; begin - TaskText(' cif17. ( )'); + TaskText('Задание cif17. Дойти до конца тупика переменного размера (вертикальный коридор может сворачивать направо или налево)'); Field(15,10); RobotBeginEnd(8,10,8,1); n:=random(9)+2; @@ -1365,7 +1365,7 @@ end; procedure cif18; var n,c,i: integer; begin - TaskText(' cif18. '); + TaskText('Задание cif18. Перейти в конец более короткого ряда'); Field(15,4); RobotBegin(2,2); c:=random(2); @@ -1389,7 +1389,7 @@ end; procedure cif19; var n1,n2: integer; begin - TaskText(' cif19. '); + TaskText('Задание cif19. Перейти в конец более короткой стены'); Field(15,4); RobotBegin(2,3); n1:=random(9)+4; @@ -1406,7 +1406,7 @@ end; procedure cif20; var n1,n2: integer; begin - TaskText(' cif20. '); + TaskText('Задание cif20. Перейти в конец более длинной стены'); Field(15,4); RobotBegin(2,3); n1:=random(9)+4; @@ -1423,7 +1423,7 @@ end; procedure cif21; var n,m,c: integer; begin - TaskText(' cif21. '); + TaskText('Задание cif21. Перейти на вторую закрашенную клетку'); Field(15,8); RobotBegin(8,2); c:=random(2); @@ -1446,7 +1446,7 @@ end; procedure cif22; var n1,n2,n,m,c: integer; begin - TaskText(' cif22. '); + TaskText('Задание cif22. Найти выход и переместиться в левую верхнюю клетку поля '); Field(15,5); n1:=random(3)+2; n2:=random(10)+5; @@ -1486,7 +1486,7 @@ end; procedure count1; var n: integer; begin - TaskText(' count1. , . -'); + TaskText('Задание count1. Дойти до правой стены, закрасить клетку и вернуться. Использовать переменную-счетчик'); Field(10,5); n:=random(7)+3; RobotBeginEnd(n,3,n,3); @@ -1496,7 +1496,7 @@ end; procedure count2; var n1,n2,m: integer; begin - TaskText(' count2. . '); + TaskText('Задание count2. Закрасить правый нижний угол и вернуться. Использовать два счетчика'); m:=8; Field(m,m); n1:=random(6)+2; @@ -1508,7 +1508,7 @@ end; procedure count3; var n1,n2,m,t,i: integer; begin - TaskText(' count3. , '); + TaskText('Задание count3. Переместить Робота в клетку, симметричную относительно диагонали'); m:=10; Field(m,m); n1:=random(7)+2; @@ -1529,7 +1529,7 @@ end; procedure count4; var n1,n2: integer; begin - TaskText(' count4. '); + TaskText('Задание count4. Обойти стену переменной длины'); Field(10,4); n1:=random(5)+4; n2:=random(4)+1; @@ -1540,7 +1540,7 @@ end; procedure count5; var n,m,n1,m1: integer; begin - TaskText(' count5. '); + TaskText('Задание count5. Закрасить периметр и вернуться назад'); n:=random(3)+8; m:=random(3)+8; Field(n,m); @@ -1556,7 +1556,7 @@ end; procedure count6; var n,m: integer; begin - TaskText(' count6. '); + TaskText('Задание count6. Переместиться к ближайшей стене'); Field(15,5); RobotBegin(8,3); n:=random(5)+2; @@ -1573,7 +1573,7 @@ end; procedure count7; var n,l,r: integer; begin - TaskText(' count7. ( )'); + TaskText('Задание count7. Обойти стену переменной длины (перегородка нахоится слева или справа)'); Field(16,4); n:=random(3)+2; l:=random(12)+1; @@ -1589,7 +1589,7 @@ end; procedure count8; var i,r,cc: integer; begin - TaskText(' count8. '); + TaskText('Задание count8. Остановиться на пятой закрашенной клетке'); Field(21,3); RobotBeginEnd(2,2,1,2); cc:=0; @@ -1616,7 +1616,7 @@ end; procedure count9; var cc,i,r: integer; begin - TaskText(' count9. '); + TaskText('Задание count9. Остановиться на третьей закрашенной подряд клетке'); Field(20,3); RobotBeginEnd(2,2,1,2); cc:=0; @@ -1646,7 +1646,7 @@ end; procedure count10; var n,m: integer; begin - TaskText(' count10. , '); + TaskText('Задание count10. Закрасить клетки до конца нижней стены, но не менее пяти'); Field(11,3); n:=random(9)+1; if n<5 then @@ -1660,7 +1660,7 @@ end; procedure count11; var n: integer; begin - TaskText(' count11. 4, '); + TaskText('Задание count11. Если длина тупика больше 4, то закрасить его первую клетку'); Field(11,3); n:=random(9)+1; RobotBeginEnd(1,2,2,2); @@ -1674,7 +1674,7 @@ end; procedure count12; var n,i: integer; begin - TaskText(' count12. '); + TaskText('Задание count12. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1685,7 +1685,7 @@ end; procedure count13; var n,i: integer; begin - TaskText(' count13. '); + TaskText('Задание count13. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1696,7 +1696,7 @@ end; procedure count14; var n,i: integer; begin - TaskText(' count14. '); + TaskText('Задание count14. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1707,7 +1707,7 @@ end; procedure count15; var n,i: integer; begin - TaskText(' count15. '); + TaskText('Задание count15. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1718,7 +1718,7 @@ end; procedure count16; var n,i,f,z: integer; begin - TaskText(' count16. '); + TaskText('Задание count16. Закрасить все нечетные пролеты между закрашенными клетками'); Field(25,3); RobotBeginEnd(2,2,25,2); n:=2+random(5); @@ -1748,7 +1748,7 @@ end; procedure count17; var n,i,f: integer; begin - TaskText(' count17. , '); + TaskText('Задание count17. Остановиться на первой клетке, нарушающей закономерность'); Field(25,3); n:=random(20)+4; RobotBeginEnd(2,2,n,2); @@ -1769,7 +1769,7 @@ end; procedure cc1; var i: integer; begin - TaskText(' cc1. , '); + TaskText('Задание cc1. Закрасить помеченные клетки, используя вложенные циклы'); Field(31,7); RobotBeginEnd(1,1,31,7); for i:=1 to 6 do @@ -1779,7 +1779,7 @@ end; procedure cc2; var a,b,i: integer; begin - TaskText(' cc2. , '); + TaskText('Задание cc2. Закрасить помеченные клетки, используя вложенные циклы'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; @@ -1795,7 +1795,7 @@ end; procedure cc3; var a,b,i: integer; begin - TaskText(' cc3. , downto'); + TaskText('Задание cc3. Закрасить помеченные клетки, используя вложенный цикл с downto'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; @@ -1811,7 +1811,7 @@ end; procedure cc4; var i: integer; begin - TaskText(' cc4. , '); + TaskText('Задание cc4. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(11,10); RobotBeginEnd(1,1,1,10); TagRect(1,1,11,9); @@ -1822,7 +1822,7 @@ end; procedure cc5; var i: integer; begin - TaskText(' cc5. , '); + TaskText('Задание cc5. Пройти лабиринт, используя во внешнем цикле два вложенных цикла'); Field(14,9); RobotBeginEnd(1,1,1,9); for i:=1 to 4 do @@ -1835,7 +1835,7 @@ end; procedure cc6; var i,n,j: integer; begin - TaskText(' cc6. '); + TaskText('Задание cc6. Закрасить помеченные клетки'); n:=10; Field(20,n); RobotBeginEnd(1,n,20,n); j:=1; @@ -1849,7 +1849,7 @@ end; procedure cc7; var i: integer; begin - TaskText(' cc7. , '); + TaskText('Задание cc7. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(1,1,1,10); for i:=1 to 9 do @@ -1859,7 +1859,7 @@ end; procedure cc8; var i: integer; begin - TaskText(' cc8. , downto'); + TaskText('Задание cc8. Закрасить помеченные клетки, используя цикл с downto'); Field(10,10); RobotBeginEnd(1,1,1,10); for i:=1 to 9 do @@ -1869,7 +1869,7 @@ end; procedure cc9; var i: integer; begin - TaskText(' cc9. , '); + TaskText('Задание cc9. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(10,1,10,10); TagRect(10,1,10,9); @@ -1883,7 +1883,7 @@ end; procedure cc10; var i: integer; begin - TaskText(' cc10. '); + TaskText('Задание cc10. Закрасить помеченные клетки'); Field(15,8); RobotBeginEnd(1,1,1,8); for i:=1 to 7 do @@ -1893,7 +1893,7 @@ end; procedure cc11; var i: integer; begin - TaskText(' cc11. '); + TaskText('Задание cc11. Закрасить помеченные клетки'); Field(14,8); RobotBeginEnd(1,1,1,8); for i:=1 to 7 do @@ -1903,7 +1903,7 @@ end; procedure cc12; var i,p: integer; begin - TaskText(' cc12. '); + TaskText('Задание cc12. Закрасить помеченные клетки'); Field(33,7); RobotBeginEnd(1,1,1,7); p:=1; @@ -1917,7 +1917,7 @@ end; procedure cc13; var i: integer; begin - TaskText(' cc13. '); + TaskText('Задание cc13. Закрасить помеченные клетки'); Field(14,9); RobotBeginEnd(1,1,9,9); for i:=1 to 4 do @@ -1931,7 +1931,7 @@ end; procedure cc14; var i: integer; begin - TaskText(' cc14. '); + TaskText('Задание cc14. Пройти лабиринт'); Field(14,9); RobotBeginEnd(1,1,5,9); for i:=1 to 4 do @@ -1946,7 +1946,7 @@ end; procedure cc15; var i,n: integer; begin - TaskText(' cc15. '); + TaskText('Задание cc15. Закрасить помеченные клетки'); n:=8; Field(15,9); RobotBeginEnd(n,2,n,9); @@ -1957,7 +1957,7 @@ end; procedure cc16; var i,k,j: integer; begin - TaskText(' cc16. , '); + TaskText('Задание cc16. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(22,7); RobotBeginEnd(2,6,22,6); j:=2; @@ -1972,7 +1972,7 @@ end; procedure cc17; var i,j,k: integer; begin - TaskText(' cc17. , '); + TaskText('Задание cc17. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(29,8); RobotBeginEnd(2,7,28,7); j:=2; @@ -1990,7 +1990,7 @@ end; procedure cc18; var i: integer; begin - TaskText(' cc18. , while for'); + TaskText('Задание cc18. Закрасить помеченные клетки, используя цикл while внутри цикла for'); Field(12,7); RobotBeginEnd(1,1,1,7); for i:=1 to 8 do HorizontalWall(2,i,12); @@ -2006,7 +2006,7 @@ end; procedure cc19; var i,n: integer; begin - TaskText(' cc19. . '); + TaskText('Задание cc19. Закрасить помеченные клетки. Высота поля может меняться'); n:=random(4)+6; Field(11,n); RobotBeginEnd(1,1,1,n); @@ -2020,7 +2020,7 @@ end; procedure mix1; var n1,n2,m: integer; begin - TaskText(' mix1. '); + TaskText('Задание mix1. Закрасить прямоугольник переменного размера'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2032,7 +2032,7 @@ end; procedure mix2; var n1,n2,m,i,j,ij: integer; begin - TaskText(' mix2. '); + TaskText('Задание mix2. Закрасить в шахматном порядке прямоугольник переменного размера'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2052,7 +2052,7 @@ end; procedure mix3; var n1,n2,m,l: integer; begin - TaskText(' mix3. , '); + TaskText('Задание mix3. Закрасить квадрат, предварительно определив его размер'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2066,7 +2066,7 @@ end; procedure mix4; var n1,n2,m,m1,m2: integer; begin - TaskText(' mix4. '); + TaskText('Задание mix4. Найти закрашенную клетку'); m:=10; Field(m,m); n1:=random(m-2)+2; @@ -2082,7 +2082,7 @@ end; procedure mix5; var n1,n2,m,m1,m2: integer; begin - TaskText(' mix5. , '); + TaskText('Задание mix5. Найти закрашенную клетку и закрасить клетки, находящиеся с ней на одной вертикали и горизонтали'); m:=10; Field(m,m); n1:=random(m-2)+2; @@ -2100,7 +2100,7 @@ end; procedure mix6; var i,c: integer; begin - TaskText(' mix6. , '); + TaskText('Задание mix6. Закрасить те клетки у правой стены, для которых закрашены клетки левой стены'); Field(11,11); RobotBeginEnd(1,1,1,11); for i:=1 to 10 do @@ -2117,7 +2117,7 @@ end; procedure mix7; var i,c1,c2: integer; begin - TaskText(' mix7. , '); + TaskText('Задание mix7. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки'); Field(11,11); RobotBeginEnd(1,1,1,11); for i:=1 to 10 do @@ -2135,7 +2135,7 @@ end; procedure mix8; var i,c1,c2,c3,c4: integer; begin - TaskText(' mix8. , '); + TaskText('Задание mix8. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки и еще ровно одна'); Field(11,15); RobotBeginEnd(1,1,1,15); for i:=1 to 14 do @@ -2160,7 +2160,7 @@ end; procedure mix9; var n1,n2,m,l1,l2: integer; begin - TaskText(' mix9. , , . '); + TaskText('Задание mix9. Закрасить прямоугольник, предварительно определив его размер, и вернуться в начальную позицию. Закрашенная клетка находится левее и ниже Робота'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2175,7 +2175,7 @@ end; procedure mix10; var n,n1,n2,m,l1,l2: integer; begin - TaskText(' mix10. , , '); + TaskText('Задание mix10. Закрасить прямоугольник, предварительно определив его размер, и вернуться в начальную позицию'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2213,7 +2213,7 @@ procedure p1; TagRect(x,y-1,x,y+1); end; begin - TaskText(' p1. , Cross'); + TaskText('Задание p1. Закрасить помеченные клетки, составив процедуру Cross'); Field(10,10); RobotBeginEnd(3,7,5,3); KresTag(3,7); @@ -2229,7 +2229,7 @@ procedure p2; TagRect(3*i-1,2,3*i,3); end; begin - TaskText(' p2. , Square2'); + TaskText('Задание p2. Закрасить помеченные клетки, составив процедуру Square2'); Field(19,4); RobotBeginEnd(2,2,17,2); my(6); @@ -2238,7 +2238,7 @@ end; procedure p3; var i: integer; begin - TaskText(' p3. , Square2'); + TaskText('Задание p3. Закрасить помеченные клетки, используя процедуру Square2'); Field(12,12); RobotBeginEnd(11,11,1,1); for i:=1 to 6 do @@ -2247,7 +2247,7 @@ end; procedure p4; begin - TaskText(' p4. , Square2. Square4'); + TaskText('Задание p4. Закрасить помеченные клетки, используя процедуру Square2. Оформить полученный алгоритм в виде процедуры Square4'); Field(6,6); RobotBeginEnd(2,2,2,2); TagRect(2,2,5,5); @@ -2255,7 +2255,7 @@ end; procedure p5; begin - TaskText(' p5. , Square4'); + TaskText('Задание p5. Закрасить помеченные клетки, используя процедуру Square4'); Field(10,10); RobotBeginEnd(2,2,2,2); TagRect(2,2,9,9); @@ -2264,7 +2264,7 @@ end; procedure p6; var i: integer; begin - TaskText(' p6. , Row, '); + TaskText('Задание p6. Закрасить помеченные клетки, составив процедуру Row, в которой Робот закрашивает ряд и возвращается назад'); Field(9,9); RobotBeginEnd(1,2,1,8); for i:=1 to 4 do @@ -2274,7 +2274,7 @@ end; procedure p7; var i: integer; begin - TaskText(' p7. , Column, '); + TaskText('Задание p7. Закрасить помеченные клетки, составив процедуру Column, в которой Робот закрашивает колонку и возвращается назад'); Field(9,9); RobotBeginEnd(2,1,8,1); for i:=1 to 4 do @@ -2284,7 +2284,7 @@ end; procedure p8; var i: integer; begin - TaskText(' p8. , Row Column'); + TaskText('Задание p8. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(9,9); RobotBeginEnd(1,2,8,1); for i:=1 to 4 do @@ -2297,7 +2297,7 @@ end; procedure p9; var i,j: integer; begin - TaskText(' p9. , Row Column'); + TaskText('Задание p9. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(15,15); RobotBeginEnd(2,2,6,6); i:=2; @@ -2311,7 +2311,7 @@ end; procedure p10; var i,j: integer; begin - TaskText(' p10. , Contour'); + TaskText('Задание p10. Закрасить помеченные клетки, составив процедуру Contour'); Field(31,7); RobotBeginEnd(2,2,26,2); i:=2; @@ -2328,7 +2328,7 @@ end; procedure p11; var i,j: integer; begin - TaskText(' p11. , Punktir'); + TaskText('Задание p11. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); for i:=1 to 7 do @@ -2339,7 +2339,7 @@ end; procedure p12; var i,j: integer; begin - TaskText(' p12. , Punktir'); + TaskText('Задание p12. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); for i:=1 to 7 do @@ -2353,7 +2353,7 @@ end; procedure p13; var i,j: integer; begin - TaskText(' p13. , Punktir'); + TaskText('Задание p13. Закрасить помеченные клетки, используя процедуру Punktir'); Field(17,14); RobotBeginEnd(2,2,2,14); for i:=1 to 5 do @@ -2368,7 +2368,7 @@ end; procedure p14; var i: integer; begin - TaskText(' p14. , Row1 Row2 '); + TaskText('Задание p14. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); Field(17,15); RobotBeginEnd(2,2,2,14); for i:=1 to 8 do TagRect(2*i,2,2*i,13); @@ -2379,7 +2379,7 @@ end; procedure p15; var i,j,n: integer; begin - TaskText(' p15. , Row1 Row2 '); + TaskText('Задание p15. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); n:=14; Field(25,n+1); RobotBeginEnd(2,2,2,n); @@ -2397,7 +2397,7 @@ end; procedure pp1; var i: integer; begin - TaskText(' pp1. , RightN(n) LeftN(n)'); + TaskText('Задание pp1. Закрасить помеченные клетки, составив процедуры с параметром RightN(n) и LeftN(n)'); Field(12,7); RobotBeginEnd(1,1,1,7); for i:=1 to 8 do @@ -2407,7 +2407,7 @@ end; procedure pp2; begin - TaskText(' pp2. , PaintDown(n)'); + TaskText('Задание pp2. Закрасить помеченные клетки, составив процедуру с параметром PaintDown(n)'); Field(10,10); RobotBeginEnd(1,1,9,1); VerticalWall(2,2,9); TagRect(1,1,1,7); @@ -2420,7 +2420,7 @@ end; procedure pp3; var i,d: integer; begin - TaskText(' pp3. . RightN(n), LeftN(n), UpN(n), DownN(n)'); + TaskText('Задание pp3. Пройти лабиринт. Составить процедуры с параметрами RightN(n), LeftN(n), UpN(n), DownN(n)'); d:=9; Field(d,d); RobotBeginEnd(1,1,5,5); @@ -2435,7 +2435,7 @@ end; procedure pp4; begin - TaskText(' pp4. , SymbolT(m,h), m - T, h - '); + TaskText('Задание pp4. Закрасить помеченные клетки, составив процедуру SymbolT(m,h), где m - половина ширины символа T, а h - его высота'); Field(19,8); RobotBeginEnd(5,2,17,2); TagRect(2,2,8,2); TagRect(5,2,5,5); @@ -2445,7 +2445,7 @@ end; procedure pp5; begin - TaskText(' pp5. , Rect(w,h), w-, h- '); + TaskText('Задание pp5. Закрасить прямоугольник, составив процедуру Rect(w,h), где w-ширина, а h-высота прямоугольника'); Field(7,10); RobotBeginEnd(2,2,2,2); TagRect(2,2,6,9); @@ -2453,7 +2453,7 @@ end; procedure pp6; begin - TaskText(' pp6. , Rect(w,h)'); + TaskText('Задание pp6. Закрасить несколько прямоугольников, вызывая процедуру Rect(w,h)'); Field(18,12); RobotBeginEnd(2,3,3,7); TagRect(2,3,6,5); @@ -2466,7 +2466,7 @@ end; procedure pp7; var x1,x2,y1,y2: integer; begin - TaskText(' pp7. , Perimeter(w,h), w-, h- '); + TaskText('Задание pp7. Закрасить помеченные клетки, составив процедуру Perimeter(w,h), где w-ширина, а h-высота прямоугольника'); Field(13,11); RobotBeginEnd(3,2,9,3); x1:=3; x2:=7; y1:=2; y2:=5; TagRect(x1,y1,x1,y2); TagRect(x2,y1,x2,y2); TagRect(x1,y1,x2,y1); TagRect(x1,y2,x2,y2); @@ -2477,7 +2477,7 @@ end; procedure pp8; begin - TaskText(' pp8. , SymbolH(w,h,t), w-, h- , t - '); + TaskText('Задание pp8. Закрасить помеченные клетки, составив процедуру SymbolH(w,h,t), где w-ширина, h-высота символа, а t - расстояние от верхней границы до горизонтальной линии'); Field(16,8); RobotBeginEnd(2,2,13,1); TagRect(2,2,2,7); TagRect(5,2,5,7); TagRect(3,4,5,4); @@ -2488,7 +2488,7 @@ end; procedure examen1; var i,j: integer; begin - TaskText(' examen1. , Punktir'); + TaskText('Задание examen1. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); for i:=1 to 7 do @@ -2499,7 +2499,7 @@ end; procedure examen2; var i,j: integer; begin - TaskText(' examen2. , Punktir'); + TaskText('Задание examen2. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); for i:=1 to 7 do @@ -2515,7 +2515,7 @@ end; procedure examen3; var x1,x2,y1,y2: integer; begin - TaskText(' examen3. , Perimeter(n,m)'); + TaskText('Задание examen3. Закрасить помеченные клетки, составив процедуру Perimeter(n,m)'); Field(13,11); RobotBeginEnd(3,2,9,3); x1:=3; x2:=7; y1:=2; y2:=5; TagRect(x1,y1,x1,y2); TagRect(x2,y1,x2,y2); TagRect(x1,y1,x2,y1); TagRect(x1,y2,x2,y2); @@ -2527,7 +2527,7 @@ end; procedure examen4; var n1,n2,len1,len2: integer; begin - TaskText(' examen4. '); + TaskText('Задание examen4. Закрасить все клетки вокруг прямоугольника'); n1:=random(3)+3; len1:=random(5)+4; n2:=random(3)+3; @@ -2547,7 +2547,7 @@ end; procedure examen5; var i,n: integer; begin - TaskText(' examen5. '); + TaskText('Задание examen5. Закрасить все клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -2558,7 +2558,7 @@ end; procedure examen6; var i,n,r1,r2: integer; begin - TaskText(' examen6. , 2 '); + TaskText('Задание examen6. Закрасить помеченные клетки, используя 2 условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -2583,7 +2583,7 @@ end; procedure examen7; var i,n,r1,r2,r3: integer; begin - TaskText(' examen7. , "and" "or"'); + TaskText('Задание examen7. Закрасить помеченные клетки, используя в условии "and" и "or"'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -2607,7 +2607,7 @@ end; procedure examen8; var n,r: integer; begin - TaskText(' examen8. '); + TaskText('Задание examen8. Закрасить клетку в противоположном углу'); n:=11; Field(n,n); RobotBegin(1,1); @@ -2641,7 +2641,7 @@ end; procedure examen9; var m,n1,n2: integer; begin - TaskText(' examen9. . '); + TaskText('Задание examen9. Закрасить угол и вернуться. Использовать два счетчика'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2653,7 +2653,7 @@ end; procedure examen10; var n1,n2: integer; begin - TaskText(' examen10. '); + TaskText('Задание examen10. Обойти стену'); Field(10,4); n1:=random(5)+4; n2:=random(4)+1; @@ -2664,7 +2664,7 @@ end; procedure zzz; begin Field(10,2); - TaskText(' c1. '); + TaskText('Задание c1. Закрасить помеченные клетки'); CorrectFieldBounds; Stop; end; diff --git a/TestSuite/CompilationSamples/Sets.pas b/TestSuite/CompilationSamples/Sets.pas index 21022da8a..a404ba7bd 100644 --- a/TestSuite/CompilationSamples/Sets.pas +++ b/TestSuite/CompilationSamples/Sets.pas @@ -1,15 +1,15 @@ -// -// +// Работа с множествами +// Базовый тип для множества может быть произвольным var - s1: set of string := ['','','','']; - s2: set of string := ['','','']; + s1: set of string := ['Иванов','Попов','Сидорова','Петров']; + s2: set of string := ['Козлов','Петров','Иванов']; begin - writeln(' s1: ',s1); - writeln(' s2: ',s2); - writeln(' s1 s2: ',s1+s2); - writeln(' s1 s2: ',s1*s2); - writeln(' s1 s2: ',s1-s2); - Include(s1,''); - Exclude(s1,''); - writeln(' s1: ',s1); + writeln('Множество s1: ',s1); + writeln('Множество s2: ',s2); + writeln('Объединение множеств s1 и s2: ',s1+s2); + writeln('Пересечение множеств s1 и s2: ',s1*s2); + writeln('Разность множеств s1 и s2: ',s1-s2); + Include(s1,'Умнов'); + Exclude(s1,'Иванов'); + writeln('Множество s1: ',s1); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Shl.pas b/TestSuite/CompilationSamples/Shl.pas index 5c47af256..5a381c181 100644 --- a/TestSuite/CompilationSamples/Shl.pas +++ b/TestSuite/CompilationSamples/Shl.pas @@ -1,6 +1,6 @@ -// shl +// Демонстрация операции shl begin - writeln(' '); + writeln('Степени двойки'); writeln(' n 2^n'); for var i:=0 to 30 do writeln(i:2,(1 shl i):12); diff --git a/TestSuite/CompilationSamples/SimpleNewFeatures.pas b/TestSuite/CompilationSamples/SimpleNewFeatures.pas index 24bf8fb26..60cef0d77 100644 --- a/TestSuite/CompilationSamples/SimpleNewFeatures.pas +++ b/TestSuite/CompilationSamples/SimpleNewFeatures.pas @@ -1,27 +1,27 @@ -// PascalABC.NET +// Простейшие новые возможности языка PascalABC.NET -// +// Инициализация переменной при описании var i: integer := 1; -// +// Автоопределение типа переменной при инициализации var r := 2.5; begin - // + // Внутриблочные описания переменных var s: real := 1.0; - // ( - ) + // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) for j: integer := 1 to 10 do - s += j; // += + s += j; // Операция += для чисел var p := 1; - // + // Описание переменной в заголовке цикла с автоопределением типа for var j := 1 to 10 do - p *= j; // *= + p *= j; // Операция *= var str := ''; for c: char := 'a' to 'z' do - str += c; // += + str += c; // Операция += для строк end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/SimpleNumbers.pas b/TestSuite/CompilationSamples/SimpleNumbers.pas index ad7481733..bb0174db0 100644 --- a/TestSuite/CompilationSamples/SimpleNumbers.pas +++ b/TestSuite/CompilationSamples/SimpleNumbers.pas @@ -1,6 +1,6 @@ -// +// Генерация больших простых чисел begin - writeln(' : '); + writeln('Большие простые числа: '); var count := 0; var beg := Random(1000000000)+2; for var i:=beg to beg+5000 do diff --git a/TestSuite/CompilationSamples/SimpleTextEditor.pas b/TestSuite/CompilationSamples/SimpleTextEditor.pas index 31ee5835d..b8dc321c4 100644 --- a/TestSuite/CompilationSamples/SimpleTextEditor.pas +++ b/TestSuite/CompilationSamples/SimpleTextEditor.pas @@ -1,9 +1,9 @@ -// -// Shift+F9 !!! +// Простейший текстовый редактор +// Для запуска программы используйте Shift+F9 !!! uses CRT; begin - SetWindowTitle(' (Enter - , Esc - )'); + SetWindowTitle('Текстовый редактор (Enter - новая строка, Esc - выход)'); clrScr; repeat var c := ReadKey; diff --git a/TestSuite/CompilationSamples/SortByChoice.pas b/TestSuite/CompilationSamples/SortByChoice.pas index 99bd41fcd..ed67282aa 100644 --- a/TestSuite/CompilationSamples/SortByChoice.pas +++ b/TestSuite/CompilationSamples/SortByChoice.pas @@ -1,4 +1,4 @@ -// +// Сортировка выбором uses ArrayLib; procedure SortByChoice(a: array of real); @@ -29,9 +29,9 @@ var a: array of real; begin a := CreateRandomArr(20); - writeln(' : '); + writeln('Содержимое массива: '); WriteArray(a); SortByChoice(a); - writeln(' : '); + writeln('После сортировки выбором: '); WriteArray(a); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/SqrSinArrays.pas b/TestSuite/CompilationSamples/SqrSinArrays.pas index 18e240721..3c7de0fb9 100644 --- a/TestSuite/CompilationSamples/SqrSinArrays.pas +++ b/TestSuite/CompilationSamples/SqrSinArrays.pas @@ -1,25 +1,25 @@ -// for -// +// демонстрация работы параллельного for +//заполнение массива procedure FillRandArr(A: array of real); begin Randomize; for var i := 0 to A.Length - 1 do a[i] := Random(1000); end; - // + // вывод массива procedure printArr(A: array of real); begin for var i := 0 to A.Length - 1 do writeln(a[i]); end; -// +// Последовательное вычисление квадратов синусов procedure SqrSinArr(A: array of real; var C: array of real); begin for var i := 0 to A.Length - 1 do C[i] := sqr(sin(A[i])); end; -// +// Параллельное вычисление квадратов синусов procedure SqrSinArrParallel(A: array of real; var C: array of real); begin @@ -38,10 +38,10 @@ begin var m0 := Milliseconds; SqrSinArrParallel(A, C); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Параллельное выполнение: ', Milliseconds - m0, 'ms'); m0 := Milliseconds; SqrSinArr(A, C); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Последовательное выполнение: ', Milliseconds - m0, 'ms'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Stack.pas b/TestSuite/CompilationSamples/Stack.pas index dda2835c3..d818e96ea 100644 --- a/TestSuite/CompilationSamples/Stack.pas +++ b/TestSuite/CompilationSamples/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/TestSuite/CompilationSamples/Stamp1.pas b/TestSuite/CompilationSamples/Stamp1.pas index b1bc57c41..b97abd212 100644 --- a/TestSuite/CompilationSamples/Stamp1.pas +++ b/TestSuite/CompilationSamples/Stamp1.pas @@ -1,7 +1,7 @@ -// - , -// , Stamp. +// Штампы - это классы графических фигур, хранящие их параметры +// В любой момент можно нарисовать графическую фигуру, вызвав метод Stamp. -// +// Класс штампа прямоугольника uses GraphABC; type diff --git a/TestSuite/CompilationSamples/Stamp2.pas b/TestSuite/CompilationSamples/Stamp2.pas index 1c41b6d59..08aad5d4f 100644 --- a/TestSuite/CompilationSamples/Stamp2.pas +++ b/TestSuite/CompilationSamples/Stamp2.pas @@ -1,4 +1,4 @@ -// +// Класс штампа ряда прямоугольников uses GraphABC; type diff --git a/TestSuite/CompilationSamples/Stamp3.pas b/TestSuite/CompilationSamples/Stamp3.pas index 0e6a90aca..8b5a79c23 100644 --- a/TestSuite/CompilationSamples/Stamp3.pas +++ b/TestSuite/CompilationSamples/Stamp3.pas @@ -1,4 +1,4 @@ -// - +// Класс штампа прямоугольника с методами увеличения-уменьшения uses GraphABC; type diff --git a/TestSuite/CompilationSamples/Stamp4.pas b/TestSuite/CompilationSamples/Stamp4.pas index 3ba40f6cb..0775030b4 100644 --- a/TestSuite/CompilationSamples/Stamp4.pas +++ b/TestSuite/CompilationSamples/Stamp4.pas @@ -1,4 +1,4 @@ -// - +// Класс штампа прямоугольника с методами увеличения-уменьшения от центра uses GraphABC; type diff --git a/TestSuite/CompilationSamples/Stamp5.pas b/TestSuite/CompilationSamples/Stamp5.pas index d6ed6053d..78226a572 100644 --- a/TestSuite/CompilationSamples/Stamp5.pas +++ b/TestSuite/CompilationSamples/Stamp5.pas @@ -1,4 +1,4 @@ -// +// Класс штампа треугольника uses GraphABC; type diff --git a/TestSuite/CompilationSamples/StampCompound.pas b/TestSuite/CompilationSamples/StampCompound.pas index 1f4b5c634..f8f44be70 100644 --- a/TestSuite/CompilationSamples/StampCompound.pas +++ b/TestSuite/CompilationSamples/StampCompound.pas @@ -1,4 +1,4 @@ -// +// Класс штампа составного объекта uses GraphABC; type diff --git a/TestSuite/CompilationSamples/StampCross.pas b/TestSuite/CompilationSamples/StampCross.pas index c4f523078..4b554fd12 100644 --- a/TestSuite/CompilationSamples/StampCross.pas +++ b/TestSuite/CompilationSamples/StampCross.pas @@ -1,4 +1,4 @@ -// +// Класс штампа креста uses GraphABC; type diff --git a/TestSuite/CompilationSamples/StampPoly.pas b/TestSuite/CompilationSamples/StampPoly.pas index e9afc6017..ced69f117 100644 --- a/TestSuite/CompilationSamples/StampPoly.pas +++ b/TestSuite/CompilationSamples/StampPoly.pas @@ -1,4 +1,4 @@ -// +// Класс штампа правильного многоугольника uses GraphABC; type diff --git a/TestSuite/CompilationSamples/StampText.pas b/TestSuite/CompilationSamples/StampText.pas index 9111e314e..d7a26fc52 100644 --- a/TestSuite/CompilationSamples/StampText.pas +++ b/TestSuite/CompilationSamples/StampText.pas @@ -1,4 +1,4 @@ -// +// Класс штампа текста uses GraphABC; type @@ -23,9 +23,9 @@ type end; begin - var txt := new TextStamp(200,200,14,'!'); + var txt := new TextStamp(200,200,14,'Привет!'); txt.Stamp; txt.MoveOn(0,40); - txt.Text := ' !'; + txt.Text := 'До свидания!'; txt.Stamp; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StandFun.pas b/TestSuite/CompilationSamples/StandFun.pas index 369ddac57..5d820f901 100644 --- a/TestSuite/CompilationSamples/StandFun.pas +++ b/TestSuite/CompilationSamples/StandFun.pas @@ -1,14 +1,14 @@ -// +// Стандартные функции var x: real; begin - write(' x: '); + write('Введите x: '); readln(x); - writeln(' ',x,' ',sqr(x)); - writeln(x,' 5 ',power(x,5)); - writeln(' ',x,' ',sqrt(x)); - writeln(' ',x,' ',abs(x)); - writeln(' ',x,' ',ln(x)); - writeln(' ',x,' ',sin(x)); - writeln(' ',x,' ',cos(x)); + writeln('Квадрат ',x,' равен ',sqr(x)); + writeln(x,' в степени 5 равно ',power(x,5)); + writeln('Квадратный корень из ',x,' равен ',sqrt(x)); + writeln('Модуль ',x,' равен ',abs(x)); + writeln('Натуральный логарифм ',x,' равен ',ln(x)); + writeln('Синус ',x,' равен ',sin(x)); + writeln('Косинус ',x,' равен ',cos(x)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StandardTypes.pas b/TestSuite/CompilationSamples/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/TestSuite/CompilationSamples/StandardTypes.pas +++ b/TestSuite/CompilationSamples/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/TestSuite/CompilationSamples/Star.pas b/TestSuite/CompilationSamples/Star.pas index 2dd11d3dc..76054f2f8 100644 --- a/TestSuite/CompilationSamples/Star.pas +++ b/TestSuite/CompilationSamples/Star.pas @@ -1,8 +1,8 @@ uses GraphABC; const - n = 17; // - n1 = 7; // + n = 17; // количество точек + n1 = 7; // через сколько точек соединять begin var a := -Pi/2; diff --git a/TestSuite/CompilationSamples/StaticArr1.pas b/TestSuite/CompilationSamples/StaticArr1.pas index 998aaa7f0..f20116db9 100644 --- a/TestSuite/CompilationSamples/StaticArr1.pas +++ b/TestSuite/CompilationSamples/StaticArr1.pas @@ -1,4 +1,4 @@ -// +// Использование массива const n=10; var a: array [1..n] of real; @@ -6,7 +6,7 @@ var a: array [1..n] of real; begin for var i:=1 to n do a[i] := Random*10; - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); foreach x: real in a do write(x:4:2,' '); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StaticArr2.pas b/TestSuite/CompilationSamples/StaticArr2.pas index b4a567dd0..49ce9793c 100644 --- a/TestSuite/CompilationSamples/StaticArr2.pas +++ b/TestSuite/CompilationSamples/StaticArr2.pas @@ -1,4 +1,4 @@ -// +// Передача массива как параметра подпрограмм const n=10; type RealArr = array [1..n] of real; @@ -19,6 +19,6 @@ var a: RealArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); PrintArr(a,n); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StaticArr3.pas b/TestSuite/CompilationSamples/StaticArr3.pas index e34c7a385..1d382c6c1 100644 --- a/TestSuite/CompilationSamples/StaticArr3.pas +++ b/TestSuite/CompilationSamples/StaticArr3.pas @@ -1,4 +1,4 @@ -// exit +// Процедура exit выхода из подпрограммы const n=10; type IntArr = array [1..n] of integer; @@ -23,7 +23,7 @@ begin if a[i]=k then begin Result := i; - exit; // + exit; // выход из процедуры end; end; @@ -31,11 +31,11 @@ var a: IntArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Случайный массив целых: '); PrintArr(a,n); var ind := IndexOf(a,n,7); if ind>0 then - writeln(' 7 ', ind) - else writeln(' 7 '); + writeln('Индекс первого элемента 7 равен ', ind) + else writeln('Элемент 7 отсутствует'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StopWatch.pas b/TestSuite/CompilationSamples/StopWatch.pas index 0e5262c42..98c6be5fe 100644 --- a/TestSuite/CompilationSamples/StopWatch.pas +++ b/TestSuite/CompilationSamples/StopWatch.pas @@ -1,4 +1,4 @@ -// Stopwatch - ( 0.001 ) +// Stopwatch - класс высокоточного таймера (с точностью до 0.001 с) begin var stopWatch := new System.Diagnostics.Stopwatch; stopWatch.Start; @@ -7,5 +7,5 @@ begin stopWatch.Stop; var ts := stopWatch.Elapsed; - writelnFormat(' : {0:00}:{1:00}:{2:00}.{3:000}',ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds); + writelnFormat('Время работы: {0:00}:{1:00}:{2:00}.{3:000}',ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/String1.pas b/TestSuite/CompilationSamples/String1.pas index 201a1407a..d6785340d 100644 --- a/TestSuite/CompilationSamples/String1.pas +++ b/TestSuite/CompilationSamples/String1.pas @@ -1,4 +1,4 @@ -// . + +=. +// Строки. Операция + и оператор +=. Доступ по индексу var s: string := 'Pascal'; diff --git a/TestSuite/CompilationSamples/String2.pas b/TestSuite/CompilationSamples/String2.pas index aeb792233..a2a26c791 100644 --- a/TestSuite/CompilationSamples/String2.pas +++ b/TestSuite/CompilationSamples/String2.pas @@ -1,4 +1,4 @@ -// . SetLength, Length Length +// Строки. Процедура SetLength, функция Length и свойство Length var s: string; diff --git a/TestSuite/CompilationSamples/String3.pas b/TestSuite/CompilationSamples/String3.pas index 75982b627..5a2a97b3e 100644 --- a/TestSuite/CompilationSamples/String3.pas +++ b/TestSuite/CompilationSamples/String3.pas @@ -1,4 +1,4 @@ -// . +// Строки. Строка может иметь произвольную длину var s: string; begin @@ -7,6 +7,6 @@ begin s += s; s += s; s += s; - writeln(' = ',s.Length); - writeln('C: ',s); + writeln('Длина строки = ',s.Length); + writeln('Cтрока: ',s); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/String4.pas b/TestSuite/CompilationSamples/String4.pas index e8553759f..7c765fc61 100644 --- a/TestSuite/CompilationSamples/String4.pas +++ b/TestSuite/CompilationSamples/String4.pas @@ -1,4 +1,4 @@ -// . 255 +// Строки фиксированной длины. Длина не может быть больше 255 var s: string[9]; s1: shortstring; // shortstring = string[255] @@ -6,7 +6,7 @@ var begin slong := 'PascalABC.NET'; - writeln('C : ',slong); + writeln('Cтрока произвольной длины: ',slong); s := slong; - writeln('C : ',s); + writeln('Cтрока фиксированной длины обрезается: ',s); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/String5.pas b/TestSuite/CompilationSamples/String5.pas index 615d927e3..e4e667578 100644 --- a/TestSuite/CompilationSamples/String5.pas +++ b/TestSuite/CompilationSamples/String5.pas @@ -1,18 +1,18 @@ -// . +// Строки. Стандартные подпрограммы работы со строками var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := Trim(s); - writeln(' Trim: ''',s,''''); + writeln('После вызова функции Trim: ''',s,''''); var p := Pos(s1,s); - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); Delete(s,7,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); Insert('ABC.',s,7); - writeln(' ''ABC.'': ',s); - writeln(' : ',Copy(s,1,9)); - writeln(' : ',Copy(s,11,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',Copy(s,1,9)); + writeln('Последняя часть строки: ',Copy(s,11,3)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/String6.pas b/TestSuite/CompilationSamples/String6.pas index 69cf7ddb1..609eb8234 100644 --- a/TestSuite/CompilationSamples/String6.pas +++ b/TestSuite/CompilationSamples/String6.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/String9.pas b/TestSuite/CompilationSamples/String9.pas index 69173970b..44715e324 100644 --- a/TestSuite/CompilationSamples/String9.pas +++ b/TestSuite/CompilationSamples/String9.pas @@ -1,4 +1,4 @@ -// String9 Programming Taskbook +// Пример решения задачи String9 из электронного задачника Programming Taskbook uses PT4; var n: integer; diff --git a/TestSuite/CompilationSamples/StringConvert.pas b/TestSuite/CompilationSamples/StringConvert.pas index 7cfedf189..fe2a5b8a6 100644 --- a/TestSuite/CompilationSamples/StringConvert.pas +++ b/TestSuite/CompilationSamples/StringConvert.pas @@ -4,16 +4,16 @@ var r: real; begin - // - s := '123,3443'; // - Windows + // Преобразование строки в число + s := '123,3443'; // Дробная часть отделяется запятой - настройки Windows if not real.TryParse(s, r) then - Writeln(' s ') + Writeln('Строка s не является строковым представлением вещественного числа') else Writeln(r); if not integer.TryParse(s, i) then - Writeln(' s '); + Writeln('Строка s не является строковым представлением целого числа'); - // + // Преобразование числа в строку i := 10; s := i.ToString; Writeln(s); diff --git a/TestSuite/CompilationSamples/StringInteger.pas b/TestSuite/CompilationSamples/StringInteger.pas index 60f5db050..ce86a50a3 100644 --- a/TestSuite/CompilationSamples/StringInteger.pas +++ b/TestSuite/CompilationSamples/StringInteger.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringInteger1.pas b/TestSuite/CompilationSamples/StringInteger1.pas index 7fe544add..484f91218 100644 --- a/TestSuite/CompilationSamples/StringInteger1.pas +++ b/TestSuite/CompilationSamples/StringInteger1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := IntToStr(i); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '567'; i := StrToInt(s); - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringInteger2.pas b/TestSuite/CompilationSamples/StringInteger2.pas index 4f4e00fe4..5dfe155aa 100644 --- a/TestSuite/CompilationSamples/StringInteger2.pas +++ b/TestSuite/CompilationSamples/StringInteger2.pas @@ -1,18 +1,18 @@ -// <-> (Val Str) +// Преобразование целое <-> строка в старом стиле (Val и Str) var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; Str(i,s); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; var err: integer; Val(s,i,err); if err=0 then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringInteger3.pas b/TestSuite/CompilationSamples/StringInteger3.pas index 60f5db050..ce86a50a3 100644 --- a/TestSuite/CompilationSamples/StringInteger3.pas +++ b/TestSuite/CompilationSamples/StringInteger3.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringMethods.pas b/TestSuite/CompilationSamples/StringMethods.pas index 69cf7ddb1..609eb8234 100644 --- a/TestSuite/CompilationSamples/StringMethods.pas +++ b/TestSuite/CompilationSamples/StringMethods.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringMethods1.pas b/TestSuite/CompilationSamples/StringMethods1.pas index 201b87861..b0db02e3c 100644 --- a/TestSuite/CompilationSamples/StringMethods1.pas +++ b/TestSuite/CompilationSamples/StringMethods1.pas @@ -1,30 +1,30 @@ var s1,s2: string; begin - // + // Определение длины строки s1 := 'ABCDEFGH'; Writeln(s1.Length); - // + // Сравнение строк без учета регистра символов s1 := 'AAA'; s2 := 'aaa'; - if String.Compare(s1, s2, {ignoreCase - } true) = 0 then - Writeln(' '); + if String.Compare(s1, s2, {ignoreCase - без учета регистра} true) = 0 then + Writeln('Строки совпадают с точностью до регистра букв'); - // + // Определение вхождений подстрок s1 := 'Long string'; s2 := 'string'; if s1.EndsWith(s2) then - Writeln(' s1 , s2'); + Writeln('В конце строки s1 содержится подстрока, совпадающая с s2'); - // + // Поиск индекса вхождения подстроки в строку Writeln(s1.IndexOf(s2)); - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringMethods2.pas b/TestSuite/CompilationSamples/StringMethods2.pas index ee01cc1f2..13cc3e57e 100644 --- a/TestSuite/CompilationSamples/StringMethods2.pas +++ b/TestSuite/CompilationSamples/StringMethods2.pas @@ -1,15 +1,15 @@ var s1,s2: string; begin - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); - // , + // Вставка, удаление и замена подстрок s1 := 'ABCDEFGH'; s2 := s1.Insert(2, 'xxx'); Writeln(s2); @@ -20,18 +20,18 @@ begin s2 := s2.Remove(2, 3); Writeln(s2); - s1 := ' '; - s2 := s1.Replace('', ''); + s1 := 'слово слово слово'; + s2 := s1.Replace('слов', 'молок'); Writeln(s2); - // + // Удаление пробельных символов в концах строки s1 := ' xxx xxx '; Writeln('|', s1, '|'); s1 := s1.Trim; Writeln('|', s1, '|'); - // - s1 := ''; + // Смена регистра символов + s1 := 'абвгд'; s1 := s1.ToUpper; Writeln(s1); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringPlus.pas b/TestSuite/CompilationSamples/StringPlus.pas index d301057c1..f267a010f 100644 --- a/TestSuite/CompilationSamples/StringPlus.pas +++ b/TestSuite/CompilationSamples/StringPlus.pas @@ -1,4 +1,4 @@ -// +// Сложение строк var s1: string := 'Pascal'; var s2: string := 'NET'; diff --git a/TestSuite/CompilationSamples/StringReal1.pas b/TestSuite/CompilationSamples/StringReal1.pas index 4cad78fbe..4b1037b65 100644 --- a/TestSuite/CompilationSamples/StringReal1.pas +++ b/TestSuite/CompilationSamples/StringReal1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование вещественное <-> строка var s: string; r: real; begin - // + // Преобразование целого в строку r := 3.1415; s := FloatToStr(r); - writelnFormat(': {0}. : ''{1}''',r,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',r,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '3.1415'; r := StrToFloat(s); - writelnFormat(': ''{0}''. : {1}',s,r); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,r); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StringSplit.pas b/TestSuite/CompilationSamples/StringSplit.pas index 12acf274f..184c12c2e 100644 --- a/TestSuite/CompilationSamples/StringSplit.pas +++ b/TestSuite/CompilationSamples/StringSplit.pas @@ -6,19 +6,19 @@ var s: string := '12 765 765 76'; begin - // + // Разбиение строки на массив подстрок с заданным разелителем str_arr := s.Split(' '); - // + // Соединение массива подстрок с новым разделителем s := string.Join('+', str_arr); Write(s, '='); - // + // Формирование целочисленного массива по массиву подстрок SetLength(int_arr, str_arr.Length); for var i:=0 to int_arr.Length-1 do integer.TryParse(str_arr[i], int_arr[i]); - // + // Вычисление суммы элементов целочисленного массива var sum := 0; foreach v: integer in int_arr do sum += v; diff --git a/TestSuite/CompilationSamples/StringTypes.pas b/TestSuite/CompilationSamples/StringTypes.pas index 4cb3e8a0f..7e89b95d1 100644 --- a/TestSuite/CompilationSamples/StringTypes.pas +++ b/TestSuite/CompilationSamples/StringTypes.pas @@ -1,17 +1,17 @@ -// string, string[n], shortstring +// Строки string, string[n], shortstring var - s: string; // , s, - s10: string[10]; // ss + s: string; // память, занимаемая s, зависит от ее длины + s10: string[10]; // память под ss фиксирована ss: shortstring := s; f: file of string[10]; - // f: file of string; - + // f: file of string; - ошибка begin s := '12345678901234567890'; - s10 := s; // + s10 := s; // обрезание writeln(s10); s += s; s += s; s += s; s += s; writeln(s); - writeln(' = ',s.Length); + writeln('Длина строки = ',s.Length); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/StructTypeEquiv.pas b/TestSuite/CompilationSamples/StructTypeEquiv.pas index 2dec49906..8648f73fd 100644 --- a/TestSuite/CompilationSamples/StructTypeEquiv.pas +++ b/TestSuite/CompilationSamples/StructTypeEquiv.pas @@ -1,4 +1,4 @@ -// . Delphi - +// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность var a: array of integer; a1: array of integer; @@ -18,6 +18,6 @@ begin a := a1; s := s1; p := p1; - r := r1; // Delphi - proc(a,s,p,r); // - + r := r1; // В Delphi ни одно из этих присваиваний не сработает + proc(a,s,p,r); // Этот вызов - тоже end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Students.pas b/TestSuite/CompilationSamples/Students.pas index 7e47e9082..1bb0dc994 100644 --- a/TestSuite/CompilationSamples/Students.pas +++ b/TestSuite/CompilationSamples/Students.pas @@ -1,4 +1,4 @@ -// +//Перегрузка операторов type Student = class Name: string; @@ -10,7 +10,7 @@ type Self.Height := Height; end; class function operator<(left,right: Student): boolean; - // + // Сравнение по росту begin Result := left.Height < right.Height; end; diff --git a/TestSuite/CompilationSamples/SumOfPrime.pas b/TestSuite/CompilationSamples/SumOfPrime.pas index dc81e4467..ef2c2e624 100644 --- a/TestSuite/CompilationSamples/SumOfPrime.pas +++ b/TestSuite/CompilationSamples/SumOfPrime.pas @@ -1,8 +1,8 @@ -// parallel for c -// n -// +// Демонстрация работы директивы parallel for c опцией редукции +// на примере вычисления суммы простых чисел среди первых n +// натуральных чисел -// n +// проверка на простоту числа n function IsPrime(n:integer):boolean; begin result:=false; @@ -11,7 +11,7 @@ begin exit; result:=true; end; -// +//Последовательное вычисление суммы простых чисел function SumOfPrimesSeq(n:integer):int64; begin var sum:int64:=0; @@ -20,7 +20,7 @@ begin sum:=sum+i; result:=sum; end; -// +//Параллельное вычисление суммы простых чисел function SumOfPrimesPar(n:integer):int64; begin var sum:int64:=0; diff --git a/TestSuite/CompilationSamples/SwapT.pas b/TestSuite/CompilationSamples/SwapT.pas index 38161cff4..f8b0bcae9 100644 --- a/TestSuite/CompilationSamples/SwapT.pas +++ b/TestSuite/CompilationSamples/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,7 +11,7 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/SystemArray1.pas b/TestSuite/CompilationSamples/SystemArray1.pas index 76e2e438b..2bce6941d 100644 --- a/TestSuite/CompilationSamples/SystemArray1.pas +++ b/TestSuite/CompilationSamples/SystemArray1.pas @@ -13,25 +13,25 @@ var a: array of integer; begin SetLength(a, Size); - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := Random(100); - // + // Вывод всех элементов массива PrintArray(a); - // ( & , - // array Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении класса Array) &Array.Sort(a); PrintArray(a); - // + // Обращение массива &Array.Reverse(a); PrintArray(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 99); Writeln(i); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/SystemTimer.pas b/TestSuite/CompilationSamples/SystemTimer.pas index 1b55e5f23..8223bd886 100644 --- a/TestSuite/CompilationSamples/SystemTimer.pas +++ b/TestSuite/CompilationSamples/SystemTimer.pas @@ -1,4 +1,4 @@ -//, +=, -=, System.Timers.Timer +//События, +=, -=, демонстрация работы таймера System.Timers.Timer uses System; var Timer:System.Timers.Timer; diff --git a/TestSuite/CompilationSamples/Tentacles.pas b/TestSuite/CompilationSamples/Tentacles.pas index a460d6630..1de368e86 100644 --- a/TestSuite/CompilationSamples/Tentacles.pas +++ b/TestSuite/CompilationSamples/Tentacles.pas @@ -1,12 +1,12 @@ -// "". midletPascal :) +//Программа "Щупальца". Порт с midletPascal :) uses GraphABC; const - S = 14; // - - N = 18; // - - W = 2; // + S = 14; // Кол-во щупалец + N = 18; // Кол-во звеньев в каждом из них + W = 2; //Ширина щупалец var i, j: Integer; @@ -14,16 +14,16 @@ var tx, ty: Real; k, d: Real; - // - + // Углы поворота звеньев относительно друг-друга a: array [1..N] of Real; - // + // Длина одного звена len: Real; begin Pen.Width := W; SetWindowSize(320, 320); - SetWindowTitle(''); + SetWindowTitle('Щупальца'); if Window.Width > Window.Height then len := Window.Height / 1.8 / N @@ -34,7 +34,7 @@ begin var k1 := 1; - // + // Главный цикл repeat if Window.Width > Window.Height then @@ -42,17 +42,17 @@ begin else len := Window.Width / 1.8 / N; - LockDrawing(); // ( ) - ClearWindow(ClBlack); // + LockDrawing(); //Блокируем рисование(для оптимизации) + ClearWindow(ClBlack); // Стираем всё - // + // Расчёт коэфицента поворота if random(50) = 0 then k := random(360) * pi / 180; - // + // Поворот всех щупалец a[1] := a[1] + sin(k) / 15; - // + // Интерполяция углов между щупальцами for i := 2 to N do a[i] := a[i] + (a[i - 1] - a[i]) * 0.1; for j := 0 to S - 1 do @@ -63,7 +63,7 @@ begin begin SetPenColor(Color.FromArgb(255, trunc(255 - 255 * i / N), 255)); - // :) + // Немного школьной тригонометрии :) tx := x + cos(j * d + a[i]) * len; ty := y + sin(j * d + a[i]) * len; Line(trunc(x), trunc(y), trunc(tx), trunc(ty)); @@ -71,10 +71,10 @@ begin y := ty; end; end; - Redraw(); // + Redraw(); //Перерисуем изображение k1 += 1; - SetWindowTitle('( . FPS ' + Format('{0,5:f2}',k1/Milliseconds*1000)+')'); + SetWindowTitle('Щупальца( Средн. FPS ' + Format('{0,5:f2}',k1/Milliseconds*1000)+')'); sleep(5); until false; diff --git a/TestSuite/CompilationSamples/Text1.pas b/TestSuite/CompilationSamples/Text1.pas index 152912db3..72b941890 100644 --- a/TestSuite/CompilationSamples/Text1.pas +++ b/TestSuite/CompilationSamples/Text1.pas @@ -1,4 +1,4 @@ -// , +// Программа, выводящая текст из своего файла var f: Text; diff --git a/TestSuite/CompilationSamples/Text2.pas b/TestSuite/CompilationSamples/Text2.pas index 51edde25c..cd46adb75 100644 --- a/TestSuite/CompilationSamples/Text2.pas +++ b/TestSuite/CompilationSamples/Text2.pas @@ -1,7 +1,7 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt var f: Text; - a: array of string := ('','','','','','',''); + a: array of string := ('Каждый','охотник','желает','знать','где','сидит','фазан'); begin assign(f,'a.txt'); @@ -9,5 +9,5 @@ begin for var i:=0 to a.Length-1 do writeln(f,a[i]); close(f); - writeln(' a.txt'); + writeln('Текст записан в файл a.txt'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Text3.pas b/TestSuite/CompilationSamples/Text3.pas index 86572c050..31daacb7d 100644 --- a/TestSuite/CompilationSamples/Text3.pas +++ b/TestSuite/CompilationSamples/Text3.pas @@ -1,4 +1,4 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt const n = 30; filename = 'pifagor.txt'; @@ -15,5 +15,5 @@ begin writeln(f); end; close(f); - writeln(' '+filename); + writeln('Таблица умножения записана в файл '+filename); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/ThroughTheUniverse.pas b/TestSuite/CompilationSamples/ThroughTheUniverse.pas index ca464dd75..a6840cd4d 100644 --- a/TestSuite/CompilationSamples/ThroughTheUniverse.pas +++ b/TestSuite/CompilationSamples/ThroughTheUniverse.pas @@ -1,33 +1,33 @@ -// " ". midletPascal +//Программа "Скозь вселенную". Порт с midletPascal uses GraphABC; type - // - + // Описываем тип-элемент Звезда TStar = record - X, Y, Z : real; // + X, Y, Z : real; // Положение в пространстве end; const - MAX_STARS = 1000; // - - SPEED = 200; // , / + MAX_STARS = 1000; // Кол-во звёздочек + SPEED = 200; // Скорость, в единицах/сек var i : Integer; - // :) + // Наши звёздочки :) Stars : array [1..MAX_STARS] of TStar; - // + // Ширина и высота дисплея scr_W : Integer; scr_H : Integer; - // + // Время time, dt : Integer; - // (i), (c) + // Рисует текущую звёздочку (i), цвета (c) procedure SetPix(c: Integer); var sx, sy : Integer; begin - // , 3D 2D + // Данные действия, проецируют 3D точку на 2D полоскость дисплея try sx := trunc(scr_W / 2 + Stars[i].X * 200 / (Stars[i].Z + 200)); sy := trunc(scr_H / 2 - Stars[i].Y * 200 / (Stars[i].Z + 200)); @@ -45,7 +45,7 @@ uses GraphABC; scr_W := Window.Width; scr_H := Window.Height; - // + //случайным образом раскидаем звёздочки randomize; for i := 1 to MAX_STARS do begin @@ -54,30 +54,30 @@ uses GraphABC; Stars[i].Z := random(1900); end; - // ( ) + // Очистка содержимого дисплея (чёрный цвет) ClearWindow(Color.Black); time := Milliseconds; - // + // Главный цикл отрисовки repeat scr_W := Window.Width; scr_H := Window.Height; - dt := Milliseconds - time; // , - time := Milliseconds; // + dt := Milliseconds - time; // Сколько мс прошло, с прошлой отрисовки + time := Milliseconds; // Засекаем время for i := 1 to MAX_STARS do begin - // + // Затираем звёздочку с предыдущего кадра SetPix(0); - // + // Изменяем её позицию в зависимости прошедшего с последней отрисовки времени Stars[i].Z := Stars[i].Z - SPEED * dt/1000; - // "" - + // Если звезда "улетела" за позицию камеры - генерируем её вдали if Stars[i].Z <= -200 then begin Stars[i].X := random(scr_W * 4) - scr_W * 2; Stars[i].Y := random(scr_H * 4) - scr_H * 2; - Stars[i].Z := 1900; // :) + Stars[i].Z := 1900; // Откидываем звезду далеко вперёд :) end; - // ( Z ) + // Рисуем звёздочку в новом положении (цвет зависит от Z координаты) SetPix(trunc(255 - 255 * (Stars[i].Z + 200) / 2100)); end; sleep(10); diff --git a/TestSuite/CompilationSamples/Timer2.pas b/TestSuite/CompilationSamples/Timer2.pas index 87cdc04d8..073c3a6b9 100644 --- a/TestSuite/CompilationSamples/Timer2.pas +++ b/TestSuite/CompilationSamples/Timer2.pas @@ -1,4 +1,4 @@ -// "". . +// "Собачка". Иллюстрация использования таймера. uses GraphABC, Timers; var @@ -47,7 +47,7 @@ begin end; begin - SetWindowCaption('""'); + SetWindowCaption('"Собачка"'); SetSmoothingOff; OnMouseMove:=MouseMove; xx := 100; yy := 100; diff --git a/TestSuite/CompilationSamples/Timers.pas b/TestSuite/CompilationSamples/Timers.pas index 13287f776..a7c5c96b3 100644 --- a/TestSuite/CompilationSamples/Timers.pas +++ b/TestSuite/CompilationSamples/Timers.pas @@ -1,11 +1,11 @@ Unit Timers; (* - System.Timers.Timer - (c) .. 2007 + Обертка для класса System.Timers.Timer + (c) Брагилевский В.Н. 2007 - Timer PascalABC - Handle. + Сохранен интерфейс класса Timer из PascalABC + за исключением функции Handle. *) interface @@ -13,7 +13,7 @@ interface uses System; type - /// + /// Класс таймера Timer = class private _timer: System.Timers.Timer; @@ -24,15 +24,15 @@ type function GetInterval: integer; procedure OnTimer(sender: object; e: System.Timers.ElapsedEventArgs); public - /// ms TimerProc + /// Создает таймер с интервалом срабатывания ms миллисекунд и обработчиком TimerProc constructor Create(ms: integer; TimerProc: procedure); - /// + /// Запускает таймер procedure Start; - /// + /// Останавливает таймер procedure Stop; - /// + /// Запущен ли таймер property Enabled: boolean read GetEnabled write SetEnabled; - /// + /// Интервал срабатывания таймера property Interval: integer read GetInterval write SetInterval; end; diff --git a/TestSuite/CompilationSamples/TreeDraw.pas b/TestSuite/CompilationSamples/TreeDraw.pas index 91bb7f805..3251ca1dc 100644 --- a/TestSuite/CompilationSamples/TreeDraw.pas +++ b/TestSuite/CompilationSamples/TreeDraw.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева uses GraphABC; const @@ -7,7 +7,7 @@ const delay = 10; procedure DrawTree(x,y,dx,level: integer); -// : , , +// обход: левое поддерево, корень, правое begin if level>0 then begin @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ' '; + Window.Title := 'Рекурсивное рисование бинарного дерева'; SetSmoothingOff; SetWindowSize(800,30+Levels*LevelHeight); DrawTree(WindowWidth div 2,10,WindowWidth div 5,Levels); diff --git a/TestSuite/CompilationSamples/Try1.pas b/TestSuite/CompilationSamples/Try1.pas index 086f8de6b..c879e8a2f 100644 --- a/TestSuite/CompilationSamples/Try1.pas +++ b/TestSuite/CompilationSamples/Try1.pas @@ -1,14 +1,14 @@ -// . +// Простейшая обработка исключений. Ввод с ошибкой var a: integer; begin try - writeln(' : '); - // :) + writeln('Введите число: '); + // При вводе попробуйте совершить ошибку :) readln(a); - writeln(' '); + writeln('Число введено верно '); except - writeln(' '); + writeln('Ошибка ввода'); end; - writeln(' '); + writeln('Выполнение программы продолжено'); end. diff --git a/TestSuite/CompilationSamples/Try2.pas b/TestSuite/CompilationSamples/Try2.pas index 986a2493a..4145b1fe0 100644 --- a/TestSuite/CompilationSamples/Try2.pas +++ b/TestSuite/CompilationSamples/Try2.pas @@ -1,15 +1,15 @@ -// +// Обработка нескольких исключений var x: integer; begin try - writeln(' (1 - 0): '); + writeln('Введите число (1 - ошибка деления на 0): '); readln(x); x := 10 div (x-1); except on System.FormatException do - writeln(' '); + writeln('Ошибка ввода'); on System.DivideByZeroException do - writeln(' 0'); + writeln('Деление на 0'); end; end. diff --git a/TestSuite/CompilationSamples/Try3.pas b/TestSuite/CompilationSamples/Try3.pas index 22139ddc2..4fcc48113 100644 --- a/TestSuite/CompilationSamples/Try3.pas +++ b/TestSuite/CompilationSamples/Try3.pas @@ -1,15 +1,15 @@ -// finally -// finally , +// Иллюстрация finally +// Секция finally выполняется независимо от того, произошло исключение или нет var x: integer := 0; begin try if Random(2)=0 then x := 10 div x; - writeln(' '); + writeln('Выполнение продолжается'); finally - writeln(' finally'); + writeln('Сработала секция finally'); end; - // , - writeln(' finally'); + // Если возникает исключение, то этот оператор не выполняется + writeln('После секции finally'); end. diff --git a/TestSuite/CompilationSamples/Try4.pas b/TestSuite/CompilationSamples/Try4.pas index 879a1005e..2f61a1b0b 100644 --- a/TestSuite/CompilationSamples/Try4.pas +++ b/TestSuite/CompilationSamples/Try4.pas @@ -1,8 +1,8 @@ -// . +// Исключения. Генерация исключения function f(x: integer): integer; begin if x=0 then - raise new System.Exception(' f 0'); + raise new System.Exception('Аргумент функции f не может быть равен 0'); Result := 10 mod x; end; diff --git a/TestSuite/CompilationSamples/TupleCreate.pas b/TestSuite/CompilationSamples/TupleCreate.pas index 2e991a62d..9d07269f5 100644 --- a/TestSuite/CompilationSamples/TupleCreate.pas +++ b/TestSuite/CompilationSamples/TupleCreate.pas @@ -1,10 +1,10 @@ -// +// Создание кортежей uses System; begin - var a := Tuple.Create('',24); + var a := Tuple.Create('Иванов',24); writeln(a.Item1,' ',a.Item2); - var b := Tuple.Create('',17,1,11); + var b := Tuple.Create('Петров',17,1,11); writeln(b.Item1,' ',b.Item2,' ',b.Item3,' ',b.Item4); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/Untyped1.pas b/TestSuite/CompilationSamples/Untyped1.pas index 15f1eb52a..7c932ddc3 100644 --- a/TestSuite/CompilationSamples/Untyped1.pas +++ b/TestSuite/CompilationSamples/Untyped1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Нетипизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'u.dat'; var @@ -14,7 +14,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); r := random*10; for var i:=0 to 10 do @@ -26,7 +26,7 @@ begin // writeln(s); writeln(c); writeln(k); - // + // Запись в файл данных разных типов write(f,r); // writeln(f,s); write(f,c); @@ -37,9 +37,9 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); - // + // Чтение из файла данных разных типов read(f,r,{s,}c,k); writeln(r); // writeln(s); diff --git a/TestSuite/CompilationSamples/UntypedFile.pas b/TestSuite/CompilationSamples/UntypedFile.pas index c49eaa091..24bb11de5 100644 --- a/TestSuite/CompilationSamples/UntypedFile.pas +++ b/TestSuite/CompilationSamples/UntypedFile.pas @@ -1,4 +1,4 @@ -// +// Бестиповые файлы var f: file; i: integer; @@ -8,11 +8,11 @@ var begin assign(f,'a.dat'); rewrite(f); - // + // Записываем в файл данные любых типов write(f,1,2.5,'Hello'); close(f); reset(f); - // + // Считываем эти данные из файла read(f,i,r,s); write(i,' ',r,' ',s); close(f); diff --git a/TestSuite/CompilationSamples/UpLowCase.pas b/TestSuite/CompilationSamples/UpLowCase.pas index d2fde4a79..2c7303586 100644 --- a/TestSuite/CompilationSamples/UpLowCase.pas +++ b/TestSuite/CompilationSamples/UpLowCase.pas @@ -1,4 +1,4 @@ -// UpperCase, LowerCase +// Использование стандартных функций UpperCase, LowerCase var c: char; begin @@ -8,13 +8,13 @@ begin for c:='A' to 'Z' do write(LowerCase(c)); writeln; - for c:='' to '' do + for c:='А' to 'Я' do write(UpperCase(c)); writeln; - for c:='' to '' do + for c:='а' to 'я' do write(LowerCase(c)); writeln; - var s := ' '; + var s := 'Папа у Васи силён в математике'; s := UpperCase(s); writeln(s); s := LowerCase(s); diff --git a/TestSuite/CompilationSamples/Utils.pas b/TestSuite/CompilationSamples/Utils.pas index 25ed0c819..3ad50958c 100644 --- a/TestSuite/CompilationSamples/Utils.pas +++ b/TestSuite/CompilationSamples/Utils.pas @@ -20,7 +20,7 @@ external 'User32.dll' name 'MessageBox'; procedure ShowMessage(msg:string); begin - ShowMessage(msg,''); + ShowMessage(msg,'Сообщение'); end; procedure ShowMessage(msg,capt:string); diff --git a/TestSuite/CompilationSamples/WebClient.pas b/TestSuite/CompilationSamples/WebClient.pas index 9e543b76b..4595a80c2 100644 --- a/TestSuite/CompilationSamples/WebClient.pas +++ b/TestSuite/CompilationSamples/WebClient.pas @@ -1,4 +1,4 @@ -// WebClient +// Использование WebClient uses System.Net; const address = 'www.yandex.ru'; diff --git a/TestSuite/CompilationSamples/Where.pas b/TestSuite/CompilationSamples/Where.pas index 872cf309b..4b932d35a 100644 --- a/TestSuite/CompilationSamples/Where.pas +++ b/TestSuite/CompilationSamples/Where.pas @@ -1,4 +1,4 @@ -// Where - +// Секция Where - ограничение на типы параметров uses System,System.Collections.Generic; type @@ -15,7 +15,7 @@ type var m: MyClass; - //m1: MyClass; // + //m1: MyClass; // ошибка begin end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/WinFormWithButton.pas b/TestSuite/CompilationSamples/WinFormWithButton.pas index ea6cf05da..ecfa4dbbb 100644 --- a/TestSuite/CompilationSamples/WinFormWithButton.pas +++ b/TestSuite/CompilationSamples/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения {$apptype windows} {$reference 'System.Windows.Forms.dll'} @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/TestSuite/CompilationSamples/Write Critical.pas b/TestSuite/CompilationSamples/Write Critical.pas index 28a70b6a1..c850aa8b4 100644 --- a/TestSuite/CompilationSamples/Write Critical.pas +++ b/TestSuite/CompilationSamples/Write Critical.pas @@ -1,7 +1,7 @@ -// -// . - -// , -// , . . +// Вывод в параллельной секции без использования критических секций +// и с их использованием. В первом случае из-за параллельного доступа +// к разделяемому ресурсу возможно, что строки будут выводиться +// на одной строке, и в произвольно порядке. Во втором случае такого не будет. begin {$omp parallel sections} begin diff --git a/TestSuite/CompilationSamples/WriteAll.pas b/TestSuite/CompilationSamples/WriteAll.pas index 9aade8ace..7b9ca40ce 100644 --- a/TestSuite/CompilationSamples/WriteAll.pas +++ b/TestSuite/CompilationSamples/WriteAll.pas @@ -1,12 +1,12 @@ -/// write +/// Вывод различных типов процедурой write begin - // , , , + // Вывод, целого, строки, вещественного Writeln(1,' ',2.5); - // + // Вывод множества Writeln([1..10]); - // + // Вывод логического Writeln(True); var a: array [1..10] of integer; - // ( ) + // Вывод массива (выводится его тип) Writeln(a); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/WriteFormat.pas b/TestSuite/CompilationSamples/WriteFormat.pas index 7e060018f..a6ea0c119 100644 --- a/TestSuite/CompilationSamples/WriteFormat.pas +++ b/TestSuite/CompilationSamples/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); - // + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/WriteRecord.pas b/TestSuite/CompilationSamples/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/TestSuite/CompilationSamples/WriteRecord.pas +++ b/TestSuite/CompilationSamples/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSuite/CompilationSamples/__RedirectIOMode.pas b/TestSuite/CompilationSamples/__RedirectIOMode.pas index ae5ce5d1a..1cc6a0b5f 100644 --- a/TestSuite/CompilationSamples/__RedirectIOMode.pas +++ b/TestSuite/CompilationSamples/__RedirectIOMode.pas @@ -4,14 +4,14 @@ unit __RedirectIOMode; //------------------------------------------------------------------------------ -// -// () DarkStar 2007 -// : -// 1. ErrorStream [READLNSIGNAL] -// 2. AppDomain.CurrentDomain.UnhandledException -// ErrorStream -// 3. Application.ThreadException -// ErrorStream +// Модуль подключаемый в режиме запуска со связью с оболочкой +// (с) DarkStar 2007 +// Функции: +// 1. Посылка в поток ErrorStream сигнала [READLNSIGNAL] +// 2. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и +// пердача их в поток ErrorStream +// 3. Перехват исключений по Application.ThreadException и +// пердача их в поток ErrorStream //------------------------------------------------------------------------------ {$reference 'System.Windows.Forms.dll'} @@ -112,7 +112,7 @@ begin if AppDomain.CurrentDomain.GetData('_RedirectIO_SpecialArgs') = nil then Console.ReadLine; RedirectIOInDebugMode := true; - if IOStandardSystem(CurrentIOSystem).GetType = typeof(IOStandardSystem) then // SSM 30.04.06 - ! PT4! + if IOStandardSystem(CurrentIOSystem).GetType = typeof(IOStandardSystem) then // SSM 30.04.06 - не менять! Влияет на PT4! CurrentIOSystem := new __ReadSignalOISystem; AppDomain.CurrentDomain.UnhandledException += DbgExceptionHandler; System.Windows.Forms.Application.ThreadException += Application_ThreadException; diff --git a/TestSuite/CompilationSamples/__RunMode.pas b/TestSuite/CompilationSamples/__RunMode.pas index b6590a242..b0c725f60 100644 --- a/TestSuite/CompilationSamples/__RunMode.pas +++ b/TestSuite/CompilationSamples/__RunMode.pas @@ -4,12 +4,12 @@ unit __RunMode; //------------------------------------------------------------------------------ -// , -// () DarkStar 2007 -// : -// 1. AppDomain.CurrentDomain.UnhandledException -// -// 2. - , exe- +// Модуль, подключаемый в режиме запуска без связи с оболочкой +// (с) DarkStar 2007 +// Функции: +// 1. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и +// вывод их в консоль +// 2. Если это - консольное окно, то устанавливает имя заголовка на имя exe-файла //------------------------------------------------------------------------------ interface diff --git a/TestSuite/CompilationSamples/algo1.pas b/TestSuite/CompilationSamples/algo1.pas index ba48b426f..a6713302b 100644 --- a/TestSuite/CompilationSamples/algo1.pas +++ b/TestSuite/CompilationSamples/algo1.pas @@ -1,14 +1,14 @@ -// +// Алгоритм определения простоты числа var N: integer; IsSimple: boolean; begin - writeln(' : '); + writeln('Введите число: '); readln(N); IsSimple := True; - for var i:=2 to round(sqrt(N)) do // , <= (sqrt(N)) + for var i:=2 to round(sqrt(N)) do // если число составное, то один из его сомножителей <= (sqrt(N)) if N mod i = 0 then begin IsSimple := False; @@ -16,6 +16,6 @@ begin end; if IsSimple then - writeln(' ',N,' ') - else writeln(' ',N,' '); + writeln('Число ',N,' простое') + else writeln('Число ',N,' составное'); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/algo2.pas b/TestSuite/CompilationSamples/algo2.pas index 8028f87e4..1d02bcd1f 100644 --- a/TestSuite/CompilationSamples/algo2.pas +++ b/TestSuite/CompilationSamples/algo2.pas @@ -1,14 +1,14 @@ -// x +// Алгоритм вычисления значения многочлена в точке x по схеме Горнера const n=5; var x,a: real; begin - writeln(' x: '); + writeln('Введите значение x: '); readln(x); - writeln(' (',n+1,' ): '); + writeln('Введите коэффициенты многочлена (',n+1,' штук): '); read(a); var s := a; for var i:=1 to n do @@ -17,5 +17,5 @@ begin s := s*x + a; end; - writeln(' ',x,' ',s); + writeln('Значение многочлена в точке ',x,' равно ',s); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/f0.pas b/TestSuite/CompilationSamples/f0.pas index 1c2864444..9d99a2983 100644 --- a/TestSuite/CompilationSamples/f0.pas +++ b/TestSuite/CompilationSamples/f0.pas @@ -14,11 +14,11 @@ begin a := new IntegerField('a:'); b := new IntegerField('b:'); LineBreak; - sum := new IntegerField(':',220); + sum := new IntegerField('Сумма:',220); LineBreak; - prod := new IntegerField(':',220); + prod := new IntegerField('Произведение:',220); LineBreak; EmptyLine(20); - d := new Button(''); + d := new Button('Вычислить'); d.Click += MyClick; end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/f0_MV.pas b/TestSuite/CompilationSamples/f0_MV.pas index 7b92dc009..0c3888204 100644 --- a/TestSuite/CompilationSamples/f0_MV.pas +++ b/TestSuite/CompilationSamples/f0_MV.pas @@ -25,12 +25,12 @@ type a := new IntegerField('a:'); b := new IntegerField('b:'); LineBreak; - sum := new IntegerField(':',220); + sum := new IntegerField('Сумма:',220); LineBreak; - prod := new IntegerField(':',220); + prod := new IntegerField('Произведение:',220); LineBreak; EmptyLine(20); - var d := new Button(''); + var d := new Button('Вычислить'); d.Click += MyClick; end; end; diff --git a/TestSuite/CompilationSamples/f0_class.pas b/TestSuite/CompilationSamples/f0_class.pas index 98f26e4dc..fc4696033 100644 --- a/TestSuite/CompilationSamples/f0_class.pas +++ b/TestSuite/CompilationSamples/f0_class.pas @@ -15,12 +15,12 @@ type a := new IntegerField('a:'); b := new IntegerField('b:'); LineBreak; - sum := new IntegerField(':',220); + sum := new IntegerField('Сумма:',220); LineBreak; - prod := new IntegerField(':',220); + prod := new IntegerField('Произведение:',220); LineBreak; EmptyLine(20); - var d := new Button(''); + var d := new Button('Вычислить'); d.Click += MyClick; end; end; diff --git a/TestSuite/CompilationSamples/graph3d.pas b/TestSuite/CompilationSamples/graph3d.pas index 55b1e5338..ea0587a05 100644 --- a/TestSuite/CompilationSamples/graph3d.pas +++ b/TestSuite/CompilationSamples/graph3d.pas @@ -1,6 +1,6 @@ -// KuMir/PMir -// -// :) +// Пример из пакета KuMir/PMir +// Публикуется практически без изменений +// Дорог как память :) Uses GraphABC; var Xmin,Xmax,Xstep: real; @@ -57,8 +57,8 @@ begin end; begin - SetWindowCaption(' '); + SetWindowCaption('График функции двух переменных'); SetWindowSize(600,400); - dx := 2; { X } - gr(100); { Y <= MaxN } + dx := 2; { разрешение по оси X } + gr(100); { количество линий по Y <= MaxN } end. diff --git a/TestSuite/CompilationSamples/graphic.pas b/TestSuite/CompilationSamples/graphic.pas index 20809900e..77a0a3bff 100644 --- a/TestSuite/CompilationSamples/graphic.pas +++ b/TestSuite/CompilationSamples/graphic.pas @@ -1,6 +1,6 @@ -// drawGraph -// OY -// +// Процедура drawGraph рисования графика функции в полном окне +// с масштабированием по оси OY +// Перерисовывает график при изменении размеров окна uses GraphABC; type FUN = function (x: real): real; @@ -10,8 +10,8 @@ begin Result := x*sin(x)*exp(-0.1*x); end; -// l (logical) - -// s (screen) - +// l (logical) - логические координаты +// s (screen) - физические координаты procedure drawGraph(x1,x2: real; f: FUN); var xl0,wl,yl0,hl: real; @@ -56,7 +56,7 @@ begin // drawGraph yl0 := min; hl := -(max-min); - // + // Нарисовать оси системы координат Line(0,LtoSy(0),ws,LtoSy(0)); Line(LtoSx(0),0,LtoSx(0),hs); @@ -75,7 +75,7 @@ end; begin LockDrawing; - SetWindowCaption(' : '); + SetWindowCaption('График функции: масштабирование'); drawGraph(0,60,f); Redraw; OnResize := Resize; diff --git a/TestSuite/CompilationSamples/rain.pas b/TestSuite/CompilationSamples/rain.pas index c496bf0f6..17f971f4d 100644 --- a/TestSuite/CompilationSamples/rain.pas +++ b/TestSuite/CompilationSamples/rain.pas @@ -1,4 +1,4 @@ -// +// Имитация кругов на воде от капель дождя uses GraphABC; const speed = 2; @@ -20,7 +20,7 @@ end; const z=50; begin - Window.Title := ' '; + Window.Title := 'Капли дождя'; SetWindowSize(800,600); while True do Kaplia(Random(z,WindowWidth-z),Random(z,WindowHeight-z)); diff --git a/TestSuite/CompilationSamples/random_DM.pas b/TestSuite/CompilationSamples/random_DM.pas index b1e906fad..c9f2904c0 100644 --- a/TestSuite/CompilationSamples/random_DM.pas +++ b/TestSuite/CompilationSamples/random_DM.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация использования случайных чисел для Чертежника. Лучи uses DrawMan; begin diff --git a/TestSuite/CompilationSamples/random_Robot.pas b/TestSuite/CompilationSamples/random_Robot.pas index 2f6f917c7..4ab24f209 100644 --- a/TestSuite/CompilationSamples/random_Robot.pas +++ b/TestSuite/CompilationSamples/random_Robot.pas @@ -1,4 +1,4 @@ - // . + // Демонстрация использования случайных чисел для Робота. Случайное блуждание uses Robot; begin diff --git a/TestSuite/CompilationSamples/repeat1.pas b/TestSuite/CompilationSamples/repeat1.pas index f5bb0a55e..6621f57de 100644 --- a/TestSuite/CompilationSamples/repeat1.pas +++ b/TestSuite/CompilationSamples/repeat1.pas @@ -1,12 +1,12 @@ -// repeat. +// Цикл repeat. Контроль ввода var mark: integer; begin repeat - writeln(' (2..5): '); + writeln('Введите оценку (2..5): '); readln(mark); if (mark<2) or (mark>5) then - writeln(' . '); + writeln('Оценка неверная. Повторите ввод'); until (mark>=2) and (mark<=5); - writeln(' ',mark); + writeln('Вы ввели оценку ',mark); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/repeat2.pas b/TestSuite/CompilationSamples/repeat2.pas index da13faadc..da416f808 100644 --- a/TestSuite/CompilationSamples/repeat2.pas +++ b/TestSuite/CompilationSamples/repeat2.pas @@ -1,13 +1,13 @@ -// repeat. +// Цикл repeat. Алгоритм Евклида нахождения наибольшего общего делителя var A,B: integer; begin - write(' : '); + write('Введите два целых числа: '); readln(A,B); repeat var C := A mod B; A := B; B := C; until B=0; - write(' = ',A); + write('Наибольший общий делитель = ',A); end. \ No newline at end of file diff --git a/TestSuite/CompilationSamples/while1.pas b/TestSuite/CompilationSamples/while1.pas index 46ca9f83a..bf8f62300 100644 --- a/TestSuite/CompilationSamples/while1.pas +++ b/TestSuite/CompilationSamples/while1.pas @@ -1,8 +1,8 @@ -// while. 3 +// Цикл while. Вывод чисел с шагом 3 const n = 60; begin - writeln(' 1 ',n,', 3'); + writeln('Числа от 1 до ',n,', кратные 3'); var x := 3; while x<=n do begin diff --git a/TestSuite/CompilationSamples/while2.pas b/TestSuite/CompilationSamples/while2.pas index f24c07321..ff9996415 100644 --- a/TestSuite/CompilationSamples/while2.pas +++ b/TestSuite/CompilationSamples/while2.pas @@ -1,6 +1,6 @@ -// while. 2 +// Цикл while. Степени 2 begin - writeln(' 2'); + writeln('Степени 2'); var i := 1; var p := 1; while i<32 do diff --git a/TestSuite/CompilationSamples/while3.pas b/TestSuite/CompilationSamples/while3.pas index 9f6819686..35345d005 100644 --- a/TestSuite/CompilationSamples/while3.pas +++ b/TestSuite/CompilationSamples/while3.pas @@ -1,10 +1,10 @@ -// while. +// ÷икл while. —умма цифр положительного числа var m: integer; begin - writeln(' : '); + writeln('¬ведите положительное число: '); read(m); - write(' : '); + write('÷ифры числа в обратном пор¤дке: '); var s := 0; while m>0 do begin @@ -14,5 +14,5 @@ begin m := m div 10; end; writeln; - writeln(' = ',s); + writeln('—умма цифр = ',s); end. \ No newline at end of file diff --git a/TestSuite/Test1_StrToInt.pas b/TestSuite/Test1_StrToInt.pas index da3e4b0b7..7a6808a03 100644 --- a/TestSuite/Test1_StrToInt.pas +++ b/TestSuite/Test1_StrToInt.pas @@ -12,7 +12,7 @@ begin if code<>1 then begin writeln; - writeln(s+' : ') + writeln(s+' : Должно было произойти исключение') end else write('OK '); end; @@ -31,12 +31,12 @@ begin if code=1 then begin writeln; - writeln(s+' : ') + writeln(s+' : Ошибка при переводе строки в целое') end else if code=2 then begin writeln; - writeln(s+' : - ') + writeln(s+' : Ошибка - неправильно работает') end else write('OK '); end; diff --git a/TestSuite/errors/err0206.pas b/TestSuite/errors/err0206.pas index f6a6b66c2..8ead21872 100644 --- a/TestSuite/errors/err0206.pas +++ b/TestSuite/errors/err0206.pas @@ -3,5 +3,5 @@ begin end; begin - var ttt := f; // ! + var ttt := f; // падает! end. \ No newline at end of file diff --git a/TestSuite/errors/err0207.pas b/TestSuite/errors/err0207.pas index 6de51c30b..c8e8b891f 100644 --- a/TestSuite/errors/err0207.pas +++ b/TestSuite/errors/err0207.pas @@ -3,5 +3,5 @@ begin end; begin - var ttt := f; // ! + var ttt := f; // падает! end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/15.pas b/TestSuite/formatter_tests/input/15.pas index b75b36d6b..23206ab8b 100644 --- a/TestSuite/formatter_tests/input/15.pas +++ b/TestSuite/formatter_tests/input/15.pas @@ -1,16 +1,16 @@ -// 15 +// Игра в 15 uses GraphABC,ABCObjects,ABCButtons; const -/// +/// размер поля n = 4; -/// +/// размер фишки sz = 100; -/// +/// зазор между фишками zz = 10; -/// +/// отступ от левого и правого краев x0 = 20; -/// +/// отступ от верхнего и нижнего краев y0 = 20; var @@ -22,9 +22,9 @@ var EmptyCellX,EmptyCellY: integer; MovesCount: integer; - EndOfGame: boolean; // True + EndOfGame: boolean; // True если все фишки стоят на своих местах -// +// Поменять местами две фишки procedure Swap(var p,p1: SquareABC); begin PABCSystem.Swap(p,p1); @@ -36,20 +36,20 @@ begin p1.Top := i; end; -// , +// Определить, являются ли клетки соседями function Sosedi(x1,y1,x2,y2: integer): boolean; begin Result := (abs(x1-x2)=1) and (y1=y2) or (abs(y1-y2)=1) and (x1=x2) end; -// +// Заполнить вспомогательный массив цифр procedure FillDigitsArr; begin for var i:=1 to n*n-1 do digits[i] := i; end; -// . +// Перемешать вспомогательный массив цифр. Количество обменов должно быть четным procedure MeshDigitsArr; var x: integer; begin @@ -61,13 +61,13 @@ begin Swap(digits[i],digits[x]); end; if n mod 2=0 then - Swap(digits[1],digits[2]); // + Swap(digits[1],digits[2]); // количество обменов должно быть четным end; -// . - 0 +// Заполнить двумерный массив фишек. Вместо пустой ячейки - белая фишка с числом 0 procedure Fill15ByDigitsArr; begin - Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // + Swap(p[EmptyCellY,EmptyCellX],p[n,n]); // Переместить пустую фишку в правый нижний угол EmptyCellX := n; EmptyCellY := n; var i := 1; @@ -80,18 +80,18 @@ begin end; end; -// +// Перемешать массив фишек procedure Mesh15; begin MeshDigitsArr; Fill15ByDigitsArr; MovesCount := 0; EndOfGame := False; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.Color := RGB(200,200,255); end; -// +// Создать массив фишек procedure Create15; begin EmptyCellX := n; @@ -111,7 +111,7 @@ begin Fill15ByDigitsArr; end; -// , +// Проверить, все ли фишки стоят на своих местах function IsSolution: boolean; var x,y,i: integer; begin @@ -132,24 +132,24 @@ end; procedure MouseDown(x,y,mb: integer); begin - if EndOfGame then // , "" + if EndOfGame then // Если все фишки на своих местах, то не реагировать на мышь и ждать нажатия кнопки "Перемешать" exit; - if ObjectUnderPoint(x,y)=nil then // E , + if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; - var fx := (x-x0) div (sz+zz) + 1; // , + var fx := (x-x0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью var fy := (y-y0) div (sz+zz) + 1; if (fx>n) or (fy>n) then exit; - if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // , + if Sosedi(fx,fy,EmptyCellX,EmptyCellY) then // Если ячейка соседствует с пустой, то поменять их местами begin Swap(p[EmptyCellY,EmptyCellX],p[fy,fx]); EmptyCellX := fx; EmptyCellY := fy; Inc(MovesCount); - StatusRect.Text := ' : ' + IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: ' + IntToStr(MovesCount); if IsSolution then begin - StatusRect.Text := '! : ' + IntToStr(MovesCount); + StatusRect.Text := 'Победа! Сделано ходов: ' + IntToStr(MovesCount); StatusRect.Color := RGB(255,200,200); EndOfGame := True; end @@ -158,18 +158,18 @@ end; begin SetSmoothingOff; - Window.Title := ' 15'; + Window.Title := 'Игра в 15'; Window.IsFixedSize := True; SetWindowSize(2*x0+(sz+zz)*n-zz,2*y0+(sz+zz)*n-zz+90); EndOfGame := False; Create15; - MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'',clLightGray); + MeshButton := ButtonABC.Create((WindowWidth-200) div 2,2*y0+(sz+zz)*n-zz,200,'Перемешать',clLightGray); MeshButton.OnClick := Mesh15; StatusRect := new RectangleABC(0,WindowHeight-40,WindowWidth,40,RGB(200,200,255)); StatusRect.TextVisible := True; - StatusRect.Text := ' : '+IntToStr(MovesCount); + StatusRect.Text := 'Количество ходов: '+IntToStr(MovesCount); StatusRect.BorderWidth := 2; StatusRect.BorderColor := RGB(80,80,255); diff --git a/TestSuite/formatter_tests/input/ABC1.pas b/TestSuite/formatter_tests/input/ABC1.pas index dda84ddc0..0fe49e801 100644 --- a/TestSuite/formatter_tests/input/ABC1.pas +++ b/TestSuite/formatter_tests/input/ABC1.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; @@ -13,7 +13,7 @@ var z: StarABC; begin - Window.Title := 'ABCObjects: '; + Window.Title := 'ABCObjects: свойства графических объектов'; z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); r := new RectangleABC(100,100,200,100,Color.Gold); Pause; diff --git a/TestSuite/formatter_tests/input/ABCObjects.pas b/TestSuite/formatter_tests/input/ABCObjects.pas index 3dac3a070..2e2c13ade 100644 --- a/TestSuite/formatter_tests/input/ABCObjects.pas +++ b/TestSuite/formatter_tests/input/ABCObjects.pas @@ -1,7 +1,7 @@ -/// , , -/// . -/// , -/// . +///Модуль реализует векторные графические объекты с возможностью масштабирования, наложения друг на друга, +///создания составных графических объектов и многократного их вложения друг в друга. +///Каждый векторный графический объект перерисовывает себя при перемещении, изменении размеров +///и частичном перекрытии другими объектами. unit ABCObjects; //{$apptype windows} @@ -18,7 +18,7 @@ type ContainerABC = class; GRectangle = System.Drawing.Rectangle; - /// + /// Базовый класс для всех графических объектов ObjectABC = class private fx,fy: integer; @@ -32,7 +32,7 @@ type _dx,_dy: integer; procedure SetCoords(x,y: integer); protected - // InternalDraw: ( ). Draw(fx,fy) + // InternalDraw: низкоуровневая процедура (не вызывается пользователем). Просто вызывает Draw(fx,fy) procedure InternalDraw; procedure SetVis(v: boolean); procedure SetColor(cl: GColor); @@ -64,102 +64,102 @@ type procedure DrawText(x,y: integer; g: Graphics); procedure Init(x,y,w,h: integer; cl: GColor); procedure InitBy(g: ObjectABC); - // Draw: . + // Draw: переопределяется в подклассах. Рисует объект на текущей канве procedure Draw(x,y: integer; g: Graphics); virtual; begin end; procedure Draw(x,y: integer); public - /// (w,h) cl (x,y) + /// Создает графический объект размера (w,h) цвета cl с координатами левого верхнего угла (x,y) constructor Create(x,y,w,h: integer; cl: GColor := clWhite); - /// - g + /// Создает графический объект - копию объекта g constructor Create(g: ObjectABC); - /// + /// Уничтожает графический объект destructor Destroy; - // Redraw: ( ). - // , drawRect(Bounds). - // , (., ) - // ( ) + // Redraw: низкоуровневая процедура (не вызывается пользователем). + // Обновляет изображение объекта на экране, вызывая drawRect(Bounds). + // Вызывается в ситуациях, когда границы объекта не изменяются (напр., смена цвета) + // или увеличиваются (добавление нового объекта к фигуре) procedure Redraw; - // RedrawNow - , LockDrawing + // RedrawNow - вызывает перерисовку объекта, несмотря на LockDrawing procedure RedrawNow; - /// (x,y) + /// Перемещает левый верхний угол графического объекта к точке (x,y) procedure MoveTo(x,y: integer); - /// (a,b) + /// Перемещает графический объект на вектор (a,b) procedure MoveOn(a,b: integer); - /// , dx,dy + /// Перемещает графический объект на вектор, задаваемый свойствами dx,dy procedure Move; virtual; - /// f (f>1 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 00,' <0'); +// Assert(f>0,'масштабный коэффициент<0'); Width := round(Width*f); Height := round(Height*f); end; @@ -1296,7 +1296,7 @@ end; //------ BoundedObjectABC ------- constructor BoundedObjectABC.Create(x,y,w,h: integer; cl: GColor); begin -// ? +// А нужно ли это? Init(x,y,w,h,cl); end; @@ -1714,7 +1714,7 @@ begin fh := TextHeight(Text); if not __LockDrawingObjects then DrawAfterChangeBounds(r,Bounds) -// Redraw; // ! +// Redraw; // это неверно! end; procedure TextABC.SetTB(b: boolean); @@ -1836,7 +1836,7 @@ end; procedure RegularPolygonABC.SetWidth(Width: integer); begin if Width mod 2 = 0 then - Width := Width - 1; // + Width := Width - 1; // Ширина и высота должны быть нечетными ObjectABCSetSize(Width,Width); end; @@ -2236,7 +2236,7 @@ begin p := Picture.Create(fname); p.Transparent := True; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2247,7 +2247,7 @@ procedure MultiPictureABC.Init(x,y,w: integer; p: Picture); begin Self.p := p; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2311,7 +2311,7 @@ procedure MultiPictureABC.ChangePicture(w: integer; fname: string); begin p.Load(fname); if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; Width := w; @@ -2327,7 +2327,7 @@ begin Inc(cnt); p1 := Picture.Create(fname); if (p1.Width<>Width) or (p1.Height<>Height) then - raise Exception.Create(' '+fname+' MultiPictureABC'); + raise Exception.Create('Размеры картинки в файле '+fname+' отличаются от размеров MultiPictureABC'); p1.Transparent := Transparent; p.Width := p.Width + Width; r1 := new System.Drawing.Rectangle(0,0,Width,Height); @@ -2338,7 +2338,7 @@ end; procedure MultiPictureABC.SetCurrentPicture(i: integer); begin if (i<1) or (i>Count) then - raise Exception.Create(' '+IntToStr(i)+' '+IntToStr(i)+'..'+IntToStr(Count)); + raise Exception.Create('Номер картинки '+IntToStr(i)+' находится вне диапазона '+IntToStr(i)+'..'+IntToStr(Count)); cur := i; Redraw; end; @@ -2682,7 +2682,7 @@ begin if ob=nil then Exit; ob.dx := x; - ob.dy := y; // dx dy + ob.dy := y; // использую dx и dy для задания клеточных координат на доске ob.Center := new Point(Left+CellSizeX*(x-1)+CellSizeX div 2,Top+CellSizeY*(y-1)+CellSizeY div 2); end; diff --git a/TestSuite/formatter_tests/input/ABCSprites.pas b/TestSuite/formatter_tests/input/ABCSprites.pas index bf1c7334e..7840881fb 100644 --- a/TestSuite/formatter_tests/input/ABCSprites.pas +++ b/TestSuite/formatter_tests/input/ABCSprites.pas @@ -1,5 +1,5 @@ -/// ABCSprites - . -/// SpriteABC MultiPictureABC. +///Модуль ABCSprites реализует спрайты - анимационные объекты с автоматически меняющимися кадрами. +///Спрайт представляется классом SpriteABC и является разновидностью мультикартинки MultiPictureABC. unit ABCSprites; //#savepcu false @@ -10,9 +10,9 @@ uses ABCObjects,Events,GraphABC,Utils; type SpriteState = record - Name: string; // - Beg: integer; // , - Count: integer; // + Name: string; // имена состояний + Beg: integer; // номера картинок, являющихся началами состояний + Count: integer; // длины состояний constructor Create(n: string; b,c: integer); begin Name := n; @@ -24,10 +24,10 @@ type SpriteABC = class(MultiPictureABC) private States: Array of SpriteState; - curst: integer; // - ticks: integer; // , : 0..10 - act: boolean; // - curtick: integer; // , + curst: integer; // номер текущего состояния + ticks: integer; // сколько тиков проходит до смены кадра, обратно пропорционален скорости: 0..10 + act: boolean; // активен ли спрайт + curtick: integer; // текущий тик, когда он становится равным procedure SetStateName(n: string); function GetStateName: string; procedure SetState(n: integer); @@ -39,75 +39,75 @@ type function GetFrame: integer; protected procedure Init0; - procedure Init(x,y: integer; fname: string); // Add AddState, CheckStates - procedure Init(x,y,w: integer; fname: string); // AddState, CheckStates + procedure Init(x,y: integer; fname: string); // после этого придется вызывать Add и AddState, затем CheckStates + procedure Init(x,y,w: integer; fname: string); // после этого придется вызывать AddState, затем CheckStates procedure Init(x,y,w: integer; p: Picture); procedure InitWithStates(x,y: integer; fname: string); procedure InitBy(g: SpriteABC); public - /// , fname. - /// fname , .spinf - /// , . Add. - /// AddStates CheckStates - /// .spinf, - /// . - /// (x,y) + /// Создает спрайт, загружая его из файла с именем fname. + ///Имя fname может быть либо именем графического файла, либо именем информационного файла спрайта с расширением .spinf + ///Если имя является именем графического файла, то создается спрайт с одним кадром. Остальные кадры добавляются методом Add. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///Если файл имеет расширение .spinf, то он содержит информацию о кадрах и состояниях спрайта и + ///должен сопровождаться соответствующим графическим файлом. + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y: integer; fname: string); - /// , fname. , - /// , . - /// w. fname w, . - /// AddStates CheckStates - /// (x,y) + /// Создает спрайт, загружая его из файла fname. Файл должен хранить рисунок, представляющий собой + ///последовательность кадров одного размера, расположенных по горизонтали. + ///Каждый кадр считается имеющим ширину w. Если ширина рисунка в файле fname не кратна w, то возникает исключение. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y,w: integer; fname: string); - /// , p: Picture. , - /// , . - /// w. w, . - /// AddStates CheckStates - /// (x,y) + /// Создает спрайт, загружая его из объекта p: Picture. Он должен хранить рисунок, представляющий собой + ///последовательность кадров одного размера, расположенных по горизонтали. + ///Каждый кадр считается имеющим ширину w. Если ширина рисунка не кратна w, то возникает исключение. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y,w: integer; p: Picture); - /// - g + /// Создает спрайт - копию спрайта g constructor Create(g: SpriteABC); - /// + /// Удаляет спрайт destructor Destroy; - /// . CheckStates + /// Добавляет состояние к спрайту. После добавления всех состояний следует вызвать CheckStates procedure AddState(name: string; count: integer); - /// . + /// Проверяет корректность набора состояний. Вызывается после добавления всех состояний procedure CheckStates; - /// + /// Добавляет кадр к спрайту procedure Add(fname: string); - /// - /// fname - /// , , .spinf + /// Сохраняет графический и информационный файлы спрайта + /// Имя fname задает имя графического файла + /// Информационный файл сохраняется в тот же каталог, что и графический, имеет то же имя и расширение .spinf procedure SaveWithInfo(fname: string); - /// + /// Переходит к следующему кадру в текущем состоянии procedure NextFrame; - /// ; ticks, 1 NextFrame + /// Переходит к следующему тику таймера; если он равен ticks, то он сбрасывается в 1 и вызывается NextFrame procedure NextTick; - /// + /// Имя состояния property StateName: string read GetStateName write SetStateName; - /// (1..StateCount) + /// Номер состояния (1..StateCount) property State: integer read curst write SetState; - /// + /// Количество состояний property StateCount: integer read GetStateCount; - /// (1..10) + /// Скорость спрайта (1..10) property Speed: integer read GetSpeed write SetSpeed; - /// : True, (.. ), False + /// Активность спрайта: True, если спрайт активен (т.е. происходит его анимация), и False в противном случае property Active: boolean read act write SetActive; - /// + /// Текущий кадр в текущем состоянии property Frame: integer read GetFrame write SetFrame; - /// + /// Возвращает количество кадров в текущем состоянии function FrameCount: integer; - /// + /// Возвращает начальный кадр в текущем состоянии function FrameBeg: integer; - /// + /// Возвращает клон объекта function Clone0: ObjectABC; override; - /// + /// Возвращает клон объекта function Clone: SpriteABC; end; -/// +/// Стартует анимацию всех спрайтов procedure StartSprites; -/// +/// Останавливает анимацию всех спрайтов procedure StopSprites; ///-- @@ -120,8 +120,8 @@ implementation const infoext = '.spinf'; var - _Sprites: System.Collections.ArrayList; // - _t: System.Timers.Timer; // + _Sprites: System.Collections.ArrayList; // массив спрайтов + _t: System.Timers.Timer; // таймер спрайтов timerMs: integer; procedure SpriteABC.Init0; @@ -166,7 +166,7 @@ begin { if not FileExists(fname) then fname := StandardImageFolder + fname;} if not FileExists(fname) then - raise Exception.Create(' '+ExtractFileName(fname)+' '); + raise Exception.Create('Файл '+ExtractFileName(fname)+' не найден'); Init0; @@ -176,7 +176,7 @@ begin Delete(s,i,Length(s)); s := s + infoext; if not FileExists(s) then - raise Exception.Create(' '+ExtractFileName(s)+' ');} + raise Exception.Create('Информационный файл спрайта '+ExtractFileName(s)+' не найден');} try assign(f,fname); @@ -205,7 +205,7 @@ begin on e: Exception do begin writeln(e); - raise Exception.Create(' '); + raise Exception.Create('Ошибка считывания из информационного файла спрайта'); end; end; inherited Init(x,y,w,fname); @@ -267,7 +267,7 @@ begin CheckStates; s:=LowerCase(ExtractFileExt(fname)); if (s<>'.bmp') and (s<>'.jpg') and (s<>'.gif') and (s<>'.png') then - raise Exception.Create(' '); + raise Exception.Create('Задан неверный формат графического файла'); Save(fname); fnameold := fname; i := Pos(s,fname); @@ -275,14 +275,14 @@ begin fname := fname + infoext; assign(f,fname); rewrite(f); - writeln(f,ExtractFileName(fnameold),' // '); - writeln(f,width,' // '); -// writeln(f,count,' // '); - writeln(f,Speed,' // '); - writeln(f,StateCount,' // '); + writeln(f,ExtractFileName(fnameold),' // имя файла спрайта'); + writeln(f,width,' // ширина кадра'); +// writeln(f,count,' // количество кадров'); + writeln(f,Speed,' // скорость'); + writeln(f,StateCount,' // количество состояний'); for i:=0 to StateCount-1 do if i=0 then - writeln(f,States[i].Name,' ',States[i].Count,' // ') + writeln(f,States[i].Name,' ',States[i].Count,' // имена состояний и количество кадров в них') else writeln(f,States[i].Name,' ',States[i].Count); close(f); end; @@ -296,12 +296,12 @@ begin for i:=0 to StateCount-1 do s := s + States[i].Count; if s<>Count then - raise Exception.Create(' '); + raise Exception.Create('Сумма кадров в состояниях спрайта отличается от общего количества кадров'); end; procedure SpriteABC.Add(fname: string); begin -// Assert(StateCount=1,' 1'); +// Assert(StateCount=1,'при добавлении кадров количество состояний должно быть равно 1'); inherited Add(fname); Inc(States[0].Count); end; @@ -356,8 +356,8 @@ end; procedure SpriteABC.SetSpeed(n: integer); begin - // - // ! + // пока нет нулевой скорости + // сделать поправку на изменение тика при уменьшении скорости! if n<1 then n := 1; if n>10 then n := 10; case n of @@ -402,7 +402,7 @@ begin if n>States[curst-1].Count then n := 1; Frame := n; -// Redraw; // ! +// Redraw; // это надо отключать по флагу! end; procedure SpriteABC.SetFrame(n: integer); @@ -493,7 +493,7 @@ var __initialized := false; procedure __InitModule; begin - timerMs := 50; // . + timerMs := 50; // дискретизация таймера. Потом допустима перекалибровка _Sprites := new System.Collections.ArrayList; _t := new System.Timers.Timer(timerMs); _t.Elapsed += TimerProc; diff --git a/TestSuite/formatter_tests/input/AllFromObject.pas b/TestSuite/formatter_tests/input/AllFromObject.pas index 1bf1fd91f..f33bcd697 100644 --- a/TestSuite/formatter_tests/input/AllFromObject.pas +++ b/TestSuite/formatter_tests/input/AllFromObject.pas @@ -1,4 +1,4 @@ -// - Object +// Все типы - производные от Object var i: integer; r: real; @@ -10,5 +10,5 @@ begin o := r; writeln(o.GetType); if o.GetType=typeof(real) then - writeln(' o - '); + writeln('В переменной o - вещественный тип'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Amp.pas b/TestSuite/formatter_tests/input/Amp.pas index a7c48162d..64c8ee9f9 100644 --- a/TestSuite/formatter_tests/input/Amp.pas +++ b/TestSuite/formatter_tests/input/Amp.pas @@ -1,9 +1,9 @@ -// & +// Пример иллюстрирует использование значка & для снятия атрибута ключевого слова var &begin,&end: integer; begin &begin := 1; &end := 2; - var t: System.Type := &begin.GetType; // System.Type & + var t: System.Type := &begin.GetType; // в System.Type использовать & не надо write(&begin,' ',&end,' ',t); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Animals.pas b/TestSuite/formatter_tests/input/Animals.pas index a6cd053a8..b8eda8322 100644 --- a/TestSuite/formatter_tests/input/Animals.pas +++ b/TestSuite/formatter_tests/input/Animals.pas @@ -1,6 +1,6 @@ -// " ". -// " " -// : " " - " " +// Самообучающаяся игра "Угадай животное". +// Старайтесь на вопрос "Чем отличается" вводить самый общий ответ +// Например: "Чем отличается чиж от ежа" - "Умеет летать" type TNode = class s: string; @@ -15,7 +15,7 @@ type var f: text; -/// +/// Сохранить дерево в файл procedure SaveToFile(p: TNode); begin if p=nil then @@ -28,7 +28,7 @@ begin SaveToFile(p.right); end; -/// +/// Загрузить дерево из файла function LoadFromFile: TNode; var s: string; @@ -52,10 +52,10 @@ var s,q: string; begin - writeln(' '); + writeln('Загадайте животное'); assign(f, 'animals_data.txt'); if not FileExists('animals_data.txt') then - root := new TNode('') + root := new TNode('Собака') else begin reset(f); @@ -66,7 +66,7 @@ begin p := root; while p.left<>nil do begin - write(p.s+'? (0 - , 1 - ): '); + write(p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then p := p.left @@ -74,15 +74,15 @@ begin p := p.right end; - write(' '+p.s+'? (0 - , 1 - ): '); + write('Это '+p.s+'? (0 - Нет, 1 - Да): '); readln(x); if x=1 then - writeln(' !') + writeln('Я угадала!') else begin - write(' . ? '); + write('Я проиграла. Что это за животное? '); readln(s); - write(' , '+p.s+': '); + write('Введите вопрос, отличающий это животное от '+p.s+': '); readln(q); p1 := new TNode(s); p2 := new TNode(p.s); diff --git a/TestSuite/formatter_tests/input/ArrayLib.pas b/TestSuite/formatter_tests/input/ArrayLib.pas index e9b98c503..a06ade6a4 100644 --- a/TestSuite/formatter_tests/input/ArrayLib.pas +++ b/TestSuite/formatter_tests/input/ArrayLib.pas @@ -1,6 +1,6 @@ unit ArrayLib; -/// +/// Вывод массива procedure WriteArray(a: array of T); begin for var i:=0 to a.Length-1 do @@ -15,7 +15,7 @@ begin writeln; end; -/// +/// Создание массива и заполнение его случайными числами procedure CreateRandom(var a: array of integer; n: integer); begin a := new integer[n]; diff --git a/TestSuite/formatter_tests/input/Arrays.pas b/TestSuite/formatter_tests/input/Arrays.pas index db090d153..f66b4e668 100644 --- a/TestSuite/formatter_tests/input/Arrays.pas +++ b/TestSuite/formatter_tests/input/Arrays.pas @@ -5,70 +5,70 @@ interface uses System; -/// , delimiter +/// Выводит массив, используя delimiter в качестве разделителя procedure &Array.Write(delimiter: string := ' '); -/// , delimiter , +/// Выводит массив, используя delimiter в качестве разделителя, и осуществляет переход на новую строку procedure &Array.Writeln(delimiter: string := ' '); -/// 0 99 +/// Заполняет целый массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array of integer); -/// minValue maxValue +/// Заполняет целый массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array of integer; minValue, maxValue: integer); -/// 0 10 +/// Заполняет вещественный массив случайными числами в диапазоне от 0 до 10 procedure FillByRandom(a: array of real); -/// minValue maxValue +/// Заполняет вещественный массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array of real; minValue, maxValue: real); -/// x +/// Заполняет массив значением x procedure FillByValue(a: array of T; x: T); -/// n, 0 99 +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99 function CreateRandomIntegerArray(n: integer): array of integer; -/// n, minValue maxValue +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomIntegerArray(n: integer; minValue, maxValue: integer): array of integer; -/// n, 0 10 +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10 function CreateRandomRealArray(n: integer): array of real; -/// n, minValue maxValue +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomRealArray(n: integer; minValue, maxValue: real): array of real; -/// +/// Вводит целый массив procedure ReadArray(a: array of integer); -/// +/// Вводит вещественный массив procedure ReadArray(a: array of real); -/// +/// Вводит массив строк procedure ReadArray(a: array of string); -/// , delimiter +/// Выводит массив, используя delimiter в качестве разделителя значений procedure WriteArray(a: array of T; delimiter: string := ' '); -/// , delimiter , +/// Выводит массив, используя delimiter в качестве разделителя значений, и осуществляет переход на новую строку procedure WritelnArray(a: array of T; delimiter: string := ' '); -/// +/// Сортирует массив по возрастанию procedure Sort(a: array of T); -/// +/// Сортирует массив по убыванию procedure SortDescending(a: array of T); -/// 0 99 +/// Заполняет двумерный целый массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array [,] of integer); -/// minValue maxValue +/// Заполняет двумерный целый массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer); -/// 0 99 +/// Заполняет двумерный вещественный массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array [,] of real); -/// minValue maxValue +/// Заполняет двумерный вещественный массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array [,] of real; minValue, maxValue: real); -/// x +/// Заполняет массив значением x procedure FillByValue(a: array [,] of T; x: T); -/// n, 0 99 +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99 function CreateRandomIntegerMatrix(m, n: integer): array [,] of integer; -/// n, minValue maxValue +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomIntegerMatrix(m, n: integer; minValue, maxValue: integer): array [,] of integer; -/// n, 0 10 +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10 function CreateRandomRealMatrix(m, n: integer): array [,] of real; -/// n, minValue maxValue +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomRealMatrix(m, n: integer; minValue, maxValue: real): array [,] of real; -/// +/// Выводит двумерный массив procedure WriteMatrix(a: array [,] of T; width: integer := 0); -/// +/// Выводит двумерный массив procedure WriteMatrix(a: array [,] of real; width: integer := 0; digitsAfterPoint: integer := 2); implementation -// ================== ================== +// ================== Одномерные массивы ================== procedure FillByRandom(a: array of integer; minValue, maxValue: integer); begin @@ -169,7 +169,7 @@ begin System.Array.Reverse(a); end; -// ================== ================== +// ================== Двумерные массивы ================== procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer); begin @@ -246,7 +246,7 @@ begin end; end; -// ================== ================== +// ================== Методы расширения для массивов ================== procedure &Array.Write(delimiter: string); begin diff --git a/TestSuite/formatter_tests/input/Assign1.pas b/TestSuite/formatter_tests/input/Assign1.pas index 42322042f..ac5fe9ee8 100644 --- a/TestSuite/formatter_tests/input/Assign1.pas +++ b/TestSuite/formatter_tests/input/Assign1.pas @@ -1,12 +1,12 @@ -// +// Использование вспомогательных переменных var r: real; begin - write(' r: '); + write('Введите r: '); readln(r); - var r2,r4,r8: real; // + var r2,r4,r8: real; // вспомогательные переменные r2 := r * r; r4 := r2 * r2; r8 := r4 * r4; - writeln(r,' 8 = ',r8); + writeln(r,' в степени 8 = ',r8); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Assign2.pas b/TestSuite/formatter_tests/input/Assign2.pas index e255b6f1f..13b2ad3a9 100644 --- a/TestSuite/formatter_tests/input/Assign2.pas +++ b/TestSuite/formatter_tests/input/Assign2.pas @@ -1,12 +1,12 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real; // + var v: real; // вспомогательная переменная v := x; x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/AssignExt.pas b/TestSuite/formatter_tests/input/AssignExt.pas index 69455e9c0..109d1f089 100644 --- a/TestSuite/formatter_tests/input/AssignExt.pas +++ b/TestSuite/formatter_tests/input/AssignExt.pas @@ -1,4 +1,4 @@ -// += -= *= /= +// Присваивания += -= *= /= var i: integer; r: real; @@ -6,9 +6,9 @@ var begin i := 1; writeln('i := 1; i = ',i); - i += 2; // 2 + i += 2; // Увеличение на 2 writeln('i += 2; i = ',i); - i *= 3; // 3 + i *= 3; // Увеличение в 3 раза writeln('i *= 3; i = ',i); writeln; r := 6; diff --git a/TestSuite/formatter_tests/input/AutoVars.pas b/TestSuite/formatter_tests/input/AutoVars.pas index 2756e7242..25797a7bb 100644 --- a/TestSuite/formatter_tests/input/AutoVars.pas +++ b/TestSuite/formatter_tests/input/AutoVars.pas @@ -1,5 +1,5 @@ -// -// for +// Автоопределение типа переменной +// Описание переменной в заголовке цикла for begin var x := 2; for var i:=1 to 10 do diff --git a/TestSuite/formatter_tests/input/Battle.pas b/TestSuite/formatter_tests/input/Battle.pas index e6cbcf543..8e7c03bc5 100644 --- a/TestSuite/formatter_tests/input/Battle.pas +++ b/TestSuite/formatter_tests/input/Battle.pas @@ -1,34 +1,34 @@ uses GraphABC; -const types = 3; // 1 - rmax = 4; // - CanEat = rmax; // - eps = 0.00001; // real - epsustupi = 0.1; // - strahkraj = 3; // , - ustupi = CanEat*10; // - BkColor = clBlack; // - Height = 600; // - Width = 780; // +const types = 3; //число типов рыб минус 1 + rmax = 4; //радиус всех рыб + CanEat = rmax; //максимальное расстояние при поедании + eps = 0.00001; //необходимо при операциях с данными real + epsustupi = 0.1; //насколько значима иерархия среди хищников + strahkraj = 3; //во сколько раз жертвы боятся края меньше, чем хищников + ustupi = CanEat*10; //насколько значима иерархия среди хищников + BkColor = clBlack; //Фон + Height = 600; //Высота графического окна + Width = 780; //Ширина графического окна xmin = 10; // - ymin = 10; // , - xmax = Width - 100; // + ymin = 10; //Минимальные и максимальные значения координат, + xmax = Width - 100; //которые могут принимать рыбы ymax = Height - 140; // Type -fishtype = class // +fishtype = class //Описание одной стаи c : color; public CanRazm, MaxKol, Kol, MaxLife, MinFood: integer; - //, , . -, -, . , - // - Speed, See: real; // + //цвет, размножение, макс. кол-во, текущее кол-во, макс. жизнь, + //сколько хищнику нужно есть для размножения + Speed, See: real; //Нормальная скорость и зрение в пикселях constructor create(ac:color; aCanRazm, aMaxKol, aMaxLife, aMinFood:integer; aSpeed, aSee: real); begin c:= ac; CanRazm:= aCanRazm; MaxKol:= aMaxKol; Kol:= 1; MaxLife:= aMaxLife; MinFood:= aMinFood; Speed:= aSpeed; See:= aSee end; - procedure ShowKol(y: integer); // - + procedure ShowKol(y: integer); //отобразить текущее кол-во var s: string; begin SetFontColor(c); @@ -38,15 +38,15 @@ fishtype = class // end; end; -var opisanie: array[0..types] of fishtype; // +var opisanie: array[0..types] of fishtype; //данные для всех стай Type fish = class - x, y, r, dx0, dy0: real; // , + x, y, r, dx0, dy0: real; //текущие координаты, радиус и предыдущий шаг tip, life, razm, status, food: integer; - //razm - , - //status - - - next, prev: fish; // + //razm - время с момента последнего размножения, + //status - состояние - спокойное или возбуждённое + next, prev: fish; //двусвязный циклический список constructor Create(ax, ay, ar: real; atip: integer; aprev, anext: fish); begin x:= ax; y:= ay; r:= ar; tip:= atip; prev:= aprev; next:= anext; @@ -80,7 +80,7 @@ fish = class end; procedure MakeDeti(var mama, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //произвести потомство var d: fish; begin razm:= 0; @@ -95,19 +95,19 @@ fish = class end; procedure step(var ribka, StartAkula, KonAkula, StartKilka, KonKilka : fish); - // + //Здесь алгоритмы для рыб var dx, dy, d, dx2, dy2, dmin: real; t, trup, found: fish; FoundOhot: boolean; begin - status:= 1; // + status:= 1; //Нормальное состояние dx:= 0; dy:= 0; if tip > 0 then - begin // + begin //Начало алгоритма для жертв t:= StartAkula; if t<>nil then - repeat // + repeat //Ищем всех хищников в поле видимости d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); if d < opisanie[tip].See then begin @@ -116,11 +116,11 @@ fish = class dy2:= (y - t.y)/(d*d); dx:= dx + dx2; dy:= dy + dy2; - status:= 2; // + status:= 2; //Возбуждённое состояние end; t:= t.next until t = KonAkula.next; - // : + //И обратим внимание на края: if x - xmin < opisanie[tip].See then dx:= dx + 1/((x - xmin + eps)*strahkraj); if xmax - x < opisanie[tip].See then dx:= dx + 1/((x - xmax - eps)*strahkraj); if y - ymin < opisanie[tip].See then dy:= dy + 1/((y - ymin + eps)*strahkraj); @@ -138,10 +138,10 @@ fish = class end end else {tip = 0} - begin // + begin //Начало алгоритма для хищников dmin:= 11000; t:= StartAkula; - while t<>ribka do // + while t<>ribka do //Проверяем всех выше по иерархии begin d:= sqrt((x - t.x)*(x - t.x) + (y - t.y)*(y - t.y)); @@ -161,17 +161,17 @@ fish = class if d < dmin then begin dmin:= d; - found:= t //found - + found:= t //found - ближайшая жертва end; t:= t.next until t = KonKilka.next; if (found <> nil) and (dmin < opisanie[tip].See) then begin - status:= 2; // + status:= 2; //Возбуждённое состояние dx:= found.x - x; dy:= found.y - y; if dmin < CanEat + status*opisanie[tip].Speed then - begin // + begin //Поедание found.next.prev:= found.prev; found.prev.next:= found.next; if (found = StartKilka) and (found = KonKilka) then @@ -196,7 +196,7 @@ fish = class end else begin - dx:= dx0; dy:= dy0 // - + dx:= dx0; dy:= dy0 //Повтор предыдущего шага - патрулирование end; d:= sqrt(dx*dx + dy*dy); if d > eps then @@ -205,14 +205,14 @@ fish = class dy:= status*opisanie[tip].Speed*dy/d; end end; - // + //Начало алгоритма для всех рыб moveto(dx, dy); dx0:= dx; dy0:= dy; life:= life + 1; razm:= razm + 1; if opisanie[tip].Kol >= opisanie[tip].MaxKol then Razm:= 0; if (razm > opisanie[tip].CanRazm) and (food >= opisanie[tip].minfood) then MakeDeti(ribka, StartAkula, KonAkula, StartKilka, KonKilka); - if life > opisanie[tip].MaxLife then // + if life > opisanie[tip].MaxLife then //Смерть от старости begin trup:= ribka; ribka:= ribka.prev; trup.next.prev:= trup.prev; @@ -251,35 +251,35 @@ begin SetWindowSize(Width, Height); SetWindowLeft(200); SetWindowTop(50); - SetWindowCaption(' '); + SetWindowCaption('Битва за жизнь'); SetFontSize(7); SetFontName('Arial'); SetBrushColor(BkColor); FillRectangle(0, 0, Width, Height); SetFontColor(clWhite); - TextOut(10, ymax + 20, ' - .. e-mail: ssyy@yandex.ru'); - TextOut(10, ymax + 20+1*18, ' . - '); - TextOut(10, ymax + 20+2*18, ' . , .'); - TextOut(10, ymax + 20+3*18, ' : - , , ,'); - TextOut(10, ymax + 20+4*18, ' ; - , , ; - ,'); - TextOut(10, ymax + 20+5*18, ' , ; - , .'); + TextOut(10, ymax + 20, 'Автор программы - Иванов С.О. e-mail: ssyy@yandex.ru'); + TextOut(10, ymax + 20+1*18, 'Программа моделирует поведение нескольких стай рыб. Справа - количества рыб в текущий'); + TextOut(10, ymax + 20+2*18, 'момент времени. Изменяя параметры в коде программы, можно влиять на ход битвы.'); + TextOut(10, ymax + 20+3*18, 'По умолчанию: красные - хищники, поедают любых рыб из других стай, не плодятся,'); + TextOut(10, ymax + 20+4*18, 'пока не поели; синие - жертвы, самые медленные, но быстрее всех плодятся; зелёные - жертвы,'); + TextOut(10, ymax + 20+5*18, 'быстрее синих, но плодятся медленнее; желтые - самые быстрые среди жертв, но желтых мало.'); SetFontSize(12); StartAkula:= nil; StartKilka:= nil; KonAkula:= nil; KonKilka:= nil; - //c - . - //CanRazm - - // . - //MaxKol - . - //Kol - . - //MaxLife - . - // , , , . - //MinFood - , - // ( ; -1). - //Speed - . 2 . - //See - - . + //c - цвет. + //CanRazm - минимальное количество ходов отдельно взятой рыбы между двумя + // её последовательными размножениями. + //MaxKol - максимально допустимое количество рыб данного вида. + //Kol - количество рыб данного вида в текущий момент времени. + //MaxLife - максимальная продолжительность жизни. + // После того, как рыба сделает больше шагов, чем это число, она умирает. + //MinFood - минимальное количество съеденных жертв, необходимое для размножения + // (только для хищников; для жертв это количество принято за -1). + //Speed - нормальная скорость. Максимальная скорость рыбы в 2 раза больше этого числа. + //See - радиус обзора - как далеко видит рыба. //c, CanRazm, MaxKol, MaxLife, MinFood, Speed, See opisanie[3]:= fishtype.create(clYellow, 300, 15, 1500, -1, 0.99, 50); @@ -289,7 +289,7 @@ begin SetPenColor(clWhite); rectangle(round(xmin - rmax - 1), round(ymin - rmax - 1), round(xmax + rmax + 1), round(ymax + rmax + 1)); - // + //Теперь нужно построить первоначальный список q:= fish.create(xmin + 10, ymax - 10, rmax, 0, nil, nil); p:= fish.create(xmin + 10, ymin + 10, rmax, 1, q, q); q.next:= p; q.prev:= p; @@ -302,7 +302,7 @@ begin StartAkula.prev:= p; KonKilka.next:= p; KonKilka:= p; for i:= 0 to types do opisanie[i].ShowKol(i*40 + 20); - // , - . + //И все ходят по очереди, пока хоть кто-то жив. tek:= StartKilka; //i:=0;c:=getallcount;LockDrawing; repeat diff --git a/TestSuite/formatter_tests/input/BigIntegerExample.pas b/TestSuite/formatter_tests/input/BigIntegerExample.pas index f2d077d0b..fb473bcfd 100644 --- a/TestSuite/formatter_tests/input/BigIntegerExample.pas +++ b/TestSuite/formatter_tests/input/BigIntegerExample.pas @@ -1,4 +1,4 @@ -// . 100! +// Использование длинных целых. Вычисление 100! {$reference 'System.Numerics.dll'} uses System.Numerics; diff --git a/TestSuite/formatter_tests/input/BlockVar.pas b/TestSuite/formatter_tests/input/BlockVar.pas index 2edf55601..d1257db6c 100644 --- a/TestSuite/formatter_tests/input/BlockVar.pas +++ b/TestSuite/formatter_tests/input/BlockVar.pas @@ -1,11 +1,11 @@ -// +// Перемена местами значений двух переменных с использованием третьей var x,y: real; begin - write(' x,y: '); + write('Введите x,y: '); readln(x,y); - var v: real := x; // + var v: real := x; // вспомогательная переменная x := y; y := v; - writeln(' x,y: ',x,' ',y); + writeln('Новые значения x,y: ',x,' ',y); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/BookWormABCNET.pas b/TestSuite/formatter_tests/input/BookWormABCNET.pas index 8dda5579f..df73f6178 100644 --- a/TestSuite/formatter_tests/input/BookWormABCNET.pas +++ b/TestSuite/formatter_tests/input/BookWormABCNET.pas @@ -1,8 +1,8 @@ uses GraphABC,ABCObjects,ABCButtons,Events; const -/// - freqcharstr=''; +/// Примерная частота повторяемости букв + freqcharstr='аааааааааааааааааааааааааабббббввввввввггггдддддддееееееееееееееееееееежжззззииииииииииииииииииийккккккккккккккклллллллллллммммммнннннннннннннннннооооооооооооооооооооооооппппппппрррррррррррррррррссссссссссссстттттттттттттттууууууффххцццчччшшщыыьььььэюяяяя'; const MaxWordLen = 12; @@ -12,20 +12,20 @@ type MySquareABC = class(SquareABC) end; var -/// +/// Доска с буквами MainBoard: ObjectBoardABC; -/// 1 +/// Доска высоты 1 для размещения слова WordBoard: ObjectBoardABC; -/// WordBoard +/// Номер первого незанятого символа на доске WordBoard cur: integer; -/// +/// Количество ходов moves: integer; -/// +/// Очки score: integer; -/// +/// Прямоугольник для отображения информации Status: RectangleABC; -/// ( words.txt) +/// Существует ли такое слово (все слова хранятся в файле words.txt) function WordExists(s: string): boolean; var f: text; @@ -49,7 +49,7 @@ end; procedure MyMouseDown(x,y,mb: integer); begin -// +// Нажата левая мышь if mb=1 then begin if cur>WordBoard.DimX then @@ -71,7 +71,7 @@ begin end; end else -// +// Нажата правая мышь begin for var xx:=1 to cur-1 do WordBoard[xx,1].Visible := False; @@ -83,19 +83,19 @@ begin end; end; -/// " " +/// Обработчик кнопки "Новая игра" procedure BtNewClick; begin score := 0; moves := 0; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); MyMouseDown(1,1,2); for var xx:=1 to MainBoard.DimX do for var yy:=1 to MainBoard.DimY do MainBoard[xx,yy].Text := UpCase(freqcharstr[Random(255)+1]); end; -/// " " +/// Обработчик кнопки "Сказать слово" procedure BtWordClick; begin if WordBoard.Color<>clYellow then @@ -113,15 +113,15 @@ begin end; cur := 1; WordBoard.Color := clSkyBlue; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); end; -/// "" +/// Обработчик кнопки "Подсказка" procedure BtPleaseClick; var f: text; str,maxstr: string; - arr,work: array [''..''] of integer; + arr,work: array ['а'..'я'] of integer; maxlen: integer; function CanConstructWord(s: string): boolean; @@ -142,7 +142,7 @@ var begin // BtPleaseClick maxlen := 0; maxstr := ''; - for var c:='' to '' do + for var c:='а' to 'я' do arr[c]:=0; for var xx:=1 to MainBoard.DimX do @@ -169,7 +169,7 @@ procedure InitWindow; begin SetWindowSize(640,480); Window.IsFixedSize := True; - Window.Title := ' !'; + Window.Title := 'Знай русские слова!'; Brush.Color := clMoneyGreen; FillRect(0,0,WindowWidth,WindowHeight); end; @@ -183,11 +183,11 @@ end; procedure InitButtons; begin - var btword := new ButtonABC(70,410,180,30,' ',clGray); - var btnew := new ButtonABC(280,410,100,30,'',clLightGray); - var btplease := new ButtonABC(410,410,160,30,'',clGray); + var btword := new ButtonABC(70,410,180,30,'Сказать слово',clGray); + var btnew := new ButtonABC(280,410,100,30,'Заново',clLightGray); + var btplease := new ButtonABC(410,410,160,30,'Подсказка',clGray); -// +// Привязка обработчиков к кнопкам btword.OnClick := BtWordClick; btnew.OnClick := BtNewClick; btplease.OnClick := BtPleaseClick; @@ -197,7 +197,7 @@ end; procedure InitInterface; begin Status := new RectangleABC(70,350,500,30,clSkyBlue); - Status.Text := ': 0 : 0'; + Status.Text := 'Ходов: 0 Очков: 0'; WordBoard := new ObjectBoardABC(20,40,MaxWordLen,1,50,50,clSkyBlue); MainBoard := new ObjectBoardABC(220,120,4,4,50,50,clMoneyGreen); MainBoard.BorderColor := clGreen; diff --git a/TestSuite/formatter_tests/input/Boxing.pas b/TestSuite/formatter_tests/input/Boxing.pas index 6c9ddf2ee..8f7eec850 100644 --- a/TestSuite/formatter_tests/input/Boxing.pas +++ b/TestSuite/formatter_tests/input/Boxing.pas @@ -1,19 +1,19 @@ -// - +// Упаковка-распаковка размерных типов var i: integer := 2; r: real := 3.14; o: object; begin - o := i; // : integer , - // o - // - - writeln(integer(o)); // : - // - + o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, + // котрый и присваивается переменной o + // Преобразование типов при упаковке - неявное + writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение + // Преобразование типов при распаковке - явное o := r; writeln(real(o)); - try // InvalidCastException + try // При неверном преобразовании типов генерируется исключение InvalidCastException writeln(shortint(o)); except on e: Exception do diff --git a/TestSuite/formatter_tests/input/CRT.pas b/TestSuite/formatter_tests/input/CRT.pas index 3335e80f3..229aafd5b 100644 --- a/TestSuite/formatter_tests/input/CRT.pas +++ b/TestSuite/formatter_tests/input/CRT.pas @@ -1,9 +1,9 @@ /// -/// +/// Модуль для работы с консолью /// unit CRT; -// 0.3 +// Версия 0.3 // Copyright (c) 2006-2007 DarkStar, SSM (parts) {$apptype console} @@ -33,80 +33,80 @@ const White = 15; /// -/// +/// Задает заголовок консольного окна /// -/// +/// Заголовок консольного окна procedure SetWindowTitle(s: string); /// -/// +/// Задает заголовок консольного окна /// -/// +/// Заголовок консольного окна procedure SetWindowCaption(s: string); /// -/// +/// Показывает курсор если он скрыт /// procedure ShowCursor; /// -/// +/// Скрывает курсор /// procedure HideCursor; /// -/// +/// Считыват нажатую клавишу /// function ReadKey: char; /// -/// true . ReadKey +/// Возвращает true если была нажата клавиша. Считать символ можно спомощью функции ReadKey /// function KeyPressed: boolean; /// -/// +/// Возвращает высоту экрана /// function WindowWidth: integer; /// -/// +/// Возвращает ширину экрана /// /// function WindowHeight: integer; /// -/// - +/// Возвращает Х-координату курсора /// function WhereX: integer; /// -/// Y- +/// Возвращает Y-координату курсора /// function WhereY: integer; /// -/// (x,y) +/// Преводит курсор в координаты (x,y) /// procedure GotoXY(x, y: integer); procedure Window(x, y, w, h: integer); /// -/// +/// Задает размеры консольного окна /// -/// -/// +/// Ширина +/// Высота procedure SetWindowSize(w, h: integer); procedure SetBufferSize(w, h: integer); /// -/// , +/// Очищает экран, заполняя его текущим цветом фона /// procedure ClrScr; /// -/// +/// Задает цвет фона выводимого текста /// -/// +/// Цвет фона procedure TextBackground(c: integer); /// -/// +/// Задает цвет выводимого текста /// -/// +/// Цвет текста procedure TextColor(c: integer); /// -/// +/// Очищает линию на которой установлен курсор /// procedure ClearLine; /// -/// ms +/// Делает паузу на ms миллисекунд /// procedure Delay(ms: integer); @@ -151,7 +151,7 @@ begin Console.CursorVisible := False; end; -function ReadKey: char;// TODO +function ReadKey: char;// TODO продумать это var KeyInfo: ConsoleKeyInfo; begin @@ -203,7 +203,7 @@ end; procedure Window(x, y, w, h: integer); begin - writeln(' CRT.Window '); + writeln('Функция CRT.Window не реализована'); {Console.WindowLeft:=x; Console.WindowTop:=y; Console.WindowWidth:=w; @@ -281,8 +281,8 @@ begin end else begin - Console.WriteLine(' CRT F9.'); - Console.WriteLine(' , Shift-F9'); + Console.WriteLine('Программу с подключенным модулем CRT нельзя запускать по F9.'); + Console.WriteLine('Запустите программу, используя Shift-F9'); Halt; end; end; diff --git a/TestSuite/formatter_tests/input/Calculations1.pas b/TestSuite/formatter_tests/input/Calculations1.pas index 1a3aac935..f6ba098ae 100644 --- a/TestSuite/formatter_tests/input/Calculations1.pas +++ b/TestSuite/formatter_tests/input/Calculations1.pas @@ -1,7 +1,7 @@ -// +// Вывод результатов вычислений begin - writeln(':'); -// + writeln('Вычисления:'); +// Вывод пустой строки writeln; writeln('121 + 363 = ',121+363); writeln('121 - 363 = ',121-363); diff --git a/TestSuite/formatter_tests/input/Calculations2.pas b/TestSuite/formatter_tests/input/Calculations2.pas index a870b6f5f..ff692f587 100644 --- a/TestSuite/formatter_tests/input/Calculations2.pas +++ b/TestSuite/formatter_tests/input/Calculations2.pas @@ -1,10 +1,10 @@ -// . +// Вывод результатов вычислений. Используются именованные константы const a = 121; b = 363; begin - writeln(':'); + writeln('Вычисления:'); writeln; writeln(a,' + ',b,' = ',a+b); writeln(a,' - ',b,' = ',a-b); diff --git a/TestSuite/formatter_tests/input/Calculations3.pas b/TestSuite/formatter_tests/input/Calculations3.pas index e76a5c373..255a9b131 100644 --- a/TestSuite/formatter_tests/input/Calculations3.pas +++ b/TestSuite/formatter_tests/input/Calculations3.pas @@ -1,8 +1,8 @@ -// . +// Вывод результатов вычислений. Используются переменные и процедура ввода var a,b: integer; begin - writeln(' a b:'); + writeln('Введите a и b:'); readln(a,b); writeln; writeln(a,' + ',b,' = ',a+b); diff --git a/TestSuite/formatter_tests/input/Char1.pas b/TestSuite/formatter_tests/input/Char1.pas index bfa54f96e..0093f5157 100644 --- a/TestSuite/formatter_tests/input/Char1.pas +++ b/TestSuite/formatter_tests/input/Char1.pas @@ -1,4 +1,4 @@ -// Ord Chr +// Стандартные функции Ord Chr var i: integer; c: char; @@ -6,8 +6,8 @@ var begin c := 'z'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); i := 193; c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Char2.pas b/TestSuite/formatter_tests/input/Char2.pas index 9d0b9dc50..d89fd87a7 100644 --- a/TestSuite/formatter_tests/input/Char2.pas +++ b/TestSuite/formatter_tests/input/Char2.pas @@ -1,13 +1,13 @@ -// OrdUnicode ChrUnicode +// Стандартные функции OrdUnicode ChrUnicode var i: integer; c: char; begin - c := ''; + c := 'Д'; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); i := 1046; c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Char3.pas b/TestSuite/formatter_tests/input/Char3.pas index d58cb25ab..25dd82795 100644 --- a/TestSuite/formatter_tests/input/Char3.pas +++ b/TestSuite/formatter_tests/input/Char3.pas @@ -1,9 +1,9 @@ -// UpperCase LowerCase +// Стандартные функции UpperCase LowerCase var c: char; begin - c := ''; - writelnFormat(' {0} : {1}',c,UpperCase(c)); + c := 'д'; + writelnFormat('Символ {0} в верхнем регистре: {1}',c,UpperCase(c)); c := 'F'; - writelnFormat(' {0} : {1}',c,LowerCase(c)); + writelnFormat('Символ {0} в нижнем регистре: {1}',c,LowerCase(c)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/CharFunc.pas b/TestSuite/formatter_tests/input/CharFunc.pas index fb28b2ac8..95bed5ad7 100644 --- a/TestSuite/formatter_tests/input/CharFunc.pas +++ b/TestSuite/formatter_tests/input/CharFunc.pas @@ -1,4 +1,4 @@ -// Ord, Chr, OrdUnicode, ChrUnicode +// Стандартные функции Ord, Chr, OrdUnicode, ChrUnicode var c: char; i: integer; @@ -6,14 +6,14 @@ var begin writeln('sizeof(char) = ',sizeof(char)); writeln; - c := ''; + c := 'Ж'; i := Ord(c); - writelnFormat(' {0} Windows {1}',c,i); + writelnFormat('Код символа {0} в кодировке Windows равен {1}',c,i); c := Chr(i); - writelnFormat(' {0} Windows - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Windows - это {1}',i,c); writeln; i := OrdUnicode(c); - writelnFormat(' {0} Unicode {1}',c,i); + writelnFormat('Код символа {0} в кодировке Unicode равен {1}',c,i); c := ChrUnicode(i); - writelnFormat(' {0} Unicode - {1}',i,c); + writelnFormat('Символ с кодом {0} в кодировке Unicode - это {1}',i,c); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/CharTable.pas b/TestSuite/formatter_tests/input/CharTable.pas index 420d2f615..220cb62fa 100644 --- a/TestSuite/formatter_tests/input/CharTable.pas +++ b/TestSuite/formatter_tests/input/CharTable.pas @@ -1,4 +1,4 @@ -// +// Таблица символов и их кодов begin for var i:=32 to 255 do begin diff --git a/TestSuite/formatter_tests/input/ClassConstructor.pas b/TestSuite/formatter_tests/input/ClassConstructor.pas index 52a2acd20..c9f9d8d3c 100644 --- a/TestSuite/formatter_tests/input/ClassConstructor.pas +++ b/TestSuite/formatter_tests/input/ClassConstructor.pas @@ -1,18 +1,18 @@ -// () +// Иллюстрация использования статических (классовых) конструкторов type Person = class private - class arr: array of Person; // . , . + class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом. name: string; age: integer; public - class constructor; // . + class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода begin - writeln(' '); + writeln(' Вызван классовый конструктор'); SetLength(arr,3); - arr[0] := new Person('',20); - arr[1] := new Person('',19); - arr[2] := new Person('',35); + arr[0] := new Person('Иванов',20); + arr[1] := new Person('Петрова',19); + arr[2] := new Person('Попов',35); end; constructor (n: string; a: integer); begin @@ -21,16 +21,16 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1}',name,age); + Result := Format('Имя: {0} Возраст: {1}',name,age); end; - class function RandomPerson: Person; // . + class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям begin Result := arr[Random(3)]; end; end; begin - writeln(' '); + writeln('Случайные персоны'); for var i:=1 to 5 do - writeln(Person.RandomPerson); // + writeln(Person.RandomPerson); // Вызов классового метода end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Collections.pas b/TestSuite/formatter_tests/input/Collections.pas index c68618712..2fee38442 100644 --- a/TestSuite/formatter_tests/input/Collections.pas +++ b/TestSuite/formatter_tests/input/Collections.pas @@ -1,34 +1,34 @@ -/// -/// Stack -/// Queue -/// DynArray -/// SimpleSet -/// AssocArray -/// LinkedList +/// Модуль содержит шаблоны классов +/// Stack — стек +/// Queue — очередь +/// DynArray — динамический массив +/// SimpleSet — простое множество на основе динамического массива +/// AssocArray — простой ассоциативный массив на основе динамического массива пар +/// LinkedList — двусвязный список unit Collections; //------------------------------------------------------------------------------ -// -// 1.0 -// Copyright (c) 2009 ., .., . +// Модуль упрощенных классов коллекций для обучения +// Версия 1.0 +// Copyright (c) 2009 Белякова Ю., Михалкович С.С., Саатчи А. //------------------------------------------------------------------------------ interface // -------------------------------- SingleNode --------------------------------- type - /// + /// Узел с одним полем связи SingleNode = class private - /// , + /// Значение, содержащееся в узле fData: T; - /// + /// Ссылка на следующий элемент fNext: SingleNode; /// - /// + /// Конструктор /// - /// - /// + /// Значение в узле + /// Ссылка на следующий элемент public constructor Create(pData: T; pNext: SingleNode); begin @@ -42,305 +42,305 @@ type // ----------------------------------- Stack ----------------------------------- type - /// Stack + /// Шаблон класса Stack Stack = class private - /// + /// Вершина стека fTop: SingleNode := nil; public - /// + /// Создает пустой стек constructor Create; /// - /// + /// Кладет элемент на вершину стека /// - /// + /// Новый элемент procedure Push(x: T); - /// , + /// Возвращает значение элемента на вершине, снимая его со стека function Pop: T; - /// , + /// Возвращает значение элемента на вершине стека, не снимая его function Top: T; - /// , + /// Возвращает истину, если стек пуст function IsEmpty: boolean; - /// + /// Преобразует содержимое стека в строку function ToString: string; override; - /// + /// Выводит содержимое стека на консоль procedure Print; - /// + /// Выводит содержимое стека на консоль с переходом на новую строку procedure Println; end; // ----------------------------------- Queue ----------------------------------- type - /// Queue + /// Шаблон класса Queue Queue = class private - /// + /// Голова очереди head: SingleNode; - /// + /// Хвост очереди tail: SingleNode; public - /// + /// Создает пустую очередь constructor Create; /// - /// + /// Добавляет элемент в хвост очереди /// - /// + /// Добавляемый элемент procedure Enqueue(x: T); - /// , + /// Возвращает значение элемента в голове, удаляя его из очереди function Dequeue: T; - /// , + /// Возвращает значение элемента в голове очереди, не удаляя его function Top: T; - /// , + /// Возвращает истину, если очередь пуста function IsEmpty: boolean; - /// + /// Преобразует содержимое очереди в строку function ToString: string; override; - /// + /// Выводит содержимое очереди на консоль procedure Print; - /// + /// Выводит содержимое очереди на консоль с переходом на новую строку procedure Println; end; // --------------------------------- DynArray ---------------------------------- const - /// , + /// Минимальная емкость, устанавливаемая при создании массива MIN_CAP = 4; - /// + /// Коэффициент увеличения емкости массива при её нехватке INC_CAP_FACTOR = 2; type - /// DynArray [ ] + /// Шаблон класса DynArray [Динамический массив с автоконтролем памяти] DynArray = class private - /// , + /// Встроенный динамический массив, содержащий данные fData: array of T; - /// + /// Размер массива fSize: integer; - /// + /// Емкость массива fCap: integer; - /// ind x + /// Устанавливает элемент с индексом ind равным x procedure SetElem(index: integer; x: T); - /// ind + /// Возвращает элемент массива с индексом ind function GetElem(index: integer): T; public - /// 0 + /// Создает массив размера 0 constructor Create; - /// size + /// Создает массив размера size constructor Create(psize: integer); /// - /// . . - /// ( newCap , ) + /// Выделяет новую память. Емкость увеличивается. + /// (Если newCap меньше текущей емкости, ничего не происходит) /// - /// + /// Новая емкость массива procedure Reserve(newCap: integer); /// - /// + /// Устанавливает новый размер массива /// - /// + /// Новый размер массива procedure Resize(newSize: integer); /// - /// + /// Добавляет элемент в конец массива /// - /// + /// Добавляемый элемент procedure Add(x: T); /// - /// + /// Вставляет элемент в указанную позицию /// - /// , - /// + /// Позиция, в которую вставляется элемент + /// Вставляемый элемент procedure Insert(pos: integer; x: T); /// - /// + /// Удаляет элемент массива из указанной позиции /// - /// , + /// Позиция, из которой удаляется элемент procedure Remove(pos: integer); /// - /// - /// -1, + /// Возвращает индекс первого элемента массива равного искомому + /// или -1, если такого элемента нет /// - /// + /// Искомый элемент function Find(x: T): integer; - /// () + /// Количество элементов (размер) массива property Count: integer read fSize write Resize; - /// + /// Емкость массива property Capacity: integer read fCap write Reserve; - /// + /// Позволяет обращаться к элементам массива по индексу property Elem[index: integer]: T read GetElem write SetElem; default; - /// + /// Преобразует содержимое массива в строку function ToString: string; override; - /// + /// Выводит содержимое массива на консоль procedure Print; - /// + /// Выводит содержимое массива на консоль с переходом на новую строку procedure Println; end; // -------------------------------- SimpleSet ---------------------------------- type - /// SimpleSet + /// Шаблон класса SimpleSet SimpleSet = class private - /// + /// Элементы множества data: DynArray; public - /// + /// Создает множество constructor Create; /// - /// , + /// Добавляет элемент во множество, если его там еще нет /// - /// + /// Добавляемый элемент procedure Add(x: T); /// - /// , + /// Удаляет элемент из множества, если он там есть /// - /// + /// Удаляемый элемент procedure Remove(x: T); /// - /// , + /// Возвращает истину, если множество содержит элемент /// - /// + /// Искомый элемент function Contains(x: T): boolean; - /// + /// Преобразует содержимое массива в строку function ToString: string; override; - /// + /// Выводит содержимое массива на консоль procedure Print; - /// + /// Выводит содержимое множества на консоль с переходом на новую строку procedure Println; end; // -------------------------------- AssocArray --------------------------------- type - /// AssocArray + /// Шаблон класса AssocArray AssocArray = class private - /// + /// Ключи keys: DynArray; - /// , + /// Значения, соответствующие ключам values: DynArray; - /// key value + /// Устанавливает значение элемента с ключом key равным value procedure SetElem(key: KeyType; value: ValueType); - /// key + /// Возвращает значение элемента с ключом key function GetElem(key: KeyType): ValueType; public - /// + /// Создает ассоциативный массив constructor Create; - /// + /// Позволяет обращаться к элементам массива по ключу property Elem[key: KeyType]: ValueType read GetElem write SetElem; default; - /// + /// Преобразует содержимое ассоциативного массива в строку function ToString: string; override; - /// + /// Выводит содержимое ассоциативного массива на консоль procedure Print; - /// + /// Выводит содержимое ассоциативного массива на консоль с переходом на новую строку procedure Println; end; // ----------------------------- LinkedListNode -------------------------------- type - /// + /// Узел с двумя полями связи LinkedListNode = class private - /// , + /// Значение, содержащееся в узле fData: T; - /// + /// Ссылка на предыдущий элемент fPrev: LinkedListNode; - /// + /// Ссылка на следующий элемент fNext: LinkedListNode; public /// - /// + /// Создает новый узел /// - /// - /// - /// + /// Значение узла + /// Ссылка на предыдущий элемент + /// Ссылка на следующий элемент constructor Create(data: T; prev, next: LinkedListNode); begin fData := data; fNext := next; fPrev := prev; end; - /// , + /// Значение, содержащееся в узле property Value: T read fData write fData; - /// + /// Ссылка на предыдущий элемент — только на чтение property Prev: LinkedListNode read fPrev; - /// + /// Ссылка на следующий элемент — только на чтение property Next: LinkedListNode read fNext; end; // -------------------------------- LinkedList --------------------------------- type - /// + /// Двусвязный линейный список LinkedList = class private - /// () + /// Первый элемент (голова) fFirst: LinkedListNode; - /// () + /// Последний элемент (хвост) fLast: LinkedListNode; public - /// + /// Создает пустой список constructor Create; - /// () + /// Первый элемент (голова) — только на чтение property First: LinkedListNode read fFirst; - /// () + /// Последний элемент (хвост) — только на чтение property Last: LinkedListNode read fLast; /// - /// x + /// Добавляет элемент x в начало списка /// - /// + /// Добавляемый элемент procedure AddFirst(x: T); /// - /// x + /// Добавляет элемент x в конец списка /// - /// + /// Добавляемый элемент procedure AddLast(x: T); - /// + /// Удаляет первый элемент списка procedure RemoveFirst(); - /// + /// Удаляет последний элемент списка procedure RemoveLast(); /// - /// x node + /// Добавляет элемент x перед node /// - /// , - /// + /// Ссылка на элемент, перед которым нужно добавить новый + /// Добавляемый элемент procedure AddBefore(node: LinkedListNode; x: T); /// - /// x node + /// Добавляет элемент x после node /// - /// , - /// + /// Ссылка на элемент, после которого нужно добавить новый + /// Добавляемый элемент procedure AddAfter(node: LinkedListNode; x: T); /// - /// node + /// Удаляет элемент node /// - /// , + /// Ссылка на элемент, который нужно удалить procedure Remove(node: LinkedListNode); - /// + /// Преобразует содержимое списка в строку function ToString: string; override; - /// + /// Выводит содержимое списка на консоль procedure Print; - /// + /// Выводит содержимое списка на консоль с переходом на новую строку procedure Println; end; //============================================================================== implementation -// +//Сообщения исключений const - PopNilStackExceptionMessage = ' '; - TopNilStackExceptionMessage = ' '; + PopNilStackExceptionMessage = 'Попытка снятия элемента с пустого стека'; + TopNilStackExceptionMessage = 'Попытка получения элемента с пустого стека'; - DequeueNilQueueExceptionMessage = ' '; - TopNilQueueExceptionMessage = ' '; + DequeueNilQueueExceptionMessage = 'Попытка удаления элемента из пустой очереди'; + TopNilQueueExceptionMessage = 'Попытка получения элемента из пустой очереди'; - NegativeArraySizeExceptionMessage = ' '; - InsOutOfArrayBoundExceptionMessage = ' '; - RemOutOfArrayBoundExceptionMessage = ' '; - SetElemOutOfBoundExceptionMessage = ' '; - GetElemOutOfBoundExceptionMessage = ' '; + NegativeArraySizeExceptionMessage = 'Попытка присвоить размеру массива отрицательное значение '; + InsOutOfArrayBoundExceptionMessage = 'Попытка вставки за границей массива в позицию '; + RemOutOfArrayBoundExceptionMessage = 'Попытка удаления за границей массива из позиции '; + SetElemOutOfBoundExceptionMessage = 'Попытка присвоить значение элементу за границей массива с индексом '; + GetElemOutOfBoundExceptionMessage = 'Попытка получить значение элемента за границей массива с индексом '; - RemoveFromNilListExceptionMessage = ' '; - AddNilNodeExceptionMessage = ' node '; - RemoveNilNodeExceptionMessage = ' node '; + RemoveFromNilListExceptionMessage = 'Попытка удаления из пустого списка'; + AddNilNodeExceptionMessage = 'Параметр node является нулевой ссылкой'; + RemoveNilNodeExceptionMessage = 'Параметр node является нулевой ссылкой'; // ----------------------------------- Stack ----------------------------------- constructor Stack.Create; @@ -413,7 +413,7 @@ begin else begin tail.next := new SingleNode(x, nil); - tail := tail.next; // (.. ) + tail := tail.next; // элемент удаляется из хвоста очереди (т.е. хвостом становится следующий элемент) end; end; @@ -423,7 +423,7 @@ begin raise new Exception(DequeueNilQueueExceptionMessage); Result := head.data; - head := head.next; // (.. ) + head := head.next; // элемент удаляется из головы очереди (т.е. головой становится следующий элемент) if head = nil then tail := nil; end; @@ -475,7 +475,7 @@ begin raise new Exception(NegativeArraySizeExceptionMessage + pSize.ToString); fSize := pSize; - fCap := INC_CAP_FACTOR * pSize + MIN_CAP; // " " + fCap := INC_CAP_FACTOR * pSize + MIN_CAP; // Устанавливаем емкость "с запасом" SetLength(fData, fCap); end; @@ -496,7 +496,7 @@ begin if newSize > fCap then begin Reserve(INC_CAP_FACTOR * newSize); - for var i := fSize to newSize - 1 do // + for var i := fSize to newSize - 1 do // явным образом заполняем новые элементы fData[i] := default(T); end; fSize := newSize; @@ -524,7 +524,7 @@ begin if (pos < 0) or (pos > fSize - 1) then raise new Exception(RemOutOfArrayBoundExceptionMessage + pos.ToString); - for var i := pos to fSize - 2 do // 1, pos + for var i := pos to fSize - 2 do // сдвиг элементов влево на 1, начиная с позиции pos fData[i] := fData[i + 1]; Resize(fSize - 1); end; @@ -548,7 +548,7 @@ begin fData[index] := x; end; -{ ind} +{Возвращает элемент массива с индексом ind} function DynArray.GetElem(index: integer): T; begin if (index < 0) or (index > fSize - 1) then diff --git a/TestSuite/formatter_tests/input/Colors.pas b/TestSuite/formatter_tests/input/Colors.pas index af56711da..f7b8cb60b 100644 --- a/TestSuite/formatter_tests/input/Colors.pas +++ b/TestSuite/formatter_tests/input/Colors.pas @@ -1,3 +1,3 @@ -// Pascal ABC +//Для совместимости с Pascal ABC unit Colors; end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/ComplexExample.pas b/TestSuite/formatter_tests/input/ComplexExample.pas index 5c6eb3d46..818b4fecb 100644 --- a/TestSuite/formatter_tests/input/ComplexExample.pas +++ b/TestSuite/formatter_tests/input/ComplexExample.pas @@ -1,17 +1,17 @@ -// +// Использование комплексных чисел {$reference 'System.Numerics.dll'} uses System.Numerics; begin var a := new Complex(0,1); - writeln(' : ', a); + writeln('Мнимая единица: ', a); var b := Complex.Sqrt(a); - writeln(' : ', b); + writeln('Главный корень из мнимой единицы: ', b); var c := a*a; - writeln(' : ', c); + writeln('Квадрат мнимой единицы: ', c); var d := new Complex(1,2); - writelnFormat(' {0} {1}', d,d.Magnitude); + writelnFormat('Модуль {0} равен {1}', d,d.Magnitude); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/DMCollect.pas b/TestSuite/formatter_tests/input/DMCollect.pas index 9c0bd190f..390da4047 100644 --- a/TestSuite/formatter_tests/input/DMCollect.pas +++ b/TestSuite/formatter_tests/input/DMCollect.pas @@ -32,7 +32,7 @@ type end; function GetItem(i: integer): Cell; begin - Result := Cell(a[i]); //!! Item[i].a.x := 1; !!!!!!! + Result := Cell(a[i]); //!! Не будет работать для Item[i].a.x := 1; !!!!!!! end; procedure SetItem(i: integer; c: Cell); begin @@ -143,20 +143,20 @@ function LessThenCC (C1,C2: Cell): boolean; var vv: vector; ip: boolean; -{ } +{Самое сложное условие} begin vv := initVector(C1.p,C2.p); ip := IsParallel(C1.v,C2.v); - {C1DimX+orx) or (yDimY+ory) then - DrawmanError(': ',' '); + DrawmanError('Чертежник: вышел за границы поля рисования','Задание прервано'); if not PenIsUp then begin DMLine(DMX,DMY,x,y,colorSolve); @@ -417,7 +417,7 @@ begin DMY := y; DrawDM; Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); end; procedure TDMField.OnVector(x,y: integer); @@ -453,14 +453,14 @@ end; procedure TDMField.Stop; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; buttonStep.Enabled := True; t.Suspend; end; procedure TDMField.Start; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Стоп (Enter)'; buttonStep.Enabled := False; t.Resume; end; @@ -499,10 +499,10 @@ end; procedure TDMField.CheckTaskCall; begin if not TaskIsCalled then - DrawManError(' Task ',' '); + DrawManError('Процедура Task вызова задания должна быть первой','Выполнение программы прервано'); end; -//--------- +//--------- Интерфейс и обработчики procedure LoadIni(var settings: IniSettings); var Ini: TIniFile; begin @@ -570,13 +570,13 @@ begin if t.ThreadState = System.Threading.ThreadState.Suspended then begin DMField.StepFlag := False; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Выполняю задание'; DMField.Start; end else begin DMField.StepFlag := True; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Остановился'; DMField.Stop; end; (GraphABCControl as Control).Focus; @@ -587,22 +587,22 @@ begin DMField.StepFlag := True; t.Resume; (GraphABCControl as Control).Focus; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Команда выполнена'; end; procedure buttonHelpClick(o: Object; e: EventArgs); begin - MessageBox.Show(' : .., 2002-07 '#10#13#10#13+ - ' :'#10#13+ - ' PenDown - '#10#13+ - ' PenUp - '#10#13 - ' ToPoint(x,y) - (x,y)'#10#13+ - ' OnVector(a,b) - (a,b)'#10#13 - ' a>0 - , a<0 - , b>0 - , b<0 - '#10#13 - ' Speed(n) - n (n=0..10)'#10#13 - ' Stop - '#10#13 - ' Start - '#10#13, - ' - '); + MessageBox.Show('Разработчик исполнителя Чертежник: Михалкович С.С., 2002-07 '#10#13#10#13+ + 'Команды исполнителя Чертежник:'#10#13+ + ' PenDown - опустить перо'#10#13+ + ' PenUp - поднять перо'#10#13 + ' ToPoint(x,y) - переместиться в точку с координатами (x,y)'#10#13+ + ' OnVector(a,b) - переместиться из текущей точки на вектор (a,b)'#10#13 + ' a>0 - вправо, a<0 - влево, b>0 - вверх, b<0 - вниз'#10#13 + ' Speed(n) - установить скорость n (n=0..10)'#10#13 + ' Stop - остановить Чертежника'#10#13 + ' Start - запустить Чертежника'#10#13, + 'Исполнитель Чертежник - Справка'); (GraphABCControl as Control).Focus; end; @@ -698,7 +698,7 @@ begin buttonHelp.Location := new Point(359, 18); buttonHelp.Size := new Size(107, 24); buttonHelp.TabStop := false; - buttonHelp.Text := ' (F1)'; + buttonHelp.Text := 'Справка (F1)'; // buttonHelp.UseVisualStyleBackColor := true; // // buttonExit @@ -707,7 +707,7 @@ begin buttonExit.Location := new System.Drawing.Point(241, 18); buttonExit.Size := new System.Drawing.Size(107, 24); buttonExit.TabStop := false; - buttonExit.Text := ' (Esc)'; + buttonExit.Text := 'Выход (Esc)'; // buttonExit.UseVisualStyleBackColor := true; // // buttonStep @@ -716,7 +716,7 @@ begin buttonStep.Location := new Point(123, 18); buttonStep.Size := new Size(107, 24); buttonStep.TabStop := false; - buttonStep.Text := ' (Space)'; + buttonStep.Text := 'Шаг (Space)'; // buttonStep.UseVisualStyleBackColor := true; // // buttonStart @@ -725,7 +725,7 @@ begin buttonStart.Location := new Point(5, 18); buttonStart.Size := new Size(107, 24); buttonStart.TabStop := false; - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; // buttonStart.UseVisualStyleBackColor := true; // // tableLayoutPanelBottom @@ -751,7 +751,7 @@ begin labelExState.Location := new Point(5, 2); labelExState.Margin := new Padding(3, 0, 3, 3); labelExState.Size := new Size(453, 15); - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Готов'; labelExState.TextAlign := ContentAlignment.MiddleCenter; // // groupBoxExState @@ -783,7 +783,7 @@ begin labelState.Location := new Point(6, 54); labelState.Margin := new Padding(0); labelState.Size := new Size(83, 17); - labelState.Text := ':'; + labelState.Text := 'Состояние:'; // // labelStep // @@ -792,7 +792,7 @@ begin labelStep.ForeColor := System.Drawing.Color.Black; labelStep.Location := new Point(130, 54); labelStep.Size := new Size(66, 18); - labelStep.Text := ': 0'; + labelStep.Text := 'Шаг: 0'; labelStep.TextAlign := ContentAlignment.MiddleLeft; // // trackBarSpeed @@ -809,7 +809,7 @@ begin labelSpeed.Location := new Point(6, 16); labelSpeed.Margin := new Padding(0); labelSpeed.Size := new Size(73, 17); - labelSpeed.Text := ':'; + labelSpeed.Text := 'Скорость:'; // // tableLayoutPanelTop // @@ -835,7 +835,7 @@ begin labelZad.Location := new Point(6, 3); labelZad.Margin := new Padding(4, 1, 3, 0); labelZad.Size := new Size(668, 14); - labelZad.Text := ''; + labelZad.Text := 'Задание'; labelZad.TextAlign := ContentAlignment.MiddleLeft; // // ExecutorForm @@ -845,7 +845,7 @@ begin MainForm.Controls.Add(tableLayoutPanelTop); MainForm.Controls.Add(BottomPanel); MainForm.MinimumSize := new Size(687, 240); - MainForm.Text := ' '; + MainForm.Text := 'Исполнитель Чертежник'; BottomPanel.ResumeLayout(false); panelBottomLeft.ResumeLayout(false); tableLayoutPanelBottom.ResumeLayout(false); @@ -929,7 +929,7 @@ begin labelExState.Text := s; end; -// - +// Добавил - МА procedure ResDM(TaskName: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'resdm'; // @@ -989,15 +989,15 @@ begin //buttonStart.Enabled := False; //buttonStep.Enabled := False; if DMField.DimX*DMField.DimY=0 then - DrawmanError(': Task',' ') + DrawmanError('Чертежник: Не вызвана процедура Task','Задание отсутствует') else if DMField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Invoke(SetSafeTextLabelExState,': '); - //labelExState.Text := ': '; - // - + labelExState.Invoke(SetSafeTextLabelExState,'Чертежник: Задание выполнено'); + //labelExState.Text := 'Чертежник: Задание выполнено'; + // Добавил - МА try ResDM(DMField.TaskName); except @@ -1006,8 +1006,8 @@ begin end else begin - labelExState.Invoke(SetSafeTextLabelExState,': , '); - //labelExState.Text := ': , '; + labelExState.Invoke(SetSafeTextLabelExState,'Чертежник: Работа окончена, задание не выполнено'); + //labelExState.Text := 'Чертежник: Работа окончена, задание не выполнено'; end; end; diff --git a/TestSuite/formatter_tests/input/Drawman.pas b/TestSuite/formatter_tests/input/Drawman.pas index 1b07b8ad3..a32f7516a 100644 --- a/TestSuite/formatter_tests/input/Drawman.pas +++ b/TestSuite/formatter_tests/input/Drawman.pas @@ -1,29 +1,29 @@ -/// . -/// , , . . +///Исполнитель Чертежник предназначен для построения рисунков и чертежей на плоскости с координатами. +///Чертежник имеет перо, которое он может поднимать, опускать и перемещать. При перемещении опущенного пера за ним остается след. unit Drawman; interface -/// n (n=0..10) +/// Устанавливает скорость Чертежника равной n (n=0..10) procedure Speed(n: integer); -/// +/// Поднять перо procedure PenUp; -/// +/// Опустить перо procedure PenDown; -/// (x,y) +/// Переместиться к точке (x,y) procedure ToPoint(x,y: integer); -/// (a,b) +/// Переместиться на вектор (a,b) procedure OnVector(a,b: integer); -/// name +/// Вызывать задание с именем name procedure Task(name: string); -/// 9 11 +/// Создать пустое поле размера 9 на 11 клеток procedure StandardField; -/// n m +/// Создать пустое поле размера n на m клеток procedure Field(n,m: integer); -/// +/// Запустить Чертежника procedure Start; -/// +/// Остановить Чертежника procedure Stop; ///-- @@ -85,7 +85,7 @@ end; procedure StandardField; var x,y: integer; begin - TaskText(' '); + TaskText('Стандартное поле'); x := 9; y := 7; DMTaskMaker.Field(x,y); CorrectFieldBounds; @@ -95,7 +95,7 @@ end; procedure Field(n,m: integer); begin - TaskText(' '+IntToStr(n)+'x'+IntToStr(m)); + TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m)); DMTaskMaker.Field(n,m); CorrectFieldBounds; SetTaskCall; @@ -200,9 +200,9 @@ begin if TasksDictionary.ContainsKey(name) then TasksDictionary[name]() - else DrawManError(name+' - ',' '); + else DrawManError(name+' - нет такого задания для Чертежника','Задание отсутствует'); - // - + // Добавил - МА DMField.TaskName := name; // diff --git a/TestSuite/formatter_tests/input/DynArr1.pas b/TestSuite/formatter_tests/input/DynArr1.pas index a973c54d9..1a683cae4 100644 --- a/TestSuite/formatter_tests/input/DynArr1.pas +++ b/TestSuite/formatter_tests/input/DynArr1.pas @@ -1,6 +1,6 @@ -// . -// SetLength -// foreach ( ) +// Использование динамического массива. +// Процедура SetLength выделения памяти под динамический массив +// Оператор foreach (массив доступен только на чтение) var a: array of integer; begin @@ -8,7 +8,7 @@ begin SetLength(a,n); for var i:=0 to a.Length-1 do a[i] := Random(1,9); - writeln(' : '); + writeln('Содержимое случайного динамического массива целых: '); foreach x: integer in a do write(x,' '); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/DynArr2.pas b/TestSuite/formatter_tests/input/DynArr2.pas index b4bc25edf..b5e877dc4 100644 --- a/TestSuite/formatter_tests/input/DynArr2.pas +++ b/TestSuite/formatter_tests/input/DynArr2.pas @@ -1,17 +1,17 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln(' :'); + writeln('При присваивании динамических массивов две переменные начинают указывать на одну память:'); var n := 20; - a := new integer[n]; // + a := new integer[n]; // Другой способ выделения памяти for var i:=0 to a.Length-1 do a[i] := i; - writeln(' b[5]: a[5]=',a[5]); + writeln('До присваивания b[5]: a[5]=',a[5]); var b: array of integer; b := a; b[5] := 666; - writeln(' b[5]: a[5]=',a[5]); + writeln('После присваивания b[5]: a[5]=',a[5]); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/DynArr3.pas b/TestSuite/formatter_tests/input/DynArr3.pas index 19d53438f..0f2acfb79 100644 --- a/TestSuite/formatter_tests/input/DynArr3.pas +++ b/TestSuite/formatter_tests/input/DynArr3.pas @@ -1,8 +1,8 @@ -// . +// Использование динамического массива. var a: array of integer; begin - writeln('SetLength :'); + writeln('SetLength при повторном вызове не портит старые элементы:'); SetLength(a,5); for var i:=0 to a.Length-1 do a[i] := i+1; diff --git a/TestSuite/formatter_tests/input/DynArr4.pas b/TestSuite/formatter_tests/input/DynArr4.pas index 2679cb1ab..47fb8c953 100644 --- a/TestSuite/formatter_tests/input/DynArr4.pas +++ b/TestSuite/formatter_tests/input/DynArr4.pas @@ -1,13 +1,13 @@ -// +// Передача динамического массива в качестве параметра -procedure WriteArr(a: array of integer); // var , .. +procedure WriteArr(a: array of integer); // var указывать не нужно, т.к. динамический массив является ссылкой на реальный объект begin foreach x: integer in a do write(x,' '); writeln; end; -procedure CreateRandomArr(var a: array of integer; n: integer); // var , .. +procedure CreateRandomArr(var a: array of integer; n: integer); // var указывать нужно, т.к. в процедуре создается новый динамический массив begin a := new integer[n]; for var i:=0 to a.Length-1 do @@ -17,7 +17,7 @@ end; var a: array of integer; begin - writeln(' : '); + writeln('Случайный целый массив: '); CreateRandomArr(a,30); WriteArr(a); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/DynArrErr1.pas b/TestSuite/formatter_tests/input/DynArrErr1.pas index 27ec4523e..f8e2d5104 100644 --- a/TestSuite/formatter_tests/input/DynArrErr1.pas +++ b/TestSuite/formatter_tests/input/DynArrErr1.pas @@ -1,4 +1,4 @@ -// +// Ошибка невыделения памяти для динамического массива var a: array of integer; begin diff --git a/TestSuite/formatter_tests/input/DynArrErr2.pas b/TestSuite/formatter_tests/input/DynArrErr2.pas index 66511c0b0..cd1da4b02 100644 --- a/TestSuite/formatter_tests/input/DynArrErr2.pas +++ b/TestSuite/formatter_tests/input/DynArrErr2.pas @@ -1,4 +1,4 @@ -// +// Ошибка выхода за границы диапазона для динамического массива var a: array of integer; begin diff --git a/TestSuite/formatter_tests/input/Dynamic2.pas b/TestSuite/formatter_tests/input/Dynamic2.pas index 91aedef2f..4888d1972 100644 --- a/TestSuite/formatter_tests/input/Dynamic2.pas +++ b/TestSuite/formatter_tests/input/Dynamic2.pas @@ -1,4 +1,4 @@ -// Dynamic2 Programming Taskbook +// Пример решения задачи Dynamic2 из электронного задачника Programming Taskbook uses PT4; var p1,p2: PNode; @@ -11,8 +11,8 @@ begin begin write(p1^.Data); n += 1; - p2 := p1; { } - p1 := p1^.Next; { } + p2 := p1; { сохраняем адрес текущего элемента } + p1 := p1^.Next; { и переходим к следующему элементу } end; write(n, p2); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Dynarray.pas b/TestSuite/formatter_tests/input/Dynarray.pas index 746b47274..63d162f37 100644 --- a/TestSuite/formatter_tests/input/Dynarray.pas +++ b/TestSuite/formatter_tests/input/Dynarray.pas @@ -1,4 +1,4 @@ -// +// Процедуры и методы работы с динамическим массивом uses System; procedure Print(a: array of integer); @@ -11,30 +11,30 @@ end; var a: array of integer; begin - SetLength(a,10); // . : a := new integer[10]; + SetLength(a,10); // выделение памяти. А можно так: a := new integer[10]; - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := PABCSystem.Random(100); - // + // Вывод всех элементов массива Print(a); - // ( & , - // array - // Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении + // класса Array) &Array.Sort(a); Print(a); - // + // Обращение массива &Array.Reverse(a); Print(a); - // . SetLength + // Изменение размерамассиав с сохранением элементов. То же делает SetLength &Array.Resize(a,a.Length+2); Print(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 50); Writeln(i); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/ESquares.pas b/TestSuite/formatter_tests/input/ESquares.pas index fffe646fc..ceb9752cd 100644 --- a/TestSuite/formatter_tests/input/ESquares.pas +++ b/TestSuite/formatter_tests/input/ESquares.pas @@ -1,4 +1,4 @@ -// E-. +// E-квадраты. Демонстрация рекурсии uses GraphABC; const mw = 2.9; @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ': E-'; + Window.Title := 'Рекурсия: E-квадраты'; SetWindowSize(750,530); Pen.Color := clWhite; ESquares(4,125,18,490); diff --git a/TestSuite/formatter_tests/input/Enum.pas b/TestSuite/formatter_tests/input/Enum.pas index b9d3d0a87..db92312ee 100644 --- a/TestSuite/formatter_tests/input/Enum.pas +++ b/TestSuite/formatter_tests/input/Enum.pas @@ -1,4 +1,4 @@ -// +// Перечислимый тип type Months = (January,February,March,April,May,June,July,August,September,October,November,December); var m: Months; @@ -6,20 +6,20 @@ var m: Months; begin m := February; writeln(m); - // : intellisense + // Использование констант перечислимого типа после имени типа удобно: после точки intellisense показывает список констант m := Months.April; - writeln(' : ',m); + writeln('Следующий месяц: ',m); Inc(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Succ(m); - writeln(' : ',m); + writeln('Следующий месяц: ',m); m := Pred(m); - writeln(' : ',m); + writeln('Предыдующий месяц: ',m); Dec(m); - writeln(' : ',m); - writeln(' ( - ): ',Ord(m)); - // - writeln(' - : ',pred(Months.January)); - // - writeln(' - : ',succ(Months.December)); + writeln('Предыдующий месяц: ',m); + writeln('Его порядковый номер (нумерация - с нуля): ',Ord(m)); + // Ошибки нет + writeln('Месяц перед январем - выход за границы: ',pred(Months.January)); + // Ошибки нет + writeln('Месяц после декабря - выход за границы: ',succ(Months.December)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Eof.pas b/TestSuite/formatter_tests/input/Eof.pas index 7dbc0f14f..6fbf05213 100644 --- a/TestSuite/formatter_tests/input/Eof.pas +++ b/TestSuite/formatter_tests/input/Eof.pas @@ -1,4 +1,4 @@ -// eof. Shift-F9 +// Демонстрация работы функции eof. Запускать по Shift-F9 var s: char; begin while not eof do diff --git a/TestSuite/formatter_tests/input/Eoln.pas b/TestSuite/formatter_tests/input/Eoln.pas index 8c5711e4d..9d1ff68a2 100644 --- a/TestSuite/formatter_tests/input/Eoln.pas +++ b/TestSuite/formatter_tests/input/Eoln.pas @@ -1,4 +1,4 @@ -// eoln +// Демонстрация работы функции eoln begin while not eoln do begin diff --git a/TestSuite/formatter_tests/input/Eratosthenes.pas b/TestSuite/formatter_tests/input/Eratosthenes.pas index 87ef05e68..6c03a535b 100644 --- a/TestSuite/formatter_tests/input/Eratosthenes.pas +++ b/TestSuite/formatter_tests/input/Eratosthenes.pas @@ -1,4 +1,4 @@ -// " " - +// "Решето Эратосфена" - вычисление простых чисел const n = 100000; var primes: set of integer; @@ -18,9 +18,9 @@ begin end; end; - writeln(' < ',n,':'); + writeln('Простые числа < ',n,':'); writeln(primes); writeln; - writeln(' : ',Milliseconds/1000); + writeln('Время вычисления: ',Milliseconds/1000); end. diff --git a/TestSuite/formatter_tests/input/Events.pas b/TestSuite/formatter_tests/input/Events.pas index 38c356134..0bdb95f37 100644 --- a/TestSuite/formatter_tests/input/Events.pas +++ b/TestSuite/formatter_tests/input/Events.pas @@ -1,3 +1,3 @@ -// Pascal ABC +// Для совместимости с Pascal ABC unit Events; end. diff --git a/TestSuite/formatter_tests/input/File1.pas b/TestSuite/formatter_tests/input/File1.pas index 7a8b83ac3..8eb62692a 100644 --- a/TestSuite/formatter_tests/input/File1.pas +++ b/TestSuite/formatter_tests/input/File1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Типизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'a.dat'; var f: file of integer; @@ -9,7 +9,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); for var i:=1 to 10 do begin var x := random(100); @@ -22,7 +22,7 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); for var i:=1 to 10 do begin var x: integer; diff --git a/TestSuite/formatter_tests/input/File48.pas b/TestSuite/formatter_tests/input/File48.pas index 89b1caf86..b6c906d29 100644 --- a/TestSuite/formatter_tests/input/File48.pas +++ b/TestSuite/formatter_tests/input/File48.pas @@ -1,4 +1,4 @@ -// File48 Programming Taskbook +// Пример решения задачи File48 из электронного задачника Programming Taskbook uses PT4; var f: array [1..4] of file of integer; diff --git a/TestSuite/formatter_tests/input/FindT.pas b/TestSuite/formatter_tests/input/FindT.pas index 7828ce4f0..09eea2c38 100644 --- a/TestSuite/formatter_tests/input/FindT.pas +++ b/TestSuite/formatter_tests/input/FindT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров function IndexOf(a: array of T; val: T): integer; begin @@ -12,10 +12,10 @@ begin end; end; -var a: array of string := ('', '', '', ''); +var a: array of string := ('Ваня', 'Коля', 'Саша', 'Сережа'); begin - var s := ''; - writelnFormat(' ''{0}'' {1}',s,IndexOf(a,s)); + var s := 'Сережа'; + writelnFormat('Индекс элемент со значением ''{0}'' равен {1}',s,IndexOf(a,s)); end. diff --git a/TestSuite/formatter_tests/input/Flame.pas b/TestSuite/formatter_tests/input/Flame.pas index cfb8266b9..eaaaea7f7 100644 --- a/TestSuite/formatter_tests/input/Flame.pas +++ b/TestSuite/formatter_tests/input/Flame.pas @@ -18,20 +18,20 @@ begin end; begin - // + //Создаюм буфер экрана var ScreenBuffer := new TByteArray[size+1]; for var i:=0 to size do ScreenBuffer[i] := new byte[size+1]; - // + //Создаем палитру var ColorsTable := new Color[256]; FillPallete(ColorsTable); - // + //Настраиваем окно SetWindowSize(size,size); SetBrushColor(clBlack); FillRectangle(0,0,WindowWidth,WindowHeight); SetSmoothingOff; LockDrawing; - // + //Поехали var x, y, s, tt, xx, yy: Integer; var dt := System.DateTime.Now; var ds := WindowWidth div 4; diff --git a/TestSuite/formatter_tests/input/For1a.pas b/TestSuite/formatter_tests/input/For1a.pas index ecaa51b01..600a4a7bc 100644 --- a/TestSuite/formatter_tests/input/For1a.pas +++ b/TestSuite/formatter_tests/input/For1a.pas @@ -1,16 +1,16 @@ -// for. 2 +// Цикл for. Шаг цикла 2 const n = 25; var i: integer; begin - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); for i:=1 to n do write(2*i,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Четные числа от 1 до ',2*n); var x := 2; for i:=1 to n do begin @@ -20,13 +20,13 @@ begin writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); for i:=1 to n do write(2*i-1,' '); writeln; writeln; - writeln(' 1 ',2*n); + writeln('Нечетные числа от 1 до ',2*n); x := 1; for i:=1 to n do begin diff --git a/TestSuite/formatter_tests/input/For2.pas b/TestSuite/formatter_tests/input/For2.pas index 02e54e033..f94af5449 100644 --- a/TestSuite/formatter_tests/input/For2.pas +++ b/TestSuite/formatter_tests/input/For2.pas @@ -1,15 +1,15 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; var i: integer; begin - write(' : '); + write('Случайные оценки: '); for i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/For3.pas b/TestSuite/formatter_tests/input/For3.pas index 686ee6d9b..269346125 100644 --- a/TestSuite/formatter_tests/input/For3.pas +++ b/TestSuite/formatter_tests/input/For3.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Последовательность случайных чисел const n = 20; begin for var i:=1 to n do write(Random(2,5),' '); writeln; - write(' 1 99: '); + write('Случайные целые от 1 до 99: '); for var i:=n downto 1 do write(Random(1,99),' '); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/For4.pas b/TestSuite/formatter_tests/input/For4.pas index 98749099e..d10ab5ca5 100644 --- a/TestSuite/formatter_tests/input/For4.pas +++ b/TestSuite/formatter_tests/input/For4.pas @@ -1,9 +1,9 @@ -// for. +// ÷икл for. —умма всех двузначных чисел var s: integer; begin s := 0; for var i:=10 to 99 do - s := s + i; // s += i - writeln(' = ',s); + s := s + i; // можно s += i + writeln('—умма всех двузначных чисел = ',s); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/For5.pas b/TestSuite/formatter_tests/input/For5.pas index c8d828d7f..5b1a9a4cd 100644 --- a/TestSuite/formatter_tests/input/For5.pas +++ b/TestSuite/formatter_tests/input/For5.pas @@ -1,13 +1,13 @@ -// for. a n +// ÷икл for. a в степени n var a: real; n: integer; begin - write(' a,n: '); + write('¬ведите a,n: '); readln(a,n); var p: real := 1; for var i:=1 to n do - p := p * a; // p *= a - writelnFormat('{0} {1} = {2}',a,n,p); + p := p * a; // можно p *= a + writelnFormat('{0} в степени {1} = {2}',a,n,p); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/For8.pas b/TestSuite/formatter_tests/input/For8.pas index 794b027bf..5167640b8 100644 --- a/TestSuite/formatter_tests/input/For8.pas +++ b/TestSuite/formatter_tests/input/For8.pas @@ -1,11 +1,11 @@ -// for. +// Цикл for. Максимум из введенных чисел const n = 10; var max: real; begin - writelnFormat(' {0} ',n); - max := integer.MinValue; // + writelnFormat('Введите {0} чисел',n); + max := integer.MinValue; // самое маленькое целое число for var i:=1 to n do begin var x: real; @@ -13,5 +13,5 @@ begin if x>max then max := x; end; - writeln(' ',max); + writeln('Максимальное равно ',max); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/For9.pas b/TestSuite/formatter_tests/input/For9.pas index 4e807283f..7ca1357f1 100644 --- a/TestSuite/formatter_tests/input/For9.pas +++ b/TestSuite/formatter_tests/input/For9.pas @@ -1,4 +1,4 @@ -// for. . break +// Цикл for. Поиск значения. Оператор break const n = 10; var @@ -6,9 +6,9 @@ var found: boolean; begin - writeln(' : '); + writeln('Введите число для поиска: '); readln(k); - writelnFormat(' {0} ',n); + writelnFormat('Введите {0} чисел',n); found := False; for var i:=1 to n do begin @@ -21,6 +21,6 @@ begin end; end; if found then - writeln('') - else writeln(' '); + writeln('Найдено') + else writeln('Не найдено'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/ForFor1.pas b/TestSuite/formatter_tests/input/ForFor1.pas index 411feb626..c6f2b1322 100644 --- a/TestSuite/formatter_tests/input/ForFor1.pas +++ b/TestSuite/formatter_tests/input/ForFor1.pas @@ -1,8 +1,8 @@ -// for. +// Вложенные циклы for. Таблица умножения const n = 9; begin - writeln(' '); + writeln('Таблица умножения'); for var i:=1 to n do begin for var j:=1 to n do diff --git a/TestSuite/formatter_tests/input/ForFor2.pas b/TestSuite/formatter_tests/input/ForFor2.pas index ed75c12e2..002e2d5c0 100644 --- a/TestSuite/formatter_tests/input/ForFor2.pas +++ b/TestSuite/formatter_tests/input/ForFor2.pas @@ -1,4 +1,4 @@ -// for +// Вложенные циклы for const n = 6; begin diff --git a/TestSuite/formatter_tests/input/ForGra1.pas b/TestSuite/formatter_tests/input/ForGra1.pas index 7097f70be..a7028177b 100644 --- a/TestSuite/formatter_tests/input/ForGra1.pas +++ b/TestSuite/formatter_tests/input/ForGra1.pas @@ -1,4 +1,4 @@ -// for. +// Вложенные циклы for. Сетка из квадртов uses GraphABC; const diff --git a/TestSuite/formatter_tests/input/Foreach.pas b/TestSuite/formatter_tests/input/Foreach.pas index 82e2e12dc..2b546058b 100644 --- a/TestSuite/formatter_tests/input/Foreach.pas +++ b/TestSuite/formatter_tests/input/Foreach.pas @@ -1,4 +1,4 @@ -// foreach +// Пример иллюстрирует возможности оператора foreach uses System.Collections.Generic; var @@ -7,20 +7,20 @@ var l: List; begin - write('foreach : ':35); + write('foreach по обычному массиву: ':35); foreach x: integer in a do write(x,' '); writeln; s := [2..5,10..14]; - write('foreach : ':35); + write('foreach по множеству: ':35); foreach x: integer in s do write(x,' '); writeln; l := new List; l.Add(7); l.Add(2); l.Add(5); - write('foreach : ':35); + write('foreach по динамическому массиву: ':35); foreach x: integer in l do write(x,' '); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/ForeachExamples.pas b/TestSuite/formatter_tests/input/ForeachExamples.pas index 97457129d..a227823f6 100644 --- a/TestSuite/formatter_tests/input/ForeachExamples.pas +++ b/TestSuite/formatter_tests/input/ForeachExamples.pas @@ -1,5 +1,5 @@ -// , -// foreach +// Пример иллюстрирует всевозможные типы контейнеров, +// по которым можно перемещаться с помощью оператора foreach uses System.Collections.Generic; @@ -15,7 +15,7 @@ var begin for var i:=1 to n do a[i] := Random(100); - // foreach + // Цикл foreach по статическому массиву foreach x in a do write(x,' '); writeln; @@ -24,7 +24,7 @@ begin for var i:=0 to n-1 do b[i] := Random(100); - // foreach + // Цикл foreach по динамическому массиву foreach x in b do write(x,' '); writeln; diff --git a/TestSuite/formatter_tests/input/ForeachForSet.pas b/TestSuite/formatter_tests/input/ForeachForSet.pas index e74eee07e..5044ff296 100644 --- a/TestSuite/formatter_tests/input/ForeachForSet.pas +++ b/TestSuite/formatter_tests/input/ForeachForSet.pas @@ -1,4 +1,4 @@ -// . - , - +// Цикл по множеству. Порядок - не по алфавиту, поскольку множества реализованы на базе хеш-таблиц begin foreach c: char in ['a'..'z'] do Write(c); diff --git a/TestSuite/formatter_tests/input/ForeachIEnumerable.pas b/TestSuite/formatter_tests/input/ForeachIEnumerable.pas index 84d0b4fd1..b30140fa1 100644 --- a/TestSuite/formatter_tests/input/ForeachIEnumerable.pas +++ b/TestSuite/formatter_tests/input/ForeachIEnumerable.pas @@ -1,9 +1,9 @@ -// IEnumerable -// foreach +// Пример иллюстрирует реализацию классом интерфейса IEnumerable +// для использования его в операторе foreach uses System.Collections; type - // + // Генератор чисел Фибоначчи FibGen = class(IEnumerable, IEnumerator) private a,b,n,i: integer; @@ -44,7 +44,7 @@ type var f: FibGen; begin - writeln(' '); + writeln('Числа Фибоначчи'); f := new FibGen(25); foreach x: integer in f do write(x,' '); diff --git a/TestSuite/formatter_tests/input/FormWebBrowser.pas b/TestSuite/formatter_tests/input/FormWebBrowser.pas index 0986173ae..51a1936b7 100644 --- a/TestSuite/formatter_tests/input/FormWebBrowser.pas +++ b/TestSuite/formatter_tests/input/FormWebBrowser.pas @@ -1,4 +1,4 @@ -// WebBrowser +// Иллюстрация использования компонента WebBrowser {$apptype windows} {$reference 'System.Windows.Forms.dll'} diff --git a/TestSuite/formatter_tests/input/FormsABC.pas b/TestSuite/formatter_tests/input/FormsABC.pas index 0e71c5a97..e57dcf9f0 100644 --- a/TestSuite/formatter_tests/input/FormsABC.pas +++ b/TestSuite/formatter_tests/input/FormsABC.pas @@ -20,7 +20,7 @@ type Color = System.Drawing.Color; - /// + /// Поле ввода Field = class private l: &Label; @@ -40,7 +40,7 @@ type property FieldWidth: integer read GetFieldWidth write SetFieldWidth; end; - /// + /// Поле ввода целых значений IntegerField = class(Field) private nonNumberEntered: boolean; @@ -53,7 +53,7 @@ type property Text: string read GetText; end; - /// + /// Поле ввода вещественных значений RealField = class(Field) private nonNumberEntered: boolean; @@ -66,7 +66,7 @@ type property Text: string read GetText; end; - /// + /// Кнопка Button = class private b := new System.Windows.Forms.Button; @@ -76,7 +76,7 @@ type constructor Create(text: string); end; - /// + /// Текстовая метка TextLabel = class private l := new System.Windows.Forms.Label; @@ -84,7 +84,7 @@ type constructor(text: string); end; - /// + /// Флажок CheckBox = class private cb := new System.Windows.Forms.CheckBox; @@ -95,7 +95,7 @@ type property Checked: boolean read GetValue write SetValue; end; - /// + /// Радиокнопка RadioButton = class private rb := new System.Windows.Forms.RadioButton; @@ -106,7 +106,7 @@ type property Checked: boolean read GetValue write SetValue; end; - /// + /// Список ListBox = class private lb := new System.Windows.Forms.ListBox; @@ -128,7 +128,7 @@ type property Count: integer read GetCount; end; - /// + /// Выпадающий список ComboBox = class private cb := new System.Windows.Forms.ComboBox; @@ -153,7 +153,7 @@ type property Width: integer read GetWidth write SetWidth; end; - /// + /// Ползунок TrackBar = class private tb: System.Windows.Forms.TrackBar; @@ -175,7 +175,7 @@ type property Frequency: integer read GetFrequency write SetFrequency; end; - /// + /// Ползунок IntegerUpDown = class private n: System.Windows.Forms.NumericUpDown; @@ -212,7 +212,7 @@ type property Dock: DockStyle read GetDock write SetDock; end; - /// + /// Текстовый редактор TextBox = class(BaseDockControl) private function GetText: string; @@ -233,7 +233,7 @@ type procedure Paste; end; - /// - + /// Веб-браузер WebBrowser = class(BaseDockControl) private function GetText: string; @@ -251,7 +251,7 @@ type property Address: string read GetAddress; end; - /// + /// Окно для рисования PaintBox = class(BaseDockControl) private procedure PResize(sender: Object; e: EventArgs); @@ -271,7 +271,7 @@ type //function pb: PictureBox; end; - /// + /// Пункт меню MenuItem = class; ItemProc = procedure(item: MenuItem); MenuItem = class @@ -292,7 +292,7 @@ type property Item[i: integer]: MenuItem read GetItem; default; end; - /// + /// Главное меню MainMenu = class private m: MenuStrip; @@ -314,7 +314,7 @@ type public end; - /// + /// Тип главной формы MainFormType = class(ContainerControl) private m: Form; @@ -334,33 +334,33 @@ type constructor Create; public event Resize: procedure; - /// + /// Отступ главного окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; - /// + /// Отступ главного окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; - /// + /// Ширина главного окна в пикселах property Width: integer read GetWidth write SetWidth; - /// + /// Высота главного окна в пикселах property Height: integer read GetHeight write SetHeight; - /// + /// Заголовок главного окна property Title: string read GetTitle write SetTitle; - /// + /// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; - /// + /// Устанавливает размеры главного окна в пикселах procedure SetSize(w, h: integer); - /// + /// Устанавливает отступ главного окна от левого верхнего края экрана в пикселах procedure SetPos(l, t: integer); - /// + /// Закрывает главное окно и завершает приложение procedure Close; - /// + /// Сворачивает главное окно procedure Minimize; - /// + /// Максимизирует главное окно procedure Maximize; - /// + /// Возвращает главное окно к нормальному размеру procedure Normalize; - /// + /// Центрирует главное окно по центру экрана procedure CenterOnScreen; - /// .NET- + /// Возвращает главную .NET-форму function NetForm: Form; end; @@ -380,9 +380,9 @@ type constructor Create(f: System.Windows.Forms.Panel); public constructor Create; - /// + /// Ширина панели в пикселах property Width: integer read GetWidth write SetWidth; - /// + /// Высота панели в пикселах property Height: integer read GetHeight write SetHeight; property Dock: DockStyle read GetDock write SetDock; property Border: BorderStyle read GetBorderStyle write SetBorderStyle; @@ -406,7 +406,7 @@ type function ShowDialog: DialogResult; end; - /// + /// Диалог работы с файлами FileDialog = class(CommonDialog) private procedure SetFilter(f: string); @@ -421,24 +421,24 @@ type property InitialDirectory: string read GetInitialDirectory write SetInitialDirectory; end; - /// + /// Диалог открытия файла OpenFileDialog = class(FileDialog) public constructor Create; end; - /// + /// Диалог сохранения файла SaveFileDialog = class(FileDialog) public constructor Create; end; -//------------- --------------- +//------------- Процедуры --------------- -/// +/// Перейти на новую строку procedure LineBreak; -/// +/// Добавить пустую строку procedure EmptyLine(h: integer := 20); -/// +/// Добавить пустое пространство procedure EmptySpace(w: integer := 20); type @@ -457,12 +457,12 @@ type end; end; -//------------- --------------- +//------------- Переменные --------------- var MainForm: MainFormType; MainPanel: FlowPanel; - // : 20.11.10 + // Эксперимент: 20.11.10 ParentControl: ContainerControl; implementation @@ -475,7 +475,7 @@ var nfi: System.Globalization.NumberFormatInfo; -//------------- --------------- +//------------- Компоненты --------------- //------------- Field --------------- @@ -1464,7 +1464,7 @@ begin Result := FlowLayoutPanel(p).FlowDirection; end; -//------------- --------------- +//------------- Процедуры --------------- procedure LineBreak; begin diff --git a/TestSuite/formatter_tests/input/FracOperatorOverload.pas b/TestSuite/formatter_tests/input/FracOperatorOverload.pas index d876aa633..9491ae6be 100644 --- a/TestSuite/formatter_tests/input/FracOperatorOverload.pas +++ b/TestSuite/formatter_tests/input/FracOperatorOverload.pas @@ -1,4 +1,4 @@ -// . "" +// Перегрузка операций. Класс "Дробь" type Frac = record private @@ -9,7 +9,7 @@ type Self.n := n; Self.m := m; end; - class function operator+(f1,f2: Frac): Frac; // + class function operator+(f1,f2: Frac): Frac; // операция перегружается как классовая функция begin Result.n := f1.n*f2.m+f1.m*f2.n; Result.m := f1.n*f1.m; @@ -19,7 +19,7 @@ type Result.n := f1.n*f2.m-f1.m*f2.n; Result.m := f1.n*f1.m; end; - function ToString: string; override; // Frac write + function ToString: string; override; // Требуется переопределить эту функцию чтобы выводить переменные типа Frac в write begin Result := Format('{0}/{1}',n,m); end; @@ -31,6 +31,6 @@ begin f := new Frac(2,3); f1 := new Frac(1,2); writelnFormat('{0} + {1} = {2} ',f,f1,f+f1); - // f+f1 Frac.operator+(f,f1) + // f+f1 переводится компилятором в Frac.operator+(f,f1) writelnFormat('{0} - {1} = {2} ',f,f1,f-f1); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Fun1.pas b/TestSuite/formatter_tests/input/Fun1.pas index 74b93d8ef..9aeffb0e6 100644 --- a/TestSuite/formatter_tests/input/Fun1.pas +++ b/TestSuite/formatter_tests/input/Fun1.pas @@ -1,4 +1,4 @@ -// . +// Определение функции. Вывод таблицы ее значений function MyFun(x: real): real; begin @@ -13,7 +13,7 @@ const begin var h := (b-a)/n; var x := a; - writeln(' MyFun:'); + writeln('Таблица значений функции MyFun:'); for var i := 0 to n do begin writeln(x:5:2,MyFun(x):10:4); diff --git a/TestSuite/formatter_tests/input/Fun2.pas b/TestSuite/formatter_tests/input/Fun2.pas index 099b7c14e..4994822e4 100644 --- a/TestSuite/formatter_tests/input/Fun2.pas +++ b/TestSuite/formatter_tests/input/Fun2.pas @@ -1,4 +1,4 @@ -// Power +// Функция Power function Power(x: real; n: integer): real; begin @@ -13,5 +13,5 @@ var begin x := 2; n := 5; - writelnFormat('{0} {1} = {2}',x,n,Power(x,n)); + writelnFormat('{0} в степени {1} = {2}',x,n,Power(x,n)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/FuncParams.pas b/TestSuite/formatter_tests/input/FuncParams.pas index 81e9a13a6..e23578348 100644 --- a/TestSuite/formatter_tests/input/FuncParams.pas +++ b/TestSuite/formatter_tests/input/FuncParams.pas @@ -1,4 +1,4 @@ -// +// Переменное число параметров function Sum(params arg: array of integer): integer; begin Result := 0; diff --git a/TestSuite/formatter_tests/input/GarbageCollection.pas b/TestSuite/formatter_tests/input/GarbageCollection.pas index 9182e55ca..e9361cc02 100644 --- a/TestSuite/formatter_tests/input/GarbageCollection.pas +++ b/TestSuite/formatter_tests/input/GarbageCollection.pas @@ -1,4 +1,4 @@ -// : nil +// Сборка мусора: для освобождения объекта присвойте переменной nil uses System.Collections.Generic; var l: List := new List; @@ -9,5 +9,5 @@ begin l.Add(2); foreach x:integer in l do write(x,' '); - l := nil; // , , + l := nil; // после этого память, занимаемая динамическим массивом, будет собрана сборщиком мусора end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Gr1.pas b/TestSuite/formatter_tests/input/Gr1.pas index 1a55d87d0..1b3eb122e 100644 --- a/TestSuite/formatter_tests/input/Gr1.pas +++ b/TestSuite/formatter_tests/input/Gr1.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Линии. Размеры окна. Заголовок окна uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Первая графическая программа'; Line(0,0,Window.Width-1,Window.Height-1); Line(0,Window.Height-1,Window.Width-1,0); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Gr2.pas b/TestSuite/formatter_tests/input/Gr2.pas index a4f21e187..0471c2aa8 100644 --- a/TestSuite/formatter_tests/input/Gr2.pas +++ b/TestSuite/formatter_tests/input/Gr2.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Точка. Случайный цвет. Скорость работы uses GraphABC,Utils; begin for var i:=1 to 100000 do SetPixel(Random(Window.Width),Random(Window.Height),clRandom); - writeln(' : ',Milliseconds/1000,' '); + writeln('Время работы: ',Milliseconds/1000,' секунд'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Gr3.pas b/TestSuite/formatter_tests/input/Gr3.pas index 66e1f3881..de0d7ae58 100644 --- a/TestSuite/formatter_tests/input/Gr3.pas +++ b/TestSuite/formatter_tests/input/Gr3.pas @@ -1,8 +1,8 @@ -// . +// Графика. Свойства кисти и пера uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Свойства кисти и пера'; Pen.Color := Color.Red; Pen.Width := 3; Pen.Style := psDashDot; diff --git a/TestSuite/formatter_tests/input/Gr4.pas b/TestSuite/formatter_tests/input/Gr4.pas index e6c2025a1..7c060dd57 100644 --- a/TestSuite/formatter_tests/input/Gr4.pas +++ b/TestSuite/formatter_tests/input/Gr4.pas @@ -1,8 +1,8 @@ -// . Draw Fill - +// Графика. Draw и Fill - процедуры uses GraphABC; begin - Window.Title := 'Draw Fill - '; + Window.Title := 'Draw и Fill - процедуры'; for var i := 1 to 100 do begin Pen.Color := clRandom; diff --git a/TestSuite/formatter_tests/input/Gr5.pas b/TestSuite/formatter_tests/input/Gr5.pas index 4cbaac953..979566e61 100644 --- a/TestSuite/formatter_tests/input/Gr5.pas +++ b/TestSuite/formatter_tests/input/Gr5.pas @@ -1,10 +1,10 @@ -// . Pie +// Графика. Pie uses GraphABC; const r = 200; begin - Window.Title := ' '; + Window.Title := 'Круговая гистограмма'; var x := Window.Center.X; var y := Window.Center.Y; Brush.Color := clRandom; diff --git a/TestSuite/formatter_tests/input/Gr6.pas b/TestSuite/formatter_tests/input/Gr6.pas index b127200f3..6430311b0 100644 --- a/TestSuite/formatter_tests/input/Gr6.pas +++ b/TestSuite/formatter_tests/input/Gr6.pas @@ -1,8 +1,8 @@ -// . +// Графика. Прозрачность uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация прозрачности'; Brush.Color := clRed; FillRectangle(50,50,100,Window.Height - 50); diff --git a/TestSuite/formatter_tests/input/Gr7.pas b/TestSuite/formatter_tests/input/Gr7.pas index ef1f7ca6a..3eacff030 100644 --- a/TestSuite/formatter_tests/input/Gr7.pas +++ b/TestSuite/formatter_tests/input/Gr7.pas @@ -1,4 +1,4 @@ -// . +// Графика. Сохраниение изображения графического окна в файл и загрузка из файла uses GraphABC; const @@ -6,7 +6,7 @@ const filename = 'GraphWindow.bmp'; begin - Window.Title := 'Window.Save Window.Load'; + Window.Title := 'Window.Save и Window.Load'; SetWindowSize(320,240); for var x:=0 to Window.Width - 1 do diff --git a/TestSuite/formatter_tests/input/Gr8.pas b/TestSuite/formatter_tests/input/Gr8.pas index 278994fb4..678a0a382 100644 --- a/TestSuite/formatter_tests/input/Gr8.pas +++ b/TestSuite/formatter_tests/input/Gr8.pas @@ -1,9 +1,9 @@ -// . +// Графика. Сглаживание uses GraphABC; begin - Window.Title := ' '; - TextOut(40,20,' '); + Window.Title := 'Демонстрация сглаживания'; + TextOut(40,20,'Со сглаживанием'); Pen.Width := 2; Ellipse(40,60,300,200); @@ -11,7 +11,7 @@ begin Line(600,130,340,200); SetSmoothingOff; - TextOut(40,240,' '); + TextOut(40,240,'Без сглаживания'); Ellipse(40,280,300,420); Line(340,280,600,350); Line(600,350,340,420); diff --git a/TestSuite/formatter_tests/input/GrAnim1.pas b/TestSuite/formatter_tests/input/GrAnim1.pas index 71dde4512..67e0b2d54 100644 --- a/TestSuite/formatter_tests/input/GrAnim1.pas +++ b/TestSuite/formatter_tests/input/GrAnim1.pas @@ -1,8 +1,8 @@ -// . "" . +// Графика. Пример "наивной" анимации. Эффект мерцания uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация простой анимации'; var y := 200; Brush.Color := clGreen; for var x := 70 to 500 do diff --git a/TestSuite/formatter_tests/input/GrAnim2.pas b/TestSuite/formatter_tests/input/GrAnim2.pas index bad081cf2..b88e17046 100644 --- a/TestSuite/formatter_tests/input/GrAnim2.pas +++ b/TestSuite/formatter_tests/input/GrAnim2.pas @@ -1,17 +1,17 @@ -// . LockDrawing-Redraw. +// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Анимация без мерцания'; var y := 200; Brush.Color := clGreen; - // + // Отключаем рисование в окне LockDrawing; for var x := 70 to 500 do begin Window.Clear(clWhite); Circle(x,y,50); - // + // Перерисовываем окно из внеэранного буфера Redraw; Sleep(3); end; diff --git a/TestSuite/formatter_tests/input/GrCoord1.pas b/TestSuite/formatter_tests/input/GrCoord1.pas index 169a52366..8da8ac886 100644 --- a/TestSuite/formatter_tests/input/GrCoord1.pas +++ b/TestSuite/formatter_tests/input/GrCoord1.pas @@ -1,15 +1,15 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; - // + // Поворот Coordinate.Angle := 30; - // + // Масштаб Coordinate.Scale := 3; - // - + // Начало координат - в центре окна Coordinate.Origin := Window.Center; Brush.Color := clMoneyGreen; diff --git a/TestSuite/formatter_tests/input/GrCoord2.pas b/TestSuite/formatter_tests/input/GrCoord2.pas index d5e2ba3f8..e81b9b651 100644 --- a/TestSuite/formatter_tests/input/GrCoord2.pas +++ b/TestSuite/formatter_tests/input/GrCoord2.pas @@ -1,8 +1,8 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; Coordinate.Origin := Window.Center; diff --git a/TestSuite/formatter_tests/input/GrFont1.pas b/TestSuite/formatter_tests/input/GrFont1.pas index 54600ef1d..40446966c 100644 --- a/TestSuite/formatter_tests/input/GrFont1.pas +++ b/TestSuite/formatter_tests/input/GrFont1.pas @@ -1,8 +1,8 @@ -// +// Демонстрация работы со шрифтами uses GraphABC; begin - Window.Title := ''; + Window.Title := 'Шрифты'; SetWindowSize(760,460); Font.Name := 'Arial'; Font.Style := fsBoldItalic; diff --git a/TestSuite/formatter_tests/input/GrFont2.pas b/TestSuite/formatter_tests/input/GrFont2.pas index 04b15835c..17947a8ff 100644 --- a/TestSuite/formatter_tests/input/GrFont2.pas +++ b/TestSuite/formatter_tests/input/GrFont2.pas @@ -1,10 +1,10 @@ -// TextWidth TextHeight +// Демонстрация использования TextWidth и TextHeight uses GraphABC; const s = 'Width & Height'; begin - Window.Title := ' '; + Window.Title := 'Текст по центру'; Window.IsFixedSize := True; SetWindowSize(700,300); Window.Center; diff --git a/TestSuite/formatter_tests/input/GrPoly.pas b/TestSuite/formatter_tests/input/GrPoly.pas index 7abc91298..68f80312d 100644 --- a/TestSuite/formatter_tests/input/GrPoly.pas +++ b/TestSuite/formatter_tests/input/GrPoly.pas @@ -1,11 +1,11 @@ -// Polyline, Polygon, Curve, ClosedCurve -// +// Процедуры Polyline, Polygon, Curve, ClosedCurve +// Перенос начала системы координат uses GraphABC; var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); begin - Window.Title := ' '; + Window.Title := 'Рисование по массиву точек'; Brush.Color := Color.Beige; Coordinate.SetOrigin(60,30); Polyline(a); diff --git a/TestSuite/formatter_tests/input/GraphABC.pas b/TestSuite/formatter_tests/input/GraphABC.pas index 9f70a7132..6c392d86a 100644 --- a/TestSuite/formatter_tests/input/GraphABC.pas +++ b/TestSuite/formatter_tests/input/GraphABC.pas @@ -1,11 +1,11 @@ // Copyright (c) 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 GraphABC; //ne udaljat, IB 7.10.08 -// 2015.01 (mabr) +//с дополнениями 2015.01 (mabr) {$apptype windows} {$reference 'System.Windows.Forms.dll'} {$reference 'System.Drawing.dll'} @@ -20,15 +20,15 @@ uses System.Drawing.Drawing2D; type -/// +/// Тип цвета Color = System.Drawing.Color; -/// +/// Тип стиля штриховки кисти HatchStyle = System.Drawing.Drawing2D.HatchStyle; -/// +/// Тип стиля штриховки пера DashStyle = System.Drawing.Drawing2D.DashStyle; -/// GraphABC +/// Тип исключения GraphABC GraphABCException = class(Exception) end; -/// +/// Тип точки Point = System.Drawing.Point; var @@ -225,95 +225,95 @@ type FontStyleType = (fsNormal, fsBold, fsItalic, fsBoldItalic, fsUnderline, fsBoldUnderline, fsItalicUnderline, fsBoldItalicUnderline); BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient, bsNone); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела с координатами (x,y) function GetPixel(x,y: integer): Color; -/// (x,y) +/// Устанавливает текущую позицию рисования в точку (x,y) procedure MoveTo(x,y: integer); -/// (x,y). (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer); -/// (x,y) c. (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer; c: Color); -/// (x1,y1) (x2,y2) +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Рисует окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r +/// Рисует заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// (x,y) +/// Возвращает точку на плоскости с координатами (x,y) function Pnt(x,y: integer): Point; -/// , points +/// Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Рисует ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Рисует кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// n (x,y) +/// Выводит целое n в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; n: integer); -/// r (x,y) +/// Выводит вещественное r в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; r: real); -/// s, (x,y,x1,y1) +/// Выводит строку s, отцентрированную в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; s: string); -/// n, (x,y,x1,y1) +/// Выводит целое значение n, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; n: integer); -/// r, (x,y,x1,y1) +/// Выводит вещественное значение r, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; r: real); -/// c, (x,y). +/// Заливает область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); {procedure FillCircle(x,y,r: integer; c: Color); @@ -342,271 +342,271 @@ procedure Polygon(a: array of Point; c: Color); procedure Polyline(a: array of Point; c: Color);} //-------------------------------------------- -//// +//// Цвета //-------------------------------------------- -/// , (r), (g) (b) (r,g b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) function RGB(r,g,b: byte): Color; -/// , (r), (g) (b) (a) (a,r,g,b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) function ARGB(a,r,g,b: byte): Color; -/// r (r - 0 255) +/// Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) function RedColor(r: byte): Color; -/// g (g - 0 255) +/// Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) function GreenColor(g: byte): Color; -/// b (b - 0 255) +/// Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) function BlueColor(b: byte): Color; -/// +/// Возвращает случайный цвет function clRandom: Color; -/// +/// Возвращает красную составляющую цвета function GetRed(c: Color): integer; -/// +/// Возвращает зеленую составляющую цвета function GetGreen(c: Color): integer; -/// +/// Возвращает синюю составляющую цвета function GetBlue(c: Color): integer; -/// +/// Возвращает составляющую прозрачности цвета function GetAlpha(c: Color): integer; //-------------------------------------------- -//// +//// Перья //-------------------------------------------- -/// +/// Устанавливает цвет текущего пера procedure SetPenColor(c: Color); -/// +/// Возвращает цвет текущего пера function PenColor: Color; -/// +/// Устанавливает ширину текущего пера procedure SetPenWidth(Width: integer); -/// +/// Возвращает ширину текущего пера function PenWidth: integer; -/// +/// Устанавливает стиль текущего пера procedure SetPenStyle(style: DashStyle); -/// +/// Возвращает стиль текущего пера function PenStyle: DashStyle; -/// +/// Устанавливает режим текущего пера procedure SetPenMode(m: integer); -/// +/// Возвращает режим текущего пера function PenMode: integer; //2015.01> -/// +/// Устанавливает или отменяет режим закругленных концов линий procedure SetPenRoundCap(isRoundCap: boolean); -/// tru, +/// Возвращает truе, если установлен режим закругленных концов линий function PenRoundCap: boolean; //2015.01< -/// x- +/// Возвращают x-координату текущей позиции рисования function PenX: integer; -/// y- +/// Возвращают y-координату текущей позиции рисования function PenY: integer; //-------------------------------------------- -//// +//// Кисти //-------------------------------------------- -/// +/// Устанавливает цвет текущей кисти procedure SetBrushColor(c: Color); -/// +/// Возвращает цвет текущей кисти function BrushColor: Color; -/// +/// Устанавливает цвет текущей кисти procedure SetBrushStyle(bs: BrushStyleType); -/// +/// Возвращает цвет текущей кисти function BrushStyle: BrushStyleType; -/// +/// Устанавливает штриховку текущей кисти procedure SetBrushHatch(bh: HatchStyle); -/// +/// Возвращает штриховку текущей кисти function BrushHatch: HatchStyle; -/// +/// Устанавливает цвет заднего плана текущей штриховой кисти procedure SetHatchBrushBackgroundColor(c: Color); -/// +/// Возвращает цвет заднего плана текущей штриховой кисти function HatchBrushBackgroundColor: Color; -/// +/// Устанавливает второй цвет текущей градиентной кисти procedure SetGradientBrushSecondColor(c: Color); -/// +/// Возвращает второй цвет текущей градиентной кисти function GradientBrushSecondColor: Color; //-------------------------------------------- -//// +//// Шрифты //-------------------------------------------- -/// +/// Устанавливает размер текущего шрифта в пунктах procedure SetFontSize(size: integer); -/// +/// Возвращает размер текущего шрифта в пунктах function FontSize: integer; -/// +/// Устанавливает имя текущего шрифта procedure SetFontName(name: string); -/// +/// Возвращает имя текущего шрифта function FontName: string; -/// +/// Устанавливает цвет текущего шрифта procedure SetFontColor(c: Color); -/// +/// Возвращает цвет текущего шрифта function FontColor: Color; -/// +/// Устанавливает стиль текущего шрифта procedure SetFontStyle(fs: FontStyleType); -/// +/// Возвращает стиль текущего шрифта function FontStyle: FontStyleType; -/// s +/// Возвращает ширину строки s в пикселях при текущих настройках шрифта function TextWidth(s: string): integer; -/// s +/// Возвращает высоту строки s в пикселях при текущих настройках шрифта function TextHeight(s: string): integer; //-------------------------------------------- -//// +//// Графическое окно //-------------------------------------------- -/// +/// Очищает графическое окно белым цветом procedure ClearWindow; -/// c +/// Очищает графическое окно цветом c procedure ClearWindow(c: Color); -/// +/// Возвращает ширину клиентской части графического окна в пикселах function WindowWidth: integer; -/// +/// Возвращает высоту клиентской части графического окна в пикселах function WindowHeight: integer; -/// +/// Возвращает отступ графического окна от левого края экрана в пикселах function WindowLeft: integer; -/// +/// Возвращает отступ графического окна от верхнего края экрана в пикселах function WindowTop: integer; -/// +/// Возвращает центр графического окна function WindowCenter: Point; -/// True, , False +/// Возвращает True, если графическое окно имеет фиксированный размер, и False в противном случае function WindowIsFixedSize: boolean; -/// +/// Устанавливает ширину клиентской части графического окна в пикселах procedure SetWindowWidth(w: integer); -/// +/// Устанавливает высоту клиентской части графического окна в пикселах procedure SetWindowHeight(h: integer); -/// +/// Устанавливает отступ графического окна от левого края экрана в пикселах procedure SetWindowLeft(l: integer); -/// +/// Устанавливает отступ графического окна от верхнего края экрана в пикселах procedure SetWindowTop(t: integer); -/// , +/// Устанавливает, имеет ли графическое окно фиксированный размер procedure SetWindowIsFixedSize(b: boolean); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetWindowSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetWindowPos(l,t: integer); -/// ( WindowWidth) +/// Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) function GraphBoxWidth: integer; -/// ( WindowHeight) +/// Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) function GraphBoxHeight: integer; -/// +/// Возвращает отступ графического компонента от левого края окна в пикселах function GraphBoxLeft: integer; -/// +/// Возвращает отступ графического компонента от верхнего края окна в пикселах function GraphBoxTop: integer; -/// +/// Возвращает заголовок графического окна function WindowCaption: string; -/// +/// Возвращает заголовок графического окна function WindowTitle: string; -/// +/// Устанавливает заголовок графического окна procedure SetWindowCaption(s: string); -/// +/// Устанавливает заголовок графического окна procedure SetWindowTitle(s: string); -/// +/// Устанавливает ширину и высоту клиентской части графического окна в пикселах procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// fname +/// Сохраняет содержимое графического окна в файл с именем fname procedure SaveWindow(fname: string); -/// fname +/// Восстанавливает содержимое графического окна из файла с именем fname procedure LoadWindow(fname: string); -/// fname +/// Заполняет содержимое графического окна обоями из файла с именем fname procedure FillWindow(fname: string); -/// +/// Закрывает графическое окно и завершает приложение procedure CloseWindow; -/// +/// Возвращает ширину экрана в пикселях function ScreenWidth: integer; -/// +/// Возвращает высоту экрана в пикселях function ScreenHeight: integer; -/// +/// Центрирует графическое окно по центру экрана procedure CenterWindow; -/// +/// Максимизирует графическое окно procedure MaximizeWindow; -/// +/// Сворачивает графическое окно procedure MinimizeWindow; -/// +/// Возвращает графическое окно к нормальному размеру procedure NormalizeWindow; //-------------------------------------------- -//// +//// Буферизация рисования //-------------------------------------------- -/// . LockDrawing +/// Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure Redraw; ///-- procedure FullRedraw; -/// . Redraw +/// Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure LockDrawing; -/// +/// Снимает блокировку рисования на графическом окне и осуществляет его перерисовку procedure UnlockDrawing; //-------------------------------------------- -//// +//// Сглаживание //-------------------------------------------- -/// +/// Устанавливает режим сглаживания procedure SetSmoothing(sm: boolean); -/// +/// Включает режим сглаживания procedure SetSmoothingOn; -/// +/// Выключает режим сглаживания procedure SetSmoothingOff; -/// True, +/// Возвращает True, если режим сглаживания установлен function SmoothingIsOn: boolean; //-------------------------------------------- -//// +//// Вспомогательные подпрограммы //-------------------------------------------- -/// . +/// Блокирует прорисовку графики. Вызывается для синхронизации procedure LockGraphics; -/// . +/// Разблокирует прорисовку графики. Вызывается для синхронизации procedure UnLockGraphics; //------------------------------------------------------------ -//// +//// Подпрограммы для работы с системой координат //------------------------------------------------------------ -/// (x0,y0) +/// Устанавливает начало координат в точку (x0,y0) procedure SetCoordinateOrigin(x0,y0: integer); -/// +/// Устанавливает масштаб системы координат procedure SetCoordinateScale(sx,sy: real); -/// +/// Устанавливает поворот системы координат procedure SetCoordinateAngle(a: real); //---------------------------------------- -//// +//// Сервисные подпрограммы //---------------------------------------- -/// , +/// Возвращает прямоугольник, заданный координатами противоположных вершин function Rect(x1,y1,x2,y2: integer): System.Drawing.Rectangle; -/// +/// Возвращает прямоугольник клиентской части главного окна function ClientRectangle: System.Drawing.Rectangle; //------------------------------------------ -//// +//// Рисование графиков функций //------------------------------------------ -/// f [a,b] , x1,y1,x2,y2, +/// Рисует график функции f на отрезке [a,b] в прямоугольнике, задаваемом координатами x1,y1,x2,y2, procedure Draw(f: Func; a,b: real; x1,y1,x2,y2: integer); -/// f [a,b] r +/// Рисует график функции f на отрезке [a,b] в прямоугольнике r procedure Draw(f: Func; a,b: real; r: System.Drawing.Rectangle); -/// f [-5,5] r +/// Рисует график функции f на отрезке [-5,5] в прямоугольнике r procedure Draw(f: Func; r: System.Drawing.Rectangle); -/// f [a,b] +/// Рисует график функции f на отрезке [a,b] на полное графическое окно procedure Draw(f: Func; a,b: real); -/// f [-5,5] +/// Рисует график функции f на отрезке [-5,5] на полное графическое окно procedure Draw(f: Func); //------------------------------------------ -//// +//// Рисование изображений //------------------------------------------ -/// fname x,y +/// Выводит растровое изображение из файла с именем fname в позицию x,y procedure Draw(fname: string; x: integer := 0; y: integer := 0); -/// fname x,y, w h +/// Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его к размеру w на h procedure Draw(fname: string; x,y,w,h: integer); -/// fname x,y, Scale +/// Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его с коэффициентом Scale procedure Draw(fname: string; x,y: integer; Scale: real); -/// . +/// Инициализирует графическое окно. Используется для внутренних целей procedure InitGraphABC; type -/// GraphABC +/// Тип пера GraphABC GraphABCPen = class private _NETPen: System.Drawing.Pen; @@ -626,27 +626,27 @@ type function GetRoundCap: boolean; //2015.01< public - /// .NET + /// Текущее перо .NET property NETPen: System.Drawing.Pen read _NETPen write SetNETPen; - /// + /// Цвет пера property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Ширина пера property Width: integer read GetWidth write SetWidth; - /// + /// Стиль пера property Style: DashStyle read GetStyle write SetStyle; - /// + /// Режим пера property Mode: integer read GetMode write SetMode; - /// X- + /// X-координата текущей позиции пера property X: integer read GetX; - /// Y- + /// Y-координата текущей позиции пера property Y: integer read GetY; //2015.01> - /// + /// Режим закругленных концов линий property RoundCap: boolean read GetRoundCap write SetRoundCap; //2015.01< end; -/// GraphABC +/// Тип кисти GraphABC GraphABCBrush = class private _NETBrush: System.Drawing.Brush; @@ -662,21 +662,21 @@ type procedure SetGradientSecondColor(c: GraphABC.Color); function GetGradientSecondColor: GraphABC.Color; public -/// .NET +/// Текущая кисть .NET property NETBrush: System.Drawing.Brush read _NETBrush write SetNETBrush; -/// +/// Цвет кисти property Color: GraphABC.Color read GetColor write SetColor; -/// +/// Стиль кисти property Style: BrushStyleType read GetStyle write SetStyle; -/// +/// Штриховка кисти property Hatch: HatchStyle read GetHatch write SetHatch; -/// +/// Цвет заднего плана штриховой кисти property HatchBackgroundColor: GraphABC.Color read GetHatchBackgroundColor write SetHatchBackgroundColor; -/// +/// Второй цвет градиентной кисти property GradientSecondColor: GraphABC.Color read GetGradientSecondColor write SetGradientSecondColor; end; -/// GraphABC +/// Тип шрифта GraphABC GraphABCFont = class private _NETFont: System.Drawing.Font; @@ -690,15 +690,15 @@ type procedure SetName(nm: string); function GetName: string; public -/// .NET +/// Текущий шрифт .NET property NETFont: System.Drawing.Font read _NETFont write SetNETFont; - /// + /// Цвет шрифта property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Стиль шрифта property Style: FontStyleType read GetStyle write SetStyle; - /// + /// Размер шрифта в пунктах property Size: integer read GetSize write SetSize; - /// + /// Наименование шрифта property Name: string read GetName write SetName; end; @@ -720,33 +720,33 @@ type function GetMatrix: System.Drawing.Drawing2D.Matrix; public constructor; - /// + /// Устанавливает параметры системы координат procedure SetTransform(x0,y0,angle,sx,sy: real); - /// + /// Устанавливает начало системы координат procedure SetOrigin(x0,y0: integer); - /// + /// Устанавливает масштаб системы координат procedure SetScale(sx,sy: real); - /// + /// Устанавливает масштаб системы координат procedure SetScale(scale: real); - /// ( OY , OX - ) + /// Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо) procedure SetMathematic; - /// ( OY , OX - ) + /// Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо) procedure SetStandard; - /// X- + /// X-координата начала координат относительно левого верхнего угла окна property OriginX: integer read GetOriginX write SetOriginX; - /// Y- + /// Y-координата начала координат относительно левого верхнего угла окна property OriginY: integer read GetOriginY write SetOriginY; - /// + /// Координаты начала координат относительно левого верхнего угла окна property Origin: Point read GetOrigin write SetOrigin; - /// + /// Угол поворота системы координат property Angle: real read GetAngle write SetAngle; - /// X + /// Масштаб системы координат по оси X property ScaleX: real read GetScaleX write SetScaleX; - /// Y + /// Масштаб системы координат по оси Y property ScaleY: real read GetScaleY write SetScaleY; - /// + /// Масштаб системы координат по обоим осям property Scale: real write SetScale; - /// 3x3 + /// Матрица 3x3 преобразований координат property Matrix: System.Drawing.Drawing2D.Matrix read GetMatrix; end; @@ -765,51 +765,51 @@ type procedure SetIsFixedSize(b: boolean); function GetIsFixedSize: boolean; public -/// +/// Отступ графического окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; -/// +/// Отступ графического окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; -/// +/// Ширина клиентской части графического окна в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота клиентской части графического окна в пикселах property Height: integer read GetHeight write SetHeight; -/// +/// Заголовок графического окна property Caption: string read GetCaption write SetCaption; -/// +/// Заголовок графического окна property Title: string read GetCaption write SetCaption; -/// +/// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; -/// +/// Очищает графическое окно белым цветом procedure Clear; -/// c +/// Очищает графическое окно цветом c procedure Clear(c: Color); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetPos(l,t: integer); -/// , +/// Устанавливает положение, размеры и цвет графического окна procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// 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; end; -/// GraphABC +/// Тип рисунка GraphABC Picture = class private bmp,savedbmp: Bitmap; @@ -824,125 +824,125 @@ type procedure SetTransparentColor(c: GraphABC.Color); function GetTransparentColor: GraphABC.Color; public -/// w h +/// Создает рисунок размера w на h пикселей constructor Create(w,h: integer); -/// fname +/// Создает рисунок из файла с именем fname constructor Create(fname: string); -/// r +/// Создает рисунок из прямоугольника r графического окна constructor Create(r: System.Drawing.Rectangle); // Create from screen -/// fname +/// Загружает рисунок из файла с именем fname procedure Load(fname: string); -/// fname +/// Сохраняет рисунок в файл с именем fname procedure Save(fname: string); -/// w h +/// Устанавливает размер рисунка w на h пикселей procedure SetSize(w,h: integer); -/// +/// Ширина рисунка в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота рисунка в пикселах property Height: integer read GetHeight write SetHeight; -/// ; TransparentColor +/// Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor property Transparent: boolean read istransp write SetTransparent; -/// . Transparent := True +/// Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True property TransparentColor: GraphABC.Color read GetTransparentColor write SetTransparentColor; -/// True, p, False . +/// Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным function Intersect(p: Picture): boolean; -/// (x,y) +/// Выводит рисунок в позиции (x,y) procedure Draw(x: integer := 0; y: integer := 0); -/// (x,y) g +/// Выводит рисунок в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; g: Graphics); -/// (x,y), (w,h) +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer); -/// (x,y), (w,h), g +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; g: Graphics); -/// , r, (x,y) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y) g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , r, (x,y), (w,h) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y), (w,h), g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , rotateAngle, (w,h) +/// Выводит рисунок, повернутый на угол rotateAngle, масштабируя его к размеру (w,h) procedure Picture.Draw(x,y: integer; rotateAngle: real; w,h: integer); -/// src p dst +/// Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); -/// src bmp dst +/// Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); -/// +/// Зеркально отображает рисунок относительно горизонтальной оси симметрии procedure FlipHorizontal; -/// +/// Зеркально отображает рисунок относительно вертикальной оси симметрии procedure FlipVertical; -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела (x,y) рисунка function GetPixel(x,y: integer): Color; -/// (x1,y1) (x2,y2) +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Выводит на рисунке окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// (x,y) r +/// Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); -/// +/// Очищает рисунок белым цветом procedure Clear; -/// c +/// Очищает рисунок цветом c procedure Clear(c: Color); end; @@ -961,58 +961,58 @@ type procedure Init; protected function IsInputKey(keyData: Keys): boolean; override; - procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // ! + procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // сами все перерисовываем! public constructor (w,h: integer); end; -/// w h p +/// Создает рисунок размера w на h пикселов и записывает его в переменную p procedure CreatePicture(var p: Picture; w,h: integer); -/// +/// Возвращает окно графического приложения function Window: GraphABCWindow; -/// +/// Возвращает главную форму графического приложения function MainForm: Form; -/// +/// Возвращает графический компонент function GraphABCControl: ABCControl; -/// +/// Возвращает текущее перо function Pen: GraphABCPen; -/// +/// Возвращает текущую кисть function Brush: GraphABCBrush; -/// +/// Возвращает текущий шрифт function Font: GraphABCFont; -/// GraphABC +/// Возвращает систему координат GraphABC function Coordinate: GraphABCCoordinate; function GraphWindowGraphics: Graphics; function GraphBufferGraphics: Graphics; function GraphBufferBitmap: Bitmap; -/// - +/// Устанавливает консольный ввод-вывод procedure SetConsoleIO; -/// - ( ) +/// Устанавливает ввод-вывод через графическое окно (по умолчанию) procedure SetGraphABCIO; var -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseDown: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши OnMouseUp: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 0, , 1, , 2, +/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseMove: procedure (x,y,mousebutton: integer); -/// +/// Событие нажатия клавиши OnKeyDown: procedure (key: integer); -/// +/// Событие отжатия клавиши OnKeyUp: procedure (key: integer); -/// +/// Событие нажатия символьной клавиши OnKeyPress: procedure (ch: char); -/// +/// Событие изменения размера графического окна OnResize: procedure; -/// +/// Событие закрытия графического окна OnClose: procedure; -/// . nil, +/// Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка RedrawProc: procedure; -/// +/// Следует ли рисовать во внеэкранном буфере DrawInBuffer: boolean; ///-- @@ -1025,8 +1025,8 @@ uses GraphABCHelper; const - FILE_NOT_FOUND_MESSAGE = ' {0} '; - BUTTON_ENTER_TEXT = ''; + FILE_NOT_FOUND_MESSAGE = 'Файл {0} не найден'; + BUTTON_ENTER_TEXT = 'Ввести'; type Proc1Integer = procedure(x: integer); @@ -1048,9 +1048,9 @@ type function SetProcessDPIAware(): boolean; external 'user32.dll'; var - // - + // строка-буфер ввода MainThread: Thread; - // - + // строка-буфер ввода readbuffer: string; _Window: GraphABCWindow := new GraphABCWindow; _MainForm: Form; @@ -1119,28 +1119,28 @@ procedure IOGraphABCSystem.write(obj: object); var rem := Window.Width - writecoords.X; if rem = 0 then Result := 0 - else if tw <= rem then // + else if tw <= rem then // строка влазит полностью Result := Length(s) else begin - // ns - + // ns - примерное количество символов до переноса var ns := Round(Length(s)*rem/TextWidth(s)); if ns>Length(s) then ns := Length(s); tw := TextWidth(s.Substring(0,ns)); if tw > rem then while tw > rem do - begin // ns, + begin // начинаем уменьшать ns, пока не влезет ns -= 1; tw := TextWidth(s.Substring(0,ns)); end else if tw = rem then begin - // + // ничего не делать end else begin // tw < rem - // ns + // увеличиваем ns while (ns=1) and (x<=9) then - writeln(' '); - // Odd - , True x - + writeln('Однозначное число'); + // Odd - функция, возвращающая True только если x - нечетно if Odd(x) and (x>=10) and (x<=99) then - writeln(' '); + writeln('Нечетное двузначное число'); if (x=3) or (x=9) or (x=27) or (x=81) then - writeln(' '); + writeln('Степень тройки'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/If4.pas b/TestSuite/formatter_tests/input/If4.pas index ae25cbd92..41008a92a 100644 --- a/TestSuite/formatter_tests/input/If4.pas +++ b/TestSuite/formatter_tests/input/If4.pas @@ -1,18 +1,18 @@ -// +// Вложенные условные операторы var x: integer; begin - writeln(' (1..5): '); + writeln('Введите оценку (1..5): '); readln(x); if (x=1) then - writeln('') + writeln('Единица') else if (x=2) then - writeln('') + writeln('Двойка') else if (x=3) then - writeln('') + writeln('Тройка') else if (x=4) then - writeln('') + writeln('Четверка') else if (x=5) then - writeln('') - else writeln(' ') + writeln('Пятерка') + else writeln('Такой оценки нет') end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/If5.pas b/TestSuite/formatter_tests/input/If5.pas index 8371ce053..074bf783b 100644 --- a/TestSuite/formatter_tests/input/If5.pas +++ b/TestSuite/formatter_tests/input/If5.pas @@ -1,19 +1,19 @@ -// . +// Вложенные условные операторы. Антонимы var s: string; begin - writeln(' (,,,,): '); + writeln('Введите слово из списка (черный,высокий,свет,радость,умный): '); readln(s); - write(': '); - if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else if (s='') then - writeln('') - else writeln(' ') + write('Антоним: '); + if (s='черный') then + writeln('белый') + else if (s='высокий') then + writeln('низкий') + else if (s='свет') then + writeln('тьма') + else if (s='радость') then + writeln('горе') + else if (s='умный') then + writeln('глупый') + else writeln('Такого слова в списке нет') end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/IndexProperties.pas b/TestSuite/formatter_tests/input/IndexProperties.pas index 5937f73cd..7b35e9e54 100644 --- a/TestSuite/formatter_tests/input/IndexProperties.pas +++ b/TestSuite/formatter_tests/input/IndexProperties.pas @@ -1,4 +1,4 @@ -// . +// Индексные свойства. Массив цветных квадратов uses GraphABC; const @@ -11,17 +11,17 @@ type VisualArray = class private a: array of Color; - procedure SetItem(i: integer; x: Color); // , i- + procedure SetItem(i: integer; x: Color); // Процедура, устанавливающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); a[i] := x; Draw(i); end; - function GetItem(i: integer): Color; // , i- + function GetItem(i: integer): Color; // Функция, возвращающая цвет i-того квадрата begin if (i<0) or (i>=a.Length) then - raise new System.ArgumentException(' : '+IntToStr(i)); + raise new System.ArgumentException('Выход за границы изменения индекса: '+IntToStr(i)); Result := a[i]; end; public @@ -32,29 +32,29 @@ type a[i] := clWhite; Draw; end; - /// i- + /// Рисует i-тый квадрат procedure Draw(i: integer); begin Brush.Color := a[i]; Rectangle(sz+sz*i,sz,sz+sz*(i+1)+1,sz+sz); end; - /// + /// Рисует массив цветных квадратов procedure Draw; begin for var i:=0 to a.Length-1 do Draw(i); end; - /// + /// Индексное свойство по умолчанию property Item[i: integer]: Color read GetItem write SetItem; default; end; var arr: VisualArray; begin - Window.Title := ' '; + Window.Title := 'Иллюстрация индексных свойств'; arr := new VisualArray(dim); SetWindowSize(sz*(dim+2),3*sz); - arr[0] := clGreen; // arr.Items[0] = arr[0] Items + arr[0] := clGreen; // arr.Items[0] = arr[0] поскольку свойство Items является свойством по умолчанию Sleep(delay); arr[1] := clBlack; Sleep(delay); diff --git a/TestSuite/formatter_tests/input/Inheritance1.pas b/TestSuite/formatter_tests/input/Inheritance1.pas index 2521b8227..94c4e7ccd 100644 --- a/TestSuite/formatter_tests/input/Inheritance1.pas +++ b/TestSuite/formatter_tests/input/Inheritance1.pas @@ -1,4 +1,4 @@ -// . +// Наследование. Полиморфизм и виртуальные функции type Person = class private @@ -9,10 +9,10 @@ type begin name := n; age := a; end; - procedure Print; virtual; // . - + procedure Print; virtual; // Виртуальная функция. Переопределяется в классах-потомках begin var s := GetType.ToString; - write(': ',Copy(s,pos('.',s)+1,Length(s)):7,' : ',name,' : ',age); + write('Тип: ',Copy(s,pos('.',s)+1,Length(s)):7,' Имя: ',name,' Возраст: ',age); end; procedure Println; begin @@ -21,19 +21,19 @@ type end; end; - Pupil = class(Person) // Pupil - Person + Pupil = class(Person) // Pupil - наследник Person private clas: integer; public constructor (n: string; a,c: integer); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора clas := c; end; procedure Print; override; begin inherited Print; - write(' : ',clas); + write(' Класс: ',clas); end; end; @@ -43,23 +43,23 @@ type public constructor (n: string; a: integer; p: string); begin - inherited Create(n,a); // + inherited Create(n,a); // Вызов унаследованного конструктора predm := p; end; procedure Print; override; begin inherited Print; - write(' : ',predm); + write(' Предмет: ',predm); end; end; -var a: array of Person := new Person[4]; // - . +var a: array of Person := new Person[4]; // Полиморфный контейнер - контейнер объектов базового класса. Может содержать объекты производных классов begin - a[0] := new Pupil('',11,5); - a[1] := new Teacher(' ',30,''); - a[2] := new Person('',65); - a[3] := new Pupil('',12,6); + a[0] := new Pupil('Вова',11,5); + a[1] := new Teacher('Марья Ивановна',30,'Информатика'); + a[2] := new Person('Иванов',65); + a[3] := new Pupil('Вася',12,6); for var i:=0 to a.Length-1 do a[i].Println; diff --git a/TestSuite/formatter_tests/input/IniFile.pas b/TestSuite/formatter_tests/input/IniFile.pas index 870ba8c4b..91a4d6e7e 100644 --- a/TestSuite/formatter_tests/input/IniFile.pas +++ b/TestSuite/formatter_tests/input/IniFile.pas @@ -53,7 +53,7 @@ begin if s[1]='[' then // Section begin section := Copy(s,2,Length(s)-2); - // + // есть ли такая секция if IndexOfSection(Section)<0 then sl.Add(Section,new SortedList); end @@ -72,7 +72,7 @@ begin end; end; except - // + // погасить все исключения end; close(f); end; diff --git a/TestSuite/formatter_tests/input/InitRecords.pas b/TestSuite/formatter_tests/input/InitRecords.pas index 4706c7177..5befeb806 100644 --- a/TestSuite/formatter_tests/input/InitRecords.pas +++ b/TestSuite/formatter_tests/input/InitRecords.pas @@ -1,8 +1,8 @@ -// +// Инициализаторы полей записи type Frac = record num: integer := 0; - denom := 1; // - denom: integer + denom := 1; // автоопределеине типа - denom: integer end; var diff --git a/TestSuite/formatter_tests/input/Interf.pas b/TestSuite/formatter_tests/input/Interf.pas index 15453ab15..2825c5b58 100644 --- a/TestSuite/formatter_tests/input/Interf.pas +++ b/TestSuite/formatter_tests/input/Interf.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация использования интерфейсов type IShape = interface procedure Draw; diff --git a/TestSuite/formatter_tests/input/Interf1.pas b/TestSuite/formatter_tests/input/Interf1.pas index 9643367e4..d96590acc 100644 --- a/TestSuite/formatter_tests/input/Interf1.pas +++ b/TestSuite/formatter_tests/input/Interf1.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -48,14 +48,14 @@ var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); &Array.Sort(a,new SortByName); - WriteArray(' : ',a); + WriteArray('Сортировка по имени: ',a); &Array.Sort(a,new SortByAge); - WriteArray(' : ',a); + WriteArray('Сортировка по возрасту: ',a); end. diff --git a/TestSuite/formatter_tests/input/Interf2.pas b/TestSuite/formatter_tests/input/Interf2.pas index 96a630dfd..8dc63b9f7 100644 --- a/TestSuite/formatter_tests/input/Interf2.pas +++ b/TestSuite/formatter_tests/input/Interf2.pas @@ -1,4 +1,4 @@ -// . IComparer +// Интерфейсы. Интерфейс IComparer uses System,System.Collections; type @@ -16,7 +16,7 @@ type end; function ToString: string; override; begin - Result := Format(': {0,9} : {1} : {2} : {3}',name,age,course,group); + Result := Format('Имя: {0,9} Возраст: {1} Курс: {2} Группа: {3}',name,age,course,group); end; end; @@ -30,19 +30,19 @@ end; function IsKozlov(s: Student): boolean; begin - Result := s.name = '' + Result := s.name = 'Козлов' end; var a: array of Student; begin SetLength(a,5); - a[0] := new Student('',18,2,3); - a[1] := new Student('',19,3,10); - a[2] := new Student('',22,5,1); - a[3] := new Student('',17,1,2); - a[4] := new Student('',25,4,8); - WriteArray(' :',a); + a[0] := new Student('Иванова',18,2,3); + a[1] := new Student('Козлов',19,3,10); + a[2] := new Student('Сидорова',22,5,1); + a[3] := new Student('Крикунов',17,1,2); + a[4] := new Student('Лихачев',25,4,8); + WriteArray('Исходный массив:',a); - writeln(' = ',&Array.FindIndex(a,IsKozlov)); + writeln('Индекс Козлова = ',&Array.FindIndex(a,IsKozlov)); end. diff --git a/TestSuite/formatter_tests/input/KillThem.pas b/TestSuite/formatter_tests/input/KillThem.pas index 70ed78b38..0ed3a4842 100644 --- a/TestSuite/formatter_tests/input/KillThem.pas +++ b/TestSuite/formatter_tests/input/KillThem.pas @@ -6,34 +6,34 @@ const var kLeftKey,kRightKey: boolean; kSpaceKey: integer; - /// + /// Игрок Player: RectangleABC; - /// + /// Таймер движения врагов t: Timer; - /// + /// Флаг конца игры EndOfGame: boolean; - /// + /// Количество неигровых объектов StaticObjectsCount: integer; - /// + /// Счетчик выигрышей Wins: integer; - /// + /// Счетчик проигрышей Falls: integer; - /// + /// Информационная строка InfoString: RectangleABC; - /// + /// Сообщение в начале игры NewGame: RoundRectABC; type KeysType = (kLeft,kRight); - /// + /// Класс пули Pulya = class(CircleABC) public constructor Create(x,y: integer); procedure Move; override; end; - /// + /// Класс врага Enemy = class(RectangleABC) public constructor Create(x,y,w: integer); @@ -53,7 +53,7 @@ begin if Top<0 then Visible := False; for var j:=StaticObjectsCount to Objects.Count-1 do - // + // При столкновении пуля и объект становятся невидимыми if (Objects[j]<>Self) and Intersect(Objects[j]) then begin Objects[j].Visible := False; @@ -85,7 +85,7 @@ begin EndOfGame := True; end; -/// +/// Количество врагов function NumberOfEnemies: integer; begin Result := 0; @@ -94,7 +94,7 @@ begin Result += 1; end; -/// +/// Создание игрока и врагов procedure CreateObjects; begin Player := new RectangleABC(280,WindowHeight-30,100,20,clPlayer); @@ -106,21 +106,21 @@ begin end; end; -/// +/// Разрушение игрока и врагов procedure DestroyObjects; begin for var i:=Objects.Count-1 downto StaticObjectsCount do Objects[i].Destroy; end; -/// +/// Перемещение врагов procedure MoveObjects; begin for var i:=StaticObjectsCount+1 to Objects.Count-1 do Objects[i].Move; end; -/// +/// Удаление уничтоженных объектов procedure DestroyKilledObjects; begin for var i:=ObjectsCount-1 downto StaticObjectsCount+1 do @@ -128,7 +128,7 @@ begin Objects[i].Destroy; end; -/// +/// Обработчик нажатия клавиши procedure KeyDown(Key: integer); begin case Key of @@ -138,7 +138,7 @@ vk_Space: if kSpaceKey=2 then kSpaceKey := 1; end; end; -/// +/// Обработчик отжатия клавиши procedure KeyUp(Key: integer); begin case Key of @@ -148,16 +148,16 @@ vk_Space: kSpaceKey := 2; end; end; -/// +/// Изменение информационной строки procedure ChangeInfoString; begin - InfoString.Text := ': '+IntToStr(NumberOfEnemies)+' : '+IntToStr(Wins)+' : '+IntToStr(Falls); + InfoString.Text := 'Врагов: '+IntToStr(NumberOfEnemies)+' Побед: '+IntToStr(Wins)+' Поражений: '+IntToStr(Falls); end; -/// +/// Обработчик нажатия символьной клавиши procedure KeyPress(Key: char); begin - if (Key in ['G','','g','']) and EndOfGame then + if (Key in ['G','П','g','п']) and EndOfGame then begin NewGame.Visible := False; EndOfGame := False; @@ -169,14 +169,14 @@ begin end; end; -/// +/// Обработчик отжатия мыши procedure MouseUp(x,y,mb: integer); begin if NewGame.PTInside(x,y) then KeyPress('G'); end; -/// +/// Обработчик таймера procedure TimerProc; begin if kLeftKey and (Player.Left>0) then @@ -193,7 +193,7 @@ begin RedrawObjects; ChangeInfoString; var n := NumberOfEnemies; - // , + // Страховка от случая, когда процедура таймера выполняется одновременно в нескольких потоках if n=0 then EndOfGame := True; if EndOfGame then @@ -211,7 +211,7 @@ begin end; begin - Window.Title := ''; + Window.Title := 'Стрелялка'; Window.IsFixedSize := True; ClearWindow(clBlack); LockDrawingObjects; @@ -224,7 +224,7 @@ begin var zz := 100; NewGame := new RoundRectABC(zz,200,400,200,30,Color.Violet); NewGame.Center := Window.Center; - NewGame.Text := 'G - '; + NewGame.Text := 'G - Новая игра'; StaticObjectsCount := Objects.Count; ChangeInfoString; RedrawObjects; diff --git a/TestSuite/formatter_tests/input/Knapsack.pas b/TestSuite/formatter_tests/input/Knapsack.pas index 49bd0dfd7..53993e66c 100644 --- a/TestSuite/formatter_tests/input/Knapsack.pas +++ b/TestSuite/formatter_tests/input/Knapsack.pas @@ -1,5 +1,5 @@ -// . B . -// +// Задача о ранце. В массиве B заданы веса предметов. +// Выдать все варианты полной комплектации ранца частью этих предметов const Sz=100; type IntArr = array [1..Sz] of integer; @@ -22,15 +22,15 @@ var if space=0 then PrintArr(Subset,ns) else if (space<0) or (i>nb) then - exit // - else // B + exit // отсечение + else // продолжение перебора всех подмножеств множества B begin - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать не взять i-тый элемент ns += 1; Subset[ns] := B[i]; space := space - B[i]; - TrySolve0(i+1); // i- + TrySolve0(i+1); // попробовать взять i-тый элемент space := space + B[i]; ns -= 1; end; @@ -43,8 +43,8 @@ end; procedure FillArr(var B: IntArr; var n: integer); begin - n:=5; // - B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // + n:=5; // количество предметов + B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // веса предметов end; var diff --git a/TestSuite/formatter_tests/input/LibForHaskell.pas b/TestSuite/formatter_tests/input/LibForHaskell.pas index 2061609d3..e8bc30458 100644 --- a/TestSuite/formatter_tests/input/LibForHaskell.pas +++ b/TestSuite/formatter_tests/input/LibForHaskell.pas @@ -824,7 +824,7 @@ end; if ((types.Count=2) and not(types.Contains('integer') and types.Contains('real'))) or (types.Count>2) then begin - writeln(' '); + writeln('элементы списка имеют разный тип'); exit; end; end; @@ -893,7 +893,7 @@ end; if ((types.Count=2) and not(types.Contains('integer') and types.Contains('real'))) or (types.Count>2) then begin - writeln(' '); + writeln('элементы списка имеют разный тип'); exit; end; /////////////////////////////////// @@ -979,7 +979,7 @@ end; types.Add(last.type_name); if ((types.Count=2) and not(types.Contains('integer') and types.Contains('real'))) then begin - writeln(' '); + writeln('элементы списка имеют разный тип'); exit; end; /////////////////////////////////// diff --git a/TestSuite/formatter_tests/input/Life.pas b/TestSuite/formatter_tests/input/Life.pas index 913cbbf2d..f829bafe2 100644 --- a/TestSuite/formatter_tests/input/Life.pas +++ b/TestSuite/formatter_tests/input/Life.pas @@ -1,23 +1,23 @@ -// "" -// +// Игра "Жизнь" на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; const -/// +/// Ширина клетки w = 4; -/// +/// Количество клеток по ширине m = 300; -/// +/// Количество клеток по высоте n = 220; -/// +/// Отступ поля от левой границы окна x0 = 1; -/// +/// Отступ поля от верхней границы окна y0 = 21; mm = m + 1; nn = n + 1; -/// +/// Количество клеток сетки по горизонтали mk = 15; -/// +/// Количество клеток сетки по вертикали nk = 10; var @@ -28,7 +28,7 @@ var gen: integer; hn,hm: integer; -/// +/// Нарисовать ячейку procedure DrawCell(i,j: integer); begin DrawInBuffer := False; @@ -37,7 +37,7 @@ begin DrawInBuffer := True; end; -/// +/// Стереть ячейку procedure ClearCell(i,j: integer); begin DrawInBuffer := False; @@ -46,7 +46,7 @@ begin DrawInBuffer := True; end; -/// +/// Нарисовать все изменившиеся ячейки procedure DrawConfiguration; begin for var i:=1 to n do @@ -59,7 +59,7 @@ begin end; end; -/// +/// Нарисовать все ячейки procedure DrawConfigurationFull; begin for var i:=1 to n do @@ -68,7 +68,7 @@ begin else ClearCell(i,j); end; -/// +/// Нарисовать поле procedure DrawField; begin Pen.Color := clLightGray; @@ -88,7 +88,7 @@ begin end; end; -/// +/// Увеличить массив соседей для данной клетки procedure IncSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -106,7 +106,7 @@ begin SosediB[i2,j2] += 1; end; -/// +/// Уменьшить массив соседей для данной клетки procedure DecSosedi(i,j: integer); var i1,i2,j1,j2: integer; begin @@ -124,7 +124,7 @@ begin SosediB[i2,j2] -= 1; end; -/// (i,j) +/// Поставить ячейку в клетку (i,j) procedure SetCell(i,j: integer); begin if b[i,j]=0 then @@ -136,7 +136,7 @@ begin CountCells += 1; end; -/// (i,j) +/// Убрать ячейку из клетки (i,j) procedure UnSetCell(i,j: integer); begin if b[i,j]=1 then @@ -148,7 +148,7 @@ begin CountCells -= 1; end; -/// +/// Инициализировать массивы и конфигурацию поля procedure Init; var xc := n div 2; @@ -173,7 +173,7 @@ begin SetCell(xc+1,yc+1); end; -/// +/// Обработать ячейку procedure ProcessCell(i,j: integer); begin case SosediA[i,j] of @@ -197,7 +197,7 @@ begin end; {case} end; -/// +/// Перейти к следующему поколению procedure NextGen; var ifirst,jfirst,ilast,jlast: integer; begin @@ -257,33 +257,33 @@ begin end; end; -/// +/// Перерисовка содержимого окна procedure LifeRedrawProc; begin Redraw; DrawConfigurationFull; end; -/// +/// Вывод номера поколения и количества ячеек procedure DrawInfo; begin Brush.Color := clWhite; - TextOut(25,0,' '+IntToStr(gen)); - TextOut(WindowWidth - 130,0,': '+IntToStr(CountCells)+' '); + TextOut(25,0,'Поколение '+IntToStr(gen)); + TextOut(WindowWidth - 130,0,'Жителей: '+IntToStr(CountCells)+' '); end; begin SetConsoleIO; if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm := m div mk; hn := n div nk; SetWindowSize(x0+m*w,y0+n*w); CenterWindow; - Window.Title := ' ""'; + Window.Title := 'Игра "Жизнь"'; Window.IsFixedSize := True; Font.Name := 'Arial'; Font.Size := 10; diff --git a/TestSuite/formatter_tests/input/LinkedList.pas b/TestSuite/formatter_tests/input/LinkedList.pas index 303712765..dd1474e39 100644 --- a/TestSuite/formatter_tests/input/LinkedList.pas +++ b/TestSuite/formatter_tests/input/LinkedList.pas @@ -1,4 +1,4 @@ -// LinkedList - - +// Использование LinkedList - двусвязного списка стандартной библиотеки - и его итератора uses System.Collections,System.Collections.Generic; procedure print(l: ICollection); diff --git a/TestSuite/formatter_tests/input/MailSend.pas b/TestSuite/formatter_tests/input/MailSend.pas index 2834203fa..666b6e7a2 100644 --- a/TestSuite/formatter_tests/input/MailSend.pas +++ b/TestSuite/formatter_tests/input/MailSend.pas @@ -1,4 +1,4 @@ -// SMTP- SMTPServerName toReceiver! +// Исправьте имя SMTP-сервера SMTPServerName и адрес получателя toReceiver! uses System.Net.Mail; const diff --git a/TestSuite/formatter_tests/input/Mandelbrot.pas b/TestSuite/formatter_tests/input/Mandelbrot.pas index a132ee23b..1a3a48c7a 100644 --- a/TestSuite/formatter_tests/input/Mandelbrot.pas +++ b/TestSuite/formatter_tests/input/Mandelbrot.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Множество Мандельброта +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -14,7 +14,7 @@ const dy = 300; begin - Window.Title := ': '; + Window.Title := 'Фракталы: множество Мандельброта'; SetWindowSize(600,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -37,6 +37,6 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSuite/formatter_tests/input/Matches.pas b/TestSuite/formatter_tests/input/Matches.pas index 29aac08f7..0ea31f7ed 100644 --- a/TestSuite/formatter_tests/input/Matches.pas +++ b/TestSuite/formatter_tests/input/Matches.pas @@ -1,12 +1,12 @@ -// "" +// Игра "Спички" const InitialCount=15; var - /// + /// Текущее количество спичек Count: integer; - /// , + /// Количество спичек, которое берет игрок Num: integer; - /// + /// Номер текущего игрока Player: integer; begin @@ -18,12 +18,12 @@ begin begin var Correct: boolean; repeat - write(' . ',Count,' . '); - write(' ? '); + write('Ваш ход. На столе ',Count,' спичек. '); + write('Сколько спичек Вы берете? '); readln(Num); Correct := (Num>=1) and (Num<=3) and (Num<=Count); if not Correct then - writeln('! !'); + writeln('Неверно! Повторите ввод!'); until Correct; end else @@ -31,7 +31,7 @@ begin Num := Random(1,3); if Num>Count then Num := Count; - writeln(' . ',Num,' '); + writeln('Мой ход. Я взял ',Num,' спичек'); end; Count -= Num; if Player=1 then @@ -40,6 +40,6 @@ begin until Count=0; if Player=1 then - writeln(' !') - else writeln(' !'); + writeln('Вы победили!') + else writeln('Вы проиграли!'); end. diff --git a/TestSuite/formatter_tests/input/Matr1.pas b/TestSuite/formatter_tests/input/Matr1.pas index 31cb1448c..9033bd4d8 100644 --- a/TestSuite/formatter_tests/input/Matr1.pas +++ b/TestSuite/formatter_tests/input/Matr1.pas @@ -1,4 +1,4 @@ -// . goto +// Поиск значения в случайной матрице. Использование оператора goto const sz = 10; m = 4; @@ -11,12 +11,12 @@ label 1; var matr: Matrix; begin - // m x n + // Заполнение матрицы m x n случайными числами for var i := 1 to m do for var j := 1 to n do matr[i,j] := Random(100); - // + // Вывод матрицы for var i := 1 to m do begin for var j := 1 to n do @@ -24,17 +24,17 @@ begin writeln; end; - // 5? + // Есть ли в матрице элемент 5? var found5 := False; for var i := 1 to m do for var j := 1 to n do if matr[i,j]=5 then begin found5 := True; - goto 1; // ! + goto 1; // Ай как нехорошо! Но это лучший способ выхода из двух вложенных циклов сразу end; 1: if found5 then - writeln(' 5 ') - else writeln(' 5 ') + writeln('Элемент 5 найден') + else writeln('Элемент 5 не найден') end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Matr2.pas b/TestSuite/formatter_tests/input/Matr2.pas index b0161cdfd..42df846a3 100644 --- a/TestSuite/formatter_tests/input/Matr2.pas +++ b/TestSuite/formatter_tests/input/Matr2.pas @@ -1,4 +1,4 @@ -// +// Матрица как динамический массив массивов type Matrix = array of array of integer; function CreateMatrix(m,n: integer): Matrix; diff --git a/TestSuite/formatter_tests/input/MazeGen.pas b/TestSuite/formatter_tests/input/MazeGen.pas index 11642afc9..9f0fea7bf 100644 --- a/TestSuite/formatter_tests/input/MazeGen.pas +++ b/TestSuite/formatter_tests/input/MazeGen.pas @@ -1,10 +1,10 @@ -// +// Программа генерации случайных лабиринтов uses GraphABC; const - szw = 70; // + szw = 70; // размер лабиринта szh = 50; - cellsz = 10; // + cellsz = 10; // размер ячейки type point = record @@ -32,10 +32,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -45,28 +45,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n := Random(todonum); x := todo[n].x; y := todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat dd:=Random (4); until not ((maze[x + dx[dd]][y + dy[dd]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl dd) or 32); maze[x + dx[dd]][y + dy[dd]] := maze[x + dx[dd]][y + dy[dd]] and not (1 shl (dd xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -77,8 +77,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -86,19 +86,19 @@ begin for var x:=1 to szw-2 do for var y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz); end; end; begin - Window.Title := ' '; + Window.Title := 'Генерация лабиринта'; SetWindowSize(szw*cellsz,szh*cellsz); Init; Draw; diff --git a/TestSuite/formatter_tests/input/Mosaic.pas b/TestSuite/formatter_tests/input/Mosaic.pas index 02efa3c44..4aee71d02 100644 --- a/TestSuite/formatter_tests/input/Mosaic.pas +++ b/TestSuite/formatter_tests/input/Mosaic.pas @@ -1,4 +1,4 @@ -// . +// Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const @@ -13,10 +13,10 @@ const var a: array [0..n,0..m] of Color; begin - Window.Title := ''; + Window.Title := 'Мозаика'; Window.SetSize(800,600); - // + // Заполнение массива случайными цветами for var i:=0 to n-1 do for var j:=0 to m-1 do begin diff --git a/TestSuite/formatter_tests/input/MouseDraw.pas b/TestSuite/formatter_tests/input/MouseDraw.pas index 6d4ff2ad7..db17bcf29 100644 --- a/TestSuite/formatter_tests/input/MouseDraw.pas +++ b/TestSuite/formatter_tests/input/MouseDraw.pas @@ -1,4 +1,4 @@ -// . Windows.Forms, +// Рисование мышью на форме. Иллюстрация Windows.Forms, событий {$apptype windows} {$reference 'System.Windows.Forms.dll'} {$reference 'System.Drawing.dll'} @@ -12,15 +12,15 @@ type MyForm = class(Form) private g: Graphics; - // + // Предыдущие координаты мыши x,y: integer; public constructor; begin Size := new System.Drawing.Size(640,480); StartPosition := FormStartPosition.CenterScreen; - Text := ' '; - // + Text := 'Рисование мышью на форме'; + // Привязка обработчиков к событиям MouseDown += OnMouseDown; MouseMove += OnMouseMove; Resize += OnResize; diff --git a/TestSuite/formatter_tests/input/MouseEvents.pas b/TestSuite/formatter_tests/input/MouseEvents.pas index 064766eae..f48183e0a 100644 --- a/TestSuite/formatter_tests/input/MouseEvents.pas +++ b/TestSuite/formatter_tests/input/MouseEvents.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация обработки событий мыши uses GraphABC; procedure MouseDown(x,y,mb: integer); @@ -12,7 +12,7 @@ begin end; begin - // + // Привязка обработчиков к событиям OnMouseDown := MouseDown; OnMouseMove := MouseMove end. diff --git a/TestSuite/formatter_tests/input/MultMatrix.pas b/TestSuite/formatter_tests/input/MultMatrix.pas index bcb549ef8..13796ffbf 100644 --- a/TestSuite/formatter_tests/input/MultMatrix.pas +++ b/TestSuite/formatter_tests/input/MultMatrix.pas @@ -30,8 +30,8 @@ begin var b := Arrays.CreateRandomRealMatrix(n,n); var c := new real[n,n]; ParallelMult(a,b,c,n); - writeln(' : ',Milliseconds,' '); + writeln('Параллельное перемножение матриц: ',Milliseconds,' миллисекунд'); var d := Milliseconds; Mult(a,b,c,n); - writeln(' : ',Milliseconds-d,' '); + writeln('Последовательное перемножение матриц: ',Milliseconds-d,' миллисекунд'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Mutual Lock.pas b/TestSuite/formatter_tests/input/Mutual Lock.pas index d04513699..03e18485a 100644 --- a/TestSuite/formatter_tests/input/Mutual Lock.pas +++ b/TestSuite/formatter_tests/input/Mutual Lock.pas @@ -1,4 +1,4 @@ -// +// Демонстрация использования критических секций и возможных взаимоблокировок begin {$omp parallel sections} begin diff --git a/TestSuite/formatter_tests/input/NewLife.pas b/TestSuite/formatter_tests/input/NewLife.pas index d432c1649..f4bc91131 100644 --- a/TestSuite/formatter_tests/input/NewLife.pas +++ b/TestSuite/formatter_tests/input/NewLife.pas @@ -1,5 +1,5 @@ -// -// +// Игра Жизнь на торе +// Оптимизация хешированием по равномерной сетке uses Utils,GraphABC; @@ -303,10 +303,10 @@ begin AssignArray(b,nn+1,mm+1); AssignArray(sosedia,nn+1,mm+1); AssignArray(sosedib,nn+1,mm+1); - SetWindowCaption(' ""'); + SetWindowCaption('Игра "Жизнь"'); if (m mod mk<>0) or (n mod nk<>0) then begin - writeln(' . '); + writeln('Размер кластера не согласован с размером поля. Программа завершена'); exit end; hm:=m div mk; @@ -335,8 +335,8 @@ begin DrawInBuffer := True; SetBrushColor(ClearColor); SetFontColor(FillColor); - TextOut(25, 0,': '+IntToStr(gen)); - TextOut(765,0,': '+IntToStr(count)+' '); + TextOut(25, 0,'Поколение: '+IntToStr(gen)); + TextOut(765,0,'Жителей: '+IntToStr(count)+' '); if gen mod 1000 = 0 then begin mil1:=Milliseconds; writeln(gen,' ',(mil1-mil)/1000); diff --git a/TestSuite/formatter_tests/input/Oberon00System.pas b/TestSuite/formatter_tests/input/Oberon00System.pas index ea3fbe35c..90db0e939 100644 --- a/TestSuite/formatter_tests/input/Oberon00System.pas +++ b/TestSuite/formatter_tests/input/Oberon00System.pas @@ -1,27 +1,27 @@ // (c) Mikst, Juliet 2010 -/// Oberon +/// Системный модуль для языка Oberon unit Oberon00System; interface type - /// (TRUE | FALSE) + /// Логический тип (TRUE | FALSE) BOOLEAN = System.boolean; - /// + /// Целое число INTEGER = System.Int32; - /// + /// Короткое целое число SHORTINT = System.byte; - /// + /// Длинное целое число LONGINT = System.int64; - /// + /// Вещественное число REAL = System.double; - /// + /// Длинное вещественное число LONGREAL = System.double; - /// + /// Символ CHAR = System.char; - /// + /// Строка STRING = System.string; - /// + /// Множество целых iset = array of integer; procedure Print(o: object); @@ -38,7 +38,7 @@ begin Console.Write(o); end; -/// +/// Вывести значение procedure Println(o: object); begin Console.WriteLine(o); diff --git a/TestSuite/formatter_tests/input/OperatorOverloading.pas b/TestSuite/formatter_tests/input/OperatorOverloading.pas index e6071b4bf..0fe1ee658 100644 --- a/TestSuite/formatter_tests/input/OperatorOverloading.pas +++ b/TestSuite/formatter_tests/input/OperatorOverloading.pas @@ -1,4 +1,4 @@ -// +// Перегрузка операций type Frac = record private diff --git a/TestSuite/formatter_tests/input/Overload.pas b/TestSuite/formatter_tests/input/Overload.pas index 09e4321ce..f3b5eaef1 100644 --- a/TestSuite/formatter_tests/input/Overload.pas +++ b/TestSuite/formatter_tests/input/Overload.pas @@ -1,4 +1,4 @@ -// +// Перегрузка имен подпрограмм procedure proc(i: integer); begin writeln('integer'); diff --git a/TestSuite/formatter_tests/input/PABCSystem.pas b/TestSuite/formatter_tests/input/PABCSystem.pas index 7bd230228..68de8ec09 100644 --- a/TestSuite/formatter_tests/input/PABCSystem.pas +++ b/TestSuite/formatter_tests/input/PABCSystem.pas @@ -1,7 +1,7 @@ // Copyright (c) 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) -/// +/// Стандартный модуль /// !! System unit unit PABCSystem; @@ -28,50 +28,50 @@ uses System; const - /// shortint + /// Максимальное значение типа shortint MaxShortInt = shortint.MaxValue; - /// byte + /// Максимальное значение типа byte MaxByte = byte.MaxValue; - /// smallint + /// Максимальное значение типа smallint MaxSmallInt = smallint.MaxValue; - /// word + /// Максимальное значение типа word MaxWord = word.MaxValue; - /// longword + /// Максимальное значение типа longword MaxLongWord = longword.MaxValue; - /// int64 + /// Максимальное значение типа int64 MaxInt64 = int64.MaxValue; - /// uint64 + /// Максимальное значение типа uint64 MaxUInt64 = uint64.MaxValue; - /// double + /// Максимальное значение типа double MaxDouble = real.MaxValue; - /// double + /// Минимальное положительное значение типа double MinDouble = real.Epsilon; - /// real + /// Максимальное значение типа real MaxReal = real.MaxValue; - /// real + /// Минимальное положительное значение типа real MinReal = real.Epsilon; - /// single + /// Максимальное значение типа single MaxSingle = single.MaxValue; - /// single + /// Минимальное положительное значение типа single MinSingle = single.Epsilon; - /// integer + /// Максимальное значение типа integer MaxInt = integer.MaxValue; - /// Pi + /// Константа Pi /// !! Pi constant Pi = 3.141592653589793; - /// E + /// Константа E /// !! E constant E = 2.718281828459045; END_OF_LINE_SYMBOL = #10; - /// + /// Константа перехода на новую строку /// !! The newline string defined for this environment. NewLine = System.Environment.NewLine; function RunTimeSizeOf(t: System.Type): integer; -/// , +/// Содержит аргумены командой строки, с которыми была запущена программа var CommandLineArgs: array of string; @@ -79,16 +79,16 @@ var var __CONFIG__: Dictionary := new Dictionary; -// , +//Маркер того, что это системный модуль ///-- const __IS_SYSTEM_MODULE = true; type - /// + /// Базовый тип объектов object = System.Object; - /// + /// Базовый тип исключений exception = System.Exception; double = System.Double; @@ -97,127 +97,127 @@ type cardinal = System.UInt32; - /// 128- + /// Представляет 128-битное вещественное число /// !! Represents a decimal number decimal = System.Decimal; - /// + /// Представляет произвольно большое целое число BigInteger = System.Numerics.BigInteger; - /// + /// Представляет кортеж Tuple = System.Tuple; - /// + /// Представляет динамический массив List = System.Collections.Generic.List; - /// IComparer + /// Представляет базовый класс для реализации интерфейса IComparer Comparer = System.Collections.Generic.Comparer; - /// + /// Представляет множество значений HashSet = System.Collections.Generic.HashSet; - /// ( -), - + /// Представляет ассоциативный массив (набор пар Ключ-Значение), реализованный на базе хеш-таблицы Dictionary = System.Collections.Generic.Dictionary; - /// - + /// Представляет пару Ключ-Значение для ассоциативного массива KeyValuePair = System.Collections.Generic.KeyValuePair; - /// + /// Представляет двусвязный список LinkedList = System.Collections.Generic.LinkedList; - /// + /// Представляет узел двусвязного списка LinkedListNode = System.Collections.Generic.LinkedListNode; - /// - , " - " + /// Представляет очередь - набор элементов, реализованных по принципу "первый вошел-первый вышел" Queue = System.Collections.Generic.Queue; - /// , + /// Представляет ассоциативный массив, реализованный на базе бинарного дерева поиска SortedDictionary = System.Collections.Generic.SortedDictionary; - /// ( -), + /// Представляет ассоциативный массив (набор пар ключ-значение), реализованный на базе динамического массива пар SortedList = System.Collections.Generic.SortedList; SortedSet = System.Collections.Generic.SortedSet; - /// - , " - " + /// Представляет стек - набор элементов, реализованных по принципу "последний вошел-первый вышел" Stack = System.Collections.Generic.Stack; - /// , + /// Представляет интерфейс, предоставляющий перечислитель для перебора элементов коллекции IEnumerable = System.Collections.Generic.IEnumerable; - /// + /// Представляет интерфейс для перебора элементов коллекции IEnumerator = System.Collections.Generic.IEnumerator; - /// + /// Представляет интерфейс для сравнения двух элементов IComparer = System.Collections.Generic.IComparer; - /// + /// Представляет изменяемую строку символов StringBuilder = System.Text.StringBuilder; - /// + /// Тип кодировки символов Encoding = System.Text.Encoding; - /// + /// Представляет действие без параметров Action0 = System.Action; - /// + /// Представляет действие с одним параметром Action = System.Action; - /// + /// Представляет действие с двумя параметрами Action2 = System.Action; - /// + /// Представляет действие с тремя параметрами Action3 = System.Action; - /// + /// Представляет функцию без параметров Func0 = System.Func; - /// + /// Представляет функцию с одним параметром Func = System.Func; - /// + /// Представляет функцию с двумя параметрами Func2 = System.Func; - /// + /// Представляет функцию с тремя параметрами Func3 = System.Func; - /// , + /// Представляет функцию с одним параметром целого типа, возвращающую целое IntFunc = Func; - /// , + /// Представляет функцию с одним параметром вещественного типа, возвращающую вещественное RealFunc = Func; - /// , + /// Представляет функцию с одним параметром строкового типа, возвращающую строковое StringFunc = Func; - /// , boolean + /// Представляет функцию с одним параметром, возвращающую boolean Predicate = System.Predicate; - /// , boolean + /// Представляет функцию с двумя параметрами, возвращающую boolean Predicate2 = System.Predicate; - /// , boolean + /// Представляет функцию с тремя параметрами, возвращающую boolean Predicate3 = System.Predicate; - /// + /// Представляет регулярное выражение Regex = System.Text.RegularExpressions.Regex; - /// + /// Представляет результаты из отдельного совпадения регулярного выражения Match = System.Text.RegularExpressions.Match; - /// , Regex.Replace + /// Представляет метод, вызываемый при обнаружении совпадения в Regex.Replace MatchEvaluator = System.Text.RegularExpressions.MatchEvaluator; - /// + /// Представляет набор успешных совпадений регулярного выражения MatchCollection = System.Text.RegularExpressions.MatchCollection; - /// + /// Представляет параметры регулярного выражения RegexOptions = System.Text.RegularExpressions.RegexOptions; - /// Regex.Match + /// Представляет результаты из одной группы при выполнении Regex.Match RegexGroup = System.Text.RegularExpressions.Group; - /// Regex.Match + /// Представляет результаты из набора групп при выполнении Regex.Match RegexGroupCollection = System.Text.RegularExpressions.GroupCollection; //------------------------------------------------------------------------------ @@ -245,62 +245,62 @@ type PSingle = ^single;//single //16 PReal = ^real;//double - PDouble = ^double;//double //, , + PDouble = ^double;//double //ошибка, не сохранится, надо исправить //------------------------------------------------------------------------------ ShortString = string[255]; - /// + /// Тип текстового файла Text = class private fi: FileInfo; sr: StreamReader; sw: StreamWriter; public - /// 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; - /// 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; - /// + /// Записывает в текстовый файл значения procedure Write(params o: array of Object); - /// + /// Записывает в текстовый файл значения и переходит на следующую строку procedure Writeln(params o: array of Object); - /// True, + /// Возвращает True, если достигнут конец файла function Eof: boolean; - /// True, + /// Возвращает True, если достигнут конец строки function Eoln: boolean; - /// + /// Закрывает файл procedure Close; - /// , True, + /// Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла function SeekEof: boolean; - /// , True, + /// Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в файле function SeekEoln: boolean; - /// + /// Записывает содержимое буфера файла на диск procedure Flush; - /// + /// Удаляет файл procedure Erase; - /// , newname. + /// Переименовывает файл, давая ему имя newname. procedure Rename(newname: string); - /// + /// Возвращает имя файла function Name: string; - /// + /// Возвращает полное имя файла function FullName: string; - /// + /// Возвращает в виде строки содержимое файла от текущего положения до конца function ReadToEnd: string; end; @@ -309,7 +309,7 @@ type RangeException = class(SystemException) end; CommandLineArgumentOutOfRangeException = class(SystemException) end; - // + // Вспомогательный тип для диапазонного типа ///-- Diapason = record low, high: integer; @@ -324,7 +324,7 @@ type public function GetHashCode(obj: System.Object): integer; end; - // + // Вспомогательный тип для множества ///-- TypedSet = class (System.Collections.IEnumerable) private @@ -372,10 +372,10 @@ function Union(s1, s2: TypedSet): TypedSet; ///-- function Subtract(s1, s2: TypedSet): TypedSet; ///- Include(var s : set of T; el : T) -/// el s +///Добавляет елемент el во множество s procedure Include(var s: TypedSet; el: object); ///- Exclude(var s : set of T; el : T) -/// el s +///Удаляет элемент el из множества s procedure Exclude(var s: TypedSet; el: object); ///-- function Intersect(s1, s2: TypedSet): TypedSet; @@ -435,18 +435,18 @@ type br: BinaryReader; bw: BinaryWriter; public - /// + /// Закрывает файл procedure Close; - /// , + /// Усекает двоичный файл, отбрасывая все элементы с позиции файлового указателя procedure Truncate; - /// True, + /// Возвращает True, если достигнут конец файла function Eof: boolean; - /// + /// Удаляет файл procedure Erase; - /// , newname. + /// Переименовывает файл, давая ему имя newname. procedure Rename(newname: string); ///- write(f: file; a,b,...) - /// a,b,... + /// Выводит значения a,b,... в двоичный файл procedure Write(params vals: array of object); end; @@ -462,11 +462,11 @@ type constructor Create(ElementType: System.Type); constructor Create(ElementType: System.Type; offs: integer; params offsets: array of integer); function ToString: string; override; - /// + /// Возвращает текущую позицию файлового указателя в типизированном файле function FilePos: int64; - /// + /// Возвращает количество элементов в типизированном файле function FileSize: int64; - /// n + /// Устанавливает текущую позицию файлового указателя в типизированном файле на элемент с номером n procedure Seek(n: int64); end; @@ -474,15 +474,15 @@ type BinaryFile = sealed class(AbstractBinaryFile) public function ToString: string; override; - /// + /// Возвращает текущую позицию файлового указателя в бестиповом файле function FilePos: int64; - /// + /// Возвращает количество байт в бестиповом файле function FileSize: int64; - /// n + /// Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n procedure Seek(n: int64); end; - /// / + /// Интерфейс подсистемы ввода/вывода IOSystem = interface function peek: integer; function read_symbol: char; @@ -506,11 +506,11 @@ type end; IOStandardSystem = class(IOSystem) - state := 0; // 0 - char, 1 - char - sym: integer; // 1 Peek + state := 0; // 0 - нет символа в буфере char, 1 - есть символ в буфере char + sym: integer; // буфер в 1 символ для моделирования Peek в консоли public - function peek: integer; virtual; // state sym - function read_symbol: char; virtual; // state sym + function peek: integer; virtual; // использует state и sym + function read_symbol: char; virtual; // использует state и sym procedure read(var x: integer); virtual; procedure read(var x: real); virtual; procedure read(var x: char); virtual; @@ -542,7 +542,7 @@ type function GetEnumerator: System.Collections.IEnumerator; end; - /// , generic- + ///Базовый класс для исключений, бросаемых при создании инстанции generic-типа BadGenericInstanceParameterException = class(Exception) protected InstanceType: System.Type; @@ -550,19 +550,19 @@ type constructor Create(ActualParameterType: System.Type); end; - /// + ///Бросается если тип непригоден для указателей CanNotUseTypeForPointersException = class(BadGenericInstanceParameterException) public function ToString: string; override; end; - /// + ///Бросается если тип непригоден для типизированных файлов CanNotUseTypeForTypedFilesException = class(BadGenericInstanceParameterException) public function ToString: string; override; end; - /// + ///Бросается если тип непригоден для бинарных файлов CanNotUseTypeForFilesException = class(BadGenericInstanceParameterException) public function ToString: string; override; @@ -582,7 +582,7 @@ function GetResourceStream(ResourceFileName: string): Stream; // read - readln // ----------------------------------------------------- ///- read(a,b,...) -/// a,b,... +/// Вводит значения a,b,... с клавиатуры procedure Read; ///-- procedure Read(var x: integer); @@ -611,48 +611,48 @@ procedure Read(var x: single); ///-- procedure Read(var x: boolean); -/// 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; -/// 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; -/// integer, +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры function ReadInteger(prompt: string): integer; -/// real, +/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры function ReadReal(prompt: string): real; -/// char, +/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры function ReadChar(prompt: string): char; -/// string, +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры function ReadString(prompt: string): string; -/// boolean, +/// Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры function ReadBoolean(prompt: string): boolean; -/// integer, , +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnInteger(prompt: string): integer; -/// real, , +/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnReal(prompt: string): real; -/// char, , +/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnChar(prompt: string): char; -/// string, , +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnString(prompt: string): string; -/// boolean, , +/// Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnBoolean(prompt: string): boolean; @@ -662,11 +662,11 @@ procedure ReadShortString(var s: string; n: integer); procedure ReadShortStringFromFile(f: Text; var s: string; n: integer); ///- readln(a,b,...) -/// a,b,... +/// Вводит значения a,b,... с клавиатуры и осуществляет переход на следующую строку procedure Readln; ///- read(f,a,b,...) -/// a,b,... f +/// Вводит значения a,b,... из файла f procedure Read(f: Text); ///-- procedure Read(f: Text; var x: integer); @@ -696,36 +696,36 @@ procedure Read(f: Text; var x: single); procedure Read(f: Text; var x: boolean); ///- readln(f: Text; a,b,...) -/// a,b,... f +/// Вводит значения a,b,... из текстового файла f и осуществляет переход на следующую строку procedure Readln(f: Text); ///-- procedure Readln(f: Text; var x: string); -/// integer, f +/// Возвращает значение типа integer, введенное из текстового файла f function ReadInteger(f: Text): integer; -/// real, f +/// Возвращает значение типа real, введенное из текстового файла f function ReadReal(f: Text): real; -/// char, f +/// Возвращает значение типа char, введенное из текстового файла f function ReadChar(f: Text): char; -/// string, f +/// Возвращает значение типа string, введенное из текстового файла f function ReadString(f: Text): string; -/// boolean, f +/// Возвращает значение типа boolean, введенное из текстового файла f function ReadBoolean(f: Text): boolean; -/// integer, f, +/// Возвращает значение типа integer, введенное из текстового файла f, и переходит на следующую строку function ReadlnInteger(f: Text): integer; -/// real, f, +/// Возвращает значение типа real, введенное из текстового файла f, и переходит на следующую строку function ReadlnReal(f: Text): real; -/// char, f, +/// Возвращает значение типа char, введенное из текстового файла f, и переходит на следующую строку function ReadlnChar(f: Text): char; -/// string, f, +/// Возвращает значение типа string, введенное из текстового файла f, и переходит на следующую строку function ReadlnString(f: Text): string; -/// boolean, f, +/// Возвращает значение типа boolean, введенное из текстового файла f, и переходит на следующую строку function ReadlnBoolean(f: Text): boolean; -/// True, +/// Возвращает True, если достигнут конец строки function Eoln: boolean; -/// True, +/// Возвращает True, если достигнут конец файла function Eof: boolean; ///-- @@ -746,7 +746,7 @@ type // write - writeln // ----------------------------------------------------- ///- write(a,b,...) -/// a,b,... +/// Выводит значения a,b,... на экран procedure write; ///-- procedure write(obj: object); @@ -756,7 +756,7 @@ procedure write(obj1, obj2: object); procedure write(params args: array of object); ///- writeln(a,b,...) -/// a,b,... +/// Выводит значения a,b,... на экран и осуществляет переход на новую строку ///!!- writeln(a,b,...) /// Writes a,b,... to standart output stream and appends newline procedure writeln; @@ -770,7 +770,7 @@ procedure writeln(obj1, obj2: object); procedure writeln(params args: array of object); ///- write(f: Text; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в текстовый файл f procedure write(f: Text); ///-- procedure write(f: Text; val: object); @@ -778,161 +778,161 @@ procedure write(f: Text; val: object); procedure write(f: Text; params args: array of object); ///- writeln(f: Text; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в текстовый файл f и осуществляет переход на новую строку procedure writeln(f: Text); ///-- procedure writeln(f: Text; val: object); ///-- procedure writeln(f: Text; params args: array of object); -/// args formatstr +/// Выводит значения args согласно форматной строке formatstr procedure WriteFormat(formatstr: string; params args: array of object); -/// args formatstr +/// Выводит значения args согласно форматной строке formatstr и осуществляет переход на новую строку procedure WritelnFormat(formatstr: string; params args: array of object); -/// args f formatstr +/// Выводит значения args в текстовый файл f согласно форматной строке formatstr procedure WriteFormat(f: Text; formatstr: string; params args: array of object); -/// args f formatstr -/// +/// Выводит значения args в текстовый файл f согласно форматной строке formatstr +///и осуществляет переход на новую строку procedure WritelnFormat(f: Text; formatstr: string; params args: array of object); -/// s +/// Выводит значения s на экран procedure Print(s: string); -/// args , +/// Выводит значения args на экран, выводя после каждого значения пробел procedure Print(params args: array of object); -/// args , , +/// Выводит значения args на экран, выводя после каждого значения пробел, и переходит на новую строчку procedure Println(params args: array of object); -/// args f, +/// Выводит значения args в текстовый файл f, выводя после каждого значения пробел procedure Print(f: Text; params args: array of object); -/// args f, , +/// Выводит значения args в текстовый файл f, выводя после каждого значения пробел, и переходит на новую строчку procedure Println(f: Text; params args: array of object); // ----------------------------------------------------- // Text files // ----------------------------------------------------- -/// f name +/// Связывает файловую переменную f с именем файла name procedure Assign(f: Text; name: string); -/// f name +/// Связывает файловую переменную f с именем файла name procedure AssignFile(f: Text; name: string); -/// f +/// Закрывает файл f procedure Close(f: Text); -/// f +/// Закрывает файл f procedure CloseFile(f: Text); -/// f +/// Открывает текстовый файл f на чтение procedure Reset(f: Text); -/// f name +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл на чтение procedure Reset(f: Text; name: string); -/// f , . , +/// Открывает текстовый файл f на запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется procedure Rewrite(f: Text); -/// f name f , +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл f на запись, при этом обнуляя его содержимое procedure Rewrite(f: Text; name: string); -/// f +/// Открывает текстовый f файл на дополнение procedure Append(f: Text); -/// f name +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл на дополнение procedure Append(f: Text; name: string); -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на чтение function OpenRead(fname: string): Text; -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на запись function OpenWrite(fname: string): Text; -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на дополнение function OpenAppend(fname: string): Text; -/// True, f +/// Возвращает True, если достигнут конец файла f ///!! Returns True if the file-pointer has reached the end of the file function Eof(f: Text): boolean; -/// True, f +/// Возвращает True, если достигнут конец строки в файле f function Eoln(f: Text): boolean; -/// , True, f +/// Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла f function SeekEof(f: Text): boolean; -/// , True, f +/// Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в файле f function SeekEoln(f: Text): boolean; -/// +/// Записывает содержимое буфера файла на диск procedure Flush(f: Text); -/// , f +/// Удаляет файл, связанный с файловой переменной f procedure Erase(f: Text); -/// , f, newname. +/// Переименовывает файл, связаный с файловой переменной f, давая ему имя newname. procedure Rename(f: Text; newname: string); ///-- procedure TextFileInit(var f: Text); -/// +/// Считывает строки из файла и превращает их в последовательность строк function ReadLines(path: string): sequence of string; -/// en +/// Считывает строки из файла с кодировкой en и превращает их в последовательность строк function ReadLines(path: string; en: Encoding): sequence of string; -/// +/// Считывает строки из файла в массив строк function ReadAllLines(path: string): array of string; -/// en +/// Считывает строки из файла с кодировкой en в массив строк function ReadAllLines(path: string; en: Encoding): array of string; -/// +/// Считывает содержимое файла в строку function ReadAllText(path: string): string; -/// en +/// Считывает содержимое файла с кодировкой en в строку function ReadAllText(path: string; en: Encoding): string; -/// , +/// Создает новый файл, записывает в него строки из последовательности procedure WriteLines(path: string; ss: sequence of string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него строки из последовательности procedure WriteLines(path: string; ss: sequence of string; en: Encoding); -/// , +/// Создает новый файл, записывает в него строки из массива procedure WriteAllLines(path: string; ss: array of string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него строки из массива procedure WriteAllLines(path: string; ss: array of string; en: Encoding); -/// , +/// Создает новый файл, записывает в него содержимое строки procedure WriteAllText(path: string; s: string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него содержимое строки procedure WriteAllText(path: string; s: string; en: Encoding); -/// , +/// Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска function EnumerateFiles(path: string; searchPattern: string := '*.*'): sequence of string; -/// , , +/// Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска, включая подкаталоги function EnumerateAllFiles(path: string; searchPattern: string := '*.*'): sequence of string; -/// +/// Возвращает последовательность имен каталогов по заданному пути function EnumerateDirectories(path: string): sequence of string; -/// , +/// Возвращает последовательность имен каталогов по заданному пути, включая подкаталоги function EnumerateAllDirectories(path: string): sequence of string; // ----------------------------------------------------- // Abstract binary files // ----------------------------------------------------- ///- Assign(f: file of T; name: string) -/// f name +/// Связывает файловую переменную f с именем файла name procedure Assign(f: AbstractBinaryFile; name: string); ///- AssignFile(f: file of T; name: string) -/// f name +/// Связывает файловую переменную f с именем файла name procedure AssignFile(f: AbstractBinaryFile; name: string); ///- Close(f: file of T) -/// f +/// Закрывает файл f procedure Close(f: AbstractBinaryFile); ///- CloseFile(f: file of T) -/// f +/// Закрывает файл f procedure CloseFile(f: AbstractBinaryFile); ///- Reset(f: file of T) -/// f +/// Открывает двоичный файл f на чтение и запись procedure Reset(f: AbstractBinaryFile); ///- Reset(f: file of T; name: string) -/// f name f +/// Связывает файловую переменную f с именем файла name и открывает двоичный файл f на чтение и запись procedure Reset(f: AbstractBinaryFile; name: string); ///- Rewrite(f: file of T) -/// f , . , +/// Открывает двоичный файл f на чтение и запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется procedure Rewrite(f: AbstractBinaryFile); ///- Rewrite(f: file of T) -/// f name , +/// Связывает файловую переменную f с именем файла name и открывает двоичный файл на чтение и запись, при этом обнуляя его содержимое procedure Rewrite(f: AbstractBinaryFile; name: string); ///- Truncate(f: file of T) -/// f, +/// Усекает двоичный файл f, отбрасывая все элементы с позиции файлового указателя procedure Truncate(f: AbstractBinaryFile); ///- Eof(f: file of T) -/// True, f +/// Возвращает True, если достигнут конец файла f function Eof(f: AbstractBinaryFile): boolean; ///- Erase(f: file of T) -/// , f +/// Удаляет файл, связанный с файловой переменной f procedure Erase(f: AbstractBinaryFile); ///- Rename(f: file of T; newname: string) -/// , f, newname. +/// Переименовывает файл, связаный с файловой переменной f, давая ему имя newname. procedure Rename(f: AbstractBinaryFile; newname: string); ///- write(f: file of T; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в типизированный файл f //procedure Write(f: AbstractBinaryFile; val: object; arr: boolean); ///- write(f: file; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в нетипизированный файл f procedure Write(f: AbstractBinaryFile; params vals: array of object); ///-- procedure Writeln(f: AbstractBinaryFile); @@ -945,13 +945,13 @@ procedure Writeln(f: AbstractBinaryFile; params vals: array of object); // Typed files // ----------------------------------------------------- ///- FilePos(f : file of T): int64 -/// f +/// Возвращает текущую позицию файлового указателя в типизированном файле f function FilePos(f: TypedFile): int64; ///- FileSize(f : file of T): int64 -/// f +/// Возвращает количество элементов в типизированном файле f function FileSize(f: TypedFile): int64; ///- Seek(f : file of T; n : int64) -/// f n +/// Устанавливает текущую позицию файлового указателя в типизированном файле f на элемент с номером n procedure Seek(f: TypedFile; n: int64); ///-- procedure TypedFileInit(var f: TypedFile; ElementType: System.Type); @@ -966,13 +966,13 @@ function TypedFileRead(f: TypedFile): object; // Binary files // ----------------------------------------------------- ///- FilePos(f : file): int64 -/// f +/// Возвращает текущую позицию файлового указателя в нетипизированном файле f function FilePos(f: BinaryFile): int64; ///- FileSize(f : file): int64 -/// f +/// Возвращает количество байт в нетипизированном файле f function FileSize(f: BinaryFile): int64; ///- Seek(f : file; n : int64) -/// f n +/// Устанавливает текущую позицию файлового указателя в нетипизированном файле f на байт с номером n procedure Seek(f: BinaryFile; n: int64); ///-- procedure BinaryFileInit(var f: BinaryFile); @@ -982,287 +982,287 @@ function BinaryFileRead(var f: BinaryFile; ElementType: System.Type): object; // ----------------------------------------------------- // Operating System routines // ----------------------------------------------------- -/// +/// Возвращает количество параметров командной строки function ParamCount: integer; -/// i- +/// Возвращает i-тый параметр командной строки function ParamStr(i: integer): string; -/// +/// Возвращает текущий каталог function GetDir: string; -/// +/// Меняет текущий каталог procedure ChDir(s: string); -/// +/// Создает каталог procedure MkDir(s: string); -/// +/// Удаляет каталог procedure RmDir(s: string); -/// . True, +/// Создает каталог. Возвращает True, если каталог успешно создан function CreateDir(s: string): boolean; -/// . , False +/// Удаляет файл. Если файл не может быть удален, то возвращает False function DeleteFile(s: string): boolean; -/// +/// Возвращает текущий каталог function GetCurrentDir: string; -/// . True, +/// Удаляет каталог. Возвращает True, если каталог успешно удален function RemoveDir(s: string): boolean; -/// name, newname. True, +/// Переименовывает файл name, давая ему новое имя newname. Возвращает True, если файл успешно переименован function RenameFile(name, newname: string): boolean; -/// . True, +/// Устанавивает текущий каталог. Возвращает True, если каталог успешно удален function SetCurrentDir(s: string): boolean; -/// name newext +/// Изменяет расширение файла с именем name на newext function ChangeFileNameExtension(name, newext: string): string; -/// True, name +/// Возвращает True, если файл с именем name существует function FileExists(name: string): boolean; -/// +/// Выводит в специальном окне стек вызовов подпрограмм если условие не выполняется procedure Assert(cond: boolean); -/// mes +/// Выводит в специальном окне диагностическое сообщение mes и стек вызовов подпрограмм если условие не выполняется procedure Assert(cond: boolean; mes: string); -/// diskname +/// Возвращает свободное место в байтах на диске с именем diskname function DiskFree(diskname: string): int64; -/// diskname +/// Возвращает размер в байтах на диске с именем diskname function DiskSize(diskname: string): int64; -/// disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +/// Возвращает свободное место в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. function DiskFree(disk: integer): int64; -/// disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +/// Возвращает размер в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. function DiskSize(disk: integer): int64; -/// +/// Возвращает количество миллисекунд с момента начала работы программы function Milliseconds: integer; -/// Milliseconds MillisecondsDelta +/// Возвращает количество миллисекунд с момента последнего вызова Milliseconds или MillisecondsDelta function MillisecondsDelta: integer; -/// +/// Завершает работу программы procedure Halt; -/// , exitCode +/// Завершает работу программы, возвращая код ошибки exitCode procedure Halt(exitCode: integer); -/// Pascal ABC. +/// Для совместимости с Pascal ABC. Не выполняет никаких действий procedure cls; -// , . (SS) +// Непонятно, что делать после такой паузы. Убрал (SS) //procedure Pause; -/// ms +/// Делает паузу на ms миллисекунд procedure Sleep(ms: integer); -/// .exe- +/// Возващает имя запущенного .exe-файла function GetEXEFileName: string; -/// +/// Преобразует указатель к строковому представлению function PointerToString(p: pointer): string; -/// filename +/// Запускает программу или документ с именем filename procedure Exec(filename: string); -/// filename args +/// Запускает программу или документ с именем filename и параметрами командной строки args procedure Exec(filename: string; args: string); -/// filename +/// Запускает программу или документ с именем filename procedure Execute(filename: string); -/// filename args +/// Запускает программу или документ с именем filename и параметрами командной строки args procedure Execute(filename: string; args: string); // ----------------------------------------------------- // File name routines // ----------------------------------------------------- -/// fname +/// Выделяет имя файла из полного имени файла fname function ExtractFileName(fname: string): string; -/// fname +/// Выделяет расширение из полного имени файла fname function ExtractFileExt(fname: string): string; -/// fname +/// Выделяет путь из полного имени файла fname function ExtractFilePath(fname: string): string; -/// fname +/// Выделяет имя диска и путь из полного имени файла fname function ExtractFileDir(fname: string): string; -/// fname +/// Выделяет путь из полного имени файла fname function ExtractFileDrive(fname: string): string; -/// fname +/// Возвращает полное имя файла fname function ExpandFileName(fname: string): string; // ----------------------------------------------------- // Mathematical routines // ----------------------------------------------------- -/// x +/// Возвращает знак числа x function Sign(x: shortint): integer; -/// x +/// Возвращает знак числа x function Sign(x: smallint): integer; -/// x +/// Возвращает знак числа x function Sign(x: integer): integer; -/// x +/// Возвращает знак числа x function Sign(x: BigInteger): integer; -/// x +/// Возвращает знак числа x function Sign(x: longword): integer; -/// x +/// Возвращает знак числа x function Sign(x: int64): integer; -/// x +/// Возвращает знак числа x function Sign(x: uint64): integer; -/// x +/// Возвращает знак числа x function Sign(x: real): integer; -/// x +/// Возвращает модуль числа x function Abs(x: integer): integer; -/// x +/// Возвращает модуль числа x function Abs(x: BigInteger): BigInteger; -/// x +/// Возвращает модуль числа x function Abs(x: longword): longword; -/// x +/// Возвращает модуль числа x function Abs(x: int64): int64; -/// x +/// Возвращает модуль числа x function Abs(x: uint64): uint64; -/// x +/// Возвращает модуль числа x function Abs(x: real): real; -/// x +/// Возвращает синус числа x function Sin(x: real): real; -/// x +/// Возвращает гиперболический синус числа x function Sinh(x: real): real; -/// x +/// Возвращает косинус числа x /// !! Returns the cosine of number x function Cos(x: real): real; -/// x +/// Возвращает гиперболический косинус числа x function Cosh(x: real): real; -/// x +/// Возвращает тангенс числа x function Tan(x: real): real; -/// x +/// Возвращает гиперболический тангенс числа x function Tanh(x: real): real; -/// x +/// Возвращает арксинус числа x function ArcSin(x: real): real; -/// x +/// Возвращает арккосинус числа x function ArcCos(x: real): real; -/// x +/// Возвращает арктангенс числа x function ArcTan(x: real): real; -/// x +/// Возвращает экспоненту числа x function Exp(x: real): real; -/// x +/// Возвращает натуральный логарифм числа x function Ln(x: real): real; -/// x 2 +/// Возвращает логарифм числа x по основанию 2 function Log2(x: real): real; -/// x +/// Возвращает десятичный логарифм числа x function Log10(x: real): real; -/// x base +/// Возвращает логарифм числа x по основанию base function LogN(base, x: real): real; -/// x +/// Возвращает квадратный корень числа x function Sqrt(x: real): real; -/// x +/// Возвращает квадрат числа x function Sqr(x: integer): int64; -/// x +/// Возвращает квадрат числа x function Sqr(x: BigInteger): BigInteger; -/// x +/// Возвращает квадрат числа x function Sqr(x: longword): uint64; -/// x +/// Возвращает квадрат числа x function Sqr(x: int64): int64; -/// x +/// Возвращает квадрат числа x function Sqr(x: uint64): uint64; -/// x +/// Возвращает квадрат числа x function Sqr(x: real): real; -/// x y +/// Возвращает x в степени y function Power(x, y: real): real; -/// x y +/// Возвращает x в степени y function Power(x, y: integer): real; -/// x y +/// Возвращает x в степени y function Power(x: BigInteger; y: integer): BigInteger; -/// x, +/// Возвращает x, округленное до ближайшего целого function Round(x: real): integer; -/// x +/// Возвращает целую часть числа x function Trunc(x: real): integer; -/// x +/// Возвращает целую часть числа x function Int(x: real): real; -/// x +/// Возвращает дробную часть числа x function Frac(x: real): real; -/// <= x +/// Возвращает наибольшее целое <= x function Floor(x: real): integer; -/// >= x +/// Возвращает наименьшее целое >= x function Ceil(x: real): integer; -/// +/// Переводит радианы в градусы function RadToDeg(x: real): real; -/// +/// Переводит градусы в радианы function DegToRad(x: real): real; -/// +/// Инициализирует датчик псевдослучайных чисел procedure Randomize; -/// , seed. seed +/// Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности procedure Randomize(seed: integer); -/// 0 maxValue-1 +/// Возвращает случайное целое в диапазоне от 0 до maxValue-1 function Random(maxValue: integer): integer; -/// a b +/// Возвращает случайное целое в диапазоне от a до b function Random(a, b: integer): integer; -/// [0..1) +/// Возвращает случайное вещественное в диапазоне [0..1) function Random: real; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: byte): byte; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: shortint): shortint; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: smallint): smallint; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: word): word; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: integer): integer; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: BigInteger): BigInteger; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: longword): longword; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: int64): int64; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: uint64): uint64; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: real): real; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: byte): byte; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: shortint): shortint; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: word): word; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: smallint): smallint; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: integer): integer; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: BigInteger): BigInteger; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: longword): longword; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: int64): int64; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: uint64): uint64; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: real): real; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: integer): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: BigInteger): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: longword): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: int64): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: uint64): boolean; // ----------------------------------------------------- // Char and String manipulation // ----------------------------------------------------- -/// Windows +/// Преобразует код в символ в кодировке Windows function Chr(a: byte): char; -/// Windows +/// Преобразует символ в код в кодировке Windows function Ord(a: char): byte; -/// a +/// Возвращает порядковый номер значения a function Ord(a: integer): integer; -/// a +/// Возвращает порядковый номер значения a function Ord(a: longword): longword; -/// a +/// Возвращает порядковый номер значения a function Ord(a: int64): int64; -/// a +/// Возвращает порядковый номер значения a function Ord(a: uint64): uint64; -/// a +/// Возвращает порядковый номер значения a function Ord(a: boolean): integer; -/// Unicode +/// Преобразует код в символ в кодировке Unicode function ChrUnicode(a: word): char; -/// Unicode +/// Преобразует символ в код в кодировке Unicode function OrdUnicode(a: char): word; -/// +/// Преобразует символ в верхний регистр function UpperCase(ch: char): char; -/// +/// Преобразует символ в нижний регистр function LowerCase(ch: char): char; -/// +/// Преобразует символ в верхний регистр function UpCase(ch: char): char; -/// +/// Преобразует символ в нижний регистр function LowCase(ch: char): char; -/// i s +/// Преобразует целое значение i к строковому представлению и записывает результат в s procedure Str(i: integer; var s: string); ///-- procedure Str(i: longword; var s: string); @@ -1270,133 +1270,133 @@ procedure Str(i: longword; var s: string); procedure Str(i: int64; var s: string); ///-- procedure Str(i: uint64; var s: string); -/// r s +/// Преобразует вещественное значение r к строковому представлению и записывает результат в s procedure Str(r: real; var s: string); -/// r s +/// Преобразует вещественное значение r к строковому представлению и записывает результат в s procedure Str(r: single; var s: string); ///-- procedure Str(s1: string; var s: string); -/// subs s. , 0 +/// Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0 function Pos(subs, s: string): integer; -/// subs s from. , 0 +/// Возвращает позицию подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0 function PosEx(subs, s: string; from: integer := 1): integer; -/// +/// Возвращает длину строки function Length(s: string): integer; -/// s n +/// Устанавливает длину строки s равной n procedure SetLength(var s: string; n: integer); ///-- procedure SetLengthForShortString(var s: string; n, sz: integer); -/// source s index +/// Вставляет подстроку source в строку s с позиции index procedure Insert(source: string; var s: string; index: integer); ///-- procedure InsertInShortString(source: string; var s: string; index, n: integer); -/// s count index +/// Удаляет из строки s count символов с позиции index procedure Delete(var s: string; index, count: integer); -/// s count index +/// Возвращает подстроку строки s длины count с позиции index function Copy(s: string; index, count: integer): string; ///-Concat(s1,s2,...): string -/// , s1,s2,... +/// Возвращает строку, являющуюся результатом слияния строк s1,s2,... function Concat(params strs: array of string): string; -/// , s1 s2 +/// Возвращает строку, являющуюся результатом слияния строк s1 и s2 function Concat(s1, s2: string): string; -/// +/// Возвращает строку в нижнем регистре function LowerCase(s: string): string; -/// +/// Возвращает строку в верхнем регистре function UpperCase(s: string): string; -/// , count ch +/// Возвращает строку, состоящую из count символов ch function StringOfChar(ch: char; count: integer): string; -/// +/// Возвращает инвертированную строку function ReverseString(s: string): string; -/// . < 0 s1 0 s1>s2 = 0 s1=s2 +/// Сравнивает строки. Возвращает значение < 0 если s1 0 если s1>s2 и = 0 если s1=s2 function CompareStr(s1, s2: string): integer; -/// count s +/// Возвращает первые count символов строки s function LeftStr(s: string; count: integer): string; -/// count s +/// Возвращает последние count символов строки s function RightStr(s: string; count: integer): string; -/// +/// Возвращает строку с удаленными начальными и конечными пробелами function Trim(s: string): string; -/// +/// Возвращает строку с удаленными начальными пробелами function TrimLeft(s: string): string; -/// +/// Возвращает строку с удаленными конечными пробелами function TrimRight(s: string): string; -/// +/// Преобразует строковое представление целого числа к числовому значению function StrToInt(s: string): integer; -/// +/// Преобразует строковое представление целого числа к числовому значению function StrToInt64(s: string): int64; -/// +/// Преобразует строковое представление вещественного числа к числовому значению function StrToFloat(s: string): real; -/// s value. False +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToInt(s: string; var value: integer): boolean; -/// s value. False +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToInt64(s: string; var value: int64): boolean; -/// s value. False +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToFloat(s: string; var value: real): boolean; -/// s value. False +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToFloat(s: string; var value: single): boolean; -/// +/// Считывает целое из строки function ReadIntegerFromString(s: string; var from: integer): integer; -/// +/// Считывает вещественное из строки function ReadRealFromString(s: string; var from: integer): real; -/// +/// Считывает из строки последовательность символов до пробельного символа function ReadWordFromString(s: string; var from: integer): string; -/// True False +/// Возвращает True если достигнут конец строки или в строке остались только пробельные символы и False в противном случае function StringIsEmpty(s: string; var from: integer): boolean; -/// . True False +/// Считывает целое из строки. Возвращает True если считывание удачно и False в противном случае function TryReadIntegerFromString(s: string; var from: integer; var res: integer): boolean; -/// . True False +/// Считывает вещественное из строки. Возвращает True если считывание удачно и False в противном случае function TryReadRealFromString(s: string; var from: integer; var res: real): boolean; -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: integer; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: shortint; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: smallint; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: int64; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: byte; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: word; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: longword; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: uint64; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: real; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: single; var err: integer); -/// +/// Преобразует целое число к строковому представлению function IntToStr(a: integer): string; -/// +/// Преобразует целое число к строковому представлению function IntToStr(a: int64): string; -/// +/// Преобразует вещественное число к строковому представлению function FloatToStr(a: real): string; -/// , fmtstr pars +/// Возвращает отформатированную строку, построенную по форматной строке fmtstr и списку форматиуемых параметров pars function Format(fmtstr: string; params pars: array of object): string; // ----------------------------------------------------- // Common Routines // ----------------------------------------------------- -/// i 1 +/// Увеличивает значение переменной i на 1 procedure Inc(var i: integer); -/// i n +/// Увеличивает значение переменной i на n procedure Inc(var i: integer; n: integer); -/// i 1 +/// Уменьшает значение переменной i на 1 procedure Dec(var i: integer); -/// i n +/// Уменьшает значение переменной i на n procedure Dec(var i: integer; n: integer); -/// c 1 +/// Увеличивает код символа c на 1 procedure Inc(var c: char); -/// c n +/// Увеличивает код символа c на n procedure Inc(var c: char; n: integer); -/// c 1 +/// Уменьшает код символа c на 1 procedure Dec(var c: char); -/// c n +/// Уменьшает код символа c на n procedure Dec(var c: char; n: integer); ///-- procedure Inc(var b: byte); @@ -1411,48 +1411,48 @@ procedure Dec(var f: boolean); //------------------------------------------------------------------------------ //PRED-SUCC -/// x +/// Возвращает следующее за x значение function succ(x: integer): integer; -/// x +/// Возвращает следующее за x значение function succ(x: boolean): boolean; -/// x +/// Возвращает следующее за x значение function succ(x: byte): byte; -/// x +/// Возвращает следующее за x значение function succ(x: shortint): shortint; -/// x +/// Возвращает следующее за x значение function succ(x: smallint): smallint; -/// x +/// Возвращает следующее за x значение function succ(x: word): word; -/// x +/// Возвращает следующее за x значение function succ(x: longword): longword; -/// x +/// Возвращает следующее за x значение function succ(x: int64): int64; -/// x +/// Возвращает следующее за x значение function succ(x: uint64): uint64; -/// x +/// Возвращает следующее за x значение function succ(x: char): char; -/// x +/// Возвращает предшествующее x значение function pred(x: boolean): boolean; -/// x +/// Возвращает предшествующее x значение function pred(x: byte): byte; -/// x +/// Возвращает предшествующее x значение function pred(x: shortint): shortint; -/// x +/// Возвращает предшествующее x значение function pred(x: smallint): smallint; -/// x +/// Возвращает предшествующее x значение function pred(x: word): word; -/// x +/// Возвращает предшествующее x значение function pred(x: integer): integer; -/// x +/// Возвращает предшествующее x значение function pred(x: longword): longword; -/// x +/// Возвращает предшествующее x значение function pred(x: int64): int64; -/// x +/// Возвращает предшествующее x значение function pred(x: uint64): uint64; -/// x +/// Возвращает предшествующее x значение function pred(x: char): char; -/// +/// Меняет местами значения двух переменных procedure Swap(var a, b: T); // ----------------------------------------------------- @@ -1462,19 +1462,19 @@ procedure Swap(var a, b: T); function Low(i: System.Array): integer; ///- High(i: array): integer function High(i: System.Array): integer; -/// +/// Возвращает длину динамического массива function Length(a: &Array): integer; -/// dim +/// Возвращает длину динамического массива по размерности dim function Length(a: &Array; dim: integer): integer; -/// +/// Создаёт копию динамического массива function Copy(a: &Array): &Array; -/// +/// Сортирует динамический массив по возрастанию procedure Sort(a: array of T); -/// +/// Сортирует список по возрастанию procedure Sort(l: List); -/// +/// Изменяет порядок элементов в динамическом массиве на противоположный procedure Reverse(a: array of T); -/// length index +/// Изменяет порядок элементов на противоположный в диапазоне динамического массива длины length начиная с индекса index procedure Reverse(a: array of T; index,length: integer); //function Copy(a: array of T): array of T; @@ -1484,111 +1484,111 @@ function CopyWithSize(source, dest: &Array): &Array; // ----------------------------------------------------- // Sequences and dynamic arrays // ----------------------------------------------------- -/// a b +/// Возвращает последовательность целых от a до b function Range(a,b: integer): sequence of integer; -/// c1 c2 +/// Возвращает последовательность символов от c1 до c2 function Range(c1,c2: char): sequence of char; -/// [a,b] n +/// Возвращает последовательность вещественных в точках разбиения отрезка [a,b] на n равных частей function Range(a,b: real; n: integer): sequence of real; -/// a b step +/// Возвращает последовательность целых от a до b с шагом step function Range(a,b,step: integer): sequence of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными целыми значениями function ArrRandom(n: integer := 10; a: integer := 0; b: integer := 100): array of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными целыми значениями function ArrRandomInteger(n: integer := 10; a: integer := 0; b: integer := 100): array of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными вещественными значениями function ArrRandomReal(n: integer := 10; a: real := 0; b: real := 10): array of real; -/// n +/// Возвращает последовательность из n случайных целых элементов function SeqRandom(n: integer := 10; a: integer := 0; b: integer := 100): sequence of integer; -/// n +/// Возвращает последовательность из n случайных вещественных элементов function SeqRandomReal(n: integer := 10; a: real := 0; b: real := 10): sequence of real; -/// , +/// Возвращает массив, заполненный указанными элементами function Arr(params a: array of T): array of T; -/// +/// Возвращает последовательность указанных элементов function Seq(params a: array of T): sequence of T; -/// count , f(i) +/// Возвращает массив из count элементов, заполненных значениями f(i) function ArrGen(count: integer; f: integer -> T): array of T; -/// count , f(i), i=from +/// Возвращает массив из count элементов, заполненных значениями f(i), начиная с i=from function ArrGen(count: integer; f: integer -> T; from: integer): array of T; -/// count , first, next +/// Возвращает массив из count элементов, начинающихся с first, с функцией next перехода от предыдущего к следующему function ArrGen(count: integer; first: T; next: T -> T): array of T; -/// count , first second, next +/// Возвращает массив из count элементов, начинающихся с first и second, с функцией next перехода от двух предыдущих к следующему function ArrGen(count: integer; first,second: T; next: (T,T) -> T): array of T; -/// count , f(i) +/// Возвращает последовательность из count элементов, заполненных значениями f(i) function SeqGen(count: integer; f: integer -> T): sequence of T; -/// count , f(i), i=from +/// Возвращает последовательность из count элементов, заполненных значениями f(i), начиная с i=from function SeqGen(count: integer; f: integer -> T; from: integer): sequence of T; -/// count , first, next +/// Возвращает последовательность из count элементов, начинающуюся с first, с функцией next перехода от предыдущего к следующему function SeqGen(count: integer; first: T; next: T -> T): sequence of T; -/// count , first second, next +/// Возвращает последовательность из count элементов, начинающуюся с first и second, с функцией next перехода от двух предыдущих к следующему function SeqGen(count: integer; first,second: T; next: (T,T) -> T): sequence of T; -/// first, next pred +/// Возвращает последовательность элементов с начальным значением first, функцией next перехода от предыдущего к следующему и условием pred продолжения последовательности function SeqWhile(first: T; next: T -> T; pred: T -> boolean): sequence of T; -/// , first second, next pred +/// Возвращает последовательность элементов, начинающуюся с first и second, с функцией next перехода от двух предыдущих к следующему и условием pred продолжения последовательности function SeqWhile(first,second: T; next: (T,T) -> T; pred: T -> boolean): sequence of T; -/// count x +/// Возвращает массив из count элементов x function ArrFill(count: integer; x: T): array of T; -/// count x +/// Возвращает последовательность из count элементов x function SeqFill(count: integer; x: T): sequence of T; -/// m x n, +/// Возвращает матрицу размера m x n, заполненную случайными целыми значениями function MatrixRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer; -/// m x n, +/// Возвращает матрицу размера m x n, заполненную случайными вещественными значениями function MatrixRandomReal(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 10): array [,] of real; -/// 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 ReadArrInteger(const prompt: string; n: integer): array of integer; -/// n , +/// Выводит приглашение к вводу и возвращает массив из n вещественных, введенных с клавиатуры function ReadArrReal(const prompt: string; n: integer): array of real; -/// n , +/// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры function ReadArrString(const prompt: string; 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; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n целых, введенных с клавиатуры function ReadSeqInteger(const prompt: string; n: integer): sequence of integer; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n вещественных, введенных с клавиатуры function ReadSeqReal(const prompt: string; n: integer): sequence of real; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n строк, введенных с клавиатуры function ReadSeqString(const prompt: string; n: integer): sequence of string; // ----------------------------------------------------- // Tuples // ----------------------------------------------------- -/// 2 +/// Возвращает кортеж из 2 элементов function Rec(x1: T1; x2: T2): Tuple; -/// 3 +/// Возвращает кортеж из 3 элементов function Rec(x1: T1; x2: T2; x3: T3): Tuple; -/// 4 +/// Возвращает кортеж из 4 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4): Tuple; -/// 5 +/// Возвращает кортеж из 5 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4; x5: T5): Tuple; -/// 6 +/// Возвращает кортеж из 6 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4; x5: T5; x6: T6): Tuple; // ----------------------------------------------------- // Dict // ----------------------------------------------------- -/// +/// Возвращает словарь пар элементов function Dict(params pairs: array of KeyValuePair): Dictionary; -/// +/// Возвращает пару элементов function KV(key: TKey; value: TVal): KeyValuePair; //------------------------------------------------------------------------------ -// . ! +// Вспомогательные подпрограммы. Из раздела интерфейса не убирать! ///-- function FormatValue(value: object; NumOfChars: integer): string; ///-- @@ -1602,24 +1602,24 @@ procedure StringDefaultPropertySet(var s: string; index: integer; c: char); //procedure InitShortString(var s: ShortString; Length: integer); -/// T +///Проверяет возможность использования указателей на тип T procedure CheckCanUsePointerOnType(T: System.Type); -/// T +///Проверяет возможность записи типа T в файл procedure CheckCanUseTypeForBinaryFiles(T: System.Type); -/// file of T +///Проверяет возможность создания file of T procedure CheckCanUseTypeForTypedFiles(T: System.Type); -/// +///Определяет специальные типы function RuntimeDetermineType(T: System.Type): byte; -/// kind +///Возвращает объект класса в зависимости от значения kind function RuntimeInitialize(kind: byte; variable: object): object; -/// +///Вычисление размера типа на этапе выполнения function GetRuntimeSize: integer; -/// write +///Возвращает строку для вывода в write function _ObjectToString(o: object): string; //------------------------------------------------------------------------------ // WINAPI -// . +// Использование этих функций вводит платформенную зависимость. Желательно обойти ///-- function WINAPI_TerminateProcess(Handle: IntPtr; ExitCode: integer): boolean; //------------------------------------------------------------------------------ @@ -1633,9 +1633,9 @@ var //------------------------------------------------------------------------------ var - /// - + /// Определяет текущую систему ввода-вывода CurrentIOSystem: IOSystem; - /// True, + /// Принимает значение True, если приложение имеет консольное окно IsConsoleApplication: boolean; ///-- RedirectIOInDebugMode := False; @@ -1643,7 +1643,7 @@ var ExecuteBeforeProcessTerminateIn__Mode: procedure(e: Exception); //GCHandlersForReferencePointers := new GCHandlersController; ///-- - ExitCode := 0;//TODO Main + ExitCode := 0;//TODO Сделать возврат в Main ///-- procedure __InitModule__; @@ -1662,23 +1662,23 @@ var DefaultOrdChrEncoding := System.Text.Encoding.GetEncoding(1251); __one_char := new char[1]; __one_byte := new byte[1]; - StartTime: DateTime;// Milliseconds + StartTime: DateTime;// Для Milliseconds const - WRITELN_IN_BINARYFILE_ERROR_MESSAGE = ' Writeln !!Writeln is not applicable to binary files'; + WRITELN_IN_BINARYFILE_ERROR_MESSAGE = 'Операция Writeln не применима к бинарным файлам!!Writeln is not applicable to binary files'; InternalNullBasedArrayName = 'NullBasedArray'; - FILE_NOT_ASSIGNED = ' Assign!!File is not assigned'; - FILE_NOT_OPENED = ' !!File is not opened'; - FILE_NOT_OPENED_FOR_READING = ' !!File is not opened for reading'; - FILE_NOT_OPENED_FOR_WRITING = ' !!File is not opened for writing'; - RANGE_ERROR_MESSAGE = ' !!Out of range'; - EOF_FOR_TEXT_WRITEOPENED = ' Eof , !!Eof function can''t be called for file, opened on writing'; - EOLN_FOR_TEXT_WRITEOPENED = ' Eoln , !!Eoln function can''t be called for file, opened on writing'; - SEEKEOF_FOR_TEXT_WRITEOPENED = ' SeekEof , !!SeekEof function can''t be called for file, opened on writing'; - SEEKEOLN_FOR_TEXT_WRITEOPENED = ' SeekEoln , !!SeekEoln function can''t be called for file, opened on writing'; + FILE_NOT_ASSIGNED = 'Для файловой переменной не вызвана процедура Assign!!File is not assigned'; + FILE_NOT_OPENED = 'Файл не открыт!!File is not opened'; + FILE_NOT_OPENED_FOR_READING = 'Файл не открыт на чтение!!File is not opened for reading'; + FILE_NOT_OPENED_FOR_WRITING = 'Файл не открыт на запись!!File is not opened for writing'; + RANGE_ERROR_MESSAGE = 'Выход за границы диапазона!!Out of range'; + EOF_FOR_TEXT_WRITEOPENED = 'Функция Eof не может быть вызвана для текстового файла, открытого на запись!!Eof function can''t be called for file, opened on writing'; + EOLN_FOR_TEXT_WRITEOPENED = 'Функция Eoln не может быть вызвана для текстового файла, открытого на запись!!Eoln function can''t be called for file, opened on writing'; + SEEKEOF_FOR_TEXT_WRITEOPENED = 'Функция SeekEof не может быть вызвана для текстового файла, открытого на запись!!SeekEof function can''t be called for file, opened on writing'; + SEEKEOLN_FOR_TEXT_WRITEOPENED = 'Функция SeekEoln не может быть вызвана для текстового файла, открытого на запись!!SeekEoln function can''t be called for file, opened on writing'; BAD_TYPE_IN_RUNTIMESIZEOF = 'Bad Type in RunTimeSizeOf'; - PARAMETER_COUNT_MUST_BE_GREATER_0 = ' count > 0!!Parameter count must be > 0'; - PARAMETER_COUNT_MUST_BE_GREATER_1 = ' count > 1!!Parameter count must be > 1'; + PARAMETER_COUNT_MUST_BE_GREATER_0 = 'Параметр count должен быть > 0!!Parameter count must be > 0'; + PARAMETER_COUNT_MUST_BE_GREATER_1 = 'Параметр count должен быть > 1!!Parameter count must be > 1'; function GetCurrentLocale: string; begin @@ -2732,7 +2732,7 @@ end; // StructuredObjectToString //------------------------------------------------------------------------------ -// ToString nil ToString Object +// Возвращает переопределенный в последнем потомке ToString или nil если ToString определен в Object function RedefinedToString(o: object): System.Reflection.MethodInfo; begin var t := o.GetType; @@ -2893,7 +2893,7 @@ begin result := string.CompareOrdinal(left, right) >= 0; end; -/// str n +/// Повторяет строку str n раз function string.operator*(str: string; n: integer): string; begin var sb := new StringBuilder; @@ -2902,7 +2902,7 @@ begin result := sb.ToString; end; -/// str n +/// Повторяет строку str n раз function string.operator*(n: integer; str: string): string; begin var sb := new StringBuilder; @@ -2911,7 +2911,7 @@ begin result := sb.ToString; end; -/// c n +/// Повторяет символ c n раз function char.operator*(c: char; n: integer): string; begin var sb := new StringBuilder; @@ -2920,7 +2920,7 @@ begin result := sb.ToString; end; -/// c n +/// Повторяет символ c n раз function char.operator*(n: integer; c: char): string; begin var sb := new StringBuilder; @@ -2929,25 +2929,25 @@ begin result := sb.ToString; end; -/// str n +/// Добавляет к строке str строковое представление числа n function string.operator+(str: string; n: integer): string; begin result := str + n.ToString; end; -/// str n +/// Добавляет к строке str строковое представление числа n function string.operator+(n: integer; str: string): string; begin result := n.ToString + str; end; -/// str r +/// Добавляет к строке str строковое представление числа r function string.operator+(str: string; r: real): string; begin result := str + r.ToString(nfi); end; -/// str r +/// Добавляет к строке str строковое представление числа r function string.operator+(r: real; str: string): string; begin result := r.ToString(nfi) + str; @@ -2972,7 +2972,7 @@ begin end; -/// +/// Возвращает инверсию строки function string.Inverse(): string; begin var sb := new System.Text.StringBuilder(Self.Length); @@ -3026,7 +3026,7 @@ end;} //------------------------------------------------------------------------------ // Extension methods for IEnumerable //------------------------------------------------------------------------------ -/// , delim +/// Выводит последовательность на экран, используя delim в качестве разделителя function Print(self: sequence of T; delim: string): sequence of T; extensionmethod; begin var g := Self.GetEnumerator(); @@ -3039,13 +3039,13 @@ begin Result := Self; end; -/// , +/// Выводит последовательность на экран, используя пробел в качестве разделителя function Print(self: sequence of T): sequence of T; extensionmethod; begin Result := Self.Print(' '); end; -/// , delim , +/// Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку function Println(self: sequence of T; delim: string): sequence of T; extensionmethod; begin Self.Print(delim); @@ -3053,13 +3053,13 @@ begin Result := Self; end; -/// , , +/// Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку function Println(self: sequence of T): sequence of T; extensionmethod; begin Result := Self.Println(' '); end; -/// , , delim +/// Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя delim в качестве разделителя function System.Collections.Generic.IEnumerable.JoinIntoString(delim: string): string; begin var g := Self.GetEnumerator(); @@ -3071,13 +3071,13 @@ begin Result := sb.ToString; end; -/// , , +/// Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя пробел в качестве разделителя function System.Collections.Generic.IEnumerable.JoinIntoString(): string; begin Result := Self.JoinIntoString(' '); end; -/// +/// Применяет действие к каждому элементу последовательности procedure &ForEach(self: sequence of T; action: T -> ()); extensionmethod; begin foreach x: T in Self do @@ -3094,26 +3094,26 @@ begin Result := Self.OrderBy(Ident&); end; -/// +/// Объединяет две последовательности function System.Collections.Generic.IEnumerable.operator+(a,b: sequence of T): sequence of T; begin Result := a.Concat(b); end; -/// a b +/// Объединяет последовательность a и значение b function System.Collections.Generic.IEnumerable.operator+(a: sequence of T; b: T): sequence of T; begin Result := a.Concat(new T[1](b)); end; -/// b a +/// Объединяет значение b и последовательность a function System.Collections.Generic.IEnumerable.operator+(b: T; a: sequence of T): sequence of T; begin Result := new T[1](b); Result := Result.Concat(a); end; -/// a, n +/// Возвращае последовательность a, повторенную n раз function System.Collections.Generic.IEnumerable.operator*(a: sequence of T; n: integer): sequence of T; begin Result := System.Linq.Enumerable.Empty&(); @@ -3121,13 +3121,13 @@ begin Result := Result.Concat(a); end; -/// a, n +/// Возвращае последовательность a, повторенную n раз function System.Collections.Generic.IEnumerable.operator*(n: integer; a: sequence of T): sequence of T; begin Result := a*n; end; -/// +/// Объединяет два массива function operator+(a, b: array of T): array of T; extensionmethod; begin Result := new T[a.Length+b.Length]; @@ -3628,7 +3628,7 @@ begin Result := sb.ToString; end;} -function read_lexem: string;// SSM 08.03.11 - peek '1 hello'. +function read_lexem: string;// SSM 08.03.11 - пытаюсь исправить с peekом ситуацию с вводом '1 hello'. Должно работать var c: char; sb: System.Text.StringBuilder; @@ -3640,7 +3640,7 @@ begin repeat sb.Append(c); c := char(CurrentIOSystem.peek); - if char.IsWhiteSpace(c) or (c = char(-1)) then // char(-1) - Ctrl-Z + if char.IsWhiteSpace(c) or (c = char(-1)) then // char(-1) - Ctrl-Z во входном потоке break; c := CurrentIOSystem.read_symbol; until False; // accumulate nonspaces @@ -3683,12 +3683,12 @@ begin if not console_alloc then AllocConsole; // SSM 29.11.14 - if state = 1 then // sym - , Peek + if state = 1 then // в sym - символ, считанный предыдущим Peek Result := sym - else // sym + else // в sym ничего нет begin state := 1; - sym := Console.Read(); // + sym := Console.Read(); // считываение в буфер Result := sym; end; end; @@ -3698,13 +3698,13 @@ begin if not console_alloc then AllocConsole; // SSM 29.11.14 - if state = 1 then // sym - , Peek + if state = 1 then // в sym - символ, считанный предыдущим Peek begin state := 0; Result := char(sym); sym := -1; end - else // sym + else // в sym ничего нет Result := char(Console.Read()); end; @@ -3755,7 +3755,7 @@ begin begin var sb := new System.Text.StringBuilder; // SSM 8.04.10 - var c := char(peek()); // char(-1) - , , + var c := char(peek()); // первый раз может быть char(-1) - это значит, что в потоке ввода ничего нет, тогда мы читаем символ while (c <> #13) and (c <> #10) do begin c := read_symbol; @@ -3816,7 +3816,7 @@ begin x := True else if s = 'false' then x := False - else raise new System.FormatException(' '); + else raise new System.FormatException('Входная строка имела неверный формат'); end; procedure IOStandardSystem.readln; @@ -4179,8 +4179,8 @@ end; procedure ReadShortStringFromFile(f: Text; var s: string; n: integer); begin - //x := f.sr.ReadLine;// nil - // .. + //x := f.sr.ReadLine;//если конец файла то вернет nil + //Нельзя эти пользоваться т.к. считывает и конец строки var i := 1; var sb := new System.Text.StringBuilder; repeat @@ -4200,7 +4200,7 @@ begin if s.Length > n then s := s.Substring(0, n); end; -procedure ReadShortString(var s: string; n: integer);// peek. +procedure ReadShortString(var s: string; n: integer);// Снова сделал peek. В прошлый раз была ошибка begin if (input.fi <> nil) and (input.sr <> nil) then begin @@ -4281,8 +4281,8 @@ end; procedure read(f: Text; var x: string); begin - //x := f.sr.ReadLine;// nil - // .. + //x := f.sr.ReadLine;//если конец файла то вернет nil + //Нельзя этим пользоваться т.к. считывает и конец строки if f.fi = nil then raise new System.IO.IOException(GetTranslation(FILE_NOT_ASSIGNED)); if f.sr = nil then @@ -4404,7 +4404,7 @@ begin x := True else if s = 'false' then x := False - else raise new System.FormatException(' '); + else raise new System.FormatException('Входная строка имела неверный формат'); end; function ReadInteger(f: Text): integer; @@ -5091,11 +5091,11 @@ begin break; var i := f.sr.Peek; // if not char.IsWhiteSpace(char(i)) then - if (i <> 32) and (i <> 9) then // + if (i <> 32) and (i <> 9) then // Если это не пробел и не табуляция break; f.sr.Read; until False; - Result := f.sr.EndOfStream or (f.sr.Peek = 13) or (f.sr.Peek = 10); // + Result := f.sr.EndOfStream or (f.sr.Peek = 13) or (f.sr.Peek = 10); // Концом строки end; procedure Flush(f: Text); @@ -5753,10 +5753,10 @@ begin var currentLine := stackTrace.GetFrame(ind).GetFileLineNumber(); var currentFile := stackTrace.GetFrame(ind).GetFileName(); if not IsWDE then - System.Diagnostics.Debug.Assert(cond,' '+currentFile+', '+currentLine.ToString()) + System.Diagnostics.Debug.Assert(cond,'Файл '+currentFile+', строка '+currentLine.ToString()) else if not cond then begin - var err := ' : '+Environment.NewLine+' '+currentFile+', '+currentLine.ToString(); + var err := 'Сбой подтверждения: '+Environment.NewLine+'Файл '+currentFile+', строка '+currentLine.ToString(); writeln(err); System.Threading.Thread.Sleep(500); raise new Exception(); @@ -5777,10 +5777,10 @@ begin var currentLine := stackTrace.GetFrame(ind).GetFileLineNumber(); var currentFile := stackTrace.GetFrame(ind).GetFileName(); if not IsWDE then - System.Diagnostics.Debug.Assert(cond,' '+currentFile+', '+currentLine.ToString()+': '+mes) + System.Diagnostics.Debug.Assert(cond,'Файл '+currentFile+', строка '+currentLine.ToString()+': '+mes) else if not cond then begin - var err := ' : '+mes+Environment.NewLine+' '+currentFile+', '+currentLine.ToString(); + var err := 'Сбой подтверждения: '+mes+Environment.NewLine+'Файл '+currentFile+', строка '+currentLine.ToString(); writeln(err); System.Threading.Thread.Sleep(500); raise new Exception(); @@ -6467,7 +6467,7 @@ begin end; procedure Insert(source: string; var s: string; index: integer); -// Insert +// Insert никогда не возвращает исключения begin if index < 1 then index := 1; @@ -6498,7 +6498,7 @@ begin end; procedure Delete(var s: string; index, count: integer); -// Delete +// Delete никогда не возвращает исключения begin if (index < 1) or (index > s.Length) or (count <= 0) then Exit; @@ -6508,7 +6508,7 @@ begin end; function Copy(s: string; index, count: integer): string; -// Copy +// Copy никогда не возвращает исключения begin if index < 1 then index := 1; @@ -6986,7 +6986,7 @@ end; procedure cls; begin - // + //для совместимости { if IsConsoleApplication then Console.Clear;} end; @@ -7178,13 +7178,13 @@ end; //------------------------------------------------------------------------------ // Linq ext //------------------------------------------------------------------------------ -// +// Является ли символ цифрой function char.IsDigit(self: char): boolean; extensionmethod; begin Result := char.IsDigit(self); end; -// +// Является ли символ буквой function char.IsLetter(self: char): boolean; extensionmethod; begin Result := char.IsLetter(self); @@ -7210,31 +7210,31 @@ begin Result := char.ToLower(self); end; -/// +/// Преобразует строку в целое function string.ToInteger: integer; begin Result := integer.Parse(Self); end; -/// +/// Преобразует строку в вещественное function string.ToReal: real; begin Result := real.Parse(Self, nfi); end; -/// +/// Преобразует строку в массив слов function string.ToWords(params delim: array of char): array of string; begin Result := Self.Split(delim, System.StringSplitOptions.RemoveEmptyEntries); end; -/// +/// Преобразует строку в массив целых function string.ToIntegers(): array of integer; begin Result := Self.ToWords().Select(s -> StrToInt(s)).ToArray(); end; -/// +/// Преобразует строку в массив вещественных function string.ToReals(): array of real; begin Result := Self.ToWords().Select(s -> StrToFloat(s)).ToArray(); @@ -7347,7 +7347,7 @@ begin exit; if T = typeof(TypedSet) then begin - //TODO: + //TODO: обработать множества raise new CanNotUseTypeForFilesException(T); end; if T = typeof(string) then @@ -7383,17 +7383,17 @@ end; function CanNotUseTypeForPointersException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для указателей.'; end; function CanNotUseTypeForTypedFilesException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для типизированных файлов.'; end; function CanNotUseTypeForFilesException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для файлов.'; end; function RuntimeDetermineType(T: System.Type): byte; diff --git a/TestSuite/formatter_tests/input/PT4.pas b/TestSuite/formatter_tests/input/PT4.pas index 8f76e6837..b6f0ffa59 100644 --- a/TestSuite/formatter_tests/input/PT4.pas +++ b/TestSuite/formatter_tests/input/PT4.pas @@ -1,14 +1,14 @@ -/// Programming Taskbook 4 +/// Модуль электронного задачника Programming Taskbook 4 unit PT4; //------------------------------------------------------------------------------ -// Programming Taskbook -// 4.13 +// Модуль для подключения задачника Programming Taskbook +// Версия 4.13 // Copyright (c) 2006-2008 DarkStar, SSM -// Copyright (c) 2010 .., 1.3 -// Copyright (c) 2014-2015 .., 4.13 -// Copyright (c) 2015 .., 4.14 -// Programming Taskbook Copyright (c).., 1998-2015 +// Copyright (c) 2010 М.Э.Абрамян, дополнения к версии 1.3 +// Copyright (c) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13 +// Copyright (c) 2015 М.Э.Абрамян, дополнения к версии 4.14 +// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2015 //------------------------------------------------------------------------------ {$apptype windows} @@ -20,9 +20,9 @@ uses System, System.Collections, System.Runtime.InteropServices; type - /// + /// Тип указателя на узел списка PNode = ^TNode; - /// + /// Тип узла списка TNode = record Data: integer; Next,Prev,Left,Right,Parent: PNode; @@ -78,58 +78,58 @@ 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; procedure GetR(var param: real); @@ -157,9 +157,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); @@ -198,13 +198,13 @@ procedure Print(params args: array of object); procedure Println(params args: array of object); -/// , , p +/// Освобождает память, выделенную динамически, на которую указывает p procedure Dispose(p: pointer); -// - Intellisense -// , - write +// Фиктивная пустая процедура - для Intellisense +// Нет, нельзя пользоваться - закрываются процедуры write системного модуля ///- write(a,b,...) -/// a,b,... +/// Выводит значения a,b,... в окно электронного задачника //procedure write; ///-- @@ -212,172 +212,172 @@ 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): System.Collections.Generic.IEnumerable; -/// n -/// +/// Вводит n вещественных чисел +/// и возвращает введенные числа в виде последовательности function ReadSeqReal(n: integer): System.Collections.Generic.IEnumerable; -/// n -/// +/// Вводит n строк +/// и возвращает введенные строки в виде последовательности function ReadSeqString(n: integer): System.Collections.Generic.IEnumerable; -/// -/// +/// Вводит размер набора целых чисел и его элементы +/// и возвращает введенный набор в виде последовательности function ReadSeqInteger(): System.Collections.Generic.IEnumerable; -/// -/// +/// Вводит размер набора вещественных чисел и его элементы +/// и возвращает введенный набор в виде последовательности function ReadSeqReal(): System.Collections.Generic.IEnumerable; -/// -/// +/// Вводит размер набора строк и его элементы +/// и возвращает введенный набор в виде последовательности function ReadSeqString(): System.Collections.Generic.IEnumerable; -/// -/// +/// Вводит размер набора целых чисел и его элементы +/// и возвращает введенный набор в виде массива 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; -// == 4.14 == +// == Конец дополнений к версии 4.14 == implementation const - NotSupportedReadTypeMessage = ' {0} '; - NotSupportedWriteTypeMessage = ' {0} '; - eMessage = ' Node Dispose'; + NotSupportedReadTypeMessage = 'Ввод данных типа {0} не поддерживается'; + NotSupportedWriteTypeMessage = 'Вывод данных типа {0} не поддерживается'; + eMessage = 'Попытка обращения к объекту Node после вызова его метода Dispose'; var loadNodes: ArrayList; @@ -820,7 +820,7 @@ begin end; // ----------------------------------------------------- -// Get +// Функции Get // ----------------------------------------------------- function GetInt: integer; var val:integer; @@ -856,7 +856,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; @@ -888,8 +888,8 @@ var sNode: InternalNode; i: integer; 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; @@ -989,7 +989,7 @@ begin end; // ----------------------------------------------------- -// Put +// Процедуры Put // ----------------------------------------------------- procedure PutInt(val: integer); begin @@ -1038,7 +1038,7 @@ begin end; // ----------------------------------------------------- -// +// Генерация исключений // ----------------------------------------------------- procedure RaisePTAndCheckPT(e: Exception); begin @@ -1233,7 +1233,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; @@ -1271,10 +1271,10 @@ begin inc(i); fpt := FinishPT; end; - // == 4.13 == + // == Конец дополнений к версии 4.13 == end; -// == 1.3. == +// == Версия 1.3. Дополнения == var D: integer := 2; @@ -1396,9 +1396,9 @@ begin D := N; end; -// == 1.3 == +// == Конец дополнений к версии 1.3 == -// == 4.14. == +// == Версия 4.14. Дополнения == function ReadSeqInteger(): System.Collections.Generic.IEnumerable; begin @@ -1500,7 +1500,7 @@ begin end; -/// +/// Выводит размер и элементы последовательности procedure System.Collections.Generic.IEnumerable.WriteAll(); begin var b := self.ToArray(); @@ -1509,7 +1509,7 @@ begin PT4.Put(e); end; -/// +/// Выводит элементы последовательности procedure System.Collections.Generic.IEnumerable.Write(); begin var b := self.ToArray(); @@ -1517,14 +1517,14 @@ begin PT4.Put(e); end; -/// +/// Выводит элементы динамического массива procedure Write(self: array of T); extensionmethod; begin for var i:=0 to self.Length-1 do PT4.Put(self[i]); end; -/// +/// Выводит элементы матрицы procedure Write(self: array [,] of T); extensionmethod; begin for var i:=0 to self.GetLength(0)-1 do @@ -1532,10 +1532,10 @@ begin PT4.Put(self[i,j]); end; -/// -/// cmt, , -/// -/// - +/// Выводит в разделе отладки окна задачника +/// комментарий cmt, размер последовательности и значения, +/// полученные из элементов последовательности +/// с помощью указанного лямбда-выражения function System.Collections.Generic.IEnumerable.Show (cmt: string; selector: System.Func): System.Collections.Generic.IEnumerable; @@ -1549,10 +1549,10 @@ begin result := self; end; -/// -/// , -/// -/// - +/// Выводит в разделе отладки окна задачника +/// размер последовательности и значения, +/// полученные из элементов последовательности +/// с помощью указанного лямбда-выражения function System.Collections.Generic.IEnumerable.Show (selector: System.Func): System.Collections.Generic.IEnumerable; @@ -1560,8 +1560,8 @@ begin result := self.Show('', selector); end; -/// -/// cmt, +/// Выводит в разделе отладки окна задачника +/// комментарий cmt, размер последовательности и ее элементы function System.Collections.Generic.IEnumerable.Show(cmt: string): System.Collections.Generic.IEnumerable; begin @@ -1580,15 +1580,15 @@ begin string.Format(s, e).Replace(',', '.')); end; -/// -/// . +/// Выводит в разделе отладки окна задачника +/// размер последовательности и ее элементы. function System.Collections.Generic.IEnumerable.Show(): System.Collections.Generic.IEnumerable; begin result := self.Show(''); end; -// == 4.14 == +// == Конец дополнений к версии 4.14 == initialization __InitModule; diff --git a/TestSuite/formatter_tests/input/PT4Demo.pas b/TestSuite/formatter_tests/input/PT4Demo.pas index 6da995878..2be26f8d4 100644 --- a/TestSuite/formatter_tests/input/PT4Demo.pas +++ b/TestSuite/formatter_tests/input/PT4Demo.pas @@ -10,9 +10,9 @@ procedure Demo3; var a, b: real; begin - CreateTask(' , '); - TaskText(' ~{a} ~{b}.', 0, 2); - TaskText(' {S}~=~{a}\*{b} ' + + CreateTask('Ввод и вывод данных, оператор присваивания'); + TaskText('Даны стороны прямоугольника~{a} и~{b}.', 0, 2); + TaskText('Найти его площадь {S}~=~{a}\*{b} и периметр ' + '{P}~=~2\*({a}\;+\;{b}).', 0, 4); a := (1 + Random(100)) / 10; b := (1 + Random(100)) / 10; @@ -28,10 +28,10 @@ var m, n, i, j, k: integer; a: array [1..5, 1..8] of real; begin - CreateTask(' (): '); - TaskText(' ~{M}\;\x\;{N} ' + - ' ~{K} (1~\l~{K}~\l~{M}).', 0, 2); - TaskText(' {K}- .', 0, 4); + CreateTask('Двумерные массивы (матрицы): вывод элементов'); + TaskText('Дана матрица размера~{M}\;\x\;{N} ' + + 'и целое число~{K} (1~\l~{K}~\l~{M}).', 0, 2); + TaskText('Вывести элементы {K}-й строки данной матрицы.', 0, 4); m := 2 + Random(4); n := 4 + Random(5); k := 1; @@ -53,13 +53,13 @@ end; procedure Demo5; var s: string; begin - CreateTask(' : '); - TaskText(' ~{S}.', 0, 2); - TaskText(' .', 0, 4); + CreateTask('Символы и строки: основные операции'); + TaskText('Дана строка~{S}.', 0, 2); + TaskText('Вывести ее первый и последний символ.', 0, 4); s := WordSample(Random(WordCount)); DataS('S = ', s, 0, 3); - ResultC(' : ', s[1], xLeft, 3); - ResultC(' : ', s[length(s)], xRight, 3); + ResultC('Первый символ: ', s[1], xLeft, 3); + ResultC('Последний символ: ', s[length(s)], xRight, 3); SetTestCount(4); end; @@ -84,16 +84,16 @@ var s: ShortString; c: char; begin - CreateTask(' '); - TaskText(' ~{K} (>\,0) .', 0, 1); - TaskText(' : , ' + - ' {K}~', 0, 2); - TaskText(' , , ' + - ' {K}- ', 0, 3); - TaskText(' ( ~{K}, ' + - ' ', 0, 4); - TaskText(' , ' + - ' ).', 0, 5); + CreateTask('Символьные и строковые файлы'); + TaskText('Дано целое число~{K} (>\,0) и строковый файл.', 0, 1); + TaskText('Создать два новых файла: строковый, содержащий ' + + 'первые {K}~символов', 0, 2); + TaskText('каждой строки исходного файла, и символьный, ' + + 'содержащий {K}-й символ', 0, 3); + TaskText('каждой строки (если длина строки меньше~{K}, ' + + 'то в строковый файл', 0, 4); + TaskText('записывается вся строка, а в символьный файл ' + + 'записывается пробел).', 0, 5); s1 := '1' + FileName(5) + '.tst'; s2 := '2' + FileName(5) + '.tst'; s3 := '3' + FileName(5) + '.tst'; @@ -124,13 +124,13 @@ begin Close(fs2); Close(fc3); DataN('K =', k, 0, 1, 2); - DataS(' : ', s1, 3, 2); - DataS(' : ', s2, 3, 4); - DataS(' : ', s3, 3, 5); - DataComment(' :', xRight, 2); + DataS('Имя исходного файла: ', s1, 3, 2); + DataS('Имя результирующего строкового файла: ', s2, 3, 4); + DataS('Имя результирующего символьного файла: ', s3, 3, 5); + DataComment('Содержимое исходного файла:', xRight, 2); DataFileS(s1, 3, jmax + 3); - ResultComment(' :', 0, 2); - ResultComment(' :', 0, 4); + ResultComment('Содержимое результирующего строкового файла:', 0, 2); + ResultComment('Содержимое результирующего символьного файла:', 0, 4); ResultFileS(s2, 3, k + 3); ResultFileC(s3, 5, 4); end; @@ -141,9 +141,9 @@ var s, s1, s2: string; t1, t2: text; begin - CreateTask(' : '); - TaskText(' .', 0, 2); - TaskText(' .', 0, 4); + CreateTask('Текстовые файлы: основные операции'); + TaskText('Дан текстовый файл.', 0, 2); + TaskText('Удалить из него все пустые строки.', 0, 4); s1 := FileName(6) + '.tst'; s2 := '#' + FileName(6) + '.tst'; s := TextSample(Random(TextCount)); @@ -164,7 +164,7 @@ begin ResultFileT(s1, 1, 5); Rename(t2, s1); DataFileT(s1, 2, 5); - DataS(' : ', s1, 0, 1); + DataS('Имя файла: ', s1, 0, 1); SetTestCount(3); end; @@ -194,7 +194,7 @@ begin p2^.Next := nil; SetPointer(1, p1); SetPointer(2, p2); - ResultP(' : ', 2, 0, 2); + ResultP('Последний элемент: ', 2, 0, 2); ResultList(1, 0, 3); ShowPointer(2); DataP('', 1, 0, 2); @@ -210,38 +210,38 @@ end; procedure Demo8; begin - CreateTask(' : '); - TaskText(' ~{P}_1 ' + - '- TNode,', 0, 1); - TaskText(' Next. ' + - ' Prev TNode,', 0, 2); - TaskText(' (\I\i) ' + - ' \I\i, ', 0, 3); - TaskText(' ' + - '( Next),', 0, 4); - TaskText(' ( Prev). Prev ' + - ' ', 0, 5); - TaskText(' \N. ' + - ' .', 0, 0); + CreateTask('Динамические структуры данных: двусвязный список'); + TaskText('Дан указатель~{P}_1 на начало непустой цепочки ' + + 'элементов-записей типа TNode,', 0, 1); + TaskText('связанных между собой с помощью поля Next. Используя ' + + 'поле Prev записи TNode,', 0, 2); + TaskText('преобразовать исходную (\Iодносвязную\i) цепочку ' + + 'в \Iдвусвязную\i, в которой каждый', 0, 3); + TaskText('элемент связан не только с последующим элементом ' + + '(с помощью поля Next),', 0, 4); + TaskText('но и с предыдущим (с помощью поля Prev). Поле Prev ' + + 'первого элемента положить', 0, 5); + TaskText('равным \N. Вывести указатель на последний элемент ' + + 'преобразованной цепочки.', 0, 0); Demo8Data; end; procedure Demo8Net; begin - CreateTask(' : '); - TaskText(' ~{A}_1 ' + - '- Node,', 0, 1); - TaskText(' Next. ' + - ' Prev', 0, 2); - TaskText(' , ' + - '(\I\i) \I\i,', 0, 3); - TaskText(' ' + - ' ( ', 0, 4); - TaskText(' Next), ( ' + - ' Prev). Prev', 0, 5); - TaskText(' \O. ' + - '~{A}_2 ', 0, 0); - TaskText(' .', 0, 0); + CreateTask('Динамические структуры данных: двусвязный список'); + TaskText('Дана ссылка~{A}_1 на начало непустой цепочки ' + + 'элементов-объектов типа Node,', 0, 1); + TaskText('связанных между собой с помощью своих свойств Next. ' + + 'Используя свойства Prev', 0, 2); + TaskText('данных объектов, преобразовать исходную ' + + '(\Iодносвязную\i) цепочку в \Iдвусвязную\i,', 0, 3); + TaskText('в которой каждый элемент связан не только ' + + 'с последующим элементом (с помощью', 0, 4); + TaskText('свойства Next), но и с предыдущим (с помощью ' + + 'свойства Prev). Свойство Prev', 0, 5); + TaskText('первого элемента положить равным \O. Вывести ' + + 'ссылку~{A}_2 на последний', 0, 0); + TaskText('элемент преобразованной цепочки.', 0, 0); SetObjectStyle; Demo8Data; end; @@ -261,31 +261,31 @@ begin end; begin - CreateGroup('Demo', ' ', '. . , 2009', + CreateGroup('Demo', 'Примеры различных задач', 'М. Э. Абрамян, 2009', 'df6yui13dffdsttd', 9, InitTask); - CommentText(' '); - CommentText('\I \i \MPT4TaskMaker\m.'); + CommentText('Данная группа демонстрирует различные возможности'); + CommentText('\Iконструктора учебных заданий\i \MPT4TaskMaker\m.'); - Subgroup(' , '); - CommentText(' , '); - CommentText(' Begin.\P '); - CommentText(' .\P'); + Subgroup('Ввод и вывод данных, оператор присваивания'); + CommentText('В этой подгруппе содержатся задания, импортированные'); + CommentText('из группы Begin.\PПриводимый ниже абзац преамбулы'); + CommentText('также импортирован из данной группы.\P'); UseComment('Begin'); - Subgroup(' (): '); - CommentText(' Matrix7.'); + Subgroup('Двумерные массивы (матрицы): вывод элементов'); + CommentText('Данное задание дублирует задание Matrix7.'); - Subgroup(' '); - CommentText(' File63. '); - CommentText(', \I\i .'); + Subgroup('Символьные и строковые файлы'); + CommentText('Данное задание дублирует задание File63. Оно демонстрирует'); + CommentText('особенности, связанные с двоичными \Iстроковыми\i файлами.'); - Subgroup(' : '); - CommentText(' Text16.'); + Subgroup('Текстовые файлы: основные операции'); + CommentText('Данное задание дублирует задание Text16.'); - Subgroup(' : '); - CommentText(' Dynamic30.'); - CommentText(' ObjDyn30 '); - CommentText(' \<\> .'); + Subgroup('Динамические структуры данных: двусвязный список'); + CommentText('Первое задание дублирует задание Dynamic30.'); + CommentText('Второе задание дублирует задание ObjDyn30 и представляет'); + CommentText('собой \<объектный\> вариант первого задания.'); //RegisterGroup('PT4Demo'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/PT4DemoTest.pas b/TestSuite/formatter_tests/input/PT4DemoTest.pas index 2a1951d98..4c78fc630 100644 --- a/TestSuite/formatter_tests/input/PT4DemoTest.pas +++ b/TestSuite/formatter_tests/input/PT4DemoTest.pas @@ -1,7 +1,7 @@ uses PT4, PT4Demo; begin -// -// MakeText +// для отображения окна задачника +// надо закомментировать вызов процедуры MakeText //MakeText('Demo'); Task('Demo7?'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/PT4TaskMakerNET.pas b/TestSuite/formatter_tests/input/PT4TaskMakerNET.pas index 47afe4ba7..9e4554c67 100644 --- a/TestSuite/formatter_tests/input/PT4TaskMakerNET.pas +++ b/TestSuite/formatter_tests/input/PT4TaskMakerNET.pas @@ -1,13 +1,13 @@ -/// Programming Taskbook 4.11 +/// Конструктор для электронного задачника Programming Taskbook 4.11 unit PT4TaskMakerNET; //------------------------------------------------------------------------------ -// Programming Taskbook 4.11 +// Конструктор для электронного задачника Programming Taskbook 4.11 //------------------------------------------------------------------------------ -// NET- PascalABC.NET +// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET // -// Copyright (c) 2013 .. -// Programming Taskbook Copyright (c) ..,1998-2013 +// Copyright (c) 2013 М.Э.Абрамян +// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2013 //------------------------------------------------------------------------------ @@ -26,26 +26,26 @@ const lgVB = $0002; lgCPP = $0004; lg1C = $0040; - lgPython = $0080; // 4.10 + lgPython = $0080; // добавлено в версии 4.10 lgCS = $0100; lgVBNET = $0200; lgPascalNET = $0400; - lgJava = $10000; // 4.11 - lgAll = $FFFFFF; // 4.10 + lgJava = $10000; // добавлено в версии 4.11 + lgAll = $FFFFFF; // изменено в версии 4.10 lgNET = $FF00; lgWithPointers = $003D; - lgWithObjects = $FFF80; // 4.11 + lgWithObjects = $FFF80; // добавлено в версии 4.11 lgPascalABCNET = $0401; type -/// , +/// Процедурный тип, используемый при создании групп заданий TInitTaskProc = procedure(N: integer); -/// +/// Указатель на узел динамической структуры PNode = ^TNode; -/// +/// Узел динамической структуры TNode = record Data: integer; Next: PNode; @@ -55,361 +55,361 @@ type Parent: PNode; end; -/// +/// Добавляет к задачнику новую группу заданий с указанными характеристиками procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; TaskCount: integer; InitTaskProc: TInitTaskProc); -/// +/// Добавляет к создаваемой группе задание из другой группы procedure UseTask(GroupName: string; TaskNumber: integer); -/// +/// Должна указываться первой при определении нового задания procedure CreateTask(SubgroupName: string); overload; -/// +/// Должна указываться первой при определении нового задания procedure CreateTask; overload; -/// -/// ( ) +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) procedure CreateTask(SubgroupName: string; var ProcessCount: integer); overload; -/// -/// ( ) +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) procedure CreateTask(var ProcessCount: integer); overload; -/// , -/// , lgXXX +/// Позволяет определить текущий язык программирования, выбранный для задачника +/// Возвращает значения, связанные с константами lgXXX function CurrentLanguage: integer; -/// -/// ( 'ru', 'en') +/// Возвращает двухбуквенную строку с описанием текущей локали +/// (в даной версии возвращается либо 'ru', либо 'en') function CurrentLocale: string; -/// 'd.dd' -/// ( , 4.10, '4.00') -function CurrentVersion: string; // 4.10 +/// Возвращает номер текущей версии задачника в формате 'd.dd' +/// (для версий, меньших 4.10, возвращает '4.00') +function CurrentVersion: string; // добавлено в версии 4.10 //----------------------------------------------------------------------------- -/// +/// Добавляет к формулировке задания строку procedure TaskText(S: string; X, Y: integer); -/// -/// ( S -/// #13, #10 #13#10; -/// , -/// ) -procedure TaskText(S: string); // 4.11 +/// Определяет все строки формулировки задания +/// (в параметре S отдельные строки формулировки +/// должны разделяться символами #13, #10 или парой #13#10; +/// начальные и конечные пробелы в строках удаляются, +/// пустые строки в формулировку не включаются) +procedure TaskText(S: string); // добавлено в версии 4.11 //----------------------------------------------------------------------------- -/// +/// Добавляет к исходным данным элемент логического типа с комментарием procedure DataB(Cmt: string; B: boolean; X, Y: integer); -/// -procedure DataB(B: boolean; X, Y: integer); // 4.11 +/// Добавляет к исходным данным элемент логического типа +procedure DataB(B: boolean; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным целочисленный элемент с комментарием procedure DataN(Cmt: string; N: integer; X, Y, W: integer); -/// -procedure DataN(N: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным целочисленный элемент +procedure DataN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным два целочисленных элемента с общим комментарием procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); -/// -procedure DataN2(N1, N2: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным два целочисленных элемента +procedure DataN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным три целочисленных элемента с общим комментарием procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); -/// -procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным три целочисленных элемента +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным вещественный элемент с комментарием procedure DataR(Cmt: string; R: real; X, Y, W: integer); -/// -procedure DataR(R: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным вещественный элемент +procedure DataR(R: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным два вещественных элемента с общим комментарием procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); -/// -procedure DataR2(R1, R2: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным два вещественных элемента +procedure DataR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным три вещественных элемента с общим комментарием procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); -/// -procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным три вещественных элемента +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным символьный элемент с комментарием procedure DataC(Cmt: string; C: char; X, Y: integer); -/// -procedure DataC(C: char; X, Y: integer); // 4.11 +/// Добавляет к исходным данным символьный элемент +procedure DataC(C: char; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным строковый элемент с комментарием procedure DataS(Cmt: string; S: string; X, Y: integer); -/// -procedure DataS(S: string; X, Y: integer); // 4.11 +/// Добавляет к исходным данным строковый элемент +procedure DataS(S: string; X, Y: integer); // добавлено в версии 4.11 -/// PNode +/// Добавляет к исходным данным элемент типа PNode с комментарием procedure DataP(Cmt: string; NP: integer; X, Y: integer); -/// PNode -procedure DataP(NP: integer; X, Y: integer); // 4.11 +/// Добавляет к исходным данным элемент типа PNode +procedure DataP(NP: integer; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет комментарий в область исходных данных procedure DataComment(Cmt: string; X, Y: integer); //----------------------------------------------------------------------------- -/// +/// Добавляет к результирующим данным элемент логического типа с комментарием procedure ResultB(Cmt: string; B: boolean; X, Y: integer); -/// -procedure ResultB(B: boolean; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным элемент логического типа +procedure ResultB(B: boolean; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным целочисленный элемент с комментарием procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); -/// -procedure ResultN(N: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным целочисленный элемент +procedure ResultN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным два целочисленных элемента с общим комментарием procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); -/// -procedure ResultN2(N1, N2: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным два целочисленных элемента +procedure ResultN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным три целочисленных элемента с общим комментарием procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); -/// -procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным три целочисленных элемента +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным вещественный элемент с комментарием procedure ResultR(Cmt: string; R: real; X, Y, W: integer); -/// -procedure ResultR(R: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным вещественный элемент +procedure ResultR(R: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным два вещественных элемента с общим комментарием procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); -/// -procedure ResultR2(R1, R2: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным два вещественных элемента +procedure ResultR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным три вещественных элемента с общим комментарием procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); -/// -procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным три вещественных элемента +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным символьный элемент с комментарием procedure ResultC(Cmt: string; C: char; X, Y: integer); -/// -procedure ResultC(C: char; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным символьный элемент +procedure ResultC(C: char; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным строковый элемент с комментарием procedure ResultS(Cmt: string; S: string; X, Y: integer); -/// -procedure ResultS(S: string; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным строковый элемент +procedure ResultS(S: string; X, Y: integer); // добавлено в версии 4.11 -/// PNode +/// Добавляет к результирующим данным элемент типа PNode с комментарием procedure ResultP(Cmt: string; NP: integer; X, Y: integer); -/// PNode -procedure ResultP(NP: integer; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным элемент типа PNode +procedure ResultP(NP: integer; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет комментарий в область результирующих данных procedure ResultComment(Cmt: string; X, Y: integer); //----------------------------------------------------------------------------- -/// +/// Задает число дробных знаков при отображении вещественных чисел procedure SetPrecision(N: integer); -/// , -/// +/// Задает число исходных данных, минимально необходимое +/// для нахождения правильных результирующих данных procedure SetRequiredDataCount(N: integer); -/// ( 2 9), -/// +/// Задает число тестовых испытаний (от 2 до 9), при успешном +/// прохождении которых задание будет считаться выполненным procedure SetTestCount(N: integer); -/// , I- , -/// N , , W, -/// B ( 1) +/// Возвращает горизонтальную координату, начиная с которой следует выводить I-й элемент из набора, +/// содержащего N элементов, при условии, что ширина каждого элемента равна W, а между элементами +/// надо указывать B пробелов (элементы нумеруются от 1) function Center(I, N, W, B: integer): integer; -/// , -/// M N . -/// , M. -function RandomN(M, N: integer): integer; // 4.11 +/// Возвращает псевдослучайное целое число, лежащее +/// в диапазоне от M до N включительно. Если указанный +/// диапазон пуст, то возвращает M. +function RandomN(M, N: integer): integer; // добавлено в версии 4.11 -/// , -/// [A, B). -/// , A. -function RandomR(A, B: real): real; // 4.11 +/// Возвращает псевдослучайное вещественное число, лежащее +/// на полуинтервале [A, B). Если указанный полуинтервал +/// пуст, то возвращает A. +function RandomR(A, B: real): real; // добавлено в версии 4.11 -/// -/// ( ). -/// , 1. -/// , 0. -/// ( 4.10 ) -/// 0. -function CurrentTest: integer; // 4.11 +/// Возвращает порядковый номер текущего тестового запуска +/// (учитываются только успешные тестовые запуски). Если ранее успешных +/// запусков не было, то возвращает 1. Если задание уже выполнено +/// или запущено в демонстрационном режиме, то возвращает 0. +/// При использовании предыдущих версий задачника (до 4.10 включительно) +/// всегда возвращает 0. +function CurrentTest: integer; // добавлено в версии 4.11 //----------------------------------------------------------------------------- -/// (file of integer) +/// Добавляет к исходным данным двоичный файл с целочисленными элементами (file of integer) procedure DataFileN(FileName: string; Y, W: integer); -/// (file of real) +/// Добавляет к исходным данным двоичный файл с вещественными элементами (file of real) procedure DataFileR(FileName: string; Y, W: integer); -/// (file of char) +/// Добавляет к исходным данным двоичный файл с символьными элементами (file of char) procedure DataFileC(FileName: string; Y, W: integer); -/// (file of ShortString) +/// Добавляет к исходным данным двоичный файл со строковыми элементами (file of ShortString) procedure DataFileS(FileName: string; Y, W: integer); -/// +/// Добавляет к исходным данным текстовый файл procedure DataFileT(FileName: string; Y1, Y2: integer); //----------------------------------------------------------------------------- -/// (file of integer) +/// Добавляет к результирующим данным двоичный файл с целочисленными элементами (file of integer) procedure ResultFileN(FileName: string; Y, W: integer); -/// (file of real) +/// Добавляет к результирующим данным двоичный файл с вещественными элементами (file of real) procedure ResultFileR(FileName: string; Y, W: integer); -/// (file of char) +/// Добавляет к результирующим данным двоичный файл с символьными элементами (file of char) procedure ResultFileC(FileName: string; Y, W: integer); -/// (file of ShortString) +/// Добавляет к результирующим данным двоичный файл со строковыми элементами (file of ShortString) procedure ResultFileS(FileName: string; Y, W: integer); -/// +/// Добавляет к результирующим данным текстовый файл procedure ResultFileT(FileName: string; Y1, Y2: integer); //----------------------------------------------------------------------------- -/// NP P +/// Связывает номер NP с указателем P procedure SetPointer(NP: integer; P: PNode); -/// +/// Добавляет к исходным данным линейную динамическую структуру procedure DataList(NP: integer; X, Y: integer); -/// +/// Добавляет к результирующим данным линейную динамическую структуру procedure ResultList(NP: integer; X, Y: integer); -/// +/// Добавляет к исходным данным бинарное дерево procedure DataBinTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к результирующим данным бинарное дерево procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к исходным данным дерево общего вида procedure DataTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к результирующим данным дерево общего вида procedure ResultTree(NP: integer; X, Y1, Y2: integer); -/// NP +/// Отображает в текущей динамической структуре указатель с номером NP procedure ShowPointer(NP: integer); -/// , +/// Помечает в текущей результирующей динамической структуре указатель, требующий создания procedure SetNewNode(NNode: integer); -/// , +/// Помечает в текущей исходной динамической структуре указатель, требующий удаления procedure SetDisposedNode(NNode: integer); //----------------------------------------------------------------------------- -/// - , +/// Возвращает количество слов-образцов для языка, соответствующего текущей локали function WordCount: integer; //116 -/// - , +/// Возвращает количество предложений-образцов для языка, соответствующего текущей локали function SentenceCount: integer; //61 -/// - , +/// Возвращает количество текстов-образцов для языка, соответствующего текущей локали function TextCount: integer; //85 -/// - N ( 0) , +/// Возвращает слово-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали function WordSample(N: integer): string; -/// - N ( 0) , +/// Возвращает предложение-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали function SentenceSample(N: integer): string; -/// - N ( 0) , , -/// #13#10, , -/// MaxLineCount, +/// Возвращает текст-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали, +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка function TextSample(N: integer): string; //----------------------------------------------------------------------------- -/// - +/// Возвращает количество английских слов-образцов function EnWordCount: integer; //116 -/// - +/// Возвращает количество английских предложений-образцов function EnSentenceCount: integer; //61 -/// - +/// Возвращает количество английских текстов-образцов function EnTextCount: integer; //85 -/// - N ( 0) +/// Возвращает английское слово-образец с номером N (нумерация от 0) function EnWordSample(N: integer): string; -/// - N ( 0) +/// Возвращает английское предложение-образец с номером N (нумерация от 0) function EnSentenceSample(N: integer): string; -/// - N ( 0), -/// #13#10, , -/// MaxLineCount, +/// Возвращает английский текст-образец с номером N (нумерация от 0), +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка function EnTextSample(N: integer): string; //----------------------------------------------------------------------------- -/// +/// Добавляет строку комментария к текущей группе или подгруппе заданий procedure CommentText(S: string); -/// ( , -/// ) +/// Добавляет комментарий из другой группы заданий (или ее подгруппы, +/// если ее второй параметр не является пустой строкой) procedure UseComment(GroupName, SubgroupName: string); overload; -/// +/// Добавляет комментарий из другой группы заданий procedure UseComment(GroupName: string); overload; -/// +/// Устанавливает режим добавления комментария к подгруппе заданий procedure Subgroup(SubgroupName: string); //----------------------------------------------------------------------------- -/// , -/// " " PascalABC.NET -/// ( ) +/// Процедура, обеспечивающая отображение динамических структур данных +/// в "объектном стиле" при выполнении заданий в среде PascalABC.NET +/// (при использовании других сред не выполняет никаких действий) procedure SetObjectStyle; //----------------------------------------------------------------------------- -/// ; -/// activate ( ) -/// NET ( activate -/// S, ActivateNET) +/// Процедура для внутреннего использования; она должна быть вызвана +/// из процедуры с именем activate (с маленькой буквы) в любой +/// библиотеке NET с группой заданий (процедура activate имеет +/// тот же строковый параметр S, что и процедура ActivateNET) procedure ActivateNET(S: string); //----------------------------------------------------------------------------- -/// -/// ( ) +/// Устанавливает текущий процесс для последующей передачи ему данных +/// числовых типов (при выполнении задания в параллельном режиме) procedure SetProcess(ProcessRank: integer); //----------------------------------------------------------------------------- @@ -491,12 +491,12 @@ var enwordsample_, ensentencesample_, entextsample_: TSFuncN; commenttext_: TProcS; usecomment_: TProcS2; - subgroup_{, registergroup_}: TProcS; // 4.11 + subgroup_{, registergroup_}: TProcS; // удалено в версии 4.11 setobjectstyle_: TProc; createtask2_: TProcSvN; setprocess_: TProcN; - currentversion_: TSFunc; // 4.10 - currenttest_: TNFunc; // 4.11 + currentversion_: TSFunc; // добавлено в версии 4.10 + currenttest_: TNFunc; // добавлено в версии 4.11 FHandle: integer; @@ -574,8 +574,8 @@ begin setobjectstyle_ := TProc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setobjectstyle'), typeof(TProc))); createtask2_ := TProcSvN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask2'), typeof(TProcSvN))); setprocess_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprocess'), typeof(TProcN))); - currentversion_ := TSFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion'), typeof(TSFunc))); // 4.10 - currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // 4.11 + currentversion_ := TSFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion'), typeof(TSFunc))); // добавлено в версии 4.10 + currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // добавлено в версии 4.11 end; //============================================================================= @@ -1100,7 +1100,7 @@ begin setobjectstyle_; end; -{ // 4.11 +{ // удалено в версии 4.11 procedure RegisterGroup(UnitName: string); begin registergroup_(PChar(UnitName)); diff --git a/TestSuite/formatter_tests/input/Paporotnik.pas b/TestSuite/formatter_tests/input/Paporotnik.pas index 6224d87c8..3d689e7a5 100644 --- a/TestSuite/formatter_tests/input/Paporotnik.pas +++ b/TestSuite/formatter_tests/input/Paporotnik.pas @@ -1,17 +1,17 @@ -/// " " +///Модуль для рисования фракталов семейства "Лист папоротника" unit Paporotnik; uses GraphABC; type - /// + ///Настройки фрактала PaporotnikFractalInitalData = record data: array of array of real; P0,P1,P2,P3:real; end; - /// " " + ///Фрактал "Лист папоротника" PaporotnikFractal = class private data: array of array of real; diff --git a/TestSuite/formatter_tests/input/Paporotnik1.pas b/TestSuite/formatter_tests/input/Paporotnik1.pas index 251b260b6..7bbe65202 100644 --- a/TestSuite/formatter_tests/input/Paporotnik1.pas +++ b/TestSuite/formatter_tests/input/Paporotnik1.pas @@ -1,7 +1,7 @@ -// . -// z=(x,y) z=z^2+c, c=(cx,cy) -// i |x|>max |y|>max -// x,y , i +// Демонстрация фрактальной графики. Папоротник +// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy) +// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max +// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i uses GraphABC,Utils; const @@ -17,7 +17,7 @@ const dy = 130; begin - Window.Title := ': '; + Window.Title := 'Фракталы: папоротник'; SetWindowSize(800,600); CenterWindow; for var ix:=0 to Window.Width-1 do @@ -38,5 +38,5 @@ begin if i>=255 then SetPixel(ix,iy,clRed) else SetPixel(ix,iy,RGB(255,255-i,255-i)); end; - writeln(' = ',Milliseconds/1000,' '); + writeln('Время расчета = ',Milliseconds/1000,' с'); end. diff --git a/TestSuite/formatter_tests/input/PaporotnikData.pas b/TestSuite/formatter_tests/input/PaporotnikData.pas index 6eb296f99..38069519a 100644 --- a/TestSuite/formatter_tests/input/PaporotnikData.pas +++ b/TestSuite/formatter_tests/input/PaporotnikData.pas @@ -1,10 +1,10 @@ -/// +///Константы задающие фракталы unit PaporotnikData; uses Paporotnik; var - /// + ///Папоротник с изогнутым листом PaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.0000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0400, -0.0400, 0.8500, 0, 1.6000), @@ -15,7 +15,7 @@ var P2: 7; P3: 7); - /// + ///Папоротник с прямым листом SimplePaprotnikData: PaporotnikFractalInitalData := ( data: (( 0.00, 0.00, 0.00, 0.16, 0, 0.00), ( 0.85, 0.00, 0.00, 0.85, 0, 1.60), @@ -26,7 +26,7 @@ var P2: 7; P3: 7); - /// + ///Елка ElkaData: PaporotnikFractalInitalData := ( data: (( 0.1000, 0.0000, 0.0000, 0.1600, 0, 0.0000), ( 0.8500, 0.0000, 0.0000, 0.8500, 0, 1.6000), diff --git a/TestSuite/formatter_tests/input/ParamsConcat.pas b/TestSuite/formatter_tests/input/ParamsConcat.pas index 1050caa42..6f66ceed6 100644 --- a/TestSuite/formatter_tests/input/ParamsConcat.pas +++ b/TestSuite/formatter_tests/input/ParamsConcat.pas @@ -1,4 +1,4 @@ -// Concat +// Создание функции Concat с переменным числом параметров function Concat(params strs: array of string): string; begin diff --git a/TestSuite/formatter_tests/input/ParamsWriteln.pas b/TestSuite/formatter_tests/input/ParamsWriteln.pas index 42bc7aa32..e31fc4699 100644 --- a/TestSuite/formatter_tests/input/ParamsWriteln.pas +++ b/TestSuite/formatter_tests/input/ParamsWriteln.pas @@ -1,4 +1,4 @@ -// MyWriteln +// Создание процедуры MyWriteln с переменным числом параметров procedure MyWriteln(params args: array of object); begin diff --git a/TestSuite/formatter_tests/input/Permutations.pas b/TestSuite/formatter_tests/input/Permutations.pas index 00c712eba..a4be0ea84 100644 --- a/TestSuite/formatter_tests/input/Permutations.pas +++ b/TestSuite/formatter_tests/input/Permutations.pas @@ -1,4 +1,4 @@ -// +// Все перестановки uses Arrays; const n = 4; @@ -11,7 +11,7 @@ begin a.Writeln; for var i:=0 to m-1 do begin - Swap(a[i],a[m-1]); // + Swap(a[i],a[m-1]); // ставим каждый на место последнего Perm(m-1); Swap(a[i],a[m-1]); end; diff --git a/TestSuite/formatter_tests/input/PersonExternal.pas b/TestSuite/formatter_tests/input/PersonExternal.pas index 961250cb9..5d205a700 100644 --- a/TestSuite/formatter_tests/input/PersonExternal.pas +++ b/TestSuite/formatter_tests/input/PersonExternal.pas @@ -1,6 +1,6 @@ -// -// : -// , +// Описание методов вне интерфейса класса +// Удобство: интерфейс лучше виден +// Если класс описан в модуле, то реализация методов помещается в секцию реализации модуля type Person = class private @@ -19,12 +19,12 @@ end; procedure Person.Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; var p: Person; begin - p := new Person('',20); + p := new Person('Иванов',20); p.Print; end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/PersonInternal.pas b/TestSuite/formatter_tests/input/PersonInternal.pas index 787cd2c87..e146f930e 100644 --- a/TestSuite/formatter_tests/input/PersonInternal.pas +++ b/TestSuite/formatter_tests/input/PersonInternal.pas @@ -1,30 +1,30 @@ -// -// : -// : +// Описание методов внутри интерфейса класса +// Удобство: методы можно реализовывать сразу после объявления +// Неудобство: для больших классов интерфейс трудно читается type Person = class private - // , , . - + // Поля класса, как правило, приватны. Доступ к ним - через методы и свойства name: string; age: integer; public - // Create + // Конструктор неявно имеет имя Create constructor (n: string; a: integer); begin name := n; age := a; end; procedure Print; begin - writeln(': ',name,' : ',age); + writeln('Имя: ',name,' Возраст: ',age); end; end; var p,p1: Person; begin - p := new Person('',20); // () + p := new Person('Иванов',20); // Новый синтаксис вызова конструктора (рекомендуется) p.Print; - p1 := Person.Create('',19); // ( ) + p1 := Person.Create('Попов',19); // Старый синтаксис вызова конструктора (не рекомендуется) p1.Print; - // , - + // Деструкторы отсутствуют, вместо них - автоматическая сборка мусора end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Ping.pas b/TestSuite/formatter_tests/input/Ping.pas index 59ec18f6c..269017b70 100644 --- a/TestSuite/formatter_tests/input/Ping.pas +++ b/TestSuite/formatter_tests/input/Ping.pas @@ -1,4 +1,4 @@ -// Ping +// Использование Ping uses System.Net.NetworkInformation; const address = 'www.yandex.ru'; @@ -7,8 +7,8 @@ begin var p := new Ping(); try var res := p.Send(address); - writeln('IP : ',res.Address); - writeln(' : ',res.RoundtripTime,' '); + writeln('IP адрес сервера: ',res.Address); + writeln('Время отклика: ',res.RoundtripTime,' мс'); except on e: Exception do write(e.Message); diff --git a/TestSuite/formatter_tests/input/PointRect.pas b/TestSuite/formatter_tests/input/PointRect.pas index 57c590a40..42861e809 100644 --- a/TestSuite/formatter_tests/input/PointRect.pas +++ b/TestSuite/formatter_tests/input/PointRect.pas @@ -1,5 +1,5 @@ unit PointRect; -// Pascal ABC +//Для совместимости с Pascal ABC end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Pointer1.pas b/TestSuite/formatter_tests/input/Pointer1.pas index d2c232b76..3d041c74c 100644 --- a/TestSuite/formatter_tests/input/Pointer1.pas +++ b/TestSuite/formatter_tests/input/Pointer1.pas @@ -1,16 +1,16 @@ -// +// Типизированные указатели var i: integer := 5; j: integer := 3; p: ^integer; begin - writeln(' i j: ',i,' ',j); - p := @i; // p i, p i - writeln(' ',p,' ',p^); // p^ - , p + writeln('Исходные значения переменных i и j: ',i,' ',j); + p := @i; // в p записывается адрес i, p указывает на i + writeln('По адресу ',p,' находится значение ',p^); // p^ - то, на что указывает p p^ := 2; p := @j; - writeln(' ',p,' ',p^); + writeln('По адресу ',p,' находится значение ',p^); p^ += 1; - writeln(' i j: ',i,' ',j); + writeln('Новые значения переменных i и j: ',i,' ',j); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Pointer2.pas b/TestSuite/formatter_tests/input/Pointer2.pas index d7a4734e4..f3006767d 100644 --- a/TestSuite/formatter_tests/input/Pointer2.pas +++ b/TestSuite/formatter_tests/input/Pointer2.pas @@ -1,6 +1,6 @@ -// -// , -// +// Бестиповые указатели +// Им можно присваивать любой адрес, но для использования необходимо +// явное приведение к типизированному указателю var i: integer := 5; r: real := 3.14; @@ -11,12 +11,12 @@ type preal = ^real; begin - writeln(' i r: '); + writeln('Исходные значения переменных i и r: '); writeln(i,' ',r); p := @i; pinteger(p)^ := 8; p := @r; preal(p)^ += 1; - writeln(' i r: '); + writeln('Новые значения переменных i и r: '); writeln(i,' ',r); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Pointer3.pas b/TestSuite/formatter_tests/input/Pointer3.pas index 673bf7cfb..c7100897e 100644 --- a/TestSuite/formatter_tests/input/Pointer3.pas +++ b/TestSuite/formatter_tests/input/Pointer3.pas @@ -1,11 +1,11 @@ -// +// Выделение динамической памяти var p: ^real; begin - // p + // Выделили динамическую память и в p записали ее адрес New(p); p^ := 3; - writeln(' = ',p^); - // , p + writeln('Значение в динамичесской памяти = ',p^); + // Возврат динамической памяти, на оторую указывает p Dispose(p); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Pointer4.pas b/TestSuite/formatter_tests/input/Pointer4.pas index 69194f83e..0faeeb6f0 100644 --- a/TestSuite/formatter_tests/input/Pointer4.pas +++ b/TestSuite/formatter_tests/input/Pointer4.pas @@ -1,5 +1,5 @@ -// -// +// Выделение динамической памяти +// Использование указателей для создания односвязного списка type PNode = ^TNode; TNode = record @@ -18,13 +18,13 @@ var first: PNode; begin first := nil; - // + // Добавляем в начало односвязного списка first := NewNode(3,first); first := NewNode(7,first); first := NewNode(5,first); - // - writeln(' : '); + // Вывод односвязного списка + writeln('Содержимое односвязного списка: '); var p := first; while p<>nil do begin @@ -32,7 +32,7 @@ begin p := p^.next; end; - // + // Разрушение односвязного списка p := first; while p<>nil do begin diff --git a/TestSuite/formatter_tests/input/Proc1.pas b/TestSuite/formatter_tests/input/Proc1.pas index 46c6d9d06..95f40b8a0 100644 --- a/TestSuite/formatter_tests/input/Proc1.pas +++ b/TestSuite/formatter_tests/input/Proc1.pas @@ -1,4 +1,4 @@ -// +// Параметры процедур procedure Operations(a,b: integer); begin diff --git a/TestSuite/formatter_tests/input/Proc2.pas b/TestSuite/formatter_tests/input/Proc2.pas index 58e44205f..498b595b6 100644 --- a/TestSuite/formatter_tests/input/Proc2.pas +++ b/TestSuite/formatter_tests/input/Proc2.pas @@ -1,4 +1,4 @@ -// - +// Параметры-переменные procedure DivMod(a,b: integer; var d,m: integer); begin diff --git a/TestSuite/formatter_tests/input/Proc3.pas b/TestSuite/formatter_tests/input/Proc3.pas index 11113aae9..ccbdb03a0 100644 --- a/TestSuite/formatter_tests/input/Proc3.pas +++ b/TestSuite/formatter_tests/input/Proc3.pas @@ -1,4 +1,4 @@ -// +// Упаковка параметров в запись uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/ProcParam.pas b/TestSuite/formatter_tests/input/ProcParam.pas index d2708bbb0..5a77aa708 100644 --- a/TestSuite/formatter_tests/input/ProcParam.pas +++ b/TestSuite/formatter_tests/input/ProcParam.pas @@ -1,6 +1,6 @@ -// -// PascalABC.NET -// .NET +// Иллюстрация процедурных переменных как параметров подпрограмм +// Для процедурного типа в PascalABC.NET реализована структурная эквивалентность типов +// Процедурный тип реализован через делегаты .NET procedure for_each(var a: array of real; p: procedure(var r: real)); var i: integer; begin diff --git a/TestSuite/formatter_tests/input/ProcPointer1.pas b/TestSuite/formatter_tests/input/ProcPointer1.pas index a41f8464e..2d54f9fb4 100644 --- a/TestSuite/formatter_tests/input/ProcPointer1.pas +++ b/TestSuite/formatter_tests/input/ProcPointer1.pas @@ -1,4 +1,4 @@ -// +// Процедурные переменные function add(a,b: integer): integer; begin @@ -15,7 +15,7 @@ var p: function (a,b: integer): integer; begin p := add; - writeln(' 2 3 ',p(2,3)); + writeln('Сумма 2 и 3 равна ',p(2,3)); p := mult; - writeln(' 2 3 ',p(2,3)); + writeln('Произведение 2 и 3 равно ',p(2,3)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/ProcPointer2.pas b/TestSuite/formatter_tests/input/ProcPointer2.pas index db0a05a81..2ba35543b 100644 --- a/TestSuite/formatter_tests/input/ProcPointer2.pas +++ b/TestSuite/formatter_tests/input/ProcPointer2.pas @@ -1,4 +1,4 @@ -// +// Процедурная переменная как параметр procedure for_each(a: array of real; p: procedure(var r: real)); begin for var i := 0 to a.Length-1 do @@ -18,10 +18,10 @@ end; var a: array of real := (1,2,3,6,7); begin - writeln(' : '); + writeln('Содержимое массива: '); for_each(a,print); writeln; for_each(a,mult2); - writeln(' 2: '); + writeln('Содержимое массива после умножения его элеметов на 2: '); for_each(a,print); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/ProcVars.pas b/TestSuite/formatter_tests/input/ProcVars.pas index b6d6dbce7..6a4e88dd5 100644 --- a/TestSuite/formatter_tests/input/ProcVars.pas +++ b/TestSuite/formatter_tests/input/ProcVars.pas @@ -1,9 +1,9 @@ -// -// .NET, +=, -= +// Все возможные способы инициализации поцедурной переменной +// Процедурный тип реализован через делегаты .NET, для него доступны операции +=, -= procedure pp; begin - writeln(' '); + writeln('Вызов обычной процедуры'); end; type @@ -17,11 +17,11 @@ type end; procedure pp; begin - writeln(' , ',x); + writeln('Вызов метода класса, значение поля равно ',x); end; class procedure ppstatic; begin - writeln(' '); + writeln('Вызов классового метода класса'); end; end; diff --git a/TestSuite/formatter_tests/input/Properties.pas b/TestSuite/formatter_tests/input/Properties.pas index cb1b81fb1..aa6958bad 100644 --- a/TestSuite/formatter_tests/input/Properties.pas +++ b/TestSuite/formatter_tests/input/Properties.pas @@ -1,14 +1,14 @@ -// (properties) +// Свойства (properties) type - /// + /// Класс персоны Person = class private nm: string; ag: integer; - procedure SetAge(a: integer); // + procedure SetAge(a: integer); // Процедура доступа к свойству располагается обычно в приватной секции begin - if a<0 then // - a := 0; // , + if a<0 then // Перед установкой значения свойства мы можем сделать дополнительные проверки + a := 0; // и скорректировать значение свойства, либо сгенерировать исключение ag := a; end; public @@ -16,20 +16,20 @@ type begin nm := n; ag := a; end; - /// - property Name: string read nm; // Name nm - /// + /// Имя персоны + property Name: string read nm; // Свойство Name доступно только на чтение и возвращает значение поля nm + /// Возраст персоны property Age: integer read ag write SetAge; procedure Print; begin - writeln(': ',nm,' : ',ag); + writeln('Имя: ',nm,' Возраст: ',ag); end; end; -var p: Person := new Person('', 20); +var p: Person := new Person('Иванов', 20); begin - writeln(': ',p.Name); // Name , - - p.Age := -1; // : = 0 - writeln(': ',p.Age); + writeln('Имя: ',p.Name); // Менять Name нельзя, доступ - только на чтение + p.Age := -1; // Попытка изменения возраста на отрицательное значение приводит к корректировке: возраст становится = 0 + writeln('Возраст: ',p.Age); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/QuickSort.pas b/TestSuite/formatter_tests/input/QuickSort.pas index 012c18004..9a778619a 100644 --- a/TestSuite/formatter_tests/input/QuickSort.pas +++ b/TestSuite/formatter_tests/input/QuickSort.pas @@ -1,10 +1,10 @@ -// . +// Быстрая сортировка Ч. Хоара uses ArrayLib; -/// +/// Быстрая сортировка procedure QuickSort(a: array of integer); -/// a[l]..a[r] a[l]..a[q] <= a[q+1]..a[r] +/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r] function Partition(l,r: integer): integer; begin var i := l - 1; @@ -28,7 +28,7 @@ procedure QuickSort(a: array of integer); end; end; -/// +/// Сортировка частей procedure sort(l,r: integer); begin if l>=r then exit; @@ -47,9 +47,9 @@ var a: array of integer; begin CreateRandom(a,n); - writeln(' : '); + writeln('До сортировки: '); WriteArray(a); QuickSort(a); - writeln(' : '); + writeln('После сортировки: '); WriteArray(a); end. diff --git a/TestSuite/formatter_tests/input/RBDMUtils.pas b/TestSuite/formatter_tests/input/RBDMUtils.pas index 9b402c470..16d9306e3 100644 --- a/TestSuite/formatter_tests/input/RBDMUtils.pas +++ b/TestSuite/formatter_tests/input/RBDMUtils.pas @@ -1,20 +1,20 @@ unit RBDMUtils; -// ( PT4TaskMaker) +// (недокументированные возможности PT4TaskMaker) interface -// -//taskname - RB DM ( ) +//Записывают в файл результатов информацию о выполненном задании для Робота или Чертежника +//taskname - имя задания без префикса RB и DM (префикс добавляется автоматически) procedure ResRB(taskname: string); procedure ResDM(taskname: string); -// regtasks.dat Lib -// -//Group - ( 1 7 , ), -//Description - ( -// , ), -//TaskCount - ( 1 999), -//Units - , ( ). -// Units , , -// Group, RB DM. +//Записывают в файл regtasks.dat в каталоге Lib информацию о новой группе заданий +//для Робота или Чертежника +//Group - имя группы (от 1 до 7 символов, без префиксов), +//Description - описание группы (первый символ автоматически преобразуется к нижнему +// регистру, так как описание указывается после двоеточия), +//TaskCount - число заданий в группе (от 1 до 999), +//Units - имя модуля, содержащего группу (используется в шаблоне). +// Если Units является пустой строкой, то считается, что имя модуля +// совпадает с именем группы Group, дополненным префиксом RB или DM. function RegisterRB(Group, Description: string; TaskCount: integer; Units: string): integer; function RegisterDM(Group, Description: string; TaskCount: integer; diff --git a/TestSuite/formatter_tests/input/RBDMUtilsDemo.pas b/TestSuite/formatter_tests/input/RBDMUtilsDemo.pas index b1c892ac8..aa913fd95 100644 --- a/TestSuite/formatter_tests/input/RBDMUtilsDemo.pas +++ b/TestSuite/formatter_tests/input/RBDMUtilsDemo.pas @@ -1,11 +1,11 @@ uses RBDMUtils; begin ResRB('a1'); - RegisterRB('DemoA',', , '+ - ' ( )',50,''); - RegisterRB('DemoB',' B',500,'Rob'); - RegisterDM('DemoB',' B',50,''); - // , - // PT4Results ( RBa1) - // PT4Load ( ) + RegisterRB('DemoA','Пример, показывающий, что описание группы может быть достаточно '+ + 'длинным (в этом случае включается возможность прокрутки текста)',50,''); + RegisterRB('DemoB','Задания группы B',500,'Rob'); + RegisterDM('DemoB','Задания группы B',50,''); + // После запуска этой программы можно сразу просмотреть результаты ее работы, + // вызвав модуль PT4Results (в нем будет информация о выполнении задания RBa1) + // или модуль PT4Load (в нем появятся сведения о новых наборах Робота и Чертежника) end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/RBa1.pas b/TestSuite/formatter_tests/input/RBa1.pas index 5162e32a4..e7c59265c 100644 --- a/TestSuite/formatter_tests/input/RBa1.pas +++ b/TestSuite/formatter_tests/input/RBa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L RB +// Исполнитель Робот - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания uses Robot; begin diff --git a/TestSuite/formatter_tests/input/Random1.pas b/TestSuite/formatter_tests/input/Random1.pas index 1f982a093..e8738e012 100644 --- a/TestSuite/formatter_tests/input/Random1.pas +++ b/TestSuite/formatter_tests/input/Random1.pas @@ -1,13 +1,13 @@ -// +// Генерация случайного числа var i: integer; r: real; begin i := Random(100); - writeln(' 0..99: ',i); + writeln('Случайное целое в диапазоне 0..99: ',i); i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); r := Random; - writeln(' [0,1): ',r); + writeln('Случайное вещественное в диапазоне [0,1): ',r); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Random2.pas b/TestSuite/formatter_tests/input/Random2.pas index 7e06c292a..edb94ebd9 100644 --- a/TestSuite/formatter_tests/input/Random2.pas +++ b/TestSuite/formatter_tests/input/Random2.pas @@ -1,10 +1,10 @@ -// +// Бросание кубиков var k1,k2: integer; begin k1 := Random(1,6); k2 := Random(1,6); - writeln(' : ',k1,' ',k2); - writeln(' : ',k1+k2); + writeln('Очки на кубиках: ',k1,' ',k2); + writeln('Сумма очков: ',k1+k2); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/RandomDiap.pas b/TestSuite/formatter_tests/input/RandomDiap.pas index c12b560b5..7bea343d6 100644 --- a/TestSuite/formatter_tests/input/RandomDiap.pas +++ b/TestSuite/formatter_tests/input/RandomDiap.pas @@ -1,5 +1,5 @@ -// +// Генерация случайного числа в заданном диапазоне begin var i := Random(2,5); - writeln(' 2..5: ',i); + writeln('Случайное целое в диапазоне 2..5: ',i); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/ReadString.pas b/TestSuite/formatter_tests/input/ReadString.pas index d3c73b506..a214b05b6 100644 --- a/TestSuite/formatter_tests/input/ReadString.pas +++ b/TestSuite/formatter_tests/input/ReadString.pas @@ -1,8 +1,8 @@ -// +// Ввод строки var s: string; begin - write(' : '); + write('Введите Ваше имя: '); readln(s); - writeln(', ',s); + writeln('Здравствуйте, ',s); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/RealExtNums.pas b/TestSuite/formatter_tests/input/RealExtNums.pas index 4bf290727..5e099f699 100644 --- a/TestSuite/formatter_tests/input/RealExtNums.pas +++ b/TestSuite/formatter_tests/input/RealExtNums.pas @@ -1,4 +1,4 @@ -// +// При работе с вещественными числами невозможно получить ошибку выполнения begin writeln(1/0); writeln(sqrt(-1)); diff --git a/TestSuite/formatter_tests/input/Rec1.pas b/TestSuite/formatter_tests/input/Rec1.pas index ea1b45732..5b6b049e9 100644 --- a/TestSuite/formatter_tests/input/Rec1.pas +++ b/TestSuite/formatter_tests/input/Rec1.pas @@ -8,16 +8,16 @@ type procedure WritePerson(const p: Person); begin - writelnFormat(': {0} : {1} : {2} : {3}',p.Name,p.Sex,p.Age,p.Weight); + writelnFormat('Фамилия: {0} Пол: {1} Возраст: {2} Вес: {3}',p.Name,p.Sex,p.Age,p.Weight); end; var - p: Person := (Name: ''; Age: 20; Weight: 64; Sex: Male); + p: Person := (Name: 'Иванов'; Age: 20; Weight: 64; Sex: Male); p1: Person; begin - p1 := p; // + p1 := p; // Присваивание записей var p2: Person; - p2.Name := ''; + p2.Name := 'Петрова'; p2.Age := 18; p2.Weight := 50; p2.Sex := Female; @@ -26,7 +26,7 @@ begin var p3: Person; with p3 do begin - Name := ''; + Name := 'Сидоров'; Age := 24; Weight := 80; Sex := Male; diff --git a/TestSuite/formatter_tests/input/Rec2.pas b/TestSuite/formatter_tests/input/Rec2.pas index 26f54af7a..e95d97a88 100644 --- a/TestSuite/formatter_tests/input/Rec2.pas +++ b/TestSuite/formatter_tests/input/Rec2.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSuite/formatter_tests/input/Records.pas b/TestSuite/formatter_tests/input/Records.pas index 26f54af7a..e95d97a88 100644 --- a/TestSuite/formatter_tests/input/Records.pas +++ b/TestSuite/formatter_tests/input/Records.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := Format(': {0} : {1} : {2} : {3}', Name, Sex, Age, Weight); + Result := Format('Имя: {0} Пол: {1} Возраст: {2} Вес: {3}', Name, Sex, Age, Weight); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSuite/formatter_tests/input/Reference.pas b/TestSuite/formatter_tests/input/Reference.pas index 42529cd9b..5dd358cd0 100644 --- a/TestSuite/formatter_tests/input/Reference.pas +++ b/TestSuite/formatter_tests/input/Reference.pas @@ -1,4 +1,4 @@ -// +// Использование ссылок вместо указателей для создания односвязного списка type Node = class data: integer; @@ -10,18 +10,18 @@ type end; end; -// "" , +// Переменная типа "класс" представляет собой ссылку на объект, выделяемый конструктором var first: Node; begin first := nil; - // + // Добавляем в начало односвязного списка first := new Node(3,first); first := new Node(7,first); first := new Node(5,first); - // . ^ - writeln(' ( ): '); + // Вывод односвязного списка. ^ отсутствуют + writeln('Содержимое односвязного списка (использование ссылок вместо указателей): '); var p := first; while p<>nil do begin @@ -29,6 +29,6 @@ begin p := p.next; end; - // - first := nil; // , + // Разрушение односвязного списка + first := nil; // Сборщик мусора соберет память, на которую никто больше не указывает end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Reflection.pas b/TestSuite/formatter_tests/input/Reflection.pas index f9741e92f..99deddba5 100644 --- a/TestSuite/formatter_tests/input/Reflection.pas +++ b/TestSuite/formatter_tests/input/Reflection.pas @@ -1,4 +1,4 @@ -// . DateTime +// Отражение типов. Выводятся все члены типа DateTime uses System,System.Reflection; begin diff --git a/TestSuite/formatter_tests/input/Robot.pas b/TestSuite/formatter_tests/input/Robot.pas index bf1f1f52e..d22241917 100644 --- a/TestSuite/formatter_tests/input/Robot.pas +++ b/TestSuite/formatter_tests/input/Robot.pas @@ -1,50 +1,50 @@ -/// . , . -/// . +///Исполнитель Робот действует на прямоугольном клеточном поле. Между некоторыми клетками, а также по периметру поля находятся стены. +///Основная цель Робота – закрасить указанные клетки и переместиться в конечную клетку. unit Robot; interface -/// n (n=0..10) +/// Установить скорость Робота равной n (n=0..10) procedure Speed(n: integer); -/// +/// Переместить Робота вправо procedure Right; -/// +/// Переместить Робота влево procedure Left; -/// +/// Переместить Робота вверх procedure Up; -/// +/// Переместить Робота вниз procedure Down; -/// +/// Закрасить текущую ячейку procedure Paint; -/// True, - , False +/// Возвращает True, если справа от Робота - свободно, и False в противном случае function FreeFromRight: boolean; -/// True, - , False +/// Возвращает True, если слева от Робота - свободно, и False в противном случае function FreeFromLeft: boolean; -/// True, - , False +/// Возвращает True, если сверху от Робота - свободно, и False в противном случае function FreeFromUp: boolean; -/// True, - , False +/// Возвращает True, если снизу от Робота - свободно, и False в противном случае function FreeFromDown: boolean; -/// True, - , False +/// Возвращает True, если справа от Робота - стена, и False в противном случае function WallFromRight: boolean; -/// True, - , False +/// Возвращает True, если слева от Робота - стена, и False в противном случае function WallFromLeft: boolean; -/// True, - , False +/// Возвращает True, если сверху от Робота - стена, и False в противном случае function WallFromUp: boolean; -/// True, - , False +/// Возвращает True, если снизу от Робота - стена, и False в противном случае function WallFromDown: boolean; -/// True, , False +/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае function CellIsFree: boolean; -/// True, , False +/// Возвращает True, если текущая ячейка закрашена, и False в противном случае function CellIsPainted: boolean; -/// name +/// Вызывать задание с именем name procedure Task(name: string); -/// 9 11 +/// Создать пустое поле размера 9 на 11 клеток procedure StandardField; -/// n m +/// Создать пустое поле размера n на m клеток procedure Field(n,m: integer); -/// +/// Запустить Робота procedure Start; -/// +/// Остановить Робота procedure Stop; var @@ -167,7 +167,7 @@ end; procedure StandardField; var x,y: integer; begin - TaskText(' '); + TaskText('Стандартное поле'); x := 9; y := 7; RobotTaskMaker.Field(x,y); RobotBeginEnd(x div 2 + 1,y div 2 + 1,0,0); @@ -178,7 +178,7 @@ end; procedure Field(n,m: integer); begin - TaskText(' '+IntToStr(n)+'x'+IntToStr(m)); + TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m)); RobotTaskMaker.Field(n,m); RobotBeginEnd(n div 2 + 1,m div 2 + 1,0,0); CorrectFieldBounds; @@ -357,9 +357,9 @@ begin if TasksDictionary.ContainsKey(name) then TasksDictionary[name]() - else RobotError(name+' - ',' '); + else RobotError(name+' - нет такого задания для Робота','Задание отсутствует'); - // - + // Добавил - МА RobField.TaskName := name; // @@ -402,6 +402,6 @@ begin end; initialization - // + //необходимо инициализировать иначе она не восстановится __InitModule; end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/RobotField.pas b/TestSuite/formatter_tests/input/RobotField.pas index 5f2b853c0..388e02c97 100644 --- a/TestSuite/formatter_tests/input/RobotField.pas +++ b/TestSuite/formatter_tests/input/RobotField.pas @@ -41,9 +41,9 @@ type CellSize,DimX,DimY,X0,Y0: integer; procedure Draw0; procedure DrawFieldOnly; - procedure DrawCell(x,y: integer); { } + procedure DrawCell(x,y: integer); { нарисовать одну ячейку } public - // - + // Добавил - МА TaskName: string; // constructor Create(sizex,sizey,cellsize: integer); @@ -56,12 +56,12 @@ type property SizeY: integer read DimY; function IsSolution: boolean; procedure CheckTaskCall; - // + // примитивы для постановщика procedure DrawLastRobotPos; procedure DrawTag(x,y: integer); procedure SetDim(DX,DY,CellSz: integer); - procedure SetPaintMaker(x,y: integer); { - } - procedure SetTag(x,y: integer); { } + procedure SetPaintMaker(x,y: integer); { пометить ячейку как нарисованную - постановщик} + procedure SetTag(x,y: integer); { пометить ячейку как помеченную } procedure SetTagRect(x1,y1,x2,y2: integer); procedure SetFirstRobotPos(x,y: integer); procedure MoveRobotToFirstPos; @@ -70,11 +70,11 @@ type procedure HorizWall(x,y,len: integer); procedure VertWall(x,y,len: integer); procedure TaskText(s: string); - // + // примитивы для выполнителя procedure DrawRobot; procedure MoveRobot(x,y: integer); - procedure SetPaintUser(x,y: integer); { - } - procedure SetRobotPos(x,y: integer); // MoveRobot + procedure SetPaintUser(x,y: integer); { пометить ячейку как нарисованную - выполнитель} + procedure SetRobotPos(x,y: integer); // синоним MoveRobot function WallFromLeft(x,y: integer): boolean; function WallFromRight(x,y: integer): boolean; function WallFromUp(x,y: integer): boolean; @@ -155,7 +155,7 @@ var t: System.Threading.Thread; -//------------ ------------- +//------------ Вспомогательные ------------- procedure SetLabelStepText(s: string); begin labelStep.Text := s; @@ -404,8 +404,8 @@ begin DrawCell(vx,vy); DrawCell(x,y); Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); -// labelStep.Invoke(SetLabelStepText,': ' + IntToStr(movenum)); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); +// labelStep.Invoke(SetLabelStepText,'Шаг: ' + IntToStr(movenum)); end; procedure TRobotField.SetRobotPos(x,y: integer); @@ -482,7 +482,7 @@ end; procedure TRobotField.CheckTaskCall; begin if not TaskIsCalled then - RobotError(' Task ',' '); + RobotError('Процедура Task вызова задания должна быть первой','Выполнение программы прервано'); end; procedure TRobotField.Right; @@ -490,7 +490,7 @@ begin CheckTaskCall; if not WallFromRight then MoveRobot(RobotX+1,RobotY) - else RobotError(': '); + else RobotError('Робот: врезался в правую стену'); end; procedure TRobotField.Left; @@ -498,7 +498,7 @@ begin CheckTaskCall; if not WallFromLeft then MoveRobot(RobotX-1,RobotY) - else RobotError(': '); + else RobotError('Робот: врезался в левую стену'); end; procedure TRobotField.Up; @@ -506,7 +506,7 @@ begin CheckTaskCall; if not WallFromUp then MoveRobot(RobotX,RobotY-1) - else RobotError(': '); + else RobotError('Робот: врезался в верхнюю стену'); end; procedure TRobotField.Down; @@ -514,15 +514,15 @@ begin CheckTaskCall; if not WallFromDown then MoveRobot(RobotX,RobotY+1) - else RobotError(': '); + else RobotError('Робот: врезался в нижнюю стену'); end; procedure TRobotField.Paint; begin CheckTaskCall; Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); -// labelStep.Text := ': ' + IntToStr(movenum); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); +// labelStep.Text := 'Шаг: ' + IntToStr(movenum); SetPaintUser(RobotX,RobotY); DrawCell(RobotX,RobotY); end; @@ -589,14 +589,14 @@ end; procedure TRobotField.Stop; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; buttonStep.Enabled := True; t.Suspend; end; procedure TRobotField.Start; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Стоп (Enter)'; buttonStep.Enabled := False; t.Resume; end; @@ -642,7 +642,7 @@ begin Result := ID; end; -//--------- +//--------- Интерфейс и обработчики procedure LoadIni(var settings: IniSettings); var Ini: TIniFile; begin @@ -710,13 +710,13 @@ begin if t.ThreadState = System.Threading.ThreadState.Suspended then begin robField.StepFlag := False; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Выполняю задание'; robField.Start; end else begin robField.StepFlag := True; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Остановился'; robField.Stop; end; (GraphABCControl as Control).Focus; @@ -727,33 +727,33 @@ begin robField.StepFlag := True; t.Resume; (GraphABCControl as Control).Focus; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Команда выполнена'; end; procedure buttonHelpClick(o: Object; e: EventArgs); begin - MessageBox.Show(' : .., 2002-07 '#10#13#10#13+ - ' :'#10#13+ - ' Right - '#10#13+ - ' Left - '#10#13 - ' Up - '#10#13+ - ' Down - '#10#13 - ' Paint - '#10#13 - ' Speed(n) - n (n=0..10)'#10#13 - ' Stop - '#10#13 - ' Start - '#10#13#10#13 - ', :'#10#13 - ' WallFromRight - '#10#13 - ' WallFromLeft - ;'#10#13 - ' WallFromUp - ;'#10#13 - ' WallFromDown - ;'#10#13 - ' FreeFromRight - ;'#10#13 - ' FreeFromLeft - ;'#10#13 - ' FreeFromUp - ;'#10#13 - ' FreeFromDown - ;'#10#13 - ' CellIsPainted - ;'#10#13 - ' CellIsFree - .'#10#13, - ' - '); + MessageBox.Show('Разработчик исполнителя Робот: Михалкович С.С., 2002-07 '#10#13#10#13+ + 'Команды исполнителя Робот:'#10#13+ + ' Right - вправо'#10#13+ + ' Left - влево'#10#13 + ' Up - вверх'#10#13+ + ' Down - вниз'#10#13 + ' Paint - закрасить текущую клетку'#10#13 + ' Speed(n) - установить скорость n (n=0..10)'#10#13 + ' Stop - остановить Робота'#10#13 + ' Start - запустить Робота'#10#13#10#13 + 'Условия, проверяемые исполнителем Робот:'#10#13 + ' WallFromRight - справа стена'#10#13 + ' WallFromLeft - слева стена;'#10#13 + ' WallFromUp - сверху стена;'#10#13 + ' WallFromDown - снизу стена;'#10#13 + ' FreeFromRight - справа свободно;'#10#13 + ' FreeFromLeft - слева свободно;'#10#13 + ' FreeFromUp - сверху свободно;'#10#13 + ' FreeFromDown - снизу свободно;'#10#13 + ' CellIsPainted - клетка закрашена;'#10#13 + ' CellIsFree - клетка не закрашена.'#10#13, + 'Исполнитель Робот - Справка'); (GraphABCControl as Control).Focus; end; @@ -849,7 +849,7 @@ begin buttonHelp.Location := new Point(359, 18); buttonHelp.Size := new Size(107, 24); buttonHelp.TabStop := false; - buttonHelp.Text := ' (F1)'; + buttonHelp.Text := 'Справка (F1)'; // buttonHelp.UseVisualStyleBackColor := true; // // buttonExit @@ -858,7 +858,7 @@ begin buttonExit.Location := new System.Drawing.Point(241, 18); buttonExit.Size := new System.Drawing.Size(107, 24); buttonExit.TabStop := false; - buttonExit.Text := ' (Esc)'; + buttonExit.Text := 'Выход (Esc)'; // buttonExit.UseVisualStyleBackColor := true; // // buttonStep @@ -867,7 +867,7 @@ begin buttonStep.Location := new Point(123, 18); buttonStep.Size := new Size(107, 24); buttonStep.TabStop := false; - buttonStep.Text := ' (Space)'; + buttonStep.Text := 'Шаг (Space)'; // buttonStep.UseVisualStyleBackColor := true; // // buttonStart @@ -876,7 +876,7 @@ begin buttonStart.Location := new Point(5, 18); buttonStart.Size := new Size(107, 24); buttonStart.TabStop := false; - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; // buttonStart.UseVisualStyleBackColor := true; // // tableLayoutPanelBottom @@ -902,7 +902,7 @@ begin labelExState.Location := new Point(5, 2); labelExState.Margin := new Padding(3, 0, 3, 3); labelExState.Size := new Size(453, 15); - labelExState.Text := ': '; + labelExState.Text := 'Робот: Готов'; labelExState.TextAlign := ContentAlignment.MiddleCenter; // // groupBoxExState @@ -934,7 +934,7 @@ begin labelState.Location := new Point(6, 54); labelState.Margin := new Padding(0); labelState.Size := new Size(83, 17); - labelState.Text := ':'; + labelState.Text := 'Состояние:'; // // labelStep // @@ -943,7 +943,7 @@ begin labelStep.ForeColor := System.Drawing.Color.Black; labelStep.Location := new Point(130, 54); labelStep.Size := new Size(66, 18); - labelStep.Text := ': 0'; + labelStep.Text := 'Шаг: 0'; labelStep.TextAlign := ContentAlignment.MiddleLeft; // // trackBarSpeed @@ -960,7 +960,7 @@ begin labelSpeed.Location := new Point(6, 16); labelSpeed.Margin := new Padding(0); labelSpeed.Size := new Size(73, 17); - labelSpeed.Text := ':'; + labelSpeed.Text := 'Скорость:'; // // tableLayoutPanelTop // @@ -986,7 +986,7 @@ begin labelZad.Location := new Point(6, 3); labelZad.Margin := new Padding(4, 1, 3, 0); labelZad.Size := new Size(668, 14); - labelZad.Text := ''; + labelZad.Text := 'Задание'; labelZad.TextAlign := ContentAlignment.MiddleLeft; // // ExecutorForm @@ -996,7 +996,7 @@ begin MainForm.Controls.Add(tableLayoutPanelTop); MainForm.Controls.Add(BottomPanel); MainForm.MinimumSize := new Size(687, 240); - MainForm.Text := ' '; + MainForm.Text := 'Исполнитель Робот'; BottomPanel.ResumeLayout(false); panelBottomLeft.ResumeLayout(false); tableLayoutPanelBottom.ResumeLayout(false); @@ -1047,7 +1047,7 @@ begin MainForm.Bounds := rec; end; -// - +// Добавил - МА procedure ResRB(TaskName: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'resrb'; // @@ -1057,21 +1057,21 @@ begin buttonStart.Enabled := False; buttonStep.Enabled := False; if (robField.DimX*robField.DimY=0) then - RobotError(': Task',' ') + RobotError('Робот: Не вызвана процедура Task','Задание отсутствует') else if robField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Text := ': '; - // - + labelExState.Text := 'Робот: Задание выполнено'; + // Добавил - МА try ResRB(robField.TaskName); except end; // end - else labelExState.Text := ': , '; + else labelExState.Text := 'Робот: Работа окончена, задание не выполнено'; end; var @@ -1148,14 +1148,14 @@ finalization {buttonStart.Enabled := False; buttonStep.Enabled := False; if (robField.DimX*robField.DimY=0) then - RobotError(': Task',' ') + RobotError('Робот: Не вызвана процедура Task','Задание отсутствует') else if robField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Задание выполнено'; end - else labelExState.Text := ': , ';} + else labelExState.Text := 'Робот: Работа окончена, задание не выполнено';} __FinalizeModule; end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/RobotZadan.pas b/TestSuite/formatter_tests/input/RobotZadan.pas index 11629d802..f4eb6baac 100644 --- a/TestSuite/formatter_tests/input/RobotZadan.pas +++ b/TestSuite/formatter_tests/input/RobotZadan.pas @@ -181,7 +181,7 @@ end; procedure a1; begin - TaskText(' a1. '); + TaskText('Задание a1. Закрасить помеченные клетки'); Field(7,4); RobotBeginEnd(2,2,1,1); HorizontalWall(1,1,5); @@ -191,7 +191,7 @@ end; procedure a2; var n: integer; begin - TaskText(' a2. '); + TaskText('Задание a2. Закрасить помеченные клетки'); n:=3; Field(n,n); RobotBeginEnd(1,1,1,1); @@ -203,7 +203,7 @@ end; procedure a3; begin - TaskText(' a3. '); + TaskText('Задание a3. Закрасить помеченные клетки'); Field(4,2); RobotBeginEnd(1,1,4,1); TagRect(1,1,4,2); @@ -214,7 +214,7 @@ end; procedure a4; begin - TaskText(' a4. '); + TaskText('Задание a4. Закрасить помеченные клетки'); Field(4,3); RobotBeginEnd(1,3,1,3); Tag(2,3);Tag(3,3);Tag(4,3); @@ -225,14 +225,14 @@ end; procedure c1; begin - TaskText(' c1. '); + TaskText('Задание c1. Дойти до правой клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); end; procedure c2; begin - TaskText(' c2. '); + TaskText('Задание c2. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(1,1,10,1); @@ -240,7 +240,7 @@ end; procedure c3; begin - TaskText(' c3. '); + TaskText('Задание c3. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(2,1,11,1); @@ -248,7 +248,7 @@ end; procedure c4; begin - TaskText(' c4. '); + TaskText('Задание c4. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(1,1,11,1); @@ -257,7 +257,7 @@ end; procedure c5; var i: integer; begin - TaskText(' c5. '); + TaskText('Задание c5. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(1,1,11,11); for i:=1 to 10 do @@ -267,7 +267,7 @@ end; procedure c6; var i: integer; begin - TaskText(' c6. '); + TaskText('Задание c6. Закрасить помеченные клетки'); Field(17,1); RobotBeginEnd(17,1,17,1); for i:=1 to 8 do @@ -277,7 +277,7 @@ end; procedure c7; var i: integer; begin - TaskText(' c7. '); + TaskText('Задание c7. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(2,1,11,2); @@ -291,7 +291,7 @@ end; procedure c8; var i: integer; begin - TaskText(' c8. '); + TaskText('Задание c8. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(1,1,11,1); @@ -302,7 +302,7 @@ end; procedure c9; var i: integer; begin - TaskText(' c9. '); + TaskText('Задание c9. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,2,11,2); for i:=1 to 5 do @@ -314,7 +314,7 @@ end; procedure c10; begin - TaskText(' c10. '); + TaskText('Задание c10. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,1,1,2); TagRect(1,1,10,2); @@ -323,7 +323,7 @@ end; procedure c11; begin - TaskText(' c11. '); + TaskText('Задание c11. Закрасить помеченные клетки'); Field(10,2); RobotBeginEnd(10,1,10,2); HorizontalWall(2,1,9); @@ -332,7 +332,7 @@ end; procedure c12; begin - TaskText(' c12. '); + TaskText('Задание c12. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(6,1,6,1); TagRect(1,1,11,1); @@ -340,7 +340,7 @@ end; procedure c13; begin - TaskText(' c13. '); + TaskText('Задание c13. Закрасить помеченные клетки'); Field(9,9); RobotBeginEnd(9,1,9,1); TagRect(1,1,9,1); @@ -351,7 +351,7 @@ end; procedure c14; begin - TaskText(' c14. '); + TaskText('Задание c14. Закрасить помеченные клетки'); Field(9,9); RobotBeginEnd(1,5,1,5); Tag(5,1); Tag(4,2); Tag(3,3); Tag(2,4); @@ -362,7 +362,7 @@ end; procedure c15; begin - TaskText(' c15. '); + TaskText('Задание c15. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(6,6,6,6); TagRect(6,1,6,11); @@ -372,7 +372,7 @@ end; procedure c16; var i: integer; begin - TaskText(' c16. '); + TaskText('Задание c16. Закрасить помеченные клетки'); Field(12,3); RobotBeginEnd(2,2,2,2); TagRect(2,2,11,2); @@ -389,7 +389,7 @@ end; procedure if1; var r: integer; begin - TaskText(' if1. '); + TaskText('Задание if1. Обойти препятствие и закрасить клетку'); Field(5,5); RobotBeginEnd(2,3,4,3); Tag(4,3); @@ -410,7 +410,7 @@ end; procedure if2; var r1,r2,r3,r4: integer; begin - TaskText(' if2. ( , , )'); + TaskText('Задание if2. Закрасить клетки у стен (стены могут быть независимо слева, справа, сверху и снизу)'); Field(5,5); RobotBeginEnd(3,3,3,3); r1:=random(2); @@ -443,7 +443,7 @@ end; procedure if3; var n,r: integer; begin - TaskText(' if3. ( )'); + TaskText('Задание if3. Закрасить клетку в противоположном углу (Робот может находиться в любом из углов)'); n:=2; Field(n,n); r:=random(4); @@ -476,7 +476,7 @@ end; procedure if4; var r: integer; begin - TaskText(' if4. , ( , , )'); + TaskText('Задание if4. Закрасить клетку, противоположную стене (стена может располагаться слева, справа, сверху или снизу)'); Field(5,5); RobotBegin(3,3); r:=random(4); @@ -509,7 +509,7 @@ end; procedure if5; var r: integer; begin - TaskText(' if5. ( , , )'); + TaskText('Задание if5. Закрасить клетки в зависимости от наличия стены (стена может располагаться слева, справа, сверху или снизу)'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -542,7 +542,7 @@ end; procedure if6; var r: integer; begin - TaskText(' if6. , ( , , )'); + TaskText('Задание if6. Закрасить клетку, противоположную закрашенной (закрашенная клетка может находиться слева, справа, сверху или снизу)'); Field(5,5); RobotBegin(3,3); r:=random(4); @@ -575,7 +575,7 @@ end; procedure if7; var r: integer; begin - TaskText(' if7. , '); + TaskText('Задание if7. Закрасить клетку, противоположную углу'); Field(4,4); r:=random(4); if r=0 then @@ -611,7 +611,7 @@ end; procedure if8; var r1,r2: integer; begin - TaskText(' if8. , if'); + TaskText('Задание if8. Закрасить клетки, используя вложенные операторы if'); Field(6,6); RobotBeginEnd(2,2,3,3); r1:=random(2); @@ -653,7 +653,7 @@ end; procedure if9; var r: integer; begin - TaskText(' if9. '); + TaskText('Задание if9. Закрасить клетки в зависимости от наличия стен слева и справа'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -683,7 +683,7 @@ end; procedure if10; var r: integer; begin - TaskText(' if10. '); + TaskText('Задание if10. Закрасить клетки в зависимости от наличия закрашенных клеток слева и справа'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -710,7 +710,7 @@ end; procedure if11; var r: integer; begin - TaskText(' if11. '); + TaskText('Задание if11. Закрасить первую незакрашенную клетку справа'); Field(5,5); RobotBeginEnd(2,2,4,2); r:=random(3); @@ -734,7 +734,7 @@ end; procedure w1; var n: integer; begin - TaskText(' w1. '); + TaskText('Задание w1. Пройти коридор переменной длины'); n:=random(7)+8; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -743,7 +743,7 @@ end; procedure w2; var n: integer; begin - TaskText(' w2. '); + TaskText('Задание w2. Закрасить коридор переменной длины'); n:=random(7)+8; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -753,7 +753,7 @@ end; procedure w3; var n: integer; begin - TaskText(' w3. '); + TaskText('Задание w3. Дойти до конца стены переменной длины'); n:=random(8)+3; Field(12,3); RobotBeginEnd(1,1,n+1,1); @@ -763,7 +763,7 @@ end; procedure w4; var n,i: integer; begin - TaskText(' w4. '); + TaskText('Задание w4. Дойти до конца закрашенного ряда переменной длины'); n:=random(7)+3; Field(10,3); RobotBeginEnd(2,2,n+1,2); @@ -774,7 +774,7 @@ end; procedure w5; var n,m,i,j: integer; begin - TaskText(' w5. '); + TaskText('Задание w5. Дойти до правого нижнего угла закрашенного прямоугольника переменного размера'); n:=random(7)+3; m:=random(6)+3; Field(10,9); @@ -787,7 +787,7 @@ end; procedure w6; var n,m: integer; begin - TaskText(' w6. '); + TaskText('Задание w6. Найти в стене проход и попасть в правый нижний угол'); n:=random(7)+2; m:=random(12)+2; Field(15,10); @@ -799,7 +799,7 @@ end; procedure w7; var n,m,k: integer; begin - TaskText(' w7. . , - '); + TaskText('Задание w7. Дойти до третьей закрашенной клетки. После первой закрашенной клетки надо идти вверх, после второй - вправо'); n:=random(7)+2; m:=random(7)+1; k:=random(7)+1; @@ -813,7 +813,7 @@ end; procedure w8; var n1,n2,len: integer; begin - TaskText(' w8. '); + TaskText('Задание w8. Закрасить все клетки над стеной переменной длины'); n1:=random(3)+2; n2:=n1+random(4); len:=random(5)+4; @@ -826,7 +826,7 @@ end; procedure w9; var n: integer; begin - TaskText(' w9. '); + TaskText('Задание w9. Перепрыгнуть стену с закрашиванием'); n:=random(7)+2; Field(15,10); RobotBeginEnd(7,10,8,10); @@ -837,7 +837,7 @@ end; procedure w10; var n1,n2,r1,r2: integer; begin - TaskText(' w10. '); + TaskText('Задание w10. Обойти препятствия'); n1:=random(7)+2; n2:=random(7)+2; r1:=4+random(3); @@ -853,7 +853,7 @@ end; procedure w11; var n1,len: integer; begin - TaskText(' w11. '); + TaskText('Задание w11. Закрасить все клетки вокруг стены'); n1:=random(3)+3; len:=random(5)+4; Field(15,5); @@ -865,7 +865,7 @@ end; procedure w12; var n1,n2,len1,len2: integer; begin - TaskText(' w12. '); + TaskText('Задание w12. Закрасить все клетки вокруг прямоугольника'); n1:=random(3)+3; len1:=random(5)+4; n2:=random(3)+3; @@ -885,7 +885,7 @@ end; procedure w13; var n,i,m: integer; begin - TaskText(' w13. , '); + TaskText('Задание w13. Подняться до клетки, имеющей проход налево или проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); @@ -909,7 +909,7 @@ end; procedure w14; var n,m,i: integer; begin - TaskText(' w14. , '); + TaskText('Задание w14. Подняться до клетки, имеющей проход налево и проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); VerticalWall(3,9,2); @@ -934,7 +934,7 @@ end; procedure w15; var n,z,i: integer; begin - TaskText(' w15. , '); + TaskText('Задание w15. Закрасить клетку под первой закрашенной клеткой, под которой свободно'); Field(15,5); RobotBegin(2,3); HorizontalWall(2,3,2); @@ -963,7 +963,7 @@ end; procedure w16; var n,i: integer; begin - TaskText(' w16. '); + TaskText('Задание w16. Идти до конца забора переменной длины'); n:=random(6)+8; Field(15,5); RobotBeginEnd(2,3,n+1,3); @@ -974,7 +974,7 @@ end; procedure w17; var n,i: integer; begin - TaskText(' w17. '); + TaskText('Задание w17. Идти до конца забора переменной длины'); n:=random(6)+1; Field(15,5); RobotBeginEnd(2,3,2*n+1,3); @@ -985,7 +985,7 @@ end; procedure cif1; var n,i,r: integer; begin - TaskText(' cif1. '); + TaskText('Задание cif1. Закрасить все клетки под стенами'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1004,7 +1004,7 @@ end; procedure cif2; var n,i,r: integer; begin - TaskText(' cif2. '); + TaskText('Задание cif2. Закрасить помеченные клетки'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1028,7 +1028,7 @@ end; procedure cif3; var n,i,r: integer; begin - TaskText(' cif3. '); + TaskText('Задание cif3. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1052,7 +1052,7 @@ end; procedure cif4; var n,i,r1,r2: integer; begin - TaskText(' cif4. '); + TaskText('Задание cif4. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1073,7 +1073,7 @@ end; procedure cif5; var n,i,r1,r2: integer; begin - TaskText(' cif5. '); + TaskText('Задание cif5. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1094,7 +1094,7 @@ end; procedure cif6; var n,i,r1,r2: integer; begin - TaskText(' cif6. '); + TaskText('Задание cif6. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1114,7 +1114,7 @@ end; procedure cif7; var n,i,r1,r2: integer; begin - TaskText(' cif7. , '); + TaskText('Задание cif7. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1135,7 +1135,7 @@ end; procedure cif8; var n,i,r1,r2: integer; begin - TaskText(' cif8. , '); + TaskText('Задание cif8. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1159,7 +1159,7 @@ end; procedure cif9; var n,i,r1,r2: integer; begin - TaskText(' cif9. , '); + TaskText('Задание cif9. Закрасить помеченные клетки, используя три условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1183,7 +1183,7 @@ end; procedure cif10; var n,i,r1,r2,r3: integer; begin - TaskText(' cif10. '); + TaskText('Задание cif10. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1207,7 +1207,7 @@ end; procedure cif11; var n,i,r1,r2,r3: integer; begin - TaskText(' cif11. , and'); + TaskText('Задание cif11. Закрасить помеченные клетки, используя в условии две операции and'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1231,7 +1231,7 @@ end; procedure cif12; var n,i,r1,r2,r3: integer; begin - TaskText(' cif12. , and or'); + TaskText('Задание cif12. Закрасить помеченные клетки, используя в условии операции and и or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1255,7 +1255,7 @@ end; procedure cif13; var n,i,r2,r3: integer; begin - TaskText(' cif13. , and or'); + TaskText('Задание cif13. Закрасить помеченные клетки, используя в условии две операции and и одну or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1276,7 +1276,7 @@ end; procedure cif14; var n,i,r2,r3: integer; begin - TaskText(' cif14. , '); + TaskText('Задание cif14. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; Field(n,4); RobotBeginEnd(1,2,n-1,2); @@ -1298,7 +1298,7 @@ end; procedure cif15; var n,i,r2,r3: integer; begin - TaskText(' cif15. , '); + TaskText('Задание cif15. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1320,7 +1320,7 @@ end; procedure cif16; var n: integer; begin - TaskText(' cif16. '); + TaskText('Задание cif16. Перейти в противоположный угол'); Field(9,9); n:=random(4); if n=0 then @@ -1336,7 +1336,7 @@ end; procedure cif17; var n,m,s: integer; begin - TaskText(' cif17. ( )'); + TaskText('Задание cif17. Дойти до конца тупика переменного размера (вертикальный коридор может сворачивать направо или налево)'); Field(15,10); RobotBeginEnd(8,10,8,1); n:=random(9)+2; @@ -1365,7 +1365,7 @@ end; procedure cif18; var n,c,i: integer; begin - TaskText(' cif18. '); + TaskText('Задание cif18. Перейти в конец более короткого ряда'); Field(15,4); RobotBegin(2,2); c:=random(2); @@ -1389,7 +1389,7 @@ end; procedure cif19; var n1,n2: integer; begin - TaskText(' cif19. '); + TaskText('Задание cif19. Перейти в конец более короткой стены'); Field(15,4); RobotBegin(2,3); n1:=random(9)+4; @@ -1406,7 +1406,7 @@ end; procedure cif20; var n1,n2: integer; begin - TaskText(' cif20. '); + TaskText('Задание cif20. Перейти в конец более длинной стены'); Field(15,4); RobotBegin(2,3); n1:=random(9)+4; @@ -1423,7 +1423,7 @@ end; procedure cif21; var n,m,c: integer; begin - TaskText(' cif21. '); + TaskText('Задание cif21. Перейти на вторую закрашенную клетку'); Field(15,8); RobotBegin(8,2); c:=random(2); @@ -1446,7 +1446,7 @@ end; procedure cif22; var n1,n2,n,m,c: integer; begin - TaskText(' cif22. '); + TaskText('Задание cif22. Найти выход и переместиться в левую верхнюю клетку поля '); Field(15,5); n1:=random(3)+2; n2:=random(10)+5; @@ -1486,7 +1486,7 @@ end; procedure count1; var n: integer; begin - TaskText(' count1. , . -'); + TaskText('Задание count1. Дойти до правой стены, закрасить клетку и вернуться. Использовать переменную-счетчик'); Field(10,5); n:=random(7)+3; RobotBeginEnd(n,3,n,3); @@ -1496,7 +1496,7 @@ end; procedure count2; var n1,n2,m: integer; begin - TaskText(' count2. . '); + TaskText('Задание count2. Закрасить правый нижний угол и вернуться. Использовать два счетчика'); m:=8; Field(m,m); n1:=random(6)+2; @@ -1508,7 +1508,7 @@ end; procedure count3; var n1,n2,m,t,i: integer; begin - TaskText(' count3. , '); + TaskText('Задание count3. Переместить Робота в клетку, симметричную относительно диагонали'); m:=10; Field(m,m); n1:=random(7)+2; @@ -1529,7 +1529,7 @@ end; procedure count4; var n1,n2: integer; begin - TaskText(' count4. '); + TaskText('Задание count4. Обойти стену переменной длины'); Field(10,4); n1:=random(5)+4; n2:=random(4)+1; @@ -1540,7 +1540,7 @@ end; procedure count5; var n,m,n1,m1: integer; begin - TaskText(' count5. '); + TaskText('Задание count5. Закрасить периметр и вернуться назад'); n:=random(3)+8; m:=random(3)+8; Field(n,m); @@ -1556,7 +1556,7 @@ end; procedure count6; var n,m: integer; begin - TaskText(' count6. '); + TaskText('Задание count6. Переместиться к ближайшей стене'); Field(15,5); RobotBegin(8,3); n:=random(5)+2; @@ -1573,7 +1573,7 @@ end; procedure count7; var n,l,r: integer; begin - TaskText(' count7. ( )'); + TaskText('Задание count7. Обойти стену переменной длины (перегородка нахоится слева или справа)'); Field(16,4); n:=random(3)+2; l:=random(12)+1; @@ -1589,7 +1589,7 @@ end; procedure count8; var i,r,cc: integer; begin - TaskText(' count8. '); + TaskText('Задание count8. Остановиться на пятой закрашенной клетке'); Field(21,3); RobotBeginEnd(2,2,1,2); cc:=0; @@ -1616,7 +1616,7 @@ end; procedure count9; var cc,i,r: integer; begin - TaskText(' count9. '); + TaskText('Задание count9. Остановиться на третьей закрашенной подряд клетке'); Field(20,3); RobotBeginEnd(2,2,1,2); cc:=0; @@ -1646,7 +1646,7 @@ end; procedure count10; var n,m: integer; begin - TaskText(' count10. , '); + TaskText('Задание count10. Закрасить клетки до конца нижней стены, но не менее пяти'); Field(11,3); n:=random(9)+1; if n<5 then @@ -1660,7 +1660,7 @@ end; procedure count11; var n: integer; begin - TaskText(' count11. 4, '); + TaskText('Задание count11. Если длина тупика больше 4, то закрасить его первую клетку'); Field(11,3); n:=random(9)+1; RobotBeginEnd(1,2,2,2); @@ -1674,7 +1674,7 @@ end; procedure count12; var n,i: integer; begin - TaskText(' count12. '); + TaskText('Задание count12. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1685,7 +1685,7 @@ end; procedure count13; var n,i: integer; begin - TaskText(' count13. '); + TaskText('Задание count13. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1696,7 +1696,7 @@ end; procedure count14; var n,i: integer; begin - TaskText(' count14. '); + TaskText('Задание count14. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1707,7 +1707,7 @@ end; procedure count15; var n,i: integer; begin - TaskText(' count15. '); + TaskText('Задание count15. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1718,7 +1718,7 @@ end; procedure count16; var n,i,f,z: integer; begin - TaskText(' count16. '); + TaskText('Задание count16. Закрасить все нечетные пролеты между закрашенными клетками'); Field(25,3); RobotBeginEnd(2,2,25,2); n:=2+random(5); @@ -1748,7 +1748,7 @@ end; procedure count17; var n,i,f: integer; begin - TaskText(' count17. , '); + TaskText('Задание count17. Остановиться на первой клетке, нарушающей закономерность'); Field(25,3); n:=random(20)+4; RobotBeginEnd(2,2,n,2); @@ -1769,7 +1769,7 @@ end; procedure cc1; var i: integer; begin - TaskText(' cc1. , '); + TaskText('Задание cc1. Закрасить помеченные клетки, используя вложенные циклы'); Field(31,7); RobotBeginEnd(1,1,31,7); for i:=1 to 6 do @@ -1779,7 +1779,7 @@ end; procedure cc2; var a,b,i: integer; begin - TaskText(' cc2. , '); + TaskText('Задание cc2. Закрасить помеченные клетки, используя вложенные циклы'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; @@ -1795,7 +1795,7 @@ end; procedure cc3; var a,b,i: integer; begin - TaskText(' cc3. , downto'); + TaskText('Задание cc3. Закрасить помеченные клетки, используя вложенный цикл с downto'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; @@ -1811,7 +1811,7 @@ end; procedure cc4; var i: integer; begin - TaskText(' cc4. , '); + TaskText('Задание cc4. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(11,10); RobotBeginEnd(1,1,1,10); TagRect(1,1,11,9); @@ -1822,7 +1822,7 @@ end; procedure cc5; var i: integer; begin - TaskText(' cc5. , '); + TaskText('Задание cc5. Пройти лабиринт, используя во внешнем цикле два вложенных цикла'); Field(14,9); RobotBeginEnd(1,1,1,9); for i:=1 to 4 do @@ -1835,7 +1835,7 @@ end; procedure cc6; var i,n,j: integer; begin - TaskText(' cc6. '); + TaskText('Задание cc6. Закрасить помеченные клетки'); n:=10; Field(20,n); RobotBeginEnd(1,n,20,n); j:=1; @@ -1849,7 +1849,7 @@ end; procedure cc7; var i: integer; begin - TaskText(' cc7. , '); + TaskText('Задание cc7. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(1,1,1,10); for i:=1 to 9 do @@ -1859,7 +1859,7 @@ end; procedure cc8; var i: integer; begin - TaskText(' cc8. , downto'); + TaskText('Задание cc8. Закрасить помеченные клетки, используя цикл с downto'); Field(10,10); RobotBeginEnd(1,1,1,10); for i:=1 to 9 do @@ -1869,7 +1869,7 @@ end; procedure cc9; var i: integer; begin - TaskText(' cc9. , '); + TaskText('Задание cc9. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(10,1,10,10); TagRect(10,1,10,9); @@ -1883,7 +1883,7 @@ end; procedure cc10; var i: integer; begin - TaskText(' cc10. '); + TaskText('Задание cc10. Закрасить помеченные клетки'); Field(15,8); RobotBeginEnd(1,1,1,8); for i:=1 to 7 do @@ -1893,7 +1893,7 @@ end; procedure cc11; var i: integer; begin - TaskText(' cc11. '); + TaskText('Задание cc11. Закрасить помеченные клетки'); Field(14,8); RobotBeginEnd(1,1,1,8); for i:=1 to 7 do @@ -1903,7 +1903,7 @@ end; procedure cc12; var i,p: integer; begin - TaskText(' cc12. '); + TaskText('Задание cc12. Закрасить помеченные клетки'); Field(33,7); RobotBeginEnd(1,1,1,7); p:=1; @@ -1917,7 +1917,7 @@ end; procedure cc13; var i: integer; begin - TaskText(' cc13. '); + TaskText('Задание cc13. Закрасить помеченные клетки'); Field(14,9); RobotBeginEnd(1,1,9,9); for i:=1 to 4 do @@ -1931,7 +1931,7 @@ end; procedure cc14; var i: integer; begin - TaskText(' cc14. '); + TaskText('Задание cc14. Пройти лабиринт'); Field(14,9); RobotBeginEnd(1,1,5,9); for i:=1 to 4 do @@ -1946,7 +1946,7 @@ end; procedure cc15; var i,n: integer; begin - TaskText(' cc15. '); + TaskText('Задание cc15. Закрасить помеченные клетки'); n:=8; Field(15,9); RobotBeginEnd(n,2,n,9); @@ -1957,7 +1957,7 @@ end; procedure cc16; var i,k,j: integer; begin - TaskText(' cc16. , '); + TaskText('Задание cc16. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(22,7); RobotBeginEnd(2,6,22,6); j:=2; @@ -1972,7 +1972,7 @@ end; procedure cc17; var i,j,k: integer; begin - TaskText(' cc17. , '); + TaskText('Задание cc17. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(29,8); RobotBeginEnd(2,7,28,7); j:=2; @@ -1990,7 +1990,7 @@ end; procedure cc18; var i: integer; begin - TaskText(' cc18. , while for'); + TaskText('Задание cc18. Закрасить помеченные клетки, используя цикл while внутри цикла for'); Field(12,7); RobotBeginEnd(1,1,1,7); for i:=1 to 8 do HorizontalWall(2,i,12); @@ -2006,7 +2006,7 @@ end; procedure cc19; var i,n: integer; begin - TaskText(' cc19. . '); + TaskText('Задание cc19. Закрасить помеченные клетки. Высота поля может меняться'); n:=random(4)+6; Field(11,n); RobotBeginEnd(1,1,1,n); @@ -2020,7 +2020,7 @@ end; procedure mix1; var n1,n2,m: integer; begin - TaskText(' mix1. '); + TaskText('Задание mix1. Закрасить прямоугольник переменного размера'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2032,7 +2032,7 @@ end; procedure mix2; var n1,n2,m,i,j,ij: integer; begin - TaskText(' mix2. '); + TaskText('Задание mix2. Закрасить в шахматном порядке прямоугольник переменного размера'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2052,7 +2052,7 @@ end; procedure mix3; var n1,n2,m,l: integer; begin - TaskText(' mix3. , '); + TaskText('Задание mix3. Закрасить квадрат, предварительно определив его размер'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2066,7 +2066,7 @@ end; procedure mix4; var n1,n2,m,m1,m2: integer; begin - TaskText(' mix4. '); + TaskText('Задание mix4. Найти закрашенную клетку'); m:=10; Field(m,m); n1:=random(m-2)+2; @@ -2082,7 +2082,7 @@ end; procedure mix5; var n1,n2,m,m1,m2: integer; begin - TaskText(' mix5. , '); + TaskText('Задание mix5. Найти закрашенную клетку и закрасить клетки, находящиеся с ней на одной вертикали и горизонтали'); m:=10; Field(m,m); n1:=random(m-2)+2; @@ -2100,7 +2100,7 @@ end; procedure mix6; var i,c: integer; begin - TaskText(' mix6. , '); + TaskText('Задание mix6. Закрасить те клетки у правой стены, для которых закрашены клетки левой стены'); Field(11,11); RobotBeginEnd(1,1,1,11); for i:=1 to 10 do @@ -2117,7 +2117,7 @@ end; procedure mix7; var i,c1,c2: integer; begin - TaskText(' mix7. , '); + TaskText('Задание mix7. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки'); Field(11,11); RobotBeginEnd(1,1,1,11); for i:=1 to 10 do @@ -2135,7 +2135,7 @@ end; procedure mix8; var i,c1,c2,c3,c4: integer; begin - TaskText(' mix8. , '); + TaskText('Задание mix8. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки и еще ровно одна'); Field(11,15); RobotBeginEnd(1,1,1,15); for i:=1 to 14 do @@ -2160,7 +2160,7 @@ end; procedure mix9; var n1,n2,m,l1,l2: integer; begin - TaskText(' mix9. , , . '); + TaskText('Задание mix9. Закрасить прямоугольник, предварительно определив его размер, и вернуться в начальную позицию. Закрашенная клетка находится левее и ниже Робота'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2175,7 +2175,7 @@ end; procedure mix10; var n,n1,n2,m,l1,l2: integer; begin - TaskText(' mix10. , , '); + TaskText('Задание mix10. Закрасить прямоугольник, предварительно определив его размер, и вернуться в начальную позицию'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2213,7 +2213,7 @@ procedure p1; TagRect(x,y-1,x,y+1); end; begin - TaskText(' p1. , Cross'); + TaskText('Задание p1. Закрасить помеченные клетки, составив процедуру Cross'); Field(10,10); RobotBeginEnd(3,7,5,3); KresTag(3,7); @@ -2229,7 +2229,7 @@ procedure p2; TagRect(3*i-1,2,3*i,3); end; begin - TaskText(' p2. , Square2'); + TaskText('Задание p2. Закрасить помеченные клетки, составив процедуру Square2'); Field(19,4); RobotBeginEnd(2,2,17,2); my(6); @@ -2238,7 +2238,7 @@ end; procedure p3; var i: integer; begin - TaskText(' p3. , Square2'); + TaskText('Задание p3. Закрасить помеченные клетки, используя процедуру Square2'); Field(12,12); RobotBeginEnd(11,11,1,1); for i:=1 to 6 do @@ -2247,7 +2247,7 @@ end; procedure p4; begin - TaskText(' p4. , Square2. Square4'); + TaskText('Задание p4. Закрасить помеченные клетки, используя процедуру Square2. Оформить полученный алгоритм в виде процедуры Square4'); Field(6,6); RobotBeginEnd(2,2,2,2); TagRect(2,2,5,5); @@ -2255,7 +2255,7 @@ end; procedure p5; begin - TaskText(' p5. , Square4'); + TaskText('Задание p5. Закрасить помеченные клетки, используя процедуру Square4'); Field(10,10); RobotBeginEnd(2,2,2,2); TagRect(2,2,9,9); @@ -2264,7 +2264,7 @@ end; procedure p6; var i: integer; begin - TaskText(' p6. , Row, '); + TaskText('Задание p6. Закрасить помеченные клетки, составив процедуру Row, в которой Робот закрашивает ряд и возвращается назад'); Field(9,9); RobotBeginEnd(1,2,1,8); for i:=1 to 4 do @@ -2274,7 +2274,7 @@ end; procedure p7; var i: integer; begin - TaskText(' p7. , Column, '); + TaskText('Задание p7. Закрасить помеченные клетки, составив процедуру Column, в которой Робот закрашивает колонку и возвращается назад'); Field(9,9); RobotBeginEnd(2,1,8,1); for i:=1 to 4 do @@ -2284,7 +2284,7 @@ end; procedure p8; var i: integer; begin - TaskText(' p8. , Row Column'); + TaskText('Задание p8. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(9,9); RobotBeginEnd(1,2,8,1); for i:=1 to 4 do @@ -2297,7 +2297,7 @@ end; procedure p9; var i,j: integer; begin - TaskText(' p9. , Row Column'); + TaskText('Задание p9. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(15,15); RobotBeginEnd(2,2,6,6); i:=2; @@ -2311,7 +2311,7 @@ end; procedure p10; var i,j: integer; begin - TaskText(' p10. , Contour'); + TaskText('Задание p10. Закрасить помеченные клетки, составив процедуру Contour'); Field(31,7); RobotBeginEnd(2,2,26,2); i:=2; @@ -2328,7 +2328,7 @@ end; procedure p11; var i,j: integer; begin - TaskText(' p11. , Punktir'); + TaskText('Задание p11. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); for i:=1 to 7 do @@ -2339,7 +2339,7 @@ end; procedure p12; var i,j: integer; begin - TaskText(' p12. , Punktir'); + TaskText('Задание p12. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); for i:=1 to 7 do @@ -2353,7 +2353,7 @@ end; procedure p13; var i,j: integer; begin - TaskText(' p13. , Punktir'); + TaskText('Задание p13. Закрасить помеченные клетки, используя процедуру Punktir'); Field(17,14); RobotBeginEnd(2,2,2,14); for i:=1 to 5 do @@ -2368,7 +2368,7 @@ end; procedure p14; var i: integer; begin - TaskText(' p14. , Row1 Row2 '); + TaskText('Задание p14. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); Field(17,15); RobotBeginEnd(2,2,2,14); for i:=1 to 8 do TagRect(2*i,2,2*i,13); @@ -2379,7 +2379,7 @@ end; procedure p15; var i,j,n: integer; begin - TaskText(' p15. , Row1 Row2 '); + TaskText('Задание p15. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); n:=14; Field(25,n+1); RobotBeginEnd(2,2,2,n); @@ -2397,7 +2397,7 @@ end; procedure pp1; var i: integer; begin - TaskText(' pp1. , RightN(n) LeftN(n)'); + TaskText('Задание pp1. Закрасить помеченные клетки, составив процедуры с параметром RightN(n) и LeftN(n)'); Field(12,7); RobotBeginEnd(1,1,1,7); for i:=1 to 8 do @@ -2407,7 +2407,7 @@ end; procedure pp2; begin - TaskText(' pp2. , PaintDown(n)'); + TaskText('Задание pp2. Закрасить помеченные клетки, составив процедуру с параметром PaintDown(n)'); Field(10,10); RobotBeginEnd(1,1,9,1); VerticalWall(2,2,9); TagRect(1,1,1,7); @@ -2420,7 +2420,7 @@ end; procedure pp3; var i,d: integer; begin - TaskText(' pp3. . RightN(n), LeftN(n), UpN(n), DownN(n)'); + TaskText('Задание pp3. Пройти лабиринт. Составить процедуры с параметрами RightN(n), LeftN(n), UpN(n), DownN(n)'); d:=9; Field(d,d); RobotBeginEnd(1,1,5,5); @@ -2435,7 +2435,7 @@ end; procedure pp4; begin - TaskText(' pp4. , SymbolT(m,h), m - T, h - '); + TaskText('Задание pp4. Закрасить помеченные клетки, составив процедуру SymbolT(m,h), где m - половина ширины символа T, а h - его высота'); Field(19,8); RobotBeginEnd(5,2,17,2); TagRect(2,2,8,2); TagRect(5,2,5,5); @@ -2445,7 +2445,7 @@ end; procedure pp5; begin - TaskText(' pp5. , Rect(w,h), w-, h- '); + TaskText('Задание pp5. Закрасить прямоугольник, составив процедуру Rect(w,h), где w-ширина, а h-высота прямоугольника'); Field(7,10); RobotBeginEnd(2,2,2,2); TagRect(2,2,6,9); @@ -2453,7 +2453,7 @@ end; procedure pp6; begin - TaskText(' pp6. , Rect(w,h)'); + TaskText('Задание pp6. Закрасить несколько прямоугольников, вызывая процедуру Rect(w,h)'); Field(18,12); RobotBeginEnd(2,3,3,7); TagRect(2,3,6,5); @@ -2466,7 +2466,7 @@ end; procedure pp7; var x1,x2,y1,y2: integer; begin - TaskText(' pp7. , Perimeter(w,h), w-, h- '); + TaskText('Задание pp7. Закрасить помеченные клетки, составив процедуру Perimeter(w,h), где w-ширина, а h-высота прямоугольника'); Field(13,11); RobotBeginEnd(3,2,9,3); x1:=3; x2:=7; y1:=2; y2:=5; TagRect(x1,y1,x1,y2); TagRect(x2,y1,x2,y2); TagRect(x1,y1,x2,y1); TagRect(x1,y2,x2,y2); @@ -2477,7 +2477,7 @@ end; procedure pp8; begin - TaskText(' pp8. , SymbolH(w,h,t), w-, h- , t - '); + TaskText('Задание pp8. Закрасить помеченные клетки, составив процедуру SymbolH(w,h,t), где w-ширина, h-высота символа, а t - расстояние от верхней границы до горизонтальной линии'); Field(16,8); RobotBeginEnd(2,2,13,1); TagRect(2,2,2,7); TagRect(5,2,5,7); TagRect(3,4,5,4); @@ -2488,7 +2488,7 @@ end; procedure examen1; var i,j: integer; begin - TaskText(' examen1. , Punktir'); + TaskText('Задание examen1. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); for i:=1 to 7 do @@ -2499,7 +2499,7 @@ end; procedure examen2; var i,j: integer; begin - TaskText(' examen2. , Punktir'); + TaskText('Задание examen2. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); for i:=1 to 7 do @@ -2515,7 +2515,7 @@ end; procedure examen3; var x1,x2,y1,y2: integer; begin - TaskText(' examen3. , Perimeter(n,m)'); + TaskText('Задание examen3. Закрасить помеченные клетки, составив процедуру Perimeter(n,m)'); Field(13,11); RobotBeginEnd(3,2,9,3); x1:=3; x2:=7; y1:=2; y2:=5; TagRect(x1,y1,x1,y2); TagRect(x2,y1,x2,y2); TagRect(x1,y1,x2,y1); TagRect(x1,y2,x2,y2); @@ -2527,7 +2527,7 @@ end; procedure examen4; var n1,n2,len1,len2: integer; begin - TaskText(' examen4. '); + TaskText('Задание examen4. Закрасить все клетки вокруг прямоугольника'); n1:=random(3)+3; len1:=random(5)+4; n2:=random(3)+3; @@ -2547,7 +2547,7 @@ end; procedure examen5; var i,n: integer; begin - TaskText(' examen5. '); + TaskText('Задание examen5. Закрасить все клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -2558,7 +2558,7 @@ end; procedure examen6; var i,n,r1,r2: integer; begin - TaskText(' examen6. , 2 '); + TaskText('Задание examen6. Закрасить помеченные клетки, используя 2 условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -2583,7 +2583,7 @@ end; procedure examen7; var i,n,r1,r2,r3: integer; begin - TaskText(' examen7. , "and" "or"'); + TaskText('Задание examen7. Закрасить помеченные клетки, используя в условии "and" и "or"'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -2607,7 +2607,7 @@ end; procedure examen8; var n,r: integer; begin - TaskText(' examen8. '); + TaskText('Задание examen8. Закрасить клетку в противоположном углу'); n:=11; Field(n,n); RobotBegin(1,1); @@ -2641,7 +2641,7 @@ end; procedure examen9; var m,n1,n2: integer; begin - TaskText(' examen9. . '); + TaskText('Задание examen9. Закрасить угол и вернуться. Использовать два счетчика'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2653,7 +2653,7 @@ end; procedure examen10; var n1,n2: integer; begin - TaskText(' examen10. '); + TaskText('Задание examen10. Обойти стену'); Field(10,4); n1:=random(5)+4; n2:=random(4)+1; @@ -2664,7 +2664,7 @@ end; procedure zzz; begin Field(10,2); - TaskText(' c1. '); + TaskText('Задание c1. Закрасить помеченные клетки'); CorrectFieldBounds; Stop; end; diff --git a/TestSuite/formatter_tests/input/Sets.pas b/TestSuite/formatter_tests/input/Sets.pas index 21022da8a..a404ba7bd 100644 --- a/TestSuite/formatter_tests/input/Sets.pas +++ b/TestSuite/formatter_tests/input/Sets.pas @@ -1,15 +1,15 @@ -// -// +// Работа с множествами +// Базовый тип для множества может быть произвольным var - s1: set of string := ['','','','']; - s2: set of string := ['','','']; + s1: set of string := ['Иванов','Попов','Сидорова','Петров']; + s2: set of string := ['Козлов','Петров','Иванов']; begin - writeln(' s1: ',s1); - writeln(' s2: ',s2); - writeln(' s1 s2: ',s1+s2); - writeln(' s1 s2: ',s1*s2); - writeln(' s1 s2: ',s1-s2); - Include(s1,''); - Exclude(s1,''); - writeln(' s1: ',s1); + writeln('Множество s1: ',s1); + writeln('Множество s2: ',s2); + writeln('Объединение множеств s1 и s2: ',s1+s2); + writeln('Пересечение множеств s1 и s2: ',s1*s2); + writeln('Разность множеств s1 и s2: ',s1-s2); + Include(s1,'Умнов'); + Exclude(s1,'Иванов'); + writeln('Множество s1: ',s1); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Shl.pas b/TestSuite/formatter_tests/input/Shl.pas index 5c47af256..5a381c181 100644 --- a/TestSuite/formatter_tests/input/Shl.pas +++ b/TestSuite/formatter_tests/input/Shl.pas @@ -1,6 +1,6 @@ -// shl +// Демонстрация операции shl begin - writeln(' '); + writeln('Степени двойки'); writeln(' n 2^n'); for var i:=0 to 30 do writeln(i:2,(1 shl i):12); diff --git a/TestSuite/formatter_tests/input/SimpleNewFeatures.pas b/TestSuite/formatter_tests/input/SimpleNewFeatures.pas index 24bf8fb26..60cef0d77 100644 --- a/TestSuite/formatter_tests/input/SimpleNewFeatures.pas +++ b/TestSuite/formatter_tests/input/SimpleNewFeatures.pas @@ -1,27 +1,27 @@ -// PascalABC.NET +// Простейшие новые возможности языка PascalABC.NET -// +// Инициализация переменной при описании var i: integer := 1; -// +// Автоопределение типа переменной при инициализации var r := 2.5; begin - // + // Внутриблочные описания переменных var s: real := 1.0; - // ( - ) + // Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла) for j: integer := 1 to 10 do - s += j; // += + s += j; // Операция += для чисел var p := 1; - // + // Описание переменной в заголовке цикла с автоопределением типа for var j := 1 to 10 do - p *= j; // *= + p *= j; // Операция *= var str := ''; for c: char := 'a' to 'z' do - str += c; // += + str += c; // Операция += для строк end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/SimpleNumbers.pas b/TestSuite/formatter_tests/input/SimpleNumbers.pas index ad7481733..bb0174db0 100644 --- a/TestSuite/formatter_tests/input/SimpleNumbers.pas +++ b/TestSuite/formatter_tests/input/SimpleNumbers.pas @@ -1,6 +1,6 @@ -// +// Генерация больших простых чисел begin - writeln(' : '); + writeln('Большие простые числа: '); var count := 0; var beg := Random(1000000000)+2; for var i:=beg to beg+5000 do diff --git a/TestSuite/formatter_tests/input/SortByChoice.pas b/TestSuite/formatter_tests/input/SortByChoice.pas index 99bd41fcd..ed67282aa 100644 --- a/TestSuite/formatter_tests/input/SortByChoice.pas +++ b/TestSuite/formatter_tests/input/SortByChoice.pas @@ -1,4 +1,4 @@ -// +// Сортировка выбором uses ArrayLib; procedure SortByChoice(a: array of real); @@ -29,9 +29,9 @@ var a: array of real; begin a := CreateRandomArr(20); - writeln(' : '); + writeln('Содержимое массива: '); WriteArray(a); SortByChoice(a); - writeln(' : '); + writeln('После сортировки выбором: '); WriteArray(a); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/SqrSinArrays.pas b/TestSuite/formatter_tests/input/SqrSinArrays.pas index 18e240721..3c7de0fb9 100644 --- a/TestSuite/formatter_tests/input/SqrSinArrays.pas +++ b/TestSuite/formatter_tests/input/SqrSinArrays.pas @@ -1,25 +1,25 @@ -// for -// +// демонстрация работы параллельного for +//заполнение массива procedure FillRandArr(A: array of real); begin Randomize; for var i := 0 to A.Length - 1 do a[i] := Random(1000); end; - // + // вывод массива procedure printArr(A: array of real); begin for var i := 0 to A.Length - 1 do writeln(a[i]); end; -// +// Последовательное вычисление квадратов синусов procedure SqrSinArr(A: array of real; var C: array of real); begin for var i := 0 to A.Length - 1 do C[i] := sqr(sin(A[i])); end; -// +// Параллельное вычисление квадратов синусов procedure SqrSinArrParallel(A: array of real; var C: array of real); begin @@ -38,10 +38,10 @@ begin var m0 := Milliseconds; SqrSinArrParallel(A, C); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Параллельное выполнение: ', Milliseconds - m0, 'ms'); m0 := Milliseconds; SqrSinArr(A, C); - writeln(' : ', Milliseconds - m0, 'ms'); + writeln('Последовательное выполнение: ', Milliseconds - m0, 'ms'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Stack.pas b/TestSuite/formatter_tests/input/Stack.pas index dda2835c3..d818e96ea 100644 --- a/TestSuite/formatter_tests/input/Stack.pas +++ b/TestSuite/formatter_tests/input/Stack.pas @@ -1,4 +1,4 @@ -// +// Демонстрация создания простого класса стека на базе массива type Stack = class private diff --git a/TestSuite/formatter_tests/input/Stamp1.pas b/TestSuite/formatter_tests/input/Stamp1.pas index b1bc57c41..b97abd212 100644 --- a/TestSuite/formatter_tests/input/Stamp1.pas +++ b/TestSuite/formatter_tests/input/Stamp1.pas @@ -1,7 +1,7 @@ -// - , -// , Stamp. +// Штампы - это классы графических фигур, хранящие их параметры +// В любой момент можно нарисовать графическую фигуру, вызвав метод Stamp. -// +// Класс штампа прямоугольника uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/Stamp2.pas b/TestSuite/formatter_tests/input/Stamp2.pas index 1c41b6d59..08aad5d4f 100644 --- a/TestSuite/formatter_tests/input/Stamp2.pas +++ b/TestSuite/formatter_tests/input/Stamp2.pas @@ -1,4 +1,4 @@ -// +// Класс штампа ряда прямоугольников uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/Stamp3.pas b/TestSuite/formatter_tests/input/Stamp3.pas index 0e6a90aca..8b5a79c23 100644 --- a/TestSuite/formatter_tests/input/Stamp3.pas +++ b/TestSuite/formatter_tests/input/Stamp3.pas @@ -1,4 +1,4 @@ -// - +// Класс штампа прямоугольника с методами увеличения-уменьшения uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/Stamp4.pas b/TestSuite/formatter_tests/input/Stamp4.pas index 3ba40f6cb..0775030b4 100644 --- a/TestSuite/formatter_tests/input/Stamp4.pas +++ b/TestSuite/formatter_tests/input/Stamp4.pas @@ -1,4 +1,4 @@ -// - +// Класс штампа прямоугольника с методами увеличения-уменьшения от центра uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/Stamp5.pas b/TestSuite/formatter_tests/input/Stamp5.pas index d6ed6053d..78226a572 100644 --- a/TestSuite/formatter_tests/input/Stamp5.pas +++ b/TestSuite/formatter_tests/input/Stamp5.pas @@ -1,4 +1,4 @@ -// +// Класс штампа треугольника uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/StampCompound.pas b/TestSuite/formatter_tests/input/StampCompound.pas index 1f4b5c634..f8f44be70 100644 --- a/TestSuite/formatter_tests/input/StampCompound.pas +++ b/TestSuite/formatter_tests/input/StampCompound.pas @@ -1,4 +1,4 @@ -// +// Класс штампа составного объекта uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/StampCross.pas b/TestSuite/formatter_tests/input/StampCross.pas index c4f523078..4b554fd12 100644 --- a/TestSuite/formatter_tests/input/StampCross.pas +++ b/TestSuite/formatter_tests/input/StampCross.pas @@ -1,4 +1,4 @@ -// +// Класс штампа креста uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/StampPoly.pas b/TestSuite/formatter_tests/input/StampPoly.pas index e9afc6017..ced69f117 100644 --- a/TestSuite/formatter_tests/input/StampPoly.pas +++ b/TestSuite/formatter_tests/input/StampPoly.pas @@ -1,4 +1,4 @@ -// +// Класс штампа правильного многоугольника uses GraphABC; type diff --git a/TestSuite/formatter_tests/input/StampText.pas b/TestSuite/formatter_tests/input/StampText.pas index 9111e314e..d7a26fc52 100644 --- a/TestSuite/formatter_tests/input/StampText.pas +++ b/TestSuite/formatter_tests/input/StampText.pas @@ -1,4 +1,4 @@ -// +// Класс штампа текста uses GraphABC; type @@ -23,9 +23,9 @@ type end; begin - var txt := new TextStamp(200,200,14,'!'); + var txt := new TextStamp(200,200,14,'Привет!'); txt.Stamp; txt.MoveOn(0,40); - txt.Text := ' !'; + txt.Text := 'До свидания!'; txt.Stamp; end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StandFun.pas b/TestSuite/formatter_tests/input/StandFun.pas index 369ddac57..5d820f901 100644 --- a/TestSuite/formatter_tests/input/StandFun.pas +++ b/TestSuite/formatter_tests/input/StandFun.pas @@ -1,14 +1,14 @@ -// +// Стандартные функции var x: real; begin - write(' x: '); + write('Введите x: '); readln(x); - writeln(' ',x,' ',sqr(x)); - writeln(x,' 5 ',power(x,5)); - writeln(' ',x,' ',sqrt(x)); - writeln(' ',x,' ',abs(x)); - writeln(' ',x,' ',ln(x)); - writeln(' ',x,' ',sin(x)); - writeln(' ',x,' ',cos(x)); + writeln('Квадрат ',x,' равен ',sqr(x)); + writeln(x,' в степени 5 равно ',power(x,5)); + writeln('Квадратный корень из ',x,' равен ',sqrt(x)); + writeln('Модуль ',x,' равен ',abs(x)); + writeln('Натуральный логарифм ',x,' равен ',ln(x)); + writeln('Синус ',x,' равен ',sin(x)); + writeln('Косинус ',x,' равен ',cos(x)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StandardTypes.pas b/TestSuite/formatter_tests/input/StandardTypes.pas index 73cefc59f..6eb0c2b4d 100644 --- a/TestSuite/formatter_tests/input/StandardTypes.pas +++ b/TestSuite/formatter_tests/input/StandardTypes.pas @@ -1,17 +1,17 @@ -/// +/// Стандартные размерные типы данных и их размер var i: integer; j: shortint; k: smallint; - l: longint; // integer + l: longint; // синоним integer i64: int64; b: byte; w: word; lw: longword; - car: cardinal; // longword + car: cardinal; // синоним longword ui64: uint64; r: real; - d: double; // real + d: double; // синоним real sn: single; c: char; diff --git a/TestSuite/formatter_tests/input/Star.pas b/TestSuite/formatter_tests/input/Star.pas index 2dd11d3dc..76054f2f8 100644 --- a/TestSuite/formatter_tests/input/Star.pas +++ b/TestSuite/formatter_tests/input/Star.pas @@ -1,8 +1,8 @@ uses GraphABC; const - n = 17; // - n1 = 7; // + n = 17; // количество точек + n1 = 7; // через сколько точек соединять begin var a := -Pi/2; diff --git a/TestSuite/formatter_tests/input/StaticArr1.pas b/TestSuite/formatter_tests/input/StaticArr1.pas index 998aaa7f0..f20116db9 100644 --- a/TestSuite/formatter_tests/input/StaticArr1.pas +++ b/TestSuite/formatter_tests/input/StaticArr1.pas @@ -1,4 +1,4 @@ -// +// Использование массива const n=10; var a: array [1..n] of real; @@ -6,7 +6,7 @@ var a: array [1..n] of real; begin for var i:=1 to n do a[i] := Random*10; - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); foreach x: real in a do write(x:4:2,' '); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StaticArr2.pas b/TestSuite/formatter_tests/input/StaticArr2.pas index b4a567dd0..49ce9793c 100644 --- a/TestSuite/formatter_tests/input/StaticArr2.pas +++ b/TestSuite/formatter_tests/input/StaticArr2.pas @@ -1,4 +1,4 @@ -// +// Передача массива как параметра подпрограмм const n=10; type RealArr = array [1..n] of real; @@ -19,6 +19,6 @@ var a: RealArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Содержимое случайного массива вещественных: '); PrintArr(a,n); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StaticArr3.pas b/TestSuite/formatter_tests/input/StaticArr3.pas index e34c7a385..1d382c6c1 100644 --- a/TestSuite/formatter_tests/input/StaticArr3.pas +++ b/TestSuite/formatter_tests/input/StaticArr3.pas @@ -1,4 +1,4 @@ -// exit +// Процедура exit выхода из подпрограммы const n=10; type IntArr = array [1..n] of integer; @@ -23,7 +23,7 @@ begin if a[i]=k then begin Result := i; - exit; // + exit; // выход из процедуры end; end; @@ -31,11 +31,11 @@ var a: IntArr; begin FillArrByRandom(a,n); - writeln(' : '); + writeln('Случайный массив целых: '); PrintArr(a,n); var ind := IndexOf(a,n,7); if ind>0 then - writeln(' 7 ', ind) - else writeln(' 7 '); + writeln('Индекс первого элемента 7 равен ', ind) + else writeln('Элемент 7 отсутствует'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StopWatch.pas b/TestSuite/formatter_tests/input/StopWatch.pas index 0e5262c42..98c6be5fe 100644 --- a/TestSuite/formatter_tests/input/StopWatch.pas +++ b/TestSuite/formatter_tests/input/StopWatch.pas @@ -1,4 +1,4 @@ -// Stopwatch - ( 0.001 ) +// Stopwatch - класс высокоточного таймера (с точностью до 0.001 с) begin var stopWatch := new System.Diagnostics.Stopwatch; stopWatch.Start; @@ -7,5 +7,5 @@ begin stopWatch.Stop; var ts := stopWatch.Elapsed; - writelnFormat(' : {0:00}:{1:00}:{2:00}.{3:000}',ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds); + writelnFormat('Время работы: {0:00}:{1:00}:{2:00}.{3:000}',ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/String3.pas b/TestSuite/formatter_tests/input/String3.pas index 75982b627..5a2a97b3e 100644 --- a/TestSuite/formatter_tests/input/String3.pas +++ b/TestSuite/formatter_tests/input/String3.pas @@ -1,4 +1,4 @@ -// . +// Строки. Строка может иметь произвольную длину var s: string; begin @@ -7,6 +7,6 @@ begin s += s; s += s; s += s; - writeln(' = ',s.Length); - writeln('C: ',s); + writeln('Длина строки = ',s.Length); + writeln('Cтрока: ',s); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/String4.pas b/TestSuite/formatter_tests/input/String4.pas index e8553759f..7c765fc61 100644 --- a/TestSuite/formatter_tests/input/String4.pas +++ b/TestSuite/formatter_tests/input/String4.pas @@ -1,4 +1,4 @@ -// . 255 +// Строки фиксированной длины. Длина не может быть больше 255 var s: string[9]; s1: shortstring; // shortstring = string[255] @@ -6,7 +6,7 @@ var begin slong := 'PascalABC.NET'; - writeln('C : ',slong); + writeln('Cтрока произвольной длины: ',slong); s := slong; - writeln('C : ',s); + writeln('Cтрока фиксированной длины обрезается: ',s); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/String5.pas b/TestSuite/formatter_tests/input/String5.pas index 615d927e3..e4e667578 100644 --- a/TestSuite/formatter_tests/input/String5.pas +++ b/TestSuite/formatter_tests/input/String5.pas @@ -1,18 +1,18 @@ -// . +// Строки. Стандартные подпрограммы работы со строками var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := Trim(s); - writeln(' Trim: ''',s,''''); + writeln('После вызова функции Trim: ''',s,''''); var p := Pos(s1,s); - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); Delete(s,7,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); Insert('ABC.',s,7); - writeln(' ''ABC.'': ',s); - writeln(' : ',Copy(s,1,9)); - writeln(' : ',Copy(s,11,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',Copy(s,1,9)); + writeln('Последняя часть строки: ',Copy(s,11,3)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/String6.pas b/TestSuite/formatter_tests/input/String6.pas index 69cf7ddb1..609eb8234 100644 --- a/TestSuite/formatter_tests/input/String6.pas +++ b/TestSuite/formatter_tests/input/String6.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/String9.pas b/TestSuite/formatter_tests/input/String9.pas index 69173970b..44715e324 100644 --- a/TestSuite/formatter_tests/input/String9.pas +++ b/TestSuite/formatter_tests/input/String9.pas @@ -1,4 +1,4 @@ -// String9 Programming Taskbook +// Пример решения задачи String9 из электронного задачника Programming Taskbook uses PT4; var n: integer; diff --git a/TestSuite/formatter_tests/input/StringConvert.pas b/TestSuite/formatter_tests/input/StringConvert.pas index 7cfedf189..fe2a5b8a6 100644 --- a/TestSuite/formatter_tests/input/StringConvert.pas +++ b/TestSuite/formatter_tests/input/StringConvert.pas @@ -4,16 +4,16 @@ var r: real; begin - // - s := '123,3443'; // - Windows + // Преобразование строки в число + s := '123,3443'; // Дробная часть отделяется запятой - настройки Windows if not real.TryParse(s, r) then - Writeln(' s ') + Writeln('Строка s не является строковым представлением вещественного числа') else Writeln(r); if not integer.TryParse(s, i) then - Writeln(' s '); + Writeln('Строка s не является строковым представлением целого числа'); - // + // Преобразование числа в строку i := 10; s := i.ToString; Writeln(s); diff --git a/TestSuite/formatter_tests/input/StringInteger.pas b/TestSuite/formatter_tests/input/StringInteger.pas index 60f5db050..ce86a50a3 100644 --- a/TestSuite/formatter_tests/input/StringInteger.pas +++ b/TestSuite/formatter_tests/input/StringInteger.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringInteger1.pas b/TestSuite/formatter_tests/input/StringInteger1.pas index 7fe544add..484f91218 100644 --- a/TestSuite/formatter_tests/input/StringInteger1.pas +++ b/TestSuite/formatter_tests/input/StringInteger1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := IntToStr(i); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '567'; i := StrToInt(s); - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringInteger2.pas b/TestSuite/formatter_tests/input/StringInteger2.pas index 4f4e00fe4..5dfe155aa 100644 --- a/TestSuite/formatter_tests/input/StringInteger2.pas +++ b/TestSuite/formatter_tests/input/StringInteger2.pas @@ -1,18 +1,18 @@ -// <-> (Val Str) +// Преобразование целое <-> строка в старом стиле (Val и Str) var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; Str(i,s); - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; var err: integer; Val(s,i,err); if err=0 then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringInteger3.pas b/TestSuite/formatter_tests/input/StringInteger3.pas index 60f5db050..ce86a50a3 100644 --- a/TestSuite/formatter_tests/input/StringInteger3.pas +++ b/TestSuite/formatter_tests/input/StringInteger3.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование целое <-> строка в новом стиле var s: string; i: integer; begin - // + // Преобразование целого в строку i := 234; s := i.ToString; - writelnFormat(': {0}. : ''{1}''',i,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',i,s); - // + // Преобразование строки в целое s := '567'; if integer.TryParse(s,i) then - writelnFormat(': ''{0}''. : {1}',s,i); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,i); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringMethods.pas b/TestSuite/formatter_tests/input/StringMethods.pas index 69cf7ddb1..609eb8234 100644 --- a/TestSuite/formatter_tests/input/StringMethods.pas +++ b/TestSuite/formatter_tests/input/StringMethods.pas @@ -1,18 +1,18 @@ -// . string +// Строки. Методы класса string var s: string := ' Pascal__NET '; s1: string := 'NET'; begin - writeln(' : ''',s,''''); + writeln('Исходная строка: ''',s,''''); s := s.Trim; - writeln(' s.Trim: ''',s,''''); - var p := s.IndexOf(s1); // - - writelnFormat(' ''{0}'' ''{1}'' {2}',s1,s,p); + writeln('После вызова s.Trim: ''',s,''''); + var p := s.IndexOf(s1); // Индексация - с нуля + writelnFormat('Позиция подстроки ''{0}'' в строке ''{1}'' равна {2}',s1,s,p); s := s.Remove(6,2); - writeln(' __: ',s); + writeln('После удаления символов __: ',s); s := s.Insert(6,'ABC.'); - writeln(' ''ABC.'': ',s); - writeln(' : ',s.Substring(0,9)); - writeln(' : ',s.Substring(10,3)); + writeln('После вставки подстроки ''ABC.'': ',s); + writeln('Первая часть строки: ',s.Substring(0,9)); + writeln('Последняя часть строки: ',s.Substring(10,3)); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringMethods1.pas b/TestSuite/formatter_tests/input/StringMethods1.pas index 201b87861..b0db02e3c 100644 --- a/TestSuite/formatter_tests/input/StringMethods1.pas +++ b/TestSuite/formatter_tests/input/StringMethods1.pas @@ -1,30 +1,30 @@ var s1,s2: string; begin - // + // Определение длины строки s1 := 'ABCDEFGH'; Writeln(s1.Length); - // + // Сравнение строк без учета регистра символов s1 := 'AAA'; s2 := 'aaa'; - if String.Compare(s1, s2, {ignoreCase - } true) = 0 then - Writeln(' '); + if String.Compare(s1, s2, {ignoreCase - без учета регистра} true) = 0 then + Writeln('Строки совпадают с точностью до регистра букв'); - // + // Определение вхождений подстрок s1 := 'Long string'; s2 := 'string'; if s1.EndsWith(s2) then - Writeln(' s1 , s2'); + Writeln('В конце строки s1 содержится подстрока, совпадающая с s2'); - // + // Поиск индекса вхождения подстроки в строку Writeln(s1.IndexOf(s2)); - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringMethods2.pas b/TestSuite/formatter_tests/input/StringMethods2.pas index ee01cc1f2..13cc3e57e 100644 --- a/TestSuite/formatter_tests/input/StringMethods2.pas +++ b/TestSuite/formatter_tests/input/StringMethods2.pas @@ -1,15 +1,15 @@ var s1,s2: string; begin - // + // Извлечение подстрок s1 := 'ABCDEFGH'; - s2 := s1.Substring( {_ = } 3); + s2 := s1.Substring( {начальная_позиция = } 3); Writeln(s2); - s2 := s1.Substring(3, {_ = } 2); + s2 := s1.Substring(3, {длина_подстроки = } 2); Writeln(s2); - // , + // Вставка, удаление и замена подстрок s1 := 'ABCDEFGH'; s2 := s1.Insert(2, 'xxx'); Writeln(s2); @@ -20,18 +20,18 @@ begin s2 := s2.Remove(2, 3); Writeln(s2); - s1 := ' '; - s2 := s1.Replace('', ''); + s1 := 'слово слово слово'; + s2 := s1.Replace('слов', 'молок'); Writeln(s2); - // + // Удаление пробельных символов в концах строки s1 := ' xxx xxx '; Writeln('|', s1, '|'); s1 := s1.Trim; Writeln('|', s1, '|'); - // - s1 := ''; + // Смена регистра символов + s1 := 'абвгд'; s1 := s1.ToUpper; Writeln(s1); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringPlus.pas b/TestSuite/formatter_tests/input/StringPlus.pas index d301057c1..f267a010f 100644 --- a/TestSuite/formatter_tests/input/StringPlus.pas +++ b/TestSuite/formatter_tests/input/StringPlus.pas @@ -1,4 +1,4 @@ -// +// Сложение строк var s1: string := 'Pascal'; var s2: string := 'NET'; diff --git a/TestSuite/formatter_tests/input/StringReal1.pas b/TestSuite/formatter_tests/input/StringReal1.pas index 4cad78fbe..4b1037b65 100644 --- a/TestSuite/formatter_tests/input/StringReal1.pas +++ b/TestSuite/formatter_tests/input/StringReal1.pas @@ -1,16 +1,16 @@ -// <-> +// Преобразование вещественное <-> строка var s: string; r: real; begin - // + // Преобразование целого в строку r := 3.1415; s := FloatToStr(r); - writelnFormat(': {0}. : ''{1}''',r,s); + writelnFormat('Целое: {0}. После преобразования к строке: ''{1}''',r,s); - // ( ) + // Преобразование строки в целое (может произойти исключение) s := '3.1415'; r := StrToFloat(s); - writelnFormat(': ''{0}''. : {1}',s,r); + writelnFormat('Строка: ''{0}''. После преобразования к целому: {1}',s,r); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StringSplit.pas b/TestSuite/formatter_tests/input/StringSplit.pas index 12acf274f..184c12c2e 100644 --- a/TestSuite/formatter_tests/input/StringSplit.pas +++ b/TestSuite/formatter_tests/input/StringSplit.pas @@ -6,19 +6,19 @@ var s: string := '12 765 765 76'; begin - // + // Разбиение строки на массив подстрок с заданным разелителем str_arr := s.Split(' '); - // + // Соединение массива подстрок с новым разделителем s := string.Join('+', str_arr); Write(s, '='); - // + // Формирование целочисленного массива по массиву подстрок SetLength(int_arr, str_arr.Length); for var i:=0 to int_arr.Length-1 do integer.TryParse(str_arr[i], int_arr[i]); - // + // Вычисление суммы элементов целочисленного массива var sum := 0; foreach v: integer in int_arr do sum += v; diff --git a/TestSuite/formatter_tests/input/StringTypes.pas b/TestSuite/formatter_tests/input/StringTypes.pas index 4cb3e8a0f..7e89b95d1 100644 --- a/TestSuite/formatter_tests/input/StringTypes.pas +++ b/TestSuite/formatter_tests/input/StringTypes.pas @@ -1,17 +1,17 @@ -// string, string[n], shortstring +// Строки string, string[n], shortstring var - s: string; // , s, - s10: string[10]; // ss + s: string; // память, занимаемая s, зависит от ее длины + s10: string[10]; // память под ss фиксирована ss: shortstring := s; f: file of string[10]; - // f: file of string; - + // f: file of string; - ошибка begin s := '12345678901234567890'; - s10 := s; // + s10 := s; // обрезание writeln(s10); s += s; s += s; s += s; s += s; writeln(s); - writeln(' = ',s.Length); + writeln('Длина строки = ',s.Length); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/StructTypeEquiv.pas b/TestSuite/formatter_tests/input/StructTypeEquiv.pas index 2dec49906..8648f73fd 100644 --- a/TestSuite/formatter_tests/input/StructTypeEquiv.pas +++ b/TestSuite/formatter_tests/input/StructTypeEquiv.pas @@ -1,4 +1,4 @@ -// . Delphi - +// Иллюстрация структурной эквивалентности для некоторых типов. В Delphi - именная эквивалентность var a: array of integer; a1: array of integer; @@ -18,6 +18,6 @@ begin a := a1; s := s1; p := p1; - r := r1; // Delphi - proc(a,s,p,r); // - + r := r1; // В Delphi ни одно из этих присваиваний не сработает + proc(a,s,p,r); // Этот вызов - тоже end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Students.pas b/TestSuite/formatter_tests/input/Students.pas index 7e47e9082..1bb0dc994 100644 --- a/TestSuite/formatter_tests/input/Students.pas +++ b/TestSuite/formatter_tests/input/Students.pas @@ -1,4 +1,4 @@ -// +//Перегрузка операторов type Student = class Name: string; @@ -10,7 +10,7 @@ type Self.Height := Height; end; class function operator<(left,right: Student): boolean; - // + // Сравнение по росту begin Result := left.Height < right.Height; end; diff --git a/TestSuite/formatter_tests/input/SumOfPrime.pas b/TestSuite/formatter_tests/input/SumOfPrime.pas index dc81e4467..ef2c2e624 100644 --- a/TestSuite/formatter_tests/input/SumOfPrime.pas +++ b/TestSuite/formatter_tests/input/SumOfPrime.pas @@ -1,8 +1,8 @@ -// parallel for c -// n -// +// Демонстрация работы директивы parallel for c опцией редукции +// на примере вычисления суммы простых чисел среди первых n +// натуральных чисел -// n +// проверка на простоту числа n function IsPrime(n:integer):boolean; begin result:=false; @@ -11,7 +11,7 @@ begin exit; result:=true; end; -// +//Последовательное вычисление суммы простых чисел function SumOfPrimesSeq(n:integer):int64; begin var sum:int64:=0; @@ -20,7 +20,7 @@ begin sum:=sum+i; result:=sum; end; -// +//Параллельное вычисление суммы простых чисел function SumOfPrimesPar(n:integer):int64; begin var sum:int64:=0; diff --git a/TestSuite/formatter_tests/input/SwapT.pas b/TestSuite/formatter_tests/input/SwapT.pas index 38161cff4..f8b0bcae9 100644 --- a/TestSuite/formatter_tests/input/SwapT.pas +++ b/TestSuite/formatter_tests/input/SwapT.pas @@ -1,5 +1,5 @@ -// -// T +// Обобщенные функции +// Выведение типа T по типам параметров procedure Swap(var a,b: T); begin @@ -11,7 +11,7 @@ end; begin var a := 2; var b := 3; - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('До Swap a={0}, b={1}',a,b); Swap(a,b); - writelnFormat(' Swap a={0}, b={1}',a,b); + writelnFormat('После Swap a={0}, b={1}',a,b); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/SystemArray1.pas b/TestSuite/formatter_tests/input/SystemArray1.pas index 76e2e438b..2bce6941d 100644 --- a/TestSuite/formatter_tests/input/SystemArray1.pas +++ b/TestSuite/formatter_tests/input/SystemArray1.pas @@ -13,25 +13,25 @@ var a: array of integer; begin SetLength(a, Size); - // + // Заполнение массива for var i:=0 to a.Length-1 do a[i] := Random(100); - // + // Вывод всех элементов массива PrintArray(a); - // ( & , - // array Array) + // Сортировка массива (знак & используется для того, + // чтобы воспользоваться ключевым словом array при обозначении класса Array) &Array.Sort(a); PrintArray(a); - // + // Обращение массива &Array.Reverse(a); PrintArray(a); - // + // Поиск вхождения элемента в массив var i := &Array.IndexOf(a, 99); Writeln(i); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/SystemTimer.pas b/TestSuite/formatter_tests/input/SystemTimer.pas index 1b55e5f23..8223bd886 100644 --- a/TestSuite/formatter_tests/input/SystemTimer.pas +++ b/TestSuite/formatter_tests/input/SystemTimer.pas @@ -1,4 +1,4 @@ -//, +=, -=, System.Timers.Timer +//События, +=, -=, демонстрация работы таймера System.Timers.Timer uses System; var Timer:System.Timers.Timer; diff --git a/TestSuite/formatter_tests/input/Tentacles.pas b/TestSuite/formatter_tests/input/Tentacles.pas index a460d6630..1de368e86 100644 --- a/TestSuite/formatter_tests/input/Tentacles.pas +++ b/TestSuite/formatter_tests/input/Tentacles.pas @@ -1,12 +1,12 @@ -// "". midletPascal :) +//Программа "Щупальца". Порт с midletPascal :) uses GraphABC; const - S = 14; // - - N = 18; // - - W = 2; // + S = 14; // Кол-во щупалец + N = 18; // Кол-во звеньев в каждом из них + W = 2; //Ширина щупалец var i, j: Integer; @@ -14,16 +14,16 @@ var tx, ty: Real; k, d: Real; - // - + // Углы поворота звеньев относительно друг-друга a: array [1..N] of Real; - // + // Длина одного звена len: Real; begin Pen.Width := W; SetWindowSize(320, 320); - SetWindowTitle(''); + SetWindowTitle('Щупальца'); if Window.Width > Window.Height then len := Window.Height / 1.8 / N @@ -34,7 +34,7 @@ begin var k1 := 1; - // + // Главный цикл repeat if Window.Width > Window.Height then @@ -42,17 +42,17 @@ begin else len := Window.Width / 1.8 / N; - LockDrawing(); // ( ) - ClearWindow(ClBlack); // + LockDrawing(); //Блокируем рисование(для оптимизации) + ClearWindow(ClBlack); // Стираем всё - // + // Расчёт коэфицента поворота if random(50) = 0 then k := random(360) * pi / 180; - // + // Поворот всех щупалец a[1] := a[1] + sin(k) / 15; - // + // Интерполяция углов между щупальцами for i := 2 to N do a[i] := a[i] + (a[i - 1] - a[i]) * 0.1; for j := 0 to S - 1 do @@ -63,7 +63,7 @@ begin begin SetPenColor(Color.FromArgb(255, trunc(255 - 255 * i / N), 255)); - // :) + // Немного школьной тригонометрии :) tx := x + cos(j * d + a[i]) * len; ty := y + sin(j * d + a[i]) * len; Line(trunc(x), trunc(y), trunc(tx), trunc(ty)); @@ -71,10 +71,10 @@ begin y := ty; end; end; - Redraw(); // + Redraw(); //Перерисуем изображение k1 += 1; - SetWindowTitle('( . FPS ' + Format('{0,5:f2}',k1/Milliseconds*1000)+')'); + SetWindowTitle('Щупальца( Средн. FPS ' + Format('{0,5:f2}',k1/Milliseconds*1000)+')'); sleep(5); until false; diff --git a/TestSuite/formatter_tests/input/Text1.pas b/TestSuite/formatter_tests/input/Text1.pas index 152912db3..72b941890 100644 --- a/TestSuite/formatter_tests/input/Text1.pas +++ b/TestSuite/formatter_tests/input/Text1.pas @@ -1,4 +1,4 @@ -// , +// Программа, выводящая текст из своего файла var f: Text; diff --git a/TestSuite/formatter_tests/input/Text2.pas b/TestSuite/formatter_tests/input/Text2.pas index 51edde25c..cd46adb75 100644 --- a/TestSuite/formatter_tests/input/Text2.pas +++ b/TestSuite/formatter_tests/input/Text2.pas @@ -1,7 +1,7 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt var f: Text; - a: array of string := ('','','','','','',''); + a: array of string := ('Каждый','охотник','желает','знать','где','сидит','фазан'); begin assign(f,'a.txt'); @@ -9,5 +9,5 @@ begin for var i:=0 to a.Length-1 do writeln(f,a[i]); close(f); - writeln(' a.txt'); + writeln('Текст записан в файл a.txt'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Text3.pas b/TestSuite/formatter_tests/input/Text3.pas index 86572c050..31daacb7d 100644 --- a/TestSuite/formatter_tests/input/Text3.pas +++ b/TestSuite/formatter_tests/input/Text3.pas @@ -1,4 +1,4 @@ -// , a.txt +// Программа, выводящая текст в файл a.txt const n = 30; filename = 'pifagor.txt'; @@ -15,5 +15,5 @@ begin writeln(f); end; close(f); - writeln(' '+filename); + writeln('Таблица умножения записана в файл '+filename); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/TextEditor.pas b/TestSuite/formatter_tests/input/TextEditor.pas index 69f8a547e..52aa99e8c 100644 --- a/TestSuite/formatter_tests/input/TextEditor.pas +++ b/TestSuite/formatter_tests/input/TextEditor.pas @@ -8,7 +8,7 @@ uses System.Windows.Forms; const TextFileExt = 'txt'; - TextFileFilter = ' (*.'+TextFileExt+')|*.'+TextFileExt; + TextFileFilter = 'Текстовые файлы (*.'+TextFileExt+')|*.'+TextFileExt; var myForm: Form; @@ -16,7 +16,7 @@ var procedure SaveFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного сохранения русских букв var f := new System.IO.StreamWriter(FileName, false, System.Text.Encoding.Default); f.Write(TextBox1.Text); f.Close; @@ -24,7 +24,7 @@ end; procedure OpenFile(FileName: string); begin - // Windows 1251, + //Создаем файловый поток с кодировкой Windows 1251, необходимо для корректного чтения русских букв var f := new System.IO.StreamReader(FileName, System.Text.Encoding.Default); TextBox1.Text := f.ReadToEnd; f.Close; @@ -37,14 +37,14 @@ end; procedure MenuSaveClick(sender:object; args:System.EventArgs); begin - // + //Диалог для выбора файла var sd := new SaveFileDialog; - // + //Расширение поумолчанию sd.DefaultExt := TextFileExt; - // + //Фильтр для диалга sd.Filter := TextFileFilter; if sd.ShowDialog=DialogResult.OK then - // sd.ShowDialog + //если результат выполнения sd.ShowDialog это нажатие кнопки подтверждения то SaveFile(sd.FileName); end; @@ -59,31 +59,31 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Простой текстовый редактор'; TextBox1 := new TextBox; TextBox1.Multiline := True; TextBox1.Height := 100; TextBox1.Dock := DockStyle.Fill; - // + //Полосы прокрутки TextBox1.ScrollBars := ScrollBars.Both; - // + //Устанавливаем шрифт TextBox1.Font := new System.Drawing.Font('Courier New',10); myForm.Controls.Add(TextBox1); - // + //Создаем меню var toolStrip1 := new ToolStrip; toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden; - var miFile := new ToolStripMenuItem(''); - miFile.DropDownItems.Add(new ToolStripMenuItem('', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem(' ...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); - miFile.DropDownItems.Add(new ToolStripMenuItem('',nil,FormClose)); + var miFile := new ToolStripMenuItem('Файл'); + miFile.DropDownItems.Add(new ToolStripMenuItem('Открыть', new System.Drawing.Bitmap(GetResourceStream('Open.png')),MenuOpenClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Сохранить как...',new System.Drawing.Bitmap(GetResourceStream('Save.png')),MenuSaveClick)); + miFile.DropDownItems.Add(new ToolStripMenuItem('Выход',nil,FormClose)); toolStrip1.Items.Add(miFile); myForm.Controls.Add(toolStrip1); - // - // = 1, + //Посмотрим в аргументы командной строки + //Если их количество = 1, то открываем if CommandLineArgs.Length = 1 then OpenFile(CommandLineArgs[0]); diff --git a/TestSuite/formatter_tests/input/ThroughTheUniverse.pas b/TestSuite/formatter_tests/input/ThroughTheUniverse.pas index ca464dd75..a6840cd4d 100644 --- a/TestSuite/formatter_tests/input/ThroughTheUniverse.pas +++ b/TestSuite/formatter_tests/input/ThroughTheUniverse.pas @@ -1,33 +1,33 @@ -// " ". midletPascal +//Программа "Скозь вселенную". Порт с midletPascal uses GraphABC; type - // - + // Описываем тип-элемент Звезда TStar = record - X, Y, Z : real; // + X, Y, Z : real; // Положение в пространстве end; const - MAX_STARS = 1000; // - - SPEED = 200; // , / + MAX_STARS = 1000; // Кол-во звёздочек + SPEED = 200; // Скорость, в единицах/сек var i : Integer; - // :) + // Наши звёздочки :) Stars : array [1..MAX_STARS] of TStar; - // + // Ширина и высота дисплея scr_W : Integer; scr_H : Integer; - // + // Время time, dt : Integer; - // (i), (c) + // Рисует текущую звёздочку (i), цвета (c) procedure SetPix(c: Integer); var sx, sy : Integer; begin - // , 3D 2D + // Данные действия, проецируют 3D точку на 2D полоскость дисплея try sx := trunc(scr_W / 2 + Stars[i].X * 200 / (Stars[i].Z + 200)); sy := trunc(scr_H / 2 - Stars[i].Y * 200 / (Stars[i].Z + 200)); @@ -45,7 +45,7 @@ uses GraphABC; scr_W := Window.Width; scr_H := Window.Height; - // + //случайным образом раскидаем звёздочки randomize; for i := 1 to MAX_STARS do begin @@ -54,30 +54,30 @@ uses GraphABC; Stars[i].Z := random(1900); end; - // ( ) + // Очистка содержимого дисплея (чёрный цвет) ClearWindow(Color.Black); time := Milliseconds; - // + // Главный цикл отрисовки repeat scr_W := Window.Width; scr_H := Window.Height; - dt := Milliseconds - time; // , - time := Milliseconds; // + dt := Milliseconds - time; // Сколько мс прошло, с прошлой отрисовки + time := Milliseconds; // Засекаем время for i := 1 to MAX_STARS do begin - // + // Затираем звёздочку с предыдущего кадра SetPix(0); - // + // Изменяем её позицию в зависимости прошедшего с последней отрисовки времени Stars[i].Z := Stars[i].Z - SPEED * dt/1000; - // "" - + // Если звезда "улетела" за позицию камеры - генерируем её вдали if Stars[i].Z <= -200 then begin Stars[i].X := random(scr_W * 4) - scr_W * 2; Stars[i].Y := random(scr_H * 4) - scr_H * 2; - Stars[i].Z := 1900; // :) + Stars[i].Z := 1900; // Откидываем звезду далеко вперёд :) end; - // ( Z ) + // Рисуем звёздочку в новом положении (цвет зависит от Z координаты) SetPix(trunc(255 - 255 * (Stars[i].Z + 200) / 2100)); end; sleep(10); diff --git a/TestSuite/formatter_tests/input/Timers.pas b/TestSuite/formatter_tests/input/Timers.pas index 13287f776..a7c5c96b3 100644 --- a/TestSuite/formatter_tests/input/Timers.pas +++ b/TestSuite/formatter_tests/input/Timers.pas @@ -1,11 +1,11 @@ Unit Timers; (* - System.Timers.Timer - (c) .. 2007 + Обертка для класса System.Timers.Timer + (c) Брагилевский В.Н. 2007 - Timer PascalABC - Handle. + Сохранен интерфейс класса Timer из PascalABC + за исключением функции Handle. *) interface @@ -13,7 +13,7 @@ interface uses System; type - /// + /// Класс таймера Timer = class private _timer: System.Timers.Timer; @@ -24,15 +24,15 @@ type function GetInterval: integer; procedure OnTimer(sender: object; e: System.Timers.ElapsedEventArgs); public - /// ms TimerProc + /// Создает таймер с интервалом срабатывания ms миллисекунд и обработчиком TimerProc constructor Create(ms: integer; TimerProc: procedure); - /// + /// Запускает таймер procedure Start; - /// + /// Останавливает таймер procedure Stop; - /// + /// Запущен ли таймер property Enabled: boolean read GetEnabled write SetEnabled; - /// + /// Интервал срабатывания таймера property Interval: integer read GetInterval write SetInterval; end; diff --git a/TestSuite/formatter_tests/input/TreeDraw.pas b/TestSuite/formatter_tests/input/TreeDraw.pas index 91bb7f805..3251ca1dc 100644 --- a/TestSuite/formatter_tests/input/TreeDraw.pas +++ b/TestSuite/formatter_tests/input/TreeDraw.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева uses GraphABC; const @@ -7,7 +7,7 @@ const delay = 10; procedure DrawTree(x,y,dx,level: integer); -// : , , +// обход: левое поддерево, корень, правое begin if level>0 then begin @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ' '; + Window.Title := 'Рекурсивное рисование бинарного дерева'; SetSmoothingOff; SetWindowSize(800,30+Levels*LevelHeight); DrawTree(WindowWidth div 2,10,WindowWidth div 5,Levels); diff --git a/TestSuite/formatter_tests/input/Try1.pas b/TestSuite/formatter_tests/input/Try1.pas index 086f8de6b..c879e8a2f 100644 --- a/TestSuite/formatter_tests/input/Try1.pas +++ b/TestSuite/formatter_tests/input/Try1.pas @@ -1,14 +1,14 @@ -// . +// Простейшая обработка исключений. Ввод с ошибкой var a: integer; begin try - writeln(' : '); - // :) + writeln('Введите число: '); + // При вводе попробуйте совершить ошибку :) readln(a); - writeln(' '); + writeln('Число введено верно '); except - writeln(' '); + writeln('Ошибка ввода'); end; - writeln(' '); + writeln('Выполнение программы продолжено'); end. diff --git a/TestSuite/formatter_tests/input/Try2.pas b/TestSuite/formatter_tests/input/Try2.pas index 986a2493a..4145b1fe0 100644 --- a/TestSuite/formatter_tests/input/Try2.pas +++ b/TestSuite/formatter_tests/input/Try2.pas @@ -1,15 +1,15 @@ -// +// Обработка нескольких исключений var x: integer; begin try - writeln(' (1 - 0): '); + writeln('Введите число (1 - ошибка деления на 0): '); readln(x); x := 10 div (x-1); except on System.FormatException do - writeln(' '); + writeln('Ошибка ввода'); on System.DivideByZeroException do - writeln(' 0'); + writeln('Деление на 0'); end; end. diff --git a/TestSuite/formatter_tests/input/Try3.pas b/TestSuite/formatter_tests/input/Try3.pas index 22139ddc2..4fcc48113 100644 --- a/TestSuite/formatter_tests/input/Try3.pas +++ b/TestSuite/formatter_tests/input/Try3.pas @@ -1,15 +1,15 @@ -// finally -// finally , +// Иллюстрация finally +// Секция finally выполняется независимо от того, произошло исключение или нет var x: integer := 0; begin try if Random(2)=0 then x := 10 div x; - writeln(' '); + writeln('Выполнение продолжается'); finally - writeln(' finally'); + writeln('Сработала секция finally'); end; - // , - writeln(' finally'); + // Если возникает исключение, то этот оператор не выполняется + writeln('После секции finally'); end. diff --git a/TestSuite/formatter_tests/input/Try4.pas b/TestSuite/formatter_tests/input/Try4.pas index 879a1005e..2f61a1b0b 100644 --- a/TestSuite/formatter_tests/input/Try4.pas +++ b/TestSuite/formatter_tests/input/Try4.pas @@ -1,8 +1,8 @@ -// . +// Исключения. Генерация исключения function f(x: integer): integer; begin if x=0 then - raise new System.Exception(' f 0'); + raise new System.Exception('Аргумент функции f не может быть равен 0'); Result := 10 mod x; end; diff --git a/TestSuite/formatter_tests/input/TupleCreate.pas b/TestSuite/formatter_tests/input/TupleCreate.pas index 2e991a62d..9d07269f5 100644 --- a/TestSuite/formatter_tests/input/TupleCreate.pas +++ b/TestSuite/formatter_tests/input/TupleCreate.pas @@ -1,10 +1,10 @@ -// +// Создание кортежей uses System; begin - var a := Tuple.Create('',24); + var a := Tuple.Create('Иванов',24); writeln(a.Item1,' ',a.Item2); - var b := Tuple.Create('',17,1,11); + var b := Tuple.Create('Петров',17,1,11); writeln(b.Item1,' ',b.Item2,' ',b.Item3,' ',b.Item4); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/Untyped1.pas b/TestSuite/formatter_tests/input/Untyped1.pas index 15f1eb52a..7c932ddc3 100644 --- a/TestSuite/formatter_tests/input/Untyped1.pas +++ b/TestSuite/formatter_tests/input/Untyped1.pas @@ -1,5 +1,5 @@ -// -// 10 , - +// Нетипизированные файлы +// Запись в файл 10 чисел, при следующем запуске - чтение этих чисел и удаление файла const filename = 'u.dat'; var @@ -14,7 +14,7 @@ begin begin assign(f,filename); rewrite(f); - writeln(' ',filename); + writeln('Запись в файл ',filename); r := random*10; for var i:=0 to 10 do @@ -26,7 +26,7 @@ begin // writeln(s); writeln(c); writeln(k); - // + // Запись в файл данных разных типов write(f,r); // writeln(f,s); write(f,c); @@ -37,9 +37,9 @@ begin begin assign(f,filename); reset(f); - writeln(' ',filename); + writeln('Чтение из файла ',filename); - // + // Чтение из файла данных разных типов read(f,r,{s,}c,k); writeln(r); // writeln(s); diff --git a/TestSuite/formatter_tests/input/UntypedFile.pas b/TestSuite/formatter_tests/input/UntypedFile.pas index c49eaa091..24bb11de5 100644 --- a/TestSuite/formatter_tests/input/UntypedFile.pas +++ b/TestSuite/formatter_tests/input/UntypedFile.pas @@ -1,4 +1,4 @@ -// +// Бестиповые файлы var f: file; i: integer; @@ -8,11 +8,11 @@ var begin assign(f,'a.dat'); rewrite(f); - // + // Записываем в файл данные любых типов write(f,1,2.5,'Hello'); close(f); reset(f); - // + // Считываем эти данные из файла read(f,i,r,s); write(i,' ',r,' ',s); close(f); diff --git a/TestSuite/formatter_tests/input/UpLowCase.pas b/TestSuite/formatter_tests/input/UpLowCase.pas index d2fde4a79..2c7303586 100644 --- a/TestSuite/formatter_tests/input/UpLowCase.pas +++ b/TestSuite/formatter_tests/input/UpLowCase.pas @@ -1,4 +1,4 @@ -// UpperCase, LowerCase +// Использование стандартных функций UpperCase, LowerCase var c: char; begin @@ -8,13 +8,13 @@ begin for c:='A' to 'Z' do write(LowerCase(c)); writeln; - for c:='' to '' do + for c:='А' to 'Я' do write(UpperCase(c)); writeln; - for c:='' to '' do + for c:='а' to 'я' do write(LowerCase(c)); writeln; - var s := ' '; + var s := 'Папа у Васи силён в математике'; s := UpperCase(s); writeln(s); s := LowerCase(s); diff --git a/TestSuite/formatter_tests/input/Utils.pas b/TestSuite/formatter_tests/input/Utils.pas index 33d4f3564..c86c25964 100644 --- a/TestSuite/formatter_tests/input/Utils.pas +++ b/TestSuite/formatter_tests/input/Utils.pas @@ -18,7 +18,7 @@ external 'User32.dll' name 'MessageBox'; procedure ShowMessage(msg:string); begin - ShowMessage(msg,''); + ShowMessage(msg,'Сообщение'); end; procedure ShowMessage(msg,capt:string); diff --git a/TestSuite/formatter_tests/input/WebClient.pas b/TestSuite/formatter_tests/input/WebClient.pas index 9e543b76b..4595a80c2 100644 --- a/TestSuite/formatter_tests/input/WebClient.pas +++ b/TestSuite/formatter_tests/input/WebClient.pas @@ -1,4 +1,4 @@ -// WebClient +// Использование WebClient uses System.Net; const address = 'www.yandex.ru'; diff --git a/TestSuite/formatter_tests/input/Where.pas b/TestSuite/formatter_tests/input/Where.pas index 872cf309b..4b932d35a 100644 --- a/TestSuite/formatter_tests/input/Where.pas +++ b/TestSuite/formatter_tests/input/Where.pas @@ -1,4 +1,4 @@ -// Where - +// Секция Where - ограничение на типы параметров uses System,System.Collections.Generic; type @@ -15,7 +15,7 @@ type var m: MyClass; - //m1: MyClass; // + //m1: MyClass; // ошибка begin end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/WinFormWithButton.pas b/TestSuite/formatter_tests/input/WinFormWithButton.pas index ea6cf05da..ecfa4dbbb 100644 --- a/TestSuite/formatter_tests/input/WinFormWithButton.pas +++ b/TestSuite/formatter_tests/input/WinFormWithButton.pas @@ -1,4 +1,4 @@ -// +// Создание оконного приложения {$apptype windows} {$reference 'System.Windows.Forms.dll'} @@ -17,9 +17,9 @@ end; begin myForm := new Form; - myForm.Text := ' '; + myForm.Text := 'Оконное приложение'; myButton := new Button; - myButton.Text := ' '; + myButton.Text := ' Закрыть окно '; myButton.AutoSize := True; myButton.Left := 90; myButton.Top := 110; diff --git a/TestSuite/formatter_tests/input/Write Critical.pas b/TestSuite/formatter_tests/input/Write Critical.pas index 28a70b6a1..c850aa8b4 100644 --- a/TestSuite/formatter_tests/input/Write Critical.pas +++ b/TestSuite/formatter_tests/input/Write Critical.pas @@ -1,7 +1,7 @@ -// -// . - -// , -// , . . +// Вывод в параллельной секции без использования критических секций +// и с их использованием. В первом случае из-за параллельного доступа +// к разделяемому ресурсу возможно, что строки будут выводиться +// на одной строке, и в произвольно порядке. Во втором случае такого не будет. begin {$omp parallel sections} begin diff --git a/TestSuite/formatter_tests/input/WriteAll.pas b/TestSuite/formatter_tests/input/WriteAll.pas index 9aade8ace..7b9ca40ce 100644 --- a/TestSuite/formatter_tests/input/WriteAll.pas +++ b/TestSuite/formatter_tests/input/WriteAll.pas @@ -1,12 +1,12 @@ -/// write +/// Вывод различных типов процедурой write begin - // , , , + // Вывод, целого, строки, вещественного Writeln(1,' ',2.5); - // + // Вывод множества Writeln([1..10]); - // + // Вывод логического Writeln(True); var a: array [1..10] of integer; - // ( ) + // Вывод массива (выводится его тип) Writeln(a); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/WriteFormat.pas b/TestSuite/formatter_tests/input/WriteFormat.pas index 7e060018f..a6ea0c119 100644 --- a/TestSuite/formatter_tests/input/WriteFormat.pas +++ b/TestSuite/formatter_tests/input/WriteFormat.pas @@ -1,11 +1,11 @@ -/// WritelnFormat +/// Использование процедуры WritelnFormat begin - // + // Вывод в обратном порядке WritelnFormat('{2},{1},{0}',1,2,3); - // - WritelnFormat('{{}}{0}',' '); - // + // Вывод фигурных скобочек + WritelnFormat('{{}}{0}','Вывод фигурных скобочек в форматной строке'); + // Задание ширины поля вывода WritelnFormat('{0,10:f}',3.1415); - // + // Задание количества знаков после запятой для вещественного числа WritelnFormat('{0:f3}',3.1415); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/WriteRecord.pas b/TestSuite/formatter_tests/input/WriteRecord.pas index 4dd028fa6..d35db749a 100644 --- a/TestSuite/formatter_tests/input/WriteRecord.pas +++ b/TestSuite/formatter_tests/input/WriteRecord.pas @@ -1,5 +1,5 @@ -// -// ToString, writeln +// Иллюстрация конструкторов и методов в записях +// Если переопределен метод ToString, то он вызывается при выводе объекта этого типа процедурой writeln type SexType = (Male, Female); Person = record @@ -15,11 +15,11 @@ type end; function ToString: string; override; begin - Result := string.Format(': {0} : {1} : {2} : {3}', Name, Age, Weight, Sex); + Result := string.Format('Имя: {0} Возраст: {1} Вес: {2} Пол: {3}', Name, Age, Weight, Sex); end; end; -var p: Person := new Person('',20,70,SexType.Male); +var p: Person := new Person('Иванов',20,70,SexType.Male); begin writeln(p); diff --git a/TestSuite/formatter_tests/input/__RedirectIOMode.pas b/TestSuite/formatter_tests/input/__RedirectIOMode.pas index 7bacb874e..400ecc838 100644 --- a/TestSuite/formatter_tests/input/__RedirectIOMode.pas +++ b/TestSuite/formatter_tests/input/__RedirectIOMode.pas @@ -2,14 +2,14 @@ unit __RedirectIOMode; //------------------------------------------------------------------------------ -// -// () DarkStar 2007 -// : -// 1. ErrorStream [READLNSIGNAL] -// 2. AppDomain.CurrentDomain.UnhandledException -// ErrorStream -// 3. Application.ThreadException -// ErrorStream +// Модуль подключаемый в режиме запуска со связью с оболочкой +// (с) DarkStar 2007 +// Функции: +// 1. Посылка в поток ErrorStream сигнала [READLNSIGNAL] +// 2. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и +// пердача их в поток ErrorStream +// 3. Перехват исключений по Application.ThreadException и +// пердача их в поток ErrorStream //------------------------------------------------------------------------------ {$reference 'System.Windows.Forms.dll'} @@ -110,7 +110,7 @@ begin if AppDomain.CurrentDomain.GetData('_RedirectIO_SpecialArgs') = nil then Console.ReadLine; RedirectIOInDebugMode := true; - if IOStandardSystem(CurrentIOSystem).GetType = typeof(IOStandardSystem) then // SSM 30.04.06 - ! PT4! + if IOStandardSystem(CurrentIOSystem).GetType = typeof(IOStandardSystem) then // SSM 30.04.06 - не менять! Влияет на PT4! CurrentIOSystem := new __ReadSignalOISystem; AppDomain.CurrentDomain.UnhandledException += DbgExceptionHandler; System.Windows.Forms.Application.ThreadException += Application_ThreadException; diff --git a/TestSuite/formatter_tests/input/__RunMode.pas b/TestSuite/formatter_tests/input/__RunMode.pas index 91f58c07e..a13d55cc0 100644 --- a/TestSuite/formatter_tests/input/__RunMode.pas +++ b/TestSuite/formatter_tests/input/__RunMode.pas @@ -2,12 +2,12 @@ unit __RunMode; //------------------------------------------------------------------------------ -// , -// () DarkStar 2007 -// : -// 1. AppDomain.CurrentDomain.UnhandledException -// -// 2. - , exe- +// Модуль, подключаемый в режиме запуска без связи с оболочкой +// (с) DarkStar 2007 +// Функции: +// 1. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и +// вывод их в консоль +// 2. Если это - консольное окно, то устанавливает имя заголовка на имя exe-файла //------------------------------------------------------------------------------ interface diff --git a/TestSuite/formatter_tests/input/algo1.pas b/TestSuite/formatter_tests/input/algo1.pas index ba48b426f..a6713302b 100644 --- a/TestSuite/formatter_tests/input/algo1.pas +++ b/TestSuite/formatter_tests/input/algo1.pas @@ -1,14 +1,14 @@ -// +// Алгоритм определения простоты числа var N: integer; IsSimple: boolean; begin - writeln(' : '); + writeln('Введите число: '); readln(N); IsSimple := True; - for var i:=2 to round(sqrt(N)) do // , <= (sqrt(N)) + for var i:=2 to round(sqrt(N)) do // если число составное, то один из его сомножителей <= (sqrt(N)) if N mod i = 0 then begin IsSimple := False; @@ -16,6 +16,6 @@ begin end; if IsSimple then - writeln(' ',N,' ') - else writeln(' ',N,' '); + writeln('Число ',N,' простое') + else writeln('Число ',N,' составное'); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/algo2.pas b/TestSuite/formatter_tests/input/algo2.pas index 8028f87e4..1d02bcd1f 100644 --- a/TestSuite/formatter_tests/input/algo2.pas +++ b/TestSuite/formatter_tests/input/algo2.pas @@ -1,14 +1,14 @@ -// x +// Алгоритм вычисления значения многочлена в точке x по схеме Горнера const n=5; var x,a: real; begin - writeln(' x: '); + writeln('Введите значение x: '); readln(x); - writeln(' (',n+1,' ): '); + writeln('Введите коэффициенты многочлена (',n+1,' штук): '); read(a); var s := a; for var i:=1 to n do @@ -17,5 +17,5 @@ begin s := s*x + a; end; - writeln(' ',x,' ',s); + writeln('Значение многочлена в точке ',x,' равно ',s); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/graph3d.pas b/TestSuite/formatter_tests/input/graph3d.pas index 55b1e5338..ea0587a05 100644 --- a/TestSuite/formatter_tests/input/graph3d.pas +++ b/TestSuite/formatter_tests/input/graph3d.pas @@ -1,6 +1,6 @@ -// KuMir/PMir -// -// :) +// Пример из пакета KuMir/PMir +// Публикуется практически без изменений +// Дорог как память :) Uses GraphABC; var Xmin,Xmax,Xstep: real; @@ -57,8 +57,8 @@ begin end; begin - SetWindowCaption(' '); + SetWindowCaption('График функции двух переменных'); SetWindowSize(600,400); - dx := 2; { X } - gr(100); { Y <= MaxN } + dx := 2; { разрешение по оси X } + gr(100); { количество линий по Y <= MaxN } end. diff --git a/TestSuite/formatter_tests/input/graphic.pas b/TestSuite/formatter_tests/input/graphic.pas index 20809900e..77a0a3bff 100644 --- a/TestSuite/formatter_tests/input/graphic.pas +++ b/TestSuite/formatter_tests/input/graphic.pas @@ -1,6 +1,6 @@ -// drawGraph -// OY -// +// Процедура drawGraph рисования графика функции в полном окне +// с масштабированием по оси OY +// Перерисовывает график при изменении размеров окна uses GraphABC; type FUN = function (x: real): real; @@ -10,8 +10,8 @@ begin Result := x*sin(x)*exp(-0.1*x); end; -// l (logical) - -// s (screen) - +// l (logical) - логические координаты +// s (screen) - физические координаты procedure drawGraph(x1,x2: real; f: FUN); var xl0,wl,yl0,hl: real; @@ -56,7 +56,7 @@ begin // drawGraph yl0 := min; hl := -(max-min); - // + // Нарисовать оси системы координат Line(0,LtoSy(0),ws,LtoSy(0)); Line(LtoSx(0),0,LtoSx(0),hs); @@ -75,7 +75,7 @@ end; begin LockDrawing; - SetWindowCaption(' : '); + SetWindowCaption('График функции: масштабирование'); drawGraph(0,60,f); Redraw; OnResize := Resize; diff --git a/TestSuite/formatter_tests/input/rain.pas b/TestSuite/formatter_tests/input/rain.pas index c496bf0f6..17f971f4d 100644 --- a/TestSuite/formatter_tests/input/rain.pas +++ b/TestSuite/formatter_tests/input/rain.pas @@ -1,4 +1,4 @@ -// +// Имитация кругов на воде от капель дождя uses GraphABC; const speed = 2; @@ -20,7 +20,7 @@ end; const z=50; begin - Window.Title := ' '; + Window.Title := 'Капли дождя'; SetWindowSize(800,600); while True do Kaplia(Random(z,WindowWidth-z),Random(z,WindowHeight-z)); diff --git a/TestSuite/formatter_tests/input/random_DM.pas b/TestSuite/formatter_tests/input/random_DM.pas index b1e906fad..c9f2904c0 100644 --- a/TestSuite/formatter_tests/input/random_DM.pas +++ b/TestSuite/formatter_tests/input/random_DM.pas @@ -1,4 +1,4 @@ -// . +// Демонстрация использования случайных чисел для Чертежника. Лучи uses DrawMan; begin diff --git a/TestSuite/formatter_tests/input/repeat1.pas b/TestSuite/formatter_tests/input/repeat1.pas index f5bb0a55e..6621f57de 100644 --- a/TestSuite/formatter_tests/input/repeat1.pas +++ b/TestSuite/formatter_tests/input/repeat1.pas @@ -1,12 +1,12 @@ -// repeat. +// Цикл repeat. Контроль ввода var mark: integer; begin repeat - writeln(' (2..5): '); + writeln('Введите оценку (2..5): '); readln(mark); if (mark<2) or (mark>5) then - writeln(' . '); + writeln('Оценка неверная. Повторите ввод'); until (mark>=2) and (mark<=5); - writeln(' ',mark); + writeln('Вы ввели оценку ',mark); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/repeat2.pas b/TestSuite/formatter_tests/input/repeat2.pas index da13faadc..da416f808 100644 --- a/TestSuite/formatter_tests/input/repeat2.pas +++ b/TestSuite/formatter_tests/input/repeat2.pas @@ -1,13 +1,13 @@ -// repeat. +// Цикл repeat. Алгоритм Евклида нахождения наибольшего общего делителя var A,B: integer; begin - write(' : '); + write('Введите два целых числа: '); readln(A,B); repeat var C := A mod B; A := B; B := C; until B=0; - write(' = ',A); + write('Наибольший общий делитель = ',A); end. \ No newline at end of file diff --git a/TestSuite/formatter_tests/input/while2.pas b/TestSuite/formatter_tests/input/while2.pas index f24c07321..ff9996415 100644 --- a/TestSuite/formatter_tests/input/while2.pas +++ b/TestSuite/formatter_tests/input/while2.pas @@ -1,6 +1,6 @@ -// while. 2 +// Цикл while. Степени 2 begin - writeln(' 2'); + writeln('Степени 2'); var i := 1; var p := 1; while i<32 do diff --git a/TestSuite/formatter_tests/input/while3.pas b/TestSuite/formatter_tests/input/while3.pas index 9f6819686..35345d005 100644 --- a/TestSuite/formatter_tests/input/while3.pas +++ b/TestSuite/formatter_tests/input/while3.pas @@ -1,10 +1,10 @@ -// while. +// ÷икл while. —умма цифр положительного числа var m: integer; begin - writeln(' : '); + writeln('¬ведите положительное число: '); read(m); - write(' : '); + write('÷ифры числа в обратном пор¤дке: '); var s := 0; while m>0 do begin @@ -14,5 +14,5 @@ begin m := m div 10; end; writeln; - writeln(' = ',s); + writeln('—умма цифр = ',s); end. \ No newline at end of file diff --git a/TestSuite/pabcrtl_tests/ABC1.pas b/TestSuite/pabcrtl_tests/ABC1.pas index dda84ddc0..0fe49e801 100644 --- a/TestSuite/pabcrtl_tests/ABC1.pas +++ b/TestSuite/pabcrtl_tests/ABC1.pas @@ -1,4 +1,4 @@ -// ABCObjects. +// Модуль ABCObjects. Изменение свойств объекта uses ABCObjects,GraphABC; const delay = 300; @@ -13,7 +13,7 @@ var z: StarABC; begin - Window.Title := 'ABCObjects: '; + Window.Title := 'ABCObjects: свойства графических объектов'; z := new StarABC(Window.Center.X,Window.Center.Y,70,30,6,Color.Green); r := new RectangleABC(100,100,200,100,Color.Gold); Pause; diff --git a/TestSuite/pabcrtl_tests/BookWormABCNET.pas b/TestSuite/pabcrtl_tests/BookWormABCNET.pas index 8dda5579f..df73f6178 100644 --- a/TestSuite/pabcrtl_tests/BookWormABCNET.pas +++ b/TestSuite/pabcrtl_tests/BookWormABCNET.pas @@ -1,8 +1,8 @@ uses GraphABC,ABCObjects,ABCButtons,Events; const -/// - freqcharstr=''; +/// Примерная частота повторяемости букв + freqcharstr='аааааааааааааааааааааааааабббббввввввввггггдддддддееееееееееееееееееееежжззззииииииииииииииииииийккккккккккккккклллллллллллммммммнннннннннннннннннооооооооооооооооооооооооппппппппрррррррррррррррррссссссссссссстттттттттттттттууууууффххцццчччшшщыыьььььэюяяяя'; const MaxWordLen = 12; @@ -12,20 +12,20 @@ type MySquareABC = class(SquareABC) end; var -/// +/// Доска с буквами MainBoard: ObjectBoardABC; -/// 1 +/// Доска высоты 1 для размещения слова WordBoard: ObjectBoardABC; -/// WordBoard +/// Номер первого незанятого символа на доске WordBoard cur: integer; -/// +/// Количество ходов moves: integer; -/// +/// Очки score: integer; -/// +/// Прямоугольник для отображения информации Status: RectangleABC; -/// ( words.txt) +/// Существует ли такое слово (все слова хранятся в файле words.txt) function WordExists(s: string): boolean; var f: text; @@ -49,7 +49,7 @@ end; procedure MyMouseDown(x,y,mb: integer); begin -// +// Нажата левая мышь if mb=1 then begin if cur>WordBoard.DimX then @@ -71,7 +71,7 @@ begin end; end else -// +// Нажата правая мышь begin for var xx:=1 to cur-1 do WordBoard[xx,1].Visible := False; @@ -83,19 +83,19 @@ begin end; end; -/// " " +/// Обработчик кнопки "Новая игра" procedure BtNewClick; begin score := 0; moves := 0; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); MyMouseDown(1,1,2); for var xx:=1 to MainBoard.DimX do for var yy:=1 to MainBoard.DimY do MainBoard[xx,yy].Text := UpCase(freqcharstr[Random(255)+1]); end; -/// " " +/// Обработчик кнопки "Сказать слово" procedure BtWordClick; begin if WordBoard.Color<>clYellow then @@ -113,15 +113,15 @@ begin end; cur := 1; WordBoard.Color := clSkyBlue; - Status.Text := ': '+IntToStr(moves)+' : '+IntToStr(score); + Status.Text := 'Ходов: '+IntToStr(moves)+' Очков: '+IntToStr(score); end; -/// "" +/// Обработчик кнопки "Подсказка" procedure BtPleaseClick; var f: text; str,maxstr: string; - arr,work: array [''..''] of integer; + arr,work: array ['а'..'я'] of integer; maxlen: integer; function CanConstructWord(s: string): boolean; @@ -142,7 +142,7 @@ var begin // BtPleaseClick maxlen := 0; maxstr := ''; - for var c:='' to '' do + for var c:='а' to 'я' do arr[c]:=0; for var xx:=1 to MainBoard.DimX do @@ -169,7 +169,7 @@ procedure InitWindow; begin SetWindowSize(640,480); Window.IsFixedSize := True; - Window.Title := ' !'; + Window.Title := 'Знай русские слова!'; Brush.Color := clMoneyGreen; FillRect(0,0,WindowWidth,WindowHeight); end; @@ -183,11 +183,11 @@ end; procedure InitButtons; begin - var btword := new ButtonABC(70,410,180,30,' ',clGray); - var btnew := new ButtonABC(280,410,100,30,'',clLightGray); - var btplease := new ButtonABC(410,410,160,30,'',clGray); + var btword := new ButtonABC(70,410,180,30,'Сказать слово',clGray); + var btnew := new ButtonABC(280,410,100,30,'Заново',clLightGray); + var btplease := new ButtonABC(410,410,160,30,'Подсказка',clGray); -// +// Привязка обработчиков к кнопкам btword.OnClick := BtWordClick; btnew.OnClick := BtNewClick; btplease.OnClick := BtPleaseClick; @@ -197,7 +197,7 @@ end; procedure InitInterface; begin Status := new RectangleABC(70,350,500,30,clSkyBlue); - Status.Text := ': 0 : 0'; + Status.Text := 'Ходов: 0 Очков: 0'; WordBoard := new ObjectBoardABC(20,40,MaxWordLen,1,50,50,clSkyBlue); MainBoard := new ObjectBoardABC(220,120,4,4,50,50,clMoneyGreen); MainBoard.BorderColor := clGreen; diff --git a/TestSuite/pabcrtl_tests/DMa1.pas b/TestSuite/pabcrtl_tests/DMa1.pas index 9f60a20fe..fde4bef24 100644 --- a/TestSuite/pabcrtl_tests/DMa1.pas +++ b/TestSuite/pabcrtl_tests/DMa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L DM +// Исполнитель Чертежник - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите DM и имя задания uses Drawman; begin diff --git a/TestSuite/pabcrtl_tests/ESquares.pas b/TestSuite/pabcrtl_tests/ESquares.pas index fffe646fc..ceb9752cd 100644 --- a/TestSuite/pabcrtl_tests/ESquares.pas +++ b/TestSuite/pabcrtl_tests/ESquares.pas @@ -1,4 +1,4 @@ -// E-. +// E-квадраты. Демонстрация рекурсии uses GraphABC; const mw = 2.9; @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ': E-'; + Window.Title := 'Рекурсия: E-квадраты'; SetWindowSize(750,530); Pen.Color := clWhite; ESquares(4,125,18,490); diff --git a/TestSuite/pabcrtl_tests/Gr1.pas b/TestSuite/pabcrtl_tests/Gr1.pas index 1a55d87d0..1b3eb122e 100644 --- a/TestSuite/pabcrtl_tests/Gr1.pas +++ b/TestSuite/pabcrtl_tests/Gr1.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Линии. Размеры окна. Заголовок окна uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Первая графическая программа'; Line(0,0,Window.Width-1,Window.Height-1); Line(0,Window.Height-1,Window.Width-1,0); end. \ No newline at end of file diff --git a/TestSuite/pabcrtl_tests/Gr2.pas b/TestSuite/pabcrtl_tests/Gr2.pas index a4f21e187..0471c2aa8 100644 --- a/TestSuite/pabcrtl_tests/Gr2.pas +++ b/TestSuite/pabcrtl_tests/Gr2.pas @@ -1,8 +1,8 @@ -// . . . +// Графика. Точка. Случайный цвет. Скорость работы uses GraphABC,Utils; begin for var i:=1 to 100000 do SetPixel(Random(Window.Width),Random(Window.Height),clRandom); - writeln(' : ',Milliseconds/1000,' '); + writeln('Время работы: ',Milliseconds/1000,' секунд'); end. \ No newline at end of file diff --git a/TestSuite/pabcrtl_tests/Gr3.pas b/TestSuite/pabcrtl_tests/Gr3.pas index 66e1f3881..de0d7ae58 100644 --- a/TestSuite/pabcrtl_tests/Gr3.pas +++ b/TestSuite/pabcrtl_tests/Gr3.pas @@ -1,8 +1,8 @@ -// . +// Графика. Свойства кисти и пера uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Свойства кисти и пера'; Pen.Color := Color.Red; Pen.Width := 3; Pen.Style := psDashDot; diff --git a/TestSuite/pabcrtl_tests/Gr4.pas b/TestSuite/pabcrtl_tests/Gr4.pas index e6c2025a1..7c060dd57 100644 --- a/TestSuite/pabcrtl_tests/Gr4.pas +++ b/TestSuite/pabcrtl_tests/Gr4.pas @@ -1,8 +1,8 @@ -// . Draw Fill - +// Графика. Draw и Fill - процедуры uses GraphABC; begin - Window.Title := 'Draw Fill - '; + Window.Title := 'Draw и Fill - процедуры'; for var i := 1 to 100 do begin Pen.Color := clRandom; diff --git a/TestSuite/pabcrtl_tests/Gr5.pas b/TestSuite/pabcrtl_tests/Gr5.pas index 4cbaac953..979566e61 100644 --- a/TestSuite/pabcrtl_tests/Gr5.pas +++ b/TestSuite/pabcrtl_tests/Gr5.pas @@ -1,10 +1,10 @@ -// . Pie +// Графика. Pie uses GraphABC; const r = 200; begin - Window.Title := ' '; + Window.Title := 'Круговая гистограмма'; var x := Window.Center.X; var y := Window.Center.Y; Brush.Color := clRandom; diff --git a/TestSuite/pabcrtl_tests/Gr6.pas b/TestSuite/pabcrtl_tests/Gr6.pas index b127200f3..6430311b0 100644 --- a/TestSuite/pabcrtl_tests/Gr6.pas +++ b/TestSuite/pabcrtl_tests/Gr6.pas @@ -1,8 +1,8 @@ -// . +// Графика. Прозрачность uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация прозрачности'; Brush.Color := clRed; FillRectangle(50,50,100,Window.Height - 50); diff --git a/TestSuite/pabcrtl_tests/Gr7.pas b/TestSuite/pabcrtl_tests/Gr7.pas index ef1f7ca6a..3eacff030 100644 --- a/TestSuite/pabcrtl_tests/Gr7.pas +++ b/TestSuite/pabcrtl_tests/Gr7.pas @@ -1,4 +1,4 @@ -// . +// Графика. Сохраниение изображения графического окна в файл и загрузка из файла uses GraphABC; const @@ -6,7 +6,7 @@ const filename = 'GraphWindow.bmp'; begin - Window.Title := 'Window.Save Window.Load'; + Window.Title := 'Window.Save и Window.Load'; SetWindowSize(320,240); for var x:=0 to Window.Width - 1 do diff --git a/TestSuite/pabcrtl_tests/Gr8.pas b/TestSuite/pabcrtl_tests/Gr8.pas index 278994fb4..678a0a382 100644 --- a/TestSuite/pabcrtl_tests/Gr8.pas +++ b/TestSuite/pabcrtl_tests/Gr8.pas @@ -1,9 +1,9 @@ -// . +// Графика. Сглаживание uses GraphABC; begin - Window.Title := ' '; - TextOut(40,20,' '); + Window.Title := 'Демонстрация сглаживания'; + TextOut(40,20,'Со сглаживанием'); Pen.Width := 2; Ellipse(40,60,300,200); @@ -11,7 +11,7 @@ begin Line(600,130,340,200); SetSmoothingOff; - TextOut(40,240,' '); + TextOut(40,240,'Без сглаживания'); Ellipse(40,280,300,420); Line(340,280,600,350); Line(600,350,340,420); diff --git a/TestSuite/pabcrtl_tests/GrAnim1.pas b/TestSuite/pabcrtl_tests/GrAnim1.pas index 71dde4512..67e0b2d54 100644 --- a/TestSuite/pabcrtl_tests/GrAnim1.pas +++ b/TestSuite/pabcrtl_tests/GrAnim1.pas @@ -1,8 +1,8 @@ -// . "" . +// Графика. Пример "наивной" анимации. Эффект мерцания uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Демонстрация простой анимации'; var y := 200; Brush.Color := clGreen; for var x := 70 to 500 do diff --git a/TestSuite/pabcrtl_tests/GrAnim2.pas b/TestSuite/pabcrtl_tests/GrAnim2.pas index bad081cf2..b88e17046 100644 --- a/TestSuite/pabcrtl_tests/GrAnim2.pas +++ b/TestSuite/pabcrtl_tests/GrAnim2.pas @@ -1,17 +1,17 @@ -// . LockDrawing-Redraw. +// Графика. Использование LockDrawing-Redraw. Мерцание отсутствует uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Анимация без мерцания'; var y := 200; Brush.Color := clGreen; - // + // Отключаем рисование в окне LockDrawing; for var x := 70 to 500 do begin Window.Clear(clWhite); Circle(x,y,50); - // + // Перерисовываем окно из внеэранного буфера Redraw; Sleep(3); end; diff --git a/TestSuite/pabcrtl_tests/GrCoord1.pas b/TestSuite/pabcrtl_tests/GrCoord1.pas index 169a52366..8da8ac886 100644 --- a/TestSuite/pabcrtl_tests/GrCoord1.pas +++ b/TestSuite/pabcrtl_tests/GrCoord1.pas @@ -1,15 +1,15 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; - // + // Поворот Coordinate.Angle := 30; - // + // Масштаб Coordinate.Scale := 3; - // - + // Начало координат - в центре окна Coordinate.Origin := Window.Center; Brush.Color := clMoneyGreen; diff --git a/TestSuite/pabcrtl_tests/GrCoord2.pas b/TestSuite/pabcrtl_tests/GrCoord2.pas index d5e2ba3f8..e81b9b651 100644 --- a/TestSuite/pabcrtl_tests/GrCoord2.pas +++ b/TestSuite/pabcrtl_tests/GrCoord2.pas @@ -1,8 +1,8 @@ -// +// Демонстрация преобразований системы координат uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Преобразования системы координат'; Window.IsFixedSize := True; Coordinate.Origin := Window.Center; diff --git a/TestSuite/pabcrtl_tests/GrFont1.pas b/TestSuite/pabcrtl_tests/GrFont1.pas index 54600ef1d..40446966c 100644 --- a/TestSuite/pabcrtl_tests/GrFont1.pas +++ b/TestSuite/pabcrtl_tests/GrFont1.pas @@ -1,8 +1,8 @@ -// +// Демонстрация работы со шрифтами uses GraphABC; begin - Window.Title := ''; + Window.Title := 'Шрифты'; SetWindowSize(760,460); Font.Name := 'Arial'; Font.Style := fsBoldItalic; diff --git a/TestSuite/pabcrtl_tests/GrFont2.pas b/TestSuite/pabcrtl_tests/GrFont2.pas index 04b15835c..17947a8ff 100644 --- a/TestSuite/pabcrtl_tests/GrFont2.pas +++ b/TestSuite/pabcrtl_tests/GrFont2.pas @@ -1,10 +1,10 @@ -// TextWidth TextHeight +// Демонстрация использования TextWidth и TextHeight uses GraphABC; const s = 'Width & Height'; begin - Window.Title := ' '; + Window.Title := 'Текст по центру'; Window.IsFixedSize := True; SetWindowSize(700,300); Window.Center; diff --git a/TestSuite/pabcrtl_tests/GrPoly.pas b/TestSuite/pabcrtl_tests/GrPoly.pas index 7abc91298..68f80312d 100644 --- a/TestSuite/pabcrtl_tests/GrPoly.pas +++ b/TestSuite/pabcrtl_tests/GrPoly.pas @@ -1,11 +1,11 @@ -// Polyline, Polygon, Curve, ClosedCurve -// +// Процедуры Polyline, Polygon, Curve, ClosedCurve +// Перенос начала системы координат uses GraphABC; var a: array of Point := (new Point(0,0), new Point(50,170), new Point(100,100), new Point(150,170), new Point(200,0)); begin - Window.Title := ' '; + Window.Title := 'Рисование по массиву точек'; Brush.Color := Color.Beige; Coordinate.SetOrigin(60,30); Polyline(a); diff --git a/TestSuite/pabcrtl_tests/Hanoi.pas b/TestSuite/pabcrtl_tests/Hanoi.pas index 42720cfb3..c315a89fa 100644 --- a/TestSuite/pabcrtl_tests/Hanoi.pas +++ b/TestSuite/pabcrtl_tests/Hanoi.pas @@ -1,46 +1,46 @@ -// +// Ханойские башни uses GraphABC; type - /// + /// Тип диска DiskType = record - /// + /// Диаметр диска Sz: integer; - /// + /// Цвет диска Color: GraphABC.Color; end; - /// + /// Тип массива дисков на стержне DiskArr = array of DiskType; const - /// + /// Количество дисков CountDisks = 8; - /// + /// Высота диска DiskHeight = 12; - /// + /// Приращение ширины диска DiskWidthDelta = 12; h = CountDisks * DiskWidthDelta * 2 + 20; - /// y- + /// y-координата основания пирамид дисков y0 = DiskHeight * CountDisks + 80; hh = 30; - /// x- + /// x-координата первого стержня x1 = h div 2 + hh; - /// x- + /// x-координата второго стержня x2 = x1 + h; - /// x- + /// x-координата третьего стержня x3 = x2 + h; - /// , + /// Пауза, мс delay = 50; var - /// + /// Массив пирамид дисков Tower: array [1..3] of DiskArr; - /// + /// Массив количеств дисков в пирамидах DisksInTower: array [1..3] of integer; - /// + /// Номер хода MoveNumber: integer; -/// +/// Рисование пирамиды procedure DrawTower(a: DiskArr; n: integer; x0,y0: integer); begin Brush.Color := clBlack; @@ -52,18 +52,18 @@ begin end; end; -/// +/// Рисование всех пирамид и информационной строки procedure DrawAll; begin DrawTower(Tower[1],DisksInTower[1],x1,y0); DrawTower(Tower[2],DisksInTower[2],x2,y0); DrawTower(Tower[3],DisksInTower[3],x3,y0); Brush.Color := clWhite; - TextOut(20,20,' = '+IntToStr(MoveNumber)); + TextOut(20,20,'Число перемещений дисков = '+IntToStr(MoveNumber)); Redraw; end; -/// FromN ToN +/// Перемещение диска со стержня FromN на стержень ToN procedure MoveDisk(FromN, ToN: integer); begin Inc(MoveNumber); @@ -75,7 +75,7 @@ begin DrawAll; end; -/// " " +/// Основная екурсивная процедура алгоритма "Ханойские башни" procedure MoveTower(n: integer; FromN, ToN, WorkN: integer); begin if n=0 then exit; @@ -84,7 +84,7 @@ begin MoveTower(n-1, WorkN, ToN, FromN); end; -/// +/// Инициализация массивов procedure InitTowers; begin SetLength(Tower[1],CountDisks); @@ -100,12 +100,12 @@ begin end; end; -/// +/// Инициализация окна procedure InitWindow; begin SetWindowSize(x3+x1,y0+50); CenterWindow; - Window.Title := ' '; + Window.Title := 'Ханойские башни'; Font.Size := 14; Font.Name := 'Arial'; end; diff --git a/TestSuite/pabcrtl_tests/Hypno.pas b/TestSuite/pabcrtl_tests/Hypno.pas index 00a0ae749..ecb95b404 100644 --- a/TestSuite/pabcrtl_tests/Hypno.pas +++ b/TestSuite/pabcrtl_tests/Hypno.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация прозрачности uses GraphABC; begin diff --git a/TestSuite/pabcrtl_tests/MazeGen.pas b/TestSuite/pabcrtl_tests/MazeGen.pas index 11642afc9..9f0fea7bf 100644 --- a/TestSuite/pabcrtl_tests/MazeGen.pas +++ b/TestSuite/pabcrtl_tests/MazeGen.pas @@ -1,10 +1,10 @@ -// +// Программа генерации случайных лабиринтов uses GraphABC; const - szw = 70; // + szw = 70; // размер лабиринта szh = 50; - cellsz = 10; // + cellsz = 10; // размер ячейки type point = record @@ -32,10 +32,10 @@ begin x := Random(szw-2)+1; y := Random(szh-2)+1; -// +// Пометить клетку как принадлежащую лабиринту maze[x][y]:= maze[x][y] and not 48; -// todo +// Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -45,28 +45,28 @@ begin maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16; end; - // + // Пока не обработаны все клетки while todonum > 0 do begin - // todo + // Выбрать из списка todo произвольную клетку n := Random(todonum); x := todo[n].x; y := todo[n].y; - // + // Удалить из списка обработанную клетку Dec(todonum); todo[n]:= todo[todonum]; - // , + // Выбрать направление, которое ведет к лабиринту repeat dd:=Random (4); until not ((maze[x + dx[dd]][y + dy[dd]] and 32) <> 0); - // + // Присоединить выбранную клетку к лабиринту maze[x][y] := maze[x][y] and not ((1 shl dd) or 32); maze[x + dx[dd]][y + dy[dd]] := maze[x + dx[dd]][y + dy[dd]] and not (1 shl (dd xor 1)); - // todo + // Занести в список todo все ближайшие необработанные клетки for var d:=0 to 3 do if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then begin @@ -77,8 +77,8 @@ begin end; end; - maze[1][1] := maze[1][1] and not 1; // - - maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // - + maze[1][1] := maze[1][1] and not 1; // начало лабиринта - в левом верхнем углу + maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2; // конец лабиринта - в правом нижнем углу end; procedure Draw; @@ -86,19 +86,19 @@ begin for var x:=1 to szw-2 do for var y:=1 to szh-2 do begin - if ((maze[x][y] and 1) <> 0) then // + if ((maze[x][y] and 1) <> 0) then // верхняя стена Line(x * cellsz, y * cellsz, x * cellsz + cellsz , y * cellsz); - if ((maze[x][y] and 2) <> 0) then // + if ((maze[x][y] and 2) <> 0) then // нижняя стена Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz , y * cellsz + cellsz); - if ((maze[x][y] and 4) <> 0) then // + if ((maze[x][y] and 4) <> 0) then // левая стена Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz ); - if ((maze[x][y] and 8) <> 0) then // + if ((maze[x][y] and 8) <> 0) then // правая стена Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz); end; end; begin - Window.Title := ' '; + Window.Title := 'Генерация лабиринта'; SetWindowSize(szw*cellsz,szh*cellsz); Init; Draw; diff --git a/TestSuite/pabcrtl_tests/Mosaic.pas b/TestSuite/pabcrtl_tests/Mosaic.pas index 02efa3c44..4aee71d02 100644 --- a/TestSuite/pabcrtl_tests/Mosaic.pas +++ b/TestSuite/pabcrtl_tests/Mosaic.pas @@ -1,4 +1,4 @@ -// . +// Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const @@ -13,10 +13,10 @@ const var a: array [0..n,0..m] of Color; begin - Window.Title := ''; + Window.Title := 'Мозаика'; Window.SetSize(800,600); - // + // Заполнение массива случайными цветами for var i:=0 to n-1 do for var j:=0 to m-1 do begin diff --git a/TestSuite/pabcrtl_tests/MouseEvents.pas b/TestSuite/pabcrtl_tests/MouseEvents.pas index 064766eae..f48183e0a 100644 --- a/TestSuite/pabcrtl_tests/MouseEvents.pas +++ b/TestSuite/pabcrtl_tests/MouseEvents.pas @@ -1,4 +1,4 @@ -// +// Иллюстрация обработки событий мыши uses GraphABC; procedure MouseDown(x,y,mb: integer); @@ -12,7 +12,7 @@ begin end; begin - // + // Привязка обработчиков к событиям OnMouseDown := MouseDown; OnMouseMove := MouseMove end. diff --git a/TestSuite/pabcrtl_tests/RBa1.pas b/TestSuite/pabcrtl_tests/RBa1.pas index 5162e32a4..e7c59265c 100644 --- a/TestSuite/pabcrtl_tests/RBa1.pas +++ b/TestSuite/pabcrtl_tests/RBa1.pas @@ -1,6 +1,6 @@ -// - -// -// Ctrl-L RB +// Исполнитель Робот - отличное средство для начального обучения программированию +// школьников младших и средних классов +// Для генерации шаблона задания нажмите Ctrl-L и наберите RB и имя задания uses Robot; begin diff --git a/TestSuite/pabcrtl_tests/RBcc17.pas b/TestSuite/pabcrtl_tests/RBcc17.pas index 4e40b2b95..59285e1a8 100644 --- a/TestSuite/pabcrtl_tests/RBcc17.pas +++ b/TestSuite/pabcrtl_tests/RBcc17.pas @@ -1,4 +1,4 @@ -// cc17 +// Выполнение задания cc17 для Робота uses Robot; begin diff --git a/TestSuite/pabcrtl_tests/ThroughTheUniverse.pas b/TestSuite/pabcrtl_tests/ThroughTheUniverse.pas index ca464dd75..a6840cd4d 100644 --- a/TestSuite/pabcrtl_tests/ThroughTheUniverse.pas +++ b/TestSuite/pabcrtl_tests/ThroughTheUniverse.pas @@ -1,33 +1,33 @@ -// " ". midletPascal +//Программа "Скозь вселенную". Порт с midletPascal uses GraphABC; type - // - + // Описываем тип-элемент Звезда TStar = record - X, Y, Z : real; // + X, Y, Z : real; // Положение в пространстве end; const - MAX_STARS = 1000; // - - SPEED = 200; // , / + MAX_STARS = 1000; // Кол-во звёздочек + SPEED = 200; // Скорость, в единицах/сек var i : Integer; - // :) + // Наши звёздочки :) Stars : array [1..MAX_STARS] of TStar; - // + // Ширина и высота дисплея scr_W : Integer; scr_H : Integer; - // + // Время time, dt : Integer; - // (i), (c) + // Рисует текущую звёздочку (i), цвета (c) procedure SetPix(c: Integer); var sx, sy : Integer; begin - // , 3D 2D + // Данные действия, проецируют 3D точку на 2D полоскость дисплея try sx := trunc(scr_W / 2 + Stars[i].X * 200 / (Stars[i].Z + 200)); sy := trunc(scr_H / 2 - Stars[i].Y * 200 / (Stars[i].Z + 200)); @@ -45,7 +45,7 @@ uses GraphABC; scr_W := Window.Width; scr_H := Window.Height; - // + //случайным образом раскидаем звёздочки randomize; for i := 1 to MAX_STARS do begin @@ -54,30 +54,30 @@ uses GraphABC; Stars[i].Z := random(1900); end; - // ( ) + // Очистка содержимого дисплея (чёрный цвет) ClearWindow(Color.Black); time := Milliseconds; - // + // Главный цикл отрисовки repeat scr_W := Window.Width; scr_H := Window.Height; - dt := Milliseconds - time; // , - time := Milliseconds; // + dt := Milliseconds - time; // Сколько мс прошло, с прошлой отрисовки + time := Milliseconds; // Засекаем время for i := 1 to MAX_STARS do begin - // + // Затираем звёздочку с предыдущего кадра SetPix(0); - // + // Изменяем её позицию в зависимости прошедшего с последней отрисовки времени Stars[i].Z := Stars[i].Z - SPEED * dt/1000; - // "" - + // Если звезда "улетела" за позицию камеры - генерируем её вдали if Stars[i].Z <= -200 then begin Stars[i].X := random(scr_W * 4) - scr_W * 2; Stars[i].Y := random(scr_H * 4) - scr_H * 2; - Stars[i].Z := 1900; // :) + Stars[i].Z := 1900; // Откидываем звезду далеко вперёд :) end; - // ( Z ) + // Рисуем звёздочку в новом положении (цвет зависит от Z координаты) SetPix(trunc(255 - 255 * (Stars[i].Z + 200) / 2100)); end; sleep(10); diff --git a/TestSuite/pabcrtl_tests/TreeDraw.pas b/TestSuite/pabcrtl_tests/TreeDraw.pas index 91bb7f805..3251ca1dc 100644 --- a/TestSuite/pabcrtl_tests/TreeDraw.pas +++ b/TestSuite/pabcrtl_tests/TreeDraw.pas @@ -1,4 +1,4 @@ -// +// Рекурсивное рисование двоичного дерева uses GraphABC; const @@ -7,7 +7,7 @@ const delay = 10; procedure DrawTree(x,y,dx,level: integer); -// : , , +// обход: левое поддерево, корень, правое begin if level>0 then begin @@ -20,7 +20,7 @@ begin end; begin - Window.Title := ' '; + Window.Title := 'Рекурсивное рисование бинарного дерева'; SetSmoothingOff; SetWindowSize(800,30+Levels*LevelHeight); DrawTree(WindowWidth div 2,10,WindowWidth div 5,Levels); diff --git a/TestSuite/pabcrtl_tests/rain.pas b/TestSuite/pabcrtl_tests/rain.pas index c496bf0f6..17f971f4d 100644 --- a/TestSuite/pabcrtl_tests/rain.pas +++ b/TestSuite/pabcrtl_tests/rain.pas @@ -1,4 +1,4 @@ -// +// Имитация кругов на воде от капель дождя uses GraphABC; const speed = 2; @@ -20,7 +20,7 @@ end; const z=50; begin - Window.Title := ' '; + Window.Title := 'Капли дождя'; SetWindowSize(800,600); while True do Kaplia(Random(z,WindowWidth-z),Random(z,WindowHeight-z)); diff --git a/TestSuite/pabcrtl_tests/random_Robot.pas b/TestSuite/pabcrtl_tests/random_Robot.pas index 2f6f917c7..4ab24f209 100644 --- a/TestSuite/pabcrtl_tests/random_Robot.pas +++ b/TestSuite/pabcrtl_tests/random_Robot.pas @@ -1,4 +1,4 @@ - // . + // Демонстрация использования случайных чисел для Робота. Случайное блуждание uses Robot; begin diff --git a/TreeConverter/Collections/extandable_collection.cs b/TreeConverter/Collections/extandable_collection.cs index e9abf7d3d..aad0a566e 100644 --- a/TreeConverter/Collections/extandable_collection.cs +++ b/TreeConverter/Collections/extandable_collection.cs @@ -5,14 +5,14 @@ using System; namespace PascalABCCompiler.Collections { /// - /// . . + /// Расширяемая коллекция. Элементы из нее нельзя удалять. /// /// [Serializable] public class extendable_collection : System.Collections.Generic.IEnumerable { /// - /// Enumerator . + /// Enumerator для списка элементов. /// public class enumerator : System.Collections.Generic.IEnumerator { @@ -66,9 +66,9 @@ namespace PascalABCCompiler.Collections protected T[] _elements_as_arr = null; /// - /// . + /// Добавить элемент к списку. /// - /// . + /// Добавляемый элемент. public void AddElement(T element) { _elements.Add(element); @@ -76,9 +76,9 @@ namespace PascalABCCompiler.Collections } /// - /// . + /// Добавляет список элементов к списку. /// - /// . + /// Список добавляемых элементов. public void AddRange(extendable_collection elements) { _elements.AddRange(elements._elements); @@ -117,9 +117,9 @@ namespace PascalABCCompiler.Collections } /// - /// , . + /// Возвращает массив элементов, хранящихся в коллкции. /// - /// + /// Массив элементов public T[] ToArray() { if (_elements_as_arr == null) @@ -129,10 +129,10 @@ namespace PascalABCCompiler.Collections } /// - /// . + /// Индексирует элементы коллекции. /// - /// . - /// . + /// Номер элемента. + /// Элемент с указанным номером. public T this[int num] { get @@ -142,7 +142,7 @@ namespace PascalABCCompiler.Collections } /// - /// . + /// Число элементов в коллекции. /// public int Count { diff --git a/TreeConverter/NetWrappers/NetHelper.cs b/TreeConverter/NetWrappers/NetHelper.cs index ef2771964..a9063a1ac 100644 --- a/TreeConverter/NetWrappers/NetHelper.cs +++ b/TreeConverter/NetWrappers/NetHelper.cs @@ -1111,16 +1111,16 @@ namespace PascalABCCompiler.NetHelper } else { - //(ssyy) public - //(ds) BindingFlags.FlattenHierarchy - //(ssyy) BindingFlags.FlattenHierarchy. ? :) - //(ds) BindingFlags.FlattenHierarchy, : - // (00:52:19 16/12/2007) + //(ssyy) Забираем также и не public члены + //(ds) добавил BindingFlags.FlattenHierarchy + //(ssyy) убрал BindingFlags.FlattenHierarchy. Зачем оно было нужно? :) + //(ds) добавил BindingFlags.FlattenHierarchy, затем что: + //Ваня Бондарев (00:52:19 16/12/2007) //BindingFlags.FlattenHierarchy eto flag kotoryj ukazyvaet, chto chleny //tipa nado brat' ne tolko iz samogo tipa, no i ego bazovyh klassov //t.GetMembers(BindingFlags.FlattenHierarchy) naprimer. Dlja vybora staticheskih //chlenov eto objazatelno. - // + //Без этого не работает пример BindingFlags bf = BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic; MemberInfo[] mis; if (t.IsInterface) @@ -1139,10 +1139,10 @@ namespace PascalABCCompiler.NetHelper { mis = t.GetMembers(bf); } - //(ssyy) DarkStar, ? + //(ssyy) DarkStar, что за предупреждение по следующей строке? var ht = new Dictionary>(StringComparer.CurrentCultureIgnoreCase); List memb_lst = null; - //(ssyy) DarkStar, 2 ? + //(ssyy) DarkStar, может быть эффективнее слить следующие 2 цикла в один? foreach (MemberInfo mi2 in mis) { //Console.WriteLine(mi2.Name.ToLower()); @@ -1222,7 +1222,7 @@ namespace PascalABCCompiler.NetHelper private static List EmptyMemberInfoList = new List(); - //(ssyy) . + //(ssyy) Является ли член класса видимым. public static field_access_level get_access_level(MemberInfo mi) { field_access_level amod = field_access_level.fal_public; @@ -1429,13 +1429,13 @@ namespace PascalABCCompiler.NetHelper SymbolInfo si=null; List mis = GetMembers(t,name); - //(ssyy) . - // , - // (, - ). , - // Ident ident - // . + //(ssyy) Изменил алгоритм. + //У нас некоторые алгоритмы базируются на том, что возвращённые + //сущности будут одной природы (например, все - методы). Это неверно, + //так как в случае наличия функции Ident и поля ident оба должны попасть + //в список. - //TODO: , . + //TODO: проанализировать и изменить алгоритмы, использующие поиск. foreach (MemberInfo mi in mis) { @@ -1712,7 +1712,7 @@ namespace PascalABCCompiler.NetHelper return cfn; } - // get, . set, . null. + //Возвращает акцессор get, если есть. Иначе возвращает акцессор set, если есть. Иначе возвращает null. public static System.Reflection.MethodInfo GetAnyAccessor(PropertyInfo pi) { MethodInfo get = pi.GetGetMethod(true); diff --git a/TreeConverter/SymbolTable/DSST/AreaListArray.cs b/TreeConverter/SymbolTable/DSST/AreaListArray.cs index d94ea40f9..203904ddd 100644 --- a/TreeConverter/SymbolTable/DSST/AreaListArray.cs +++ b/TreeConverter/SymbolTable/DSST/AreaListArray.cs @@ -46,7 +46,7 @@ namespace SymbolTable data[i].InfoList.Add(node.InfoList[0]); //data[i].InfoList[0].Next = node.InfoList[0]; return; - //throw new Exception(" : "); + //throw new Exception("Ошибка при добавлении области видимости к идентефикатору: такая область уже существует"); } int k=i; for (i=count;i>=k+1;i--) data[i]=data[i-1]; diff --git a/TreeConverter/SymbolTable/DSST/DSHashTable.cs b/TreeConverter/SymbolTable/DSST/DSHashTable.cs index 4ce806590..961273d0c 100644 --- a/TreeConverter/SymbolTable/DSST/DSHashTable.cs +++ b/TreeConverter/SymbolTable/DSST/DSHashTable.cs @@ -6,7 +6,7 @@ namespace SymbolTable { /// - /// + /// Динамическая хеш таблица строк /// public class DSHashTable { diff --git a/TreeConverter/SymbolTable/symbol_information.cs b/TreeConverter/SymbolTable/symbol_information.cs index 23a1b9181..e79b30f27 100644 --- a/TreeConverter/SymbolTable/symbol_information.cs +++ b/TreeConverter/SymbolTable/symbol_information.cs @@ -29,30 +29,30 @@ namespace PascalABCCompiler.TreeConverter //} } - // . + //Тип записи в таблице символов. /*public enum name_information_type { - nit_base_type, // . - nit_common_type, // , TreeConverter . - nit_compiled_type, //, . . - nit_basic_function, // . System. - nit_common_namespace_function, //, . . - nit_common_in_function_function, //, . . - nit_common_method, // . . - nit_compiled_function, // . . - nit_common_namespace, // . . - nit_unit, // . - nit_local_variable, // . - nit_namespace_variable, // . - nit_class_field, // . - nit_common_parameter, // . - nit_basic_parameter, // System. - nit_compiled_parameter, // . . - nit_constant_defnition, // . - nit_common_property, // . - nit_compiled_property, // . . - nit_basic_property, // . - nit_compiled_variable, // . . + nit_base_type, //Пока нигде не используется. + nit_common_type, //Помещается в Сашину таблицу символов в тот момент, когда TreeConverter встречает определение типа. + nit_compiled_type, //Информация, об откомпилированном типе. Находится Ваней в сборках. + nit_basic_function, //Информация о базовом методе. Создается Колей при инициализации модуля System. + nit_common_namespace_function, //Функция, определенная в пространстве имен. Помещается Колей в Сашину таблицу символов. + nit_common_in_function_function, //Функция, определенная в другой функции. Помещается Колей в Сашину таблицу символов. + nit_common_method, //Метод класса. Помещается Колей в Сашину таюлицу символов. + nit_compiled_function, //Метод откомпилированного класса. Находится Ванией в сборках. + nit_common_namespace, //Пространство имен. Пока нигде не добавляется в таблицу символов. + nit_unit, //Помещается Колей в Сашину таблицу символов. + nit_local_variable, //Помещается Колей в Сашину таблицу символов. + nit_namespace_variable, //Помещается Колей в Сашину таблицу символов. + nit_class_field, //Помещается Колей в Сашину таблицу символов. + nit_common_parameter, //Помещается Колей в Сашину таблицу символов. + nit_basic_parameter, //Помещается в таблицу символов при инициализации модуля System. + nit_compiled_parameter, //Не связано с таблицей символов. О этих параметрах знают только откомпилированный функции. + nit_constant_defnition, //Помещается Колей в Сашину таблицу символов. + nit_common_property, //Помещается Колей в Сашину таблицу символов. + nit_compiled_property, //Свойство откомпилированного класса. Находится Ванией в сборках. + nit_basic_property, //Пока нигде не используется. + nit_compiled_variable, //Поле откомпилированного класса. Находится Ванией в сборках. nit_compiled_namespace };*/ diff --git a/TreeConverter/SystemLib/SystemLibInitializer.cs b/TreeConverter/SystemLib/SystemLibInitializer.cs index 075f8c153..acb7687d9 100644 --- a/TreeConverter/SystemLib/SystemLibInitializer.cs +++ b/TreeConverter/SystemLib/SystemLibInitializer.cs @@ -1,6 +1,6 @@ // Copyright (c) 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) -// +//Инициализация системной библиотеки using System; using System.Collections.Generic; using PascalABCCompiler.TreeRealization; @@ -420,13 +420,13 @@ namespace PascalABCCompiler.SystemLibrary sc.AddSymbol(PascalABCCompiler.TreeConverter.compiler_string_consts.false_const_name, new PascalABCCompiler.TreeConverter.SymbolInfo(_false_constant_definition)); - //TODO: . . system . - NetHelper.GetMethod. + //TODO: Сделано по быстрому. Переделать. Можно просто один раз сериализовать модуль system и не инициализировать его всякий раз подобным образом. Неплохо-бы использовать NetHelper.GetMethod. Type tp = typeof(Console); compiled_function_node cfn; System.Type[] arr = new System.Type[1]; System.Reflection.MethodInfo mi; - //TODO: . + //TODO: Сделать узел или базовый метод создания и удаления объекта. common_namespace_function_node cnfn = new common_namespace_function_node(TreeConverter.compiler_string_consts.new_procedure_name, null, null, system_namespace, null); cnfn.parameters.AddElement(new common_parameter("ptr", SystemLibrary.pointer_type, SemanticTree.parameter_type.value, cnfn, concrete_parameter_type.cpt_var, null, null)); @@ -479,7 +479,7 @@ namespace PascalABCCompiler.SystemLibrary public static common_unit_node make_system_unit(SymbolTable.TreeConverterSymbolTable symbol_table, initialization_properties initialization_properties) { - //TODO: location location system_unit-. , - , integer system. + //TODO: В качестве location везде в этом методе следует указывать location system_unit-а. Имя файла мы знаем, а место - там где написано, что integer и прочие типы описаны как бы в модуле system. location system_unit_location = null; SymbolTable.UnitInterfaceScope main_scope = symbol_table.CreateUnitInterfaceScope(new SymbolTable.Scope[0]); SymbolTable.UnitImplementationScope impl_scope = symbol_table.CreateUnitImplementationScope(main_scope, @@ -494,7 +494,7 @@ namespace PascalABCCompiler.SystemLibrary //SymbolTable.Scope sc = cnn.scope; SymbolTable.Scope sc = main_scope; - // . + //Добавляем типы. sc.AddSymbol(PascalABCCompiler.TreeConverter.compiler_string_consts.byte_type_name, new PascalABCCompiler.TreeConverter.SymbolInfo(SystemLibrary.byte_type)); //sc.AddSymbol(PascalABCCompiler.TreeConverter.compiler_string_consts.decimal_type_name, new PascalABCCompiler.TreeConverter.SymbolInfo(SystemLibrary.decimal_type)); sc.AddSymbol(PascalABCCompiler.TreeConverter.compiler_string_consts.sbyte_type_name, new PascalABCCompiler.TreeConverter.SymbolInfo(SystemLibrary.sbyte_type)); @@ -515,7 +515,7 @@ namespace PascalABCCompiler.SystemLibrary sc.AddSymbol(PascalABCCompiler.TreeConverter.compiler_string_consts.base_array_type_name, new PascalABCCompiler.TreeConverter.SymbolInfo(SystemLibrary.array_base_type)); sc.AddSymbol(PascalABCCompiler.TreeConverter.compiler_string_consts.base_delegate_type_name, new PascalABCCompiler.TreeConverter.SymbolInfo(SystemLibrary.delegate_base_type)); - //TODO: . . . + //TODO: Переделать. Пусть таблица символов создается одна. Как статическая. compiled_type_node comp_byte_type = ((compiled_type_node)SystemLibrary.byte_type); compiled_type_node comp_sbyte_type = ((compiled_type_node)SystemLibrary.sbyte_type); compiled_type_node comp_short_type = ((compiled_type_node)SystemLibrary.short_type); diff --git a/TreeConverter/SystemLib/static_executors.cs b/TreeConverter/SystemLib/static_executors.cs index 66c5757f4..fe2e52b00 100644 --- a/TreeConverter/SystemLib/static_executors.cs +++ b/TreeConverter/SystemLib/static_executors.cs @@ -1,6 +1,6 @@ // Copyright (c) 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) -// +//Интерпретатор константных выражений using System; using PascalABCCompiler.TreeRealization; @@ -940,8 +940,8 @@ namespace PascalABCCompiler.SystemLibrary { return null; } - //TODO: ~. . - // byte int???? + //TODO: Проверить опреатор ~. Это опреатор двоичного дополнения. + //Его оставлять в byte с проверкой или уводить в int???? return make_int_const((~(left.constant_value)), call_location); } @@ -2565,7 +2565,7 @@ namespace PascalABCCompiler.SystemLibrary { return null; } - //TODO: ~. . + //TODO: Проверить опреатор ~. Это опреатор двоичного дополнения. return (make_int_const((~(left.constant_value)), call_location)); } @@ -3020,7 +3020,7 @@ namespace PascalABCCompiler.SystemLibrary { return null; } - //TODO: ~. . + //TODO: Проверить опреатор ~. Это опреатор двоичного дополнения. return (new uint_const_node((~(left.constant_value)), call_location)); } @@ -3477,7 +3477,7 @@ namespace PascalABCCompiler.SystemLibrary { return null; } - //TODO: ~. . + //TODO: Проверить опреатор ~. Это опреатор двоичного дополнения. return (new long_const_node((~(left.constant_value)), call_location)); } @@ -3623,7 +3623,7 @@ namespace PascalABCCompiler.SystemLibrary { return null; } - // Int!!!!!!!! + //ТУТ Int!!!!!!!! int_const_node right = parameters[1] as int_const_node; if (right == null) { @@ -3759,7 +3759,7 @@ namespace PascalABCCompiler.SystemLibrary { return null; } - //TODO: , , . . + //TODO: Здесь, в некоторых ситуациях, программа должна падать. Потом сделать корректную обработку. return new long_const_node((-((long)bcn.constant_value)), call_location); } @@ -3935,7 +3935,7 @@ namespace PascalABCCompiler.SystemLibrary { return null; } - //TODO: ~. . + //TODO: Проверить опреатор ~. Это опреатор двоичного дополнения. return (new ulong_const_node((~(left.constant_value)), call_location)); } diff --git a/TreeConverter/TreeConversion/SyntaxTreeToSemanticTreeConverter.cs b/TreeConverter/TreeConversion/SyntaxTreeToSemanticTreeConverter.cs index 0222fa77c..721777ad1 100644 --- a/TreeConverter/TreeConversion/SyntaxTreeToSemanticTreeConverter.cs +++ b/TreeConverter/TreeConversion/SyntaxTreeToSemanticTreeConverter.cs @@ -3,8 +3,8 @@ /*************************************************************************** * - * Compiler - * Errors,SemanticTree,PascalABCCompiler.SyntaxTree + * Интерфейс конвертора синтаксического дерева в семантическое для Compiler + * Зависит от Errors,SemanticTree,PascalABCCompiler.SyntaxTree * ***************************************************************************/ @@ -19,11 +19,11 @@ namespace PascalABCCompiler.TreeConverter public SyntaxTreeToSemanticTreeConverter() { - //(ssyy) visitor + //(ssyy) запоминаем visitor SystemLibrary.SystemLibrary.syn_visitor = stv; } - //TODO: , . + //TODO: Разобраться, где использутеся. public SymbolTable.TreeConverterSymbolTable SymbolTable { get @@ -70,7 +70,7 @@ namespace PascalABCCompiler.TreeConverter } - //TODO: . + //TODO: Исправить коллкцию модулей. public PascalABCCompiler.TreeRealization.common_unit_node CompileInterface(SyntaxTree.compilation_unit SyntaxUnit, PascalABCCompiler.TreeRealization.unit_node_list UsedUnits, List ErrorsList, List WarningsList, PascalABCCompiler.Errors.SyntaxError parser_error, System.Collections.Hashtable bad_nodes, TreeRealization.using_namespace_list namespaces, Dictionary docs, bool debug, bool debugging) @@ -99,7 +99,7 @@ namespace PascalABCCompiler.TreeConverter foreach (SyntaxTree.compiler_directive cd in SyntaxUnit.compiler_directives) cd.visit(stv); - stv.DirectivesToNodesLinks = CompilerDirectivesToSyntaxTreeNodesLinker.BuildLinks(SyntaxUnit, ErrorsList); //MikhailoMMX (02.10.10) + stv.DirectivesToNodesLinks = CompilerDirectivesToSyntaxTreeNodesLinker.BuildLinks(SyntaxUnit, ErrorsList); //MikhailoMMX добавил передачу списка ошибок (02.10.10) SyntaxUnit.visit(stv); /*SyntaxTree.program_module pmod=SyntaxUnit as SyntaxTree.program_module; @@ -150,7 +150,7 @@ namespace PascalABCCompiler.TreeConverter { throw new PascalABCCompiler.TreeConverter.CompilerInternalError("Program has not implementation part"); } - //TODO: , common_unit_node. + //TODO: Переделать, чтобы Сашин код работал с common_unit_node. stv.compiled_unit=(PascalABCCompiler.TreeRealization.common_unit_node)SemanticUnit; stv.current_document = new TreeRealization.document(SyntaxUnit.file_name); @@ -165,7 +165,7 @@ namespace PascalABCCompiler.TreeConverter public void Reset() { stv.reset(); - //stv = new syntax_tree_visitor(); // SSM 14/07/13 - , , + //stv = new syntax_tree_visitor(); // SSM 14/07/13 - может, будет занимать больше памяти, зато все внутренние переменные будут чиститься //SystemLibrary.SystemLibrary.syn_visitor = stv; } diff --git a/TreeConverter/TreeConversion/SystemLibInitializer.cs b/TreeConverter/TreeConversion/SystemLibInitializer.cs index 4086e1cc5..cc84882d6 100644 --- a/TreeConverter/TreeConversion/SystemLibInitializer.cs +++ b/TreeConverter/TreeConversion/SystemLibInitializer.cs @@ -377,7 +377,7 @@ namespace TreeConverter _char_type.add_internal_interface(oti); } - // . NetHelper + //Спросить у Вани. Мой NetHelper не поддерживает такие операциию private void NetInitialize() { /* @@ -400,29 +400,29 @@ namespace TreeConverter _pointer_type=compiled_type_node.get_type_node(Type.GetType("System.Void*")); NetInitialize(); - // . + //Преобразования типов. make_type_conversion(_integer_type,_real_type,type_compare.less_type,SemanticTree.basic_function_type.itod); - // integer. - // integer. + //Операции для типа integer. + //Присваивание для integer. make_assign_operator(_integer_type,SemanticTree.basic_function_type.iassign); - // . + //Унарные операции. make_unary_operator(compiler_string_consts.minus_name,_integer_type,SemanticTree.basic_function_type.iunmin); make_unary_operator(compiler_string_consts.not_name,_integer_type,SemanticTree.basic_function_type.inot); make_empty_operator(compiler_string_consts.plus_name,_integer_type); - // . + //Арифметические операции. _int_add=make_binary_operator(compiler_string_consts.plus_name,_integer_type,SemanticTree.basic_function_type.iadd); _int_sub=make_binary_operator(compiler_string_consts.minus_name,_integer_type,SemanticTree.basic_function_type.isub); make_binary_operator(compiler_string_consts.mul_name,_integer_type,SemanticTree.basic_function_type.imul); make_binary_operator(compiler_string_consts.idiv_name,_integer_type,SemanticTree.basic_function_type.idiv); make_binary_operator(compiler_string_consts.mod_name,_integer_type,SemanticTree.basic_function_type.imod); - // / integer. + //Операция / для integer. make_common_binary_operation(compiler_string_consts.div_name,_integer_type,_real_type,_real_type, SemanticTree.basic_function_type.ddiv,_real_type); - // . + //Опрерации сравнения. make_binary_operator(compiler_string_consts.gr_name,_integer_type,SemanticTree.basic_function_type.igr,_bool_type); make_binary_operator(compiler_string_consts.greq_name,_integer_type,SemanticTree.basic_function_type.igreq,_bool_type); make_binary_operator(compiler_string_consts.sm_name,_integer_type,SemanticTree.basic_function_type.ism,_bool_type); @@ -430,7 +430,7 @@ namespace TreeConverter make_binary_operator(compiler_string_consts.eq_name,_integer_type,SemanticTree.basic_function_type.ieq,_bool_type); make_binary_operator(compiler_string_consts.noteq_name,_integer_type,SemanticTree.basic_function_type.inoteq,_bool_type); - // . + //Логические опреции. make_binary_operator(compiler_string_consts.and_name,_integer_type,SemanticTree.basic_function_type.iand); make_binary_operator(compiler_string_consts.or_name,_integer_type,SemanticTree.basic_function_type.ior); make_binary_operator(compiler_string_consts.xor_name,_integer_type,SemanticTree.basic_function_type.ixor); @@ -441,17 +441,17 @@ namespace TreeConverter //Assign. make_assign_operator(_real_type,SemanticTree.basic_function_type.dassign); - // . + //Унарные операции. make_unary_operator(compiler_string_consts.minus_name,_real_type,SemanticTree.basic_function_type.dunmin); make_empty_operator(compiler_string_consts.plus_name,_real_type); - // . + //Арифметические операции. make_binary_operator(compiler_string_consts.plus_name,_real_type,SemanticTree.basic_function_type.dadd); make_binary_operator(compiler_string_consts.minus_name,_real_type,SemanticTree.basic_function_type.dsub); make_binary_operator(compiler_string_consts.mul_name,_real_type,SemanticTree.basic_function_type.dmul); make_binary_operator(compiler_string_consts.div_name,_real_type,SemanticTree.basic_function_type.ddiv); - // . + //Опрерации сравнения. make_binary_operator(compiler_string_consts.gr_name,_real_type,SemanticTree.basic_function_type.dgr,_bool_type); make_binary_operator(compiler_string_consts.greq_name,_real_type,SemanticTree.basic_function_type.dgreq,_bool_type); make_binary_operator(compiler_string_consts.sm_name,_real_type,SemanticTree.basic_function_type.dsm,_bool_type); @@ -463,7 +463,7 @@ namespace TreeConverter //Assign. make_assign_operator(_char_type,SemanticTree.basic_function_type.charassign); - // . + //Опрерации сравнения. make_binary_operator(compiler_string_consts.gr_name,_char_type,SemanticTree.basic_function_type.chargr,_bool_type); make_binary_operator(compiler_string_consts.greq_name,_char_type,SemanticTree.basic_function_type.chargreq,_bool_type); make_binary_operator(compiler_string_consts.sm_name,_char_type,SemanticTree.basic_function_type.charsm,_bool_type); @@ -475,17 +475,17 @@ namespace TreeConverter //Assign. make_assign_operator(_bool_type,SemanticTree.basic_function_type.boolassign); - // . - // . + //Логические операции. + //Унарные операции. make_unary_operator(compiler_string_consts.not_name,_bool_type,SemanticTree.basic_function_type.bnot); - // . + //Логическме операции. make_binary_operator(compiler_string_consts.and_name,_bool_type,SemanticTree.basic_function_type.band); make_binary_operator(compiler_string_consts.or_name,_bool_type,SemanticTree.basic_function_type.bor); make_binary_operator(compiler_string_consts.xor_name,_bool_type,SemanticTree.basic_function_type.bxor); make_unary_operator(compiler_string_consts.not_name,_bool_type,SemanticTree.basic_function_type.boolnot); - // . + //Опрерации сравнения. make_binary_operator(compiler_string_consts.gr_name,_bool_type,SemanticTree.basic_function_type.boolgr); make_binary_operator(compiler_string_consts.greq_name,_bool_type,SemanticTree.basic_function_type.boolgreq); make_binary_operator(compiler_string_consts.sm_name,_bool_type,SemanticTree.basic_function_type.boolsm); @@ -511,7 +511,7 @@ namespace TreeConverter private void init_temp_methods(SymbolTable.Scope sc) { - //TODO: . . + //TODO: Сделано по быстрому. Переделать. Type tp=typeof(Console); compiled_function_node cfn; System.Type[] arr=new System.Type[1]; @@ -636,7 +636,7 @@ namespace TreeConverter _system_unit.scope=conv.symbol_table.CreateUnitInterfaceScope(new SymbolTable.Scope[0]); SymbolTable.Scope susc=_system_unit.scope; - // . + //Добавляем типы. susc.AddSymbol(compiler_string_consts.integer_type_name,new SymbolInfo(_integer_type)); susc.AddSymbol(compiler_string_consts.real_type_name,new SymbolInfo(_real_type)); susc.AddSymbol(compiler_string_consts.char_type_name,new SymbolInfo(_char_type)); diff --git a/TreeConverter/TreeConversion/exceptions.cs b/TreeConverter/TreeConversion/exceptions.cs index 678ae6076..42a30ab32 100644 --- a/TreeConverter/TreeConversion/exceptions.cs +++ b/TreeConverter/TreeConversion/exceptions.cs @@ -1,6 +1,6 @@ // Copyright (c) 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) -//, . +//Класс, представляющий внутреннюю ошибку компилятора. using System; namespace PascalABCCompiler.TreeConverter diff --git a/TreeConverter/TreeConversion/motivation.cs b/TreeConverter/TreeConversion/motivation.cs index e4375c320..a5107ae4f 100644 --- a/TreeConverter/TreeConversion/motivation.cs +++ b/TreeConverter/TreeConversion/motivation.cs @@ -1,17 +1,17 @@ // Copyright (c) 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) -// - , , . +//Причина обхода узла синтаксического дерева - получение выражения, адреса, типа узла. using System; namespace PascalABCCompiler.TreeConverter { - //TODO: request. + //TODO: Переименовать в request. /// - /// - request. + /// Будущее название класса - request. /// public enum motivation {none,expression_evaluation,address_reciving,semantic_node_reciving}; - //TODO: . + //TODO: Избавиться от этого. public class motivation_keeper { @@ -35,7 +35,7 @@ namespace PascalABCCompiler.TreeConverter public motivation motivation { - //(ssyy) Darkstar!!! ! + //(ssyy) Darkstar!!! Данный код провоцирует ложные переходы в режиме трассировки! get { motivation temp=_mot; diff --git a/TreeConverter/TreeConversion/name_reflector.cs b/TreeConverter/TreeConversion/name_reflector.cs index 669a66be7..f817123ef 100644 --- a/TreeConverter/TreeConversion/name_reflector.cs +++ b/TreeConverter/TreeConversion/name_reflector.cs @@ -1,6 +1,6 @@ // Copyright (c) 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) -// . +//Отображение типов операторов узлов синтаксического дерева в имена методов. using System; namespace PascalABCCompiler.TreeConverter diff --git a/TreeConverter/TreeConversion/returner.cs b/TreeConverter/TreeConversion/returner.cs index 62d95ec5f..c322ca38b 100644 --- a/TreeConverter/TreeConversion/returner.cs +++ b/TreeConverter/TreeConversion/returner.cs @@ -1,14 +1,14 @@ // Copyright (c) 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) -// . +//Используется для возвращения значения при обходе дерева. //(ssyy) 01.12.2007 -//returner , visit syntax_tree_visitor -// . -// returner. -// ret_semantic semantic_node. -// . -// returner . +//returner восполняет тот недостаток, что функции visit класса syntax_tree_visitor +//сами ничего не возвращают. +//Я внёс изменения в концепцию реализации класса returner. +//Теперь здесь только одна переменная ret_semantic типа semantic_node. +//Она приводится при необходимости к нужному типу. +//Внешне при этом работа с классом returner не изменилась. using System; using PascalABCCompiler.TreeRealization; @@ -59,7 +59,7 @@ namespace PascalABCCompiler.TreeConverter ad.is_addressed = false; }*/ - //, , syntax_tree_visitor-. + //Надеюсь, это сильно не скажется на производительности, хотя в другом случае этот же код просто будет разбросан по всем метдам syntax_tree_visitor-а. base_function_call bfc = ret_semantic as base_function_call; if (bfc != null) { diff --git a/TreeConverter/TreeConversion/unit_nodeArrayList.cs b/TreeConverter/TreeConversion/unit_nodeArrayList.cs index a2649b848..ad871c175 100644 --- a/TreeConverter/TreeConversion/unit_nodeArrayList.cs +++ b/TreeConverter/TreeConversion/unit_nodeArrayList.cs @@ -5,7 +5,7 @@ using PascalABCCompiler.TreeRealization; namespace PascalABCCompiler.TreeConverter { - //TODO: . + //TODO: Переделать с использованием коллекций. /// ///Collection of unit_node /// diff --git a/TreeConverter/TreeConversion/using_namespaceArrayList.cs b/TreeConverter/TreeConversion/using_namespaceArrayList.cs index 620cd423b..1ef8e229b 100644 --- a/TreeConverter/TreeConversion/using_namespaceArrayList.cs +++ b/TreeConverter/TreeConversion/using_namespaceArrayList.cs @@ -5,7 +5,7 @@ using PascalABCCompiler.TreeRealization; namespace PascalABCCompiler.TreeConverter { - //TODO: . + //TODO: Переделать с использованием коллекций. /// ///Collection of using_namespace /// diff --git a/TreeConverter/TreeRealization/Expressions.cs b/TreeConverter/TreeRealization/Expressions.cs index 3357a4aa3..84d3f2d5b 100644 --- a/TreeConverter/TreeRealization/Expressions.cs +++ b/TreeConverter/TreeRealization/Expressions.cs @@ -386,16 +386,16 @@ namespace PascalABCCompiler.TreeRealization } /// - /// . + /// Метод для обхода дерева посетителем. /// - /// - . + /// Класс - посетитель дерева. public override void visit(SemanticTree.ISemanticVisitor visitor) { visitor.visit(this); } /// - /// . + /// Тип узла. /// public override semantic_node_type semantic_node_type { @@ -441,16 +441,16 @@ namespace PascalABCCompiler.TreeRealization } /// - /// . + /// Метод для обхода дерева посетителем. /// - /// - . + /// Класс - посетитель дерева. public override void visit(SemanticTree.ISemanticVisitor visitor) { visitor.visit(this); } /// - /// . + /// Тип узла. /// public override semantic_node_type semantic_node_type { diff --git a/TreeConverter/TreeRealization/events.cs b/TreeConverter/TreeRealization/events.cs index 2d788588d..61ff91718 100644 --- a/TreeConverter/TreeRealization/events.cs +++ b/TreeConverter/TreeRealization/events.cs @@ -135,7 +135,7 @@ namespace PascalABCCompiler.TreeRealization } /// - /// , . + /// Тип, который содержит этот метод. /// public common_type_node cont_type { diff --git a/TreeConverter/TreeRealization/labels.cs b/TreeConverter/TreeRealization/labels.cs index 8b8fa9ee8..be36b2b0e 100644 --- a/TreeConverter/TreeRealization/labels.cs +++ b/TreeConverter/TreeRealization/labels.cs @@ -1,14 +1,14 @@ // Copyright (c) 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) -// ssyy -// . +//Автор ssyy +//Описывает метки и переходы. using System; using System.Collections.Generic; namespace PascalABCCompiler.TreeRealization { - //(ssyy) , . + //(ssyy) Характеризует блок кода, нужно для меток. public class code_block { private code_block _up_block; @@ -29,16 +29,16 @@ namespace PascalABCCompiler.TreeRealization public class label_node : definition_node, SemanticTree.ILabelNode { - // + //имя метки private string _name; - // + //расположение в программе private location _loc; - //, + //определяет, встретилась ли метка в коде private bool _is_defined = false; - //goto + //goto на данную метку private List _goto_statements = new List(); public List goto_statements @@ -47,7 +47,7 @@ namespace PascalABCCompiler.TreeRealization //set { _goto_statements = value; } } - // , + //Блок кода, в котором встречена метка private code_block _comprehensive_code_block = null; public code_block comprehensive_code_block @@ -62,7 +62,7 @@ namespace PascalABCCompiler.TreeRealization } } - // + //запрещены ли переходы на метку //private bool _goto_blocked = false; //public bool goto_blocked @@ -107,7 +107,7 @@ namespace PascalABCCompiler.TreeRealization } /// - /// . + /// Тип узла. /// public override semantic_node_type semantic_node_type { @@ -118,7 +118,7 @@ namespace PascalABCCompiler.TreeRealization } /// - /// . + /// Обобщенный тип узла. /// public override general_node_type general_node_type { @@ -187,7 +187,7 @@ namespace PascalABCCompiler.TreeRealization } /// - /// . + /// Тип узла. /// public override semantic_node_type semantic_node_type { @@ -232,7 +232,7 @@ namespace PascalABCCompiler.TreeRealization } /// - /// . + /// Тип узла. /// public override semantic_node_type semantic_node_type { diff --git a/Utils/DefaultLanguageResMaker/LanguageResMaker.pas b/Utils/DefaultLanguageResMaker/LanguageResMaker.pas index d50d5261d..203149033 100644 --- a/Utils/DefaultLanguageResMaker/LanguageResMaker.pas +++ b/Utils/DefaultLanguageResMaker/LanguageResMaker.pas @@ -11,12 +11,12 @@ var Files:array of FileInfo; begin Files:=DirectoryInfo.Create('..\..\bin\lng\rus').GetFiles('*.*'); - Writeln(' '+Files.Length.tostring+' , ...'); + Writeln('Найдено '+Files.Length.tostring+' файлов, обработка...'); res:=''; for i:=0 to Files.Length-1 do res:=res+#13#10#13#10'//'+Files[i].Name+#13#10'%PREFIX%='#13#10+ ReadFileToEnd(Files[i].FullName); - Writeln(' ...'); + Writeln('Сохранение собраного файла в ресурс...'); ResWriter:=ResourceWriter.Create('..\..\Localization\DefaultLang.resources'); ResWriter.AddResource('DefaultLanguage', System.Text.Encoding.GetEncoding(1251).GetBytes(res)); ResWriter.Generate; diff --git a/Utils/NodesGeneratorNew/Form1.cs b/Utils/NodesGeneratorNew/Form1.cs index e58ef5c97..ca10cc290 100644 --- a/Utils/NodesGeneratorNew/Form1.cs +++ b/Utils/NodesGeneratorNew/Form1.cs @@ -168,7 +168,7 @@ namespace NodesGenerator private ToolStripSeparator toolStripSeparator7; private ToolStripButton toolStripButtonTagSelected; private Button filterSelected; - private ToolStripMenuItem ToolStripMenuItem; + private ToolStripMenuItem присвоитьТегToolStripMenuItem; private Splitter splitter3; private Button filterAncestors; private IContainer components; @@ -299,7 +299,7 @@ namespace NodesGenerator this.deleteNodeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator(); this.sortToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.присвоитьТегToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.globalRenamerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -342,12 +342,12 @@ namespace NodesGenerator // openFileDialog1 // this.openFileDialog1.DefaultExt = "nin"; - this.openFileDialog1.Filter = " (*.nin)|*.nin| (*.*)|*.*"; + this.openFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*"; // // saveFileDialog1 // this.saveFileDialog1.DefaultExt = "nin"; - this.saveFileDialog1.Filter = " (*.nin)|*.nin| (*.*)|*.*"; + this.saveFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*"; // // toolStripStatusLabel1 // @@ -410,7 +410,7 @@ namespace NodesGenerator this.toolStripButtonNew.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripButtonNew.Name = "toolStripButtonNew"; this.toolStripButtonNew.Size = new System.Drawing.Size(24, 24); - this.toolStripButtonNew.Text = ""; + this.toolStripButtonNew.Text = "Новый"; this.toolStripButtonNew.Click += new System.EventHandler(this.newToolStripMenuItem_Click); // // toolStripOpenButton @@ -420,7 +420,7 @@ namespace NodesGenerator this.toolStripOpenButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripOpenButton.Name = "toolStripOpenButton"; this.toolStripOpenButton.Size = new System.Drawing.Size(24, 24); - this.toolStripOpenButton.Text = "..."; + this.toolStripOpenButton.Text = "Открыть..."; this.toolStripOpenButton.Click += new System.EventHandler(this.open_Click); // // toolStripSaveButton @@ -430,7 +430,7 @@ namespace NodesGenerator this.toolStripSaveButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripSaveButton.Name = "toolStripSaveButton"; this.toolStripSaveButton.Size = new System.Drawing.Size(24, 24); - this.toolStripSaveButton.Text = ""; + this.toolStripSaveButton.Text = "Сохранить"; this.toolStripSaveButton.Click += new System.EventHandler(this.save_Click); // // toolStripSaveAsButton @@ -440,7 +440,7 @@ namespace NodesGenerator this.toolStripSaveAsButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripSaveAsButton.Name = "toolStripSaveAsButton"; this.toolStripSaveAsButton.Size = new System.Drawing.Size(24, 24); - this.toolStripSaveAsButton.Text = " ..."; + this.toolStripSaveAsButton.Text = "Сохранить как..."; this.toolStripSaveAsButton.Click += new System.EventHandler(this.save_as_Click); // // toolStripButtonSaveStore @@ -450,7 +450,7 @@ namespace NodesGenerator this.toolStripButtonSaveStore.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripButtonSaveStore.Name = "toolStripButtonSaveStore"; this.toolStripButtonSaveStore.Size = new System.Drawing.Size(24, 24); - this.toolStripButtonSaveStore.Text = " "; + this.toolStripButtonSaveStore.Text = "Сохранить и сделать копию"; this.toolStripButtonSaveStore.Click += new System.EventHandler(this.toolStripButtonSaveStore_Click); // // toolStripSeparator1 @@ -465,7 +465,7 @@ namespace NodesGenerator this.toolStripOptionsButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripOptionsButton.Name = "toolStripOptionsButton"; this.toolStripOptionsButton.Size = new System.Drawing.Size(24, 24); - this.toolStripOptionsButton.Text = "..."; + this.toolStripOptionsButton.Text = "Настройки..."; this.toolStripOptionsButton.Click += new System.EventHandler(this.toolStripOptionsButton_Click); // // toolStripSeparator2 @@ -480,7 +480,7 @@ namespace NodesGenerator this.toolStripGenerateButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripGenerateButton.Name = "toolStripGenerateButton"; this.toolStripGenerateButton.Size = new System.Drawing.Size(24, 24); - this.toolStripGenerateButton.Text = ""; + this.toolStripGenerateButton.Text = "Генерировать"; this.toolStripGenerateButton.Click += new System.EventHandler(this.toolStripGenerateButton_Click); // // groupBox1 @@ -493,7 +493,7 @@ namespace NodesGenerator this.groupBox1.Size = new System.Drawing.Size(295, 532); this.groupBox1.TabIndex = 20; this.groupBox1.TabStop = false; - this.groupBox1.Text = ":"; + this.groupBox1.Text = "Узлы:"; // // nodes_list // @@ -530,7 +530,7 @@ namespace NodesGenerator this.addToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("addToolStripMenuItem.Image"))); this.addToolStripMenuItem.Name = "addToolStripMenuItem"; this.addToolStripMenuItem.Size = new System.Drawing.Size(215, 26); - this.addToolStripMenuItem.Text = ""; + this.addToolStripMenuItem.Text = "Добавить"; this.addToolStripMenuItem.Click += new System.EventHandler(this.add_Click); // // toolStripMenuItem6 @@ -543,7 +543,7 @@ namespace NodesGenerator this.moveUpToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("moveUpToolStripMenuItem.Image"))); this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem"; this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(215, 26); - this.moveUpToolStripMenuItem.Text = " "; + this.moveUpToolStripMenuItem.Text = "Передвинуть вверх"; this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.Up_Click); // // moveDownToolStripMenuItem @@ -551,7 +551,7 @@ namespace NodesGenerator this.moveDownToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("moveDownToolStripMenuItem.Image"))); this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem"; this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(215, 26); - this.moveDownToolStripMenuItem.Text = " "; + this.moveDownToolStripMenuItem.Text = "Передвинуть вниз"; this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.Down_Click); // // toolStripMenuItem7 @@ -564,7 +564,7 @@ namespace NodesGenerator this.deleteToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("deleteToolStripMenuItem.Image"))); this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; this.deleteToolStripMenuItem.Size = new System.Drawing.Size(215, 26); - this.deleteToolStripMenuItem.Text = ""; + this.deleteToolStripMenuItem.Text = "Удалить"; this.deleteToolStripMenuItem.Click += new System.EventHandler(this.delete_Click); // // nodesToolStrip @@ -665,7 +665,7 @@ namespace NodesGenerator this.toolStripButtonTagSelected.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripButtonTagSelected.Name = "toolStripButtonTagSelected"; this.toolStripButtonTagSelected.Size = new System.Drawing.Size(24, 24); - this.toolStripButtonTagSelected.Text = " "; + this.toolStripButtonTagSelected.Text = "Присвоить тег"; this.toolStripButtonTagSelected.Click += new System.EventHandler(this.saveTempFilter_Click); // // groupBox2 @@ -682,7 +682,7 @@ namespace NodesGenerator this.groupBox2.Size = new System.Drawing.Size(793, 532); this.groupBox2.TabIndex = 21; this.groupBox2.TabStop = false; - this.groupBox2.Text = " :"; + this.groupBox2.Text = "Содержимое узлов:"; // // panel3 // @@ -826,7 +826,7 @@ namespace NodesGenerator this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(787, 18); this.label3.TabIndex = 26; - this.label3.Text = " :"; + this.label3.Text = "Справочная информация:"; // // splitter1 // @@ -859,7 +859,7 @@ namespace NodesGenerator this.tags.Name = "tags"; this.tags.Size = new System.Drawing.Size(42, 17); this.tags.TabIndex = 3; - this.tags.Text = ":"; + this.tags.Text = "Теги:"; // // tagItems // @@ -891,7 +891,7 @@ namespace NodesGenerator this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(81, 17); this.label4.TabIndex = 0; - this.label4.Text = ":"; + this.label4.Text = "Категории:"; // // panel1 // @@ -913,7 +913,7 @@ namespace NodesGenerator this.saveNodeButton.Name = "saveNodeButton"; this.saveNodeButton.Size = new System.Drawing.Size(116, 26); this.saveNodeButton.TabIndex = 32; - this.saveNodeButton.Text = ""; + this.saveNodeButton.Text = "Применить"; this.saveNodeButton.UseVisualStyleBackColor = true; this.saveNodeButton.Click += new System.EventHandler(this.saveNodeButton_Click); // @@ -923,7 +923,7 @@ namespace NodesGenerator this.reloadButton.Name = "reloadButton"; this.reloadButton.Size = new System.Drawing.Size(116, 25); this.reloadButton.TabIndex = 31; - this.reloadButton.Text = ""; + this.reloadButton.Text = "Перезагрузить"; this.reloadButton.UseVisualStyleBackColor = true; this.reloadButton.Click += new System.EventHandler(this.reloadButton_Click_1); // @@ -942,7 +942,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(110, 17); this.label2.TabIndex = 29; - this.label2.Text = " :"; + this.label2.Text = "Базовый класс:"; // // label1 // @@ -951,7 +951,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(73, 17); this.label1.TabIndex = 28; - this.label1.Text = " :"; + this.label1.Text = "Имя узла:"; // // node_name // @@ -1008,7 +1008,7 @@ namespace NodesGenerator // this.editInTagsCollectionToolStripMenuItem.Name = "editInTagsCollectionToolStripMenuItem"; this.editInTagsCollectionToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.editInTagsCollectionToolStripMenuItem.Text = " ..."; + this.editInTagsCollectionToolStripMenuItem.Text = "Редактор тегов..."; this.editInTagsCollectionToolStripMenuItem.Click += new System.EventHandler(this.tagsCollectionToolStripMenuItem_Click); // // filterCategories @@ -1047,7 +1047,7 @@ namespace NodesGenerator this.filterSelected.Name = "filterSelected"; this.filterSelected.Size = new System.Drawing.Size(140, 50); this.filterSelected.TabIndex = 1; - this.filterSelected.Text = " "; + this.filterSelected.Text = "Только выделенные"; this.filterSelected.UseVisualStyleBackColor = true; this.filterSelected.Click += new System.EventHandler(this.customFilterMode_CheckedChanged); // @@ -1062,7 +1062,7 @@ namespace NodesGenerator this.filterAncestors.Name = "filterAncestors"; this.filterAncestors.Size = new System.Drawing.Size(140, 29); this.filterAncestors.TabIndex = 2; - this.filterAncestors.Text = " "; + this.filterAncestors.Text = "Только предки"; this.filterAncestors.UseVisualStyleBackColor = true; this.filterAncestors.Click += new System.EventHandler(this.filterAncestors_Click); // @@ -1077,7 +1077,7 @@ namespace NodesGenerator this.resetFilterButton.Name = "resetFilterButton"; this.resetFilterButton.Size = new System.Drawing.Size(140, 29); this.resetFilterButton.TabIndex = 0; - this.resetFilterButton.Text = " "; + this.resetFilterButton.Text = "Очистить фильтр"; this.resetFilterButton.UseVisualStyleBackColor = true; this.resetFilterButton.Click += new System.EventHandler(this.resetFilterButton_Click); // @@ -1093,7 +1093,7 @@ namespace NodesGenerator this.quitToolStripMenuItem}); this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Size = new System.Drawing.Size(54, 22); - this.fileToolStripMenuItem.Text = ""; + this.fileToolStripMenuItem.Text = "Файл"; // // newToolStripMenuItem // @@ -1101,7 +1101,7 @@ namespace NodesGenerator this.newToolStripMenuItem.Name = "newToolStripMenuItem"; this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); this.newToolStripMenuItem.Size = new System.Drawing.Size(273, 26); - this.newToolStripMenuItem.Text = ""; + this.newToolStripMenuItem.Text = "Новый"; this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); // // openToolStripMenuItem @@ -1110,7 +1110,7 @@ namespace NodesGenerator this.openToolStripMenuItem.Name = "openToolStripMenuItem"; this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); this.openToolStripMenuItem.Size = new System.Drawing.Size(273, 26); - this.openToolStripMenuItem.Text = "..."; + this.openToolStripMenuItem.Text = "Открыть..."; this.openToolStripMenuItem.Click += new System.EventHandler(this.open_Click); // // saveToolStripMenuItem @@ -1119,7 +1119,7 @@ namespace NodesGenerator this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); this.saveToolStripMenuItem.Size = new System.Drawing.Size(273, 26); - this.saveToolStripMenuItem.Text = ""; + this.saveToolStripMenuItem.Text = "Сохранить"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.save_Click); // // saveAsToolStripMenuItem @@ -1129,7 +1129,7 @@ namespace NodesGenerator this.saveAsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Alt) | System.Windows.Forms.Keys.S))); this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(273, 26); - this.saveAsToolStripMenuItem.Text = " ..."; + this.saveAsToolStripMenuItem.Text = "Сохранить как..."; this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.save_as_Click); // // saveAndStoreToolStripMenuItem @@ -1137,7 +1137,7 @@ namespace NodesGenerator this.saveAndStoreToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("saveAndStoreToolStripMenuItem.Image"))); this.saveAndStoreToolStripMenuItem.Name = "saveAndStoreToolStripMenuItem"; this.saveAndStoreToolStripMenuItem.Size = new System.Drawing.Size(273, 26); - this.saveAndStoreToolStripMenuItem.Text = " "; + this.saveAndStoreToolStripMenuItem.Text = "Сохранить и сделать копию"; // // toolStripMenuItem1 // @@ -1148,7 +1148,7 @@ namespace NodesGenerator // this.quitToolStripMenuItem.Name = "quitToolStripMenuItem"; this.quitToolStripMenuItem.Size = new System.Drawing.Size(273, 26); - this.quitToolStripMenuItem.Text = ""; + this.quitToolStripMenuItem.Text = "Выйти"; this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click); // // nodesToolStripMenuItem @@ -1162,11 +1162,11 @@ namespace NodesGenerator this.deleteNodeToolStripMenuItem, this.toolStripMenuItem4, this.sortToolStripMenuItem, - this.ToolStripMenuItem, + this.присвоитьТегToolStripMenuItem, this.globalRenamerToolStripMenuItem}); this.nodesToolStripMenuItem.Name = "nodesToolStripMenuItem"; this.nodesToolStripMenuItem.Size = new System.Drawing.Size(54, 22); - this.nodesToolStripMenuItem.Text = ""; + this.nodesToolStripMenuItem.Text = "Узлы"; // // addNodeToolStripMenuItem // @@ -1174,7 +1174,7 @@ namespace NodesGenerator this.addNodeToolStripMenuItem.Name = "addNodeToolStripMenuItem"; this.addNodeToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); this.addNodeToolStripMenuItem.Size = new System.Drawing.Size(279, 26); - this.addNodeToolStripMenuItem.Text = " "; + this.addNodeToolStripMenuItem.Text = "Добавить узел"; this.addNodeToolStripMenuItem.Click += new System.EventHandler(this.add_Click); // // toolStripMenuItem2 @@ -1187,7 +1187,7 @@ namespace NodesGenerator this.moveNodeUpToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("moveNodeUpToolStripMenuItem.Image"))); this.moveNodeUpToolStripMenuItem.Name = "moveNodeUpToolStripMenuItem"; this.moveNodeUpToolStripMenuItem.Size = new System.Drawing.Size(279, 26); - this.moveNodeUpToolStripMenuItem.Text = " "; + this.moveNodeUpToolStripMenuItem.Text = "Передвинуть узел вверх"; this.moveNodeUpToolStripMenuItem.Click += new System.EventHandler(this.Up_Click); // // moveNodeDownToolStripMenuItem @@ -1195,7 +1195,7 @@ namespace NodesGenerator this.moveNodeDownToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("moveNodeDownToolStripMenuItem.Image"))); this.moveNodeDownToolStripMenuItem.Name = "moveNodeDownToolStripMenuItem"; this.moveNodeDownToolStripMenuItem.Size = new System.Drawing.Size(279, 26); - this.moveNodeDownToolStripMenuItem.Text = " "; + this.moveNodeDownToolStripMenuItem.Text = "Передвинуть узел вниз"; this.moveNodeDownToolStripMenuItem.Click += new System.EventHandler(this.Down_Click); // // toolStripMenuItem3 @@ -1208,7 +1208,7 @@ namespace NodesGenerator this.deleteNodeToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("deleteNodeToolStripMenuItem.Image"))); this.deleteNodeToolStripMenuItem.Name = "deleteNodeToolStripMenuItem"; this.deleteNodeToolStripMenuItem.Size = new System.Drawing.Size(279, 26); - this.deleteNodeToolStripMenuItem.Text = " "; + this.deleteNodeToolStripMenuItem.Text = "Удалить узел"; this.deleteNodeToolStripMenuItem.Click += new System.EventHandler(this.delete_Click); // // toolStripMenuItem4 @@ -1221,22 +1221,22 @@ namespace NodesGenerator this.sortToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("sortToolStripMenuItem.Image"))); this.sortToolStripMenuItem.Name = "sortToolStripMenuItem"; this.sortToolStripMenuItem.Size = new System.Drawing.Size(279, 26); - this.sortToolStripMenuItem.Text = " "; + this.sortToolStripMenuItem.Text = "Отсортировать узлы"; this.sortToolStripMenuItem.Click += new System.EventHandler(this.sortToolStripMenuItem_Click); // - // ToolStripMenuItem + // присвоитьТегToolStripMenuItem // - this.ToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("ToolStripMenuItem.Image"))); - this.ToolStripMenuItem.Name = "ToolStripMenuItem"; - this.ToolStripMenuItem.Size = new System.Drawing.Size(279, 26); - this.ToolStripMenuItem.Text = " "; - this.ToolStripMenuItem.Click += new System.EventHandler(this.saveTempFilter_Click); + this.присвоитьТегToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("присвоитьТегToolStripMenuItem.Image"))); + this.присвоитьТегToolStripMenuItem.Name = "присвоитьТегToolStripMenuItem"; + this.присвоитьТегToolStripMenuItem.Size = new System.Drawing.Size(279, 26); + this.присвоитьТегToolStripMenuItem.Text = "Присвоить тег"; + this.присвоитьТегToolStripMenuItem.Click += new System.EventHandler(this.saveTempFilter_Click); // // globalRenamerToolStripMenuItem // this.globalRenamerToolStripMenuItem.Name = "globalRenamerToolStripMenuItem"; this.globalRenamerToolStripMenuItem.Size = new System.Drawing.Size(279, 26); - this.globalRenamerToolStripMenuItem.Text = " "; + this.globalRenamerToolStripMenuItem.Text = "Глобальное переименование"; this.globalRenamerToolStripMenuItem.Click += new System.EventHandler(this.globalRenamerToolStripMenuItem_Click); // // contentsToolStripMenuItem @@ -1250,7 +1250,7 @@ namespace NodesGenerator this.redoToolStripMenuItem}); this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem"; this.contentsToolStripMenuItem.Size = new System.Drawing.Size(69, 22); - this.contentsToolStripMenuItem.Text = ""; + this.contentsToolStripMenuItem.Text = "Правка"; // // cutToolStripMenuItem // @@ -1258,7 +1258,7 @@ namespace NodesGenerator this.cutToolStripMenuItem.Name = "cutToolStripMenuItem"; this.cutToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); this.cutToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - this.cutToolStripMenuItem.Text = ""; + this.cutToolStripMenuItem.Text = "Вырезать"; this.cutToolStripMenuItem.Click += new System.EventHandler(this.toolStripButtonCut_Click); // // copyToolStripMenuItem @@ -1267,7 +1267,7 @@ namespace NodesGenerator this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); this.copyToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - this.copyToolStripMenuItem.Text = ""; + this.copyToolStripMenuItem.Text = "Копировать"; this.copyToolStripMenuItem.Click += new System.EventHandler(this.toolStripButtonCopy_Click); // // pasteToolStripMenuItem @@ -1276,7 +1276,7 @@ namespace NodesGenerator this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); this.pasteToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - this.pasteToolStripMenuItem.Text = ""; + this.pasteToolStripMenuItem.Text = "Вставить"; this.pasteToolStripMenuItem.Click += new System.EventHandler(this.toolStripButtonPaste_Click); // // toolStripMenuItem5 @@ -1290,7 +1290,7 @@ namespace NodesGenerator this.undoToolStripMenuItem.Name = "undoToolStripMenuItem"; this.undoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); this.undoToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - this.undoToolStripMenuItem.Text = ""; + this.undoToolStripMenuItem.Text = "Отменить"; this.undoToolStripMenuItem.Click += new System.EventHandler(this.toolStripButtonUndo_Click); // // redoToolStripMenuItem @@ -1300,7 +1300,7 @@ namespace NodesGenerator this.redoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) | System.Windows.Forms.Keys.Z))); this.redoToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - this.redoToolStripMenuItem.Text = ""; + this.redoToolStripMenuItem.Text = "Вернуть"; this.redoToolStripMenuItem.Click += new System.EventHandler(this.toolStripButtonRedo_Click); // // viewToolStripMenuItem @@ -1309,7 +1309,7 @@ namespace NodesGenerator this.filterPanelToolStripMenuItem}); this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; this.viewToolStripMenuItem.Size = new System.Drawing.Size(45, 22); - this.viewToolStripMenuItem.Text = ""; + this.viewToolStripMenuItem.Text = "Вид"; // // filterPanelToolStripMenuItem // @@ -1318,7 +1318,7 @@ namespace NodesGenerator this.filterPanelToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.filterPanelToolStripMenuItem.Name = "filterPanelToolStripMenuItem"; this.filterPanelToolStripMenuItem.Size = new System.Drawing.Size(191, 26); - this.filterPanelToolStripMenuItem.Text = " "; + this.filterPanelToolStripMenuItem.Text = "Панель фильтра"; this.filterPanelToolStripMenuItem.CheckedChanged += new System.EventHandler(this.filterPanelToolStripMenuItem_CheckedChanged); // // optionsToolStripMenuItem @@ -1328,20 +1328,20 @@ namespace NodesGenerator this.tagsCollectionToolStripMenuItem}); this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; this.optionsToolStripMenuItem.Size = new System.Drawing.Size(92, 22); - this.optionsToolStripMenuItem.Text = ""; + this.optionsToolStripMenuItem.Text = "Настройки"; // // optionsToolStripMenuItem1 // this.optionsToolStripMenuItem1.Name = "optionsToolStripMenuItem1"; this.optionsToolStripMenuItem1.Size = new System.Drawing.Size(197, 22); - this.optionsToolStripMenuItem1.Text = "..."; + this.optionsToolStripMenuItem1.Text = "Настройки..."; this.optionsToolStripMenuItem1.Click += new System.EventHandler(this.toolStripOptionsButton_Click); // // tagsCollectionToolStripMenuItem // this.tagsCollectionToolStripMenuItem.Name = "tagsCollectionToolStripMenuItem"; this.tagsCollectionToolStripMenuItem.Size = new System.Drawing.Size(197, 22); - this.tagsCollectionToolStripMenuItem.Text = " ..."; + this.tagsCollectionToolStripMenuItem.Text = "Редактор тегов..."; this.tagsCollectionToolStripMenuItem.Click += new System.EventHandler(this.tagsCollectionToolStripMenuItem_Click); // // runToolStripMenuItem @@ -1351,7 +1351,7 @@ namespace NodesGenerator this.grammarBrowserToolStripMenuItem}); this.runToolStripMenuItem.Name = "runToolStripMenuItem"; this.runToolStripMenuItem.Size = new System.Drawing.Size(81, 22); - this.runToolStripMenuItem.Text = ""; + this.runToolStripMenuItem.Text = "Команды"; // // generateToolStripMenuItem // @@ -1359,14 +1359,14 @@ namespace NodesGenerator this.generateToolStripMenuItem.Name = "generateToolStripMenuItem"; this.generateToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F9; this.generateToolStripMenuItem.Size = new System.Drawing.Size(205, 26); - this.generateToolStripMenuItem.Text = ""; + this.generateToolStripMenuItem.Text = "Генерировать"; this.generateToolStripMenuItem.Click += new System.EventHandler(this.toolStripGenerateButton_Click); // // grammarBrowserToolStripMenuItem // this.grammarBrowserToolStripMenuItem.Name = "grammarBrowserToolStripMenuItem"; this.grammarBrowserToolStripMenuItem.Size = new System.Drawing.Size(205, 26); - this.grammarBrowserToolStripMenuItem.Text = " ..."; + this.grammarBrowserToolStripMenuItem.Text = "Иерархия узлов..."; // // mainMenu // @@ -1391,14 +1391,14 @@ namespace NodesGenerator this.aboutToolStripMenuItem}); this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; this.helpToolStripMenuItem.Size = new System.Drawing.Size(76, 22); - this.helpToolStripMenuItem.Text = ""; + this.helpToolStripMenuItem.Text = "Справка"; this.helpToolStripMenuItem.Click += new System.EventHandler(this.helpToolStripMenuItem_Click); // // aboutToolStripMenuItem // this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; this.aboutToolStripMenuItem.Size = new System.Drawing.Size(181, 22); - this.aboutToolStripMenuItem.Text = " ..."; + this.aboutToolStripMenuItem.Text = "О программе..."; this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); // // splitter3 @@ -1480,7 +1480,7 @@ namespace NodesGenerator nodes_list.Items.AddRange(node_gen.all_nodes.ToArray()); } - private void set_nodes_information() // set - node_gen + private void set_nodes_information() // set - установить поля интерфейса по node_gen { if (node_gen == null) { @@ -1509,7 +1509,7 @@ namespace NodesGenerator } } - private void get_nodes_information() // get - node_gen + private void get_nodes_information() // get - получить информацию из полей интерфейса и записать ее в node_gen { if (node_gen == null) { @@ -1606,7 +1606,7 @@ namespace NodesGenerator delete_selected_items(); nodes_list.SelectedIndex = Math.Min(nodes_list.Items.Count - 1, ind); - // + // Голову отрывать надо за такой небрежный код selected_node = nodes_list.SelectedItem as node_info; selected_node_index = nodes_list.SelectedIndex; } diff --git a/Utils/NodesGeneratorNew/NodeGenerator.cs b/Utils/NodesGeneratorNew/NodeGenerator.cs index 5f9b69c20..86d5d2537 100644 --- a/Utils/NodesGeneratorNew/NodeGenerator.cs +++ b/Utils/NodesGeneratorNew/NodeGenerator.cs @@ -501,13 +501,13 @@ namespace NodeGenerator if (f_name.Length > 7 && f_name.Substring(0, 7) == "vector<") { string type_name = f_name.Substring(0, f_name.Length - 1); - //if ( != NULL) + //if (имя != NULL) //{ - // for (vector::iterator ssyy_j = ->begin(); ssyy_j != ->end(); ssyy_j++) + // for (vector::iterator ssyy_j = имя->begin(); ssyy_j != имя->end(); ssyy_j++) // { // delete *ssyy_j; // } - // delete ; + // delete имя; //} destructor_code.Add(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + property_name + text_consts.space + @@ -790,7 +790,7 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор без параметров."); sw.WriteLine(@" ///"); sw.WriteLine(text_consts.create_simple_constructor(node_name)); //sw.WriteLine(); @@ -852,7 +852,7 @@ namespace NodeGenerator return; sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор с параметрами."); sw.WriteLine(@" ///"); sw.Write(text_consts.tab + text_consts.tab + text_consts.public_keyword + text_consts.space + node_name + text_consts.open_par); @@ -937,9 +937,9 @@ namespace NodeGenerator { //sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type=""; if (base_class!=null) @@ -970,9 +970,9 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type = ""; if (base_class == null) @@ -997,7 +997,7 @@ namespace NodeGenerator public void generate_subnodes_number_property(StreamWriter sw) { var subnodes = collect_subnodes(true); - var fieldsCount = subnodes.Count(ni=>ni.field_type!=null); // syntax_tree_node SSM 27/07/15 + var fieldsCount = subnodes.Count(ni=>ni.field_type!=null); // в индексаторе учитывать только syntax_tree_node SSM 27/07/15 string pol_type = ""; if (base_class != null) @@ -1025,7 +1025,7 @@ namespace NodeGenerator } sw.WriteLine(@" ///"); - sw.WriteLine(@" /// List"); + sw.WriteLine(@" ///Свойство для получения количества всех подузлов без элементов поля типа List"); sw.WriteLine(@" ///"); // subnodes_without_list_elements_count sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.public_keyword + text_consts.space + @@ -1043,7 +1043,7 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// . List"); + sw.WriteLine(@" ///Свойство для получения количества всех подузлов. Подузлом также считается каждый элемент поля типа List"); sw.WriteLine(@" ///"); // subnodes_count sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.public_keyword + text_consts.space + @@ -1065,7 +1065,7 @@ namespace NodeGenerator { var subnodes = collect_subnodes(true); - var subnodesSyntaxNodes = subnodes.Where(ni => ni.field_type != null).ToList(); // , syntax_tree_node + var subnodesSyntaxNodes = subnodes.Where(ni => ni.field_type != null).ToList(); // только подузлы, являющиеся потомками syntax_tree_node var listFields = subnodes .OfType() @@ -1077,7 +1077,7 @@ namespace NodeGenerator //sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Индексатор для получения всех подузлов"); sw.WriteLine(@" ///"); string pol_type = ""; if (base_class != null) @@ -1109,7 +1109,7 @@ namespace NodeGenerator text_consts.index_out_of_range_exception_name + text_consts.open_par + text_consts.close_par + text_consts.semicolon); - var fieldsCount = subnodesSyntaxNodes.Count(); // syntax_tree_node SSM 27/07/15 + var fieldsCount = subnodesSyntaxNodes.Count(); // в индексаторе учитывать только syntax_tree_node SSM 27/07/15 if (fieldsCount > 0) { @@ -1342,7 +1342,7 @@ namespace NodeGenerator node_name + text_consts.space + text_consts.underline + node_name + text_consts.close_par); sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.open_figure); - // DefaultVisit 28.07.15 + // вызов DefaultVisit 28.07.15 sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.tab + text_consts.DefaultVisitMethodName + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); @@ -1457,16 +1457,16 @@ namespace NodeGenerator public void generate_painter(StreamWriter sw_h, StreamWriter sw_cpp) { - // visit + //Пишем процедуру visit для данного типа узла - //void visit(_ *__); + //void visit(имя_узла *_имя_узла); - //void Painter::visit(_ *__) + //void Painter::visit(имя_узла *_имя_узла) //{ // PrintSpaces(); - // *os<<_<(_<_>); + //Пишем вызов сериализации полей предка + //write_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.write_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 4 && tname.Substring(0, 5) == "List<") { - //: - //if (<_visit>-><_> != null) + //пишем: + //if (<параметр_visit>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<_<<" Count="<<__visit->_->size()<_->size(); ssyy_i++) + // *os<<имя_узла<<" Count="<<_параметр_visit->имя_узла->size()<имя_узла->size(); ssyy_i++) // { // PrintSpaces(); // *os<<"["<_))[i]); + // print_node((*(параметр_visit->имя_узла))[i]); // } //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + @@ -1597,12 +1597,12 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>-><_> != null) + //if (<параметр>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<"_="<<<>-><_><.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<_visit>.<_>.Count); - // for(int ssyy_i = 0; ssyy_i < <_visit>.<_>.Count; ssyy_i++) + // sw.Write(<параметр_visit>.<имя_поля>.Count); + // for(int ssyy_i = 0; ssyy_i < <параметр_visit>.<имя_поля>.Count; ssyy_i++) // { - // if (<_visit>.<_>[ssyy_i] == null) + // if (<параметр_visit>.<имя_поля>[ssyy_i] == null) // { // sw.Write((byte)0); // } // else // { // sw.Write((byte)1); - // <_visit>._[ssyy_i].visit(this); + // <параметр_visit>.имя_поля[ssyy_i].visit(this); // } // } //} @@ -1951,25 +1951,25 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>.<_> == null) + //if (<параметр>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<>.<_>); // .NET + // sw.Write(<параметр>.<имя_поля>); //Для .NET //} - // : - // sw.Write(<>.<_>.Length + 1); - // for(int ssyy_i = 0; i < <>.<_>.Length; i++) + //Для кроссплатформенных: + // sw.Write(<параметр>.<имя_поля>.Length + 1); + // for(int ssyy_i = 0; i < <параметр>.<имя_поля>.Length; i++) // { - // sw.Write(<>.<_>[ssyy_i]); + // sw.Write(<параметр>.<имя_поля>[ssyy_i]); // } - // sw.Write((byte)0); // + // sw.Write((byte)0); //Последний символ sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + @@ -2000,7 +2000,7 @@ namespace NodeGenerator } else { - // C-, .. char* + //Пишем для последующего чтения в C-строку, т.е. в char* sw.WriteLine(text_consts.tab3 + text_consts.tab + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + @@ -2042,7 +2042,7 @@ namespace NodeGenerator else if (tname == text_consts.bool_type_name && cross_platform) { - //if (_<>.<_>) + //if (_<параметр>.<имя_поля>) //{ // sw.Write((byte)1); //} @@ -2077,7 +2077,7 @@ namespace NodeGenerator tname == text_consts.bool_type_name || tname == text_consts.char_type_name) { - //: sw.Write(<>.<_>); + //пишем: sw.Write(<параметр>.<имя_поля>); sw.WriteLine(text_consts.tab3 + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + @@ -2096,15 +2096,15 @@ namespace NodeGenerator } else { - //: - //if (<_visit>.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // <_visit>.<_>.visit(this); + // <параметр_visit>.<имя_поля>.visit(this); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + @@ -2141,10 +2141,10 @@ namespace NodeGenerator public void generate_stream_reader_cpp(StreamWriter sw_h, StreamWriter sw_cpp, string pcu_reader_name) { - // - //void visit(<_> *_<_>) + //пишем + //void visit(<имя_типа> *_<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw_h.WriteLine(); @@ -2162,7 +2162,7 @@ namespace NodeGenerator sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.void_keyword + text_consts.space + text_consts.read_prefix + node_name + @@ -2181,14 +2181,14 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.GetChar() == 0) //{ - // _<_>->source_context = NULL; + // _<имя_типа>->source_context = NULL; //} //else //{ @@ -2202,7 +2202,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.GetInt(), br.GetInt()); // } - // _<_>->source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>->source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -2292,41 +2292,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = new vector<_List*>(); + // <параметр_visit>-><имя_поля> = new vector<параметр_List*>(); // int ssyy_count = br.GetInt(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>-><_>.push_back(static_cast<_List*>(read_node())); + // <параметр_visit>-><имя_поля>.push_back(static_cast<параметр_List*>(read_node())); // } //} string list_param = tname.Substring(5, tname.Length - 6); @@ -2393,11 +2393,11 @@ namespace NodeGenerator { //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = br.GetString(); + // <параметр_visit>-><имя_поля> = br.GetString(); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -2425,7 +2425,7 @@ namespace NodeGenerator text_consts.semicolon); sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -2459,7 +2459,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //br.Read...(&<_visit>-><_>); + //br.Read...(&<параметр_visit>-><имя_поля>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.reader_name + text_consts.dot + write_proc_string + text_consts.open_par + text_consts.address + @@ -2469,7 +2469,7 @@ namespace NodeGenerator } else { - //<_visit>-><_> = (<_>)br.GetByte(); + //<параметр_visit>-><имя_поля> = (<тип_поля>)br.GetByte(); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -2485,8 +2485,8 @@ namespace NodeGenerator } else { - //: - //<_visit>-><_> = static_cast<_*>(read_node()); + //пишем: + //<параметр_visit>-><имя_поля> = static_cast<тип_узла*>(read_node()); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -2511,10 +2511,10 @@ namespace NodeGenerator public void generate_pcu_reader(StreamWriter sw) { - // - //public void visit(<_> _<_>) + //пишем + //public void visit(<имя_типа> _<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw.WriteLine(); @@ -2532,7 +2532,7 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw.WriteLine(); sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.public_keyword + @@ -2543,14 +2543,14 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.ReadByte() == 0) //{ - // _<_>.source_context = null; + // _<имя_типа>.source_context = null; //} //else //{ @@ -2564,7 +2564,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.ReadInt32(), br.ReadInt32()); // } - // _<_>.source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>.source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -2652,41 +2652,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw.WriteLine(text_consts.tab3 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = new <_>(); + // <параметр_visit>.<имя_поля> = new <тип_поля>(); // Int32 ssyy_count = br.ReadInt32(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>.<_>.Add(read_node() as <_List>); + // <параметр_visit>.<имя_поля>.Add(read_node() as <параметр_List>); // } //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + @@ -2748,11 +2748,11 @@ namespace NodeGenerator { //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = br.ReadString(); + // <параметр_visit>.<имя_поля> = br.ReadString(); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -2780,7 +2780,7 @@ namespace NodeGenerator text_consts.semicolon); sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -2814,7 +2814,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //<_visit>.<_> = br.Read...(); + //<параметр_visit>.<имя_поля> = br.Read...(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2825,7 +2825,7 @@ namespace NodeGenerator } else { - //<_visit>.<_> = (<_>)br.ReadByte(); + //<параметр_visit>.<имя_поля> = (<тип_поля>)br.ReadByte(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2841,8 +2841,8 @@ namespace NodeGenerator } else { - //: - //<_visit>.<_> = read_node() as <_>; + //пишем: + //<параметр_visit>.<имя_поля> = read_node() as <тип_узла>; sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -3350,10 +3350,10 @@ namespace NodeGenerator public void generate_header_code(StreamWriter sw) { sw.WriteLine("/********************************************************************************************"); - sw.WriteLine(" "); - sw.WriteLine("PascalABC.NET: syntax tree generator v1.5() ., .., .., 2007"); + sw.WriteLine("Этот файл создан программой"); + sw.WriteLine("PascalABC.NET: syntax tree generator v1.5(с) Водолазов Н., Ткачук А.В., Иванов С.О., 2007"); sw.WriteLine(); - sw.WriteLine(" !"); + sw.WriteLine("Вручную не редактировать!"); sw.WriteLine("*********************************************************************************************/"); sw.WriteLine(text_consts.using_system); sw.WriteLine(text_consts.using_system_io); @@ -3863,7 +3863,7 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw_h.WriteLine(); - // . + //Пишем конструктор узлов. //tree_node* construct_node(short node_class_number); @@ -3871,8 +3871,8 @@ namespace NodeGenerator //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return NULL; @@ -3914,7 +3914,7 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.close_figure); sw_cpp.WriteLine(); - // + //Пишем процедуру чтения узла //tree_node* read_node(); @@ -4022,13 +4022,13 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw.WriteLine(); - // . + //Пишем конструктор узлов. //public tree_node construct_node(Int16 node_class_number) //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return null; @@ -4061,7 +4061,7 @@ namespace NodeGenerator text_consts.space + text_consts.null_keyword_name + text_consts.semicolon); sw.WriteLine(text_consts.tab2 + text_consts.close_figure); - // + //Пишем процедуру чтения узла //public tree_node read_node() //{ // if (br.ReadByte() == 1) diff --git a/Utils/NodesGeneratorNew/NodesGenerator_old/Form1.cs b/Utils/NodesGeneratorNew/NodesGenerator_old/Form1.cs index 820f1201a..162b03c9c 100644 --- a/Utils/NodesGeneratorNew/NodesGenerator_old/Form1.cs +++ b/Utils/NodesGeneratorNew/NodesGenerator_old/Form1.cs @@ -143,7 +143,7 @@ namespace NodesGenerator this.save.Name = "save"; this.save.Size = new System.Drawing.Size(152, 23); this.save.TabIndex = 1; - this.save.Text = ""; + this.save.Text = "Сохранить"; this.save.Click += new System.EventHandler(this.save_Click); // // close @@ -152,7 +152,7 @@ namespace NodesGenerator this.close.Name = "close"; this.close.Size = new System.Drawing.Size(113, 32); this.close.TabIndex = 2; - this.close.Text = ""; + this.close.Text = "Выход"; this.close.Click += new System.EventHandler(this.close_Click); // // nodes_list @@ -170,7 +170,7 @@ namespace NodesGenerator this.save_as.Name = "save_as"; this.save_as.Size = new System.Drawing.Size(152, 23); this.save_as.TabIndex = 4; - this.save_as.Text = " "; + this.save_as.Text = "Сохранить как"; this.save_as.Click += new System.EventHandler(this.save_as_Click); // // open @@ -179,13 +179,13 @@ namespace NodesGenerator this.open.Name = "open"; this.open.Size = new System.Drawing.Size(152, 23); this.open.TabIndex = 5; - this.open.Text = ""; + this.open.Text = "Открыть"; this.open.Click += new System.EventHandler(this.open_Click); // // openFileDialog1 // this.openFileDialog1.DefaultExt = "nin"; - this.openFileDialog1.Filter = " (*.nin)|*.nin| (*.*)|*.*"; + this.openFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*"; // // add // @@ -193,7 +193,7 @@ namespace NodesGenerator this.add.Name = "add"; this.add.Size = new System.Drawing.Size(97, 23); this.add.TabIndex = 6; - this.add.Text = ""; + this.add.Text = "Добавить"; this.add.Click += new System.EventHandler(this.add_Click); // // delete @@ -202,7 +202,7 @@ namespace NodesGenerator this.delete.Name = "delete"; this.delete.Size = new System.Drawing.Size(97, 23); this.delete.TabIndex = 7; - this.delete.Text = ""; + this.delete.Text = "Удалить"; this.delete.Click += new System.EventHandler(this.delete_Click); // // generate_code @@ -212,7 +212,7 @@ namespace NodesGenerator this.generate_code.Name = "generate_code"; this.generate_code.Size = new System.Drawing.Size(152, 30); this.generate_code.TabIndex = 8; - this.generate_code.Text = " "; + this.generate_code.Text = "Сгенерировать код"; this.generate_code.Click += new System.EventHandler(this.generate_code_Click); // // generate_visitor_template @@ -221,7 +221,7 @@ namespace NodesGenerator this.generate_visitor_template.Name = "generate_visitor_template"; this.generate_visitor_template.Size = new System.Drawing.Size(152, 41); this.generate_visitor_template.TabIndex = 9; - this.generate_visitor_template.Text = " "; + this.generate_visitor_template.Text = "Генерировать шаблон визитора"; this.generate_visitor_template.Click += new System.EventHandler(this.generate_visitor_template_Click); // // panel1 @@ -253,7 +253,7 @@ namespace NodesGenerator this.generate_pcu_read_visitor.Name = "generate_pcu_read_visitor"; this.generate_pcu_read_visitor.Size = new System.Drawing.Size(152, 43); this.generate_pcu_read_visitor.TabIndex = 11; - this.generate_pcu_read_visitor.Text = " pcu-"; + this.generate_pcu_read_visitor.Text = "Генерировать pcu-десериализатор"; this.generate_pcu_read_visitor.UseVisualStyleBackColor = true; this.generate_pcu_read_visitor.Click += new System.EventHandler(this.generate_pcu_read_visitor_Click); // @@ -263,7 +263,7 @@ namespace NodesGenerator this.generate_pcu_write_visitor.Name = "generate_pcu_write_visitor"; this.generate_pcu_write_visitor.Size = new System.Drawing.Size(152, 42); this.generate_pcu_write_visitor.TabIndex = 10; - this.generate_pcu_write_visitor.Text = " pcu-"; + this.generate_pcu_write_visitor.Text = "Генерировать pcu-сериализатор"; this.generate_pcu_write_visitor.UseVisualStyleBackColor = true; this.generate_pcu_write_visitor.Click += new System.EventHandler(this.generate_pcu_write_visitor_Click); // @@ -289,7 +289,7 @@ namespace NodesGenerator this.Down.Name = "Down"; this.Down.Size = new System.Drawing.Size(97, 23); this.Down.TabIndex = 19; - this.Down.Text = ""; + this.Down.Text = "Вниз"; this.Down.UseVisualStyleBackColor = true; this.Down.Click += new System.EventHandler(this.Down_Click); // @@ -299,7 +299,7 @@ namespace NodesGenerator this.Up.Name = "Up"; this.Up.Size = new System.Drawing.Size(97, 23); this.Up.TabIndex = 18; - this.Up.Text = ""; + this.Up.Text = "Вверх"; this.Up.UseVisualStyleBackColor = true; this.Up.Click += new System.EventHandler(this.Up_Click); // @@ -310,7 +310,7 @@ namespace NodesGenerator this.sorted_by_name.Name = "sorted_by_name"; this.sorted_by_name.Size = new System.Drawing.Size(86, 17); this.sorted_by_name.TabIndex = 17; - this.sorted_by_name.Text = ""; + this.sorted_by_name.Text = "Сортировка"; this.sorted_by_name.UseVisualStyleBackColor = true; this.sorted_by_name.CheckStateChanged += new System.EventHandler(this.sorted_by_name_CheckStateChanged); // @@ -320,7 +320,7 @@ namespace NodesGenerator this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(175, 17); this.label7.TabIndex = 16; - this.label7.Text = " "; + this.label7.Text = "Узлы синтаксического дерева"; // // edit // @@ -328,7 +328,7 @@ namespace NodesGenerator this.edit.Name = "edit"; this.edit.Size = new System.Drawing.Size(97, 23); this.edit.TabIndex = 8; - this.edit.Text = ""; + this.edit.Text = "Редактировать"; this.edit.Click += new System.EventHandler(this.edit_Click); // // file_name @@ -351,7 +351,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(175, 16); this.label1.TabIndex = 15; - this.label1.Text = " . "; + this.label1.Text = "Имя файла синтаксич. дерева"; // // label2 // @@ -359,7 +359,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(160, 16); this.label2.TabIndex = 16; - this.label2.Text = " "; + this.label2.Text = "Пространство имен"; // // panel4 // @@ -396,7 +396,7 @@ namespace NodesGenerator this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(148, 13); this.label6.TabIndex = 24; - this.label6.Text = " pcu - "; + this.label6.Text = "Имя pcu - десериализатора"; // // tb_pcu_writer // @@ -412,7 +412,7 @@ namespace NodesGenerator this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(160, 16); this.label5.TabIndex = 22; - this.label5.Text = " pcu - "; + this.label5.Text = "Имя pcu - сериализатора"; // // label4 // @@ -420,7 +420,7 @@ namespace NodesGenerator this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(175, 16); this.label4.TabIndex = 20; - this.label4.Text = " . "; + this.label4.Text = "Имя файла интерф. визитора"; // // visitor_interface_file_name // @@ -435,7 +435,7 @@ namespace NodesGenerator this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(104, 16); this.label3.TabIndex = 18; - this.label3.Text = " "; + this.label3.Text = "Имя фабрики"; // // factory_name // @@ -447,7 +447,7 @@ namespace NodesGenerator // saveFileDialog1 // this.saveFileDialog1.DefaultExt = "nin"; - this.saveFileDialog1.Filter = " (*.nin)|*.nin| (*.*)|*.*"; + this.saveFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*"; // // toolStripStatusLabel1 // @@ -489,8 +489,8 @@ namespace NodesGenerator this.MaximizeBox = false; this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "PascalABC.NET: syntax tree generator v1.5() ., .., " + - ".., 2007-10 "; + this.Text = "PascalABC.NET: syntax tree generator v1.5(с) Водолазов Н., Ткачук А.В., Иванов С" + + ".О., 2007-10 "; this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed); this.Load += new System.EventHandler(this.Form1_Load); this.panel1.ResumeLayout(false); @@ -570,7 +570,7 @@ namespace NodesGenerator this.Close(); } - private void set_nodes_information() // set - node_gen + private void set_nodes_information() // set - установить поля интерфейса по node_gen { if (node_gen==null) { @@ -592,7 +592,7 @@ namespace NodesGenerator } - private void get_nodes_information() // get - node_gen + private void get_nodes_information() // get - получить информацию из полей интерфейса и записать ее в node_gen { if (node_gen==null) { @@ -643,16 +643,16 @@ namespace NodesGenerator } catch(Exception) { - MessageBox.Show(" tree.nin"); + MessageBox.Show("Не могу прочитать файл tree.nin"); } } private bool updated=false; /// - /// node_gen - + /// Обновить информацию в node_gen - генераторе узлов /// - private void update() // node_gen - // update node_gen + private void update() // получить информацию из полей интерфейса в node_gen + // то есть сделать update для node_gen { updated=true; get_nodes_information(); diff --git a/Utils/NodesGeneratorNew/NodesGenerator_old/NodeGenerator.cs b/Utils/NodesGeneratorNew/NodesGenerator_old/NodeGenerator.cs index 6af588e28..83755ee80 100644 --- a/Utils/NodesGeneratorNew/NodesGenerator_old/NodeGenerator.cs +++ b/Utils/NodesGeneratorNew/NodesGenerator_old/NodeGenerator.cs @@ -483,13 +483,13 @@ namespace NodeGenerator if (f_name.Length > 7 && f_name.Substring(0, 7) == "vector<") { string type_name = f_name.Substring(0, f_name.Length - 1); - //if ( != NULL) + //if (имя != NULL) //{ - // for (vector::iterator ssyy_j = ->begin(); ssyy_j != ->end(); ssyy_j++) + // for (vector::iterator ssyy_j = имя->begin(); ssyy_j != имя->end(); ssyy_j++) // { // delete *ssyy_j; // } - // delete ; + // delete имя; //} destructor_code.Add(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + property_name + text_consts.space + @@ -758,7 +758,7 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор без параметров."); sw.WriteLine(@" ///"); sw.WriteLine(text_consts.create_simple_constructor(node_name)); //sw.WriteLine(); @@ -820,7 +820,7 @@ namespace NodeGenerator return; sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор с параметрами."); sw.WriteLine(@" ///"); sw.Write(text_consts.tab + text_consts.tab + text_consts.public_keyword + text_consts.space + node_name + text_consts.open_par); @@ -905,9 +905,9 @@ namespace NodeGenerator { //sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type=""; if (base_class!=null) @@ -938,9 +938,9 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type = ""; if (base_class == null) @@ -1090,16 +1090,16 @@ namespace NodeGenerator public void generate_painter(StreamWriter sw_h, StreamWriter sw_cpp) { - // visit + //Пишем процедуру visit для данного типа узла - //void visit(_ *__); + //void visit(имя_узла *_имя_узла); - //void Painter::visit(_ *__) + //void Painter::visit(имя_узла *_имя_узла) //{ // PrintSpaces(); - // *os<<_<(_<_>); + //Пишем вызов сериализации полей предка + //write_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.write_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 4 && tname.Substring(0, 5) == "List<") { - //: - //if (<_visit>-><_> != null) + //пишем: + //if (<параметр_visit>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<_<<" Count="<<__visit->_->size()<_->size(); ssyy_i++) + // *os<<имя_узла<<" Count="<<_параметр_visit->имя_узла->size()<имя_узла->size(); ssyy_i++) // { // PrintSpaces(); // *os<<"["<_))[i]); + // print_node((*(параметр_visit->имя_узла))[i]); // } //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + @@ -1230,12 +1230,12 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>-><_> != null) + //if (<параметр>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<"_="<<<>-><_><.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<_visit>.<_>.Count); - // for(int ssyy_i = 0; ssyy_i < <_visit>.<_>.Count; ssyy_i++) + // sw.Write(<параметр_visit>.<имя_поля>.Count); + // for(int ssyy_i = 0; ssyy_i < <параметр_visit>.<имя_поля>.Count; ssyy_i++) // { - // if (<_visit>.<_>[ssyy_i] == null) + // if (<параметр_visit>.<имя_поля>[ssyy_i] == null) // { // sw.Write((byte)0); // } // else // { // sw.Write((byte)1); - // <_visit>._[ssyy_i].visit(this); + // <параметр_visit>.имя_поля[ssyy_i].visit(this); // } // } //} @@ -1584,25 +1584,25 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>.<_> == null) + //if (<параметр>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<>.<_>); // .NET + // sw.Write(<параметр>.<имя_поля>); //Для .NET //} - // : - // sw.Write(<>.<_>.Length + 1); - // for(int ssyy_i = 0; i < <>.<_>.Length; i++) + //Для кроссплатформенных: + // sw.Write(<параметр>.<имя_поля>.Length + 1); + // for(int ssyy_i = 0; i < <параметр>.<имя_поля>.Length; i++) // { - // sw.Write(<>.<_>[ssyy_i]); + // sw.Write(<параметр>.<имя_поля>[ssyy_i]); // } - // sw.Write((byte)0); // + // sw.Write((byte)0); //Последний символ sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + @@ -1633,7 +1633,7 @@ namespace NodeGenerator } else { - // C-, .. char* + //Пишем для последующего чтения в C-строку, т.е. в char* sw.WriteLine(text_consts.tab3 + text_consts.tab + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + @@ -1675,7 +1675,7 @@ namespace NodeGenerator else if (tname == text_consts.bool_type_name && cross_platform) { - //if (_<>.<_>) + //if (_<параметр>.<имя_поля>) //{ // sw.Write((byte)1); //} @@ -1710,7 +1710,7 @@ namespace NodeGenerator tname == text_consts.bool_type_name || tname == text_consts.char_type_name) { - //: sw.Write(<>.<_>); + //пишем: sw.Write(<параметр>.<имя_поля>); sw.WriteLine(text_consts.tab3 + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + @@ -1729,15 +1729,15 @@ namespace NodeGenerator } else { - //: - //if (<_visit>.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // <_visit>.<_>.visit(this); + // <параметр_visit>.<имя_поля>.visit(this); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + @@ -1774,10 +1774,10 @@ namespace NodeGenerator public void generate_stream_reader_cpp(StreamWriter sw_h, StreamWriter sw_cpp, string pcu_reader_name) { - // - //void visit(<_> *_<_>) + //пишем + //void visit(<имя_типа> *_<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw_h.WriteLine(); @@ -1795,7 +1795,7 @@ namespace NodeGenerator sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.void_keyword + text_consts.space + text_consts.read_prefix + node_name + @@ -1814,14 +1814,14 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.GetChar() == 0) //{ - // _<_>->source_context = NULL; + // _<имя_типа>->source_context = NULL; //} //else //{ @@ -1835,7 +1835,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.GetInt(), br.GetInt()); // } - // _<_>->source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>->source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -1925,41 +1925,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = new vector<_List*>(); + // <параметр_visit>-><имя_поля> = new vector<параметр_List*>(); // int ssyy_count = br.GetInt(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>-><_>.push_back(static_cast<_List*>(read_node())); + // <параметр_visit>-><имя_поля>.push_back(static_cast<параметр_List*>(read_node())); // } //} string list_param = tname.Substring(5, tname.Length - 6); @@ -2026,11 +2026,11 @@ namespace NodeGenerator { //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = br.GetString(); + // <параметр_visit>-><имя_поля> = br.GetString(); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -2058,7 +2058,7 @@ namespace NodeGenerator text_consts.semicolon); sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -2092,7 +2092,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //br.Read...(&<_visit>-><_>); + //br.Read...(&<параметр_visit>-><имя_поля>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.reader_name + text_consts.dot + write_proc_string + text_consts.open_par + text_consts.address + @@ -2102,7 +2102,7 @@ namespace NodeGenerator } else { - //<_visit>-><_> = (<_>)br.GetByte(); + //<параметр_visit>-><имя_поля> = (<тип_поля>)br.GetByte(); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -2118,8 +2118,8 @@ namespace NodeGenerator } else { - //: - //<_visit>-><_> = static_cast<_*>(read_node()); + //пишем: + //<параметр_visit>-><имя_поля> = static_cast<тип_узла*>(read_node()); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -2144,10 +2144,10 @@ namespace NodeGenerator public void generate_pcu_reader(StreamWriter sw) { - // - //public void visit(<_> _<_>) + //пишем + //public void visit(<имя_типа> _<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw.WriteLine(); @@ -2165,7 +2165,7 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw.WriteLine(); sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.public_keyword + @@ -2176,14 +2176,14 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.ReadByte() == 0) //{ - // _<_>.source_context = null; + // _<имя_типа>.source_context = null; //} //else //{ @@ -2197,7 +2197,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.ReadInt32(), br.ReadInt32()); // } - // _<_>.source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>.source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -2285,41 +2285,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw.WriteLine(text_consts.tab3 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = new <_>(); + // <параметр_visit>.<имя_поля> = new <тип_поля>(); // Int32 ssyy_count = br.ReadInt32(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>.<_>.Add(read_node() as <_List>); + // <параметр_visit>.<имя_поля>.Add(read_node() as <параметр_List>); // } //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + @@ -2381,11 +2381,11 @@ namespace NodeGenerator { //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = br.ReadString(); + // <параметр_visit>.<имя_поля> = br.ReadString(); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -2413,7 +2413,7 @@ namespace NodeGenerator text_consts.semicolon); sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -2447,7 +2447,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //<_visit>.<_> = br.Read...(); + //<параметр_visit>.<имя_поля> = br.Read...(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2458,7 +2458,7 @@ namespace NodeGenerator } else { - //<_visit>.<_> = (<_>)br.ReadByte(); + //<параметр_visit>.<имя_поля> = (<тип_поля>)br.ReadByte(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2474,8 +2474,8 @@ namespace NodeGenerator } else { - //: - //<_visit>.<_> = read_node() as <_>; + //пишем: + //<параметр_visit>.<имя_поля> = read_node() as <тип_узла>; sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -3048,10 +3048,10 @@ namespace NodeGenerator public void generate_header_code(StreamWriter sw) { sw.WriteLine("/********************************************************************************************"); - sw.WriteLine(" "); - sw.WriteLine("PascalABC.NET: syntax tree generator v1.5() ., .., .., 2007"); + sw.WriteLine("Этот файл создан программой"); + sw.WriteLine("PascalABC.NET: syntax tree generator v1.5(с) Водолазов Н., Ткачук А.В., Иванов С.О., 2007"); sw.WriteLine(); - sw.WriteLine(" !"); + sw.WriteLine("Вручную не редактировать!"); sw.WriteLine("*********************************************************************************************/"); sw.WriteLine(text_consts.using_system); sw.WriteLine(text_consts.using_system_io); @@ -3552,7 +3552,7 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw_h.WriteLine(); - // . + //Пишем конструктор узлов. //tree_node* construct_node(short node_class_number); @@ -3560,8 +3560,8 @@ namespace NodeGenerator //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return NULL; @@ -3603,7 +3603,7 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.close_figure); sw_cpp.WriteLine(); - // + //Пишем процедуру чтения узла //tree_node* read_node(); @@ -3711,13 +3711,13 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw.WriteLine(); - // . + //Пишем конструктор узлов. //public tree_node construct_node(Int16 node_class_number) //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return null; @@ -3750,7 +3750,7 @@ namespace NodeGenerator text_consts.space + text_consts.null_keyword_name + text_consts.semicolon); sw.WriteLine(text_consts.tab2 + text_consts.close_figure); - // + //Пишем процедуру чтения узла //public tree_node read_node() //{ // if (br.ReadByte() == 1) diff --git a/Utils/NodesGeneratorNew/NodesGenerator_old/node_def.cs b/Utils/NodesGeneratorNew/NodesGenerator_old/node_def.cs index 38c1ee709..4606af8a9 100644 --- a/Utils/NodesGeneratorNew/NodesGenerator_old/node_def.cs +++ b/Utils/NodesGeneratorNew/NodesGenerator_old/node_def.cs @@ -289,7 +289,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 18); this.label1.TabIndex = 2; - this.label1.Text = " "; + this.label1.Text = "Имя узла"; // // cancel // @@ -323,7 +323,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(120, 19); this.label2.TabIndex = 6; - this.label2.Text = " "; + this.label2.Text = "Базовый класс"; // // help_context // @@ -361,7 +361,7 @@ namespace NodesGenerator this.Name = "node_def"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = " "; + this.Text = "Определение узла"; this.panel1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -431,7 +431,7 @@ namespace NodesGenerator subnodes.Items[t]=simple_node_editor.edit_element(se,ni,ng); return; } - // node_field_info + // node_field_info должен быть последним node_field_info nfi = subnodes.Items[t] as node_field_info; if (nfi != null) { diff --git a/Utils/NodesGeneratorNew/NodesGenerator_old/simple_node_editor.cs b/Utils/NodesGeneratorNew/NodesGenerator_old/simple_node_editor.cs index 263e0bf79..18922e6f2 100644 --- a/Utils/NodesGeneratorNew/NodesGenerator_old/simple_node_editor.cs +++ b/Utils/NodesGeneratorNew/NodesGenerator_old/simple_node_editor.cs @@ -153,7 +153,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 19); this.label1.TabIndex = 1; - this.label1.Text = " "; + this.label1.Text = "Имя поля"; // // label2 // @@ -161,7 +161,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(120, 18); this.label2.TabIndex = 2; - this.label2.Text = " "; + this.label2.Text = "Тип поля"; // // field_type // @@ -243,7 +243,7 @@ namespace NodesGenerator this.Name = "simple_node_editor"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = " "; + this.Text = "Редактор узлов"; this.ResumeLayout(false); this.PerformLayout(); diff --git a/Utils/NodesGeneratorOld/Form1.cs b/Utils/NodesGeneratorOld/Form1.cs index c881c04f9..a1929aea4 100644 --- a/Utils/NodesGeneratorOld/Form1.cs +++ b/Utils/NodesGeneratorOld/Form1.cs @@ -134,7 +134,7 @@ namespace NodesGenerator this.save.Name = "save"; this.save.Size = new System.Drawing.Size(182, 27); this.save.TabIndex = 1; - this.save.Text = ""; + this.save.Text = "Сохранить"; this.save.Click += new System.EventHandler(this.save_Click); // // close @@ -143,7 +143,7 @@ namespace NodesGenerator this.close.Name = "close"; this.close.Size = new System.Drawing.Size(135, 37); this.close.TabIndex = 2; - this.close.Text = ""; + this.close.Text = "Выход"; this.close.Click += new System.EventHandler(this.close_Click); // // nodes_list @@ -161,7 +161,7 @@ namespace NodesGenerator this.save_as.Name = "save_as"; this.save_as.Size = new System.Drawing.Size(182, 27); this.save_as.TabIndex = 4; - this.save_as.Text = " "; + this.save_as.Text = "Сохранить как"; this.save_as.Click += new System.EventHandler(this.save_as_Click); // // open @@ -170,7 +170,7 @@ namespace NodesGenerator this.open.Name = "open"; this.open.Size = new System.Drawing.Size(182, 27); this.open.TabIndex = 5; - this.open.Text = ""; + this.open.Text = "Открыть"; this.open.Click += new System.EventHandler(this.open_Click); // // add @@ -197,7 +197,7 @@ namespace NodesGenerator this.generate_code.Name = "generate_code"; this.generate_code.Size = new System.Drawing.Size(182, 28); this.generate_code.TabIndex = 8; - this.generate_code.Text = " "; + this.generate_code.Text = "Сгенерировать код"; this.generate_code.Click += new System.EventHandler(this.generate_code_Click); // // generate_visitor_template @@ -206,7 +206,7 @@ namespace NodesGenerator this.generate_visitor_template.Name = "generate_visitor_template"; this.generate_visitor_template.Size = new System.Drawing.Size(182, 40); this.generate_visitor_template.TabIndex = 9; - this.generate_visitor_template.Text = " "; + this.generate_visitor_template.Text = "Генерировать шаблон визитора"; this.generate_visitor_template.Click += new System.EventHandler(this.generate_visitor_template_Click); // // panel1 @@ -243,7 +243,7 @@ namespace NodesGenerator this.generate_visualizator_cpp.Name = "generate_visualizator_cpp"; this.generate_visualizator_cpp.Size = new System.Drawing.Size(167, 40); this.generate_visualizator_cpp.TabIndex = 16; - this.generate_visualizator_cpp.Text = " cpp-"; + this.generate_visualizator_cpp.Text = "Генерировать cpp-визуализатор"; this.generate_visualizator_cpp.UseVisualStyleBackColor = true; this.generate_visualizator_cpp.Click += new System.EventHandler(this.generate_visualizator_cpp_Click); // @@ -253,7 +253,7 @@ namespace NodesGenerator this.generate_cross_platform_reader_cpp.Name = "generate_cross_platform_reader_cpp"; this.generate_cross_platform_reader_cpp.Size = new System.Drawing.Size(167, 40); this.generate_cross_platform_reader_cpp.TabIndex = 15; - this.generate_cross_platform_reader_cpp.Text = " C++ "; + this.generate_cross_platform_reader_cpp.Text = "Генерировать C++ десериализатор"; this.generate_cross_platform_reader_cpp.UseVisualStyleBackColor = true; this.generate_cross_platform_reader_cpp.Click += new System.EventHandler(this.generate_cross_platform_reader_cpp_Click); // @@ -263,7 +263,7 @@ namespace NodesGenerator this.generate_cross_platform_writer.Name = "generate_cross_platform_writer"; this.generate_cross_platform_writer.Size = new System.Drawing.Size(167, 40); this.generate_cross_platform_writer.TabIndex = 14; - this.generate_cross_platform_writer.Text = " cross - platform "; + this.generate_cross_platform_writer.Text = "Генерировать cross - platform сериализатор"; this.generate_cross_platform_writer.UseVisualStyleBackColor = true; this.generate_cross_platform_writer.Click += new System.EventHandler(this.button2_Click); // @@ -273,7 +273,7 @@ namespace NodesGenerator this.generate_cpp_code.Name = "generate_cpp_code"; this.generate_cpp_code.Size = new System.Drawing.Size(167, 26); this.generate_cpp_code.TabIndex = 13; - this.generate_cpp_code.Text = " C++ "; + this.generate_cpp_code.Text = "Генерировать C++ код"; this.generate_cpp_code.UseVisualStyleBackColor = true; this.generate_cpp_code.Click += new System.EventHandler(this.generate_cpp_code_Click); // @@ -284,7 +284,7 @@ namespace NodesGenerator this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(182, 36); this.button1.TabIndex = 12; - this.button1.Text = " "; + this.button1.Text = "Сгенерировать все"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click_1); // @@ -294,7 +294,7 @@ namespace NodesGenerator this.generate_pcu_read_visitor.Name = "generate_pcu_read_visitor"; this.generate_pcu_read_visitor.Size = new System.Drawing.Size(182, 40); this.generate_pcu_read_visitor.TabIndex = 11; - this.generate_pcu_read_visitor.Text = " pcu-"; + this.generate_pcu_read_visitor.Text = "Генерировать pcu-десериализатор"; this.generate_pcu_read_visitor.UseVisualStyleBackColor = true; this.generate_pcu_read_visitor.Click += new System.EventHandler(this.generate_pcu_read_visitor_Click); // @@ -304,7 +304,7 @@ namespace NodesGenerator this.generate_pcu_write_visitor.Name = "generate_pcu_write_visitor"; this.generate_pcu_write_visitor.Size = new System.Drawing.Size(182, 41); this.generate_pcu_write_visitor.TabIndex = 10; - this.generate_pcu_write_visitor.Text = " pcu-"; + this.generate_pcu_write_visitor.Text = "Генерировать pcu-сериализатор"; this.generate_pcu_write_visitor.UseVisualStyleBackColor = true; this.generate_pcu_write_visitor.Click += new System.EventHandler(this.generate_pcu_write_visitor_Click); // @@ -339,7 +339,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 19); this.label1.TabIndex = 15; - this.label1.Text = " "; + this.label1.Text = "Имя файла"; // // label2 // @@ -347,7 +347,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(192, 18); this.label2.TabIndex = 16; - this.label2.Text = " "; + this.label2.Text = "Пространство имен"; // // panel4 // @@ -384,7 +384,7 @@ namespace NodesGenerator this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(192, 17); this.label6.TabIndex = 24; - this.label6.Text = " pcu - "; + this.label6.Text = "Имя pcu - десериализатора"; // // tb_pcu_writer // @@ -400,7 +400,7 @@ namespace NodesGenerator this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(192, 18); this.label5.TabIndex = 22; - this.label5.Text = " pcu - "; + this.label5.Text = "Имя pcu - сериализатора"; // // label4 // @@ -408,7 +408,7 @@ namespace NodesGenerator this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(192, 18); this.label4.TabIndex = 20; - this.label4.Text = " . "; + this.label4.Text = "Имя файла интеф. визитора"; // // visitor_interface_file_name // @@ -445,8 +445,8 @@ namespace NodesGenerator this.MaximizeBox = false; this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "PascalABC.NET: syntax tree generator v1.5() ., .., " + - ".., 2007 "; + this.Text = "PascalABC.NET: syntax tree generator v1.5(с) Водолазов Н., Ткачук А.В., Иванов С" + + ".О., 2007 "; this.Load += new System.EventHandler(this.Form1_Load); this.panel1.ResumeLayout(false); this.panel2.ResumeLayout(false); diff --git a/Utils/NodesGeneratorOld/NodeGenerator.cs b/Utils/NodesGeneratorOld/NodeGenerator.cs index 8664f4edb..5e1faa3aa 100644 --- a/Utils/NodesGeneratorOld/NodeGenerator.cs +++ b/Utils/NodesGeneratorOld/NodeGenerator.cs @@ -473,13 +473,13 @@ namespace NodeGenerator if (f_name.Length > 7 && f_name.Substring(0, 7) == "vector<") { string type_name = f_name.Substring(0, f_name.Length - 1); - //if ( != NULL) + //if (имя != NULL) //{ - // for (vector::iterator ssyy_j = ->begin(); ssyy_j != ->end(); ssyy_j++) + // for (vector::iterator ssyy_j = имя->begin(); ssyy_j != имя->end(); ssyy_j++) // { // delete *ssyy_j; // } - // delete ; + // delete имя; //} destructor_code.Add(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + property_name + text_consts.space + @@ -663,7 +663,7 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор без параметров."); sw.WriteLine(@" ///"); sw.WriteLine(text_consts.create_simple_constructor(node_name)); sw.WriteLine(); @@ -680,7 +680,7 @@ namespace NodeGenerator sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор с параметрами."); sw.WriteLine(@" ///"); sw.Write(text_consts.tab+text_consts.tab+text_consts.public_keyword+text_consts.space+node_name+ text_consts.open_par); @@ -754,9 +754,9 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type=""; if (base_class!=null) @@ -787,9 +787,9 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type = ""; if (base_class == null) @@ -878,16 +878,16 @@ namespace NodeGenerator public void generate_painter(StreamWriter sw_h, StreamWriter sw_cpp) { - // visit + //Пишем процедуру visit для данного типа узла - //void visit(_ *__); + //void visit(имя_узла *_имя_узла); - //void Painter::visit(_ *__) + //void Painter::visit(имя_узла *_имя_узла) //{ // PrintSpaces(); - // *os<<_<(_<_>); + //Пишем вызов сериализации полей предка + //write_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.write_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 4 && tname.Substring(0, 5) == "List<") { - //: - //if (<_visit>-><_> != null) + //пишем: + //if (<параметр_visit>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<_<<" Count="<<__visit->_->size()<_->size(); ssyy_i++) + // *os<<имя_узла<<" Count="<<_параметр_visit->имя_узла->size()<имя_узла->size(); ssyy_i++) // { // PrintSpaces(); // *os<<"["<_))[i]); + // print_node((*(параметр_visit->имя_узла))[i]); // } //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + @@ -1018,12 +1018,12 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>-><_> != null) + //if (<параметр>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<"_="<<<>-><_><.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<_visit>.<_>.Count); - // for(int ssyy_i = 0; ssyy_i < <_visit>.<_>.Count; ssyy_i++) + // sw.Write(<параметр_visit>.<имя_поля>.Count); + // for(int ssyy_i = 0; ssyy_i < <параметр_visit>.<имя_поля>.Count; ssyy_i++) // { - // if (<_visit>.<_>[ssyy_i] == null) + // if (<параметр_visit>.<имя_поля>[ssyy_i] == null) // { // sw.Write((byte)0); // } // else // { // sw.Write((byte)1); - // <_visit>._[ssyy_i].visit(this); + // <параметр_visit>.имя_поля[ssyy_i].visit(this); // } // } //} @@ -1372,25 +1372,25 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>.<_> == null) + //if (<параметр>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<>.<_>); // .NET + // sw.Write(<параметр>.<имя_поля>); //Для .NET //} - // : - // sw.Write(<>.<_>.Length + 1); - // for(int ssyy_i = 0; i < <>.<_>.Length; i++) + //Для кроссплатформенных: + // sw.Write(<параметр>.<имя_поля>.Length + 1); + // for(int ssyy_i = 0; i < <параметр>.<имя_поля>.Length; i++) // { - // sw.Write(<>.<_>[ssyy_i]); + // sw.Write(<параметр>.<имя_поля>[ssyy_i]); // } - // sw.Write((byte)0); // + // sw.Write((byte)0); //Последний символ sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + @@ -1421,7 +1421,7 @@ namespace NodeGenerator } else { - // C-, .. char* + //Пишем для последующего чтения в C-строку, т.е. в char* sw.WriteLine(text_consts.tab3 + text_consts.tab + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + @@ -1463,7 +1463,7 @@ namespace NodeGenerator else if (tname == text_consts.bool_type_name && cross_platform) { - //if (_<>.<_>) + //if (_<параметр>.<имя_поля>) //{ // sw.Write((byte)1); //} @@ -1498,7 +1498,7 @@ namespace NodeGenerator tname == text_consts.bool_type_name || tname == text_consts.char_type_name) { - //: sw.Write(<>.<_>); + //пишем: sw.Write(<параметр>.<имя_поля>); sw.WriteLine(text_consts.tab3 + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + @@ -1517,15 +1517,15 @@ namespace NodeGenerator } else { - //: - //if (<_visit>.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // <_visit>.<_>.visit(this); + // <параметр_visit>.<имя_поля>.visit(this); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + @@ -1562,10 +1562,10 @@ namespace NodeGenerator public void generate_stream_reader_cpp(StreamWriter sw_h, StreamWriter sw_cpp, string pcu_reader_name) { - // - //void visit(<_> *_<_>) + //пишем + //void visit(<имя_типа> *_<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw_h.WriteLine(); @@ -1583,7 +1583,7 @@ namespace NodeGenerator sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.void_keyword + text_consts.space + text_consts.read_prefix + node_name + @@ -1602,14 +1602,14 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.GetChar() == 0) //{ - // _<_>->source_context = NULL; + // _<имя_типа>->source_context = NULL; //} //else //{ @@ -1623,7 +1623,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.GetInt(), br.GetInt()); // } - // _<_>->source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>->source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -1713,41 +1713,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = new vector<_List*>(); + // <параметр_visit>-><имя_поля> = new vector<параметр_List*>(); // int ssyy_count = br.GetInt(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>-><_>.push_back(static_cast<_List*>(read_node())); + // <параметр_visit>-><имя_поля>.push_back(static_cast<параметр_List*>(read_node())); // } //} string list_param = tname.Substring(5, tname.Length - 6); @@ -1814,11 +1814,11 @@ namespace NodeGenerator { //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = br.GetString(); + // <параметр_visit>-><имя_поля> = br.GetString(); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -1846,7 +1846,7 @@ namespace NodeGenerator text_consts.semicolon); sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -1880,7 +1880,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //br.Read...(&<_visit>-><_>); + //br.Read...(&<параметр_visit>-><имя_поля>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.reader_name + text_consts.dot + write_proc_string + text_consts.open_par + text_consts.address + @@ -1890,7 +1890,7 @@ namespace NodeGenerator } else { - //<_visit>-><_> = (<_>)br.GetByte(); + //<параметр_visit>-><имя_поля> = (<тип_поля>)br.GetByte(); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -1906,8 +1906,8 @@ namespace NodeGenerator } else { - //: - //<_visit>-><_> = static_cast<_*>(read_node()); + //пишем: + //<параметр_visit>-><имя_поля> = static_cast<тип_узла*>(read_node()); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -1932,10 +1932,10 @@ namespace NodeGenerator public void generate_pcu_reader(StreamWriter sw) { - // - //public void visit(<_> _<_>) + //пишем + //public void visit(<имя_типа> _<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw.WriteLine(); @@ -1953,7 +1953,7 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw.WriteLine(); sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.public_keyword + @@ -1964,14 +1964,14 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.ReadByte() == 0) //{ - // _<_>.source_context = null; + // _<имя_типа>.source_context = null; //} //else //{ @@ -1985,7 +1985,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.ReadInt32(), br.ReadInt32()); // } - // _<_>.source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>.source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -2073,41 +2073,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw.WriteLine(text_consts.tab3 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = new <_>(); + // <параметр_visit>.<имя_поля> = new <тип_поля>(); // Int32 ssyy_count = br.ReadInt32(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>.<_>.Add(read_node() as <_List>); + // <параметр_visit>.<имя_поля>.Add(read_node() as <параметр_List>); // } //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + @@ -2169,11 +2169,11 @@ namespace NodeGenerator { //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = br.ReadString(); + // <параметр_visit>.<имя_поля> = br.ReadString(); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -2201,7 +2201,7 @@ namespace NodeGenerator text_consts.semicolon); sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -2235,7 +2235,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //<_visit>.<_> = br.Read...(); + //<параметр_visit>.<имя_поля> = br.Read...(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2246,7 +2246,7 @@ namespace NodeGenerator } else { - //<_visit>.<_> = (<_>)br.ReadByte(); + //<параметр_visit>.<имя_поля> = (<тип_поля>)br.ReadByte(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2262,8 +2262,8 @@ namespace NodeGenerator } else { - //: - //<_visit>.<_> = read_node() as <_>; + //пишем: + //<параметр_visit>.<имя_поля> = read_node() as <тип_узла>; sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2770,10 +2770,10 @@ namespace NodeGenerator public void generate_header_code(StreamWriter sw) { sw.WriteLine("/********************************************************************************************"); - sw.WriteLine(" "); - sw.WriteLine("PascalABC.NET: syntax tree generator v1.5() ., .., .., 2007"); + sw.WriteLine("Этот файл создан программой"); + sw.WriteLine("PascalABC.NET: syntax tree generator v1.5(с) Водолазов Н., Ткачук А.В., Иванов С.О., 2007"); sw.WriteLine(); - sw.WriteLine(" !"); + sw.WriteLine("Вручную не редактировать!"); sw.WriteLine("*********************************************************************************************/"); sw.WriteLine(text_consts.using_system); sw.WriteLine(text_consts.using_system_io); @@ -3237,7 +3237,7 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw_h.WriteLine(); - // . + //Пишем конструктор узлов. //tree_node* construct_node(short node_class_number); @@ -3245,8 +3245,8 @@ namespace NodeGenerator //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return NULL; @@ -3288,7 +3288,7 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.close_figure); sw_cpp.WriteLine(); - // + //Пишем процедуру чтения узла //tree_node* read_node(); @@ -3396,13 +3396,13 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw.WriteLine(); - // . + //Пишем конструктор узлов. //public tree_node construct_node(Int16 node_class_number) //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return null; @@ -3435,7 +3435,7 @@ namespace NodeGenerator text_consts.space + text_consts.null_keyword_name + text_consts.semicolon); sw.WriteLine(text_consts.tab2 + text_consts.close_figure); - // + //Пишем процедуру чтения узла //public tree_node read_node() //{ // if (br.ReadByte() == 1) diff --git a/Utils/NodesGeneratorOld/node_def.cs b/Utils/NodesGeneratorOld/node_def.cs index fff7c1ff9..c5e127839 100644 --- a/Utils/NodesGeneratorOld/node_def.cs +++ b/Utils/NodesGeneratorOld/node_def.cs @@ -224,7 +224,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 18); this.label1.TabIndex = 2; - this.label1.Text = " "; + this.label1.Text = "Имя узла"; // // cancel // @@ -258,7 +258,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(120, 19); this.label2.TabIndex = 6; - this.label2.Text = " "; + this.label2.Text = "Базовый класс"; // // help_context // @@ -295,7 +295,7 @@ namespace NodesGenerator this.Name = "node_def"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = " "; + this.Text = "Определение узла"; this.panel1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); diff --git a/Utils/NodesGeneratorOld/simple_node_editor.cs b/Utils/NodesGeneratorOld/simple_node_editor.cs index 63554cf5b..098fae067 100644 --- a/Utils/NodesGeneratorOld/simple_node_editor.cs +++ b/Utils/NodesGeneratorOld/simple_node_editor.cs @@ -239,7 +239,7 @@ namespace NodesGenerator this.Name = "simple_node_editor"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = " "; + this.Text = "Редактор узлов"; this.ResumeLayout(false); this.PerformLayout(); diff --git a/Utils/NodesGeneratorOld0/Form1.cs b/Utils/NodesGeneratorOld0/Form1.cs index d559307f7..a426348df 100644 --- a/Utils/NodesGeneratorOld0/Form1.cs +++ b/Utils/NodesGeneratorOld0/Form1.cs @@ -143,7 +143,7 @@ namespace NodesGenerator this.save.Name = "save"; this.save.Size = new System.Drawing.Size(182, 27); this.save.TabIndex = 1; - this.save.Text = ""; + this.save.Text = "Сохранить"; this.save.Click += new System.EventHandler(this.save_Click); // // close @@ -152,7 +152,7 @@ namespace NodesGenerator this.close.Name = "close"; this.close.Size = new System.Drawing.Size(135, 37); this.close.TabIndex = 2; - this.close.Text = ""; + this.close.Text = "Выход"; this.close.Click += new System.EventHandler(this.close_Click); // // nodes_list @@ -171,7 +171,7 @@ namespace NodesGenerator this.save_as.Name = "save_as"; this.save_as.Size = new System.Drawing.Size(182, 27); this.save_as.TabIndex = 4; - this.save_as.Text = " "; + this.save_as.Text = "Сохранить как"; this.save_as.Click += new System.EventHandler(this.save_as_Click); // // open @@ -180,13 +180,13 @@ namespace NodesGenerator this.open.Name = "open"; this.open.Size = new System.Drawing.Size(182, 27); this.open.TabIndex = 5; - this.open.Text = ""; + this.open.Text = "Открыть"; this.open.Click += new System.EventHandler(this.open_Click); // // openFileDialog1 // this.openFileDialog1.DefaultExt = "nin"; - this.openFileDialog1.Filter = " (*.nin)|*.nin| (*.*)|*.*"; + this.openFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*"; // // add // @@ -194,7 +194,7 @@ namespace NodesGenerator this.add.Name = "add"; this.add.Size = new System.Drawing.Size(117, 27); this.add.TabIndex = 6; - this.add.Text = ""; + this.add.Text = "Добавить"; this.add.Click += new System.EventHandler(this.add_Click); // // delete @@ -203,7 +203,7 @@ namespace NodesGenerator this.delete.Name = "delete"; this.delete.Size = new System.Drawing.Size(117, 27); this.delete.TabIndex = 7; - this.delete.Text = ""; + this.delete.Text = "Удалить"; this.delete.Click += new System.EventHandler(this.delete_Click); // // generate_code @@ -213,7 +213,7 @@ namespace NodesGenerator this.generate_code.Name = "generate_code"; this.generate_code.Size = new System.Drawing.Size(182, 35); this.generate_code.TabIndex = 8; - this.generate_code.Text = " "; + this.generate_code.Text = "Сгенерировать код"; this.generate_code.Click += new System.EventHandler(this.generate_code_Click); // // generate_visitor_template @@ -222,7 +222,7 @@ namespace NodesGenerator this.generate_visitor_template.Name = "generate_visitor_template"; this.generate_visitor_template.Size = new System.Drawing.Size(182, 47); this.generate_visitor_template.TabIndex = 9; - this.generate_visitor_template.Text = " "; + this.generate_visitor_template.Text = "Генерировать шаблон визитора"; this.generate_visitor_template.Click += new System.EventHandler(this.generate_visitor_template_Click); // // panel1 @@ -254,7 +254,7 @@ namespace NodesGenerator this.generate_pcu_read_visitor.Name = "generate_pcu_read_visitor"; this.generate_pcu_read_visitor.Size = new System.Drawing.Size(182, 50); this.generate_pcu_read_visitor.TabIndex = 11; - this.generate_pcu_read_visitor.Text = " pcu-"; + this.generate_pcu_read_visitor.Text = "Генерировать pcu-десериализатор"; this.generate_pcu_read_visitor.UseVisualStyleBackColor = true; this.generate_pcu_read_visitor.Click += new System.EventHandler(this.generate_pcu_read_visitor_Click); // @@ -264,7 +264,7 @@ namespace NodesGenerator this.generate_pcu_write_visitor.Name = "generate_pcu_write_visitor"; this.generate_pcu_write_visitor.Size = new System.Drawing.Size(182, 48); this.generate_pcu_write_visitor.TabIndex = 10; - this.generate_pcu_write_visitor.Text = " pcu-"; + this.generate_pcu_write_visitor.Text = "Генерировать pcu-сериализатор"; this.generate_pcu_write_visitor.UseVisualStyleBackColor = true; this.generate_pcu_write_visitor.Click += new System.EventHandler(this.generate_pcu_write_visitor_Click); // @@ -290,7 +290,7 @@ namespace NodesGenerator this.Down.Name = "Down"; this.Down.Size = new System.Drawing.Size(117, 27); this.Down.TabIndex = 19; - this.Down.Text = ""; + this.Down.Text = "Вниз"; this.Down.UseVisualStyleBackColor = true; this.Down.Click += new System.EventHandler(this.Down_Click); // @@ -300,7 +300,7 @@ namespace NodesGenerator this.Up.Name = "Up"; this.Up.Size = new System.Drawing.Size(117, 27); this.Up.TabIndex = 18; - this.Up.Text = ""; + this.Up.Text = "Вверх"; this.Up.UseVisualStyleBackColor = true; this.Up.Click += new System.EventHandler(this.Up_Click); // @@ -311,7 +311,7 @@ namespace NodesGenerator this.sorted_by_name.Name = "sorted_by_name"; this.sorted_by_name.Size = new System.Drawing.Size(108, 21); this.sorted_by_name.TabIndex = 17; - this.sorted_by_name.Text = ""; + this.sorted_by_name.Text = "Сортировка"; this.sorted_by_name.UseVisualStyleBackColor = true; this.sorted_by_name.CheckStateChanged += new System.EventHandler(this.sorted_by_name_CheckStateChanged); // @@ -321,7 +321,7 @@ namespace NodesGenerator this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(210, 19); this.label7.TabIndex = 16; - this.label7.Text = " "; + this.label7.Text = "Узлы синтаксического дерева"; // // edit // @@ -329,7 +329,7 @@ namespace NodesGenerator this.edit.Name = "edit"; this.edit.Size = new System.Drawing.Size(117, 27); this.edit.TabIndex = 8; - this.edit.Text = ""; + this.edit.Text = "Редактировать"; this.edit.Click += new System.EventHandler(this.edit_Click); // // file_name @@ -352,7 +352,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(210, 19); this.label1.TabIndex = 15; - this.label1.Text = " . "; + this.label1.Text = "Имя файла синтаксич. дерева"; // // label2 // @@ -360,7 +360,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(192, 18); this.label2.TabIndex = 16; - this.label2.Text = " "; + this.label2.Text = "Пространство имен"; // // panel4 // @@ -397,7 +397,7 @@ namespace NodesGenerator this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(192, 17); this.label6.TabIndex = 24; - this.label6.Text = " pcu - "; + this.label6.Text = "Имя pcu - десериализатора"; // // tb_pcu_writer // @@ -413,7 +413,7 @@ namespace NodesGenerator this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(192, 18); this.label5.TabIndex = 22; - this.label5.Text = " pcu - "; + this.label5.Text = "Имя pcu - сериализатора"; // // label4 // @@ -421,7 +421,7 @@ namespace NodesGenerator this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(210, 18); this.label4.TabIndex = 20; - this.label4.Text = " . "; + this.label4.Text = "Имя файла интерф. визитора"; // // visitor_interface_file_name // @@ -436,7 +436,7 @@ namespace NodesGenerator this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(124, 19); this.label3.TabIndex = 18; - this.label3.Text = " "; + this.label3.Text = "Имя фабрики"; // // factory_name // @@ -448,7 +448,7 @@ namespace NodesGenerator // saveFileDialog1 // this.saveFileDialog1.DefaultExt = "nin"; - this.saveFileDialog1.Filter = " (*.nin)|*.nin| (*.*)|*.*"; + this.saveFileDialog1.Filter = "Файлы синтаксического дерева (*.nin)|*.nin|Все файлы (*.*)|*.*"; // // toolStripStatusLabel1 // @@ -490,8 +490,8 @@ namespace NodesGenerator this.MaximizeBox = false; this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "PascalABC.NET: syntax tree generator v1.5() ., .., " + - ".., 2007-10 "; + this.Text = "PascalABC.NET: syntax tree generator v1.5(с) Водолазов Н., Ткачук А.В., Иванов С" + + ".О., 2007-10 "; this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed); this.Load += new System.EventHandler(this.Form1_Load); this.panel1.ResumeLayout(false); @@ -571,7 +571,7 @@ namespace NodesGenerator this.Close(); } - private void set_nodes_information() // set - node_gen + private void set_nodes_information() // set - установить поля интерфейса по node_gen { if (node_gen==null) { @@ -593,7 +593,7 @@ namespace NodesGenerator } - private void get_nodes_information() // get - node_gen + private void get_nodes_information() // get - получить информацию из полей интерфейса и записать ее в node_gen { if (node_gen==null) { @@ -644,16 +644,16 @@ namespace NodesGenerator } catch(Exception) { - MessageBox.Show(" tree.nin"); + MessageBox.Show("Не могу прочитать файл tree.nin"); } } private bool updated=false; /// - /// node_gen - + /// Обновить информацию в node_gen - генераторе узлов /// - private void update() // node_gen - // update node_gen + private void update() // получить информацию из полей интерфейса в node_gen + // то есть сделать update для node_gen { updated=true; get_nodes_information(); diff --git a/Utils/NodesGeneratorOld0/NodeGenerator.cs b/Utils/NodesGeneratorOld0/NodeGenerator.cs index b6b00820e..c489136cd 100644 --- a/Utils/NodesGeneratorOld0/NodeGenerator.cs +++ b/Utils/NodesGeneratorOld0/NodeGenerator.cs @@ -474,13 +474,13 @@ namespace NodeGenerator if (f_name.Length > 7 && f_name.Substring(0, 7) == "vector<") { string type_name = f_name.Substring(0, f_name.Length - 1); - //if ( != NULL) + //if (имя != NULL) //{ - // for (vector::iterator ssyy_j = ->begin(); ssyy_j != ->end(); ssyy_j++) + // for (vector::iterator ssyy_j = имя->begin(); ssyy_j != имя->end(); ssyy_j++) // { // delete *ssyy_j; // } - // delete ; + // delete имя; //} destructor_code.Add(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + property_name + text_consts.space + @@ -731,7 +731,7 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор без параметров."); sw.WriteLine(@" ///"); sw.WriteLine(text_consts.create_simple_constructor(node_name)); //sw.WriteLine(); @@ -793,7 +793,7 @@ namespace NodeGenerator return; sw.WriteLine(@" ///"); - sw.WriteLine(@" /// ."); + sw.WriteLine(@" ///Конструктор с параметрами."); sw.WriteLine(@" ///"); sw.Write(text_consts.tab + text_consts.tab + text_consts.public_keyword + text_consts.space + node_name + text_consts.open_par); @@ -878,9 +878,9 @@ namespace NodeGenerator { //sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type=""; if (base_class!=null) @@ -911,9 +911,9 @@ namespace NodeGenerator { sw.WriteLine(); sw.WriteLine(@" ///"); - sw.WriteLine(@" /// "); + sw.WriteLine(@" ///Метод для обхода дерева посетителем"); sw.WriteLine(@" ///"); - sw.WriteLine(@" ///-."); + sw.WriteLine(@" ///Объект-посетитель."); sw.WriteLine(@" ///Return value is void"); string pol_type = ""; if (base_class == null) @@ -1002,16 +1002,16 @@ namespace NodeGenerator public void generate_painter(StreamWriter sw_h, StreamWriter sw_cpp) { - // visit + //Пишем процедуру visit для данного типа узла - //void visit(_ *__); + //void visit(имя_узла *_имя_узла); - //void Painter::visit(_ *__) + //void Painter::visit(имя_узла *_имя_узла) //{ // PrintSpaces(); - // *os<<_<(_<_>); + //Пишем вызов сериализации полей предка + //write_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.write_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 4 && tname.Substring(0, 5) == "List<") { - //: - //if (<_visit>-><_> != null) + //пишем: + //if (<параметр_visit>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<_<<" Count="<<__visit->_->size()<_->size(); ssyy_i++) + // *os<<имя_узла<<" Count="<<_параметр_visit->имя_узла->size()<имя_узла->size(); ssyy_i++) // { // PrintSpaces(); // *os<<"["<_))[i]); + // print_node((*(параметр_visit->имя_узла))[i]); // } //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + @@ -1142,12 +1142,12 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>-><_> != null) + //if (<параметр>-><имя_поля> != null) //{ // PrintSpaces(); - // *os<<"_="<<<>-><_><.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<_visit>.<_>.Count); - // for(int ssyy_i = 0; ssyy_i < <_visit>.<_>.Count; ssyy_i++) + // sw.Write(<параметр_visit>.<имя_поля>.Count); + // for(int ssyy_i = 0; ssyy_i < <параметр_visit>.<имя_поля>.Count; ssyy_i++) // { - // if (<_visit>.<_>[ssyy_i] == null) + // if (<параметр_visit>.<имя_поля>[ssyy_i] == null) // { // sw.Write((byte)0); // } // else // { // sw.Write((byte)1); - // <_visit>._[ssyy_i].visit(this); + // <параметр_visit>.имя_поля[ssyy_i].visit(this); // } // } //} @@ -1496,25 +1496,25 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } else - if (tname == text_consts.string_type_name) // , null + if (tname == text_consts.string_type_name) //к сожалению, у нас это иногда null { - //if (<>.<_> == null) + //if (<параметр>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // sw.Write(<>.<_>); // .NET + // sw.Write(<параметр>.<имя_поля>); //Для .NET //} - // : - // sw.Write(<>.<_>.Length + 1); - // for(int ssyy_i = 0; i < <>.<_>.Length; i++) + //Для кроссплатформенных: + // sw.Write(<параметр>.<имя_поля>.Length + 1); + // for(int ssyy_i = 0; i < <параметр>.<имя_поля>.Length; i++) // { - // sw.Write(<>.<_>[ssyy_i]); + // sw.Write(<параметр>.<имя_поля>[ssyy_i]); // } - // sw.Write((byte)0); // + // sw.Write((byte)0); //Последний символ sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + @@ -1545,7 +1545,7 @@ namespace NodeGenerator } else { - // C-, .. char* + //Пишем для последующего чтения в C-строку, т.е. в char* sw.WriteLine(text_consts.tab3 + text_consts.tab + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + @@ -1587,7 +1587,7 @@ namespace NodeGenerator else if (tname == text_consts.bool_type_name && cross_platform) { - //if (_<>.<_>) + //if (_<параметр>.<имя_поля>) //{ // sw.Write((byte)1); //} @@ -1622,7 +1622,7 @@ namespace NodeGenerator tname == text_consts.bool_type_name || tname == text_consts.char_type_name) { - //: sw.Write(<>.<_>); + //пишем: sw.Write(<параметр>.<имя_поля>); sw.WriteLine(text_consts.tab3 + text_consts.writer_name + text_consts.dot + text_consts.write_proc_name + text_consts.open_par + text_consts.underline + node_name + text_consts.dot + @@ -1641,15 +1641,15 @@ namespace NodeGenerator } else { - //: - //if (<_visit>.<_> == null) + //пишем: + //if (<параметр_visit>.<имя_поля> == null) //{ // sw.Write((byte)0); //} //else //{ // sw.Write((byte)1); - // <_visit>.<_>.visit(this); + // <параметр_visit>.<имя_поля>.visit(this); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.underline + node_name + @@ -1686,10 +1686,10 @@ namespace NodeGenerator public void generate_stream_reader_cpp(StreamWriter sw_h, StreamWriter sw_cpp, string pcu_reader_name) { - // - //void visit(<_> *_<_>) + //пишем + //void visit(<имя_типа> *_<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw_h.WriteLine(); @@ -1707,7 +1707,7 @@ namespace NodeGenerator sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw_h.WriteLine(text_consts.tab + text_consts.tab + text_consts.void_keyword + text_consts.space + text_consts.read_prefix + node_name + @@ -1726,14 +1726,14 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.GetChar() == 0) //{ - // _<_>->source_context = NULL; + // _<имя_типа>->source_context = NULL; //} //else //{ @@ -1747,7 +1747,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.GetInt(), br.GetInt()); // } - // _<_>->source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>->source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -1837,41 +1837,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = new vector<_List*>(); + // <параметр_visit>-><имя_поля> = new vector<параметр_List*>(); // int ssyy_count = br.GetInt(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>-><_>.push_back(static_cast<_List*>(read_node())); + // <параметр_visit>-><имя_поля>.push_back(static_cast<параметр_List*>(read_node())); // } //} string list_param = tname.Substring(5, tname.Length - 6); @@ -1938,11 +1938,11 @@ namespace NodeGenerator { //if (br.GetChar() == 0) //{ - // <_visit>-><_> = NULL; + // <параметр_visit>-><имя_поля> = NULL; //} //else //{ - // <_visit>-><_> = br.GetString(); + // <параметр_visit>-><имя_поля> = br.GetString(); //} sw_cpp.WriteLine(text_consts.tab2 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -1970,7 +1970,7 @@ namespace NodeGenerator text_consts.semicolon); sw_cpp.WriteLine(text_consts.tab2 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -2004,7 +2004,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //br.Read...(&<_visit>-><_>); + //br.Read...(&<параметр_visit>-><имя_поля>); sw_cpp.WriteLine(text_consts.tab2 + text_consts.reader_name + text_consts.dot + write_proc_string + text_consts.open_par + text_consts.address + @@ -2014,7 +2014,7 @@ namespace NodeGenerator } else { - //<_visit>-><_> = (<_>)br.GetByte(); + //<параметр_visit>-><имя_поля> = (<тип_поля>)br.GetByte(); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -2030,8 +2030,8 @@ namespace NodeGenerator } else { - //: - //<_visit>-><_> = static_cast<_*>(read_node()); + //пишем: + //<параметр_visit>-><имя_поля> = static_cast<тип_узла*>(read_node()); sw_cpp.WriteLine(text_consts.tab2 + text_consts.underline + node_name + text_consts.arrow + nfi.field_name + text_consts.space + text_consts.assign + @@ -2056,10 +2056,10 @@ namespace NodeGenerator public void generate_pcu_reader(StreamWriter sw) { - // - //public void visit(<_> _<_>) + //пишем + //public void visit(<имя_типа> _<имя_типа>) //{ - // read_< >(_< >); + // read_<имя типа>(_<имя типа>); //} sw.WriteLine(); @@ -2077,7 +2077,7 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.close_figure); - // + //пишем процедуру чтения данного типа sw.WriteLine(); sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.public_keyword + @@ -2088,14 +2088,14 @@ namespace NodeGenerator sw.WriteLine(text_consts.tab + text_consts.tab + text_consts.open_figure); - // + //Пишем процедуру чтения полей для данного типа узла if (node_name == text_consts.base_tree_node_name) { - // + //пишем //if (br.ReadByte() == 0) //{ - // _<_>.source_context = null; + // _<имя_типа>.source_context = null; //} //else //{ @@ -2109,7 +2109,7 @@ namespace NodeGenerator // { // ssyy_end = new SourceContext(0, 0, br.ReadInt32(), br.ReadInt32()); // } - // _<_>.source_context = new SourceContext(ssyy_beg, ssyy_end); + // _<имя_типа>.source_context = new SourceContext(ssyy_beg, ssyy_end); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + text_consts.reader_name + @@ -2197,41 +2197,41 @@ namespace NodeGenerator } else { - //if (base_class != null) //(ssyy) tree_node + //if (base_class != null) //(ssyy) Все должны быть наследниками tree_node { - // - //read_<__>(_<_>); + //Пишем вызов десериализации полей предка + //read_<имя_типа_предка>(_<имя_типа>); sw.WriteLine(text_consts.tab3 + text_consts.read_prefix + base_class.node_name + text_consts.open_par + text_consts.underline + node_name + text_consts.close_par + text_consts.semicolon); } - // + //Пишем поля объекта foreach (node_field_info nfi in _subnodes) { simple_element se = nfi as simple_element; string write_proc_string = ""; - // + //Если поле не является узлом дерева if (se != null) { - // + //Получаем имя типа поля string tname = se.val_field_type_name;//.ToLower(); if (tname.Length > 5 && tname.Substring(0, 5) == "List<") { - //: + //пишем: //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = new <_>(); + // <параметр_visit>.<имя_поля> = new <тип_поля>(); // Int32 ssyy_count = br.ReadInt32(); // for(int ssyy_i = 0; ssyy_i < ssyy_count; ssyy_i++) // { - // <_visit>.<_>.Add(read_node() as <_List>); + // <параметр_visit>.<имя_поля>.Add(read_node() as <параметр_List>); // } //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + @@ -2293,11 +2293,11 @@ namespace NodeGenerator { //if (br.ReadByte() == 0) //{ - // <_visit>.<_> = null; + // <параметр_visit>.<имя_поля> = null; //} //else //{ - // <_visit>.<_> = br.ReadString(); + // <параметр_visit>.<имя_поля> = br.ReadString(); //} sw.WriteLine(text_consts.tab3 + text_consts.if_keyword_name + text_consts.space + text_consts.open_par + @@ -2325,7 +2325,7 @@ namespace NodeGenerator text_consts.semicolon); sw.WriteLine(text_consts.tab3 + text_consts.close_figure); } - // - : + //простые типы - обрабатываются схожим образом: else { if (tname == text_consts.int32_type_name) @@ -2359,7 +2359,7 @@ namespace NodeGenerator } if (write_proc_string != "") { - //<_visit>.<_> = br.Read...(); + //<параметр_visit>.<имя_поля> = br.Read...(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2370,7 +2370,7 @@ namespace NodeGenerator } else { - //<_visit>.<_> = (<_>)br.ReadByte(); + //<параметр_visit>.<имя_поля> = (<тип_поля>)br.ReadByte(); sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2386,8 +2386,8 @@ namespace NodeGenerator } else { - //: - //<_visit>.<_> = read_node() as <_>; + //пишем: + //<параметр_visit>.<имя_поля> = read_node() as <тип_узла>; sw.WriteLine(text_consts.tab3 + text_consts.underline + node_name + text_consts.dot + nfi.field_name + text_consts.space + text_consts.assign + @@ -2927,10 +2927,10 @@ namespace NodeGenerator public void generate_header_code(StreamWriter sw) { sw.WriteLine("/********************************************************************************************"); - sw.WriteLine(" "); - sw.WriteLine("PascalABC.NET: syntax tree generator v1.5() ., .., .., 2007"); + sw.WriteLine("Этот файл создан программой"); + sw.WriteLine("PascalABC.NET: syntax tree generator v1.5(с) Водолазов Н., Ткачук А.В., Иванов С.О., 2007"); sw.WriteLine(); - sw.WriteLine(" !"); + sw.WriteLine("Вручную не редактировать!"); sw.WriteLine("*********************************************************************************************/"); sw.WriteLine(text_consts.using_system); sw.WriteLine(text_consts.using_system_io); @@ -3394,7 +3394,7 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw_h.WriteLine(); - // . + //Пишем конструктор узлов. //tree_node* construct_node(short node_class_number); @@ -3402,8 +3402,8 @@ namespace NodeGenerator //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return NULL; @@ -3445,7 +3445,7 @@ namespace NodeGenerator sw_cpp.WriteLine(text_consts.tab + text_consts.close_figure); sw_cpp.WriteLine(); - // + //Пишем процедуру чтения узла //tree_node* read_node(); @@ -3553,13 +3553,13 @@ namespace NodeGenerator text_consts.space + text_consts.reader_name + text_consts.semicolon); sw.WriteLine(); - // . + //Пишем конструктор узлов. //public tree_node construct_node(Int16 node_class_number) //{ // switch(node_class_number) // { - // case <>: - // return new <_>(); + // case <номер>: + // return new <узел_дерева>(); // ... // } // return null; @@ -3592,7 +3592,7 @@ namespace NodeGenerator text_consts.space + text_consts.null_keyword_name + text_consts.semicolon); sw.WriteLine(text_consts.tab2 + text_consts.close_figure); - // + //Пишем процедуру чтения узла //public tree_node read_node() //{ // if (br.ReadByte() == 1) diff --git a/Utils/NodesGeneratorOld0/node_def.cs b/Utils/NodesGeneratorOld0/node_def.cs index 38c1ee709..4606af8a9 100644 --- a/Utils/NodesGeneratorOld0/node_def.cs +++ b/Utils/NodesGeneratorOld0/node_def.cs @@ -289,7 +289,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 18); this.label1.TabIndex = 2; - this.label1.Text = " "; + this.label1.Text = "Имя узла"; // // cancel // @@ -323,7 +323,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(120, 19); this.label2.TabIndex = 6; - this.label2.Text = " "; + this.label2.Text = "Базовый класс"; // // help_context // @@ -361,7 +361,7 @@ namespace NodesGenerator this.Name = "node_def"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = " "; + this.Text = "Определение узла"; this.panel1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -431,7 +431,7 @@ namespace NodesGenerator subnodes.Items[t]=simple_node_editor.edit_element(se,ni,ng); return; } - // node_field_info + // node_field_info должен быть последним node_field_info nfi = subnodes.Items[t] as node_field_info; if (nfi != null) { diff --git a/Utils/NodesGeneratorOld0/simple_node_editor.cs b/Utils/NodesGeneratorOld0/simple_node_editor.cs index 263e0bf79..18922e6f2 100644 --- a/Utils/NodesGeneratorOld0/simple_node_editor.cs +++ b/Utils/NodesGeneratorOld0/simple_node_editor.cs @@ -153,7 +153,7 @@ namespace NodesGenerator this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(120, 19); this.label1.TabIndex = 1; - this.label1.Text = " "; + this.label1.Text = "Имя поля"; // // label2 // @@ -161,7 +161,7 @@ namespace NodesGenerator this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(120, 18); this.label2.TabIndex = 2; - this.label2.Text = " "; + this.label2.Text = "Тип поля"; // // field_type // @@ -243,7 +243,7 @@ namespace NodesGenerator this.Name = "simple_node_editor"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = " "; + this.Text = "Редактор узлов"; this.ResumeLayout(false); this.PerformLayout(); diff --git a/Utils/Pause/Pause.pas b/Utils/Pause/Pause.pas index da317eef5..ae2c8f101 100644 --- a/Utils/Pause/Pause.pas +++ b/Utils/Pause/Pause.pas @@ -4,7 +4,7 @@ begin with System.Console do begin if CursorLeft >= 0 then WriteLine; - Write(' , . . .'); + Write('Программа завершена, нажмите любую клавишу . . .'); Readkey(true); end; end. \ No newline at end of file diff --git a/Utils/ProgrammRunner/ProgrammRunner.pas b/Utils/ProgrammRunner/ProgrammRunner.pas index 6df3ce582..b2497363b 100644 --- a/Utils/ProgrammRunner/ProgrammRunner.pas +++ b/Utils/ProgrammRunner/ProgrammRunner.pas @@ -14,6 +14,6 @@ begin p.StartInfo := psi; p.Start(); p.WaitForExit(); - System.Console.WriteLine(' , . . .'); + System.Console.WriteLine('Программа завершена, нажмите любую клавишу . . .'); System.Console.ReadKey(true); end. \ No newline at end of file diff --git a/Utils/grmCommentCompiler/Parser.cs b/Utils/grmCommentCompiler/Parser.cs index e546048c3..5513cd9bc 100644 --- a/Utils/grmCommentCompiler/Parser.cs +++ b/Utils/grmCommentCompiler/Parser.cs @@ -480,7 +480,7 @@ namespace com.calitha.goldparser TerminalsDefs.Add(str, " {errors.Add(new nonterminal_token_return_null(current_file_name,parsertools.GetTokenSourceContext(),(syntax_tree_node)prev_node,\"" + str + "\"));}return null;"); return; } - // ::= term ::= $$=$1 + //для праил типа ::= term или ::= добавляем $$=$1 TerminalsDefs.Add(str,"$$=$1;"); return; } @@ -698,14 +698,14 @@ namespace com.calitha.goldparser // ::= Nonterminal '::=' string nonterm=(string)token.Tokens[0].UserObject; string handles=(string)token.Tokens[3].UserObject; - string[] parts=handles.Split("".ToCharArray()); + string[] parts=handles.Split("Ё".ToCharArray()); foreach (string s in parts) MakeNonTerminal(nonterm,s); return null; case (int)RuleConstants.RULE_HANDLES_PIPE : // ::= '|' - return (string)token.Tokens[0].UserObject+""+(string)token.Tokens[3].UserObject; + return (string)token.Tokens[0].UserObject+"Ё"+(string)token.Tokens[3].UserObject; case (int)RuleConstants.RULE_HANDLES : // ::= diff --git a/VisualPascalABCNET/CompilerForm.Designer.cs b/VisualPascalABCNET/CompilerForm.Designer.cs index 8df4ea8eb..a3a3f02a3 100644 --- a/VisualPascalABCNET/CompilerForm.Designer.cs +++ b/VisualPascalABCNET/CompilerForm.Designer.cs @@ -37,7 +37,7 @@ namespace VisualPascalABC this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(304, 23); this.button1.TabIndex = 0; - this.button1.Text = " "; + this.button1.Text = "Перезапустить компилятор"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // @@ -48,7 +48,7 @@ namespace VisualPascalABC this.ClientSize = new System.Drawing.Size(328, 149); this.Controls.Add(this.button1); this.Name = "CompilerForm"; - this.Text = ""; + this.Text = "Компилятор"; this.ResumeLayout(false); } diff --git a/VisualPascalABCNET/DS/PluginsController/PluginsController.cs b/VisualPascalABCNET/DS/PluginsController/PluginsController.cs index 391f369cb..f0c69c21d 100644 --- a/VisualPascalABCNET/DS/PluginsController/PluginsController.cs +++ b/VisualPascalABCNET/DS/PluginsController/PluginsController.cs @@ -190,7 +190,7 @@ namespace VisualPascalABCPlugins } catch (Exception e) { - // dll + //если dll не нетовская } } diff --git a/VisualPascalABCNET/DS/RunManager/RunManager.cs b/VisualPascalABCNET/DS/RunManager/RunManager.cs index c34ba969c..09982e422 100644 --- a/VisualPascalABCNET/DS/RunManager/RunManager.cs +++ b/VisualPascalABCNET/DS/RunManager/RunManager.cs @@ -376,7 +376,7 @@ namespace VisualPascalABC void PRunner_ProcessExited(object sender, EventArgs e) { string fileName = (string)StartedFiles[sender]; - if (fileName == null) return;//TODO: + if (fileName == null) return;//TODO: это ошибочная ситуация if (!WorkbenchServiceFactory.Workbench.UserOptions.AlwaysAttachDebuggerAtStart) WorkbenchServiceFactory.Workbench.DebuggerManager.NullProcessHandleIfNeed(fileName); EventedStreamReaderList.Remove(fileName); @@ -387,7 +387,7 @@ namespace VisualPascalABC void RemoveFromTables(string FileName) { - if (StartedProcesses[FileName] != null)//TODO: + if (StartedProcesses[FileName] != null)//TODO: это ошибочная ситуация { EventedStreamReaderList.Remove(FileName); StartedFiles.Remove(StartedProcesses[FileName]); diff --git a/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs b/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs index a2d7f6ea5..56114cd56 100644 --- a/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs +++ b/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs @@ -129,9 +129,9 @@ namespace VisualPascalABC } public void AbortStaring() { - // + //для того чтобы отмена прошла быстрее увеличиваем приоритет потока StartingThread.Priority = System.Threading.ThreadPriority.AboveNormal; - // + //даем команду на завершение и ждем завершения StartingThread.Join(); } @@ -176,7 +176,7 @@ namespace VisualPascalABC Filter = Tools.MakeFilter(Filter, ssf.LanguageName, ssf.Extensions); AllFilter = Tools.MakeAllFilter(AllFilter, ssf.LanguageName, ssf.Extensions); } - Filter += " C# (*.cs)|*.cs|"; + Filter += "Программы на C# (*.cs)|*.cs|"; AllFilter += "*.cs;"; return Tools.FinishMakeFilter(Filter, AllFilter); } @@ -428,10 +428,10 @@ namespace VisualPascalABC ParsedFiles.Add(FullFileName); break; case PascalABCCompiler.CompilerState.BeginCompileFile: RusName = VECStringResources.Get("STATETEXT_BEGINCOMPILEFILE{0}"); break; - //case PascalABCCompiler.CompilerState.ReadPCUFile: RusName = " {0}..."; break; + //case PascalABCCompiler.CompilerState.ReadPCUFile: RusName = "Чтение {0}..."; break; case PascalABCCompiler.CompilerState.CodeGeneration: RusName = VECStringResources.Get("STATETEXT_CODEGENERATION{0}"); break; //case PascalABCCompiler.CompilerState.ReadDLL: - //case PascalABCCompiler.CompilerState.ReadPCUFile: RusName = " {0}..."; break; + //case PascalABCCompiler.CompilerState.ReadPCUFile: RusName = "Чтение {0}..."; break; case PascalABCCompiler.CompilerState.Ready: if (Compiler != null) { diff --git a/VisualPascalABCNET/DockContent/CodeFileDocument.cs b/VisualPascalABCNET/DockContent/CodeFileDocument.cs index 36cca6a71..d4387b543 100644 --- a/VisualPascalABCNET/DockContent/CodeFileDocument.cs +++ b/VisualPascalABCNET/DockContent/CodeFileDocument.cs @@ -120,7 +120,7 @@ namespace VisualPascalABC TextEditor.LoadFile(FileName); } - // + //меняем стратегию подсведки в соответсвии с расширением файла public void SetHighlightingStrategyForFile(string ForFile) { TextEditor.Document.HighlightingStrategy = ICSharpCode.TextEditor.Document.HighlightingManager.Manager.FindHighlighterForFile(ForFile); @@ -210,7 +210,7 @@ namespace VisualPascalABC private object ConvertToWin1251(string str) { - //return str.Replace("", "\'e0\'e1\'f1"); + //return str.Replace("абс", "\'e0\'e1\'f1"); return str; } @@ -342,7 +342,7 @@ namespace VisualPascalABC public string FormName = "Form1"; public bool FirstCodeGeneration = false; - //ssyy "" " " + //ssyy взводит кнопки "сохраниить" и "сохранить всё" public void SetDocumentChanged() { DocumentChanged = true; @@ -593,7 +593,7 @@ namespace VisualPascalABC event_description.editor = TextEditor; System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(generated_text, string_consts.nr); - //, + //строка, на которой последнее описание из секции реализаций PascalABCCompiler.SyntaxTree.file_position last_defs_pos = null; if (implementation_not_null) { @@ -601,7 +601,7 @@ namespace VisualPascalABC um.implementation_part.implementation_definitions.defs.Count - 1 ].source_context.end_position; - // + //Ищем описание обработчика foreach (PascalABCCompiler.SyntaxTree.declaration decl in um.implementation_part.implementation_definitions.defs) { @@ -684,7 +684,7 @@ namespace VisualPascalABC event_description.column_num = 3; event_description.line_num = last_defs_pos.line_num + s_num - e_num + matches.Count + 7; lines[last_defs_pos.line_num - 1] = lines[last_defs_pos.line_num - 1].Insert(last_defs_pos.column_num, new_event); - // + //Добавляем заголовок события //int last_form_member_line = form_def.body.class_def_blocks[form_def.body.class_def_blocks.Count - 1].source_context.end_position.line_num - 1; lines[s_num] = string_consts.event_handler_header_trim + "procedure " + new_event_header + diff --git a/VisualPascalABCNET/DockContent/ErrorsListWindowForm.cs b/VisualPascalABCNET/DockContent/ErrorsListWindowForm.cs index e6b99e4a0..373862bfb 100644 --- a/VisualPascalABCNET/DockContent/ErrorsListWindowForm.cs +++ b/VisualPascalABCNET/DockContent/ErrorsListWindowForm.cs @@ -117,7 +117,7 @@ namespace VisualPascalABC { if (ErrorsList[0] is VisualPascalABC.RuntimeException) MainForm.ExecuteErrorPos(er.SourceLocation, 2); - else // ImageIndex==2 - + else // ImageIndex==2 - ошибка выполнения MainForm.ExecuteErrorPos(er.SourceLocation, 1); //OpenFile(er.SourceLocation.FileName); //(tabControl1.SelectedTab.ag as CodeFileDocumentControl).TextEditor.CaretPosition(er.SourceLocation.BeginPosition.Line,er.SourceLocation.BeginPosition.Column); diff --git a/VisualPascalABCNET/Form1.Designer.cs b/VisualPascalABCNET/Form1.Designer.cs index 8ff0e2536..f1aeabd26 100644 --- a/VisualPascalABCNET/Form1.Designer.cs +++ b/VisualPascalABCNET/Form1.Designer.cs @@ -370,7 +370,7 @@ namespace VisualPascalABC this.tsCopy.ImageTransparentColor = System.Drawing.Color.Maroon; this.tsCopy.Name = "tsCopy"; this.tsCopy.Size = new System.Drawing.Size(23, 22); - this.tsCopy.Text = "(Ctrl+C)"; + this.tsCopy.Text = "Копировать(Ctrl+C)"; this.tsCopy.ToolTipText = "M_COPY"; this.tsCopy.Click += new System.EventHandler(this.miCopy_Click); // @@ -381,7 +381,7 @@ namespace VisualPascalABC this.tsPaste.ImageTransparentColor = System.Drawing.Color.Maroon; this.tsPaste.Name = "tsPaste"; this.tsPaste.Size = new System.Drawing.Size(23, 22); - this.tsPaste.Text = "(Ctrl+V)"; + this.tsPaste.Text = "Вставить(Ctrl+V)"; this.tsPaste.ToolTipText = "M_PASTE"; this.tsPaste.Click += new System.EventHandler(this.miPaste_Click); // @@ -397,7 +397,7 @@ namespace VisualPascalABC this.tsUndo.ImageTransparentColor = System.Drawing.Color.Maroon; this.tsUndo.Name = "tsUndo"; this.tsUndo.Size = new System.Drawing.Size(23, 22); - this.tsUndo.Text = "(Ctrl+Z)"; + this.tsUndo.Text = "Отменить(Ctrl+Z)"; this.tsUndo.ToolTipText = "M_UNDO"; this.tsUndo.Click += new System.EventHandler(this.UndoToolStripMenuItem_Click); // @@ -408,7 +408,7 @@ namespace VisualPascalABC this.tsRedo.ImageTransparentColor = System.Drawing.Color.Maroon; this.tsRedo.Name = "tsRedo"; this.tsRedo.Size = new System.Drawing.Size(23, 22); - this.tsRedo.Text = "(Shift+Ctrl+Z)"; + this.tsRedo.Text = "Восстановить(Shift+Ctrl+Z)"; this.tsRedo.ToolTipText = "M_REDO"; this.tsRedo.Click += new System.EventHandler(this.RedoToolStripMenuItem_Click); // @@ -447,7 +447,7 @@ namespace VisualPascalABC this.StartButton.ImageTransparentColor = System.Drawing.Color.Maroon; this.StartButton.Name = "StartButton"; this.StartButton.Size = new System.Drawing.Size(23, 22); - this.StartButton.Text = " (F9)"; + this.StartButton.Text = "Выполнить программу(F9)"; this.StartButton.ToolTipText = "M_RUN_DEBUG"; this.StartButton.Click += new System.EventHandler(this.StartMenuItem_Click); this.StartButton.EnabledChanged += new System.EventHandler(this.StartButton_EnabledChanged); @@ -483,7 +483,7 @@ namespace VisualPascalABC this.CompileButton.ImageTransparentColor = System.Drawing.Color.Red; this.CompileButton.Name = "CompileButton"; this.CompileButton.Size = new System.Drawing.Size(23, 22); - this.CompileButton.Text = ""; + this.CompileButton.Text = "Компилировать"; this.CompileButton.ToolTipText = "M_BUILD"; this.CompileButton.Click += new System.EventHandler(this.toolStripButton10_Click); this.CompileButton.EnabledChanged += new System.EventHandler(this.CompileButton_EnabledChanged); @@ -496,7 +496,7 @@ namespace VisualPascalABC this.ReCompileButton.ImageTransparentColor = System.Drawing.Color.Red; this.ReCompileButton.Name = "ReCompileButton"; this.ReCompileButton.Size = new System.Drawing.Size(23, 22); - this.ReCompileButton.Text = ""; + this.ReCompileButton.Text = "Перекомпилировать"; this.ReCompileButton.ToolTipText = "M_REBUILD"; this.ReCompileButton.Visible = false; this.ReCompileButton.Click += new System.EventHandler(this.toolStripButton12_Click); @@ -586,7 +586,7 @@ namespace VisualPascalABC this.toolStripButton16.ImageTransparentColor = System.Drawing.Color.Maroon; this.toolStripButton16.Name = "toolStripButton16"; this.toolStripButton16.Size = new System.Drawing.Size(23, 22); - this.toolStripButton16.Text = " (F5)"; + this.toolStripButton16.Text = "Окно вывода(F5)"; this.toolStripButton16.Visible = false; // // toolStripButton17 @@ -596,7 +596,7 @@ namespace VisualPascalABC this.toolStripButton17.ImageTransparentColor = System.Drawing.Color.Magenta; this.toolStripButton17.Name = "toolStripButton17"; this.toolStripButton17.Size = new System.Drawing.Size(23, 22); - this.toolStripButton17.Text = " (F6)"; + this.toolStripButton17.Text = "Окно выполненной программы(F6)"; this.toolStripButton17.Visible = false; // // toolStripButton19 @@ -606,7 +606,7 @@ namespace VisualPascalABC this.toolStripButton19.ImageTransparentColor = System.Drawing.Color.Maroon; this.toolStripButton19.Name = "toolStripButton19"; this.toolStripButton19.Size = new System.Drawing.Size(23, 22); - this.toolStripButton19.Text = " (Ctrl+Del)"; + this.toolStripButton19.Text = "Очистить вывод(Ctrl+Del)"; this.toolStripButton19.Visible = false; this.toolStripButton19.Click += new System.EventHandler(this.toolStripButton19_Click); // @@ -1968,22 +1968,22 @@ namespace VisualPascalABC // // columnHeader2 // - this.columnHeader2.Text = ""; + this.columnHeader2.Text = "Строка"; this.columnHeader2.Width = 16; // // columnHeader3 // - this.columnHeader3.Text = ""; + this.columnHeader3.Text = "Ошибка"; this.columnHeader3.Width = 269; // // columnHeader4 // - this.columnHeader4.Text = ""; + this.columnHeader4.Text = "Файл"; this.columnHeader4.Width = 95; // // columnHeader5 // - this.columnHeader5.Text = " "; + this.columnHeader5.Text = "Путь к файлу"; // // MainDockPanel // diff --git a/VisualPascalABCNET/Form1.cs b/VisualPascalABCNET/Form1.cs index 3bc0254a7..5464fd4e3 100644 --- a/VisualPascalABCNET/Form1.cs +++ b/VisualPascalABCNET/Form1.cs @@ -448,10 +448,10 @@ namespace VisualPascalABC private void Form1_FormClosing(object sender, FormClosingEventArgs e) { string text = Text; - // + //если запущены программы if (WorkbenchServiceFactory.RunService.IsRun()) { - // + //завершаем все программы this.Text = string.Format(FTSFormat, MainFormText, Form1StringResources.Get("FTS_KILLPROCESS")); WorkbenchServiceFactory.RunService.KillAll(); this.Text = text; @@ -459,7 +459,7 @@ namespace VisualPascalABC WorkbenchServiceFactory.CodeCompletionParserController.StopParsing(); - // + //Сохраняем Файлы if (ProjectFactory.Instance.ProjectLoaded) { if (!WorkbenchServiceFactory.ProjectService.CloseProject()) @@ -475,12 +475,12 @@ namespace VisualPascalABC } - // + //если стартовый поток запущен try { if (VisualEnvironmentCompiler.Starting()) { - // + //начинаем процедуру отмены старта компилятора this.Text = string.Format(FTSFormat, MainFormText, Form1StringResources.Get("FTS_CANCELLOADING")); VisualEnvironmentCompiler.AbortStaring(); } diff --git a/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/DesignerGenerator/PABCCodeProvider.cs b/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/DesignerGenerator/PABCCodeProvider.cs index 4630d46e1..c2dab3184 100644 --- a/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/DesignerGenerator/PABCCodeProvider.cs +++ b/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/DesignerGenerator/PABCCodeProvider.cs @@ -236,7 +236,7 @@ namespace ICSharpCode.FormsDesigner protected override void GenerateEntryPointMethod(System.CodeDom.CodeEntryPointMethod e, System.CodeDom.CodeTypeDeclaration c) { - // + //ничего не делаем } protected override void GenerateEvent(System.CodeDom.CodeMemberEvent e, System.CodeDom.CodeTypeDeclaration c) diff --git a/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/Services/MenuCommandService.cs b/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/Services/MenuCommandService.cs index f10a899ea..2482fbe6c 100644 --- a/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/Services/MenuCommandService.cs +++ b/VisualPascalABCNET/FormsDesignerBinding/FormsDesigner/Src/Services/MenuCommandService.cs @@ -190,9 +190,9 @@ namespace ICSharpCode.FormsDesigner.Services menu.Items.AddRange(menuItems2); Point pt = comp.PointToScreen(new Point(0, 0)); menu.Show(comp, new Point(x - pt.X, y - pt.Y)); - /* : - * menu.Items.AddRange(menuItems1); VisualPascalABC.Form1.Form1_object.cm_Designer, - * menu.Items.AddRange(menuItems2); + /*Следующее делается по следующей причине: + * почему то при menu.Items.AddRange(menuItems1); удаляются элементы из VisualPascalABC.Form1.Form1_object.cm_Designer, + * аналогично для menu.Items.AddRange(menuItems2); */ menu.Closed += delegate { diff --git a/VisualPascalABCNET/SSYY/PABCCodeProvider.cs b/VisualPascalABCNET/SSYY/PABCCodeProvider.cs index c25b9ab37..158d05490 100644 --- a/VisualPascalABCNET/SSYY/PABCCodeProvider.cs +++ b/VisualPascalABCNET/SSYY/PABCCodeProvider.cs @@ -217,7 +217,7 @@ namespace SampleDesignerHost protected override void GenerateEntryPointMethod(System.CodeDom.CodeEntryPointMethod e, System.CodeDom.CodeTypeDeclaration c) { - // + //ничего не делаем } protected override void GenerateEvent(System.CodeDom.CodeMemberEvent e, System.CodeDom.CodeTypeDeclaration c) diff --git a/VisualPlugins/AspectTree/Source/AspectTreeForm.cs b/VisualPlugins/AspectTree/Source/AspectTreeForm.cs index b7eaf9259..7d1e1f07d 100644 --- a/VisualPlugins/AspectTree/Source/AspectTreeForm.cs +++ b/VisualPlugins/AspectTree/Source/AspectTreeForm.cs @@ -14,36 +14,36 @@ namespace VisualPascalABCPlugins { public IVisualEnvironmentCompiler VisualEnvironmentCompiler; - // + // Препроцессор для обработки аспектов public PascalABCCompiler.Preprocessor2.Preprocessor2 AspectPreprocessor; - // + // Структура для хранения связи между кодом до работы препроцессора и после public PascalABCCompiler.ParserTools.SourceContextMap AspectScm; - // , + // Ошибки, возникающие в препроцессоре при сборе аспектов public List AspectErrors; - // + // Имя текущего аспекта public string AspectTxtName; - // + // Текст текущего аспекта public string AspectTxt; - // + // Главный файл public string RootFileName; - // + // Текущий проект public PascalABCCompiler.IProjectInfo RootProjectInfo; - // + // Вкладка с аспектами VisualPascalABC.CodeFileDocumentControl TabWithAspects; //public List UsedUnits; - // + // Конструктор формы public AspectTreeForm() { InitializeComponent(); - // + // Инициализация данных плагина PascalABCCompiler.StringResources.SetTextForAllObjects(this, AspectTree_VisualPascalABCPlugin.StringsPrefix); SaveButtonsEnabled = false; SaveOneButtonEnabled = false; InsertButtonsEnabled = false; - // + // Создание подобъектов плагина this.AspectScm = new PascalABCCompiler.ParserTools.SourceContextMap(); this.AspectErrors = new List(); //this.UsedUnits = new List(); @@ -51,7 +51,7 @@ namespace VisualPascalABCPlugins this.AspectPreprocessor = new PascalABCCompiler.Preprocessor2.Preprocessor2(sourceFilesProvider); } - // + // Сброс значений полей private void AspectPreprocessorReset() { this.AspectPreprocessor.AspectsNames.Clear(); @@ -61,18 +61,18 @@ namespace VisualPascalABCPlugins this.AspectErrors.Clear(); this.AspectPreprocessor.InAspect = false; this.AspectPreprocessor.CurrentAspectDirective = ""; - // + //Очищаем список ошибок VisualPascalABC.WorkbenchServiceFactory.Workbench.ErrorsListWindow.ClearErrorList(); //this.UsedUnits.Clear(); } - // + // Загрузка private void AspectTreeForm_Load(object sender, EventArgs e) { } - // + // Сброс значений перед закрытием private void AspectTreeForm_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; @@ -84,15 +84,15 @@ namespace VisualPascalABCPlugins SaveButtonsEnabled = false; SaveOneButtonEnabled = false; InsertButtonsEnabled = false; - // + //Отключаем обработчик VisualEnvironmentCompiler.StandartCompiler.OnChangeCompilerState -= Compiler_OnChangeCompilerState; treeView.Nodes.Clear(); treeView.Invalidate(); treeView.Refresh(); treeView.Update(); - // + //Очищаем список ошибок VisualPascalABC.WorkbenchServiceFactory.Workbench.ErrorsListWindow.ClearErrorList(); - // + // Закрываем вкладку с аспектами if (TabWithAspects != null) VisualPascalABC.VisualPABCSingleton.MainForm.CloseAspPlugin(TabWithAspects); // Clear Buffer @@ -101,12 +101,12 @@ namespace VisualPascalABCPlugins private void AspectTreeForm_Shown(object sender, EventArgs e) { - // + // Добавляем новый обработчик событий компилятора VisualEnvironmentCompiler.StandartCompiler.OnChangeCompilerState += new PascalABCCompiler.ChangeCompilerStateEventDelegate(Compiler_OnChangeCompilerState); treeView.Nodes.Clear(); } - // + // Изменение статуса активности кнопок bool BuildButtonsEnabled { set @@ -167,7 +167,7 @@ namespace VisualPascalABCPlugins } } - // + // Обработчик изменения состояния компилятора void Compiler_OnChangeCompilerState(PascalABCCompiler.ICompiler sender, PascalABCCompiler.CompilerState State, string FileName) { switch (State) @@ -200,7 +200,7 @@ namespace VisualPascalABCPlugins } - // + // Построение и отображение дерева аспектов public void ShowTree() { try @@ -244,7 +244,7 @@ namespace VisualPascalABCPlugins AspectTxt = AspectPreprocessor.Build(files, AspectErrors, AspectScm); - // + // Вывод ошибок if (AspectErrors.Count > 0) { PascalABCCompiler.CompilerType ct = VisualEnvironmentCompiler.DefaultCompilerType; @@ -326,14 +326,14 @@ namespace VisualPascalABCPlugins } } - // + // Сбор аспектов без компиляции private void toolStripButton1_Click(object sender, EventArgs e) { TemplateButtonEnabled = false; BuildButtonsEnabled = false; ShowTree(); - // + // Добавление параметров for (int i = 0; i < treeView.Nodes.Count; i++) if (treeView.Nodes[i].Text != "&all") treeView.Nodes[i].Text = treeView.Nodes[i].Text + " " + AspectPreprocessor.AspectsMap[treeView.Nodes[i].Text].Author + " " + AspectPreprocessor.AspectsMap[treeView.Nodes[i].Text].Version; @@ -343,7 +343,7 @@ namespace VisualPascalABCPlugins SaveButtonsEnabled = true; InsertButtonsEnabled = true; - // + // Обработка ошибок bool finished = true; if (AspectErrors.Count > 0) { @@ -357,7 +357,7 @@ namespace VisualPascalABCPlugins VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.AddMessageToErrorListWindow, AspectErrors); VisualEnvironmentCompiler.DefaultCompilerType = ct; } - // + // конец обработки if ((treeView.Nodes.Count <= 1) || (!finished)) { BuildButtonsEnabled = true; @@ -373,7 +373,7 @@ namespace VisualPascalABCPlugins } } - // + // Сбор аспектов с последующей компиляцией private void toolStripButton2_Click(object sender, EventArgs e) { BuildButtonsEnabled = false; @@ -385,7 +385,7 @@ namespace VisualPascalABCPlugins TemplateButtonEnabled = false; ShowTree(); - // + //Добавление параметров for (int i = 0; i < treeView.Nodes.Count; i++) if (treeView.Nodes[i].Text != "&all") treeView.Nodes[i].Text = treeView.Nodes[i].Text + " " + AspectPreprocessor.AspectsMap[treeView.Nodes[i].Text].Author + " " + AspectPreprocessor.AspectsMap[treeView.Nodes[i].Text].Version; @@ -409,7 +409,7 @@ namespace VisualPascalABCPlugins } } - // + // Сохранение всех аспектов private void toolStripButton1_Click_1(object sender, EventArgs e) { @@ -423,7 +423,7 @@ namespace VisualPascalABCPlugins //file_names[0] = "C:\\PABCWork.NET\\program8.pas"; file_names[0] = RootFileName; - // + // Проверка сохраняемых аспектов string check; check = txt; List beg; @@ -470,7 +470,7 @@ namespace VisualPascalABCPlugins break; } } - // + // Конец проверки if (can_save) { @@ -483,7 +483,7 @@ namespace VisualPascalABCPlugins else AspectPreprocessor.WriteAspects(txt, ""); - // + // Обновление вкладок StreamWriter sw1; VisualPascalABC.CodeFileDocumentControl tp; if (!VisualPascalABC.ProjectFactory.Instance.ProjectLoaded) @@ -508,7 +508,7 @@ namespace VisualPascalABCPlugins VisualPascalABC.VisualPABCSingleton.MainForm.SaveAspPlugin(tp); } } - // + // Открываем главный файл после обновления tp = VisualPascalABC.VisualPABCSingleton.MainForm.FindTab(Path.GetDirectoryName(RootProjectInfo.Path) + "\\" + file_names[0]); if (tp != null) { @@ -517,11 +517,11 @@ namespace VisualPascalABCPlugins } } - // + // Закрываем вкладку с аспектами if (TabWithAspects != null) VisualPascalABC.VisualPABCSingleton.MainForm.CloseAspPlugin(TabWithAspects); - // + // Деактивируем пункт сохранения SaveButtonsEnabled = false; SaveOneButtonEnabled = false; TemplateButtonEnabled = true; @@ -570,7 +570,7 @@ namespace VisualPascalABCPlugins */ } - // , + // Загрузка выбранного аспекта, либо всех аспектов private void treeView_DoubleClick(object sender, EventArgs e) { try @@ -618,13 +618,13 @@ namespace VisualPascalABCPlugins } } - // + // Вызов конструктора шаблона private void toolStripButton3_Click(object sender, EventArgs e) { VisualPascalABC.VisualPABCSingleton.MainForm.MakeTemplate(); } - // + // Сохранение текущего аспекта private void toolStripButton2_Click_1(object sender, EventArgs e) { if (VisualPascalABC.VisualPABCSingleton.MainForm.CurrentCodeFileDocument == TabWithAspects) @@ -638,7 +638,7 @@ namespace VisualPascalABCPlugins file_names[0] = RootFileName; string check; - // + // Проверка сохраняемых аспектов check = txt; List beg; bool can_save = true; @@ -683,7 +683,7 @@ namespace VisualPascalABCPlugins //exit saving } } - // + // Конец проверки if (can_save) { @@ -696,7 +696,7 @@ namespace VisualPascalABCPlugins else AspectPreprocessor.WriteAspect(txt, "", AspectTxtName); - // + // Обновление вкладок StreamWriter sw1; VisualPascalABC.CodeFileDocumentControl tp; @@ -722,7 +722,7 @@ namespace VisualPascalABCPlugins VisualPascalABC.VisualPABCSingleton.MainForm.SaveAspPlugin(tp); } } - // + // Открываем главный файл после обновления tp = VisualPascalABC.VisualPABCSingleton.MainForm.FindTab(Path.GetDirectoryName(RootProjectInfo.Path) + "\\" + file_names[0]); if (tp != null) { @@ -731,11 +731,11 @@ namespace VisualPascalABCPlugins } } - // + // Закрываем вкладку с аспектами if (TabWithAspects != null) VisualPascalABC.VisualPABCSingleton.MainForm.CloseAspPlugin(TabWithAspects); - // + // Деактивируем пункт сохранения SaveButtonsEnabled = false; SaveOneButtonEnabled = false; TemplateButtonEnabled = true; diff --git a/VisualPlugins/LanguageConverter/Source/LanguageConverterPlugin.cs b/VisualPlugins/LanguageConverter/Source/LanguageConverterPlugin.cs index 189e0824a..50bbdb48d 100644 --- a/VisualPlugins/LanguageConverter/Source/LanguageConverterPlugin.cs +++ b/VisualPlugins/LanguageConverter/Source/LanguageConverterPlugin.cs @@ -91,7 +91,7 @@ namespace VisualPascalABCPlugins } catch (NotSupportedException e) { - System.Windows.Forms.MessageBox.Show(string.Format(", {0} . .", e.Message)); + System.Windows.Forms.MessageBox.Show(string.Format("Извините, генерация кода для узла {0} не поддерживается. Текст не был сгенерирован.", e.Message)); } catch (Exception e) { @@ -115,11 +115,11 @@ namespace VisualPascalABCPlugins } } - // + // стырено private List LoadLanguages() { List Langs = new List(); - // + // директория этого плагина string dir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName); DirectoryInfo di = new DirectoryInfo(dir); FileInfo[] dllfiles = di.GetFiles("*LanguageConverter.dll"); diff --git a/VisualPlugins/LanguageConverter/Source/ListSyntRules.cs b/VisualPlugins/LanguageConverter/Source/ListSyntRules.cs index 77ae49ffa..8b64d327f 100644 --- a/VisualPlugins/LanguageConverter/Source/ListSyntRules.cs +++ b/VisualPlugins/LanguageConverter/Source/ListSyntRules.cs @@ -7,7 +7,7 @@ namespace Converter { public class ListSyntRules { - // NET + // хранит соответствие между узлами семантического дерева РАВСNET и соответствующими синтаксическими правилами другого языка private Dictionary Rules; private string fileName; diff --git a/VisualPlugins/LanguageConverter/Source/Visitor.cs b/VisualPlugins/LanguageConverter/Source/Visitor.cs index 0579e8320..12ee2f64f 100644 --- a/VisualPlugins/LanguageConverter/Source/Visitor.cs +++ b/VisualPlugins/LanguageConverter/Source/Visitor.cs @@ -20,7 +20,7 @@ namespace VisualPascalABCPlugins // e,hfnm yfabu public List nmspaceFiles = new List(); - // + // убрать отсюда public void SaveTextInFile(string fileName, string text, bool append) { StreamWriter sw = new StreamWriter(fileName, append, System.Text.Encoding.GetEncoding(1251)); @@ -38,7 +38,7 @@ namespace VisualPascalABCPlugins ISemanticNodeConverter = _semanticNodeConverter; } - // node - ISemanticNode + // для обычного node - потомка ISemanticNode public void prepare_node(ISemanticNode subnode, string node_name) { @@ -677,9 +677,9 @@ namespace VisualPascalABCPlugins { StringBuilder bodyBlock = new StringBuilder(""); StringBuilder parameters = new StringBuilder(""); - // + // увеличиваем отступ тела блока перед входом в блок - // + // тело функции if (value.var_definition_nodes.Length != 0) ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyIncrement(); foreach (ILocalVariableNode nodeVariable in value.var_definition_nodes) @@ -691,7 +691,7 @@ namespace VisualPascalABCPlugins bodyBlock.Append(System.Environment.NewLine); //bodyBlock.Append(ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBody); } - // - + // если блок не пуст - уменьшаем отступ if (bodyBlock.ToString() != "") { //ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(bodyBlock.ToString()); @@ -699,7 +699,7 @@ namespace VisualPascalABCPlugins } value.function_code.visit(this); - // + // на стеке лежит тело функции // string funcbody = ISemanticNodeConverter.SourceTextBuilder.GetNodeFromStack(); bodyBlock.Append(funcbody); @@ -718,9 +718,9 @@ namespace VisualPascalABCPlugins if (value.parameters[value.parameters.Length-1] != nodeParameter) parameters.Append(", "); } - // + // кладем на стек тело функции ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(bodyBlock.ToString()); - // - + // кладем на стек параметры ф-ции if (parameters.Length == 0) parameters.Append("%empty%"); ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(parameters.ToString()); @@ -801,7 +801,7 @@ namespace VisualPascalABCPlugins { StringBuilder bodyBlock = new StringBuilder(""); NumNestedStatement++; - // + // увеличиваем отступ тела блока перед входом в блок ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyIncrement(); foreach (ILocalBlockVariableNode nodeVar in value.LocalVariables) { @@ -833,7 +833,7 @@ namespace VisualPascalABCPlugins } ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(bodyBlock.ToString()); - // + // уменьшаем отступ тела блока перед выходом из блока ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyDecrement(); if (NumNestedStatement > 1) ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeStatementsNested("statements_nested", value)); @@ -858,11 +858,11 @@ namespace VisualPascalABCPlugins { //value.Location.document.file_name StringBuilder bodyBlock = new StringBuilder(""); - // + // увеличиваем отступ тела блока перед входом в блок ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyIncrement(); //bodyBlock.Append(SemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBody); - // namespace , main body + // если находимся в главном namespace программы, добваляем main в body if (mainNamespace == value) { bodyBlock.Append(System.Environment.NewLine); @@ -915,7 +915,7 @@ namespace VisualPascalABCPlugins } ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(bodyBlock.ToString()); - // + // уменьшаем отступ тела блока перед выходом из блока ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyDecrement(); ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeNamespace("namespace", value)); @@ -936,14 +936,14 @@ namespace VisualPascalABCPlugins StringBuilder bodyBlock = new StringBuilder(""); string currNamespace = ""; - // ame + // обнуляем отступ тела блокаame ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyDecrement(); if (value.main_function != null) value.main_function.visit(this); mainFunction = ISemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBody + ISemanticNodeConverter.SourceTextBuilder.GetNodeFromStack(); - // . + // перед входом в блок ув. отступ //SemanticNodeConverter.SourceTextBuilder.TextFormatter.Indents.BlockBodyIncrement(); mainNamespace = value.main_function.comprehensive_namespace; string outdir = System.IO.Path.GetDirectoryName(mainNamespace.Location.document.file_name); @@ -1091,7 +1091,7 @@ namespace VisualPascalABCPlugins ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeVariable("var", value)); else { - // + // кладем на стек сгенерированное в новый текст значение переменной value.inital_value.visit(this); ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeVariable("var_init", value)); } @@ -1434,7 +1434,7 @@ namespace VisualPascalABCPlugins ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeVariable("var", value)); else { - // + // кладем на стек сгенерированное в новый текст значение переменной value.inital_value.visit(this); ISemanticNodeConverter.SourceTextBuilder.AddNodeInToStack(ISemanticNodeConverter.ConvertPABCNETNodeVariable("var_init", value)); } diff --git a/VisualPlugins/SCharpLanguageConverter/SemanticNodeConverter.cs b/VisualPlugins/SCharpLanguageConverter/SemanticNodeConverter.cs index f9f8a9aba..4c5f8604d 100644 --- a/VisualPlugins/SCharpLanguageConverter/SemanticNodeConverter.cs +++ b/VisualPlugins/SCharpLanguageConverter/SemanticNodeConverter.cs @@ -37,8 +37,8 @@ namespace Converter public virtual string ConvertPABCNETNodeProgram(string _nodeName, object _node) { - // IProgramNode - , , - // . + // IProgramNode - основной узел, содержит весь текст программы, + // обрабатывается визитором последним. return SourceTextBuilder.GetNodeFromStack(); } @@ -64,7 +64,7 @@ namespace Converter { if ((_node as ICommonTypeNode).is_value_type) return SourceTextBuilder.ConvertNode("struct", _node); - else // , , . + else // сделать для шаблонов, параметризованных щаблонов, классов. return SourceTextBuilder.ConvertNode("class", _node); } @@ -96,32 +96,32 @@ namespace Converter public virtual string ConvertPABCNETNodeVariableReference(string _nodeName, object _node) { - // + // возвращаем имя переменной return SourceTextBuilder.ConvertNode(_nodeName, _node); } public virtual string ConvertPABCNETNodeParameterReference(string _nodeName, object _node) { - // + // возвращаем имя переменной return (_node as ICommonParameterReferenceNode).parameter.name; } public virtual string ConvertPABCNETNodeBoolConstant(string _nodeName, object _node) { - // + // возвращаем имя переменной return (_node as IBoolConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeFunctionCall(string _nodeName, object _node) { - // + // возвращаем имя переменной return SourceTextBuilder.ConvertNode(_nodeName, _node); } public virtual string ConvertPABCNETNodeParameter(string _nodeName, object _node) { string type = ""; - // + // возвращаем имя и тип переменной if ((_node as ICommonParameterNode).type is ICompiledTypeNode) type = ((_node as ICommonParameterNode).type as ICompiledTypeNode).compiled_type.ToString(); if ((_node as ICommonParameterNode).type is ICommonTypeNode) @@ -161,68 +161,68 @@ namespace Converter public virtual string ConvertPABCNETNodeIntConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IIntConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeByteConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IByteConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeSByteConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as ISByteConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeShortConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IShortConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeUShortConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IUShortConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeUIntConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IUIntConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeULongConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IULongConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeLongConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as ILongConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeDoubleConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IDoubleConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeFloatConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return (_node as IFloatConstantNode).constant_value.ToString(); } public virtual string ConvertPABCNETNodeCharConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return "'" + (_node as ICharConstantNode).constant_value.ToString() + "'"; } public virtual string ConvertPABCNETNodeStringConstant(string _nodeName, object _node) { - // integer + // возвращаем число integer return "\"" + (_node as IStringConstantNode).constant_value.ToString() + "\""; } diff --git a/VisualPlugins/SemanticTreeVisualisator/Source/SemanicTreeVisualisatorForm.cs b/VisualPlugins/SemanticTreeVisualisator/Source/SemanicTreeVisualisatorForm.cs index 5527d59c1..151632bfa 100644 --- a/VisualPlugins/SemanticTreeVisualisator/Source/SemanicTreeVisualisatorForm.cs +++ b/VisualPlugins/SemanticTreeVisualisator/Source/SemanicTreeVisualisatorForm.cs @@ -69,24 +69,24 @@ namespace VisualPascalABCPlugins } public void ShowTree() { - // . . - // . + //Желательно строить в отдельном потоке а потом разом выводить. Незабуть про синхронизацию. + //Пока можно посто в лоб. try { PascalABCCompiler.SemanticTree.IProgramNode Root = VisualEnvironmentCompiler.StandartCompiler.SemanticTree; treeView.Nodes.Clear(); - // Visitor treeView.Nodes + // связываем Visitor и treeView.Nodes Visitor = new SematicTreeVisitor(treeView.Nodes); Visitor.CreateMyDictionaries(); Visitor.setTreeView(treeView); - // + // собственно проходим по дереву от корня Root.visit(Visitor); //Visitor.visit(Root, treeView.Nodes); //Visitor.visit(Root); - // + // устанавливаем обратные связи Visitor.makeUpRows(treeView); - // Nodes[0] + // по умолчанию выбранным является Nodes[0] treeView.SelectedNode = treeView.Nodes[0]; //treeView.SelectedNode.BackColor = Color.Chocolate; //treeView.Invalidate(); diff --git a/VisualPlugins/SemanticTreeVisualisator/Source/Visitor.cs b/VisualPlugins/SemanticTreeVisualisator/Source/Visitor.cs index 0f00113dc..846b6265e 100644 --- a/VisualPlugins/SemanticTreeVisualisator/Source/Visitor.cs +++ b/VisualPlugins/SemanticTreeVisualisator/Source/Visitor.cs @@ -172,24 +172,24 @@ namespace VisualPascalABCPlugins else { myTreeNode sel_node = treeView.SelectedNode as myTreeNode; - // + // список неймспейсов treeView.SelectedNode = treeView.Nodes[2]; - // + // ищем нужный неймспейс int i = 0; while (i < treeView.SelectedNode.Nodes.Count && treeView.SelectedNode.Nodes[i].Tag as ICommonNamespaceNode != (sel_node.Tag as ICommonNamespaceVariableNode).comprehensive_namespace) { i++; } treeView.SelectedNode = treeView.SelectedNode.Nodes[i]; - // + // переходим к списку переменных неймспейса treeView.SelectedNode = treeView.SelectedNode.Nodes[5]; - // + // ищем нужную переменную i = 0; while (i < treeView.SelectedNode.Nodes.Count && (treeView.SelectedNode.Nodes[i].Tag as ICommonNamespaceVariableNode) != sel_node.Tag as ICommonNamespaceVariableNode) { i++; } - // + // и переходим к ней treeView.SelectedNode = treeView.SelectedNode.Nodes[i]; } } @@ -231,7 +231,7 @@ namespace VisualPascalABCPlugins if (treeView.SelectedNode.Tag.GetType().ToString() == "PascalABCCompiler.TreeRealization.common_type_node") { - // + // тип у вара в вариэвблс неймспейса if (treeView.SelectedNode.Parent.Tag is ICommonNamespaceVariableNode) { if (treeView.SelectedNode.Parent.Parent.Tag is ICommonNamespaceVariableNode[]) @@ -256,7 +256,7 @@ namespace VisualPascalABCPlugins } } else - // + // тип из списка типов неймспейса if (treeView.SelectedNode.Parent.Tag is ICommonTypeNode[]) { if (treeView.SelectedNode.Parent.Parent.Tag is ICommonNamespaceNode) @@ -324,18 +324,18 @@ namespace VisualPascalABCPlugins } else - // implementingionterfaces + // для implementingionterfaces if (treeView.SelectedNode.Tag is System.Collections.Generic.List) prepare_collection_up_links_list(treeView.SelectedNode.Tag as List, "my_collection", "my_coll_element", (treeView.SelectedNode.Tag as System.Collections.Generic.List).Count); } else - // build' + // не build'нутый лист if (!(treeView.SelectedNode as myTreeNode).is_built && (treeView.SelectedNode as myTreeNode).is_leaf) { if (treeView.SelectedNode.Tag.GetType().ToString() == "PascalABCCompiler.TreeRealization.compiled_type_node") { - // + // если тип ещё не содержится в списке компайлед типов if (!compiled_types.Contains(treeView.SelectedNode.Tag as ICompiledTypeNode)) { ICompiledTypeNode ct = treeView.SelectedNode.Tag as ICompiledTypeNode; @@ -345,7 +345,7 @@ namespace VisualPascalABCPlugins compiled_types_dictionary.Add(ct, treeView.SelectedNode as myTreeNode); } else - // + // тип уже содержится в этом списке { treeView.SelectedNode = compiled_types_dictionary[treeView.SelectedNode.Tag as ICompiledTypeNode]; } @@ -407,18 +407,18 @@ namespace VisualPascalABCPlugins - // - + // конструктор без параметров - на всякий случай public SematicTreeVisitor() { } - // nodes + // конструктор с параметром nodes public SematicTreeVisitor(System.Windows.Forms.TreeNodeCollection nodes) { this.nodes = nodes; } - // . + // доп. метод public void setNodes(System.Windows.Forms.TreeNodeCollection nodes) { this.nodes = nodes; @@ -429,7 +429,7 @@ namespace VisualPascalABCPlugins treeView = _treeView; } - // + // установить обратные связи public void makeUpRows(TreeView treeView) { foreach (TreeNode tn in table_up_rows.Keys) @@ -456,7 +456,7 @@ namespace VisualPascalABCPlugins //-------------------------------------------------------------------------------------------- - // node - ISemanticNode + // для обычного node - потомка ISemanticNode public void prepare_node(ISemanticNode subnode, string node_name) { myTreeNode t; @@ -495,7 +495,7 @@ namespace VisualPascalABCPlugins } - // node ICollection + // для одного node из ICollection public void prepare_node_in_collection(ISemanticNode subnode, string node_name, myTreeNode tn_parent) { myTreeNode t; @@ -531,7 +531,7 @@ namespace VisualPascalABCPlugins } } - // node ICollection + // для одного node из ICollection public void prepare_node_in_collection(ISemanticNode subnode, string node_name, myTreeNode tn_parent, bool is_leaf) { myTreeNode t; @@ -569,7 +569,7 @@ namespace VisualPascalABCPlugins } - // ICollection + // для ICollection public void prepare_collection(ICollection icol, string collection_name, string item_name, int num) { myTreeNode t; @@ -692,7 +692,7 @@ namespace VisualPascalABCPlugins - // ICollection + // для ICollection public void prepare_collection_list(ICollection icol, string collection_name, string item_name, int num) { myTreeNode t; @@ -755,8 +755,8 @@ namespace VisualPascalABCPlugins - // ICollection - // - + // для ICollection + // если коллекция - список public void prepare_collection_list(ICollection icol, string collection_name, string item_name, int num, bool is_leaf) { myTreeNode t; @@ -870,7 +870,7 @@ namespace VisualPascalABCPlugins - // ICollection + // для ICollection public void prepare_collection_up_links(ICollection icol, string collection_name, string item_name, int num) { myTreeNode t; @@ -917,7 +917,7 @@ namespace VisualPascalABCPlugins - // + // только для имплементинг интерфейсес public void prepare_collection_up_links_list(ICollection icol, string collection_name, string item_name, int num) { @@ -1024,7 +1024,7 @@ namespace VisualPascalABCPlugins - // + // для строкового поля public void prepare_string_node(string str, string text) { myTreeNode t; @@ -1047,7 +1047,7 @@ namespace VisualPascalABCPlugins } - // + // для строкового поля public void prepare_string_node_with_tag(string str, string text, ISemanticNode sem) { myTreeNode t; @@ -1258,7 +1258,7 @@ namespace VisualPascalABCPlugins string s = value.GetType().Name + "."; prepare_string_node(value.name, s + "name"); prepare_node(value.base_type, s + "base_type"); - prepare_string_node(value.compiled_type.ToString(), s + "compiled_type"); // ??????? ? + prepare_string_node(value.compiled_type.ToString(), s + "compiled_type"); // ??????? Как это надо отображать? prepare_node(value.element_type, s + "element_type"); //prepare_node(value.generic_container, s + "generic_container"); prepare_base_node_collection_up_links(value.ImplementingInterfaces, s + "ImplementingInterfaces", "ImplementingInterfaces", value.ImplementingInterfaces.Count); @@ -1284,7 +1284,7 @@ namespace VisualPascalABCPlugins public void visit(IFunctionCallNode value) { string s = value.GetType().Name + "."; - prepare_node(value.function, s + "function");// ? + prepare_node(value.function, s + "function");// или ссылка? prepare_string_node(value.last_result_function_call.ToString(), s + "last-result_function_call"); prepare_collection(value.real_parameters, s + "real_parametrs", "real_parametrs", value.real_parameters.Length); prepare_node(value.type, s + "type"); @@ -1293,8 +1293,8 @@ namespace VisualPascalABCPlugins public void visit(IBasicFunctionCallNode value) { string s = value.GetType().Name + "."; - //prepare_node(value.basic_function, "IBasicFunctionCallNode.basic_function"); // ? - //prepare_node(value.function, s + "function"); // ? + //prepare_node(value.basic_function, "IBasicFunctionCallNode.basic_function"); // или ссылка? + //prepare_node(value.function, s + "function"); // или ссылка? prepare_string_node(value.last_result_function_call.ToString(), s + "last_result_function_call"); prepare_base_node_collection(value.real_parameters, s + "real_parametrs", "real_parametrs", value.real_parameters.Length); diff --git a/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorForm.Designer.cs b/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorForm.Designer.cs index 0a8b57533..da06dca77 100644 --- a/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorForm.Designer.cs +++ b/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorForm.Designer.cs @@ -189,7 +189,7 @@ namespace VisualPascalABCPlugins this.tbCPSaveTree.ImageTransparentColor = System.Drawing.Color.Magenta; this.tbCPSaveTree.Name = "tbCPSaveTree"; this.tbCPSaveTree.Size = new System.Drawing.Size(23, 22); - this.tbCPSaveTree.Text = " "; + this.tbCPSaveTree.Text = "Сохранить дерево на диск"; this.tbCPSaveTree.Click += new System.EventHandler(this.tbCPSaveTree_Click); // // toolStripSeparator4 diff --git a/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorPlugin.cs b/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorPlugin.cs index 96ce54ca1..3bafdd031 100644 --- a/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorPlugin.cs +++ b/VisualPlugins/SyntaxTreeVisualisator/SyntaxTreeVisualisatorPlugin.cs @@ -27,7 +27,7 @@ namespace VisualPascalABCPlugins { get { - return "(c) .. 2006,2008"; + return "(c) Ткачук А.В. 2006,2008"; } } diff --git a/VisualPlugins/TestPlugin/TestPlugin.cs b/VisualPlugins/TestPlugin/TestPlugin.cs index 5f411b03f..194017ff6 100644 --- a/VisualPlugins/TestPlugin/TestPlugin.cs +++ b/VisualPlugins/TestPlugin/TestPlugin.cs @@ -4,7 +4,7 @@ using System.Text; namespace VisualPascalABCPlugins { - // *_VisualPascalABCPlugin + //имя класса *_VisualPascalABCPlugin public class TestPlugin_VisualPascalABCPlugin : IVisualPascalABCPlugin { public static string StringsPrefix = "VPP_TESTPLUGIN_"; @@ -29,7 +29,7 @@ namespace VisualPascalABCPlugins { get { - return "(c) .. 2009"; + return "(c) Ткачук А.В. 2009"; } } diff --git a/_Presentations/2015 New Features/Programs/01_old_new-1.pas b/_Presentations/2015 New Features/Programs/01_old_new-1.pas index 5f93ed849..8a357c21e 100644 --- a/_Presentations/2015 New Features/Programs/01_old_new-1.pas +++ b/_Presentations/2015 New Features/Programs/01_old_new-1.pas @@ -6,6 +6,6 @@ begin end; begin - var n := ReadInteger(' n:'); + var n := ReadInteger('Введите n:'); writeln('n!=',fact(n)); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/01_old_new.pas b/_Presentations/2015 New Features/Programs/01_old_new.pas index 5b0164ae2..5b064d3c2 100644 --- a/_Presentations/2015 New Features/Programs/01_old_new.pas +++ b/_Presentations/2015 New Features/Programs/01_old_new.pas @@ -7,6 +7,6 @@ begin end; begin - var n := ReadInteger(' n:'); + var n := ReadInteger('Введите n:'); writeln('n!=',fact(n)); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/03_case_string-1.pas b/_Presentations/2015 New Features/Programs/03_case_string-1.pas index ca9499467..ee7e8e167 100644 --- a/_Presentations/2015 New Features/Programs/03_case_string-1.pas +++ b/_Presentations/2015 New Features/Programs/03_case_string-1.pas @@ -2,15 +2,15 @@ var Country: string; begin read(Country); - write(': '); + write('Столица: '); - if Country = '' then - writeln('') - else if Country = '' then - writeln('') - else if Country = '' then - writeln('') - else if Country = '' then - writeln('') - else writeln(' '); + if Country = 'Россия' then + writeln('Москва') + else if Country = 'Франция' then + writeln('Париж') + else if Country = 'Италия' then + writeln('Рим') + else if Country = 'Германия' then + writeln('Берлин') + else writeln('Нет в базе данных'); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/03_case_string.pas b/_Presentations/2015 New Features/Programs/03_case_string.pas index 61d34a7b1..4fd2add81 100644 --- a/_Presentations/2015 New Features/Programs/03_case_string.pas +++ b/_Presentations/2015 New Features/Programs/03_case_string.pas @@ -1,11 +1,11 @@ begin - var Country := ReadString(' :'); - write(': '); + var Country := ReadString('Введите страну:'); + write('Столица: '); case Country of - '': writeln(''); - '': writeln(''); - '': writeln(''); - '': writeln(''); - else writeln(' '); + 'Россия': writeln('Москва'); + 'Франция': writeln('Париж'); + 'Италия': writeln('Рим'); + 'Германия': writeln('Берлин'); + else writeln('Страны нет в базе данных'); end; end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/05_WriteArr-1.pas b/_Presentations/2015 New Features/Programs/05_WriteArr-1.pas index daff5ce3c..51f6f6228 100644 --- a/_Presentations/2015 New Features/Programs/05_WriteArr-1.pas +++ b/_Presentations/2015 New Features/Programs/05_WriteArr-1.pas @@ -8,7 +8,7 @@ end; var s: set of integer := [1,3,7]; begin - p.name := ''; p.age := 20; + p.name := 'Иванов'; p.age := 20; writeln(a); writeln(p); writeln(s); diff --git a/_Presentations/2015 New Features/Programs/05_WriteArr-2.pas b/_Presentations/2015 New Features/Programs/05_WriteArr-2.pas index f2b9bf7fd..4d6c580a6 100644 --- a/_Presentations/2015 New Features/Programs/05_WriteArr-2.pas +++ b/_Presentations/2015 New Features/Programs/05_WriteArr-2.pas @@ -11,7 +11,7 @@ var i: integer; begin a[1] := 2; a[2] := 3; a[3] := 5; - p.name := ''; p.age := 20; + p.name := 'Иванов'; p.age := 20; s := [1,3,7]; for i:=1 to 3 do diff --git a/_Presentations/2015 New Features/Programs/05_WriteArr.pas b/_Presentations/2015 New Features/Programs/05_WriteArr.pas index 6945d3a99..c38742625 100644 --- a/_Presentations/2015 New Features/Programs/05_WriteArr.pas +++ b/_Presentations/2015 New Features/Programs/05_WriteArr.pas @@ -7,7 +7,7 @@ end; begin a[1] := 2; a[2] := 3; a[3] := 5; - p.name := ''; p.age := 20; + p.name := 'Иванов'; p.age := 20; writeln(a); writeln(p); diff --git a/_Presentations/2015 New Features/Programs/08_Rec-1.pas b/_Presentations/2015 New Features/Programs/08_Rec-1.pas index fcd91d10e..3f7ecb03a 100644 --- a/_Presentations/2015 New Features/Programs/08_Rec-1.pas +++ b/_Presentations/2015 New Features/Programs/08_Rec-1.pas @@ -6,7 +6,7 @@ end; var p: Pupil; begin - p.name := ''; + p.name := 'Петрова'; p.age := 18; writeln(p.name,' ',p.age); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/08_Rec-2.pas b/_Presentations/2015 New Features/Programs/08_Rec-2.pas index 139bc4b74..b0b50fbc2 100644 --- a/_Presentations/2015 New Features/Programs/08_Rec-2.pas +++ b/_Presentations/2015 New Features/Programs/08_Rec-2.pas @@ -1,4 +1,4 @@ begin - var p := Rec('',18); + var p := Rec('Петрова',18); Println(p, p.Item1, p.Item2); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/08_Rec.pas b/_Presentations/2015 New Features/Programs/08_Rec.pas index bffe854e7..f130fd280 100644 --- a/_Presentations/2015 New Features/Programs/08_Rec.pas +++ b/_Presentations/2015 New Features/Programs/08_Rec.pas @@ -11,8 +11,8 @@ end; var p: Pupil; begin - p.Init('',18); + p.Init('Петрова',18); writeln(p); - var r := Rec('',13); + var r := Rec('Иванов',13); Println(r, r.Item1, r.Item2); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/15_Dict.pas b/_Presentations/2015 New Features/Programs/15_Dict.pas index 339ed7244..b3652fdf7 100644 --- a/_Presentations/2015 New Features/Programs/15_Dict.pas +++ b/_Presentations/2015 New Features/Programs/15_Dict.pas @@ -1,5 +1,5 @@ begin - var dct := Dict(KV('','color')); + var dct := Dict(KV('цвет','color')); foreach var s in ReadLines('translations.txt') do begin var ss := s.ToWords; @@ -7,8 +7,8 @@ begin end; writeln(dct); - var word := ReadString(' :'); + var word := ReadString('Введите слово:'); if dct.ContainsKey(word) then - Println(':',dct[word]) - else Println(' !') + Println('Перевод:',dct[word]) + else Println('Нет такого слова!') end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/15_Dict_old.pas b/_Presentations/2015 New Features/Programs/15_Dict_old.pas index 7efeb9557..273ff2294 100644 --- a/_Presentations/2015 New Features/Programs/15_Dict_old.pas +++ b/_Presentations/2015 New Features/Programs/15_Dict_old.pas @@ -1,8 +1,8 @@ begin - var d := Dict(''=>2,''=>3,''=>1); + var d := Dict('бегемот'=>2,'попугай'=>3,'крокодил'=>1); Println(d); - var Capital := Dict(''=>'',''=>'', - ''=>'',''=>''); - Println(Capital[''],Capital['']); + var Capital := Dict('Россия'=>'Москва','Франция'=>'Париж', + 'Италия'=>'Рим','Германия'=>'Берлин'); + Println(Capital['Италия'],Capital['Франция']); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/19_Gra1.pas b/_Presentations/2015 New Features/Programs/19_Gra1.pas index ab9e43ea5..3595bacc6 100644 --- a/_Presentations/2015 New Features/Programs/19_Gra1.pas +++ b/_Presentations/2015 New Features/Programs/19_Gra1.pas @@ -1,7 +1,7 @@ uses GraphABC; begin - Window.Title := ' '; + Window.Title := 'Прозрачность и рисунок'; Brush.Color := Color.BlueViolet; Rectangle(50,50,200,150); Brush.Color := ARGB(128,50,200,0); diff --git a/_Presentations/2015 New Features/Programs/21_Set1.pas b/_Presentations/2015 New Features/Programs/21_Set1.pas index 3174d4cff..73360cd6d 100644 --- a/_Presentations/2015 New Features/Programs/21_Set1.pas +++ b/_Presentations/2015 New Features/Programs/21_Set1.pas @@ -1,9 +1,9 @@ var ss1,ss2: set of string; begin - ss1 := ['','','']; - ss2 := ['','','']; - writeln(': ',ss1+ss2); - writeln(': ',ss1*ss2); - writeln(': ',ss1-ss2); + ss1 := ['планшет','смартфон','ноутбук']; + ss2 := ['смартфон','компьютер','планшет']; + writeln('Объединение: ',ss1+ss2); + writeln('Пересечение: ',ss1*ss2); + writeln('Разность: ',ss1-ss2); end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/22_Str0.pas b/_Presentations/2015 New Features/Programs/22_Str0.pas index 73e88371f..d67eaedad 100644 --- a/_Presentations/2015 New Features/Programs/22_Str0.pas +++ b/_Presentations/2015 New Features/Programs/22_Str0.pas @@ -6,6 +6,6 @@ begin foreach var c in s do Print(c); Println; - s := ''+12345; // - writeln('a'*10); // 10 + s := ''+12345; // число преобразуется в строку + writeln('a'*10); // строка повторяется 10 раз end. \ No newline at end of file diff --git a/_Presentations/2015 New Features/Programs/22_Str2.pas b/_Presentations/2015 New Features/Programs/22_Str2.pas index 4435f8208..ca557a976 100644 --- a/_Presentations/2015 New Features/Programs/22_Str2.pas +++ b/_Presentations/2015 New Features/Programs/22_Str2.pas @@ -5,8 +5,8 @@ begin writeln(s.Length); writeln(s.ToLower); writeln(s.Inverse); - s := ' '; - writeln(s.Replace('','')); + s := 'красный зеленый синий красный'; + writeln(s.Replace('красный','желтый')); s := '12345'; var i: integer := s.ToInteger; diff --git a/_Presentations/2015 New Features/Programs/22_Str3.pas b/_Presentations/2015 New Features/Programs/22_Str3.pas index 3423e1d1e..9b7a1193f 100644 --- a/_Presentations/2015 New Features/Programs/22_Str3.pas +++ b/_Presentations/2015 New Features/Programs/22_Str3.pas @@ -1,5 +1,5 @@ begin - var s := ' '; + var s := 'красный оранжевый желтый зеленый голубой синий фиолетовый'; var ss: array of string := s.ToWords; ss.Println; Reverse(ss); diff --git a/bin/Lib/ABCObjects.pas b/bin/Lib/ABCObjects.pas index b5eec0a34..36131b2a3 100644 --- a/bin/Lib/ABCObjects.pas +++ b/bin/Lib/ABCObjects.pas @@ -1,10 +1,10 @@ // Copyright (c) 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 ABCObjects; //{$apptype windows} @@ -22,7 +22,7 @@ type ContainerABC = class; GRectangle = System.Drawing.Rectangle; - /// + /// Базовый класс для всех графических объектов ObjectABC = class private fx,fy: integer; @@ -36,7 +36,7 @@ type _dx,_dy: integer; procedure SetCoords(x,y: integer); protected - // InternalDraw: ( ). Draw(fx,fy) + // InternalDraw: низкоуровневая процедура (не вызывается пользователем). Просто вызывает Draw(fx,fy) procedure InternalDraw; procedure SetVis(v: boolean); procedure SetColor(cl: GColor); @@ -68,102 +68,102 @@ type procedure DrawText(x,y: integer; g: Graphics); procedure Init(x,y,w,h: integer; cl: GColor); procedure InitBy(g: ObjectABC); - // Draw: . + // Draw: переопределяется в подклассах. Рисует объект на текущей канве procedure Draw(x,y: integer; g: Graphics); virtual; begin end; procedure Draw(x,y: integer); public - /// (w,h) cl (x,y) + /// Создает графический объект размера (w,h) цвета cl с координатами левого верхнего угла (x,y) constructor Create(x,y,w,h: integer; cl: GColor := clWhite); - /// - g + /// Создает графический объект - копию объекта g constructor Create(g: ObjectABC); - /// + /// Уничтожает графический объект destructor Destroy; - // Redraw: ( ). - // , drawRect(Bounds). - // , (., ) - // ( ) + // Redraw: низкоуровневая процедура (не вызывается пользователем). + // Обновляет изображение объекта на экране, вызывая drawRect(Bounds). + // Вызывается в ситуациях, когда границы объекта не изменяются (напр., смена цвета) + // или увеличиваются (добавление нового объекта к фигуре) procedure Redraw; - // RedrawNow - , LockDrawing + // RedrawNow - вызывает перерисовку объекта, несмотря на LockDrawing procedure RedrawNow; - /// (x,y) + /// Перемещает левый верхний угол графического объекта к точке (x,y) procedure MoveTo(x,y: integer); - /// (a,b) + /// Перемещает графический объект на вектор (a,b) procedure MoveOn(a,b: integer); - /// , dx,dy + /// Перемещает графический объект на вектор, задаваемый свойствами dx,dy procedure Move; virtual; - /// f (f>1 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 00,' <0'); +// Assert(f>0,'масштабный коэффициент<0'); Width := round(Width*f); Height := round(Height*f); end; @@ -1272,7 +1272,7 @@ end; //------ BoundedObjectABC ------- constructor BoundedObjectABC.Create(x,y,w,h: integer; cl: GColor); begin -// ? +// А нужно ли это? Init(x,y,w,h,cl); end; @@ -1690,7 +1690,7 @@ begin fh := TextHeight(Text); if not __LockDrawingObjects then DrawAfterChangeBounds(r,Bounds) -// Redraw; // ! +// Redraw; // это неверно! end; procedure TextABC.SetTB(b: boolean); @@ -1812,7 +1812,7 @@ end; procedure RegularPolygonABC.SetWidth(Width: integer); begin if Width mod 2 = 0 then - Width := Width - 1; // + Width := Width - 1; // Ширина и высота должны быть нечетными ObjectABCSetSize(Width,Width); end; @@ -2212,7 +2212,7 @@ begin p := Picture.Create(fname); p.Transparent := True; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2223,7 +2223,7 @@ procedure MultiPictureABC.Init(x,y,w: integer; p: Picture); begin Self.p := p; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2287,7 +2287,7 @@ procedure MultiPictureABC.ChangePicture(w: integer; fname: string); begin p.Load(fname); if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; Width := w; @@ -2303,7 +2303,7 @@ begin Inc(cnt); p1 := Picture.Create(fname); if (p1.Width<>Width) or (p1.Height<>Height) then - raise Exception.Create(' '+fname+' MultiPictureABC'); + raise Exception.Create('Размеры картинки в файле '+fname+' отличаются от размеров MultiPictureABC'); p1.Transparent := Transparent; p.Width := p.Width + Width; r1 := new System.Drawing.Rectangle(0,0,Width,Height); @@ -2314,7 +2314,7 @@ end; procedure MultiPictureABC.SetCurrentPicture(i: integer); begin if (i<1) or (i>Count) then - raise Exception.Create(' '+IntToStr(i)+' '+IntToStr(i)+'..'+IntToStr(Count)); + raise Exception.Create('Номер картинки '+IntToStr(i)+' находится вне диапазона '+IntToStr(i)+'..'+IntToStr(Count)); cur := i; Redraw; end; @@ -2658,7 +2658,7 @@ begin if ob=nil then Exit; ob.dx := x; - ob.dy := y; // dx dy + ob.dy := y; // использую dx и dy для задания клеточных координат на доске ob.Center := new Point(Left+CellSizeX*(x-1)+CellSizeX div 2,Top+CellSizeY*(y-1)+CellSizeY div 2); end; diff --git a/bin/Lib/ABCSprites.pas b/bin/Lib/ABCSprites.pas index 601e52ccd..66a3b4e0a 100644 --- a/bin/Lib/ABCSprites.pas +++ b/bin/Lib/ABCSprites.pas @@ -1,8 +1,8 @@ // Copyright (c) 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) -/// ABCSprites - . -/// SpriteABC MultiPictureABC. +///Модуль ABCSprites реализует спрайты - анимационные объекты с автоматически меняющимися кадрами. +///Спрайт представляется классом SpriteABC и является разновидностью мультикартинки MultiPictureABC. unit ABCSprites; //#savepcu false @@ -13,9 +13,9 @@ uses ABCObjects,Events,GraphABC,Utils; type SpriteState = record - Name: string; // - Beg: integer; // , - Count: integer; // + Name: string; // имена состояний + Beg: integer; // номера картинок, являющихся началами состояний + Count: integer; // длины состояний constructor Create(n: string; b,c: integer); begin Name := n; @@ -27,10 +27,10 @@ type SpriteABC = class(MultiPictureABC) private States: Array of SpriteState; - curst: integer; // - ticks: integer; // , : 0..10 - act: boolean; // - curtick: integer; // , + curst: integer; // номер текущего состояния + ticks: integer; // сколько тиков проходит до смены кадра, обратно пропорционален скорости: 0..10 + act: boolean; // активен ли спрайт + curtick: integer; // текущий тик, когда он становится равным procedure SetStateName(n: string); function GetStateName: string; procedure SetState(n: integer); @@ -42,75 +42,75 @@ type function GetFrame: integer; protected procedure Init0; - procedure Init(x,y: integer; fname: string); // Add AddState, CheckStates - procedure Init(x,y,w: integer; fname: string); // AddState, CheckStates + procedure Init(x,y: integer; fname: string); // после этого придется вызывать Add и AddState, затем CheckStates + procedure Init(x,y,w: integer; fname: string); // после этого придется вызывать AddState, затем CheckStates procedure Init(x,y,w: integer; p: Picture); procedure InitWithStates(x,y: integer; fname: string); procedure InitBy(g: SpriteABC); public - /// , fname. - /// fname , .spinf - /// , . Add. - /// AddStates CheckStates - /// .spinf, - /// . - /// (x,y) + /// Создает спрайт, загружая его из файла с именем fname. + ///Имя fname может быть либо именем графического файла, либо именем информационного файла спрайта с расширением .spinf + ///Если имя является именем графического файла, то создается спрайт с одним кадром. Остальные кадры добавляются методом Add. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///Если файл имеет расширение .spinf, то он содержит информацию о кадрах и состояниях спрайта и + ///должен сопровождаться соответствующим графическим файлом. + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y: integer; fname: string); - /// , fname. , - /// , . - /// w. fname w, . - /// AddStates CheckStates - /// (x,y) + /// Создает спрайт, загружая его из файла fname. Файл должен хранить рисунок, представляющий собой + ///последовательность кадров одного размера, расположенных по горизонтали. + ///Каждый кадр считается имеющим ширину w. Если ширина рисунка в файле fname не кратна w, то возникает исключение. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y,w: integer; fname: string); - /// , p: Picture. , - /// , . - /// w. w, . - /// AddStates CheckStates - /// (x,y) + /// Создает спрайт, загружая его из объекта p: Picture. Он должен хранить рисунок, представляющий собой + ///последовательность кадров одного размера, расположенных по горизонтали. + ///Каждый кадр считается имеющим ширину w. Если ширина рисунка не кратна w, то возникает исключение. + ///После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates + ///После создания спрайт отображается на экране в позиции (x,y) constructor Create(x,y,w: integer; p: Picture); - /// - g + /// Создает спрайт - копию спрайта g constructor Create(g: SpriteABC); - /// + /// Удаляет спрайт destructor Destroy; - /// . CheckStates + /// Добавляет состояние к спрайту. После добавления всех состояний следует вызвать CheckStates procedure AddState(name: string; count: integer); - /// . + /// Проверяет корректность набора состояний. Вызывается после добавления всех состояний procedure CheckStates; - /// + /// Добавляет кадр к спрайту procedure Add(fname: string); - /// - /// fname - /// , , .spinf + /// Сохраняет графический и информационный файлы спрайта + /// Имя fname задает имя графического файла + /// Информационный файл сохраняется в тот же каталог, что и графический, имеет то же имя и расширение .spinf procedure SaveWithInfo(fname: string); - /// + /// Переходит к следующему кадру в текущем состоянии procedure NextFrame; - /// ; ticks, 1 NextFrame + /// Переходит к следующему тику таймера; если он равен ticks, то он сбрасывается в 1 и вызывается NextFrame procedure NextTick; - /// + /// Имя состояния property StateName: string read GetStateName write SetStateName; - /// (1..StateCount) + /// Номер состояния (1..StateCount) property State: integer read curst write SetState; - /// + /// Количество состояний property StateCount: integer read GetStateCount; - /// (1..10) + /// Скорость спрайта (1..10) property Speed: integer read GetSpeed write SetSpeed; - /// : True, (.. ), False + /// Активность спрайта: True, если спрайт активен (т.е. происходит его анимация), и False в противном случае property Active: boolean read act write SetActive; - /// + /// Текущий кадр в текущем состоянии property Frame: integer read GetFrame write SetFrame; - /// + /// Возвращает количество кадров в текущем состоянии function FrameCount: integer; - /// + /// Возвращает начальный кадр в текущем состоянии function FrameBeg: integer; - /// + /// Возвращает клон объекта function Clone0: ObjectABC; override; - /// + /// Возвращает клон объекта function Clone: SpriteABC; end; -/// +/// Стартует анимацию всех спрайтов procedure StartSprites; -/// +/// Останавливает анимацию всех спрайтов procedure StopSprites; ///-- @@ -123,8 +123,8 @@ implementation const infoext = '.spinf'; var - _Sprites: System.Collections.ArrayList; // - _t: System.Timers.Timer; // + _Sprites: System.Collections.ArrayList; // массив спрайтов + _t: System.Timers.Timer; // таймер спрайтов timerMs: integer; procedure SpriteABC.Init0; @@ -169,7 +169,7 @@ begin { if not FileExists(fname) then fname := StandardImageFolder + fname;} if not FileExists(fname) then - raise Exception.Create(' '+ExtractFileName(fname)+' '); + raise Exception.Create('Файл '+ExtractFileName(fname)+' не найден'); Init0; @@ -179,7 +179,7 @@ begin Delete(s,i,Length(s)); s := s + infoext; if not FileExists(s) then - raise Exception.Create(' '+ExtractFileName(s)+' ');} + raise Exception.Create('Информационный файл спрайта '+ExtractFileName(s)+' не найден');} try assign(f,fname); @@ -208,7 +208,7 @@ begin on e: Exception do begin writeln(e); - raise Exception.Create(' '); + raise Exception.Create('Ошибка считывания из информационного файла спрайта'); end; end; inherited Init(x,y,w,fname); @@ -270,7 +270,7 @@ begin CheckStates; s:=LowerCase(ExtractFileExt(fname)); if (s<>'.bmp') and (s<>'.jpg') and (s<>'.gif') and (s<>'.png') then - raise Exception.Create(' '); + raise Exception.Create('Задан неверный формат графического файла'); Save(fname); fnameold := fname; i := Pos(s,fname); @@ -278,14 +278,14 @@ begin fname := fname + infoext; assign(f,fname); rewrite(f); - writeln(f,ExtractFileName(fnameold),' // '); - writeln(f,width,' // '); -// writeln(f,count,' // '); - writeln(f,Speed,' // '); - writeln(f,StateCount,' // '); + writeln(f,ExtractFileName(fnameold),' // имя файла спрайта'); + writeln(f,width,' // ширина кадра'); +// writeln(f,count,' // количество кадров'); + writeln(f,Speed,' // скорость'); + writeln(f,StateCount,' // количество состояний'); for i:=0 to StateCount-1 do if i=0 then - writeln(f,States[i].Name,' ',States[i].Count,' // ') + writeln(f,States[i].Name,' ',States[i].Count,' // имена состояний и количество кадров в них') else writeln(f,States[i].Name,' ',States[i].Count); close(f); end; @@ -299,12 +299,12 @@ begin for i:=0 to StateCount-1 do s := s + States[i].Count; if s<>Count then - raise Exception.Create(' '); + raise Exception.Create('Сумма кадров в состояниях спрайта отличается от общего количества кадров'); end; procedure SpriteABC.Add(fname: string); begin -// Assert(StateCount=1,' 1'); +// Assert(StateCount=1,'при добавлении кадров количество состояний должно быть равно 1'); inherited Add(fname); Inc(States[0].Count); end; @@ -359,8 +359,8 @@ end; procedure SpriteABC.SetSpeed(n: integer); begin - // - // ! + // пока нет нулевой скорости + // сделать поправку на изменение тика при уменьшении скорости! if n<1 then n := 1; if n>10 then n := 10; case n of @@ -405,7 +405,7 @@ begin if n>States[curst-1].Count then n := 1; Frame := n; -// Redraw; // ! +// Redraw; // это надо отключать по флагу! end; procedure SpriteABC.SetFrame(n: integer); @@ -496,7 +496,7 @@ var __initialized := false; procedure __InitModule; begin - timerMs := 50; // . + timerMs := 50; // дискретизация таймера. Потом допустима перекалибровка _Sprites := new System.Collections.ArrayList; _t := new System.Timers.Timer(timerMs); _t.Elapsed += TimerProc; diff --git a/bin/Lib/Arrays.pas b/bin/Lib/Arrays.pas index 084888c38..ef7ac855c 100644 --- a/bin/Lib/Arrays.pas +++ b/bin/Lib/Arrays.pas @@ -8,70 +8,70 @@ interface uses System; -/// , delimiter +/// Выводит массив, используя delimiter в качестве разделителя procedure &Array.Write(delimiter: string := ' '); -/// , delimiter , +/// Выводит массив, используя delimiter в качестве разделителя, и осуществляет переход на новую строку procedure &Array.Writeln(delimiter: string := ' '); -/// 0 99 +/// Заполняет целый массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array of integer); -/// minValue maxValue +/// Заполняет целый массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array of integer; minValue, maxValue: integer); -/// 0 10 +/// Заполняет вещественный массив случайными числами в диапазоне от 0 до 10 procedure FillByRandom(a: array of real); -/// minValue maxValue +/// Заполняет вещественный массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array of real; minValue, maxValue: real); -/// x +/// Заполняет массив значением x procedure FillByValue(a: array of T; x: T); -/// n, 0 99 +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99 function CreateRandomIntegerArray(n: integer): array of integer; -/// n, minValue maxValue +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomIntegerArray(n: integer; minValue, maxValue: integer): array of integer; -/// n, 0 10 +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10 function CreateRandomRealArray(n: integer): array of real; -/// n, minValue maxValue +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomRealArray(n: integer; minValue, maxValue: real): array of real; -/// +/// Вводит целый массив procedure ReadArray(a: array of integer); -/// +/// Вводит вещественный массив procedure ReadArray(a: array of real); -/// +/// Вводит массив строк procedure ReadArray(a: array of string); -/// , delimiter +/// Выводит массив, используя delimiter в качестве разделителя значений procedure WriteArray(a: array of T; delimiter: string := ' '); -/// , delimiter , +/// Выводит массив, используя delimiter в качестве разделителя значений, и осуществляет переход на новую строку procedure WritelnArray(a: array of T; delimiter: string := ' '); -/// +/// Сортирует массив по возрастанию procedure Sort(a: array of T); -/// +/// Сортирует массив по убыванию procedure SortDescending(a: array of T); -/// 0 99 +/// Заполняет двумерный целый массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array [,] of integer); -/// minValue maxValue +/// Заполняет двумерный целый массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer); -/// 0 99 +/// Заполняет двумерный вещественный массив случайными числами в диапазоне от 0 до 99 procedure FillByRandom(a: array [,] of real); -/// minValue maxValue +/// Заполняет двумерный вещественный массив случайными числами в диапазоне от minValue до maxValue procedure FillByRandom(a: array [,] of real; minValue, maxValue: real); -/// x +/// Заполняет массив значением x procedure FillByValue(a: array [,] of T; x: T); -/// n, 0 99 +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от 0 до 99 function CreateRandomIntegerMatrix(m, n: integer): array [,] of integer; -/// n, minValue maxValue +/// Создает и возвращает целый массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomIntegerMatrix(m, n: integer; minValue, maxValue: integer): array [,] of integer; -/// n, 0 10 +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от 0 до 10 function CreateRandomRealMatrix(m, n: integer): array [,] of real; -/// n, minValue maxValue +/// Создает и возвращает вещественный массив размера n, заполненный случайными числами в диапазоне от minValue до maxValue function CreateRandomRealMatrix(m, n: integer; minValue, maxValue: real): array [,] of real; -/// +/// Выводит двумерный массив procedure WriteMatrix(a: array [,] of T; width: integer := 0); -/// +/// Выводит двумерный массив procedure WriteMatrix(a: array [,] of real; width: integer := 0; digitsAfterPoint: integer := 2); implementation -// ================== ================== +// ================== Одномерные массивы ================== procedure FillByRandom(a: array of integer; minValue, maxValue: integer); begin @@ -172,7 +172,7 @@ begin System.Array.Reverse(a); end; -// ================== ================== +// ================== Двумерные массивы ================== procedure FillByRandom(a: array [,] of integer; minValue, maxValue: integer); begin @@ -249,7 +249,7 @@ begin end; end; -// ================== ================== +// ================== Методы расширения для массивов ================== procedure &Array.Write(delimiter: string); begin diff --git a/bin/Lib/CRT.pas b/bin/Lib/CRT.pas index ad8b111c1..338a69ceb 100644 --- a/bin/Lib/CRT.pas +++ b/bin/Lib/CRT.pas @@ -2,7 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) /// -/// +/// Модуль для работы с консолью /// unit CRT; @@ -33,80 +33,80 @@ const White = 15; /// -/// +/// Задает заголовок консольного окна /// -/// +/// Заголовок консольного окна procedure SetWindowTitle(s: string); /// -/// +/// Задает заголовок консольного окна /// -/// +/// Заголовок консольного окна procedure SetWindowCaption(s: string); /// -/// +/// Показывает курсор если он скрыт /// procedure ShowCursor; /// -/// +/// Скрывает курсор /// procedure HideCursor; /// -/// +/// Считыват нажатую клавишу /// function ReadKey: char; /// -/// true . ReadKey +/// Возвращает true если была нажата клавиша. Считать символ можно спомощью функции ReadKey /// function KeyPressed: boolean; /// -/// +/// Возвращает высоту экрана /// function WindowWidth: integer; /// -/// +/// Возвращает ширину экрана /// /// function WindowHeight: integer; /// -/// - +/// Возвращает Х-координату курсора /// function WhereX: integer; /// -/// Y- +/// Возвращает Y-координату курсора /// function WhereY: integer; /// -/// (x,y) +/// Переводит курсор в координаты (x,y) /// procedure GotoXY(x, y: integer); procedure Window(x, y, w, h: integer); /// -/// +/// Задает размеры консольного окна /// -/// -/// +/// Ширина +/// Высота procedure SetWindowSize(w, h: integer); procedure SetBufferSize(w, h: integer); /// -/// , +/// Очищает экран, заполняя его текущим цветом фона /// procedure ClrScr; /// -/// +/// Задает цвет фона выводимого текста /// -/// +/// Цвет фона procedure TextBackground(c: integer); /// -/// +/// Задает цвет выводимого текста /// -/// +/// Цвет текста procedure TextColor(c: integer); /// -/// +/// Очищает линию на которой установлен курсор /// procedure ClearLine; /// -/// ms +/// Делает паузу на ms миллисекунд /// procedure Delay(ms: integer); @@ -151,7 +151,7 @@ begin Console.CursorVisible := False; end; -function ReadKey: char;// TODO +function ReadKey: char;// TODO продумать это var KeyInfo: ConsoleKeyInfo; begin @@ -203,7 +203,7 @@ end; procedure Window(x, y, w, h: integer); begin - writeln(' CRT.Window '); + writeln('Функция CRT.Window не реализована'); {Console.WindowLeft:=x; Console.WindowTop:=y; Console.WindowWidth:=w; @@ -281,8 +281,8 @@ begin end else begin - Console.WriteLine(' CRT F9.'); - Console.WriteLine(' , Shift-F9'); + Console.WriteLine('Программу с подключенным модулем CRT нельзя запускать по F9.'); + Console.WriteLine('Запустите программу, используя Shift-F9'); Halt; end; end; diff --git a/bin/Lib/Collections.pas b/bin/Lib/Collections.pas index c68618712..2fee38442 100644 --- a/bin/Lib/Collections.pas +++ b/bin/Lib/Collections.pas @@ -1,34 +1,34 @@ -/// -/// Stack -/// Queue -/// DynArray -/// SimpleSet -/// AssocArray -/// LinkedList +/// Модуль содержит шаблоны классов +/// Stack — стек +/// Queue — очередь +/// DynArray — динамический массив +/// SimpleSet — простое множество на основе динамического массива +/// AssocArray — простой ассоциативный массив на основе динамического массива пар +/// LinkedList — двусвязный список unit Collections; //------------------------------------------------------------------------------ -// -// 1.0 -// Copyright (c) 2009 ., .., . +// Модуль упрощенных классов коллекций для обучения +// Версия 1.0 +// Copyright (c) 2009 Белякова Ю., Михалкович С.С., Саатчи А. //------------------------------------------------------------------------------ interface // -------------------------------- SingleNode --------------------------------- type - /// + /// Узел с одним полем связи SingleNode = class private - /// , + /// Значение, содержащееся в узле fData: T; - /// + /// Ссылка на следующий элемент fNext: SingleNode; /// - /// + /// Конструктор /// - /// - /// + /// Значение в узле + /// Ссылка на следующий элемент public constructor Create(pData: T; pNext: SingleNode); begin @@ -42,305 +42,305 @@ type // ----------------------------------- Stack ----------------------------------- type - /// Stack + /// Шаблон класса Stack Stack = class private - /// + /// Вершина стека fTop: SingleNode := nil; public - /// + /// Создает пустой стек constructor Create; /// - /// + /// Кладет элемент на вершину стека /// - /// + /// Новый элемент procedure Push(x: T); - /// , + /// Возвращает значение элемента на вершине, снимая его со стека function Pop: T; - /// , + /// Возвращает значение элемента на вершине стека, не снимая его function Top: T; - /// , + /// Возвращает истину, если стек пуст function IsEmpty: boolean; - /// + /// Преобразует содержимое стека в строку function ToString: string; override; - /// + /// Выводит содержимое стека на консоль procedure Print; - /// + /// Выводит содержимое стека на консоль с переходом на новую строку procedure Println; end; // ----------------------------------- Queue ----------------------------------- type - /// Queue + /// Шаблон класса Queue Queue = class private - /// + /// Голова очереди head: SingleNode; - /// + /// Хвост очереди tail: SingleNode; public - /// + /// Создает пустую очередь constructor Create; /// - /// + /// Добавляет элемент в хвост очереди /// - /// + /// Добавляемый элемент procedure Enqueue(x: T); - /// , + /// Возвращает значение элемента в голове, удаляя его из очереди function Dequeue: T; - /// , + /// Возвращает значение элемента в голове очереди, не удаляя его function Top: T; - /// , + /// Возвращает истину, если очередь пуста function IsEmpty: boolean; - /// + /// Преобразует содержимое очереди в строку function ToString: string; override; - /// + /// Выводит содержимое очереди на консоль procedure Print; - /// + /// Выводит содержимое очереди на консоль с переходом на новую строку procedure Println; end; // --------------------------------- DynArray ---------------------------------- const - /// , + /// Минимальная емкость, устанавливаемая при создании массива MIN_CAP = 4; - /// + /// Коэффициент увеличения емкости массива при её нехватке INC_CAP_FACTOR = 2; type - /// DynArray [ ] + /// Шаблон класса DynArray [Динамический массив с автоконтролем памяти] DynArray = class private - /// , + /// Встроенный динамический массив, содержащий данные fData: array of T; - /// + /// Размер массива fSize: integer; - /// + /// Емкость массива fCap: integer; - /// ind x + /// Устанавливает элемент с индексом ind равным x procedure SetElem(index: integer; x: T); - /// ind + /// Возвращает элемент массива с индексом ind function GetElem(index: integer): T; public - /// 0 + /// Создает массив размера 0 constructor Create; - /// size + /// Создает массив размера size constructor Create(psize: integer); /// - /// . . - /// ( newCap , ) + /// Выделяет новую память. Емкость увеличивается. + /// (Если newCap меньше текущей емкости, ничего не происходит) /// - /// + /// Новая емкость массива procedure Reserve(newCap: integer); /// - /// + /// Устанавливает новый размер массива /// - /// + /// Новый размер массива procedure Resize(newSize: integer); /// - /// + /// Добавляет элемент в конец массива /// - /// + /// Добавляемый элемент procedure Add(x: T); /// - /// + /// Вставляет элемент в указанную позицию /// - /// , - /// + /// Позиция, в которую вставляется элемент + /// Вставляемый элемент procedure Insert(pos: integer; x: T); /// - /// + /// Удаляет элемент массива из указанной позиции /// - /// , + /// Позиция, из которой удаляется элемент procedure Remove(pos: integer); /// - /// - /// -1, + /// Возвращает индекс первого элемента массива равного искомому + /// или -1, если такого элемента нет /// - /// + /// Искомый элемент function Find(x: T): integer; - /// () + /// Количество элементов (размер) массива property Count: integer read fSize write Resize; - /// + /// Емкость массива property Capacity: integer read fCap write Reserve; - /// + /// Позволяет обращаться к элементам массива по индексу property Elem[index: integer]: T read GetElem write SetElem; default; - /// + /// Преобразует содержимое массива в строку function ToString: string; override; - /// + /// Выводит содержимое массива на консоль procedure Print; - /// + /// Выводит содержимое массива на консоль с переходом на новую строку procedure Println; end; // -------------------------------- SimpleSet ---------------------------------- type - /// SimpleSet + /// Шаблон класса SimpleSet SimpleSet = class private - /// + /// Элементы множества data: DynArray; public - /// + /// Создает множество constructor Create; /// - /// , + /// Добавляет элемент во множество, если его там еще нет /// - /// + /// Добавляемый элемент procedure Add(x: T); /// - /// , + /// Удаляет элемент из множества, если он там есть /// - /// + /// Удаляемый элемент procedure Remove(x: T); /// - /// , + /// Возвращает истину, если множество содержит элемент /// - /// + /// Искомый элемент function Contains(x: T): boolean; - /// + /// Преобразует содержимое массива в строку function ToString: string; override; - /// + /// Выводит содержимое массива на консоль procedure Print; - /// + /// Выводит содержимое множества на консоль с переходом на новую строку procedure Println; end; // -------------------------------- AssocArray --------------------------------- type - /// AssocArray + /// Шаблон класса AssocArray AssocArray = class private - /// + /// Ключи keys: DynArray; - /// , + /// Значения, соответствующие ключам values: DynArray; - /// key value + /// Устанавливает значение элемента с ключом key равным value procedure SetElem(key: KeyType; value: ValueType); - /// key + /// Возвращает значение элемента с ключом key function GetElem(key: KeyType): ValueType; public - /// + /// Создает ассоциативный массив constructor Create; - /// + /// Позволяет обращаться к элементам массива по ключу property Elem[key: KeyType]: ValueType read GetElem write SetElem; default; - /// + /// Преобразует содержимое ассоциативного массива в строку function ToString: string; override; - /// + /// Выводит содержимое ассоциативного массива на консоль procedure Print; - /// + /// Выводит содержимое ассоциативного массива на консоль с переходом на новую строку procedure Println; end; // ----------------------------- LinkedListNode -------------------------------- type - /// + /// Узел с двумя полями связи LinkedListNode = class private - /// , + /// Значение, содержащееся в узле fData: T; - /// + /// Ссылка на предыдущий элемент fPrev: LinkedListNode; - /// + /// Ссылка на следующий элемент fNext: LinkedListNode; public /// - /// + /// Создает новый узел /// - /// - /// - /// + /// Значение узла + /// Ссылка на предыдущий элемент + /// Ссылка на следующий элемент constructor Create(data: T; prev, next: LinkedListNode); begin fData := data; fNext := next; fPrev := prev; end; - /// , + /// Значение, содержащееся в узле property Value: T read fData write fData; - /// + /// Ссылка на предыдущий элемент — только на чтение property Prev: LinkedListNode read fPrev; - /// + /// Ссылка на следующий элемент — только на чтение property Next: LinkedListNode read fNext; end; // -------------------------------- LinkedList --------------------------------- type - /// + /// Двусвязный линейный список LinkedList = class private - /// () + /// Первый элемент (голова) fFirst: LinkedListNode; - /// () + /// Последний элемент (хвост) fLast: LinkedListNode; public - /// + /// Создает пустой список constructor Create; - /// () + /// Первый элемент (голова) — только на чтение property First: LinkedListNode read fFirst; - /// () + /// Последний элемент (хвост) — только на чтение property Last: LinkedListNode read fLast; /// - /// x + /// Добавляет элемент x в начало списка /// - /// + /// Добавляемый элемент procedure AddFirst(x: T); /// - /// x + /// Добавляет элемент x в конец списка /// - /// + /// Добавляемый элемент procedure AddLast(x: T); - /// + /// Удаляет первый элемент списка procedure RemoveFirst(); - /// + /// Удаляет последний элемент списка procedure RemoveLast(); /// - /// x node + /// Добавляет элемент x перед node /// - /// , - /// + /// Ссылка на элемент, перед которым нужно добавить новый + /// Добавляемый элемент procedure AddBefore(node: LinkedListNode; x: T); /// - /// x node + /// Добавляет элемент x после node /// - /// , - /// + /// Ссылка на элемент, после которого нужно добавить новый + /// Добавляемый элемент procedure AddAfter(node: LinkedListNode; x: T); /// - /// node + /// Удаляет элемент node /// - /// , + /// Ссылка на элемент, который нужно удалить procedure Remove(node: LinkedListNode); - /// + /// Преобразует содержимое списка в строку function ToString: string; override; - /// + /// Выводит содержимое списка на консоль procedure Print; - /// + /// Выводит содержимое списка на консоль с переходом на новую строку procedure Println; end; //============================================================================== implementation -// +//Сообщения исключений const - PopNilStackExceptionMessage = ' '; - TopNilStackExceptionMessage = ' '; + PopNilStackExceptionMessage = 'Попытка снятия элемента с пустого стека'; + TopNilStackExceptionMessage = 'Попытка получения элемента с пустого стека'; - DequeueNilQueueExceptionMessage = ' '; - TopNilQueueExceptionMessage = ' '; + DequeueNilQueueExceptionMessage = 'Попытка удаления элемента из пустой очереди'; + TopNilQueueExceptionMessage = 'Попытка получения элемента из пустой очереди'; - NegativeArraySizeExceptionMessage = ' '; - InsOutOfArrayBoundExceptionMessage = ' '; - RemOutOfArrayBoundExceptionMessage = ' '; - SetElemOutOfBoundExceptionMessage = ' '; - GetElemOutOfBoundExceptionMessage = ' '; + NegativeArraySizeExceptionMessage = 'Попытка присвоить размеру массива отрицательное значение '; + InsOutOfArrayBoundExceptionMessage = 'Попытка вставки за границей массива в позицию '; + RemOutOfArrayBoundExceptionMessage = 'Попытка удаления за границей массива из позиции '; + SetElemOutOfBoundExceptionMessage = 'Попытка присвоить значение элементу за границей массива с индексом '; + GetElemOutOfBoundExceptionMessage = 'Попытка получить значение элемента за границей массива с индексом '; - RemoveFromNilListExceptionMessage = ' '; - AddNilNodeExceptionMessage = ' node '; - RemoveNilNodeExceptionMessage = ' node '; + RemoveFromNilListExceptionMessage = 'Попытка удаления из пустого списка'; + AddNilNodeExceptionMessage = 'Параметр node является нулевой ссылкой'; + RemoveNilNodeExceptionMessage = 'Параметр node является нулевой ссылкой'; // ----------------------------------- Stack ----------------------------------- constructor Stack.Create; @@ -413,7 +413,7 @@ begin else begin tail.next := new SingleNode(x, nil); - tail := tail.next; // (.. ) + tail := tail.next; // элемент удаляется из хвоста очереди (т.е. хвостом становится следующий элемент) end; end; @@ -423,7 +423,7 @@ begin raise new Exception(DequeueNilQueueExceptionMessage); Result := head.data; - head := head.next; // (.. ) + head := head.next; // элемент удаляется из головы очереди (т.е. головой становится следующий элемент) if head = nil then tail := nil; end; @@ -475,7 +475,7 @@ begin raise new Exception(NegativeArraySizeExceptionMessage + pSize.ToString); fSize := pSize; - fCap := INC_CAP_FACTOR * pSize + MIN_CAP; // " " + fCap := INC_CAP_FACTOR * pSize + MIN_CAP; // Устанавливаем емкость "с запасом" SetLength(fData, fCap); end; @@ -496,7 +496,7 @@ begin if newSize > fCap then begin Reserve(INC_CAP_FACTOR * newSize); - for var i := fSize to newSize - 1 do // + for var i := fSize to newSize - 1 do // явным образом заполняем новые элементы fData[i] := default(T); end; fSize := newSize; @@ -524,7 +524,7 @@ begin if (pos < 0) or (pos > fSize - 1) then raise new Exception(RemOutOfArrayBoundExceptionMessage + pos.ToString); - for var i := pos to fSize - 2 do // 1, pos + for var i := pos to fSize - 2 do // сдвиг элементов влево на 1, начиная с позиции pos fData[i] := fData[i + 1]; Resize(fSize - 1); end; @@ -548,7 +548,7 @@ begin fData[index] := x; end; -{ ind} +{Возвращает элемент массива с индексом ind} function DynArray.GetElem(index: integer): T; begin if (index < 0) or (index > fSize - 1) then diff --git a/bin/Lib/Colors.pas b/bin/Lib/Colors.pas index af56711da..f7b8cb60b 100644 --- a/bin/Lib/Colors.pas +++ b/bin/Lib/Colors.pas @@ -1,3 +1,3 @@ -// Pascal ABC +//Для совместимости с Pascal ABC unit Colors; end. \ No newline at end of file diff --git a/bin/Lib/DMCollect.pas b/bin/Lib/DMCollect.pas index cf1bb7234..2018bdf9f 100644 --- a/bin/Lib/DMCollect.pas +++ b/bin/Lib/DMCollect.pas @@ -34,7 +34,7 @@ type end; function GetItem(i: integer): Cell; begin - Result := Cell(a[i]); //!! Item[i].a.x := 1; !!!!!!! + Result := Cell(a[i]); //!! Не будет работать для Item[i].a.x := 1; !!!!!!! end; procedure SetItem(i: integer; c: Cell); begin @@ -145,20 +145,20 @@ function LessThenCC (C1,C2: Cell): boolean; var vv: vector; ip: boolean; -{ } +{Самое сложное условие} begin vv := initVector(C1.p,C2.p); ip := IsParallel(C1.v,C2.v); - {C1DimX+orx) or (yDimY+ory) then - DrawmanError(': ',' '); + DrawmanError('Чертежник: вышел за границы поля рисования','Задание прервано'); if not PenIsUp then begin DMLine(DMX,DMY,x,y,colorSolve); @@ -419,7 +419,7 @@ begin DMY := y; DrawDM; Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); end; procedure TDMField.OnVector(x,y: integer); @@ -455,14 +455,14 @@ end; procedure TDMField.Stop; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; buttonStep.Enabled := True; t.Suspend; end; procedure TDMField.Start; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Стоп (Enter)'; buttonStep.Enabled := False; t.Resume; end; @@ -501,10 +501,10 @@ end; procedure TDMField.CheckTaskCall; begin if not TaskIsCalled then - DrawManError(' Task ',' '); + DrawManError('Процедура Task вызова задания должна быть первой','Выполнение программы прервано'); end; -//--------- +//--------- Интерфейс и обработчики procedure LoadIni(var settings: IniSettings); var Ini: TIniFile; begin @@ -572,13 +572,13 @@ begin if t.ThreadState = System.Threading.ThreadState.Suspended then begin DMField.StepFlag := False; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Выполняю задание'; DMField.Start; end else begin DMField.StepFlag := True; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Остановился'; DMField.Stop; end; (GraphABCControl as Control).Focus; @@ -589,22 +589,22 @@ begin DMField.StepFlag := True; t.Resume; (GraphABCControl as Control).Focus; - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Команда выполнена'; end; procedure buttonHelpClick(o: Object; e: EventArgs); begin - MessageBox.Show(' : .., 2002-07 '#10#13#10#13+ - ' :'#10#13+ - ' PenDown - '#10#13+ - ' PenUp - '#10#13 - ' ToPoint(x,y) - (x,y)'#10#13+ - ' OnVector(a,b) - (a,b)'#10#13 - ' a>0 - , a<0 - , b>0 - , b<0 - '#10#13 - ' Speed(n) - n (n=0..10)'#10#13 - ' Stop - '#10#13 - ' Start - '#10#13, - ' - '); + MessageBox.Show('Разработчик исполнителя Чертежник: Михалкович С.С., 2002-07 '#10#13#10#13+ + 'Команды исполнителя Чертежник:'#10#13+ + ' PenDown - опустить перо'#10#13+ + ' PenUp - поднять перо'#10#13 + ' ToPoint(x,y) - переместиться в точку с координатами (x,y)'#10#13+ + ' OnVector(a,b) - переместиться из текущей точки на вектор (a,b)'#10#13 + ' a>0 - вправо, a<0 - влево, b>0 - вверх, b<0 - вниз'#10#13 + ' Speed(n) - установить скорость n (n=0..10)'#10#13 + ' Stop - остановить Чертежника'#10#13 + ' Start - запустить Чертежника'#10#13, + 'Исполнитель Чертежник - Справка'); (GraphABCControl as Control).Focus; end; @@ -700,7 +700,7 @@ begin buttonHelp.Location := new Point(359, 18); buttonHelp.Size := new Size(107, 24); buttonHelp.TabStop := false; - buttonHelp.Text := ' (F1)'; + buttonHelp.Text := 'Справка (F1)'; // buttonHelp.UseVisualStyleBackColor := true; // // buttonExit @@ -709,7 +709,7 @@ begin buttonExit.Location := new System.Drawing.Point(241, 18); buttonExit.Size := new System.Drawing.Size(107, 24); buttonExit.TabStop := false; - buttonExit.Text := ' (Esc)'; + buttonExit.Text := 'Выход (Esc)'; // buttonExit.UseVisualStyleBackColor := true; // // buttonStep @@ -718,7 +718,7 @@ begin buttonStep.Location := new Point(123, 18); buttonStep.Size := new Size(107, 24); buttonStep.TabStop := false; - buttonStep.Text := ' (Space)'; + buttonStep.Text := 'Шаг (Space)'; // buttonStep.UseVisualStyleBackColor := true; // // buttonStart @@ -727,7 +727,7 @@ begin buttonStart.Location := new Point(5, 18); buttonStart.Size := new Size(107, 24); buttonStart.TabStop := false; - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; // buttonStart.UseVisualStyleBackColor := true; // // tableLayoutPanelBottom @@ -753,7 +753,7 @@ begin labelExState.Location := new Point(5, 2); labelExState.Margin := new Padding(3, 0, 3, 3); labelExState.Size := new Size(453, 15); - labelExState.Text := ': '; + labelExState.Text := 'Чертежник: Готов'; labelExState.TextAlign := ContentAlignment.MiddleCenter; // // groupBoxExState @@ -785,7 +785,7 @@ begin labelState.Location := new Point(6, 54); labelState.Margin := new Padding(0); labelState.Size := new Size(83, 17); - labelState.Text := ':'; + labelState.Text := 'Состояние:'; // // labelStep // @@ -794,7 +794,7 @@ begin labelStep.ForeColor := System.Drawing.Color.Black; labelStep.Location := new Point(130, 54); labelStep.Size := new Size(66, 18); - labelStep.Text := ': 0'; + labelStep.Text := 'Шаг: 0'; labelStep.TextAlign := ContentAlignment.MiddleLeft; // // trackBarSpeed @@ -811,7 +811,7 @@ begin labelSpeed.Location := new Point(6, 16); labelSpeed.Margin := new Padding(0); labelSpeed.Size := new Size(73, 17); - labelSpeed.Text := ':'; + labelSpeed.Text := 'Скорость:'; // // tableLayoutPanelTop // @@ -837,7 +837,7 @@ begin labelZad.Location := new Point(6, 3); labelZad.Margin := new Padding(4, 1, 3, 0); labelZad.Size := new Size(668, 14); - labelZad.Text := ''; + labelZad.Text := 'Задание'; labelZad.TextAlign := ContentAlignment.MiddleLeft; // // ExecutorForm @@ -847,7 +847,7 @@ begin MainForm.Controls.Add(tableLayoutPanelTop); MainForm.Controls.Add(BottomPanel); MainForm.MinimumSize := new Size(687, 240); - MainForm.Text := ' '; + MainForm.Text := 'Исполнитель Чертежник'; BottomPanel.ResumeLayout(false); panelBottomLeft.ResumeLayout(false); tableLayoutPanelBottom.ResumeLayout(false); @@ -931,7 +931,7 @@ begin labelExState.Text := s; end; -// - +// Добавил - МА procedure ResDM(TaskName: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'resdm'; // @@ -991,15 +991,15 @@ begin //buttonStart.Enabled := False; //buttonStep.Enabled := False; if DMField.DimX*DMField.DimY=0 then - DrawmanError(': Task',' ') + DrawmanError('Чертежник: Не вызвана процедура Task','Задание отсутствует') else if DMField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Invoke(SetSafeTextLabelExState,': '); - //labelExState.Text := ': '; - // - + labelExState.Invoke(SetSafeTextLabelExState,'Чертежник: Задание выполнено'); + //labelExState.Text := 'Чертежник: Задание выполнено'; + // Добавил - МА try ResDM(DMField.TaskName); except @@ -1008,8 +1008,8 @@ begin end else begin - labelExState.Invoke(SetSafeTextLabelExState,': , '); - //labelExState.Text := ': , '; + labelExState.Invoke(SetSafeTextLabelExState,'Чертежник: Работа окончена, задание не выполнено'); + //labelExState.Text := 'Чертежник: Работа окончена, задание не выполнено'; end; end; diff --git a/bin/Lib/Drawman.pas b/bin/Lib/Drawman.pas index b86539232..6b0f85b9d 100644 --- a/bin/Lib/Drawman.pas +++ b/bin/Lib/Drawman.pas @@ -1,32 +1,32 @@ // Copyright (c) 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 Drawman; interface -/// n (n=0..10) +/// Устанавливает скорость Чертежника равной n (n=0..10) procedure Speed(n: integer); -/// +/// Поднять перо procedure PenUp; -/// +/// Опустить перо procedure PenDown; -/// (x,y) +/// Переместиться к точке (x,y) procedure ToPoint(x,y: integer); -/// (a,b) +/// Переместиться на вектор (a,b) procedure OnVector(a,b: integer); -/// name +/// Вызывать задание с именем name procedure Task(name: string); -/// 9 11 +/// Создать пустое поле размера 9 на 11 клеток procedure StandardField; -/// n m +/// Создать пустое поле размера n на m клеток procedure Field(n,m: integer); -/// +/// Запустить Чертежника procedure Start; -/// +/// Остановить Чертежника procedure Stop; ///-- @@ -88,7 +88,7 @@ end; procedure StandardField; var x,y: integer; begin - TaskText(' '); + TaskText('Стандартное поле'); x := 9; y := 7; DMTaskMaker.Field(x,y); CorrectFieldBounds; @@ -98,7 +98,7 @@ end; procedure Field(n,m: integer); begin - TaskText(' '+IntToStr(n)+'x'+IntToStr(m)); + TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m)); DMTaskMaker.Field(n,m); CorrectFieldBounds; SetTaskCall; @@ -203,9 +203,9 @@ begin if TasksDictionary.ContainsKey(name) then TasksDictionary[name]() - else DrawManError(name+' - ',' '); + else DrawManError(name+' - нет такого задания для Чертежника','Задание отсутствует'); - // - + // Добавил - МА DMField.TaskName := name; // diff --git a/bin/Lib/Events.pas b/bin/Lib/Events.pas index 38c356134..0bdb95f37 100644 --- a/bin/Lib/Events.pas +++ b/bin/Lib/Events.pas @@ -1,3 +1,3 @@ -// Pascal ABC +// Для совместимости с Pascal ABC unit Events; end. diff --git a/bin/Lib/FormsABC.pas b/bin/Lib/FormsABC.pas index f6ec72af5..baf3bdacc 100644 --- a/bin/Lib/FormsABC.pas +++ b/bin/Lib/FormsABC.pas @@ -22,7 +22,7 @@ type Color = System.Drawing.Color; - /// + /// Поле ввода Field = class private l: &Label; @@ -42,7 +42,7 @@ type property FieldWidth: integer read GetFieldWidth write SetFieldWidth; end; - /// + /// Поле ввода целых значений IntegerField = class(Field) private nonNumberEntered: boolean; @@ -55,7 +55,7 @@ type property Text: string read GetText; end; - /// + /// Поле ввода вещественных значений RealField = class(Field) private nonNumberEntered: boolean; @@ -68,7 +68,7 @@ type property Text: string read GetText; end; - /// + /// Кнопка Button = class private b := new System.Windows.Forms.Button; @@ -78,7 +78,7 @@ type constructor Create(text: string); end; - /// + /// Текстовая метка TextLabel = class private l := new System.Windows.Forms.Label; @@ -86,7 +86,7 @@ type constructor(text: string); end; - /// + /// Флажок CheckBox = class private cb := new System.Windows.Forms.CheckBox; @@ -97,7 +97,7 @@ type property Checked: boolean read GetValue write SetValue; end; - /// + /// Радиокнопка RadioButton = class private rb := new System.Windows.Forms.RadioButton; @@ -108,7 +108,7 @@ type property Checked: boolean read GetValue write SetValue; end; - /// + /// Список ListBox = class private lb := new System.Windows.Forms.ListBox; @@ -130,7 +130,7 @@ type property Count: integer read GetCount; end; - /// + /// Выпадающий список ComboBox = class private cb := new System.Windows.Forms.ComboBox; @@ -155,7 +155,7 @@ type property Width: integer read GetWidth write SetWidth; end; - /// + /// Ползунок TrackBar = class private tb: System.Windows.Forms.TrackBar; @@ -177,7 +177,7 @@ type property Frequency: integer read GetFrequency write SetFrequency; end; - /// + /// Ползунок IntegerUpDown = class private n: System.Windows.Forms.NumericUpDown; @@ -214,7 +214,7 @@ type property Dock: DockStyle read GetDock write SetDock; end; - /// + /// Текстовый редактор TextBox = class(BaseDockControl) private function GetText: string; @@ -235,7 +235,7 @@ type procedure Paste; end; - /// - + /// Веб-браузер WebBrowser = class(BaseDockControl) private function GetText: string; @@ -253,7 +253,7 @@ type property Address: string read GetAddress; end; - /// + /// Окно для рисования PaintBox = class(BaseDockControl) private procedure PResize(sender: Object; e: EventArgs); @@ -273,7 +273,7 @@ type //function pb: PictureBox; end; - /// + /// Пункт меню MenuItem = class; ItemProc = procedure(item: MenuItem); MenuItem = class @@ -294,7 +294,7 @@ type property Item[i: integer]: MenuItem read GetItem; default; end; - /// + /// Главное меню MainMenu = class private m: MenuStrip; @@ -316,7 +316,7 @@ type public end; - /// + /// Тип главной формы MainFormType = class(ContainerControl) private m: Form; @@ -336,33 +336,33 @@ type constructor Create; public event Resize: procedure; - /// + /// Отступ главного окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; - /// + /// Отступ главного окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; - /// + /// Ширина главного окна в пикселах property Width: integer read GetWidth write SetWidth; - /// + /// Высота главного окна в пикселах property Height: integer read GetHeight write SetHeight; - /// + /// Заголовок главного окна property Title: string read GetTitle write SetTitle; - /// + /// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; - /// + /// Устанавливает размеры главного окна в пикселах procedure SetSize(w, h: integer); - /// + /// Устанавливает отступ главного окна от левого верхнего края экрана в пикселах procedure SetPos(l, t: integer); - /// + /// Закрывает главное окно и завершает приложение procedure Close; - /// + /// Сворачивает главное окно procedure Minimize; - /// + /// Максимизирует главное окно procedure Maximize; - /// + /// Возвращает главное окно к нормальному размеру procedure Normalize; - /// + /// Центрирует главное окно по центру экрана procedure CenterOnScreen; - /// .NET- + /// Возвращает главную .NET-форму function NetForm: Form; end; @@ -382,9 +382,9 @@ type constructor Create(f: System.Windows.Forms.Panel); public constructor Create; - /// + /// Ширина панели в пикселах property Width: integer read GetWidth write SetWidth; - /// + /// Высота панели в пикселах property Height: integer read GetHeight write SetHeight; property Dock: DockStyle read GetDock write SetDock; property Border: BorderStyle read GetBorderStyle write SetBorderStyle; @@ -408,7 +408,7 @@ type function ShowDialog: DialogResult; end; - /// + /// Диалог работы с файлами FileDialog = class(CommonDialog) private procedure SetFilter(f: string); @@ -423,24 +423,24 @@ type property InitialDirectory: string read GetInitialDirectory write SetInitialDirectory; end; - /// + /// Диалог открытия файла OpenFileDialog = class(FileDialog) public constructor Create; end; - /// + /// Диалог сохранения файла SaveFileDialog = class(FileDialog) public constructor Create; end; -//------------- --------------- +//------------- Процедуры --------------- -/// +/// Перейти на новую строку procedure LineBreak; -/// +/// Добавить пустую строку procedure EmptyLine(h: integer := 20); -/// +/// Добавить пустое пространство procedure EmptySpace(w: integer := 20); type @@ -459,12 +459,12 @@ type end; end; -//------------- --------------- +//------------- Переменные --------------- var MainForm: MainFormType; MainPanel: FlowPanel; - // : 20.11.10 + // Эксперимент: 20.11.10 ParentControl: ContainerControl; ///-- @@ -482,7 +482,7 @@ var nfi: System.Globalization.NumberFormatInfo; -//------------- --------------- +//------------- Компоненты --------------- //------------- Field --------------- @@ -1471,7 +1471,7 @@ begin Result := FlowLayoutPanel(p).FlowDirection; end; -//------------- --------------- +//------------- Процедуры --------------- procedure LineBreak; begin diff --git a/bin/Lib/GraphABC.pas b/bin/Lib/GraphABC.pas index 9f70a7132..6c392d86a 100644 --- a/bin/Lib/GraphABC.pas +++ b/bin/Lib/GraphABC.pas @@ -1,11 +1,11 @@ // Copyright (c) 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 GraphABC; //ne udaljat, IB 7.10.08 -// 2015.01 (mabr) +//с дополнениями 2015.01 (mabr) {$apptype windows} {$reference 'System.Windows.Forms.dll'} {$reference 'System.Drawing.dll'} @@ -20,15 +20,15 @@ uses System.Drawing.Drawing2D; type -/// +/// Тип цвета Color = System.Drawing.Color; -/// +/// Тип стиля штриховки кисти HatchStyle = System.Drawing.Drawing2D.HatchStyle; -/// +/// Тип стиля штриховки пера DashStyle = System.Drawing.Drawing2D.DashStyle; -/// GraphABC +/// Тип исключения GraphABC GraphABCException = class(Exception) end; -/// +/// Тип точки Point = System.Drawing.Point; var @@ -225,95 +225,95 @@ type FontStyleType = (fsNormal, fsBold, fsItalic, fsBoldItalic, fsUnderline, fsBoldUnderline, fsItalicUnderline, fsBoldItalicUnderline); BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient, bsNone); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела с координатами (x,y) function GetPixel(x,y: integer): Color; -/// (x,y) +/// Устанавливает текущую позицию рисования в точку (x,y) procedure MoveTo(x,y: integer); -/// (x,y). (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer); -/// (x,y) c. (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer; c: Color); -/// (x1,y1) (x2,y2) +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Рисует окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r +/// Рисует заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// (x,y) +/// Возвращает точку на плоскости с координатами (x,y) function Pnt(x,y: integer): Point; -/// , points +/// Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Рисует ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Рисует кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// n (x,y) +/// Выводит целое n в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; n: integer); -/// r (x,y) +/// Выводит вещественное r в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; r: real); -/// s, (x,y,x1,y1) +/// Выводит строку s, отцентрированную в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; s: string); -/// n, (x,y,x1,y1) +/// Выводит целое значение n, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; n: integer); -/// r, (x,y,x1,y1) +/// Выводит вещественное значение r, отцентрированное в прямоугольнике с координатами (x,y,x1,y1) procedure DrawTextCentered(x,y,x1,y1: integer; r: real); -/// c, (x,y). +/// Заливает область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); {procedure FillCircle(x,y,r: integer; c: Color); @@ -342,271 +342,271 @@ procedure Polygon(a: array of Point; c: Color); procedure Polyline(a: array of Point; c: Color);} //-------------------------------------------- -//// +//// Цвета //-------------------------------------------- -/// , (r), (g) (b) (r,g b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) function RGB(r,g,b: byte): Color; -/// , (r), (g) (b) (a) (a,r,g,b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) function ARGB(a,r,g,b: byte): Color; -/// r (r - 0 255) +/// Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) function RedColor(r: byte): Color; -/// g (g - 0 255) +/// Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) function GreenColor(g: byte): Color; -/// b (b - 0 255) +/// Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) function BlueColor(b: byte): Color; -/// +/// Возвращает случайный цвет function clRandom: Color; -/// +/// Возвращает красную составляющую цвета function GetRed(c: Color): integer; -/// +/// Возвращает зеленую составляющую цвета function GetGreen(c: Color): integer; -/// +/// Возвращает синюю составляющую цвета function GetBlue(c: Color): integer; -/// +/// Возвращает составляющую прозрачности цвета function GetAlpha(c: Color): integer; //-------------------------------------------- -//// +//// Перья //-------------------------------------------- -/// +/// Устанавливает цвет текущего пера procedure SetPenColor(c: Color); -/// +/// Возвращает цвет текущего пера function PenColor: Color; -/// +/// Устанавливает ширину текущего пера procedure SetPenWidth(Width: integer); -/// +/// Возвращает ширину текущего пера function PenWidth: integer; -/// +/// Устанавливает стиль текущего пера procedure SetPenStyle(style: DashStyle); -/// +/// Возвращает стиль текущего пера function PenStyle: DashStyle; -/// +/// Устанавливает режим текущего пера procedure SetPenMode(m: integer); -/// +/// Возвращает режим текущего пера function PenMode: integer; //2015.01> -/// +/// Устанавливает или отменяет режим закругленных концов линий procedure SetPenRoundCap(isRoundCap: boolean); -/// tru, +/// Возвращает truе, если установлен режим закругленных концов линий function PenRoundCap: boolean; //2015.01< -/// x- +/// Возвращают x-координату текущей позиции рисования function PenX: integer; -/// y- +/// Возвращают y-координату текущей позиции рисования function PenY: integer; //-------------------------------------------- -//// +//// Кисти //-------------------------------------------- -/// +/// Устанавливает цвет текущей кисти procedure SetBrushColor(c: Color); -/// +/// Возвращает цвет текущей кисти function BrushColor: Color; -/// +/// Устанавливает цвет текущей кисти procedure SetBrushStyle(bs: BrushStyleType); -/// +/// Возвращает цвет текущей кисти function BrushStyle: BrushStyleType; -/// +/// Устанавливает штриховку текущей кисти procedure SetBrushHatch(bh: HatchStyle); -/// +/// Возвращает штриховку текущей кисти function BrushHatch: HatchStyle; -/// +/// Устанавливает цвет заднего плана текущей штриховой кисти procedure SetHatchBrushBackgroundColor(c: Color); -/// +/// Возвращает цвет заднего плана текущей штриховой кисти function HatchBrushBackgroundColor: Color; -/// +/// Устанавливает второй цвет текущей градиентной кисти procedure SetGradientBrushSecondColor(c: Color); -/// +/// Возвращает второй цвет текущей градиентной кисти function GradientBrushSecondColor: Color; //-------------------------------------------- -//// +//// Шрифты //-------------------------------------------- -/// +/// Устанавливает размер текущего шрифта в пунктах procedure SetFontSize(size: integer); -/// +/// Возвращает размер текущего шрифта в пунктах function FontSize: integer; -/// +/// Устанавливает имя текущего шрифта procedure SetFontName(name: string); -/// +/// Возвращает имя текущего шрифта function FontName: string; -/// +/// Устанавливает цвет текущего шрифта procedure SetFontColor(c: Color); -/// +/// Возвращает цвет текущего шрифта function FontColor: Color; -/// +/// Устанавливает стиль текущего шрифта procedure SetFontStyle(fs: FontStyleType); -/// +/// Возвращает стиль текущего шрифта function FontStyle: FontStyleType; -/// s +/// Возвращает ширину строки s в пикселях при текущих настройках шрифта function TextWidth(s: string): integer; -/// s +/// Возвращает высоту строки s в пикселях при текущих настройках шрифта function TextHeight(s: string): integer; //-------------------------------------------- -//// +//// Графическое окно //-------------------------------------------- -/// +/// Очищает графическое окно белым цветом procedure ClearWindow; -/// c +/// Очищает графическое окно цветом c procedure ClearWindow(c: Color); -/// +/// Возвращает ширину клиентской части графического окна в пикселах function WindowWidth: integer; -/// +/// Возвращает высоту клиентской части графического окна в пикселах function WindowHeight: integer; -/// +/// Возвращает отступ графического окна от левого края экрана в пикселах function WindowLeft: integer; -/// +/// Возвращает отступ графического окна от верхнего края экрана в пикселах function WindowTop: integer; -/// +/// Возвращает центр графического окна function WindowCenter: Point; -/// True, , False +/// Возвращает True, если графическое окно имеет фиксированный размер, и False в противном случае function WindowIsFixedSize: boolean; -/// +/// Устанавливает ширину клиентской части графического окна в пикселах procedure SetWindowWidth(w: integer); -/// +/// Устанавливает высоту клиентской части графического окна в пикселах procedure SetWindowHeight(h: integer); -/// +/// Устанавливает отступ графического окна от левого края экрана в пикселах procedure SetWindowLeft(l: integer); -/// +/// Устанавливает отступ графического окна от верхнего края экрана в пикселах procedure SetWindowTop(t: integer); -/// , +/// Устанавливает, имеет ли графическое окно фиксированный размер procedure SetWindowIsFixedSize(b: boolean); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetWindowSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetWindowPos(l,t: integer); -/// ( WindowWidth) +/// Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) function GraphBoxWidth: integer; -/// ( WindowHeight) +/// Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) function GraphBoxHeight: integer; -/// +/// Возвращает отступ графического компонента от левого края окна в пикселах function GraphBoxLeft: integer; -/// +/// Возвращает отступ графического компонента от верхнего края окна в пикселах function GraphBoxTop: integer; -/// +/// Возвращает заголовок графического окна function WindowCaption: string; -/// +/// Возвращает заголовок графического окна function WindowTitle: string; -/// +/// Устанавливает заголовок графического окна procedure SetWindowCaption(s: string); -/// +/// Устанавливает заголовок графического окна procedure SetWindowTitle(s: string); -/// +/// Устанавливает ширину и высоту клиентской части графического окна в пикселах procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// fname +/// Сохраняет содержимое графического окна в файл с именем fname procedure SaveWindow(fname: string); -/// fname +/// Восстанавливает содержимое графического окна из файла с именем fname procedure LoadWindow(fname: string); -/// fname +/// Заполняет содержимое графического окна обоями из файла с именем fname procedure FillWindow(fname: string); -/// +/// Закрывает графическое окно и завершает приложение procedure CloseWindow; -/// +/// Возвращает ширину экрана в пикселях function ScreenWidth: integer; -/// +/// Возвращает высоту экрана в пикселях function ScreenHeight: integer; -/// +/// Центрирует графическое окно по центру экрана procedure CenterWindow; -/// +/// Максимизирует графическое окно procedure MaximizeWindow; -/// +/// Сворачивает графическое окно procedure MinimizeWindow; -/// +/// Возвращает графическое окно к нормальному размеру procedure NormalizeWindow; //-------------------------------------------- -//// +//// Буферизация рисования //-------------------------------------------- -/// . LockDrawing +/// Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure Redraw; ///-- procedure FullRedraw; -/// . Redraw +/// Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure LockDrawing; -/// +/// Снимает блокировку рисования на графическом окне и осуществляет его перерисовку procedure UnlockDrawing; //-------------------------------------------- -//// +//// Сглаживание //-------------------------------------------- -/// +/// Устанавливает режим сглаживания procedure SetSmoothing(sm: boolean); -/// +/// Включает режим сглаживания procedure SetSmoothingOn; -/// +/// Выключает режим сглаживания procedure SetSmoothingOff; -/// True, +/// Возвращает True, если режим сглаживания установлен function SmoothingIsOn: boolean; //-------------------------------------------- -//// +//// Вспомогательные подпрограммы //-------------------------------------------- -/// . +/// Блокирует прорисовку графики. Вызывается для синхронизации procedure LockGraphics; -/// . +/// Разблокирует прорисовку графики. Вызывается для синхронизации procedure UnLockGraphics; //------------------------------------------------------------ -//// +//// Подпрограммы для работы с системой координат //------------------------------------------------------------ -/// (x0,y0) +/// Устанавливает начало координат в точку (x0,y0) procedure SetCoordinateOrigin(x0,y0: integer); -/// +/// Устанавливает масштаб системы координат procedure SetCoordinateScale(sx,sy: real); -/// +/// Устанавливает поворот системы координат procedure SetCoordinateAngle(a: real); //---------------------------------------- -//// +//// Сервисные подпрограммы //---------------------------------------- -/// , +/// Возвращает прямоугольник, заданный координатами противоположных вершин function Rect(x1,y1,x2,y2: integer): System.Drawing.Rectangle; -/// +/// Возвращает прямоугольник клиентской части главного окна function ClientRectangle: System.Drawing.Rectangle; //------------------------------------------ -//// +//// Рисование графиков функций //------------------------------------------ -/// f [a,b] , x1,y1,x2,y2, +/// Рисует график функции f на отрезке [a,b] в прямоугольнике, задаваемом координатами x1,y1,x2,y2, procedure Draw(f: Func; a,b: real; x1,y1,x2,y2: integer); -/// f [a,b] r +/// Рисует график функции f на отрезке [a,b] в прямоугольнике r procedure Draw(f: Func; a,b: real; r: System.Drawing.Rectangle); -/// f [-5,5] r +/// Рисует график функции f на отрезке [-5,5] в прямоугольнике r procedure Draw(f: Func; r: System.Drawing.Rectangle); -/// f [a,b] +/// Рисует график функции f на отрезке [a,b] на полное графическое окно procedure Draw(f: Func; a,b: real); -/// f [-5,5] +/// Рисует график функции f на отрезке [-5,5] на полное графическое окно procedure Draw(f: Func); //------------------------------------------ -//// +//// Рисование изображений //------------------------------------------ -/// fname x,y +/// Выводит растровое изображение из файла с именем fname в позицию x,y procedure Draw(fname: string; x: integer := 0; y: integer := 0); -/// fname x,y, w h +/// Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его к размеру w на h procedure Draw(fname: string; x,y,w,h: integer); -/// fname x,y, Scale +/// Выводит растровое изображение из файла с именем fname в позицию x,y, масштабируя его с коэффициентом Scale procedure Draw(fname: string; x,y: integer; Scale: real); -/// . +/// Инициализирует графическое окно. Используется для внутренних целей procedure InitGraphABC; type -/// GraphABC +/// Тип пера GraphABC GraphABCPen = class private _NETPen: System.Drawing.Pen; @@ -626,27 +626,27 @@ type function GetRoundCap: boolean; //2015.01< public - /// .NET + /// Текущее перо .NET property NETPen: System.Drawing.Pen read _NETPen write SetNETPen; - /// + /// Цвет пера property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Ширина пера property Width: integer read GetWidth write SetWidth; - /// + /// Стиль пера property Style: DashStyle read GetStyle write SetStyle; - /// + /// Режим пера property Mode: integer read GetMode write SetMode; - /// X- + /// X-координата текущей позиции пера property X: integer read GetX; - /// Y- + /// Y-координата текущей позиции пера property Y: integer read GetY; //2015.01> - /// + /// Режим закругленных концов линий property RoundCap: boolean read GetRoundCap write SetRoundCap; //2015.01< end; -/// GraphABC +/// Тип кисти GraphABC GraphABCBrush = class private _NETBrush: System.Drawing.Brush; @@ -662,21 +662,21 @@ type procedure SetGradientSecondColor(c: GraphABC.Color); function GetGradientSecondColor: GraphABC.Color; public -/// .NET +/// Текущая кисть .NET property NETBrush: System.Drawing.Brush read _NETBrush write SetNETBrush; -/// +/// Цвет кисти property Color: GraphABC.Color read GetColor write SetColor; -/// +/// Стиль кисти property Style: BrushStyleType read GetStyle write SetStyle; -/// +/// Штриховка кисти property Hatch: HatchStyle read GetHatch write SetHatch; -/// +/// Цвет заднего плана штриховой кисти property HatchBackgroundColor: GraphABC.Color read GetHatchBackgroundColor write SetHatchBackgroundColor; -/// +/// Второй цвет градиентной кисти property GradientSecondColor: GraphABC.Color read GetGradientSecondColor write SetGradientSecondColor; end; -/// GraphABC +/// Тип шрифта GraphABC GraphABCFont = class private _NETFont: System.Drawing.Font; @@ -690,15 +690,15 @@ type procedure SetName(nm: string); function GetName: string; public -/// .NET +/// Текущий шрифт .NET property NETFont: System.Drawing.Font read _NETFont write SetNETFont; - /// + /// Цвет шрифта property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Стиль шрифта property Style: FontStyleType read GetStyle write SetStyle; - /// + /// Размер шрифта в пунктах property Size: integer read GetSize write SetSize; - /// + /// Наименование шрифта property Name: string read GetName write SetName; end; @@ -720,33 +720,33 @@ type function GetMatrix: System.Drawing.Drawing2D.Matrix; public constructor; - /// + /// Устанавливает параметры системы координат procedure SetTransform(x0,y0,angle,sx,sy: real); - /// + /// Устанавливает начало системы координат procedure SetOrigin(x0,y0: integer); - /// + /// Устанавливает масштаб системы координат procedure SetScale(sx,sy: real); - /// + /// Устанавливает масштаб системы координат procedure SetScale(scale: real); - /// ( OY , OX - ) + /// Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо) procedure SetMathematic; - /// ( OY , OX - ) + /// Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо) procedure SetStandard; - /// X- + /// X-координата начала координат относительно левого верхнего угла окна property OriginX: integer read GetOriginX write SetOriginX; - /// Y- + /// Y-координата начала координат относительно левого верхнего угла окна property OriginY: integer read GetOriginY write SetOriginY; - /// + /// Координаты начала координат относительно левого верхнего угла окна property Origin: Point read GetOrigin write SetOrigin; - /// + /// Угол поворота системы координат property Angle: real read GetAngle write SetAngle; - /// X + /// Масштаб системы координат по оси X property ScaleX: real read GetScaleX write SetScaleX; - /// Y + /// Масштаб системы координат по оси Y property ScaleY: real read GetScaleY write SetScaleY; - /// + /// Масштаб системы координат по обоим осям property Scale: real write SetScale; - /// 3x3 + /// Матрица 3x3 преобразований координат property Matrix: System.Drawing.Drawing2D.Matrix read GetMatrix; end; @@ -765,51 +765,51 @@ type procedure SetIsFixedSize(b: boolean); function GetIsFixedSize: boolean; public -/// +/// Отступ графического окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; -/// +/// Отступ графического окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; -/// +/// Ширина клиентской части графического окна в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота клиентской части графического окна в пикселах property Height: integer read GetHeight write SetHeight; -/// +/// Заголовок графического окна property Caption: string read GetCaption write SetCaption; -/// +/// Заголовок графического окна property Title: string read GetCaption write SetCaption; -/// +/// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; -/// +/// Очищает графическое окно белым цветом procedure Clear; -/// c +/// Очищает графическое окно цветом c procedure Clear(c: Color); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetPos(l,t: integer); -/// , +/// Устанавливает положение, размеры и цвет графического окна procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// 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; end; -/// GraphABC +/// Тип рисунка GraphABC Picture = class private bmp,savedbmp: Bitmap; @@ -824,125 +824,125 @@ type procedure SetTransparentColor(c: GraphABC.Color); function GetTransparentColor: GraphABC.Color; public -/// w h +/// Создает рисунок размера w на h пикселей constructor Create(w,h: integer); -/// fname +/// Создает рисунок из файла с именем fname constructor Create(fname: string); -/// r +/// Создает рисунок из прямоугольника r графического окна constructor Create(r: System.Drawing.Rectangle); // Create from screen -/// fname +/// Загружает рисунок из файла с именем fname procedure Load(fname: string); -/// fname +/// Сохраняет рисунок в файл с именем fname procedure Save(fname: string); -/// w h +/// Устанавливает размер рисунка w на h пикселей procedure SetSize(w,h: integer); -/// +/// Ширина рисунка в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота рисунка в пикселах property Height: integer read GetHeight write SetHeight; -/// ; TransparentColor +/// Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor property Transparent: boolean read istransp write SetTransparent; -/// . Transparent := True +/// Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True property TransparentColor: GraphABC.Color read GetTransparentColor write SetTransparentColor; -/// True, p, False . +/// Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным function Intersect(p: Picture): boolean; -/// (x,y) +/// Выводит рисунок в позиции (x,y) procedure Draw(x: integer := 0; y: integer := 0); -/// (x,y) g +/// Выводит рисунок в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; g: Graphics); -/// (x,y), (w,h) +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer); -/// (x,y), (w,h), g +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; g: Graphics); -/// , r, (x,y) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y) g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , r, (x,y), (w,h) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y), (w,h), g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , rotateAngle, (w,h) +/// Выводит рисунок, повернутый на угол rotateAngle, масштабируя его к размеру (w,h) procedure Picture.Draw(x,y: integer; rotateAngle: real; w,h: integer); -/// src p dst +/// Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); -/// src bmp dst +/// Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); -/// +/// Зеркально отображает рисунок относительно горизонтальной оси симметрии procedure FlipHorizontal; -/// +/// Зеркально отображает рисунок относительно вертикальной оси симметрии procedure FlipVertical; -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела (x,y) рисунка function GetPixel(x,y: integer): Color; -/// (x1,y1) (x2,y2) +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Выводит на рисунке окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// (x,y) r +/// Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); -/// +/// Очищает рисунок белым цветом procedure Clear; -/// c +/// Очищает рисунок цветом c procedure Clear(c: Color); end; @@ -961,58 +961,58 @@ type procedure Init; protected function IsInputKey(keyData: Keys): boolean; override; - procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // ! + procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // сами все перерисовываем! public constructor (w,h: integer); end; -/// w h p +/// Создает рисунок размера w на h пикселов и записывает его в переменную p procedure CreatePicture(var p: Picture; w,h: integer); -/// +/// Возвращает окно графического приложения function Window: GraphABCWindow; -/// +/// Возвращает главную форму графического приложения function MainForm: Form; -/// +/// Возвращает графический компонент function GraphABCControl: ABCControl; -/// +/// Возвращает текущее перо function Pen: GraphABCPen; -/// +/// Возвращает текущую кисть function Brush: GraphABCBrush; -/// +/// Возвращает текущий шрифт function Font: GraphABCFont; -/// GraphABC +/// Возвращает систему координат GraphABC function Coordinate: GraphABCCoordinate; function GraphWindowGraphics: Graphics; function GraphBufferGraphics: Graphics; function GraphBufferBitmap: Bitmap; -/// - +/// Устанавливает консольный ввод-вывод procedure SetConsoleIO; -/// - ( ) +/// Устанавливает ввод-вывод через графическое окно (по умолчанию) procedure SetGraphABCIO; var -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseDown: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши OnMouseUp: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 0, , 1, , 2, +/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseMove: procedure (x,y,mousebutton: integer); -/// +/// Событие нажатия клавиши OnKeyDown: procedure (key: integer); -/// +/// Событие отжатия клавиши OnKeyUp: procedure (key: integer); -/// +/// Событие нажатия символьной клавиши OnKeyPress: procedure (ch: char); -/// +/// Событие изменения размера графического окна OnResize: procedure; -/// +/// Событие закрытия графического окна OnClose: procedure; -/// . nil, +/// Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка RedrawProc: procedure; -/// +/// Следует ли рисовать во внеэкранном буфере DrawInBuffer: boolean; ///-- @@ -1025,8 +1025,8 @@ uses GraphABCHelper; const - FILE_NOT_FOUND_MESSAGE = ' {0} '; - BUTTON_ENTER_TEXT = ''; + FILE_NOT_FOUND_MESSAGE = 'Файл {0} не найден'; + BUTTON_ENTER_TEXT = 'Ввести'; type Proc1Integer = procedure(x: integer); @@ -1048,9 +1048,9 @@ type function SetProcessDPIAware(): boolean; external 'user32.dll'; var - // - + // строка-буфер ввода MainThread: Thread; - // - + // строка-буфер ввода readbuffer: string; _Window: GraphABCWindow := new GraphABCWindow; _MainForm: Form; @@ -1119,28 +1119,28 @@ procedure IOGraphABCSystem.write(obj: object); var rem := Window.Width - writecoords.X; if rem = 0 then Result := 0 - else if tw <= rem then // + else if tw <= rem then // строка влазит полностью Result := Length(s) else begin - // ns - + // ns - примерное количество символов до переноса var ns := Round(Length(s)*rem/TextWidth(s)); if ns>Length(s) then ns := Length(s); tw := TextWidth(s.Substring(0,ns)); if tw > rem then while tw > rem do - begin // ns, + begin // начинаем уменьшать ns, пока не влезет ns -= 1; tw := TextWidth(s.Substring(0,ns)); end else if tw = rem then begin - // + // ничего не делать end else begin // tw < rem - // ns + // увеличиваем ns while (ns1 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 01 - , 01 - увеличение, 00,' <0'); +// Assert(f>0,'масштабный коэффициент<0'); Width := round(Width*f); Height := round(Height*f); end; @@ -1293,7 +1293,7 @@ end; //------ BoundedObjectABC ------- constructor BoundedObjectABC.Create(x,y,w,h: integer; cl: GColor); begin -// ? +// А нужно ли это? Init(x,y,w,h,cl); end; @@ -1711,7 +1711,7 @@ begin fh := TextHeight(Text); if not __LockDrawingObjects then DrawAfterChangeBounds(r,Bounds) -// Redraw; // ! +// Redraw; // это неверно! end; procedure TextABC.SetTB(b: boolean); @@ -1833,7 +1833,7 @@ end; procedure RegularPolygonABC.SetWidth(Width: integer); begin if Width mod 2 = 0 then - Width := Width - 1; // + Width := Width - 1; // Ширина и высота должны быть нечетными ObjectABCSetSize(Width,Width); end; @@ -2233,7 +2233,7 @@ begin p := Picture.Create(fname); p.Transparent := True; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2244,7 +2244,7 @@ procedure MultiPictureABC.Init(x,y,w: integer; p: Picture); begin Self.p := p; if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; inherited Init(x,y,p); @@ -2308,7 +2308,7 @@ procedure MultiPictureABC.ChangePicture(w: integer; fname: string); begin p.Load(fname); if p.Width mod w <> 0 then - raise Exception.Create(' '); + raise Exception.Create('Неверно задана ширина картинки'); cur := 1; cnt := p.Width div w; Width := w; @@ -2324,7 +2324,7 @@ begin Inc(cnt); p1 := Picture.Create(fname); if (p1.Width<>Width) or (p1.Height<>Height) then - raise Exception.Create(' '+fname+' MultiPictureABC'); + raise Exception.Create('Размеры картинки в файле '+fname+' отличаются от размеров MultiPictureABC'); p1.Transparent := Transparent; p.Width := p.Width + Width; r1 := new System.Drawing.Rectangle(0,0,Width,Height); @@ -2335,7 +2335,7 @@ end; procedure MultiPictureABC.SetCurrentPicture(i: integer); begin if (i<1) or (i>Count) then - raise Exception.Create(' '+IntToStr(i)+' '+IntToStr(i)+'..'+IntToStr(Count)); + raise Exception.Create('Номер картинки '+IntToStr(i)+' находится вне диапазона '+IntToStr(i)+'..'+IntToStr(Count)); cur := i; Redraw; end; @@ -2679,7 +2679,7 @@ begin if ob=nil then Exit; ob.dx := x; - ob.dy := y; // dx dy + ob.dy := y; // использую dx и dy для задания клеточных координат на доске ob.Center := new Point(Left+CellSizeX*(x-1)+CellSizeX div 2,Top+CellSizeY*(y-1)+CellSizeY div 2); end; diff --git a/bin/Lib/LibForVB/ABCObjects/GraphABC.pas b/bin/Lib/LibForVB/ABCObjects/GraphABC.pas index 12cfe8fbf..e048d4f68 100644 --- a/bin/Lib/LibForVB/ABCObjects/GraphABC.pas +++ b/bin/Lib/LibForVB/ABCObjects/GraphABC.pas @@ -1,4 +1,4 @@ -/// , , , +///Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне unit GraphABC; //ne udaljat, IB 7.10.08 @@ -17,15 +17,15 @@ uses System.Drawing.Drawing2D; type -/// +/// Тип цвета Color = System.Drawing.Color; -/// +/// Тип стиля штриховки кисти HatchStyle = System.Drawing.Drawing2D.HatchStyle; -/// +/// Тип стиля штриховки пера DashStyle = System.Drawing.Drawing2D.DashStyle; -/// GraphABC +/// Тип исключения GraphABC GraphABCException = class(Exception) end; -/// +/// Тип точки Point = System.Drawing.Point; var @@ -222,82 +222,82 @@ type FontStyleType = (fsNormal, fsBold, fsItalic, fsBoldItalic, fsUnderline, fsBoldUnderline, fsItalicUnderline, fsBoldItalicUnderline); BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient, bsNone); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела с координатами (x,y) function GetPixel(x,y: integer): Color; -/// (x,y) +/// Устанавливает текущую позицию рисования в точку (x,y) procedure MoveTo(x,y: integer); -/// (x,y). (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer); -/// (x,y) c. (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer; c: Color); -/// (x1,y1) (x2,y2) +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Рисует окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r +/// Рисует заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Рисует ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Рисует кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); {procedure FillCircle(x,y,r: integer; c: Color); @@ -326,232 +326,232 @@ procedure Polygon(a: array of Point; c: Color); procedure Polyline(a: array of Point; c: Color);} //-------------------------------------------- -//// +//// Цвета //-------------------------------------------- -/// , (r), (g) (b) (r,g b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) function RGB(r,g,b: byte): Color; -/// , (r), (g) (b) (a) (a,r,g,b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) function ARGB(a,r,g,b: byte): Color; -/// r (r - 0 255) +/// Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) function RedColor(r: byte): Color; -/// g (g - 0 255) +/// Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) function GreenColor(g: byte): Color; -/// b (b - 0 255) +/// Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) function BlueColor(b: byte): Color; -/// +/// Возвращает случайный цвет function clRandom: Color; -/// +/// Возвращает красную составляющую цвета function GetRed(c: Color): integer; -/// +/// Возвращает зеленую составляющую цвета function GetGreen(c: Color): integer; -/// +/// Возвращает синюю составляющую цвета function GetBlue(c: Color): integer; -/// +/// Возвращает составляющую прозрачности цвета function GetAlpha(c: Color): integer; //-------------------------------------------- -//// +//// Перья //-------------------------------------------- -/// +/// Устанавливает цвет текущего пера procedure SetPenColor(c: Color); -/// +/// Возвращает цвет текущего пера function PenColor: Color; -/// +/// Устанавливает ширину текущего пера procedure SetPenWidth(Width: integer); -/// +/// Возвращает ширину текущего пера function PenWidth: integer; -/// +/// Устанавливает стиль текущего пера procedure SetPenStyle(style: DashStyle); -/// +/// Возвращает стиль текущего пера function PenStyle: DashStyle; -/// +/// Устанавливает режим текущего пера procedure SetPenMode(m: integer); -/// +/// Возвращает режим текущего пера function PenMode: integer; -/// x- +/// Возвращают x-координату текущей позиции рисования function PenX: integer; -/// y- +/// Возвращают y-координату текущей позиции рисования function PenY: integer; //-------------------------------------------- -//// +//// Кисти //-------------------------------------------- -/// +/// Устанавливает цвет текущей кисти procedure SetBrushColor(c: Color); -/// +/// Возвращает цвет текущей кисти function BrushColor: Color; -/// +/// Устанавливает цвет текущей кисти procedure SetBrushStyle(bs: BrushStyleType); -/// +/// Возвращает цвет текущей кисти function BrushStyle: BrushStyleType; -/// +/// Устанавливает штриховку текущей кисти procedure SetBrushHatch(bh: HatchStyle); -/// +/// Возвращает штриховку текущей кисти function BrushHatch: HatchStyle; -/// +/// Устанавливает цвет заднего плана текущей штриховой кисти procedure SetHatchBrushBackgroundColor(c: Color); -/// +/// Возвращает цвет заднего плана текущей штриховой кисти function HatchBrushBackgroundColor: Color; -/// +/// Устанавливает второй цвет текущей градиентной кисти procedure SetGradientBrushSecondColor(c: Color); -/// +/// Возвращает второй цвет текущей градиентной кисти function GradientBrushSecondColor: Color; //-------------------------------------------- -//// +//// Шрифты //-------------------------------------------- -/// +/// Устанавливает размер текущего шрифта в пунктах procedure SetFontSize(size: integer); -/// +/// Возвращает размер текущего шрифта в пунктах function FontSize: integer; -/// +/// Устанавливает имя текущего шрифта procedure SetFontName(name: string); -/// +/// Возвращает имя текущего шрифта function FontName: string; -/// +/// Устанавливает цвет текущего шрифта procedure SetFontColor(c: Color); -/// +/// Возвращает цвет текущего шрифта function FontColor: Color; -/// +/// Устанавливает стиль текущего шрифта procedure SetFontStyle(fs: FontStyleType); -/// +/// Возвращает стиль текущего шрифта function FontStyle: FontStyleType; -/// s +/// Возвращает ширину строки s в пикселях при текущих настройках шрифта function TextWidth(s: string): integer; -/// s +/// Возвращает высоту строки s в пикселях при текущих настройках шрифта function TextHeight(s: string): integer; //-------------------------------------------- -//// +//// Графическое окно //-------------------------------------------- -/// +/// Очищает графическое окно белым цветом procedure ClearWindow; -/// c +/// Очищает графическое окно цветом c procedure ClearWindow(c: Color); -/// +/// Возвращает ширину клиентской части графического окна в пикселах function WindowWidth: integer; -/// +/// Возвращает высоту клиентской части графического окна в пикселах function WindowHeight: integer; -/// +/// Возвращает отступ графического окна от левого края экрана в пикселах function WindowLeft: integer; -/// +/// Возвращает отступ графического окна от верхнего края экрана в пикселах function WindowTop: integer; -/// +/// Возвращает центр графического окна function WindowCenter: Point; -/// True, , False +/// Возвращает True, если графическое окно имеет фиксированный размер, и False в противном случае function WindowIsFixedSize: boolean; -/// +/// Устанавливает ширину клиентской части графического окна в пикселах procedure SetWindowWidth(w: integer); -/// +/// Устанавливает высоту клиентской части графического окна в пикселах procedure SetWindowHeight(h: integer); -/// +/// Устанавливает отступ графического окна от левого края экрана в пикселах procedure SetWindowLeft(l: integer); -/// +/// Устанавливает отступ графического окна от верхнего края экрана в пикселах procedure SetWindowTop(t: integer); -/// , +/// Устанавливает, имеет ли графическое окно фиксированный размер procedure SetWindowIsFixedSize(b: boolean); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetWindowSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetWindowPos(l,t: integer); -/// ( WindowWidth) +/// Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) function GraphBoxWidth: integer; -/// ( WindowHeight) +/// Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) function GraphBoxHeight: integer; -/// +/// Возвращает отступ графического компонента от левого края окна в пикселах function GraphBoxLeft: integer; -/// +/// Возвращает отступ графического компонента от верхнего края окна в пикселах function GraphBoxTop: integer; -/// +/// Возвращает заголовок графического окна function WindowCaption: string; -/// +/// Возвращает заголовок графического окна function WindowTitle: string; -/// +/// Устанавливает заголовок графического окна procedure SetWindowCaption(s: string); -/// +/// Устанавливает заголовок графического окна procedure SetWindowTitle(s: string); -/// +/// Устанавливает ширину и высоту клиентской части графического окна в пикселах procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// fname +/// Сохраняет содержимое графического окна в файл с именем fname procedure SaveWindow(fname: string); -/// fname +/// Восстанавливает содержимое графического окна из файла с именем fname procedure LoadWindow(fname: string); -/// fname +/// Заполняет содержимое графического окна обоями из файла с именем fname procedure FillWindow(fname: string); -/// +/// Закрывает графическое окно и завершает приложение procedure CloseWindow; -/// +/// Возвращает ширину экрана в пикселях function ScreenWidth: integer; -/// +/// Возвращает высоту экрана в пикселях function ScreenHeight: integer; -/// +/// Центрирует графическое окно по центру экрана procedure CenterWindow; -/// +/// Максимизирует графическое окно procedure MaximizeWindow; -/// +/// Сворачивает графическое окно procedure MinimizeWindow; -/// +/// Возвращает графическое окно к нормальному размеру procedure NormalizeWindow; //-------------------------------------------- -//// +//// Буферизация рисования //-------------------------------------------- -/// . LockDrawing +/// Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure Redraw; ///-- procedure FullRedraw; -/// . Redraw +/// Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure LockDrawing; -/// +/// Снимает блокировку рисования на графическом окне и осуществляет его перерисовку procedure UnlockDrawing; //-------------------------------------------- -//// +//// Сглаживание //-------------------------------------------- -/// +/// Устанавливает режим сглаживания procedure SetSmoothing(sm: boolean); -/// +/// Включает режим сглаживания procedure SetSmoothingOn; -/// +/// Выключает режим сглаживания procedure SetSmoothingOff; -/// True, +/// Возвращает True, если режим сглаживания установлен function SmoothingIsOn: boolean; //-------------------------------------------- -//// +//// Вспомогательные подпрограммы //-------------------------------------------- -/// . +/// Блокирует прорисовку графики. Вызывается для синхронизации procedure LockGraphics; -/// . +/// Разблокирует прорисовку графики. Вызывается для синхронизации procedure UnLockGraphics; //------------------------------------------------------------ -//// +//// Подпрограммы для работы с системой координат //------------------------------------------------------------ -/// (x0,y0) +/// Устанавливает начало координат в точку (x0,y0) procedure SetCoordinateOrigin(x0,y0: integer); -/// +/// Устанавливает масштаб системы координат procedure SetCoordinateScale(sx,sy: real); -/// +/// Устанавливает поворот системы координат procedure SetCoordinateAngle(a: real); -/// . +/// Инициализирует графическое окно. Используется для внутренних целей procedure InitGraphABC; type -/// GraphABC +/// Тип пера GraphABC GraphABCPen = class public _NETPen: System.Drawing.Pen; @@ -567,23 +567,23 @@ type function GetX: integer; function GetY: integer; public - /// .NET + /// Текущее перо .NET property NETPen: System.Drawing.Pen read _NETPen write SetNETPen; - /// + /// Цвет пера property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Ширина пера property Width: integer read GetWidth write SetWidth; - /// + /// Стиль пера property Style: DashStyle read GetStyle write SetStyle; - /// + /// Режим пера property Mode: integer read GetMode write SetMode; - /// X- + /// X-координата текущей позиции пера property X: integer read GetX; - /// Y- + /// Y-координата текущей позиции пера property Y: integer read GetY; end; -/// GraphABC +/// Тип кисти GraphABC GraphABCBrush = class public _NETBrush: System.Drawing.Brush; @@ -599,21 +599,21 @@ type procedure SetGradientSecondColor(c: GraphABC.Color); function GetGradientSecondColor: GraphABC.Color; public -/// .NET +/// Текущая кисть .NET property NETBrush: System.Drawing.Brush read _NETBrush write SetNETBrush; -/// +/// Цвет кисти property Color: GraphABC.Color read GetColor write SetColor; -/// +/// Стиль кисти property Style: BrushStyleType read GetStyle write SetStyle; -/// +/// Штриховка кисти property Hatch: HatchStyle read GetHatch write SetHatch; -/// +/// Цвет заднего плана штриховой кисти property HatchBackgroundColor: GraphABC.Color read GetHatchBackgroundColor write SetHatchBackgroundColor; -/// +/// Второй цвет градиентной кисти property GradientSecondColor: GraphABC.Color read GetGradientSecondColor write SetGradientSecondColor; end; -/// GraphABC +/// Тип шрифта GraphABC GraphABCFont = class public _NETFont: System.Drawing.Font; @@ -627,15 +627,15 @@ type procedure SetName(nm: string); function GetName: string; public -/// .NET +/// Текущий шрифт .NET property NETFont: System.Drawing.Font read _NETFont write SetNETFont; - /// + /// Цвет шрифта property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Стиль шрифта property Style: FontStyleType read GetStyle write SetStyle; - /// + /// Размер шрифта в пунктах property Size: integer read GetSize write SetSize; - /// + /// Наименование шрифта property Name: string read GetName write SetName; end; @@ -657,33 +657,33 @@ type function GetMatrix: System.Drawing.Drawing2D.Matrix; public constructor; - /// + /// Устанавливает параметры системы координат procedure SetTransform(x0,y0,angle,sx,sy: real); - /// + /// Устанавливает начало системы координат procedure SetOrigin(x0,y0: integer); - /// + /// Устанавливает масштаб системы координат procedure SetScale(sx,sy: real); - /// + /// Устанавливает масштаб системы координат procedure SetScale(scale: real); - /// ( OY , OX - ) + /// Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо) procedure SetMathematic; - /// ( OY , OX - ) + /// Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо) procedure SetStandard; - /// X- + /// X-координата начала координат относительно левого верхнего угла окна property OriginX: integer read GetOriginX write SetOriginX; - /// Y- + /// Y-координата начала координат относительно левого верхнего угла окна property OriginY: integer read GetOriginY write SetOriginY; - /// + /// Координаты начала координат относительно левого верхнего угла окна property Origin: Point read GetOrigin write SetOrigin; - /// + /// Угол поворота системы координат property Angle: real read GetAngle write SetAngle; - /// X + /// Масштаб системы координат по оси X property ScaleX: real read GetScaleX write SetScaleX; - /// Y + /// Масштаб системы координат по оси Y property ScaleY: real read GetScaleY write SetScaleY; - /// + /// Масштаб системы координат по обоим осям property Scale: real write SetScale; - /// 3x3 + /// Матрица 3x3 преобразований координат property Matrix: System.Drawing.Drawing2D.Matrix read GetMatrix; end; @@ -702,51 +702,51 @@ type procedure SetIsFixedSize(b: boolean); function GetIsFixedSize: boolean; public -/// +/// Отступ графического окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; -/// +/// Отступ графического окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; -/// +/// Ширина клиентской части графического окна в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота клиентской части графического окна в пикселах property Height: integer read GetHeight write SetHeight; -/// +/// Заголовок графического окна property Caption: string read GetCaption write SetCaption; -/// +/// Заголовок графического окна property Title: string read GetCaption write SetCaption; -/// +/// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; -/// +/// Очищает графическое окно белым цветом procedure Clear; -/// c +/// Очищает графическое окно цветом c procedure Clear(c: Color); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetPos(l,t: integer); -/// , +/// Устанавливает положение, размеры и цвет графического окна procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// 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; end; -/// GraphABC +/// Тип рисунка GraphABC Picture = class public bmp,savedbmp: Bitmap; @@ -761,123 +761,123 @@ type procedure SetTransparentColor(c: GraphABC.Color); function GetTransparentColor: GraphABC.Color; public -/// w h +/// Создает рисунок размера w на h пикселей constructor Create(w,h: integer); -/// fname +/// Создает рисунок из файла с именем fname constructor Create(fname: string); -/// r +/// Создает рисунок из прямоугольника r графического окна constructor Create(r: System.Drawing.Rectangle); // Create from screen -/// fname +/// Загружает рисунок из файла с именем fname procedure Load(fname: string); -/// fname +/// Сохраняет рисунок в файл с именем fname procedure Save(fname: string); -/// w h +/// Устанавливает размер рисунка w на h пикселей procedure SetSize(w,h: integer); -/// +/// Ширина рисунка в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота рисунка в пикселах property Height: integer read GetHeight write SetHeight; -/// ; TransparentColor +/// Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor property Transparent: boolean read istransp write SetTransparent; -/// . Transparent := True +/// Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True property TransparentColor: GraphABC.Color read GetTransparentColor write SetTransparentColor; -/// True, p, False . +/// Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным function Intersect(p: Picture): boolean; -/// (x,y) +/// Выводит рисунок в позиции (x,y) procedure Draw(x,y: integer); -/// (x,y) g +/// Выводит рисунок в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; g: Graphics); -/// (x,y), (w,h) +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer); -/// (x,y), (w,h), g +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; g: Graphics); -/// , r, (x,y) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y) g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , r, (x,y), (w,h) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y), (w,h), g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); -/// src p dst +/// Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); -/// src bmp dst +/// Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); -/// +/// Зеркально отображает рисунок относительно горизонтальной оси симметрии procedure FlipHorizontal; -/// +/// Зеркально отображает рисунок относительно вертикальной оси симметрии procedure FlipVertical; -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела (x,y) рисунка function GetPixel(x,y: integer): Color; -/// (x1,y1) (x2,y2) +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Выводит на рисунке окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// (x,y) r +/// Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); -/// +/// Очищает рисунок белым цветом procedure Clear; -/// c +/// Очищает рисунок цветом c procedure Clear(c: Color); end; @@ -896,26 +896,26 @@ type procedure Init; protected function IsInputKey(keyData: Keys): boolean; override; - procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // ! + procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // сами все перерисовываем! public constructor (w,h: integer); end; -/// w h p +/// Создает рисунок размера w на h пикселов и записывает его в переменную p procedure CreatePicture(var p: Picture; w,h: integer); -/// +/// Возвращает окно графического приложения function Window: GraphABCWindow; -/// +/// Возвращает главную форму графического приложения function MainForm: Form; -/// +/// Возвращает графический компонент function GraphABCControl: ABCControl; -/// +/// Возвращает текущее перо function Pen: GraphABCPen; -/// +/// Возвращает текущую кисть function Brush: GraphABCBrush; -/// +/// Возвращает текущий шрифт function Font: GraphABCFont; -/// GraphABC +/// Возвращает систему координат GraphABC function Coordinate: GraphABCCoordinate; function GraphWindowGraphics: Graphics; @@ -923,26 +923,26 @@ function GraphBufferGraphics: Graphics; function GraphBufferBitmap: Bitmap; var -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseDown: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши OnMouseUp: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 0, , 1, , 2, +/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseMove: procedure (x,y,mousebutton: integer); -/// +/// Событие нажатия клавиши OnKeyDown: procedure (key: integer); -/// +/// Событие отжатия клавиши OnKeyUp: procedure (key: integer); -/// +/// Событие нажатия символьной клавиши OnKeyPress: procedure (ch: char); -/// +/// Событие изменения размера графического окна OnResize: procedure; -/// +/// Событие закрытия графического окна OnClose: procedure; -/// . nil, +/// Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка RedrawProc: procedure; -/// +/// Следует ли рисовать во внеэкранном буфере DrawInBuffer: boolean := true; implementation @@ -952,7 +952,7 @@ uses GraphABCHelper; const - FILE_NOT_FOUND_MESSAGE = ' {0} '; + FILE_NOT_FOUND_MESSAGE = 'Файл {0} не найден'; type Proc1Integer = procedure(x: integer); @@ -995,8 +995,8 @@ var // ------------ GraphABCCoordinate ----------------- constructor GraphABCCoordinate.Create; begin - // 1 - ( OY - ) - // -1 - ( OY - ) + // 1 - компьютерная система координат (ось OY - вниз) + // -1 - компьютерная система координат (ось OY - вниз) coef := 1; end; @@ -1415,12 +1415,12 @@ begin Result := bmp.Height; end; -// +// Логика установки прозрачности // 1. Transparent := True - savedbmp:=bmp; bmp:=bmp.Clone; bmp.MakeTransparent(transpcolor); // 2. Transparent := False - bmp.Dispose; bmp := savedbmp; savedbmp := nil; // 3. Transparentcolor := c -// a) Transparent = False, -// ) Transparent = True, bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); +// a) Если Transparent = False, то просто присвоить +// б) Если Transparent = True, то bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); function Picture.GetTransparentColor: Color; begin @@ -1489,7 +1489,7 @@ begin gb := Graphics.FromImage(bmp); gb.DrawImage(oldbmp,0,0); oldbmp.Dispose; -// TODO , , - +// TODO не знаю, может, надо что-то делать для прозрачной { if istransp then begin end} @@ -2268,7 +2268,7 @@ begin ExtFloodFill(hdc, x, y, bc, 1); SelectObject(hdc, holdBrush); - var hbmp := bmp.GetHbitmap(); // GDI Bitmap + var hbmp := bmp.GetHbitmap(); // Создается GDI Bitmap var memdc: IntPtr := CreateCompatibleDC(hdc); SelectObject(memdc,hbmp); @@ -2477,7 +2477,7 @@ end; function BrushStyle: BrushStyleType; begin - Result := bsNone; // NETBrush + Result := bsNone; // Если кисть устанавливалась явным присваиванием NETBrush if Brush.NETBrush = CurrentSolidBrush then Result := bsSolid else if Brush.NETBrush = nil then @@ -2578,7 +2578,7 @@ end; function TextWidth(s: string): integer; begin -// 1. , 1 +// добавил 1. Без нее рисует, занимая 1 лишний пиксел Result := round(gr.MeasureString(s,Font.NETFont,0,new StringFormat(StringFormat.GenericTypographic)).Width) + 1; end; @@ -2681,7 +2681,7 @@ begin MainForm.Invoke(p,not b); end; -procedure ChangeFormPos(l,t: integer); // +procedure ChangeFormPos(l,t: integer); // вспомогательная begin MainForm.Left := l; MainForm.Top := t; @@ -2694,7 +2694,7 @@ begin f.Invoke(p,l,t); end; -procedure ChangeFormClientSize(w,h: integer); // +procedure ChangeFormClientSize(w,h: integer); // вспомогательная begin MainForm.ClientSize := new System.Drawing.Size(w,h); ResizeHelper; @@ -2830,7 +2830,7 @@ end; procedure Redraw; var tempbmp: Bitmap; begin - //TODO + //TODO Без этого падает если свернуто if MainForm.WindowState=FormWindowState.Minimized then exit; tempbmp := GetView(bmp,new System.Drawing.Rectangle(0,0,WindowWidth,WindowHeight)); diff --git a/bin/Lib/LibForVB/ABCObjects/GraphABCHelper.pas b/bin/Lib/LibForVB/ABCObjects/GraphABCHelper.pas index 29b32c03b..0a033eb35 100644 --- a/bin/Lib/LibForVB/ABCObjects/GraphABCHelper.pas +++ b/bin/Lib/LibForVB/ABCObjects/GraphABCHelper.pas @@ -61,7 +61,7 @@ var ColorLinePen: System.Drawing.Pen; function ImageIntersect(b1,b2: Bitmap): boolean; -// , b1 b2 - +// Предполагается, что b1 и b2 - одного размера type RGB = record r,g,b: byte; diff --git a/bin/Lib/LibForVB/GraphABC/GraphABC.pas b/bin/Lib/LibForVB/GraphABC/GraphABC.pas index 803701ee1..ce5b85d02 100644 --- a/bin/Lib/LibForVB/GraphABC/GraphABC.pas +++ b/bin/Lib/LibForVB/GraphABC/GraphABC.pas @@ -1,4 +1,4 @@ -/// , , , +///Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне library GraphABC; //ne udaljat, IB 7.10.08 @@ -17,15 +17,15 @@ uses System.Drawing.Drawing2D; type -/// +/// Тип цвета Color = System.Drawing.Color; -/// +/// Тип стиля штриховки кисти HatchStyle = System.Drawing.Drawing2D.HatchStyle; -/// +/// Тип стиля штриховки пера DashStyle = System.Drawing.Drawing2D.DashStyle; -/// GraphABC +/// Тип исключения GraphABC GraphABCException = class(Exception) end; -/// +/// Тип точки Point = System.Drawing.Point; var @@ -222,82 +222,82 @@ type FontStyleType = (fsNormal, fsBold, fsItalic, fsBoldItalic, fsUnderline, fsBoldUnderline, fsItalicUnderline, fsBoldItalicUnderline); BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient, bsNone); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел с координатами (x,y) цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела с координатами (x,y) function GetPixel(x,y: integer): Color; -/// (x,y) +/// Устанавливает текущую позицию рисования в точку (x,y) procedure MoveTo(x,y: integer); -/// (x,y). (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y). Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer); -/// (x,y) c. (x,y) +/// Рисует отрезок от текущей позиции до точки (x,y) цветом c. Текущая позиция переносится в точку (x,y) procedure LineTo(x,y: integer; c: Color); -/// (x1,y1) (x2,y2) +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Рисует отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Рисует окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Заполняет внутренность прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure FillRoundRect(x1,y1,x2,y2,w,h: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует границу прямоугольника со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure DrawRoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r +/// Рисует заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Рисует заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Рисует заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Рисует замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Рисует ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Рисует кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Рисует замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); {procedure FillCircle(x,y,r: integer; c: Color); @@ -326,232 +326,232 @@ procedure Polygon(a: array of Point; c: Color); procedure Polyline(a: array of Point; c: Color);} //-------------------------------------------- -//// +//// Цвета //-------------------------------------------- -/// , (r), (g) (b) (r,g b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255) function RGB(r,g,b: byte): Color; -/// , (r), (g) (b) (a) (a,r,g,b - 0 255) +/// Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие и прозрачность (a) (a,r,g,b - в диапазоне от 0 до 255) function ARGB(a,r,g,b: byte): Color; -/// r (r - 0 255) +/// Возвращает красный цвет с интенсивностью r (r - в диапазоне от 0 до 255) function RedColor(r: byte): Color; -/// g (g - 0 255) +/// Возвращает зеленый цвет с интенсивностью g (g - в диапазоне от 0 до 255) function GreenColor(g: byte): Color; -/// b (b - 0 255) +/// Возвращает синий цвет с интенсивностью b (b - в диапазоне от 0 до 255) function BlueColor(b: byte): Color; -/// +/// Возвращает случайный цвет function clRandom: Color; -/// +/// Возвращает красную составляющую цвета function GetRed(c: Color): integer; -/// +/// Возвращает зеленую составляющую цвета function GetGreen(c: Color): integer; -/// +/// Возвращает синюю составляющую цвета function GetBlue(c: Color): integer; -/// +/// Возвращает составляющую прозрачности цвета function GetAlpha(c: Color): integer; //-------------------------------------------- -//// +//// Перья //-------------------------------------------- -/// +/// Устанавливает цвет текущего пера procedure SetPenColor(c: Color); -/// +/// Возвращает цвет текущего пера function PenColor: Color; -/// +/// Устанавливает ширину текущего пера procedure SetPenWidth(Width: integer); -/// +/// Возвращает ширину текущего пера function PenWidth: integer; -/// +/// Устанавливает стиль текущего пера procedure SetPenStyle(style: DashStyle); -/// +/// Возвращает стиль текущего пера function PenStyle: DashStyle; -/// +/// Устанавливает режим текущего пера procedure SetPenMode(m: integer); -/// +/// Возвращает режим текущего пера function PenMode: integer; -/// x- +/// Возвращают x-координату текущей позиции рисования function PenX: integer; -/// y- +/// Возвращают y-координату текущей позиции рисования function PenY: integer; //-------------------------------------------- -//// +//// Кисти //-------------------------------------------- -/// +/// Устанавливает цвет текущей кисти procedure SetBrushColor(c: Color); -/// +/// Возвращает цвет текущей кисти function BrushColor: Color; -/// +/// Устанавливает цвет текущей кисти procedure SetBrushStyle(bs: BrushStyleType); -/// +/// Возвращает цвет текущей кисти function BrushStyle: BrushStyleType; -/// +/// Устанавливает штриховку текущей кисти procedure SetBrushHatch(bh: HatchStyle); -/// +/// Возвращает штриховку текущей кисти function BrushHatch: HatchStyle; -/// +/// Устанавливает цвет заднего плана текущей штриховой кисти procedure SetHatchBrushBackgroundColor(c: Color); -/// +/// Возвращает цвет заднего плана текущей штриховой кисти function HatchBrushBackgroundColor: Color; -/// +/// Устанавливает второй цвет текущей градиентной кисти procedure SetGradientBrushSecondColor(c: Color); -/// +/// Возвращает второй цвет текущей градиентной кисти function GradientBrushSecondColor: Color; //-------------------------------------------- -//// +//// Шрифты //-------------------------------------------- -/// +/// Устанавливает размер текущего шрифта в пунктах procedure SetFontSize(size: integer); -/// +/// Возвращает размер текущего шрифта в пунктах function FontSize: integer; -/// +/// Устанавливает имя текущего шрифта procedure SetFontName(name: string); -/// +/// Возвращает имя текущего шрифта function FontName: string; -/// +/// Устанавливает цвет текущего шрифта procedure SetFontColor(c: Color); -/// +/// Возвращает цвет текущего шрифта function FontColor: Color; -/// +/// Устанавливает стиль текущего шрифта procedure SetFontStyle(fs: FontStyleType); -/// +/// Возвращает стиль текущего шрифта function FontStyle: FontStyleType; -/// s +/// Возвращает ширину строки s в пикселях при текущих настройках шрифта function TextWidth(s: string): integer; -/// s +/// Возвращает высоту строки s в пикселях при текущих настройках шрифта function TextHeight(s: string): integer; //-------------------------------------------- -//// +//// Графическое окно //-------------------------------------------- -/// +/// Очищает графическое окно белым цветом procedure ClearWindow; -/// c +/// Очищает графическое окно цветом c procedure ClearWindow(c: Color); -/// +/// Возвращает ширину клиентской части графического окна в пикселах function WindowWidth: integer; -/// +/// Возвращает высоту клиентской части графического окна в пикселах function WindowHeight: integer; -/// +/// Возвращает отступ графического окна от левого края экрана в пикселах function WindowLeft: integer; -/// +/// Возвращает отступ графического окна от верхнего края экрана в пикселах function WindowTop: integer; -/// +/// Возвращает центр графического окна function WindowCenter: Point; -/// True, , False +/// Возвращает True, если графическое окно имеет фиксированный размер, и False в противном случае function WindowIsFixedSize: boolean; -/// +/// Устанавливает ширину клиентской части графического окна в пикселах procedure SetWindowWidth(w: integer); -/// +/// Устанавливает высоту клиентской части графического окна в пикселах procedure SetWindowHeight(h: integer); -/// +/// Устанавливает отступ графического окна от левого края экрана в пикселах procedure SetWindowLeft(l: integer); -/// +/// Устанавливает отступ графического окна от верхнего края экрана в пикселах procedure SetWindowTop(t: integer); -/// , +/// Устанавливает, имеет ли графическое окно фиксированный размер procedure SetWindowIsFixedSize(b: boolean); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetWindowSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetWindowPos(l,t: integer); -/// ( WindowWidth) +/// Возвращает ширину графического компонента в пикселах (по умолчанию совпадает с WindowWidth) function GraphBoxWidth: integer; -/// ( WindowHeight) +/// Возвращает высоту графического компонента в пикселах (по умолчанию совпадает с WindowHeight) function GraphBoxHeight: integer; -/// +/// Возвращает отступ графического компонента от левого края окна в пикселах function GraphBoxLeft: integer; -/// +/// Возвращает отступ графического компонента от верхнего края окна в пикселах function GraphBoxTop: integer; -/// +/// Возвращает заголовок графического окна function WindowCaption: string; -/// +/// Возвращает заголовок графического окна function WindowTitle: string; -/// +/// Устанавливает заголовок графического окна procedure SetWindowCaption(s: string); -/// +/// Устанавливает заголовок графического окна procedure SetWindowTitle(s: string); -/// +/// Устанавливает ширину и высоту клиентской части графического окна в пикселах procedure InitWindow(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// fname +/// Сохраняет содержимое графического окна в файл с именем fname procedure SaveWindow(fname: string); -/// fname +/// Восстанавливает содержимое графического окна из файла с именем fname procedure LoadWindow(fname: string); -/// fname +/// Заполняет содержимое графического окна обоями из файла с именем fname procedure FillWindow(fname: string); -/// +/// Закрывает графическое окно и завершает приложение procedure CloseWindow; -/// +/// Возвращает ширину экрана в пикселях function ScreenWidth: integer; -/// +/// Возвращает высоту экрана в пикселях function ScreenHeight: integer; -/// +/// Центрирует графическое окно по центру экрана procedure CenterWindow; -/// +/// Максимизирует графическое окно procedure MaximizeWindow; -/// +/// Сворачивает графическое окно procedure MinimizeWindow; -/// +/// Возвращает графическое окно к нормальному размеру procedure NormalizeWindow; //-------------------------------------------- -//// +//// Буферизация рисования //-------------------------------------------- -/// . LockDrawing +/// Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure Redraw; ///-- procedure FullRedraw; -/// . Redraw +/// Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure LockDrawing; -/// +/// Снимает блокировку рисования на графическом окне и осуществляет его перерисовку procedure UnlockDrawing; //-------------------------------------------- -//// +//// Сглаживание //-------------------------------------------- -/// +/// Устанавливает режим сглаживания procedure SetSmoothing(sm: boolean); -/// +/// Включает режим сглаживания procedure SetSmoothingOn; -/// +/// Выключает режим сглаживания procedure SetSmoothingOff; -/// True, +/// Возвращает True, если режим сглаживания установлен function SmoothingIsOn: boolean; //-------------------------------------------- -//// +//// Вспомогательные подпрограммы //-------------------------------------------- -/// . +/// Блокирует прорисовку графики. Вызывается для синхронизации procedure LockGraphics; -/// . +/// Разблокирует прорисовку графики. Вызывается для синхронизации procedure UnLockGraphics; //------------------------------------------------------------ -//// +//// Подпрограммы для работы с системой координат //------------------------------------------------------------ -/// (x0,y0) +/// Устанавливает начало координат в точку (x0,y0) procedure SetCoordinateOrigin(x0,y0: integer); -/// +/// Устанавливает масштаб системы координат procedure SetCoordinateScale(sx,sy: real); -/// +/// Устанавливает поворот системы координат procedure SetCoordinateAngle(a: real); -/// . +/// Инициализирует графическое окно. Используется для внутренних целей procedure InitGraphABC; type -/// GraphABC +/// Тип пера GraphABC GraphABCPen = class public _NETPen: System.Drawing.Pen; @@ -567,23 +567,23 @@ type function GetX: integer; function GetY: integer; public - /// .NET + /// Текущее перо .NET property NETPen: System.Drawing.Pen read _NETPen write SetNETPen; - /// + /// Цвет пера property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Ширина пера property Width: integer read GetWidth write SetWidth; - /// + /// Стиль пера property Style: DashStyle read GetStyle write SetStyle; - /// + /// Режим пера property Mode: integer read GetMode write SetMode; - /// X- + /// X-координата текущей позиции пера property X: integer read GetX; - /// Y- + /// Y-координата текущей позиции пера property Y: integer read GetY; end; -/// GraphABC +/// Тип кисти GraphABC GraphABCBrush = class public _NETBrush: System.Drawing.Brush; @@ -599,21 +599,21 @@ type procedure SetGradientSecondColor(c: GraphABC.Color); function GetGradientSecondColor: GraphABC.Color; public -/// .NET +/// Текущая кисть .NET property NETBrush: System.Drawing.Brush read _NETBrush write SetNETBrush; -/// +/// Цвет кисти property Color: GraphABC.Color read GetColor write SetColor; -/// +/// Стиль кисти property Style: BrushStyleType read GetStyle write SetStyle; -/// +/// Штриховка кисти property Hatch: HatchStyle read GetHatch write SetHatch; -/// +/// Цвет заднего плана штриховой кисти property HatchBackgroundColor: GraphABC.Color read GetHatchBackgroundColor write SetHatchBackgroundColor; -/// +/// Второй цвет градиентной кисти property GradientSecondColor: GraphABC.Color read GetGradientSecondColor write SetGradientSecondColor; end; -/// GraphABC +/// Тип шрифта GraphABC GraphABCFont = class public _NETFont: System.Drawing.Font; @@ -627,15 +627,15 @@ type procedure SetName(nm: string); function GetName: string; public -/// .NET +/// Текущий шрифт .NET property NETFont: System.Drawing.Font read _NETFont write SetNETFont; - /// + /// Цвет шрифта property Color: GraphABC.Color read GetColor write SetColor; - /// + /// Стиль шрифта property Style: FontStyleType read GetStyle write SetStyle; - /// + /// Размер шрифта в пунктах property Size: integer read GetSize write SetSize; - /// + /// Наименование шрифта property Name: string read GetName write SetName; end; @@ -657,33 +657,33 @@ type function GetMatrix: System.Drawing.Drawing2D.Matrix; public constructor; - /// + /// Устанавливает параметры системы координат procedure SetTransform(x0,y0,angle,sx,sy: real); - /// + /// Устанавливает начало системы координат procedure SetOrigin(x0,y0: integer); - /// + /// Устанавливает масштаб системы координат procedure SetScale(sx,sy: real); - /// + /// Устанавливает масштаб системы координат procedure SetScale(scale: real); - /// ( OY , OX - ) + /// Устанавливает правую систему координат (ось OY направлена вверх, ось OX - вправо) procedure SetMathematic; - /// ( OY , OX - ) + /// Устанавливает левую систему координат (ось OY направлена вниз, ось OX - вправо) procedure SetStandard; - /// X- + /// X-координата начала координат относительно левого верхнего угла окна property OriginX: integer read GetOriginX write SetOriginX; - /// Y- + /// Y-координата начала координат относительно левого верхнего угла окна property OriginY: integer read GetOriginY write SetOriginY; - /// + /// Координаты начала координат относительно левого верхнего угла окна property Origin: Point read GetOrigin write SetOrigin; - /// + /// Угол поворота системы координат property Angle: real read GetAngle write SetAngle; - /// X + /// Масштаб системы координат по оси X property ScaleX: real read GetScaleX write SetScaleX; - /// Y + /// Масштаб системы координат по оси Y property ScaleY: real read GetScaleY write SetScaleY; - /// + /// Масштаб системы координат по обоим осям property Scale: real write SetScale; - /// 3x3 + /// Матрица 3x3 преобразований координат property Matrix: System.Drawing.Drawing2D.Matrix read GetMatrix; end; @@ -702,51 +702,51 @@ type procedure SetIsFixedSize(b: boolean); function GetIsFixedSize: boolean; public -/// +/// Отступ графического окна от левого края экрана в пикселах property Left: integer read GetLeft write SetLeft; -/// +/// Отступ графического окна от верхнего края экрана в пикселах property Top: integer read GetTop write SetTop; -/// +/// Ширина клиентской части графического окна в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота клиентской части графического окна в пикселах property Height: integer read GetHeight write SetHeight; -/// +/// Заголовок графического окна property Caption: string read GetCaption write SetCaption; -/// +/// Заголовок графического окна property Title: string read GetCaption write SetCaption; -/// +/// Имеет ли графическое окно фиксированный размер property IsFixedSize: boolean read GetIsFixedSize write SetIsFixedSize; -/// +/// Очищает графическое окно белым цветом procedure Clear; -/// c +/// Очищает графическое окно цветом c procedure Clear(c: Color); -/// +/// Устанавливает размеры клиентской части графического окна в пикселах procedure SetSize(w,h: integer); -/// +/// Устанавливает отступ графического окна от левого верхнего края экрана в пикселах procedure SetPos(l,t: integer); -/// , +/// Устанавливает положение, размеры и цвет графического окна procedure Init(Left,Top,Width,Height: integer; BackColor: Color := clWhite); -/// 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; end; -/// GraphABC +/// Тип рисунка GraphABC Picture = class public bmp,savedbmp: Bitmap; @@ -761,123 +761,123 @@ type procedure SetTransparentColor(c: GraphABC.Color); function GetTransparentColor: GraphABC.Color; public -/// w h +/// Создает рисунок размера w на h пикселей constructor Create(w,h: integer); -/// fname +/// Создает рисунок из файла с именем fname constructor Create(fname: string); -/// r +/// Создает рисунок из прямоугольника r графического окна constructor Create(r: System.Drawing.Rectangle); // Create from screen -/// fname +/// Загружает рисунок из файла с именем fname procedure Load(fname: string); -/// fname +/// Сохраняет рисунок в файл с именем fname procedure Save(fname: string); -/// w h +/// Устанавливает размер рисунка w на h пикселей procedure SetSize(w,h: integer); -/// +/// Ширина рисунка в пикселах property Width: integer read GetWidth write SetWidth; -/// +/// Высота рисунка в пикселах property Height: integer read GetHeight write SetHeight; -/// ; TransparentColor +/// Прозрачность рисунка; прозрачный цвет задается свойством TransparentColor property Transparent: boolean read istransp write SetTransparent; -/// . Transparent := True +/// Прозрачный цвет рисунка. Должна быть установлена прозрачность Transparent := True property TransparentColor: GraphABC.Color read GetTransparentColor write SetTransparentColor; -/// True, p, False . +/// Возвращает True, если изображение данного рисунка пересекается с изображением рисунка p, и False в противном случае. Белый цвет считается прозрачным function Intersect(p: Picture): boolean; -/// (x,y) +/// Выводит рисунок в позиции (x,y) procedure Draw(x,y: integer); -/// (x,y) g +/// Выводит рисунок в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; g: Graphics); -/// (x,y), (w,h) +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer); -/// (x,y), (w,h), g +/// Выводит рисунок в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; g: Graphics); -/// , r, (x,y) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) procedure Draw(x,y: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y) g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y) на поверхность рисования g procedure Draw(x,y: integer; r: System.Drawing.Rectangle; g: Graphics); -/// , r, (x,y), (w,h) +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h) procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle); // r - part of Picture -/// , r, (x,y), (w,h), g +/// Выводит часть рисунка, заключенную в прямоугольнике r, в позиции (x,y), масштабируя его к размеру (w,h), на поверхность рисования g procedure Draw(x,y,w,h: integer; r: System.Drawing.Rectangle; g: Graphics); -/// src p dst +/// Копирует прямоугольник src рисунка p в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; p: Picture; src: System.Drawing.Rectangle); -/// src bmp dst +/// Копирует прямоугольник src битового образа bmp в прямоугольник dst текущего рисунка procedure CopyRect(dst: System.Drawing.Rectangle; bmp: Bitmap; src: System.Drawing.Rectangle); -/// +/// Зеркально отображает рисунок относительно горизонтальной оси симметрии procedure FlipHorizontal; -/// +/// Зеркально отображает рисунок относительно вертикальной оси симметрии procedure FlipVertical; -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure SetPixel(x,y: integer; c: Color); -/// (x,y) c +/// Закрашивает пиксел (x,y) рисунка цветом c procedure PutPixel(x,y: integer; c: Color); -/// (x,y) +/// Возвращает цвет пиксела (x,y) рисунка function GetPixel(x,y: integer): Color; -/// (x1,y1) (x2,y2) +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) procedure Line(x1,y1,x2,y2: integer); -/// (x1,y1) (x2,y2) c +/// Выводит на рисунке отрезок от точки (x1,y1) до точки (x2,y2) цветом c procedure Line(x1,y1,x2,y2: integer; c: Color); -/// (x,y) r +/// Заполняет на рисунке внутренность окружности с центром (x,y) и радиусом r procedure FillCircle(x,y,r: integer); -/// (x,y) r +/// Выводит на рисунке окружность с центром (x,y) и радиусом r procedure DrawCircle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillEllipse(x1,y1,x2,y2: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawEllipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRectangle(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Заполняет на рисунке внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure FillRect(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке границу ы прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2) procedure DrawRectangle(x1,y1,x2,y2: integer); -/// (x,y) r +/// Выводит на рисунке заполненную окружность с центром (x,y) и радиусом r procedure Circle(x,y,r: integer); -/// , , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) procedure Ellipse(x1,y1,x2,y2: integer); -/// , (x1,y1) (x2,y2) +/// Выводит на рисунке заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2) procedure Rectangle(x1,y1,x2,y2: integer); -/// ; (x1,y1) (x2,y2) , w h , +/// Выводит на рисунке заполненный прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев procedure RoundRect(x1,y1,x2,y2,w,h: integer); -/// (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Arc(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Заполняет на рисунке внутренность сектора окружности, ограниченного дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure FillPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure DrawPie(x,y,r,a1,a2: integer); -/// , (x,y) r, , a1 a2 OX (a1 a2 , ) +/// Выводит на рисунке заполненный сектор окружности, ограниченный дугой с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки) procedure Pie(x,y,r,a1,a2: integer); -/// , points +/// Выводит на рисунке замкнутую ломаную по точкам, координаты которых заданы в массиве points procedure DrawPolygon(points: array of Point); -/// , points +/// Заполняет на рисунке многоугольник, координаты вершин которого заданы в массиве points procedure FillPolygon(points: array of Point); -/// , points +/// Выводит на рисунке заполненный многоугольник, координаты вершин которого заданы в массиве points procedure Polygon(points: array of Point); -/// , points +/// Выводит на рисунке ломаную по точкам, координаты которых заданы в массиве points procedure Polyline(points: array of Point); -/// , points +/// Выводит на рисунке кривую по точкам, координаты которых заданы в массиве points procedure Curve(points: array of Point); -/// , points +/// Выводит на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure DrawClosedCurve(points: array of Point); -/// , points +/// Заполняет на рисунке замкнутую кривую по точкам, координаты которых заданы в массиве points procedure FillClosedCurve(points: array of Point); -/// , points +/// Выводит на рисунке заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points procedure ClosedCurve(points: array of Point); -/// s (x,y) +/// Выводит на рисунке строку s в прямоугольник к координатами левого верхнего угла (x,y) procedure TextOut(x,y: integer; s: string); -/// c, (x,y). +/// Заливает на рисунке область одного цвета цветом c, начиная с точки (x,y). procedure FloodFill(x,y: integer; c: Color); -/// +/// Очищает рисунок белым цветом procedure Clear; -/// c +/// Очищает рисунок цветом c procedure Clear(c: Color); end; @@ -896,26 +896,26 @@ type procedure Init; protected function IsInputKey(keyData: Keys): boolean; override; - procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // ! + procedure OnPaintBackground(e: PaintEventArgs); override; begin end; // сами все перерисовываем! public constructor (w,h: integer); end; -/// w h p +/// Создает рисунок размера w на h пикселов и записывает его в переменную p procedure CreatePicture(var p: Picture; w,h: integer); -/// +/// Возвращает окно графического приложения function Window: GraphABCWindow; -/// +/// Возвращает главную форму графического приложения function MainForm: Form; -/// +/// Возвращает графический компонент function GraphABCControl: ABCControl; -/// +/// Возвращает текущее перо function Pen: GraphABCPen; -/// +/// Возвращает текущую кисть function Brush: GraphABCBrush; -/// +/// Возвращает текущий шрифт function Font: GraphABCFont; -/// GraphABC +/// Возвращает систему координат GraphABC function Coordinate: GraphABCCoordinate; function GraphWindowGraphics: Graphics; @@ -923,26 +923,26 @@ function GraphBufferGraphics: Graphics; function GraphBufferBitmap: Bitmap; var -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие нажатия на кнопку мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseDown: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 1, , 2, +/// Событие отжатия кнопки мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 1, если отжата левая кнопка мыши, и 2, если отжата правая кнопка мыши OnMouseUp: procedure (x,y,mousebutton: integer); -/// . (x,y) - , mousebutton = 0, , 1, , 2, +/// Событие перемещения мыши. (x,y) - координаты курсора мыши в момент наступления события, mousebutton = 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши OnMouseMove: procedure (x,y,mousebutton: integer); -/// +/// Событие нажатия клавиши OnKeyDown: procedure (key: integer); -/// +/// Событие отжатия клавиши OnKeyUp: procedure (key: integer); -/// +/// Событие нажатия символьной клавиши OnKeyPress: procedure (ch: char); -/// +/// Событие изменения размера графического окна OnResize: procedure; -/// +/// Событие закрытия графического окна OnClose: procedure; -/// . nil, +/// Процедурная переменная перерисовки графического окна. Если равна nil, то используется стандартная перерисовка RedrawProc: procedure; -/// +/// Следует ли рисовать во внеэкранном буфере DrawInBuffer: boolean := true; implementation @@ -952,7 +952,7 @@ uses GraphABCHelper; const - FILE_NOT_FOUND_MESSAGE = ' {0} '; + FILE_NOT_FOUND_MESSAGE = 'Файл {0} не найден'; type Proc1Integer = procedure(x: integer); @@ -995,8 +995,8 @@ var // ------------ GraphABCCoordinate ----------------- constructor GraphABCCoordinate.Create; begin - // 1 - ( OY - ) - // -1 - ( OY - ) + // 1 - компьютерная система координат (ось OY - вниз) + // -1 - компьютерная система координат (ось OY - вниз) coef := 1; end; @@ -1415,12 +1415,12 @@ begin Result := bmp.Height; end; -// +// Логика установки прозрачности // 1. Transparent := True - savedbmp:=bmp; bmp:=bmp.Clone; bmp.MakeTransparent(transpcolor); // 2. Transparent := False - bmp.Dispose; bmp := savedbmp; savedbmp := nil; // 3. Transparentcolor := c -// a) Transparent = False, -// ) Transparent = True, bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); +// a) Если Transparent = False, то просто присвоить +// б) Если Transparent = True, то bmp.Dispose; bmp:=savedbmp.Clone; bmp.MakeTransparent(transpcolor); function Picture.GetTransparentColor: Color; begin @@ -1489,7 +1489,7 @@ begin gb := Graphics.FromImage(bmp); gb.DrawImage(oldbmp,0,0); oldbmp.Dispose; -// TODO , , - +// TODO не знаю, может, надо что-то делать для прозрачной { if istransp then begin end} @@ -2268,7 +2268,7 @@ begin ExtFloodFill(hdc, x, y, bc, 1); SelectObject(hdc, holdBrush); - var hbmp := bmp.GetHbitmap(); // GDI Bitmap + var hbmp := bmp.GetHbitmap(); // Создается GDI Bitmap var memdc: IntPtr := CreateCompatibleDC(hdc); SelectObject(memdc,hbmp); @@ -2477,7 +2477,7 @@ end; function BrushStyle: BrushStyleType; begin - Result := bsNone; // NETBrush + Result := bsNone; // Если кисть устанавливалась явным присваиванием NETBrush if Brush.NETBrush = CurrentSolidBrush then Result := bsSolid else if Brush.NETBrush = nil then @@ -2578,7 +2578,7 @@ end; function TextWidth(s: string): integer; begin -// 1. , 1 +// добавил 1. Без нее рисует, занимая 1 лишний пиксел Result := round(gr.MeasureString(s,Font.NETFont,0,new StringFormat(StringFormat.GenericTypographic)).Width) + 1; end; @@ -2681,7 +2681,7 @@ begin MainForm.Invoke(p,not b); end; -procedure ChangeFormPos(l,t: integer); // +procedure ChangeFormPos(l,t: integer); // вспомогательная begin MainForm.Left := l; MainForm.Top := t; @@ -2694,7 +2694,7 @@ begin f.Invoke(p,l,t); end; -procedure ChangeFormClientSize(w,h: integer); // +procedure ChangeFormClientSize(w,h: integer); // вспомогательная begin MainForm.ClientSize := new System.Drawing.Size(w,h); ResizeHelper; @@ -2830,7 +2830,7 @@ end; procedure Redraw; var tempbmp: Bitmap; begin - //TODO + //TODO Без этого падает если свернуто if MainForm.WindowState=FormWindowState.Minimized then exit; tempbmp := GetView(bmp,new System.Drawing.Rectangle(0,0,WindowWidth,WindowHeight)); diff --git a/bin/Lib/LibForVB/GraphABC/GraphABCHelper.pas b/bin/Lib/LibForVB/GraphABC/GraphABCHelper.pas index 29b32c03b..0a033eb35 100644 --- a/bin/Lib/LibForVB/GraphABC/GraphABCHelper.pas +++ b/bin/Lib/LibForVB/GraphABC/GraphABCHelper.pas @@ -61,7 +61,7 @@ var ColorLinePen: System.Drawing.Pen; function ImageIntersect(b1,b2: Bitmap): boolean; -// , b1 b2 - +// Предполагается, что b1 и b2 - одного размера type RGB = record r,g,b: byte; diff --git a/bin/Lib/Oberon00System.pas b/bin/Lib/Oberon00System.pas index ea3fbe35c..90db0e939 100644 --- a/bin/Lib/Oberon00System.pas +++ b/bin/Lib/Oberon00System.pas @@ -1,27 +1,27 @@ // (c) Mikst, Juliet 2010 -/// Oberon +/// Системный модуль для языка Oberon unit Oberon00System; interface type - /// (TRUE | FALSE) + /// Логический тип (TRUE | FALSE) BOOLEAN = System.boolean; - /// + /// Целое число INTEGER = System.Int32; - /// + /// Короткое целое число SHORTINT = System.byte; - /// + /// Длинное целое число LONGINT = System.int64; - /// + /// Вещественное число REAL = System.double; - /// + /// Длинное вещественное число LONGREAL = System.double; - /// + /// Символ CHAR = System.char; - /// + /// Строка STRING = System.string; - /// + /// Множество целых iset = array of integer; procedure Print(o: object); @@ -38,7 +38,7 @@ begin Console.Write(o); end; -/// +/// Вывести значение procedure Println(o: object); begin Console.WriteLine(o); diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 2c406251f..f142210b0 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -1,7 +1,7 @@ // Copyright (c) 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) -/// +/// Стандартный модуль /// !! System unit unit PABCSystem; @@ -28,50 +28,50 @@ uses System; const - /// shortint + /// Максимальное значение типа shortint MaxShortInt = shortint.MaxValue; - /// byte + /// Максимальное значение типа byte MaxByte = byte.MaxValue; - /// smallint + /// Максимальное значение типа smallint MaxSmallInt = smallint.MaxValue; - /// word + /// Максимальное значение типа word MaxWord = word.MaxValue; - /// longword + /// Максимальное значение типа longword MaxLongWord = longword.MaxValue; - /// int64 + /// Максимальное значение типа int64 MaxInt64 = int64.MaxValue; - /// uint64 + /// Максимальное значение типа uint64 MaxUInt64 = uint64.MaxValue; - /// double + /// Максимальное значение типа double MaxDouble = real.MaxValue; - /// double + /// Минимальное положительное значение типа double MinDouble = real.Epsilon; - /// real + /// Максимальное значение типа real MaxReal = real.MaxValue; - /// real + /// Минимальное положительное значение типа real MinReal = real.Epsilon; - /// single + /// Максимальное значение типа single MaxSingle = single.MaxValue; - /// single + /// Минимальное положительное значение типа single MinSingle = single.Epsilon; - /// integer + /// Максимальное значение типа integer MaxInt = integer.MaxValue; - /// Pi + /// Константа Pi /// !! Pi constant Pi = 3.141592653589793; - /// E + /// Константа E /// !! E constant E = 2.718281828459045; END_OF_LINE_SYMBOL = #10; - /// + /// Константа перехода на новую строку /// !! The newline string defined for this environment. NewLine = System.Environment.NewLine; function RunTimeSizeOf(t: System.Type): integer; -/// , +/// Содержит аргумены командой строки, с которыми была запущена программа var CommandLineArgs: array of string; @@ -79,16 +79,16 @@ var var __CONFIG__: Dictionary := new Dictionary; -// , +//Маркер того, что это системный модуль ///-- const __IS_SYSTEM_MODULE = true; type - /// + /// Базовый тип объектов object = System.Object; - /// + /// Базовый тип исключений exception = System.Exception; double = System.Double; @@ -97,127 +97,127 @@ type cardinal = System.UInt32; - /// 128- + /// Представляет 128-битное вещественное число /// !! Represents a decimal number decimal = System.Decimal; - /// + /// Представляет произвольно большое целое число BigInteger = System.Numerics.BigInteger; - /// + /// Представляет кортеж Tuple = System.Tuple; - /// + /// Представляет динамический массив List = System.Collections.Generic.List; - /// IComparer + /// Представляет базовый класс для реализации интерфейса IComparer Comparer = System.Collections.Generic.Comparer; - /// + /// Представляет множество значений HashSet = System.Collections.Generic.HashSet; - /// ( -), - + /// Представляет ассоциативный массив (набор пар Ключ-Значение), реализованный на базе хеш-таблицы Dictionary = System.Collections.Generic.Dictionary; - /// - + /// Представляет пару Ключ-Значение для ассоциативного массива KeyValuePair = System.Collections.Generic.KeyValuePair; - /// + /// Представляет двусвязный список LinkedList = System.Collections.Generic.LinkedList; - /// + /// Представляет узел двусвязного списка LinkedListNode = System.Collections.Generic.LinkedListNode; - /// - , " - " + /// Представляет очередь - набор элементов, реализованных по принципу "первый вошел-первый вышел" Queue = System.Collections.Generic.Queue; - /// , + /// Представляет ассоциативный массив, реализованный на базе бинарного дерева поиска SortedDictionary = System.Collections.Generic.SortedDictionary; - /// ( -), + /// Представляет ассоциативный массив (набор пар ключ-значение), реализованный на базе динамического массива пар SortedList = System.Collections.Generic.SortedList; SortedSet = System.Collections.Generic.SortedSet; - /// - , " - " + /// Представляет стек - набор элементов, реализованных по принципу "последний вошел-первый вышел" Stack = System.Collections.Generic.Stack; - /// , + /// Представляет интерфейс, предоставляющий перечислитель для перебора элементов коллекции IEnumerable = System.Collections.Generic.IEnumerable; - /// + /// Представляет интерфейс для перебора элементов коллекции IEnumerator = System.Collections.Generic.IEnumerator; - /// + /// Представляет интерфейс для сравнения двух элементов IComparer = System.Collections.Generic.IComparer; - /// + /// Представляет изменяемую строку символов StringBuilder = System.Text.StringBuilder; - /// + /// Тип кодировки символов Encoding = System.Text.Encoding; - /// + /// Представляет действие без параметров Action0 = System.Action; - /// + /// Представляет действие с одним параметром Action = System.Action; - /// + /// Представляет действие с двумя параметрами Action2 = System.Action; - /// + /// Представляет действие с тремя параметрами Action3 = System.Action; - /// + /// Представляет функцию без параметров Func0 = System.Func; - /// + /// Представляет функцию с одним параметром Func = System.Func; - /// + /// Представляет функцию с двумя параметрами Func2 = System.Func; - /// + /// Представляет функцию с тремя параметрами Func3 = System.Func; - /// , + /// Представляет функцию с одним параметром целого типа, возвращающую целое IntFunc = Func; - /// , + /// Представляет функцию с одним параметром вещественного типа, возвращающую вещественное RealFunc = Func; - /// , + /// Представляет функцию с одним параметром строкового типа, возвращающую строковое StringFunc = Func; - /// , boolean + /// Представляет функцию с одним параметром, возвращающую boolean Predicate = System.Predicate; - /// , boolean + /// Представляет функцию с двумя параметрами, возвращающую boolean Predicate2 = System.Predicate; - /// , boolean + /// Представляет функцию с тремя параметрами, возвращающую boolean Predicate3 = System.Predicate; - /// + /// Представляет регулярное выражение Regex = System.Text.RegularExpressions.Regex; - /// + /// Представляет результаты из отдельного совпадения регулярного выражения Match = System.Text.RegularExpressions.Match; - /// , Regex.Replace + /// Представляет метод, вызываемый при обнаружении совпадения в Regex.Replace MatchEvaluator = System.Text.RegularExpressions.MatchEvaluator; - /// + /// Представляет набор успешных совпадений регулярного выражения MatchCollection = System.Text.RegularExpressions.MatchCollection; - /// + /// Представляет параметры регулярного выражения RegexOptions = System.Text.RegularExpressions.RegexOptions; - /// Regex.Match + /// Представляет результаты из одной группы при выполнении Regex.Match RegexGroup = System.Text.RegularExpressions.Group; - /// Regex.Match + /// Представляет результаты из набора групп при выполнении Regex.Match RegexGroupCollection = System.Text.RegularExpressions.GroupCollection; //------------------------------------------------------------------------------ @@ -245,62 +245,62 @@ type PSingle = ^single;//single //16 PReal = ^real;//double - PDouble = ^double;//double //, , + PDouble = ^double;//double //ошибка, не сохранится, надо исправить //------------------------------------------------------------------------------ ShortString = string[255]; - /// + /// Тип текстового файла Text = class private fi: FileInfo; sr: StreamReader; sw: StreamWriter; public - /// 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; - /// 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; - /// + /// Записывает в текстовый файл значения procedure Write(params o: array of Object); - /// + /// Записывает в текстовый файл значения и переходит на следующую строку procedure Writeln(params o: array of Object); - /// True, + /// Возвращает True, если достигнут конец файла function Eof: boolean; - /// True, + /// Возвращает True, если достигнут конец строки function Eoln: boolean; - /// + /// Закрывает файл procedure Close; - /// , True, + /// Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла function SeekEof: boolean; - /// , True, + /// Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в файле function SeekEoln: boolean; - /// + /// Записывает содержимое буфера файла на диск procedure Flush; - /// + /// Удаляет файл procedure Erase; - /// , newname. + /// Переименовывает файл, давая ему имя newname. procedure Rename(newname: string); - /// + /// Возвращает имя файла function Name: string; - /// + /// Возвращает полное имя файла function FullName: string; - /// + /// Возвращает в виде строки содержимое файла от текущего положения до конца function ReadToEnd: string; end; @@ -309,7 +309,7 @@ type RangeException = class(SystemException) end; CommandLineArgumentOutOfRangeException = class(SystemException) end; - // + // Вспомогательный тип для диапазонного типа ///-- Diapason = record low, high: integer; @@ -324,7 +324,7 @@ type public function GetHashCode(obj: System.Object): integer; end; - // + // Вспомогательный тип для множества ///-- TypedSet = class (System.Collections.IEnumerable) private @@ -372,10 +372,10 @@ function Union(s1, s2: TypedSet): TypedSet; ///-- function Subtract(s1, s2: TypedSet): TypedSet; ///- Include(var s : set of T; el : T) -/// el s +///Добавляет елемент el во множество s procedure Include(var s: TypedSet; el: object); ///- Exclude(var s : set of T; el : T) -/// el s +///Удаляет элемент el из множества s procedure Exclude(var s: TypedSet; el: object); ///-- function Intersect(s1, s2: TypedSet): TypedSet; @@ -435,18 +435,18 @@ type br: BinaryReader; bw: BinaryWriter; public - /// + /// Закрывает файл procedure Close; - /// , + /// Усекает двоичный файл, отбрасывая все элементы с позиции файлового указателя procedure Truncate; - /// True, + /// Возвращает True, если достигнут конец файла function Eof: boolean; - /// + /// Удаляет файл procedure Erase; - /// , newname. + /// Переименовывает файл, давая ему имя newname. procedure Rename(newname: string); ///- write(f: file; a,b,...) - /// a,b,... + /// Выводит значения a,b,... в двоичный файл procedure Write(params vals: array of object); end; @@ -462,11 +462,11 @@ type constructor Create(ElementType: System.Type); constructor Create(ElementType: System.Type; offs: integer; params offsets: array of integer); function ToString: string; override; - /// + /// Возвращает текущую позицию файлового указателя в типизированном файле function FilePos: int64; - /// + /// Возвращает количество элементов в типизированном файле function FileSize: int64; - /// n + /// Устанавливает текущую позицию файлового указателя в типизированном файле на элемент с номером n procedure Seek(n: int64); end; @@ -474,15 +474,15 @@ type BinaryFile = sealed class(AbstractBinaryFile) public function ToString: string; override; - /// + /// Возвращает текущую позицию файлового указателя в бестиповом файле function FilePos: int64; - /// + /// Возвращает количество байт в бестиповом файле function FileSize: int64; - /// n + /// Устанавливает текущую позицию файлового указателя в бестиповом файле на байт с номером n procedure Seek(n: int64); end; - /// / + /// Интерфейс подсистемы ввода/вывода IOSystem = interface function peek: integer; function read_symbol: char; @@ -506,11 +506,11 @@ type end; IOStandardSystem = class(IOSystem) - state := 0; // 0 - char, 1 - char - sym: integer; // 1 Peek + state := 0; // 0 - нет символа в буфере char, 1 - есть символ в буфере char + sym: integer; // буфер в 1 символ для моделирования Peek в консоли public - function peek: integer; virtual; // state sym - function read_symbol: char; virtual; // state sym + function peek: integer; virtual; // использует state и sym + function read_symbol: char; virtual; // использует state и sym procedure read(var x: integer); virtual; procedure read(var x: real); virtual; procedure read(var x: char); virtual; @@ -542,7 +542,7 @@ type function GetEnumerator: System.Collections.IEnumerator; end; - /// , generic- + ///Базовый класс для исключений, бросаемых при создании инстанции generic-типа BadGenericInstanceParameterException = class(Exception) protected InstanceType: System.Type; @@ -550,19 +550,19 @@ type constructor Create(ActualParameterType: System.Type); end; - /// + ///Бросается если тип непригоден для указателей CanNotUseTypeForPointersException = class(BadGenericInstanceParameterException) public function ToString: string; override; end; - /// + ///Бросается если тип непригоден для типизированных файлов CanNotUseTypeForTypedFilesException = class(BadGenericInstanceParameterException) public function ToString: string; override; end; - /// + ///Бросается если тип непригоден для бинарных файлов CanNotUseTypeForFilesException = class(BadGenericInstanceParameterException) public function ToString: string; override; @@ -582,7 +582,7 @@ function GetResourceStream(ResourceFileName: string): Stream; // read - readln // ----------------------------------------------------- ///- read(a,b,...) -/// a,b,... +/// Вводит значения a,b,... с клавиатуры procedure Read; ///-- procedure Read(var x: integer); @@ -611,48 +611,48 @@ procedure Read(var x: single); ///-- procedure Read(var x: boolean); -/// 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; -/// 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; -/// integer, +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры function ReadInteger(prompt: string): integer; -/// real, +/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры function ReadReal(prompt: string): real; -/// char, +/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры function ReadChar(prompt: string): char; -/// string, +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры function ReadString(prompt: string): string; -/// boolean, +/// Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры function ReadBoolean(prompt: string): boolean; -/// integer, , +/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnInteger(prompt: string): integer; -/// real, , +/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnReal(prompt: string): real; -/// char, , +/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnChar(prompt: string): char; -/// string, , +/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnString(prompt: string): string; -/// boolean, , +/// Выводит приглашение к вводу и возвращает значение типа boolean, введенное с клавиатуры, и переходит на следующую строку ввода function ReadlnBoolean(prompt: string): boolean; @@ -662,11 +662,11 @@ procedure ReadShortString(var s: string; n: integer); procedure ReadShortStringFromFile(f: Text; var s: string; n: integer); ///- readln(a,b,...) -/// a,b,... +/// Вводит значения a,b,... с клавиатуры и осуществляет переход на следующую строку procedure Readln; ///- read(f,a,b,...) -/// a,b,... f +/// Вводит значения a,b,... из файла f procedure Read(f: Text); ///-- procedure Read(f: Text; var x: integer); @@ -696,36 +696,36 @@ procedure Read(f: Text; var x: single); procedure Read(f: Text; var x: boolean); ///- readln(f: Text; a,b,...) -/// a,b,... f +/// Вводит значения a,b,... из текстового файла f и осуществляет переход на следующую строку procedure Readln(f: Text); ///-- procedure Readln(f: Text; var x: string); -/// integer, f +/// Возвращает значение типа integer, введенное из текстового файла f function ReadInteger(f: Text): integer; -/// real, f +/// Возвращает значение типа real, введенное из текстового файла f function ReadReal(f: Text): real; -/// char, f +/// Возвращает значение типа char, введенное из текстового файла f function ReadChar(f: Text): char; -/// string, f +/// Возвращает значение типа string, введенное из текстового файла f function ReadString(f: Text): string; -/// boolean, f +/// Возвращает значение типа boolean, введенное из текстового файла f function ReadBoolean(f: Text): boolean; -/// integer, f, +/// Возвращает значение типа integer, введенное из текстового файла f, и переходит на следующую строку function ReadlnInteger(f: Text): integer; -/// real, f, +/// Возвращает значение типа real, введенное из текстового файла f, и переходит на следующую строку function ReadlnReal(f: Text): real; -/// char, f, +/// Возвращает значение типа char, введенное из текстового файла f, и переходит на следующую строку function ReadlnChar(f: Text): char; -/// string, f, +/// Возвращает значение типа string, введенное из текстового файла f, и переходит на следующую строку function ReadlnString(f: Text): string; -/// boolean, f, +/// Возвращает значение типа boolean, введенное из текстового файла f, и переходит на следующую строку function ReadlnBoolean(f: Text): boolean; -/// True, +/// Возвращает True, если достигнут конец строки function Eoln: boolean; -/// True, +/// Возвращает True, если достигнут конец файла function Eof: boolean; ///-- @@ -746,7 +746,7 @@ type // write - writeln // ----------------------------------------------------- ///- write(a,b,...) -/// a,b,... +/// Выводит значения a,b,... на экран procedure write; ///-- procedure write(obj: object); @@ -756,7 +756,7 @@ procedure write(obj1, obj2: object); procedure write(params args: array of object); ///- writeln(a,b,...) -/// a,b,... +/// Выводит значения a,b,... на экран и осуществляет переход на новую строку ///!!- writeln(a,b,...) /// Writes a,b,... to standart output stream and appends newline procedure writeln; @@ -770,7 +770,7 @@ procedure writeln(obj1, obj2: object); procedure writeln(params args: array of object); ///- write(f: Text; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в текстовый файл f procedure write(f: Text); ///-- procedure write(f: Text; val: object); @@ -778,161 +778,161 @@ procedure write(f: Text; val: object); procedure write(f: Text; params args: array of object); ///- writeln(f: Text; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в текстовый файл f и осуществляет переход на новую строку procedure writeln(f: Text); ///-- procedure writeln(f: Text; val: object); ///-- procedure writeln(f: Text; params args: array of object); -/// args formatstr +/// Выводит значения args согласно форматной строке formatstr procedure WriteFormat(formatstr: string; params args: array of object); -/// args formatstr +/// Выводит значения args согласно форматной строке formatstr и осуществляет переход на новую строку procedure WritelnFormat(formatstr: string; params args: array of object); -/// args f formatstr +/// Выводит значения args в текстовый файл f согласно форматной строке formatstr procedure WriteFormat(f: Text; formatstr: string; params args: array of object); -/// args f formatstr -/// +/// Выводит значения args в текстовый файл f согласно форматной строке formatstr +///и осуществляет переход на новую строку procedure WritelnFormat(f: Text; formatstr: string; params args: array of object); -/// s +/// Выводит значения s на экран procedure Print(s: string); -/// args , +/// Выводит значения args на экран, выводя после каждого значения пробел procedure Print(params args: array of object); -/// args , , +/// Выводит значения args на экран, выводя после каждого значения пробел, и переходит на новую строчку procedure Println(params args: array of object); -/// args f, +/// Выводит значения args в текстовый файл f, выводя после каждого значения пробел procedure Print(f: Text; params args: array of object); -/// args f, , +/// Выводит значения args в текстовый файл f, выводя после каждого значения пробел, и переходит на новую строчку procedure Println(f: Text; params args: array of object); // ----------------------------------------------------- // Text files // ----------------------------------------------------- -/// f name +/// Связывает файловую переменную f с именем файла name procedure Assign(f: Text; name: string); -/// f name +/// Связывает файловую переменную f с именем файла name procedure AssignFile(f: Text; name: string); -/// f +/// Закрывает файл f procedure Close(f: Text); -/// f +/// Закрывает файл f procedure CloseFile(f: Text); -/// f +/// Открывает текстовый файл f на чтение procedure Reset(f: Text); -/// f name +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл на чтение procedure Reset(f: Text; name: string); -/// f , . , +/// Открывает текстовый файл f на запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется procedure Rewrite(f: Text); -/// f name f , +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл f на запись, при этом обнуляя его содержимое procedure Rewrite(f: Text; name: string); -/// f +/// Открывает текстовый f файл на дополнение procedure Append(f: Text); -/// f name +/// Связывает файловую переменную f с именем файла name и открывает текстовый файл на дополнение procedure Append(f: Text; name: string); -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на чтение function OpenRead(fname: string): Text; -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на запись function OpenWrite(fname: string): Text; -/// fname, +/// Возвращает текстовый файл с именем fname, открытый на дополнение function OpenAppend(fname: string): Text; -/// True, f +/// Возвращает True, если достигнут конец файла f ///!! Returns True if the file-pointer has reached the end of the file function Eof(f: Text): boolean; -/// True, f +/// Возвращает True, если достигнут конец строки в файле f function Eoln(f: Text): boolean; -/// , True, f +/// Пропускает пробельные символы, после чего возвращает True, если достигнут конец файла f function SeekEof(f: Text): boolean; -/// , True, f +/// Пропускает пробельные символы, после чего возвращает True, если достигнут конец строки в файле f function SeekEoln(f: Text): boolean; -/// +/// Записывает содержимое буфера файла на диск procedure Flush(f: Text); -/// , f +/// Удаляет файл, связанный с файловой переменной f procedure Erase(f: Text); -/// , f, newname. +/// Переименовывает файл, связаный с файловой переменной f, давая ему имя newname. procedure Rename(f: Text; newname: string); ///-- procedure TextFileInit(var f: Text); -/// +/// Считывает строки из файла и превращает их в последовательность строк function ReadLines(path: string): sequence of string; -/// en +/// Считывает строки из файла с кодировкой en и превращает их в последовательность строк function ReadLines(path: string; en: Encoding): sequence of string; -/// +/// Считывает строки из файла в массив строк function ReadAllLines(path: string): array of string; -/// en +/// Считывает строки из файла с кодировкой en в массив строк function ReadAllLines(path: string; en: Encoding): array of string; -/// +/// Считывает содержимое файла в строку function ReadAllText(path: string): string; -/// en +/// Считывает содержимое файла с кодировкой en в строку function ReadAllText(path: string; en: Encoding): string; -/// , +/// Создает новый файл, записывает в него строки из последовательности procedure WriteLines(path: string; ss: sequence of string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него строки из последовательности procedure WriteLines(path: string; ss: sequence of string; en: Encoding); -/// , +/// Создает новый файл, записывает в него строки из массива procedure WriteAllLines(path: string; ss: array of string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него строки из массива procedure WriteAllLines(path: string; ss: array of string; en: Encoding); -/// , +/// Создает новый файл, записывает в него содержимое строки procedure WriteAllText(path: string; s: string); -/// en, +/// Создает новый файл с кодировкой en, записывает в него содержимое строки procedure WriteAllText(path: string; s: string; en: Encoding); -/// , +/// Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска function EnumerateFiles(path: string; searchPattern: string := '*.*'): sequence of string; -/// , , +/// Возвращает последовательность имен файлов по заданному пути, соответствующих шаблону поиска, включая подкаталоги function EnumerateAllFiles(path: string; searchPattern: string := '*.*'): sequence of string; -/// +/// Возвращает последовательность имен каталогов по заданному пути function EnumerateDirectories(path: string): sequence of string; -/// , +/// Возвращает последовательность имен каталогов по заданному пути, включая подкаталоги function EnumerateAllDirectories(path: string): sequence of string; // ----------------------------------------------------- // Abstract binary files // ----------------------------------------------------- ///- Assign(f: file of T; name: string) -/// f name +/// Связывает файловую переменную f с именем файла name procedure Assign(f: AbstractBinaryFile; name: string); ///- AssignFile(f: file of T; name: string) -/// f name +/// Связывает файловую переменную f с именем файла name procedure AssignFile(f: AbstractBinaryFile; name: string); ///- Close(f: file of T) -/// f +/// Закрывает файл f procedure Close(f: AbstractBinaryFile); ///- CloseFile(f: file of T) -/// f +/// Закрывает файл f procedure CloseFile(f: AbstractBinaryFile); ///- Reset(f: file of T) -/// f +/// Открывает двоичный файл f на чтение и запись procedure Reset(f: AbstractBinaryFile); ///- Reset(f: file of T; name: string) -/// f name f +/// Связывает файловую переменную f с именем файла name и открывает двоичный файл f на чтение и запись procedure Reset(f: AbstractBinaryFile; name: string); ///- Rewrite(f: file of T) -/// f , . , +/// Открывает двоичный файл f на чтение и запись, при этом обнуляя его содержимое. Если файл существовал, он обнуляется procedure Rewrite(f: AbstractBinaryFile); ///- Rewrite(f: file of T) -/// f name , +/// Связывает файловую переменную f с именем файла name и открывает двоичный файл на чтение и запись, при этом обнуляя его содержимое procedure Rewrite(f: AbstractBinaryFile; name: string); ///- Truncate(f: file of T) -/// f, +/// Усекает двоичный файл f, отбрасывая все элементы с позиции файлового указателя procedure Truncate(f: AbstractBinaryFile); ///- Eof(f: file of T) -/// True, f +/// Возвращает True, если достигнут конец файла f function Eof(f: AbstractBinaryFile): boolean; ///- Erase(f: file of T) -/// , f +/// Удаляет файл, связанный с файловой переменной f procedure Erase(f: AbstractBinaryFile); ///- Rename(f: file of T; newname: string) -/// , f, newname. +/// Переименовывает файл, связаный с файловой переменной f, давая ему имя newname. procedure Rename(f: AbstractBinaryFile; newname: string); ///- write(f: file of T; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в типизированный файл f //procedure Write(f: AbstractBinaryFile; val: object; arr: boolean); ///- write(f: file; a,b,...) -/// a,b,... f +/// Выводит значения a,b,... в нетипизированный файл f procedure Write(f: AbstractBinaryFile; params vals: array of object); ///-- procedure Writeln(f: AbstractBinaryFile); @@ -945,13 +945,13 @@ procedure Writeln(f: AbstractBinaryFile; params vals: array of object); // Typed files // ----------------------------------------------------- ///- FilePos(f : file of T): int64 -/// f +/// Возвращает текущую позицию файлового указателя в типизированном файле f function FilePos(f: TypedFile): int64; ///- FileSize(f : file of T): int64 -/// f +/// Возвращает количество элементов в типизированном файле f function FileSize(f: TypedFile): int64; ///- Seek(f : file of T; n : int64) -/// f n +/// Устанавливает текущую позицию файлового указателя в типизированном файле f на элемент с номером n procedure Seek(f: TypedFile; n: int64); ///-- procedure TypedFileInit(var f: TypedFile; ElementType: System.Type); @@ -966,13 +966,13 @@ function TypedFileRead(f: TypedFile): object; // Binary files // ----------------------------------------------------- ///- FilePos(f : file): int64 -/// f +/// Возвращает текущую позицию файлового указателя в нетипизированном файле f function FilePos(f: BinaryFile): int64; ///- FileSize(f : file): int64 -/// f +/// Возвращает количество байт в нетипизированном файле f function FileSize(f: BinaryFile): int64; ///- Seek(f : file; n : int64) -/// f n +/// Устанавливает текущую позицию файлового указателя в нетипизированном файле f на байт с номером n procedure Seek(f: BinaryFile; n: int64); ///-- procedure BinaryFileInit(var f: BinaryFile); @@ -982,287 +982,287 @@ function BinaryFileRead(var f: BinaryFile; ElementType: System.Type): object; // ----------------------------------------------------- // Operating System routines // ----------------------------------------------------- -/// +/// Возвращает количество параметров командной строки function ParamCount: integer; -/// i- +/// Возвращает i-тый параметр командной строки function ParamStr(i: integer): string; -/// +/// Возвращает текущий каталог function GetDir: string; -/// +/// Меняет текущий каталог procedure ChDir(s: string); -/// +/// Создает каталог procedure MkDir(s: string); -/// +/// Удаляет каталог procedure RmDir(s: string); -/// . True, +/// Создает каталог. Возвращает True, если каталог успешно создан function CreateDir(s: string): boolean; -/// . , False +/// Удаляет файл. Если файл не может быть удален, то возвращает False function DeleteFile(s: string): boolean; -/// +/// Возвращает текущий каталог function GetCurrentDir: string; -/// . True, +/// Удаляет каталог. Возвращает True, если каталог успешно удален function RemoveDir(s: string): boolean; -/// name, newname. True, +/// Переименовывает файл name, давая ему новое имя newname. Возвращает True, если файл успешно переименован function RenameFile(name, newname: string): boolean; -/// . True, +/// Устанавивает текущий каталог. Возвращает True, если каталог успешно удален function SetCurrentDir(s: string): boolean; -/// name newext +/// Изменяет расширение файла с именем name на newext function ChangeFileNameExtension(name, newext: string): string; -/// True, name +/// Возвращает True, если файл с именем name существует function FileExists(name: string): boolean; -/// +/// Выводит в специальном окне стек вызовов подпрограмм если условие не выполняется procedure Assert(cond: boolean); -/// mes +/// Выводит в специальном окне диагностическое сообщение mes и стек вызовов подпрограмм если условие не выполняется procedure Assert(cond: boolean; mes: string); -/// diskname +/// Возвращает свободное место в байтах на диске с именем diskname function DiskFree(diskname: string): int64; -/// diskname +/// Возвращает размер в байтах на диске с именем diskname function DiskSize(diskname: string): int64; -/// disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +/// Возвращает свободное место в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. function DiskFree(disk: integer): int64; -/// disk. disk=0 - , disk=1 - A: , disk=2 - B: .. +/// Возвращает размер в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д. function DiskSize(disk: integer): int64; -/// +/// Возвращает количество миллисекунд с момента начала работы программы function Milliseconds: integer; -/// Milliseconds MillisecondsDelta +/// Возвращает количество миллисекунд с момента последнего вызова Milliseconds или MillisecondsDelta function MillisecondsDelta: integer; -/// +/// Завершает работу программы procedure Halt; -/// , exitCode +/// Завершает работу программы, возвращая код ошибки exitCode procedure Halt(exitCode: integer); -/// Pascal ABC. +/// Для совместимости с Pascal ABC. Не выполняет никаких действий procedure cls; -// , . (SS) +// Непонятно, что делать после такой паузы. Убрал (SS) //procedure Pause; -/// ms +/// Делает паузу на ms миллисекунд procedure Sleep(ms: integer); -/// .exe- +/// Возващает имя запущенного .exe-файла function GetEXEFileName: string; -/// +/// Преобразует указатель к строковому представлению function PointerToString(p: pointer): string; -/// filename +/// Запускает программу или документ с именем filename procedure Exec(filename: string); -/// filename args +/// Запускает программу или документ с именем filename и параметрами командной строки args procedure Exec(filename: string; args: string); -/// filename +/// Запускает программу или документ с именем filename procedure Execute(filename: string); -/// filename args +/// Запускает программу или документ с именем filename и параметрами командной строки args procedure Execute(filename: string; args: string); // ----------------------------------------------------- // File name routines // ----------------------------------------------------- -/// fname +/// Выделяет имя файла из полного имени файла fname function ExtractFileName(fname: string): string; -/// fname +/// Выделяет расширение из полного имени файла fname function ExtractFileExt(fname: string): string; -/// fname +/// Выделяет путь из полного имени файла fname function ExtractFilePath(fname: string): string; -/// fname +/// Выделяет имя диска и путь из полного имени файла fname function ExtractFileDir(fname: string): string; -/// fname +/// Выделяет путь из полного имени файла fname function ExtractFileDrive(fname: string): string; -/// fname +/// Возвращает полное имя файла fname function ExpandFileName(fname: string): string; // ----------------------------------------------------- // Mathematical routines // ----------------------------------------------------- -/// x +/// Возвращает знак числа x function Sign(x: shortint): integer; -/// x +/// Возвращает знак числа x function Sign(x: smallint): integer; -/// x +/// Возвращает знак числа x function Sign(x: integer): integer; -/// x +/// Возвращает знак числа x function Sign(x: BigInteger): integer; -/// x +/// Возвращает знак числа x function Sign(x: longword): integer; -/// x +/// Возвращает знак числа x function Sign(x: int64): integer; -/// x +/// Возвращает знак числа x function Sign(x: uint64): integer; -/// x +/// Возвращает знак числа x function Sign(x: real): integer; -/// x +/// Возвращает модуль числа x function Abs(x: integer): integer; -/// x +/// Возвращает модуль числа x function Abs(x: BigInteger): BigInteger; -/// x +/// Возвращает модуль числа x function Abs(x: longword): longword; -/// x +/// Возвращает модуль числа x function Abs(x: int64): int64; -/// x +/// Возвращает модуль числа x function Abs(x: uint64): uint64; -/// x +/// Возвращает модуль числа x function Abs(x: real): real; -/// x +/// Возвращает синус числа x function Sin(x: real): real; -/// x +/// Возвращает гиперболический синус числа x function Sinh(x: real): real; -/// x +/// Возвращает косинус числа x /// !! Returns the cosine of number x function Cos(x: real): real; -/// x +/// Возвращает гиперболический косинус числа x function Cosh(x: real): real; -/// x +/// Возвращает тангенс числа x function Tan(x: real): real; -/// x +/// Возвращает гиперболический тангенс числа x function Tanh(x: real): real; -/// x +/// Возвращает арксинус числа x function ArcSin(x: real): real; -/// x +/// Возвращает арккосинус числа x function ArcCos(x: real): real; -/// x +/// Возвращает арктангенс числа x function ArcTan(x: real): real; -/// x +/// Возвращает экспоненту числа x function Exp(x: real): real; -/// x +/// Возвращает натуральный логарифм числа x function Ln(x: real): real; -/// x 2 +/// Возвращает логарифм числа x по основанию 2 function Log2(x: real): real; -/// x +/// Возвращает десятичный логарифм числа x function Log10(x: real): real; -/// x base +/// Возвращает логарифм числа x по основанию base function LogN(base, x: real): real; -/// x +/// Возвращает квадратный корень числа x function Sqrt(x: real): real; -/// x +/// Возвращает квадрат числа x function Sqr(x: integer): int64; -/// x +/// Возвращает квадрат числа x function Sqr(x: BigInteger): BigInteger; -/// x +/// Возвращает квадрат числа x function Sqr(x: longword): uint64; -/// x +/// Возвращает квадрат числа x function Sqr(x: int64): int64; -/// x +/// Возвращает квадрат числа x function Sqr(x: uint64): uint64; -/// x +/// Возвращает квадрат числа x function Sqr(x: real): real; -/// x y +/// Возвращает x в степени y function Power(x, y: real): real; -/// x y +/// Возвращает x в степени y function Power(x, y: integer): real; -/// x y +/// Возвращает x в степени y function Power(x: BigInteger; y: integer): BigInteger; -/// x, +/// Возвращает x, округленное до ближайшего целого function Round(x: real): integer; -/// x +/// Возвращает целую часть числа x function Trunc(x: real): integer; -/// x +/// Возвращает целую часть числа x function Int(x: real): real; -/// x +/// Возвращает дробную часть числа x function Frac(x: real): real; -/// <= x +/// Возвращает наибольшее целое <= x function Floor(x: real): integer; -/// >= x +/// Возвращает наименьшее целое >= x function Ceil(x: real): integer; -/// +/// Переводит радианы в градусы function RadToDeg(x: real): real; -/// +/// Переводит градусы в радианы function DegToRad(x: real): real; -/// +/// Инициализирует датчик псевдослучайных чисел procedure Randomize; -/// , seed. seed +/// Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности procedure Randomize(seed: integer); -/// 0 maxValue-1 +/// Возвращает случайное целое в диапазоне от 0 до maxValue-1 function Random(maxValue: integer): integer; -/// a b +/// Возвращает случайное целое в диапазоне от a до b function Random(a, b: integer): integer; -/// [0..1) +/// Возвращает случайное вещественное в диапазоне [0..1) function Random: real; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: byte): byte; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: shortint): shortint; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: smallint): smallint; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: word): word; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: integer): integer; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: BigInteger): BigInteger; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: longword): longword; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: int64): int64; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: uint64): uint64; -/// a,b +/// Возвращает максимальное из чисел a,b function Max(a, b: real): real; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: byte): byte; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: shortint): shortint; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: word): word; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: smallint): smallint; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: integer): integer; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: BigInteger): BigInteger; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: longword): longword; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: int64): int64; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: uint64): uint64; -/// a,b +/// Возвращает минимальное из чисел a,b function Min(a, b: real): real; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: integer): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: BigInteger): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: longword): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: int64): boolean; -/// True, i +/// Возвращает True, если i нечетно function Odd(i: uint64): boolean; // ----------------------------------------------------- // Char and String manipulation // ----------------------------------------------------- -/// Windows +/// Преобразует код в символ в кодировке Windows function Chr(a: byte): char; -/// Windows +/// Преобразует символ в код в кодировке Windows function Ord(a: char): byte; -/// a +/// Возвращает порядковый номер значения a function Ord(a: integer): integer; -/// a +/// Возвращает порядковый номер значения a function Ord(a: longword): longword; -/// a +/// Возвращает порядковый номер значения a function Ord(a: int64): int64; -/// a +/// Возвращает порядковый номер значения a function Ord(a: uint64): uint64; -/// a +/// Возвращает порядковый номер значения a function Ord(a: boolean): integer; -/// Unicode +/// Преобразует код в символ в кодировке Unicode function ChrUnicode(a: word): char; -/// Unicode +/// Преобразует символ в код в кодировке Unicode function OrdUnicode(a: char): word; -/// +/// Преобразует символ в верхний регистр function UpperCase(ch: char): char; -/// +/// Преобразует символ в нижний регистр function LowerCase(ch: char): char; -/// +/// Преобразует символ в верхний регистр function UpCase(ch: char): char; -/// +/// Преобразует символ в нижний регистр function LowCase(ch: char): char; -/// i s +/// Преобразует целое значение i к строковому представлению и записывает результат в s procedure Str(i: integer; var s: string); ///-- procedure Str(i: longword; var s: string); @@ -1270,133 +1270,133 @@ procedure Str(i: longword; var s: string); procedure Str(i: int64; var s: string); ///-- procedure Str(i: uint64; var s: string); -/// r s +/// Преобразует вещественное значение r к строковому представлению и записывает результат в s procedure Str(r: real; var s: string); -/// r s +/// Преобразует вещественное значение r к строковому представлению и записывает результат в s procedure Str(r: single; var s: string); ///-- procedure Str(s1: string; var s: string); -/// subs s. , 0 +/// Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0 function Pos(subs, s: string): integer; -/// subs s from. , 0 +/// Возвращает позицию подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0 function PosEx(subs, s: string; from: integer := 1): integer; -/// +/// Возвращает длину строки function Length(s: string): integer; -/// s n +/// Устанавливает длину строки s равной n procedure SetLength(var s: string; n: integer); ///-- procedure SetLengthForShortString(var s: string; n, sz: integer); -/// source s index +/// Вставляет подстроку source в строку s с позиции index procedure Insert(source: string; var s: string; index: integer); ///-- procedure InsertInShortString(source: string; var s: string; index, n: integer); -/// s count index +/// Удаляет из строки s count символов с позиции index procedure Delete(var s: string; index, count: integer); -/// s count index +/// Возвращает подстроку строки s длины count с позиции index function Copy(s: string; index, count: integer): string; ///-Concat(s1,s2,...): string -/// , s1,s2,... +/// Возвращает строку, являющуюся результатом слияния строк s1,s2,... function Concat(params strs: array of string): string; -/// , s1 s2 +/// Возвращает строку, являющуюся результатом слияния строк s1 и s2 function Concat(s1, s2: string): string; -/// +/// Возвращает строку в нижнем регистре function LowerCase(s: string): string; -/// +/// Возвращает строку в верхнем регистре function UpperCase(s: string): string; -/// , count ch +/// Возвращает строку, состоящую из count символов ch function StringOfChar(ch: char; count: integer): string; -/// +/// Возвращает инвертированную строку function ReverseString(s: string): string; -/// . < 0 s1 0 s1>s2 = 0 s1=s2 +/// Сравнивает строки. Возвращает значение < 0 если s1 0 если s1>s2 и = 0 если s1=s2 function CompareStr(s1, s2: string): integer; -/// count s +/// Возвращает первые count символов строки s function LeftStr(s: string; count: integer): string; -/// count s +/// Возвращает последние count символов строки s function RightStr(s: string; count: integer): string; -/// +/// Возвращает строку с удаленными начальными и конечными пробелами function Trim(s: string): string; -/// +/// Возвращает строку с удаленными начальными пробелами function TrimLeft(s: string): string; -/// +/// Возвращает строку с удаленными конечными пробелами function TrimRight(s: string): string; -/// +/// Преобразует строковое представление целого числа к числовому значению function StrToInt(s: string): integer; -/// +/// Преобразует строковое представление целого числа к числовому значению function StrToInt64(s: string): int64; -/// +/// Преобразует строковое представление вещественного числа к числовому значению function StrToFloat(s: string): real; -/// s value. False +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToInt(s: string; var value: integer): boolean; -/// s value. False +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToInt64(s: string; var value: int64): boolean; -/// s value. False +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToFloat(s: string; var value: real): boolean; -/// s value. False +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в value. При невозможности преобразования возвращается False function TryStrToFloat(s: string; var value: single): boolean; -/// +/// Считывает целое из строки function ReadIntegerFromString(s: string; var from: integer): integer; -/// +/// Считывает вещественное из строки function ReadRealFromString(s: string; var from: integer): real; -/// +/// Считывает из строки последовательность символов до пробельного символа function ReadWordFromString(s: string; var from: integer): string; -/// True False +/// Возвращает True если достигнут конец строки или в строке остались только пробельные символы и False в противном случае function StringIsEmpty(s: string; var from: integer): boolean; -/// . True False +/// Считывает целое из строки. Возвращает True если считывание удачно и False в противном случае function TryReadIntegerFromString(s: string; var from: integer; var res: integer): boolean; -/// . True False +/// Считывает вещественное из строки. Возвращает True если считывание удачно и False в противном случае function TryReadRealFromString(s: string; var from: integer; var res: real): boolean; -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: integer; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: shortint; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: smallint; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: int64; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: byte; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: word; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: longword; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s целого числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: uint64; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: real; var err: integer); -/// s value. , err=0, err>0 +/// Преобразует строковое представление s вещественного числа к числовому значению и записывает его в переменную value. Если преобразование успешно, то err=0, иначе err>0 procedure Val(s: string; var value: single; var err: integer); -/// +/// Преобразует целое число к строковому представлению function IntToStr(a: integer): string; -/// +/// Преобразует целое число к строковому представлению function IntToStr(a: int64): string; -/// +/// Преобразует вещественное число к строковому представлению function FloatToStr(a: real): string; -/// , fmtstr pars +/// Возвращает отформатированную строку, построенную по форматной строке fmtstr и списку форматиуемых параметров pars function Format(fmtstr: string; params pars: array of object): string; // ----------------------------------------------------- // Common Routines // ----------------------------------------------------- -/// i 1 +/// Увеличивает значение переменной i на 1 procedure Inc(var i: integer); -/// i n +/// Увеличивает значение переменной i на n procedure Inc(var i: integer; n: integer); -/// i 1 +/// Уменьшает значение переменной i на 1 procedure Dec(var i: integer); -/// i n +/// Уменьшает значение переменной i на n procedure Dec(var i: integer; n: integer); -/// c 1 +/// Увеличивает код символа c на 1 procedure Inc(var c: char); -/// c n +/// Увеличивает код символа c на n procedure Inc(var c: char; n: integer); -/// c 1 +/// Уменьшает код символа c на 1 procedure Dec(var c: char); -/// c n +/// Уменьшает код символа c на n procedure Dec(var c: char; n: integer); ///-- procedure Inc(var b: byte); @@ -1411,48 +1411,48 @@ procedure Dec(var f: boolean); //------------------------------------------------------------------------------ //PRED-SUCC -/// x +/// Возвращает следующее за x значение function succ(x: integer): integer; -/// x +/// Возвращает следующее за x значение function succ(x: boolean): boolean; -/// x +/// Возвращает следующее за x значение function succ(x: byte): byte; -/// x +/// Возвращает следующее за x значение function succ(x: shortint): shortint; -/// x +/// Возвращает следующее за x значение function succ(x: smallint): smallint; -/// x +/// Возвращает следующее за x значение function succ(x: word): word; -/// x +/// Возвращает следующее за x значение function succ(x: longword): longword; -/// x +/// Возвращает следующее за x значение function succ(x: int64): int64; -/// x +/// Возвращает следующее за x значение function succ(x: uint64): uint64; -/// x +/// Возвращает следующее за x значение function succ(x: char): char; -/// x +/// Возвращает предшествующее x значение function pred(x: boolean): boolean; -/// x +/// Возвращает предшествующее x значение function pred(x: byte): byte; -/// x +/// Возвращает предшествующее x значение function pred(x: shortint): shortint; -/// x +/// Возвращает предшествующее x значение function pred(x: smallint): smallint; -/// x +/// Возвращает предшествующее x значение function pred(x: word): word; -/// x +/// Возвращает предшествующее x значение function pred(x: integer): integer; -/// x +/// Возвращает предшествующее x значение function pred(x: longword): longword; -/// x +/// Возвращает предшествующее x значение function pred(x: int64): int64; -/// x +/// Возвращает предшествующее x значение function pred(x: uint64): uint64; -/// x +/// Возвращает предшествующее x значение function pred(x: char): char; -/// +/// Меняет местами значения двух переменных procedure Swap(var a, b: T); // ----------------------------------------------------- @@ -1462,19 +1462,19 @@ procedure Swap(var a, b: T); function Low(i: System.Array): integer; ///- High(i: array): integer function High(i: System.Array): integer; -/// +/// Возвращает длину динамического массива function Length(a: &Array): integer; -/// dim +/// Возвращает длину динамического массива по размерности dim function Length(a: &Array; dim: integer): integer; -/// +/// Создаёт копию динамического массива function Copy(a: &Array): &Array; -/// +/// Сортирует динамический массив по возрастанию procedure Sort(a: array of T); -/// +/// Сортирует список по возрастанию procedure Sort(l: List); -/// +/// Изменяет порядок элементов в динамическом массиве на противоположный procedure Reverse(a: array of T); -/// length index +/// Изменяет порядок элементов на противоположный в диапазоне динамического массива длины length начиная с индекса index procedure Reverse(a: array of T; index,length: integer); //function Copy(a: array of T): array of T; @@ -1484,111 +1484,111 @@ function CopyWithSize(source, dest: &Array): &Array; // ----------------------------------------------------- // Sequences and dynamic arrays // ----------------------------------------------------- -/// a b +/// Возвращает последовательность целых от a до b function Range(a,b: integer): sequence of integer; -/// c1 c2 +/// Возвращает последовательность символов от c1 до c2 function Range(c1,c2: char): sequence of char; -/// [a,b] n +/// Возвращает последовательность вещественных в точках разбиения отрезка [a,b] на n равных частей function Range(a,b: real; n: integer): sequence of real; -/// a b step +/// Возвращает последовательность целых от a до b с шагом step function Range(a,b,step: integer): sequence of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными целыми значениями function ArrRandom(n: integer := 10; a: integer := 0; b: integer := 100): array of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными целыми значениями function ArrRandomInteger(n: integer := 10; a: integer := 0; b: integer := 100): array of integer; -/// n, +/// Возвращает массив размера n, заполненный случайными вещественными значениями function ArrRandomReal(n: integer := 10; a: real := 0; b: real := 10): array of real; -/// n +/// Возвращает последовательность из n случайных целых элементов function SeqRandom(n: integer := 10; a: integer := 0; b: integer := 100): sequence of integer; -/// n +/// Возвращает последовательность из n случайных вещественных элементов function SeqRandomReal(n: integer := 10; a: real := 0; b: real := 10): sequence of real; -/// , +/// Возвращает массив, заполненный указанными элементами function Arr(params a: array of T): array of T; -/// +/// Возвращает последовательность указанных элементов function Seq(params a: array of T): sequence of T; -/// count , f(i) +/// Возвращает массив из count элементов, заполненных значениями f(i) function ArrGen(count: integer; f: integer -> T): array of T; -/// count , f(i), i=from +/// Возвращает массив из count элементов, заполненных значениями f(i), начиная с i=from function ArrGen(count: integer; f: integer -> T; from: integer): array of T; -/// count , first, next +/// Возвращает массив из count элементов, начинающихся с first, с функцией next перехода от предыдущего к следующему function ArrGen(count: integer; first: T; next: T -> T): array of T; -/// count , first second, next +/// Возвращает массив из count элементов, начинающихся с first и second, с функцией next перехода от двух предыдущих к следующему function ArrGen(count: integer; first,second: T; next: (T,T) -> T): array of T; -/// count , f(i) +/// Возвращает последовательность из count элементов, заполненных значениями f(i) function SeqGen(count: integer; f: integer -> T): sequence of T; -/// count , f(i), i=from +/// Возвращает последовательность из count элементов, заполненных значениями f(i), начиная с i=from function SeqGen(count: integer; f: integer -> T; from: integer): sequence of T; -/// count , first, next +/// Возвращает последовательность из count элементов, начинающуюся с first, с функцией next перехода от предыдущего к следующему function SeqGen(count: integer; first: T; next: T -> T): sequence of T; -/// count , first second, next +/// Возвращает последовательность из count элементов, начинающуюся с first и second, с функцией next перехода от двух предыдущих к следующему function SeqGen(count: integer; first,second: T; next: (T,T) -> T): sequence of T; -/// first, next pred +/// Возвращает последовательность элементов с начальным значением first, функцией next перехода от предыдущего к следующему и условием pred продолжения последовательности function SeqWhile(first: T; next: T -> T; pred: T -> boolean): sequence of T; -/// , first second, next pred +/// Возвращает последовательность элементов, начинающуюся с first и second, с функцией next перехода от двух предыдущих к следующему и условием pred продолжения последовательности function SeqWhile(first,second: T; next: (T,T) -> T; pred: T -> boolean): sequence of T; -/// count x +/// Возвращает массив из count элементов x function ArrFill(count: integer; x: T): array of T; -/// count x +/// Возвращает последовательность из count элементов x function SeqFill(count: integer; x: T): sequence of T; -/// m x n, +/// Возвращает матрицу размера m x n, заполненную случайными целыми значениями function MatrixRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer; -/// m x n, +/// Возвращает матрицу размера m x n, заполненную случайными вещественными значениями function MatrixRandomReal(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 10): array [,] of real; -/// 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 ReadArrInteger(const prompt: string; n: integer): array of integer; -/// n , +/// Выводит приглашение к вводу и возвращает массив из n вещественных, введенных с клавиатуры function ReadArrReal(const prompt: string; n: integer): array of real; -/// n , +/// Выводит приглашение к вводу и возвращает массив из n строк, введенных с клавиатуры function ReadArrString(const prompt: string; 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; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n целых, введенных с клавиатуры function ReadSeqInteger(const prompt: string; n: integer): sequence of integer; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n вещественных, введенных с клавиатуры function ReadSeqReal(const prompt: string; n: integer): sequence of real; -/// n , +/// Выводит приглашение к вводу и возвращает последовательность из n строк, введенных с клавиатуры function ReadSeqString(const prompt: string; n: integer): sequence of string; // ----------------------------------------------------- // Tuples // ----------------------------------------------------- -/// 2 +/// Возвращает кортеж из 2 элементов function Rec(x1: T1; x2: T2): Tuple; -/// 3 +/// Возвращает кортеж из 3 элементов function Rec(x1: T1; x2: T2; x3: T3): Tuple; -/// 4 +/// Возвращает кортеж из 4 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4): Tuple; -/// 5 +/// Возвращает кортеж из 5 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4; x5: T5): Tuple; -/// 6 +/// Возвращает кортеж из 6 элементов function Rec(x1: T1; x2: T2; x3: T3; x4: T4; x5: T5; x6: T6): Tuple; // ----------------------------------------------------- // Dict // ----------------------------------------------------- -/// +/// Возвращает словарь пар элементов function Dict(params pairs: array of KeyValuePair): Dictionary; -/// +/// Возвращает пару элементов function KV(key: TKey; value: TVal): KeyValuePair; //------------------------------------------------------------------------------ -// . ! +// Вспомогательные подпрограммы. Из раздела интерфейса не убирать! ///-- function FormatValue(value: object; NumOfChars: integer): string; ///-- @@ -1602,24 +1602,24 @@ procedure StringDefaultPropertySet(var s: string; index: integer; c: char); //procedure InitShortString(var s: ShortString; Length: integer); -/// T +///Проверяет возможность использования указателей на тип T procedure CheckCanUsePointerOnType(T: System.Type); -/// T +///Проверяет возможность записи типа T в файл procedure CheckCanUseTypeForBinaryFiles(T: System.Type); -/// file of T +///Проверяет возможность создания file of T procedure CheckCanUseTypeForTypedFiles(T: System.Type); -/// +///Определяет специальные типы function RuntimeDetermineType(T: System.Type): byte; -/// kind +///Возвращает объект класса в зависимости от значения kind function RuntimeInitialize(kind: byte; variable: object): object; -/// +///Вычисление размера типа на этапе выполнения function GetRuntimeSize: integer; -/// write +///Возвращает строку для вывода в write function _ObjectToString(o: object): string; //------------------------------------------------------------------------------ // WINAPI -// . +// Использование этих функций вводит платформенную зависимость. Желательно обойти ///-- function WINAPI_TerminateProcess(Handle: IntPtr; ExitCode: integer): boolean; //------------------------------------------------------------------------------ @@ -1633,9 +1633,9 @@ var //------------------------------------------------------------------------------ var - /// - + /// Определяет текущую систему ввода-вывода CurrentIOSystem: IOSystem; - /// True, + /// Принимает значение True, если приложение имеет консольное окно IsConsoleApplication: boolean; ///-- RedirectIOInDebugMode := False; @@ -1643,7 +1643,7 @@ var ExecuteBeforeProcessTerminateIn__Mode: procedure(e: Exception); //GCHandlersForReferencePointers := new GCHandlersController; ///-- - ExitCode := 0;//TODO Main + ExitCode := 0;//TODO Сделать возврат в Main ///-- procedure __InitModule__; @@ -1662,23 +1662,23 @@ var DefaultOrdChrEncoding := System.Text.Encoding.GetEncoding(1251); __one_char := new char[1]; __one_byte := new byte[1]; - StartTime: DateTime;// Milliseconds + StartTime: DateTime;// Для Milliseconds const - WRITELN_IN_BINARYFILE_ERROR_MESSAGE = ' Writeln !!Writeln is not applicable to binary files'; + WRITELN_IN_BINARYFILE_ERROR_MESSAGE = 'Операция Writeln не применима к бинарным файлам!!Writeln is not applicable to binary files'; InternalNullBasedArrayName = 'NullBasedArray'; - FILE_NOT_ASSIGNED = ' Assign!!File is not assigned'; - FILE_NOT_OPENED = ' !!File is not opened'; - FILE_NOT_OPENED_FOR_READING = ' !!File is not opened for reading'; - FILE_NOT_OPENED_FOR_WRITING = ' !!File is not opened for writing'; - RANGE_ERROR_MESSAGE = ' !!Out of range'; - EOF_FOR_TEXT_WRITEOPENED = ' Eof , !!Eof function can''t be called for file, opened on writing'; - EOLN_FOR_TEXT_WRITEOPENED = ' Eoln , !!Eoln function can''t be called for file, opened on writing'; - SEEKEOF_FOR_TEXT_WRITEOPENED = ' SeekEof , !!SeekEof function can''t be called for file, opened on writing'; - SEEKEOLN_FOR_TEXT_WRITEOPENED = ' SeekEoln , !!SeekEoln function can''t be called for file, opened on writing'; + FILE_NOT_ASSIGNED = 'Для файловой переменной не вызвана процедура Assign!!File is not assigned'; + FILE_NOT_OPENED = 'Файл не открыт!!File is not opened'; + FILE_NOT_OPENED_FOR_READING = 'Файл не открыт на чтение!!File is not opened for reading'; + FILE_NOT_OPENED_FOR_WRITING = 'Файл не открыт на запись!!File is not opened for writing'; + RANGE_ERROR_MESSAGE = 'Выход за границы диапазона!!Out of range'; + EOF_FOR_TEXT_WRITEOPENED = 'Функция Eof не может быть вызвана для текстового файла, открытого на запись!!Eof function can''t be called for file, opened on writing'; + EOLN_FOR_TEXT_WRITEOPENED = 'Функция Eoln не может быть вызвана для текстового файла, открытого на запись!!Eoln function can''t be called for file, opened on writing'; + SEEKEOF_FOR_TEXT_WRITEOPENED = 'Функция SeekEof не может быть вызвана для текстового файла, открытого на запись!!SeekEof function can''t be called for file, opened on writing'; + SEEKEOLN_FOR_TEXT_WRITEOPENED = 'Функция SeekEoln не может быть вызвана для текстового файла, открытого на запись!!SeekEoln function can''t be called for file, opened on writing'; BAD_TYPE_IN_RUNTIMESIZEOF = 'Bad Type in RunTimeSizeOf'; - PARAMETER_COUNT_MUST_BE_GREATER_0 = ' count > 0!!Parameter count must be > 0'; - PARAMETER_COUNT_MUST_BE_GREATER_1 = ' count > 1!!Parameter count must be > 1'; + PARAMETER_COUNT_MUST_BE_GREATER_0 = 'Параметр count должен быть > 0!!Parameter count must be > 0'; + PARAMETER_COUNT_MUST_BE_GREATER_1 = 'Параметр count должен быть > 1!!Parameter count must be > 1'; function GetCurrentLocale: string; begin @@ -2732,7 +2732,7 @@ end; // StructuredObjectToString //------------------------------------------------------------------------------ -// ToString nil ToString Object +// Возвращает переопределенный в последнем потомке ToString или nil если ToString определен в Object function RedefinedToString(o: object): System.Reflection.MethodInfo; begin var t := o.GetType; @@ -2893,7 +2893,7 @@ begin result := string.CompareOrdinal(left, right) >= 0; end; -/// str n +/// Повторяет строку str n раз function string.operator*(str: string; n: integer): string; begin var sb := new StringBuilder; @@ -2902,7 +2902,7 @@ begin result := sb.ToString; end; -/// str n +/// Повторяет строку str n раз function string.operator*(n: integer; str: string): string; begin var sb := new StringBuilder; @@ -2911,7 +2911,7 @@ begin result := sb.ToString; end; -/// c n +/// Повторяет символ c n раз function char.operator*(c: char; n: integer): string; begin var sb := new StringBuilder; @@ -2920,7 +2920,7 @@ begin result := sb.ToString; end; -/// c n +/// Повторяет символ c n раз function char.operator*(n: integer; c: char): string; begin var sb := new StringBuilder; @@ -2929,25 +2929,25 @@ begin result := sb.ToString; end; -/// str n +/// Добавляет к строке str строковое представление числа n function string.operator+(str: string; n: integer): string; begin result := str + n.ToString; end; -/// str n +/// Добавляет к строке str строковое представление числа n function string.operator+(n: integer; str: string): string; begin result := n.ToString + str; end; -/// str r +/// Добавляет к строке str строковое представление числа r function string.operator+(str: string; r: real): string; begin result := str + r.ToString(nfi); end; -/// str r +/// Добавляет к строке str строковое представление числа r function string.operator+(r: real; str: string): string; begin result := r.ToString(nfi) + str; @@ -3017,7 +3017,7 @@ end;} //------------------------------------------------------------------------------ // Extension methods for IEnumerable //------------------------------------------------------------------------------ -/// , delim +/// Выводит последовательность на экран, используя delim в качестве разделителя function Print(self: sequence of T; delim: string): sequence of T; extensionmethod; begin var g := Self.GetEnumerator(); @@ -3030,13 +3030,13 @@ begin Result := Self; end; -/// , +/// Выводит последовательность на экран, используя пробел в качестве разделителя function Print(self: sequence of T): sequence of T; extensionmethod; begin Result := Self.Print(' '); end; -/// , delim , +/// Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку function Println(self: sequence of T; delim: string): sequence of T; extensionmethod; begin Self.Print(delim); @@ -3044,13 +3044,13 @@ begin Result := Self; end; -/// , , +/// Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку function Println(self: sequence of T): sequence of T; extensionmethod; begin Result := Self.Println(' '); end; -/// , , delim +/// Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя delim в качестве разделителя function System.Collections.Generic.IEnumerable.JoinIntoString(delim: string): string; begin var g := Self.GetEnumerator(); @@ -3062,13 +3062,13 @@ begin Result := sb.ToString; end; -/// , , +/// Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя пробел в качестве разделителя function System.Collections.Generic.IEnumerable.JoinIntoString(): string; begin Result := Self.JoinIntoString(' '); end; -/// +/// Применяет действие к каждому элементу последовательности procedure &ForEach(self: sequence of T; action: T -> ()); extensionmethod; begin foreach x: T in Self do @@ -3085,26 +3085,26 @@ begin Result := Self.OrderBy(Ident&); end; -/// +/// Объединяет две последовательности function System.Collections.Generic.IEnumerable.operator+(a,b: sequence of T): sequence of T; begin Result := a.Concat(b); end; -/// a b +/// Объединяет последовательность a и значение b function System.Collections.Generic.IEnumerable.operator+(a: sequence of T; b: T): sequence of T; begin Result := a.Concat(new T[1](b)); end; -/// b a +/// Объединяет значение b и последовательность a function System.Collections.Generic.IEnumerable.operator+(b: T; a: sequence of T): sequence of T; begin Result := new T[1](b); Result := Result.Concat(a); end; -/// a, n +/// Возвращае последовательность a, повторенную n раз function System.Collections.Generic.IEnumerable.operator*(a: sequence of T; n: integer): sequence of T; begin Result := System.Linq.Enumerable.Empty&(); @@ -3112,13 +3112,13 @@ begin Result := Result.Concat(a); end; -/// a, n +/// Возвращае последовательность a, повторенную n раз function System.Collections.Generic.IEnumerable.operator*(n: integer; a: sequence of T): sequence of T; begin Result := a*n; end; -/// +/// Объединяет два массива function operator+(a, b: array of T): array of T; extensionmethod; begin Result := new T[a.Length+b.Length]; @@ -3619,7 +3619,7 @@ begin Result := sb.ToString; end;} -function read_lexem: string;// SSM 08.03.11 - peek '1 hello'. +function read_lexem: string;// SSM 08.03.11 - пытаюсь исправить с peekом ситуацию с вводом '1 hello'. Должно работать var c: char; sb: System.Text.StringBuilder; @@ -3631,7 +3631,7 @@ begin repeat sb.Append(c); c := char(CurrentIOSystem.peek); - if char.IsWhiteSpace(c) or (c = char(-1)) then // char(-1) - Ctrl-Z + if char.IsWhiteSpace(c) or (c = char(-1)) then // char(-1) - Ctrl-Z во входном потоке break; c := CurrentIOSystem.read_symbol; until False; // accumulate nonspaces @@ -3674,12 +3674,12 @@ begin if not console_alloc then AllocConsole; // SSM 29.11.14 - if state = 1 then // sym - , Peek + if state = 1 then // в sym - символ, считанный предыдущим Peek Result := sym - else // sym + else // в sym ничего нет begin state := 1; - sym := Console.Read(); // + sym := Console.Read(); // считываение в буфер Result := sym; end; end; @@ -3689,13 +3689,13 @@ begin if not console_alloc then AllocConsole; // SSM 29.11.14 - if state = 1 then // sym - , Peek + if state = 1 then // в sym - символ, считанный предыдущим Peek begin state := 0; Result := char(sym); sym := -1; end - else // sym + else // в sym ничего нет Result := char(Console.Read()); end; @@ -3746,7 +3746,7 @@ begin begin var sb := new System.Text.StringBuilder; // SSM 8.04.10 - var c := char(peek()); // char(-1) - , , + var c := char(peek()); // первый раз может быть char(-1) - это значит, что в потоке ввода ничего нет, тогда мы читаем символ while (c <> #13) and (c <> #10) do begin c := read_symbol; @@ -3807,7 +3807,7 @@ begin x := True else if s = 'false' then x := False - else raise new System.FormatException(' '); + else raise new System.FormatException('Входная строка имела неверный формат'); end; procedure IOStandardSystem.readln; @@ -4170,8 +4170,8 @@ end; procedure ReadShortStringFromFile(f: Text; var s: string; n: integer); begin - //x := f.sr.ReadLine;// nil - // .. + //x := f.sr.ReadLine;//если конец файла то вернет nil + //Нельзя эти пользоваться т.к. считывает и конец строки var i := 1; var sb := new System.Text.StringBuilder; repeat @@ -4191,7 +4191,7 @@ begin if s.Length > n then s := s.Substring(0, n); end; -procedure ReadShortString(var s: string; n: integer);// peek. +procedure ReadShortString(var s: string; n: integer);// Снова сделал peek. В прошлый раз была ошибка begin if (input.fi <> nil) and (input.sr <> nil) then begin @@ -4272,8 +4272,8 @@ end; procedure read(f: Text; var x: string); begin - //x := f.sr.ReadLine;// nil - // .. + //x := f.sr.ReadLine;//если конец файла то вернет nil + //Нельзя этим пользоваться т.к. считывает и конец строки if f.fi = nil then raise new System.IO.IOException(GetTranslation(FILE_NOT_ASSIGNED)); if f.sr = nil then @@ -4395,7 +4395,7 @@ begin x := True else if s = 'false' then x := False - else raise new System.FormatException(' '); + else raise new System.FormatException('Входная строка имела неверный формат'); end; function ReadInteger(f: Text): integer; @@ -5082,11 +5082,11 @@ begin break; var i := f.sr.Peek; // if not char.IsWhiteSpace(char(i)) then - if (i <> 32) and (i <> 9) then // + if (i <> 32) and (i <> 9) then // Если это не пробел и не табуляция break; f.sr.Read; until False; - Result := f.sr.EndOfStream or (f.sr.Peek = 13) or (f.sr.Peek = 10); // + Result := f.sr.EndOfStream or (f.sr.Peek = 13) or (f.sr.Peek = 10); // Концом строки end; procedure Flush(f: Text); @@ -5744,10 +5744,10 @@ begin var currentLine := stackTrace.GetFrame(ind).GetFileLineNumber(); var currentFile := stackTrace.GetFrame(ind).GetFileName(); if not IsWDE then - System.Diagnostics.Debug.Assert(cond,' '+currentFile+', '+currentLine.ToString()) + System.Diagnostics.Debug.Assert(cond,'Файл '+currentFile+', строка '+currentLine.ToString()) else if not cond then begin - var err := ' : '+Environment.NewLine+' '+currentFile+', '+currentLine.ToString(); + var err := 'Сбой подтверждения: '+Environment.NewLine+'Файл '+currentFile+', строка '+currentLine.ToString(); writeln(err); System.Threading.Thread.Sleep(500); raise new Exception(); @@ -5768,10 +5768,10 @@ begin var currentLine := stackTrace.GetFrame(ind).GetFileLineNumber(); var currentFile := stackTrace.GetFrame(ind).GetFileName(); if not IsWDE then - System.Diagnostics.Debug.Assert(cond,' '+currentFile+', '+currentLine.ToString()+': '+mes) + System.Diagnostics.Debug.Assert(cond,'Файл '+currentFile+', строка '+currentLine.ToString()+': '+mes) else if not cond then begin - var err := ' : '+mes+Environment.NewLine+' '+currentFile+', '+currentLine.ToString(); + var err := 'Сбой подтверждения: '+mes+Environment.NewLine+'Файл '+currentFile+', строка '+currentLine.ToString(); writeln(err); System.Threading.Thread.Sleep(500); raise new Exception(); @@ -6458,7 +6458,7 @@ begin end; procedure Insert(source: string; var s: string; index: integer); -// Insert +// Insert никогда не возвращает исключения begin if index < 1 then index := 1; @@ -6489,7 +6489,7 @@ begin end; procedure Delete(var s: string; index, count: integer); -// Delete +// Delete никогда не возвращает исключения begin if (index < 1) or (index > s.Length) or (count <= 0) then Exit; @@ -6499,7 +6499,7 @@ begin end; function Copy(s: string; index, count: integer): string; -// Copy +// Copy никогда не возвращает исключения begin if index < 1 then index := 1; @@ -6977,7 +6977,7 @@ end; procedure cls; begin - // + //для совместимости { if IsConsoleApplication then Console.Clear;} end; @@ -7169,7 +7169,7 @@ end; //------------------------------------------------------------------------------ // char ext //------------------------------------------------------------------------------ -// +// Преобразовать символ в цифру function char.ToDigit(self: char): integer; extensionmethod; begin Result := OrdUnicode(self) - OrdUnicode('0'); @@ -7177,31 +7177,31 @@ begin raise new System.FormatException('not a Digit'); end; -// +// Следующий символ function char.Succ(self: char): char; extensionmethod; begin Result := PABCSystem.succ(self); end; -// +// Код символа function char.Code(self: char): integer; extensionmethod; begin Result := word(self); end; -// +// Предыдущий символ function char.Pred(self: char): char; extensionmethod; begin Result := PABCSystem.pred(self); end; -// +// Является ли символ цифрой function char.IsDigit(self: char): boolean; extensionmethod; begin Result := char.IsDigit(self); end; -// +// Является ли символ буквой function char.IsLetter(self: char): boolean; extensionmethod; begin Result := char.IsLetter(self); @@ -7230,37 +7230,37 @@ end; //------------------------------------------------------------------------------ // string ext //------------------------------------------------------------------------------ -/// +/// Преобразует строку в целое function string.ToInteger: integer; begin Result := integer.Parse(Self); end; -/// +/// Преобразует строку в вещественное function string.ToReal: real; begin Result := real.Parse(Self, nfi); end; -/// +/// Преобразует строку в массив слов function string.ToWords(params delim: array of char): array of string; begin Result := Self.Split(delim, System.StringSplitOptions.RemoveEmptyEntries); end; -/// +/// Преобразует строку в массив целых function string.ToIntegers(): array of integer; begin Result := Self.ToWords().Select(s -> StrToInt(s)).ToArray(); end; -/// +/// Преобразует строку в массив вещественных function string.ToReals(): array of real; begin Result := Self.ToWords().Select(s -> StrToFloat(s)).ToArray(); end; -/// +/// Возвращает инверсию строки function string.Inverse(): string; begin var sb := new System.Text.StringBuilder(Self.Length); @@ -7376,7 +7376,7 @@ begin exit; if T = typeof(TypedSet) then begin - //TODO: + //TODO: обработать множества raise new CanNotUseTypeForFilesException(T); end; if T = typeof(string) then @@ -7412,17 +7412,17 @@ end; function CanNotUseTypeForPointersException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для указателей.'; end; function CanNotUseTypeForTypedFilesException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для типизированных файлов.'; end; function CanNotUseTypeForFilesException.ToString: string; begin - result := InstanceType.FullName + ' .'; + result := InstanceType.FullName + ' непригоден для файлов.'; end; function RuntimeDetermineType(T: System.Type): byte; diff --git a/bin/Lib/PT4.pas b/bin/Lib/PT4.pas index 5225e983b..0e18976a9 100644 --- a/bin/Lib/PT4.pas +++ b/bin/Lib/PT4.pas @@ -1,14 +1,14 @@ -/// Programming Taskbook 4 +/// Модуль электронного задачника Programming Taskbook 4 unit PT4; //------------------------------------------------------------------------------ -// Programming Taskbook -// 4.13 +// Модуль для подключения задачника Programming Taskbook +// Версия 4.13 // Copyright (c) 2006-2008 DarkStar, SSM -// Copyright (c) 2010 .., 1.3 -// Copyright (c) 2014-2015 .., 4.13 -// Copyright (c) 2015 .., 4.14 -// Programming Taskbook Copyright (c).., 1998-2015 +// Copyright (c) 2010 М.Э.Абрамян, дополнения к версии 1.3 +// Copyright (c) 2014-2015 М.Э.Абрамян, дополнения к версии 4.13 +// Copyright (c) 2015 М.Э.Абрамян, дополнения к версии 4.14 +// Электронный задачник Programming Taskbook Copyright (c)М.Э.Абрамян, 1998-2015 //------------------------------------------------------------------------------ {$apptype windows} @@ -20,9 +20,9 @@ uses System, System.Collections, System.Runtime.InteropServices; type - /// + /// Тип указателя на узел списка PNode = ^TNode; - /// + /// Тип узла списка TNode = record Data: integer; Next,Prev,Left,Right,Parent: PNode; @@ -78,58 +78,58 @@ 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; procedure GetR(var param: real); @@ -157,9 +157,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); @@ -198,13 +198,13 @@ procedure Print(params args: array of object); procedure Println(params args: array of object); -/// , , p +/// Освобождает память, выделенную динамически, на которую указывает p procedure Dispose(p: pointer); -// - Intellisense -// , - write +// Фиктивная пустая процедура - для Intellisense +// Нет, нельзя пользоваться - закрываются процедуры write системного модуля ///- write(a,b,...) -/// a,b,... +/// Выводит значения a,b,... в окно электронного задачника //procedure write; ///-- @@ -212,162 +212,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); @@ -412,14 +412,14 @@ procedure WriteMatr(a: array of array of T); procedure WriteMatr(a: List>); -// == 4.14 == +// == Конец дополнений к версии 4.14 == implementation const - NotSupportedReadTypeMessage = ' {0} '; - NotSupportedWriteTypeMessage = ' {0} '; - eMessage = ' Node Dispose'; + NotSupportedReadTypeMessage = 'Ввод данных типа {0} не поддерживается'; + NotSupportedWriteTypeMessage = 'Вывод данных типа {0} не поддерживается'; + eMessage = 'Попытка обращения к объекту Node после вызова его метода Dispose'; var loadNodes: ArrayList; @@ -862,7 +862,7 @@ begin end; // ----------------------------------------------------- -// Get +// Функции Get // ----------------------------------------------------- function GetInt: integer; var val:integer; @@ -898,7 +898,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; @@ -930,8 +930,8 @@ var sNode: InternalNode; i: integer; 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; @@ -1031,7 +1031,7 @@ begin end; // ----------------------------------------------------- -// Put +// Процедуры Put // ----------------------------------------------------- procedure PutInt(val: integer); begin @@ -1080,7 +1080,7 @@ begin end; // ----------------------------------------------------- -// +// Генерация исключений // ----------------------------------------------------- procedure RaisePTAndCheckPT(e: Exception); begin @@ -1275,7 +1275,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; @@ -1313,10 +1313,10 @@ begin inc(i); fpt := FinishPT; end; - // == 4.13 == + // == Конец дополнений к версии 4.13 == end; -// == 1.3. == +// == Версия 1.3. Дополнения == var D: integer := 2; @@ -1438,9 +1438,9 @@ begin D := N; end; -// == 1.3 == +// == Конец дополнений к версии 1.3 == -// == 4.14. == +// == Версия 4.14. Дополнения == function ReadSeqInteger(): sequence of integer; begin @@ -1712,7 +1712,7 @@ begin write(a[i][j]); end; -/// +/// Выводит размер и элементы последовательности procedure WriteAll(self: sequence of T); extensionmethod; begin var b := self.ToArray(); @@ -1721,7 +1721,7 @@ begin PT4.Put(e); end; -/// +/// Выводит элементы последовательности procedure Write(self: sequence of T); extensionmethod; begin var b := self.ToArray(); @@ -1729,14 +1729,14 @@ begin PT4.Put(e); end; -/// +/// Выводит элементы динамического массива procedure Write(self: array of T); extensionmethod; begin for var i:=0 to self.Length-1 do PT4.Put(self[i]); end; -/// +/// Выводит элементы матрицы procedure Write(self: array [,] of T); extensionmethod; begin for var i:=0 to self.GetLength(0)-1 do @@ -1744,10 +1744,10 @@ begin PT4.Put(self[i,j]); end; -/// -/// cmt, , -/// -/// - +/// Выводит в разделе отладки окна задачника +/// комментарий cmt, размер последовательности и значения, +/// полученные из элементов последовательности +/// с помощью указанного лямбда-выражения function System.Collections.Generic.IEnumerable.Show (cmt: string; selector: System.Func): System.Collections.Generic.IEnumerable; @@ -1761,10 +1761,10 @@ begin result := self; end; -/// -/// , -/// -/// - +/// Выводит в разделе отладки окна задачника +/// размер последовательности и значения, +/// полученные из элементов последовательности +/// с помощью указанного лямбда-выражения function System.Collections.Generic.IEnumerable.Show (selector: System.Func): System.Collections.Generic.IEnumerable; @@ -1772,8 +1772,8 @@ begin result := self.Show('', selector); end; -/// -/// cmt, +/// Выводит в разделе отладки окна задачника +/// комментарий cmt, размер последовательности и ее элементы function System.Collections.Generic.IEnumerable.Show(cmt: string): System.Collections.Generic.IEnumerable; begin @@ -1792,15 +1792,15 @@ begin string.Format(s, e).Replace(',', '.')); end; -/// -/// . +/// Выводит в разделе отладки окна задачника +/// размер последовательности и ее элементы. function System.Collections.Generic.IEnumerable.Show(): System.Collections.Generic.IEnumerable; begin result := self.Show(''); end; -// == 4.14 == +// == Конец дополнений к версии 4.14 == initialization __InitModule; diff --git a/bin/Lib/PT4Exam.pas b/bin/Lib/PT4Exam.pas index 47bc31c27..0eed7d68a 100644 --- a/bin/Lib/PT4Exam.pas +++ b/bin/Lib/PT4Exam.pas @@ -1,10 +1,10 @@ -/// PT for Exam +/// Модуль электронного задачника PT for Exam unit PT4Exam; //------------------------------------------------------------------------------ -// PT for Exam -// 1.1 -// Copyright (c) 2014-2015 .. +// Модуль для подключения задачника PT for Exam +// Версия 1.1 +// Copyright (c) 2014-2015 М.Э.Абрамян //------------------------------------------------------------------------------ diff --git a/bin/Lib/PT4TaskMakerNET.pas b/bin/Lib/PT4TaskMakerNET.pas index 47afe4ba7..9e4554c67 100644 --- a/bin/Lib/PT4TaskMakerNET.pas +++ b/bin/Lib/PT4TaskMakerNET.pas @@ -1,13 +1,13 @@ -/// Programming Taskbook 4.11 +/// Конструктор для электронного задачника Programming Taskbook 4.11 unit PT4TaskMakerNET; //------------------------------------------------------------------------------ -// Programming Taskbook 4.11 +// Конструктор для электронного задачника Programming Taskbook 4.11 //------------------------------------------------------------------------------ -// NET- PascalABC.NET +// Модуль для создания NET-библиотек с группами заданий в системе PascalABC.NET // -// Copyright (c) 2013 .. -// Programming Taskbook Copyright (c) ..,1998-2013 +// Copyright (c) 2013 М.Э.Абрамян +// Электронный задачник Programming Taskbook Copyright (c) М.Э.Абрамян,1998-2013 //------------------------------------------------------------------------------ @@ -26,26 +26,26 @@ const lgVB = $0002; lgCPP = $0004; lg1C = $0040; - lgPython = $0080; // 4.10 + lgPython = $0080; // добавлено в версии 4.10 lgCS = $0100; lgVBNET = $0200; lgPascalNET = $0400; - lgJava = $10000; // 4.11 - lgAll = $FFFFFF; // 4.10 + lgJava = $10000; // добавлено в версии 4.11 + lgAll = $FFFFFF; // изменено в версии 4.10 lgNET = $FF00; lgWithPointers = $003D; - lgWithObjects = $FFF80; // 4.11 + lgWithObjects = $FFF80; // добавлено в версии 4.11 lgPascalABCNET = $0401; type -/// , +/// Процедурный тип, используемый при создании групп заданий TInitTaskProc = procedure(N: integer); -/// +/// Указатель на узел динамической структуры PNode = ^TNode; -/// +/// Узел динамической структуры TNode = record Data: integer; Next: PNode; @@ -55,361 +55,361 @@ type Parent: PNode; end; -/// +/// Добавляет к задачнику новую группу заданий с указанными характеристиками procedure CreateGroup(GroupName, GroupDescription, GroupAuthor, GroupKey: string; TaskCount: integer; InitTaskProc: TInitTaskProc); -/// +/// Добавляет к создаваемой группе задание из другой группы procedure UseTask(GroupName: string; TaskNumber: integer); -/// +/// Должна указываться первой при определении нового задания procedure CreateTask(SubgroupName: string); overload; -/// +/// Должна указываться первой при определении нового задания procedure CreateTask; overload; -/// -/// ( ) +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) procedure CreateTask(SubgroupName: string; var ProcessCount: integer); overload; -/// -/// ( ) +/// Должна указываться первой при определении нового задания +/// (вариант для параллельного режима задачника) procedure CreateTask(var ProcessCount: integer); overload; -/// , -/// , lgXXX +/// Позволяет определить текущий язык программирования, выбранный для задачника +/// Возвращает значения, связанные с константами lgXXX function CurrentLanguage: integer; -/// -/// ( 'ru', 'en') +/// Возвращает двухбуквенную строку с описанием текущей локали +/// (в даной версии возвращается либо 'ru', либо 'en') function CurrentLocale: string; -/// 'd.dd' -/// ( , 4.10, '4.00') -function CurrentVersion: string; // 4.10 +/// Возвращает номер текущей версии задачника в формате 'd.dd' +/// (для версий, меньших 4.10, возвращает '4.00') +function CurrentVersion: string; // добавлено в версии 4.10 //----------------------------------------------------------------------------- -/// +/// Добавляет к формулировке задания строку procedure TaskText(S: string; X, Y: integer); -/// -/// ( S -/// #13, #10 #13#10; -/// , -/// ) -procedure TaskText(S: string); // 4.11 +/// Определяет все строки формулировки задания +/// (в параметре S отдельные строки формулировки +/// должны разделяться символами #13, #10 или парой #13#10; +/// начальные и конечные пробелы в строках удаляются, +/// пустые строки в формулировку не включаются) +procedure TaskText(S: string); // добавлено в версии 4.11 //----------------------------------------------------------------------------- -/// +/// Добавляет к исходным данным элемент логического типа с комментарием procedure DataB(Cmt: string; B: boolean; X, Y: integer); -/// -procedure DataB(B: boolean; X, Y: integer); // 4.11 +/// Добавляет к исходным данным элемент логического типа +procedure DataB(B: boolean; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным целочисленный элемент с комментарием procedure DataN(Cmt: string; N: integer; X, Y, W: integer); -/// -procedure DataN(N: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным целочисленный элемент +procedure DataN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным два целочисленных элемента с общим комментарием procedure DataN2(Cmt: string; N1, N2: integer; X, Y, W: integer); -/// -procedure DataN2(N1, N2: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным два целочисленных элемента +procedure DataN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным три целочисленных элемента с общим комментарием procedure DataN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); -/// -procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным три целочисленных элемента +procedure DataN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным вещественный элемент с комментарием procedure DataR(Cmt: string; R: real; X, Y, W: integer); -/// -procedure DataR(R: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным вещественный элемент +procedure DataR(R: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным два вещественных элемента с общим комментарием procedure DataR2(Cmt: string; R1, R2: real; X, Y, W: integer); -/// -procedure DataR2(R1, R2: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным два вещественных элемента +procedure DataR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным три вещественных элемента с общим комментарием procedure DataR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); -/// -procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // 4.11 +/// Добавляет к исходным данным три вещественных элемента +procedure DataR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным символьный элемент с комментарием procedure DataC(Cmt: string; C: char; X, Y: integer); -/// -procedure DataC(C: char; X, Y: integer); // 4.11 +/// Добавляет к исходным данным символьный элемент +procedure DataC(C: char; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к исходным данным строковый элемент с комментарием procedure DataS(Cmt: string; S: string; X, Y: integer); -/// -procedure DataS(S: string; X, Y: integer); // 4.11 +/// Добавляет к исходным данным строковый элемент +procedure DataS(S: string; X, Y: integer); // добавлено в версии 4.11 -/// PNode +/// Добавляет к исходным данным элемент типа PNode с комментарием procedure DataP(Cmt: string; NP: integer; X, Y: integer); -/// PNode -procedure DataP(NP: integer; X, Y: integer); // 4.11 +/// Добавляет к исходным данным элемент типа PNode +procedure DataP(NP: integer; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет комментарий в область исходных данных procedure DataComment(Cmt: string; X, Y: integer); //----------------------------------------------------------------------------- -/// +/// Добавляет к результирующим данным элемент логического типа с комментарием procedure ResultB(Cmt: string; B: boolean; X, Y: integer); -/// -procedure ResultB(B: boolean; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным элемент логического типа +procedure ResultB(B: boolean; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным целочисленный элемент с комментарием procedure ResultN(Cmt: string; N: integer; X, Y, W: integer); -/// -procedure ResultN(N: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным целочисленный элемент +procedure ResultN(N: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным два целочисленных элемента с общим комментарием procedure ResultN2(Cmt: string; N1, N2: integer; X, Y, W: integer); -/// -procedure ResultN2(N1, N2: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным два целочисленных элемента +procedure ResultN2(N1, N2: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным три целочисленных элемента с общим комментарием procedure ResultN3(Cmt: string; N1, N2, N3: integer; X, Y, W: integer); -/// -procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным три целочисленных элемента +procedure ResultN3(N1, N2, N3: integer; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным вещественный элемент с комментарием procedure ResultR(Cmt: string; R: real; X, Y, W: integer); -/// -procedure ResultR(R: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным вещественный элемент +procedure ResultR(R: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным два вещественных элемента с общим комментарием procedure ResultR2(Cmt: string; R1, R2: real; X, Y, W: integer); -/// -procedure ResultR2(R1, R2: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным два вещественных элемента +procedure ResultR2(R1, R2: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным три вещественных элемента с общим комментарием procedure ResultR3(Cmt: string; R1, R2, R3: real; X, Y, W: integer); -/// -procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // 4.11 +/// Добавляет к результирующим данным три вещественных элемента +procedure ResultR3(R1, R2, R3: real; X, Y, W: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным символьный элемент с комментарием procedure ResultC(Cmt: string; C: char; X, Y: integer); -/// -procedure ResultC(C: char; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным символьный элемент +procedure ResultC(C: char; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет к результирующим данным строковый элемент с комментарием procedure ResultS(Cmt: string; S: string; X, Y: integer); -/// -procedure ResultS(S: string; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным строковый элемент +procedure ResultS(S: string; X, Y: integer); // добавлено в версии 4.11 -/// PNode +/// Добавляет к результирующим данным элемент типа PNode с комментарием procedure ResultP(Cmt: string; NP: integer; X, Y: integer); -/// PNode -procedure ResultP(NP: integer; X, Y: integer); // 4.11 +/// Добавляет к результирующим данным элемент типа PNode +procedure ResultP(NP: integer; X, Y: integer); // добавлено в версии 4.11 -/// +/// Добавляет комментарий в область результирующих данных procedure ResultComment(Cmt: string; X, Y: integer); //----------------------------------------------------------------------------- -/// +/// Задает число дробных знаков при отображении вещественных чисел procedure SetPrecision(N: integer); -/// , -/// +/// Задает число исходных данных, минимально необходимое +/// для нахождения правильных результирующих данных procedure SetRequiredDataCount(N: integer); -/// ( 2 9), -/// +/// Задает число тестовых испытаний (от 2 до 9), при успешном +/// прохождении которых задание будет считаться выполненным procedure SetTestCount(N: integer); -/// , I- , -/// N , , W, -/// B ( 1) +/// Возвращает горизонтальную координату, начиная с которой следует выводить I-й элемент из набора, +/// содержащего N элементов, при условии, что ширина каждого элемента равна W, а между элементами +/// надо указывать B пробелов (элементы нумеруются от 1) function Center(I, N, W, B: integer): integer; -/// , -/// M N . -/// , M. -function RandomN(M, N: integer): integer; // 4.11 +/// Возвращает псевдослучайное целое число, лежащее +/// в диапазоне от M до N включительно. Если указанный +/// диапазон пуст, то возвращает M. +function RandomN(M, N: integer): integer; // добавлено в версии 4.11 -/// , -/// [A, B). -/// , A. -function RandomR(A, B: real): real; // 4.11 +/// Возвращает псевдослучайное вещественное число, лежащее +/// на полуинтервале [A, B). Если указанный полуинтервал +/// пуст, то возвращает A. +function RandomR(A, B: real): real; // добавлено в версии 4.11 -/// -/// ( ). -/// , 1. -/// , 0. -/// ( 4.10 ) -/// 0. -function CurrentTest: integer; // 4.11 +/// Возвращает порядковый номер текущего тестового запуска +/// (учитываются только успешные тестовые запуски). Если ранее успешных +/// запусков не было, то возвращает 1. Если задание уже выполнено +/// или запущено в демонстрационном режиме, то возвращает 0. +/// При использовании предыдущих версий задачника (до 4.10 включительно) +/// всегда возвращает 0. +function CurrentTest: integer; // добавлено в версии 4.11 //----------------------------------------------------------------------------- -/// (file of integer) +/// Добавляет к исходным данным двоичный файл с целочисленными элементами (file of integer) procedure DataFileN(FileName: string; Y, W: integer); -/// (file of real) +/// Добавляет к исходным данным двоичный файл с вещественными элементами (file of real) procedure DataFileR(FileName: string; Y, W: integer); -/// (file of char) +/// Добавляет к исходным данным двоичный файл с символьными элементами (file of char) procedure DataFileC(FileName: string; Y, W: integer); -/// (file of ShortString) +/// Добавляет к исходным данным двоичный файл со строковыми элементами (file of ShortString) procedure DataFileS(FileName: string; Y, W: integer); -/// +/// Добавляет к исходным данным текстовый файл procedure DataFileT(FileName: string; Y1, Y2: integer); //----------------------------------------------------------------------------- -/// (file of integer) +/// Добавляет к результирующим данным двоичный файл с целочисленными элементами (file of integer) procedure ResultFileN(FileName: string; Y, W: integer); -/// (file of real) +/// Добавляет к результирующим данным двоичный файл с вещественными элементами (file of real) procedure ResultFileR(FileName: string; Y, W: integer); -/// (file of char) +/// Добавляет к результирующим данным двоичный файл с символьными элементами (file of char) procedure ResultFileC(FileName: string; Y, W: integer); -/// (file of ShortString) +/// Добавляет к результирующим данным двоичный файл со строковыми элементами (file of ShortString) procedure ResultFileS(FileName: string; Y, W: integer); -/// +/// Добавляет к результирующим данным текстовый файл procedure ResultFileT(FileName: string; Y1, Y2: integer); //----------------------------------------------------------------------------- -/// NP P +/// Связывает номер NP с указателем P procedure SetPointer(NP: integer; P: PNode); -/// +/// Добавляет к исходным данным линейную динамическую структуру procedure DataList(NP: integer; X, Y: integer); -/// +/// Добавляет к результирующим данным линейную динамическую структуру procedure ResultList(NP: integer; X, Y: integer); -/// +/// Добавляет к исходным данным бинарное дерево procedure DataBinTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к результирующим данным бинарное дерево procedure ResultBinTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к исходным данным дерево общего вида procedure DataTree(NP: integer; X, Y1, Y2: integer); -/// +/// Добавляет к результирующим данным дерево общего вида procedure ResultTree(NP: integer; X, Y1, Y2: integer); -/// NP +/// Отображает в текущей динамической структуре указатель с номером NP procedure ShowPointer(NP: integer); -/// , +/// Помечает в текущей результирующей динамической структуре указатель, требующий создания procedure SetNewNode(NNode: integer); -/// , +/// Помечает в текущей исходной динамической структуре указатель, требующий удаления procedure SetDisposedNode(NNode: integer); //----------------------------------------------------------------------------- -/// - , +/// Возвращает количество слов-образцов для языка, соответствующего текущей локали function WordCount: integer; //116 -/// - , +/// Возвращает количество предложений-образцов для языка, соответствующего текущей локали function SentenceCount: integer; //61 -/// - , +/// Возвращает количество текстов-образцов для языка, соответствующего текущей локали function TextCount: integer; //85 -/// - N ( 0) , +/// Возвращает слово-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали function WordSample(N: integer): string; -/// - N ( 0) , +/// Возвращает предложение-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали function SentenceSample(N: integer): string; -/// - N ( 0) , , -/// #13#10, , -/// MaxLineCount, +/// Возвращает текст-образец с номером N (нумерация от 0) для языка, соответствующего текущей локали, +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка function TextSample(N: integer): string; //----------------------------------------------------------------------------- -/// - +/// Возвращает количество английских слов-образцов function EnWordCount: integer; //116 -/// - +/// Возвращает количество английских предложений-образцов function EnSentenceCount: integer; //61 -/// - +/// Возвращает количество английских текстов-образцов function EnTextCount: integer; //85 -/// - N ( 0) +/// Возвращает английское слово-образец с номером N (нумерация от 0) function EnWordSample(N: integer): string; -/// - N ( 0) +/// Возвращает английское предложение-образец с номером N (нумерация от 0) function EnSentenceSample(N: integer): string; -/// - N ( 0), -/// #13#10, , -/// MaxLineCount, +/// Возвращает английский текст-образец с номером N (нумерация от 0), +/// между строками текста располагаются символы #13#10, в конце текста эти символы отсутствуют, +/// число строк не превышает MaxLineCount, между абзацами текста помещается одна пустая строка function EnTextSample(N: integer): string; //----------------------------------------------------------------------------- -/// +/// Добавляет строку комментария к текущей группе или подгруппе заданий procedure CommentText(S: string); -/// ( , -/// ) +/// Добавляет комментарий из другой группы заданий (или ее подгруппы, +/// если ее второй параметр не является пустой строкой) procedure UseComment(GroupName, SubgroupName: string); overload; -/// +/// Добавляет комментарий из другой группы заданий procedure UseComment(GroupName: string); overload; -/// +/// Устанавливает режим добавления комментария к подгруппе заданий procedure Subgroup(SubgroupName: string); //----------------------------------------------------------------------------- -/// , -/// " " PascalABC.NET -/// ( ) +/// Процедура, обеспечивающая отображение динамических структур данных +/// в "объектном стиле" при выполнении заданий в среде PascalABC.NET +/// (при использовании других сред не выполняет никаких действий) procedure SetObjectStyle; //----------------------------------------------------------------------------- -/// ; -/// activate ( ) -/// NET ( activate -/// S, ActivateNET) +/// Процедура для внутреннего использования; она должна быть вызвана +/// из процедуры с именем activate (с маленькой буквы) в любой +/// библиотеке NET с группой заданий (процедура activate имеет +/// тот же строковый параметр S, что и процедура ActivateNET) procedure ActivateNET(S: string); //----------------------------------------------------------------------------- -/// -/// ( ) +/// Устанавливает текущий процесс для последующей передачи ему данных +/// числовых типов (при выполнении задания в параллельном режиме) procedure SetProcess(ProcessRank: integer); //----------------------------------------------------------------------------- @@ -491,12 +491,12 @@ var enwordsample_, ensentencesample_, entextsample_: TSFuncN; commenttext_: TProcS; usecomment_: TProcS2; - subgroup_{, registergroup_}: TProcS; // 4.11 + subgroup_{, registergroup_}: TProcS; // удалено в версии 4.11 setobjectstyle_: TProc; createtask2_: TProcSvN; setprocess_: TProcN; - currentversion_: TSFunc; // 4.10 - currenttest_: TNFunc; // 4.11 + currentversion_: TSFunc; // добавлено в версии 4.10 + currenttest_: TNFunc; // добавлено в версии 4.11 FHandle: integer; @@ -574,8 +574,8 @@ begin setobjectstyle_ := TProc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setobjectstyle'), typeof(TProc))); createtask2_ := TProcSvN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'createtask2'), typeof(TProcSvN))); setprocess_ := TProcN(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'setprocess'), typeof(TProcN))); - currentversion_ := TSFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion'), typeof(TSFunc))); // 4.10 - currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // 4.11 + currentversion_ := TSFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'currentversion'), typeof(TSFunc))); // добавлено в версии 4.10 + currenttest_ := TNFunc(Marshal.GetDelegateForFunctionPointer(GetProcAddress(FHandle, 'curt'), typeof(TNFunc))); // добавлено в версии 4.11 end; //============================================================================= @@ -1100,7 +1100,7 @@ begin setobjectstyle_; end; -{ // 4.11 +{ // удалено в версии 4.11 procedure RegisterGroup(UnitName: string); begin registergroup_(PChar(UnitName)); diff --git a/bin/Lib/PointRect.pas b/bin/Lib/PointRect.pas index 57c590a40..42861e809 100644 --- a/bin/Lib/PointRect.pas +++ b/bin/Lib/PointRect.pas @@ -1,5 +1,5 @@ unit PointRect; -// Pascal ABC +//Для совместимости с Pascal ABC end. \ No newline at end of file diff --git a/bin/Lib/RBDMUtils.pas b/bin/Lib/RBDMUtils.pas index 9b402c470..16d9306e3 100644 --- a/bin/Lib/RBDMUtils.pas +++ b/bin/Lib/RBDMUtils.pas @@ -1,20 +1,20 @@ unit RBDMUtils; -// ( PT4TaskMaker) +// (недокументированные возможности PT4TaskMaker) interface -// -//taskname - RB DM ( ) +//Записывают в файл результатов информацию о выполненном задании для Робота или Чертежника +//taskname - имя задания без префикса RB и DM (префикс добавляется автоматически) procedure ResRB(taskname: string); procedure ResDM(taskname: string); -// regtasks.dat Lib -// -//Group - ( 1 7 , ), -//Description - ( -// , ), -//TaskCount - ( 1 999), -//Units - , ( ). -// Units , , -// Group, RB DM. +//Записывают в файл regtasks.dat в каталоге Lib информацию о новой группе заданий +//для Робота или Чертежника +//Group - имя группы (от 1 до 7 символов, без префиксов), +//Description - описание группы (первый символ автоматически преобразуется к нижнему +// регистру, так как описание указывается после двоеточия), +//TaskCount - число заданий в группе (от 1 до 999), +//Units - имя модуля, содержащего группу (используется в шаблоне). +// Если Units является пустой строкой, то считается, что имя модуля +// совпадает с именем группы Group, дополненным префиксом RB или DM. function RegisterRB(Group, Description: string; TaskCount: integer; Units: string): integer; function RegisterDM(Group, Description: string; TaskCount: integer; diff --git a/bin/Lib/RBDMUtilsDemo.pas b/bin/Lib/RBDMUtilsDemo.pas index b1c892ac8..aa913fd95 100644 --- a/bin/Lib/RBDMUtilsDemo.pas +++ b/bin/Lib/RBDMUtilsDemo.pas @@ -1,11 +1,11 @@ uses RBDMUtils; begin ResRB('a1'); - RegisterRB('DemoA',', , '+ - ' ( )',50,''); - RegisterRB('DemoB',' B',500,'Rob'); - RegisterDM('DemoB',' B',50,''); - // , - // PT4Results ( RBa1) - // PT4Load ( ) + RegisterRB('DemoA','Пример, показывающий, что описание группы может быть достаточно '+ + 'длинным (в этом случае включается возможность прокрутки текста)',50,''); + RegisterRB('DemoB','Задания группы B',500,'Rob'); + RegisterDM('DemoB','Задания группы B',50,''); + // После запуска этой программы можно сразу просмотреть результаты ее работы, + // вызвав модуль PT4Results (в нем будет информация о выполнении задания RBa1) + // или модуль PT4Load (в нем появятся сведения о новых наборах Робота и Чертежника) end. \ No newline at end of file diff --git a/bin/Lib/Robot.pas b/bin/Lib/Robot.pas index 4c2bdbd8e..fbf7b3e1a 100644 --- a/bin/Lib/Robot.pas +++ b/bin/Lib/Robot.pas @@ -1,53 +1,53 @@ // Copyright (c) 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 Robot; interface -/// n (n=0..10) +/// Установить скорость Робота равной n (n=0..10) procedure Speed(n: integer); -/// +/// Переместить Робота вправо procedure Right; -/// +/// Переместить Робота влево procedure Left; -/// +/// Переместить Робота вверх procedure Up; -/// +/// Переместить Робота вниз procedure Down; -/// +/// Закрасить текущую ячейку procedure Paint; -/// True, - , False +/// Возвращает True, если справа от Робота - свободно, и False в противном случае function FreeFromRight: boolean; -/// True, - , False +/// Возвращает True, если слева от Робота - свободно, и False в противном случае function FreeFromLeft: boolean; -/// True, - , False +/// Возвращает True, если сверху от Робота - свободно, и False в противном случае function FreeFromUp: boolean; -/// True, - , False +/// Возвращает True, если снизу от Робота - свободно, и False в противном случае function FreeFromDown: boolean; -/// True, - , False +/// Возвращает True, если справа от Робота - стена, и False в противном случае function WallFromRight: boolean; -/// True, - , False +/// Возвращает True, если слева от Робота - стена, и False в противном случае function WallFromLeft: boolean; -/// True, - , False +/// Возвращает True, если сверху от Робота - стена, и False в противном случае function WallFromUp: boolean; -/// True, - , False +/// Возвращает True, если снизу от Робота - стена, и False в противном случае function WallFromDown: boolean; -/// True, , False +/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае function CellIsFree: boolean; -/// True, , False +/// Возвращает True, если текущая ячейка закрашена, и False в противном случае function CellIsPainted: boolean; -/// name +/// Вызывать задание с именем name procedure Task(name: string); -/// 9 11 +/// Создать пустое поле размера 9 на 11 клеток procedure StandardField; -/// n m +/// Создать пустое поле размера n на m клеток procedure Field(n,m: integer); -/// +/// Запустить Робота procedure Start; -/// +/// Остановить Робота procedure Stop; var @@ -170,7 +170,7 @@ end; procedure StandardField; var x,y: integer; begin - TaskText(' '); + TaskText('Стандартное поле'); x := 9; y := 7; RobotTaskMaker.Field(x,y); RobotBeginEnd(x div 2 + 1,y div 2 + 1,0,0); @@ -181,7 +181,7 @@ end; procedure Field(n,m: integer); begin - TaskText(' '+IntToStr(n)+'x'+IntToStr(m)); + TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m)); RobotTaskMaker.Field(n,m); RobotBeginEnd(n div 2 + 1,m div 2 + 1,0,0); CorrectFieldBounds; @@ -360,9 +360,9 @@ begin if TasksDictionary.ContainsKey(name) then TasksDictionary[name]() - else RobotError(name+' - ',' '); + else RobotError(name+' - нет такого задания для Робота','Задание отсутствует'); - // - + // Добавил - МА RobField.TaskName := name; // @@ -405,7 +405,7 @@ begin end; initialization - // + //необходимо инициализировать иначе она не восстановится __InitModule; finalization __FinalizeModule__ diff --git a/bin/Lib/RobotField.pas b/bin/Lib/RobotField.pas index e3065a018..582208013 100644 --- a/bin/Lib/RobotField.pas +++ b/bin/Lib/RobotField.pas @@ -43,9 +43,9 @@ type CellSize,DimX,DimY,X0,Y0: integer; procedure Draw0; procedure DrawFieldOnly; - procedure DrawCell(x,y: integer); { } + procedure DrawCell(x,y: integer); { нарисовать одну ячейку } public - // - + // Добавил - МА TaskName: string; // constructor Create(sizex,sizey,cellsize: integer); @@ -58,12 +58,12 @@ type property SizeY: integer read DimY; function IsSolution: boolean; procedure CheckTaskCall; - // + // примитивы для постановщика procedure DrawLastRobotPos; procedure DrawTag(x,y: integer); procedure SetDim(DX,DY,CellSz: integer); - procedure SetPaintMaker(x,y: integer); { - } - procedure SetTag(x,y: integer); { } + procedure SetPaintMaker(x,y: integer); { пометить ячейку как нарисованную - постановщик} + procedure SetTag(x,y: integer); { пометить ячейку как помеченную } procedure SetTagRect(x1,y1,x2,y2: integer); procedure SetFirstRobotPos(x,y: integer); procedure MoveRobotToFirstPos; @@ -72,11 +72,11 @@ type procedure HorizWall(x,y,len: integer); procedure VertWall(x,y,len: integer); procedure TaskText(s: string); - // + // примитивы для выполнителя procedure DrawRobot; procedure MoveRobot(x,y: integer); - procedure SetPaintUser(x,y: integer); { - } - procedure SetRobotPos(x,y: integer); // MoveRobot + procedure SetPaintUser(x,y: integer); { пометить ячейку как нарисованную - выполнитель} + procedure SetRobotPos(x,y: integer); // синоним MoveRobot function WallFromLeft(x,y: integer): boolean; function WallFromRight(x,y: integer): boolean; function WallFromUp(x,y: integer): boolean; @@ -157,7 +157,7 @@ var t: System.Threading.Thread; -//------------ ------------- +//------------ Вспомогательные ------------- procedure SetLabelStepText(s: string); begin labelStep.Text := s; @@ -406,8 +406,8 @@ begin DrawCell(vx,vy); DrawCell(x,y); Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); -// labelStep.Invoke(SetLabelStepText,': ' + IntToStr(movenum)); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); +// labelStep.Invoke(SetLabelStepText,'Шаг: ' + IntToStr(movenum)); end; procedure TRobotField.SetRobotPos(x,y: integer); @@ -484,7 +484,7 @@ end; procedure TRobotField.CheckTaskCall; begin if not TaskIsCalled then - RobotError(' Task ',' '); + RobotError('Процедура Task вызова задания должна быть первой','Выполнение программы прервано'); end; procedure TRobotField.Right; @@ -492,7 +492,7 @@ begin CheckTaskCall; if not WallFromRight then MoveRobot(RobotX+1,RobotY) - else RobotError(': '); + else RobotError('Робот: врезался в правую стену'); end; procedure TRobotField.Left; @@ -500,7 +500,7 @@ begin CheckTaskCall; if not WallFromLeft then MoveRobot(RobotX-1,RobotY) - else RobotError(': '); + else RobotError('Робот: врезался в левую стену'); end; procedure TRobotField.Up; @@ -508,7 +508,7 @@ begin CheckTaskCall; if not WallFromUp then MoveRobot(RobotX,RobotY-1) - else RobotError(': '); + else RobotError('Робот: врезался в верхнюю стену'); end; procedure TRobotField.Down; @@ -516,15 +516,15 @@ begin CheckTaskCall; if not WallFromDown then MoveRobot(RobotX,RobotY+1) - else RobotError(': '); + else RobotError('Робот: врезался в нижнюю стену'); end; procedure TRobotField.Paint; begin CheckTaskCall; Inc(movenum); - SetSafeLabelStepText(': ' + IntToStr(movenum)); -// labelStep.Text := ': ' + IntToStr(movenum); + SetSafeLabelStepText('Шаг: ' + IntToStr(movenum)); +// labelStep.Text := 'Шаг: ' + IntToStr(movenum); SetPaintUser(RobotX,RobotY); DrawCell(RobotX,RobotY); end; @@ -591,14 +591,14 @@ end; procedure TRobotField.Stop; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; buttonStep.Enabled := True; t.Suspend; end; procedure TRobotField.Start; begin - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Стоп (Enter)'; buttonStep.Enabled := False; t.Resume; end; @@ -644,7 +644,7 @@ begin Result := ID; end; -//--------- +//--------- Интерфейс и обработчики procedure LoadIni(var settings: IniSettings); var Ini: TIniFile; begin @@ -712,13 +712,13 @@ begin if t.ThreadState = System.Threading.ThreadState.Suspended then begin robField.StepFlag := False; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Выполняю задание'; robField.Start; end else begin robField.StepFlag := True; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Остановился'; robField.Stop; end; (GraphABCControl as Control).Focus; @@ -729,33 +729,33 @@ begin robField.StepFlag := True; t.Resume; (GraphABCControl as Control).Focus; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Команда выполнена'; end; procedure buttonHelpClick(o: Object; e: EventArgs); begin - MessageBox.Show(' : .., 2002-07 '#10#13#10#13+ - ' :'#10#13+ - ' Right - '#10#13+ - ' Left - '#10#13 - ' Up - '#10#13+ - ' Down - '#10#13 - ' Paint - '#10#13 - ' Speed(n) - n (n=0..10)'#10#13 - ' Stop - '#10#13 - ' Start - '#10#13#10#13 - ', :'#10#13 - ' WallFromRight - '#10#13 - ' WallFromLeft - ;'#10#13 - ' WallFromUp - ;'#10#13 - ' WallFromDown - ;'#10#13 - ' FreeFromRight - ;'#10#13 - ' FreeFromLeft - ;'#10#13 - ' FreeFromUp - ;'#10#13 - ' FreeFromDown - ;'#10#13 - ' CellIsPainted - ;'#10#13 - ' CellIsFree - .'#10#13, - ' - '); + MessageBox.Show('Разработчик исполнителя Робот: Михалкович С.С., 2002-07 '#10#13#10#13+ + 'Команды исполнителя Робот:'#10#13+ + ' Right - вправо'#10#13+ + ' Left - влево'#10#13 + ' Up - вверх'#10#13+ + ' Down - вниз'#10#13 + ' Paint - закрасить текущую клетку'#10#13 + ' Speed(n) - установить скорость n (n=0..10)'#10#13 + ' Stop - остановить Робота'#10#13 + ' Start - запустить Робота'#10#13#10#13 + 'Условия, проверяемые исполнителем Робот:'#10#13 + ' WallFromRight - справа стена'#10#13 + ' WallFromLeft - слева стена;'#10#13 + ' WallFromUp - сверху стена;'#10#13 + ' WallFromDown - снизу стена;'#10#13 + ' FreeFromRight - справа свободно;'#10#13 + ' FreeFromLeft - слева свободно;'#10#13 + ' FreeFromUp - сверху свободно;'#10#13 + ' FreeFromDown - снизу свободно;'#10#13 + ' CellIsPainted - клетка закрашена;'#10#13 + ' CellIsFree - клетка не закрашена.'#10#13, + 'Исполнитель Робот - Справка'); (GraphABCControl as Control).Focus; end; @@ -851,7 +851,7 @@ begin buttonHelp.Location := new Point(359, 18); buttonHelp.Size := new Size(107, 24); buttonHelp.TabStop := false; - buttonHelp.Text := ' (F1)'; + buttonHelp.Text := 'Справка (F1)'; // buttonHelp.UseVisualStyleBackColor := true; // // buttonExit @@ -860,7 +860,7 @@ begin buttonExit.Location := new System.Drawing.Point(241, 18); buttonExit.Size := new System.Drawing.Size(107, 24); buttonExit.TabStop := false; - buttonExit.Text := ' (Esc)'; + buttonExit.Text := 'Выход (Esc)'; // buttonExit.UseVisualStyleBackColor := true; // // buttonStep @@ -869,7 +869,7 @@ begin buttonStep.Location := new Point(123, 18); buttonStep.Size := new Size(107, 24); buttonStep.TabStop := false; - buttonStep.Text := ' (Space)'; + buttonStep.Text := 'Шаг (Space)'; // buttonStep.UseVisualStyleBackColor := true; // // buttonStart @@ -878,7 +878,7 @@ begin buttonStart.Location := new Point(5, 18); buttonStart.Size := new Size(107, 24); buttonStart.TabStop := false; - buttonStart.Text := ' (Enter)'; + buttonStart.Text := 'Пуск (Enter)'; // buttonStart.UseVisualStyleBackColor := true; // // tableLayoutPanelBottom @@ -904,7 +904,7 @@ begin labelExState.Location := new Point(5, 2); labelExState.Margin := new Padding(3, 0, 3, 3); labelExState.Size := new Size(453, 15); - labelExState.Text := ': '; + labelExState.Text := 'Робот: Готов'; labelExState.TextAlign := ContentAlignment.MiddleCenter; // // groupBoxExState @@ -936,7 +936,7 @@ begin labelState.Location := new Point(6, 54); labelState.Margin := new Padding(0); labelState.Size := new Size(83, 17); - labelState.Text := ':'; + labelState.Text := 'Состояние:'; // // labelStep // @@ -945,7 +945,7 @@ begin labelStep.ForeColor := System.Drawing.Color.Black; labelStep.Location := new Point(130, 54); labelStep.Size := new Size(66, 18); - labelStep.Text := ': 0'; + labelStep.Text := 'Шаг: 0'; labelStep.TextAlign := ContentAlignment.MiddleLeft; // // trackBarSpeed @@ -962,7 +962,7 @@ begin labelSpeed.Location := new Point(6, 16); labelSpeed.Margin := new Padding(0); labelSpeed.Size := new Size(73, 17); - labelSpeed.Text := ':'; + labelSpeed.Text := 'Скорость:'; // // tableLayoutPanelTop // @@ -988,7 +988,7 @@ begin labelZad.Location := new Point(6, 3); labelZad.Margin := new Padding(4, 1, 3, 0); labelZad.Size := new Size(668, 14); - labelZad.Text := ''; + labelZad.Text := 'Задание'; labelZad.TextAlign := ContentAlignment.MiddleLeft; // // ExecutorForm @@ -998,7 +998,7 @@ begin MainForm.Controls.Add(tableLayoutPanelTop); MainForm.Controls.Add(BottomPanel); MainForm.MinimumSize := new Size(687, 240); - MainForm.Text := ' '; + MainForm.Text := 'Исполнитель Робот'; BottomPanel.ResumeLayout(false); panelBottomLeft.ResumeLayout(false); tableLayoutPanelBottom.ResumeLayout(false); @@ -1049,7 +1049,7 @@ begin MainForm.Bounds := rec; end; -// - +// Добавил - МА procedure ResRB(TaskName: string); external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'resrb'; // @@ -1059,21 +1059,21 @@ begin buttonStart.Enabled := False; buttonStep.Enabled := False; if (robField.DimX*robField.DimY=0) then - RobotError(': Task',' ') + RobotError('Робот: Не вызвана процедура Task','Задание отсутствует') else if robField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Text := ': '; - // - + labelExState.Text := 'Робот: Задание выполнено'; + // Добавил - МА try ResRB(robField.TaskName); except end; // end - else labelExState.Text := ': , '; + else labelExState.Text := 'Робот: Работа окончена, задание не выполнено'; end; var @@ -1150,14 +1150,14 @@ finalization {buttonStart.Enabled := False; buttonStep.Enabled := False; if (robField.DimX*robField.DimY=0) then - RobotError(': Task',' ') + RobotError('Робот: Не вызвана процедура Task','Задание отсутствует') else if robField.IsSolution then begin tableLayoutPanel1.BackColor := LabelGoodEndColor; labelExState.BackColor := LabelGoodEndColor; tableLayoutPanelBottom.BackColor := LabelGoodEndColor; - labelExState.Text := ': '; + labelExState.Text := 'Робот: Задание выполнено'; end - else labelExState.Text := ': , ';} + else labelExState.Text := 'Робот: Работа окончена, задание не выполнено';} __FinalizeModule; end. \ No newline at end of file diff --git a/bin/Lib/RobotZadan.pas b/bin/Lib/RobotZadan.pas index 11629d802..f4eb6baac 100644 --- a/bin/Lib/RobotZadan.pas +++ b/bin/Lib/RobotZadan.pas @@ -181,7 +181,7 @@ end; procedure a1; begin - TaskText(' a1. '); + TaskText('Задание a1. Закрасить помеченные клетки'); Field(7,4); RobotBeginEnd(2,2,1,1); HorizontalWall(1,1,5); @@ -191,7 +191,7 @@ end; procedure a2; var n: integer; begin - TaskText(' a2. '); + TaskText('Задание a2. Закрасить помеченные клетки'); n:=3; Field(n,n); RobotBeginEnd(1,1,1,1); @@ -203,7 +203,7 @@ end; procedure a3; begin - TaskText(' a3. '); + TaskText('Задание a3. Закрасить помеченные клетки'); Field(4,2); RobotBeginEnd(1,1,4,1); TagRect(1,1,4,2); @@ -214,7 +214,7 @@ end; procedure a4; begin - TaskText(' a4. '); + TaskText('Задание a4. Закрасить помеченные клетки'); Field(4,3); RobotBeginEnd(1,3,1,3); Tag(2,3);Tag(3,3);Tag(4,3); @@ -225,14 +225,14 @@ end; procedure c1; begin - TaskText(' c1. '); + TaskText('Задание c1. Дойти до правой клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); end; procedure c2; begin - TaskText(' c2. '); + TaskText('Задание c2. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(1,1,10,1); @@ -240,7 +240,7 @@ end; procedure c3; begin - TaskText(' c3. '); + TaskText('Задание c3. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(2,1,11,1); @@ -248,7 +248,7 @@ end; procedure c4; begin - TaskText(' c4. '); + TaskText('Задание c4. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(1,1,11,1); TagRect(1,1,11,1); @@ -257,7 +257,7 @@ end; procedure c5; var i: integer; begin - TaskText(' c5. '); + TaskText('Задание c5. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(1,1,11,11); for i:=1 to 10 do @@ -267,7 +267,7 @@ end; procedure c6; var i: integer; begin - TaskText(' c6. '); + TaskText('Задание c6. Закрасить помеченные клетки'); Field(17,1); RobotBeginEnd(17,1,17,1); for i:=1 to 8 do @@ -277,7 +277,7 @@ end; procedure c7; var i: integer; begin - TaskText(' c7. '); + TaskText('Задание c7. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(2,1,11,2); @@ -291,7 +291,7 @@ end; procedure c8; var i: integer; begin - TaskText(' c8. '); + TaskText('Задание c8. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(11,1,1,1); TagRect(1,1,11,1); @@ -302,7 +302,7 @@ end; procedure c9; var i: integer; begin - TaskText(' c9. '); + TaskText('Задание c9. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,2,11,2); for i:=1 to 5 do @@ -314,7 +314,7 @@ end; procedure c10; begin - TaskText(' c10. '); + TaskText('Задание c10. Закрасить помеченные клетки'); Field(11,2); RobotBeginEnd(1,1,1,2); TagRect(1,1,10,2); @@ -323,7 +323,7 @@ end; procedure c11; begin - TaskText(' c11. '); + TaskText('Задание c11. Закрасить помеченные клетки'); Field(10,2); RobotBeginEnd(10,1,10,2); HorizontalWall(2,1,9); @@ -332,7 +332,7 @@ end; procedure c12; begin - TaskText(' c12. '); + TaskText('Задание c12. Закрасить помеченные клетки'); Field(11,1); RobotBeginEnd(6,1,6,1); TagRect(1,1,11,1); @@ -340,7 +340,7 @@ end; procedure c13; begin - TaskText(' c13. '); + TaskText('Задание c13. Закрасить помеченные клетки'); Field(9,9); RobotBeginEnd(9,1,9,1); TagRect(1,1,9,1); @@ -351,7 +351,7 @@ end; procedure c14; begin - TaskText(' c14. '); + TaskText('Задание c14. Закрасить помеченные клетки'); Field(9,9); RobotBeginEnd(1,5,1,5); Tag(5,1); Tag(4,2); Tag(3,3); Tag(2,4); @@ -362,7 +362,7 @@ end; procedure c15; begin - TaskText(' c15. '); + TaskText('Задание c15. Закрасить помеченные клетки'); Field(11,11); RobotBeginEnd(6,6,6,6); TagRect(6,1,6,11); @@ -372,7 +372,7 @@ end; procedure c16; var i: integer; begin - TaskText(' c16. '); + TaskText('Задание c16. Закрасить помеченные клетки'); Field(12,3); RobotBeginEnd(2,2,2,2); TagRect(2,2,11,2); @@ -389,7 +389,7 @@ end; procedure if1; var r: integer; begin - TaskText(' if1. '); + TaskText('Задание if1. Обойти препятствие и закрасить клетку'); Field(5,5); RobotBeginEnd(2,3,4,3); Tag(4,3); @@ -410,7 +410,7 @@ end; procedure if2; var r1,r2,r3,r4: integer; begin - TaskText(' if2. ( , , )'); + TaskText('Задание if2. Закрасить клетки у стен (стены могут быть независимо слева, справа, сверху и снизу)'); Field(5,5); RobotBeginEnd(3,3,3,3); r1:=random(2); @@ -443,7 +443,7 @@ end; procedure if3; var n,r: integer; begin - TaskText(' if3. ( )'); + TaskText('Задание if3. Закрасить клетку в противоположном углу (Робот может находиться в любом из углов)'); n:=2; Field(n,n); r:=random(4); @@ -476,7 +476,7 @@ end; procedure if4; var r: integer; begin - TaskText(' if4. , ( , , )'); + TaskText('Задание if4. Закрасить клетку, противоположную стене (стена может располагаться слева, справа, сверху или снизу)'); Field(5,5); RobotBegin(3,3); r:=random(4); @@ -509,7 +509,7 @@ end; procedure if5; var r: integer; begin - TaskText(' if5. ( , , )'); + TaskText('Задание if5. Закрасить клетки в зависимости от наличия стены (стена может располагаться слева, справа, сверху или снизу)'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -542,7 +542,7 @@ end; procedure if6; var r: integer; begin - TaskText(' if6. , ( , , )'); + TaskText('Задание if6. Закрасить клетку, противоположную закрашенной (закрашенная клетка может находиться слева, справа, сверху или снизу)'); Field(5,5); RobotBegin(3,3); r:=random(4); @@ -575,7 +575,7 @@ end; procedure if7; var r: integer; begin - TaskText(' if7. , '); + TaskText('Задание if7. Закрасить клетку, противоположную углу'); Field(4,4); r:=random(4); if r=0 then @@ -611,7 +611,7 @@ end; procedure if8; var r1,r2: integer; begin - TaskText(' if8. , if'); + TaskText('Задание if8. Закрасить клетки, используя вложенные операторы if'); Field(6,6); RobotBeginEnd(2,2,3,3); r1:=random(2); @@ -653,7 +653,7 @@ end; procedure if9; var r: integer; begin - TaskText(' if9. '); + TaskText('Задание if9. Закрасить клетки в зависимости от наличия стен слева и справа'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -683,7 +683,7 @@ end; procedure if10; var r: integer; begin - TaskText(' if10. '); + TaskText('Задание if10. Закрасить клетки в зависимости от наличия закрашенных клеток слева и справа'); Field(5,5); RobotBeginEnd(3,3,3,3); r:=random(4); @@ -710,7 +710,7 @@ end; procedure if11; var r: integer; begin - TaskText(' if11. '); + TaskText('Задание if11. Закрасить первую незакрашенную клетку справа'); Field(5,5); RobotBeginEnd(2,2,4,2); r:=random(3); @@ -734,7 +734,7 @@ end; procedure w1; var n: integer; begin - TaskText(' w1. '); + TaskText('Задание w1. Пройти коридор переменной длины'); n:=random(7)+8; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -743,7 +743,7 @@ end; procedure w2; var n: integer; begin - TaskText(' w2. '); + TaskText('Задание w2. Закрасить коридор переменной длины'); n:=random(7)+8; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -753,7 +753,7 @@ end; procedure w3; var n: integer; begin - TaskText(' w3. '); + TaskText('Задание w3. Дойти до конца стены переменной длины'); n:=random(8)+3; Field(12,3); RobotBeginEnd(1,1,n+1,1); @@ -763,7 +763,7 @@ end; procedure w4; var n,i: integer; begin - TaskText(' w4. '); + TaskText('Задание w4. Дойти до конца закрашенного ряда переменной длины'); n:=random(7)+3; Field(10,3); RobotBeginEnd(2,2,n+1,2); @@ -774,7 +774,7 @@ end; procedure w5; var n,m,i,j: integer; begin - TaskText(' w5. '); + TaskText('Задание w5. Дойти до правого нижнего угла закрашенного прямоугольника переменного размера'); n:=random(7)+3; m:=random(6)+3; Field(10,9); @@ -787,7 +787,7 @@ end; procedure w6; var n,m: integer; begin - TaskText(' w6. '); + TaskText('Задание w6. Найти в стене проход и попасть в правый нижний угол'); n:=random(7)+2; m:=random(12)+2; Field(15,10); @@ -799,7 +799,7 @@ end; procedure w7; var n,m,k: integer; begin - TaskText(' w7. . , - '); + TaskText('Задание w7. Дойти до третьей закрашенной клетки. После первой закрашенной клетки надо идти вверх, после второй - вправо'); n:=random(7)+2; m:=random(7)+1; k:=random(7)+1; @@ -813,7 +813,7 @@ end; procedure w8; var n1,n2,len: integer; begin - TaskText(' w8. '); + TaskText('Задание w8. Закрасить все клетки над стеной переменной длины'); n1:=random(3)+2; n2:=n1+random(4); len:=random(5)+4; @@ -826,7 +826,7 @@ end; procedure w9; var n: integer; begin - TaskText(' w9. '); + TaskText('Задание w9. Перепрыгнуть стену с закрашиванием'); n:=random(7)+2; Field(15,10); RobotBeginEnd(7,10,8,10); @@ -837,7 +837,7 @@ end; procedure w10; var n1,n2,r1,r2: integer; begin - TaskText(' w10. '); + TaskText('Задание w10. Обойти препятствия'); n1:=random(7)+2; n2:=random(7)+2; r1:=4+random(3); @@ -853,7 +853,7 @@ end; procedure w11; var n1,len: integer; begin - TaskText(' w11. '); + TaskText('Задание w11. Закрасить все клетки вокруг стены'); n1:=random(3)+3; len:=random(5)+4; Field(15,5); @@ -865,7 +865,7 @@ end; procedure w12; var n1,n2,len1,len2: integer; begin - TaskText(' w12. '); + TaskText('Задание w12. Закрасить все клетки вокруг прямоугольника'); n1:=random(3)+3; len1:=random(5)+4; n2:=random(3)+3; @@ -885,7 +885,7 @@ end; procedure w13; var n,i,m: integer; begin - TaskText(' w13. , '); + TaskText('Задание w13. Подняться до клетки, имеющей проход налево или проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); @@ -909,7 +909,7 @@ end; procedure w14; var n,m,i: integer; begin - TaskText(' w14. , '); + TaskText('Задание w14. Подняться до клетки, имеющей проход налево и проход направо'); n:=random(7)+2; Field(5,10);RobotBegin(3,10); VerticalWall(2,9,2); VerticalWall(3,9,2); @@ -934,7 +934,7 @@ end; procedure w15; var n,z,i: integer; begin - TaskText(' w15. , '); + TaskText('Задание w15. Закрасить клетку под первой закрашенной клеткой, под которой свободно'); Field(15,5); RobotBegin(2,3); HorizontalWall(2,3,2); @@ -963,7 +963,7 @@ end; procedure w16; var n,i: integer; begin - TaskText(' w16. '); + TaskText('Задание w16. Идти до конца забора переменной длины'); n:=random(6)+8; Field(15,5); RobotBeginEnd(2,3,n+1,3); @@ -974,7 +974,7 @@ end; procedure w17; var n,i: integer; begin - TaskText(' w17. '); + TaskText('Задание w17. Идти до конца забора переменной длины'); n:=random(6)+1; Field(15,5); RobotBeginEnd(2,3,2*n+1,3); @@ -985,7 +985,7 @@ end; procedure cif1; var n,i,r: integer; begin - TaskText(' cif1. '); + TaskText('Задание cif1. Закрасить все клетки под стенами'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1004,7 +1004,7 @@ end; procedure cif2; var n,i,r: integer; begin - TaskText(' cif2. '); + TaskText('Задание cif2. Закрасить помеченные клетки'); n:=14; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1028,7 +1028,7 @@ end; procedure cif3; var n,i,r: integer; begin - TaskText(' cif3. '); + TaskText('Задание cif3. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1052,7 +1052,7 @@ end; procedure cif4; var n,i,r1,r2: integer; begin - TaskText(' cif4. '); + TaskText('Задание cif4. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1073,7 +1073,7 @@ end; procedure cif5; var n,i,r1,r2: integer; begin - TaskText(' cif5. '); + TaskText('Задание cif5. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1094,7 +1094,7 @@ end; procedure cif6; var n,i,r1,r2: integer; begin - TaskText(' cif6. '); + TaskText('Задание cif6. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1114,7 +1114,7 @@ end; procedure cif7; var n,i,r1,r2: integer; begin - TaskText(' cif7. , '); + TaskText('Задание cif7. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1135,7 +1135,7 @@ end; procedure cif8; var n,i,r1,r2: integer; begin - TaskText(' cif8. , '); + TaskText('Задание cif8. Закрасить помеченные клетки, используя два условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1159,7 +1159,7 @@ end; procedure cif9; var n,i,r1,r2: integer; begin - TaskText(' cif9. , '); + TaskText('Задание cif9. Закрасить помеченные клетки, используя три условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1183,7 +1183,7 @@ end; procedure cif10; var n,i,r1,r2,r3: integer; begin - TaskText(' cif10. '); + TaskText('Задание cif10. Закрасить помеченные клетки'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1207,7 +1207,7 @@ end; procedure cif11; var n,i,r1,r2,r3: integer; begin - TaskText(' cif11. , and'); + TaskText('Задание cif11. Закрасить помеченные клетки, используя в условии две операции and'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1231,7 +1231,7 @@ end; procedure cif12; var n,i,r1,r2,r3: integer; begin - TaskText(' cif12. , and or'); + TaskText('Задание cif12. Закрасить помеченные клетки, используя в условии операции and и or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1255,7 +1255,7 @@ end; procedure cif13; var n,i,r2,r3: integer; begin - TaskText(' cif13. , and or'); + TaskText('Задание cif13. Закрасить помеченные клетки, используя в условии две операции and и одну or'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1276,7 +1276,7 @@ end; procedure cif14; var n,i,r2,r3: integer; begin - TaskText(' cif14. , '); + TaskText('Задание cif14. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; Field(n,4); RobotBeginEnd(1,2,n-1,2); @@ -1298,7 +1298,7 @@ end; procedure cif15; var n,i,r2,r3: integer; begin - TaskText(' cif15. , '); + TaskText('Задание cif15. Закрасить помеченные клетки, используя вложенные условные операторы'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -1320,7 +1320,7 @@ end; procedure cif16; var n: integer; begin - TaskText(' cif16. '); + TaskText('Задание cif16. Перейти в противоположный угол'); Field(9,9); n:=random(4); if n=0 then @@ -1336,7 +1336,7 @@ end; procedure cif17; var n,m,s: integer; begin - TaskText(' cif17. ( )'); + TaskText('Задание cif17. Дойти до конца тупика переменного размера (вертикальный коридор может сворачивать направо или налево)'); Field(15,10); RobotBeginEnd(8,10,8,1); n:=random(9)+2; @@ -1365,7 +1365,7 @@ end; procedure cif18; var n,c,i: integer; begin - TaskText(' cif18. '); + TaskText('Задание cif18. Перейти в конец более короткого ряда'); Field(15,4); RobotBegin(2,2); c:=random(2); @@ -1389,7 +1389,7 @@ end; procedure cif19; var n1,n2: integer; begin - TaskText(' cif19. '); + TaskText('Задание cif19. Перейти в конец более короткой стены'); Field(15,4); RobotBegin(2,3); n1:=random(9)+4; @@ -1406,7 +1406,7 @@ end; procedure cif20; var n1,n2: integer; begin - TaskText(' cif20. '); + TaskText('Задание cif20. Перейти в конец более длинной стены'); Field(15,4); RobotBegin(2,3); n1:=random(9)+4; @@ -1423,7 +1423,7 @@ end; procedure cif21; var n,m,c: integer; begin - TaskText(' cif21. '); + TaskText('Задание cif21. Перейти на вторую закрашенную клетку'); Field(15,8); RobotBegin(8,2); c:=random(2); @@ -1446,7 +1446,7 @@ end; procedure cif22; var n1,n2,n,m,c: integer; begin - TaskText(' cif22. '); + TaskText('Задание cif22. Найти выход и переместиться в левую верхнюю клетку поля '); Field(15,5); n1:=random(3)+2; n2:=random(10)+5; @@ -1486,7 +1486,7 @@ end; procedure count1; var n: integer; begin - TaskText(' count1. , . -'); + TaskText('Задание count1. Дойти до правой стены, закрасить клетку и вернуться. Использовать переменную-счетчик'); Field(10,5); n:=random(7)+3; RobotBeginEnd(n,3,n,3); @@ -1496,7 +1496,7 @@ end; procedure count2; var n1,n2,m: integer; begin - TaskText(' count2. . '); + TaskText('Задание count2. Закрасить правый нижний угол и вернуться. Использовать два счетчика'); m:=8; Field(m,m); n1:=random(6)+2; @@ -1508,7 +1508,7 @@ end; procedure count3; var n1,n2,m,t,i: integer; begin - TaskText(' count3. , '); + TaskText('Задание count3. Переместить Робота в клетку, симметричную относительно диагонали'); m:=10; Field(m,m); n1:=random(7)+2; @@ -1529,7 +1529,7 @@ end; procedure count4; var n1,n2: integer; begin - TaskText(' count4. '); + TaskText('Задание count4. Обойти стену переменной длины'); Field(10,4); n1:=random(5)+4; n2:=random(4)+1; @@ -1540,7 +1540,7 @@ end; procedure count5; var n,m,n1,m1: integer; begin - TaskText(' count5. '); + TaskText('Задание count5. Закрасить периметр и вернуться назад'); n:=random(3)+8; m:=random(3)+8; Field(n,m); @@ -1556,7 +1556,7 @@ end; procedure count6; var n,m: integer; begin - TaskText(' count6. '); + TaskText('Задание count6. Переместиться к ближайшей стене'); Field(15,5); RobotBegin(8,3); n:=random(5)+2; @@ -1573,7 +1573,7 @@ end; procedure count7; var n,l,r: integer; begin - TaskText(' count7. ( )'); + TaskText('Задание count7. Обойти стену переменной длины (перегородка нахоится слева или справа)'); Field(16,4); n:=random(3)+2; l:=random(12)+1; @@ -1589,7 +1589,7 @@ end; procedure count8; var i,r,cc: integer; begin - TaskText(' count8. '); + TaskText('Задание count8. Остановиться на пятой закрашенной клетке'); Field(21,3); RobotBeginEnd(2,2,1,2); cc:=0; @@ -1616,7 +1616,7 @@ end; procedure count9; var cc,i,r: integer; begin - TaskText(' count9. '); + TaskText('Задание count9. Остановиться на третьей закрашенной подряд клетке'); Field(20,3); RobotBeginEnd(2,2,1,2); cc:=0; @@ -1646,7 +1646,7 @@ end; procedure count10; var n,m: integer; begin - TaskText(' count10. , '); + TaskText('Задание count10. Закрасить клетки до конца нижней стены, но не менее пяти'); Field(11,3); n:=random(9)+1; if n<5 then @@ -1660,7 +1660,7 @@ end; procedure count11; var n: integer; begin - TaskText(' count11. 4, '); + TaskText('Задание count11. Если длина тупика больше 4, то закрасить его первую клетку'); Field(11,3); n:=random(9)+1; RobotBeginEnd(1,2,2,2); @@ -1674,7 +1674,7 @@ end; procedure count12; var n,i: integer; begin - TaskText(' count12. '); + TaskText('Задание count12. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1685,7 +1685,7 @@ end; procedure count13; var n,i: integer; begin - TaskText(' count13. '); + TaskText('Задание count13. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1696,7 +1696,7 @@ end; procedure count14; var n,i: integer; begin - TaskText(' count14. '); + TaskText('Задание count14. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1707,7 +1707,7 @@ end; procedure count15; var n,i: integer; begin - TaskText(' count15. '); + TaskText('Задание count15. Закрасить помеченные клетки в коридоре переменной длины'); n:=random(4)+16; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -1718,7 +1718,7 @@ end; procedure count16; var n,i,f,z: integer; begin - TaskText(' count16. '); + TaskText('Задание count16. Закрасить все нечетные пролеты между закрашенными клетками'); Field(25,3); RobotBeginEnd(2,2,25,2); n:=2+random(5); @@ -1748,7 +1748,7 @@ end; procedure count17; var n,i,f: integer; begin - TaskText(' count17. , '); + TaskText('Задание count17. Остановиться на первой клетке, нарушающей закономерность'); Field(25,3); n:=random(20)+4; RobotBeginEnd(2,2,n,2); @@ -1769,7 +1769,7 @@ end; procedure cc1; var i: integer; begin - TaskText(' cc1. , '); + TaskText('Задание cc1. Закрасить помеченные клетки, используя вложенные циклы'); Field(31,7); RobotBeginEnd(1,1,31,7); for i:=1 to 6 do @@ -1779,7 +1779,7 @@ end; procedure cc2; var a,b,i: integer; begin - TaskText(' cc2. , '); + TaskText('Задание cc2. Закрасить помеченные клетки, используя вложенные циклы'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; @@ -1795,7 +1795,7 @@ end; procedure cc3; var a,b,i: integer; begin - TaskText(' cc3. , downto'); + TaskText('Задание cc3. Закрасить помеченные клетки, используя вложенный цикл с downto'); Field(22,7); RobotBeginEnd(1,1,22,7); a:=1; @@ -1811,7 +1811,7 @@ end; procedure cc4; var i: integer; begin - TaskText(' cc4. , '); + TaskText('Задание cc4. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(11,10); RobotBeginEnd(1,1,1,10); TagRect(1,1,11,9); @@ -1822,7 +1822,7 @@ end; procedure cc5; var i: integer; begin - TaskText(' cc5. , '); + TaskText('Задание cc5. Пройти лабиринт, используя во внешнем цикле два вложенных цикла'); Field(14,9); RobotBeginEnd(1,1,1,9); for i:=1 to 4 do @@ -1835,7 +1835,7 @@ end; procedure cc6; var i,n,j: integer; begin - TaskText(' cc6. '); + TaskText('Задание cc6. Закрасить помеченные клетки'); n:=10; Field(20,n); RobotBeginEnd(1,n,20,n); j:=1; @@ -1849,7 +1849,7 @@ end; procedure cc7; var i: integer; begin - TaskText(' cc7. , '); + TaskText('Задание cc7. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(1,1,1,10); for i:=1 to 9 do @@ -1859,7 +1859,7 @@ end; procedure cc8; var i: integer; begin - TaskText(' cc8. , downto'); + TaskText('Задание cc8. Закрасить помеченные клетки, используя цикл с downto'); Field(10,10); RobotBeginEnd(1,1,1,10); for i:=1 to 9 do @@ -1869,7 +1869,7 @@ end; procedure cc9; var i: integer; begin - TaskText(' cc9. , '); + TaskText('Задание cc9. Закрасить помеченные клетки, используя во внешнем цикле два вложенных цикла'); Field(10,10); RobotBeginEnd(10,1,10,10); TagRect(10,1,10,9); @@ -1883,7 +1883,7 @@ end; procedure cc10; var i: integer; begin - TaskText(' cc10. '); + TaskText('Задание cc10. Закрасить помеченные клетки'); Field(15,8); RobotBeginEnd(1,1,1,8); for i:=1 to 7 do @@ -1893,7 +1893,7 @@ end; procedure cc11; var i: integer; begin - TaskText(' cc11. '); + TaskText('Задание cc11. Закрасить помеченные клетки'); Field(14,8); RobotBeginEnd(1,1,1,8); for i:=1 to 7 do @@ -1903,7 +1903,7 @@ end; procedure cc12; var i,p: integer; begin - TaskText(' cc12. '); + TaskText('Задание cc12. Закрасить помеченные клетки'); Field(33,7); RobotBeginEnd(1,1,1,7); p:=1; @@ -1917,7 +1917,7 @@ end; procedure cc13; var i: integer; begin - TaskText(' cc13. '); + TaskText('Задание cc13. Закрасить помеченные клетки'); Field(14,9); RobotBeginEnd(1,1,9,9); for i:=1 to 4 do @@ -1931,7 +1931,7 @@ end; procedure cc14; var i: integer; begin - TaskText(' cc14. '); + TaskText('Задание cc14. Пройти лабиринт'); Field(14,9); RobotBeginEnd(1,1,5,9); for i:=1 to 4 do @@ -1946,7 +1946,7 @@ end; procedure cc15; var i,n: integer; begin - TaskText(' cc15. '); + TaskText('Задание cc15. Закрасить помеченные клетки'); n:=8; Field(15,9); RobotBeginEnd(n,2,n,9); @@ -1957,7 +1957,7 @@ end; procedure cc16; var i,k,j: integer; begin - TaskText(' cc16. , '); + TaskText('Задание cc16. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(22,7); RobotBeginEnd(2,6,22,6); j:=2; @@ -1972,7 +1972,7 @@ end; procedure cc17; var i,j,k: integer; begin - TaskText(' cc17. , '); + TaskText('Задание cc17. Закрасить помеченные клетки, используя вложенный цикл во вложенном цикле'); Field(29,8); RobotBeginEnd(2,7,28,7); j:=2; @@ -1990,7 +1990,7 @@ end; procedure cc18; var i: integer; begin - TaskText(' cc18. , while for'); + TaskText('Задание cc18. Закрасить помеченные клетки, используя цикл while внутри цикла for'); Field(12,7); RobotBeginEnd(1,1,1,7); for i:=1 to 8 do HorizontalWall(2,i,12); @@ -2006,7 +2006,7 @@ end; procedure cc19; var i,n: integer; begin - TaskText(' cc19. . '); + TaskText('Задание cc19. Закрасить помеченные клетки. Высота поля может меняться'); n:=random(4)+6; Field(11,n); RobotBeginEnd(1,1,1,n); @@ -2020,7 +2020,7 @@ end; procedure mix1; var n1,n2,m: integer; begin - TaskText(' mix1. '); + TaskText('Задание mix1. Закрасить прямоугольник переменного размера'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2032,7 +2032,7 @@ end; procedure mix2; var n1,n2,m,i,j,ij: integer; begin - TaskText(' mix2. '); + TaskText('Задание mix2. Закрасить в шахматном порядке прямоугольник переменного размера'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2052,7 +2052,7 @@ end; procedure mix3; var n1,n2,m,l: integer; begin - TaskText(' mix3. , '); + TaskText('Задание mix3. Закрасить квадрат, предварительно определив его размер'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2066,7 +2066,7 @@ end; procedure mix4; var n1,n2,m,m1,m2: integer; begin - TaskText(' mix4. '); + TaskText('Задание mix4. Найти закрашенную клетку'); m:=10; Field(m,m); n1:=random(m-2)+2; @@ -2082,7 +2082,7 @@ end; procedure mix5; var n1,n2,m,m1,m2: integer; begin - TaskText(' mix5. , '); + TaskText('Задание mix5. Найти закрашенную клетку и закрасить клетки, находящиеся с ней на одной вертикали и горизонтали'); m:=10; Field(m,m); n1:=random(m-2)+2; @@ -2100,7 +2100,7 @@ end; procedure mix6; var i,c: integer; begin - TaskText(' mix6. , '); + TaskText('Задание mix6. Закрасить те клетки у правой стены, для которых закрашены клетки левой стены'); Field(11,11); RobotBeginEnd(1,1,1,11); for i:=1 to 10 do @@ -2117,7 +2117,7 @@ end; procedure mix7; var i,c1,c2: integer; begin - TaskText(' mix7. , '); + TaskText('Задание mix7. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки'); Field(11,11); RobotBeginEnd(1,1,1,11); for i:=1 to 10 do @@ -2135,7 +2135,7 @@ end; procedure mix8; var i,c1,c2,c3,c4: integer; begin - TaskText(' mix8. , '); + TaskText('Задание mix8. Закрасить горизонтальные ряды, в которых закрашены левая и правая клетки и еще ровно одна'); Field(11,15); RobotBeginEnd(1,1,1,15); for i:=1 to 14 do @@ -2160,7 +2160,7 @@ end; procedure mix9; var n1,n2,m,l1,l2: integer; begin - TaskText(' mix9. , , . '); + TaskText('Задание mix9. Закрасить прямоугольник, предварительно определив его размер, и вернуться в начальную позицию. Закрашенная клетка находится левее и ниже Робота'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2175,7 +2175,7 @@ end; procedure mix10; var n,n1,n2,m,l1,l2: integer; begin - TaskText(' mix10. , , '); + TaskText('Задание mix10. Закрасить прямоугольник, предварительно определив его размер, и вернуться в начальную позицию'); m:=10; Field(m,m); n1:=random(3)+2; @@ -2213,7 +2213,7 @@ procedure p1; TagRect(x,y-1,x,y+1); end; begin - TaskText(' p1. , Cross'); + TaskText('Задание p1. Закрасить помеченные клетки, составив процедуру Cross'); Field(10,10); RobotBeginEnd(3,7,5,3); KresTag(3,7); @@ -2229,7 +2229,7 @@ procedure p2; TagRect(3*i-1,2,3*i,3); end; begin - TaskText(' p2. , Square2'); + TaskText('Задание p2. Закрасить помеченные клетки, составив процедуру Square2'); Field(19,4); RobotBeginEnd(2,2,17,2); my(6); @@ -2238,7 +2238,7 @@ end; procedure p3; var i: integer; begin - TaskText(' p3. , Square2'); + TaskText('Задание p3. Закрасить помеченные клетки, используя процедуру Square2'); Field(12,12); RobotBeginEnd(11,11,1,1); for i:=1 to 6 do @@ -2247,7 +2247,7 @@ end; procedure p4; begin - TaskText(' p4. , Square2. Square4'); + TaskText('Задание p4. Закрасить помеченные клетки, используя процедуру Square2. Оформить полученный алгоритм в виде процедуры Square4'); Field(6,6); RobotBeginEnd(2,2,2,2); TagRect(2,2,5,5); @@ -2255,7 +2255,7 @@ end; procedure p5; begin - TaskText(' p5. , Square4'); + TaskText('Задание p5. Закрасить помеченные клетки, используя процедуру Square4'); Field(10,10); RobotBeginEnd(2,2,2,2); TagRect(2,2,9,9); @@ -2264,7 +2264,7 @@ end; procedure p6; var i: integer; begin - TaskText(' p6. , Row, '); + TaskText('Задание p6. Закрасить помеченные клетки, составив процедуру Row, в которой Робот закрашивает ряд и возвращается назад'); Field(9,9); RobotBeginEnd(1,2,1,8); for i:=1 to 4 do @@ -2274,7 +2274,7 @@ end; procedure p7; var i: integer; begin - TaskText(' p7. , Column, '); + TaskText('Задание p7. Закрасить помеченные клетки, составив процедуру Column, в которой Робот закрашивает колонку и возвращается назад'); Field(9,9); RobotBeginEnd(2,1,8,1); for i:=1 to 4 do @@ -2284,7 +2284,7 @@ end; procedure p8; var i: integer; begin - TaskText(' p8. , Row Column'); + TaskText('Задание p8. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(9,9); RobotBeginEnd(1,2,8,1); for i:=1 to 4 do @@ -2297,7 +2297,7 @@ end; procedure p9; var i,j: integer; begin - TaskText(' p9. , Row Column'); + TaskText('Задание p9. Закрасить помеченные клетки, используя процедуры Row и Column'); Field(15,15); RobotBeginEnd(2,2,6,6); i:=2; @@ -2311,7 +2311,7 @@ end; procedure p10; var i,j: integer; begin - TaskText(' p10. , Contour'); + TaskText('Задание p10. Закрасить помеченные клетки, составив процедуру Contour'); Field(31,7); RobotBeginEnd(2,2,26,2); i:=2; @@ -2328,7 +2328,7 @@ end; procedure p11; var i,j: integer; begin - TaskText(' p11. , Punktir'); + TaskText('Задание p11. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); for i:=1 to 7 do @@ -2339,7 +2339,7 @@ end; procedure p12; var i,j: integer; begin - TaskText(' p12. , Punktir'); + TaskText('Задание p12. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); for i:=1 to 7 do @@ -2353,7 +2353,7 @@ end; procedure p13; var i,j: integer; begin - TaskText(' p13. , Punktir'); + TaskText('Задание p13. Закрасить помеченные клетки, используя процедуру Punktir'); Field(17,14); RobotBeginEnd(2,2,2,14); for i:=1 to 5 do @@ -2368,7 +2368,7 @@ end; procedure p14; var i: integer; begin - TaskText(' p14. , Row1 Row2 '); + TaskText('Задание p14. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); Field(17,15); RobotBeginEnd(2,2,2,14); for i:=1 to 8 do TagRect(2*i,2,2*i,13); @@ -2379,7 +2379,7 @@ end; procedure p15; var i,j,n: integer; begin - TaskText(' p15. , Row1 Row2 '); + TaskText('Задание p15. Закрасить помеченные клетки, составив процедуры Row1 и Row2 для двух разновидностей рядов'); n:=14; Field(25,n+1); RobotBeginEnd(2,2,2,n); @@ -2397,7 +2397,7 @@ end; procedure pp1; var i: integer; begin - TaskText(' pp1. , RightN(n) LeftN(n)'); + TaskText('Задание pp1. Закрасить помеченные клетки, составив процедуры с параметром RightN(n) и LeftN(n)'); Field(12,7); RobotBeginEnd(1,1,1,7); for i:=1 to 8 do @@ -2407,7 +2407,7 @@ end; procedure pp2; begin - TaskText(' pp2. , PaintDown(n)'); + TaskText('Задание pp2. Закрасить помеченные клетки, составив процедуру с параметром PaintDown(n)'); Field(10,10); RobotBeginEnd(1,1,9,1); VerticalWall(2,2,9); TagRect(1,1,1,7); @@ -2420,7 +2420,7 @@ end; procedure pp3; var i,d: integer; begin - TaskText(' pp3. . RightN(n), LeftN(n), UpN(n), DownN(n)'); + TaskText('Задание pp3. Пройти лабиринт. Составить процедуры с параметрами RightN(n), LeftN(n), UpN(n), DownN(n)'); d:=9; Field(d,d); RobotBeginEnd(1,1,5,5); @@ -2435,7 +2435,7 @@ end; procedure pp4; begin - TaskText(' pp4. , SymbolT(m,h), m - T, h - '); + TaskText('Задание pp4. Закрасить помеченные клетки, составив процедуру SymbolT(m,h), где m - половина ширины символа T, а h - его высота'); Field(19,8); RobotBeginEnd(5,2,17,2); TagRect(2,2,8,2); TagRect(5,2,5,5); @@ -2445,7 +2445,7 @@ end; procedure pp5; begin - TaskText(' pp5. , Rect(w,h), w-, h- '); + TaskText('Задание pp5. Закрасить прямоугольник, составив процедуру Rect(w,h), где w-ширина, а h-высота прямоугольника'); Field(7,10); RobotBeginEnd(2,2,2,2); TagRect(2,2,6,9); @@ -2453,7 +2453,7 @@ end; procedure pp6; begin - TaskText(' pp6. , Rect(w,h)'); + TaskText('Задание pp6. Закрасить несколько прямоугольников, вызывая процедуру Rect(w,h)'); Field(18,12); RobotBeginEnd(2,3,3,7); TagRect(2,3,6,5); @@ -2466,7 +2466,7 @@ end; procedure pp7; var x1,x2,y1,y2: integer; begin - TaskText(' pp7. , Perimeter(w,h), w-, h- '); + TaskText('Задание pp7. Закрасить помеченные клетки, составив процедуру Perimeter(w,h), где w-ширина, а h-высота прямоугольника'); Field(13,11); RobotBeginEnd(3,2,9,3); x1:=3; x2:=7; y1:=2; y2:=5; TagRect(x1,y1,x1,y2); TagRect(x2,y1,x2,y2); TagRect(x1,y1,x2,y1); TagRect(x1,y2,x2,y2); @@ -2477,7 +2477,7 @@ end; procedure pp8; begin - TaskText(' pp8. , SymbolH(w,h,t), w-, h- , t - '); + TaskText('Задание pp8. Закрасить помеченные клетки, составив процедуру SymbolH(w,h,t), где w-ширина, h-высота символа, а t - расстояние от верхней границы до горизонтальной линии'); Field(16,8); RobotBeginEnd(2,2,13,1); TagRect(2,2,2,7); TagRect(5,2,5,7); TagRect(3,4,5,4); @@ -2488,7 +2488,7 @@ end; procedure examen1; var i,j: integer; begin - TaskText(' examen1. , Punktir'); + TaskText('Задание examen1. Закрасить помеченные клетки, составив процедуру Punktir'); Field(15,11); RobotBeginEnd(1,1,1,11); for i:=1 to 7 do @@ -2499,7 +2499,7 @@ end; procedure examen2; var i,j: integer; begin - TaskText(' examen2. , Punktir'); + TaskText('Задание examen2. Закрасить помеченные клетки, используя процедуру Punktir'); Field(16,12); RobotBeginEnd(2,2,3,11); for i:=1 to 7 do @@ -2515,7 +2515,7 @@ end; procedure examen3; var x1,x2,y1,y2: integer; begin - TaskText(' examen3. , Perimeter(n,m)'); + TaskText('Задание examen3. Закрасить помеченные клетки, составив процедуру Perimeter(n,m)'); Field(13,11); RobotBeginEnd(3,2,9,3); x1:=3; x2:=7; y1:=2; y2:=5; TagRect(x1,y1,x1,y2); TagRect(x2,y1,x2,y2); TagRect(x1,y1,x2,y1); TagRect(x1,y2,x2,y2); @@ -2527,7 +2527,7 @@ end; procedure examen4; var n1,n2,len1,len2: integer; begin - TaskText(' examen4. '); + TaskText('Задание examen4. Закрасить все клетки вокруг прямоугольника'); n1:=random(3)+3; len1:=random(5)+4; n2:=random(3)+3; @@ -2547,7 +2547,7 @@ end; procedure examen5; var i,n: integer; begin - TaskText(' examen5. '); + TaskText('Задание examen5. Закрасить все клетки в коридоре переменной длины'); n:=random(4)+10; Field(n,1); RobotBeginEnd(1,1,n,1); @@ -2558,7 +2558,7 @@ end; procedure examen6; var i,n,r1,r2: integer; begin - TaskText(' examen6. , 2 '); + TaskText('Задание examen6. Закрасить помеченные клетки, используя 2 условных оператора в цикле'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -2583,7 +2583,7 @@ end; procedure examen7; var i,n,r1,r2,r3: integer; begin - TaskText(' examen7. , "and" "or"'); + TaskText('Задание examen7. Закрасить помеченные клетки, используя в условии "and" и "or"'); n:=25; Field(n,3); RobotBeginEnd(1,2,n-1,2); @@ -2607,7 +2607,7 @@ end; procedure examen8; var n,r: integer; begin - TaskText(' examen8. '); + TaskText('Задание examen8. Закрасить клетку в противоположном углу'); n:=11; Field(n,n); RobotBegin(1,1); @@ -2641,7 +2641,7 @@ end; procedure examen9; var m,n1,n2: integer; begin - TaskText(' examen9. . '); + TaskText('Задание examen9. Закрасить угол и вернуться. Использовать два счетчика'); m:=8; Field(m,m); n1:=random(6)+2; @@ -2653,7 +2653,7 @@ end; procedure examen10; var n1,n2: integer; begin - TaskText(' examen10. '); + TaskText('Задание examen10. Обойти стену'); Field(10,4); n1:=random(5)+4; n2:=random(4)+1; @@ -2664,7 +2664,7 @@ end; procedure zzz; begin Field(10,2); - TaskText(' c1. '); + TaskText('Задание c1. Закрасить помеченные клетки'); CorrectFieldBounds; Stop; end; diff --git a/bin/Lib/Timers.pas b/bin/Lib/Timers.pas index 13287f776..a7c5c96b3 100644 --- a/bin/Lib/Timers.pas +++ b/bin/Lib/Timers.pas @@ -1,11 +1,11 @@ Unit Timers; (* - System.Timers.Timer - (c) .. 2007 + Обертка для класса System.Timers.Timer + (c) Брагилевский В.Н. 2007 - Timer PascalABC - Handle. + Сохранен интерфейс класса Timer из PascalABC + за исключением функции Handle. *) interface @@ -13,7 +13,7 @@ interface uses System; type - /// + /// Класс таймера Timer = class private _timer: System.Timers.Timer; @@ -24,15 +24,15 @@ type function GetInterval: integer; procedure OnTimer(sender: object; e: System.Timers.ElapsedEventArgs); public - /// ms TimerProc + /// Создает таймер с интервалом срабатывания ms миллисекунд и обработчиком TimerProc constructor Create(ms: integer; TimerProc: procedure); - /// + /// Запускает таймер procedure Start; - /// + /// Останавливает таймер procedure Stop; - /// + /// Запущен ли таймер property Enabled: boolean read GetEnabled write SetEnabled; - /// + /// Интервал срабатывания таймера property Interval: integer read GetInterval write SetInterval; end; diff --git a/bin/Lib/Utils.pas b/bin/Lib/Utils.pas index 25ed0c819..3ad50958c 100644 --- a/bin/Lib/Utils.pas +++ b/bin/Lib/Utils.pas @@ -20,7 +20,7 @@ external 'User32.dll' name 'MessageBox'; procedure ShowMessage(msg:string); begin - ShowMessage(msg,''); + ShowMessage(msg,'Сообщение'); end; procedure ShowMessage(msg,capt:string); diff --git a/bin/Lib/__RedirectIOMode.pas b/bin/Lib/__RedirectIOMode.pas index ae5ce5d1a..1cc6a0b5f 100644 --- a/bin/Lib/__RedirectIOMode.pas +++ b/bin/Lib/__RedirectIOMode.pas @@ -4,14 +4,14 @@ unit __RedirectIOMode; //------------------------------------------------------------------------------ -// -// () DarkStar 2007 -// : -// 1. ErrorStream [READLNSIGNAL] -// 2. AppDomain.CurrentDomain.UnhandledException -// ErrorStream -// 3. Application.ThreadException -// ErrorStream +// Модуль подключаемый в режиме запуска со связью с оболочкой +// (с) DarkStar 2007 +// Функции: +// 1. Посылка в поток ErrorStream сигнала [READLNSIGNAL] +// 2. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и +// пердача их в поток ErrorStream +// 3. Перехват исключений по Application.ThreadException и +// пердача их в поток ErrorStream //------------------------------------------------------------------------------ {$reference 'System.Windows.Forms.dll'} @@ -112,7 +112,7 @@ begin if AppDomain.CurrentDomain.GetData('_RedirectIO_SpecialArgs') = nil then Console.ReadLine; RedirectIOInDebugMode := true; - if IOStandardSystem(CurrentIOSystem).GetType = typeof(IOStandardSystem) then // SSM 30.04.06 - ! PT4! + if IOStandardSystem(CurrentIOSystem).GetType = typeof(IOStandardSystem) then // SSM 30.04.06 - не менять! Влияет на PT4! CurrentIOSystem := new __ReadSignalOISystem; AppDomain.CurrentDomain.UnhandledException += DbgExceptionHandler; System.Windows.Forms.Application.ThreadException += Application_ThreadException; diff --git a/bin/Lib/__RunMode.pas b/bin/Lib/__RunMode.pas index b6590a242..b0c725f60 100644 --- a/bin/Lib/__RunMode.pas +++ b/bin/Lib/__RunMode.pas @@ -4,12 +4,12 @@ unit __RunMode; //------------------------------------------------------------------------------ -// , -// () DarkStar 2007 -// : -// 1. AppDomain.CurrentDomain.UnhandledException -// -// 2. - , exe- +// Модуль, подключаемый в режиме запуска без связи с оболочкой +// (с) DarkStar 2007 +// Функции: +// 1. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и +// вывод их в консоль +// 2. Если это - консольное окно, то устанавливает имя заголовка на имя exe-файла //------------------------------------------------------------------------------ interface diff --git a/pabcnetc_clear/ConsoleCompiler.cs b/pabcnetc_clear/ConsoleCompiler.cs index e9105373d..1f14498dc 100644 --- a/pabcnetc_clear/ConsoleCompiler.cs +++ b/pabcnetc_clear/ConsoleCompiler.cs @@ -92,7 +92,7 @@ namespace PascalABCCompiler else Console.WriteLine(Compiler.ErrorsList[i]); } - break; // + break; // выйти после первой же ошибки } if (success) return 0;