Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Получить вектор (http://www.tehnari.ru/f41/t266753/)

Immortalix 19.12.2019 12:05

Получить вектор
 
Для той из матриц, в которой меньше среднее арифметическое элементов, для которых значение f(xij) неотрицательно, получить вектор y по правилу: yj = 0, если в j-ом столбце матрицы есть хотя бы один отрицательный элемент, иначе yj = 1. Для другой матрицы найти максимальный элемент. Задание необходимо выполнить для двух вариантов функции f – в качестве первого варианта берём f(x) = x для того, чтобы было легко проверить правильность работы программы, в качестве второго – любую другую функцию одного аргумента (например, sin(x) + cos(x))

Vladimir_S 19.12.2019 13:51

А то, что бывают на свете разные языки программирования, Вы в курсе? И то, что, обращаясь за помощью, необходимо язык, на котором нужно выполнить задание, указывать, Вы не догадываетесь?

Hacker 19.12.2019 13:53

Цитата:

Сообщение от Vladimir_S (Сообщение 2674623)
на свете разные языки программирования

вот как с языка сорвал... я тоже сижу и гадаю, в чём он пишет

Immortalix 19.12.2019 14:04

я думал если в метках указать, то уже будет понятно, PascalABC это

Vladimir_S 19.12.2019 14:47

Цитата:

Сообщение от Immortalix (Сообщение 2674627)
я думал если в метках указать, то уже будет понятно, PascalABC это

Ох, простите великодушно, на метки не глянул. Как-то привык к тому, что люди указывают язык явно.
Впрочем, понятнее не стало.
Проясните, пожалуйста, вот этот пассаж:
Цитата:

Сообщение от Immortalix (Сообщение 2674608)
Для той из матриц, в которой меньше среднее арифметическое элементов, для которых значение f(xij) неотрицательно, получить вектор y по правилу: yj = 0, если в j-ом столбце матрицы есть хотя бы один отрицательный элемент, иначе yj = 1. Для другой матрицы найти максимальный элемент.

Т.е. исходно должны быть две матрицы, так? И где их взять? Или им соответствуют эти самые "два варианта функции"? Но непохоже: это вроде как только для тестирования программы (простая и сложная функции). Тогда как обеспечить выбор из двух матриц?
Мутно сформулировано.

Immortalix 20.12.2019 10:55

Эти две матрицы мы составляем сами, путём ввода их из файла.

Vladimir_S 20.12.2019 14:24

Значит, так.

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.



Часовой пояс GMT +4, время: 10:12.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.