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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2014, 02:45   #11
Geol_60
 
Регистрация: 28.09.2014
Сообщений: 9
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Покажи код после этого "выкидыша".

Код:
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);

     if (T2>2.2)  and (2.4>=T2) then
         lbledt6.Text:=FloatToStr(b2);

     if (T2>2.4)  and (2.6>=T2) then
              lbledt6.Text:=FloatToStr(b3);

     if (T2>2.6)  and (2.8>=T2) then
          lbledt6.Text:=FloatToStr(b4);


     if (T2>2.8)  and (3>=T2) then
         lbledt6.Text:=FloatToStr(b5);


     if (T2>3)  and (3.2>=T2) then
         lbledt6.Text:=FloatToStr(b6);


     if (T2>3.2)  and (3.4>=T2) then
         lbledt6.Text:=FloatToStr(b7);


     if (T2>3.4)  and (3.6>=T2) then
        lbledt6.Text:=FloatToStr(b8);


     if (T2>3.6)  and (3.8>=T2) then
         lbledt6.Text:=FloatToStr(b9);


     if (T2>3.8)  and (3.93>=T2) then
          lbledt6.Text:=FloatToStr(b10)
       else   lbledt6.Text:=' Íåò äàííûõ ';

     end;

end.
Geol_60 вне форума Ответить с цитированием
Старый 01.11.2014, 03:56   #12
Geol_60
 
Регистрация: 28.09.2014
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Так можно, если с константами не напутал. Да, и без массива 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;
Прикольно
Спасибо, ваш вариант работает, единственное при значении 3,93 - выдаёт - Нет данных, а должно быть ноль, я пока с этим не смог разобраться... А так предложенный Вами вариант, выше моего разумения... есть на кого равняться.
Как обойтись без массива, тоже до меня пока не доходит
Geol_60 вне форума Ответить с цитированием
Старый 01.11.2014, 08:52   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как обойтись без массива, тоже до меня пока не доходит
Не нужно делать то, что совершенно нецелесообразно, только из-за своей прихоти. Делай так чтоб работало, а не так чтоб чувствовать себя крутым кулхацкером.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2014, 09:57   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Обхаяли мой цикл, ну и ладно. С ифами так правильно будет
Код:
if (T2>=2)  and (2.2>=T2) then lbledt6.Text:=FloatToStr(b1)
else  if (T2>2.2)  and (2.4>=T2) then lbledt6.Text:=FloatToStr(b2)
else  if (T2>2.4)  and (2.6>=T2) then lbledt6.Text:=FloatToStr(b3)
...
else if (T2>3.8)  and (3.93>=T2) then lbledt6.Text:=FloatToStr(b10)
else   lbledt6.Text:=' Нет данных ';
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.11.2014, 17:40   #15
Geol_60
 
Регистрация: 28.09.2014
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
С ифами так правильно будет
Код:
if (T2>=2)  and (2.2>=T2) then lbledt6.Text:=FloatToStr(b1)
else  if (T2>2.2)  and (2.4>=T2) then lbledt6.Text:=FloatToStr(b2)
else  if (T2>2.4)  and (2.6>=T2) then lbledt6.Text:=FloatToStr(b3)
...
else if (T2>3.8)  and (3.93>=T2) then lbledt6.Text:=FloatToStr(b10)
else   lbledt6.Text:=' Нет данных ';
Спасибо, всё отлично работает.... А с циклами 1-Ваш вариант для меня сложен, но постараюсь освоить.
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