Язык Си в примерах/Калькулятор выражений в обратной польской нотации: различия между версиями

Нет описания правки
// sp = индекс ячейки, куда будет push-иться очередное число
int sp =0; // (sp-1) = индекс ячейки, являющейся вершиной стека
while ( !feof(stdin) ) {
int c = getchar();
int x;
switch (c) {
case ' ':
case '\n':
break;
default:
ungetc (c, stdin); // вернуть символ обратно в поток
if (scanf("%d", &x) != 1) {
fprintf(stderr, "Can't read integer\n");
return -1;
int stack[1000];
int pop(void) {
if (sp > 0) {
return stack[--sp];
} else {
int main() {
int i;
while (!feof(stdin)) {
int c = getchar();
int x;
default:
ungetc(c, stdin);
if (scanf("%d", &x) != 1) {
fprintf(stderr, "Can't read integer\n");
return -1;
RESULT:
i = 0;
while (! !empty() ){
printf("Stack[%d] = %d\n", i, s.pop());
i++;
*/
stack_t* stack_new(int initial_size) {
stack_t *stack = (stack_t*) malloc (sizeof(stack_t));
stack->data_size = initial_size;
if(stack->data_size <= 0) stack->data_size = 100;
*/
void stack_push(stack_t *stack, int a) {
if (stack->last == stack->data_size) {
stack->data_size = (stack->data_size * 3 + 1) / 2;
stack->data = (int*)realloc(stack->data, stack->data_size * sizeof(int));
*/
int stack_pop(stack_t *stack, int *a) {
if (stack->last > 0) {
*a = data[--stack->last];
return 1;
===Задания===
 
# Реализуйте RPN-калькулятор, используя эту реализацию стека. Выделите вычисление RPN-выражения в отдельную функцию.
# Постройте систему тестов и проверьте, что Вашваш калькулятор успешно проходит все тесты и «защищён от дурака» (как дурака-пользователя программы, так и дурака-программиста, использующего ваш стек и калькулятор).
481

правка