Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223

Калькулятор

07.02.2011, 19:17. Показов 1973. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2011, 19:17
Ответы с готовыми решениями:

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

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

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

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

(а что там про красивые классические разборы математических выражений?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2011, 11:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
ПЛИС
zxcha1ka_ 27.01.2026
AHDL Разработать программы для синтеза следующих устройств: 1. Параллельного регистра 4-х разрядного с синхронной загрузкой и асинхронным сбросом (обнулением); Пoмoгитe пoжaлyйстa
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru