Страница 1 из 1

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

Добавлено: 03 май 2009, 18:42
mono
если первая строка прямоугольной матрицы имеет максимальное количество отрицательных элементов, проверить, как изменится среднее арифметическое всей матрицы, если заменить все отрицательные элементы матрицы их модулями.

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

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

Добавлено: 03 май 2009, 19:12
Naeel Maqsudov
Какая версия Pascal?
Массив статический или динамический?

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

Добавлено: 03 май 2009, 19:20
mono
5 версия
массив статический

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

Добавлено: 04 май 2009, 15:36
Naeel Maqsudov

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

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;

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

Добавлено: 17 май 2009, 15:43
mono
проверьте, пожалуйста, ошибки

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

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.