Bài 11. Kiểu mảng

Chia sẻ bởi Thiều Thị Thủy Ngân | Ngày 10/05/2019 | 222

Chia sẻ tài liệu: Bài 11. Kiểu mảng thuộc Tin học 11

Nội dung tài liệu:

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.
3. Tổng quát:
Khai báo kiểu mảng một chiều có dạng:
TYPE < Tên kiểu mảng> = ARRAY [Kiểu chỉ số] OF ;
Khai báo biến mảng gián tiếp qua kiểu mảng:
VAR : < Tên kiểu mảng>;
Ví dụ: Các khai báo kiểu mảng một chiều sau đây là hợp lệ
Type
ArrayReal = Array [-100..200] Of Real;
ArrayBoolean = Array [-n+1..n+1] Of Boolean;
ArrayInt = Array [-100..0] Of Integer;
ArrayLong = Array [0..3*(n+1)] Of Longint;
Trong đó n là hằng
Khai báo biến kiểu mảng một chiều có dạng:
VAR : ARRAY [Kiểu chỉ số] OF ;
Trong đó:
Kiểu chỉ số là kiểu dữ liệu miền con. Thông thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1 và n2 là các biểu thức nguyên xác định chỉ số đầu và chỉ số cuối.
Ví dụ: Trong chương trình trên tham chiếu tới nhiệt độ của ngày thứ 20 được viết : Nhietdo[20].
Kiểu thành phần là kiểu phần tử mảng. Tham chiếu tới phần tử của mảng một chiều được xác định bởi tên mảng cùng với chỉ số, được viết trong cặp ngoặc [ và ].
II. Kiểu mảng hai chiều:
Bài toán : Tính và đưa ra màn hình bảng cửu chương.
1. Xác định bài toán:
Input: không có
Output: Bảng cửu chương
2. Ý tưởng:
Có thể mô tả bảng cửu chương là kiểu mảng một chiều gồm 9 phần tử, mỗi phần tử lại là mảng một chiều có 9 phần tử, mỗi phần tử là số nguyên.
Trong TP, mảng một chiều mà mỗi phần tử cũng là mảng một chiều gọi là mảng hai chiều.
Như vậy, biến mảng 2 chiều B lưu trữ bảng cửu chương được khai báo như sau:
Var B : Array [1..9] Of Array [1..9] Of Integer;
TP cho phép cách viết gọn:
Var B : Array [1..9,1..9] Of Integer;
3. Tổng quát: khai báo kiểu mảng hai chiều có dạng:
TYPE
< Tên kiểu mảng> = ARRAY [Kiểu chỉ số dòng, Kiểu chỉ số cột] OF < Kiểu phần tử>;
Khai báo biến kiểu mảng hai chiều có dạng:
VAR : ARRAY [Kiểu chỉ số dòng, Kiểu chỉ số cột] OF < Kiểu phần tử>;
Tham chiếu tới phần tử của mảng hai chiều được xác định bởi tên mảng cùng với hai chỉ số cách nhau bởi dấu phẩy, được viết trong cặp ngoặc [ và ].
Ví dụ: B [1,3];
4. Chương trình
Program BangCuuChuong;
Uses CRT;
Var B : Array [1..9,1..9] Of Integer;
{ B :Biến mảng hai chiều để cất giữ bảng cửu chương}
i, j :Integer;
Begin
Clrscr;
For i := 1 To 9 Do
For j := 1 To 9 Do
B [i,j] := i*j;
For i := 1 To 9 Do
Begin
For j := 1 To 9 Do Write(B [i,j] : 3);
Writeln;Writeln;
End;
Readln;
End.
Ví dụ 1:khai báo kiểu mảng hai chiều
Type
ArrayReal = Array [-100..200,100..200] Of Real;
ArrayBoolean = Array [-n-1..n+1, n..2*n] Of Boolean;
Var
ArrayInt : Array [1..10,1..100] Of Integer;
ArrayLong : Array [0..3*(n+1),0..n] Of Longint;
Trong đó n là hằng.

Các khai báo sau đây là hợp lệ:
Ví dụ 2:
Tham chiếu tới thành phần tử ở dòng thứ 5, cột thứ 8 của biến kiểu mảng ArrayInt khai báo trong ví dụ 1 được viết : ArrayInt [5,8]
Ví dụ 3:
Chương trình tính và đưa ra màn hình bàng cửu chương.
Ví dụ 4:
Chương trình sau xây dựng mảng hai chiều B gồm 20 dòng, 10 cột với các phần tử là các số nguyên được tạo ngẫu nhiên trong phạm vi từ -20 đến 20. Giá trị của kiểu chiều được nhập từ bàn phím. Đưa ra màn hình tấtcả các phần tử của mảng có giá trị lớn hơn số kiểu cho trước.
Program MangHaiChieu;
Uses CRT;
Var b : Array [ 1..20,1..10] Of Integer;
d, i, j, k : Integer ;
Begin
Clrscr;
Randomize ; { Khởi động sinh số ngẫu nhiên}
For i := 1 To 20 Do
Begin
For j := 1 To 10 Do
Begin
b[i,j] := Radom (41) – 20;
write (b[i,j], ‘ ‘);
end;

writeln;
end;
write(‘Nhap vao gia tri k = ‘); readln (k);
d := 0;
writeln (‘ Danh sach cac phần tử mảng có giá trị lớn hơn ‘,k,’: ‘);
For i := 1 To 20 Do
For j := 1 To 10 Do
If b[i,j] > k Then Begin
Write (b[i,j], ‘ ‘);
d := d+1;
End;

Hàm chuẩn Random (n) : Cho giá trị là số nguyên ngẫu nhiên trong khoảng từ 0 đến n-1.
If d =0 Then Writeln(‘ khong co’);
Readln;
End.

* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Thiều Thị Thủy Ngân
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)