| 
| 
 | Вопрос # 2 608/ вопрос решён / | 
 |  Здравствуйте, эксперты!Не могурешить такую задачу. надо опредеоить периметр многоугольника с координатами, используя ПРОЦЕДУРУ вычисленя расстояния между двумя точками. Подскажите пожалуйста, как вот сделать? Заранее спасибо.
 
|  |   Вопрос задал: I{ () T (статус: Посетитель)Вопрос отправлен: 7 апреля 2009, 19:18
 Состояние вопроса: решён, ответов: 2.
 |  Ответ #1. Отвечает эксперт: min@y™ Ну раз именно ПРОЦЕДУРУ, то стоит начать с её написания. Странно, почему не функцию? Ну да ладно...
 procedure LengthBetweenPoints(const x1, y1, x2, y2: Extended;
                              var Result: Extended);
begin
  //                                         ______________________
  //                                        /         2           2|
  // Формула расстояния между точками: S = V (x1 - x2) + (y1 - y2)
  Result:= Sqrt(Sqr(x1 - x2) + Sqr(y1 - y2));
end;Ну а теперь поочерёдно берём координаты точек и подставляем в эту
 функциюпроцедуру, плюсуя её результат к общей сумме. Ну и всё.
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 7 апреля 2009, 19:46
 Оценка за ответ: 5
 Комментарий к оценке: я просто только процедуры прохожу)))) поэтому про функции не знаю пока |  Ответ #2. Отвечает эксперт: DNK Здравствуйте, I{ () T!Длина отрезка по координатам вершин - это из курса школьной математики.
 Приложение:Переключить в обычный режим const  n = 10;   coor: array [1..n] of TPoint =    (      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0),      (X: 0; Y: 0)    );var  i: byte;  s: real;begin  s := sqrt(sqr(coor[1].X - coor[n].X) + sqr(coor[1].Y - coor[n].Y));  for i := 1 to n-1 do    s := sqrt(sqr(coor[i].X - coor[i+1].X) + sqr(coor[i].Y - coor[i+1].Y));  writeln('s=', s);  readln;end;
|  | Ответ отправил: DNK (статус: Студент)Время отправки: 7 апреля 2009, 19:58
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 9; последнее сообщение — 8 апреля 2009, 17:26; участников в обсуждении: 3. 
|   | I{ () T (статус: Посетитель), 7 апреля 2009, 20:03 [#1]:Ершов Денис. к сожалению массивы еще не прошел((( у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | I{ () T (статус: Посетитель), 7 апреля 2009, 20:07 [#2]:А Extended-это типа таких точек может быть много?) а саму процедуру в вашей программе, min@y™, надо вставлять перед формулой? у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | I{ () T (статус: Посетитель), 7 апреля 2009, 20:12 [#3]:получается что в главной части проги будет идти вычисление расстояния, а что в процедуре? извините, если вопрос глупый, только осваиваю тему. у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | min@y™ (статус: Доктор наук), 7 апреля 2009, 20:19 [#4]:Extended - это вещественный 10-байтный тип. Похож на Real, только точность больше. Если тебя Extended смущает, замени его на Real. 
 
 Цитата: получается что в главной части проги будет идти вычисление расстояния, а что в процедуре?
 
 
 В процедуре будет идти вычисление расстояния между ДВУМЯ задаными точками. А в главной части проги – перебор точек, поочерёдная подстановка их координат в процедуру и суммирование результата, который и есть искомый периметр.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | I{ () T (статус: Посетитель), 7 апреля 2009, 20:21 [#5]:то есть перебор будет идти автоматически? какой командой это надо сделать? у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | I{ () T (статус: Посетитель), 7 апреля 2009, 20:25 [#6]:uses SysUtils;
 var x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,dl,p:integer;
 procedure pr1;
 const x1, y1, x2, y2: Extended; var pr:real
 begin
 pr:=p;dl1:=dl;
 
 end;
 begin
 write('koordinaty=');read(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5);
 pr1;
 
 end.
 
 запутался((((( подскажите пожалуйста, как ее закончить?
 у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | min@y™ (статус: Доктор наук), 7 апреля 2009, 20:47 [#7]: program p2608;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
// ============ Процедура вычисления расстояния между 2-мя точками =============
//                                         ______________________
//                                        /         2           2|
// Формула расстояния между точками: S = V (x1 - x2) + (y1 - y2)
procedure LengthBetweenPoints(const x1, y1, x2, y2: Real;
                              var Result: Real);
begin
 
  Result:= Sqrt(Sqr(x1 - x2) + Sqr(y1 - y2));
  WriteLn('  Length between (', x1: 2: 2, ', ', y1: 2: 2, ') and (', x2: 2: 2, ', ', y2: 2: 2, ') = ', Result: 4: 4);
end;
 
const
  N = 6; 
  // Координаты точек (не знаю, какая фигура там получится, писал от балды)
  X: array[0..N - 1] of Real = (0.0, 5.5, 7.2, 3.8, -11.1, -3.4);
  Y: array[0..N - 1] of Real = (8.5, -6.0, -10.7, 4.8, 5.3, 9.3);
 
var
  Index: Integer;        
  Perimeter: Real = 0.0; 
  Len: Real; 
 
begin
 
  for Index:= 0 to N - 1 do
    begin
      if Index <> N - 1
        then LengthBetweenPoints(X[Index], Y[Index], X[Index + 1], Y[Index + 1], Len)
        else LengthBetweenPoints(X[Index], Y[Index], X[0], Y[0], Len);
 
      Perimeter:= Perimeter + Len;
    end;
 
  WriteLn(#13#10' Perimeter: ', Perimeter: 4: 4);
  ReadLn;
end.Писал без комментариев, чтоб ты сам разобрался, что тут к чему.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DNK (статус: Студент), 8 апреля 2009, 10:33 [#8]:Если уж задумали ввод координат, то их тоже нужно через цикл вводить. 
 const n=10;
 var coor: array [1..n] of TPoint;
 i: byte;
 begin
 for i:=1 to n do begin
 write('Введите координты точки № ', i, ': ');
 readln(coor[i].X, coor[i].Y);
 end;
 {
 Вычисление периметра!
 }
 end.
 "Digital Networked Knight" |  
|   | I{ () T (статус: Посетитель), 8 апреля 2009, 17:26 [#9]:СПАСИБО! у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  31 января 2011, 19:36: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |