Найти угол между векторами - Pascal (80994)
Формулировка задачи:
Даны координаты двух n-мерных векторов. A(a[1]; a[2]; ...; a[n]), B(b[1]; b[2]; ...; b[n]). Найти угол между векторами: cos(A ^ B)=(A * B)/( |A| * |B| ).
Решение задачи: «Найти угол между векторами»
textual
Листинг программы
const m = 100; type vec = array [1..m] of double; procedure read_v(s: string; var x: vec; k: integer); var i: integer; begin writeln('Введите координаты вектора ', s); for i := 1 to k do begin write(s, '[', i, '] = '); readln(x[i]) end end; procedure prn_v(s: string; var x: vec; k: integer); var i: integer; begin writeln('Вектор ', s); for i := 1 to k do write(' ', x[i]:19); writeln end; function p(var x, y: vec; k, mode: integer): double; var i: integer; z: double; begin z := 0; for i := 1 to k do z := z + x[i] * y[i]; if mode = 1 then z := sqrt(z); p := z end; function arccos(a: double): double; begin if a = -1 then arccos := pi else if a = 0 then arccos := pi / 2 else if a = 1 then arccos := 0 else arccos := arctan(sqrt(1 - a * a) / a) end; var n: integer; a, b: vec; begin repeat write('Введтите размерность пространства ( не менее 1 ): '); readln(n) until n > 1; read_v('A', a, n); read_v('B', b, n); writeln('Исходные векторы:'); prn_v('A', a, n); prn_v('B', b, n); writeln; write('Угол между векторами: ', arccos(p(a, b, n, 0) / p(a, a, n, 1) / p(b, b, n, 1)):0:11, ' радиан.'); readln end.
Объяснение кода листинга программы
- Создается константа m, которая равна 100.
- Создается тип данных vec, который представляет собой массив из double-чисел.
- Создается процедура read_v, которая принимает строку, массив x и число k в качестве параметров. Внутри процедуры выводится сообщение для запроса координат вектора, а затем для каждого индекса i от 1 до k происходит чтение координаты из x[i] и запись ее в соответствующую ячейку массива.
- Создается процедура prn_v, которая принимает строку, массив x и число k в качестве параметров. Внутри процедуры выводится сообщение для вывода вектора, а затем для каждого индекса i от 1 до k происходит вывод соответствующего элемента массива.
- Создается функция p, которая принимает массивы x и y, число k и режим в качестве параметров. Внутри функции вычисляется сумма z для каждого индекса i от 1 до k, где z - это сумма произведений соответствующих элементов x[i] и y[i]. Если режим равен 1, то вычисляется квадратный корень z. Функция возвращает значение z.
- Создается функция arccos, которая принимает одно из значений acos(x), где x - это косинус угла в радианах. В зависимости от значения x функция возвращает pi, pi/2, 0 или arctan(sqrt(1 - x^2) / x).
- Создается переменная n, которая инициализируется значением 1.
- Выполняется цикл repeat, в котором пользователю предлагается ввести размерность пространства. Цикл продолжается до тех пор, пока введенное значение больше 1.
- Внутри цикла вызывается процедура read_v для ввода векторов A и B.
- Выводится сообщение с исходными векторами.
- Вызывается функция p для вычисления угла между векторами A и B.
- Выводится сообщение с результатом вычисления угла.
- Вызывается функция arccos для вычисления арккосинуса угла между векторами A и B.
- Завершается программа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д