Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2011, 11:20   #1
azalivin
 
Регистрация: 05.05.2010
Сообщений: 5
По умолчанию Пересечение прямоугольников! (Basic)

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


Код:
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 вне форума Ответить с цитированием
Старый 19.02.2011, 11:36   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
IF ABS(xctr1 - xctr2) <= (b1 + b11) / 2 AND ABS(yctr1 - yctr2) <= (a1 + a11) / 2 THEN

      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-ому"
     ELSE

         PRINT "Прямоугольники пересекаются"

     ENDIF

ELSE
    PRINT "Прямоугольники не пересекаются"
END IF
Так?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 19.02.2011, 12:42   #3
azalivin
 
Регистрация: 05.05.2010
Сообщений: 5
По умолчанию

Нет,алгоритм не работает(((
_____________
| |
| |
| |
| ____________|


Допустим: нижний угол 1-прям. (x1,y1)= (0,0), высота 10,длинна 12
нижний угол 2-прям. (x2,y2)= (1.1.) высота 3 , длинна 4
Соответственно:
Они не пересекаются, но 2 прям принадлежит 1
azalivin вне форума Ответить с цитированием
Старый 14.03.2011, 22:13   #4
azalivin
 
Регистрация: 05.05.2010
Сообщений: 5
По умолчанию

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


Код:
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
azalivin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Площадь прямоугольников savraska Помощь студентам 7 04.06.2010 16:42
N прямоугольников по горизонтали Анюта01 Помощь студентам 5 19.03.2010 15:42
Площади прямоугольников.С++ evgenij9241 Помощь студентам 1 15.01.2010 15:33
Метод прямоугольников (Паскаль). Alexey_HvaranG Помощь студентам 2 24.11.2009 13:46
5 прямоугольников Carbon Помощь студентам 10 08.11.2007 10:08