#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct tstk { // ✅ Добавлена открывающая скобка
double inf;
tstk* a;
}; // ✅ Закрывающая скобка на месте
tstk* AddStack(tstk* sp, double inf)
{
tstk* spt = new tstk;
spt->inf = inf;
spt->a = sp;
return spt;
}
tstk* ReadStack(tstk* sp, double& inf)
{
tstk* spt = sp;
inf = sp->inf;
sp = sp->a;
delete spt;
return sp;
}
double masz[122];
char str[100], strp[100];
int priority(char ch) // Вычисление приоритета операций
{ // ✅ Убрана лишняя "5"
switch (ch)
{
case '(': case ')': return 0;
case '+': case '-': return 1;
case '*': case '/': return 2;
default: return -1;
}
}
void AddPostFix(char* strin, char* strout)
{
tstk* sp = NULL;
int n = 0;
char ch;
double inf;
for (unsigned int i = 0; i < strlen(strin); i++)
{
ch = strin[i];
if (ch >= 'A') { strout[n++] = ch; continue; }
if (sp == NULL || ch == '(') { sp = AddStack(sp, ch); continue; }
if (ch == ')')
{
while (sp->inf != '(')
{
sp = ReadStack(sp, inf);
strout[n++] = (char)inf;
}
sp = ReadStack(sp, inf);
continue;
}
int pr = priority(ch);
while (sp != NULL && priority((char)sp->inf) >= pr) // ✅ Убрана лишняя "6"
{
sp = ReadStack(sp, inf);
strout[n++] = (char)inf;
}
sp = AddStack(sp, ch);
}
while (sp != NULL)
{
sp = ReadStack(sp, inf);
strout[n++] = (char)inf;
}
strout[n++] = '\0';
}
double rasAV(char* str, double* mz)
{
tstk* sp = NULL;
char ch;
double inf, inf1, inf2;
for (unsigned int i = 0; i < strlen(str); i++)
{
ch = str[i];
if (ch >= 'A') { sp = AddStack(sp, mz[int(ch)]); continue; }
sp = ReadStack(sp, inf2);
sp = ReadStack(sp, inf1);
switch (ch)
{
case '+': sp = AddStack(sp, inf1 + inf2); break;
case '-': sp = AddStack(sp, inf1 - inf2); break;
case '*': sp = AddStack(sp, inf1 * inf2); break;
case '/': sp = AddStack(sp, inf1 / inf2); break;
}
}
sp = ReadStack(sp, inf);
return inf; // ✅ Убрана лишняя "7"
}
int main()
{
cout << "Vvedite a" << endl; cin >> masz[int('a')];
cout << "Vvedite b" << endl; cin >> masz[int('b')];
cout << "Vvedite c" << endl; cin >> masz[int('c')];
cout << "Vvedite d" << endl; cin >> masz[int('d')];
cout << "Vvedite f" << endl; cin >> masz[int('f')];
cout << " Vvedite viragenie (a ,b, c, d, f) " << endl;
cin >> str;
AddPostFix(str, strp);
cout << endl << strp;
double s = rasAV(strp, masz);
cout << endl << " Res = " << s << endl;
return 0;
}