10.1. MẢNG MỘT CHIỀU
10.1.1. Mảng và cách khai báo mảng :
Khái niệm :
Mảng là một tập gồm nhiều phần tử có cùng chung một kiểu dữ liệu. Mỗi phần tử của
mảng có một đại lượng xác định vị trí tương đối của phần tử đó so với các phần tử khác
trong mảng, gọi là chỉ so? Các yếu tố để xác định một mảng gồm có:
Tên mảng
Kiểu dữ liệu chung của các phần tử trong mảng
Kiểu dữ liệu của chỉ số và phạm vi của chỉ số.
Kiểu dữ liệu của các phần tử mảng là mọi kiểu dữ liệu mà một biến có thể có. Tuy
nhiên, kiểu dữ liệu của chỉ số thì không được là kiểu thực hay kiểu chuỗi, nó chỉ có thể là
kiểu đếm được : nguyên, ký tự, lôgic, liệt kê hay đoạn con.
Khai báo mảng một chiều :
Mảng một chiều, còn gọi là dãy, hay đơn giản là mảng, có thể khai báo theo một trong
hai cách :
Cách 1: Khai báo trực tiếp theo cách sau :
VAR
Tênmảng : Array[m1 . . m2] of Tênkiểudữliệu ;
Ở đây m1, m2 là hai hằ?g xác định phạm vi của chỉ số, chúng có chung một kiểu dữ
liệu,?và m1? m2.
Ví dụ: Cho khai báo dưới đây:
Var
A : Array[0..10] of Real;
Hten: Array[1..5] of String[18];
B: Array[‘a’..’d’] of Integer;
Theo khai báo trên, ta có ba mảng:
Mảng thứ nhất tên là A, gồm 11 phần tử cùng kiểu Real, ứng với các chỉ số 0, 1,
2, ..., 10, đó là:
A[0], A[1], A[2], ..., A[10]
Mảng thứ hai tên là HTen gồm 5 phần tử cùng kiểu dữ liệu là String[18] ứng với
các chỉ số từ 1 đến 5:
Const
X : array[1..5] of Integer = (12, 14, 16, 18, 20) ;
Khi đó X là một mảng gồm 5 phần tử cùng kiểu nguyên và có giá trị X[1]=12, X[2]=14,
X[3]=16, X?4]=18, X[5]=20.
Mặc dù từ khóa ở đây là Const song X lại được dùng như là một biến mảng, tức là các
phần tử của X có thể thay đổi gía trị được. Ví dụ, trong chương trình ta có thể gán:
X[1]:= 2;
X[2]:=5+20;
10.1.2. Truy xuất các phần tử mảng:
Các xử lý trên mảng được quy về xử lý từng phần tử mảng. Ðể xác định một phần tử của
mảng, ta dùng cách viết :
Tênmảng[ chỉ số của phầ? tử ]
Ví du : có thể gán :
A[0]:= 15.8;
A[1]:= 2*A[0];
Hten[3]:= ‘Nguyen Thi Loan’;
B[‘a’]:=100;
Chỉ số của một phần tử có thể là một biến, một hằng, hay một biểu thức. Ví dụ, cho i là
biến kiểu nguyên, khi đó ta có thể dùng các lệnh:
i:=6;
A[i]:=100.25;
Hai lệnh trên tương đương với một lệnh:
A[6]:=100.25;
Nếu biến i có giá trị là 6 thì lệnh :
A[ i div 2 +1] := 4.5; tương đương với lệnh:
A[4]:=4.5; vì biểu thức i div 2 +1 có gía trị là 4.
Khi nhập dữ liệu cho các phần tử của một mảng , ta có thể dùng câu lệnh For, While hay
Repeat.
Ví dụ, nhập dữ liệu cho các phần tử của mảng A:
Var
X, Y : Array[1..10] of Real;
Khi đó, lệnh: X := Y;
tương đương với lệnh :
For i:=1 to 10 do X[i] :=Y[i];
10.1.3. Các bài toán cơ bản về mảng :
Ví dụ 10.1: Ðếm số lần xuất hiện của gía trị x trong dãy A1, A2, ..., An .
Ví dụ gía trị x=6 xuất hiện 3 lần trong dãy 6 7 1 2 6 0 6 1.
Ta dùng biến Dem kiểu nguyên để đếm số lần xuất hiện của x. Ðầu tiên ta gán Dem:=0,
sau đó duyệt từng phần tử A1, A2, ..., An, mỗi khi có một phần tử bằng x thì tăng biến
Dem lên một đơn vị. Kết qủa là biến Dem có gía trị đúng bằng số phần tử bằng x. Hai lệnh
chính của thuật toán là:
Dem:=0;
For i:=1 to N do If A[i]=x then Dem:=Dem+1;
Ví dụ, đếm trong dãy số A có bao nhiêu số 0, ta viết:
Dem:=0;
For i:=1 to N do if A[i]=0 then Dem:=Dem+1;
Writeln(‘ Có ‘, Dem , ‘ số không ‘);
Nhận xét: Ðẳng thức A[i]=x ( hay A[i]=0 ) là điều kiện để biến Dem được tăng thêm 1,
vậy bài toán trên có thể mở rộng là: hãy đếm số phần tử của mảng A thỏa mãn một điều
kiện cho trước. Trong lệnh For ở trên, khi thay đẳng thức A[i]=x bằng A[i] thỏa điều kiện ,
ta được thuật toán tổng quát hơn :
Dem:=0;
For i:=1 to N do If A[i] thỏa điều kiện then Dem:=Dem+1;
Chương trình sau nhập một mảng A có N phần tử, in mảng A lên màn hình, và đếm xem
mảng A có bao nhiêu số dương :
PROGRAM VIDU101;
{ Ðếm số dương trong mảng}
Type
Kmang = Array[1..20] of Real;