Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // BitSdvig.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <cstdio>
- #include <cstdlib>
- #include <iostream>
- #define MAX 100
- int *p; /* указатель на область свободной памяти */
- int *tos; /* указатель на вершину стека */
- int *bos; /* указатель на дно стека */
- void push(int i);
- int pop(void);
- int main(void)
- {
- setlocale(LC_ALL, "Russian");
- int a, b;
- char s[80];
- p = (int *)malloc(MAX * sizeof(int)); /* получить память для стека */
- if (!p) {
- printf("Ошибка при выделении памяти\n");
- exit(1);
- }
- tos = p;
- bos = p + MAX - 1;
- printf("Калькулятор с четырьмя действиями\n");
- printf("Нажмите 'q' для выхода\n");
- do {
- printf(": ");
- gets(s);
- switch (*s) {
- case '+':
- a = pop();
- b = pop();
- printf("%d\n", a + b);
- push(a + b);
- break;
- case '-':
- a = pop();
- b = pop();
- printf("%d\n", b - a);
- push(b - a);
- break;
- case '*':
- a = pop();
- b = pop();
- printf("%d\n", b*a);
- push(b*a);
- break;
- case '/':
- a = pop();
- b = pop();
- if (a == 0) {
- printf("Деление на 0.\n");
- break;
- }
- printf("%d\n", b / a);
- push(b / a);
- break;
- case '.': /* показать содержимое вершины стека */
- a = pop();
- push(a);
- printf("Текущее значение на вершине стека: %d\n", a);
- break;
- default:
- push(atoi(s));
- }
- } while (*s != 'q');
- return 0;
- }
- /* Занесение элемента в стек. */
- void push(int i)
- {
- if (p > bos) {
- printf("Стек полон\n");
- return;
- }
- *p = i;
- p++;
- }
- /* Получение верхнего элемента из стека. */
- int pop(void)
- {
- p--;
- if (p < tos) {
- printf("Стек пуст\n");
- return 0;
- }
- return *p;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement