Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cmath>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. static size_t g_count, g_count_2;
  10. static double g_sum, g_min, g_max, g_Q1, g_Q2, g_Q3, g_mean, g_variance, g_SD;
  11.  
  12. static double sum(const vector<double> &ns)
  13. {
  14. for(double n : ns)
  15. g_sum += n;
  16.  
  17. return g_sum;
  18. }
  19.  
  20. static double min(const vector<double> &ns)
  21. {
  22. return g_min = ns.front();
  23. }
  24.  
  25. static double max(const vector<double> &ns)
  26. {
  27. return g_max = ns.back();
  28. }
  29.  
  30. static double range()
  31. {
  32. return g_max - g_min;
  33. }
  34.  
  35. static double midRange()
  36. {
  37. return (g_max + g_min) / 2;
  38. }
  39.  
  40. static double Q1(vector<double> ns)
  41. {
  42. ns.erase(ns.begin() + g_count_2, ns.end());
  43.  
  44. if(g_count_2 % 2 == 0)
  45. return g_Q1 = (ns[g_count_2 / 2] + ns[g_count_2 / 2 - 1]) / 2;
  46. else
  47. return g_Q1 = ns[g_count_2 / 2];
  48. }
  49.  
  50. static double Q2(const vector<double> &ns)
  51. {
  52. if(g_count % 2 == 0)
  53. return g_Q2 = (ns[g_count / 2] + ns[g_count / 2 - 1]) / 2;
  54. else
  55. return g_Q2 = ns[g_count / 2];
  56. }
  57.  
  58. static double Q3(vector<double> ns)
  59. {
  60. ns.erase(ns.begin(), ns.end() - g_count_2);
  61.  
  62. if(g_count_2 % 2 == 0)
  63. return g_Q3 = (ns[g_count_2 / 2] + ns[g_count_2 / 2 - 1]) / 2;
  64. else
  65. return g_Q3 = ns[g_count_2 / 2];
  66. }
  67.  
  68. static double IQR()
  69. {
  70. return g_Q3 - g_Q1;
  71. }
  72.  
  73. static double midHinge()
  74. {
  75. return (g_Q3 + g_Q1) / 2;
  76. }
  77.  
  78. static double AM()
  79. {
  80. return g_mean = g_sum / g_count;
  81. }
  82.  
  83. static double QM(const vector<double> &ns)
  84. {
  85. double sumOfSqrs = 0;
  86.  
  87. for(double n : ns)
  88. sumOfSqrs += pow(n, 2);
  89.  
  90. return sqrt(sumOfSqrs / g_count);
  91. }
  92.  
  93. static double GM(const vector<double> &ns)
  94. {
  95. double product = 1;
  96.  
  97. for(double n : ns)
  98. product *= n;
  99.  
  100. return pow(product, 1.0 / g_count);
  101. }
  102.  
  103. static double HM(const vector<double> &ns)
  104. {
  105. double reciprocalsSum = 0;
  106.  
  107. for(double n : ns)
  108. reciprocalsSum += pow(n, -1);
  109.  
  110. return pow(reciprocalsSum / g_count, -1);
  111. }
  112.  
  113. static double variance(const vector<double> &ns)
  114. {
  115. double sumOfSqrdDevs = 0;
  116.  
  117. for(double n : ns)
  118. sumOfSqrdDevs += pow(n - g_mean, 2);
  119.  
  120. return g_variance = sumOfSqrdDevs / g_count;
  121. }
  122.  
  123. static double SD()
  124. {
  125. return g_SD = sqrt(g_variance);
  126. }
  127.  
  128. static double RSD()
  129. {
  130. return g_SD / abs(g_mean);
  131. }
  132.  
  133. static double skewness(const vector<double> &ns)
  134. {
  135. double sumOfDevs = 0;
  136.  
  137. for(double n : ns)
  138. sumOfDevs += pow(n - g_mean, 3);
  139.  
  140. return (sumOfDevs / g_count) / pow(g_SD, 3);
  141.  
  142. }
  143.  
  144. static double kurtosis(const vector<double> &ns)
  145. {
  146. double sumOfDevs = 0;
  147.  
  148. for(double n : ns)
  149. sumOfDevs += pow(n - g_mean, 4);
  150.  
  151. return (sumOfDevs / g_count) / pow(g_SD, 4);
  152. }
  153.  
  154. int main()
  155. {
  156. ios::sync_with_stdio(false);
  157. cout.precision(15);
  158.  
  159. string inStr;
  160. getline(cin, inStr);
  161. istringstream iss(inStr);
  162.  
  163. double inNum;
  164. vector<double> inNums;
  165.  
  166. while(iss >> inNum)
  167. inNums.push_back(inNum);
  168.  
  169. g_count = inNums.size();
  170. g_count_2 = g_count / 2;
  171.  
  172. if(g_count < 2)
  173. return 1;
  174.  
  175. sort(inNums.begin(), inNums.end());
  176.  
  177. cout << '\n';
  178. cout << "Count: " << g_count << '\n';
  179. cout << "Sum: " << sum(inNums) << '\n';
  180. cout << "Minimum: " << min(inNums) << '\n';
  181. cout << "Maximum: " << max(inNums) << '\n';
  182. cout << "Range: " << range() << '\n';
  183. cout << "Mid-range: " << midRange() << '\n';
  184. cout << "1st Quartile: " << Q1(inNums) << '\n';
  185. cout << "2nd Quartile: " << Q2(inNums) << '\n';
  186. cout << "3rd Quartile: " << Q3(inNums) << '\n';
  187. cout << "Interquartile Range: " << IQR() << '\n';
  188. cout << "Mid-hinge: " << midHinge() << '\n';
  189. cout << "Arithmetic Mean: " << AM() << '\n';
  190. cout << "Quadratic Mean: " << QM(inNums) << '\n';
  191. cout << "Geometric Mean: " << GM(inNums) << '\n';
  192. cout << "Harmonic Mean: " << HM(inNums) << '\n';
  193. cout << "Variance: " << variance(inNums) << '\n';
  194. cout << "Standard Deviation: " << SD() << '\n';
  195. cout << "Relative Standard Deviation: " << RSD() << '\n';
  196. cout << "Skewness: " << skewness(inNums) << '\n';
  197. cout << "Kurtosis: " << kurtosis(inNums) << '\n';
  198.  
  199. return 0;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement