Advertisement
ithoran

Struk LAB 3

Mar 28th, 2016
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. // Stek.h
  2. #pragma once
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. class Stek {
  7.     char* niz;
  8.     int top;
  9.     int numOfElements;
  10.  
  11. public:
  12.  
  13.     Stek(int n) {
  14.         numOfElements = n;
  15.         niz = new char[numOfElements]();
  16.         top = -1;
  17.     }
  18.  
  19.     void push(char ch) {
  20.         if (top + 1 == numOfElements) {
  21.             cout << "Stek je pun!\n";
  22.             return;
  23.         }
  24.         top++;
  25.         niz[top] = ch;
  26.     }
  27.  
  28.     char pop() {
  29.         if (top >= 0) {
  30.             char vrati = niz[top];
  31.             top--;
  32.             return vrati;
  33.         }
  34.         else
  35.             cout << "Stek je prazan!\n";
  36.     }
  37.  
  38.     void infix2postfix(char* izraz) {
  39.         int i = 0;
  40.         while (izraz[i] != '\0') {
  41.             if (izraz[i] != '+' && izraz[i] != '-' && izraz[i] != '*' && izraz[i] != '/' && izraz[i] != '^' && izraz[i] != '(' && izraz[i] != ')') {
  42.                 cout << izraz[i];
  43.                 i++;
  44.                 continue;
  45.             }
  46.             if (izraz[i] == '(') {
  47.                 push('(');
  48.                 i++;
  49.                 continue;
  50.             }
  51.             if (izraz[i] == ')') {
  52.                 char ch = pop();
  53.                 while (ch != '(') {
  54.                     cout << ch;
  55.                     ch = pop();
  56.                 }
  57.                 i++;
  58.                 continue;
  59.             }
  60.             if (izraz[i] != '+' || izraz[i] != '-' || izraz[i] != '*' || izraz[i] != '/' || izraz[i] != '^') {
  61.                 if (top < 0) {
  62.                     push(izraz[i]);
  63.                     i++;
  64.                     continue;
  65.                 }
  66.                 if (!stepenOp(niz[top], izraz[i])) {
  67.                     cout << pop();
  68.                     while (!stepenOp(niz[top], izraz[i]) && numOfElements > 0) {
  69.                         cout << pop();
  70.                     }
  71.                     push(izraz[i]);
  72.                     i++;
  73.                     continue;
  74.                 }
  75.                 push(izraz[i]);
  76.             }
  77.             i++;
  78.         }
  79.         while (top >= 0) {
  80.             cout << pop();
  81.         }
  82.         cout << endl;
  83.     }
  84.  
  85. private:
  86.  
  87.     bool stepenOp(char x, char y) {
  88.         if (x == '-' || x == '+') {
  89.             if (y == '+' || y == '-')
  90.                 return 0;
  91.             else
  92.                 return 1;
  93.         }
  94.         if (x == '*' || x == '/') {
  95.             if (y == '+' || y == '-' || y == '*' || y == '/')
  96.                 return 0;
  97.             else
  98.                 return 1;
  99.         }
  100.         if (x == '^') {
  101.             return 0;
  102.         }
  103.         return 1;
  104.     }
  105. };
  106.  
  107. // main
  108. #pragma once
  109. #include "stek.h"
  110.  
  111. void main() {
  112.     char string[200];
  113.     cout << "Napisite izraz za prebacivanje:\n";
  114.     gets_s(string);
  115.     Stek a(10);
  116.     a.infix2postfix(string);
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement