В двумерном динамическом массиве S найти среднее арифметическое каждого столбца - Pascal

Узнай цену своей работы

Формулировка задачи:

В двумерном динамическом массиве S найти среднее арифметическое каждого столбца. Результаты записать в одномерный динамический массив Y, в котором поменять местами максимальный элемент с последним. Программа работает при всех значениях кроме 1 3 или 3 1. А почему, не могу понять.
program MatrixDinam;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var
  S: array of array of Integer;
  Y: array of Real;
  NRow, NColumn: Integer;        // Количество строк и столбцов в матрице
  I, J, K: Integer;              // Счетчики циклов
  SumColumn: Integer;            // Сумма каждого столбца матрицы
  C: Integer;                    // Количество положительных элементов
                                 //   каждого столбца
  AverArifm: Real;               // Среднее арифметическое каждого столбца
  MaxY: Real;                    // Максимальный элемент массива Y
  IMaxY:Integer;                 // Позиция максимального элемента массива Y
begin
  WriteLn('Input quantity of rows and columns, for example: 2 4');
  Read(NRow, NColumn);
 
        // Выделяем память для введенных данных
  SetLength(S,NRow,NColumn);
  SetLength(Y,NColumn);
 
        // Ввод матрицы
  WriteLn('Input a two dimensional array');
  for I := 0 to High(S) do
    begin
    for J := 0 to High(S[I]) do
      Read(S[I,J]);
    end;
 
        // Вывод матрицы
  for I := 0 to High(S) do
    begin
    for J := 0 to High(S[I]) do
      Write(S[I, J]:3,' ');
      WriteLn;
    end;
 
        // Выделяем память в массиве Y, находим среднее арифметичесское каждого
        // столбца и записываем его значение в массив Y, учитывая тот случай
        // когда в столбце нет положительных элементов.
    K := 0;
    for J := 0 to High(S) do
    begin
      SumColumn := 0;
      C := 0;
      for I := 0 to High(S[J]) do
        if S[I, J] > 0 then
        begin
          SumColumn := SumColumn + S[I,J];
          Inc(C);
        end;
      if C <> 0 then
        begin
          AverArifm := SumColumn / C;
          Y[K] := AverArifm;
          Inc(K);
        end;
    end;
    WriteLn;
 
        // Так как массив S больше не будет использоваться, то стираем его
    S:=nil;
 
        // В случае, если массив Y пустой, то все элементы матрицы
        // отрицательные. Иначе выделяем память для массива Y и печатаем
        // данный массив.
    if K = 0 then
      WriteLn('All elements is negativ')
    else
    begin
 
      WriteLn('The sum of each column');
      IMaxY := 0;
      for I := 0 to High(Y) do
      begin
        Write(Y[I]:3:4,' ');
        if Y[I] > MaxY then
          IMaxY := I;
          MaxY := Y[I];
      end;
      WriteLn;
 
        // В массиве Y меняем местами максимальный элемент с последдним,
        // учитывая тот случай, когда максимальный элемент и есть последний.
        // Выводим массив.
      if Y[IMaxY] <> Y[K-1] then
      begin
        Y[IMaxY] := Y[IMaxY] + Y[K-1];
        Y[K-1] := Y[IMaxY] - Y[K-1];
        Y[IMaxY] := Y[IMaxY] - Y[K-1];
        WriteLn('Swapped ',IMaxY+1,' and second element of the matrix');
      end
      else
        WriteLn('Maximal element is at the bottom');
      for I := 0 to High(Y) do
        Write(Y[I]:3:4,' ');
 
        // Так как массив больше не будет использоваться, то стираем его.
     Y:=nil;
    end;
Readln;
ReadLn;
end.

Решение задачи: «В двумерном динамическом массиве S найти среднее арифметическое каждого столбца»

textual
Листинг программы
for J := 0 to High(S[0]) do //размер строки
 begin
  Y[j]:=0;
  for I := 0 to High(S) do //количество строк
  Y[j] := Y[j] + S[I,J];
  Y[j]:=Y[j]/High(S);
  write(Y[j]:6:2)
 end;
IMaxY := 0;
for I := 0 to High(Y) do
if Y[I] > Y[IMaxY] then  IMaxY := I;

Объяснение кода листинга программы

  1. Создание двумерного динамического массива S В первой строке объявляется двумерный динамический массив S. Размер первой строки задается переменной High(S[0]).
  2. Нахождение среднего арифметического каждого столбца массива S Задается два вложенных цикла. Первый цикл идет от 0 до High(S[0]) и выполняет следующие действия:
    • Переменной Y[j] присваивается значение 0. Она будет использоваться для хранения суммы элементов столбца.
    • Второй цикл идет от 0 до High(S). Он перебирает все строки массива S и добавляет значение каждого элемента в соответствующую переменную Y[j].
    • После завершения второго цикла, переменной Y[j] присваивается значение High(S), чтобы получить общее количество строк.
    • Затем, переменной Y[j] присваивается значение среднего арифметического, которое вычисляется как Y[j]/High(S).
    • С помощью функции write выводится значение переменной Y[j] с заданным форматом.
  3. Поиск максимального значения в массиве Y Переменная IMaxY инициализируется значением 0. Второй цикл идет от 0 до High(Y). Если значение переменной Y[I] больше значения переменной Y[IMaxY], то значение переменной IMaxY присваивается значение I.
  4. Вывод максимального значения и его индекса Значение переменной Y[IMaxY] выводится с помощью функции write, а также выводится индекс IMaxY с помощью функции writeln.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы