// PascalABC.NET 3.1, сборка 1219 от 16.04.2016 type Matrix=array[,] of integer;
procedure MatPrint(a:Matrix); begin var m:=Length(a,1)-1; for var i:=0 to Length(a,0)-1 do begin for var j:=0 to m do Write(a[i,j]:4); Writeln end end;
function IsEqual(a:Matrix; col:integer):boolean; begin var s:=sign(a[0,col]); for var i:=1 to Length(a,0)-1 do s+=sign(a[i,col]); if (s=0) then Result:=(a[0,col]<>0) else Result:=false end;
procedure DeleteCol(var a:Matrix; col:integer); begin var n:=Length(a,0)-1; var m:=Length(a,1)-1; for var j:=col+1 to Length(a,1)-1 do for var i:=0 to n do a[i,j-1]:=a[i,j]; SetLength(a,n+1,m) end;
begin var n:=ReadInteger('Строк:'); var m:=ReadInteger('Столбцов:'); var a:=MatrixRandom(n,m,-99,99); Writeln('Исходная матрица'); MatPrint(a); for var j:=Length(a,1)-1 downto 0 do if IsEqual(a,j) then DeleteCol(a,j); Writeln('Результирующая матрица'); MatPrint(a); end.
type
Matrix=array[,] of integer;
procedure MatPrint(a:Matrix);
begin
var m:=Length(a,1)-1;
for var i:=0 to Length(a,0)-1 do begin
for var j:=0 to m do Write(a[i,j]:4);
Writeln
end
end;
function IsEqual(a:Matrix; col:integer):boolean;
begin
var s:=sign(a[0,col]);
for var i:=1 to Length(a,0)-1 do s+=sign(a[i,col]);
if (s=0) then Result:=(a[0,col]<>0)
else Result:=false
end;
procedure DeleteCol(var a:Matrix; col:integer);
begin
var n:=Length(a,0)-1;
var m:=Length(a,1)-1;
for var j:=col+1 to Length(a,1)-1 do
for var i:=0 to n do a[i,j-1]:=a[i,j];
SetLength(a,n+1,m)
end;
begin
var n:=ReadInteger('Строк:');
var m:=ReadInteger('Столбцов:');
var a:=MatrixRandom(n,m,-99,99);
Writeln('Исходная матрица');
MatPrint(a);
for var j:=Length(a,1)-1 downto 0 do
if IsEqual(a,j) then DeleteCol(a,j);
Writeln('Результирующая матрица');
MatPrint(a);
end.
Тестовое решение
Строк: 8
Столбцов: 10
Исходная матрица
-3 -82 -25 -22 65 1 79 -67 -64 -82
17 36 48 -32 51 11 43 9 -35 4
-10 -5 80 82 -24 66 -12 -58 50 -94
52 70 53 85 -32 -59 46 57 -84 -44
81 71 -55 37 46 -15 -61 25 22 -7
-49 98 -42 -18 -44 -97 -63 -7 -98 99
-86 37 -17 -69 -35 46 82 62 99 11
65 85 -7 -90 23 19 -50 -56 -64 91
Результирующая матрица
-82 -25 -22 1 -64
36 48 -32 11 -35
-5 80 82 66 50
70 53 85 -59 -84
71 -55 37 -15 22
98 -42 -18 -97 -98
37 -17 -69 46 99
85 -7 -90 19 -64
1) 5
2) 0
3) 1
Объяснение:
Цикл for ... downto ... do выполняется если начальное значение переменной счётчика больше или равно конечному значению переменной счётчика
Цикл for ... to ... do выполняется если начальное значение переменной счётчика меньше или равно конечному значению переменной счётчика
1)
s = 0
для i от 10 до 6 выполнить s = s + 1
начальное значение (10) переменной счётчика (i) больше или равно конечному значению (6) переменной счётчика (i)
10 >= 6 (да - цикл выполняется)
количество повторений цикла равно начальное значение (10) переменной счётчика (i) минус конечному значению (6) переменной счётчика (i) плюс единица
количество повторений цикла = 10 - 6 + 1 = 4 + 1 = 5
Т.к. переменная s каждое повторение цикла увеличивается на одно и тоже число (1), то за весь цикл переменная s изменится на 1 * 5
Т.к. в начале s = 0, то
s = 0 + 1 * 5 = 5
2)
s = 0
для i от 8 до 3 выполнить s = s + 1
начальное значение (8) переменной счётчика (i) меньше или равно конечному значению (3) переменной счётчика (i)
8 <= 3 (нет - цикл не выполняется)
Т.к. цикл не выполняется, то переменная s остаётся равна тому, чему была равна в начале s = 0
3)
s = 1
для i от 2 до 10 выполнить s = s + 1
начальное значение (2) переменной счётчика (i) больше или равно конечному значению (10) переменной счётчика (i)
2 >= 10 (нет - цикл не выполняется)
Т.к. цикл не выполняется, то переменная s остаётся равна тому, чему была равна в начале s = 1