Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Операции над векторами

Автор: nocens 25.07.2005 22:32

Реализовать набор подпрограмм для выполнения следующих операций над векторами: а) сложение; б) вычитание; в) скалярное умножение векторов; г) умножение вектора на число; д) нахождение длины вектора.

1) Дан массив A – массив векторов. Отсортировать его в порядке убывания длин векторов.

2) С помощью датчика случайных чисел сгенерировать 2N целых чисел. N пар этих чисел задают N точек координатной плоскости. Вывести номера тройки точек, которые являются координатами вершин треугольника с наибольшим углом.

Автор: volvo 25.07.2005 23:17

http://forum.pascal.net.ru/index.php?showtopic=5867&view=findpost&p=44491

Ничего не напоминает (задание №3) ?

Автор: trminator 26.07.2005 19:37

2)
Генерим два массива - x[N], y[N] (или один массив с записями типа TPoint, каких тут на форуме много развелось)

По трем точкам смотрим треугольник. Длины его сторон без проблем вычисляются через координаты точек, углы треугольника (точнее, косинусы углов) вычисляются через теорему косинусов. Косинус максимального угла - минимален, то есть можно без арккосинуса обойтись, на косинусы смотреть [Достаточно вычислить два угла, третий определяется по ним как 180 - alpha - beta. Можно ли в таком случае обойтись без арккосинуса - хз, подумать надо]

Перебираем все треугольники примерно в таком духе:

for i := 1 to n-2 do
   for j := i+1 to n-1 do
       for k := j+1 to n do
       begin
           { тут смотрим треугольник с точками (x[i], y[i]), (x[j], y[j]), (x[k], y[k]) -
вычисляем все его углы, запоминаем максимальный и тройку [i,j,k],
на которой достигнут максимум }
       end;