Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
1

Калькулятор

07.02.2011, 19:17. Показов 1738. Ответов 2
Метки нет (Все метки)

Пытаюсь написать калькулятор но чтоб он сразу считал строку, например 5+5*2-1 по идее =14, но мой калькулятор не знает приоритеты математики и тупо к 5 прибавляет 5 умножает это на 2 и отнимает один.
Как задать ему эти приоритеты?
Вот код:
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
bool IsInt(AnsiString value){try{int a;return TryStrToInt(value,a);}catch(...){return false;}} //число ли строка?
void AskAndCalc()
{
AnsiString CalcStr=InputBox("...", "Enter CalcString:", "5+5*2-1"); //калькулируемая строка
double AllValue[1000]; //все считаные значения
int Operation[1000]; //все считаные операции
AnsiString SelVal=""; //текущее значение
int CountOper=0, CountValue=0; //кол-во операций и значений
for(int index=1;index<=CalcStr.Length();index++) //проходимся по всей "калькулируемой" строке
{
AnsiString symb=CalcStr[index]; //символ в позиции index
if(!IsInt(symb) && symb!='.' && symb!=',') //если не int, не '.' и не ',' (для float)
{
AllValue[CountValue]=SelVal.ToDouble(); //добавляем значение
if(symb=='+')Operation[CountOper]=1; //если + то добавляем значение 1
if(symb=='-')Operation[CountOper]=2; //если - то добавляем значение 2
if(symb=='*')Operation[CountOper]=3; //если * то добавляем значение 3
if(symb=='/')Operation[CountOper]=4; //если / то добавляем значение 4
CountOper++;CountValue++; //прибавляем кол-во ...
SelVal="";continue; //сбрасывем текущее число и continue не знаю как объяснить, в общем пропускает всё что после неё но не останавливает ...
}
SelVal+=symb; //если стока ^ IsInt то добавляем цифру к тек.числу.
}
AllValue[CountValue]=SelVal.ToDouble(); //добавляем последнее число, так как в форе оно добавлено не будет
double ret=AllValue[0]; //ret = первому числу
for(int operindex=0;operindex<=CountOper;operindex++) //проходимся по операциям
{
int oper=Operation[operindex]; //oper = операции по позиции index
if(oper==1)ret+=AllValue[operindex+1]; // если оператор == 1 то прибавляем к ret ...
if(oper==2)ret-=AllValue[operindex+1]; // ...
if(oper==3)ret*=AllValue[operindex+1]; // ...
if(oper==4)ret/=AllValue[operindex+1]; // ...
}
ShowMessage(ret); //выводим значение
}

Не по теме:

З.Ы: простите за то что код не форматированный.

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2011, 19:17
Ответы с готовыми решениями:

C++ калькулятор
Помогите написать калькулятор стандартный. Основное что мне нужно это: через мессанджер чтобы...

Калькулятор
Простите если такая тема уже есть! У меня есть калькулятор(очень простой) мне его надо изменить:...

Калькулятор
Всем привет! Прошу помощи в решении следущей задачи: Создать программу (оболочку) на Turbo C++...

Калькулятор
Добрый день! Возникла трудность: Есть калькулятор, как сделать так, чтобы счет и запись цифр...

2
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
08.02.2011, 08:06 2
если отвлечься от красивых классических разборов арифметических выражений и попытаться приспособиться к вашему решению, то я бы посоветовал (первое что приходит на ум) предварительно "пройтись" по строке и заменить умножения(5*5) и деления(4/2) на ответы (25 и 2), а затем уже пройтись вашим алгоритмом лишь на "+" и "-".
естественно все этом мы можем себе позволить исходя из того что в выражении не присутствуют скобки, что приведенный код в принципе подтверждает.
1
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
08.02.2011, 11:38  [ТС] 3
в принципе решение приятное и легко реализуемое, за что вам спасибо!
а ежели там будут скобки? хмм...

(а что там про красивые классические разборы математических выражений?)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2011, 11:38
Помогаю со студенческими работами здесь

Калькулятор
Я сижу создаю калькулятор в С++Builder 6, и он мне в определенном месте выдает ошибку Вот мой...

Калькулятор С++
Здравствуйте. У меня возникла проблема в обсчете чисел с плавающей запятой.При...

Калькулятор C++
Простейший калькулятор. Помогите пожалуйста.

калькулятор
Помогите пожайлуйста с объяснением 4. Организовать в программе калькулятор. В калькуляторе...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru