Tiết 1
Nhập vào nhiệt độ(trung bình) của mỗi ngày trong tuần, tính và
Nhập vào nhiệt độ(trung bình) của mỗi 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
đư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.
trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
Hãy xác định INPUT
và OUTPUT của bài
toán ?

Input: Nhiệt độ 7 ngày trong tuần.
Output: Nhiệt độ trung bình của tuần, số ngày có nhiệt độ
cao hơn nhiệt độ trung bình.
Code trang 53/54
Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 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;
W
riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);
W
riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
R
eadln;
END.
Có
real; bao nhiêu biến được khai báo
trong chường trình ?

7Các biến: t1, …,t7 thể hiện các
ngày
ực (real)nào? Kiểu của các biến đó
giá trị
thế nào?

tuần dem dùng làm gì?
Biến
7 câu lệnh IF trong chương trình
thực hiện việc gì?
gày,
hiệt
Xem kỹ lai nhá!
Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 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;
W
riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);
W
riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
R
eadln;
END.
Vậy khi nếu muốn tính
Vậy khi nếu muốn tính
bài toán trên với N ngày
bài toán trên với N ngày
lớn( N=366) thì sẽ gặp
lớn( N=366) thì sẽ gặp
khó khăn gì ?
khó khăn gì ?
Khái Niệm:
Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu ,,
Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu
mảng được đặt tên và mỗi phần tử được mang một chỉ số.
mảng được đặt tên và mỗi phần tử được mang một chỉ số.
Ví Dụ : Nhập Nhiệt Độ 7 Ngày trong tuần

A

15
15

20
20

28
28

22
22

17
17

30
30

25
25

Trong đó:
 Tên mảng : A
 Số phần tử của mảng : 7
 Kiểu dữ liệu của các phần tử : Kiểu Nguyên
 Khi tham chiếu đến một phần tử thứ i ta viết :A[i]
Ví Dụ : A[4]=22
Khái Niệm:
Để mô tả mảng 1 chiều ta cần xác dịnh kiểu của
các phần tử và cách đánh số của các phần tử đó
Với mảng một chiều ta cần quan tâm:
• Tên kiểu mảng một chiều.
• Số lượng phần tử.
• Kiểu dữ liệu của phần tử.
• Cách khai báo biến mảng.
• Cách tham chiếu đến phần tử.
Khai Báo
Khai báo kiểu mảng một chiều:
type
<Tên kiểu mảng >= array[<kiểu chỉ số>] of <kiểu phần tử>;

Trong đó:
 Array là từ khóa để khai báo báo mảng
 type: là từ khoá được dùng khi định nghĩa kiểu dữ liệu
mới.
 <Tên kiểu mảng>: là tên của kiểu mảng do chúng ta tự
đặt (lưu ý: theo qui tắc đặt tên biến trong Pascal)
 <Kiểu chỉ số>: thường là một đoạn số nguyên liên tục có dạng n1..n2
với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ
số cuối (n1≤ n2)
 <Kiểu phần tử>: kiểu dữ liệu của từng phần tử mảng (cũng là kiểu dữ
liệu của mảng)
Khai báo kiểu mảng một chiều:
Ví dụ: Các khai báo KIỂU mảng 1 chiều hợp lệ
type
ArrayInt = array [1..300] of integer;
ArrayInt = array [-n+1..n+1] of boolean;

(n là hằng
số)

ArrInt= array [-100..0] of integer;
Ví dụ: Các khai báo KIỂU mảng 1 chiều không hợp lệ
type
ArrayReal = array [1.5..300] of integer;
ArrayBoolean = array [-n+1…n +1] of boolean;
ArrInt = array [100..0] of integer;
Cú pháp khai báo 1 biến thuộc
kiểu dữ liệu chuẩn trong
Passcal
Chỉ ra phần khai báo mảng trong phần khi báo
của chương trình đươc đưa ra ở đầu bài với số
ngày N là 365 ngày?

Ý nghĩa của các khai báo trên?
Dòng 4: Khai báo kiểu mảng một chiều gồm Max
số thực.
Dòng 5 : Khai báo biến mảng Nhietdo qua kiểu
mảng
3. Khai báo biến kiểu mảng một
chiều:

a. Khai báo trực tiếp ( khai báo tường minh)

var
<Tên biến mảng>: array [ <Kiểu chỉ số>] of <Kiểu phần tử >;
Trong đó:
 <Tên biến>: do người lập trình đặt, đúng theo cú pháp đặt tên biến của
Pascal
 <Kiểu Chỉ số>: thường là một đoạn số nguyên liên tục n1..n2,
không là kiểu số thực.
 <Kiểu phần tử>: kiểu dữ liệu của các phần tử trong mảng
3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ 1: khai báo mảng 8 phần tử kiểu số
nguyên

Var
SoNguyen : array[1..8] of integer;
SoNguyen

12

23

34

25

16

70

8

1

1

2

3

4

5

6

7

8
3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ 2: khai báo mảng 10 phần tử kiểu kí tự.

Var
Kitu : array[1..10] of char;
Kitu ‘M’ ‘A’ ‘N’ ‘C’ ‘I’ ‘E’ ‘S’ ‘T’ ‘E’ ‘R’
1

2

3

4

5

6

7

8

9

10
3. Khai báo biến kiểu mảng một
chiều:Khai báo trực tiếp ( khai báo tường minh)
a.

Ví dụ 3:
Var
A : array[‘a’..’i’] of integer;

A

11

21

31

41

51

61

71

81 91

‘a’

‘b’

‘c’

‘d’

‘e’

‘f’

‘g’

‘h’

‘i’
3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)

Ví dụ 4:
Var
B : array[-5..2] of boolean;
B

true

true

false

false

true

false

true

false

-5

-4

-3

-2

-1

0

1

2
Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)
type
<Tên kiểu mảng> = array[<Kiểu chỉ số>] of < kiểu phần tử>;
var
<Tên biến>: <Tên kiểu mảng>;

