Форум: "Прочее";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизКалькулятор в строке Найти похожие ветки
← →
Dezigo © (2007-12-19 01:39) [0]Мне задали написать калькулятор в строке
( Вводится строка, состоящая из целых чисел и знаков математических операций сложение, вычитание, умножение и деление. Вычислить значение выражения.)
Вот искал в интернете тоже работки.. помогите.. пожалуйста справиться с этим заданием.
← →
Германн © (2007-12-19 01:43) [1]
> Dezigo © (19.12.07 01:39)
Ищи в гугле "обратная польская запись".
← →
Григорьев Антон © (2007-12-19 09:09) [2]
> Германн © (19.12.07 01:43) [1]
> Ищи в гугле "обратная польская запись".
Объясните мне, зачем для вычисления выражения нужна обратная польская (постфиксная) запись? Сначала вы методом рекурсивного спуска делаете перевод инфиксной записи в постфиксную, а потом реализуете стековую машину для вычисления выражения, заданного в виде постфиксной записи. Это неоправданное усложнение, потому что методом рекурсивного спуска можно сразу вычислять инфиксное выражение.
Dezigo:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=10 - там есть готовый пример того, что вам нужно (за исключением того, что числа не целые, а вещественные), но я надеюсь, что вы всё-таки не скопируете его тупо, а разберётесь с теорией, которая там тоже есть.
← →
Dimka Maslov © (2007-12-19 11:17) [3]Если в выражении отсутствуют скобки, тогда простейший алгоритм выглядит так.
1. Ищем в строке первый символ умножения или деления записиваем его индекс в переменную Pos2
2. От позиции Pos2 влево ищем любой знак операции, записываем индекс в позицию Pos1
3. От позиции Pos2 вправо ищем любой знак операции, записываем индекс в позицию Pos3
4. Выделяем подстроку Op1 (копируем все символы между Pos1 и Роs2
5. Выделяем подстроку Op2 (копируем все символы между Pos2 и Роs3
6. Переводим Op1 и Op2 в числовое представление вычиляем значение операции.
7. Убираем из начального выражения все символы между Pos1 и Pos3, вставляем на его место результат.
8. Повторяем пп1..7 до тех пор, пока строка содержит символы умножения и деления
9. Делаем тоже самое для сложения и вычитания.
Конечно, алгоритм медленный и делать надо бы по другому, но он прост и позволяет ещё и выводить промежуточные результаты (для красоты)
← →
oldman © (2007-12-19 11:19) [4]
> Григорьев Антон © (19.12.07 09:09) [2]
> Объясните мне, зачем для вычисления выражения нужна обратная
> польская (постфиксная) запись?
Она обычно присутствует во всех учебниках по работе со стеком именно для преобразования строки арифметических операций.
Вот в память и въелось :)))
← →
ANB © (2007-12-19 17:38) [5]Пишется за 5 минут, если :
1) есть СКЛ сервер (оракл, например)
2) написать на клиппере или фоксе.
В обоих случаях в среде имеется встроенный исполнитель выражений.
← →
Jeer © (2007-12-19 17:43) [6]Ну да, осталось написать фокс, клиппер или сиквэл и запускать их из Delphi
← →
Kerk © (2007-12-19 17:45) [7]http://progler.ru/search?cx=000478898831061129014%3A_kgkiuuegem&q=%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F+%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F+%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C&cof=FORID%3A11#860
← →
Elec3C © (2007-12-19 21:15) [8]
> Мне задали написать калькулятор в строке
...
s : String;
...
s := "Калькулятор";)))))
← →
Loginov Dmitry © (2007-12-19 22:02) [9]
uses
MSScriptControl_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
SC: TScriptControl;
begin
SC := TScriptControl.Create(nil);
try
SC.Language:="VBScript";
ShowMessage(SC.Eval(Edit1.Text));
finally
SC.Free;
end;
end;
← →
Kostafey © (2007-12-19 23:24) [10]> [9] Loginov Dmitry © (19.12.07 22:02)
> uses
> MSScriptControl_TLB;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> SC: TScriptControl;
> begin
> SC := TScriptControl.Create(nil);
> try
> SC.Language:="VBScript";
> ShowMessage(SC.Eval(Edit1.Text));
> finally
> SC.Free;
> end;
> end;
Здорово.
Кстати, можно еще через Excel.
Првда препод. вряд ли думал, что его задачка будет решена таким образом :)
← →
Petr V. Abramov © (2007-12-19 23:54) [11]> Првда препод. вряд ли думал, что его задачка будет решена таким образом :)
в оригинале задачка начинается с
"прийти на лабу, где препод подскажет...."
:)
← →
grisme (2007-12-20 08:56) [12]здесь на сайте лежала статейка(см.раздел "Статьи") про парсинг матвыражений(даже с учетом производных, кажется) - если конечно не удалили.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c