Загрузка данных


#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) { // Вычисление приоритета операций
    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) {
            sp = ReadStack(sp, inf);
            strout[n++] = (char)inf;
        }
        sp = AddStack(sp, ch);
    } // end for

    while (sp != NULL) {
        sp = ReadStack(sp, inf);
        strout[n++] = (char)inf;
    }
    strout[n++] = '\0';
}

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;

    return 0;
}