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

Высчитать значение выражения с приоритетами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Двумерный массив через вектор http://www.cyberforum.ru/cpp-beginners/thread799073.html
Задача состоит в том, что надо создать массив строк через вектор, т.е. я хочу иметь возмость изменять как количество строк, так и их длину.
C++ Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами Решить задачи через Указатели... 3. Дан массив целых чисел. Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами (т.е. те элементы массива, которые стоят на четных местах, поменяйте с элементами, которые стоят на нечетных местах). Кто поможет огромное СПАСИБО. http://www.cyberforum.ru/cpp-beginners/thread799061.html
C++ Выбрать из строки все чётные цифры (нуль отнести к ним), если они есть в строке, и поместить их в первый динамический массив, и все нечётные цифры, ес
Решить задачи через Указатели... 2. .Пользователь вводит строку с клавиатуры (максимальная длина строки — 80 символов). Программа должна выбрать из строки все чётные цифры (нуль отнести к ним), если они есть в строке, и поместить их в первый динамический массив, и все нечётные цифры, если они есть — поместить их во второй динамический массив. Вывести оба динамических массива (если они...
определить, является ли число a делителем числа b? C++
определить, является ли число a делителем числа b?
C++ Использование строк http://www.cyberforum.ru/cpp-beginners/thread799043.html
Помогите с алгоритмом программы: вводим текст происходит проверка на наличие цифр прописью, заменяет их и выводит исправленый текст...например ввод: "Вышли тридцать три богатыря.." вывод: "Вышли 33 богатыря......код не нужен просто помогите с алгоритмом с использованием строк
C++ нахождение целого числа по информации о его цифрах! в трехзначном числе зачеркнули его последнюю цифру когда в оставшимся двузначном числе переставили цифры а затем приписали к ним слева последнюю цифру числа x, то получилось число n. По заданному n найти число x( значение n вводится с клавиатуры 1<=n<=999 и при это число единиц в n не равно нулю) подробнее

Показать сообщение отдельно
NEbO
583 / 451 / 49
Регистрация: 22.01.2009
Сообщений: 1,173
Записей в блоге: 1
Завершенные тесты: 1
03.03.2013, 03:52     Высчитать значение выражения с приоритетами
Цитата Сообщение от Levondk Посмотреть сообщение
Дана строка символов, представляющих собой арифметическое
выражение, содержащее только знаки +,-,*,/,(,) и строчные буквы
английского алфавита. Требуется подсчитать результат выражения.
дальше не читал, извините. смотрите в сторону lex/bison. и вообще, их принципов. (если такое название как "книга дракона" вам знакомо, замечательно. если нет, не читайте дальше).
Код
/* Infix notation calculator--calc */

%token NUM
%left '-' '+'
%left '*' '/'
%left NEG
%right '^' /* возведение в степень */

%%

input:    /* пустое выражение */
        | input line
;

line:     '\n'
        | exp '\n'  { echo $1, "\n"; }
;

exp:      NUM                { $$ = $1;         }
        | exp '+' exp        { $$ = $1 + $3;    }
        | exp '-' exp        { $$ = $1 - $3;    }
        | exp '*' exp        { $$ = $1 * $3;    }
        | exp '/' exp        { $$ = $1 / $3;    }
        | '-' exp  %prec NEG { $$ = -$2;        }
        | exp '^' exp        { $$ = pow ($1, $3); }
        | '(' exp ')'        { $$ = $2;         }
;
%%
это простой подсчет выражения (это пример из бизона) для учета скобок, чисел, плюсов, минусов, умножений, делений и минусов перед числами (разумеется, последнее можно реализовать в лексере). Нетрудно догадаться, что парсер написан для пхп, заменив echo на printf можно сделать для сей и плюсов.
Меня бы не смутило ваше сообщение, сам писал мини-компилятор паскаля по курсовой работе. Однако переменные тут вообще ни к чему. прочитал собщение. я дурак, вообще не то написал, но для общего сведения не стану удалять все что было выше.

вообщем, в вашем случае, фактически уже почти составлено дерево синтаксического разбора, как я понимаю (без приоритетов, тупо списком). ну так читайте каждый токен и ищите тот, что с минимальным приоритетом (priority('+') < priority(*), к примеру). это делается через цикл по всем токенам (for (int i = 0 n = tokens.count(); i < n; i++) потом вызывайте рекурсию слева и справа, и там все то же самое будет.
 
Текущее время: 03:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru