Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
Slide 1
WELCOME TO MY CLASS!


Ly Thuong Kiet High School
Informatics 11
________________________
teacher: Nguy?n Ng?c Ph�
mail: tinhocnhe@gmail.com
cđu h?i: http://link.fpo.vn/giaosinh
uebsite: https://tinhocnhe.gnomio.com/
KHÔNG ĐIỆN THOẠI
KHÔNG TÁM CHUYỆN
KHÔNG NÓI LEO
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
Slide 3
THỂ LỆ TRÒ CHƠI
- Câu hỏi liên quan đến từ KHÓA sẽ được HÉ LỘ sau câu hỏi thứ 3. Trả lời đúng từ khóa sẽ dành được 30 điểm.
- Mỗi câu hỏi được trả lời trong 15 giây.
- Sau khi câu hỏi được trình chiếu các nhóm đưa tay dành quyền trả lời (ưu tiên cho nhóm chưa trả lời câu nào)
- Mỗi câu đúng được 10 điểm
L
O
G
I
H
C
A
R
N
T
E
G
E
R
I
T
N
N
O
L
O
B
N
L
A
E
A
E
R
1
2
3
4
5
Câu 1: Kiểu chiếm 6 Byte bộ nhớ; những con số như: 9.5, 10.0 thuộc kiểu dữ liệu này ?
Câu 2: Giá trị True hoặc False thuộc kiếu dữ liệu này ?
Câu 3: Thuộc kiểu số nguyên chiếm 4 Byte bộ nhớ ?
Câu 4: Chiếm 2 Byte bộ nhớ, thuộc kiểu số nguyên ?
Câu 5: 256 kí tự trong bộ mã ASCII thuộc kiểu dữ liệu này ?
( 4 ký tự )
( 7 ký tự )
( 7 ký tự )
( 7 ký tự)
( 4 ký tự )
( 5 ký tự)
1
2
3
4
5
Từ khóa
Trò Chơi Kiểu Dữ Liệu Chuẩn Trong Pascal
Một kiểu dữ liệu chuẩn trong ngôn ngữ lập trình Pascal
Back
3/19/2018
4
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
Slide 5
Các Kiểu Dữ Liệu Chuẩn Trong Pascal
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
Slide 6
Kiểu Dữ Liệu Có Cấu Trúc
Kiểu dữ liệu chuẩn
Kiểu dữ liệu có cấu trúc
+ Không đủ đáp ứng cho việc lưu trữ dữ liệu để giải các bài toán trong thực tế.

+ Được xây dựng từ những kiểu dữ liệu cơ sở theo cách thức tạo kiểu do ngôn ngữ lập trình qui định.
+ Hữu ích trong việc giải quyết một số bài toán thường gặp trong thực tế
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
Bài toán cũ:
“ Viết chương trình nhập vào dãy số nguyên có 10 phần tử lần lượt là: 1, 3, 5, 7, 11, 13, 15, 17, 19”.
7
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
Slide 8
Đoạn chương trình nhập vào dãy số có 10 phần tử
Trong đoạn chương trình trên cần khai báo bao nhiêu biến?
10 Biến
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
Slide 9
Trong trường hợp cần nhập dãy số nguyên có 1000 phần tử hoặc nhiều hơn thì phải làm sao?
Ôi quá trời !Khai báo đến 1000 biến.
Đoạn chương trình nhìn phức tạp!
Cần tối ưu đoạn chương trình
Bằng
cách nào?
Bài 11: Kiểu Mảng
So sánh
10
Đoạn chương trình sử dụng mảng 1 chiều nhập vào dãy số có 103 =1000 phần tử
Sự cần thiết của mảng một chiều
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
�11

