A
C
CẤU TRÚC DỮ LIỆU VÀ
GIẢI THUẬT (501040)
B
F
D
E
G
K
H
Giới thiệu
Môn học giới thiệu:
Các cấu trúc dữ liệu cơ bản
Các giải thuật điển hình trên các cấu trúc dữ liệu đó
Dùng phương pháp hướng đối tượng.
Ngôn ngữ lập trình minh hoạ:
Mã giả (pseudocode)
C++ (không được giảng dạy chính thức trong môn
học)
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
2
Nội dung
Chương 1. Tổng quan
Chương 2. Stack
Chương 3. Queue
Chương 4. Đệ qui
Chương 5. List và String
Chương 6. Cây nhị phân
Chương 7. Tìm kiếm
Chương 8. Sắp xếp
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
3
Một số thuật ngữ căn bản
Một chương trình máy tính (computer program)
là tập các câu lệnh để điều khiển một máy tính
sinh ra một kết quả cụ thể
Viết các chương trình máy tính gọi là lập trình
máy tính (computer programming)
Ngôn ngữ để tạo các chương trình máy tính gọi
là ngôn ngữ lập trình
Software là một chương trình hay tập hợp các
chương trình
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
4
Giới thiệu môn học
4
Ngôn ngữ máy
Cấp thấp nhất. Các chương trình bao gồm 0, 1.
Lập trình bằng ngôn ngữ máy có thể điều khiển
trực tiếp đến phần cứng máy tính
Ví dụ
00101010 000000000001 000000000010
10011001 000000000010 000000000011
Instruction part
address parts (địa chỉ bộ nhớ
(opcode – tác vụ
của dữ liệu
được thực hiện)Programming Fundamentals
5
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
5
Assembly languages
Thực hiện cùng nhiệm vụ ngôn ngữ máy nhưng
sử dụng tên tượng trưng cho opcode và các
toán tử thay vì 1, 0
LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY
Chương trình ngôn ngữ assembly phải được
dịch sang ngôn ngữ máy trước khi có thể thực
thi bởi máy tính
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
6
Giới thiệu môn học
6
Assembler
Assembly
language
program
Translation
program
(assembler)
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Machine
language
program
7
Giới thiệu môn học
7
Ngôn ngữ lập trình cấp cao
Sử dụng các câu lệnh dễ hiểu hơn.
Các chương trình sử dụng ngônn ngữ cấp cao
phải được dịch sang ngôn ngữ cấp thấp bằng
cách sử dụng một chương trình gọi là compiler
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
8
Giới thiệu môn học
8
High-level Programming Languages
(cont.)
Cho phép người lập trình viết các câu lệnh như
câu tiếng Anh và các kí hiệu toán học thông
dụng
Mỗi dòng trong chương trình ngôn ngữ mức cao
gọi là câu lệnh
Example:
Result = (First + Second)*Third
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
9
Giới thiệu môn học
9
Phần mềm ứng dụng và phần
mềm hệ thống
2 loại chương trình máy tính
Application software bao gồm những chương
trình được viết để thực thi các nhiệm vụ cụ thể
được yêu cầu bởi user
• System software là tập các chươg trình phải
luôn được sẵn sàng đến bất kì hệ thống máy
tính cho nó vận hành (hệ điều hành, bộ chuyển
đổi ngôn ngữ)
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
10
Giới thiệu môn học
10
PROGRAMMING LANGUAGES
Một số ngôn ngữ thông dụng
FORTRAN
COBOL
BASIC
PASCAL
C
C++
Java
1957
1960s
1960s
1971 Structure programming
Object-oriented programming
Cú pháp (syntax)
Cú pháp của một ngôn ngữ lập trình là tập các luật để viết các câu
lệnh chính xác
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
11
Giới thiệu môn học
11
The C Programming Language
In the 1970s, at Bell Laboratories, Dennis Ritchie and Brian
Kernighan designed the C programming language.
C was used exclusively on UNIX and on mini-computers. During the
1980s, C compilers were written for other flatforms, including PCs.
To provide a level of standardization for C language, in 1989, ANSI
created a standard version of C, called ANSI C.
One main benefit of C : it is much closer to assembly language
other than other high-level programming languages.
The programs written in C often run faster and more efficiently than
programs written in other high-level programming language.
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
12
Giới thiệu môn học
12
The C++ Programming Language
In 1985, at Bell Laboratories, Bjarne Stroutrup created C++ based
on the C language. C++ is an extension of C that adds objectoriented programming capabilities.
C++ is now the most popular programming language for writing
programs that run on Windows and Macintosh.
The standardized version of C++ is referred to as ANSI C++.
The ANSI standards also define run-time libraries, which contains
useful functions, variables, constants, and other programming items
that you can add to your programs.
The ANSI C++ run-time library is called Standard Template Library
or Standard C++ Library
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
13
Giới thiệu môn học
13
Giải thuật
Dùng C++ để diễn tả? có vấn đề
Có thể diễn tả giải thuật bằng cách sử dụng
flowchart
Flow chart thể hiện nét phát thảo cấu trúc căn
bản và tính logic của chương trình
Một cách khác để diễn tả giải thuật là sử dụng
mã giả pseudocode
Giả lập, thường là dễ hiểu, không chi tiết đến các kỹ
thuật lập trình
Ở cấp độ hết sức tổng quát: gần ngôn ngữ tự nhiên
Hoặc rất chi tiết: như dùng ngôn ngữ tựa Pascal, tựa
C++
Programming Fundamentals
14
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
14
Giải thuật (Algorithm)
15
Các tính chất quan trọng của giải thuật là:
Hữu hạn (finiteness): giải thuật phải luôn luôn kết
thúc sau một số hữu hạn bước.
Xác định (definiteness): mỗi bước của giải thuật
phải được xác định rõ ràng và phải được thực
hiện chính xác, nhất quán.
Hiệu quả (effectiveness): các thao tác trong giải
thuật phải được thực hiện trong một lượng thời
gian hữu hạn.
– Ngoài ra một giải thuật còn phải có đầu vào (input)
và đầu ra (output).
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
15
Flowchart symbols
Terminal
Input/output
Connector
Process
Flowlines
Predefined process
Decision
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
16
Giới thiệu môn học
16
Example
Start
Input Name,
Hours, Rate
Calculate
Pay ← Hours × Rate
Note: Name, Hours
and Pay are variables
in the program.
Dislay
Name, Pay
End
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
17
Giới thiệu môn học
17
Algorithms in pseudo-code
Sử dụng các cụm từ như tiếng Anh để mô tả
pseudocode.
Example:
Input the three values into the variables Name,
Hours, Rate.
Calculate
Pay = Hours × Rate.
Display Name and Pay.
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
18
Giới thiệu môn học
18
Loops
Note:
1. Loop is a very important
concept in programming.
Start
2. NUM ← NUM + 1 means
NUM ← 4
SQNUM ← NUM2
Print
NUM, SQNUM
old value of NUM + 1
becomes new value of NUM.
The algorithm can be described
in pseudocode as follows:
NUM ← 4
NUM ← NUM + 1
do
SQNUM← NUM2
No
NUM> 9?
Yes
Print NUM, SQNUM
NUM ← NUM + 1
while (NUM <= 9)
STOP
Programming Fundamentals
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
19
Giới thiệu môn học
19
Giải thuật bằng mã giả
Ví dụ: Mã giả của bubble sort
Giải thuật 1
Giải thuật 2
Algorithm Bubble sort
Algorithm Bubble sort
Input: The list A of n elements is
Input: The list A of n elements is
given
given
Output: The list A is sorted
Output: The list A is sorted
1. loop for n time
1.1. for each pair in the list
1.1.1. if it is not in ordered
1.1.1.1. exchange them
End Bubble sort
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
1. for outter in 0..(n-2)
1.1. for inner in 0..(n-2- outter)
1.1.1. if Ainner+1 < Ainner
1.1.1.1. swap Ainner, Ainner+1
End Bubble sort
Giới thiệu môn học
20
Giải thuật bằng ngôn ngữ lập trình
Ví dụ: Lập trình cụ thể Bubble sort
Giải thuật 1: Pascal
Giải thuật 2: C++
procedure BubbleSort(var A: list);
var i,j: int;
begin
for i := 1 to n-1 do
for j := 1 to (n-1-i) do
if A[j+1] < A[j] then
begin
tmp := A[j]; A[j] := A[j+1];
A[j+1] := tmp;
end;
end;
void BubbleSort(list A)
{
int i, j;
for (i=0; i < n-2; i++)
for (j=0; j<(n-2-i); j++)
if (A[j+1] < A[j]) {
tmp := A[j]; A[j] := A[j+1];
A[j+1] := tmp;
}
}
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
21
So sánh mã giả và NNLT
Nhận xét:
Mã giả 1: gần với cách trao đổi của con người nhất
nhưng khó lập trình nhất
Mã giả 2: dễ lập trình hơn
Phương pháp:
Đầu tiên: cách giải quyết vấn đề bằng máy tính số
(giải thuật bằng mã giả)
Sau đó: ngôn ngữ lập trình cụ thể
Học:
Nhớ giải thuật (mã giả)
Dùng NNLT cụ thể để minh chứng
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
22
Giải bài toán bằng phần mềm
1. Xác định bài toán
2. Thiết kế phần mềm
3. Thiết kế dữ liệu
4. Thiết kế và phân tích giải thuật
5. Lập trình và gỡ rối
6. Kiểm tra phần mềm
7. Bảo trì
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
23
Lập trình hướng đối tượng (OOP)
Chương trình = tập các đối tượng tương tác nhau.
Đối tượng (object) = thuộc tính + tác vụ
local data
of object
đối tượ ng
(object)
entry
local data of
operation
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
24
Kiểu trừu tượng
Kiểu trừu tượng (abstract type): định nghĩa
interface (tập các entry)
Entry
Tên method
Danh sách tham số hình thức
Đặc tả chức năng
Chưa có dữ liệu bên trong, chưa dùng được
Chỉ dùng để thiết kế ý niệm
ĐH Bách Khoa Tp.HCM
Khoa Công nghệ Thông tin
Giới thiệu môn học
25