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 принимает недопустимое значение.