C/C++

История в калькуляторе

Добрый вечер! Необходимо создать логирование в калькуляторе, как можно этого добиться?Я пыталась создать переменную stack для храненения истории, но не уверена в качестве этого метода
 #include 



using namespace std;

double stack[6] = { 0,0,0,0,0,0 };

double Calculate(double x, char oper, double y){

double res;



if(oper=='+') {

res = x + y;

return res;

stack[] = res;

}



else if (oper == '-') {

res = x - y;

return res;

stack[] = res;

}

else if (oper == '*') {

res = x * y;

return res;

stack[5] = res;

}

else if (oper == '/') {

res = x / y;

return res;

stack[5] = res;

}

else{

return 0;

stack[5] = 0;

}
}
int main()

{ double x = 0.0;

double y = 0.0;

char op;

double result = 0.0;

bool isOn = true;

int UserCh;

enum OPT { calc = 1,history = 2 };

while (isOn)

{

cout > y;

cout isOn;

break;

case history:

for (int x = 0;x
Vovko Pidkova
Vovko Pidkova
100
 добавить библиотеки
#include
#include

добавить вектор для хранения лога
vector logs;

функцию модифицировать
double Calculate(double x, char oper, double y)
{
double res;
ostringstream out;
out
Nurlan Kazbekov
Nurlan Kazbekov
51 416
Лучший ответ
 #include  
#include
#include
#include

using namespace std;

stack history_box;
stack reverse_box;

double calc(double x, char op, double y) {
if (op == '+') history_box.push(x + y);
else if (op == '-') history_box.push(x - y);
else if (op == '*') history_box.push(x * y);
else if (op == '/') history_box.push(x / y);
else return numeric_limits::quiet_NaN();
return history_box.top();
}

double undo() {
if (history_box.empty()) {
return numeric_limits::quiet_NaN();
}
auto top = history_box.top();
reverse_box.push(top);
history_box.pop();
return top;
}

double redo() {
if (reverse_box.empty()) {
return numeric_limits::quiet_NaN();
}
auto top = reverse_box.top();
history_box.push(top);
reverse_box.pop();
return top;
}
void flush() {
cin.ignore(numeric_limits::max(), '\n');
}
int main() {
double a, b, res = 0;
char op, choice;
bool run = true;
puts("\t1. Calc\n\t2. Result\n\t3. Undo\n\t4. Redo\n\t5. Exit");
while (true) {
cout a >> op >> b;
flush();
res = calc(a, op, b);
break;
case '2':
cout
Наверное зависит о того, каким образом ты будешь выводить эти логи.
Можно обычным массивом, на скорость выполнения особо то и не повлияет
ИР
Илья Редькин
73 465
Вроде должно работать, но я бы скорее взял push, pop и top, чтобы реализовать те же опции с меньшими потерями времени
Kонстантин Григорьевич Для того, чтобы "взять" push да pop нужно сделать обычный вектор. И операции хранитьв структуре
struct Counting
{
double LeftData;
double RightData;
char Operation;
double Result;
} cnt;
а потом vector <struct Counting> History;
cin >> cnt.LeftData;
cin >> cntRightData;
cin >> cnt.Operation;
Вычисления
cnt.Result= чему-то и потом
History.push_back(cnt);
Читал
Ни хрена не понял этот маразм
Vovko Pidkova Что именно не так?