|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.06.2009, 16:52 | #11 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
23.06.2009, 16:59 | #12 |
Пользователь
Регистрация: 23.06.2009
Сообщений: 12
|
я вот что написал,но ответ выводит неправильный(
я не знаюю надо ли указывать родительский класс unit razb; interface uses el_func; Type raz=object (TFunction) lp, fname : string; i, j : integer; r : real; function BuildTree(var e : string) : PElementaryFunction; function BuildElement(var e : string) : PElementaryFunction; procedure OutputTree(f : PElementaryFunction); end; implementation function raz.BuildElement; begin writeLn('Enter to BuildElement(''' + e + ''')!'); i := 1; BuildElement := nil; while ((i <= length(e)) and (e[i] in ['0'..'9', '.'])) do inc(i); if (i > 1) then begin lp := copy(e, 1, i - 1); delete(e, 1, i - 1); val(lp, r, i); writeLn('Number: ', r:0:2); if (i <> 0) then writeLn('error: Invalid number format') else BuildElement := CreateFConst(r); exit; end; fname := ''; while ((i <= length(e)) and (e[i] in ['a'..'z', 'A'..'Z'])) do inc(i); if (i > 1) then begin fname := copy(e, 1, i - 1); delete(e, 1, i - 1); if (fname = 'x') then begin writeLn('Variable: ' + fname); BuildElement := CreateFEquivalence; exit; end; i := 1; writeLn('Function: ' + fname); end; if (e[i] <> '(') then writeLn('error: Invalid expression format') else begin j := 1; while ((i <= length(e)) and (j > 0)) do begin inc(i); if (e[i] = ')') then dec(j) else if (e[i] = '(') then inc(j); end; if (j > 0) then begin writeLn('error: ''('' without '')'''); exit; end; lp := copy(e, 2, i - 2); delete(e, 1, i); writeLn('Expression: ' + lp); end; if (fname = '') then BuildElement := BuildTree(lp) else if (fname = 'sin') then BuildElement := CreateFunction(CreateFSin, BuildTree(lp), oF1ofF2) else if (fname = 'cos') then BuildElement := CreateFunction(CreateFCos, BuildTree(lp), oF1ofF2) else if (fname = 'tg') then BuildElement := CreateFunction(CreateFTg, BuildTree(lp), oF1ofF2) else if (fname = 'ctg') then BuildElement := CreateFunction(CreateFCtg, BuildTree(lp), oF1ofF2) else if (fname = 'arcsin') then BuildElement := CreateFunction(CreateFArcSin, BuildTree(lp), oF1ofF2) else if (fname = 'arccos') then BuildElement := CreateFunction(CreateFArcCos, BuildTree(lp), oF1ofF2) else if (fname = 'arctg') then BuildElement := CreateFunction(CreateFArcTg, BuildTree(lp), oF1ofF2) else if (fname = 'arcctg') then BuildElement := CreateFunction(CreateFArcCtg, BuildTree(lp), oF1ofF2) end; function raz.BuildTree; var lf : PElementaryFunction; begin writeLn('Enter to BuildTree(''' + e + ''')!'); BuildTree := nil; lf := BuildElement(e); while (length(e) > 0) do if (e[1] = '*') then begin writeLn('*'); delete(e, 1, 1); lf := CreateFunction(lf, BuildElement(e), oMul); writeLn('buildtree: e = ' + e); end else if (e[1] = '/') then begin writeLn('/'); delete(e, 1, 1); lf := CreateFunction(lf, BuildElement(e), oDiv); writeLn('buildtree: e = ' + e); end else if (e[1] = '+') then begin writeLn('+'); delete(e, 1, 1); lf := CreateFunction(lf, BuildTree(e), oAdd); writeLn('buildtree: e = ' + e); end else if (e[1] = '-') then begin writeLn('-'); delete(e, 1, 1); lf := CreateFunction(lf, BuildTree(e), oSub); writeLn('buildtree: e = ' + e); end; BuildTree := lf; end; procedure raz.OutputTree; begin writeLn('Tree:'); f^.OutputFLine(0); end; end. |
23.06.2009, 17:11 | #13 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Для чего процедуры CreateFunction?
Что они делают и что возвращают? И покажи как ты вызываешь эти твои методы класса raz... P.S. Уже на глаз вижу что слишком сложно ты все затеял.... Есть попроще способы.
I'm learning to live...
Последний раз редактировалось Stilet; 23.06.2009 в 17:17. |
23.06.2009, 17:19 | #14 |
Пользователь
Регистрация: 23.06.2009
Сообщений: 12
|
это не я писал)
вся прога практически написана преподом. А что я сложно сделал? я просто объявил класс с этими тремя методами. и всё |
23.06.2009, 17:19 | #15 |
Пользователь
Регистрация: 23.06.2009
Сообщений: 12
|
program parse_expr;
uses razb,crt,el_func; var s, t : string; tree : PElementaryFunction; w:raz; begin clrscr; write('Enter expression: '); readLn(s);{} t := s; tree := w.BuildTree(t); writeLn('s = ' + s); if (tree <> nil) then w.OutputTree(tree) else writeLn('Tree is null'); readln; end. |
23.06.2009, 17:36 | #16 |
Пользователь
Регистрация: 23.06.2009
Сообщений: 12
|
у меня ошибка в строке VAL
val(lp, r, i); writeLn('Number: ', r:0:2); if (i <> 0) then writeLn('error: Invalid number format') у меня i не =0 оказывается и выдается эта ошибка. Почему это может быть? Последний раз редактировалось xMoNaHx; 23.06.2009 в 20:13. |
23.06.2009, 18:17 | #17 |
Пользователь
Регистрация: 23.06.2009
Сообщений: 12
|
хотя нет
ошибка возникает когда используются скобки |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
численные методы | Desha | Помощь студентам | 2 | 24.05.2009 12:46 |
Численные методы | improvement | Общие вопросы .NET | 4 | 08.05.2009 01:58 |
методы в ООП | albatros | Общие вопросы Delphi | 3 | 04.02.2009 22:59 |
Методы... | Arkuz | Свободное общение | 6 | 11.10.2008 16:53 |
Методы шифрования | D@rk M@k | Свободное общение | 3 | 27.02.2008 13:56 |