Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Ввод формул
Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


обычно делается так: считывается символ, по нему решается, какой тип выражения идёт дальше. Если может быть несколько вариантов, то последующие символы считываются и запоминаются до тех пор, пока не будет точно ясно, что вариант единственный. В данном случае:
1. скобки "(" считаем, что могут встретиться варианты 1,2,3,4
2. закрывающаяся скобка ")" выходим из скобки
3. число "+", "-" заталкиваем считанный символ обратно в поток и читаем поток как число, далее возможны только варианты 2,5
4. число "0"-"9" заталкиваем считанный символ обратно в поток и читаем поток как число, далее возможны только варианты 2,5
5. операции "+", "-", "*", "/ " запоминаем операцию, после этого читаем число, далее вариант 4

в начале выражения возможны варианты 1,3,4

Чтобы правильно вычислить выражение, его лучше преобразовать в так называемую польскую запись. Если вычислять выражение во время разбора с учётом приоритетов операций во время разбора, польская запись получится сама собой (даже не придётся над ней думать). При этом типичный прототип функции писать в виде double operation(istream&), например
Код: Выделить весь код
double op_plus(istream&);
double op_minus(istream&);
double op_mul(istream&);
double op_div(istream&);
double op_any_value(istream&);

// тогда можно будет записать например
double op_mul(istream& stm)
{
    return op_any_value(stm) * op_any_value(stm);
}
Приоритеты операций: "(", "*", "/", "+", "-"

Пробуйте, пишите, что получилось
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:27, 03-11-2009 | #3

Название темы: Ввод формул