Sử dụng mảng tính các giá trị thống kê
Bài tập: Viết một chương trình C# tính các giá trị thống kê như là : trung bình, trung vị, mode, và độ lệch chuẩn của một tập dữ liệu các số nguyên. Dữ liệu đầu vào được người sử dụng đưa vào từ bàn phím. Chương trình sẽ hiển thị kết quả đầu ra tương tự như trong hình dưới đây:
Giải pháp:
class Program
{
static void Main(string[] args)
{
int n;
float mean, median, std;
Console.Write("Nhap vao so phan tu mang:");
n = int.Parse(Console.ReadLine());
if (n < 3)
{
Console.WriteLine("Kich thuoc mang phai lon hon 2.");
}
else
{
//Khai báo một mảng kích thước n lưu trữ các số nguyên
int[] dataset = new int[n];
//allow user inputs
int i = 0;
for (i = 0; i < n; i++)
{
Console.Write("[{0}]:", i);
dataset[i] = int.Parse(Console.ReadLine());
}
//Sắp xếp dữ liệu
bubblesort(dataset, n);
//Tính toán trung bình
int sum = 0;
int j = 0;
while (j < n)
{
sum = sum + dataset[j];
j++;
}
mean = (float)sum / n;
//Tính toán trung vị
//Nếu n là chẵn, median=dataset[n/2]
//Nếu n là lẻ, median=(dataset[n/2]+dataset[1+n/2])/2
//Chỉ số của mảng bắt đầu từ 0, viì vậy bạn cần trừ đi 1
//từ chỉ số được sử dụng trong tính toán trung bị
if (n % 2 != 0) median = dataset[n / 2];
else median = (dataset[(n / 2) - 1] + dataset[n / 2]) / (float)2;
//Tính giá trị mode
int[,] mode = new int[n, 2];
//Khởi tạo mảng 2 chiều sắp xếp số lần xuất hiện của các giá trị và giá trị của chúng
for (i = 0; i < 2; i++)
for (j = 0; j < n; j++) mode[j, i] = 0;
mode[0, 0] = 1;
for (i = 0; i < n; i++)
for (j = 0; j < n - 1; j++)
if (dataset[i] == dataset[j + 1]) { ++mode[i, 0]; mode[i, 1] = dataset[i]; }
int max;
int k = 0;
max = mode[0, 0];
for (j = 0; j < n; j++)
if (max < mode[j, 0]) { max = mode[j, 0]; k = j; }
//calculate standard deviation, std
float temp = 0.0f;
for (j = 0; j < n; j++)
{
temp = temp + (float)Math.Pow(dataset[j] - mean, 2);
}
std = (float)Math.Sqrt(temp / (n - 1));
//Hiện thị kết quả
Console.WriteLine("Cac gia tri thong ke:");
Console.WriteLine("..................................................");
Console.WriteLine("Trung binh:{0}", mean);
Console.WriteLine("Trung vi:{0}", median);
if (mode[k, 1] != 0)
Console.WriteLine("Mode:{0}", mode[k, 1]);
else Console.WriteLine("Mode: khong co gia tri mode");
Console.WriteLine("Do lech chuan {0}", std);
}
Console.ReadLine();
}
///Thuật toán sắp xếp bubble sort
static void bubblesort(int[] dataset, int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = n - 1; j > i; j--)
if (dataset[j] < dataset[j - 1])
{
int temp = dataset[j];
dataset[j] = dataset[j - 1];
dataset[j - 1] = temp;
}
}
}