Показать сообщение отдельно
  #1  
Старый 28.12.2006, 20:57
Wendy Wendy вне форума
Прохожий
 
Регистрация: 28.12.2006
Сообщения: 4
Репутация: 10
Вопрос 'Smallint' and 'Extended'

Ещё один вопрос. Я делаю программу по такому условию: Задаются координаты левого верхнего и правого нижнего углов прямоугольника и 2-х точек на периметре (всё произвольно). Нужно определить площадь фигуры, содержащей правый нижний угол. Так аот я прокрутила все варианты расположения точек(их оказалось всео 12 или 13. сейчас не помню). Для каждого варианта я задала определённые условия (ну там чтобы, например, x1<=x4<=x2 и т.д.--достаточно большое количество условий для каждого варианта и всё это забила программу ч/з or и and. Если всё эта громадина из условий выполняется (для каждого варианта она своя) то вычисляется площадь данной по варианту фигуры (причём каждое условие уникально). Вроде всё правиль, но компилятор выдаёт ошибку 147 Incompatible types: 'smallint' and 'extended'. Ошибка выдаётся после else. вы не знаете, что это вообще может быть? Я же столько мучаюся над этим. Выглядит этот монстр примерно так. (Скобочки ставить уже пробовала)

function Calculation(x1,y1,x2,y2,x3,y3,x4,y4:smallint):smal lint;
var S:smallint;
begin
if ((((x1<=x3)and(x3<=x4)and(x4<=x2))and((y2=y3)and(y 3=y4)))
or(((x1<=x4)and(x4<=x3)and(x3<=x2))and((y2=y3)and( y3=y4))))
then S:=-1
else
if (((((y2<=y3)and(y3<=y4)and(y4<=y1))and((x1=x3)and( x3=x4)))
or(((y2<=y4)and(y4<=y3)and(y3<=y1))and((x1=x3)and( x3=x4))))
or((((y2<=y3)and(y3<=y4)and(y4<=y1))and((x2=x3)and (x3=x4)))
or(((y2<=y4)and(y4<=y3)and(y3<=y1))and((x2=x3)and( x3=x4))))
or((((x1<=x3)and(x3<=x4)and(x4<=x2))and((y1=y3)and (y3=y4)))
or(((x1<=x4)and(x4<=x3)and(x3<=x2))and((y1=y3)and( y3=y4)))))
then S:=(x2-x1)*(y2-y1)
else
if (((((x1<=x3)and(x3<=x2))and(y3=y2)and((x1<=x4)and( x4<=x2))and(y4=y1))
or(((x1<=x3)and(x3<=x2))and(y3=y1)and((x1<=x4)and( x4<=x2))and(y4=y2))))
then S:=(0.5*(2*x2-x4-x3)*(y1-y2))
else
if (((x3=x1)and(x4=x2)and((y2<=y3)and(y3<=y1))and((y2 <=y4)and(y4<=y1)))
or((x3=x2)and(x4=x1)and((y2<=y3)and(y3<=y1))and((y 2<=y4)and(y4<=y1))))
then S:=(1/2)*(x2-x1)*(y3+y4-2*y2)
else
if ((x1<=x3)and(x3<=x2))and(x4=x2)and(y3=y2)and((y1<= y4)and(y4<=y2))
then S:=(1/2)*(x2-x3)*(y4-y2)
else
if ((x1<=x4)and(x4<=x2))and(x3=x2)and(y4=y2)and((y1<= y3)and(y3<=y2))
then S:=(1/2)*(x2-x4)*(y3-y2)
else
if (x3=x1)and((y2<=y3)and(y3<=y1))and((x1<=x4)and(x4< =x2))and(y4=y1)
then S:=((x2-x1)*(y1-y2))-((1/2)*(y1-y3)*(x4-x1))
else
if (x4=x1)and((y2<=y4)and(y4<=y1))and((x1<=x3)and(x3< =x2))and(y3=y1)
then S:=((x2-x1)*(y1-y2))-((1/2)*(y1-y4)*(x3-x1))
else
if ((x1<=x3)and(x3<=x2))and(y3=y2)and(x4=x1)and((y2<= y4)and(y4<=y1))
then S:=((x2-x1)*(y1-y2))-((1/2)*(x3-x1)*(y4-y2))
else
if ((x1<=x4)and(x4<=x2))and(y4=y2)and(x3=x1)and((y2<= y3)and(y3<=y1))
then S:=((x2-x1)*(y1-y2))-((1/2)*(x4-x1)*(y3-y2))
else
if ((x1<=x3)and(x3<=x2))and(y3=y1)and(x4=x2)and((y2<= y4)and(y4<=y1))
then S:=((x2-x1)*(y1-y2))-((1/2)*(x2-x3)*(y1-y4))
else
if ((x1<=x4)and(x4<=x2))and(y4=y1)and(x3=x2)and((y2<= y3)and(y3<=y1))
then S:=((x2-x1)*(y1-y2))-((1/2)*(x2-x4)*(y1-y3))
else S:=-1;
Calculation:=S;

Помогите пожалуйтса, что-то наши преподы с этой задачей загнули...
Ответить с цитированием