KI?U M?NG
Ti?t 21,22
1. Khái niệm mảng một chiều
Tóm tắt nội dung
Băi 11: Ki?u M?ng
BÀI 11: KIỂU MẢNG
3/19/2018
12
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
2. Khai báo KIỂU mảng một chiều
3. Khai báo biến kiểu mảng một chiều
4. Truy xuất đến phần tử mảng một chiều
5. Thao tác xử lý mảng một chiều
6. Bài tập thực hành
Ti?t 21, 22
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
13
Mảng ( Array ) là một kiểu dữ liệu có cấu trúc bao gồm một số cố định các thành phần cùng kiểu, có cùng một tên chung. Các thành phần của Mảng được truy suất thông qua các chỉ số
V� D?: M?ng A g?m nam ph?n t? : A[1]=7, A[2]=9, A[3]=0, A[4]= -2, A[5]=3:

Khái niệm về Mảng
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ố.
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
14
Kích thước của mảng
Vì mảng là tập hợp các phần tử cùng kiểu dữ liệu, nên kích thước của nó sẽ là tổng kích thước của tất cả các phần tử trong nó.

Công dụng của Mảng là để lưu trữ một dãy số liệu có cùng một tính chất nào đó.
VD: Các điểm kiểm tra một môn học nào đó của học sinh, các giá trị của một dãy số được nhập từ bàn phím.

Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
1. 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ùng kiểu.
Mảng được đặt tên và các phần tử của nó có một chỉ số.
Các yếu tố các định mảng 1 chiều gồm có:

Những yếu tố cần thiết nào để xác định mảng 1 chiều?
Minh hoạ
Tên kiểu mảng 1 chiều;
Số lượng phần tử;
Kiểu dữ liệu của phần tử;
Kiểu dữ liệu của chỉ số và phạm vi của chỉ số.
15
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
1. Khái niệm mảng 1 chiều (tt):
Tên kiểu mảng 1 chiều: là tên của mảng sẽ được tạo ra ( không khoảng trắng, tuân theo qui tắc đặt tên trong Pascal)
Số lượng phần tử: số phần tử của mảng
Kiểu dữ liệu của phần tử: cũng chính là kiểu dl của mảng (kiểu nguyên, kí tự, lôgic,..)
Kiểu dữ liệu của chỉ số và phạm vi của 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à hằng số hoặc biểu thức nguyên xác định chỉ số đầu và chỉ số cuối (n1≤n2)
Ví dụ: [1..100] trong đó n1=1, n2=100;
[-n+1..n+1] trong đó n1=-n+1, n2=n+1;
Số nguyên đầu tiên trong đoạn là chỉ số của phần tử thứ 1 trong mảng, số nguyên tiếp theo là chỉ số của phần tử thứ 2 trong mảng, cứ như vậy,.. giá trị cuối cùng là chỉ số của phần tử cuối cùng trong mảng. Do vậy, khi xác định kiểu chỉ số của một mảng (một chiều) người lập trình đã xác định cả kích thước của mảng (số lượng các phần tử của mảng)

16
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
17

Mảng 1 chiều không phải là kiểu dữ liệu chuẩn trong Pascal, nên khi có nhu cầu sử dụng thì người lập trình phải khai báo. Làm thế nào để khai báo kiểu mảng 1 chiều
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
18
2. Khai báo kiểu mảng 1 chiều
Mảng là kiểu dữ liệu có cấu trúc nên trước khi sử dụng, chúng ta phải định nghĩa kiểu theo cú pháp sau:
type
= array[] of ;
: 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)
Trong đó:
: 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ặ biểu thức nguyên xác định chỉ số đầu và chỉ số cuối (n1≤ n2)
: 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)
type: là từ khoá được dùng khi định nghĩa kiểu dữ liệu mới.
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
2. Khai báo Kiểu mảng 1 chiều (tt)
Ví dụ:
type
ArrayInt = array [1..300] of integer;
ArrayInt = array [-n+1..n+1] of boolean;
ArrInt= array [-100..0] of integer;
ArrayBoolean = array [-n+1 … n +1] of boolean;
ArrInt = array [100..0] of integer;
Các khai báo KIỂU mảng 1 chiều hợp lệ
Các khai báo KIỂU mảng 1 chiều không hợp lệ
(n là hằng số)
Ví dụ:
19
Chỉ số đầu lớn hơn chỉ số cuối
Giữa 2 chỉ số là dấu 2 chấm
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
20
Cú pháp khai báo 1 biến thuộc kiểu dữ liệu chuẩn trong Passcal
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
Slide 21
3. Khai báo BIẾN kiểu mảng 1 chiều
a. Khai báo trực tiếp ( khai báo tường minh)
Để khai báo biến mảng một chiều theo cách tường minh, chúng ta thực hiện cú pháp sau:

