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

Значит, так.

1. Ни ABC, ни тем более ABC Net, у меня нету, поэтому программа написана на Turbo (Free) Pascal; впрочем, не думаю, что это существенно.

2. Вы не соблаговолили выложить хотя бы примеры матриц для считывания и обработки, и я даже не в курсе:
– какова их размерность?
– одинаковый у них размер или разный?
– квадратные они или прямоугольные?
а тянуть из Вас информацию, извините, "клещами" — с какой стати?

Поэтому в программе принято:
1. Обе матрицы — квадратные, размерности NхN.
2. Поскольку файл с матрицами не предоставлен, в программе применена генерация случайных чисел.
3. При вычислении средних арифметических предполагается, что в обеих матрицах есть хотя бы один элемент, для которого выполняется условие f(x[i,j])>0; защита от невыполнения этого предположения в программе не предусмотрена (при невыполнении возникает деление на 0).

Вроде всё.

Код:
Const
 N=5; {Matrix dimension}

Type
 Ar=Array[1..N,1..N] of real;
 Vc=Array[1..N] of Integer;

Var
 i,j,func_num:Integer;
 M1,M2:Ar;
 Y:Vc;
 Ar_m1, Ar_m2, Maximal:Real;


Function f1(x:real):real;
begin
 f1:=x;
end;

Function f2(x:real):real;
begin
 f2:=Sin(x)+Cos(x);
end;

Function f(x:real;vr:integer):real;
begin
 if vr=1 then f:=f1(x) else f:=f2(x);
end;

Function Arithmetic_mean(Z:Ar;vr:integer):Real;
var
 p,q,El_num:integer;
 Sum:Real;
begin
 Sum:=0;
 El_num:=0;
 for p:=1 to N do
  for q:=1 to N do
   if f(Z[p,q],vr)>=0 then
    begin
     Inc(El_num);
     Sum:=Sum+Z[p,q];
    end;
 Arithmetic_mean:=Sum/El_num;
end;

Procedure Vect_form(Z:Ar; var Vz:Vc);
var
 p,q:Integer;
 b:boolean;
begin
 for q:=1 to N do
  begin
   b:=false;
   for p:=1 to N do
    if Z[p,q]<0 then b:=true;
   if b then Vz[q]:=0 else Vz[q]:=1;
  end;
end;

Function Max_el(Z:Ar):Real;
var
 p,q:integer;
 Mx:Real;
begin
 Mx:=Z[1,1];
 for p:=1 to N do
  for q:=1 to N do
   if Z[p,q]>Mx then Mx:=Z[p,q];
 Max_el:=Mx;
end;

Begin
 Randomize;
 for i:=1 to N do
  for j:=1 to N do
   begin
    M1[i,j]:=(-0.5+Random)*6;
    M2[i,j]:=Sqr((-0.5+Random)*3);
   end;

 Writeln('Matrix1:');
 for i:=1 to N do
  begin
   for j:=1 to N do write(M1[i,j]:8:3);
   writeln;
  end;
 Writeln;

 Writeln('Matrix2:');
 for i:=1 to N do
  begin
   for j:=1 to N do write(M2[i,j]:8:3);
   writeln;
  end;
 Writeln;

 Writeln('Press "Enter" to continue...');
 Readln;

 Write('Choose the function: 1 - f(x)=x, 2 - f(x)=Sin(x)+Cos(x) ');
 Readln(func_num);
 Writeln;

 Ar_m1:=Arithmetic_mean(M1,func_num);
 Ar_m2:=Arithmetic_mean(M2,func_num);
 If Ar_m1<Ar_m2 then
  begin
   Vect_form(M1,Y);
   Maximal:=Max_El(M2);
   Writeln('Vector (Matrix1):');
   for j:=1 to N do write(Y[j]:2);
   Writeln;
   Writeln('Maximal element (Matrix2):');
   Writeln(Maximal:8:3);
  end
 else
  begin
   Vect_form(M2,Y);
   Maximal:=Max_El(M1);
   Writeln('Vector (Matrix2):');
   for j:=1 to N do write(Y[j]:2);
   Writeln;
   Writeln('Maximal element (Matrix1):');
   Writeln(Maximal:8:3);
  end;
 Readln;
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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