Помощь - Поиск - Пользователи - Календарь
Полная версия: замена строк в массиве
Форум «Всё о Паскале» > 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.pascal.net.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;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.