IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> задача про треугольник, и его медиану..
krasnblj
сообщение 11.12.2007 19:02
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


для всех задач дано N точек плоскости.Найти три точки среди заданых точек чтобы треугольник с вершинами в этих точках содержал бы наименьшую медиану.

ну хоть малейшие подсказки,сам код не начинал.. хотябы связь..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
krasnblj
сообщение 6.01.2008 14:17
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +



PROGRAM minmed;

VAR N,I,J,K:INTEGER;
X:ARRAY [1..100] OF REAL;
Y:ARRAY [1..100] OF REAL;
mdd,R1,R2,R3,m1,m2,m3,med,Lx,Ly,Px,Py,Mx,My,Ax,Ay,Bx,By,Cx,Cy:REAL;
TR:BOOLEAN;

BEGIN
WRITELN ('нахождение треугольника с минимальной медианой');

REPEAT
WRITE ('ведите число точек = ');
READLN (N);
IF ((N<3) OR (N>100)) THEN
WRITELN ('неверное число точек');
UNTIL ((N>=3) AND (N<=100));
FOR I:=1 TO N DO
BEGIN
WRITELN ('введите координаты ',I,' точки');
WRITE ('ведите абсциссу = ');

READLN (X[I]);
WRITE ('введите ординату = ');
READLN (Y[I]);
END;

mdd:=32767;
TR:=FALSE;
FOR I:=1 TO N-2 DO
BEGIN
FOR J:=I+1 TO N-1 DO
BEGIN
FOR K:=J+1 TO N DO
BEGIN
R1:=SQRT(SQR(X[J]-X[I])+SQR(Y[J]-Y[I]));
R2:=SQRT(SQR(X[K]-X[I])+SQR(Y[K]-Y[J]));
R3:=SQRT(SQR(X[I]-X[K])+SQR(Y[I]-Y[K]));
Px:=X[I];
Py:=Y[I];
Lx:=X[J];
Ly:=Y[J];
Mx:=X[K];
My:=Y[K];
IF ((R1+R2>R3) AND (R1+R3>R2) AND (R2+R3>R1)) THEN
BEGIN
m1:=sqrt(sqr(((x[j]+x[k])/2)-X[i])+sqr(((y[j]+y[k])/2)-Y[I]));
m2:=sqrt(sqr(((x[i]+x[k])/2)-X[j])+sqr(((y[i]+y[k])/2)-Y[j]));
m3:=sqrt(sqr(((x[j]+x[i])/2)-X[k])+sqr(((y[j]+y[i])/2)-Y[k]));
med:=m1;
IF m2<med THEN
Med:=m2;
IF m3<med THEN
Med:=m3;
IF (med<mdd) THEN
BEGIN
mdd:=med;
Ax:=X[I];
Ay:=Y[I];
Bx:=X[J];
By:=Y[J];
Cx:=X[K];
Cy:=Y[K];
END;
TR:=TRUE;
END;
END;
END;
END;

IF (TR=TRUE) THEN
BEGIN
WRITELN ('тругольник с наименьшей медианой лежит на точках:');
WRITELN ('TR1=(',Ax,';',Ay,'), TR2=(',Bx,';',By,'), TR3=(',Cx,';',Cy,')');
END
ELSE
WRITELN ('невозможно построить треугольник');
END.



в ощем написал код,всё работает,но такой тест:

количество точек
: 5

точки:

(1,1)
(-1,-1)
(0,0)
(0.5,0.5)
(-0.5,-0.5)

выдет три точки на которых лежит треугольник с наименьшей медианой,хотя мы видим что все это точки лежат на одной прямой,следовательно треугольника не существует..

зы: когда мы вводим точки в другом поряд выводит другой ответ,хотя точка "(-0.5,-0.5)" присутствует всегда..

помгие плззззз smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
krasnblj   задача про треугольник   11.12.2007 19:02
Lapp   Ничего в голову не приходит, кроме полного перебор...   12.12.2007 2:46
Michael_Rybak   Вообще, конечно, можно тут диаграммы Вороного заюз...   12.12.2007 3:20
krasnblj   Michael_Rybak я этого еще не проходил,расскажи ))   14.12.2007 10:49
Michael_Rybak   можно для каждой пары вершин находить середину сое...   14.12.2007 15:10
krasnblj   оу,не,решил делать перебором,не знаю как подойти,ч...   18.12.2007 17:21
Michael_Rybak   Ответом будут сами точки - вершины треугольника. Т...   18.12.2007 22:42
krasnblj   PROGRAM minmed; VAR N,I,J,K:INTEGER; X:ARRAY [1....   6.01.2008 14:17
Michael_Rybak   ну добавь проверку, что точки IJK не лежат на одно...   6.01.2008 14:31
krasnblj   так если 2 точки лежат на одной прямой,а третья гд...   6.01.2008 17:54
Michael_Rybak   проверяй что все три не лежат. любые две всегда ле...   6.01.2008 17:59
krasnblj   хм,не предтваляю как это написать.. :blink:   6.01.2008 18:07
Michael_Rybak   Точки А В С лежат на одной прямой если (AX-BX)(CY-...   6.01.2008 18:35
krasnblj   спс,но мне другой способ подсказали,ищу как его вн...   7.01.2008 15:45
krasnblj   PROGRAM minmed; VAR N,I,J, K:INTEGER; X,Y:ARRAY ...   7.01.2008 22:29
Michael_Rybak   Потому что нужно не m[3]:=mq; а mq:=m[3];   8.01.2008 2:50
krasnblj   :lol: щёрт,точно,ты и не представляешь как я тебя ...   8.01.2008 11:56
Michael_Rybak   :)   8.01.2008 12:08


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 10:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"