Обратная польская запись - C++

235
14 мая 2018, 12:40

Как и куда записать строку, которая будет парситься?

#include <iostream>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define STKDPTH 32 
#define VAL  0 
#define ADD  1 
#define SUB  2 
#define MUL  3 
#define DIV  4 
#define SOF -1 
#define SUF -2 
#define UNK -3 
int scount;
double stack[STKDPTH];
int parse(char *);
int main(int argc, char **argv)
{
    while (*++argv) {
        switch (parse(*argv)) {
            case VAL: continue;
            case ADD:
                stack[scount - 1] += stack[scount];
                break;
            case SUB:
                stack[scount - 1] -= stack[scount];
                break;
            case MUL:
                stack[scount - 1] *= stack[scount];
                break;
            case DIV:
                if (stack[scount] != 0) {
                    stack[scount - 1] /= stack[scount];
                    break;
                } else {
                    fprintf(stderr, "Деление на ноль!\n");
                    return(1);
                }
            case SUF:
                fprintf(stderr, "Недостаточно операндов!\n");
                return(1);
            case SOF:
                fprintf(stderr, "Переполнение стека!\n");
                return(1);
            case UNK:
                fprintf(stderr, "Неопознанный аргумент!\n");
                return(1);
        }
    }
    int i;
    for (i = 0; i < scount; i++) printf("%0.3f\n", stack[i]);

    return(0);
}
int parse(char *s)
{
    double tval = 0;
    char * endptr;
    switch (*s) {
        case '-':
            if (*(s+1) != '\0') break;
            if (scount >= 2) {
                scount -= 1;
                return(SUB);
            }
            else return(SUF);
        case '+':
            if (scount >= 2) {
                scount -= 1;
                return(ADD);
            }
            else return(SUF);
        case 'x':
            if (scount >= 2) {
                scount -= 1;
                return(MUL);
            }
            else return(SUF);
        case '/':
            if (scount >= 2) {
                scount -= 1;
                return(DIV);
            }
            else return(SUF);
    }
    errno = 0;
    tval = strtod(s, &endptr);
    if (errno != 0 || *endptr != '\0') return(UNK);
    if (scount < STKDPTH) stack[scount++] = tval;
    else return(SOF);
    return(VAL);
}
READ ALSO
Как правильно сделать такой эффект в пагинации?

Как правильно сделать такой эффект в пагинации?

Как сделать такую анимацию пагинации перемещения точек элементов между числами 01, 02 , 03 , 04 ?

277
перестает работать ссылка(css)

перестает работать ссылка(css)

Есть блок, вот его код

221
CSS центрирование transform: translate(-50%, -50%)

CSS центрирование transform: translate(-50%, -50%)

В CSS есть интересное преобраазование: transform: translate(-50%, -50%);Позволяет расположить элемент точно по центру экрана, если в результате применения...

225
Помогите решить задачку по CSS + Angularjs

Помогите решить задачку по CSS + Angularjs

Задачка вроде не сложная, а таску надо решить очень срочно

229