Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
milaTanechka
8 / 1 / 0
Регистрация: 29.05.2013
Сообщений: 11
#1

строковый калькулятор - C++

29.05.2013, 08:58. Просмотров 822. Ответов 0
Метки нет (Все метки)

Доброго времени суток! Возникла такая проблема - есть исходник строкового калькулятора на Си, замечательно работает, во всем там разобралась, НО он работает с потоками ввода-вывода консоли, а мне нужно, чтобы все это дело читалось из буфера (нужно вычислять значение одного и того же выражения при разных х). Все дело в функции next(); по сути нужно заменить функции чтения из потока/записи символов в поток, но на что их можно заменить, пока не нашла...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <assert.h>
 
int tok;
double tokval;
 
int next() {
    for (;;) {
        int c = getchar();
        if (c == EOF || strchr("+-*/^()\n", c) != NULL) return tok = c;
        if (isspace(c)) continue;
        if (isdigit(c) || c == '.') {
            ungetc(c, stdin);
            scanf(" %lf", &tokval);
            return tok = 'n';
        }
        fprintf(stderr, "Bad character: %c\n", c); abort();
    }
}
 
void skip(int t) { assert(tok == t); next(); }
 
double expr();
 
// numpar ::= number | '(' expr ')'
double numpar() {
    if (tok == 'n') { double x = tokval; skip('n'); return x; }
    skip('('); double x = expr(); skip(')'); return x;
}
 
// factor ::= numpar | numpar '^' factor
double factor() {
    double x = numpar();
    if (tok == '^') { skip('^'); x = pow(x, factor()); }
    return x;
}
 
// term ::= factor | term '*' factor | term '/' factor
double term() {
    double x = factor();
    for (;;) {
        if (tok == '*') { skip('*'); x *= factor(); }
        else if (tok == '/') { skip('/'); x /= factor(); }
        else return x;
    }
}
 
// expr ::= term | expr '+' term | expr '-' term
double expr() {
    double x = term();
    for (;;) {
        if (tok == '+') { skip('+'); x += term(); }
        else if (tok == '-') { skip('-'); x -= term(); }
        else return x;
    }
}
 
int main() {
    next();
    while (tok != EOF) {
        if (tok == '\n') { skip('\n'); continue; }
        printf("%.9g\n", expr());
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 08:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос строковый калькулятор (C++):

Строковый калькулятор - C++
добрый вечер. мне нужно написать программу, выполняющую функцию строкового калькулятора с операциями+-*/. Нашла исходники, но там помимо...

Написать строковый калькулятор - C++
здравствуйте. просьба, хотя бы идейно, а лучше с примером подсказать, как научить программу решать пример. суть: 5 + 5 - 28 * 3. нажимаю...

Строковый калькулятор в два стека - C++
У кого есть какие примеры реализации на плюсах, желательно с комментариями. Ибо перечитав море литературы, я так и не смог понять, как...

Калькулятор строковый с защитой от дурака - C++
Делаю курсовую - нужно сделать строковый калькулятор с защитой от дурака. Код не мой, я добавил только то, что теперь выдает ошибку при...

Калькулятор выражений(строковый) через бинарное дерево - C++
Создал калькулятор выражений, но он считает только целые числа. Не могу доработать чтобы работал на вещественных. Так же во время тестов...

Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке). - C++
Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, а второй в текущем каталоге...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 08:58
Привет! Вот еще темы с ответами:

Строковый массив (объявить пустой глобальный строковый массив из 16 элементов) - C++
Подскажите, как объявить пустой глобальный строковый массив из 16 элементов? в качестве элементов будут указаны пути к графическим...

Простой калькулятор и калькулятор с парсингом - C++
Ребят я совсем не давно только начал изучать сишку, решил написать простенький калькулятор который работает с 2 числами. Возник вопрос, как...

Строковый литерал - C++
Вопрос к профи: Верно ли что, когда мы инициализирум строку вот так: const char *str = &quot;Строка&quot;, то компилятор понимает ее так: 1) char...

Строковый анализатор - C++
Подскажите почему код выдает всякий мусор, подает звуковые сигналы Должен работать так: Если введешь так: &quot;11/23/34&quot; или &quot;11.23.34&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru