Показать сообщение отдельно
Старый 20.03.2015, 21:20   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Значит, так.
Сначала - об "изюминке" задания, потом об ошибках в программе, потом о просто всяких несуразностях.

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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070