|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.12.2008, 18:49 | #1 |
Пользователь
Регистрация: 15.06.2008
Сообщений: 10
|
Delphi,преобразование строки в выражение
Написать программу, позволяющую вычислять значение выражения, содержащего
указанные ниже операции и функции. Если выражение записано неверно, то сообщить об этом. Операции:tg, + ,() в общем,я что то набросала,но работает только на сложение и то с однозначными числами,помогите плиз доработать тя бы некоторые моменты,напрмер что делать со скобками procedure TForm1.Button2Click(Sender: TObject); var s,s1:string; k,i,u,r,d,l,t,q:integer; begin s:=Edit1.Text; k:=0; l:=0; s1:=''; while pos('tg',s)<>0 do Begin insert('#',s, pos('tg',s)); Delete(s,pos('tg',s),2); End; for i:=1 to length(s) do begin if s[i]='(' then k:=k+1; if s[i]=')' then l:=l+1; end; if k<>l then showmessage('проверь скобки') else for i:=1 to length(s) do if s[i]='#' //and s[i+1]= '(' then begin q:=i+1; for q:=1 to length(s) do while s[q]<>')' do begin u:=u+1; s1:=s1+s[q]; r:=strtoint(s1); t:=round(sin(r)/cos(r)); insert(inttostr(t),s,pos('#',s)); delete(s,pos('#',s),u+2); end;end; for i:=1 to length(s) do if s[i]='+' then begin d:=strtoint(s[i-1])+strtoint(s[i+1]); label3.Caption:=inttostr(d); end; |
14.12.2008, 19:14 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Почитайте про обратную польскую нотацию. Тут на форуме этот вопрос так же не раз всплывал
|
14.12.2008, 19:25 | #3 |
Пользователь
Регистрация: 15.06.2008
Сообщений: 10
|
подскажите плиз,где именно смотреть
|
14.12.2008, 19:30 | #4 |
Пользователь
Регистрация: 15.06.2008
Сообщений: 10
|
не,я конечно почитала про польскую нотацию,но видимо я совсем тупая,т к ни фига не врубилась(
|
14.12.2008, 20:01 | #5 |
Пользователь
Регистрация: 15.06.2008
Сообщений: 10
|
обьясните,плиз,реализацию на сложении в скобках,дальше, думаю,сама разберусь
|
14.12.2008, 23:14 | #6 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
http://ru.wikipedia.org/wiki/Обратная_польская_запись
Алгоритм коротко и понятно вроде описан. В итоге должна получиться строка, в которой операции стоят после операндов. скобок уже никаких не будет. небольшая проблемка может возникнуть только при унарных минусах, но и тут всё решаемо. |
15.12.2008, 12:00 | #7 |
Пользователь
Регистрация: 15.06.2008
Сообщений: 10
|
а бех стека это никак не сделать?ну не понимаю я как это делать(((
|
15.12.2008, 12:05 | #8 |
Пользователь
Регистрация: 15.06.2008
Сообщений: 10
|
точнее я понимаю что надо сделать,но не понимаю как это реализовать в Делфи
|
15.12.2008, 14:01 | #9 |
Новичок
Джуниор
Регистрация: 26.11.2008
Сообщений: 1
|
Если хотите сделать грамотно, необходим минимум знаний по теории трансляторов(в яндексе поиск "транслятор"). Вещь интересная. А так советовать... пальцем в небо. Удачи!
Чудес не бывает, но иногда случается дерьмо. Bash
|
15.12.2008, 16:25 | #10 |
Форумчанин
Регистрация: 06.11.2008
Сообщений: 100
|
Может быть поможет. Лекция по польской записи.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Текстовые файлы, преобразование строки(замена слов)) | lusuj | Помощь студентам | 1 | 01.12.2008 16:58 |
Арифметика, выражение вводится строкой [Delphi] | iFool | Помощь студентам | 3 | 21.10.2008 18:51 |
Преобразование строки(ASM) | ManU | Помощь студентам | 4 | 11.06.2008 17:20 |
Преобразование строки во время | kayman | Общие вопросы Delphi | 7 | 02.10.2007 15:41 |