CHỦ ĐỀ 3: KIỂU DỮ LIỆU CÓ CẤU TRÚC
BÀI 11. KIỂU MẢNG
1
Bài tốn đặt vấn đề:
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 trong tuần có nhiệt độ cao hơn nhiệt trung bình
của tuần?
* Dữ liệu nhập vào (INPUT): t1,t2,t3,t4,t5,t6,t7.
* Dữ cần tính và in ra (OUTPUT): tb, dem.
2
* Ý tưởng
- Nhập nhiệt độ trung bình của 7 ngày
(t1, t2, ..., t7) trong tuần;
- Tính tb: = (t1+t2+t3+t4+t5+t6+t7) /7; đếm:= 0;
- Lần lượt so sánh các giá trị từ t1, t2, …, t7 với
tb, nếu lớn hơn tb thì đếm lần lượt tăng lên 1;
- Đưa ra màn hình nhiệt độ tb tuần và số ngày có
nhiệt độ lớn hơn mức tb
3
Program Nhietdo_Tuan;
Var t1, t2, t3, t4, t5, t6, t7, tb: real;
dem: integer;
Begin
writeln(‘ Nhap 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:4:2) ;
writeln(‘ So ngay nhiet do cao hon trung binh: ‘, dem) ;
readln
End.
4
Giả sử ta xét bài toán trên với phạm vi trong
một năm.
chỉ số
1
t
2
3
36.5 37.5 37.5
…
…
…
365
366
…
…
…
37.5 38.5
kiểu thực
Tập hợp
các phần tử
cùng kiểu
được đánh số
(chỉ số)
Mảng
một chiều
5
1. Kiểu mảng một chiều
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. Các phần tử trong
mảng có cùng chung một tên và phân
biệt nhau bởi chỉ số.
6
A
Ví dụ:
17
1
20
18
25
19
12
19
2
3
4
5
6
7
Khi xây dựng và sử dụng mảng một chiều ta cần quan
tâm đến các thành phần sau:
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 phần tử thứ i ta viết A[i].
Ví dụ: A[5] = 19.
7
1. Kiểu mảng một chiều
a. Khai báo
* Cách 1: Khai báo trực tiếp
Var <tên biến mảng> : array[<chỉ số đầu>..<chỉ số cuối>] of <kiểuphần tử>;
Ví dụ: Var nhietdo : array[1..365] of integer;
Var A,B : array[1..100] of real;
Trong đó : Chỉ số đầu, chỉ số cuối thường là các hằng hoặc biểu thức nguyên;
Chỉ số đầu chỉ số cuối;
Giữa 2 chỉ số là dấu ..
* Cách 2: Khai báo gián tiếp
TYPE <tên kiểu mảng> = array[<chỉ số đầu>..<chỉ số cuối>] of <kiểuphần tử>;
Var <tên biến mảng> : <tên kiểu mảng>;
Ví dụ: TYPE nhietdo = array[1..365] of integer;
Var A: nhietdo;
8
Ví dụ: Khai báo mảng một chiều biểu diễn dãy số sau:
A
Cách 1
Cách 2
Chỉ số phần tử
1
2
20
99
100
Giá trị
22
17
100
70
36
Var A: array [1..100] of byte;
Type mang = array[1..100] of Byte;
Var A: mang;
Ví dụ: Khai báo mảng một chiều biểu diễn dãy số sau:
B
Cách 1
Cách 2
Chỉ số phần tử -100
-99
50
Giá trị
tin
Dia li
toan
Var B: array [-100..50] of char;
Type mang = array[-100..50] of char;
Var B: mang;
9
Ví dụ 5: Khai báo một mảng gồm 10 phần tử, mà
các phần tử là số thực:
Cách 1
var R: array[-3..6] of real;
Cách 2
type Kst= array[-3..6] of real;
var R: Kst;
R
-3
-2
-1
0
1
2
3
4
5
8,5
6
8
22 11 3,5 -8
5
6
10 15
10
* Tham chiếu tới phần tử của mảng một chiều:
tên_mảng[chỉ số]
Ví dụ:
A[4] : phần tử chỉ số 4 của mảng A
B[-8] : phần tử chỉ số -8 của mảng B
Như vậy, 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 vuông [ ]
11
Giả sử ta có khai báo mảng như sau:
var A:array[1..10] of char;
A
1
2
3
4
5
6
7
8
9
10
a
b
E
d
H
i
L
M
o
P
Để có được giá trị là kí tự “M”, ta viết như sau: A[8]
Để có được giá trị là kí tự “E”, ta viết như sau: A[3]
12
12
CÂU HỎI
HỎI TRẮC
TRẮC NGHIỆM
NGHIỆM
CÂU
3
9
6
Câu 1. Khai báo kiểu mảng một chiều nào sau
đây là hợp lệ:
A. Var mangA = array[1..10] of real;
B. Type mangA : array[1..10] of real;
C. Var mangA: array[1..10] of real;
D. Type mangA : array[1..10] of real;
Var A = mangA;
13
12
CÂU HỎI
HỎI TRẮC
TRẮC NGHIỆM
NGHIỆM
CÂU
3
9
6
Câu 2. Phát biểu nào sau đây là đúng:
Mảng một chiều là dãy vô hạn các phần tử
cùng kiểu dữ liệu;
Mảng một chiều là dãy hữu hạn các phần tử
khác kiểu dữ liệu;
3 Mảng một chiều là dãy hữu hạn các phần tử
cùng kiểu dữ liệu.
14
12
CÂU HỎI
HỎI TRẮC
TRẮC NGHIỆM
NGHIỆM
CÂU
3
9
6
Câu 3. Hãy chọn khai báo đúng trong các khai
báo trực tiếp sau:
var 2A:array[1..20] of integer;
var A:array[1-20] of integer;
3 var A:array[1..20] of integer;
var A:array(1..20) of integer;
15
KIN THC CN NH
Khái niệm mảng một chiều
Các yếu tố mô tả mảng một chiều
Khai báo mảng một chiều
16