Для хранения в информационной системе документы сканируются с разрешением 300 ppi. Методы сжатия изображений не используются. Средний размер отсканированного документа составляет 5 Мбайт. В целях экономии было решено перейти на разрешение 150 ppi и цветовую систему, содержащую 16 цветов. Средний размер документа, отсканированного с изменёнными параметрами, составляет 512 Кбайт. Определите количество цветов в палитре до оптимизации.
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)