В двумерном массиве, состоящем из целочисленных элементов, в каждом столбце поменять местами наибольший по модулю (программа Паскаль)

Умник1997337 Умник1997337    1   16.04.2019 23:00    16

Ответы
SureckMozg SureckMozg  16.04.2019 23:00
const n=10; m=7;
type mas=array [1..n,1..m] of Integer;

procedure Vvodmas(var D:mas);
  var i,j:Integer;
begin
for i:=1  to n do
  for j:=1  to m do
    D[i,j]:=-50+Random(101);
end;

procedure Vivodmas(D:mas);
  var i,j:Integer;
begin
  for i:=1 to n do
    begin
      for j:=1  to m do Write(D[i,j]:4);
      Writeln;
    end;
end;

procedure Obmen(a,b: real; var D:mas);
  var i,j,p,n1,n2,max: Integer;
begin
  for j:=1  to m do
    begin
      n1:=1; max:=abs(D[1,j]);{считаем первый элемент столбца наибольшим по модулю}
      for i:=2 to n do
        if abs(D[i,j])>max then  {обнаружен больший элемент}
          begin n1:=i; max:=abs(D[i,j]) end;

      i:=n; {перебираем элементы столбца, начиная с последнего}
      while (i>=1)and (D[i,j]>a)and(D[i,j]<b) do i:=i-1;
      n2:=i;
      if n2<>0 then {если элемент, не принадлежащий интервалу (a,b), был найден}
        begin
          p:=D[n1,j]; D[n1,j]:=D[n2,j]; D[n2,j]:=p; {обмен значений}
        end;
    end;
end;

var D: mas; a,b:Real;
begin
  Randomize; Vvodmas(D);
  Writeln('Исходный массив:'); Vivodmas(D);
  Write('Введите через пробел концы интервала (a,b): '); Readln(a,b);
  Obmen(a,b,D);
  Writeln('Ответ:'); Vivodmas(D);
  Readln
end.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Другие предметы