|
Вопрос # 1 417/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Помгите, пожалуйста, написать программу!
Дано множество треугольников. Вывести номера прямоугольных треугольников, в которых ближе всего к началу координат вершина с прямым углом.
По идее это работа с типизированными файлами...
Примечание #1 (15 марта 2008, 19:33): * треугольники заданы координатами вершин
 |
Вопрос задала: pinky (статус: Посетитель)
Вопрос отправлен: 15 марта 2008, 19:17
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Dron
Здравствуйте, pinky!
Сделаем так. Объявим запись, которая будет характеризовать один треугольник путём задания координат его вершин:
type
TTriangle = record
X1,Y1,X2,Y2,X3,Y3: Integer;
end;
Напишем функцию нахождения расстояния между двумя точками по заданным координатам:
//Функция нахождения расстояния между двумя точками
function GetDist(X1,Y1,X2,Y2: Integer): Real;
begin
Result:=Sqrt(Sqr(X2-X1)+Sqr(Y2-Y1));
end;
А теперь сам процесс...
var
Data: array of TTriangle; //Массив треугольников
Dists: array of Real; //Массив расстояний от начала координат
i: Byte;
A,B,C: Real; //Длины сторон треугольника
Dist: Real; //Расстояние от начала координат
{
...
begin
...
}
SetLength(Data,3);
SetLength(Dists,3);
with Data[0] do
begin
X1:=2; Y1:=3;
X2:=6; Y2:=3;
X3:=2; Y3:=5;
end;
with Data[1] do
begin
X1:=-3; Y1:=2;
X2:=-6; Y2:=2;
X3:=-3; Y3:=6;
end;
with Data[2] do
begin
X1:=-1; Y1:=-2;
X2:=2; Y2:=-2;
X3:=2; Y3:=-6;
end;
for i := 0 to Length(Data)-1 do
begin
A:=GetDist(Data[i].X1,Data[i].Y1,Data[i].X2,Data[i].Y2);
B:=GetDist(Data[i].X1,Data[i].Y1,Data[i].X3,Data[i].Y3);
C:=GetDist(Data[i].X2,Data[i].Y2,Data[i].X3,Data[i].Y3);
if (A > B) and (A > C) then
Dist:=GetDist(0,0,Data[i].X3,Data[i].Y3)
else if (B > A) and (B > C) then
Dist:=GetDist(0,0,Data[i].X2,Data[i].Y2)
else
Dist:=GetDist(0,0,Data[i].X1,Data[i].Y1);
Dists[i]:=Dist;
end;
Координаты я задал вручную, только для проверки. Откуда они у вас будут браться - решайте самостоятельно. Из файла или случайным образом буду генерироваться...
Алгоритм такой. Для каждого треугольника:
а) вычисляем длины сторон;
б) определяем, какая сторона самая длинная - это будет гипотенуза;
в) зная, какой отрезок является гипотенузой, автоматически узнаём точку, которая является вершиной прямого угла;
г) находим расстояние от начала координат до точки-вершины.
Все расстояния здесь записываются в массив Dists. Что с ними делать дальше - разберётесь. Можете искать минимальное или максимальное, или сортировать. Связь с треугольником по индексу в массиве.
Желаю удачи!
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 15 марта 2008, 20:03
Оценка за ответ: 5
Комментарий к оценке: =)
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 15 марта 2008, 21:41; участников в обсуждении: 2.
|
Dron (статус: Студент), 15 марта 2008, 19:20 [#1]:
Уточните, каким образом заданы треугольники? Координатами вершин?
С уважением.
|
|
pinky (статус: Посетитель), 15 марта 2008, 19:31 [#2]:
дада, они задаются координатами вершин! =)
|
|
Dron (статус: Студент), 15 марта 2008, 20:05 [#3]:
Наверняка лабораторная работа? Зря вы ничего не делаете, а надеетесь, что за вас всё сделают другие... Да, сейчас этот случай, но так бывает не всегда. К тому же, лучше уметь самому, чем всё время списывать, согласитесь? Уверен, вы и не пытались ничего сделать, иначе вопрос был бы более узким и содержал бы только то место, где возникла бы загвоздка.
С уважением.
|
|
pinky (статус: Посетитель), 15 марта 2008, 21:13 [#4]:
просто не стала сбивать никого с толку своими а-ля черновиками) а так, да, это лаба... и не могу сказать, что у меня ооочень много свободного времени на то, чтобы досконально разбирать все компоненты обожаемого делфи, ибо в списке того, что нужно сделать, информатика - далеко не единственная(
|
|
Dron (статус: Студент), 15 марта 2008, 21:17 [#5]:
В данной задаче компоненты практически не требуются. Да и в лабах обычно стандартных достаточно 
Цитата:
ибо в списке того, что нужно сделать, информатика - далеко не единственная
Да, но это ведь не значит, что нужно её совсем бросать...
С уважением.
|
|
pinky (статус: Посетитель), 15 марта 2008, 21:37 [#6]:
её можно купить... но не хочется... потому что так остаётся хоть какая-то надежда на то, что я что-то пойму сама)
а в целом, хочу я этого или нет, совсем я её не брошу, потому что если я её совсем брошу, меня из инста выгонят)
если честно, я делфи вижу третий раз в жизни... просто препод поменялся и наши методы сдачи лаб теперь не прокатят))))
вот и приходится мучиться - зная только то, как написать калькулятор в бэйсике ещё со школы, креативить нечто с геометрическими фигурами, рядами, факториалами, графиками и прочими никомуненужностями ^^
спасибо за помощь, очень мило :*
|
|
Dron (статус: Студент), 15 марта 2008, 21:41 [#7]:
Понятно.
P.S. Если несложно, хотелось бы оценку за ответ.
С уважением.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|