Tài liệu Lập trình hướng đối tượng - Mảng nhiều chiều: 1ðại học Mở TP.Hồ Chớ Minh
Khoa Cụng Nghệ Thụng Tin
KỸ THUẬT LẬP TRèNH
MẢNG NHIỀU CHIỀU
(Chương 1)
ThS Vế NHẬT VINH
2ðại học Mở TP.Hồ Chớ Minh
Khoa Cụng Nghệ Thụng Tin
CHƯƠNG 1
TỔNG QUAN
• Giới thiệu mụn học “Kỹ thuật lập trỡnh”,
• Quy ủịnh của giảng viờn,
• ðặt vấn ủề về giới hạn của mảng 1 chiều,
• Giới thiệu mảng 2 chiều,
• Khai bỏo mảng 2 chiều,
• Truy xuất mảng 2 chiều,
• Khỏi quỏt mảng nhiều chiều,
• Hạn chế của mảng,
• Túm tắt.
3ðại học Mở TP.Hồ Chớ Minh
Khoa Cụng Nghệ Thụng Tin
CHƯƠNG 1
GIỚI THIỆU MễN HỌC
• Giảng viờn: ThS Vừ Nhật Vinh
• Liờn hệ: phũng 202, số 97 Vừ Văn Tần
Tel: 39301168
• Thời lượng: 35 tiết lý thuyết, 35 tiết thực hành
• Kiểm tra: Giữa kỳ (30%)
Cuối kỳ trờn mỏy (70%)
• Tài liệu: Principles of Programming
(Code Warrior – 1995)
• Website:
4ðại học Mở TP.Hồ Chớ Minh
Khoa Cụng Nghệ Thụng Tin
CHƯƠNG 1
GIỚI THIỆU MễN HỌC (tt)
• Mục ủớch mụn học:
– Nõng cao cỏc kiến thức về lập trỡnh ủó học trong mụn
Cơ sở lập trỡnh,
– Làm que...
73 trang |
Chia sẻ: Khủng Long | Lượt xem: 1019 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Lập trình hướng đối tượng - Mảng nhiều chiều, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
MẢNG NHIỀU CHIỀU
(Chương 1)
ThS VÕ NHẬT VINH
2ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
TỔNG QUAN
• Giới thiệu mơn học “Kỹ thuật lập trình”,
• Quy định của giảng viên,
• ðặt vấn đề về giới hạn của mảng 1 chiều,
• Giới thiệu mảng 2 chiều,
• Khai báo mảng 2 chiều,
• Truy xuất mảng 2 chiều,
• Khái quát mảng nhiều chiều,
• Hạn chế của mảng,
• Tĩm tắt.
3ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
GIỚI THIỆU MƠN HỌC
• Giảng viên: ThS Võ Nhật Vinh
• Liên hệ: phịng 202, số 97 Võ Văn Tần
Tel: 39301168
• Thời lượng: 35 tiết lý thuyết, 35 tiết thực hành
• Kiểm tra: Giữa kỳ (30%)
Cuối kỳ trên máy (70%)
• Tài liệu: Principles of Programming
(Code Warrior – 1995)
• Website:
4ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
GIỚI THIỆU MƠN HỌC (tt)
• Mục đích mơn học:
– Nâng cao các kiến thức về lập trình đã học trong mơn
Cơ sở lập trình,
– Làm quen với các thao tác can thiệp sâu hơn vào bộ
nhớ máy tính khi lập trình,
– Làm quen với lập trình hướng đối tượng,
– Cĩ khả năng hiện thực việc lập trình trên Visual C++,
– Vận dụng cấu trúc dữ liệu và kỹ thuật lập trình để giải
quyết các bài tốn.
5ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
GIỚI THIỆU MƠN HỌC (tt)
• Chương 1: Mảng nhiều chiều
• Chương 2: Con trỏ
• Chương 3: Chuỗi ký tự
• Chương 4: Tập tin và luồng
• Chương 5: ðệ quy
• Chương 6: Lớp
6ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
QUY ðỊNH CỦA GIẢNG VIÊN
7ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
ðẶT VẤN ðỀ VỀ MẢNG
• Xét vấn đề lưu trữ một dãy số: a0, a1, a2, , an
• Mảng n+1 phần tử a[0], a[1], , a[n] sẽ làm việc đĩ,
• Xét vấn đề lưu trữ một dãy số: b0, b1, b2, , bm
• Mảng m+1 phần tử b[0], b[1],.., b[m] sẽ làm việc đĩ,
Xét vấn đề lưu trữ kết quả:
cij = ai x bj với 0 ≤ i ≤ n và 0 ≤ j ≤ m
8ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
ðẶT VẤN ðỀ VỀ MẢNG (tt)
an x bmx bma2 x bma1 x bma0 x bmbm
an x x a2 x a1 x a0 x
an x b2x b2a2 x b2a1 x b2a0 x b2b2
an x b1x b1a2 x b1a1 x b1a0 x b1b1
an x b0x b0a2 x b0a1 x b0a0 x b0b0
ana2a1a0
9ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
GIỚI THIỆU MẢNG 2 CHIỀU
• ðể lưu trữ dữ liệu theo 1 hàng dọc hoặc hàng
ngang, ta dùng mảng (xem Cơ sở lập trình),
• ðể lưu trữ kết quả được sắp xếp theo cả chiều
ngang và chiều dọc, ta sẽ dùng mảng 2 chiều.
Tĩm li:
• Mảng là tập hợp các phần tử đặt liên tiếp nhau trong
bộ nhớ, cĩ cùng tên và cùng kiểu dữ liệu.
• Mảng 2 chiều là mảng chứa các giá trị bố trí theo
hàng ngang và hàng dọc.
10
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
KHAI BÁO MẢNG 2 CHIỀU
• Khai báo mảng cần 3 thơng tin:
– Tên mảng,
– Kiểu dữ liệu của mảng,
– Kích thước của mảng: số phần tử trong mảng
• Khai báo mảng 2 chiều cũng cần 3 thơng tin:
– Tên mảng,
– Kiểu dữ liệu của mảng,
– Kích thước của mảng: kích thước dọc & kích thước ngang
11
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
KHAI BÁO MẢNG 2 CHIỀU (tt)
• Cú pháp:
kiểu_dữ_liệu Tên_mảng [kích_thước_1][kích_thước_2]
• Ví dụ:
int Mang_A [50] [70]
• Lưu ý: trong ví dụ trên, chỉ số hàng dọc của mảng
sẽ từ 0 đến 49 và hàng ngang sẽ từ 0 đến 69.
12
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
TRUY XUẤT MẢNG 2 CHIỀU
• Khơng thể tác động lên tồn bộ mảng cùng 1 lúc,
• Chỉ cĩ thể tác động lên duy nhất 1 phần tử của
mảng tại 1 thời điểm,
• Truy xuất 1 phần tử của mảng:
– Tên của mảng,
– Chỉ số của mảng: chỉ số hàng dọc, chỉ số hàng ngang,
– Lưu ý kiểu dữ liệu của mảng khi truy xuất,
• Ví dụ: xét mảng được khai báo int A[50][60]
truy xuất phần tử hàng 39, cột 58: A[39][58]
13
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
TRUY XUẤT MẢNG 2 CHIỀU (tt)
• Khởi tạo mảng: giống như việc khởi tạo giá trị cho
biến sau khi được khai báo,
• Cĩ thể gán từng giá trị cho từng phần tử của mảng,
• Cĩ thể khởi tạo giá trị của mảng ngay từ lúc khai
báo mảng bằng cách liệt kê các giá trị của các phần
tử: int A[2][3] = {{1, 2, 3},
{2, 3, 4}}
Nếu liệt kê khơng đầy đủ thì giá trị các phần tử cịn
lại mặc định là 0.
14
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
KHÁI QUÁT MẢNG NHIỀU CHIỀU
• ðể biểu diễn dãy các giá trị, ta dùng mảng 1 chiều,
• ðể biểu diễn bảng các giá trị, ta dùng mảng 2 chiều,
• ðể biểu diễn khối các giá trị, ta dùng mảng 3 chiều,
•
• Ta sẽ cĩ thể mảng nhiều chiều (2 chiều, 3 chiều)
để biểu diễn các phần tử liên tiếp nhau trong bộ nhớ,
cĩ cùng kiểu dữ liệu, cùng tên theo một cách sắp xếp
khơng gian nào đĩ,
• Cách khai báo, truy xuất mảng cũng giống như mảng
2 chiều.
15
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
HẠN CHẾ CỦA MẢNG
• Phải xác định kích thước của mảng ngay từ lúc khai
báo,
Kích thước bộ nhớ dành cho mảng khơng thay đổi suốt
chương trình,
Kích thước của mảng khi khai báo phải lớn hơn bằng nhu
cầu sử dụng trong chương trình,
Cĩ thể khơng sử dụng hết vùng nhớ đã khai báo cho
mảng,
• Khi truyền mảng cho hàm, cần truyền cả nội dung
của mảng và kích thước của mảng.
16
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
CHƯƠNG 1
TĨM TẮT
• Mảng dùng để một loạt các phần tử liên tiếp, cùng
kiểu dữ liệu và cùng tên,
• Tùy theo cách sắp xếp khơng gian của các phần tử
liên tiếp mà ta cĩ mảng 1 chiều, 2 chiều, 3 chiều,
• Khi khai báo ta cần các thơng tin: kiểu dữ liệu, tên
mảng và kích thước mảng (số lượng kích thước tùy
theo số chiều của mảng),
• Khi truy xuất, cần gọi đúng tên mảng, vị trí của phần
tử và bảo đảm tương thích kiểu dữ liệu.
1ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
CON TRỎ
(Chương 2)
ThS VÕ NHẬT VINH
2ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TỔNG QUAN
• Hạn chế của bộ nhớ tĩnh,
• Giới thiệu con trỏ:
– Khái quát về con trỏ,
– Khai báo con trỏ,
– Khởi tạo và hủy bỏ con trỏ,
– Truy xuất vùng nhớ và giá trị lưu trong vùng nhớ,
• Ứng dụng con trỏ cho mảng một chiều,
• Tĩm tắt.
3ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
HẠN CHẾ CỦA BỘ NHỚ TĨNH
• Dữ liệu phải lưu vào vùng nhớ đã được khai báo
trước trong chương trình,
• Chương trình khi nhận được sự khai báo sẽ dành
hẳn 1 vùng nhớ tương ứng để chờ đợi dữ liệu,
• Trong quá trình tính tốn, dữ liệu ít hơn dự kiến thì
khơng thể yêu cầu chương trình cắt bớt vùng nhớ,
• Nếu dữ liệu nhiều hơn dự kiến thì cũng khơng thể
yêu cầu chương trình tăng thêm vùng nhớ,
• Ví dụ: khai báo mảng 10 phần tử nhưng cĩ lúc chỉ
cần dùng 7 phần tử hoặc cần dùng 15 phần tử?
4ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
KHÁI QUÁT VỀ CON TRỎ
• ðể khắc phục hạn chế của bộ nhớ tĩnh: ta dùng bộ
nhớ động,
• Bộ nhớ động: cĩ thể yêu cầu máy tính cấp 1 vùng
nhớ khi cần và yêu cầu nĩ xĩa đi khi khơng cần
nữa,
• Con trỏ (biến con trỏ): là một loại biến dùng để truy
xuất bộ nhớ động.
5ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
KHAI BÁO CON TRỎ
• Biến con trỏ cũng phải được khai báo trước khi sử
dụng,
• Biến con trỏ được đặt tên theo quy định giống các
biến thơng thường,
• Biến con trỏ cĩ giá trị là địa chỉ vùng nhớ mà nĩ trỏ
vào,
• Kiểu dữ liệu được khai báo là kiểu dữ liệu của giá
trị mà vùng nhớ đĩ đang chứa.
6ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
KHAI BÁO CON TRỎ (tt)
• Cú pháp: kiểu_dữ_liệu * tên_biến_con_trỏ
• Ví dụ: int * Con_tro;
– Nghĩa là: biến Con_tro sẽ chỉ đến 1 vùng nhớ mà vùng
nhớ này sẽ chứa một giá trị số kiểu int
– Giá trị của biến Con_tro là địa chỉ vùng nhớ đang được
chỉ đến.
7ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
KHỞI TẠO VÀ HỦY BỎ CON TRỎ
• Khác với các biến thơng thường, sau khi khai báo,
biến con trỏ vẫn chưa sử dụng để truy xuất được
mà phải khởi tạo, nghĩa là chỉ rõ vùng nhớ mà nĩ
trỏ đến. Cĩ 2 cách:
• Gán con trỏ tới vùng nhớ đã được cấp sẵn,
Vd: int * con_tro; int i; //vùng nhớ của i đã được cấp
con_tro = &i; // con_tro chỉ tới vùng nhớ đã cĩ
• Yêu cầu xin cấp vùng nhớ mới cho con trỏ:
Vd: int * con_tro; con_tro = new (int);
8ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
KHỞI TẠO VÀ HỦY BỎ CON TRỎ (tt)
• ðể giải phĩng vùng nhớ sau khi sử dụng xong, ta
cần yêu cầu xĩa đi vùng nhớ đĩ. Cĩ 2 cách:
• Nếu con trỏ chỉ đến 1 ơ nhớ:
delete con_tro;
• Nếu con trỏ là mảng:
delete [ ] con_tro;
9ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TRUY XUẤT VÙNG NHỚ VÀ GIÁ TRỊ
• ðối với bộ nhớ tĩnh:
– Khai báo: int i;
– Truy xuất giá trị: i
– Truy xuất địa chỉ: &i
• ðối với bộ nhớ động:
– Khai báo: int * con_tro;
– Truy xuất giá trị: * con_tro
– Truy xuất địa chỉ: con_tro
10
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TRUY XUẤT VÙNG NHỚ VÀ GIÁ TRỊ (tt)
• Ví dụ:
int i; int * con_tro;
truy xuất giá trị // *con_tro = i; // giá trị của i
truy xuất địa chỉ // con_tro = &i; // địa chỉ của i
11
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
ỨNG DỤNG CON TRỎ CHO MẢNG
• Con trỏ được dùng để truy xuất mảng:
– Khai báo mảng: int Mang[10];
– Khai báo con trỏ: int * con_tro;
– Con trỏ chỉ đến mảng: con_tro = & Mang[0];
– Dùng con trỏ truy xuất mảng:Mang[0] *con_tro
Mang[1] *(con_tro+1)
Mang[n] *(con_tro+n)
12
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
ỨNG DỤNG CON TRỎ CHO MẢNG (tt)
• Con trỏ thay thế hồn tồn mảng:
– Khai báo con trỏ: int * con_tro;
– Mảng tạo bởi con trỏ: con_tro = new int[10];
– Truy xuất giá trị mảng: * (con_tro+0) hoặc con_tro[0]
* (con_tro+1) hoặc con_tro[1]
13
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TĨM TẮT
• Con trỏ là biến sử dụng bộ nhớ động, khắc phục hạn
chế của bộ nhớ tĩnh về cấp phát bộ nhớ khi cần thiết/
khơng cần thiết,
• Con trỏ lưu địa chỉ vùng nhớ tương ứng của nĩ,
• Kiểu dữ liệu của con trỏ là kiểu dữ liệu của giá trị
đang lưu trong vùng nhớ tương ứng của con trỏ,
• Con trỏ cĩ thể chỉ đến vùng nhớ tĩnh đã được tạo ra
trước đĩ hoặc tạo mới với new và xĩa bỏ với delete,
• Con trỏ cĩ thể trỏ đến mảng hoặc thay thế cho mảng.
1ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
CHUỖI KÝ TỰ
(Chương 3)
ThS VÕ NHẬT VINH
2ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TỔNG QUAN
• Nhắc lại về mảng và con trỏ,
• Giới thiệu chuỗi ký tự:
– Khái quát chuỗi ký tự,
– Khai báo chuỗi ký tự,
– Khởi tạo chuỗi ký tự,
– Truy xuất chuỗi ký tự,
• Một số hàm xử lý văn bản,
• Mở rộng vấn đề,
• Tĩm tắt.
3ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
NHẮC LẠI VỀ MẢNG VÀ CON TRỎ
• Mảng:
– Tập hợp các dữ liệu cùng kiểu, cùng tên và xếp liên
tiếp nhau trong bộ nhớ,
– Kiểu dữ liệu cĩ thể là ký tự,
– Chỉ cĩ thể truy xuất được từng phần tử,
• Con trỏ:
– Là biến truy xuất bộ nhớ động, cĩ giá trị là địa chỉ
vùng nhớ,
– Nội dung của vùng nhớ cĩ thể là kiểu ký tự,
– Cĩ thể dùng con trỏ thay thế hồn tồn cho mảng.
4ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU VỀ CHUỖI KÝ TỰ
• Khaí quát chuỗi ký tự:
– Tập hợp các ký tự được xếp liên tiếp nhau trong bộ
nhớ và cĩ ký hiệu đặc biệt kết thúc ở cuối,
– Cĩ thể sử dụng mảng, con trỏ để lưu trữ chuỗi ký tự,
– Visual C++ cho phép cĩ một số tác động khác lên
chuỗi so với mảng ký tự,
• Khai báo chuỗi ký tự:
– Chuỗi ký tự sử dụng mảng,
– Chuỗi ký tự sử dụng con trỏ,
5ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU VỀ CHUỖI KÝ TỰ (2)
• Khai báo chuỗi ký tự:
Cần khai báo thư viện các hàm xử lý chuỗi và
vùng nhớ để nạp chuỗi ký tự.
#include using namespace std;
– Chuỗi ký tự sử dụng mảng:
• Khai báo tên, kích thước, kiểu dữ liệu ký tự,
• Kích thước là độ dài tối đa của chuỗi và ký tự đặc biệt kết
thúc chuỗi,
• Trong Visual C++: char tên_mảng [kích_thước];
– Chuỗi ký tự sử dụng con trỏ:
• Khai báo tên con trỏ, kiểu dữ liệu ký tự,
• Trong Visual C++: char * tên_con_trỏ;
6ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU VỀ CHUỖI KÝ TỰ (3)
• Khởi tạo chuỗi ký tự:
– Ngay khi khai báo:
• Cĩ thể gán trực tiếp chuỗi ký tự hoặc tập hợp các phần tử
của chuỗi ký tự,
• Trong Visual C++:
char tên_mảng [kích_thước] = “chuỗi_ký_tự”;
char tên_mảng[ ] = {‘kytu1’, ‘kytu2’,’kytu3’,’\0’};
char * tên_con_trỏ = “chuỗi_ký_tự”;
• VC++ hỗ trợ cấp một vùng nhớ cho chuỗi ký tự hằng,
– Sau khi khai báo:
• Chuỗi dùng con trỏ: cĩ thể gán trực tiếp chuỗi hằng (sau khi
khởi tạo bằng new),
• Chuỗi dùng mảng: phải gán từng phần tử của mảng.
7ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU VỀ CHUỖI KÝ TỰ (4)
• Truy xuất chuỗi ký tự:
– Xuất chuỗi ký tự:
• Xuất từng ký tự,
• Xuất tồn bộ chuỗi cùng 1 lúc (điểm khác biệt với mảng kiểu
dữ liệu khác).
– Nhập chuỗi ký tự:
• Dùng cin >>,
• Dùng cin.getline(tên_chuỗi, kích thước),
– Truy xuất từng phần tử của chuỗi: giống như truy
xuất mảng và con trỏ thơng thường.
8ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
MỘT SỐ HÀM XỬ LÝ VĂN BẢN
• Kích thước: size(), strlen()
• Nối hai chuỗi: strcat(), strncat()
• Thay đổi nội dung của chuỗi bằng chuỗi khác:
strcpy(), strncpy()
• ðịnh vị một ký tự trong chuỗi: strchr()
• Lưu ý:
– Gán trực tiếp một chuỗi hằng cho một chuỗi bằng con
trỏ: con trỏ được liên hết với vùng nhớ đang chứa
chuỗi hằng,
– Nên sử dụng strcpy() thay phép gán.
9ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
MỞ RỘNG VẤN ðỀ
• Chuỗi dữ liệu nhập dài và được sử dụng nhiều
lần: nếu nhập từ bàn phím rất bất tiện,
• Chuỗi dữ liệu xuất ra màn hình dài nên khĩ theo
dõi và khơng lưu trữ để sử dụng lần sau được,
• Việc nhập/ xuất dữ liệu thơng qua tập tin (file) sẽ
giúp ta giải quyết vấn đề trên.
10
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TĨM TẮT
• Chuỗi ký tự là tập hợp các ký tự được xếp liên
tiếp nhau và cĩ ký tự đặc biệt kết thúc ở cuối,
• Chuỗi ký tự cĩ thể được khai báo bằng cách
dùng mảng và con trỏ,
• Với sự hỗ trợ của Visual C++, chuỗi ký tự cĩ thể
được xuất/ nhập tồn bộ các phần tử,
• Một số hàm hỗ trợ xử lý văn bản,
• Lưu ý việc gán giá trị chuỗi cho chuỗi ký tự,
• Tập tin sẽ tạo thuận tiện cho việc nhập/ xuất.
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
CHƯƠNG 4
(Tập tin và luồng)
ThS Võ Nhật Vinh
2ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TỔNG QUÁT
• ðặt vấn đề,
• Giới thiệu tập tin,
• Giới thiệu lớp, đối tượng,
• Truy xuất tập tin
– Các lớp và đối tượng trong VC++,
– Nhập dữ liệu từ tập tin,
– Ghi dữ liệu vào tập tin,
• Mở rộng vấn đề,
• Tĩm tắt.
3ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
ðẶT VẤN ðỀ
• Nhập dữ liệu từ bàn phím: khơng thể quay lui để
sửa sai những dữ liệu vừa nhập trước đĩ,
• Mỗi lần thực hiện chương trình, phải tiến hành
nhập lại dữ liệu từ bàn phím trong khi dữ liệu cĩ
thể khơng khác lần thực hiện trước,
• Kết quả chương trình được hiển thị ra màn hình
khơng thể lưu trữ lại được để kiểm tra hoặc sử
dụng sau này,
• Cần cĩ cơ chế nhập/ xuất dữ liệu khác: tập tin.
4ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU TẬP TIN
• Tập tin dùng để lưu trữ dữ liệu trên ổ đĩa, cĩ thể
được truy xuất nhiều lần và lâu dài,
• Tập tin sắp xếp các dữ liệu theo tuần tự, muốn
truy xuất 1 dữ liệu nào đĩ thì phải truy xuất lần
lượt các dữ liệu được xếp trước đĩ,
• Sau dữ liệu cuối cùng trong tập tin là ký hiệu kết
thúc tập tin.
5ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU LỚP, ðỐI TƯỢNG
• Lớp (class) giống như một kiểu dữ liệu do người
lập trình định nghĩa và cĩ thể bao gồm nhiều
kiểu dữ liệu và hàm khác,
– VD: Lớp lớp_ðH_Mở
• ðối tượng (object) là giá trị cĩ thể được tạo, lưu
trữ và thao tác trong một ngơn ngữ lập trình,
• Mọi đối tượng phải thuộc 1 lớp nào đĩ
– VD: ðối tượng T7B2 thuộc lớp lớp_ðH_Mở.
6ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TRUY XUẤT TẬP TIN
• Các lớp và đối tượng trong VC++:
– Biểu diễn các luồng xuất nhập từ bàn phím và ra màn
hình:
• ðối tượng cin của iostream kết nối với bàn phím,
• ðối tượng cout của iostream kết nối với màn hình,
– Biểu diễn các luồng xuất nhập từ tập tin:
• ðối tượng của ifstream kết nối dữ liệu đọc từ tập tin,
• ðối tượng của ofstream kết nối dữ liệu ghi vào tập tin,
• Các lớp này nằm trong thư viện fstream.h
7ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TRUY XUẤT TẬP TIN (2)
• Nhập dữ liệu từ tập tin:
– Khai báo thư viện,
– Khai báo đối tượng của lớp ifstream,
– Nhập dữ liệu:
• Mở tập tin,
• ðọc dữ liệu,
• ðĩng tập tin,
• VD trong VC++:
# include
ifstream đối_tượng_nhập;
đối_tượng_nhập.open (“tên_tập_tin”);
đối_tượng_nhập >> n;
đối_tượng_nhập.close();
8ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TRUY XUẤT TẬP TIN (3)
• Ghi dữ liệu vào tập tin:
– Khai báo thư viện,
– Khai báo đối tượng của lớp ofstream,
– Ghi dữ liệu:
• Mở tập tin,
• Ghi dữ liệu,
• ðĩng tập tin,
• VD trong VC++:
# include
ofstream đối_tượng_xuất;
đối_tượng_xuất.open (“tên_tập_tin”);
đối_tượng_xuất << n;
đối_tượng_xuất.close();
9ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TRUY XUẤT TẬP TIN (4)
• So sánh việc xuất nhập từ bàn phím/ màn hình
với xuất nhập bằng tập tin:
– Thay vì sử dụng đối tượng cin, ta sẽ dùng 1 đối
tượng nhập của ifstream,
– Thay vì sử dụng đối tượng xuất cout, ta sẽ dùng 1 đối
tượng xuất của ofstream,
– Các thao tác cho cin và cout cĩ thể được sử dụng
cho các đối tượng xuất nhập bằng tập tin,
– Vd: các tốn tử và hàm >, getline() ... vẫn được
sử dụng.
10
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
MỞ RỘNG VẤN ðỀ
• Sinh viên đã được học cách xây dựng chương
trình dựa trên cách tổ chức, các kiểu dữ liệu cơ
bản, các cấu trúc điều khiển,
• Cấu trúc tuần tự, cấu trúc điều kiện và cấu trúc
lặp là 3 cấu trúc điều khiển để xây dựng chương
trình,
• Cĩ những bài tốn, cách suy nghĩ thuần túy dựa
trên 3 cấu trúc điều khiển này khơng thể giải
quyết được,
• ðệ quy là một hướng giải mới sẽ được xem xét.
11
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TĨM TẮT
• Nhập/ghi dữ liệu qua tập tin tiện lợi hơn, tập tin
lưu dữ liệu theo kiểu tuần tự,
• Lớp giống như một kiểu dữ liệu được tạo ra và
đối tượng là một giá trị được tạo ra – lưu trữ -
thao tác. ðối tượng phải thuộc 1 lớp nào đĩ,
• Việc nhập/ghi dữ liệu qua tập tin theo các bước:
mở tập tin, nhập/ghi dữ liệu, đĩng tập tin,
• Sử dụng đối tượng nhập thuộc ifstream, đối
tượng xuất thuộc ofstream để đọc/ghi tập tin,
• Cĩ nhiều bài tốn mà các thuật tốn hiện nay
chưa xử lý tốt bằng cấu trúc vịng lặp.
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
CHƯƠNG 5
(ðệ quy)
ThS Võ Nhật Vinh
2ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TỔNG QUÁT
• ðặt vấn đề,
• Giới thiệu đệ quy:
– Nhận diện bài tốn đệ quy,
– Phần chính của đệ quy,
– ðiều kiện dừng của đệ quy,
• Ví dụ về đệ quy,
• Mở rộng vấn đề,
• Tĩm tắt.
3ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
ðẶT VẤN ðỀ
• Bài tốn: hàm luy_thua(n) trả giá trị 2n,
• Cách suy nghĩ 1: 2n = 2 x 2 x 2 x x 2 (n lần),
– Sử dụng vịng lặp để tính sự tích lũy,
• Cách suy nghĩ 2: 2n = 2 x 2n-1, 2n-1 = 2 x 2n-2
– Gọi hàm luy_thua(n) sẽ cho giá trị 2n,
– Gọi hàm luy_thua(n-1) sẽ cho giá trị 2n-1,
– Cĩ thể viết lại: luy_thua(n) = 2 x luy_thua(n-1),
• Cĩ thể giải một số bài tốn bằng phương pháp
“gọi lại chính nĩ”.
4ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU ðỆ QUY
• Nhận diện bài tốn đệ quy:
– Cấu trúc lặp được sử dụng,
– Mỗi bước lặp lại được thực hiện với tham số thay đổi,
– Kết quả lần tính sau được tính dựa trên lần tính
trước,
– Bài tốn đệ quy sẽ gồm 2 phần: phần chính và phần
điều kiện dừng.
5ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU ðỆ QUY
• Phần chính của đệ quy:
– Tính tốn kết quả cần trả ra dựa trên kết quả của lần
tính tốn trước (xem như đã biết),
– Lưu ý sự thay đổi của tham số,
– Vd: với luy_thua(n) ta sẽ return 2 * luy_thua (n-1).
6ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
GIỚI THIỆU ðỆ QUY
• ðiều kiện dừng của đệ quy:
– Tham số của lời gọi đệ quy sẽ thay đổi,
– Tham số phải thay đổi và phải hội tụ về 1 giá trị được
xác định trước,
– Khi tham số đạt được giá trị hội tụ đĩ, một kết quả
xác định trước phải được trả ra và khơng thực hiện
lời gọi đệ quy nữa,
– Vd:
• luy_thua(n) sẽ cho return 2*luy_thua(n-1),
• Với n = 0, luy_thua(0) sẽ cho return 1.
7ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
VÍ DỤ VỀ ðỆ QUY
• Bài tốn tính 2n:
int luy_thua(int n)
{
if (n==0) return 1;
else return 2*luy_thua(n-1);
}
• Bài tốn tính n!:
int giai_thua(int n)
{
if (n==0)||(n==1) return 1;
else return n*giai_thua(n-1);
}
8ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
MỞ RỘNG VẤN ðỀ
• Các kiểu dữ liệu cơ bản được cung cấp sẵn
khơng đủ để biểu diễn các dữ liệu trong thực tế,
• Ta cĩ thể tạo “kiểu dữ liệu” mới gọi là “lớp” với
các giá trị cụ thể “đối tượng” để quản lý chương
trình dễ hơn,
• Lập trình hướng đối tượng (OOP) sẽ sử dụng
đối tượng và lớp,
• Chương 6 sẽ đề cập đến vấn đề này.
9ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TĨM TẮT
• ðệ quy là lời giải tự nhiên cho những bài tốn
lặp mà kết quả sau phụ thuộc trực tiếp kết quả
trước,
• ðệ quy gồm 2 phần: phần chính biểu diễn quan
hệ của các lần thực hiện và phần điều kiện
dừng của đệ quy,
• Lập trình hướng đối tượng giúp ta quản lý
chương trình hiệu quả hơn với kiểu dữ liệu phù
hợp với dữ liệu tự nhiên.
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
CHƯƠNG 6
(Lớp)
ThS Võ Nhật Vinh
2ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TỔNG QUÁT
• ðặt vấn đề,
• Xây dựng kiểu dữ liệu với struct:
– ðịnh nghĩa một kiểu dữ liệu mới,
– Truy xuất thuộc tính,
• Xây dựng lớp (class):
– ðịnh nghĩa một lớp,
– Xây dựng các phương thức,
– Truy xuất thuộc tính, phương thức,
– Xây dựng tốn tử nạp chồng,
• Mở rộng vấn đề,
• Tĩm tắt.
3ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
ðẶT VẤN ðỀ
• Cĩ những đối tượng trong cuộc sống mà ta cần
miêu tả chúng,
• Một đối tượng cĩ nhiều khía cạnh cần được miêu
tả, mỗi khía cạnh là một dữ liệu,
• Vì vậy, để miêu tả được một đối tượng dưới dạng
dữ liệu, ta cần nhiều phải sử dụng nhiều biến dữ
liệu,
• Cần phải tạo liên kết cho các dữ liệu với nhau để
biết rằng chúng cùng để miêu tả 1 đối tượng,
Xây dựng kiểu dữ liệu mới bao gồm nhiều dữ
liệu con.
4ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG KIỂU DỮ LIỆU STRUCT
• ðịnh nghĩa kiểu dữ liệu mới trong Visual C++:
struct ten_kieu
{
kiểu_dữ_liệu_1 biến_1;
kiểu_dữ_liệu_2 biến_2;
kiểu_dữ_liệu_3 biến_3;
}
5ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG KIỂU DỮ LIỆU STRUCT (2)
• Khai báo một “biến” thuộc kiểu dữ liệu vừa tạo
ra: ten_kieu tên_biến;
• Truy xuất thuộc tính:
– Các biến dữ liệu bên trong kiểu dữ liệu mới được gọi
là các “thuộc tính”,
– Sử dụng tốn tử dấu chấm (biến thơng thường) và
tốn tử mũi tên (biến con trỏ) để truy xuất các “thuộc
tính”.
6ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG KIỂU DỮ LIỆU STRUCT (3)
• Ví dụ:
– Kiểu dữ liệu Books:
struct Books
{
int nam_xuat_ban;
int gia_tien;
};
– Khai báo “biến” MyBook kiểu Books: Books MyBook;
– Truy xuất các thuộc tính của MyBook:
MyBook.nam_xuat_ban
MyBook.gia_tien
7ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG LỚP
• Lớp (Class) cũng cĩ thể được xem là kiểu dữ liệu
được người dùng định nghĩa giống như struct
nhưng ngồi các thuộc tính, nĩ cịn chứa những
cách thức tác động lên dữ liệu của nĩ (hàm),
• Lớp cĩ thể hiểu là tập hợp những đối tượng giống
nhau mà ta cần miêu tả,
• Lớp cho phép che các dữ liệu của nĩ khi nhìn từ
bên ngồi.
8ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG LỚP (2)
• ðịnh nghĩa một lớp mới trong VC++ như sau:
class tên_lớp
{
public:
// khai báo các biến
// khai báo các phương thức (hàm)
private:
// khai báo các biến
// khai báo các phương thức (hàm)
}
9ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG LỚP (3)
• Xây dựng các phương thức của lớp:
– Phương thức đặc biệt khởi tạo dùng để khởi tạo các
giá trị ban đầu cho dữ liệu của đối tượng. Phương
thức khởi tạo cùng tên với tên lớp và khơng trả trị.
Các giá trị của dữ liệu KHƠNG thể được khởi tạo lúc
khai báo,
– Phần định nghĩa của các phương thức (hàm thành
viên) cĩ thể được đặt trong hoặc ngồi phần định
nghĩa lớp. Nếu đặt ngồi, trước tên hàm phải cĩ tên
của lớp và tốn tử ::.
10
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG LỚP (4)
• VD xây dựng phương thức của lớp trong VC++:
class Car
{ public:
Car();
int Seats;
private:
int Model_Year;
};
Car::Car()
{
Seats = 4; Model_Year = 2008;
}
11
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG LỚP (5)
• Truy xuất thuộc tính, phương thức:
– Truy xuất giống như trong trường hợp struct,
– ðối với các thuộc tính và phương thức ở chế độ
private, chúng chỉ được truy xuất trong các phương
thức của chính đối tượng đĩ,
• Ví dụ:
Car Vios;
Vios.Seats = 4; // hợp lệ
Vios.Model_Year = 2002 // khơng hợp lệ
12
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
XÂY DỰNG LỚP (6)
• Xây dựng tốn tử nạp chồng:
– Tốn tử nạp chồng là những tốn tử đã được định
nghĩa sẵn nhưng khơng thể áp dụng cho các đối
tượng này mà cần được định nghĩa lại,
– VC++ cho phép ta định nghĩa lại các tốn tử đã cĩ
mà hình thức bên ngồi vẫn như vậy,
– VD:
• VC++ hỗ trợ phép tốn + giữa 2 số kiểu int,
• Lớp phan_so được định nghĩa để thể hiện một phân số,
• Làm sao để thực hiện phép tốn + giữa 2 đối tượng
phan_so?
13
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
MỞ RỘNG VẤN ðỀ
• Các tốn tử nạp chồng rất cần thiết cho việc
thao tác trên các đối tượng của lớp,
• Các tốn tử nạp chồng cơ bản bao gồm: nhập,
xuất, tốn tử 1 ngơi, tốn tử 2 ngơi,
• Phần sau của chương này sẽ trình bày thêm về
cách thức xây dựng các tốn tử nạp chồng nĩi
trên.
14
ðại học Mở TP.Hồ Chí Minh
Khoa Cơng Nghệ Thơng Tin
KỸ THUẬT LẬP TRÌNH
TĨM TẮT
• Cần cĩ các kiểu dữ liệu để miêu tả các đối
tượng trong tự nhiên,
• Cĩ thể dùng struct để định nghĩa kiểu dữ liệu
mới hoặc lớp (class) để định nghĩa kiểu dữ liệu
mới và các hành vi tương tác lên các dữ liệu
bên trong (phương thức – hàm thành viên),
• Các tốn tử nạp chồng cho phép định nghĩa lại
những tốn tử đã được định nghĩa sẵn trước đĩ
và phù hợp với các đối tượng của chúng ta.
Các file đính kèm theo tài liệu này:
- tailieu.pdf