Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. double ONP()
  2. {
  3. char c;
  4. StackItem* pHead = NULL; // wyzerowanie stosu
  5. DStackItem* pDHead = NULL; // wyzerowanie stosu
  6.  
  7. dpush(&pDHead, GetNum());
  8. while (IsOper(c=GetOper()))
  9. {
  10. if (c == '(')
  11. {
  12. push(&pHead, c); // dopisuje na stos nawias otwierający
  13. dpush(&pDHead, GetNum());
  14. }
  15. else if (c == ')')
  16. {
  17. while (c != '(')
  18. {
  19. while (prior(c) <= prior(top(pHead)))
  20. {
  21. double x = dpop(&pDHead);
  22. dpush(&pDHead, Eval(pop(&pHead), dpop(&pDHead), x));
  23. }
  24. break;
  25. }
  26. pop(&pHead);
  27. }
  28. else
  29. {
  30. while (prior(c) <= prior(top(pHead))) // prior operatora MUSI byc silnie wiekszy od prior szczytu stosu
  31. {
  32. double x = dpop(&pDHead);
  33. dpush(&pDHead, Eval(pop(&pHead), dpop(&pDHead), x)); // podmianka
  34. }
  35. push(&pHead, c);
  36. if (IsOper(c == GetOper()))
  37. ungetc(c, stdin);
  38. else
  39. {
  40. ungetc(c, stdin);
  41. dpush(&pDHead, GetNum());
  42. }
  43. }
  44. }
  45. while (!isEmpty(pHead))
  46. {
  47. double x = dpop(&pDHead);
  48. dpush(&pDHead, Eval(pop(&pHead), dpop(&pDHead), x));
  49. }
  50. return dpop(&pDHead);
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement