Ввести двумерный массив . Каждый элемент, стоящий в массиве на позиции с четной суммой индексов заменить остатком от деления этого элемента на 7. Массив вывести до и после преобразования. Решить задачу с использованием процедур пользователя.
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<> Может работать с двумерными массивами любого типа данных
Программа ищет и выводит все трехбуквенные слова, содержащие русские и/или латинские буквы в обоих регистрах. Слова могут разделяться любым количеством любых символов, кроме символа подчеркивания.
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017 // Внимание! Если программа не работает, обновите версию!
begin var s:=ReadlnString('Вводите:'); var m:=s.Matches('\b\w{3}\b'); if m.Count>0 then m.Println else Writeln('Нет трехбуквенных слов') end.
Пример: Вводите: Как найти все слова, где букв - три? Как все где три
Var s,tmp:string; i,n:integer; flag,word:boolean; function letter (const let:char):boolean; begin if ((let>='a') and (let<='z')) or ((let>='A') and (let<='Z')) then letter:=true else letter:=false; end; begin readln (s); s:=s+' '; n:=length(s); flag:=false; for i:=1 to n do begin if (letter(s[i])) and (not flag) then begin flag:=true; tmp:=''; word:=false; end else if (not letter(s[i])) and (flag) then begin flag:=false; if (word) and (not (tmp='')) then writeln (tmp); end; if (flag) then begin tmp:=tmp+s[i]; if (s[i]='k') then word:=true; end; end; end.
--- 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<> Может работать с двумерными массивами любого типа данных