Trong đó:
 <Tên kiểu mảng>: định nghĩa mảng một chiều, do người lập trình tự đặt.
 <Chỉ số>: là danh sách chỉ số để truy cập đến phần tử của mảng.
 <Kiểu phần tử>: là kiểu dữ liệu của phần tử mảng.
 <Tên biến>: là biến thuộc kiểu mảng vừa khai báo.
Chỉ số đầu và chỉ số cuối thường là các hằng số hoặc biểu thức nguyên
Chỉ số đầu <= chỉ số cuối
Giữa 2 chỉ số là ..
Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)

Ví dụ :
type
ArrayInt= array [1..100] of integer;
A: ArrayInt;
-Trước tiên, chúng ta định nghĩa ra mảng một chiều
ArrayInt gồm có 100 phần tử thuộc kiểu số nguyên
- Sau đó, khai báo biến A thuộc kiểu mảng ArrayInt
Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)

Ví dụ:
type
HocSinh = array [1..30] of String;
var
HS: HocSinh;
- Trước tiên, định nghĩa mảng Hocsinh là mảng một chiều có
30 phần tử thuộc kiểu chuỗi ký tự (String).
- Sau đó, khai báo biến HS thuộc kiểu mảng HocSinh.
Truy xuất đến phần tử của mảng 1 chiều

Mỗi phần tử của mảng được truy xuất theo tên của biến
và chỉ số của chúng nằm trong dấu ngoặc vuông ([ ])

•Cách truy xuất phần tử:
Tên mảng[vị trí];
•Ví dụ: Var B : array[ 1..8] of integer;

B
Vị trí

10

23

-5
-5

9

43

33

17

59

1

2

3

4

5

6

7

8

B[3]=
B[7]=
Chú ý: Thường sử dụng câu lệnh for-do để thực hiện thao tác nhập/xuất
với biến mảng.
Program vd1;
Uses crt;
Var
Khai báo mảng một chiều
A: Array[1..366] of integer;
i,n,dem: integer;
S,TB : real ;
BEGIN
Clrscr;
write(‘ Nhap vao so ngay : ’) ;
readln(n) ;
S := 0 ;
For i := 1 to n do
Nhập mảng một chiều
Begin
write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ;
Tính tổng
readln(A[i]) ;
S:=S+A[i] ;
End;
TB := S/ ; dem := 0 ;
n
Đếm số phần tử thỏa mãn
For i := 1 to n do
If A[i]>TB Then dem := dem+1;
điều kiện.
W
riteln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ;
W
riteln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ;
Readln ;
END.
Thao tác xử lý mảng 1 chiều
Ví Dụ : Nhập Nhiệt Độ N Ngày trong tuần

A

17
17

20
20

18
18

21
21

19
19

17
17

19
19

N=7

Nhập mảng 1 chiều
Các Bước
Các Bước

 Nhập số phần tử của
mảng
 Nhập vào giá trị của các
phần tử trong mảng(A[i])

Thể hiện bằng pascal
Thể hiện bằng pascal
-Write(‘nhap vao so ngay:’);
Readln;
-For i:=1 to n do
begin
write(‘nhiet do ngay thu’,i,’:’);
Readln(A[i]);
end;
Thao tác xử lý mảng 1 chiều
In ra màn hình mảng 1 chiều
Thông báo

Writeln(‘Mang vua nhap:’);

In giá trị của phần tử

For i:=1 to n do Write(A[i]:5);

Kết quả in ra màn hình
Mảng vừa nhập : 17 20 18 21 19 17 19
Thao tác xử lý mảng 1 chiều
Thao tác xử lý khác
 Đếm số ngày có nhiệt độ
cao hơn nhiệt độ TB của
tuần.

i
A[]
Dem = 0

1

3

2
20
20

0
+1

18
18

1

17
17

1

-Dem:=0;
For i:=1 to n do
if A[i]>TB then
dem:=dem+1;

4
21
21

5
19
19

2
+1

3
+1

6
17
17

7
19
19

3

4
+1

TB = 18.7
Hãy nhớ
 Mảng 1 chiều là 1 dãy hữu hạn các phần
tử cùng kiểu
 Khai báo : tên mảng , chỉ số đầu chỉ số
cuối , kiểu phần tử
 Tham chiếu phần tử mảng :
Tenbienmang[chisophantu]
 Nhiều thao tác xử lý mảng dùng cấu trúc
lặp FOR..TO..Do
Tiết 1
2
Một số ví dụ
Ví dụ 1 : Tìm phần tử lớn nhất của một dãy số
nguyên .
Input : Số nguyên dương N và dãy số A1, A2, ….., AN
Output : Chỉ số và giá trị của số lớn nhất trong dãy
Ý tưởng :
+ Đặt số A1 là số lớn nhất (max)
+ Cho i lặp từ 2 đến N, nếu A[i]> thì đổi max = A[i] vả
lưu lại vị trí i .
MAX

Quả này lớn
nhất

Quả này lớn
mới lớn nhất

Không !Quả này lớn
mới lớn nhất
Các em hãy cho biết các việc chính cần thực
hiện trong chương trình là gì?
- Cho biết số ptử của mảng A.
- Nhập giá trị cho các ptử của mảng A.
- Xuất ra giá trị Max là phần tử thứ mấy.

Cho biết các biến chính cần sử dụng là gì?
- Mảng A
- Các biến đơn: N, i, Max, csmax

Viết phần khai báo các biến đó?
Var a : array[1..250] of integer ;
n,i,max,csmax : Integer ;
Thuật toán
1. NhËp n vµ d·y a1,...,an;

Bằng Pascal
Write(‘ Nhap vao so luong phan tu:’);
Readln(n);
For i:=1 to n do
begin
write(‘ Phan tu thu ’ ,i, ’ = ’);
readln(a[i])
end;

2. Max ← a1 ; i ← 1;

Max:=a[1]; csmax:=1;

