|
Вопрос # 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|