Модифицировать рпн-калькулятор, так чтобы он мог работать и с отрицательными числами - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день, подскажите пожалуйста, как модифицировать рпн-калькулятор, так чтобы он мог работать и с отрицательными числами.
#include <stdio.h>
int main()
{
    int stack[1000];
    int sp =0;
    while ( !feof(stdin) )
    {
        int c = getchar();
        int x;
        switch (c)
        {
        case  ' ':
        case '\n':
            break;
        case EOF :
            printf("%d\n", stack[sp - 1]);
            sp--;
            break;
        case '+':
            stack[sp-2] = stack[sp-2] + stack[sp-1];
            sp--;
            break;
        case '-':
            stack[sp-2] = stack[sp-2] - stack[sp-1];
            sp--;
            break;
        case '*':
            stack[sp-2] = stack[sp-1] * stack[sp-2];
            sp--;
            break;
        case '/':
            if (stack[sp-1]==0)
            {
                fprintf(stderr, "Error: division by zero\n");
                return -1;
            }
 
            else
                stack[sp-2] = stack[sp-2] / stack[sp-1];
            sp--;
            break;
        default:
            ungetc (c, stdin);
            if (scanf("%d", &x) != 1)
            {
                fprintf(stderr, "Can't read integer\n");
                return -1;
            }
            else
            {
                stack[sp] = x;
                sp++;
            }
        }
    }
    return 0;
}

Решение задачи: «Модифицировать рпн-калькулятор, так чтобы он мог работать и с отрицательными числами»

textual
Листинг программы
#include <stdio.h>
 
int main()
{
    int stack[1000];
    int sp =0;
    while ( !feof(stdin) )
    {
        int c = getchar();
        int x;
        switch (c)
        {
        case  ' ':
        case '\n':
            break;
        case EOF :
            printf("%d\n", stack[sp - 1]);
            sp--;
            break;
        case '+':
            stack[sp-2] = stack[sp-2] + stack[sp-1];
            sp--;
            break;
        case '-':
            {
                int c = getchar();
                if(c >='0' && c <='9')
                {
                    ungetc (c, stdin);
                    goto p;
                }
            
                ungetc (c, stdin);
                stack[sp-2] = stack[sp-2] - stack[sp-1];
                sp--;
            }
            break;
        case '*':
            stack[sp-2] = stack[sp-1] * stack[sp-2];
            sp--;
            break;
        case '/':
            if (stack[sp-1]==0)
            {
                fprintf(stderr, "Error: division by zero\n");
                return -1;
            }
 
            else
                stack[sp-2] = stack[sp-2] / stack[sp-1];
            sp--;
            break;
        default:
            p:
            ungetc (c, stdin);
            if (scanf("%d", &x) != 1)
            {
                fprintf(stderr, "Can't read integer\n");
                return -1;
            }
            else
            {
                stack[sp] = x;
                sp++;
            }
        }
    }
 
    return 0;
}

Объяснение кода листинга программы

  1. Вводится число 1000 для размера стека.
  2. Вводится адрес переменной sp для указания индекса стека.
  3. Задается условие, которое будет выполняться до тех пор, пока не достигнется конец файла.
  4. Считывается каждый символ из стандартного ввода.
  5. Создается переменная x для хранения считанного числа.
  6. Выполняется операция сложения чисел в стеке.
  7. Выполняется операция вычитания чисел в стеке.
  8. Выполняется операция умножения чисел в стеке.
  9. Выполняется операция деления чисел в стеке.
  10. Если значение на вершине стека равно нулю, выводится сообщение об ошибке и программа завершается.
  11. Если значение на вершине стека не равно нулю, выполняется операция деления чисел в стеке.
  12. Если была допущена ошибка при считывании числа, выводится сообщение об ошибке и программа завершается.
  13. Если все операции выполнены успешно, программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы