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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2012, 18:06   #1
flouwjke
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 26
Восклицание Непонятно почему Incompatible types

Смысл в том что из разници lcsh и lsh необходимо по таблице подобрать нужное значение d если разница 10 то d=0 если меньше 10 и больше 6 то d=1 если от 6(включая) до больше 3 то d=2 если 3 то d=3 если 2 то d=4 если 1 то d=7 если 0,5(включая) и меньше то d=10

Почему то на if i<10 or i>6 then d1:=1; выдает [Error] Incompatible types

Код:
procedure TForm3.Button1Click(Sender: TObject);
var
  i,i2,i3,i4,i5:integer;
  lc1,lc2,lc3,lc4,lc5: double;
  lcsh1,lcsh2,lcsh3,lcsh4,lcsh5: double;
  lsh1,lsh2,lsh3,lsh4,lsh5: double;
  lc21,lc22,lc23,lc24,lc25: double;
  d1,d2,d3,d4,d5: integer;
  q,q2,q3,q4,q5: double;
begin
  lc21:=StrToFloat(a1.Text);
  lcsh1:=StrToFloat(b1.Text);
  lsh1:=StrToFloat(c1.Text);
    if lcsh1-lsh1 >=10
      then
        lc21:=lcsh1;
         if lcsh1-lsh1 <10
      then
        i:= trunc(lcsh1-lsh1);
        case i of
        10:d1:=0;
        3: d1:=3;
        2: d1:=4;
        1: d1:=7;
        //7..9: d1:=1;
        //4..6: d1:=2;
      end;
    if i<=0.5 then d1:=10;
    if i<10 or i>6 then d1:=1;
    if i<=6 or i>3 then d1:=2;
    lc21:=lcsh1-d1;
    q:= lc1-lc21;
  Label1.Caption:=FloatToStr(q);
flouwjke вне форума Ответить с цитированием
Старый 23.04.2012, 18:07   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
if (i<10) or (i>6)
Так сделать со всеми or.
Операция or старше операций <, > поэтому компилятор неправильно воспринимает.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.04.2012, 18:37   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

if (i<10) or (i>6)
А зачем это вообще? Оно всегда тру
eoln вне форума Ответить с цитированием
Старый 23.04.2012, 18:40   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Цитата:
А зачем это вообще?
Потому что кто-то не знает логических операций
if (i<10)and(i>6)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.04.2012, 18:43   #5
flouwjke
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 26
По умолчанию

на and он точно так же ругается (
flouwjke вне форума Ответить с цитированием
Старый 23.04.2012, 18:52   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,i2,i3,i4,i5:integer;
  lc1,lc2,lc3,lc4,lc5: double;
  lcsh1,lcsh2,lcsh3,lcsh4,lcsh5: double;
  lsh1,lsh2,lsh3,lsh4,lsh5: double;
  lc21,lc22,lc23,lc24,lc25: double;
  d1,d2,d3,d4,d5: integer;
  q,q2,q3,q4,q5: double;
begin
  lc21:=StrToFloat(edit1.Text);
  lcsh1:=StrToFloat(edit2.Text);
  lsh1:=StrToFloat(edit3.Text);
    if lcsh1-lsh1 >=10
      then
        lc21:=lcsh1;
         if lcsh1-lsh1 <10
      then
        i:= trunc(lcsh1-lsh1);
        case i of
        10:d1:=0;
        3: d1:=3;
        2: d1:=4;
        1: d1:=7;
        //7..9: d1:=1;
        //4..6: d1:=2;
      end;
    if i<=0.5 then d1:=10;
    if (i<10)and(i>6) then d1:=1;
    if (i<=6)and(i>3) then d1:=2;
    lc21:=lcsh1-d1;
    q:= lc1-lc21;
  Label1.Caption:=FloatToStr(q);
end;
Все отлично компилируется.
Но лучше все же:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,i2,i3,i4,i5:integer;
  lc1,lc2,lc3,lc4,lc5: double;
  lcsh1,lcsh2,lcsh3,lcsh4,lcsh5: double;
  lsh1,lsh2,lsh3,lsh4,lsh5: double;
  lc21,lc22,lc23,lc24,lc25: double;
  d1,d2,d3,d4,d5: integer;
  q,q2,q3,q4,q5: double;
begin
  lc21:=StrToFloat(edit1.Text);
  lcsh1:=StrToFloat(edit2.Text);
  lsh1:=StrToFloat(edit3.Text);
    if lcsh1-lsh1 >=10
      then
        lc21:=lcsh1;
         if lcsh1-lsh1 <10
      then
        i:= trunc(lcsh1-lsh1);
        case i of
        10:d1:=0;
        3: d1:=3;
        2: d1:=4;
        1: d1:=7;
        7..9: d1:=1;
        4..6: d1:=2;
      end;
    if i<=0.5 then d1:=10;
    lc21:=lcsh1-d1;
    q:= lc1-lc21;
  Label1.Caption:=FloatToStr(q);
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.04.2012, 18:59   #7
flouwjke
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 26
По умолчанию

Пасибо большое
flouwjke вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Incompatible types MetR Помощь студентам 4 22.12.2011 18:31
incompatible types nupinh Общие вопросы Delphi 1 21.05.2011 23:18
Delphi Incompatible types Iogan Gamba Puti Помощь студентам 1 19.06.2008 13:45