Помогите доделать программу

Ответить
azalivin
Сообщения: 2
Зарегистрирован: 19 фев 2011, 11:27

19 фев 2011, 11:30

Даны два прямоугольника, стороны которых параллельны. Известны координаты левого нижнего угла каждого из них и длины их сторон.
а) Определить, принадлежат ли все точки одного прямоугольника второму.
б) Определить, пересекаются ли эти прямоугольники.

Код: Выделить всё

CLS
PRINT TAB(20); "Программа определяет пересекаются ли 2 прямоугольника а"
PRINT TAB(20); "также принадлежность всех точек одного прямоугольника"
PRINT TAB(20); "к другому,при заданных координат нижнего левого угла,"
PRINT TAB(20); "сторон, каждого из них"
PRINT
PRINT "Координаты и размеры сторон первого прямоугольника"
INPUT "Абцисса нижнего угла: ", x1
INPUT "Ордината нижнего угла: ", y1
1 : INPUT "Высота: ", a1
    IF a1 = 0 OR a1 < 0 THEN
        PRINT "Высота в прямоугольнике всегда должна быть больше 0"
        GOTO 1
    END IF
2 : INPUT "Длина: ", b1
    IF b1 = 0 OR b1 < 0 THEN
        PRINT "Длинна в прямоугольнике всегда должна быть больше 0"
        GOTO 2
    END IF
   
PRINT "Координаты и размеры сторон второго прямоугольника"
INPUT "Абцисса нижнего угла: ", x11
INPUT "Ордината нижнего угла: ", y11
 
3 : INPUT "Высота: ", a11
    IF a11 = 0 OR a11 < 0 THEN
        PRINT "Высота в прямоугольнике всегда должна быть больше 0"
        GOTO 3
    END IF
4 : INPUT "Длинна: ", b11
    IF b11 = 0 OR b11 < 0 THEN
        PRINT "Длинна в прямоугольнике всегда должна быть больше 0"
        GOTO 4
    END IF
 
'Находим координаты центра для первого прямоугольника
x2 = x1 + b1
x4 = x1
x3 = x2
y3 = y1 + a1
y2 = y1
y4 = y3
xctr1 = (x1 + x2 + x3 + x4) / 4
yctr1 = (y1 + y2 + y3 + y4) / 4
 
'Находим координаты центра для второго прямоугольника
x22 = x11 + b11
x44 = x11
x33 = x22
y33 = y11 + a11
y22 = y11
y44 = y33
xctr2 = (x11 + x22 + x33 + x44) / 4
yctr2 = (y11 + y22 + y33 + y44) / 4
 ' Определение
IF ABS(xctr1 - xctr2) <= (b1 + b11) / 2 AND ABS(yctr1 - yctr2) <= (a1 + a11) / 2 THEN
    PRINT "Прямоугольники пересекаются"
ELSE
    PRINT "Прямоугольники не пересекаются"
END IF
 
IF x1 = x11 AND y1 = y11 AND a1 = a11 AND b1 = b11 THEN
    PRINT "Прямоугольники совпадают"
ELSEIF x11 <= x1 AND y11 >= y1 AND a11 >= a1 AND b11 >= b1 THEN
    PRINT "1-ый прямоугольник принадлежит 2-ому"
ELSEIF x1 <= x11 AND y1 >= y11 AND a1 >= a11 AND b1 >= b11 THEN
    PRINT "2-ой прямоугольник принадлежит 1-ому"
END IF
END
Помогите сделать программу работоспособной.
Все дело в том, что если один из прямоугольников находится внутри другого, программа пишет, что они пересекаются, а должна "Прямоугольники не пересекаются ,один из принадлежит ..."
azalivin
Сообщения: 2
Зарегистрирован: 19 фев 2011, 11:27

14 мар 2011, 22:14

Задача решена


Код: Выделить всё

CLS
PRINT TAB(20); "Определение пересечения двух прямоугольников,"
PRINT TAB(20); "принадлежность всех точек одного прямоугольника"
PRINT TAB(20); "к другому, при заданных координат нижнего левого угла,"
PRINT TAB(20); "сторон, каждого из них"
PRINT
PRINT "Координаты и размеры сторон первого прямоугольника"
DIM X1, Y1, H1, L1, X2, Y2, H2, L2 AS INTEGER
INPUT "Нижний угол x: ", X1
INPUT "Нижний угол y: ", Y1
1 :
    INPUT "Высота: ", H1
    IF H1 <= 0 THEN
        PRINT "Высота в прямоугольнике всегда должна быть больше 0"
        GOTO 1
    END IF
2 : INPUT "Длина: ", L1
    IF L1 <= 0 THEN
        PRINT "Длина в прямоугольнике всегда должна быть больше 0"
        GOTO 2
    END IF
   
PRINT "Координаты и размеры сторон второго прямоугольника"
INPUT "Нижний угол x: ", X2
INPUT "Нижний угол y: ", Y2
 
3 : INPUT "Высота: ", H2
    IF H2 <= 0 THEN
        PRINT "Высота в прямоугольнике всегда должна быть больше 0"
        GOTO 3
    END IF
4 : INPUT "Длина: ", L2
    IF L2 < 0 THEN
        PRINT "Длина в прямоугольнике всегда должна быть больше 0"
        GOTO 4
    END IF

' Определение
IF ((X1 + L1 < X2) OR (X1 > X2 + L2)) AND ((Y1 + H1 < Y2) OR (Y1 > Y2 + H2)) THEN
    PRINT "Прямоугольники не пересекаются"
ELSEIF X1 = X2 AND Y1 = Y2 AND H1 = H2 AND L1 = L2 THEN
    PRINT "Прямоугольники совпадают"
ELSEIF X1 >= X2 AND X1 + L1 <= X2 + L2 AND Y1 >= Y2 AND Y1 + H1 <= Y2 + H2 THEN
    PRINT "Прямоугольники не пересекаются"
    PRINT "1-ый прямоугольник принадлежит 2-ому"
ELSEIF X2 >= X1 AND X2 + L2 <= X1 + L1 AND Y2 >= Y1 AND Y2 + H2 <= Y1 + H1 THEN
    PRINT "Прямоугольники не пересекаются"
    PRINT "2-ой прямоугольник принадлежит 1-ому"
ELSE
PRINT "Прямоугольники пересекаются "
PRINT "Нет принадлежности всех точек одного к другому"
END IF
END
Ответить