функции и процедуры

Ответить
mono
Сообщения: 7
Зарегистрирован: 06 апр 2009, 21:14

если первая строка прямоугольной матрицы имеет максимальное количество отрицательных элементов, проверить, как изменится среднее арифметическое всей матрицы, если заменить все отрицательные элементы матрицы их модулями.

помогите пожалуйста написать функцию отыскания среднего арифметического и процедуру замены отрицательных чисел их модулями.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Какая версия Pascal?
Массив статический или динамический?
mono
Сообщения: 7
Зарегистрирован: 06 апр 2009, 21:14

5 версия
массив статический
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Код: Выделить всё

type 
   TMyArray = Array[1..M,1..N] of ....
....
{функция подсчета количества отрицательных элементов в строке ARow}
function NegativeItemsOnRow(A:TMyArray; ARow):integer;
var
  Result:integer; ACol:integer;
begin
  Result:=0;
  For ACol:=1 to N do if A[ARow,ACol]<0 then inc(Result);
  NegativeItemsOnRow:=Result;
end;

{функция нахождения среднего}
function Average(A:TMyArray):real;
var
  Sum:real; ACol,ARow:integer;
begin
  Sum:=0;
  For ARow:=1 to M do for ACol:=1 to N do Sum:=Sum+A[ARow,ACol];
  Average:=Sum/M/N;
end;

{процедура замены на модули}
function ReplaceNegByAbs(A:TMyArray);
var
  ACol,ARow:integer;
begin
  For ARow:=1 to M do for ACol:=1 to N do 
    if  A[ARow,ACol]<0 then A[ARow,ACol]:=Abs(A[ARow,ACol]);
end;
mono
Сообщения: 7
Зарегистрирован: 06 апр 2009, 21:14

проверьте, пожалуйста, ошибки

Код: Выделить всё

program lab_15;
uses crt;
type
   TMyArray = Array[1..3,1..3] of integer;
   procedure EneterMatrix(x,y:integer; var A:TMyArray);
   var M,N:integer;
begin
     writeln ('vvedite elementi matrici');
     for M:=1 to x do
     for N:=1 to y do begin
     write ('A[',M,',',N,']=');
     readln (A[M,N]);
     end;
end;

procedure NegativeItemsOnRow(A:TMyArray, var C:TMyArray, var CRow:integer);
var
  ARow,ACol:integer;
  Result:integer; ACol:integer;
begin
  Result:=0;
  ACol:=1;
  for ARow:=1 to m do
  begin
  for ACol:=1 to n do
  begin
  if A[ARow,ACol]<0 then inc(Result);
  C[CRow]:=Result;
  end;
  end;

end;

procedure MaxElement (C:TMyArray, var k:integer);
var CRow:integer;
for CRow:=1 to M do begin
max:=C[1];
if C[CRow]>C[1] then max:=C[CRow];
k:=C[CRow];
end;

function Average(A:TMyArray):real;
var
  Sum:real; ACol,ARow:integer;
begin
  Sum:=0;
  for ARow:=1 to M do
  for ACol:=1 to N do
  Sum:=Sum+A[ARow,ACol];
  Average:=Sum/M/N;
end;

procedure ReplaceNegByAbs(A:TMyArray, var B:TMyArray);
var
  ACol,ARow:integer;
  BRow,BCol:integer;
begin
  for ARow:=1 to M do
  for ACol:=1 to N do
  if  A[ARow,ACol]<0 then A[ARow,ACol]:=Abs(A[ARow,ACol]);
  B[BRow,BCol]:=Abs(A[ARow,ACol]);
end;

  function AverageB (B:TMyArray):real;
  var sum:real, BCol,BRow:integer;
  begin
       sum:=0;
       for BRow:=1 to M do
       for BCol:=1 to N do
       sum:=sum B[BRow,BCol];
       Average:=sum/M/N;
  end;

begin
     Enetrmatrix(3,3,A);
     NegativeItemsOnRow (A,ARow);
     MaxElement (C,k);
     if k<>1 then
     writeln ('yslovie ne vipolnyaetsya');
     Average(A);
     ReplaceNegByAbs(A,B);
     for BRow:=1 to M do begin
     for BCol:=1 to N do
     write (B[BRow,BCol];
     writeln;
     end;
     AverageB(B);
     writeln ('Raznost ravna',Average(A)-AverageB(B));
     readln;
     end.
Ответить