var
: array [ ] of ;
Trong đó:
: do người lập trình đặt, đúng theo cú pháp đặt tên biến của Pascal
: thường là một đoạn số nguyên liên tục n1..n2
: kiểu dữ liệu của các phần tử trong mảng
Ví dụ:
var
Gio_hoc:array[1..8] of integer;
Khai báo biến mảng Gio_hoc là mảng một chiều có 8 phần tử thuộc kiểu số nguyên.
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
3. Khai báo BIẾN kiểu mảng 1 chiều
a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ:
var
Hten : array [1..5] of String[18];





22
khai báo biến mảng một chiều có 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:
Hten[1], Hten[2], Hten[3], Hten[4], Hten[5],
var
B : array[‘a’.. ‘d’] of Integer;

khai báo biến mảng một chiều có tên là B, gồm 4 phần tử cùng kiểu dữ liệu là kiểu Integer ứng với các chỉ số ‘a’, ‘b’, ‘c’, ‘d’:
B[‘a’] , B[‘b’], B[‘c’] , B[‘d’]
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
23
3. Khai báo BIẾN kiểu mảng 1 chiều
b. Khai báo gián tiếp ( khai báo không tường minh)
Khai báo gián tiếp (không tường minh) là gì?
Khai báo KIỂU trước
Khai báo BIẾN sau
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
24
Cú pháp khai báo biến kiểu không tường minh như sau:
type
= array[] of < kiểu phần tử>;
var
: ;
3. Khai báo BIẾN kiểu mảng 1 chiều
b. Khai báo gián tiếp ( khai báo không tường minh) (tt)
Trong đó:
: định nghĩa mảng một chiều, do người lập trình tự đặt.
: là danh sách chỉ số để truy cập đến phần tử của mảng.
: là kiểu dữ liệu của phần tử mảng.
: là biến thuộc kiểu mảng vừa khai báo.
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
25
Khai báo tường minh
program ChươngTrinh;
var
ArrInt: array[1..10] of integer;
A:array[1..10] of integer;
B:array[1..10] of integer;
begin
…………
end.
Khai báo không tường minh
program ChuongTrinh;
type
ArrInt: array[1..10] of integer;
A, B:ArrInt;
begin
….
end.
Chương trình cần khai báo thêm mảng A, B có đặc điểm giống với mảng ArrInt
Lưu ý : trong lập trình người ta thường khai báo kiểu không tường minh hơn là kiểu tường minh.
Ví dụ :
type
Gio_hoc= array [1..8] of integer;
A: Gio_hoc;

Trước tiên, chúng ta định nghĩa ra mảng một chiều Gio_hoc gồm có 8 phần tử thuộc kiểu số nguyên
- Sau đó, khai báo biến A thuộc kiểu mảng Gio_hoc
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
26
3. Khai báo BIẾN kiểu mảng 1 chiều
b. 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;
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.
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
27
Cho dãy số A có thể được minh hoạ như sau:
Trong đó:
+ Xem dãy A là một mảng 1 chiều.
+ Mỗi phần tử của dãy A tương ứng với 1 phần tử của mảng.
-> Tham chiếu đến 1 phần tử thuộc dãy A chính là tham chiếu đến phần tử thuộc mảng A. Vậy tham chiếu đến một phần tử của mảng 1 chiều bằng cách nào?
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
28
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 ([ ])
4. Truy xuất đến phần tử của mảng 1 chiều
Ví dụ:
MangSo
MangSo[9]
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
4. Truy xuất đến phần tử của mảng 1 chiều (tt)
Với cách tham chiếu đến phần tử như thế thì sẽ tính tổng các phần tử của dãy số A (mảng A) bằng công thức nào?
A[1]+A[2]+A[3]+A[4]+A[5]+A[6]+A[7]+A[8]+A[9]+A[10]
29
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
3/19/2018
30
V� d?:
Trong d�:
Tín m?ng: .
S? ph?n t? c?a m?ng:.
Ki?u d? li?u c?a câc ph?n t?: .
Khi tham chi?u d?n ph?n t? th? i - ta vi?t A[i] : .

