Уроки и упражнения



Встроенные объекты

Мощь современных языков программирования объясняется в значительной степени наличием большого количества встроенных объектов, которые мы можем использовать в наших программах и которые нам не нужно создавать. Поскольку не мы их создавали, то мы не можем видеть устройства этих объектов, как правило, они устроены сложно. Но нам даны в инструкциях свойства и методы этих объектов, и мы можем ими пользоваться не зная их устройства. С одной категорией таких встроенных объектов мы уже знакомы: это слова. Другим встроенным объектом является объект math, который содержит в качестве своих элементов (методов) многие стандартные математические функции, например, тригонометрические функции. В качестве примеров вы можете испробовать в редакторе следующие функции:

show(math.sin(2));
show(math.cos(3.14159/2));
show(math.sqrt(2));
show(math.abs(-5));
show(math.exp(2));

Это лишь небольшая часть того множества полезных математических функций, которые содержатся в объекте math. Напечатайте в редакторе следующую команду и нажмите кнопку "Пуск" несколько раз:

show(math.random());

Этот метод порождает случайные числа в интервале от 0 до 1.

Вот полный список методов встроенного объекта math:

sin(x) - синус x,
cos(x) - косинус x,
abs(х) - модуль x,
tan(х) - тангенс x,
asin(х) - арксинус x,
acos(х) - арккосинус x,
atan(х) - арктангенс x,
atan2(y, x) - угол между осью x и направлением на точку (x, y),
pow(y, x) - возведение в степень yx,
random() - датчик случайных чисел в интервале (0, 1),
round(х) - округление числа x до ближайшуго целого, 0.5 округляется в большую сторону,
exp(х) - экспонента ex,
sqrt(x) - квадратный корень числа x.

Перемножение матриц

Напомним, что мы называли матрицами объекты вида

matr = pair(pair(1,2),pair(3,4));

где pair = {x:,y:}. Математики записывают матрицы в виде таблицы:
(
1   2
3   4
)
или в более общем виде:
(
m11   m12
m21   m22
)
Важнейшую роль во многих вопросах математики и, особенно, геометрии играет следующая операция перемножения матриц:
(
m11   m12
m21   m22
)
*
(
n11   n12
n21   n22
)
=
=
(
m11n11+m12n21   m11n12+m12n22
m21n11+m22n21   m21n12+m22n22
)
Так пишут математики, но мы не математики, а программисты, и мы пишем так:

l11 = m11n11+m12n21;
l21 = m21n11+m22n21;
l12 = m11n12+m12n22;
l22 = m21n12+m22n22;

matr = pair(pair(l11,l21),pair(l12,l22));

Для произвольного числа α обозначим через turn(α) матрицу, определяемую формулами:

l11 = math.cos(α);
l21 = math.sin(α);
l12 = -math.sin(α);
l22 = math.cos(α);

turn(α) = pair(pair(l11,l21),pair(l12,l22));

Для любых двух чисел α и β имеет место следующая формула:

turn(α + β) = turn(α) * turn(β)

Перейдём к упражнениям. Задача состоит в том, чтобы создать две функции, функцию turn(α), аргументом которой является число, а значением - матрица и функцию перемножения матриц:

mul(m, n),

аргументами которой являются две матрицы, а значением - матрица, являющаяся их произведением. Начните так:

starttest;
pair={x:,y:};
turn=function(x){

а закончите так:

alfa=1;
beta=2;
show(mul(turn(alfa),turn(beta)).x.x);
show(mul(turn(alfa),turn(beta)).x.y);
show(mul(turn(alfa),turn(beta)).y.x);
show(mul(turn(alfa),turn(beta)).y.y);

а в промежутке между началом и концом должно быть определение функции перемножения матриц:

mul=function(m,n){
...
}

Перейдите в редактор и приступайте, создайте требуемую программу, запустите её и следите за инструкциями в консоли.
Проектирование/Окно программирования
Your browser does not support the HTML5 canvas tag.