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

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

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

 
 Ответить  Открыть новую тему 
> Трегольник, стороны которого содержат максимальное...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской
Реальное имя: Артём

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


Задача:
Среди треугольников с вершинами в заданном множестве точек на плоскости указать такой, стороны которого содержат максимальное число точек заданного множества (координаты тоек хранятся в файле).
-------------------------------------------------------------------------------------
Решение:
см. Triangle.pas
-------------------------------------------------------------------------------------
Проблема:
Не строится треугольник(проблемы в расчётах).
-------------------------------------------------------------------------------------
Просьба:
Помогите разобраться!!!
-------------------------------------------------------------------------------------


Прикрепленные файлы
Прикрепленный файл  Triangle.PAS ( 5.86 килобайт ) Кол-во скачиваний: 341
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Не строится треугольник(проблемы в расчётах).
Ну, так что ты предлагаешь, заняться телепатией? Ты свой файл данных присоедини, мало ли что там у тебя творится...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской
Реальное имя: Артём

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


volvo, извини: совсем запарился


Прикрепленные файлы
Прикрепленный файл  F.TXT ( 87 байт ) Кол-во скачиваний: 286
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ууууу... Ну, ты что-то перемудрил... Сейчас неохота лазить по дебрям кода, у тебя происходит выход за пределы массива (FPC очень хорошо ловит такие вещи)... Вот, глянь на картинку... Как ты думаешь, что произойдет?

Прикрепленное изображение

Как результат (побочный эффект) - при запуске в TP вот в этом месте:
   OpenFile(inF);
Combinate(10);

{ Перед входом в InputDots }
InputDots(inF);

файл inF оказывается закрытым, и соответственно происходит ошибка...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 40
Пол: Мужской
Реальное имя: Артём

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


Я упростил программу(см. Triangle.pas), но построить треугольник так и не удалось:
происходит ошибка переполнения.
Причём если не заполнять массив(table), содержащий треугольники, то ошибки не происходит и строиться(естественно) треугольник, вырожденный в точку.

for d:= 1 to numP do begin
p:= points[d];
equal:= (d = i) or (d = j) or (d = k);
if not equal then begin
{table[s].a:= p1;
table[s].b:= p2;
table[s].c:= p3;}
if Includ(p, p1, p2) or
Includ(p, p1, p3) or
Includ(p, p2, p3) then
c:= c + 1
end;
end;



Прикрепленные файлы
Прикрепленный файл  TRIANGLE.PAS ( 3.5 килобайт ) Кол-во скачиваний: 324
Прикрепленный файл  f.txt ( 31 байт ) Кол-во скачиваний: 283
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






art88, проблема тривиальна: у тебя происходят ошибки индексации. Смотри:
var
Points : array[1..numP] of tPoint; { индексация начинается с ЕДИНИЦЫ !!! }

{ и что дальше? }
s := 0;
...
for d:= 1 to numP do begin
p:= points[d];
equal:= (d = i) or (d = j) or (d = k);
if not equal then begin
table[s].a:= p1; { Всё! Индексация сбилась... Всему, что происходит дальше - верить нельзя }
...


Для того, чтобы избегать такого развития событий - компилируй программу в режиме {$R+} (поставь это самой первой строкой программы), тогда программа не будет "замалчивать" такие ошибки, а будет Run-Time Error, но ты будешь знать: что-то не в порядке...

Цитата
происходит ошибка переполнения.
Попробуй перейти на сопроцессорные типы: {$N+} первой строкой программы, и Real заменить на Double (емкость Double гораздо больше; не поможет Double - пробуй Extended)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Цитата(art88 @ 12.01.2006 21:27) *

Задача:
Среди треугольников с вершинами в заданном множестве точек на плоскости указать такой, стороны которого содержат максимальное число точек заданного множества (координаты тоек хранятся в файле).


Какая-то странная задача...
может точки должны быть внутри треугольника?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Какая-то странная задача...
Задача как задача. Если точки внутри треугольника - это решается элементарно, есть уже реализованные алгоритмы принадлежности точки многоугольнику. А ты попробуй вот эту задачу решить...

Только флейм не надо разводить. Отвечаем по теме...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


Цитата(volvo @ 13.01.2006 23:34) *

Только флейм не надо разводить. Отвечаем по теме...

Не злись, volvo, студенты часто неправильно читают условие задачи... smile.gif

Проверка принадлежности точки a отрезку bc

