Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.01.2007, 20:35
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию Need help

Господа мне нужна помощь
такая я писал калькулятор но я его хочу улучшить типа
создаю кнопки (,),+,-,*,/, ну к примеру пользователь жмет
-------
(5+4)*40+(50-30) чтоб он распознвал этот текст как пример и решил его помогите
Ответить с цитированием
  #2  
Старый 18.01.2007, 20:48
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Код:
 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  
Старый 19.01.2007, 13:24
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

http://decoding.narod.ru/practic/pol...ishrecord.html
Ответить с цитированием
  #4  
Старый 19.01.2007, 18:15
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Сори за глупый вопрос но вот компонент TTreeView
Обьясните как сделать чтоб его вкалдки по нажатию кнопки выдавали нужную процедуру или подскажите компонент типа его (жалетельно чтоб с описанием место нахождения)
Ответить с цитированием
  #5  
Старый 19.01.2007, 19:23
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Ну кто мож помочь чтоб при нажатии на нужный подзагаловок я делал нужную функцию ну к примеру я если выбрал из списка sqrt то он должен выполнить нужную мне функцию
Ответить с цитированием
  #6  
Старый 20.01.2007, 11:14
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

А ладно сам разобрался надо было просто написать
Код:
if TreeView1.Items.Item[7].Selected then begin
Form2.ShowModal;
end;
Из узла открывает окно модальное и все
Ответить с цитированием
  #7  
Старый 20.01.2007, 19:15
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Народ вот проблема у меня при написании выражения (см. выше код для вычисления) там распознает не 0,5 а 0.5 да вот проблема переношу из другой формы и там пишет не . а , как поменять?
Ответить с цитированием
  #8  
Старый 20.01.2007, 19:36
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Или вопрос: Вот если по нажатию на узел должно что-то выскочить для ввода нужных чисел но не создавая форму
Ответить с цитированием
  #9  
Старый 20.01.2007, 23:21
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Вариант, конечно, есть… Хотя мне он не нравится…
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
   Caption := InputBox( 'Заголовок', 'Запрос', 'Значение по умолчанию' );
end;
Ответить с цитированием
  #10  
Старый 21.01.2007, 13:19
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Вот проблема снова таже мне надо чтоб он значение типа реал не воспринимал как 0,5 а как 0.5 т.к. в коде для решения выражений проблема что там он воспринимает не, а . и идет не стыковка
Ответить с цитированием
  #11  
Старый 21.01.2007, 14:24
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Код:
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;
Вот я понял Val всегда будет точка но мне надо перевести это в значение СтрТоРеал
Ответить с цитированием
  #12  
Старый 21.01.2007, 17:10
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Сори народ я дурбецел
Код:
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  
Старый 21.01.2007, 21:05
Аватар для CAHbKA
CAHbKA CAHbKA вне форума
Новичок
 
Регистрация: 10.01.2007
Сообщения: 66
Репутация: 10
По умолчанию

Народ сори что достал но вот еще вопрос
обьясните на примере работу
таких функций как
Random
Код:
form1.Edit1.Text:=form1.Edit1.Text+IntTostr(Random(StrToInt(Edit1.text)));
Не раюотает так как
Random( 8 ) = 4
а у меня 0
так же
Avg — average number
Sum — addition
Mul — product
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter