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

Хочу символьный калькулятор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Coyote112358
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 22
17.07.2011, 22:11     Хочу символьный калькулятор #1
Собственно вот что я имею:
Библиотека Symbolic C++.
Интересно мне вот что ... Как бы введенную с клавиатуры строку типа string ( например «cos(x)+x») присвоить символьной переменной так, чтобы программа вычисляя числовое значение выражения в этой переменной возвращала бы значение введенной функции ?

вот такой пример... как бы «y=cos(x)» вводить с клавиатуры ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include "iostream"
#include "SymbolicC++.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    Symbolic x,y;
    for (x=0; (double)x<3.1415;)
    {
        y=cos(x);
        std::cout << std::endl << y;
        x+=0.01;
    }
    cin.get();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2011, 22:11     Хочу символьный калькулятор
Посмотрите здесь:

C++ Символьный массив
Символьный массив....(( C++
символьный массив C++
C++ Символьный массив
C++ символьный тип
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
17.07.2011, 22:31     Хочу символьный калькулятор #2
Coyote112358, синтаксический разбор строки надо делать. Хотя бы ограниченный и минимальный. У нас первокурсники вполне справляются в курсовых...
Coyote112358
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 22
17.07.2011, 22:38  [ТС]     Хочу символьный калькулятор #3
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Coyote112358, синтаксический разбор строки надо делать. Хотя бы ограниченный и минимальный. У нас первокурсники вполне справляются в курсовых...
Ох уж эти первокурсники с их преподами...
Предположите что есть разборщик строк...
Дальше что делать?
На выходе этого разборщика что у Вас?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
17.07.2011, 22:41     Хочу символьный калькулятор #4
Цитата Сообщение от Coyote112358 Посмотреть сообщение
На выходе этого разборщика что у Вас?
на выходе результат

Цитата Сообщение от Coyote112358 Посмотреть сообщение
вот такой пример... как бы «y=cos(x)» вводить с клавиатуры ?
так , а в чем собсно проблема, определи присваивание
(к примеру обрубить всё что после =, посчитать и присвоить)
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
17.07.2011, 23:02     Хочу символьный калькулятор #5
Цитата Сообщение от Coyote112358 Посмотреть сообщение
Ох уж эти первокурсники с их преподами...
Предположите что есть разборщик строк...
Дальше что делать?
На выходе этого разборщика что у Вас?
Польская запись (лексем) на выходе. Которая за один проход вычисляется
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.07.2011, 11:53     Хочу символьный калькулятор #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Паттерны "Интерпретатор" и "Компоновщик" в помощь. На каждую операцию/функцию пишется свой класс, все эти классы наследуются от базового абстрактного "Expression", в котором есть чисто виртуальная функция calculate. В каждом конкретном классе функция calculate реализуется по-своему. Выражение разбирается рекурсивным спуском, на основе которого строится дерево, узлами которого являются операции,а листьями - операнды. Вычисление заключается в обходе этого дерева и вызове для каждого узла функции calculate.

Добавлено через 1 минуту
Ааа, не учёл, что уже есть библиотека символьных вычислений... Тогда да, разбор строки надо делать. Но его я бы всё равно делал рекурсивным спуском.
Kastaneda
18.07.2011, 12:03
  #7

Не по теме:

Цитата Сообщение от Coyote112358
Хочу символьный калькулятор
А я собаку...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 12:09     Хочу символьный калькулятор
Еще ссылки по теме:

C++ символьный файл
C++ Хочу написать программу-калькулятор под ,допустим,игру
C++ Символьный тип

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.07.2011, 12:09     Хочу символьный калькулятор #8
Coyote112358, каким образом выражение хранится в переменной Symbolic? Т.е. именно в виде выражения? Если да, то можно применить обычный рекурсивный спуск, с той разницей, что обрабатывать не переменные типа double и по завершении разбора получать числовой результат, а обрабатывать объекты Symbolic, а на выходе получить переменную Symbolic, хранящую разобранное выражение.
Тогда, кстати, можно и ОПЗ применить. Переводим выражение из инфиксной нотации в постфиксную, а вместо вычисления на стеке выполняем операции над объектом Symbolic (т.е. с языковой точки зрения выполняем обычные операции вычисления функций, сложения, вычитания, умножения и т.д.), а вот с точки зрения класса Symbolic формируем символьное выражение в результирующей символьной переменной.
Yandex
Объявления
18.07.2011, 12:09     Хочу символьный калькулятор
Ответ Создать тему
Опции темы

Текущее время: 00:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru