Đề bài 2

 

Xem công thức tính sau đây (đề thi tuyển sinh cao học ngành KHMT, năm 2011):
Aver=\sum\limits_{i=0}^{n-1}{{{({{a}_{i}}-M\text{ax})}^{2}}+\sum\limits_{i=0}^{n-1}{{{({{a}_{i}}-Min)}^{2}}+\frac{n}{2}}}{{(M\text{ax}-Min)}^{2}}
Trong đó Max, Min lần lượt là giá trị lớn nhất, nhỏ nhất của n số thực (được nhập vào từ
thiết bị nhập chuẩn) a0, a1, …, an-1.

Chỉ dùng duy nhất 1 vòng lặp (for hoặc while), đề xuất cách thức để nhập n số thực như
trên và tính giá trị của biểu thức Aver, xuất kết quả tính ra thiết bị xuất chuẩn. Viết
chương trình để minh họa đề xuất đó.

Thuật toán 2

 

Với các bài toán như trên, chúng ta không có thông tin về Max và Min trong quá trình nhập từ thiết bị nhập, vậy cách giải quyết trong trường hợp này là thực hiện một biến đổi nhỏ đối với công thức để đưa Max và Min ra ngoài. Aver có thể được biến đổi như sau :

{{S}_{1}}=\sum\limits_{i=0}^{n-1}{{{({{a}_{i}}-M\text{ax})}^{2}}=\sum\limits_{i=0}^{n-1}{a_{i}^{2}-2.M\text{ax}.\sum\limits_{i=0}^{n-1}{{{a}_{i}}}}}+n.M\text{a}{{\text{x}}^{2}}

{{S}_{2}}=\sum\limits_{i=0}^{n-1}{{{({{a}_{i}}-Min)}^{2}}=\sum\limits_{i=0}^{n-1}{a_{i}^{2}-2.Min.\sum\limits_{i=0}^{n-1}{{{a}_{i}}}}}+n.Mi{{n}^{2}}

Aver=2.\sum\limits_{i=0}^{n-1}{a_{i}^{2}-2.(M\text{ax}+Min).\sum\limits_{i=0}^{n-1}{{{a}_{i}}}}+n.(M\text{a}{{\text{x}}^{2}}+Mi{{n}^{2}})+\frac{n}{2}.{{(M\text{ax}-Min)}^{2}}

Code 2

 

#include <stdio.h>
#include <conio.h>

void main()
{
long i, n, tam;
double max, min, x, tong, tong1, tong2;

printf(“Nhap N : “);
scanf(“%ld”, &n);
tam = 1;
tong1 = 0;
tong2 = 0;
for (i = 1; i <= n; i++) {
printf(“Nhap phan tu thu %ld : “, i);
scanf(“%lf”, &x);
tong1 = tong1+x*x;
tong2 = tong2+x;
if (tam == 1) {
min = x;
max = x;
tam = 0;
}
else {
if (x > max) {
max = x;
}
if (x < min) {
min = x;
}
}
}
tong = 2*tong1-2*tong2*(max+min)+n*max*max+n*min*min+n/2.0*(max-min)*(max-min);
printf(“Aver = %lf”, tong);
getch();
}