В двумерном динамическом массиве 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;
Объяснение кода листинга программы
- Создание двумерного динамического массива S В первой строке объявляется двумерный динамический массив S. Размер первой строки задается переменной High(S[0]).
- Нахождение среднего арифметического каждого столбца массива 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] с заданным форматом.
- Поиск максимального значения в массиве Y Переменная IMaxY инициализируется значением 0. Второй цикл идет от 0 до High(Y). Если значение переменной Y[I] больше значения переменной Y[IMaxY], то значение переменной IMaxY присваивается значение I.
- Вывод максимального значения и его индекса Значение переменной Y[IMaxY] выводится с помощью функции write, а также выводится индекс IMaxY с помощью функции writeln.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д