| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Класс калькулятор |
| Автор: Maarriiaa 7.10.2014, 12:20 |
| Подскажите пожалуйста, как написать класс калькулятор(операции только сложение и вычитание). Я знаю как это сделать для определенного числа параметров, но как преобразовать, чтобы пользователь мог вводить арифметическое выражение, состоящее из неограниченного числа цифр-не представляю. Вот попыталась, но не уверенна, что так #include<iostream> #include<string.h> #include<stdio.h> #define ZNAK 1 #define CHISLO 2 using namespace std; class calculator {private: char *formula; char leks[100]; char lek_tip; public: void calculator::Nachalo(double *result){ get_leks(); sloz_vichet(result); } void calculator::sloz_vichet (double *result){ char up; double temp; while((up = *leks) == '+' || up == '-'){ get_leks(); switch(up){ case '-': *result= *result-temp; break; case '+': *result= *result+temp; break; }}} void calculator:: leks_potok(){ char *t; t=leks; for(;*t;t++) formula--; } void calculator::get_leks(){ char *temp; lek_tip=0; temp=leks; *temp='\0'; if(!*formula) return; while(isspace(*formula)) ++formula; if(strchr("+-=",*formula)){ lek_tip=ZNAK; *temp++= *formula++; } else if(isdigit(*formula)){ *temp++= *formula++; lek_tip=CHISLO; } *temp='\0'; }; int main() { double result; char *p; p=(char *)malloc(100); if(!p) cout«"Oshibka"; do{ formula=p; cout«"Vvedite virazenie: "«endl; gets(formula); if(!*formula) break; Nachalo(&result); cout«"Result: "«result«endl«endl; } while(*p); system ("pause"); return 0; } } |
| Автор: VSB 7.10.2014, 16:46 |
| Посмотрите эти статьи https://ru.wikipedia.org/wiki/Обратная_польская_запись https://ru.wikipedia.org/wiki/Алгоритм_сортировочной_станции С помощью них можно сделать калькулятор со всеми арифметическими операциями |
| Автор: baldina 7.10.2014, 23:49 | ||||||
| Maarriiaa, есть динамические структуры данных, для которых не требуется заранее знать число элементов. в С++ это стандартные vector, list и некоторые другие. но в вашей задаче вообще нет необходимости хранить числа (и cоответственно знать их число), т.к. вычислять значение выражения можно в процессе синтаксического анализа. формула имеет вид
или подробнее
в соответствии с этим разбор выражения и вычисление будет примерно таким (предполагается, что number_ устанавливается в get_lexem())
|