CHƯƠNG 4:
KIỂU DỮ LIỆU CÓ CẤU TRÚC
_⸙_ KIỂU MẢNG _⸙_
GV: Trần Thị Kim Cương
1. Kiểu Mảng 1 chiều
Khái niệm mảng 1 chiều
Cú pháp khai báo biến kiểu mảng 1 chiều
Một số ví dụ
- Khái niệm mảng 1 chiều
Mảng 1 chiều là một dãy hữu hạn các phần tử có cùng kiểu dữ liệu, mảng được đặt tên và mỗi phần tử trong mảng có 1 chỉ số để truy cập
Để mô tả mảng 1 chiều ta cần xác định:
Kiểu dữ liệu của các phần tử trong mảng
Cách đánh số các phần tử đó
- Khái niệm mảng 1 chiều
Tập hợp A gồm có 5 số nguyên
A = {15,4,231,25,9}
15
25
9
231
4
Mảng A gồm có 5 số nguyên
Mảng gồm 2 phần:
+ chỉ số: để xác định vị trí của số nguyên
+ Giá trị của các phần tử trong mảng
So sánh mảng và tập hợp

Trong đó:
- Kiểu chỉ số có dạng: n1..n2 (n1≤n2), giúp xác định chỉ số của phần tử đầu tiên và chỉ số của phần tử cuối của mảng, đồng thời xác định số lượng phần tử có thể chứa được trong mảng
- Kiểu phần tử: là kiểu dữ liệu chung của các phần tử trong mảng (các kiểu dữ liệu đã học ở bài 4)
- Cách truy xuất giá trị của phần tử trong mảng: tên biến mảng [chỉ số]
a. Khai báo mảng 1 chiều
Cú pháp:
Var tên biến mảng : Array[kiểu chỉ số] of kiểu phần tử;
Lưu ý:
- Sau bước khai báo thì ngôn ngữ lập trình sẽ tạo ra một mảng rỗng (các phần tử có giá trị là 0), giá trị của các phần tử chỉ có khi ta nhập vào ở phần thân chương trình
- Giả sử ta có 1 mảng A được nhập các giá trị sau:
Cách truy xuất giá trị của phần tử thứ 3 trong mảng A ta ghi là A[3],
và A[3] có giá trị là 55
ƯU ĐIỂM CỦA KIỂU MẢNG
Một biến kiểu mảng có thể được định nghĩa để lưu tùy ý một số lượng lớn các phần tử có chung kiểu dữ liệu
Do các phần tử đều có 1 chỉ số xác định, điều đó giúp chúng ta dễ dàng truy xuất giá trị của phần tử đó thông qua tên biến mảng và chỉ số của nó.
Do các phần tử trong mảng có chỉ số liên tục nhau nên chúng ta có thể sử dụng dễ dàng câu lệnh For – do để thực hiện việc nhập, xuất và tính toán mà không cần viết nhiều câu lệnh.
Ví dụ 1: Hãy khai báo một mảng A có thể chứa tối đa 100 số nguyên dương, giá trị mỗi số không vượt quá 255
Tên biến mảng:
kiểu chỉ số (n1..n2):
Kiểu phần tử: số nguyên dương, giá trị <=255
Var A : Array[1..100] of byte ;
a. Khai báo mảng 1 chiều
Cú pháp:
Var tên biến mảng : Array[kiểu chỉ số] of kiểu phần tử;
A
1..100
(ta chọn byte)
Ví dụ 2: Hãy khai báo 1 mảng số thực R, mảng có thể chứa tối đa 250 số thực

- Tên biến mảng:
kiểu chỉ số (n1..n2):
Kiểu phần tử: số thực
Var R : Array[1..250] of real ;
Var tên biến mảng : Array[kiểu chỉ số] of kiểu phần tử;
R
1..250
(ta chọn real)
- Tên biến mảng:
kiểu chỉ số (n1..n2):
Kiểu phần tử: số thực
Var T : Array[1..366] of real ;
T
Ví dụ 3: Hãy khai báo 1 mảng nhiệt độ T, mảng này có thể lưu nhiệt độ trung bình của 366 ngày