A
A[6] = 22
A
7
Ki?u nguyín
Trong khai báo kiểu mảng ta biết được:
33
THỂ LỆ TRÒ CHƠI
Lớp chia làm 2 đội chơi, mỗi dãy là một đội.

Mỗi đội cử 2 hs đại diện tham gia trò chơi.

Hình thức chơi: nối ghép cột A với B (ghi kết quả lên bảng)

Có 1’30s cho mỗi đội hoàn thành xong phần chơi của mình.

Đội nào thua sẽ bị đội thắng đưa ra hình phạt (thực hiện sau đó)
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
34
A
Đội 1
B
1. var Mang_thuc= array[0..100] of integer;
4. Khai báo kiểu mảng số thực gồm có 300 phần tử
12. Khai báo Mảng gồm 101 phần tử kiếu số nguyên
5. var A: Mang_nguyen;
10 .Type B=aray [-25..25] of boolean;
2. type Mang_Nguyen=array[1..100] of real;
3. Khai báo kiểu mảng gồm 50 phần tử kiểu lôgic
7. Type C=array [-150..150] of real;
6. var B=aray [0..25] of boolean;
8. Khai báo biến mảng thực gồm có 100 phần tử kiểu nguyên
9.type B:aray [0..25] of boolean;
11.Type Mang_thuc=array[1..300] of integer;
Reset
Back
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
35
A
Đội 2
B
1. var Mang_Nguyen= array[-25..65] of byte;
3. Khai báo kiểu mảng số thực gồm có 500 phần tử
5. var T: Mang_Thuc;
10 .var C=array[0..n-1] of char;
4. type Mang_Thuc=array[1..100] of real;
2. Khai báo biến kiểu mảng gồm n phần tử thuộc kiẻu ký tự
7. Var T:=Mang_Thuc;
6. Type T=aray [0..499] of real;
8. Khai báo kiểu mảng nguyên gồm có 100 phần tử kiểu byte
9.type T:aray [1..500] of real;
11. var C=array[0..n] of char;
8. Khai báo biến kiểu mảng nguyên gồm có 90 phần tử kiểu byte
Reset
Back
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
A
n
1. Nhập số phần tử của mảng (n).
Write(‘ Nhap vao so ngay:’);
Readln(n);
2. Nhập vào giá trị của các phần tử trong mảng (nhietdo[i]).
For i:=1 to n do
Begin
write(‘nhiet do ngay thu’ ,i, ’ : ’);
readln(nhietdo[i]);
end;
CÁC BƯỚC
THỂ HIỆN BẰNG PASCAL
a. Nhập mảng một chiều
với n = 7
19
17
19
21
18
20
17
Ví dụ: Nhập nhiệt độ n ngày.
5. Các thao tác xử lí trong mảng một chiều
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
36
b. In mảng một chiều
Writeln(‘ Nhiet do cac ngay trong tuan la: ’);
For i:=1 to n do Write(nhietdo[i]:5);
- Thông báo
- In giá trị của các phần tử
Ví dụ: In mảng vừa nhập.
CÁC BƯỚC
THỂ HIỆN BẰNG PASCAL
5. Các thao tác xử lí trong mảng một chiều
Kết quả in ra màn hình
Mảng vừa nhập: 17 20 18 21 19 17 19
7
Bài Tập
Ví dụ: Tính tổng các phần tử trong mảng
Input:
- Dòng 1: Nhập vào N là số lượng phần tử của mảng
- Dòng 2: N số nguyên (mỗi số cách 1 khoảng trắng)
 Ouput:
Yêu cầu xuất tổng các phần tử đó ra màn hình
 
