Расчет выражения
Может, кто-нибудь подскажет как это сделать, или хотя бы кинет ссылку почитать...
Заранее благодарен
Народ... имеется небольшая проблема: надо посчитать пример, записанный в текстовом поле.
int znak[index],y1,y2,result;
for (int x=1;x<=Edit1->Text.Lenght();x++)
{
if (Edit1->Text.SubString(x,1)=="1")
y1=1;
if (Edit1->Text.SubString(x,1)=="+")
znak[]=...
if (Edit1->Text.SubString(x,1)=="1")
y2=1;
if (Edit1->Text.SubString(x,1)=="=")
znak[]=...
}
for (znak)...
switch(znak)...
result=y1+y2;
...
:)
int znak[index],y1,y2,result;
for (int x=1;x<=Edit1->Text.Lenght();x++)
{
if (Edit1->Text.SubString(x,1)=="1")
y1=1;
if (Edit1->Text.SubString(x,1)=="+")
znak[]=...
if (Edit1->Text.SubString(x,1)=="1")
y2=1;
if (Edit1->Text.SubString(x,1)=="=")
znak[]=...
}
for (znak)...
switch(znak)...
result=y1+y2;
...
:)
Ага... программисты...
А если надо вывести все четные числа?
Наверное, это будет вяглядеть вот так:
void Even() {
printf(2);
printf(4);
printf(6);
printf(8);
.......
printf(256);
}
int znak[index],y1,y2,result;
for (int x=1;x<=Edit1->Text.Lenght();x++)
{
if (Edit1->Text.SubString(x,1)=="1")
y1=1;
if (Edit1->Text.SubString(x,1)=="+")
znak[]=...
if (Edit1->Text.SubString(x,1)=="1")
y2=1;
if (Edit1->Text.SubString(x,1)=="=")
znak[]=...
}
for (znak)...
switch(znak)...
result=y1+y2;
...
:)
Все это, конечно, хорошо, но если пользователь вводит что-то типа: "1.236*(5+3.96*43)+23.5", то нужно же ещё учесть порядок действий, разобраться со скобками и т.д. Вот в этом-то вся проблема...
Народ... имеется небольшая проблема: надо посчитать пример, записанный в текстовом поле. Т.е. пользователь вводит пример, нажимает кнопку и получает ответ... Но пример может быть сложным: содержать разные математические операции, скобки и т.д.
Может, кто-нибудь подскажет как это сделать, или хотя бы кинет ссылку почитать...
Заранее благодарен
Поищи польскую обратную запись, и всё сразу станет ясно...
например здесь
Поищи польскую обратную запись, и всё сразу станет ясно...
например здесь
Я уже смотрел до этого польскую запись и стек операции, но до меня не доходит, как перевести пример из нормальной записи в польскую (я имею ввиду программно)...
Я уже смотрел до этого польскую запись и стек операции, но до меня не доходит, как перевести пример из нормальной записи в польскую (я имею ввиду программно)...
У меня в свое время была такая проблема. Решилась она путем построения дерева. типа
знак1
/\
первое_число/\второе_число
текущим является узел "знак1" если следующий знак2 имеет приоритет выше текущего - на место знак1 ставим знак2, а знак1 спускаем чилдом к знак2
Такая конструкция позволяет легко учитывать и скобки, и унарные +/- и т.д.
И пересчитывать много раз(если, например, используются переменные, ее проще и быстрее т.к. не требуется повторный анализ)
У меня в свое время была такая проблема. Решилась она путем построения дерева. типа
знак1
/\
первое_число/\второе_число
текущим является узел "знак1" если следующий знак2 имеет приоритет выше текущего - на место знак1 ставим знак2, а знак1 спускаем чилдом к знак2
Такая конструкция позволяет легко учитывать и скобки, и унарные +/- и т.д.
И пересчитывать много раз(если, например, используются переменные, ее проще и быстрее т.к. не требуется повторный анализ)
Спасибо за ответ... все понял...