Значит, так.
Сначала - об "изюминке" задания, потом об ошибках в программе, потом о просто всяких несуразностях.
1. Дело в том, что со строкой матрицы можно обращаться, как с одномерным массивом. Вот в уяснении Вами этого факта и состоит суть задания. Так, если есть матрица D[i,j], то D[i] - это строка-массив. И ничего выдумывать не надо. Как это делается, увидите в моем варианте программы.
2. Вот это:
Код:
sredarifm:=summ/n*n;
ГРУБЕЙШАЯ ошибка!!!!! Поймите: действия умножения и деления имеют равный приоритет, а потому результатом данной манипуляции будет умножение частного от деления summ на n на то же самое n, т.е. summ!!! Правильно или
Код:
sredarifm:=summ/(n*n);
или
Код:
sredarifm:=summ/Sqr(n);
3. Вот это вот:
Код:
Function module(x:real):real;
Begin
module:=abs(x);
end; // написал функцию, функция выводит модуль числа
что за ахинея, позвольте поинтересоваться? Зачем нужно по сути просто переименовывать стандартную функцию Паскаля? Какой-такой супостат запрещает пользоваться прямо функцией Abs(x)?!! В общем, убрать за полной ненадобностью.
4. Массивы B и c не нужны вовсе, p - только как формальный параметр процедуры.
5. Совет: старайтесь не использовать для формальных и реальных параметров одни и те же идентификаторы. Не ошибка, но просто неряшливость.
Итак, главное: никаких ухищрений типа построчного ввода матрицы НЕ ТРЕБУЕТСЯ. Вводите ее обычным образом, а потом работайте с ее строками, как с одномерными массивами. Допускается.
Исходя из всего вышеизложенного, вот вариант программы. Выводимые на экран комментарии добавьте сами.
Код:
Program zam;
Const n=3;
Type mass=array[1..n] of real;
matr=array[1..n,1..n] of real;
Function sredarifm(Q:matr):real;
var
summ:real;
i,j:integer;
Begin
Summ:=0;
Begin
for i:=1 to n do
for j:=1 to n do
summ:=summ+Q[i,j];
end;
sredarifm:=summ/(n*n);
end; //функция расчёта среднего арифметического матрицы
Procedure zamena(T:real; var p:mass );
var i,k:integer;
Begin
k:=0;
for i:=1 to n do
if abs(p[i])<T then
begin
p[i]:=0;
k:=k+1;
end;
writeln;
for i:=1 to n do
write(p[i]:8:2);
Write(' Число замен в данной строке : ',k);
end; // написал процедуру, считаем количество элементов массива р модули которых больше меньше или равны r,
Var
i,j:integer;
w:real;
A:matr;
Begin
Write('Введите контрольную величину W : ');
Readln(w);
Writeln('Заполните матрицу А: ');
for i:=1 to n do
for j:=1 to n do
begin
write('A[',i,',',j,']= ');
readln(A[i,j]);
end;
writeln;
for i:=1 to n do
begin
for j:=1 to n do write(A[i,j]:8:2);
writeln;
end;
for i:=1 to n do zamena(w,A[i]);
writeln;
writeln;
for i:=1 to n do
begin
for j:=1 to n do write(A[i,j]:8:2);
writeln;
end;
writeln;
Writeln('Среднее арифметическое полученной матрицы В равно : ', sredarifm(A):0:2);
Readln
end.