Предмет: Информатика, автор: defendercryak

PASCAL
Дан двухмерный массив, нужно заменить первые k элементов на противоположные по знаку. Ограничений нет, используйте сколько хотите переменных;

Ответы

Автор ответа: BobbyFresnel
1

===== PascalABC.NET =====

begin

 var (m, n) := ReadInteger2('Число строк и столбцов массива:');

 var a := MatrRandom(m, n, -99, 99);

 a.Println(4);

 var k := ReadInteger('Сколько первых элементов обработать?');

 if not k.InRange(1, m * n) then

   Println('Введено недопустимое значение')

 else

 begin  // замена построчно

   var r := k div n;   // число полных строк

   if r > 0 then

   for var i := 0 to r - 1 do

     for var j := 0 to n - 1 do

       a[i,j] := -a[i,j];

   for var j := 0 to k - r * n - 1 do

     a[r,j] := -a[r,j];

   a.Println(4)  

 end

end.

Второй вариант использует более продвинутые возможности PascalABC.NET. Замена выполняется единственным оператором.

begin

 var (m, n) := ReadInteger2('Число строк и столбцов массива:');

 var a := MatrRandom(m, n, -99, 99);

 a.Println(4);

 var k := ReadInteger('Сколько первых элементов обработать?');

 if not k.InRange(1, m * n) then

   Println('Введено недопустимое значение')

 else

 begin  // замена построчно

   a.Transform((p, i, j) -> n * i + j < k ? -p : p);

   a.Println(4)  

 end

end.

Приложения:
Похожие вопросы