![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Строчный калькулятор [D6, D7, WinXP]
Volf_555 © (2005-09-23 00:46:00)Вот код, в котором работает только сложение. Остальные математические действия не работают почему-то. Суть программы в том, что в TEdit вводится математическая строка, например: 10+5+7*9 и в другом TEdit выводится результат. Сложение работает отлично. А вот другие знаки - нет
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Panel2: TPanel;
Edit3: TEdit;
Button2: TButton;
Edit4: TEdit;
Button3: TButton;
Memo1: TMemo;
Button4: TButton;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
s:String;
begin
edit2.Text:='';
s:=edit1.Text;
if Length(edit1.Text)>0 then
begin
for i:=1 to Length(edit1.Text) do
begin
if i mod 2 = 1 then
edit2.Text:=edit2.Text+UpperCase(s[i]) else
edit2.Text:=edit2.Text+LowerCase(s[i]);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s:String; //îáùàÿ ñòðîêà ââîäà
v:Integer;
f:array of String; //ìàññèâ ñòðîê (öèôð è çíàêîâ)
op:Char;
begin
memo1.Clear;
s:=edit3.Text;
edit3.SelStart:=0;
for v:=1 to Length(edit3.Text) do
begin
case s[v] of
'+':
begin
edit3.SelLength:=v-1;
memo1.Lines.Add(edit3.SelText);
memo1.Lines.Add('ïëþñ');
edit3.SelStart:=v;
end;
'-':
begin
end;
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
StrToFloat('2');
ShowMessage(FloatToStr(2+3));
end;
procedure TForm1.Button4Click(Sender: TObject);
var
v:Integer; //äëèíà ñòðîêè ìàòåìàòè÷åñêîé ôîðìóëû
s:String; //äîáàâëåíèå êàæäîãî ñèìâîëà íà íîâóþ ñòðîêó
d:String; //ïðîìåæóòî÷íîå çíà÷åíèå ÷èñåë è çíàêîâ
e:Real; //ïðîìåæóòî÷íûé è îêîí÷àòåëüíûé ðåçóëüòàò ìàòåìàòè÷åñêèõ äåéñòâèé
begin
memo1.Lines.Clear;
memo2.Lines.Clear;
s:=edit3.Text;
s:=s+'+';
e:=0;
for v:=1 to Length(s) do
begin
if s[v]'+' then
begin
memo1.Lines.Add(s[v]);
d:=d+s[v];
end else
if s[v]='+' then
begin
memo2.Lines.Add(d);
memo1.Lines.Add('+');
e:=e+StrToFloat(d);
d:='';
end else
if s[v]='-' then
begin
memo2.Lines.Add(d);
memo1.Lines.Add('-');
e:=e-StrToFloat(d);
d:='';
end else
if s[v]='*' then
begin
memo2.Lines.Add(d);
memo1.Lines.Add('*');
e:=e*StrToFloat(d);
d:='';
end else
if s[v]='/' then
begin
memo2.Lines.Add(d);
memo1.Lines.Add('/');
e:=e/StrToFloat(d);
d:='';
end;
end;
edit4.Text:=FloatToStr(e);
end;
end.
Volf_555 (2005-09-29 20:21:00) [1]В смысле куда?! И скажи насчёт паскаль-скрипта - что это такое и что он даёт?
lookin (2005-09-25 05:35:00) [2][28] TStas © (25.09.05 02:24)
а куда этот паскаль скрипт пихать то??
Джо (2005-09-25 03:34:00) [3][29] Volf_555 (25.09.05 03:17)
> P.S.: Смотрел ссылку ( http://www.delphikingdom.com/asp/viewitem.asp?catalogid=10),
> но там слишком мудрённо написано.
Это может показаться сложным, по той простой причине - что это и естьсложно (почти цитата).
Разбирайся, взялся за гуж...
jack128 (2005-09-25 03:33:00) [4]между прочим к статье есть примеры..
Volf_555 (2005-09-25 03:17:00) [5]Народ! Спасибо всем за ответы, но окончательный ответ на свой вопрос не нашёл, хотя подчеркнул нечто новое.
Кто может дать пример обработки знаков минуса, умножения и деления?
Или же указать мне на ошибку в коде?
P.S.: Смотрел ссылку ( http://www.delphikingdom.com/asp/viewitem.asp?catalogid=10), но там слишком мудрённо написано.
TStas (2005-09-25 02:24:00) [6]Если уж так нужен интерпритатор, есть же, слава Богу, паскаль скрипт. Не все же самому писать
lookin (2005-09-25 00:02:00) [7][26] Джо © (24.09.05 23:59)
>>А без теории, имхо, за это дело даже браться не стоит - себе дороже.
Это верно
Джо (2005-09-24 23:59:00) [8]
> [25] lookin © (24.09.05 23:54)
> На словах и я могу....
Ну, не писать же мне тут готовый интерпретатор "для примера". Кому нужно, тот пусть и пишет, мне, слава Аллаху, в нем нужды нет (чур, меня) :)
А без теории, имхо, за это дело даже браться не стоит - себе дороже.
lookin (2005-09-24 23:54:00) [9][24] Джо © (24.09.05 23:50)
На словах и я могу....
Джо (2005-09-24 23:50:00) [10]
> [23] lookin © (24.09.05 23:25)
> И каким же образом будет построен ТВОЙ алгоритм?
1. Опишу формальную грамматику
2. Напишу лексический анализатор, который будет разбивать поток на лексемы
3. Передам поток лексем в синтаксический анализатор, который проверит поток на соответствие п.1.
Дальнейнее завист от того, что, собственно, необходимо сделать.
lookin (2005-09-24 23:25:00) [11][21] Джо © (24.09.05 23:12)
>>в смысле синтаксического разбора ничего особенно сложного в твоем примере не вижу ;)
И каким же образом будет построен ТВОЙ алгоритм? Если не сложно...
jack128 (2005-09-24 23:15:00) [12]lookin © (24.09.05 22:58) [20]
atruhin © (24.09.05 17:16) [13]
лучше "Книгу Дракона" почитать :)
Джо (2005-09-24 23:12:00) [13][20] lookin © (24.09.05 22:58)
> обработал строкитипа
Я неверно понял твое замечание в [16], приношу извинения и снимаю претензии :) Впрочем, замечу, что в смысле синтаксического разбораничего особенно сложного в твоем примере не вижу ;)
А по поводу статьи - там же просто даются основы, она и не претендуетна большее. Дается к тому же ссылка на 2 книги, более подробно раскрывающие тему. Со своей стороны, могу порекоммендовать следующие источники, с различной степенью сложности, в случайном порядке:
1. Д. Креншоу. Пишем компилятор. (примеры на Паскале, изложение очень неспешное и поэтапное).
2. В.А Серебряков, М.П. Галочкин. Основы конструирования компиляторов.
3. Julia Bucknell. The Tomes of Delphi Algotithms and Data Structures (главы о синтаксическом разборе и смежные)
4. А. Ахо, Р. Сети, Д. Ульман. Компиляторы. Принципы, технологии и инструменты. Ну, эта в комментариях не нуждается, aka "Книга Дракона" :)
lookin (2005-09-24 22:58:00) [14][19] Джо © (24.09.05 22:55)
Лучше просто скажи, как бы ты построил обработал строки типа
Element[i].Value[i][TheFunc(a,b,c)+1]+SomeArray[TheFuncB(z)][54+52]
Джо (2005-09-24 22:55:00) [15]
> [18] lookin © (24.09.05 22:20)
> [17] Джо © (24.09.05 22:19)
>
> Например?
Для того, чтобы освоить "обработку элементов массивов", достаточно прочитать соответствующие разделы из Language Reference. Я не прав? Или ты о чем-то "о другом, о своем"?
lookin (2005-09-24 22:20:00) [16][17] Джо © (24.09.05 22:19)
Например?
Джо (2005-09-24 22:19:00) [17]
> Статья хорошая, но она не дает ничего касательно обработки
> символьного представления массивов и элементов массивов...
Для этого достаточно освоить Language Reference.
lookin (2005-09-24 22:12:00) [18][10] Юрий Зотов © (24.09.05 08:44)
>> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=10
Статья хорошая, но она не дает ничего касательно обработки символьного представления массивов и элементов массивов...
Джо (2005-09-24 21:42:00) [19]
> [9] GrayFace © (24.09.05 06:18)
Да, она, кажется. Она еще была такой длинной-длиной, что вроде даже на 2 ветки разделилась. Вышли, плиз на kaminski#ihome.net.ua (# = @).
TStas (2005-09-24 20:30:00) [20]{Офффтопик}
>Юрий Зотов
Сколько же я искал эту статью:)