Nội dung bài họcCách giao tiếp với máy tính bằng “ngôn ngữ” Quá trình phát triển của ngôn ngữ lập trình Ngôn ngữ bậc cao Trình dịch Một chương trình viết bằng ngôn ngữ bậc cao được xử l
Trang 1Lê Minh Hoàng
Trang 2Nội dung bài học
Cách giao tiếp với máy tính bằng “ngôn ngữ”
Quá trình phát triển của ngôn ngữ lập trình
Ngôn ngữ bậc cao
Trình dịch
Một chương trình viết bằng ngôn ngữ bậc cao
được xử lý như thế nào?
Thuật toán là gì?, Kỹ thuật giải quyết các bài toán tin học như thế nào?
Trang 3Kiến trúc máy tính
Bộ xử lý trung tâm
(CPU: Central Processing Unit)
Bộ tính toán số học và logic ALU: Arithmetic-Logic Unit
Bộ điều khiển CU: Control Unit
Những t/p khác: Bộ đồng xử lý toán
học, bộ tăng tốc đồ họa và video…
Bộ nhớ trong (Main Memory)
Secondary Storage
Thiết bị vào (Input Device)
Thiết bị ra (Output Device)
Trang 4Mô hình xử lý thông tin
Storage
Input: Bàn phím (Keyboard), Con chuột (Mouse), Máy quét (Scanner), …
Processing: Máy tính thực hiện chương trình
Output: Màn hình (Monitor), Máy in (Printer), Máy Fax …
Storage: Đĩa cứng (Hard Disks), Đĩa mềm (Floppy Disks), Băng từ (Magnetic
Trang 5Minh họa một hệ thống máy tính
CPU MemoryI/O Interface
Trang 6Phần cứng và Phần mềm
Phần cứng (Hardware)
Xử lý dữ liệu bằng cách tiến hành các lệnh theo chỉ thị
Cung cấp đầu vào (Input) và đầu ra (Output) qua các cổng giao tiếp thiết bị ngoại vi
Phần mềm
Chứa các chỉ thị lệnh giao cho phần cứng thực hiện
Là chương trình được viết để thực hiện một nhiệm vụ cụ thể nào đó
Phần mềm hệ thống (System Programs): Là chương trình viết ra để điều khiển máy tính, các thiết bị nối với máy tính, các chương trình khác chạy trên máy tính Ví dụ: Hệ điều hành Windows, Linux, Mac OS
Phần mềm ứng dụng (Application Programs): Là chương trình viết ra để thực hiện một tác vụ chuyên biệt nào đó Ví dụ: Phần mềm soạn thảo văn
Trang 7Ngôn ngữ của máy tính
Nhắc lại:
Phần cứng tiến hành các lệnh theo chỉ thị Phần mềm cung cấp các chỉ thị cho phần cứng thực hiện Vậy chỉ thị là?
Ngôn ngữ của máy tính
Chỉ thị được biểu diễn bằng một dãy các số 0 và 1 VD 100010011101.
Cách mã hóa chỉ thị dưới dạng số nhị phân gọi là ngôn ngữ máy
Số 0 và 1 được gọi là chữ số nhị phân (Binary Digit hoặc bit)
Một dãy số nhị phân được gọi là mã nhị phân (Binary Code)
Trang 8Giả sử
1001 chỉ thị máy tính đọc giá trị ở 4 bit tiếp theo.
1011 chỉ thị máy tính nhân giá trị đang có với giá trị ở 4 bit tiếp theo
và nhớ lại giá trị kết quả
1000 chỉ thị máy tính cho biết kết quả đang nhớ
Lệnh
1001 1111
1011 0110
Trang 9Cho phép dùng biến số, chấp nhận biểu diễn thập phân
và thập lục phân của số nguyên.
Trang 10Ngôn ngữ bậc cao (High level languages)
Ngôn ngữ bậc cao: Basic, FORTRAN,
COBOL, Pascal, C, Object Pascal, C++…
Để tính quãng đường (L) cho biết vận tốc (V) và thời gian (T), có thể viết lệnh trong ngôn ngữ
Pascal: L := V * T
Trình dịch: Là chương trình dịch các lệnh
viết trong ngôn ngữ bậc cao thành những
chỉ thị tương đương trong ngôn ngữ máy.
Trang 11Dùng một trình dịch ( Compiler ) để kiểm tra lỗi cú pháp và dịch các lệnh viết trong mã nguồn ra ngôn ngữ máy Chương trình dịch ra từ
mã nguồn gọi là mã đối tượng ( Object code ) Trình dịch thường đi kèm với một hoặc nhiều thư viện ( Library ) chứa các đoạn mã hữu dụng đã được dịch sẵn dùng để phát triển phần mềm Nếu mã nguồn sử dụng chúng, trình liên kết ( Linker ) sẽ tích hợp những mã viết sẵn trong thư viện vào mã đối tượng tạo thành mã khả thi ( Executable Code )
Mã khả thi có thể được nạp trực tiếp vào bộ nhớ và chạy độc lập, không phụ thuộc vào Editor, Compiler hay Linker nữa.
Trang 12Quy trình xử lý chương trình (tiếp) Editor
Compiler Source Code
Object Code Libraries
Linker
Trang 13Quy trình phát triển phần mềm
Bài toán (Problem)
Phân tích (Analysis)
Thiết kế thuật toán (Algorithm Design)
Soạn chương trình (Coding)
Dịch (Compilation)
Liên kết (Linking)
Thực hiện (Execution)
Lỗi Không lỗi
Lỗi Không lỗi
Thiết kế từ trên
xuống(Top-down design)
Tinh chỉnh từng bước (Step-wise refinement) Tách biệt từng phần
(Modular programming)
Trang 14Lê Minh Hoàng
Trang 15Nội dung bài học
Những khái niệm cơ bản về lập trình
Lịch sử ngôn ngữ lập trình Pascal
Xuất phát từ ALGOL Trở thành chuẩn mực lập trình
Trang 16có kế hoạch để tạo ra chương trình
Công thức nấu ăn:
Nấu ăn theo công thức thì dễ hơn tạo ra một công thức nấu ăn mới
Có những công thức tốt và có những công thức tồi
Có những công thức dễ dàng làm theo và có những công thức không dễ.
Có những công thức tạo ra món ăn ngon và có những công thức tạo ra những thứ không ăn được
Người đầu bếp phải có kiến thức về sử dụng dụng cụ nấu ăn để làm theo công thức
Trang 17Lập trình (tiếp)
Để viết một chương trình, chúng ta phải học các ký hiệu,
các từ, và các luật cú pháp của ngôn ngữ lập trình.
Luật cú pháp cho biết cách viết dòng lệnh nào là hợp lệ
(được chấp nhận bởi ngôn ngữ lập trình), cách viết nào là sai.
Ngôn ngữ lập trình: Là một tập các luật cú pháp, ký hiệu, và
từ khoá.
Luật ngữ nghĩa: Các luật cú pháp, từ khoá trong ngôn ngữ lập trình bậc cao thường gợi nhớ nghĩa của dòng lệnh bằng tiếng Anh.
and: và or: hoặc
If x > 0 then <S>: Nếu x là số dương thì làm <S>
while a > b do <S>: Thực hiện <S> chừng nào vẫn thấy a > b
Trang 18Pascal Programming Language
Ngôn ngữ lập trình Pascal được đặt tên theo tên
nhà toán học Pháp Blaise Pascal
Đặc điểm
Dễ học Thích hợp để mô phỏng thuật toán Viết chương trình dễ
Chương trình chạy nhanh Định kiểu mạnh mẽ và luật cú pháp chặt chẽ Hạn chế lập trình viên viết những đoạn mã tồi
Blaise Pascal1623-1662
Trang 19Lịch sử: Nguồn gốc
ALGOL
Ngôn ngữ được phát kiến dành cho tính toán khoa học
Kỳ vọng: Ngôn ngữ độc lập với phần cứng và hệ điều hành
Thất vọng: Quá khó để viết ra một trình dịch ALGOL với điều kiện lúc đó.
Hạn chế: Thiếu trình dịch + Thiếu rất nhiều kiểu dữ liệu
cơ bản (như kiểu ký tự) và con trỏ Giới khoa học và lập trình viên chuyển sang sử dụng FORTRAN…
ALGOL không và không bao giờ được chấp nhận rộng rãi và chỉ còn là ngôn ngữ để…mô tả thuật toán.
Trang 20Lịch sử: Pascal ra đời
Wirth phát minh PASCAL
Vào những năm 1960s, một vài nhà khoa học máy tính vẫn cố gắng mở rộng ALGOL Trong số đó có Wirth (Swiss Federal Institute of Technology)1971: Wirth đưa ra đặc tả về một ngôn ngữ có cấu trúc chặt chẽ và đặt tên
là PASCAL (Tên nhà toán học thế kỷ 17, người phát minh ra máy tính đầu tiên…
Quan trọng hơn cả: Wirth viết luôn trình dịch PASCAL Một trình dịch độc lập phần cứng và hệ điều hành để dịch chương trình PASCAL ra mã đối tượng Khi chạy trên các máy tính và hệ điều hành khác nhau, chỉ cần một chương trình nhỏ chuyển mã đối tượng thành mã khả thi (Xem lại các khái niệm mã đối tượng và mã khả thi ở đây)
Đặc tính của PASCAL
Hướng tới dữ liệu, định kiểu mạnh mẽ
Cho phép người dùng tự định nghĩa những kiểu dữ liệu mới
Đọc chương trình rất giống với ngôn ngữ tự nhiên (Tiếng Anh)
Trang 21Lịch sử: Pascal trở thành chuẩn
Đầu những năm 1980s, Pascal được sử dụng rộng rãi Có 2 lý do:
Cơ quan kiểm tra giáo dục Mỹ quyết định đưa Khoa học máy tính (Computer Science) vào nội dung thi, và ngôn ngữ lập trình được sử dụng
là Pascal (Pascal trở thành ngôn ngữ chính thức tới năm 1999, sau đó chuyển sang C++ 2 năm, và hiện tại là Java)
Một công ty là Borland International đưa ra thị trường Turbo Pascal (TP) - một phần mềm dịch tích hợp Pascal TP là một cuộc cách mạng:
TP có thay đổi một số thành phần trong Pascal chuẩn, làm cho ngôn ngữ tiện dụng hơn.
Tốc độ tuyệt vời: Trên những máy tính chậm hơn khoảng 1000 lần máy tính hiện nay, TP có thể dịch vài ngàn dòng lệnh trong 1 phút.
Trang 22Lịch sử: Thế giới thay đổi
Để hiểu kiến trúc UNIX, phải học C để đọc mã nguồn UNIX C tiến những bước chậm và chắc vào thế giới lập trình Nhưng so với C, Pascal vẫn là #1…
Pascal chính thức bị thay thế bởi C++
Tư duy lập trình thay đổi: Từ lập trình hướng cấu trúc (Structure-Oriented Programming) sang hướng đối tượng (Object-Oriented Programming) Vào đầu những năm 1980s, Bjarne Stroustrop tại phòng thí nghiệm Bell tích hợp những đặc tả cho lập trình hướng đối tượng vào ngôn ngữ C, tạo ra ngôn ngữ C++ Tất cả lập trình viên đều nhận ra nhiều ưu điểm của lập trình OOP so với lập trình cấu trúc, trong khi đó Pascal ra đời khi OOP chưa phổ biến…
TP chấm dứt phát triển: Borland tuyên bố “Sẽ không có Borland (Turbo) Pascal 8 mà thay vào đó sẽ là Delphi”.
Trang 23Lịch sử: Object Pascal vs C#
Nhược điểm của ngôn ngữ C++
Quá nhiều ký hiệu, chương trình C++ khác biệt rất nhiều ngôn ngữ tự nhiên nên khó đọc
Quá dễ dãi, C++ định kiểu yếu, chú trọng việc đưa ra những cú pháp tắt Điều này làm chương trình C++ ngắn bằng khoảng 60% so với Pascal, nhưng lại không hạn chế được lập trình viên viết những mã nguy hiểm hoặc dễ gây nhầm lẫn.
Cơ quan kiểm tra giáo dục Mỹ khi đưa C++ vào các trường học đã phải bỏ bớt hoặc sửa đổi một số đặc điểm của C++ được coi là “nguy hiểm” đối với sinh viên - những người mới học lập trình.
Đối lập với nhược điểm này của C++ lại là đặc tính dễ hiểu, chặt chẽ, định kiểu mạnh của Pascal…
Thế hệ ngôn ngữ mới
Những người phát triển Pascal: Pascal chỉ kém C++ ở phần lập trình hướng đối tượng → Mượn tất cả đặc tả hướng đối tượng trong C++ đưa vào Pascal tạo ra ngôn ngữ mới Object Pascal.
Những người phát triển C++: C++ kém Pascal chủ yếu do tính dễ dãi và khó hiểu → Hạn chế bớt một số tính năng nguy hiểm của C++, tăng cường hệ thống báo lỗi, C#
ra đời.
Trang 25So, Why learn Pascal?
C and C++ are very symbolic languages…
{…} vs begin…endand very dangerous for students…
Type-casting and pointer arithmetic is common, making it easy to crash programs and write in buffer overruns
Another reason: Speed
Instead of several hours design graphic user interface in C++
We can do 10 minutes in DelphiThe last reason:
Pascal was well-suited for teaching programmingLess overhead and fewer ways for students to get program into trouble.Pascal is an official language of IOI
Answer in one sentence
Because it’s not scary like C, not dangerous like C++, and not abstract like Java
Trang 26Lack of many Delphi powerful tools, but enough for learning Object Pascal.
Some issues of instability.
Trang 27Giao diện của FPC
Trang 28Hệ thống Menu: File
F ile: Các chức năng thao tác tệp và đĩa
N ew: Mở một cửa sổ soạn thảo chương trình New from t emplate: Tạo ra một cửa sổ soạn thảo chương trình mới với một số đoạn mã đã được viết sẵn theo khuôn mẫu.
O pen ( F3 ): Mở chương trình nguồn đã soạn trên đĩa
S ave ( F2 ): Ghi mã nguồn đang soạn trong cửa sổ hiện hành vào một tệp trên đĩa
S ave as: Ghi mã nguồn đang soạn trong cửa sổ hiện hành vào một tệp trên đĩa với một tên khác hoặc vào thư mục khác
C hange Dir: Thay đổi thư mục hoạt động Comman d Shell: Thoát khỏi FP tạm thời, mở cửa sổ Command- Line Khi cần quay về FP, gõ vào exit ↵
E x it ( Alt+X ): Thoát khỏi FP.
Trang 29Hệ thống Menu: Edit
Edit: Các chức năng soạn thảo
U ndo ( Alt+Backspace ): Phục hồi lại văn bản từ trạng thái trước thao tác soạn thảo gần nhất (VD: dùng để phục hồi lại dòng lệnh vừa bị xoá)
R edo: Ngược lại với Undo, phục hồi lại văn bản trước thao tác Undo gần nhất
Cu t ( Shift+Delete ): Cắt phần văn bản đã đánh dấu vào một vùng đệm gọi là clipboard, phần văn bản sau khi cắt sẽ mất Cách đánh dấu đoạn văn bản: Giữ Shift
và dùng các phím di chuyển con trỏ để đánh dấu.
C opy ( Ctrl+Insert ): Chép phần văn bản đã đánh dấu vào clipboard, phần văn bản sau khi chép vẫn giữ nguyên.
P aste ( Shift+Insert ): Dán phần văn bản đang có trong clipboard ra vị trí hiện thời của con trỏ.
C l ear ( Ctrl+Delete ): Xoá bỏ phần văn bản đã đánh dấu Select A ll: Đánh dấu toàn bộ văn bản
U n select: Bỏ đánh dấu phần văn bản đang bị đánh dấu
S how clipboard: Hiện nội dung của clipboard Clipboard chỉ lưu trữ nội dung của thao tác Cut hay Copy gần nhất.
Cop y to Windows và Paste from W indows: Tương tự như Copy/Paste, nhưng dùng clipboard của Windows Dùng để chép/dán đoạn văn bản đã đánh dấu ra/từ phần
Trang 30G oto Cursor ( F4 ): Chạy ở chế độ gỡ rối, chạy tới dòng chứa con trỏ thì dừng lại.
U ntil return ( Alt+F4 ): Khi đang gỡ rối một chương trình con, chức năng này cho chạy tiếp tới khi chương trình con thoát ra thì dừng lại để tiếp tục gỡ rối
Run D irectory…: Chọn thư mục hoạt động
P a rameters…: Giả lập các tham số dòng lệnh cho chương trình, để chương trình hoạt động như chạy trực tiếp file EXE với tham số dòng lệnh
P rogram reset ( Ctrl+F2 ): Ngưng thao tác gỡ rối, dừng chương trình.
Ngoài ra nếu chương trình đang chạy bị treo, có thể bấm Ctrl+Break+Break (2 lần Break) để ngưng, quay về màn hình soạn thảo để kiểm tra lại mã lệnh.
Trang 31Hệ thống Menu: Compile
C ompile: Các chức năng dịch
Compile (Alt+F9): Dịch mã nguồn trong cửa sổ hiện hành
Make (F9): Dịch mã nguồn trong cửa sổ hiện hành, dịch luôn cả các thư viện được sử dụng nếu thư viện đó bị thay đổi
Build: Tất cả các dẫn hướng biên dịch hiện hành được sử dụng để dịch lại toàn bộ mã nguồn, thư viện bất kể có hay không có sự thay đổi
Target: Cho biết chương trình dịch ra sẽ chạy trên hệ điều hành nào, phần cứng máy tính nào
Primary file: Nếu cửa sổ hiện hành là mã nguồn một thư viện chứ không phải chương trình, chức năng này cho biết chương trình nào sử dụng thư viện hiện tại Khi chạy chương trình, Primary file sẽ được chạy chứ không phải thư viện trong cửa sổ hiện hành
Clear primary file: Bỏ không sử dụng Primary file nữa
Compiler messages (F12): Hiện các thông báo của trình dịch: Báo lỗi cũ pháp, cảnh bảo nguy hiểm…
Trang 32Hệ thống Menu: Debug
D ebug: Các chức năng gỡ rối
Output: Hiện những gì trên màn hình người dùng trên một cửa sổ mới của IDE
User screen (Alt+F5): Chuyển sang màn hình người dùng, bấm một phím bất kỳ để quay lại
Add Watch (Ctrl+F7): Thêm một mục cần theo dõi giá trị vào cửa sổ Watchs
Watches: Hiện cửa sổ Watchs
Breakpoint (Ctrl+F8): Tạo điểm ngắt tại một dòng mã nguồn Chương trình chạy tới điểm ngắt sẽ dừng lại
Breakpoint List: Hiện danh sách các điểm ngắt, có thể đặt điều kiện ngắt
Evaluate (Ctrl + F4): Xem nhanh giá trị biến hoặc biểu thức Có thể thay đổi giá trị biến lúc đang chạy gỡ rối
Call stack (Ctrl + F3): Xem danh sách lời gọi chương trình con tại thời điểm hiện tại
Disassembler: Xem mã hợp ngữ của chương trình lúc đang chạy gỡ rối
Registers: Xem giá trị các thanh ghi của bộ vi xử lý
Floating Point Unit: Xem giá trị các thanh ghi của bộ đồng xử lý toán học
Vector Unit: Xem giá trị các thanh ghi của bộ xử lý vector (MMX)
Trang 33Calculator: Công cụ máy tính bỏ túi Ascii table: Hiện bảng mã ASCII
Trang 34Hệ thống Menu: Options
O ptions: Các thiết lập cho IDE
Mode…: Đặt kiểu dịch (Normal - Bình thường, Debug - Gỡ rối, Release - Dịch ra phiên bản cuối cùng cho người sử dụng)
C ompiler…: Đặt các thiết lập cho trình dịch
M emory sizes…: Đặt các ràng buộc về bộ nhớ
L inker…: Đặt các thiết lập cho trình liên kết
De b ugger…: Đặt các thiết lập cho trình gỡ rối
D irectories…: Đặt các đường dẫn và thư mục Bro w ser…: Đặt chế độ theo dõi phục vụ cho mục đích tìm kiếm
T ools…: Thêm/bớt công cụ vào menu Tools.
E nvironments: Các thiết lập chung cho IDE Open: Nạp các thiết lập đã đặt sẵn từ file INI Save/Save as: Ghi các thiết lập hiện thời vào file INI
Trang 35Hệ thống Menu: Window
W indow: Các thao tác xử lý cửa sổ
Title: Hiện toàn bộ các cửa sổ đang mở lên màn hình làm việc, các cửa sổ
sẽ bị thu nhỏ lại sao cho không chồng lên nhau
Cascade: Hiện toàn bộ các cửa sổ xếp theo lớp, chồng lên nhau
Close all: Đóng toàn bộ cửa sổ đang mở:
Size/Move (Ctrl+F5): Thay đổi kích thước/di chuyển cửa sổ hiện hành Chọn chức năng này rồi bấm ←↑→↓ để di chuyển, giữ Shift và bấm
←↑→↓ để thay đổi kích thước Khi xong bấm ↵
Zoom (F5): Phóng to cửa sổ hiện hành lên cực đại
Next (F6): Chuyển sang cửa sổ kế tiếp
Previous (Shift+F6): Chuyển sang cửa sổ liền trước
Hide (Ctrl+F6): Ẩn cửa sổ hiện hành
Close (Alt + F3): Đóng cửa sổ hiện hành
List (Alt + 0): Hiện dang sách các cửa sổ đang mở
Refresh display: Vẽ lại màn hình IDE (trong trường hợp có lỗi hiển thị)
Trang 36Hệ thống Menu: Help
H elp: Hệ thống trợ giúp
C ontents: Hiện các nội dung trợ giúp và tài liệu hướng dẫn sử dụng (dưới dạng sách)
I ndex ( Shift+F1 ): Hiện các đề mục trợ giúp
T opic search ( Ctrl+F1 ): Đánh dấu một từ hay một cụm từ rồi dùng chức năng này để tìm tài liệu liên quan tới từ đó
P revious topic ( Alt+F1 ): Nhảy tới mục trợ giúp mở ra trước đây.
U sing help: Hướng dẫn sử dụng hệ thống trợ giúp
F iles…: Quản lý các tệp trợ giúp
A bout: Hiện thông tin về FP, số hiệu phiên bản…
Trang 37Lê Minh Hoàng
Trang 38Nội dung bài học
Cấu trúc chung của chương trình Pascal Các khái niệm cơ bản
Chú thích Tên/định danh Khai báo hằng và khai báo biến Một số kiểu dữ liệu chuẩn
Phần thân chương trình Biểu thức
Lệnh gán Các lệnh nhập xuất chuẩn Một số thủ tục và hàm chuẩn
Trang 39Cấu trúc của một chương trình Pascal
program Title; //program: Từ khoá; Title: Tên //Phần khai báo
//Khai báo thư viện, nhãn, hằng, kiểu, biến
//Khai báo chương trình con
begin //Thân chương trình
Trang 40Ví dụ một chương trình Pascal
Soạn chương trình xong ghi vào đĩa với một file có phần mở rộng là PAS
Bấm CTRL+F9 để chạy chương trình