Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Однамерные массивы, Помогите исправить программу, Помогите исправить программу 
:(
    Опции темы
xander007
Дата 21.12.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 15.12.2005

Репутация: нет
Всего: нет



В однамерном массиве с четным количеством элементов (2N) находяться координаты N точек плоскости. Они располагаються в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д.
Определить номера точек, которые могут являться вершинами равнобедренного треуголника.

(формула sqrt(sqr(x1-x2)+sqr(y1-y2)))


Код

const N = 10; 
      Eps = 0.0000001; 

function dist(x1, y1, x2, y2: real): real; 
begin 
  // попробуйте написать сами. функция должна возвращать 
  // расстояние между точками (x1,y1) и (x2,y2) 
  // по Вами же указанной формуле 
end; 

function on_the_same_line(x1,y1,x2,y2,x3,y3:real):boolean; 
begin 
  // функция возвращает true, если точки лежат на одной прямой 
  // вспомните школу 
end; 

var A: array[1..2*N] of real; 
    res: array[1..2*N*(2*N-1)*(2*N-2) div 6, 1..3] of integer; {номера подходящих троек} 
    i,j,k,m : integer; 

begin 
  writeln('Введите точки указанным образом'); 
  // здесь вы вводите точки в массив A 
  i := 1; 
  m:=1; 
  while i < 2*N-4 do begin 
    j := i + 2; 
    while j < 2*N-2 do begin 
      k := j + 2; 
      while k < 2*N do begin 
        if ((abs(dist(A[i],A[i+1],A[j],A[j+1])-dist(A[i],A[i+1],A[k],A[k+1])) < Eps) or 
            (abs(dist(A[i],A[i+1],A[j],A[j+1])-dist(A[j],A[j+1],A[k],A[k+1])) < Eps) or 
            (abs(dist(A[i],A[i+1],A[k],A[k+1])-dist(A[j],A[j+1],A[k],A[k+1])) < Eps)) and 
            (not on_the_same_line(A[i],A[i+1],A[j],A[j+1],A[k],A[k+1])) then 
        begin 
          res[m][1]:=i div 2 + 1; 
          res[m][2]:=j div 2 + 1; 
          res[m][3]:=k div 2 + 1; 
          inc(m); 
        end; 
        inc(k,2); 
      end; 
      inc (j,2); 
    end; 
    inc (i,2); 
  end; 
  for i:=1 to m-1 do writeln(res[i][1],' ',res[i][2],' ',res[i][3]); 
  readln; 
end. 



Это сообщение отредактировал(а) xander007 - 21.12.2005, 13:04
PM MAIL   Вверх
Zero
Дата 21.12.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(xander007 @ 21.12.2005, 14:04)
function dist(x1, y1, x2, y2: real): real;
begin
  // попробуйте написать сами. функция должна возвращать
  // расстояние между точками (x1,y1) и (x2,y2)
  // по Вами же указанной формуле
end;

по поводу этой процедуры, тут будет типа такого:
Код

dist := sqr(x2-x1)+sqr(y2-y1)

Цитата(xander007 @ 21.12.2005, 14:04)
function on_the_same_line(x1,y1,x2,y2,x3,y3:real):boolean;
begin
  // функция возвращает true, если точки лежат на одной прямой
  // вспомните школу
end;

А тут если не вспоминать школу, т.к. такому там не учат...
По точкам (x1,y1) и (x2,y2) можно построить уравнение прямой по формуле:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1) ─ отсюда выразить Y и в него подставить значение x3, и если оно будет равно y3, то точки лежат на одной прямой, иначе не лежат.
PM MAIL ICQ   Вверх
Fighter
Дата 22.12.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Цитата(Zero @ 21.12.2005, 13:32)
по поводу этой процедуры, тут будет типа такого:
код Pascal/Delphi
1:

dist := sqr(x2-x1)+sqr(y2-y1)


Код

  dist := sqrt(sqr(x2-x1)+sqr(y2-y1));


PM MAIL   Вверх
Zero
Дата 22.12.2005, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



а точно извиняюсь...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.