1..366
(ta chọn real)
Ví dụ 4: Viết chương trình Nhập vào nhiệt độ của N ngày(N≤366), Tính và in ra màn hình cho biết nhiệt độ trung bình của N ngày đó, và cho biết có bao nhiêu ngày nhiệt độ cao hơn nhiệt độ trung bình
Bước 1: Xác định bài toán
Input: số ngày N và nhiệt độ của N ngày
Output: nhiệt độ trung bình và số ngày có nhiệt độ cao hơn nhiệt độ trung bình
Bước 2: Xác định biến
Var N : word;
T : array[1..366] of real;
TB : real;
Songay : word;
Program nhietdo;
Var N : word; TB : real; Songay : word;
T : array[1..366] of real;
i : word; Tong : real;
Begin
Write(‘ban muon nhap nhiet do cua bao nhieu ngay? ’); readln(N);
For i:=1 to N do
Begin
write(‘Nhap nhiet do ngay thu ’ , i , ‘: ’); readln(T[i]);
End;
For i:=1 to N do Tong := Tong + T[i]; {tính tổng nhiệt độ của N ngày}
TB := Tong/N;
Songay := 0;
For i:=1 to N do if T[i] > TB then songay := songay + 1;
Writeln(‘Nhiet do trung binh la: ’ , TB);
Writeln(‘so ngay co nhiet do cao hon nhiet do trung binh la: ’, songay);
Readln
End.
Demo chương trình
b. Một số ví dụ
Ví dụ 1: Viết chương trình Nhập vào một dãy A gồm N (N≤250) số nguyên dương (giá trị mỗi số không vượt quá 500). In ra màn hình vị trí của số nguyên có giá trị lớn nhất và giá trị của số nguyên lớn nhất
Ý tưởng:
- Giả sử số nguyên lớn nhất là số nguyên đầu tiên Max = A[1], vị trí = 1
- Lần lượt so sánh từ số nguyên thứ 2 cho đến cuối dãy số, nếu số nguyên nào có giá trị lớn hơn Max thì Max nhận giá trị mới là số nguyên đó, vị trí là vị trí của số nguyên có giá trị lớn hơn
Max := A[1] = 125, vị trí := 1;
So sánh A[2] với max (43 < max) nên Max vẫn là 125, vị trí = 1
So sánh A[3] với max (55 < max) nên Max vẫn là 125, vị trí = 1
So sánh A[4] với max (1 < max) nên Max vẫn là 125, vị trí = 1
So sánh A[5] với max (5 < max) nên Max vẫn là 125, vị trí = 1
So sánh A[6] với max (305 > max) nên Max nhận giá trị mới là 305, vị trí =6
So sánh A[7] với max (307 > max(305)) nên Max nhận giá trị mới là 307, vị trí = 7
So sánh A[8] với max (34 < max) nên Max vẫn là 307, vị trí số nguyên lớn nhất là 7
So sánh A[9] với max (34 < max) nên Max vẫn là 307, vị trí số nguyên lớn nhất là 7
So sánh A[10] với max (100 < max) nên Max vẫn là 307, vị trí số nguyên lớn nhất là 7
Bước 1: Xác định bài toán
Input: N và dãy gồm N số nguyên dương
Output: vị trí và giá trị của số nguyên lớn nhất
Bước 2: Xác định biến
Var N : byte;
A : array[1..250] of word;
vitri : byte;
Max : word;
Program tim_songuyen_lonnhat;
Var N, i , vitri : byte; Max: word;
A : array[1..366] of word;
Begin
Write(‘ban muon nhap bao nhieu so nguyen ’); readln(N);
For i:=1 to N do
Begin
write(‘Nhap so nguyen thu ’ , i , ‘: ’); readln(A[i]);
End;
Max := A[1] ; vitri :=1;
For i:=2 to N do if A[i] > Max then
begin
Max :=A[i];
vitri := i ;
end;
Writeln(‘ - vi tri so nguyen lon nhat la ’ , vitri);
Writeln(‘ - gia tri so nguyen lon nhat la ’, Max);
Readln
End.
nguon VI OLET