• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Получить вектор

Immortalix

Ученик
Регистрация
19 Дек 2019
Сообщения
3
Реакции
0
Баллы
0
Получить вектор

Для той из матриц, в которой меньше среднее арифметическое элементов, для которых значение f(xij) неотрицательно, получить вектор y по правилу: yj = 0, если в j-ом столбце матрицы есть хотя бы один отрицательный элемент, иначе yj = 1. Для другой матрицы найти максимальный элемент. Задание необходимо выполнить для двух вариантов функции f – в качестве первого варианта берём f(x) = x для того, чтобы было легко проверить правильность работы программы, в качестве второго – любую другую функцию одного аргумента (например, sin(x) + cos(x))
 
А то, что бывают на свете разные языки программирования, Вы в курсе? И то, что, обращаясь за помощью, необходимо язык, на котором нужно выполнить задание, указывать, Вы не догадываетесь?
 
я думал если в метках указать, то уже будет понятно, PascalABC это
 
я думал если в метках указать, то уже будет понятно, PascalABC это
Ох, простите великодушно, на метки не глянул. Как-то привык к тому, что люди указывают язык явно.
Впрочем, понятнее не стало.
Проясните, пожалуйста, вот этот пассаж:
Для той из матриц, в которой меньше среднее арифметическое элементов, для которых значение f(xij) неотрицательно, получить вектор y по правилу: yj = 0, если в j-ом столбце матрицы есть хотя бы один отрицательный элемент, иначе yj = 1. Для другой матрицы найти максимальный элемент.
Т.е. исходно должны быть две матрицы, так? И где их взять? Или им соответствуют эти самые "два варианта функции"? Но непохоже: это вроде как только для тестирования программы (простая и сложная функции). Тогда как обеспечить выбор из двух матриц?
Мутно сформулировано.
 
Эти две матрицы мы составляем сами, путём ввода их из файла.
 
Значит, так.

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.
 
Назад
Сверху