Помощь - Поиск - Пользователи - Календарь
Полная версия: ООП и решение комп-х задач
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Needhelp
На плоскости заданы множество точек A и точка вне его. Подсчитать количество (неупорядоченных) различных троек точек из A таких, что четырехугольник является параллелограммом.

Проверку вот такую написал....

 
IF(((X2-X1 = X4-X3) AND (Y2-Y1 = Y4-Y3)) /* A1A2 = A3A4 */
OR ((X2-X1 = X3-X4) AND (Y2-Y1 = Y3-Y4)) /* A1A2 = A4A3 */
OR ((X3-X1 = X4-X2) AND (Y3-Y1 = Y4-Y2)) /* A1A3 = A2A4 */
OR ((X3-X1 = X2-X4) AND (Y3-Y1 = Y2-Y4)) /* A1A3 = A4A3 */
OR ((X4-X1 = X3-X2) AND (Y4-Y1 = Y3-Y2)) /* A1A4 = A2A3 */
OR ((X4-X1 = X2-X3) AND (Y4-Y1 = Y2-Y3)))/* A1A4 = A3A2 */
) THEN /* это параллелограмм */



Вопросы такие....
Как проверить все точки множества (A), перебрать их все? (допустим множество будет в текстовом файле...в задании не оговорено)

Не много странный вопрос... Само задание по теме ООП и решение комплексных задач... А решение вроде бы получается без ООП...

Спасибо!
мисс_граффити
1. Перебор...
вопрос в том, как задаются точки.. двумя координатами?
и "множество" здесь использовано как математический термин (=некоторое количество) или как тип данных (=set of)?
2. ООП или не ООП - это как ты реализуешь smile.gif
Можно сделать класс "множество точек+ еще одна точка" (соответственно, поля "множество", "точка", "количество параллелограммов", метод проверки и метод подсчета)
Можно сделать класс "четырехугольник"...
Класс "точка", наконец smile.gif
Needhelp
На счет множества это МТ (математический термин)
Точка задается двумя координатами...

Допустим....

X Y
12 5
6 8
0 3
5 6
-9 6
...
и.т.д
мисс_граффити
тогда я бы посоветовала не заморачиваться с файлами (раз все равно такого условия нет), а записать точки в массив (двумерный... первая строка Х, вторая У) и сделать три вложенных цикла (каждый определяет выбор одной точки).
Needhelp
Спасибо=) smile.gif Попробую)
Needhelp
 
const n=3;
Y4=0;
X4=1;
type
mas=array[1..2,1..n] of Integer;
var
i,j,q,b,c,k,l : Integer;
X1,X2,X3,Y1,Y2,Y3 : Integer;
A: Mas;
begin
q:=0;
i:=1;
for j:=1 to n do
begin
Writeln('Vvedite X');
Readln(A[i,j]);
end;
i:=2;
for j:=1 to n do
begin
Writeln('Vvedite Y');
Readln(A[i,j]);
end;
i:=1;
for j:=1 to n do
X1:=A[i,j];
i:=2;
for j:=1 to n do
Y1:=A[i,j];
begin
b:=1;
for c:=2 to n do
X2:=A[b,c];
b:=2;
for c:=2 to n do
Y2:=A[b,c];
begin
l:=1;
for k:=1 to n do
X3:=A[l,k];
l:=2;
for k:=1 to n do
Y3:=A[l,k];
IF (((X2-X1 = X4-X3) AND (Y2-Y1 = Y4-Y3))
OR ((X2-X1 = X3-X4) AND (Y2-Y1 = Y3-Y4))
OR ((X3-X1 = X4-X2) AND (Y3-Y1 = Y4-Y2))
OR ((X3-X1 = X2-X4) AND (Y3-Y1 = Y2-Y4))
OR ((X4-X1 = X3-X2) AND (Y4-Y1 = Y3-Y2))
OR ((X4-X1 = X2-X3) AND (Y4-Y1 = Y2-Y3)))
THEN q:=q+1;
end;
end;
Writeln('Kolichestvo parallerogramov -> ',q);
end.


При вводе координат (2,1) (3,1) (2,0) и (1,0) ((1,0) в константе) выдает кол-во парал-в равное -> 0... Не знаю в чем проблема ?
мисс_граффити
IF (((X2-X1 = X4-X3) AND (Y2-Y1 = Y4-Y3))
OR ((X2-X1 = X3-X4) AND (Y2-Y1 = Y3-Y4))
OR ((X3-X1 = X4-X2) AND (Y3-Y1 = Y4-Y2))
OR ((X3-X1 = X2-X4) AND (Y3-Y1 = Y2-Y4))
OR ((X4-X1 = X3-X2) AND (Y4-Y1 = Y3-Y2))
OR ((X4-X1 = X2-X3) AND (Y4-Y1 = Y2-Y3)))

сравнивай по модулю. а то не все случаи рассматриваешь...
if ((abs(x1-x2)=abs(x3-x4)) and... 
Needhelp

Ответ ->0

Так тоже не хочет((
мисс_граффити
по два раза одно и то же написал smile.gif

по самой программе.
я, кажется, говорила про вложенные циклы.
а ты что сделал?
вот запусти отладку и посмотри, что у тебя хранится в X1, X2...
Needhelp
При вводе тех значений X1 -> 2, X2->2, X3->2 ... Цикл, вызываемый в другом цикле, называется вложенным (если мне память не изменяет?! smile.gif
мисс_граффити
Да.
но у тебя я ни одной вложенности не увидела.
Цитата
X1 -> 2, X2->2, X3->2

ага. а должно быть 2,3,2, правда?
Needhelp
Правда...правда...
Скажи пожайлуста, что у меня тогда не правильно или все не правильно?
Лично я думал, что...

for j:=1 to n do
Y1:=A[i,j];
begin {вот это и есть вложенность, можно без begin}
b:=1;
for c:=2 to n do



Значит я ошибался...
мисс_граффити
У тебя к циклу относится только
Y1:=A[i,j];

все остальное - отдельно.
Needhelp
Цитата(мисс_граффити @ 27.05.2007 23:04) *

У тебя к циклу относится только
Y1:=A[i,j];

все остальное - отдельно.


Спасибооо большущее good.gif Я тебя уже сегодня достал=)) wacko.gif Написал -> Работает=)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.