На плоскости заданы множество точек 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 /* это параллелограмм */
1. Перебор...
вопрос в том, как задаются точки.. двумя координатами?
и "множество" здесь использовано как математический термин (=некоторое количество) или как тип данных (=set of)?
2. ООП или не ООП - это как ты реализуешь
Можно сделать класс "множество точек+ еще одна точка" (соответственно, поля "множество", "точка", "количество параллелограммов", метод проверки и метод подсчета)
Можно сделать класс "четырехугольник"...
Класс "точка", наконец
На счет множества это МТ (математический термин)
Точка задается двумя координатами...
Допустим....
X Y
12 5
6 8
0 3
5 6
-9 6
...
и.т.д
тогда я бы посоветовала не заморачиваться с файлами (раз все равно такого условия нет), а записать точки в массив (двумерный... первая строка Х, вторая У) и сделать три вложенных цикла (каждый определяет выбор одной точки).
Спасибо=) Попробую)
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.
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...
Ответ ->0
Так тоже не хочет((
по два раза одно и то же написал
по самой программе.
я, кажется, говорила про вложенные циклы.
а ты что сделал?
вот запусти отладку и посмотри, что у тебя хранится в X1, X2...
При вводе тех значений X1 -> 2, X2->2, X3->2 ... Цикл, вызываемый в другом цикле, называется вложенным (если мне память не изменяет?!
Да.
но у тебя я ни одной вложенности не увидела.
Правда...правда...
Скажи пожайлуста, что у меня тогда не правильно или все не правильно?
Лично я думал, что...
for j:=1 to n do
Y1:=A[i,j];
begin {вот это и есть вложенность, можно без begin}
b:=1;
for c:=2 to n do
У тебя к циклу относится только
Y1:=A[i,j];