|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
'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; Помогите пожалуйтса, что-то наши преподы с этой задачей загнули... |
#2
|
||||
|
||||
А ты ожидала чегото другого? У тебя S типа Smallint (тоесть целое число), а ты ей присваиваешь (0.5*(2*x2-x4-x3)*(y1-y2)) или ((1/2)*(x2-x1)*(y3+y4-2*y2)). В результате умножения на 0.5 (или 1/2, что одно и тоже) получается вещественное число...
|
#3
|
|||
|
|||
Да ты прав, мне знакомый тоже на эту ошибку сегодня указал. Спасибо!!!!!!!!!!!
|