Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
3-1189681786
MZ
2007-09-13 15:09
2008.01.27
Замена символов в строке средствами SQL


15-1198055878
Kolan
2007-12-19 12:17
2008.01.27
Delphi не ищет в подпапках SearchPath.


2-1198865131
Антон Шестаков
2007-12-28 21:05
2008.01.27
Изменение пароля


15-1198146819
BOGa
2007-12-20 13:33
2008.01.27
Перспективы программиста в России


4-1182613657
MInd_f
2007-06-23 19:47
2008.01.27
ToUnicode. Как получить символ с учетом выброного языка...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский