Написание Формулы

Тема в разделе "Pascal and Delphi", создана пользователем Xatiko, 11 мар 2013.

  1. Xatiko

    Xatiko New Member

    Регистрация:
    5 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток!
    Есть проблема при написании формулы. Приведу пример:

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

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

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

    В этой же процедуре.
    Код (Text):
    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. Но так как уже не работает для двух, смысла дальше нет двигаться.
    Есть догадки, что не так расставленны скобки и компилятор выполняет не те арифмитические действия.
     
  2. gpatron

    gpatron Active Member

    Регистрация:
    13 авг 2009
    Сообщения:
    26
    Симпатии:
    0
    Если Вам нужно именно такой порядок вычислений:
    (x1*z1)+(x2*z2)/(z1+z2)
    (y1*z1)+(y2*z2)/(z1+z2), то:

    Код (Delphi):
    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)));
    А если другой порядок вычислений:
    ((x1*z1)+(x2*z2))/(z1+z2)
    ((y1*z1)+(y2*z2))/(z1+z2), то:

    Код (Delphi):
    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)));
    А вообще, если это нужно вычислять до 20, то можно все вычисления произвести в цикле.

    Для варианта решения
    (x1*z1)+(x2*z2)/(z1+z2)
    (y1*z1)+(y2*z2)/(z1+z2)
    Ваша процедура будет выглядеть:

    Код (Delphi):
    procedure TForm1.Button8Click(Sender: TObject);
    begin
    n:=form1.ComboBox1.ItemIndex+1;
    xz:=0; yz:=0; z:=0;
    for i:=1 to n do
    begin
    if i<n then
    begin
    xz:=xz+StrToInt(Ed[i].text)*StrToInt(Ed2[i].text);
    yz:=yz+StrToInt(Ed1[i].text)*StrToInt(Ed2[i].text);
    end;   
    z:=z+StrToInt(Ed2[i].text);
    end;
    label37.Caption:=Floattostr(xz+StrToInt(Ed[n].text)*StrToInt(Ed2[n].text)/z);
    label38.Caption:=Floattostr(yz+StrToInt(Ed1[n].text)*StrToInt(Ed2[n].text)/z);
    end;
    Для варианта решения
    ((x1*z1)+(x2*z2))/(z1+z2)
    ((y1*z1)+(y2*z2))/(z1+z2)

    Код (Delphi):
    procedure TForm1.Button8Click(Sender: TObject);
    begin
    n:=form1.ComboBox1.ItemIndex+1;
    xz:=0; yz:=0; z:=0;
    for i:=1 to n do
    begin
    xz:=xz+StrToInt(Ed[i].text)*StrToInt(Ed2[i].text);
    yz:=yz+StrToInt(Ed1[i].text)*StrToInt(Ed2[i].text);
    z:=z+StrToInt(Ed2[i].text);
    end;
    label37.Caption:=Floattostr(xz/z);
    label38.Caption:=Floattostr(yz/z);
    end;
    Ну в общем как-то так, писал прямо здесь - могут быть синтаксические ошибки
     
Загрузка...
Похожие Темы - Написание Формулы
  1. wellsun
    Ответов:
    0
    Просмотров:
    128
  2. vladis222
    Ответов:
    1
    Просмотров:
    627
  3. smailvolf
    Ответов:
    1
    Просмотров:
    1.036
  4. faissullin
    Ответов:
    0
    Просмотров:
    1.090
  5. IseLL
    Ответов:
    1
    Просмотров:
    998

Поделиться этой страницей