Археологи раскопали древний храм, ко входу в который ведет лестница, шириной в 1 (один) метр, из м ступенек различной длины и высоты. лестница построена из каменных блоков 1x1x1 метр. археологи хотят для удобства туристов, чтобы лестница состояла из меньшего количества ступенек n. для этого они могут также устанавливать каменные блоки 1x1x1. какое минимальное количество блоков необходимо, чтобы сделать лестницу в n ступенек, если известны начальная длина и высота каждой ступеньки. высоты и длины ступенек новой лестницы могут различаться.
входные данные
в первой строке через пробел заданы два целых числа m и n (1 ≤ n < m ≤ 100). далее идут m строк, содержащих пару целых чисел l и h - длина и высота i-ой ступеньки соответственно (1 ≤ l, h ≤ 101). ступеньки нумеруются снизу вверх.
выходные данные
в выходной файл выведите единственное число - ответ на .
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;
writeln(' ');
writeln('Количество четных чисел ', even_num);
writeln('Среднее арифметическое четных чисел = ',
even_sum, '/', even_num , ' = ', even_sum/even_num );
writeln(' ');
writeln('Количество нечетных индексов нечётных чисел ', indx_num);
writeln('Среднее арифметическое индексов нечётных чисел ',
indx_sum, '/', indx_num, ' = ', indx_sum/indx_num);
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)