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<> Может работать с двумерными массивами любого типа данных
например, это можно сделать так:
UPD: изменено
#include <iostream>
#include <set>
#include <cmath>
using namespace std;
bool prime(int n){
for(int i = 2; i * i <= n; i++)
if(n % i == 0)
return false;
return true;
}
signed main() {
int n;
cin >> n;
set<int> ok;
ok.insert(2);
ok.insert(3);
ok.insert(5);
int sum = 0, cnt = 0,cur = 2;
while(cnt != n){
bool norm = true;
for(int i = 2; i * i <= cur; i++)
if(cur % i == 0 && ( ok.find(i) == ok.end() && prime(i)) || (cur % (n/i) == 0 && ok.find(n/i) == ok.end() && prime(n/i)))
norm = false;
if(norm){sum += cur; cnt++;}
cur++;
}
cout << sum;
}
--- 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<> Может работать с двумерными массивами любого типа данных