Заменить элементы главной диагонали матрицы средним арифметическим других элементов данной строки - PascalABC.NET
Формулировка задачи:
Данный файл содержит элементы двумерного массива. Создать новый файл с входного, заменив элементы главной диагонали средним арифметическим других элементов данной строки.
Вот такое вот задание, может болит голова или я дурак, но не могу написать код.
Решение задачи: «Заменить элементы главной диагонали матрицы средним арифметическим других элементов данной строки»
textual
Листинг программы
uses crt;
var arr:array [,] of real;
i, j, innerJ, arrSize:integer;
iFile, oFile:file of real;
mid, sum:real;
begin
clrscr;
randomize;
write('Enter size of array: ');
readln(arrSize);
assign(iFile, 'input');
rewrite(iFile);
for i:=1 to arrSize*arrSize do
write(iFile, random(26)+1);
reset(iFile);
setLength(arr, arrSize, arrSize);
i:=0;
j:=0;
while not eof(iFile) do
begin
read(iFile, arr[i, j]);
if i=j then
textColor(lightRed)
else
textColor(white);
write(arr[i, j]:3);
j:=j+1;
if j=arrSize then
begin
sum:=0;
for innerJ:=0 to arrSize-1 do
sum:=sum+arr[i, innerJ];
mid:=sum/arrSize;
arr[i, i]:=mid;
i:=i+1;
j:=0;
writeln;
end;
end;
close(iFile);
writeln;
assign(oFile, 'Output');
rewrite(oFile);
for i:=0 to arrSize-1 do
begin
for j:=0 to arrSize-1 do
begin
write(oFile, arr[i, j]);
if i=j then
textColor(lightRed)
else
textColor(white);
write(arr[i, j]:4:2, ' ');
end;
writeln;
end;
close(oFile);
arr:=nil;
textColor(white);
end.
Объяснение кода листинга программы
В этом коде выполняется замена элементов главной диагонали матрицы средним арифметическим других элементов данной строки.
- Объявлены следующие переменные: arr - двумерный массив, содержащий элементы исходной матрицы; i, j, innerJ, arrSize - целочисленные переменные для обозначения индексов элементов матрицы; iFile, oFile - файловые переменные для чтения и записи элементов матрицы; mid, sum - переменные для хранения суммы элементов строки и среднего значения; textColor - функция для изменения цвета текста на светло-красный (lightRed) или белый (white).
- Задается размер матрицы вводом с клавиатуры и сохраняется в переменной arrSize.
- Открывается файл iFile для чтения элементов матрицы.
- В цикле заполняются все элементы матрицы случайными числами и записываются в файл iFile.
- Цикл считывания элементов матрицы из файла iFile и их вывода на экран. Если индексы i и j совпадают, то цвет текста меняется на светло-красный и выводится элемент матрицы mid с тремя знаками после запятой. Если индексы i и j не совпадают, то цвет текста меняется на белый и выводится элемент матрицы arr[i, j] с тремя знаками после запятой. После каждой итерации цикла значение j увеличивается на 1.
- Если значение j становится равным размерности матрицы, то выполняется цикл суммирования элементов текущей строки и вычисления среднего значения. Затем значение i увеличивается на 1, значение j сбрасывается на 0 и выполняется переход к следующей строке матрицы.
- После завершения цикла считывания элементов матрицы, закрывается файл iFile.
- Открывается файл oFile для записи элементов матрицы.
- В цикле записываются все элементы матрицы в файл oFile. Если индексы i и j совпадают, то цвет текста меняется на светло-красный и выводится элемент матрицы mid с четырьмя знаками после запятой и пробелом. Если индексы i и j не совпадают, то цвет текста меняется на белый и выводится элемент матрицы arr[i, j] с четырьмя знаками после запятой, пробелом и символом табуляции. После каждой итерации цикла значение j увеличивается на 1.
- После завершения цикла записи элементов матрицы, закрывается файл oFile.
- Переменная arr освобождается, и цвет текста меняется на белый.