function Includ(a, b, c: tPoint): Boolean;
var
x,y: real;
begin
if EqPoints(c, b) and not not EqPoints(a, b) then
begin
Includ:=false; exit;
end;
if (abs(b.x-c.x)<eps) and not (abs(b.x-a.x)<eps) then
begin
Includ:=false; exit;
end;
if (abs(b.y-c.y)<eps) and not (abs(b.y-a.y)<eps) then
begin
Includ:=false; exit;
end;

if EqPoints(a, b) or EqPoints(a, c) then
begin
Includ:=true; exit;
end;

y:=(b.y-a.y)*(a.y-c.y);
x:=(b.x-a.x)*(a.x-c.x);
if (abs(b.x-c.x)<eps) and (abs(b.x-a.x)<eps) then
begin
Includ:=y>0; exit;
end;
if (abs(b.y-c.y)<eps) and (abs(b.y-a.y)<eps) then
begin
Includ:=x>0; exit;
end;
Includ:= (y>0) and (x>0) and
((b.y-c.y)/(b.x-c.x)-(a.y-c.y)/(a.x-c.x) < eps);
end;


и строки
Код
        table[s].a:= p1;
                       table[s].b:= p2;
                       table[s].c:= p3;

лучше поставить между
Код

               s:= s + 1;
              triangles[s]:= c
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






добавить новый тип
Код
type
   . . .
   tmass= array[1..numT] of integer;

изменить тип переменной
Код
var
  . . .
  Triangles    : tmass;

изменить процедуру
procedure FindMaxTri(var mass: tmass);
var
max: integer;
begin
max:= 1;
for i:= 1 to s do
if mass[i] > mass[max] then
max:= i;
DrawTri(table[max].a, table[max].b, table[max].c);
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






изменить способ составления треугольников i,j,k

begin
OpenFile(inF); {ЋвЄалвЁҐ д ©« }
InputDots(inF);
s:= 0;
{Џ®бв஥­ЁҐ ¬­®¦Ґбвў ўбҐе ваҐгЈ®«м­ЁЄ®ў}
for i:= 1 to numP-2 do
for j:= i+1 to numP-1 do
for k:= j+1 to numP do begin
p1.x:= points[i].x;
p1.y:= points[i].y;
p2.x:= points[j].x;
p2.y:= points[j].y;
p3.x:= points[k].x;
p3.y:= points[k].y;
. . .



и вообщето еще убедиться, что нет среди этих трех точек p1,p2,p3 точек содинаковыми координатами
например так
Код

             if not EqPoints(p1,p2) and not EqPoints(p2,p3) then

а также не лежат ли все три на одной прямой...
Код

            if not Includ(p1,p2,p3) and not Includ(p2,p1,p3) and not Includ(p3,p1,p2) then

а то и треугольника не будет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


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


Гость






а кто нить может переделать эту задачку без файлов?, плиз!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14





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

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


да да да! очень прошу. та же задача, но без файла
и воть ещё...
точка (x0,y0) лежит между двумя остальными, когда
(x1-x0)(x2-x0)<0 и (y1-y0)(y2-y0)<0

Сообщение отредактировано: ghy -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(ghy @ 7.01.2010 16:34) *
да да да!
Там, там, та-дамм... ТАМ та-да, та-да, та-дамммммм..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

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


Моцарт - "Реквием"? lol.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Unconnected @ 8.01.2010 12:08) *
Моцарт - "Реквием"? lol.gif
Здрасьте вам, пианисты.. Уже Шопена от Моцарта не отличаем?.. lol.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

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


blink.gif Видимо, это был Глюк..

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Unconnected @ 8.01.2010 12:35) *
blink.gif Видимо, это был глюк..
Чаще слушать советовать не буду smile.gif
Ничего, главное отличать Beatles от Эдиты Пьехи.. ))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Unconnected @ 8.01.2010 12:35) *
это был Глюк..
Ах, вооот оно как?..
Нееет.. Глюк - это примерно так.. сейчас.. вот:
тии.. та-ти-та-та та ти та, тии та ти-та-та та ти та.. тии таа та-та тииии та-тааа....

2 ghy: извини, но на этом форуме не поощряется встревать в давно мертвые темы. Особенно, если тебе нужно, чтобы тебе сделали изменения в программе. Тебе нужно - ты и делай. Если будет вопрос ПО ПРОГРАММИРОВАНИЮ - мы с удовольствием ответим. Успехов тебе.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 11.01.2025 5:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name