Вариант 3 а) Даны две произвольные матрицы: А разм. 4х4, В разм. 3х3. Элементы главной...

0 голосов
79 просмотров

Вариант 3

а) Даны две произвольные матрицы: А разм. 4х4, В разм. 3х3. Элементы главной диагонали в каждой матрице заменить элементами побочной

диагонали и элементы побочной заменить элементами главной. Составить процедуру.


image

Информатика (15 баллов) | 79 просмотров
Дано ответов: 2
0 голосов
Правильный ответ
PascalABC.NET 3.2, сборка 1504 от 09.07.2017
Внимание! Если программа не работает, обновите версию!

Задание а)

procedure DiagExchange(a:array[,] of T);
begin
  var n:=a.ColCount;
  for var i:=0 to a.RowCount-1 do
    Swap(a[i,i],a[i,n-i-1])
end;

begin
  var a:=MatrRandom(4,4,-50,50);
  a.Println(4); Writeln(4*a.ColCount*'-');
  DiagExchange(a);
  a.Println(4); Writeln(4*a.ColCount*'-');
  Randomize;
  var b:=MatrGen(3,3,(i,j)->Random(-50,50)/10);
  b.Println(5,1); Writeln(5*b.ColCount*'-');
  DiagExchange(b);
  b.Println(5,1); Writeln(5*b.ColCount*'-')
end.

Пример
  37  21   5 -42
  44   0  48  48
  14 -26  37  36
  -8  43 -43 -24
----------------
 -42  21   5  37
  44  48   0  48
  14  37 -26  36
 -24  43 -43  -8
----------------
 -2.7 -1.0  2.3
  0.0 -3.5 -0.2
 -3.6 -5.0  1.2
---------------
  2.3 -1.0 -2.7
  0.0 -3.5 -0.2
  1.2 -5.0 -3.6
---------------

Задание б)

function VLength(Self:array of real):real; extensionmethod;
begin
  Result:=Sqrt(Self.Select(x->x*x).Sum)
end;
   
begin
  var G:=Arr(1.6,2.8,4.9,-6.7); G.Println;
  var D:=Arr(8.4,1.0,2.6,4.8); D.Println;
  Writeln('Полусумма длин равна ',(G.VLength+D.VLength)/2)
end.

Результат
1.6 2.8 4.9 -6.7
8.4 1 2.6 4.8
Полусумма длин равна 9.48641255163993

Задание в)

begin
  var c:=1.23;
  Writeln(' a       x          y          z');
  for var i:=2 to 8 do begin
    var a:=i/10;
    var x:=cos((a+c)/3.178);
    var y:=0.7*cos(a-1.27);
    var z:=ArcSin(x)+ArcSin(y)+Ln(Abs(ArcSin(x+y)));
    Writeln(a:3:1,x:11:8,y:11:8,z:11:8)
    end
end.

Результат
 a       x          y          z
0.2 0.90046079 0.33608696        NaN
0.3 0.88633142 0.39570967        NaN
0.4 0.87132454 0.45137858        NaN
0.5 0.85545501 0.50253747        NaN
0.6 0.83873853 0.54867517        NaN
0.7 0.82119166 0.58933068        NaN
0.8 0.80283178 0.62409780        NaN

В задании в) данные подобраны некорректно: x+y>1, поэтому аргумент арксинуса в формуле для z принимает недопустимое значение.
(150k баллов)
0 голосов

A) Алгоритм такой:
Ввод начальных матриц A(4; 4); B(3; 3)
Цикл по i от 1 до 4 для матрицы A(4; 4)
Вызов процедуры замены элементов матрицы с параметром i.
Конец цикла
Цикл по i от 1 до 3 для матрицы B(3; 3)
Вызов процедуры замены элементов матрицы с параметром i.
Конец цикла
Вывод обоих матриц
Конец основной программы

Процедура замены для матрицы M(k; k)
Ввод номера текущей строки n
Q = M(n; n)
M(n; n) = M(n; k-n+1)
M(n; k-n+1) = Q
// Здесь i - это текущая строка, k - количество строк в матрице. //
Конец процедуры.

b) Алгоритм такой:
Ввод начальных векторов G = (g1; g2; g3; g4); D = (d1; d2; d3; d4)
Вызов процедуры вычисления длины вектора S1 = P(|G|)
Вызов процедуры вычисления длины вектора S2 = P(|D|)
S = (S1 + S2)/2
Вывод результата S
Конец основной программы

Процедура вычисления длины вектора A(a1; a2; a3; a4)
P = sqrt(a1^2 + a2^2 + a3^2 + a4^2)
Конец процедуры

c) Алгоритм такой:
c = 1,23
Цикл по а от 2 до 8
// так удобнее, чем цикл от 0,2 до 0,8 с шагом 0,1 //
x = COS ( (0.1*a + c)/3.178)
y = 0.7*COS (0.1*a - 1.27)
x1 = Arcsin(x)
y1 = Arcsin(y)
xy1 = Arcsin(x + y)
// Здесь Arcsin (t) - это пользовательская функция, которую мы сами определяем в отдельной процедуре. //
z = x1 = y1 + LOG (ABS (xy1))
Вывод очередного значения z
Конец цикла по а
Конец основной программы

Процедура вычисления Arcsin (t)
// Дальше сложность, потому что в языках программирования очень редко встречается функция arcsin(x), обычно только sin(x), cos(x), atan(x). //
// Поэтому вспоминаем тригонометрию. arcsin t = arctg ( t/√(1-t^2) )
Arcsin (t) = ATAN (t / SQRT (1 - t*t))
Конец процедуры

(320k баллов)
0

Хорошо, скажем так: Функция Arcsin(x) если где-то и применяется, то я не знаю, где.

0

Вы сказали, молодец, теперь знаю.

0

Просто Atan (x) есть практически в любом языке, так что мой способ более универсален.

0

Не передергивайте. Я так сделал, потому что он не указал язык. То есть сделал так, чтобы человек мог решить задачу на любом языке.