Привет участникам темы
Случайно натолкнулся на эту тему.
Дана задача:
В квадратной таблице обменяйте местами элементы строки и столбца
на пересечении которых ноходится минимальный из положительных элементов.
Задачка не такая уж и сложная. GERM имел ввиду под квадратной таблицей - квадратную матрицу. Необязательно сначала применять RANDOM и RANDOMIZE. Дайте человеку понять саму матрицу, рассмотреть ее и на основе поставленной задачи даже взглядом определить минимальное положительное число в ней. Пусть он поймет и обоснует сначала на примере как это надо
сделать, а уж потом применяет автоматическое построение матрицы любой N величины.
И еще в условии задачи бы сказано про квадратную таблицу (квадратную матрицу). Могу напомнить, что такое вообще матрица и в частности квадратная матрица.
Так вот МАТРИЦА - прямоугольная таблица составленная из m-n чисел, называется
матрицей из m строк и n столбцов или матрицей размера m*n, а также еще m*n -
матрицей.
|A11 A12 A13 ... A1n|
|A21 A22 A23 ... A2n| (1)
|A31 A32 A33 ... A3n|
Числа Aij(i=1,2,...,m; j=1,2,...,n) называются элементами матрицы;
первый индекс i элемента указывает номер строки, в которой стоит элемент матрицы, а второй индекс j - номер столбца.
Матрица (1) может обозначаться также
||Aij||, i=1,2,...,m; j=1,2,2,...,n
Кроме того, для матриц используются обозначения
(Aij) и [Aij]
Квадратная матрица(порядка n) - это когда число строк матрицы равно числу
ее столбцов ( и равно n)
Я даю наглядное решение этой задачи:
Пусть есть квадратная матрица массивом 3x3
3 -5 1
2 6 4
-4 8 7
Наименьшее положительное число здесь 1
Тогда в этом случае строка матрицы массива 3x3, где находится число 1
3,-5,1
Столбец 1,4,7
Необходимо заменить столбец на строку или строку на столбец(разницы нет)
При замене строка - 7,4,1 а столбец 1,-5,3
Причем не должна переставляться только 1(наименьший полож.элемент), а остальные элементы заменяемых строк и столбцов могут переставляться как угодно, т.е. 4,7,1 а столбец 1,3,-5
В этом суть не меняется исходя из условия задачи. Там в какой последовательности должны идти переменные - не указано.
Можно устанавливать наименьшее положительное число в любую ячейку.
При расчете это число должно находиться где бы оно не стояло и от него начинался отсчет замены.
И так можно решить другие квадратные матрицы любого объема.
Частный случай(пример 1):
uses crt;
const
(*Не ставьте только n=1 и по 1 элементу. В программе можно сделать на это защиту.*)
n=3; {Кол.элементов последовательности}
Matrix:array[1..3,1..3] of integer=((3,-5,1),(2,6,4),(-4,8,7));
var
i,j,ii,jj: integer; {счетчики}
Min:integer; {минимальный положительный элемент в массиве}
stolb,strok:integer; {столбец и строка}
strMas:array[1..n] of integer; {элементы массива строки}
stbMas:array[1..n] of integer; {элементы массива столбца}
kolstb,kolstr:integer; {кол. столбцов и строк в матрице}
obmen:integer; {переменная обмена}
BEGIN
ClrScr;
Min:=0;
for i:=1 to n do begin
for j:=1 to n do begin
if (Matrix[i,j]<>0) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
end;
end;
end;
if Min=0 then begin
writeln('Элементы массива - отрицательные!');
readln;
halt;
end;
writeln(' ':10,'Матрица');
{===== Выводим матрицу и находим наименьший положительный ее элемент}
for i:=1 to n do begin
for j:=1 to n do begin
if (Min>=Matrix[i,j]) and (Matrix[i,j]>0) then begin
Min:=Matrix[i,j];
strok:=i;
stolb:=j;
end;
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
end;
writeln
end;
{readln;}
writeln('Минимальное положительное в матрице число -> ',Min);
writeln('Строка при мини. положительном числе -> ',strok);
writeln('Столбец при мини. положительном числе -> ',stolb);
writeln(' ---------------------------');
for i:=1 to n do begin
for j:=1 to n do begin
{================= Определяем и записываем строки}
if i=strok then begin
inc(ii);
strMas[ii]:=Matrix[strok,j];
end;
{================= Определяем и записываем столбцы}
if j=stolb then begin
inc(jj);
stbMas[jj]:=Matrix[i,stolb];
end;
end;
end;
kolstb:=n;
kolstr:=n;
writeln('Количество строк -> ',kolstr);
writeln('Количество столбцов -> ',kolstb);
{===============================================}
write('Было - строка: ');
for ii:=1 to n do begin
write(strMas[ii],' ');
end;
writeln;
{======================= Показ столбцов ==============}
write('Было - столбец: ');
for jj:=1 to n do begin
write(stbMas[jj],' ');
end;
writeln;
writeln(' ---------------------------');
{=====================================================}
{===================== Обмен строк =========}
for ii:=1 to n do begin
if ii=stolb then begin
obmen:=strMas[strok];
strMas[strok]:=strMas[ii];
strMas[ii]:=obmen;
end;
end;
{===================== Обмен столбцов =========}
for jj:=1 to n do begin
if jj=strok then begin
obmen:=stbMas[stolb];
stbMas[stolb]:=stbMas[jj];
stbMas[jj]:=obmen;
end;
end;
{========================= Показ столбцов ======================}
write('Стало - столбец: ');
for ii:=1 to n do begin
write(strMas[ii],' ');
end;
writeln;
{======================= Показ строк ==============}
write('Стало - строка: ');
for jj:=1 to n do begin
write(stbMas[jj],' ');
end;
writeln;
writeln(' ---------------------------');
{=====================================================}
for i:=1 to n do begin
for j:=1 to n do begin
if i=strok then begin
Matrix[strok,j]:=stbMas[j];
end;
if j=stolb then begin
Matrix[i,stolb]:=strMas; {здесь пишется strMas(i) - только скобки квадратные }
end; {тег i не дает их писать}
end;
end;
for i:=1 to n do begin
for j:=1 to n do begin
write('Matrix(',i,',',j,')=',Matrix[i,j],' ');
end;
writeln
end;
writeln('Продолжение - ENTER(ВВОД)');
readln;
END.
Можно увеличить статический массив. Можно переставить элементы массива.
При увеличение нужно добавить в массив еще элементы и изменить n
Даю пример расчета - полученный результат.