Bài giảng Tin học đại cương: Chương 1 Phương pháp giải quyết bài toán bằng máy tính số trình bày các nội dung sau: Các khái niệm cơ bản về máy tính số, lịch sử phát triển máy tính số, dữ liệu & chương trình, qui trình tổng quát giải quyết bài toán bằng máy tính số, phân tích bài toán từ-trên-xuống.
Trang 1MÔN TIN H Ọ C ĐẠ I C ƯƠ NG
Tài liệu tham khảo:
T ậ p slide bài gi ả ng & th ự c hành c ủ a môn h ọ c này
3 CD MSDN trong Microsoft Visual Studio
Nội dung chính gồm 12 chương:
1 Ph ươ ng pháp gi ả i quy ế t bài toán
b ằ ng máy tính s ố
2 Th ể hi ệ n d ữ li ệ u trong máy tính s ố
3 T ổ ng quát v ề l ậ p trình b ằ ng VB
4 Qui trình thi ế t k ế tr ự c quan giao
di ệ n
5 Các ki ể u d ữ li ệ u c ủ a VB
6 Các l ệ nh đị nh ngh ĩ a & khai báo
7 Bi ể u th ứ c VB
8 Các l ệ nh th ự c thi VB
9 Đị nh ngh ĩ a th ủ t ụ c & s ử d ụ ng
10 T ươ ng tác gi ữ a ng ườ i dùng &
ch ươ ng trình
11 Qu ả n lý h ệ th ố ng file
12 Linh ki ệ n ph ầ n m ề m & truy
xu ấ t database
Đối tượng: SV đạ i h ọ c chính quy toàn tr ườ ng
Trang 2MÔN TIN H Ọ C
1.2 L ị ch s ử phát tri ể n máy tính s ố
1.3 D ữ li ệ u & ch ươ ng trình
Trang 3Con người thông minh hơn các động vật khác nhiều Trong cuộc sống,
họ đã chế tạo ngày càng nhiều công cụ, thiết bị để hỗ trợ mình trong
hoạt động Các công cụ, thiết bị do con người chế tạo ngày càng tinh
vi, phức tạp và thực hiện nhiều công việc hơn trước đây Mỗi công cụ, thiết bị thường chỉ thực hiện được 1 vài công việc cụ thể nào đó Thí
dụ, cây chổi để quét, radio để bắt và nghe đài audio
Máy tính số (digital computer) cũng là 1 thiết bị, nhưng thay vì chỉ thực
hiện 1 số chức năng cụ thể, sát với nhu cầu đời thường của con người,
nó có thể thực hiện 1 số hữu hạn các chức năng cơ bản (tập lệnh), mỗi
lệnh rất sơ khai chưa giải quyết trực tiếp được nhu cầu đời thường nào
của con người Cơ chế thực hiện các lệnh là tự động, bắt đầu từ lệnh
được chỉ định nào đó rồi tuần tự từng lệnh kế tiếp cho đến lệnh cuối cùng Danh sách các lệnh được thực hiện này được gọi là chương trình
1.1 Các khái ni ệ m c ơ b ả n v ề máy tính s ố
Trang 4Các l ệ nh mà máy hi ể u và th ự c hi ệ n đượ c đượ c g ọ i là l ệ nh máy
Ta dùng ngôn ng ữ để miêu t ả các l ệ nh Ngôn ng ữ l ậ p trình c ấ u thành t ừ 2 y ế u t ố chính y ế u: cú pháp và ng ữ ngh ĩ a Cú pháp qui
đị nh tr ậ t t ự k ế t h ợ p các ph ầ n t ử để c ấ u thành 1 l ệ nh (câu), còn
ng ữ ngh ĩ a cho bi ế t ý ngh ĩ a c ủ a l ệ nh đ ó
B ấ t k ỳ công vi ệ c ( bài toán ) ngoài đờ i nào c ũ ng có th ể đượ c chia thành trình t ự nhi ề u công vi ệ c nh ỏ h ơ n Trình t ự các công vi ệ c
nh ỏ này đượ c g ọ i là gi ả i thu ậ t gi ả i quy ế t công vi ệ c ngoài đờ i M ỗ i công vi ệ c nh ỏ h ơ n c ũ ng có th ể đượ c chia nh ỏ h ơ n n ữ a n ế u nó còn ph ứ c t ạ p, ⇒ công vi ệ c ngoài đờ i có th ể đượ c miêu t ả b ằ ng
1 trình t ự các l ệ nh máy (ch ươ ng trình ngôn ng ữ máy)
Các khái ni ệ m c ơ b ả n v ề máy tính s ố
Trang 5Vấn đề mấu chốt của việc dùng máy tính giải quyết công việc ngoài đời
là lập trình (được hiểu nôm na là qui trình xác định trình tự đúng các
lệnh máy để thực hiện công việc) Cho đến nay, lập trình là công việc
của con người (với sự trợ giúp ngày càng nhiều của máy tính)
Với công nghệ phần cứng hiện nay, ta chỉ có thể chế tạo các máy tính
mà tập lệnh máy rất sơ khai, mỗi lệnh máy chỉ có thể thực hiện 1 công
việc rất nhỏ và đơn giản ⇒ công việc ngoài đời thường tương đương
với trình tự rất lớn (hàng triệu) các lệnh máy ⇒ Lập trình bằng ngôn
ngữ máy rất phức tạp, tốn nhiều thời gian, công sức, kết quả rất khó
bảo trì, phát triển
Ta muốn có máy luận lý với tập lệnh (được đặc tả bởi ngôn ngữ lập trình) cao cấp và gần gủi hơn với con người Ta thường hiện thực máy này bằng 1 máy vật lý + 1 chương trình dịch Có 2 loại chương trình
dịch: trình biên dịch (compiler) và trình thông dịch (interpreter)
Các khái ni ệ m c ơ b ả n v ề máy tính s ố
Trang 6Trình biên d ị ch (Compiler)
Ch ươ ng trình biên d ị ch nh ậ n m ộ t ch ươ ng trình ngu ồ n (th ườ ng
đượ c vi ế t b ằ ng ngôn ng ữ c ấ p cao) và t ạ o ra m ộ t ch ươ ng trình đố i
t ượ ng t ươ ng ứ ng v ề ch ứ c n ă ng nh ư ng th ườ ng đượ c vi ế t b ằ ng
ngôn ng ữ c ấ p th ấ p (th ườ ng là ngôn ng ữ máy)
N ế u có l ỗ i x ả y ra trong lúc d ị ch, trình biên d ị ch s ẽ báo l ỗ i, c ố g ắ ng tìm v ị trí đ úng k ế ti ế p r ồ i ti ế p t ụ c d ị ch… Nh ờ v ậ y, m ỗ i l ầ n d ị ch 1
ch ươ ng trình, ta s ẽ xác đị nh đượ c nhi ề u l ỗ i nh ấ t có th ể có
Sau m ỗ i l ầ n d ị ch, n ế u không có l ỗ i, trình biên d ị ch s ẽ t ạ o ra file
ch ứ a ch ươ ng trình đố i t ượ ng (thí d ụ file ch ươ ng trình kh ả thi *.exe trên Windows)
Để ch ạ y ch ươ ng trình, ng ườ i dùng ch ỉ c ầ n kích ho ạ t file kh ả thi
(ng ườ i dùng không bi ế t và không c ầ n quan tâm đế n file ch ươ ng trình ngu ồ n)
Trang 7Trình thông d ị ch (Interpreter)
Ch ươ ng trình thông d ị ch không t ạ o ra và l ư u gi ữ ch ươ ng trình đố i
t ượ ng
M ỗ i l ầ n thông d ị ch 1 ch ươ ng trình ngu ồ n là 1 l ầ n c ố g ắ ng ch ạ y
ch ươ ng trình này theo cách th ứ c sau:
D ị ch và chuy ể n sang mã th ự c thi t ừ ng l ệ nh m ộ t r ồ i nh ờ máy
ch ạ y đ o ạ n l ệ nh t ươ ng ứ ng
N ế u có l ỗ i thì báo l ỗ i, n ế u không có l ỗ i thì thông d ị ch l ệ nh k ế
ti ế p cho đế n khi h ế t ch ươ ng trình
Nh ư v ậ y, m ỗ i l ầ n thông d ị ch ch ươ ng trình, trình thông d ị ch ch ỉ
thông d ị ch các l ệ nh trong lu ồ ng thi hành c ầ n thi ế t ch ứ không
thông d ị ch h ế t m ọ i l ệ nh c ủ a ch ươ ng trình ngu ồ n Do đ ó, sau
khi thông d ị ch thành công 1 ch ươ ng trình, ta không th ể k ế t lu ậ n
r ằ ng ch ươ ng trình này không có l ỗ i
Trang 8So sánh trình biên d ị ch & trình thông d ị ch
M ọ i ho ạ t độ ng x ử lý trên m ọ i mã ngu ồ n c ủ a ch ươ ng trình (ki ể m tra l ỗ i, d ị ch ra các l ệ nh đố i t ượ ng t ươ ng đươ ng, ) đề u đượ c ch ươ ng trình biên d ị ch th ự c hi ệ n
để t ạ o đượ c ch ươ ng trình đố i t ượ ng Do đ ó sau khi d ị ch các file mã ngu ồ n c ủ a
ch ươ ng trình, n ế u không có l ỗ i, ta có th ể k ế t lu ậ n ch ươ ng trình không th ể có l ỗ i
th ờ i đ i ể m d ị ch (t ừ v ự ng, cú pháp) Quá trình biên d ị ch và quá trình th ự c thi
ch ươ ng trình là tách r ờ i nhau: biên d ị ch 1 l ầ n và ch ạ y nhi ề u l ầ n cho đế n khi c ầ n
c ậ p nh ậ t version m ớ i c ủ a ch ươ ng trình
Ch ươ ng trình thông d ị ch s ẽ thông d ị ch t ừ ng l ệ nh theo lu ồ ng thi hành c ủ a
ch ươ ng trình b ắ t đầ u t ừ đ i ể m nh ậ p c ủ a ch ươ ng trình, thông d ị ch 1 l ệ nh g ồ m 2
ho ạ t độ ng: biên d ị ch l ệ nh đ ó và th ự c thi các l ệ nh k ế t qu ả N ế u 1 đ o ạ n l ệ nh c ầ n
đượ c th ự c thi l ặ p l ạ i thì trình thông d ị ch s ẽ ph ả i thông d ị ch l ạ i t ấ t c ả đ o ạ n l ệ nh
đ ó Đ i ề u này s ẽ làm cho vi ệ c ch ạ y ch ươ ng trình trong ch ế độ thông d ị ch không
hi ệ u qu ả
Vi ệ c ch ạ y ch ươ ng trình b ằ ng c ơ ch ế thông d ị ch đ òi h ỏ i ch ươ ng trình thông d ị ch
và ch ươ ng trình ứ ng d ụ ng c ầ n ch ạ y ph ả i t ồ n t ạ i đồ ng th ờ i trong b ộ nh ớ máy
tính, do đ ó có nguy c ơ ch ạ y không đượ c các ch ươ ng trình l ớ n n ế u tài nguyên
c ủ a máy không đủ cho c ả 2 ch ươ ng trình thông d ị ch và ch ươ ng trình ứ ng d ụ ng
Trang 9Gọi ngôn ngữ máy vật lý là N0 Trình biên dịch ngôn ngữ N1 sang ngôn ngữ N0 sẽ nhận đầu vào là chương trình được viết bằng ngôn
ngữ N1, phân tích từng lệnh N1 rồi chuyển thành danh sách các lệnh ngôn ngữ N0 có chức năng tương đương Để viết chương trình dịch
từ ngôn ngữ N1 sang N0 dễ dàng, độ phức tạp của từng lệnh ngôn
ngữ N1 không quá cao so với từng lệnh ngôn ngữ N0
Sau khi có máy luận lý hiểu được ngôn ngữ luận lý N1, ta có thể định nghĩa và hiện thực máy luận lý N2 theo cách trên và tiếp tục đến khi ta
có 1 máy luận lý hiểu được ngôn ngữ Nm rất gần gũi với con người,
dễ dàng miêu tả giải thuật của bài toán cần giải quyết
Nhưng qui trình trên chưa có điểm dừng, với yêu cầu ngày càng cao
và kiến thức ngày càng nhiều, người ta tiếp tục định nghĩa những ngôn ngữ mới với tập lệnh ngày càng gần gũi hơn với con người để
miêu tả giải thuật càng dễ dàng, gọn nhẹ và trong sáng hơn
Các khái ni ệ m c ơ b ả n v ề máy tính s ố
Trang 10Ngôn ngữ máy vật lý là loại ngôn ngữ thấp nhất mà người lập trình bình thường có thể dùng được Các lệnh và tham số của lệnh được miêu tả bởi các số binary (hay hexadecimal - sẽ được miêu tả chi tiết trong chương 2) Đây là loại ngôn ngữ mà máy vật lý có thể hiểu trực
tiếp, nhưng con người thì gặp nhiều khó khăn trong việc viết và bảo trì
chương trình ở cấp này
Ngôn ngữ assembly rất gần với ngôn ngữ máy, những lệnh cơ bản
nhất của ngôn ngữ assembly tương ứng với lệnh máy nhưng được
biểu diễn dưới dạng gợi nhớ Ngoài ra, người ta tăng cường thêm khái
niệm "lệnh macro" để nâng sức mạnh miêu tả giải thuật
Ngôn ngữ cấp cao theo trường phái lập trình cấu trúc như Pascal, C,
Tập lệnh của ngôn ngữ này khá mạnh và gần với tư duy của người bình thường
Ngôn ngữ hướng đối tượng như C++, Visual Basic, Java, C#, cải tiến
phương pháp cấu trúc chương trình sao cho trong sáng, ổn định, dễ
phát triển và thay thế linh kiện
Các c ấ p độ ngôn ng ữ l ậ p trình
Trang 111.2 L ị ch s ử phát tri ể n máy tính s ố
Máy tính xu ấ t hi ệ n t ừ r ấ t lâu theo nhu c ầ u buôn bán và trao đổ i
ti ề n t ệ
Bàn tính tay abacus là d ạ ng s ơ khai c ủ a máy tính
5 đơ n v ị
1 đơ n v ị
Trang 12Các th ế h ệ máy tính s ố
Đ èn
đ i ệ n t ử
(1945 - 1955)
ENIAC (1946) 18.000 bóng đ èn
1500 r ờ le
30 t ấ n
140 KW
Von Neumann (1945)
B ộ nh ớ dây tr ễ , t ĩ nh
đ i ệ n Gi ấ y, phi ế u đụ c
l ổ B ă ng t ừ
Transistors
(1955 - 1965) PDP-1 (1961)
B ộ nh ớ xuy ế n t ừ
B ă ng t ừ , tr ố ng t ừ ,
đĩ a t ừ
IC
(1965 - 1980)
IBM 360 (1965)
Intel 8080 (1974)
đượ c xem nh ư CPU đầ u tiên đượ c tích h ợ p trên 1 chip
?
(1980 - ????)
80x86 (1978)
(1642 - 1945)
Blaise Pascal (Pháp-1642)
Herman Hollerith l ậ p IBM
(International Business
Machine) ở M ỹ - 1890
Charles Babbage (Anh-1830)
Trang 13Các lệnh của chương trình (code) sẽ truy xuất (đọc và/hoặc ghi) thông tin (dữ liệu)
Chương trình giải quyết bài toán nào đó có thể truy xuất nhiều dữ liệu khác nhau với tính chất rất đa dạng Để truy xuất 1 dữ liệu cụ thể, ta
cần 3 thông tin về dữ liệu đó:
- tên nhận dạng (identifier) xác định vị trí của dữ liệu
- kiểu dữ liệu (type) miêu tả cấu trúc của dữ liệu
- tầm vực truy xuất (visibility) xác định các lệnh được phép truy
xuất dữ liệu tương ứng
Chương trình cổ điển = dữ liệu + giải thuật
Chương trình con (function, subroutine, ) là 1 đoạn code thực hiện
chức năng được dùng nhiều lần ở nhiều vị trí trong chương trình,
được nhận dạng thông qua 1 tên gọi Chương trình con cho phép cấu trúc chương trình, sử dụng lại code
1.3 D ữ li ệ u & ch ươ ng trình
Trang 14Ch ươ ng trình = c ấ u trúc d ữ li ệ u + gi ả i thu ậ t
entry 'start'
global data
module
(package)
local data
of module
local data
of function
C ấ u trúc 1 ch ươ ng trình c ổ đ i ể n
Trang 15Gi ả i mã chu ỗ i bit ra d ạ ng
ng ườ i, thi ế t b ị
ngoài hi ể u đượ c
X ử lý d ữ li ệ u
d ạ ng chu ỗ i bit
Mã hóa d ữ li ệ u thành d ạ ng chu ỗ i bit
D ữ li ệ u c ầ n x ử lý b ằ ng
máy tính (ch ữ s ố , hình
ả nh, âm thanh, )
K ế t qu ả có đượ c sau khi x ử lý b ằ ng máy tính (ch ữ s ố , hình ả nh, âm
thanh, )
CDROM, đĩ a, b ă ng,
L ư u gi ữ d ữ
li ệ u s ố để
dùng l ạ i
Máy tính s ố
1.4 Qui trình t ổ ng quát gi ả i quy ế t bài toán b ằ ng máy tính s ố
Trang 16B ộ nh ớ
(Memory)
Đơ n v ị x ử lý
(CPU)
Các thi ế t b ị
vào ra (I/O)
Bus giao tiếp
chứa code và data
đang thực thi
thực thi từng lệnh
của chương trình
giao tiếp với bên ngoài (thường là người) để
nhập/xuất tin
Mô hình máy tính s ố Von Neumann
Trang 17bàn phím
màn hình
chu ộ t
thùng máy loa
Hình d ạ ng v ậ t lý c ủ a vài máy tính
Trang 18Trong quá khứ, phương pháp thường sử dụng để phân tích bài toán là
phương pháp từ-trên-xuống (top-down analysis)
Nội dung của phương pháp này là xét xem, muốn giải quyết vấn đề nào
đó thì cần phải làm những công việc nhỏ hơn nào Mỗi công việc nhỏ hơn tìm được lại được phân thành những công việc nhỏ hơn nữa, cứ như vậy cho đến khi những công việc phải làm là những công việc thật đơn giản,
có thể thực hiện dễ dàng
Thí dụ việc học lấy bằng kỹ sư CNTT khoa CNTT ĐHBK TP.HCM có thể
bao gồm 9 công việc nhỏ hơn là học từng học kỳ từ 1 tới 9, học học kỳ i
là học n môn học của học kỳ đó, học 1 môn học là học m chương của môn đó,
Hình vẽ của slide kế cho thấy trực quan của việc phân tích top-down
1.5 Ph ươ ng pháp phân tích t ừ -trên-xu ố ng
Trang 19Ph ươ ng pháp phân tích t ừ -trên-xu ố ng
Công việc cần
giải quyết (A)
Công việc
A1
Công việc
A2
Công việc
An
Công việc
A11
Công việc
A12
Công việc
A1n
Công việc
An1
Công việc
An2
Công việc
Ann
chia thành nhiều công
việc nhỏ hơn, đơn giản để
giải quyết hơn
Các công vi ệ c đủ nh ỏ
để đượ c miêu t ả b ằ ng
1 l ệ nh hay 1 l ờ i g ọ i
hàm/th ủ t ụ c đ ã có
Trang 20Công việc cần giải quyết
≡ đối tượng phức hợp A
Đối tượng
A1
Đối tượng
A2
Đối tượng
An
Đối tượng
A11
Đối tượng
A12
Đối tượng
A1n
Đối tượng
An1
Đối tượng
An2
Đối tượng
Ann
Ph ươ ng pháp phân tích t ừ -trên-xu ố ng