ví dụ:
Input: Output:
3 6
1 2 3
 
 
Hướng dẫn: Để giải quyết bài toán cần phải đảm bảo các vấn đề:
-          Nhập mảng, có thể xây dựng thành hàm để đóng gói và sử dụng lại. Các thao tác theo yêu cầu:
(1) Nhập số N.
(2) Tiến hành lặp (từ 0 đến N-1) và nhập cho các giá trị Ai trong mảng.
-          Xuất mảng. Công việc đơn giản là sử dụng vòng lặp từ 0 đến N-1 để in ra các giá trị Ai cho mảng..
-          Hàm tính tổng các phần tử cho một mảng A
o       Khai báo và khởi tạo toång S là 0.
o       Sử dụng một vòng lặp (từ 0 đến N-1 để duyệt qua tất cả các giá trị Ai) để tính cộng dồn giá trị của Ai vào tổng S.
Chương trình
Hãy nhớ!
 Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu.
 Khai báo: tên mảng, kiểu chỉ số, kiểu phần tử.
Tham chiếu phần tử mảng:
Tên biến mảng[chỉ số phần tử]
 Nhiều thao tác xử lí mảng dùng cấu trúc lặp FOR - DO.
15 20 19 25 18 12 16
Var A:ARRAY[1..100] OF integer;
A[5] = 18
41
Hãy cùng nhau liên tưởng mảng 1 chiều!
1
2
3
4
5
6
7
Back
3/19/2018
Tin học 11 - Chương 4 - Bài 11:Kiểu mảng
GV: Lê Thị Xuân Huyền
PROGRAM     Hello;               { Dòng tiêu đề }
USES               Crt;                  { Lời gọi sử dụng các đơn vị chương trình }
VAR                 Name : string; { Khai báo biến }
PROCEDURE  Input;             { Có thể có nhiều Procedure và Function }
Begin
ClrScr;             { Lệnh xóa màn hình }
Write(‘ ‘Hello ! What is your name ?… ‘’);Readln(Name);
End;
BEGIN                                     { Thân chương trình chính }
Input;
Writeln  (‘ ‘Welcome to you,  ‘, Name’) ;
Writeln  (‘ ‘Today, we study PASCAL PROGRAMMING … ‘’);
Readln;
END.
Một chương trình Pascal có các phần:
* Phần tiêu đề:
Phần này bắt đầu bằng từ khóa Program rồi tiếp đến là tên của chương trình và chấm dứt bằng dấu chấm phẩy (;)
Tên chương trình phải được đặt theo đúng qui cách của danh hiệu tự đặt. Phần tiêu đề có hay không cũng được. 
* Phần khai báo dữ liệu:
Trước khi sử dụng biến nào phải khai báo biến đó, nghĩa là xác định rõ xem biến đó thuộc kiểu dữ liệu nào. Một chương trình Pascal có thể có một số hoặc tất cả các khai báo dữ liệu sau:
CONST  : khai báo hằng

TYPE      : định nghĩa  kiểu dữ  liệu mới

VAR      : khai báo các biến
… 
* Phần khai báo chương trình con:
Phần này mô tả một nhóm lệnh được đặt tên chung là một chương trình con để khi thân chương trình chính gọi đến thì cả nhóm lệnh đó được thi hành.
Phần này có thể có hoặc không tùy theo nhu cầu.
* Phần thân chương trình:
Phần thân chương trình là phần quan trọng nhất và bắt buộc phải có, phần này luôn nằm giữa 2 từ khoá là BEGIN và END. Ở giữa là lệnh mà các chương trình chính cần thực hiện. Sau từ khóa END là dấu chấm (.) để báo kết thúc chương trình. 
* Dấu chấm phẩy (;):
Dấu ;  dùng để ngăn cách các câu lệnh của Pascal và không thể thiếu được. 
* Lời chú thích:
Lời chú thích dùng để chú giải cho người sử dụng chương trình nhớ nhằm trao đổi thông tin giữa người và người, máy tính sẽ không để ý đến lời chú thích này. Lời chú thích nằm giữa ký hiệu: {  } hoặc (*  *)
nguon VI OLET