7.1.3. Khai báo mảng hai chiều
VAR Tên_biến_mảng : ARRAY[chỉ_số_hàng, chỉ_số_cột] OF kiểu_phần_tử;
Trong đó:
- chỉ_số_hàng, chỉ_số_cột: là cách tổ chức các phần tử của mảng, cách truy nhập vào các phần tử của mảng, nó có thể là các kiểu dữ liệu đơn giản vô hướng đếm được, hữu hạn giá trị.
- kiểu_phần_tử: là kiểu dữ liệu của các phần tử của mảng, có thể là bất kỳ kiểu dữ liệu nào.
Ví dụ 7.4: Khai báo mảng trực tiếp:
VAR X : array[1..15,1..5] of integer;
HT: array[1..50,1..50] of string[30];
Trong khai báo trên:
- X là mảng hai chiều có thể được xem như là một ma trận có tối đa 75 (tối đa là 15 hàng và tối đa 5 cột), các phần tử có kiểu nguyên.
- HT là mảng hai chiều có thể được xem như là một ma trận có tối đa 50 hàng và 50 cột, các phần tử có kiểu xâu có tối đa 30 ký tự.
TYPE Tên_kiểu_mảng = ARRAY[chỉ_số_hàng, chỉ_số_cột] OF kiểu_ phần_tử;
VAR Tên_biến_mảng : Tên_kiểu_mảng;
* Chú ý: Trong các khai báo trên, chỉ số só thể là kiểu miền con, hoặc kiểu liệt kê vô hướng
Ví dụ 7.5: Khai báo mảng gián tiếp: khai báo mảng trực tiếp như trong ví dụ 5.1 tương đương với cách khai báo gián tiếp như sau:
TYPE M1 = array[1..15,1..5] of integer;
M2 = array[1..50,1..50] of string[30];
VAR X : M1;
HT: M2;
-
Truy cập đến từng phần tử của mảng 2 chiều theo cú pháp:
Tên_biến_mảng[chỉ_số_hàng, chỉ_số_cột]
Ví dụ 7.6: với khai báo mảng trong ví dụ 7.5
M1[1,1] là chỉ phần tử ở hàng 1, cột 1 trong mảng M1
M1[i,j] là chỉ phần tử ở hàng i, cột j trong mảng M1
* Chú ý: Thực chất mảng hai chiều là màng một chiều mà các phần tử của nó là một mảng một chiều.
7.1.4. Các phép toán trên mảng
* Phép gán:
- Có thể thực hiện gán hai biến mảng cho nhau nếu chúng cùng kiểu dữ liệu với nhau.
Ví dụ 7.7: Với khai báo mảng sau:
TYPE dayso = array[1..50] of integer;
VAR a,b:dayso; {a và b được gọi là cùng kiểu dữ liệu với nhau}
c,d: array[1..50] of integer;
{c và d cùng kiểu dữ liệu với nhau nhưng không cùng kiểu với a và b}
Ta có thể thực hiện các phép gán sau:
a:=b; b:=a; c:=d; d:=c;
- Các phần tử trong một mảng sẽ có các phép toán của kiểu dữ liệu của nó.
Ví dụ 7.8: Với khai báo mảng ở ví dụ 7.7 ta có
Các phần tử a[i] có kiểu dữ liệu là kiểu integer nên nó có mọi tính chất như một biến có kiểu integer.
* Phép so sánh
- Không được sử dung bất kỳ phép so sánh nào với biến có kiểu dữ liệu là kiểu mảng.
- Nếu kiểu phần tử của mảng có thực hiện được các phép so sánh thì có thể thực hiện các phép so sánh giữa các phần tử có cùng kiểu dữ liệu với nhau.
7.1.5. Nhập và in dữ liệu của mảng
7.1.5.1. Nhập dữ liệu cho mảng
Để nhập dữ liệu cho mảng ta cũng sử dụng câu lệnh read hay readln, tuy nhiên không được phép sử dụng các lệnh nhập dữ liệu cho biến mảng mà chỉ sử dụng cho từng phần tử trong mảng. Do vậy để nhập dữ liệu cho mảng ta phải nhập dữ liệu cho từng phần tử trong mảng.
-
Nhập dữ liệu cho mảng một chiều ta sử dụng một vòng FOR như sau:
Ví dụ cho mảng A được khai báo như sau:
Var A:array[1..100] of integer;
Nhập dữ liệu cho mảng A như sau:
For i:=1 to 100 do
Readln(A[i]);
Sử dụng vòng lặp FOR để duyệt hết mảng A, ứng với mỗi giá trị của i ta thực hiện nhập dữ liệu cho phần tử ở vị trí thứ i trong mảng A.
-
Nhập dữ liệu cho mảng hai chiều ta sử dụng hai vòng FOR lồng nhau như sau:
Ví dụ cho mảng A được khai báo như sau:
Var A:array[1..50,1..50] of integer;
Nhập dữ liệu cho mảng A như sau:
For i:=1 to 50 do
For j:=1 to 50 do
Readln(A[i,j]);
Sử dụng hai vòng lặp FOR để duyệt hết mảng A, thực hiện duyệt hết theo từng hàng một, ứng với mỗi giá trị của i ta thực hiện nhập dữ liệu cho phần tử trên hàng i, ứng với mỗi giá trị i và j ta thực hiện nhập dữ liệu cho phần tử ở vị trí hàng i, cột j trong mảng A.
7.1.5.1. In dữ liệu mảng lên màn hình
Để in dữ liệu mảng ta cũng sử dụng câu lệnh write hay writeln, tuy nhiên không được phép sử dụng các lệnh in dữ liệu cho biến mảng mà chỉ sử dụng cho từng phần tử trong mảng. Do vậy để in dữ liệu mảng lên màn hình ta phải in dữ liệu từng phần tử trong mảng.
-
In dữ liệu mảng một chiều ta sử dụng một vòng FOR như sau:
Ví dụ cho mảng A được khai báo như sau:
Var A:array[1..100] of integer;
In dữ liệu mảng A như sau:
For i:=1 to 100 do
write(A[i]:5);
Sử dụng vòng lặp FOR để duyệt hết mảng A, ứng với mỗi giá trị của i ta thực hiện in dữ liệu phần tử ở vị trí thứ i trong mảng A.
-
In dữ liệu mảng hai chiều ta sử dụng hai vòng FOR lồng nhau như sau:
Ví dụ cho mảng A được khai báo như sau:
Var A:array[1..50,1..50] of integer;
In dữ liệu mảng A theo dạng bảng như sau:
For i:=1 to 50 do
begin
For j:=1 to 50 do
write(A[i,j]);
writeln; {xuống dòng}
end;
Sử dụng hai vòng lặp FOR để duyệt hết mảng A, thực hiện duyệt hết theo từng hàng một, ứng với mỗi giá trị của i ta thực hiện in dữ liệu từng phần tử trên hàng i, in hết một hàng sẽ xuống dòng để in tiếp dòng tiếp theo, ứng với mỗi giá trị i và j ta thực hiện in dữ liệu phần tử ở vị trí hàng i, cột j lên màn hình.
Ví dụ 7.9: Viết chương trình nhập vào một dãy số có n phần tử nguyên (1<=n<=100).
-
In dãy số đó lên màn hình theo hàng.
-
Tính tổng và trung bình cộng các phần tử trong dãy số đó. In kết quả lên màn hình.
Program vidu_7_9;
Var A: array[1..100] of integer;
S, i, n: integer;
TB:real;
Begin
Write(‘ Nhap so phan tu cua day so n = ‘); readln(n);
Writeln(‘ Nhap tung phan tu trong day so :’);
For i:=1 to n do
Begin
Write(‘a[‘,i,’]= ‘);readln(a[i]);
End;
Writeln(‘ In day so vua nhap vao la ‘);
For i:=1 to n do
Write(a[i]:5);
{Tinh tong va trung binh cong}
S:=0;
For i:=1 to n do
S:=S+a[i];
TB:=S/n;
Writeln(‘ Tong cac phan tu day so S = ‘,S);
Writeln(‘ Trung binh cong TB = ’,TB:8:2);
Readln;
End.
Ví dụ 7.10: Viết chương trình nhập vào một ma trận nguyên cỡ mxn (1<=n, m<=20).
-
In ma trận đó lên màn hình theo bảng.
-
Tính tổng các phần tử âm của ma trận.
Program vidu_7_10;
Var A: array[1..20,1..20] of integer;
S, i, n: integer;
Begin
Write(‘ Nhap so hàng m = ‘); readln(m);
Write(‘ Nhap so cot n = ‘); readln(n);
Writeln(‘ Nhap tung phan tu trong ma tran :’);
For i:=1 to m do
For j:=1 to n do
Begin
Write(‘a[‘,i,’,’,j,’]= ‘);readln(a[i,j]);
End;
Writeln(‘ In ma tran vua nhap theo dang bang: ‘);
For i:=1 to m do
Begin
For j:=1 to n do
Write(a[i,j]:5);
Writeln;
End;
{Tinh tong cac so am trong ma tran}
S:=0;
For i:=1 to m do
For j:=1 to n do
If a[i,j]<0 then
S:=S+a[i,j];
Writeln(‘ Tong cac phan tu am la S = ‘,S);
Readln;
End.
0>
Chia sẻ với bạn bè của bạn: |