Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ задача про 5-угольник (через функции)

Автор: Catherinektz 8.12.2011 20:00

Разработать программу расчета периметра и площади пятиугольника заданного координатами своих вершин.
Использовать две подпрограммы-функции. Одна рассчитывает длину отрезка по заданным координатам концов, а другая площадь треугольника по заданным координатам вершин (формула Герона). Предусмотреть проверочные примеры.

Автор: TarasBer 8.12.2011 20:14

> площадь треугольника по заданным координатам вершин (формула Герона)

Лооол, какой дурак считает площадь по координатам через формулу Герона?
Вам гланды выравать через задницу не заставляют в качестве домашнего задания?

sqrt(|A|2*|B|2-<A,B>2) - это формула площади для многомерного случая. Для двумерного - тупо <A,tr(B)>

Автор: Catherinektz 9.12.2011 12:44

У меня есть решение этой задачи, но что-то работает не так. И это не домашняя работа, а контрольная!!!
Program PP21_KEA;
Const N=5;
Var P,S,St1,St2,St3,Streyg:Real;
X,Y: Array [1..N] Of Real;
I,K: Byte;
Function DL(x1,y1,x2,y2:Real):Real;
Begin
DL:=SQRT((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
End;
Function PL(P,A,B,C:Real):Real;
Begin
P:=P/2;
PL:=SQRT(P*(P-A)*(P-B)*(P-C));
End;
Begin
For I:=1 To N Do Begin
Write('X[',I,']=');
ReadLn(X[I]);
Write('Y[',I,']=');
ReadLn(Y[I]);
End;
K:=1;
For I:=1 To N Do Begin
K:=I+1;
If K=6 Then K:=1;
P:=P+DL(X[I],Y[I],X[K],Y[K]);
End;
WriteLn('P=',P:6:2);
S:=0;
For I:=1 To N-2 Do Begin
St1:=DL(X[1],Y[I],X[I+1],Y[I+1]);
St2:=DL(X[I+1],Y[I+1],X[I+2],Y[I+2]);
St3:=DL(X[1],Y[I],X[I+2],Y[I+2]);
P:=St1+St2+St3;
STreyg:=PL(P,St1,St2,St3);
S:=S+STreyg;
End;

WriteLn('S=',S:6:2);
ReadLn;
End.

Автор: TarasBer 9.12.2011 13:14

Используй тег [ code=pas ], а то мне ничего не понятно в таком форматировании.

И для площади треугольника используй


((X[i]-X[k])*(Y[j]-Y[k]) - (X[j]-X[k])*(Y[i]-Y[k]))*0.5

А считать площадь треугольника по координатам по формуле Герона - это надо сильно обмазаться героином, извините за каламбур, потому что в данном случае это идиотский способ.

Автор: Catherinektz 12.12.2011 12:56

Вот у меня есть две функции, а что дальше делать не знаю!ПОМОГИТЕ!!!

Function DL(x1,y1,x2,y2:Real):Real;
Begin
DL:=SQRT((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
End;
Function PL(P,A,B,C:Real):Real;
Begin
P:=P/2;
PL:=SQRT(P*(P-A)*(P-B)*(P-C));
End;

Автор: TarasBer 12.12.2011 13:38

Мы не можем помочь, потому что разговариваем с ботом, который ваще не читает то, что мы пишем.

Автор: Catherinektz 13.12.2011 0:43

Я читаю, что вы пишите, но не понимаю, и от задания не могу отойти ни влево, ни вправо, иначе расстрел!!!

Автор: TarasBer 13.12.2011 13:24

Я ещё раз повторяю: выложите код в нормальном виде, то есть внутри тега code=pas, потому что иначе я ничего не пойму.

А ещё тут опечатка:
> St1:=DL(X[ 1 ],Y[ I ],X[I+1],Y[I+1]);

А сказать преподу, что предлагаемый способ - лажа, стесняться не надо.

Автор: Catherinektz 2.01.2012 0:27


Program PP21_KEA;
Const N=5;
Var P,S,St1,St2,St3,Streyg:Real;
X,Y: Array [1..N] Of Real;
I,K: Byte;
Function DL(x1,y1,x2,y2:Real):Real;
Begin
DL:=SQRT((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
End;
Function PL(P,A,B,C:Real):Real;
Begin
P:=P/2;
PL:=SQRT(P*(P-A)*(P-B)*(P-C));
End;
Begin
For I:=1 To N Do Begin
Write('X[',I,']=');
ReadLn(X[I]);
Write('Y[',I,']=');
ReadLn(Y[I]);
End;
K:=1;
For I:=1 To N Do Begin
K:=I+1;
If K=6 Then K:=1;
P:=P+DL(X[I],Y[I],X[K],Y[K]);
End;
WriteLn('P=',P:6:2);
S:=0;
For I:=1 To N Do Begin
St1:=DL(X[1],Y[1],X[I+1],Y[I+1]);
St2:=DL(X[I+1],Y[I+1],X[I+2],Y[I+2]);
St3:=DL(X[1],Y[1],X[I+2],Y[I+2]);
P:=St1+St2+St3;
STreyg:=PL(P,St1,St2,St3);
S:=S+STreyg;
End;
WriteLn('S=',S:6:2);
ReadLn;
End.



Вот вся задача!!!Я защитила на "5".