Từ đó sử dụng các phương thức đã được chuẩn hóa đối với ngành công nghệ thông tin để biểu diễn và thực hiện các bước của thuật toán bằng ngôn ngữ lập trình.. Giúp sinh viên có nền tảng k
Trang 1BỘ NỘI VỤ TRƯỜNG ĐẠI HỌC NỘI VỤ HÀ NỘI
TẬP BÀI GIẢNG TIN HỌC ĐẠI CƯƠNG 2 (Dành cho sinh viên ngành Hệ thống thông tin – Trình độ Đại học)
Chủ biên: Nguyễn Đạt Tiến Giảng viên Trung tâm Tin học - Ngoại ngữ Phó giám đốc Trung tâm Thông tin - Thư viện
Hà Nội, 9-2021
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 2BỘ NỘI VỤ TRƯỜNG ĐẠI HỌC NỘI VỤ HÀ NỘI
TẬP BÀI GIẢNG TIN HỌC ĐẠI CƯƠNG 2 (Dành cho sinh viên ngành Hệ thống thông tin – Trình độ Đại học)
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 8
CHƯƠNG 1 BÀI TOÁN VÀ THUẬT TOÁN 10
1.1 Bài toán 10
1.1.1 Phát biểu bài toán 10
1.1.2 Giải bài toán bằng máy tính 10
1.2 Thuật toán 12
1.2.1 Khái niệm 12
1.2.2 Các đặc trưng cơ bản của thuật toán 12
1.2.3 Một số thuật toán cơ bản 13
1.3 Biểu diễn thuật toán 16
1.3.1 Ngôn ngữ tự nhiên 16
1.3.2 Sơ đồ khối 17
1.3.3 Mã giả lập 18
Câu hỏi thảo luận và bài tập chương 1 20
CHƯƠNG 2 TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH 22
2.1 Tổng quan về lập trình 22
2.1.1 Giới thiệu chung 22
2.1.2 Các phương pháp lập trình 23
2.2 Lập trình ứng dụng 27
2.2.1 Lập trình Desktop 27
2.2.2 Lập trình Web 27
2.2.3 Lập trình Mobile 28
2.3 Ngôn ngữ lập trình 29
2.3.1 Bắt đầu một chương trình 30
2.3.2 Các thành phần cơ bản của ngôn ngữ lập trình 32
2.3.3 Khối lệnh 45
2.3.4 Cấu trúc điều khiển 46
2.3.5 Cấu trúc lặp 48
2.4 Chương trình dịch 51
2.4.1 Trình biên dịch 51
2.4.2 Trình thông dịch 52
Câu hỏi và bài tập chương 2 54
CHƯƠNG 3 NGÔN NGỮ LẬP TRÌNH PASCAL 56
3.1 Tổng quan 56
3.1.1 Giới thiệu chung 56
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 43.1.2 Cấu trúc của một chương trình Turbo Pascal 57
3.1.3 Soạn thảo trong Turbo Pascal 58
3.2 Các thành phần cơ bản 66
3.2.1 Các phần tử cơ bản 66
3.2.2 Các kiểu dữ liệu đơn giản 68
3.2.3 Khai báo hằng, biến, kiểu, biểu thức, câu lệnh 81
3.3 Cấu trúc điều khiển 92
3.3.1 Câu lệnh ghép 92
3.3.2 Câu lệnh điều kiện IF…THEN…ELSE 93
3.3.3 Câu lệnh lựa chọn CASE OF 95
3.4 Câu lệnh lặp 96
3.4.1 Vòng lặp có số bước lặp xác định FOR 97
3.4.2 Vòng lặp có số bước lặp không xác định REPEAT và WHILE 99
3.5 Mảng 101
3.5.1 Mảng một chiều 102
3.5.2 Mảng nhiều chiều 106
3.6 Xâu kí tự 108
3.6.1 Khai báo 108
3.6.2 Một số hàm, thủ tục xử lý dữ liệu xâu kí tự 109
3.7 Chương trình con 112
3.7.1 Khái niệm chương trình con, hàm và thủ tục 112
3.7.2 Truyền tham số cho chương trình con 114
3.7.3 Biến toàn cục, biến địa phương 116
Câu hỏi và bài tập chương 3 119
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 5DANH MỤC HÌNH ẢNH
Hình 1 - Biểu diễn thuật toán bằng sơ đồ khối 18
Hình 2 - Cấu trúc chung một chương trình Pascal 58
Hình 3 - Giao diện soạn lệnh của phần mềm Borland Pascal 7.0 60
Hình 4 - Các lệnh trong thực đơn File 60
Hình 5 - Cách ghi nội dung ra một file khác, đường dẫn khác 61
Hình 6 - Cách ghi nội dung ra một file khác, đường dẫn ổ đĩa khác 62
Hình 7 - Soạn thảo câu lệnh của ngôn ngữ lập trình Pascal 62
Hình 8 - Thông báo của trình biên dịch chương trình 63
Hình 9 - Giao diện hộp thoại mở tệp trong TP 64
Hình 10 - Sơ đồ thống kê các kiểu dữ liệu trong Pascal 68
Hình 11 - Mô hình cấu trúc câu lệnh ghép 87
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 6DANH MỤC BẢNG
Bảng 1 - Các hình vẽ cơ bản để biểu diễn sơ đồ khối 17
Bảng 2 - Bảng mô tả giá trị các biểu thức logic (bảng chân lý) 69
Bảng 3 - Bảng mô tả các phép toán so sánh 71
Bảng 4 - Bảng danh mục các kiểu dữ liệu số nguyên 71
Bảng 5 - Ký hiệu và ý nghĩa các phép so sánh 74
Bảng 6 - Các phép toán logic biểu diễn cho 1 bit 74
Bảng 7 - Các kiểu dữ liệu số thực 77
Bảng 8 - Bảng mã ASCII (America, Standard Code for Information Interchange) 79
Bảng 9 - Quy tắc thực hiện biểu thức, phép toán 84
Bảng 10 - Liệt kê các loại câu lệnh trong Pascal 85
Bảng 11 - Mô tả mảng hai chiều 5 hàng, 10 cột 106
Bảng 12 - Một số hàm, thủ tục thông dụng 118
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 7BẢNG KÝ HIỆU VIẾT TẮT
1 ASCII America Standard Code for Information Interchange
2 CNTT Công nghệ thông tin
3 CPU Central Processing Unit –Bộ xử lý trung tâm
4 CSS Cascading Style Sheets language- Ngôn ngữ định kiểu theo
tầng (dùng kết hợp với ngôn ngữ HTML)
5 GPS Global Positioning System – Hệ thống định vị toàn cầu
6 HTML Hyper Text Makup Language – Ngôn ngữ đánh dấu siêu văn
bản
7 IDE Integrated Development Environment - Môi trường phát
triển tích hợp
8 NNLT Ngôn ngữ lập trình
9 OOP Object Oriented Programming – Lập trình hướng đối tượng
10 PHP Hypertext Preprocessor – Ngôn ngữ lập trình kịch bản
11 SDK Software Development Kit – Bộ công cụ phát triển phần
mềm
12
TP Turbo Pascal (Ngôn ngữ lập trình Pascal chạy trên nền hệ
điều hành MS-DOS và CP/M, được phát triển bởi hãng Borland)
13 W3C World Wide Web Consortium - Tổ chức tiêu chuẩn quốc tế
chính cho World Wide Web
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 8LỜI NÓI ĐẦU Tập bài giảng Tin học đại cương 2 là tài liệu nội bộ, dùng làm học liệu bắt
buộc cho sinh viên ngành Hệ thống thông tin – Trường Đại học Nội vụ Hà Nội, nhằm chuẩn hóa và thống nhất nội dung học tập – giảng dạy Nghiên cứu tài liệu này, sinh viên sẽ nắm được những kiến thức cơ bản, có hệ thống của học phần Tin học đại cương 2, đáp ứng yêu cầu quá trình đào tạo của ngành
Học phần Tin học đại cương 2 ở trình độ đại học, ngành Hệ thống thông tin tại Trường Đại học Nội vụ Hà Nội có 03 tín chỉ, hướng tới mục tiêu:
Cung cấp cho sinh viên những hiểu biết khái quát về bài toán và cách xử lý bài toán trên máy tính, trình bày và phân tích bài toán bằng ngôn ngữ tự nhiên, lựa chọn và xây dựng thuật toán Từ đó sử dụng các phương thức đã được chuẩn hóa đối với ngành công nghệ thông tin để biểu diễn và thực hiện các bước của thuật toán bằng ngôn ngữ lập trình Sau các bước xử lý bằng câu lệnh lập trình, máy tính sẽ trả về kết quả của bài toán
Bồi dưỡng sự say mê về lĩnh vực công nghệ thông tin nói chung và đam mê lập trình xử lý các bài toán cho sinh viên; tạo thói quen sáng tạo về ứng dụng công nghệ thông tin giúp xử lý các tình huống trong đời sống
Giúp sinh viên có nền tảng kiến, kỹ năng lập trình cơ bản để chuẩn bị cho
nghiên cứu, học tập các học phần khác liên quan của ngành đào tạo như Kỹ thuật
lập trình cơ bản, Lập trình hướng đối tượng, Lập trình ứng dụng,…
Nội dung tập bài giảng Tin học đại cương 2 bao gồm các mảng kiến thức
cơ bản sau:
- Bài toán và thuật toán (chương 1): Giới thiệu chung về các phát biểu bài
toán và giới thiệu các khái niệm về thuật toán, tìm hiểu một số thuật toán thường gặp Sau khi nghiên cứu nội dung chương này, người đọc cần đạt được các kiến thức, kỹ năng về phát biểu bài toán, phân tích bài toán, lựa chọn và áp dụng thuật toán phù hợp để giải quyết bài toán Từ đó, biết cách biểu diễn thuật toán bằng các hình thức khác nhau để giải quyết bài toán
- Các ngôn ngữ lập trình (chương 2): Giới thiệu tổng quan về ngôn ngữ
lập trình máy tính, các phương pháp lập trình ứng dụng, giới thiệu một số ngôn ngữ lập trình thông dụng Đồng thời giới thiệu về chương trình dịch giúp cho lập trình viên dịch các câu lệnh sang ngôn ngữ để máy hiểu và thực hiện công việc
- Nghiên cứu thực tế về một ngôn ngữ lập trình (chương 3): Giới thiệu
các thành phần cơ bản của ngôn ngữ lập trình Pascal như cấu trúc chương trình,
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 9cấu trúc dữ liệu, cách khai báo và sử dụng dữ liệu phục vụ chương trình Tìm hiểu
về các cấu trúc điều khiển như cấu trúc rẽ nhánh, cấu trúc lặp Ngoài ra, một số thành phần không thể thiếu trong ngôn ngữ lập trình là dữ liệu có cấu trúc như mảng dữ liệu, khai thác xâu kí tự và chương trình con cũng được trình bày chi tiết từ cú pháp, giải thích và ví dụ minh họa cụ thể
Cụ thể các chương như sau:
Chương 1: Bài toán và thuật toán (ThS Bùi Thị Thanh biên soạn)
Chương 2: Tổng quan về ngôn ngữ lập trình (ThS Lê Minh Tuấn biên soạn) Chương 3: Ngôn ngữ lập trình Pascal (ThS Nguyễn Đạt Tiến biên soạn)
Chúng tôi mong nhận được ý kiến góp ý của bạn đọc để Tập bài giảng hoàn thiện hơn
Xin chân thành cảm ơn!
NHÓM TÁC GIẢ
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 10CHƯƠNG 1 BÀI TOÁN VÀ THUẬT TOÁN
Mục tiêu: Chương này cung cấp cho người đọc tổng quan các khái niệm
về bài toán, thuật toán và giới thiệu một số thuật toán thường gặp trong cuộc sống phương pháp luận và kỹ năng về phát biểu bài toán, phân tích bài toán, lựa chọn
và áp dụng thuật toán phù hợp để giải quyết bài toán thực tế
1.1 Bài toán
1.1.1 Phát biểu bài toán
Trong phạm vi tin học, bài toán được quan niệm là một việc gì đó muốn máy tính thực hiện
Ví dụ: viết một dòng chữ ra màn hình, giải một phương trình bậc 2 hay quản lý sinh viên, quản lý điểm,…
Khi sử dụng máy tính để giải bài toán ta cần quan tâm tới các yếu tố chính sau: dữ liệu đầu vào là gì (Input) và cần lấy ra thông tin gì (Output) Do đó để giải một bài toán ta cần xác định rõ thông tin đầu vào và thông tin đầu ra của bài toán
Ví dụ: Bài toán giải phương trình bậc nhất: ax+b=0
- Input: Các hệ số a,b
- Output: là nghiệm x
1.1.2 Giải bài toán bằng máy tính
Để giải một bài toán trên máy tính phụ thuộc rất nhiều vào sự hiểu biết của mỗi người về bài toán, tiếp đến là sự hiểu biết của người sử dụng để có thể khai thác máy tính Thông thường để giải một bài toán trên máy tính dựa vào các nguyên tắc sau:
Bước 1: Xác định bài toán
Mỗi bài toán được đặc tả bởi 2 thành phần đầu vào (Input) và đầu ra (Output) Việc xác định bài toán chính xác định rõ 2 thành phần này Các thông tin đó cần được nghiên cứu cẩn thận để có thể lựa chọn thuật toán, cách thể hiện các đại lượng đã cho và các đại lượng phát sinh trong quá trình giải bài toán và ngôn ngữ lập trình thích hợp
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 11Ví dụ: khi đề cập đến 1 bài toán, cần xác định được phạm vi giá trị của biến,
để lựa chọn các kiểu dữ liệu phù hợp
Bước 2: Lựa chọn và cài đặt thuật toán
Đây là một trong những bước quan trọng để giải một bài toán Mỗi thuật toán chỉ giải một bài toán nào đó, nhưng có rất nhiều thuật toán khác nhau để giải một bài toán Cần chọn thuật toán phù hợp cho bài toán đã cho Khi lựa chọn thuật toán người ta thường quan tâm đến các tài nguyên như thời gian xử lý, số lượng
ô nhớ chiếm dụng khi chạy chương trình,…trong các loại tài nguyên người ta quan tâm nhất đến thời gian vì đó là dạng tài nguyên không tái tạo được Trong thực tế, khi lựa chọn thuật toán người ta còn quan tâm tới việc thuật toán đó dễ dàng xử lý đối với máy tính hay không, độ tối ưu của thuật toán và khả năng sử dụng tài nguyên hệ thống khi chương trình thực hiện
Bước 3: Viết chương trình
Việc viết chương trình là một tổng hợp cơ học giữa việc lựa chọn cấu trúc
dữ liệu và ngôn ngữ lập trình để diễn đạt đúng thuật toán
Khi viết chương trình cần lựa chọn ngôn ngữ bậc cao hoặc hợp ngữ, ngôn ngữ máy hoặc một phần mềm chuyên dụng thích hợp cho thuật toán bạn lựa chọn Viết chương trình theo một ngôn ngữ nào thì phải tuân thủ đúng quy định ngữ pháp của ngôn ngữ đó
Bước 4: Hiệu chỉnh
Sau khi được viết xong, chương trình vẫn còn có thể có nhiều lỗi khác chưa phát hiện được nên chương trình có thể không cho kết quả đúng Vì vậy, cần phải kiểm thử chương trình bằng cách thực hiện nó với một số mẫu thử tiêu biểu phụ thuộc vào đặc thù của bài toán Các bộ mẫu thử (Input) này được gọi là các bộ test Nếu có sai sót, ta phải sửa chương trình rồi thử lại Quá trình này được gọi là hiệu chỉnh
Bước 5: Viết tài liệu
Tài liệu phải mô tả chi tiết bài toán, thuật toán, chương trình, kết quả thử nghiệm và hướng dẫn sử dụng Tài liệu này rất có ích cho người sử dụng chương trình và cho việc đề xuất những khả năng hoàn thiện thêm
Các bước trên có thể lặp đi lặp lại nhiều lần cho đến khi mà ta cho là chương trình đã làm việc đúng đắn
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 121.2 Thuật toán
1.2.1 Khái niệm
Thuật toán là một khái niệm cơ sở của Toán học và Tin học Hiểu một cách đơn giản, thuật toán là một hệ thống chặt chẽ và rõ ràng các quy tắc nhằm xác định một dãy các thao tác trên những đối tượng, sao cho sau một số hữu hạn bước thực hiện các thao tác này, ta thu được kết quả như mong muốn
Thuật toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác ấy, từ Input của bài toán, ta nhận được Output cần tìm
Ví dụ: Tìm giá trị lớn nhất của một dãy số nguyên
* Xác định bài toán
- Input: Số nguyên dương N và dãy N số nguyên a1, a2,…,aN
- Output: Giá trị lớn nhất Max của dãy số
* Ý tưởng
+ Khởi tạo giá trị Max:= a1
+ Lần lượt với i từ 2 đến N so sánh ai với Max, nếu ai>Max thì Max:= ai
* Thuật toán: Sử dụng phương pháp liệt kê để diễn tả bài toán:
1.2.2 Các đặc trưng cơ bản của thuật toán
Việc nghiên cứu về thuật toán có vai trò rất quan trọng trong khoa học máy tính vì máy tính chỉ giải quyết được vấn đề khi đã có hướng dẫn giải rõ ràng và đúng Nếu hướng dẫn giải sai hoặc không rõ ràng thì máy tính không thể giải đúng được bài toán Trong khoa học máy tính, thuật toán được định nghĩa là một dãy hữu hạn các bước không mập mờ và có thể thực thi được, quá trình hành động
theo các bước này phải dừng và cho được kết quả như mong muốn
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 13Thuật toán gồm một số đặc trưng cơ bản sau:
1.2.2.1 Tính hữu hạn
Một thuật toán phải kết thúc sau một số hữu hạn các thao tác
1.2.2.2 Tính xác định
Sau khi thực hiện một thao tác hoặc là thuật toán kết thúc hoặc có đúng một
thao tác xác định để thực hiện bước tiếp theo
ta chỉ xây dựng thuật toán cho một dạng đặc trưng của bài toán mà thôi
1.2.2.6 Tính phổ dụng
Thuật toán không chỉ giải quyết một bài toán đơn lẻ mà áp dụng cho cả một lớp bài toán có cùng cấu trúc Cùng giải quyết một yêu cầu, thuật toán nào sử dụng được rộng rãi hơn, tổng quát hơn thì thuật toán ấy có tính phổ dụng cao hơn
1.2.3 Một số thuật toán cơ bản
1.2.3.1 Hoán vị giữa 2 giá trị x và y
Bước 1 Dùng một tên biến trung gian tg và lưu x vào tg (Gán tg := x) Bước 2 Gán x := y (lưu giá trị y vào x)
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 14Bước 3 Gán y := tg (lưu tg tức là x cũ vào y)
Bước 3 Gán i := i + 1 ( tăng giá trị của i lên 1)
Bước 4 Nếu i > N thì Max là lớn nhất và đến bước 7, trái lại đến bước 5 Bước 5 Nếu Ai > Max thì Max := Ai
Bước 6 Quay lại bước 3
Bước 7 Kết thúc
1.2.3.3 Tìm kiếm tuần tự
Kiểm tra xem A có thuộc dãy X1, X2, , XN không?
• Ý tưởng: Tìm kiếm tuần tự được thực hiện một cách tự nhiên: Lần lượt đi
từ số hạng thứ nhất, ta so sánh giá trị số hạng đang xét với khóa cho đến khi gặp một số hạng bằng khóa hoặc dãy đã được xét hết mà không tìm thấy giá trị của khóa trên dãy
Bước 1 Nhập các giá trị N với các số hạng X1, X2, XNvà giá trị khóa A Bước 2 Gán i:= 1
Bước 3 Nếu i > N thì sang bước bước 5, trái lại đến bước 4
Bước 4 Nếu A = xi thì thông báo chỉ số i, rồi kết thúc
Bước 5 Nếu i > N thì thông báo A không thuộc dãy X1, X2, ,XNBước 6 Kết thúc
Trang 15Bước 2: Gán S := 0
Bước 3: Gán i := 1
Bước 4: Nếu i > N thì sang bước 8, trái lại đến bước 5
Bước 5: Thực hiện S := S + Xi (cộng Xi vào S)
Bước 6: Gán i := i +1
Bước 7: Quay lại bước 4
Bước 8: Đưa ra tổng S
Bước 9: Kết thúc
1.2.3.5 Tìm ước số chung lớn nhất của 2 số nguyên dương
Tìm USCLN của 2 số nguyên dương M và N
Bước 1: Nhập M, N
Bước 2: Nếu M = N thì sang bước 5, trái lại đến bước 3
Bước 3: Nếu M > N thì M := M - N, trái lại N := N - M
Bước 4: Quay lại bước 2
Bước 5: ƯSCLN của M và N là M
Bước 6: Kết thúc
1.2.3.6 Sắp xếp
Chọn phần tử nhỏ nhất trong n phần tử ban đầu, đưa phần tử này về vị trí đầu tiên của dãy hiện hành Sau đó, xem dãy hiện hành chỉ còn n-1 phần tử của dãy ban đầu, bắt đầu từ vị trí thứ 2 Lặp lại quá trình trên cho dãy hiện hành đến khi dãy hiện hành chỉ còn 1 phần tử Các bước thực hiện như sau:
Trang 161.3 Biểu diễn thuật toán
Thuật toán là một phương pháp thể hiện lời giải bài toán nên cũng phải tuân theo một số quy tắc nhất định Ðể có thể truyền đạt thuật toán cho người khác hay chuyển thuật toán thành chương trình máy tính, ta phải có phương pháp biểu diễn thuật toán Các phương pháp sau thường được sử dụng biểu diễn thuật toán cơ
bản trong ngôn ngữ lập trình pascal như:
Phương pháp biểu diễn này có ưu điểm là đơn giản, không yêu cầu người
viết thuật toán cũng như người đọc thuật toán phải nắm các quy tắc Tuy vậy, cách biểu diễn này thường dài dòng, không thể hiện rõ cấu trúc của thuật toán, đôi lúc gây hiểu lầm hoặc khó hiểu cho người đọc, khó diễn đạt với những bài toán phức tạp Gần như không có một quy tắc cố định nào trong việc thể hiện thuật toán bằng ngôn ngữ tự nhiên
Các thao tác cơ bản gồm:
- Bắt đầu
- Nhập giá trị ban đầu
- Gán giá trị (lưu giá trị vào một biến nào đó)
- Thực hiện các phép toán số học, logic
- Kiểm tra điều kiện
- Lặp lại từ thao tác nào đó
- Kết thúc
Ví dụ: Giải phương trình bậc hai ax2 + bx + c=0 bằng ngôn ngữ tự nhiên
Bước 1: Nhập vào giá trị tương ứng với hệ số a, b, c của phương trình
Bước 2: Tính delta := b2 - 4ac
Bước 3: Xét delta
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 17- Trường hợp 1: delta =0 thì xuất ra màn hình kết quả là phương trình có một nghiệm kép
- Trường hợp 2: delta >0 thì phương trình có 2 nghiệm phân biệt là
+ x1:=(-b - sqrt(delta))/(2*a)
+ x2:=(-b + sqrt(delta))/(2*a)
+ Thông báo kết quả: phương trình có hai nghiệm là x1 và x2
- Trường hợp 3: delta <0 thì xuất ra màn hình phương trình vô nghiệm
1.3.2 Sơ đồ khối
Lưu đồ hay sơ đồ khối là một công cụ trực quan để diễn đạt các thuật toán Biểu diễn thuật toán bằng lưu đồ sẽ giúp người đọc theo dõi được sự phân cấp các trường hợp và quá trình xử lý của thuật toán
Với phương pháp dùng lưu đồ thể hiện rõ quá trình xử lý và sự phân cấp các trường hợp của thuật toán, cung cấp toàn cảnh, tổng quan về thuật toán Tuy nhiên thường cồng kềnh, tốn không gian biểu diễn đặc biệt với những bài toán phức tạp Các hình cơ bản để xây dựng lưu đồ giải thuật là:
Thao tác bắt đầu và kết thúc
Thao tác vào ra dữ liệu
Thực hiện công việc
Gọi chương trình con
Kiểm tra điều kiện
Begin
End
Vào/ra dữ liệu
Thực hiện một công việc A
Gọi chương trình con
Sai Kiểm tra điều
kiện Đúng
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 18Ví dụ: Tính tổng N số nguyên đầu tiên, áp dụng lưu đồ để biểu diễn giải thuật
1.3.3 Mã giả lập
Trong biểu diễn giải thuật (hay thuật toán), biểu diễn giải thuật bằng ngôn ngữ tự nhiên thì dễ hiểu, tuy nhiên không thể hiện rõ cấu trúc thuật toán, dễ gây hiểu nhầm Với phương pháp dùng lưu đồ thể hiện rõ quá trình xử lý và sự phân cấp các trường hợp của thuật toán nhưng thường cồng kềnh, tốn không gian biểu diễn Ðể mô tả một thuật toán nhỏ ta phải dùng một không gian rất lớn
Biểu diễn giải thuật bằng mã giả tựa ngôn ngữ lập trình, sử dụng các cú pháp lệnh của một ngôn ngữ lập trình nào đó để thể hiện thuật toán như dùng cấu trúc
Sai
End
Hình 1 - Biểu diễn thuật toán bằng sơ đồ khối
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 19chuẩn hóa, kết hợp với ngôn ngữ tự nhiên với ngôn ngữ lập trình (pascal, C+ ) Tất nhiên, mọi ngôn ngữ lập trình đều có những thao tác cơ bản là xử lý, rẽ nhánh
và lặp Dùng các kỹ hiệu toán học, biến hàm
Dùng mã giả vừa tận dụng được các khái niệm trong ngôn ngữ lập trình, vừa giúp người cài đặt dễ dàng nắm bắt nội dung thuật toán Tất nhiên là trong mã giả
ta vẫn dùng một phần ngôn ngữ tự nhiên
Biểu diễn giải thuật bằng mã giả có những ưu điểm như: tiện lợi, đơn giản;
dễ hiểu, dễ diễn đạt; đỡ cồng kềnh hơn lưu đồ khối Mặc dù vậy phương pháp biểu diễn này lại kém trực quan
Một đoạn mã giả của thuật toán giải phương trình bậc hai
end
else
if delta := 0 then
xuất kết quả : phương trình có nghiệm kép là -b/(2*a)
else {trường hợp delta < 0 }
xuất kết quả : phương trình vô nghiệm
* Các từ in đậm là các từ khóa của ngôn ngữ Pascal
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 20CÂU HỎI THẢO LUẬN VÀ BÀI TẬP CHƯƠNG 1
1 Biểu diễn giải thuật tìm ước chung lớn nhất (UCLN) của 2 số nguyên dương
b Biểu diễn giải thuật sắp xếp lại dãy số theo thứ tự tăng dần bằng lưu đồ
c Biểu diễn giải thuật sắp xếp lại dãy số theo thứ tự tăng dần bằng giả mã
4 Cho n số thực Trình bày các giải thuật
a Tìm giá trị nhỏ nhất trong n số đã cho
b Tìm giá trị lớn nhất trong n số đã cho
c Tìm giá trị lớn nhất, nhỏ nhất trong n số đã cho
5 Cho n số nguyên Trình bày các giải thuật
a Đếm các số chia hết cho 3
b Đếm các số lớn hơn 10
c Đếm các số nằm trong đoạn [10,100]
6 Cho n số nguyên Trình bày giải thuật
a Tính tổng và trung bình cộng của các số đã cho
b Tính tổng các số lẻ và trung bình cộng các số chẵn
7 Trình bày thuật toán hoán đổi giá trị của hai biến số nguyên x, y
8 Cho hai số thực a, b Hãy trình bày thuật toán cho biết kết quả so sánh hai
số đó dưới dạng “a lớn hơn b”, “a nhỏ hơn b” hoặc “a bằng b”
9 Trình bày thuật toán tính tổng các số chẵn trong dãy số có số phần tử nhiều hơn 1 và nhỏ hơn hoặc bằng 100
10 Lựa chọn phương pháp biểu diễn thuật toán phù hợp để giải phương trình bậc 2 ax2 + bx + c=0
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 21TÀI LIỆU THAM KHẢO CHƯƠNG 1
[1] Trần Đình Khang (2019), Giáo trình Tin học đại cương (Phần 1, 2), Nhà xuất
bản Bách khoa Hà Nội
[2] Vũ Đình Hòa – Đỗ Trung Kiên (2013), Cấu trúc dữ liệu và giải thuật (Chương
2), Nhà xuất bản Đại học Sư phạm
[3] Bùi Thế Tâm (2004), Giáo trình Turbo Pascal 7.0 (Chương 1, 2), Nhà xuất bản Giao thông vận tải
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 22CHƯƠNG 2 TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH Mục tiêu: Chương này cung cấp cho người đọc kiến thức tổng quan về
ngôn ngữ lập trình, các phương pháp lập trình Giới thiệu một số ngôn ngữ lập trình hiện nay đang được đưa vào các chương trình giảng dạy, đào tạo lập trình viên cũng như những người quan tâm Đồng thời giới thiệu về chương trình dịch giúp phát hiện lỗi và dịch các câu lệnh từ ngôn ngữ lập trình sang ngôn ngữ để máy hiểu và thực hiện công việc
2.1 Tổng quan về lập trình
2.1.1 Giới thiệu chung
Lập trình máy tính (Computer Programming) hay còn gọi là lập chương trình máy tính, thường được gọi tắt là lập trình (Programming) là việc lập ra một chương trình làm việc cho máy tính có bộ vi xử lý (Processing Unit) để thực hiện một nhiệm vụ xử lý thông tin nào đó Chương trình này gồm dãy các lệnh (chỉ thị)
để máy tính thực hiện theo trình tự thời gian
Chương trình duy nhất mà máy tính có thể thực thi trực tiếp được thể hiện dưới dạng ngôn ngữ máy, hay mã máy có khuôn dạng là dãy các số nhị phân Lập trình trực tiếp ở dạng mã máy là công việc đòi hỏi nhiều công sức, khó kiểm tra lỗi và phụ thuộc phần cứng máy tính cụ thể Chính vì điều này, giới lập trình đã phát triển ra các ngôn ngữ lập trình mới với hệ thống ký hiệu, từ khóa và cú pháp
cụ thể, giúp các lập trình viên dễ dàng viết mã nguồn ở dạng văn bản mà không quá lệ thuộc vào phần cứng Mã nguồn của chương trình sau đó được dịch (Compile) ra mã máy
Ngày nay, lập trình ứng dụng cho các hệ thống tính toán được hỗ trợ bằng các thư viện, có khả năng liên kết mã phát sinh từ các ngôn ngữ lập trình khác nhau, và đặc biệt là sử dụng các biểu tượng trực quan (visual) giúp cho công việc lập trình trở nên dễ dàng hơn
Quá trình viết một chương trình máy tính để giải quyết một bài toán cho trước bao gồm: phân tích vấn đề để tìm ra thuật toán; diễn tả thuật toán theo một ngôn ngữ lập trình đã chọn; thử nghiệm chương trình trên máy tính và sửa lỗi cho tới khi chương trình chạy trên máy tính không phát sinh lỗi và đáp ứng được yêu cầu đã đặt ra của bài toán
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 232.1.2 Các phương pháp lập trình
a Lập trình tuyến tính
Lập trình tuyến tính là phương pháp lập trình theo tư duy tuần tự Các lệnh trong chương trình sẽ được thực hiện theo thứ tự từ đầu đến cuối, lệnh này kế tiếp lệnh kia cho đến khi kết thúc chương trình
Đặc trưng của phương pháp lập trình tuyến tính là đơn giản, chương trình chỉ có một luồng duy nhất và các công việc được thực hiện tuần tự trong luồng
đó Các chương trình máy tính được viết dựa trên phương pháp lập trình tuyến tính thường đơn giản và dễ hiểu
Các chương trình máy tính đầu tiên được lập trình bằng ngôn ngữ máy, máy tính sử dụng các công tắc cơ khí để nạp và thực thi chương trình Với sự phát triển của công nghệ, các thiết bị lưu trữ và bộ nhớ máy tính ngày càng mở rộng, điều này cho phép máy tính thực thi các chương trình lớn hơn, phức tạp hơn Các chương trình máy tính được viết bằng các ngôn ngữ lập trình bậc cao đầu tiên được dần thay thế cho ngôn ngữ máy Thay vì phải xử lý lệnh trên một dãy các bit và byte, lập trình viên viết một dãy các lệnh gần với ngôn ngữ tự nhiên (thường
là tiếng Anh) và sau đó chương trình dịch sẽ biên dịch thành ngôn ngữ máy
Khi khả năng của máy tính tăng lên thì việc triển khai các chương trình máy tính phức tạp cũng tăng lên Do đặc điểm của các ngôn ngữ lập trình tuyến tính là không hỗ trợ các phương tiện cần thiết để sử dụng lại các phần mã chương trình
đã viết nên chúng không còn phù hợp để viết các ứng dụng phức tạp Do đó, phương pháp lập trình tuyến tính ngày nay chỉ được sử dụng trong phạm vi các
mô đun nhỏ nhất của các phương pháp lập trình khác
b Lập trình hướng cấu trúc
Vào những năm từ 1960 đến 1970, ngôn ngữ lập trình hướng cấu trúc ra đời với mục đích để tạo ra các ứng dụng phức tạp hơn Các chương trình hướng cấu trúc được tổ chức theo các công việc mà chúng thực hiện
Trong lập trình hướng cấu trúc, chương trình chính sẽ được chia nhỏ thành các chương trình con (còn được gọi là hàm hay thủ tục) thực hiện các công việc rời rạc trong quá trình lớn hơn, phức tạp hơn Các chương trình con này được giữ độc lập với nhau càng nhiều càng tốt, mỗi chương trình con có dữ liệu và logic riêng Thông tin được chuyển giao giữa các chương trình con thông qua các đối
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 24số Chương trình chính sẽ gọi đến chương trình con thông qua một giải thuật, hoặc một cấu trúc được xác định trong chương trình chính
Đặc trưng cơ bản nhất của lập trình hướng cấu trúc được thể hiện ở mối quan hệ:
Chương trình = cấu trúc dữ liệu + giải thuật
Trong đó:
- Cấu trúc dữ liệu là cách tổ chức dữ liệu cho việc xử lý bởi một hay nhiều chương trình nào đó
- Giải thuật là một quy trình để thực hiện một công việc xác định
Trừu tượng hóa (Abstraction) là một tính chất mới được đưa ra trong lập trình có cấu trúc Sự trừu tượng hóa được xem là khả năng quan sát một sự việc
mà không cần xem xét đến các chi tiết bên trong của nó Trong một chương trình hướng cấu trúc, chúng ta chỉ cần quan tâm đến một chương trình con đã cho có thể làm được một công việc cụ thể gì và không quan tâm đến công việc đó được thực hiện như thế nào Điều này, đôi khi còn được gọi là sự trừu tượng hóa theo chức năng (Functional Abstraction) và là nền tảng của lập trình có cấu trúc
Trong lập trình hướng cấu trúc, mỗi chương trình con có thể được gọi lại nhiều lần trong một chương trình chính Các chương trình con có thể được gọi đến để thực hiện theo một thứ tự bất kì, tùy thuộc vào giải thuật của chương trình chính mà không phụ thuộc vào thứ tự khai báo của các chương trình con Các ngôn ngữ lập trình cấu trúc cung cấp một số cấu trúc lệnh điều khiển chương trình
Mặc dù các chương trình được viết theo hướng cấu trúc có ưu điểm dễ hiểu,
dễ theo dõi và tư duy giải thuật rõ ràng Tuy nhiên, lập trình hướng cấu trúc không
hỗ trợ tốt cho việc sử dụng lại mã nguồn Giải thuật luôn phụ thuộc chặt chẽ vào cấu trúc dữ liệu Dẫn đến khi thay đổi cấu trúc dữ liệu phải thay đổi cả giải thuật của chương trình Với những dự án phần mềm lớn, lập trình cấu trúc tỏ ra không hiệu quả trong việc giải quyết các mối quan hệ giữa các môđun Một số ngôn ngữ lập trình như Pascal, C hay FoxPro là ngôn ngữ lập trình hướng cấu trúc phổ biến
c Lập trình hướng đối tượng
Khái niệm hướng đối tượng được xây dựng trên nền tảng của khái niệm lập trình có cấu trúc và sự trừu tượng hóa dữ liệu Sự thay đổi căn bản ở chỗ, một chương trình hướng đối tượng được thiết kế xoay quanh dữ liệu mà chúng ta có
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 25thể làm việc trên đó, hơn là theo bản thân chức năng của chương trình Điều này hoàn toàn tự nhiên một khi chúng ta hiểu rằng mục tiêu của chương trình là xử lý
dữ liệu Suy cho cùng, công việc mà máy tính thực hiện vẫn thường được gọi là
xử lý dữ liệu Dữ liệu và thao tác liên kết với nhau ở một mức cơ bản (còn có thể gọi là mức thấp), mỗi thứ đều đòi hỏi ở thứ kia có mục tiêu cụ thể, các chương trình hướng đối tượng làm tường minh mối quan hệ này
Lập trình hướng đối tượng (Object Oriented Programming - gọi tắt là OOP) hay chi tiết hơn là lập trình định hướng đối tượng, chính là phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng thuật giải, xây dựng chương trình Các chương trình con là những chức năng độc lập, sự ghép nối chúng lại với nhau cho chúng ta một hệ thống chương trình để giải quyết vấn đề đặt ra Chính vì vậy, cách thức phân tích một hệ thống lấy chương trình con làm nền tảng, chương trình con đóng vai trò trung tâm của việc lập trình, được hiểu như phương pháp lập trình hướng về thủ tục Tuy nhiên, khi phân tích để thiết kế một hệ thống thì không nhất thiết phải luôn suy nghĩ theo hướng “làm thế nào để giải quyết công việc”, chúng ta có thể định hướng tư duy theo phong cách “với một số đối tượng đã có, phải làm gì để giải quyết được công việc đặt ra” hoặc “làm cái gì với một số đối tượng đã có đó”, từ đó cũng có thể giải quyết được những công việc cụ thể Với phương pháp phân tích trong đó đối tượng đóng vai trò trung tâm của việc lập trình như vậy, người ta gọi là nguyên lý lập trình từ dưới lên (Bottom-Up)
Lập trình hướng đối tượng liên kết cấu trúc dữ liệu với các thao tác Một chương trình hướng đối tượng sẽ xác định đặc điểm và hành vi cụ thể của các kiểu
dữ liệu, điều đó cho phép chúng ta biết một cách chính xác rằng chúng ta có thể
có được những gì ở các kiểu dữ liệu khác nhau
Lập trình hướng đối tượng cho phép chúng ta tổ chức dữ liệu trong chương trình thành các lớp (Class) Một lớp là một bản mẫu mô tả các thông tin cấu trúc
dữ liệu, lẫn các thao tác hợp lệ của các phần tử dữ liệu Khi một phần tử dữ liệu được khai báo là phần tử của một lớp thì nó được gọi là một đối tượng (Object) Các hàm được định nghĩa hợp lệ trong một lớp được gọi là các phương thức (Method) và chúng là các hàm duy nhất có thể xử lý dữ liệu của các đối tượng của lớp đó Một thực thể (Instance) là một vật thể có thực bên trong bộ nhớ, thực chất
đó là một đối tượng (nghĩa là một đối tượng được cấp phát vùng nhớ)
Mỗi một đối tượng có riêng cho mình một bản sao các phần tử dữ liệu của lớp còn gọi là các biến thực thể (Instance variable) Các phương thức định nghĩa
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 26trong một lớp có thể được gọi bởi các đối tượng của lớp đó Điều này được gọi là gửi một thông điệp (Message) cho đối tượng Các thông điệp này phụ thuộc vào đối tượng, chỉ đối tượng nào nhận thông điệp mới phải làm việc theo thông điệp
đó Các đối tượng đều độc lập với nhau vì vậy các thay đổi trên các biến thể hiện của đối tượng này không ảnh hưởng gì trên các biến thể hiện của các đối tượng khác và việc gửi thông điệp cho một đối tượng này không ảnh hưởng gì đến các đối tượng khác
Như vậy, đối tượng được hiểu theo nghĩa là một thực thể mà trong đó các
dữ liệu và thủ tục tác động lên dữ liệu đã được đóng gói lại với nhau Hay “đối tượng được đặc trưng bởi một số thao tác (operation) và các thông tin (information) ghi nhớ sự tác động của các thao tác này”
Các thao tác trong đối tượng được gọi là các phương thức hay hành vi của đối tượng đó Phương thức và dữ liệu của đối tượng luôn tác động lẫn nhau và có vai trò ngang nhau trong đối tượng, phương thức của đối tượng được qui định bởi
dữ liệu và ngược lại, dữ liệu của đối tượng được đặc trưng bởi các phương thức của đối tượng Chính nhờ sự gắn kết đó, chúng ta có thể gửi cùng một thông điệp đến những đối tượng khác nhau Điều này giúp người lập trình không phải xử lý trong chương trình của mình một dãy các cấu trúc điều khiển tuỳ theo thông điệp nhận vào, mà chương trình được xử lý vào thời điểm thực hiện
Một số ngôn ngữ lập trình hướng đối tượng phổ biến: C++, Java, C#, Python, PHP, Objective-C, Swift
d Lập trình logic
Lập trình logic là một mẫu hình lập trình dựa trên logic toán trong các mối quan hệ và các suy luận, một phương pháp tiếp cận việc biểu diễn tri thức và giải các bài toán logic từ một cơ sở tri thức cho trước trên máy tính Cơ sở tri thức là một tập các sự kiện và các luật biểu diễn quan hệ logic giữa các sự kiện đó Lập trình logic xuất phát từ một cơ sở tri thức và một câu hỏi, tiến hành các lập luận logic để tìm ra lời giải cho câu hỏi đó Các chương trình được viết trong các Ngôn ngữ lập trình logic là các tập hợp câu logic, thể hiện sự thật và các luật về một vài vùng vấn đề nào đó Cùng với các thuật toán suy luận, chúng hình thành nên chương trình Các ngôn ngữ lập trình logic chính bao gồm Prolog và Datalog
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 272.2 Lập trình ứng dụng
2.2.1 Lập trình Desktop
Lập trình Desktop là công việc mà các lập trình viên sẽ xây dựng các ứng dụng chạy trên nền hệ điều hành Do sự phổ biến của hệ điều hành Windows nên trong phần này, tài liệu chỉ đề cập tới lập trình ứng dụng trên hệ điều hành Windows
Hệ điều hành Windows là một trong những hệ điều hành dành cho người dùng cuối, được phát triển bởi Microsoft Windows là hệ điều hành đa nhiệm, sử dụng giao diện đồ họa, hỗ trợ cắm và chạy, đặc biệt là giao diện các chương trình chạy trên Windows đều có dạng các cửa sổ
Lịch sử phát triển của hệ điều hành Microsoft Windows đã có rất nhiều phiên bản Các phiên bản hệ điều hành gần đây có: Windows XP, Windows Server
2003, Windows Server 2008, Windows 7, Windows 8, Windows 10
Hệ điều hành Windows có vai trò hết sức quan trọng trong việc phát triển phần mềm Desktop tại Việt Nam do sự sự phổ biến của nó Về bản chất, các chương trình Desktop đều phải thực hiện trên một nền tảng thống nhất bao gồm phần cứng và phần mềm Do đó, khi lập trình ứng dụng, các lập trình viên cần quan tâm nhiều tới hệ điều hành mà ứng dụng sẽ chạy
Các ngôn ngữ thường dùng để lập trình Desktop bao gồm: Pascal, C++, C#, VB.Net, Java,
2.2.2 Lập trình Web
Lập trình web là công việc của lập trình viên website Các lập trình viên website có nhiệm vụ chuyển toàn bộ giao diện tĩnh mà người thiết kế web đã thực hiện thành một hệ thống website hoàn chỉnh có tương tác với cơ sở dữ liệu và người dùng dựa trên ngôn ngữ máy tính Lúc này website sẽ trở nên linh hoạt hơn,
dễ dàng thêm, sửa, xóa nội dung
Ngày nay, hầu hết các website đều được xây dựng bằng ngôn ngữ lập trình web phía server Mã chương trình sẽ chạy trên máy chủ và sau đó cung cấp thông tin tĩnh trả lại trình duyệt web Các ngôn ngữ lập trình web phổ biến nhất là: PHP, ASP.NET, Ruby on Rails, Perl, ASP, Python, và JSP
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 28Các ngôn ngữ HTML, CSS, JavaScript là nền tảng tạo các giao diện tĩnh cho một website MySQL, PostgreSQL, SQL Server, MariaDB là các hệ quản trị cơ sở dữ liệu phổ biến cho các website hiện nay
2.2.3 Lập trình Mobile
Lập trình mobile là công việc mà các lập trình viên xây dựng các ứng dụng chạy trên các thiết bị di động, đôi khi còn được gọi là lập trình di động Hiện nay, lập trình di động được nhiều lập trình viên quan tâm Lập trình viên di động thường hướng tới các nền tảng như Android hay iOS
Ứng dụng Android phần đa số được viết bằng ngôn ngữ Java và sau này có các ngôn ngữ lập trình khác, do đó đòi hỏi lập trình viên cần biết về ngôn ngữ lập trình và các công cụ phù hợp để phát triển ứng dụng Do hệ điều hành Android hỗ trợ nhiều thiết bị với nhiều kích cỡ màn hình khác nhau và có nhiều phiên bản nên đôi khi gây khó khăn cho các lập trình viên khi viết ứng dụng Các lập trình viên đòi hỏi phải làm nhiều việc để đảm bảo ứng dụng tương thích với nhiều thiết bị
và không bị lỗi giao diện
Để lập trình các ứng dụng cho các thiết bị chạy hệ điều hành iOS, bạn cần phải biết ngôn ngữ lập trình Objective-C hay Swift và bạn phải có tài khoản Apple Developer để kiểm thử và gỡ rối chương trình Cài đặt và gỡ rối chương trình trên nền tảng iOS cũng phức tạp hơn nhiều so với Android
Có 3 hướng chính để phát triển một ứng dụng di động, đó là: Web App, Native App và Hybrid App
Web App (Mobile Web)
Mobile Web thường được áp dụng khi bạn đã có sẵn một website đang hoạt động Khi đó, cần tạo thêm một trang web riêng cho mobile có sử dụng HTML, CSS
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 29Hybrid App
Hybrid App kết hợp những ưu điểm của Mobile Web và Native App Ta xây dựng một ứng dụng bằng HTML, CSS, Javascript, chạy trên WebView của mobile Tuy nhiên, Hybrid App vẫn có thể tận dụng những tính năng của thiết bị như chụp hình, GPS, rung… Hybrid App được viết dựa trên một cross-platform framework như Cordova, Phonegap, Titanium… Khi lập trình ứng dụng, bạn chỉ cần gọi những chức năng của mobile thông qua các API mà framework cung cấp dưới dạng mã Javascript Bạn chỉ cần viết một lần, những framework này sẽ tự động dịch ứng dụng này ra các file cài đặt cho Android, iOS
2.3 Ngôn ngữ lập trình
Ngôn ngữ lập trình là một tập con của ngôn ngữ máy tính, được thiết kế và chuẩn hóa để truyền các chỉ thị cho các máy có bộ xử lý (CPU), nói riêng là máy tính Ngôn ngữ lập trình được dùng để lập trình máy tính, tạo ra các chương trình máy nhằm mục đích điều khiển máy tính hoặc mô tả các thuật toán để người khác đọc hiểu
Khi chưa có ngôn ngữ bậc cao, chương trình duy nhất mà máy tính có thể thực thi trực tiếp là ngôn ngữ máy hay mã máy Ngôn ngữ máy có dạng dãy các
số nhị phân, thường được ghép nhóm 8 bit thành 1 byte cho các hệ xử lý 8/16/32/64 bit Nội dung 1 byte thường được biểu diễn bằng 2 số hexa Để có được bộ mã này, ngày nay người ta dùng ngôn ngữ lập trình để viết ra chương trình ở dạng văn bản và dùng trình biên dịch để dịch sang mã máy Ngôn ngữ máy được gọi là “Ngôn ngữ lập trình thế hệ thứ nhất”
Hợp ngữ hay “Ngôn ngữ lập trình thế hệ thứ hai” ra đời cho phép thay thế các mã lệnh bằng các tên gợi nhớ và lập trình được ở dạng văn bản Ngày nay, hợp ngữ được sử dụng nhiều trong chương trình để tinh chỉnh ngôn ngữ bậc cao, thực hiện truy nhập trực tiếp phần cứng cụ thể trong bài toán lập trình hệ thống, tạo các hiệu ứng đặc biệt cho chương trình
Ngôn ngữ bậc cao hay “ngôn ngữ lập trình thế hệ 3” ra đời vào những năm
1950 Đây là các ngôn ngữ hình thức, dùng trong lập trình máy điện toán và không
lệ thuộc vào hệ máy tính cụ thể nào Ngôn ngữ lập trình bậc cao giải phóng người lập trình ứng dụng làm việc trong hệ điều hành cụ thể mà không phải quan tâm đến phần cứng cụ thể Các ngôn ngữ được phát triển liên tục với các dạng và biến thể mới, theo bước phát triển của kỹ thuật điện toán
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 30Ngôn ngữ lập trình bậc cao là một hệ thống được ký hiệu hóa để miêu tả những tính toán trong một dạng mà cả con người và máy đều có thể đọc và hiểu được Do đó, một ngôn ngữ lập trình bậc cao phải thỏa mãn được hai điều kiện cơ bản sau:
- Dễ hiểu và dễ sử dụng đối với người lập trình, để có thể dùng để giải quyết nhiều bài toán khác nhau
- Miêu tả một cách đầy đủ và rõ ràng các tiến trình, để chạy được trên các hệ máy tính khác nhau
Một tập hợp các chỉ thị được biểu thị qua ngôn ngữ lập trình nhằm mục đích thực hiện các thao tác máy tính nào đó được gọi là một chương trình Khái niệm chương trình còn có những tên khác như chương trình máy tính hay chương trình điện toán Như vậy, theo định nghĩa, mỗi ngôn ngữ lập trình cũng chính là một chương trình, nhưng nó có thể được dùng để tạo nên các chương trình khác Văn bản được viết bằng ngôn ngữ lập trình để tạo nên chương trình được gọi là
mã nguồn
Để đạt được yêu cầu về độ chính xác và tính hiệu quả, mã nguồn viết ra nhiều khi khó đọc ngay cả với chính người viết ra mã đó Vì lý do đó, mọi tài liệu, hướng dẫn lập trình đều khuyên các lập trình viên nên thêm các chú giải vào mã nguồn trong quá trình viết chương trình Các chú giải giúp người khác rất nhiều trong việc đọc hiểu mã nguồn Đối với chương trình dài, phức tạp, chú giải là thành phần vô cùng quan trọng trong mã nguồn
Quy ước:
- Phần diễn giải bằng ngôn ngữ tự nhiên sẽ được đặt trong dấu <>
- Phần có thể có hoặc không trong chương trình sẽ được đặt trong dấu [ ]
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 31Khi đó, cấu trúc chung của chương trình bằng ngôn ngữ bậc cao như sau:
Phần khai báo
- Khai báo tên chương trình:
Cú pháp: program <tên chương trình>;
Cú pháp: var <tên biến>:<kiểu dữ liệu>;
Ví dụ: var i: integer;
Chú ý: Tất cả các biến sử dụng trong chương trình đều phải được khai báo
và khởi tạo ở phần đầu chương trình chính hoặc chương trình con trước khi sử dụng
Phần thân chương trình
Các câu lệnh nằm trong phạm vi được xác định bởi dấu mở đầu và kết thúc tạo thành thân chương trình Trong ngôn ngữ lập trình Pascal, begin và end là cặp dấu mở đầu và kết thúc chương trình
Trang 32Ví dụ:
program tcb2_chuong2;
begin
writeln(‘Xin chao ban!’);
writeln(‘Toi la Ngon ngu lap trinh Pascal.’);
end
Ví dụ trên có 2 câu lệnh writeln, mỗi câu lệnh in thông báo trên một dòng
2.3.2 Các thành phần cơ bản của ngôn ngữ lập trình
Các ngôn ngữ lập trình thường có ba thành phần cơ bản: bảng chữ cái, cú pháp và ngữ nghĩa Trong đó:
- Bảng chữ cái: Là tập các kí tự được dùng để viết chương trình Không được
phép dùng bất kì kí tự nào ngoài các kí tự quy định trong bảng chữ cái Trong pascal bảng chữ cái bao gồm: các ký tự trong bảng chữ cái tiếng Anh, các chữ số
0 → 9 và một số kí tự đặc biệt
- Cú pháp: Là bộ qui tắc dùng để viết chương trình, dựa vào chúng người lập
trình và chương trình dịch biết được tổ hợp nào là không hợp lệ
- Ngữ nghĩa: Xác định ý nghĩa thao tác cần phải thực hiên, ứng với tổ hợp kí
tự dựa vào ngữ cảnh của nó
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 33Cú pháp của ngôn ngữ lập trình cho biết cách viết một chương trình máy tính hợp lệ, ngữ nghĩa xác định ý nghĩa của các tổ hợp kí tự trong chương trình Khi chương trình có lỗi cú pháp, chương trình dịch sẽ phát hiện và thông báo cho người lập trình viên biết Chỉ có các chương trình không còn lỗi cú pháp mới được dịch sang ngôn ngữ máy Lỗi ngữ nghĩa trong chương trình chỉ được phát hiện khi thực hiện chương trình trên bộ dữ liệu cụ thể
Đối với các ngôn ngữ phổ biến hoặc có lịch sử lâu dài, người ta thường tổ chức các hội thảo nhằm tạo ra các tiêu chuẩn và công bố các tiêu chuẩn chính thức cho ngôn ngữ đó, cũng như thảo luận về việc mở rộng, bổ sung cho các tiêu chuẩn trước đó Ví dụ: Với ngôn ngữ C++, hội đồng tiêu chuẩn ANSI C++ và ISO C++
đã tổ chức đến 13 cuộc hội thảo để điều chỉnh và nâng cấp ngôn ngữ này Đối với các ngôn ngữ lập trình web như JavaScript, ta có chuẩn ECMA, W3C
Một số khái niệm trong các ngôn ngữ lập trình
- Kiểu dữ liệu
Một hệ thống đặc thù mà theo đó các dữ liệu được tổ chức sắp xếp trong một chương trình gọi là hệ thống kiểu của ngôn ngữ lập trình Việc thiết kế và nghiên cứu các hệ thống kiểu được biết như là lý thuyết kiểu
Nhiều ngôn ngữ định nghĩa sẵn các kiểu dữ liệu thông dụng như:
integer: rất thông dụng, được dùng để biểu diễn các số nguyên
char: biểu diễn các ký tự đơn lẻ
string: biểu diễn chuỗi các ký tự, hay còn gọi là chuỗi, để tạo thành câu hay
D, Delphi, và C# đều đòi hỏi người lập trình kê khai rõ ràng kiểu của dữ liệu Việc
kê khai rõ ràng kiểu dữ liệu sẽ giúp ngôn ngữ rõ ràng hơn
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 34Các ngôn ngữ có kiểu tĩnh lại được chia ra thành hai loại:
- Ngôn ngữ kiểu khai báo, tức là sự thông báo của biến và hàm đều được khai báo riêng về kiểu của nó Ví dụ điển hình của loại này là Pascal, Java, C, hay C++
- Còn lại là ngôn ngữ loại suy đoán kiểu Trong đó các biến và hàm có thể không cần được khai báo từ trước Linux BASH và PHP là hai ví dụ trong những kiểu này
Suy đoán kiểu là một cơ chế mà ở đó các đặc tả về kiểu thường có thể bị loại bỏ hoàn toàn nếu có thể được, nhằm giúp cho trình dịch dễ dàng tự đoán các kiểu của các giá trị từ ngữ cảnh mà các giá trị đó được sử dụng Ví dụ một biến được gán giá trị 1 thì trình dịch loại suy đoán kiểu không cần khai báo riêng rằng
đó là một kiểu integer Các ngôn ngữ suy đoán kiểu linh hoạt hơn trong sử dụng, đặc biệt khi chúng lắp đặt sự đa dạng hoá các tham số Ví dụ của ngôn ngữ loại này là Haskell, MUMPS và ML
Các ngôn ngữ có kiểu động là ngôn ngữ mà các kiểu chỉ được gán lên các
dữ liệu trong thời gian chương trình được thực thi Điều này có mặt lợi là người lập trình không cần phải xác định kiểu dữ liệu nào hết, đồng thời có thêm lợi thế
là có thể gán nhiều hơn một kiểu dữ liệu lên các biến Tuy nhiên, vì ngôn ngữ có kiểu động xem tất cả các vai trò của dữ liệu trong chương trình là có thể chuyển hóa được, do vậy các phép toán không đúng (như là cộng các tên, hay là xếp thứ
tự các số theo thứ tự đánh vần) sẽ không tạo ra các lỗi cho đến lúc nó được thi hành mặc dù vẫn có một số cài đặt cung cấp vài dạng kiểm soát tĩnh cho các lỗi hiển nhiên
Ví dụ của các ngôn ngữ này là Objective-C, Lisp, JavaScript, Tcl, Prolog, Python và Ruby
Các ngôn ngữ có kiểu mạnh không cho phép dùng các giá trị của kiểu này như là một kiểu khác Chúng rất chặt chẽ trong việc phát hiện sự dùng sai kiểu Việc phát hiện này sẽ xảy ra ở thời gian thi hành (run-time) đối với các ngôn ngữ
có kiểu động và xảy ra ở thời gian dịch đối với các ngôn ngữ có kiểu tĩnh
ADA, Java, ML và Oberon là các ví dụ của ngôn ngữ có kiểu mạnh
Ngược lại, ngôn ngữ có kiểu yếu không quá khắt khe trong các quy tắc về kiểu hoặc cho phép một cơ chế tường minh để xử lý các vi phạm Thường nó cho phép hành xử các biểu hiện chưa được định nghĩa trước, các vi phạm về sự phân
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 35đoạn (segmentation), hay là các biểu hiện không an toàn khác khi mà các kiểu bị gán giá trị một cách không đúng
C, ASM, C++, Tcl và Lua là các ví dụ của ngôn ngữ có kiểu yếu
Chú ý: Các khái niệm về kiểu mạnh hay yếu có tính tương đối Java là ngôn ngữ có kiểu mạnh đối với C nhưng yếu đối với ML Tùy theo cách nhìn mà các khái niệm đó được dùng, nó tương tự như việc xem ngôn ngữ ASM là ở cấp thấp hơn ngôn ngữ C; trong khi Java lại là ngôn ngữ ở mức cao hơn C
Hai khái niệm tĩnh và mạnh cũng không đối lập nhau Java là ngôn ngữ có kiểu mạnh và tĩnh C là ngôn ngữ có kiểu yếu và tĩnh Trong khi đó, Python là ngôn ngữ có kiểu mạnh và động Tcl lại là ngôn ngữ có kiểu yếu và động Cũng nên biết trước rằng có nhiều người đã dùng sai các khái niệm trên và cho rằng kiểu mạnh là kiểu tĩnh cộng với mạnh Lầm lẫn hơn, họ còn cho rằng ngôn ngữ C
có kiểu mạnh mặc dù rằng C không hề bắt nhiều loại lỗi về việc dùng sai kiểu
Cấu trúc dữ liệu
Hầu hết các ngôn ngữ lập trình đều cung cấp các cách thức để xây dựng các cấu trúc dữ liệu phức tạp từ các kiểu sẵn có và liên kết các tên với các kiểu mới kết hợp dùng các kiểu mảng, danh sách, hàng đợi, ngăn xếp hay tập tin
Các ngôn ngữ hướng đối tượng cho phép lập trình viên định nghĩa các kiểu
dữ liệu mới gọi là đối tượng Bên trong các đối tượng, có riêng các hàm và các biến (hay còn được gọi thường được là phương thức và thuộc tính) Một chương trình có định nghĩa các đối tượng sẽ cho phép các đối tượng đó thực thi như là các chương trình con độc lập nhưng lại tương tác nhau Các tương tác này có thể được thiết kế trong lúc viết mã để mô hình hóa và mô phỏng vòng đời của các đối tượng Ngoài ra, các đối tượng còn có thêm các đặc tính như là thừa kế và đa hình Điều này là một ưu thế trong việc dùng ngôn ngữ loại này để mô tả các đối tượng của thế giới thực
Các câu lệnh và dòng điều khiển
Khi dữ liệu đã được xác định, máy tính phải được ra lệnh để tiến hành các phép toán trên dữ liệu đó Những mệnh đề cơ bản có thể được cấu trúc thông qua việc sử dụng các từ khóa (đã được định nghĩa bởi ngôn ngữ lập trình) hoặc là có thể tạo thành từ việc dùng và kết hợp các cấu trúc ngữ pháp hay cú pháp đã được định nghĩa Những mệnh đề cơ bản này gọi là các câu lệnh
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 36Tùy theo ngôn ngữ, các câu lệnh có thể được kết hợp với nhau theo trật tự nào đó Điều này cho phép chương trình được thiết lập để thực hiện được nhiều chức năng khác nhau Bên cạnh các câu lệnh để thay đổi và điều chỉnh dữ liệu, còn có những kiểu câu lệnh dùng để điều khiển dòng xử lý của máy tính như là phân nhánh, định nghĩa bởi nhiều trường hợp, vòng lặp, hay kết hợp các chức năng Đây là các thành tố không thể thiếu của một ngôn ngữ lập trình
Tên và các tham số
Muốn cho chương trình thi hành được thì phải có phương pháp xác định được các vùng trống của bộ nhớ để làm kho chứa dữ liệu Phương pháp được biết nhiều nhất là thông qua tên của các biến Tùy theo ngôn ngữ, các vùng trống gián tiếp
có thể bao gồm các tham chiếu, thực chất chúng là các con trỏ (pointer) chỉ đến những vùng chứa khác của bộ nhớ, được cài đặt trong các biến hay nhóm các biến Phương pháp này gọi là đặt tên kho nhớ Tương tự với phương pháp đặt tên kho nhớ, là phương pháp đặt tên những nhóm của các chỉ thị Trong hầu hết các ngôn ngữ lập trình, đều có cho phép gọi đến các macro hay các chương trình con như
là các câu lệnh để thi hành nội dung mô tả trong các macro hay chương trình con này thông qua tên Việc dùng tên như thế này cho phép các chương trình đạt tới một sự linh hoạt cao và có giá trị lớn trong việc tái sử dụng mã nguồn
Các tham chiếu gián tiếp đến các chương trình khả dụng hay các bộ phận dữ liệu đã được xác định từ trước cho phép nhiều ngôn ngữ định hướng ứng dụng tích hợp được các thao tác khác nhau
Cơ chế tham khảo và việc tái sử dụng mã nguồn
Mỗi ngôn ngữ lập trình đều có một bộ các cú pháp quy định việc lập trình sao cho mã nguồn được thực thi Theo đó, mỗi nhà sản xuất ngôn ngữ lập trình sẽ cung cấp một bộ các cấu trúc ngữ pháp cho các câu lệnh, một khối lượng lớn các
từ vựng quy ước được định nghĩa từ trước, và một số lượng các thủ tục hay hàm
cơ bản Ngoài ra, để giúp lập trình viên dễ dàng sử dụng, nhà sản xuất còn phải cung cấp các tài liệu tra cứu về đặc tính của ngôn ngữ mà họ phát hành Những tài liệu tra cứu này bao gồm hầu hết các đặc tả, tính chất, các tên (hay từ khoá) mặc định, phương pháp sử dụng, và nhiều khi là các mã nguồn để làm ví dụ Do
sự không thống nhất trong các ý kiến về việc thiết kế và sử dụng từng ngôn ngữ nên có thể xảy ra trường hợp mã nguồn của cùng một ngôn ngữ chạy được cho phần mềm dịch này nhưng không tương thích được với phần mềm dịch khác Ví
dụ là các mã nguồn C viết cho Microsoft C (phiên bản 6.0) có thể không chạy
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 37được khi dùng trình dịch Borland (phiên bản 4.5) nếu không biết cách thức điều chỉnh Đây cũng là nguyên do của các kỳ hội nghị chuẩn hóa ngôn ngữ lập trình Ngoài công việc chính là phát triển ngôn ngữ đặc thù, hội nghị còn tìm cách thống nhất hóa ngôn ngữ bằng cách đưa ra các tiêu chuẩn, các khuyến cáo thay đổi về ngôn ngữ trong tương lai hay các đổi mới về cú pháp của ngôn ngữ
Những đổi mới về tiêu chuẩn của một ngôn ngữ mặt khác lại có thể gây ra các hiệu ứng phụ Đó là việc mã nguồn của một ngôn ngữ dùng trong phiên bản
cũ không tương thích được với phần mềm dịch dùng tiêu chuẩn mới hơn Đây cũng là một việc cần lưu tâm cho những người lập trình Trường hợp điển hình nhất là việc thay đổi phiên bản về ngôn ngữ Visual Basic của Microsoft Các mã nguồn của phiên bản 6.0 có thể không dịch được nếu dùng phiên bản mới hơn Lý
do là nhà thiết kế đã thay đổi kiến trúc của VisualBasic để nâng cao và cung cấp thêm các chức năng mới về lập trình theo hướng đối tượng cho ngôn ngữ này Thay vào việc tái sử dụng mã nguồn thì cũng có các hướng phát triển khác nhằm tiết kiệm công sức cho người lập trình mà hai hướng chính là:
Việc ra đời của các bytecode mà điển hình là ngôn ngữ Java Với Java thì
mã nguồn sẽ được dịch thành một ngôn ngữ trung gian khác gọi là bytecode Mã của bytecode một lần nữa sẽ được phần mềm thông dịch thực thi, phần mềm này gọi là máy ảo Các máy ảo được cài đặt sẵn trên các máy tính và được cung cấp miễn phí Tùy theo hệ điều hành mà có thể cài đặt máy ảo thích hợp Do đó, cùng một nguồn Java bytecode có thể chạy trong bất cứ hệ điều hành nào miễn là hệ điều hành đó có cài đặt sẵn máy ảo Java Việc này tiết kiệm rất nhiều công sức cho lập trình viên vì họ không phải viết mã Java khác nhau cho mỗi hệ điều hành Tận dụng tính chất thừa kế của các lớp (class) trong ngôn ngữ hướng đối tượng Theo kiểu thiết kế này, một đối tượng có thể thụ hưởng các đặc tính mà các thế hệ trước của chúng đã có Do đó, khi phát triển phần mềm mới theo cấu trúc của các lớp, người ta chỉ cần tạo thêm các lớp con (subclass) có nhiều tính năng mới hơn Điều này giúp giảm bớt công sức vì không phải phát triển lại từ đầu (Java cũng là một loại ngôn ngữ hướng đối tượng nên nó có luôn ưu thế này)
Chỉ thị tiền xử lý
Ngoài các thành tố trên, các nhà sản xuất các phần mềm dịch (đặc biệt là các trình dịch) còn có thể cung cấp thêm các dạng câu lệnh không trực tiếp tham gia vào việc tính toán trên các dữ liệu của chương trình nhưng lại trực tiếp điều khiển
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 38các dòng chuyển dịch mã ở thời điểm dịch cũng như là hướng dẫn các trình dịch cách xử lý, tìm nguồn mã bổ sung, cách dùng thư viện, hay các cài đặt đặc biệt cho một loại hệ điều hành hay cho một loại phần cứng nào đó Các câu lệnh này
có thể tùy thuộc vào nhà sản xuất phần mềm chuyển dịch cung cấp
Ví dụ: Trong Pascal đoạn chú thích được đặt giữa cặp dấu {và} hoặc (*và*)
{hàm DAY(m, d, y) dùng để xây dựng chuỗi kiểu ngày tháng từ các giá trị tháng, ngày, năm}
Ví dụ: Trong Java, C/C++, PHP các câu chú giải có thể bắt đầu bởi dấu "//"
// hàm DAY(m, d, y) dùng để xây dựng chuỗi kiểu ngày tháng từ các giá trị tháng, ngày, năm
// m = tháng, d = ngày, y = năm
Chú ý: Để hiểu rõ và sử dụng thành thạo các dạng câu lệnh thì lập trình viên nên tham khảo các tài liệu riêng về từng ngôn ngữ
Chương trình con và macro
Một chương trình con (còn được gọi là hàm, thủ tục) là một chuỗi mã để thực thi một thao tác đặc thù nào đó như là một phần của chương trình lớn hơn Đây là các câu lệnh được nhóm vào một khối và được đặt tên và tên này tùy theo ngôn ngữ có thể được gán cho một kiểu dữ liệu Những khối mã này có thể được tập trung lại làm thành các thư viện phần mềm Các chương trình con có thể được gọi
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 39ra để thi hành thông qua tên của chương trình con đó Điều này cho phép các chương trình dùng tới những chương trình con nhiều lần mà không cần phải lặp lại các khối mã giống nhau một khi đã hoàn tất việc viết mã cho các chương trình con đó chỉ một lần
Trong một số ngôn ngữ, người ta lại phân biệt thành 2 kiểu chương trình con:
- Hàm (function) dùng để chỉ các chương trình con nào có giá trị trả về (trong một kiểu dữ liệu nào đó) thông qua tên của hàm
- Thủ tục (procedure, subroutine) dùng để mô tả các chương trình con được thi hành và không có giá trị trả về
Tuy nhiên, trong nhiều ngôn ngữ khác như C chẳng hạn thì không có sự phân biệt này và chỉ có một khái niệm hàm Để mô tả các hàm không trả về giá trị (tương đương với khái niệm thủ tục) thì người ta có thể gán cho kiểu dữ liệu của hàm đó là void
Chú ý: trong các ngôn ngữ hướng đối tượng, mỗi một đối tượng hay một thực thể (instance), tùy theo quan điểm, có thể được xem là một chương trình con hay một biến vì bản thân nội tại của thực thể đó có chứa các phương thức và cả các dữ liệu có thể trả lời cho các lệnh gọi từ bên ngoài
Macro được hiểu là tên viết tắt của một tập các câu lệnh Như vậy, trong những chương trình có các khối câu lệnh giống nhau thì người ta có thể định nghĩa một macro cho khối đại diện và có thể dùng tên của macro này trong lúc viết mã thay vì phải viết cả khối câu lệnh mỗi lần khối này xuất hiện lặp lại Một cách trừu tượng, thì macro là sự thay thế một dạng thức văn bản xác định bằng việc định nghĩa của một hay một bộ quy tắc Trong quá trình dịch, các phần mềm dịch
sẽ tự động thay các macro này trở lại bằng các mã mà nó viết tắt cho, rồi mới tiếp tục dịch Như vậy, các mã này được điền trả lại trong thời gian dịch Một số ngôn ngữ có thể cho các macro được phép khai báo và sử dụng tham số Như vậy về vai trò macro giống hệt như các chương trình con
Các điểm khác nhau quan trọng giữa một chương trình con và một macro bao gồm:
- Mã của chương trình con vẫn được dịch và để riêng ra Cho tới khi một chương trình con được gọi ở thời điểm thi hành, thì các mã đã dịch sẵn của chương trình con này mới được lắp vào dòng chạy của chương trình
Tin học đại cương 2 - Nguyễn Đạt Tiến
Trang 40- Trong khi đó, sau khi dịch, các macro sẽ không còn tồn tại Trong chương trình đã được dịch, tại các vị trí có tên của macro thì các tên này được thay thế bằng khối mã (đã dịch) mà nó đại diện
Cách viết mã dùng chương trình con sau khi dịch xong sẽ tạo thành các tập tin ngắn hơn so với cách viết dùng macro Ngược lại khi máy tính tải lên thì một phần mềm có cách dùng macro ít tốn tính toán của CPU hơn là phần mềm đó phát triển bằng phương pháp gọi các chương trình con
Biến, hằng, tham số, và đối số
Một biến (variable) là một tên biểu thị cho một số lượng, một ký hiệu hay một đối tượng Thêm vào đó, một biến sẽ được dành sẵn chỗ (phần của bộ nhớ)
để chứa số lượng, ký hiệu hay đối tượng đó Trong lúc chương trình được thi hành thì các biến của chương trình sẽ có thể thay đổi giá trị hoặc không thay đổi gì cả Hơn nữa, một biến có thể bị thay đổi cả lượng bộ nhớ mà nó đang chiếm hữu (do người lập trình hay do phần mềm dịch ra lệnh) Trường hợp biến này không được gán giá trị hay có gán giá trị nhưng không được sử dụng vào các tính toán thì nó chỉ chiếm chỗ trong bộ nhớ một cách vô ích Mỗi biến sẽ có tên của nó và có thể
có kiểu xác định Tùy theo ngôn ngữ, một biến có thể được khai báo ở vị trí nào
đó trong mã nguồn và cũng tùy ngôn ngữ, tùy phần mềm dịch và cách thức lập trình mà một biến có thể được tạo nên (cùng với chỗ chứa) hay bị xóa bỏ tại một thời điểm nào đó trong lúc thực thi chương trình Việc các biến bị xóa bỏ là để tiết kiệm bộ nhớ cũng như làm tốt hơn việc quản lý phần bộ nhớ mà đôi khi một chương trình chỉ được cấp bởi đăng ký với hệ điều hành
Quá trình tồn tại của một biến gọi là vòng đời của biến Trong nhiều trường hợp vòng đời của một biến chỉ xảy ra trong nội bộ một hàm, một thủ tục hay trong một khối mã
Một hằng (constant) là một giá trị số hay ký hiệu được gán cho một tên xác định Khác với biến, hằng không bao giờ thay đổi giá trị Vì lý do tiện lợi trong việc viết mã, thường đời sống của một hằng lâu dài hơn một biến và có khi nó tồn tại trong suốt toàn bộ thời gian thi hành của chương trình Trong nhiều trường hợp hằng có thể được xác định kiểu hay không (C++ là ngôn ngữ cho phép có cả hai cách định nghĩa hằng có kiểu hay không có kiểu và câu lệnh để tạo ra hai loại này
là hoàn toàn khác nhau) Nếu một biến hoàn toàn không thay đổi giá trị của nó trong mọi tình huống thì vai trò của biến này tương đương với một hằng
Tin học đại cương 2 - Nguyễn Đạt Tiến