Advertisement
a53

expresie10

a53
Oct 15th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3. using namespace std;
  4. char exp[201];
  5. int paranteze,valexp,calcexp[201],elc=1,nr;
  6.  
  7. int main()
  8. {
  9. ifstream f("expresie10.in");
  10. f.getline(exp,201);
  11. f.close();
  12. calcexp[0]=-1;
  13. int i;
  14. for(i=0;exp[i];++i)
  15. if(paranteze>=0)
  16. {
  17. if(exp[i]=='[')
  18. {
  19. ++paranteze;
  20. calcexp[elc++]=-1;
  21. if(exp[i+1]==']') /// Daca parantezele nu contin un numar, iesim din for
  22. break;
  23. }
  24. else
  25. if(exp[i]==']')
  26. {
  27. --paranteze;
  28. valexp=0;
  29. while(calcexp[elc]!=-1)
  30. valexp+=calcexp[elc],calcexp[elc--]=0;
  31. calcexp[elc++]=valexp/2;
  32. }
  33. else /// Daca elementul este o cifra
  34. {
  35. if(exp[i-1]!='[') /// Daca numarul nu este precedat de paranteza deschisa
  36. break;
  37. nr=0;
  38. while(exp[i]>='0'&&exp[i]<='9') /// Calculez numarul
  39. nr=nr*10+exp[i++]-'0';
  40. if(exp[i--]!=']') /// Daca dupa numar nu urmeaza paranteza inchisa
  41. break;
  42. calcexp[elc]=nr;
  43. }
  44. }
  45. ofstream g("expresie10.out");
  46. if(paranteze==0&&!exp[i])
  47. {
  48. valexp=0;
  49. while(calcexp[elc]!=-1)
  50. valexp+=calcexp[elc--];
  51. g<<valexp;
  52. }
  53. else
  54. g<<"expresie gresita";
  55. g.close();
  56. return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement