Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вычисление из файла


Автор: stan90 2.2.2012, 14:52
Здравствуйте,задача заключается в следующем.
Нужно из файла прочитать выражение,например 2+2*3, вычислить его и записать в файл выражение с ответом (2+2*3 = 8).
Трудность заключается в чтении из файла.
Получилось сделать пока только так
Код

float number(){
    int res = 0;
    for(;;){
        char c = cin.get();
        if(c>='0' && c<='9')
        {
            res = res*10 + c - '0';
        }else{
            cin.putback(c);
            return res;
        }
    }
}

float mult_div(){
    float x = number();
    for(;;){
        char c = cin.get();
        switch(c){
        case '*': 
            x *= number();
            break;
        case '/':
            x /= number();
            break;
        default:
            cin.putback(c);
            return x;
        }
    }
}
void main(){
    cout<<"Vvedite viragenie : "<<endl;
    cout<<mult_div()<<endl;
}



пробовал сделать так ifstream in("test.txt");char c = in.get();
но тогда не распознаются операторы * и /.

Автор: feodorv 2.2.2012, 15:48
Почему float? Из-за деления?

Цитата(stan90 @  2.2.2012,  14:52 Найти цитируемый пост)
2+2*3 = 8

Вы уверены, что предложенная схема воспроизведёт этот результат? Учитываются ли приоритет операций * и / над операциями + и -?

Цитата(stan90 @  2.2.2012,  14:52 Найти цитируемый пост)
но тогда не распознаются операторы * и /

Отладчиком посмотреть?

Автор: math64 2.2.2012, 19:14
Не нужно возиться с файлом - прочитайте в строку и разбирайте там.
Нужны функции:
void skipws(const string& s, int& index) - пропуск пробелов
float number(const string& s, int& index) - перед рабором index указывает на начало числа, после разбора - на конец
float term(const string& s, int& index) - если перед разбором index указывает на '(' вычисляется sum() до соответствующей ')',
если index указывает на букву, вызывается func() если нужно
иначе считывается число number()
float prod(const string& s, int& index) - выполняются умножение и деление, для получения аргументов вызывается term()
float sum(const string& s, int& index) - выполняются сложение и вычитание, для получения аргументов вызывается prod()
float func(const string& s, int& index) - вычисления функций (sqrt(), sin(), cos(), log() и т.д. если они нужны
Начинается вычисление с суммы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)