Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление из файла 
:(
    Опции темы
stan90
Дата 2.2.2012, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.11.2009

Репутация: нет
Всего: нет



Здравствуйте,задача заключается в следующем.
Нужно из файла прочитать выражение,например 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();
но тогда не распознаются операторы * и /.
PM MAIL   Вверх
feodorv
Дата 2.2.2012, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Почему float? Из-за деления?

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

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

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

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


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 2.2.2012, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Не нужно возиться с файлом - прочитайте в строку и разбирайте там.
Нужны функции:
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() и т.д. если они нужны
Начинается вычисление с суммы.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.