program z;
uses crt;
var
mart: array [1..100, 1.. 100] of integer;
i,ii,m:integer;
procedure lines;
var
max_a, max_b, counter: integer;
begin
for i:=1 to m do
for ii:=1 to m do
if matr[i,ii]=0 then
inc(counter);
if counter=0 then break
else
max_b:=0;
counter:=0;
{максимальное кол-во нулей по строкам}
for i:=1 to m do
begin
for ii:=1 to m do
if matr[i,ii]=0 then
inc(counter);
if counter>max_b then
begin
max_b:=counter;
b:=ii; {запоминаем строку}
counter:=0;
end;
end;
max_a:=0;
{максимальное кол-во нулей по столбцам}
for ii:=1 to m do
begin
for i:=1 to m do
if matr[i,ii]=0 then
inc(counter);
if counter>max_a then
begin
max_a:=counter;
a:=i; {запоминаем столбец}
counter:=0;
end;
end;
{
если максимально кол-во нулей по строкам больше максимального
кол-ва нулей по столбцам, "вычеркиваем" строку и наоборот
}
if max_a<max_b then
begin
for i:=1 to m do
if matr[i,b]=0 then matr[i,b]:=matr[i,b]*100;
end
else
begin
for ii:=1 to m do
if matr[a,ii]=0 then matr[a,ii]:=matr[a,ii]*100;
end;
lines;
end;
procedure steps;
var
min: integer;
begin
{поиск минимального элемента}
min:=100;
for i:=1 to m do
for ii:=1 to m do
if matr[i,ii]<min then
min:=matr[i,ii];
{вычитаем минимальный элемент из незачеркнутых элементов матрицы}
for i:=1 to m do
for ii:=1 to m do
if a[i,ii]<100 then a[i,ii]:=a[i,ii]-min;
{прибавляем минимальный элемент к элементам, находящимся на пересечении прямых}
for i:=1 to m do
for ii:=1 to m do
if a[i,ii]>=10000 then a[i,ii]:=a[i,ii]/10000+min
{возвращаем "зачеркнутым" посредством умножения на 100 элементам их исходное значение}
for i:=1 to m do
for ii:=1 to m do
if a[i,ii]>=100 then a[i,ii]:=a[i,ii]/100.
end;
begin
lines;
steps;
end.
чувствую, что здесь косяков ой как много.. особенно с тем, что я пыталась оформить рекурсией..
да, я не писала вводы-выводы матрицы, но это ведь не суть.