Модифицировать рпн-калькулятор, так чтобы он мог работать и с отрицательными числами - 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 для хранения считанного числа.
- Выполняется операция сложения чисел в стеке.
- Выполняется операция вычитания чисел в стеке.
- Выполняется операция умножения чисел в стеке.
- Выполняется операция деления чисел в стеке.
- Если значение на вершине стека равно нулю, выводится сообщение об ошибке и программа завершается.
- Если значение на вершине стека не равно нулю, выполняется операция деления чисел в стеке.
- Если была допущена ошибка при считывании числа, выводится сообщение об ошибке и программа завершается.
- Если все операции выполнены успешно, программа завершается.