Tải bản đầy đủ (.pdf) (73 trang)

Giáo án - Bài giảng: BÀI GIẢNG MÔN KỸ THUẬT LẬP TRÌNH (C++)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.21 MB, 73 trang )

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 toá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ố: a

0
, a
1
, a
2
, …, a
n
• 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ố: b
0
, b
1
, b
2
, …, b
m
• 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ả:
c
ij
= a
i
x b
j
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)

a
n
x b
m
x b
m
a
2
x b
m
a
1
x b
m
a
0
x b
m
b
m
a
n
x …… x …a
2
x …a
1
x …a
0
x ……
a

n
x b
2
x b
2
a
2
x b
2
a
1
x b
2
a
0
x b
2
b
2
a
n
x b
1
x b
1
a
2
x b
1
a

1
x b
1
a
0
x b
1
b
1
a
n
x b
0
x b
0
a
2
x b
0
a
1
x b
0
a
0
x b
0
b
0
a

n
…a
2
a
1
a
0
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 li:
• 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 toà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 toá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

×