Помощь - Поиск - Пользователи - Календарь
Полная версия: Процедура обмена строк матрицы с условием
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
КириллV
Помогите написать процедуру которая бы меняла местами строки содержащие минимальный и максимальный по абсолютной величине элемент(в матрице)... заранее спасибо!
Айра
А что не понятно? Покажи, что делал?
Пробегаешь по матрице, находишь минимум и максимум по модулям, запоминаешь номера содержащих эти элементы строк и меняшь местами..
КириллV
Цитата(Айра @ 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
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;

T := mx[imin];
mx[imin] := mx[imax];
mx[imax] := T;
end; {end procedure}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.