Repository navigation
Expand file tree
/
Copy pathstatistical_QC.cpp
More file actions
64 lines (50 loc) · 2.12 KB
/
Copy pathstatistical_QC.cpp
File metadata and controls
64 lines (50 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <vector>
#include <numeric>
#include <limits>
#include <algorithm>
double calculate_average(const std::vector<double>& sample) {
return std::accumulate(sample.begin(), sample.end(), 0.0) / sample.size();
}
double calculate_range(const std::vector<double>& sample) {
auto min_element = std::min_element(sample.begin(), sample.end());
auto max_element = std::max_element(sample.begin(), sample.end());
return *max_element - *min_element;
}
int main() {
std::vector<std::vector<double>> samples = {
{5.2, 5.4, 5.0, 5.1},
{5.3, 5.6, 5.2, 5.5},
{5.7, 5.1, 5.0, 5.3},
{5.5, 5.3, 5.6, 5.2}
};
int num_samples = samples.size();
double total_average = 0;
double total_range = 0;
for (const auto& sample : samples) {
total_average += calculate_average(sample);
total_range += calculate_range(sample);
}
double average_of_averages = total_average / num_samples;
double average_range = total_range / num_samples;
const double A2 = 0.729; // A2 constant for sample size 4
double upper_control_limit = average_of_averages + A2 * average_range;
double lower_control_limit = average_of_averages - A2 * average_range;
std::cout << "X-bar control chart:" << std::endl;
std::cout << "Average of averages: " << average_of_averages << std::endl;
std::cout << "Average range: " << average_range << std::endl;
std::cout << "Upper control limit: " << upper_control_limit << std::endl;
std::cout << "Lower control limit: " << lower_control_limit << std::endl;
bool process_in_control = true;
for (size_t i = 0; i < num_samples; ++i) {
double sample_average = calculate_average(samples[i]);
if (sample_average > upper_control_limit || sample_average < lower_control_limit) {
process_in_control = false;
std::cout << "Sample " << i + 1 << " is out of control." << std::endl;
}
}
if (process_in_control) {
std::cout << "All samples are in control." << std::endl;
}
return 0;
}