Модифицировать рпн-калькулятор, так чтобы он мог работать и с отрицательными числами - 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; }
Объяснение кода листинга программы
- Вводится число 1000 для размера стека.
- Вводится адрес переменной sp для указания индекса стека.
- Задается условие, которое будет выполняться до тех пор, пока не достигнется конец файла.
- Считывается каждый символ из стандартного ввода.
- Создается переменная x для хранения считанного числа.
- Выполняется операция сложения чисел в стеке.
- Выполняется операция вычитания чисел в стеке.
- Выполняется операция умножения чисел в стеке.
- Выполняется операция деления чисел в стеке.
- Если значение на вершине стека равно нулю, выводится сообщение об ошибке и программа завершается.
- Если значение на вершине стека не равно нулю, выполняется операция деления чисел в стеке.
- Если была допущена ошибка при считывании числа, выводится сообщение об ошибке и программа завершается.
- Если все операции выполнены успешно, программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д