From bd7059c0794612d7c9043ca850db013716b9abde Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Sun, 30 Jun 2024 12:41:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20Range(a,=20b,=20step:=20real)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LightPT - CheckOutput может принимать параметры типа последователльность - они будут вытягиваться в одну последовательность Для этого исправлен FlattenElement FlattenOutput применяется автоматически - его теперь не надо вызывать явно TaskLoops поправлен и упрощен в соответствии с CheckOutput --- bin/Lib/LightPT.pas | 80 +++++++++++++++++++--------- bin/Lib/PABCSystem.pas | 31 ++++++++++- bin/Lib/Tasks1Loops.pas | 115 +++++++++++++++++++--------------------- bin/Lib/TasksArr.pas | 26 ++++----- 4 files changed, 151 insertions(+), 101 deletions(-) diff --git a/bin/Lib/LightPT.pas b/bin/Lib/LightPT.pas index ff07d668f..a2d700565 100644 --- a/bin/Lib/LightPT.pas +++ b/bin/Lib/LightPT.pas @@ -169,7 +169,10 @@ procedure CheckInput(a: array of System.Type); procedure CheckOutput(params arr: array of object); /// Проверить значения при выводе. Сообщения ColoredMessage гасить. Нужно для повторных вызовов CheckOutput procedure CheckOutputSilent(params arr: array of object); - +/// Проверить значения при выводе +procedure CheckOutput(a: ObjectList); +/// Проверить значения при выводе. Сообщения ColoredMessage гасить. Нужно для повторных вызовов CheckOutput +procedure CheckOutputSilent(a: ObjectList); /// Проверить, что данные не вводились procedure CheckInputIsEmpty; @@ -943,7 +946,8 @@ begin end; /// надо ли пополнять список ввода в функциях, используемых для ввода -function NeedAddDataToInputList: boolean := IsLightPT and ((TestMode = tmNone) or (TestMode = tmAutoTest)); +function NeedAddDataToInputList: boolean + := IsLightPT and ((TestMode = tmNone) or (TestMode = tmAutoTest)); /// Полный путь к папке auth-файла function FindAuthDat: string; @@ -1720,6 +1724,11 @@ end; /// Возвращает случайное целое в диапазоне от a до b function Random(a, b: integer): integer; begin + // Есть три состояния: + // 1. Вызов в основной программе (первый запуск) - TestMode = tmNone + // 2. Вызов в основной программе (последующие запуски) - TestMode = tmTest + // 3. Вызов в функции GenerateTestData - TestMode = tmGenTest - тогда срабатывает обычная ArrRandomInteger + // как и в случае 1. if TestMode = tmTest then Result := InputList.ReadTestDataInt // считать следующее данное из заполненного в GenTestMode InputList else Result := PABCSystem.Random(a, b); @@ -1885,17 +1894,13 @@ begin // Есть три состояния: // 1. Вызов в основной программе (первый запуск) - TestMode = tmNone // 2. Вызов в основной программе (последующие запуски) - TestMode = tmTest - // 3. Вызов в функции GenerateTestData - TestMode = tmGenTest - это только в состоянии TestMode = True - {if GenTest then - begin - Result := PABCSystem.ArrRandomInteger(n, a, b); // приходится вызывать дважды! - exit; - end;} + // 3. Вызов в функции GenerateTestData - TestMode = tmGenTest - тогда срабатывает обычная ArrRandomInteger + // как и в случае 1. if TestMode = tmTest then Result := InputList.ReadTestDataIntArr(n) else Result := PABCSystem.ArrRandomInteger(n, a, b); - if NeedAddDataToInputList then // IsLightPT and (TestMode = tmNone) + if NeedAddDataToInputList then // IsLightPT and ((TestMode = tmNone) or (TestMode = tmAutoTest)) for var i:=0 to n-1 do InputList.Add(Result[i]); end; @@ -2139,23 +2144,42 @@ begin CreateNewLineBeforeMessage := False; end; -procedure CheckOutputHelper(i0: integer; params arr: array of object); - procedure OutputTestResult; +function FlattenElement(x: object): List; +begin + var res := new List; + if x is IEnumerable (var xen) then + foreach var ob in xen do + res.AddRange(FlattenElement(ob)) + else if x is System.Collections.IEnumerable (var xx) then begin - ColoredMessage($'Основной запуск верный',MsgColorGray); - ColoredMessage($'Ошибочное решение на тесте:',MsgColorOrange); - ColoredMessage($'Тестовые данные : {InputList.JoinToString}',MsgColorGray); - ColoredMessage($'Полученный результат : {OutputList.JoinToString}',MsgColorGray); - if i0 = 0 then - ColoredMessage($'Правильный результат : {arr.JoinToString}',MsgColorGray) - else ColoredMessage($'Правильный результат : {(OutputList[:i0]+arr).JoinToString}',MsgColorGray) - end; + var en := xx.GetEnumerator; + while en.MoveNext do + res.Add(en.Current) + end + else res.Add(x); + Result := res; +end; +procedure OutputTestResult(i0: integer; arr: array of object); +begin + ColoredMessage($'Основной запуск верный',MsgColorGray); + ColoredMessage($'Ошибочное решение на тесте:',MsgColorOrange); + ColoredMessage($'Тестовые данные : {InputList.JoinToString}',MsgColorGray); + ColoredMessage($'Полученный результат : {OutputList.JoinToString}',MsgColorGray); + if i0 = 0 then + ColoredMessage($'Правильный результат : {arr.JoinToString}',MsgColorGray) + else ColoredMessage($'Правильный результат : {(OutputList[:i0]+arr).JoinToString}',MsgColorGray) +end; + +procedure CheckOutputHelper(i0: integer; params arr: array of object); begin if (TaskResult = InitialTask) and CancelMessagesIfInitial or (TaskResult = BadInitialTask) then exit; - + + // SSM 28.06.24 - вытягиваем в линию выходные данные + arr := arr.SelectMany(x -> FlattenElement(x)).ToArray; + // Если мы попали сюда, то OutputList.Count >= InitialOutputList.Count var mn := Min(arr.Length, OutputList.Count - i0); @@ -2167,7 +2191,7 @@ begin then begin if TestNumber > 0 then - OutputTestResult + OutputTestResult(i0,arr) else begin if i > InitialOutputList.Count then @@ -2181,7 +2205,7 @@ begin if i >= InitialOutputList.Count then // ? Если первое данное неправильное - всё равно попадаем сюда!!! begin if TestNumber > 0 then - OutputTestResult + OutputTestResult(i0,arr) else begin if i > InitialOutputList.Count then @@ -2199,7 +2223,7 @@ begin if arr.Length <> OutputList.Count - i0 then begin if TestNumber > 0 then - OutputTestResult + OutputTestResult(i0,arr) else if OutputList.Count > 0 then begin if arr.Length > OutputList.Count - i0 then // выведено меньше чем надо @@ -2218,6 +2242,8 @@ begin CheckOutputHelper(0,arr); end; +procedure CheckOutput(a: ObjectList) := CheckOutputSeq(a); + procedure CheckOutputSilent(params arr: array of object); begin Silent := True; @@ -2225,6 +2251,8 @@ begin Silent := False; end; +procedure CheckOutputSilent(a: ObjectList) := CheckOutputSeqSilent(a); + procedure CheckOutputAfterInitial(params arr: array of object); begin CheckOutputHelper(InitialOutputList.Count,arr); @@ -2311,7 +2339,7 @@ type IntAr2 = array [,] of integer; RealAr2 = array [,] of real; -function FlattenElement(x: object): List; +{function FlattenElement(x: object): List; begin var lst := new List; if x is IntAr (var iarr) then @@ -2328,7 +2356,7 @@ begin lst.AddRange(lrarr.Select(x -> object(x))) else lst.Add(x); Result := lst; -end; +end;} procedure FlattenOutput; begin @@ -2634,6 +2662,7 @@ begin TName := ConvertTaskName(TaskName); TestMode := tmNone; TestNumber := 0; + FlattenOutput; // SSM 28.06.24 CheckTask(TName); // может выдавать сообщения, предваряющие неверное решение, в CheckOutput. if {not IsPT and not IsRobot and not IsDrawMan and} (TestCount > 0) then // То это LightPT - т.к. только в LightPT TestCount м.б. > 0 begin @@ -2660,6 +2689,7 @@ begin //InputList := InputList; //OutputList := OutputList; + FlattenOutput; // SSM 28.06.24 - и перед каждым тестом CheckTask(TName); if TaskResult = BadSolution then break; // хоть один тест неудачный - выходим! diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index b568baf7f..0b3b73f65 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -5215,7 +5215,34 @@ begin raise new System.ArgumentException('step = 0'); if (step > 0) and (b < a) or (step < 0) and (b > a) then exit; - var n := Round(Abs(b - a) / step); + if a = b then + begin + yield a; + exit; + end; + // SSM 30/06/24 + // Шкалируем [a,b] к отрезку [0,1] + var stepScaled := decimal(step) / (decimal(a) - decimal(b)); + if stepScaled < 0 then + stepScaled := -stepScaled; + // Находим n - количество частей (левая точка последней части может не входить) + var n := decimal.ToInt32(decimal.Round(1/stepScaled)); + //Println('-->',stepScaled,n); + // Возможны 3 ситуации: + // 1) - stepScaled * n < 1 - 1e-14 - тогда надо делать n+1 шаг + // 2) - stepScaled * n и диапазоне [1 - 1e-14, 1 + 1e-14] - тогда надо делать n+1 шаг и последнюю точку примагничивать к b + // 3) - stepScaled * n > 1 + 1e-14 - тогда надо делать n шагов + // Сделаем n шагов, а потом решим, делать ли последний шаг + for var i:=0 to n-1 do + yield a + i * step; // нельзя просто прибавлять step - при больших a,b они просто не будут меняться + var delta := decimal(1e-14); // относительная погрешность относительно 1 + if (stepScaled * n >= 1 - delta) and (stepScaled * n <= 1 + delta) then + yield b // вернуть ровно b - то, ради чего всё затевалось + else if stepScaled * n < 1 - delta then + yield a + n * step; // что ж, step задан неверно и мы "не долетаем" до b + // Если "перелетаем" b, то ничего и не возвращаем на конце + // Старый алгоритм + {var n := Round(Abs(b - a) / step); var delta := n / Abs(b - a) * 1e-14; var bplus := b + delta; var bminus := b - delta; @@ -5238,7 +5265,7 @@ begin end; if a > bminus then yield b; - end + end} end; function ArrRandom(n: integer; a: integer; b: integer): array of integer; diff --git a/bin/Lib/Tasks1Loops.pas b/bin/Lib/Tasks1Loops.pas index 2c5c7c786..9af385256 100644 --- a/bin/Lib/Tasks1Loops.pas +++ b/bin/Lib/Tasks1Loops.pas @@ -10,7 +10,7 @@ begin case name of 'LoopErr2': begin - TaskResult := ErrFix; + TaskResult := ErrFix; // Это задача на исправление ошибок. Откомпилировалась 1 раз - и внеслась в базу if OutputString.ToString = '*' then ColoredMessage('Сотри ; после do!',MsgColorGray); if OutputString.ToString = '*'*50 then @@ -24,48 +24,43 @@ begin ColoredMessage('Молодец! Если в цикле - несколько действий, окайми их операторными скобками begin-end',MsgColorGray); end; 'Loop_Arithm1': begin - ClearOutputListFromSpaces; var n := 10; CheckData(InitialOutput := |cInt|*n); - CheckOutputAfterInitialSeq(ArrGen(n,1,i->i+2)); + CheckOutputAfterInitial(ArrGen(n,1,i->i+2)); end; 'Loop_Arithm2': begin - ClearOutputListFromSpaces; CheckData(Input := Empty); var sq := ObjectList.New.AddArithm(10,19,-2).AddArithm(9,1.1,0.1); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'For1': begin - ClearOutputListFromSpaces; CheckData(Empty); TaskResult := InitialTask; ColoredMessage('Что лучше в данном случае: цикл loop или цикл for?',msgColorGray); end; 'For1a': begin - ClearOutputListFromSpaces; var n := 10; CheckData(InitialOutput := |cInt|*n); - var sq := ObjectList.New.AddArithm(10,2,2).AddArithm(10,2,2); - CheckOutputSeq(sq); + var sq := ObjectList.New.AddArithm(n,2,2).AddArithm(n,2,2); + CheckOutput(sq); end; 'For1b': begin - ClearOutputListFromSpaces; var n := 10; CheckData(InitialOutput := |cInt|*n); - var sq := ObjectList.New.AddArithm(10,1,2).AddArithm(10,1,2); - CheckOutputSeq(sq); + var sq := ObjectList.New.AddArithm(n,1,2).AddArithm(n,1,2); + CheckOutput(sq); end; 'For1b_step': begin ClearOutputListFromSpaces; CheckData(Empty); var sq := ObjectList.New.AddArithm(10,2,2).AddArithm(10,1,2); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'For1c': begin ClearOutputListFromSpaces; CheckData(Empty); var sq := ObjectList.New.AddArithm(11,15,-1); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'For1d': begin ClearOutputListFromSpaces; @@ -77,13 +72,13 @@ begin ClearOutputListFromSpaces; CheckData(Empty); var sq := ObjectList.New.AddArithm(10,5,5).AddArithm(7,40,-4); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'For1f': begin ClearOutputListFromSpaces; CheckData(Empty); var sq := ObjectList.New.AddArithm(9,1.9,-0.1).AddArithm(9,1.9,-0.1); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'ForErr1': begin TaskResult := ErrFix; // Задание на исправление ошибок @@ -121,35 +116,30 @@ begin 'Tabl1': begin CheckData(InitialOutput := |cInt|*20); var sq := (1..10).SelectMany(x -> |x,x*x,x*x*x|); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'Tabl2': begin CheckData(Empty); var sq := (1..10).SelectMany(x -> |object(x),object(sqrt(x))|); // приводим к object поскольку типы разные - CheckOutputSeq(sq); + CheckOutput(sq); end; 'Tabl4': begin CheckData(Empty); var sq := PartitionPoints(1.1,1.9,8).SelectMany(x -> |x,x*x|); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'Sum1': begin + FilterOnlyNumbers; // Частичные решения не проработаны. Они крайне редки конечно TaskResult := PartialSolution; // Решение состоит в последовательном решении нескольких родственных задач - FilterOnlyNumbers; - //CheckInitialOutputValues(55); - if (OutputList.Count = 1) and OutIsInt(0) then - begin - var a := OutInt(0); - if a=4905 then - ColoredMessage('Отлично! Теперь найдите сумму квадратов всех двузначных чисел', MsgColorGray) - else if a=328065 then - TaskResult := Solved; - end; + if CompareValuesWithOutput(4905) then // CompareValuesWithOutput используется именно для частичного решения + ColoredMessage('Отлично! Теперь найдите сумму квадратов всех двузначных чисел', MsgColorGray) + else if CompareValuesWithOutput(328065) then + TaskResult := Solved; end; 'Sum1a': begin FilterOnlyNumbers; - CheckData(Input := |cInt|*2); + CheckData(Input := cInt*2); var (a,b) := (Int(0),Int(1)); TestCount := 10; GenerateTestData := tnum -> begin @@ -177,6 +167,8 @@ begin 'Prod1': begin TaskResult := PartialSolution; FilterOnlyNumbers; + // CompareValuesWithOutput - более низкоуровневая чем CheckOutput + // Она просто сравнивает значения с выводом и возвращает True/False if CompareValuesWithOutput(3*3*3*3*3*3*3) then ColoredMessage('Вычислите 4 в степени 6', MsgColorGray) else if CompareValuesWithOutput(4*4*4*4*4*4) then @@ -200,7 +192,7 @@ begin FilterOnlyNumbers; CheckData(InitialOutput := |cInt|*11); var sq := ObjectList.New.AddGeom(15,1,3); - CheckOutputAfterInitialSeq(sq); + CheckOutputAfterInitial(sq); end; 'Geom2': begin FilterOnlyNumbers; @@ -209,7 +201,7 @@ begin sq.Add(integer.MaxValue); if OutputList.Count = 11 then ColoredMessage('Выведите integer.MaxValue - самое большое целое типа integer',MsgColorMagenta); - CheckOutputSeqNew(sq); + CheckOutput(sq); end; 'Geom3': begin FilterOnlyNumbers; @@ -218,13 +210,13 @@ begin sq.Add(real.MaxValue); if OutputList.Count = 20 then ColoredMessage('Выведите real.MaxValue - самое большое целое типа real',MsgColorMagenta); - CheckOutputSeqNew(sq); + CheckOutput(sq); end; 'Geom4': begin FilterOnlyNumbers; CheckData(Empty); var sq := ObjectList.New.AddGeom(8,1.0,0.999); - CheckOutputSeq(sq); + CheckOutput(sq); end; 'Loop_If_1': begin FilterOnlyNumbersAndBools; @@ -233,7 +225,7 @@ begin GenerateTests(10,tInt(1,100)*n); var a := IntArr(n); - CheckOutputSeq(a.Where(x->x.IsEven)); + CheckOutput(a.Where(x->x.IsEven)); end; 'Loop_If_2': begin var n := 10; @@ -253,7 +245,7 @@ begin for var i:=0 to n-1 do if Int(i) in 10..99 then lst.Add(Int(i)); - CheckOutputSeq(lst); + CheckOutput(lst); end; 'Loop_If_2a': begin var n := 10; @@ -263,7 +255,7 @@ begin for var i:=0 to n-1 do if Int(i).Divs(3) and Int(i).NotDivs(5) then lst.Add(Int(i)); - CheckOutputSeq(lst); + CheckOutput(lst); end; 'Loop_If_3': begin FilterOnlyNumbersAndBools; @@ -274,7 +266,7 @@ begin for var i:=1 to n do if i.IsEven then lst.Add(Int(i-1)); - CheckOutputSeq(lst); + CheckOutput(lst); end; 'Loop_If_4': begin FilterOnlyNumbersAndBools; @@ -285,7 +277,7 @@ begin for var i:=0 to n-1 do if Int(i).IsEven then lst.Add(i+1); - CheckOutputSeq(lst); + CheckOutput(lst); end; 'Loop_If_5_Count': begin var n := 10; @@ -312,8 +304,8 @@ begin FilterOnlyNumbersAndBools; var n := 10; CheckData(Input := |cInt|*n); - var c := 0; GenerateTests(10,tInt(1,10)*n); + var c := 0; for var i:=0 to n-1 do if Int(i) not in 2..5 then c += 1; @@ -362,7 +354,7 @@ begin FilterOnlyNumbers; CheckData(InitialOutput := |cInt|*18); - CheckOutputSeq(Arr(1..9)*3); + CheckOutput(Arr(1..9)*3); end; 'Wh2': begin FilterOnlyNumbers; @@ -372,7 +364,7 @@ begin 'Wh3': begin FilterOnlyNumbers; CheckData(Empty); - CheckOutputSeq(ArrGen(45,99,x->x-2)); + CheckOutput(ArrGen(45,99,x->x-2)); end; 'Дюймы1': begin FilterOnlyNumbers; @@ -393,7 +385,6 @@ begin 'Дюймы4': begin FilterOnlyNumbers; CheckData(Input := cRe * 2); - CheckData(Input := cRe * 2); CheckOutput(Re(0) - Trunc(Re(0)/Re(1))); end; 'Sum1W': begin @@ -414,7 +405,7 @@ begin 'Умножение1': begin FilterOnlyNumbers; CheckData(Empty); - CheckOutputSeq(ArrGen(14,1,x->x*2)); + CheckOutput(ArrGen(14,1,x->x*2)); end; 'Умножение2': begin FilterOnlyNumbers; @@ -424,11 +415,11 @@ begin 'Деление1': begin FilterOnlyNumbers; CheckData(Empty); - CheckOutputSeq(ArrGen(6,26.5,x->x/2)); + CheckOutput(ArrGen(6,26.5,x->x/2)); end; 'Деление2': begin FilterOnlyNumbers; - CheckInitialOutputSeq(Arr(cInt)*0); + CheckData(Empty); CheckOutput(7); end; 'Digits': begin @@ -439,7 +430,7 @@ begin 'Bank_ForLeaders': begin FilterOnlyNumbers; CheckData(Empty); - CheckOutputSeq(ArrGen(9,109000.0,x->x*1.09)); + CheckOutput(ArrGen(9,109000.0,x->x*1.09)); end; 'Digits1': begin FilterOnlyNumbers; @@ -492,7 +483,7 @@ begin L.Add(x mod 2); x := x div 2; end; - CheckOutputSeq(L.ToArray); + CheckOutput(L); end; 'BinNumSystem2': begin FilterOnlyNumbers; @@ -518,23 +509,24 @@ begin end; 'Min1': begin CheckData(InitialInput := |cRe|*2); - Generatetests(10,tRe(1,100)*2); + GenerateTests(10,tRe(1,100)*2); CheckOutput(Min(Re(0),Re(1)),Max(Re(0),Re(1))); end; 'Min2': begin CheckData(InitialInput := |cRe|*2); - Generatetests(10,tRe(1,100)*2); + GenerateTests(10,tRe(1,100)*2); CheckOutput(Min(Re(0),Re(1))); end; 'Min3': begin CheckData(InitialInput := |cRe|*3); - Generatetests(10,tRe(1,100)*3); + GenerateTests(10,tRe(1,100)*3); CheckOutput(Min(Re(0),Re(1),Re(2))); end; 'SeriesMin2': begin var n := 10; CheckData(Input := |cInt|*n); GenerateTests(10,tInt(1,100)*n); + // Лучше var a := IntArr(n) CheckOutput(InputListAsIntegers.Max - InputListAsIntegers.Min) end; 'Break1': begin @@ -615,9 +607,9 @@ begin if x < 5 then c += 1; until False; - TestCount := 10; + TestCount := 10; // Это немного неудобно - надо не забыть присвоить! GenerateTestData := tnum -> begin - var n := Random(7,12); + var n := Random(7,12); // Разобраться, как работает в Test mode var a := ArrRandomInteger(n,1,10); a[^1] := 0; InputList.AddTestData(a); @@ -635,6 +627,7 @@ begin c += x; until False; TestCount := 10; + //CheckData(Input := |cInt|*i); GenerateTestData := tnum -> begin var n := Random(7,12); var a := ArrRandomInteger(n,1,10); @@ -667,6 +660,7 @@ begin CheckOutputString((9*'*'+#13#10) * 5); end; 'сс2': begin + // Уже можно использовать многострочную строку! Но лень переписывать. Работает. CheckOutputString(9*'1'+#13#10 + 9*'2'+#13#10 + 9*'3'+#13#10 + 9*'4'+#13#10 + 9*'5'+#13#10) end; 'сс3': begin @@ -762,7 +756,6 @@ begin CheckOutputString(sb.ToString); end; 'Combinations': begin - ClearOutputListFromSpaces; CheckData(Empty); var lst := ObjectList.New; for var c := 'a' to 'z' do @@ -771,7 +764,7 @@ begin lst.Add(c); lst.Add(i); end; - CheckOutputSeq(lst); + CheckOutput(lst); end; 'Primes': begin FilterOnlyNumbersAndBools; @@ -789,12 +782,12 @@ begin if IsPrime then lst.Add(n); end; - CheckOutputSeq(lst); + CheckOutput(lst); end; 'Счастливые билеты': begin FilterOnlyNumbersAndBools; CheckData(Empty); - CheckOutputNew(55252); + CheckOutput(55252); end; '1_ПрямоугольныеТреугольники': begin FilterOnlyNumbers; @@ -805,11 +798,11 @@ begin for var c:=1 to 20 do if (a*a + b*b = c*c) and (ai*i)); + CheckOutput(ArrGen(10,i->i*i)); end; 'Заполнение2','ЗаполнениеЛямбда2': begin FilterOnlyNumbersAndBools; CheckData(Input := Empty); - CheckOutputSeq(ArrGen(10,1,i->i+2)); + CheckOutput(ArrGen(10,1,i->i+2)); end; 'ЗаполнениеПоПред1','ЗаполнениеПоПред2': begin FilterOnlyNumbersAndBools; CheckData(Input := Empty); - CheckOutputSeq(ArrGen(10,5,i->i+5)); + CheckOutput(ArrGen(10,5,i->i+5)); end; 'ЗаполнениеГеом1','ЗаполнениеГеом2': begin FilterOnlyNumbersAndBools; CheckData(Input := Empty); - CheckOutputSeq(ArrGen(10,1,i->i*2)); + CheckOutput(ArrGen(10,1,i->i*2)); end; 'ЗаполнениеСумма1': begin FilterOnlyNumbersAndBools; @@ -398,7 +398,7 @@ begin foreach var i in a.Indices do if i.IsOdd then a[i] := 0; - CheckOutputAfterInitialSeq(a); + CheckOutputAfterInitial(a); end; 'Arr_Reverse1','Arr_Reverse2': begin