Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 18.11.2011, 18:26   #1
Viwwna
Пользователь
 
Аватар для Viwwna
 
Регистрация: 18.11.2011
Сообщений: 33
Вопрос Даны координаты n точек на плоскости. Найти номера двух точек, расстояние между которыми наибольшее.

Даны координаты n точек на плоскости x1, y1 ,..., xn, yn. Найти номера двух точек, расстояние между которыми наибольшее (считать, что такая пара точек единственная).


Код:
program Max_distance;
{Программа вводит номера двух точек, расстояние между которыми наибольшее.}
var z: array[1..n] of record
    x, y: real
  end;
  r, d: extended;
  i, j, n, z1, z2: integer;
begin
  write('Введите количество точек: ');
  Readln(n);
  for i := 1 to n do
  begin
    write('Координаты ', i, ' точки (x y): ');
    Readln(z[i].x, z[i].y)
  end;
  r := 0;
  for i := 1 to n - 1 do
    for j := i + 1 to n do
    begin
      d := sqrt((z[i].x - z[j].x) * (z[i].x - z[j].x) + (z[i].y - z[j].y) * (z[i].y - z[j].y));
      if d > r then
      begin
        r := d;
        z1 := i;
        z2 := j
      end
    end;
  writeln('Наибольшее расстояние между точками ', z1, ' и ', z2)
end.

НУЖНО НЕ ОГРАНИЧИВАТЬ N ТОЧЕК МАССИВОМ. НО КАК ЭТО СДЕЛАТЬ? ПРОСТИТЕ Я СТУДЕНТКА ПЕРВОГО КУРСА... ЕЩЕ МНОГОЕ НЕ ПОНИМАЮ... ЗАРАНЕЕ СПАСИБО...

Последний раз редактировалось Serge_Bliznykov; 13.12.2013 в 10:19. Причина: отформатировал код программы
Viwwna вне форума Ответить с цитированием
Старый 18.11.2011, 23:57   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Зависит от того, каким именно образом "не ограничивать", ведь конец-то этих точек должен кода-то настать?
т.е. уточните задачу у преподавателя, как именно должен заканчиваться ввод массива точек.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 19.11.2011, 05:33   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Я полагаю, дело совсем не в том...
Viwwna, вот это слова твоего преподавателя?
Цитата:
Сообщение от Viwwna Посмотреть сообщение
НУЖНО НЕ ОГРАНИЧИВАТЬ N ТОЧЕК МАССИВОМ.
- да? Я боюсь, ты просто не так его поняла. Он хотел сказать, что у тебя количество точек вводится с клавиатуры в переменную n, а ТАКЖЕ у тебя константа (не заданная) n используется как длина массива при его объявлении. Это - НЕЛЬЗЯ по правилам языка Pascal. Такая программа не скомпилируется вообще.

Выходов может быть несколько.
Первый (и самый правильный, думаю) - сделать динамический массив и задавать его дину после ввода n. Но что-то мне подсказывает, что вы динамические массивы еще не проходили, так что я не буду подробно останавливаться на этом.
Второй (тоже довольно правильный) - разместить фиксированный массив в динамической памяти. Но мне кажется, вы до этого тоже еще не дошли..
Третий - это использовать статический массив, заданный с избытком. Именно его используют обычно в начале обучения, и его я тебе и рекомендую применить. Для этого сначала объявляем КОНСТАНТУ m и даем ей значение, которое заведомо превышает все n, которые будет вводить пользователь. То есть, например, заранее известно, что количество вводимых чисел не превысит 1000. Тогда пишем:
Код:
Program Max_distance;
{Программа вводит номера двух точек, расстояние между которыми наибольшее.}
const
  m= 1000;  // тут задаем консту m
var
  z:Array [1..m] of record   // тут m вместо n
    x,y:real
  end;
  n: integer;   // вот эта строка задает переменную n
  r,d:extended;
.......  // дальше все как было
Дальше прогу я не смотрел. Если усть еще вопросы - задавай )).
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дано два множества точек.Найти пересечение и разность этих множеств.Координаты точек X и Y вводить с клав Degster Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2011 17:32
Наибольшее расстояние между парой точек. C++ LaDark Помощь студентам 3 02.11.2010 10:34
Найти номера пары точек, расстояние между которыми наибольшее evgenext Помощь студентам 1 02.07.2010 21:46
Паскаль*Найти расстояние между двумя заданными множе-ствами точек tipson Помощь студентам 2 11.07.2009 11:19
Найти номера пары точек, расстояние между которыми наибольшее Nevis Помощь студентам 5 21.06.2009 22:37


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS