diff --git a/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj b/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj
index 4a1cec354..96c8fbb6c 100644
--- a/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj
+++ b/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj
@@ -41,7 +41,7 @@
true
full
false
- ..\..\..\bin\
+ ..\..\bin\
DEBUG;TRACE
prompt
3
diff --git a/PascalABCLanguageInfo/PascalABCLanguageInfo.csproj b/PascalABCLanguageInfo/PascalABCLanguageInfo.csproj
index 1bffd5e6c..c90b7f2fe 100644
--- a/PascalABCLanguageInfo/PascalABCLanguageInfo.csproj
+++ b/PascalABCLanguageInfo/PascalABCLanguageInfo.csproj
@@ -17,7 +17,7 @@
true
full
false
- ..\..\..\bin\
+ ..\bin\
DEBUG;TRACE
prompt
4
diff --git a/SyntaxTreeConverters/SyntaxTreeConverters.csproj b/SyntaxTreeConverters/SyntaxTreeConverters.csproj
index ed8a2aa88..48d4b5818 100644
--- a/SyntaxTreeConverters/SyntaxTreeConverters.csproj
+++ b/SyntaxTreeConverters/SyntaxTreeConverters.csproj
@@ -16,7 +16,7 @@
true
full
false
- ..\..\..\..\bin\
+ ..\bin\
DEBUG;TRACE
prompt
4
diff --git a/bin/Lib/LightPT.pas b/bin/Lib/LightPT.pas
index eb4b291f3..0667da68a 100644
--- a/bin/Lib/LightPT.pas
+++ b/bin/Lib/LightPT.pas
@@ -111,10 +111,42 @@ function MatrRandomReal(m: integer; n: integer): array [,] of real;
/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры
function ReadInteger(prompt: string): integer;
-/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры
-function ReadInteger2(prompt: string): (integer, integer);
/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры
function ReadlnInteger(prompt: string): integer;
+/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры
+function ReadInteger2(prompt: string): (integer, integer);
+/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры
+function ReadlnInteger2(prompt: string): (integer, integer);
+/// Выводит приглашение к вводу и возвращает три значения типа integer, введенные с клавиатуры
+function ReadInteger3(prompt: string): (integer, integer, integer);
+/// Выводит приглашение к вводу и возвращает три значения типа integer, введенные с клавиатуры
+function ReadlnInteger3(prompt: string): (integer, integer, integer);
+/// Выводит приглашение к вводу и возвращает три значения типа integer, введенные с клавиатуры
+function ReadInteger4(prompt: string): (integer, integer, integer, integer);
+/// Выводит приглашение к вводу и возвращает три значения типа integer, введенные с клавиатуры
+function ReadlnInteger4(prompt: string): (integer, integer, integer, integer);
+
+/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры
+function ReadReal(prompt: string): real;
+/// Выводит приглашение к вводу и возвращает значение типа real, введенное с клавиатуры
+function ReadlnReal(prompt: string): real;
+/// Выводит приглашение к вводу и возвращает два значения типа real, введенные с клавиатуры
+function ReadReal2(prompt: string): (real, real);
+/// Выводит приглашение к вводу и возвращает два значения типа real, введенные с клавиатуры
+function ReadlnReal2(prompt: string): (real, real);
+/// Выводит приглашение к вводу и возвращает три значения типа real, введенные с клавиатуры
+function ReadReal3(prompt: string): (real, real, real);
+/// Выводит приглашение к вводу и возвращает три значения типа real, введенные с клавиатуры
+function ReadlnReal3(prompt: string): (real, real, real);
+/// Выводит приглашение к вводу и возвращает три значения типа real, введенные с клавиатуры
+function ReadReal4(prompt: string): (real, real, real, real);
+/// Выводит приглашение к вводу и возвращает три значения типа real, введенные с клавиатуры
+function ReadlnReal4(prompt: string): (real, real, real, real);
+
+/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры
+function ReadChar(prompt: string): char;
+/// Выводит приглашение к вводу и возвращает значение типа char, введенное с клавиатуры
+function ReadlnChar(prompt: string): char;
/// Выводит приглашение к вводу и возвращает значение типа string, введенное с клавиатуры
function ReadString(prompt: string): string;
@@ -1957,46 +1989,131 @@ begin
InputList.Add(x);
end;
-/// Возвращает двумерный массив размера m x n, заполненный случайными вещественными значениями
function MatrRandomReal(m: integer; n: integer): array [,] of real := MatrRandomReal(m,n,0,10);
-/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры
+procedure ReadRemainderAction;
+begin
+ if not IsPT then
+ begin
+ OutputList.RemoveAt(OutputList.Count - 1);
+ OutputList.RemoveAt(OutputList.Count - 1);
+ CreateNewLineBeforeMessage := False;
+ end;
+end;
+
function ReadInteger(prompt: string): integer;
begin
Result := PABCSystem.ReadInteger(prompt);
- if IsPT then exit;
- OutputList.RemoveAt(OutputList.Count - 1);
- OutputList.RemoveAt(OutputList.Count - 1);
- CreateNewLineBeforeMessage := False;
+ ReadRemainderAction;
end;
-/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры
function ReadlnInteger(prompt: string): integer;
begin
Result := PABCSystem.ReadlnInteger(prompt);
- if IsPT then exit;
- OutputList.RemoveAt(OutputList.Count - 1);
- OutputList.RemoveAt(OutputList.Count - 1);
- CreateNewLineBeforeMessage := False;
+ ReadRemainderAction;
end;
-/// Выводит приглашение к вводу и возвращает два значения типа integer, введенные с клавиатуры
function ReadInteger2(prompt: string): (integer, integer);
begin
Result := PABCSystem.ReadInteger2(prompt);
- if IsPT then exit;
- OutputList.RemoveAt(OutputList.Count - 1);
- OutputList.RemoveAt(OutputList.Count - 1);
- CreateNewLineBeforeMessage := False;
+ ReadRemainderAction;
end;
+function ReadlnInteger2(prompt: string): (integer,integer);
+begin
+ Result := PABCSystem.ReadlnInteger2(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadInteger3(prompt: string): (integer,integer,integer);
+begin
+ Result := PABCSystem.ReadInteger3(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadlnInteger3(prompt: string): (integer,integer,integer);
+begin
+ Result := PABCSystem.ReadlnInteger3(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadInteger4(prompt: string): (integer, integer,integer,integer);
+begin
+ Result := PABCSystem.ReadInteger4(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadlnInteger4(prompt: string): (integer,integer,integer,integer);
+begin
+ Result := PABCSystem.ReadlnInteger4(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadReal(prompt: string): real;
+begin
+ Result := PABCSystem.ReadReal(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadlnReal(prompt: string): real;
+begin
+ Result := PABCSystem.ReadlnReal(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadReal2(prompt: string): (real, real);
+begin
+ Result := PABCSystem.ReadReal2(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadlnReal2(prompt: string): (real, real);
+begin
+ Result := PABCSystem.ReadlnReal2(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadReal3(prompt: string): (real, real, real);
+begin
+ Result := PABCSystem.ReadReal3(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadlnReal3(prompt: string): (real, real, real);
+begin
+ Result := PABCSystem.ReadlnReal3(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadReal4(prompt: string): (real, real, real, real);
+begin
+ Result := PABCSystem.ReadReal4(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadlnReal4(prompt: string): (real, real, real, real);
+begin
+ Result := PABCSystem.ReadlnReal4(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadChar(prompt: string): char;
+begin
+ Result := PABCSystem.ReadChar(prompt);
+ ReadRemainderAction;
+end;
+
+function ReadlnChar(prompt: string): char;
+begin
+ Result := PABCSystem.ReadlnChar(prompt);
+ ReadRemainderAction;
+end;
+
+
function ReadString(prompt: string): string;
begin
Result := PABCSystem.ReadString(prompt);
- if IsPT then exit;
- OutputList.RemoveAt(OutputList.Count - 1);
- OutputList.RemoveAt(OutputList.Count - 1);
- CreateNewLineBeforeMessage := False;
+ ReadRemainderAction;
end;
function ReadlnString(prompt: string) := ReadString(prompt);
diff --git a/bin/Lib/Tasks1Loops.pas b/bin/Lib/Tasks1Loops.pas
index 9af385256..4689da079 100644
--- a/bin/Lib/Tasks1Loops.pas
+++ b/bin/Lib/Tasks1Loops.pas
@@ -337,7 +337,14 @@ begin
FilterOnlyNumbersAndBools;
var N := Int(0);
CheckData(Input := |cInt|*(N+1));
- GenerateTests(10,tInt(1,10)*n);
+
+ TestCount := 5;
+ GenerateTestData := tnum -> begin
+ var N := Random(5, 10);
+ var a := ArrRandomInteger(N,1,10);
+ InputList.AddTestData(|N|+a);
+ end;
+
var s := 0;
for var i:=1 to N do
if Int(i).IsEven then