Chương IV: Kiểu Dữ liệu Có Cấu Trúc
§11. KIỂU MẢNG VÀ BIẾN CÓ CHỈ SỐ
I. Kiểu mảng một chiều:
A. Xét bài toán: Nhiệt_Độ_Tuần
Nhập vào nhiệt độ (trung bình) của ngày trong
tuần. Tính và đưa ra màn hình nhiệt độ trung
bình của tuần và số lượng ngày trong tuần có
nhiệt độ cao hơn nhiệt độ trung bình của tuần.
1. Xác định bài toán:
Input: Nhiệt độ (trung bình) của ngày trong
tuần.
Output: Nhiệt độ trung bình của tuần và số
lượng ngày trong tuần có nhiệt độ cao hơn nhiệt
độ trung bình của tuần.
2. Ý tưởng:
Ta có thể mô tả 7 biến để ghi nhận nhiệt độ
của các ngày trong tuần.
Nhiệt độ trung bình bằng trung bình cộng của
7 ngày trong tuần.
…
3. Chương trình :
Program NhietdoTuan;
Var t1,t2,t3,t4,t5,t6,t7,tb: Real;
dem: Integer;
Begin
Write (‘Nhap vao nhiet do cua 7 ngay : ‘);
ReadLn (t1,t2,t3,t4,t5,t6,t7);
Tb := (t1+t2+t3+t4+t5+t6+t7)/7;
dem := 0;
If t1>tb Then dem := dem+1;
If t2>tb Then dem := dem+1;
If t3>tb Then dem := dem+1;
If t4>tb Then dem := dem+1;
If t5>tb Then dem := dem+1;
If t6>tb Then dem := dem+1;
If t7>tb Then dem := dem+1;
WriteLn(‘Nhiet do trung binh tuan : ‘,tb);
WriteLn(‘So ngay nhiet do cao hon nhiet do trung
binh : ‘,dem);
ReadLn;
End.
B. Xét bài toán: Tính_Nhiệt_Độ_ N_ Ngày
Bây giờ, nếu như cần giải quyết bài toán trên với N
ngày (N có thể khá lớn) thì cách làm như vậy
không những đòi hỏi một khối lượng khai báo quá
lớn, mà sau đó đoạn chương trình tính cũng quá
dài. Để khắc phục khó khăn đó, TP sử dụng mảng
một chiều.
1. Khái niệm:
Mảng một chiều là dãy các phần tử có cùng
kiểu.
Mảng được đặt tên và mỗi phần tử của nó có
một chỉ số.
Khai báo biến mảng Nhietdo gián tiếp qua kiểu
mảng:
Var Nhietdo : MyArray;
Ví dụ: Để lập trình giải bài toán trên có thể
Khai báo kiểu mảng một chiều gồm Max số thực:
Type MyArray = Array [1..Max] Of Real;
Khai báo kiểu mảng Nhietdo trực tiếp:
Var Nhietdo : Array[1..Max] Of Real;
2. Chương trình :
Program Tinh_Nhiet_do_N_ngay;
Const Max = 100; {giả thiết N lớn nhất là 100}
Type MyArray = Array[1..100] Of Real;
Var Nhietdo : MyArray;
dem, i, N : Integer;
trung_binh : Real;
Begin
Write (‘ nhap vao so ngay: ‘); Readln(N);
trung_binh := 0;
For i := 1 To N Do
Begin
Write(‘ Nhap nhiet do ngay ‘,i,’ : ‘);
Readln (Nhietdo[i]);
trung_binh:=trung_binh+Nhietdo[i];
End;
trung_binh := trung_binh/N;
dem := 0;
For i := 1 To N Do
If Nhietdo[i] > trung_binh Then dem := dem +1;
WriteLn (‘Nhiet do trung binh N ngay:’,trung_binh);
WriteLn (‘So ngay co nhiet do cao hon nhiet do
trung binh :’,dem);
ReadLn;
End.