Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 417

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Помгите, пожалуйста, написать программу!

Дано множество треугольников. Вывести номера прямоугольных треугольников, в которых ближе всего к началу координат вершина с прямым углом.

По идее это работа с типизированными файлами...

Примечание #1 (15 марта 2008, 19:33):
* треугольники заданы координатами вершин

pinky Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: 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

Dron (статус: Студент), 15 марта 2008, 19:20 [#1]:

Уточните, каким образом заданы треугольники? Координатами вершин?
С уважением.
pinky

pinky (статус: Посетитель), 15 марта 2008, 19:31 [#2]:

дада, они задаются координатами вершин! =)
Dron

Dron (статус: Студент), 15 марта 2008, 20:05 [#3]:

Наверняка лабораторная работа? Зря вы ничего не делаете, а надеетесь, что за вас всё сделают другие... Да, сейчас этот случай, но так бывает не всегда. К тому же, лучше уметь самому, чем всё время списывать, согласитесь? Уверен, вы и не пытались ничего сделать, иначе вопрос был бы более узким и содержал бы только то место, где возникла бы загвоздка.
С уважением.
pinky

pinky (статус: Посетитель), 15 марта 2008, 21:13 [#4]:

просто не стала сбивать никого с толку своими а-ля черновиками) а так, да, это лаба... и не могу сказать, что у меня ооочень много свободного времени на то, чтобы досконально разбирать все компоненты обожаемого делфи, ибо в списке того, что нужно сделать, информатика - далеко не единственная(
Dron

Dron (статус: Студент), 15 марта 2008, 21:17 [#5]:

В данной задаче компоненты практически не требуются. Да и в лабах обычно стандартных достаточно :-)

Цитата:

ибо в списке того, что нужно сделать, информатика - далеко не единственная

Да, но это ведь не значит, что нужно её совсем бросать...
С уважением.
pinky

pinky (статус: Посетитель), 15 марта 2008, 21:37 [#6]:

её можно купить... но не хочется... потому что так остаётся хоть какая-то надежда на то, что я что-то пойму сама)
а в целом, хочу я этого или нет, совсем я её не брошу, потому что если я её совсем брошу, меня из инста выгонят)
если честно, я делфи вижу третий раз в жизни... просто препод поменялся и наши методы сдачи лаб теперь не прокатят))))
вот и приходится мучиться - зная только то, как написать калькулятор в бэйсике ещё со школы, креативить нечто с геометрическими фигурами, рядами, факториалами, графиками и прочими никомуненужностями ^^
спасибо за помощь, очень мило :*
Dron

Dron (статус: Студент), 15 марта 2008, 21:41 [#7]:

Понятно.
P.S. Если несложно, хотелось бы оценку за ответ.
С уважением.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 14 декабря 2017, 07:15
Выполнено за 0.05 сек.
Рейтинг@Mail.ru