Помощь - Поиск - Пользователи - Календарь
Полная версия: замена строк в массиве
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Angelus
есть задание двумерный массив a(5*4) вещественных чисел.
строку содержащую макс. эжлемент массива поменять со строкой содерж мин. элемент массива.

Заполнение массива я вроде сделал, и вывод первоначального массива тоже. Но немогу разобраться как определить макс или мин элемент и как сделать замену строк.

Я понимаю что где то на форуме это есть но найти не могу.


Код

const
   n=5;
   m=4;
var
 a:array[1..n,1..m] of real;
 i: integer; {index stroki}
 j: integer; {index stolbca}

begin
   {vvod znacheniy matrici}
   randomize;
  for i:=1 to n do
  for j:=1 to m do
  a[i,j]:=random(99);




     {vivod matrici do obrabotki}
   writeln ('soderjimoe do obrabotki');
   for i:=1 to n do begin
   for j:=1 to m do
        write (a[i,j]:10);
   writeln;
   end;
           readln;
   end.
Shura
Вот тема в FAQ, посвященная матрицам:
http://forum.pascalnet.ru/index.php?showtopic=2694
kent
Angelus, попробуй вот так:

uses Crt;
const
n = 4;
m = 5;
type
TMatrix = array [1..n,1..m] of Real;

{-----------------------------------------------------}
Procedure ReadMatrix(var mx : TMatrix);
var i,j : Integer;
begin
for i := 1 to n do
for j := 1 to m do begin
Write('Element [',i,',',j,']:');
ReadLn(mx[i,j]);
end;
end;
{-----------------------------------------------------}

{-----------------------------------------------------}
Procedure WriteMatrix(var mx : TMatrix);
var i,j : Integer;
begin
for i := 1 to n do begin
for j := 1 to m do
Write(mx[i,j],' ');
WriteLn;
end;
end;
{-----------------------------------------------------}

{-----------------------------------------------------}
Procedure ReformMatrix(var mx : TMatrix);
var i,j : Integer;
min,max : Real;
min_id,max_id : Integer;
temp : array [1..m] of Real;
begin
min := 1000000;
max := -1000000;
for i := 1 to n do
for j := 1 to m do begin
if (mx[i,j] < min) then begin
min := mx[i,j];
min_id := i;
end
else if (mx[i,j] > max) then begin
max := mx[i,j];
max_id := i;
end;
end;
for i := 1 to n do
for j := 1 to m do
if (i = min_id) then begin
temp[j] := mx[i,j];
mx[i,j] := mx[max_id,j];
end;
for i := 1 to n do
for j := 1 to m do
if (i = max_id) then
mx[i,j] := temp[j];
end;
{-----------------------------------------------------}

var a : TMatrix;
i,j : Integer;
begin
Clrscr;
WriteLn('Input Matrix:');
ReadMatrix(a);
WriteLn;
WriteLn('Source Matrix:');
WriteMatrix(a);
WriteLn;
ReformMatrix(a);
WriteLn('Result Matrix:');
WriteMatrix(a);
ReadKey;
end.

volvo
kent, чтобы не делать 2 лишних цикла, можно добавить новый тип:
type
{ оставляем это }
TMatrix = array [1..n,1..m] of Real;

{ и добавляем: }
TV = array[1 .. m] of real;
TM = array[1 .. n] of TV;

и поменять кое-что в ReformMatrix:
Procedure ReformMatrix(var mx : TMatrix);
var i,j : Integer;
min,max : Real;
min_id,max_id : Integer;

{ вместо этого:
temp : array [1..m] of Real; }
T: TV;
begin
{ тут вычисляем индекс строки мин. и макс. элемента }
{ ... }
{ и меняем строки без всяких циклов: }
T := TM(mx)[min_id];
TM(mx)[min_id] := TM(mx)[max_id];
TM(mx)[max_id] := T;
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.