Advertisement
fabis_sparks

stack1

Jun 28th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. // BitSdvig.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <cstdio>
  6. #include <cstdlib>
  7. #include <iostream>
  8.  
  9. #define MAX 100
  10.  
  11. int *p;   /* указатель на область свободной памяти */
  12. int *tos; /* указатель на вершину стека */
  13. int *bos; /* указатель на дно стека */
  14.  
  15. void push(int i);
  16. int pop(void);
  17.  
  18. int main(void)
  19. {
  20.     setlocale(LC_ALL, "Russian");
  21.     int a, b;
  22.     char s[80];
  23.  
  24.     p = (int *)malloc(MAX * sizeof(int)); /* получить память для стека */
  25.     if (!p) {
  26.         printf("Ошибка при выделении памяти\n");
  27.         exit(1);
  28.     }
  29.     tos = p;
  30.     bos = p + MAX - 1;
  31.  
  32.     printf("Калькулятор с четырьмя действиями\n");
  33.     printf("Нажмите 'q' для выхода\n");
  34.  
  35.     do {
  36.         printf(": ");
  37.         gets(s);
  38.         switch (*s) {
  39.         case '+':
  40.             a = pop();
  41.             b = pop();
  42.             printf("%d\n", a + b);
  43.             push(a + b);
  44.             break;
  45.         case '-':
  46.             a = pop();
  47.             b = pop();
  48.             printf("%d\n", b - a);
  49.             push(b - a);
  50.             break;
  51.         case '*':
  52.             a = pop();
  53.             b = pop();
  54.             printf("%d\n", b*a);
  55.             push(b*a);
  56.             break;
  57.         case '/':
  58.             a = pop();
  59.             b = pop();
  60.             if (a == 0) {
  61.                 printf("Деление на 0.\n");
  62.                 break;
  63.             }
  64.             printf("%d\n", b / a);
  65.             push(b / a);
  66.             break;
  67.         case '.': /* показать содержимое вершины стека */
  68.             a = pop();
  69.             push(a);
  70.             printf("Текущее значение на вершине стека: %d\n", a);
  71.             break;
  72.         default:
  73.             push(atoi(s));
  74.         }
  75.     } while (*s != 'q');
  76.  
  77.     return 0;
  78. }
  79.  
  80. /* Занесение элемента в стек. */
  81. void push(int i)
  82. {
  83.     if (p > bos) {
  84.         printf("Стек полон\n");
  85.         return;
  86.     }
  87.     *p = i;
  88.     p++;
  89. }
  90.  
  91. /* Получение верхнего элемента из стека. */
  92. int pop(void)
  93. {
  94.     p--;
  95.     if (p < tos) {
  96.         printf("Стек пуст\n");
  97.         return 0;
  98.     }
  99.     return *p;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement