#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
using namespace std;
// Hàm tính giá trị trung bình
double mean(const vector<int>& data) {
int sum = 0;
for (int num : data) {
sum += num;
}
return static_cast<double>(sum) / data.size();
}
int find_mode(const vector<int>& data) {
// Tìm mốt bằng cách đếm số lần xuất hiện của mỗi giá trị
int max_count = 0, mode = data[0];
for (int i = 0; i < data.size(); ++i) {
int count = 0;
for (int j = 0; j < data.size(); ++j) {
if (data[i] == data[j]) {
count++;
}
}
if (count > max_count) {
max_count = count;
mode = data[i];
}
}
return mode;
}
int find_quartile(const vector<int>& data, double index) {
// Tìm tứ phân vị
int n = data.size();
double pos = index * (n + 1);
int pos_int = static_cast<int>(pos);
if (pos_int == pos) {
return data[pos_int - 1];
} else {
return (data[pos_int - 1] + data[pos_int]) / 2;
}
}
// Hàm tính độ lệch chuẩn
double standard_deviation(const vector<int>& data, double mean) {
double sum_squared_diff = 0.0;
for (int num : data) {
sum_squared_diff += pow(num - mean, 2);
}
return sqrt(sum_squared_diff / data.size());
}
// Hàm sinh số ngẫu nhiên theo phân phối gần giống với tập dữ liệu gốc
int generate_random_number(const vector<int>& data) {
// Sử dụng random_device và mt19937 để tạo số ngẫu nhiên
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(data[0], data[data.size() - 1]);
return dis(gen);
}
int main() {
// Nhập dữ liệu (ví dụ: nhập từ bàn phím)
vector<int> data = {110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120}; // Nhập đầy đủ dữ liệu
// Tính toán các thông số thống kê
double mean_value = mean(data);
double std_dev = standard_deviation(data, mean_value);
// Tạo 10 tập dữ liệu mới
int sopttrendong = 1;
for (int i = 0; i < 50; ++i) {
cout << "Câu "<< i + 1 <<": Cho các số liệu thống kê tuổi thọ của 30 bóng đèn điện được thắp thử (đơn vị: giờ) ghi trong bảng sau:\n";
vector<int> new_data;
for (int j = 1; j < data.size()+20; ++j) {
new_data.push_back(generate_random_number(data));
}
// In ra tập dữ liệu mới
for (int num : new_data) {
cout << num << " ";
if (sopttrendong % 10 == 0 && sopttrendong %3!=0) {
cout <<"\n";
}
sopttrendong++;
}
cout << endl;
cout << "Tìm giá trị trung bình, mốt, tứ phân vị, phương sai và độ lêch chuẩn của bảng số liệu trên.\n";
cout << "Đáp số:\n";
cout << "Giá trị trung bình: " << mean(new_data) << "\n";
cout << "Phương sai: " << standard_deviation(new_data,mean(new_data)) << "\n";
cout << "Độ lệch chuẩn: " << sqrt(standard_deviation(new_data,mean(new_data))) << "\n";
// Sắp xếp dữ liệu
sort(new_data.begin(), new_data.end());
// Tính các giá trị thống kê
int mode = find_mode(new_data);
double q1 = find_quartile(new_data, 0.25);
double q2 = find_quartile(new_data, 0.5);
double q3 = find_quartile(new_data, 0.75);
cout << "Mốt: " << mode << endl;
cout << "Tứ phân vị thứ nhất (Q1): " << q1 << endl;
cout << "Tứ phân vị thứ hai (Q2): " << q2 << endl;
cout << "Tứ phân vị thứ ba (Q3): " << q3 << endl;
}
return 0;
}
Tác giả bài viết: Nguyễn Duy Chiến
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn