Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 40

CƠ SỞ LẬP TRÌNH

Số tín chỉ: 3
Giảng viên: Ths. Cù Nguyên Giáp
Bộ môn: Tin học

10/04/23 Cơ sở lập trình 1


Nội dung
Chương 1: Kỹ thuật lập trình cơ bản
Chương 2: Lập trình căn bản trên C
Chương 3: Mảng, xâu và con trỏ
Chương 4: Hàm và macro
Chương 5: Kiểu dữ liệu có cấu trúc

10/04/23 Cơ sở lập trình 2


Tài liệu tham khảo
[1] Đỗ Xuân Lôi – Cấu trúc dữ liệu và giải thuật – Nhà xuất
bản Khoa học và Kỹ thuật.
[2] Nguyễn Minh San – Cẩm nang lập trình, tập 1 & 2 –
Nhà xuất bản Giáo dục, 1996.
[3] Quách Tuấn Ngọc – Ngôn ngữ lập trình C – Nhà xuất
bản Thống kê, 2003.
[4] Bùi Thế Tâm – Giáo trình TURBO C/C++ – Nhà xuất bản
Giao thông vận tải, 2003.
[5] Phạm Văn Ất – Lập trình C, Nhà xuất bản Giáo dục,
2007.

10/04/23 Cơ sở lập trình 3


Chương 1- Kỹ thuật lập trình cơ bản
1.1 Thuật toán
1.2 Sơ đồ khối
1.3 Chương trình và ngôn ngữ lập trình
1.4 Các phương pháp lập trình
1.5 Kỹ thuật thiết kế chương trình

10/04/23 Cơ sở lập trình 4


1.1 Thuật toán
1.1.1 Khái niệm
1.1.2 Tính chất của thuật toán
1.1.3 Ví dụ

10/04/23 Cơ sở lập trình 5


1.1.1 Khái niệm
Khái niệm 1: Thuật toán là một dãy hữu hạn các
bước được sắp xếp theo một trật tự xác định,
mỗi bước mô tả chính xác các phép toán hoặc
hành động cần thực hiện, để giải quyết một vấn
đề.
Khái niệm 2: Thuật toán là một dãy hữu hạn các
thao tác, sắp xếp theo một trật tự xác định, sau
khi thực hiện, từ dữ liệu đầu vào (Input) ta nhận
được kết quả đầu ra (Output) cần tìm.

10/04/23 Cơ sở lập trình 6


1.1.2 Tính chất của thuật toán
– Tính vào (input)
– Tính ra (output)
– Tính đơn định (xác định / đơn nghĩa)
– Tính đúng đắn
– Tính dừng (tính kết thúc / tính đóng)
– Tính phổ dụng
– Tính khả thi/hiệu quả

10/04/23 Cơ sở lập trình 7


1.1.3 Ví dụ
Xây dựng thuật toán để giải phương trình:
ax + b=0
Trong đó a,b là các số thực được nhập vào từ bàn phím

Cách giải bài toán trên giấy: có 3 khả năng xảy ra:
- Có một nghiệm duy nhất: x = -b/a khi a≠0.
- Phương trình vô nghiệm khi a=0 và b≠0.
- Phương trình có vô số nghiệm khi a=0 và b=0.
1.1.3 Ví dụ
 Thuật toán:
+ Bước 1: Nhập a, b.
+ Bước 2: Kiểm tra a≠0?
Nếu đúng chuyển sang bước 3.
Nếu sai chuyển sang bước 5.
+ Bước 3: Tính nghiệm x = -b/a.
+ Bước 4: In x rồi chuyển bước 8.
+ Bước 5: Kiểm tra b≠0?
Nếu đúng chuyển sang bước 6.
Nếu sai chuyển sang bước 7.
+ Bước 6: In “PTVN”, rồi chuyển bước sang 8.
+ Bước 7: In “PTCVSN”.
+ Bước 8: Kết thúc.
1.2 Sơ đồ khối
1.2.1 Khái niệm
1.2.2 Các cấu trúc điều khiển
1.2.3 Ví dụ

10/04/23 Cơ sở lập trình 10


1.2.1 Khái niệm
Khái niệm 1: Sơ đồ khối là tập hợp các ký hiệu và
quy tắc dùng để biểu diễn thuật toán
Khái niệm 2: Sơ đồ khối là cách thể hiện thuật toán
bằng các hình khối hình học nối với nhau bằng
đường đi có hướng
Các thành phần:
Hình oval: thể hiện sự bắt đầu/kết thúc của thuật toán.
 Hình bình hành: thể hiện thao tác nhập xuất dữ liệu
Hình chữ nhật: thể hiện các phép tính toán
Hình thoi: thể hiện thao tác so sánh
Các mũi tên: thể hiện trình tự thực hiện các thao tác

10/04/23 Cơ sở lập trình 11


1.2.1 Khái niệm
• Các khối

BĐ X=-b/a
a=0

Khối tính toán


Khối bắt đầu
Khối kiểm tra điều kiện

Vào/ra a

KT
Hướng thực hiện.
Khối Vào/Ra
Khối kết thúc

10/04/23 Cơ sở lập trình 12


1.2.2 Các cấu trúc điều khiển
• Sơ đồ khối dạng tuần tự: Là sơ đồ khối thể hiện thuật toán
gồm n khối mà khi thực hiện thuật toán với một bộ dữ liệu cụ
thể sẽ lần lượt thực hiện từ khối đầu tiên đến khối cuối cùng
theo thứ tự viết của nó.
• Sơ đồ khối dạng rẽ nhánh: Là sơ đồ khối thể hiện thuật toán
gồm n nhánh mà khi thực hiện thuật toán với một bộ dữ liệu
cụ thể sẽ thực hiện một trong n nhánh mà thôi.
• Sơ đồ khối dạng chu trình: Là sơ đồ khối thể hiện thuật toán
gồm n khối mà khi thực hiện thuật toán với một bộ dữ liệu cụ
thể sẽ có một số khối lặp đi lặp lại nhiều lần phụ thuộc vào
một điều kiện nào đó vẫn thỏa mãn.

10/04/23 Cơ sở lập trình 13


Sơ đồ khối
a) Cấu trúc tuần tự:

CV1

CV2
b) Cấu trúc rẽ nhánh:
Có 4 dạng cơ bản.
Dạng thứ nhất: Dạng thứ hai:

ĐK S ĐK S

Đ Đ
CV1
CV1

CV2
CV2
CV3
b) Cấu trúc rẽ nhánh:

Dạng thứ ba: Dạng thứ tư:

S
ĐK1 S CV1
ĐK1 CV1

Đ
Đ S
ĐK2 CV2
ĐK2 S CV2
Đ
Đ ...
... S
ĐKn CVn

ĐKn
S CVn
Đ
CVn+1
Đ
CVn+1 CVn+2
b) Cấu trúc lặp:

Có 2 dạng cơ bản.
Dạng thứ nhất: Dạng thứ hai:

i=i1
S
ĐK lặp
i<= i2 S

Đ
Đ
CV lặp CV lặp

i=i+i3
CV tiếp theo

CV tiếp theo
1.2.3 Ví dụ
Xây dựng sơ đồ khối mô tả thuật toán giải phương trình:
ax + b=0
Trong đó a,b là các số thực được nhập vào từ bàn phím

10/04/23 Cơ sở lập trình 18


Sơ đồ khối

Tính
Trình tự?
Nhập a,b

S vào/ra?
a≠0
Đ

x= -b/a
Tính xác
In x
định?
Tính dừng?
S
b≠0
Đ

In “PTVN”

In “PTCVSN”

KT
1.3 Chương trình và ngôn ngữ lập trình
1.3.1 Chương trình
1.3.2 Ngôn ngữ lập trình
1.3.3 Trình tự giải bài toán trên MTĐT
1.3.4 Đánh giá chương trình MTĐT

10/04/23 Cơ sở lập trình 20


1.3.1 Chương trình

Khái niệm: Chương trình là một tập hợp các


lệnh để thể hiện một thuật toán giải quyết một
bài toán hay một nhiệm vụ nào đó.
Trong đó:
Lệnh: là một chỉ thị để máy tính có thể thực
hiện một cách tự động.

10/04/23 Cơ sở lập trình 21


1.3.2 Ngôn ngữ lập trình
Khái niệm: Ngôn ngữ lập trình là ngôn ngữ để
viết chương trình.
Phân loại: (phụ thuộc vào kiến trúc và hoạt
động của máy tính)
• Ngôn ngữ máy (ngôn ngữ bậc thấp)
• Ngôn ngữ hợp ngữ
• Ngôn ngữ bậc cao: C, Pascal, Fortran, C++,
Java, C# .v.v.
10/04/23 Cơ sở lập trình 22
1.3.3 Trình tự giải bài toán trên MTĐT

Bước 1: Xác định bài toán


Bước 2: Tìm cấu trúc biểu diễn bài toán
Bước 3: Chọn phương pháp giải
Bước 4: Lập trình giải bài toán
Bước 5: Thử nghiệm chương trình
Bước 6: Tối ưu chương trình (bảo trì)

10/04/23 Cơ sở lập trình 23


1.3.4 Đánh giá chương trình MTĐT
 Mục tiêu:
 Xây dựng chương trình tốt, có chất lượng
 Tiêu chuẩn đánh giá:
• Tính đúng đắn: chương trình phải thực hiện đúng và đầy đủ
các nhiệm vụ mà bài toán đặt ra.
• Tính bền vững: có khả năng hoạt động tốt ngay cả trong những
điều kiện bất bình thường.(khi đặc tả hệ thống không lường
hết các tình huống)

10/04/23 Cơ sở lập trình 24


1.3.4 Đánh giá chương trình MTĐT

• Tính sử dụng lại: các thành phần của nó có thể sử


dụng lại trong các chương trình khác.
• Tính có thể mở rộng (thích nghi): chương trình dễ
sửa đổi, bổ sung để thích nghi với những thay đổi
của bài toán theo yêu cầu của người dùng.
• Tính tương thích: có thể dễ dàng kết hợp, trao đổi
với nhiều chương trình hệ thống phần mềm khác
• Tính hiệu quả: chi phí thấp (xây dựng, vận hành,…,
đào tạo, huấn luyện sử dụng, tài nguyên máy tính:
không gian và thời gian)
10/04/23 Cơ sở lập trình 25
1.3.4 Đánh giá chương trình MTĐT
• Tính dễ chuyển đổi: có thể chuyển sang thực
hiện trên phần cứng mới hoặc môi trường
phần mềm (hệ điều hành) khác.
• Tính an toàn: bảo vệ được quyền truy cập,
đảm bảo không cho người không được phép
truy cập, sửa đổi và làm hư hại thông tin
• Thân thiện với người sử dụng: tin cậy và trình
độ sử dụng tỉ lệ thuận với những công sức đầu
tư học và sử dụng nó trong thực tế.

10/04/23 Cơ sở lập trình 26


1.4 Các phương pháp lập trình
• 1.4.1 Lập trình hướng thủ tục
• 1.4.2 Lập trình hướng đối tượng

10/04/23 Cơ sở lập trình 27


1.4.1 Lập trình hướng thủ tục
(procedural/functional programming)

• Tư tưởng: Chia nhỏ bài toán thành các thành


phần cho đến khi mỗi thành phần có thể giải
quyết bằng một thuật toán đơn giản hoặc
không còn chia nhỏ được nữa từ đó xây dựng
cấu trúc dữ liệu và các hàm, thủ tục để giải các
bài toán con.
Tổ chức chương trình thành các chương trình
con (hàm và thủ tục).

10/04/23 Cơ sở lập trình 28


1.4.1 Lập trình hướng thủ tục
(procedural/functional programming)

• Trong đó: hàm là một đơn vị chương trình độc


lập dùng để thực hiện một phần việc nào đó
như: nhập số liệu, in kết quả hoặc thực hiện
một số tính toán.
• Ví dụ: C, Pascal, Foxpro

10/04/23 Cơ sở lập trình 29


1.4.1 Lập trình hướng thủ tục
Chương trình chính

Hàm_1 Hàm_2 Hàm_3

Hàm_4 Hàm_5 Hàm_6

Hàm_7 Hàm_8 Hàm_9

10/04/23 Cơ sở lập trình 30


1.4.1 Lập trình hướng thủ tục
 Đặc điểm:
 Tập trung vào công việc cần thực hiện (thuật toán)
 Chương trình lớn được chia thành các hàm nhỏ hơn.
 Phần lớn các hàm sử dụng dữ liệu chung
 Các hàm (thủ tục) truyền thông tin cho nhau thông
qua cơ chế truyền tham số.
 Dữ liệu trong hệ thống được chuyển động từ hàm này
sang hàm khác.
 Đóng gói chức năng (sử dụng hàm/thủ tục mà không
cần biết nội dung cụ thể)
 Chương trình được thiết kế theo cách tiếp cận từ
trên xuống (top - down)
10/04/23 Cơ sở lập trình 31
1.4.1 Lập trình hướng thủ tục
Nhược điểm:
• Có hàm có thể truy cập và thay đổi dữ liệu
chung  khó kiểm soát (nhất là đối với
chương trình lớn, phức tạp)
• Nếu thay đổi cấu trúc dữ liệu dùng chung cho
một số hàm thì phải thay đổi các hàm liên
quan dữ liệu đó.
• Mô hình được xây dựng theo cách tiếp cận
này không mô tả được đầy đủ và trung thực
các hệ thống trong thực tế (phân tích, thiết
kế)
10/04/23 Cơ sở lập trình 32
Ví dụ: Bài toán quan hệ gia đình

Mr. Định Mrs. Hương

Mr. Chiến Mrs. Hải Mr. Sơn Mrs. Hà

