Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2013, 19:57   #1
Олечка12
 
Регистрация: 27.03.2013
Сообщений: 6
Печаль На плоскости задано множество точек. Определить все тройки точек, которые являются вершинами прямоугольного треугольника

На плоскости задано множество точек. Определить все тройки точек, которые являются вершинами прямоугольного треугольника.
язык free pascal

помогите пожалуйста с решением.. очень очень нужна эта задача
Олечка12 вне форума Ответить с цитированием
Старый 07.06.2013, 20:23   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Нужно перебрать все тройки точек (3 цикла, один вложен в другой).
На 3 точках строятся 3 вектора. Считаете для каждой пары векторов скалярное произведение (в декартовой системе координат это сумма произведений соответствующих координат вектора ). Если оно равно 0, то угол между этими векторами равен 90.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 07.06.2013, 20:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Олечка, внизу есть подраздел "Похожие темы"

посмотрите на тему:
Определить номера точек, которые могут являться вершинами равнобедренного треугольника (Паскаль)

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

UPDATE
У Вас теперь есть два варианта решения.
Можно для проверки воспользоваться советом BDA насчёт произведения векторов...

Последний раз редактировалось Serge_Bliznykov; 07.06.2013 в 20:29.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.06.2013, 20:38   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
...что сумма квадратов меньших сторон равна квадрату большей стороны...
Да, простые школьные способы улетают из головы
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.06.2013, 15:47   #5
Олечка12
 
Регистрация: 27.03.2013
Сообщений: 6
По умолчанию

а нужно ли какие то функции еще писать?
я не сильна в программировании...
Олечка12 вне форума Ответить с цитированием
Старый 08.06.2013, 15:59   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Задача небольшая - можно не разбивать на функции, а писать все в основной части.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.06.2013, 18:00   #7
Олечка12
 
Регистрация: 27.03.2013
Сообщений: 6
По умолчанию

а не могли бы вы еще подсказать.. как написать условие того, что таких точек нет? и еще я сомневаюсь насчет выполнения условия
Код:
uses crt;
const nmax=10;
var x,y: array[1..nmax] of integer;
a,b,c: real;
i,j,k:byte;
begin
clrscr;
writeln ('введите размер массива до',n,'n=');
readln(n);
until n in [1..nmax];
writeln ('введитекоординаты точек');
for i:=1 to n-2 do
for j:=i+1 to n-1 do
for k:=j+1 to n do
begin
a:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
b:=sqrt(sqr(x[j]-x[k])+sqr(y[j]-y[k]));
c:=sqrt(sqr(x[k]-x[i])+sqr(y[k]-y[i]));
if a^2+b^2=c^2
or a^2+c^2=b^2
or b^2+c^2=a^2 then
writeln ('точки с номерами',i,',',j,',',k,'определяют прямоугольный треугольник');
end;
Олечка12 вне форума Ответить с цитированием
Старый 08.06.2013, 18:37   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
uses crt;

const
  nmax = 10;

var
  x, y: array [1 .. nmax] of real;
  a, b, c: real;
  i, j, k, n: byte;
  t: boolean;

begin
  t := true;
  repeat
    clrscr;
    write('введите размер массива до ', nmax, ' n = ');
    readln(n);
  until n in [1 .. nmax];
  writeln('введите координаты точек');
  //добавить сюда цикл для считывания координат
  for i := 1 to n - 2 do
    for j := i + 1 to n - 1 do
      for k := j + 1 to n do
      begin
        a := sqrt(sqr(x[i] - x[j]) + sqr(y[i] - y[j]));
        b := sqrt(sqr(x[j] - x[k]) + sqr(y[j] - y[k]));
        c := sqrt(sqr(x[k] - x[i]) + sqr(y[k] - y[i]));
        if (a * a + b * b = c * c) or (a * a + c * c = b * b) or
          (b * b + c * c = a * a) then
        begin
          writeln('точки с номерами', i, ',', j, ',', k,
            'определяют прямоугольный треугольник');
          t := false;
        end;
      end;
  if t then
    writeln('таких точек нет');
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.06.2013, 19:07   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

позволю себе расшифровать совет BDA
Цитата:
Код:
 writeln('введите координаты точек');
  //добавить сюда цикл для считывания координат
Код:
 writeln('введите координаты точек');
 { цикл для считывания координат }
 for i:=1 to n do begin
   Write('Введите координаты ',i,'-й точки [x и y] : ');
   Readln(x[i], y[i]);
 end; 
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2013, 19:11   #10
Олечка12
 
Регистрация: 27.03.2013
Сообщений: 6
По умолчанию

спасибо огромное!
Олечка12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить множество всех различных выпуклых четырехугольников с вершинами в заданном множестве точек на плоскости alukardiko Помощь студентам 9 10.03.2015 20:49
Координаты 3-х точек на плоскости.Если они могут быть вершинами равнобедренного остроугольного треугольника, вычислить.. (Паскаль) Konvulsia Помощь студентам 0 29.09.2012 13:12
Определить номера точек, которые могут являться вершинами равнобедренного треугольника (Паскаль) Dangersss Помощь студентам 3 14.11.2011 10:59
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек) kcю Помощь студентам 0 17.11.2009 19:50