3. NÕu i>N ®­a ra MAX vµ
chØ sè i => KÕt thóc;

For i :=2 to n do

4. NÕu a[i]>max th× max←a[i],
i ← i+1 => quay l¹i b­íc 3.

IF a[i]>max then
begin
max:=a[i];
csmax:=i;
end;
Code chương trình :
Program vd1;
Uses crt;
Khai báo
const Nmax =250;
type
Arrint =array[1..Nmax] of integer;

Max:=A[1] ; csmax :=1 ;
For 1:= 2 to N do
if A[i] > Max then
begin
Max:=A[i];
csmax :=1;
end;
Writeln(‘Gia tri cua pt max : ’, Max);
Writeln(‘Chi so cua pt max : ’, csmax);
Readln
End
kiểm tra lần lượt tất cả
các phần tử của mảng
từ A[1] đến A[n]

Var
N,I,Max,csmax : integer
A: ArrInt;
begin
Clrscr;
write(‘ Nhap so luong phan tu cua dayso, n
= ');
readln(n);
for i:=i to n do (*nhap cac phan tu *)
begin
write ('phan tu thu ;,i,' ='); readln(A[i]);
end;
Tạo giá trị cho các phần tử
của mảng A
Chương trình chạy và cho kết quả sau :
Nhap vao so phan tu cua day so :
Phan tu thu 1 =
Phan tu thu 2 =
Phan tu thu 3 =

15

Phan tu thu 4 =

25

Phan tu thu 5 =

18

Phan tu thu 6 =

12

Phan tu thu 7 =

19

20
16

Gia tri cua phan tu Max : 25
Chi so cua phan tu Max : 4

7
Tiết 1
3
Ví dụ 2:
Sắp xếp dãy số nguyên bằng thuật toán tráo đổi
Input: Số nguyên dương N (N<= 250) và dãy A
gồm N số nguyên dương A1, A2, …, AN, mỗi số
đều không vượt quá 500.
Output: Dãy số A đã được sắp xếp thành dãy
không giảm
(chương trình SGK).
Ở lớp 10 ta đã xây dựng thuật toán cho bài toán này
rồi. Các bạn hãy nhắc lại thuật toán ???
Là thuật toán tráo đổi kiểu nổi bọt từ trên xuống
Giả sử :
Mỗi phần tử được xem như một bọt nước
Trọng lượng của bọt nước thứ I là giá trị của A[i]
Lượt 1:
2:

3
2
9
7
6

I chạy từ đầu dãy đến vị trí
>Ichạy từ đầu dãy đến vị trí [cuối
dãy - 1]
[cuối dãy – 2] (bỏ qua phần
Khi a[i]>
từ cuối) a[i+1] tức là bọt nước
trên nặng hơn bọt nước dưới
> Sau lượt thứ 2 bọt nước có
=> bọt nước trên chìm xuống và
trọng lượng lớn thứ 2 nằm
bọt nước dưới nổi lên (tráo đổi
sát trên bọt nước lớn
vị trí)
>Quá trình duyệt , tráo đổi
được lập đi lập lại cho đến
Sau lượt thứ nhất , bọt
khi chỉ còn duyệt hai phần tử
nước được dãy không giảm
và thu có trọng lượng lớn
nhất sẽ chìm xuống đáy
1 Sè phÇn tö ë c¸c l­ît duyÖt (j) sÏ gi¶m tõ n xuèng hai phÇn tö.
Các em hãy cho
biết trong pascal
nhận xét 1 được
thực hiện bằng
lệnh gì

2 T¹i mçi l­ît duyÖt:
- Cho i ch¹y tõ 1 ®Õn sè phÇn tö -1,
nÕu A[i]>A[i+1] th×
tr¸o ®æi vÞ trÝ A[i] vµ A[i+1]
th«ng qua biÕn trung gian (Tg).

For j := n downto 2 do
For i := 1 to j-1 do
IF A[i]>A[i+1] then
Begin
Tg := A[i];
A[i] := A[i+1];
A[i+1]:=Tg;
end;
Code chương trình :
Program vd2;
Uses crt;
Khai báo
const Nmax =250;
type
Arrint =array[1..Nmax] of integer;
Var
N,i,j,t: integer;
begin
Clrscr;
write(‘ Nhap so luong phan tu cua day
so, n = ');
readln(n);
for i:=i to n do (*nhap cac phan tu *)
begin
write ('phan tu thu ;,i,' =');
readln(A[i]);
end;

for j:=n downto 2 do
for i:=1 to j-1 do
if A[i]> A [i+1] them
Begin
t:=A[i];
A[i];=A[i+1];
A[i+1]:=t;
end ;
writeln(' day so duoc sap xep la: ');
for i:=1 to N do wirte A[i]:4);
readln
end ;
(Xử lý mảng thuật nổi bọt *trao
doi A[i] va A[i=1]*)
Tạo giá trị cho các
phần tử của mảng
Ví dụ 3: tìm kiếm nhị phân
Input: dãy A la dãy tăng gồm N (N<=250) số
nguyên dương A1,A2,.....,Anvaf số nguyên k.
Output: Chỉ số i mà Ai=k hoặc thông báo
"khong tim thay " nếu không co sô hạng của
dãy A có giá trị bằng K.
C¸ch 1: T×m kiÕm tuÇn tù
Lần lượt từ số hạng thứ nhất ,so sánh giá trị số hạng
đang xét với k cho đến khi gặp được số hạng bằng k ,
hoặc dạy đã được xét hết và không có số hạng nào có
giá trị bằng k
Các em hãy
Tim_thay := false;
nêu cách giải
For i := 1 to n do
bài toán trên
Từ ý tưởng trên hãy
IF A[i] = k then
viết đoạn chương
trình PASCAL đề
Begin
Tim_thay:=true;
tìm số hạng của dãy
cs:=i;
có giá trị bằng k?
break;
end;
IF tim_thay then writeln(‘Chi so tim duoc: ’,i)
else writeln(‘Khong tim thay’);
C¸ch 2: T×m kiÕm nhÞ ph©n
Với k =21 và dãy A gồm 10 số hạng như sau
A

2

4

5

6

9 21 22 30 31 33

i

1

2

3

4

5

6

7

8

9 10

Lượt thứ nhất : agiữa là a5 = 9; 9 < 21
Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a10;
Lượt thứ hai : agiữa là a8 = 30; 30 > 21
Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a7;
Lượt thứ ba : agiữa là a6 = 21; 21= 21

Vậy chỉ số cần tìm là i = 6.
Vì dãy A là dãy tăng , ta thực hiện thu hẹp nhanh phạm vi tìm kiếm
bằng cách so sánh k với A[giua] và xét các trường hợp
- A[giua]=k  Tìm thấy chỉ số giữa và kết thúc;
- A[giua]>k  Thu hẹp về phía bên trái (Cuối = Giữa - 1);
- A[giua]<k  Thu hẹp về phía bên phải (Đầu = Giữa + 1);

Quá trình trên được lặp lại chừng nào còn tìm thấy hoặc
Dau <= Cuoi
Dau:=1; Cuoi:=n; tim_thay:=false;
while ( Dau<= Cuoi) or AND (tim_thay) do
Begin
Giua:= (Dau+Cuoi) div 2;
IF A[giua] = k then Tim_thay :=true
else
IF (A[Giua]>k) then Cuoi := Giua – 1
else Dau := Giua +1;
end;
IF Tim_thay then W
riteln(‘ Chi so tim duoc la : ’,Giua)
Else W
riteln(‘Khong tim thay’);
Code chương trình :
begin
write (phan tu thu ',i'=');
readln (a[i]);
uses crt;
end ;
const;
write ('nhap gia tri k =');
Nmax =250;
readln(k0;
type arrint =array [1..Nmax] of integer;
dau:= 1; cuoi : =N; tim_thay: = false ;
var
while (dau<= cuoi) and not (tim_thay) do
n,i,k : integer;
begin giua:=(dau +cuoi) div 2;
dau, cuoi, giua: integer
if A [giua] =k then
A:arrint;
tim_thay:= true
tim_thay: boolean;
else
begin clrscr;
write('nhap so luong phan tu cua day so, n if A [giua]>k them cuoi :=giua -1
elsc dau:=giua +1;
=');
end ;
readln(n0;
if tim_thay them wrieln (chi so tim duoc
writeln('nhap cac pham tu cua day so
la:',giua)
tang:');
else writeln ('khong tim thay');
for i: =1 to n do
readln
end ;
program TK-nhiphan;
Tiết 1
4
Kiểu mảng 2 chiều
a. Khái niệm :
Là mảng một chiều mà mỗi phần tử của nó là mảng
một chiều
1

Ví dụ :

A
Trong đó :
 Tên mảng : A

2

3

4

1

1 4 7 6

2

9 2 8 3

3

5 3 9 7

 Mảng gồm: 3 dòng 4 cột
 Kiểu dữ liệu của các phần từ : kiểu nguyên
 Khi tham chiếu đến phần tử ở dòng i cột j ta viết :
A[i,j]. Ví dụ :A[2,3]= 8.
b. Khai báo mảng 2 chiều :
* Cách 1: Khai báo gián tiếp
TYPE < tên kiểu mảng> = array[kiểu chỉ số hàng , kiều chỉ số cột] of
<kiểu phần tử>;
Var <ds biến mảng> : <tên kiểu mảng>;
Ví dụ : TYPE Bang = array[1..9,1..9] of integer;
Var A: Bang;

* Cách 2 : Khai báo trực tiếp
Var < Ds biến mảng> : array[kiểu chỉ số hàng , kiều chỉ số cột] of
<kiểu phần tử>;
Ví dụ : Var Bang: array[1..9,1..9] of integer;
Var

A,B: array[1..20,1..30] of real;
c. Thao tác xử lý mảng 2 chiều

1

2

3

4

Các bước
1. Nhập số dòng (n) và số cột (m)

1 4 7 6
9 2 8 3

3

A

1
2

Nhập mảng 2 chiều

5 3 9 7
Bằng Pascal

Write(‘ Nhap vao so dong, cot:’);
Readln(n,m);

2.Nhập giá trị của các phần tử
trong mảng (A[i,j]).

For i:= 1 to n do
For j:=1 to m do
Begin
write(‘A[’,i,j,’ ] = ’ );
readln(A[i,j]);
end;
d. In mảng 2 chiều
1.Thông báo

Writeln(‘ Mang vua nhap : ’);

2.In giá trị của các phần tử

For i:=1 to n do
Begin

Kết quả in ra màn hình

For j:=1 to m do Write(A[i,j],’ ’);
Writeln;

Mang vua nhap:
1 4 7 6
9 2 8 3
5 3 9 7

end;
Các thao tác xử lý mảng 2 chiều thường dùng
hai câu lệnh FOR … DO lồng nhau
E . Các thao tác xử lý khác :
Vì dụ : Tính và in ra màn hình bảng cửu chương
Tính

Quan sát bảng cửu chương ta thấy :
For i :=1 to 9 do
A[2,5]=2 x 5 = 10
For j:=1 to 9 do
A[i,j]=i* j
A[5,8]=5 x 8 = 40
A[i,j] := i*j;
In ra màn hình
For i :=1 to 9 do
Begin
For j:=1 to 9 do write(A[i,j]:5);
writeln; writeln;
End;

1

2

3

4

5

Viết chương trình
2
4
6
8 10
hoàn chỉnh cho ví
3
6
9 12 15
dụ này

6

7

8

9

12

14

16

18

18

21

24

27

4

8

12

16

20

24

28

32

36

5

10

15

20

25

30

35

40

45

6

12

18

24

30

36

42

48

54

7

14

21

28

35

42

49

56

63

8

16

24

32

40

48

56

64

72

9

18

27

36

45

54

63

72

81
Bai11

Bai11

  • 2.
  • 3.
    Nhập vào nhiệtđộ(trung bình) của mỗi ngày trong tuần, tính và Nhập vào nhiệt độ(trung bình) của mỗi 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 đư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. trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần. Hãy xác định INPUT và OUTPUT của bài toán ? Input: Nhiệt độ 7 ngày trong tuần. Output: Nhiệt độ trung bình của tuần, số ngày có nhiệt độ cao hơn nhiệt độ trung bình.
  • 4.
    Code trang 53/54 Programvd1; Uses crt; Var t1,t2,t3,t4,t5,t6,t7,tb : real; dem : integer; BEGIN Clrscr; write(‘ Nhap vao nhiet do 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; W riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2); W riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem); R eadln; END.
  • 5.
    Có real; bao nhiêubiến được khai báo trong chường trình ? 7Các biến: t1, …,t7 thể hiện các ngày ực (real)nào? Kiểu của các biến đó giá trị thế nào? tuần dem dùng làm gì? Biến 7 câu lệnh IF trong chương trình thực hiện việc gì? gày, hiệt
  • 6.
    Xem kỹ lainhá! Program vd1; Uses crt; Var t1,t2,t3,t4,t5,t6,t7,tb : real; dem : integer; BEGIN Clrscr; write(‘ Nhap vao nhiet do 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; W riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2); W riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem); R eadln; END.
  • 7.
    Vậy khi nếumuốn tính Vậy khi nếu muốn tính bài toán trên với N ngày bài toán trên với N ngày lớn( N=366) thì sẽ gặp lớn( N=366) thì sẽ gặp khó khăn gì ? khó khăn gì ?
  • 8.
    Khái Niệm: Mảng mộtchiều là dãy hữu hạn các phần tử cùng kiểu ,, Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu mảng được đặt tên và mỗi phần tử được mang một chỉ số. mảng được đặt tên và mỗi phần tử được mang một chỉ số. Ví Dụ : Nhập Nhiệt Độ 7 Ngày trong tuần A 15 15 20 20 28 28 22 22 17 17 30 30 25 25 Trong đó:  Tên mảng : A  Số phần tử của mảng : 7  Kiểu dữ liệu của các phần tử : Kiểu Nguyên  Khi tham chiếu đến một phần tử thứ i ta viết :A[i] Ví Dụ : A[4]=22
  • 9.
    Khái Niệm: Để môtả mảng 1 chiều ta cần xác dịnh kiểu của các phần tử và cách đánh số của các phần tử đó Với mảng một chiều ta cần quan tâm: • Tên kiểu mảng một chiều. • Số lượng phần tử. • Kiểu dữ liệu của phần tử. • Cách khai báo biến mảng. • Cách tham chiếu đến phần tử.
  • 10.
    Khai Báo Khai báokiểu mảng một chiều: type <Tên kiểu mảng >= array[<kiểu chỉ số>] of <kiểu phần tử>; Trong đó:  Array là từ khóa để khai báo báo mảng  type: là từ khoá được dùng khi định nghĩa kiểu dữ liệu mới.  <Tên kiểu mảng>: là tên của kiểu mảng do chúng ta tự đặt (lưu ý: theo qui tắc đặt tên biến trong Pascal)  <Kiểu chỉ số>: thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ số cuối (n1≤ n2)  <Kiểu phần tử>: kiểu dữ liệu của từng phần tử mảng (cũng là kiểu dữ liệu của mảng)
  • 11.
    Khai báo kiểumảng một chiều: Ví dụ: Các khai báo KIỂU mảng 1 chiều hợp lệ type ArrayInt = array [1..300] of integer; ArrayInt = array [-n+1..n+1] of boolean; (n là hằng số) ArrInt= array [-100..0] of integer; Ví dụ: Các khai báo KIỂU mảng 1 chiều không hợp lệ type ArrayReal = array [1.5..300] of integer; ArrayBoolean = array [-n+1…n +1] of boolean; ArrInt = array [100..0] of integer;
  • 12.
    Cú pháp khaibáo 1 biến thuộc kiểu dữ liệu chuẩn trong Passcal
  • 13.
    Chỉ ra phầnkhai báo mảng trong phần khi báo của chương trình đươc đưa ra ở đầu bài với số ngày N là 365 ngày? Ý nghĩa của các khai báo trên? Dòng 4: Khai báo kiểu mảng một chiều gồm Max số thực. Dòng 5 : Khai báo biến mảng Nhietdo qua kiểu mảng
  • 14.
    3. Khai báobiến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) var <Tên biến mảng>: array [ <Kiểu chỉ số>] of <Kiểu phần tử >; Trong đó:  <Tên biến>: do người lập trình đặt, đúng theo cú pháp đặt tên biến của Pascal  <Kiểu Chỉ số>: thường là một đoạn số nguyên liên tục n1..n2, không là kiểu số thực.  <Kiểu phần tử>: kiểu dữ liệu của các phần tử trong mảng
  • 15.
    3. Khai báobiến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) Ví dụ 1: khai báo mảng 8 phần tử kiểu số nguyên Var SoNguyen : array[1..8] of integer; SoNguyen 12 23 34 25 16 70 8 1 1 2 3 4 5 6 7 8
  • 16.
    3. Khai báobiến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) Ví dụ 2: khai báo mảng 10 phần tử kiểu kí tự. Var Kitu : array[1..10] of char; Kitu ‘M’ ‘A’ ‘N’ ‘C’ ‘I’ ‘E’ ‘S’ ‘T’ ‘E’ ‘R’ 1 2 3 4 5 6 7 8 9 10
  • 17.
    3. Khai báobiến kiểu mảng một chiều:Khai báo trực tiếp ( khai báo tường minh) a. Ví dụ 3: Var A : array[‘a’..’i’] of integer; A 11 21 31 41 51 61 71 81 91 ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘g’ ‘h’ ‘i’
  • 18.
    3. Khai báobiến kiểu mảng một chiều: a. Khai báo trực tiếp ( khai báo tường minh) Ví dụ 4: Var B : array[-5..2] of boolean; B true true false false true false true false -5 -4 -3 -2 -1 0 1 2
  • 19.
    Khai báo biếnkiểu mảng một chiều Khai báo gián tiếp ( khai báo không tường minh) (tt) type <Tên kiểu mảng> = array[<Kiểu chỉ số>] of < kiểu phần tử>; var <Tên biến>: <Tên kiểu mảng>; Trong đó:  <Tên kiểu mảng>: định nghĩa mảng một chiều, do người lập trình tự đặt.  <Chỉ số>: là danh sách chỉ số để truy cập đến phần tử của mảng.  <Kiểu phần tử>: là kiểu dữ liệu của phần tử mảng.  <Tên biến>: là biến thuộc kiểu mảng vừa khai báo. Chỉ số đầu và chỉ số cuối thường là các hằng số hoặc biểu thức nguyên Chỉ số đầu <= chỉ số cuối Giữa 2 chỉ số là ..
  • 20.
    Khai báo biếnkiểu mảng một chiều Khai báo gián tiếp ( khai báo không tường minh) (tt) Ví dụ : type ArrayInt= array [1..100] of integer; A: ArrayInt; -Trước tiên, chúng ta định nghĩa ra mảng một chiều ArrayInt gồm có 100 phần tử thuộc kiểu số nguyên - Sau đó, khai báo biến A thuộc kiểu mảng ArrayInt
  • 21.
    Khai báo biếnkiểu mảng một chiều Khai báo gián tiếp ( khai báo không tường minh) (tt) Ví dụ: type HocSinh = array [1..30] of String; var HS: HocSinh; - Trước tiên, định nghĩa mảng Hocsinh là mảng một chiều có 30 phần tử thuộc kiểu chuỗi ký tự (String). - Sau đó, khai báo biến HS thuộc kiểu mảng HocSinh.
  • 22.
    Truy xuất đếnphần tử của mảng 1 chiều Mỗi phần tử của mảng được truy xuất theo tên của biến và chỉ số của chúng nằm trong dấu ngoặc vuông ([ ]) •Cách truy xuất phần tử: Tên mảng[vị trí]; •Ví dụ: Var B : array[ 1..8] of integer; B Vị trí 10 23 -5 -5 9 43 33 17 59 1 2 3 4 5 6 7 8 B[3]= B[7]= Chú ý: Thường sử dụng câu lệnh for-do để thực hiện thao tác nhập/xuất với biến mảng.
  • 23.
    Program vd1; Uses crt; Var Khaibáo mảng một chiều A: Array[1..366] of integer; i,n,dem: integer; S,TB : real ; BEGIN Clrscr; write(‘ Nhap vao so ngay : ’) ; readln(n) ; S := 0 ; For i := 1 to n do Nhập mảng một chiều Begin write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ; Tính tổng readln(A[i]) ; S:=S+A[i] ; End; TB := S/ ; dem := 0 ; n Đếm số phần tử thỏa mãn For i := 1 to n do If A[i]>TB Then dem := dem+1; điều kiện. W riteln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ; W riteln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ; Readln ; END.
  • 24.
    Thao tác xửlý mảng 1 chiều Ví Dụ : Nhập Nhiệt Độ N Ngày trong tuần A 17 17 20 20 18 18 21 21 19 19 17 17 19 19 N=7 Nhập mảng 1 chiều Các Bước Các Bước  Nhập số phần tử của mảng  Nhập vào giá trị của các phần tử trong mảng(A[i]) Thể hiện bằng pascal Thể hiện bằng pascal -Write(‘nhap vao so ngay:’); Readln; -For i:=1 to n do begin write(‘nhiet do ngay thu’,i,’:’); Readln(A[i]); end;
  • 25.
    Thao tác xửlý mảng 1 chiều In ra màn hình mảng 1 chiều Thông báo Writeln(‘Mang vua nhap:’); In giá trị của phần tử For i:=1 to n do Write(A[i]:5); Kết quả in ra màn hình Mảng vừa nhập : 17 20 18 21 19 17 19
  • 26.
    Thao tác xửlý mảng 1 chiều Thao tác xử lý khác  Đếm số ngày có nhiệt độ cao hơn nhiệt độ TB của tuần. i A[] Dem = 0 1 3 2 20 20 0 +1 18 18 1 17 17 1 -Dem:=0; For i:=1 to n do if A[i]>TB then dem:=dem+1; 4 21 21 5 19 19 2 +1 3 +1 6 17 17 7 19 19 3 4 +1 TB = 18.7
  • 27.
    Hãy nhớ  Mảng1 chiều là 1 dãy hữu hạn các phần tử cùng kiểu  Khai báo : tên mảng , chỉ số đầu chỉ số cuối , kiểu phần tử  Tham chiếu phần tử mảng : Tenbienmang[chisophantu]  Nhiều thao tác xử lý mảng dùng cấu trúc lặp FOR..TO..Do
  • 28.
  • 29.
    Một số vídụ Ví dụ 1 : Tìm phần tử lớn nhất của một dãy số nguyên . Input : Số nguyên dương N và dãy số A1, A2, ….., AN Output : Chỉ số và giá trị của số lớn nhất trong dãy Ý tưởng : + Đặt số A1 là số lớn nhất (max) + Cho i lặp từ 2 đến N, nếu A[i]> thì đổi max = A[i] vả lưu lại vị trí i .
  • 30.
    MAX Quả này lớn nhất Quảnày lớn mới lớn nhất Không !Quả này lớn mới lớn nhất
  • 31.
    Các em hãycho biết các việc chính cần thực hiện trong chương trình là gì? - Cho biết số ptử của mảng A. - Nhập giá trị cho các ptử của mảng A. - Xuất ra giá trị Max là phần tử thứ mấy. Cho biết các biến chính cần sử dụng là gì? - Mảng A - Các biến đơn: N, i, Max, csmax Viết phần khai báo các biến đó? Var a : array[1..250] of integer ; n,i,max,csmax : Integer ;
  • 32.
    Thuật toán 1. NhËpn vµ d·y a1,...,an; Bằng Pascal Write(‘ Nhap vao so luong phan tu:’); Readln(n); For i:=1 to n do begin write(‘ Phan tu thu ’ ,i, ’ = ’); readln(a[i]) end; 2. Max ← a1 ; i ← 1; Max:=a[1]; csmax:=1; 3. NÕu i>N ®­a ra MAX vµ chØ sè i => KÕt thóc; For i :=2 to n do 4. NÕu a[i]>max th× max←a[i], i ← i+1 => quay l¹i b­íc 3. IF a[i]>max then begin max:=a[i]; csmax:=i; end;
  • 33.
    Code chương trình: Program vd1; Uses crt; Khai báo const Nmax =250; type Arrint =array[1..Nmax] of integer; Max:=A[1] ; csmax :=1 ; For 1:= 2 to N do if A[i] > Max then begin Max:=A[i]; csmax :=1; end; Writeln(‘Gia tri cua pt max : ’, Max); Writeln(‘Chi so cua pt max : ’, csmax); Readln End kiểm tra lần lượt tất cả các phần tử của mảng từ A[1] đến A[n] Var N,I,Max,csmax : integer A: ArrInt; begin Clrscr; write(‘ Nhap so luong phan tu cua dayso, n = '); readln(n); for i:=i to n do (*nhap cac phan tu *) begin write ('phan tu thu ;,i,' ='); readln(A[i]); end; Tạo giá trị cho các phần tử của mảng A
  • 34.
    Chương trình chạyvà cho kết quả sau : Nhap vao so phan tu cua day so : Phan tu thu 1 = Phan tu thu 2 = Phan tu thu 3 = 15 Phan tu thu 4 = 25 Phan tu thu 5 = 18 Phan tu thu 6 = 12 Phan tu thu 7 = 19 20 16 Gia tri cua phan tu Max : 25 Chi so cua phan tu Max : 4 7
  • 35.
  • 36.
    Ví dụ 2: Sắpxếp dãy số nguyên bằng thuật toán tráo đổi Input: Số nguyên dương N (N<= 250) và dãy A gồm N số nguyên dương A1, A2, …, AN, mỗi số đều không vượt quá 500. Output: Dãy số A đã được sắp xếp thành dãy không giảm (chương trình SGK). Ở lớp 10 ta đã xây dựng thuật toán cho bài toán này rồi. Các bạn hãy nhắc lại thuật toán ??? Là thuật toán tráo đổi kiểu nổi bọt từ trên xuống
  • 37.
    Giả sử : Mỗiphần tử được xem như một bọt nước Trọng lượng của bọt nước thứ I là giá trị của A[i] Lượt 1: 2: 3 2 9 7 6 I chạy từ đầu dãy đến vị trí >Ichạy từ đầu dãy đến vị trí [cuối dãy - 1] [cuối dãy – 2] (bỏ qua phần Khi a[i]> từ cuối) a[i+1] tức là bọt nước trên nặng hơn bọt nước dưới > Sau lượt thứ 2 bọt nước có => bọt nước trên chìm xuống và trọng lượng lớn thứ 2 nằm bọt nước dưới nổi lên (tráo đổi sát trên bọt nước lớn vị trí) >Quá trình duyệt , tráo đổi được lập đi lập lại cho đến Sau lượt thứ nhất , bọt khi chỉ còn duyệt hai phần tử nước được dãy không giảm và thu có trọng lượng lớn nhất sẽ chìm xuống đáy
  • 38.
    1 Sè phÇntö ë c¸c l­ît duyÖt (j) sÏ gi¶m tõ n xuèng hai phÇn tö. Các em hãy cho biết trong pascal nhận xét 1 được thực hiện bằng lệnh gì 2 T¹i mçi l­ît duyÖt: - Cho i ch¹y tõ 1 ®Õn sè phÇn tö -1, nÕu A[i]>A[i+1] th× tr¸o ®æi vÞ trÝ A[i] vµ A[i+1] th«ng qua biÕn trung gian (Tg). For j := n downto 2 do For i := 1 to j-1 do IF A[i]>A[i+1] then Begin Tg := A[i]; A[i] := A[i+1]; A[i+1]:=Tg; end;
  • 39.
    Code chương trình: Program vd2; Uses crt; Khai báo const Nmax =250; type Arrint =array[1..Nmax] of integer; Var N,i,j,t: integer; begin Clrscr; write(‘ Nhap so luong phan tu cua day so, n = '); readln(n); for i:=i to n do (*nhap cac phan tu *) begin write ('phan tu thu ;,i,' ='); readln(A[i]); end; for j:=n downto 2 do for i:=1 to j-1 do if A[i]> A [i+1] them Begin t:=A[i]; A[i];=A[i+1]; A[i+1]:=t; end ; writeln(' day so duoc sap xep la: '); for i:=1 to N do wirte A[i]:4); readln end ; (Xử lý mảng thuật nổi bọt *trao doi A[i] va A[i=1]*) Tạo giá trị cho các phần tử của mảng
  • 40.
    Ví dụ 3:tìm kiếm nhị phân Input: dãy A la dãy tăng gồm N (N<=250) số nguyên dương A1,A2,.....,Anvaf số nguyên k. Output: Chỉ số i mà Ai=k hoặc thông báo "khong tim thay " nếu không co sô hạng của dãy A có giá trị bằng K.
  • 41.
    C¸ch 1: T×mkiÕm tuÇn tù Lần lượt từ số hạng thứ nhất ,so sánh giá trị số hạng đang xét với k cho đến khi gặp được số hạng bằng k , hoặc dạy đã được xét hết và không có số hạng nào có giá trị bằng k Các em hãy Tim_thay := false; nêu cách giải For i := 1 to n do bài toán trên Từ ý tưởng trên hãy IF A[i] = k then viết đoạn chương trình PASCAL đề Begin Tim_thay:=true; tìm số hạng của dãy cs:=i; có giá trị bằng k? break; end; IF tim_thay then writeln(‘Chi so tim duoc: ’,i) else writeln(‘Khong tim thay’);
  • 42.
    C¸ch 2: T×mkiÕm nhÞ ph©n Với k =21 và dãy A gồm 10 số hạng như sau A 2 4 5 6 9 21 22 30 31 33 i 1 2 3 4 5 6 7 8 9 10 Lượt thứ nhất : agiữa là a5 = 9; 9 < 21 Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a10; Lượt thứ hai : agiữa là a8 = 30; 30 > 21 Vùng tìm kiếm thu hẹp trong phạm vi từ a6 a7; Lượt thứ ba : agiữa là a6 = 21; 21= 21 Vậy chỉ số cần tìm là i = 6.
  • 43.
    Vì dãy Alà dãy tăng , ta thực hiện thu hẹp nhanh phạm vi tìm kiếm bằng cách so sánh k với A[giua] và xét các trường hợp - A[giua]=k  Tìm thấy chỉ số giữa và kết thúc; - A[giua]>k  Thu hẹp về phía bên trái (Cuối = Giữa - 1); - A[giua]<k  Thu hẹp về phía bên phải (Đầu = Giữa + 1); Quá trình trên được lặp lại chừng nào còn tìm thấy hoặc Dau <= Cuoi Dau:=1; Cuoi:=n; tim_thay:=false; while ( Dau<= Cuoi) or AND (tim_thay) do Begin Giua:= (Dau+Cuoi) div 2; IF A[giua] = k then Tim_thay :=true else IF (A[Giua]>k) then Cuoi := Giua – 1 else Dau := Giua +1; end; IF Tim_thay then W riteln(‘ Chi so tim duoc la : ’,Giua) Else W riteln(‘Khong tim thay’);
  • 44.
    Code chương trình: begin write (phan tu thu ',i'='); readln (a[i]); uses crt; end ; const; write ('nhap gia tri k ='); Nmax =250; readln(k0; type arrint =array [1..Nmax] of integer; dau:= 1; cuoi : =N; tim_thay: = false ; var while (dau<= cuoi) and not (tim_thay) do n,i,k : integer; begin giua:=(dau +cuoi) div 2; dau, cuoi, giua: integer if A [giua] =k then A:arrint; tim_thay:= true tim_thay: boolean; else begin clrscr; write('nhap so luong phan tu cua day so, n if A [giua]>k them cuoi :=giua -1 elsc dau:=giua +1; ='); end ; readln(n0; if tim_thay them wrieln (chi so tim duoc writeln('nhap cac pham tu cua day so la:',giua) tang:'); else writeln ('khong tim thay'); for i: =1 to n do readln end ; program TK-nhiphan;
  • 45.
  • 46.
    Kiểu mảng 2chiều a. Khái niệm : Là mảng một chiều mà mỗi phần tử của nó là mảng một chiều 1 Ví dụ : A Trong đó :  Tên mảng : A 2 3 4 1 1 4 7 6 2 9 2 8 3 3 5 3 9 7  Mảng gồm: 3 dòng 4 cột  Kiểu dữ liệu của các phần từ : kiểu nguyên  Khi tham chiếu đến phần tử ở dòng i cột j ta viết : A[i,j]. Ví dụ :A[2,3]= 8.
  • 47.
    b. Khai báomảng 2 chiều : * Cách 1: Khai báo gián tiếp TYPE < tên kiểu mảng> = array[kiểu chỉ số hàng , kiều chỉ số cột] of <kiểu phần tử>; Var <ds biến mảng> : <tên kiểu mảng>; Ví dụ : TYPE Bang = array[1..9,1..9] of integer; Var A: Bang; * Cách 2 : Khai báo trực tiếp Var < Ds biến mảng> : array[kiểu chỉ số hàng , kiều chỉ số cột] of <kiểu phần tử>; Ví dụ : Var Bang: array[1..9,1..9] of integer; Var A,B: array[1..20,1..30] of real;
  • 48.
    c. Thao tácxử lý mảng 2 chiều 1 2 3 4 Các bước 1. Nhập số dòng (n) và số cột (m) 1 4 7 6 9 2 8 3 3 A 1 2 Nhập mảng 2 chiều 5 3 9 7 Bằng Pascal Write(‘ Nhap vao so dong, cot:’); Readln(n,m); 2.Nhập giá trị của các phần tử trong mảng (A[i,j]). For i:= 1 to n do For j:=1 to m do Begin write(‘A[’,i,j,’ ] = ’ ); readln(A[i,j]); end;
  • 49.
    d. In mảng2 chiều 1.Thông báo Writeln(‘ Mang vua nhap : ’); 2.In giá trị của các phần tử For i:=1 to n do Begin Kết quả in ra màn hình For j:=1 to m do Write(A[i,j],’ ’); Writeln; Mang vua nhap: 1 4 7 6 9 2 8 3 5 3 9 7 end; Các thao tác xử lý mảng 2 chiều thường dùng hai câu lệnh FOR … DO lồng nhau
  • 50.
    E . Cácthao tác xử lý khác : Vì dụ : Tính và in ra màn hình bảng cửu chương Tính Quan sát bảng cửu chương ta thấy : For i :=1 to 9 do A[2,5]=2 x 5 = 10 For j:=1 to 9 do A[i,j]=i* j A[5,8]=5 x 8 = 40 A[i,j] := i*j; In ra màn hình For i :=1 to 9 do Begin For j:=1 to 9 do write(A[i,j]:5); writeln; writeln; End; 1 2 3 4 5 Viết chương trình 2 4 6 8 10 hoàn chỉnh cho ví 3 6 9 12 15 dụ này 6 7 8 9 12 14 16 18 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81