Помогите написать процедуру которая бы меняла местами строки содержащие минимальный и максимальный по абсолютной величине элемент(в матрице)... заранее спасибо!
Айра
19.12.2007 20:44
А что не понятно? Покажи, что делал? Пробегаешь по матрице, находишь минимум и максимум по модулям, запоминаешь номера содержащих эти элементы строк и меняшь местами..
КириллV
20.12.2007 3:31
Цитата(Айра @ 19.12.2007 16:44)
А что не понятно? Покажи, что делал? Пробегаешь по матрице, находишь минимум и максимум по модулям, запоминаешь номера содержащих эти элементы строк и меняшь местами..
вот код, прога не меняет... что нетак ?
program matrix; Uses crt;
const size_row = 10; { число строк } size_col = 10; { число столбцов }
type tvector = array[1 .. size_col] of integer; tmatrix = array[1 .. size_row] of tvector; var mx: tmatrix; i, j: integer; n, m: integer; NN, MM: integer;
procedure smena(var mx: tmatrix;m, n: integer);{процедура обмена строк} var i, j: integer; T: integer; min, max: integer; imin, imax: integer; begin min:=abs(mx[1,1]); imin:=1; for i:=1 to n do for j:=1 to m do
if (abs(mx[i,j])<min) then begin min:=abs(mx[i,j]); imin:=i; end;
for i:=1 to n do for j:=1 to m do begin max:=-maxint; imax:=1; if max<abs(mx[i,j]) then begin max:=abs(mx[i,j]); imax:=i; end; end;
begin T := mx[imin, j]; mx[imin,j] := mx[imax, j]; mx[imax,j] := T; end; end; {end procedure}
begin clrscr; NN:=size_row; MM:=size_col;
writeln('В заданной матрице поменять местами строки,'); writeln('содержащие следующие элементы:'); writeln('минимальный и максимальный по абсолютной величине.');
{ Заполнение матрицы } repeat write('Введите количество строк: '); readln(N) until (n>0) and (n<=NN); repeat write('Введите количество столбцов: '); readln(m) until (m>0) and (m<=MM); For i:=1 to n do begin For j:=1 to m do begin write('mx[',i,j,']= '); readln(mx[i,j]) end end;
{ Матрица до обмена } writeln('до:'); for i := 1 to n do begin for j := 1 to m do write(mx[i,j]:4); writeln end;
{Вызов процедуры обмена строк по условию } smena(mx, m, n);
{ Матрица после обмена } writeln('после:'); for i := 1 to n do begin for j := 1 to m do write(mx[i,j]:4); writeln end; end.
volvo
20.12.2007 14:07
procedure smena(var mx: tmatrix;m, n: integer); var i, j: integer; T: tvector; { Иначе не понятно, для чего ты вообще описывал TVector } min, max: integer; imin, imax: integer; begin min:=maxint; imin:=1; { Минимуму присваивается МАКСИМАЛЬНО возможное значение } for i:=1 to n do for j:=1 to m do if abs(mx[i,j]) < min then begin min:=abs(mx[i,j]); imin:=i; end;
max:=0; imax:=1; { а максимуму - наименьшее из возможных (если по абс. величине - то 0) } for i:=1 to n do for j:=1 to m do if max < abs(mx[i,j]) then begin max:=abs(mx[i,j]); imax:=i; end;