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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Coyote112358
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 22
#1

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

17.07.2011, 22:11. Просмотров 1969. Ответов 7
Метки нет (Все метки)

Собственно вот что я имею:
Библиотека 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;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2011, 22:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Хочу символьный калькулятор (C++):

Хочу написать программу-калькулятор под ,допустим,игру - C++
Хочу написать калькулятор характеристик для персонажей в игре,писать буду на с++,vs10. Помогите начинающему,как сделать что бы можно было...

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

Символьный тип - C++
Задано строку. Посчитать, сколько в нем букв 'i' 'k' 'l'

символьный тип - C++
С клавиатуры посимвольно вводятся вводится предложение, где узнать количество слов, которые не содержат букву &quot;у&quot;!!!!! Желательно что бы...

Символьный код - C++
Доброго времени суток! В книге Дейтела в одном из примеров наткнулся на следующий пример кода: cout &lt;&lt; &quot;The character (&quot;&lt;&lt;'a'&lt;&lt;&quot;) has...

Символьный тип - C++
Не могу никак создать переменную типа char. Пишу на си++, но использую printf и scanf (обязательное условие). Создал структурный тип tab....

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

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

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

Не по теме:

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

0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
18.07.2011, 12:09 #8
Coyote112358, каким образом выражение хранится в переменной Symbolic? Т.е. именно в виде выражения? Если да, то можно применить обычный рекурсивный спуск, с той разницей, что обрабатывать не переменные типа double и по завершении разбора получать числовой результат, а обрабатывать объекты Symbolic, а на выходе получить переменную Symbolic, хранящую разобранное выражение.
Тогда, кстати, можно и ОПЗ применить. Переводим выражение из инфиксной нотации в постфиксную, а вместо вычисления на стеке выполняем операции над объектом Symbolic (т.е. с языковой точки зрения выполняем обычные операции вычисления функций, сложения, вычитания, умножения и т.д.), а вот с точки зрения класса Symbolic формируем символьное выражение в результирующей символьной переменной.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 12:09
Привет! Вот еще темы с ответами:

символьный файл - C++
Можете перевести некоторые функции из Турбо паскала в Турбо С Задача: Дан символьный файл F.Получить копию файла g. While not...

Литерный, символьный массив - C++
1)Объявить строку ng3 как литерный массив, не указав длину строки, и инициализировать ее значением “HTML++Java”. 2)Объявить массив er из...

Символьный тип данных - C++
Символьный тип данных Введите массив символов из 7 элементов. Определите, является ли он симметричным (Симметричным считается массив,...

символьный тип данных - C++
Как инициализировать переменную символьного(char) типа словом(например &quot;привет&quot;)???


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.07.2011, 12:09
Ответ Создать тему
Опции темы

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