fork download
  1. #include <cstdlib>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. void show(double a,double b,double c,char op) { cout<<a<<' '<<op<<' '<<b<<" = "<<c<<endl; }
  9.  
  10. typedef void fun(double a,double b);
  11. struct rec_t { const string cmd; fun *call; };
  12. /*
  13. rec_t tb[]=
  14. {
  15. {"+",[](double a,double b){ show(a,b,a+b,'+'); }},
  16. {"*",[](double a,double b){ show(a,b,a*b,'*'); }},
  17. {"stop",[](double a,double b){ cout<<"nara"<<endl; exit(0); }},
  18. {"",[](double a,double b){ cout<<"Nieznane polecenie"<<endl; }},
  19. };
  20. */
  21.  
  22. vector<rec_t> tb=
  23. {
  24. {
  25. {"+",[](double a,double b){ show(a,b,a+b,'+'); }},
  26. {"*",[](double a,double b){ show(a,b,a*b,'*'); }},
  27. {"stop",[](double a,double b){ cout<<"nara"<<endl; exit(0); }},
  28. {"",[](double a,double b){ cout<<"Nieznane polecenie"<<endl; }},
  29. }
  30. };
  31.  
  32. int main()
  33. {
  34. char op;
  35. string cmd;
  36. double a,b;
  37. while(true)
  38. {
  39. if(cin>>a>>op>>b) cmd=string(1,op);
  40. else
  41. {
  42. cin.clear();
  43. cin>>cmd;
  44. }
  45. find_if(begin(tb),end(tb),[&cmd](auto r){ return (!r.cmd.size())||(r.cmd==cmd); })->call(a,b);
  46. getline(cin,cmd);
  47. }
  48. }
Success #stdin #stdout 0s 4404KB
stdin
1+2
2*3
4^7
5*5
3+5
stop
1+1
stdout
1 + 2 = 3
2 * 3 = 6
Nieznane polecenie
5 * 5 = 25
3 + 5 = 8
nara