Advertisement
Guest User

Untitled

a guest
May 20th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <regex>
  4.  
  5. bool has_number(std::string& s){
  6. return s.find("value") != std::string::npos;
  7. }
  8.  
  9. bool has_operation(std::string& s){
  10. return s.find("operation") != std::string::npos;
  11. }
  12.  
  13. double doubleFromString(std::string& s){
  14. double ans = 0;
  15.  
  16. int p;
  17. for(p = 0; !isdigit(s[p]); ++p);
  18.  
  19. int ansSign = 1;
  20. if(p > 0 && s[p - 1] == '-')
  21. ansSign = -1;
  22.  
  23.  
  24. for(; isdigit(s[p]); ++p)
  25. ans = ans * 10 + (s[p] - '0');
  26.  
  27. if(s[p] != '.')
  28. return ans * ansSign;
  29.  
  30. int k = 1;
  31. ++p;
  32. for(; isdigit(s[p]); ++p, ++k)
  33. ans = ans + pow(0.1, k);
  34.  
  35. return ans * ansSign;
  36. }
  37.  
  38. int operation_type(std::string& s){
  39. unsigned long index = s.find("operation type=\"") + std::string("operation type=\"").size();
  40.  
  41. int p = index;
  42. for(; isalpha(s[p]); ++p);
  43.  
  44. return s.substr(index, p - index) != "mean";
  45. }
  46.  
  47. int main() {
  48. std::string s;
  49.  
  50. std::vector<double> nums;
  51.  
  52. int operation; // 0 - mean, 1 - variance
  53. while(std::getline(std::cin, s)){
  54. if(has_number(s)){
  55. nums.push_back(doubleFromString(s));
  56. }
  57. else if(has_operation(s))
  58. operation = operation_type(s);
  59. else
  60. break;
  61. }
  62.  
  63. int sum = 0;
  64. for(auto&& i: nums)
  65. sum += i;
  66.  
  67. std::cout << sum << ' ' << nums.size() << ' ' << 1.0 * sum / nums.size() << '\n';
  68.  
  69. if(operation == 0){
  70. std::cout << 1.0 * sum / nums.size();
  71. return 0;
  72. }
  73.  
  74. double variance = 0;
  75. for(auto&& i: nums)
  76. variance += (i - sum / nums.size()) * (i - sum / nums.size());
  77.  
  78. std::cout << variance / nums.size();
  79.  
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement