![]() |
|
|
#1
|
||||
|
||||
|
Господа мне нужна помощь
такая я писал калькулятор но я его хочу улучшить типа создаю кнопки (,),+,-,*,/, ну к примеру пользователь жмет ------- (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 |