--- PascalABC.NET 3.6.2 ---
procedure MatrTransform<T>(var Matr: Array[,] of T; TransformRule: T -> T; IndicesPredicate: (integer,integer) -> boolean := nil);
begin
if IndicesPredicate = nil then begin
for var i:= 0 to Matr.GetLength(0)-1 do
begin
for var k := 0 to Matr.GetLength(1)-1 do
begin
Matr[i,k] := TransformRule(Matr[i,k]);
end;
end;
end
else
for var i:= 0 to Matr.GetLength(0)-1 do
begin
for var k := 0 to Matr.GetLength(1)-1 do
begin
if (IndicesPredicate(i,k)) then
Matr[i,k] := TransformRule(Matr[i,k]);
end;
end;
end;
begin
var (n,m) := ReadInteger2('Enter dimensions of matrix: ');
var A := ReadMatrInteger(n,m);
A.Println;
MatrTransform(A, x -> x mod 7, (row, col) -> (row+col) mod 2 = 0);
println('------');
A.Println;
end.
З.Ы Решение представлено для текстовой версии задачи, в которой говориться о трансформации двумерного массива
З.Ы 2 Generic-Процедура MatrTransform<> Может изменять элементы матрицы как обращая внимание на позицию элемента в матрице, так и нет. По этому в ней больше кода, чем вам, возможно, нужно.
З.Ы 3 MatrTransform<> Может работать с двумерными массивами любого типа данных
1.
program prog;
var
x,y:real;
begin
writeln('x=?');
readln(x);
if x<=-4 then
y:=x*x*x-2;
if 6<=x then
y:=40-x;
if (-4<x) and (x<6) then
y:=x*x;
writeln('y ',y:1:3)
end.
3.
program prog;
var
x,y:real;
begin
writeln('x=?');
readln(x);
if x<1 then
y:=2*x-17;
if (1<=x) and (x<=5) then
y:=exp(ln(x)*7);
if 5<x then
y:=x*ln(x);
writeln('y ',y:1:3)
end.
exp(ln(x)*n)
,где n - степень , x - выражение.
(используется во втором упражнение которое я решил, согласитесь лучше будет выглядеть чём х*х*х*х*х*х*х)
Поделитесь своими знаниями, ответьте на вопрос:
Сравните планшетный компьютер и коммуникатор, что у них общего и какие отличии