Конференция "Основная" » Написание формулы
 
  • Дмитрий (11.03.13 22:47) [0]
    Доброго времени суток!
    Есть проблема при написании формулы. Приведу пример:

    Для одного объекта:
    (x1*z1)/(z1)
    (y1*z1)/(z1)

    Ed-это (х) Ed1-это (у) Ed2-это (z)


    procedure TForm1.Button8Click(Sender: TObject);
    begin
    if form1.ComboBox1.ItemIndex=0 then
    begin
    label37.Caption:=Floattostr(StrToInt(Ed[1].text)*StrToInt(Ed2[1].text)/StrToInt(Ed2[1].text));
    label38.Caption:=Floattostr(StrToInt(Ed1[1].text)*StrToInt(Ed2[1].text)/StrToInt(Ed2[1].text));
    end



    Для двух:
    (x1*z1)+(x2*z2)/(z1+z2)
    (y1*z1)+(y2*z2)/(z1+z2)

    В этой же процедуре.


    else
    if form1.ComboBox1.ItemIndex=1 then
    begin
    label37.Caption:=Floattostr(((StrToInt(Ed[1].text)*StrToInt(Ed2[1].text))+((StrToInt(Ed[2].text)*StrToInt(Ed2[2].text)))/(StrToInt(Ed2[1].text)+StrToInt(Ed2[2].text))));
    label38.Caption:=Floattostr(((StrToInt(Ed1[1].text)*StrToInt(Ed2[1].text))+((StrToInt(Ed1[2].text)*StrToInt(Ed2[2].text)))/(StrToInt(Ed2[1].text)+StrToInt(Ed2[2].text))));
    end;
    end;



    Вопрос в том что, для одного работает, а для двух выводит огромные значения которых даже не вводили. А вообще надо хотя бы до 20. Но так как уже не работает для двух, смысла дальше нет двигаться.
    Есть догадки, что не так расставленны скобки и компилятор выполняет не те арифмитические действия.
  • Inovet © (11.03.13 22:54) [1]
    > [0] Дмитрий   (11.03.13 22:47)
    > Ed[1].text

    SubStr(Ed.Text, 1, 1)

    Возьми СтрингГрид что ли.
  • Sairex © (12.03.13 00:37) [2]
    Сделай проще расчет:
    Для одного объекта:
    (x1*z1)/(z1)
    (y1*z1)/(z1)


    // если я правильно понял формулу это для одного объекта
    // формула одинаковая как для Х так и для У
    function One(value1,value: extended): extended;
    begin
    Result:= x*z/z;
    end;


    Для двух элементов
    Для двух:
    (x1*z1)+(x2*z2)/(z1+z2)
    (y1*z1)+(y2*z2)/(z1+z2)

    // если я правильно понял формулу это для одного объекта
    // формула одинаковая как для Х так и для У
    function Two(ValueXorY1, ValueZ1, ValueXorY2, ValueZ2: Extended): Extended;
    begin
    Result:= (ValueXorY1*ValueZ1)+(ValueXorY2*ValueZ2)/(ValueZ1+ValueZ2);
    end;


    Далее просто вызываешь эти функции.
  • icWasya © (12.03.13 09:38) [3]
    Может так?
    Для двух:
    ((x1*z1)+(x2*z2))/(z1+z2)
    ((y1*z1)+(y2*z2))/(z1+z2)
  • Дмитрий (12.03.13 10:46) [4]
    icWasya да ты прав.
  • Sairex © (12.03.13 17:54) [5]
    icWasya да ты телепат....
 
Конференция "Основная" » Написание формулы
Есть новые Нет новых   [119307   +54][b:0][p:0.002]