|
#1
|
||||
|
||||
Need help
Господа мне нужна помощь
такая я писал калькулятор но я его хочу улучшить типа создаю кнопки (,),+,-,*,/, ну к примеру пользователь жмет ------- (5+4)*40+(50-30) чтоб он распознвал этот текст как пример и решил его помогите |
#2
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; z: Char; ipos: Integer; implementation {$R *.dfm} function Calculate(SMyExpression: string; digits: Byte): string; // Calculate a simple expression // Supported are: Real Numbers, parenthesis function StrToReal(chaine: string): Real; var r: Real; Pos: Integer; begin Val(chaine, r, Pos); if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos); Result := r; end; function RealToStr(inreal: Extended; digits: Byte): string; var S: string; begin Str(inreal: 0: digits, S); realToStr := S; end; procedure NextChar; var s: string; begin if ipos > Length(SMyExpression) then begin z := #9; Exit; end else begin s := Copy(SMyExpression, ipos, 1); z := s[1]; Inc(ipos); end; if z = ' ' then nextchar; end; function Expression: Real; var w: Real; function Factor: Real; var ws: string; begin Nextchar; if z in ['0'..'9'] then begin ws := ''; repeat ws := ws + z; nextchar until not (z in ['0'..'9', '.']); Factor := StrToReal(ws); end else if z = '(' then begin Factor := Expression; nextchar end else if z = '+' then Factor := +Factor else if Z = '-' then Factor := -Factor; end; function Term: Real; var W: Real; begin W := Factor; while Z in ['*', '/'] do if z = '*' then w := w * Factor else w := w / Factor; Term := w; end; begin w := term; while z in ['+', '-'] do if z = '+' then w := w + term else w := w - term; Expression := w; end; begin ipos := 1; Result := RealToStr(Expression, digits); end; procedure TForm1.Button1Click(Sender: TObject); var sMyExpression: string; begin sMyExpression := Edit1.text; Edit2.Text:=('= ' + Calculate(sMyExpression,0)); end; end. |
#3
|
||||
|
||||
|
#4
|
||||
|
||||
Сори за глупый вопрос но вот компонент TTreeView
Обьясните как сделать чтоб его вкалдки по нажатию кнопки выдавали нужную процедуру или подскажите компонент типа его (жалетельно чтоб с описанием место нахождения) |
#5
|
||||
|
||||
Ну кто мож помочь чтоб при нажатии на нужный подзагаловок я делал нужную функцию ну к примеру я если выбрал из списка sqrt то он должен выполнить нужную мне функцию
|
#6
|
||||
|
||||
А ладно сам разобрался надо было просто написать
Код:
if TreeView1.Items.Item[7].Selected then begin Form2.ShowModal; end; |
#7
|
||||
|
||||
Народ вот проблема у меня при написании выражения (см. выше код для вычисления) там распознает не 0,5 а 0.5 да вот проблема переношу из другой формы и там пишет не . а , как поменять?
|
#8
|
||||
|
||||
Или вопрос: Вот если по нажатию на узел должно что-то выскочить для ввода нужных чисел но не создавая форму
|
#9
|
||||
|
||||
Вариант, конечно, есть… Хотя мне он не нравится…
Код:
procedure TForm1.Button1Click(Sender: TObject); begin Caption := InputBox( 'Заголовок', 'Запрос', 'Значение по умолчанию' ); end; |
#10
|
||||
|
||||
Вот проблема снова таже мне надо чтоб он значение типа реал не воспринимал как 0,5 а как 0.5 т.к. в коде для решения выражений проблема что там он воспринимает не, а . и идет не стыковка
|
#11
|
||||
|
||||
Код:
function StrToReal(chaine: string): Real; var r: Real; Pos: Integer; begin Val(chaine, r, Pos); if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos); Result := r; end; |
#12
|
||||
|
||||
Сори народ я дурбецел
Код:
function Factor: Real; var ws: string; begin Nextchar; if z in ['0'..'9'] then begin ws := ''; repeat ws := ws + z; nextchar until not (z in ['0'..'9', '.']); Factor := StrToReal(ws); end else if z = '(' then begin Factor := Expression; nextchar end else if z = '+' then Factor := +Factor else if Z = '-' then Factor := -Factor; end; |
#13
|
||||
|
||||
Народ сори что достал но вот еще вопрос
обьясните на примере работу таких функций как Random Код:
form1.Edit1.Text:=form1.Edit1.Text+IntTostr(Random(StrToInt(Edit1.text))); Random( 8 ) = 4 а у меня 0 так же Avg — average number Sum — addition Mul — product |