компьютерный форум
Вернуться   Компьютерный форум > Программирование и вебстроительство > Программирование

Ответ
 
LinkBack Опции темы Опции просмотра
Старый 25.09.2005, 03:54   #1
Пользователи
 
Регистрация: 25.09.2005
Сообщений: 6
По умолчанию

Столкнулся с проблемой конвертации введенной строки в формулу, по которой затем будут производится расчеты. Язык программирования С++.




AlexNord вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
25.09.2005, 03:54
Техник
реклама
По умолчанию

Старый 25.09.2005, 21:30   #2
Пользователи
 
Регистрация: 10.09.2004
Сообщений: 985
По умолчанию

Я не понял суть вопроса.
vxk7m вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 26.09.2005, 03:48   #3
Пользователи
 
Регистрация: 25.09.2005
Сообщений: 6
По умолчанию

:no:
Вводится строка. Затем из этой строки получаем формулу. Потом по этой формуле затем производятся расчеты.
AlexNord вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 30.09.2005, 08:41   #4
Пользователи
 
Регистрация: 10.09.2004
Сообщений: 985
По умолчанию

тоесть юзер должен ввести чтото типо
3+8+3-8*4/7
И прога должна потом вычислить результат?
vxk7m вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 01.10.2005, 03:48   #5
Пользователи
 
Регистрация: 25.09.2005
Сообщений: 6
По умолчанию

Нет. юзер вводит что-то типа a*(b+c)+d*f, где подразумевается что числа a,b,c,d,f заранее известны, а на выходе получаем результат выполнения операций.
AlexNord вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 02.10.2005, 12:51   #6
Пользователи
 
Регистрация: 10.09.2004
Сообщений: 985
По умолчанию

Вобщем самый тупой вариант - парсить строку на наличие знаков действия (/,*,-,+) если символ - не знак, то strcat(,argg1), если символ знак, то конвертируем argg1 в число и продолжаем, когда натыкаемся на следующий знак - выпоняем предыдущее действие и результат кладём в argg1, если натыкаемся на '' - выполняем предыдущее действие и выводим результат. Ну или чтото типо того.
vxk7m вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 02.10.2005, 12:59   #7
Пользователи
 
Регистрация: 25.09.2005
Сообщений: 6
По умолчанию

А со скобками как???
AlexNord вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 03.10.2005, 06:19   #8
Пользователи
 
Регистрация: 10.09.2004
Сообщений: 985
По умолчанию

Цитата:
[b] А со скобками как???
А вот со скобками и с последовательностью действий возникает проблема - не знаю. Нужно думать.
vxk7m вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 04.10.2005, 07:43   #9
Пользователи
 
Регистрация: 11.10.2004
Сообщений: 607
По умолчанию

Я могу подсказать алгоритм, но не подскажу как реализовать.
Берем стоку с формулой, разбиваем ее по действиям и заносим в массив.
Далее сортируем массив на приоритет действий
Начинаем выполнять действия, а результат сохраняем на месте действия.
Конечным результатом будет последняя ячейка массива.

:yes:
BooMeR вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 05.10.2005, 04:37   #10
Пользователи
 
Регистрация: 25.09.2005
Сообщений: 6
По умолчанию

У меня тоже была идея реализации выполнения с приорететами.
Тут написал программу (естественно под свои нужды, но думаю будет полезна и остальным). Можно будет переписать под себя если будет надо. Пока я знаю один баг - нет учета нормального учета приоритетов вычисления выражения в скобках.

#include
#include

struct rec
{
int prior;
double p;
bool flag;
};

int lenstr(char *s)
{
int i=0;
while(s[i]!='') i++;
return i;
}

bool midstr(char *res,char *str,int beg,int end)
{
int i=0,j=0;
for(i=beg;i
AlexNord вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



Текущее время: 20:59. Часовой пояс GMT.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Content Relevant URLs by vBSEO 3.5.0 RC2