Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2009, 16:52   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Он только сказал сделать то что я написал в первом сообщении
Мда... Просто не знаю что и сказать...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.06.2009, 16:59   #12
xMoNaHx
Пользователь
 
Регистрация: 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.
xMoNaHx вне форума Ответить с цитированием
Старый 23.06.2009, 17:11   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для чего процедуры CreateFunction?
Что они делают и что возвращают?
И покажи как ты вызываешь эти твои методы класса raz...

P.S. Уже на глаз вижу что слишком сложно ты все затеял.... Есть попроще способы.
I'm learning to live...

Последний раз редактировалось Stilet; 23.06.2009 в 17:17.
Stilet вне форума Ответить с цитированием
Старый 23.06.2009, 17:19   #14
xMoNaHx
Пользователь
 
Регистрация: 23.06.2009
Сообщений: 12
По умолчанию

это не я писал)
вся прога практически написана преподом.
А что я сложно сделал?
я просто объявил класс с этими тремя методами.
и всё
xMoNaHx вне форума Ответить с цитированием
Старый 23.06.2009, 17:19   #15
xMoNaHx
Пользователь
 
Регистрация: 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.
xMoNaHx вне форума Ответить с цитированием
Старый 23.06.2009, 17:36   #16
xMoNaHx
Пользователь
 
Регистрация: 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.
xMoNaHx вне форума Ответить с цитированием
Старый 23.06.2009, 18:17   #17
xMoNaHx
Пользователь
 
Регистрация: 23.06.2009
Сообщений: 12
По умолчанию

хотя нет
ошибка возникает когда используются скобки
xMoNaHx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
численные методы 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