{ PascalABC.NET, но все кроме writeln() должно работать и на TurboPascal. вводит числа рандомно и находит среднее арифметическое чётных чисел и среднее арифметическое индексов нечётных чисел. }
PROGRAM A4; const num = 16; var MT:array [1..num] of byte;// массив чисел i,j:byte;// счетчики even_sum:integer;// сумма четных even_num:byte;// количество четных
indx_sum:integer;// сумма нечетных индексов indx_num:byte;// количество нечетных индексов
BEGIN // условно ввели набор чисел randomize(); for i:=1 to num do MT[i] := random(256); writeln('Начальный массив ', num ,' случайных чисел'); writeln(MT);
// сам алгоритм even_sum := 0; even_num := 0;
indx_sum := 0; indx_num := 0;
writeln(' '); write('Четные числа: ');
for i:=1 to num do begin if not odd(MT[i]) then begin write(MT[i], ' '); even_sum := even_sum + MT[i]; even_num := even_num + 1; end; if odd(i) then begin indx_sum := indx_sum + i; indx_num := indx_num + 1; end; end;
Строго объяснять не вижу смысла, поскольку придется тратить время на разъяснение массы попутных вещей, начиная от λ-исчисления и Алонзо Чёрча. Если бы Вам было понятно одно из определений, вроде "Лямбда-выражение — это анонимная функция, с которой можно создавать типы делегатов или деревьев выражений", Вы бы не стали писать сюда вопрос. Поэтому постараюсь рассказать "на пальцах" и примерах.
"Лямбды" - это функции (а также, выражения и процедуры), позволяющие эффектно в одном месте и объявить их, и использовать, причем, зачастую, даже не давая этим функциям имени (анонимные функции). Вот такие они "одноразовые".
Записывается лямбда обычно в форме t -> f(t) и читается "t переходит в f(t)". Фактически, тут много общего с обычной функцией, имеющей формальный параметр t и определяющей в своем теле значение при Конечно, параметр может быть и не один.
Изюминка "лямбд" в том, что они могут использоваться на правах простых переменных. Например, можно присвоить переменной "лямбду" и передать её, как параметр в программную единицу вместо функции, например var f:real->real:=t->3*Sin(t)+Cos(t); Tab(f,0,10,0.1);
Лямбды очень активно присутствуют в операциях, пришедших в PascalABC.NET из LINQ .Net, в частности, в проецировании и фильтрации. var n:=ArrGen(20,i->2*i+5).Where(t->Cos(t/6)<0).Count;
Последние версии PascalABC.NET 3.3 имеют очень развитые средства для программирования в функциональном стиле, построенные на "лямбдах". Примеры множественного использования лямбд можно найти в файлах, входящих в стандартную поставку, в также в Справочном руководстве по библиотеке численных методов, ставшей стандартной с версии 3.3.0.1552 от 20.10.2017 (файл \Program Files\PascalABC.NET\Doc\NumLibABC.pdf)
begin
Writeln('Max=',ArrRandom(15,1,50).Println.Max)
end.
Тестовое решение:
45 28 10 26 15 5 49 39 40 50 19 12 37 35 40
Max=50