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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2014, 19:14   #1
Geol_60
 
Регистрация: 28.09.2014
Сообщений: 9
По умолчанию Если IF более 10 как правильно написать

Прошу строго не судить...
Есть десять отрезков ломаная кривая, нужно выбрать по условию если значение на этой кривой. В Excel всё прекрасно получается с помощью вложенных функций: Если и И. В Delphi ни как не получается...

Код:
procedure TForm1.btn2Click(Sender: TObject);
    var t, t1, T2, b: Real;
    b1, b2, b3, b4, b5, b6, b7, b8, b9, b10 :Real;  //  пересчет таблицы, данные с графика

begin

       t:=StrToFloat(lbledt8.Text);      // время
       t1:=StrToFloat(lbledt7.Text);      // время
       T2:=t/t1;
       b1:=1-abs(T2-2)*0.147/0.2;
       b2:=0.853-abs(T2-2.2)*0.127/0.2;
       b3:=0.726-abs(T2-2.4)*0.11/0.2;
       b4:=0.616-abs(T2-2.6)*0.102/0.2;
       b5:=0.514-abs(T2-2.8)*0.103/0.2;
       b6:=0.411-abs(T2-3)*0.097/0.2;
       b7:=0.314-abs(T2-3.2)*0.083/0.2;
       b8:=0.231-abs(T2-3.4)*0.088/0.2;
       b9:=0.143-abs(T2-3.6)*0.079/0.2;
       b10:=0.064-abs(T2-3.8)*0.064/0.13;

  // отношение t/t1=T2  и может изменятся от 2 до 3,93 см.график
  // используется для выбора b с графика

   lbl8.Caption:='t/t1 = '+FloatToStr(T2);

     if (T2>=2)  and (2.2>=T2) then
          lbledt6.Text:=FloatToStr(b1)
       else  lbledt6.Text:=' Нет данных ';

     if (T2>2.2)  and (2.4>=T2) then
         lbledt6.Text:=FloatToStr(b2)
     else    lbledt6.Text:=' Нет данных ';

     if (T2>2.4)  and (2.6>=T2) then
         lbledt6.Text:=FloatToStr(b3)
     else   lbledt6.Text:=' Нет данных ';

     if (T2>2.6)  and (2.8>=T2) then
         lbledt6.Text:=FloatToStr(b4)
     else   lbledt6.Text:=' Нет данных ';

     if (T2>2.8)  and (3>=T2) then
         lbledt6.Text:=FloatToStr(b5)
     else   lbledt6.Text:=' Нет данных ';

     if (T2>3)  and (3.2>=T2) then
         lbledt6.Text:=FloatToStr(b6)
     else   lbledt6.Text:=' Нет данных ';

     if (T2>3.2)  and (3.4>=T2) then
         lbledt6.Text:=FloatToStr(b7)
     else   lbledt6.Text:=' Нет данных ';

     if (T2>3.4)  and (3.6>=T2) then
        lbledt6.Text:=FloatToStr(b8)
     else   lbledt6.Text:=' Нет данных ';

     if (T2>3.6)  and (3.8>=T2) then
         lbledt6.Text:=FloatToStr(b9)
     else   lbledt6.Text:=' Нет данных ';

     if (T2>3.8)  and (3.93>=T2) then
          lbledt6.Text:=FloatToStr(b10)
       else   lbledt6.Text:=' Нет данных ';

     end;

end.
Geol_60 вне форума Ответить с цитированием
Старый 31.10.2014, 19:18   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Выкинуть из кода все lbledt6.Text:=' Нет данных ';
кроме самой последней.
northener вне форума Ответить с цитированием
Старый 31.10.2014, 21:38   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

массивы и циклы использовать по условию задачи запрещено?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.10.2014, 22:55   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

как-то так:
Код:
case T2 of
2.0..2.2: ...
end else
 'Нет данных'
Человек_Борща вне форума Ответить с цитированием
Старый 31.10.2014, 23:02   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
как-то так:
Код:
case T2 of
2.0..2.2: ...
end else
 'Нет данных'
Борщ, ты пьяный, штоль? Чо городишь-то?!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.10.2014, 23:38   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так можно, если с константами не напутал. Да, и без массива b можно спокойно обойтися. Сам подумай как
Код:
procedure TForm1.btn2Click(Sender: TObject);
const c1: array[1..10] of Real = (1,0.853,0.726,0.616,0.514,0.411,0.314,0.231,0.143,0.064);
      c2: array[1..10] of Real = (0.147/0.2,0.127/0.2,0.11/0.2,0.102/0.2,0.103/0.2,
                                  0.097/0.2,0.083/0.2,0.088/0.2,0.079/0.2,0.064/0.13);
var t, t1, T2: Real;
    b: array[1..10] of Real;
    i: Integer;
begin
  t:=StrToFloat(lbledt8.Text);      // время
  t1:=StrToFloat(lbledt7.Text);      // время
  T2:=t/t1;
  lbledt6.Text:=' Нет данных ';
  for i:=1 to 10 do begin
    b[i]:=c1[i]-abs(T2-2-(i-1)*0.2)*c2[i];
    if (((i=1) and (T2>=2)) or ((i>1) and (T2>2+(i-1)*0.2))) and
       (((i<10) and (T2<=2+i*0.2)) or ((i=10) and (T2<=3.93))) then lbledt6.Text:=FloatToStr(b[i]);
  end;
  lbl8.Caption:='t/t1 = '+FloatToStr(T2);
end;
Цитата:
2.0..2.2: ...
Прикольно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 31.10.2014 в 23:46.
Аватар вне форума Ответить с цитированием
Старый 01.11.2014, 01:47   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Так можно, если с константами не напутал.
...
Прикольно
Прикольно, но совершенно мозгоубийственно. Можно проще и, главное, более легкочитаемое. И без цикла.
northener вне форума Ответить с цитированием
Старый 01.11.2014, 02:15   #8
Geol_60
 
Регистрация: 28.09.2014
Сообщений: 9
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Выкинуть из кода все lbledt6.Text:=' Нет данных ';
кроме самой последней.
Выкинул всё лишнее, но работает не так как надо. Выдает сообщение Нет данных .
Geol_60 вне форума Ответить с цитированием
Старый 01.11.2014, 02:39   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Geol_60 Посмотреть сообщение
Выкинул всё лишнее, но работает не так как надо. Выдает сообщение Нет данных .
Покажи код после этого "выкидыша".
northener вне форума Ответить с цитированием
Старый 01.11.2014, 02:43   #10
Geol_60
 
Регистрация: 28.09.2014
Сообщений: 9
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
массивы и циклы использовать по условию задачи запрещено?
Использовать массивы и циклы конечно можно, главное получить результат, но так как данная формула работала в Excel (см. файл IF_10.xls) через условия: Если и И, то я конечно решил, что и в Delphi, возможно такое решение, и про массивы и циклы вообще не думал.... IF_10.zip
Geol_60 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Я не понимаю как нужно правильно выводить строчку матрицы на экран (как это написать)? Julia1 Паскаль, Turbo Pascal, PascalABC.NET 1 08.02.2014 16:33
Как более правильно работать с базой данных? Esigns SQL, базы данных 3 05.11.2012 15:08
Как более профессионально написать код pompiduskus PHP 4 02.04.2012 23:35
Как правильно написать? Nevon PHP 4 16.03.2012 00:36
Как правильно написать?? Дима я Общие вопросы C/C++ 6 25.11.2009 22:52