Miss. Linh Mr. Hưng Mr. Hiếu

10/04/23 Cơ sở lập trình 33


Ví dụ: Bài toán quan hệ gia đình
Vấn đề: xây dựng cấu trúc dữ liệu để thể hiện cây quan
hệ: thành thạo con trỏ, cập nhập thông tin trên cây quan hệ
Yêu cầu bài toán: “Hưng và Hiếu có quan hệ như thế
nào?”xây dựng giải thuật xác định mối quan hệ, tên gọi
các mối quan hệ ở Việt nam rất phong phú vét cạn các
mối quan hệ
Câu hỏi: Muốn quản lý nhiều gia đình và các gia đình có
quan hệ thông gia với nhau?  cấu trúc thay đổi  thuật
toán thay đổi

10/04/23 Cơ sở lập trình 34


1.4.2 Lập trình hướng đối tượng
(Object Oriented programming - OOP)

Tư tưởng: Phân tích bài toán thành các thực thể được gọi
là các đối tượng  từ đó xác định các dữ liệu và các hàm
(thao tác) thể hiện đối tượng đó.
chương trình sẽ được tổ chức thành các đối tượng.
Trong đó: đối tượng là sự kết hợp giữa dữ liệu và hàm
(phương thức) thao tác trên dữ liệu đó.
 Ví dụ:
 C++, Java, Smalltalk

10/04/23 Cơ sở lập trình 35


Ví dụ: bài toán quan hệ gia đình
 Giải quyết: xem xét dưới góc độ quản lý Con người
tập các đối tượng con người Tên ?
 Thuộc tính: tên, cha, mẹ, con cái… Cha ?
 Sự kiện, phương thức: sinh con, cưới, là
Mẹ ?
anh, là ông nội,…
 Tạo cây quan hệ bằng các sự kiện: Con cái ?
Vợ chồng?
 Chiến.Cưới(Hải)
Sinh con
 Hải.Sinh con(gái,Linh) Cưới
 Hải.Sinh con(trai, Hưng) Là anh
 không cần quan tâm tạo cấu trúc cây quan Là ông nội
hệ mà vẫn trả lời được các câu hỏi
….

10/04/23 Cơ sở lập trình 36


1.4.2 Lập trình hướng đối tượng
• Đặc điểm:
– Đặt trọng tâm vào đối tượng, tập trung vào dữ
liệu thay cho các chức năng.
– Chương trình được chia thành các đối tượng.
– Các đối tượng tác động và trao đổi thông tin
cho nhau thông qua các hàm với cơ chế thông
báo.
– Đóng gói chức năng và dữ liệu (với mỗi đối
tượng ta không thể truy cập trực tiếp vào các
thành phần dữ liệu của nó mà phải thông qua
các thành phần chức năng- phương thức)
– Chương trình được thiết kế theo cách tiếp cận
từ dưới lên (bottom - up)
10/04/23 Cơ sở lập trình 37
1.4.2 Lập trình hướng đối tượng
Ưu điểm
• Dữ liệu và các hàm mới có thể dễ dàng bổ sung vào đối
tượng nào đó khi cần thiết  dễ nâng cấp thành hệ thống lớn
hơn.
• Dữ liệu được bao bọc, che dấu và không cho phép các hàm
ngoại lai truy cập tự do mà dữ liệu của một đối tượng chỉ có
thể được truy cập bởi chính các hàm xác định trong đối tượng
đó  chương trình an toàn
• Mô hình được xây dựng gần với hệ thống thực tế .
• Thông qua nguyên lý kế thừa  loại bỏ đoạn chương trình lặp
lại khi khai báo lớp và mở rộng khả năng sử dụng các lớp 
ngắn gọn, tiết kiệm thời gian
• Cách thiết kế đặt trọng tâm vào dữ liệuxây dựng mô hình
chi tiết và cài đặt dễ hơn

10/04/23 Cơ sở lập trình 38


1.5 Các kỹ thuật thiết kế chương trình (tự học)

1.5.1 Kỹ thuật thiết kế trên xuống


1.5.2 Kỹ thuật chương trình con
1.5.3 Kỹ thuật đệ quy

10/04/23 Cơ sở lập trình 39


Bài tập
 Vẽ sơ đồ khối biểu diễn thuật toán giải quyết
các bài toán:
 Tìm UCLN của 2 số nguyên dương.
 Kiểm tra tính nguyên tố của một số nguyên
dương.
 Tìm giá trị lớn nhất của một dãy số nguyên.
 Tính tổng các phần tử của dãy mà chia hết cho
3.
10/04/23 Cơ sở lập trình 40

You might also like