Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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;

Помогите пожалуйтса, что-то наши преподы с этой задачей загнули...
Ответить с цитированием
  #2  
Старый 28.12.2006, 21:10
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

А ты ожидала чегото другого? У тебя S типа Smallint (тоесть целое число), а ты ей присваиваешь (0.5*(2*x2-x4-x3)*(y1-y2)) или ((1/2)*(x2-x1)*(y3+y4-2*y2)). В результате умножения на 0.5 (или 1/2, что одно и тоже) получается вещественное число...
Ответить с цитированием
  #3  
Старый 29.12.2006, 00:26
Wendy Wendy вне форума
Прохожий
 
Регистрация: 28.12.2006
Сообщения: 4
Репутация: 10
По умолчанию

Да ты прав, мне знакомый тоже на эту ошибку сегодня указал. Спасибо!!!!!!!!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter