TRƯỜNG ĐẠI HỌC LẠC HỒNG
KHOA CƠ ĐIỆN – ĐIỆN TỬ
GIÁO TRÌNH
LẬP TRÌNH KỸ THUẬT
Biên soạn: ThS. Đỗ Bình Nguyên
BIÊN HÒA, THÁNG 2 NĂM 2014
MỤC LỤC
CHƯƠNG 1. MỘT SỐ KHÁI NIỆM VỀ LẬP TRÌNH .......................... 6
1.1.
1.1.1.
1.1.2.
1.1.3.
1.2.
1.2.1.
1.2.2.
1.3.
1.3.1.
1.3.2.
1.3.3.
1.4.
Một số khái niệm ......................................................................................... 6
Thuật toán .................................................................................................. 6
Chương trình .............................................................................................. 6
Ngôn ngữ lập trình ..................................................................................... 7
Xây dựng chương trình .............................................................................. 7
Quy trình Nhập – Xử lý – Xuất (Input – Process – Output Cycle) .............. 7
Các bước xây dựng chương trình ................................................................ 8
Thể hiện thuật toán ..................................................................................... 8
Sử dụng ngôn ngữ tự nhiên......................................................................... 8
Sử dụng lưu đồ ......................................................................................... 10
Sử dụng mã giả......................................................................................... 15
Câu hỏi - Bài tập ....................................................................................... 16
CHƯƠNG 2. CÁC HỆ ĐẾM................................................................... 18
2.1.
Khái niệm .................................................................................................. 18
2.2.
Chuyển đổi giữa các hệ đếm ..................................................................... 19
2.2.1.
2.2.2.
2.2.3.
2.3.
Biến đổi số ở hệ đếm bất kỳ sang hệ thập phân ......................................... 19
Biến đổi số ở hệ thập phân sang hệ đếm bất kỳ ......................................... 21
Biến đổi số biểu diễn trong các hệ đếm đặc biệt ....................................... 23
Câu hỏi - Bài tập ....................................................................................... 25
CHƯƠNG 3. CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ C .... 26
3.1.
Tập ký tự ................................................................................................... 26
3.2.
Từ khóa ..................................................................................................... 26
3.3.
Chú thích ................................................................................................... 27
3.4.
Chỉ thị tiền xử lý........................................................................................ 27
3.4.1.
3.4.2.
Giai đoạn dịch .......................................................................................... 27
Giai đoạn liên kết ..................................................................................... 28
3.5.
Biểu thức ................................................................................................... 29
3.6.
Câu lệnh..................................................................................................... 30
3.7.
Cụm câu lệnh ............................................................................................ 30
3.8.
Các kiểu dữ liệu......................................................................................... 30
3.9.
Biến ............................................................................................................ 31
3.9.1.
3.9.2.
3.9.3.
3.9.4.
Khai báo biến ........................................................................................... 32
Khởi tạo biến ............................................................................................ 33
Hằng số .................................................................................................... 33
Phạm vi hoạt động của biến ...................................................................... 34
3.10. Cấu trúc chương trình .............................................................................. 35
3.11. Câu hỏi – Bài tập....................................................................................... 39
CHƯƠNG 4. CÁC TOÁN TỬ ................................................................ 41
4.1.
Toán tử gán ............................................................................................... 41
4.2.
Toán tử số học ........................................................................................... 41
4.3.
Toán tử quan hệ ........................................................................................ 41
4.4.
Toán tử logic.............................................................................................. 42
4.5.
Toán tử thao tác bit................................................................................... 42
4.5.1.
4.5.2.
4.5.3.
4.5.4.
4.5.5.
Toán tử AND ........................................................................................... 43
Toán tử OR .............................................................................................. 45
Toán tử XOR............................................................................................ 45
Toán tử NOT ............................................................................................ 46
Toán tử dịch bit ........................................................................................ 46
4.6.
Toán tử điều kiện ...................................................................................... 47
4.7.
Toán tử gán phức hợp............................................................................... 47
4.8.
Toán tử tăng, giảm .................................................................................... 47
4.9.
Thứ tự ưu tiên các toán tử ........................................................................ 48
4.10. Chuyển đổi kiểu dữ liệu ............................................................................ 50
4.10.1. Chuyển đổi kiểu không tường minh (Implicit type conversion) ................ 50
4.10.2. Ép kiểu (Type casting).............................................................................. 52
4.11. Câu hỏi – Bài tập....................................................................................... 52
CHƯƠNG 5. LỆNH NHẬP – XUẤT ...................................................... 54
5.1.
Các thư viện nhập xuất chuẩn .................................................................. 54
5.2.
Các hàm nhập xuất chuẩn ........................................................................ 54
5.2.1.
5.2.2.
5.2.3.
5.2.4.
5.2.5.
5.3.
Hàm getchar () ......................................................................................... 54
Hàm putchar () ......................................................................................... 55
Hàm getch() ............................................................................................. 55
Hàm printf() ............................................................................................. 56
Hàm scanf ................................................................................................ 63
Câu hỏi – Bài tập....................................................................................... 66
CHƯƠNG 6. CẤU TRÚC RẼ NHÁNH ................................................. 68
6.1.
Lệnh if........................................................................................................ 68
6.2.
Lệnh if … else ............................................................................................ 71
6.3.
Lệnh switch … case ................................................................................... 79
6.4.
Câu hỏi – Bài tập....................................................................................... 83
CHƯƠNG 7. LỆNH LẶP ........................................................................ 85
7.1.
Lệnh for ..................................................................................................... 85
7.2.
Lệnh while ................................................................................................. 93
7.3.
Lệnh do … while ....................................................................................... 96
7.4.
Các lệnh điều khiển vòng lặp.................................................................... 98
7.4.1.
7.4.2.
7.5.
Lệnh break ............................................................................................... 98
Lệnh continue ......................................................................................... 100
Câu hỏi – Bài tập..................................................................................... 101
CHƯƠNG 8. HÀM ................................................................................ 102
8.1.
Định nghĩa hàm ....................................................................................... 103
8.2.
Truyền tham số cho hàm ........................................................................ 105
8.3.
Sử dụng hàm ........................................................................................... 107
8.4.
Macro hàm .............................................................................................. 111
8.5.
Câu hỏi – Bài tập..................................................................................... 112
CHƯƠNG 9. MẢNG VÀ CHUỖI......................................................... 113
9.1.
9.1.1.
9.1.2.
9.1.3.
9.2.
9.2.1.
9.2.2.
9.3.
Mảng ........................................................................................................ 113
Khái niệm ............................................................................................... 113
Khai báo mảng ....................................................................................... 113
Truy xuất mảng ...................................................................................... 114
Chuỗi ....................................................................................................... 121
Lệnh gets() ............................................................................................. 123
Hàm puts() ............................................................................................. 123
Câu hỏi – Bài tập..................................................................................... 124
CHƯƠNG 10. CON TRỎ........................................................................ 125
10.1. Khái niệm ................................................................................................ 125
10.2. Toán tử lấy địa chỉ (&)............................................................................ 125
10.3. Toán tử tham chiếu (*) ........................................................................... 127
10.4. Các phép toán trên con trỏ ..................................................................... 128
10.4.1. Phép gán................................................................................................. 128
10.4.2. Phép tăng/giảm địa chỉ ........................................................................... 128
10.4.3. Phép so sánh ........................................................................................... 130
10.5. Con trỏ mảng .......................................................................................... 130
10.6. Con trỏ không kiểu (con trỏ void) .......................................................... 132
10.7. Câu hỏi – Bài tập..................................................................................... 133
CHƯƠNG 11. DỮ LIỆU TỰ TẠO ......................................................... 135
11.1. Struct (Cấu trúc) ..................................................................................... 135
11.1.1.
11.1.2.
11.1.3.
11.1.4.
Khai báo struct ....................................................................................... 135
Lệnh typedef .......................................................................................... 136
Sử dụng struct ........................................................................................ 137
Con trỏ tới struct .................................................................................... 140
11.2. Union (Hợp) ............................................................................................ 142
11.2.1. Khai báo union ....................................................................................... 142
11.2.2. Sử dụng union ........................................................................................ 143
11.3. Enum (Kiểu liệt kê) ................................................................................. 144
11.4. Câu hỏi – Bài tập..................................................................................... 147
Chương 1. MỘT SỐ KHÁI NIỆM
VỀ LẬP TRÌNH
1.1.
Một số khái niệm
1.1.1.
Thuật toán
Là tập hợp (dãy) hữu hạn các chỉ thị (hành động) được định nghĩa rõ ràng nhằm giải
quyết một bài toán cụ thể nào đó.
Nêu thuật toán giải phương trình bậc nhất: ax + b = 0 (với a, b
∈ R)
Thuật toán để giải phương trình như sau:
• Nếu a = 0
o b = 0 thì phương trình có vô số nghiệm
o b ≠ 0 thì phương trình vô nghiệm
• Nếu a ≠ 0 thì phương trình có nghiệm duy nhất là x = -b/a
Thuật toán có năm tính chất sau:
• Tính chính xác: thuật toán phải đảm bảo cho kết quả tính toán hay các thao tác
mà máy tính thực hiện được là chính xác.
• Tính rõ ràng: Thuật toán phải được thể hiện bằng các câu lệnh minh bạch; các
câu lệnh được sắp xếp theo thứ tự nhất định.
• Tính khách quan: Một thuật toán dù được viết bởi nhiều người trên nhiều máy
tính khác nhau vẫn phải cho kết quả như nhau.
• Tính phổ dụng: Thuật toán không chỉ áp dụng cho một bài toán nhất định mà
có thể áp dụng cho một lớp các bài toán có đầu vào tương tự nhau.
• Tính kết thúc: Thuật toán phải gồm một số hữu hạn các bước tính toán.
1.1.2.
Chương trình
Là một tập hợp các mô tả, các phát biểu, nằm trong một hệ thống qui ước về ý nghĩa
và thứ tự thực hiện, nhằm điều khiển máy tính làm việc. Theo Niklaus Wirth thì:
Chương trình = Thuật toán + Cấu trúc dữ liệu
Các thuật toán và chương trình đều có cấu trúc dựa trên 3 cấu trúc điều khiển cơ bản:
• Tuần tự (Sequential): Các bước thực hiện tuần tự một cách chính xác từ trên
xuống, mỗi bước chỉ thực hiện đúng một lần.
Trang 6
• Chọn lọc (Selection): Chọn 1 trong 2 hay nhiều thao tác để thực hiện.
• Lặp lại (Repetition): Một hay nhiều bước được thực hiện lặp lại một số lần.
1.1.3.
Ngôn ngữ lập trình
Ngôn ngữ lập trình là hệ thống các ký hiệu tuân theo các qui ước về ngữ pháp và ngữ
nghĩa, dùng để xây dựng thành các chương trình cho máy tính.
Một chương trình được viết bằng một ngôn ngữ lập trình cụ thể(ví dụ Pascal, C,
Visual Basic…) gọi là chương trình nguồn, chương trình dịch làm nhiệm vụ dịch
chương trình nguồn thành chương trình thực thi được trên máy tính.
1.2.
Xây dựng chương trình
1.2.1. Quy trình Nhập – Xử lý – Xuất (Input – Process –
Output Cycle)
Quy trình xử lý cơ bản của máy tính gồm có các bước: nhập, xử lý, xuất (thường gọi
tắt là quy trình I-P-O)
• Bước Nhập (Input): là bước đưa các thông tin cần xử lý vào hệ thống. Các
thông tin này bao gồm thông tin do người dùng mới nhập vào và thông tin đã
lưu trữ từ trước.
• Bước Xử lý (Process): Thực hiện một số thao tác nào đó tương ứng với dữ liệu
nhập vào
• Bước Xuất (Output): Đưa dữ liệu ra cho người sử dụng
INPUT
PROCESS
OUTPUT
Hình 1.1 Quy trình Nhập – Xử lý – Xuất
Trong thực tế, ta có thể áp dụng quy trình này để phân tích khá nhiều quy trình khác
nhau. Xem một số ví dụ sau đây
Quy trình I-P-O để pha chế một ly nước chanh
NHẬP
XỬ LÝ
XUẤT
Chanh, đường
Cho chanh, đường vào ly
Nước chanh sẵn
sàng để uống
Khuấy đều
Quy trình hoạt động của một chiếc máy giặt
NHẬP
XỬ LÝ
Trang 7
XUẤT
Quần áo dơ
Giặt
Nước
Sấy
Quần áo sạch
Bột giặt
Quy trình xử lý của chương trình soạn thảo trên máy tính
NHẬP
XỬ LÝ
XUẤT
Phím bấm trên bàn Kết hợp các ký tự thành Các từ hiển thị trên màn
phím
các từ
hình hoặc xuất ra máy in
Các bước giải phương trình bậc nhất ax + b = 0
NHẬP
Hệ số a, b
1.2.2.
XỬ LÝ
Lấy –b chia cho a
XUẤT
Nghiệm x
Các bước xây dựng chương trình
Bước 1: Phân tích vấn đề và xác định các đặc điểm của nó (Xác định I-P-O của
chương trình)
Bước 2: Lập ra giải pháp. Thuật toán để giải quyết vấn đề được xác định ở bước này.
Ta có thể dùng ngôn ngữ tự nhiên, lưu đồ hoặc mã giả để thể hiện thuật toán.
Bước 3: Cài đặt hay còn gọi là viết chương trình. Nếu như ở bước 2, các thuật toán
còn ở mức độ một ý tưởng để giải quyết vấn đề thì ở bước này ta phải thể hiện các
thuật toán đưa ra ở bước 2 bằng một ngôn ngữ lập trình nào đó.
Bước 4: Biên dịch và chạy thử chương trình nhằm loại bỏ các lỗi cú pháp
Bước 5: Kiểm chứng và hoàn thiện chương trình. Bước này yêu cầu người lập trình
phải thử nghiệm bằng nhiều số liệu và đánh giá nhằm loại bỏ các lỗi logic.
1.3.
Thể hiện thuật toán
Để có thể truyền đạt thuật toán cho người khác hoặc chuyển thuật toán thành chương
trình máy tính thì ta phải có phương pháp biểu diễn thuật toán. Có ba phương pháp
để biểu diễn thuật toán đó là:
• Dùng ngôn ngữ tự nhiên
• Dùng lưu đồ (flowchart)
• Dùng mã giả (pseudocode)
1.3.1.
Sử dụng ngôn ngữ tự nhiên
Trong cách biểu diễn thuật toán theo ngôn ngữ tự nhiên, người ta sử dụng ngôn ngữ
thường ngày để liệt kê các bước của thuật toán. Phương pháp biểu diễn này không
Trang 8
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. 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. Tuy vậy, để
dễ đọc, ta nên viết các bước con lùi vào bên phải và đánh số bước theo quy tắc phân
cấp như 1, 1.1, 1.1.1, ...
Thuật toán giải phương trình bậc 2: ax2 + bx + c = 0 (a ≠ 0)
1. Xác định giá trị của ba hệ số a, b, c
2. Nếu a = 0 thì
2.1. Yêu cầu đầu vào không đảm bảo
2.2. Kết thúc thuật toán
3. Trường hợp a ≠ 0 thì
3.1. Tính giá trị ∆ = b2 – 4ac
3.2. Nếu ∆ > 0 thì
3.2.1. Phương trình có hai nghiệm phân biệt x1 và x2
3.2.2. Giá trị của hai nghiệm được tính theo công thức
=
3.3.
− + √∆
2
=
3.2.3. Kết thúc thuật toán
Nếu ∆ = 0 thì
3.3.1. Phương trình có nghiệm kép x0
3.3.2. Giá trị của nghiệm kép được tính theo công thức
=
3.4.
− − √∆
2
−
2
3.3.3. Kết thúc thuật toán
Nếu ∆ < 0 thì
3.4.1. Phương trình vô nghiệm
3.4.2. Kết thúc thuật toán
Có n hộp có khối lượng khác nhau và một cái cân dĩa. Hãy chỉ
ra cách cân để tìm được hộp có trọng lượng nặng nhất.
1. Nếu chỉ có 1 hộp (n=1) thì
1.1. Hộp đó chính là hộp nặng nhất.
1.2. Kết thúc thuật toán.
2. Ngược lại nếu có từ hai hộp trở lên (n>1)
2.1. Chọn hai hộp bất kỳ và đặt lên bàn cân.
2.2. Giữ lại hộp nặng hơn, cất hộp nhẹ hơn sang chỗ khác.
Trang 9
3. Nếu còn hộp chưa được cân thực hiện các bước sau, nếu không còn hộp nào
nữa, sang bước 5.
3.1. Chọn một hộp bất kỳ và để lên dĩa cân còn trống.
3.2. Giữ lại hộp nặng hơn, cất hộp nhẹ hơn sang chỗ khác.
4. Trở lại bước 3.
Hộp còn lại trên cân chính là hộp nặng nhất. Kết thúc.
1.3.2.
Sử dụng lưu đồ
Để dễ diễn đạt các thuật toán hơn, các nhà lập trình đưa ra dạng lưu đồ để minh họa
từng bước quá trình xử lý một vấn đề. Lưu đồ là một loại sơ đồ biểu diễn một thuật
toán hoặc một quá trình, biểu hiện các bước công việc dưới dạng các loại hình hộp
khác nhau theo thứ tự được biểu diễn bởi các mũi tên. Sơ đồ này có thể thể hiện giải
pháp cho vấn đề cần giải quyết từng bước từng bước một. Các bước quá trình được
biểu diễn dưới dạng các hình hộp được nối với nhau bằng các mũi tên để thể hiện các
bước xử lý một vấn đề cần xử lý. Lưu đồ được dùng trong phân tích, thiết kế, phân
loại hoặc quản lí công việc hoặc chương trình trong nhiều lĩnh vực khác nhau.
Ðể biểu diễn thuật toán theo sơ đồ khối, ta phải phân biệt hai loại thao tác: Thao tác
chọn lựa và Thao tác hành động.
• Thao tác chọn lựa: Thao tác này thực hiện chọn lựa dựa theo một điều kiện
nào đó. Chẳng hạn : thao tác "nếu a = b thì thực hiện thao tác B2, ngược lại
thực hiện B4" là thao tác chọn lựa.
• Các thao tác còn lại không thuộc loại chọn lựa được xếp vào loại hành động.
Chẳng hạn, "Chọn một hộp bất kỳ và để lên dĩa cân còn trống." là một thao tác
thuộc loại hành động.
Các ký hiệu thường dùng để biểu diễn lưu đồ gồm có các ký hiệu cho trong Bảng 1.1
Bảng 1.1 Các ký hiệu để biểu diễn lưu đồ
HÌNH DẠNG
HOẠT ĐỘNG
Dữ liệu vào/Ra (Input/Output)
Xử lý (Process)
Chọn lựa (Decision)
Trang 10
Đường đi (Route)
Điểm cuối (Terminator)
Điểm ghép nối cùng trang (On-page
Connector)
Điểm ghép nối sang trang (Off-page
Connector)
1.3.2.1. Thao tác chọn lựa (Decision):
Thao tác này được biểu diễn bằng một hình thoi, bên trong chứa biểu thức điều kiện
∆>0
A=B
1.3.2.2. Thao tác xử lý (Process)
Thao tác này được biểu diễn bằng một hình chữ nhật, bên trong chứa nội dung xử lý
Chọn một hộp
Tính nghiệm đơn
bất kỳ
1.3.2.3. Đường đi (Route)
Hai bước kế tiếp nhau được nối bằng một mũi tên để chỉ hướng thực hiện. Chẳng hạn
trong Error! Reference source not found., trình tự thực hiện sẽ là Bước1, Bước 2,
Bước 3.
Trang 11
Bước 1
Bước 2
Bước 3
Từ thao tác chọn lựa có thể có đến hai hướng đi, một hướng ứng với điều kiện thỏa
và một hướng ứng với điều kiện không thỏa. Do vậy, ta dùng hai hai mũi tên xuất
phát từ các đỉnh hình thoi, trên mỗi mũi tên có ký hiệu Ð/Ðúng/Y/Yes/T/True để chỉ
hướng đi ứng với điều kiện thỏa và ký hiệu S/Sai/N/No/F/False để chỉ hướng đi ứng
với điều kiện không thỏa.
∆>0
Yes
Tính 2 nghiệm
phân biệt x1, x2
No
∆=0
Yes
Tính nghiệm
kép x0
No
Phương trình
vô nghiệm
1.3.2.4. Dữ liệu vào ra (Data In/Out)
Hình dạng của khối này trong nhiều tài liệu có thể khác nhau, tuy nhiên, thường thấy
nhất là dạng hình bình hành, bên trong chứa các dữ liệu cần nhập vào hoặc xuất ra.
Trang 12
Nhập
Tên,
tuổi,
địa chỉ
Nhập a,
b, c
Hiển thị
Nghiệm
phương
trình
1.3.2.5. Điểm cuối (Terminator)
Ðiểm cuối là điểm khởi đầu và kết thúc của thuật toán, được biểu diễn bằng hình
ovan, bên trong có ghi chữ bắt đầu/start/begin hoặc kết thúc/stop/end. Ðiểm cuối chỉ
có cung đi ra (điểm khởi đầu) hoặc cung đi vào (điểm kết thúc).
Begin
Nhập a, b, c
∆ = b2 – 4ac
∆>0
Yes
No
∆=0
Yes
No
Phương trình
vô nghiệm
End
Trang 13
1.3.2.6. Điểm nối
Điểm nối được dùng để nối các phần khác nhau của lưu đồ lại với nhau. Có hai loại
điểm nối:
• Điểm nối cùng trang (On-page Connector): Dùng để nối các phần của lưu đồ
trên cùng trang giấy. Điểm nối cùng trang có dạng hình tròn, bên trong đặt một
ký hiệu để biết sự liên hệ giữa các điểm nối. Hai điểm có cùng ký hiệu thì được
hiểu là nối với nhau
Begin
1
2
Nhập a, b, c
∆=0
Yes
∆ = b2 – 4ac
No
∆>0
No
Yes
Phương trình
vô nghiệm
2
End
1
• Điểm nối sang trang (Off-page Connector): Khi lưu đồ quá lớn phải vẽ trên
nhiều trang thì ta sẽ dùng ký hiệu này để nối các phần của lưu đồ ở các trang
khác nhau lại với nhau. Bên trong ký hiệu này ta cũng đặt một ký hiệu cho biết
sự liên hệ giữa các điểm nối trên các trang. Hai điểm nối có cùng ký hiệu sẽ
được hiểu là nối với nhau
Trang 14
Bước n
#1
Trang 1
Trang 2
#1
Bước n + 1
Khi vẽ lưu đồ, ta nên tuân theo một số quy tắc sau:
• Trước tiên hãy tập trung vẽ một số đường đi chính của lưu đồ, sau đó hãy thêm
vào tất cả các nhánh và vòng lặp.
• Một lưu đồ chỉ có một điểm Bắt đầu và một điểm Kết thúc.
• Mỗi bước trong chương trình không cần thể hiện trong lưu đồ.
• Lưu đồ cần phải đáp ứng được yêu cầu: những người lập trình khác có thể hiểu
lưu đồ một cách dễ dàng
1.3.3.
Sử dụng mã giả
Tuy sơ đồ khối 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 lại cồng kềnh. Ðể mô tả một thuật toán nhỏ ta phải dùng một không gian
rất lớn. Hơn nữa, lưu đồ chỉ phân biệt hai thao tác là rẽ nhánh (chọn lựa có điều kiện)
và thao tác xử lý nhưng trong thực tế, các thuật toán còn có thêm các thao tác lặp
(Chúng ta sẽ tìm hiểu về thao tác lặp trong các phần sau).
Trang 15
Khi thể hiện thuật toán bằng mã giả, ta sẽ vay mượn các cú pháp của một ngôn ngữ
lập trình nào đó để thể hiện thuật toán. 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 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. Tuy nhiên, trong mã giả ta vẫn dùng một phần ngôn ngữ tự nhiên.
Sau đây là một đoạn mã giả của giải thuật giải phương trình bậc
hai. Đoạn mã giả này được vay mượn từ cú pháp của ngôn ngữ Pascal
if Delta > 0 then
begin
x1=(-b-sqrt(delta))/(2*a)
x2=(-b+sqrt(delta))/(2*a)
xuất kết quả : phương trình có hai nghiệm: x1 và x2
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
1.4.
Câu hỏi - Bài tập
Thiết kế lưu đồ giải thuật để giải quyết các yêu cầu sau:
1. Xác định vị trí (thuộc góc phần tư thứ mấy) của một góc.
Nhập vào một góc (theo độ ): 95
Thuộc góc phần tư thứ 2
2. Xác định số ngày của một tháng nào đó trong một năm không phải năm nhuận.
Nhập vào một tháng: 10
Tháng 10 có 31 ngày!
3. Kiểm tra xem 3 số thực a, b, c có thể là độ dài 3 cạnh của một tam giác không.
Nhập vào 3 số thực:
- a = 3
- b = 4
- c = 5
Đây có thể là độ dài 3 cạnh của một tam giác.
4. Tìm ước chung lớn nhất của hai số nguyên dương.
Nhập a: 20
Nhập b: 15
UCLN(a,b): 5
5. Tính X(n) = 1 + 2 + 3 + … + n
Nhập n (n>0): 3
X(3) = 6
6. Tính Y(n) = 1 × 2 × 3 × … × n
Trang 16
Nhập n (n>0): 4
Y(3) = 24
7. Tính Z(n) = 2 + 4 + 6 + … + 2n
Nhập n (n>0): 3
Z(3) = 12
8. Tính A(n) = 1 × 3 × 5 × … × (2n+1)
Nhập n (n>0): 3
A(3) = 105
9. Tính C(n) = 12 + 22 + 32 + … + n2
Nhập n (n>0): 3
C(3) = 14
10. Tính B(n) = 1 – 2 + 3 – 4 + … + (-1)n+1n
Nhập n (n>0): 3
B(3) = 2
11. Tính D(n) = 1 + (1 + 2) + (1 + 2 + 3) + … + (1 + 2 + 3 + … + n), với n > 0
Nhập n (n>0): 3
D(3) = 10
12. Tính trung bình cộng của n số thực được nhập từ bàn phím.
Nhập một số (nhập 0
Nhập một số (nhập 0
Nhập một số (nhập 0
Nhập một số (nhập 0
Trung bình cộng của
để dừng):
để dừng):
để dừng):
để dừng):
3 số thực
3
4
5
0
trên là: 4
Trang 17
Chương 2. CÁC HỆ ĐẾM
2.1.
Khái niệm
Hệ đếm là tập các ký hiệu và quy tắc sử dụng tập ký hiệu đó để biểu diễn và xác định
giá trị các số. Mỗi ký hiệu đại diện cho một giá trị duy nhất và không phụ thuộc vào
vị trí của nó xuất hiện ở đâu trong biểu diễn. Số lượng các chữ số được sử dụng trong
một hệ đếm gọi là cơ số của hệ đếm.
Thông thường, ta hay dùng hệ thập phân (hay hệ đếm cơ số 10. Tiếng Anh: Decimal).
Đây là một hệ đếm có 10 ký tự (0,1, 2, 3, 4, 5, 6, 7, 8, 9) dùng chỉ số lượng. Những
con số này còn được dùng cùng với dấu phân cách thập phân – để định vị phần thập
phân sau hàng đơn vị. Con số còn có thể được dẫn đầu bằng các ký hiệu “+” hay “-”
để biểu đạt số dương và số âm.
Hệ đếm thập phân chỉ là một trường hợp riêng khi chọn cơ số là 10. Thực ra, bất kì
một số tự nhiên b nào lớn hơn 1 đều có thể chọn làm cơ số cho hệ đếm. Các kí hiệu
được dùng cho hệ đếm đó sẽ là ký hiệu đại diện cho các giá trị: 0, 1..., b-1.
Trong lập trình, ta sẽ thường xuyên sử dụng các hệ đếm:
• Hệ nhị phân (hệ đếm cơ số 2. Tiếng Anh: Binary): là hệ đếm dùng hai ký tự
để biểu đạt một giá trị số, hai ký tự đó là 0 và 1. Chúng thường được dùng để
biểu đạt hai giá trị hiệu điện thế tương ứng (có hiệu điện thế hoặc hiệu điện
thế cao là 1, không có hoặc thấp là 0). Do có ưu điểm tính toán đơn giản, dễ
dàng thực hiện về mặt vật lý nên hệ nhị phân trở thành hệ đếm cơ bản trong
máy tính điện tử.
• Hệ thập lục phân (hệ đếm cơ số 16. Tiếng Anh: Hexadecimal do đó đôi khi
còn được gọi là số HEX): gồm 16 chữ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C,
D, E, F (các chữ cái có thể viết thường hoặc viết hoa đều được)
Số thập phân 79, với biểu thị nhị phân là 01001111, có thể được viết thành
4F trong hệ thập lục phân (4 = 0100, F = 1111). (Bảng 2.1 cho ta các giá trị
tương ứng của 16 số đầu tiên trong các hệ thập phân, nhị phân, thập lục phân).
Theo quy ước chung, ta phải viết thêm phần chỉ số để cho biết số đó được biểu diễn
ở hệ đếm nào.
• Số được viết trong hệ nhị phân sẽ được viết thêm ký tự B hoặc “BIN” hoặc số
2 vào phía sau
• Số được viết trong hệ thập lục phân sẽ được viết thêm ký tự H hoặc “HEX”
hoặc số 16 vào phía sau
Trang 18
• Số được viết trong hệ thập phân sẽ được viết thêm ký tự D hoặc d (viết tắt của
từ tiếng anh Decimal) hoặc số 10 phía sau. Tuy nhiên, do hệ thập phân là hệ
đếm mà ta thường dùng nên ta có thể không cần viết thêm ký hiệu này.
• Số thập phân: 102 = 102D = 102d = 10210
• Số nhị phân 1011B = 1011BIN = 10112
• Số thập lục phân: 2E3AH = 2E3AHEX = 2E3A16
Bảng 2.1 Biểu diễn của các số từ 0 – 15 trong các hệ thập phân, nhị phân và thập
lục phân
Thập phân
Nhị phân
Thập lục
phân
Thập phân
Nhị phân
Thập lục
phân
0
0000
0
8
1000
8
1
0001
1
9
1001
9
2
0010
2
10
1010
A
3
0011
3
11
1011
B
4
0100
4
12
1100
C
5
0101
5
13
1101
D
6
0110
6
14
1110
E
7
0111
7
15
1111
F
2.2.
Chuyển đổi giữa các hệ đếm
2.2.1.
Biến đổi số ở hệ đếm bất kỳ sang hệ thập phân
Nếu một số N trong hệ đếm cơ số b nếu có biễu diễn là :
N = dn dn-1 dn-2 ... d1 d0 , d -1 d -2 ... d –m
(2.1)
thì giá trị của N trong hệ thập phân (hệ đếm cơ số 10) được tính theo công thức:
N = dn bn + dn-1 bn-1 +...+ d0 b0 + d-1 b-1+... + d-m b-m
(2.2)
Ở đây các di thỏa mãn điều kiện 0 ≤ di < b còn n là số lượng các chữ số bên trái, và
m là số lượng các chữ số bên phải dấu phân chia phần nguyên và phần lẻ của số N.
Trang 19
Tính giá trị trong hệ thập phân của số thập phân (cơ số 10) N =
2014.
Ta có:
• d1 = 1
• d0 = 4
• b = 10
• d3 = 2
• d2 = 0
Theo công thức (2.1), giá trị của số này sẽ là:
N = 2.103 + 0.102 + 1.101 + 4.100 = 2014
Tính giá trị trong hệ thập phân của số nhị phân (cơ số 2) N =
10110.
Ta có:
• d2 = 1
• d1 = 1
• d0 = 0
• b=2
• d4 = 1
• d3 = 0
Theo công thức (2.1), giá trị của số này sẽ là:
N = 1.24 + 0.23 + 1.22 + 1.21 + 0.20 = 22
Tính giá trị trong hệ thập phân của số nhị phân (cơ số 2) N =
10110,101.
Ta có:
•
•
•
•
•
•
•
•
•
b=2
d4 = 1
d3 = 0
d2 = 1
d1 = 1
d0 = 0
d-1 = 1
d-2 = 0
d-3 = 1
Theo công thức (2.1), giá trị của số này sẽ là:
N = 1.24 + 0.23 + 1.22 + 1.21 + 0.20 + 1.2-1 + 0.2-2 + 1.2-3 = 22,625
Tính giá trị trong hệ thập phân của số thập lục phân (cơ số 16)
N = D3F,416
Để thực hiện yêu cầu này, ta cần chú ý quy đổi các chữ số trong hệ thập lục
phân về các chữ số trong hệ thập phân dựa vào Bảng 2.1. Như vậy, ta có:
• b = 16
• d2 = D16 = 1310
• d1 = 316 = 310
• d0 = F16 = 1510
• d -1 = 416 = 410
Trang 20
- Xem thêm -