#include #include using namespace std; void calculating(char* OPZ, int len) { string answer; float stack[100]; //индекс ячейки, куда будет push-иться очередное число int sp = 0; //индекс ячейки, являющейся вершиной стека for (int j = 0; j <= len; j++) { char c = OPZ[j]; if (c == 'x') break; else if (c == ' ' || c == '\n' || c == NULL) continue; else if (c == '+') { stack[sp - 2] = stack[sp - 2 ] + stack[sp - 1]; sp--; continue; } else if (c == '-') { stack[sp - 2] = stack[sp - 2] - stack[sp - 1]; sp--; continue; } else if (c == '*') { stack[sp - 2] = stack[sp - 1] * stack[sp - 2]; sp--; continue; } else if (c == '/') { stack[sp - 2] = stack[sp - 2] / stack[sp - 1]; sp--; continue; } else { for (int y = j; y < len; y++) { //просматриваем текущую строку начиная j if (isdigit(OPZ[y]) || OPZ[y] == ',') {//если элемент строки число или запятая answer += OPZ[y]; //вносим элемент строки в выходную строку } else { j = y; //иначе заканчиваем просмотр строки break; } } stack[sp] = stof(answer); //в стэк ответов заносим нашу выходную строку переведённую в тип float sp++; answer.clear(); // очищаем выходную строку } } cout << endl; cout << "Результат= " << stack[sp - 1] << endl; } void main(void) { setlocale(LC_ALL, "Rus"); int i = 0, s = 0, e = 0; char vr[100], stack[100], exit[100]; cin >> vr; for (i = 0; vr[i] != '\0'; i++) switch (vr[i]) { case '+': while ((s != 0) && (stack[s - 1] != '(')) { exit[e] = stack[s - 1]; //на выход e++; s--; } stack[s] = '+'; //в стек s++; break; case '-': while ((s != 0) && (stack[s - 1] != '(')) { exit[e] = stack[s - 1]; e++; s--; } stack[s] = '-'; s++; break; case '*': while ((s != 0) && (stack[s - 1] != '(') && (stack[s - 1] != '+') && (stack[s - 1] != '-')) { exit[e] = stack[s - 1]; e++; s--; } stack[s] = '*'; s++; break; case '/': while ((s != 0) && (stack[s - 1] != '(') && (stack[s - 1] != '+') && (stack[s - 1] != '-')) { exit[e] = stack[s - 1]; e++; s--; } stack[s] = '/'; s++; break; case '(': { stack[s] = '('; s++; break; } case ')': while ((stack[s - 1] != '(') && (s != 0)) { exit[e] = stack[s - 1]; e++; s--; } stack[s - 1] = ' '; s--; break; default: { exit[e] = vr[i]; e++; if ((vr[i + 1] == '+') || (vr[i + 1] == '-') || (vr[i + 1] == '*') || (vr[i + 1] == '/') || (vr[i + 1] == '(') || (vr[i + 1] == ')')) { exit[e] = ' '; e++; } } } exit[e] = ' '; e++; while (s != 0) { exit[e] = stack[s - 1]; e++; s--; } cout << "В обратной польской записи: "; exit[e] = 'x'; for (i = 0; i < e; i++) { cout << exit[i]; } calculating(exit, i); // считаем }