Tên của định danh phải thể hiện được ý nghĩa: thông thường các biến nguyên như i, j, k dùng làm biến lặp; x, y dùng làm biến lưu tọa độ…Còn những biến lưu trữ dữ liệu khác thì nên đặt[r]
(1)Giáo trình Kỹ
(2)1
MỤC LỤC
Mục lục
Lời nói đầu
Chương Một số kỹ thuật – phong cách lập trình tốt
1.1 Cách đặt tên cho biến hàm
1.2 Phong cách viết mã nguồn
1.3 Tối ưu thực thi mã nguồn
Chương Kỹ thuật đệ quy 16
2.1 Kỹ thuật đệ quy 16
2.2 Xây dựng chương trình đệ quy 20
2.3 Các ví dụ đệ quy 21
2.4 Khử đệ quy 27
2.4.1 Tìm hiểu chế thực hàm đệ quy 27
2.4.2 Các trường hợp khử đệ quy đơn giản 29
2.4.3 Khử đệ quy dùng stack 31
Chương Bài toán liên quan tổ hợp 37
3.1 Phương pháp sinh (kế tiếp) 37
3.1.1 Bài toán sinh dãy nhị phân độ dài n 37
3.1.2 Bài toán liệt kê tập k phần tử 39
3.1.3 Bài toán liệt kê hoán vị 42
3.2 Thuật toán quay lui (Back Tracking) 45
3.2.1 Thuật toán quay lui liệt kê dãy nhị phân n 47
3.2.2 Thuật toán quay lui liệt kê tập k phần tử 48
3.2.3 Thuật toán quay lui liệt kê hoán vị n phần tử 50
3.2.4 Bài toán xếp quân Hậu 51
3.2.5 Bài toán mã tuần 57
Chương Tìm kiếm Sắp xếp 63
4.1 Tìm kiếm 63
4.1.1 Mơ tả tốn tìm kiếm tin học 63
4.1.2 Tìm kiếm tuyến tính 64
4.1.3 Tìm kiếm nhị phân 65
4.1.4 Kết luận 67
4.2 Bài toán xếp 67
4.3 Một số phương pháp xếp 67
4.3.1 Phương pháp chọn 67
4.3.2 Phương pháp xếp bọt 68
4.3.3 Phương pháp xếp chèn 68
4.3.4 Phương pháp đổi chỗ trực tiếp 69
4.3.5 Phương pháp ShellSort 73
4.3.6 Phương pháp phân đoạn QuickSort 76
4.3.7 Phương pháp số RadixSort 80
Chương Stack - Queue 84
5.1 Giới thiệu Stack – ngăn xếp 84
5.1.1 Cài đặt Stack dùng CTDL mảng 85
(3)2
5.2 Giới thiệu Queue – hàng đợi 103
5.2.1 Cài đặt Queue dùng CTDL mảng 105
5.2.2 Các ứng dụng Queue 106
BÀI TẬP 114
(4)3
Lời nói đầu
Học phần kỹ thuật lập trình thiết kế dành cho sinh viên khoa công nghệ thông tin ĐH Kỹ Thuật Công Nghệ, phần tiếp nối với môn kỹ thuật lập trình Mục đích mơn học bổ sung kỹ thuật lập trình đệ quy, khửđệ
quy, toán tập hợp, phương pháp sinh, kỹ thuật quay lui, tìm kiếm xếp mảng, ngăn xếp hàng đợi…Song song với phần lý thuyết ví dụ minh họa cụ thể, cho phép sinh viên hiểu rõ vấn đề
Ngoài kỹ thuật lập trình, giáo trình cịn đề cập tới phương diện phong cách lập trình chương Việc sớm làm quen với phong cách lập trình hỗ trợ sinh viên hoàn thiện kỹ viết chương trình
Bài giảng viết lần nên khơng tránh khỏi sai sót Kính mong sựđóng góp giảng viên sinh viên nhằm hoàn thiện phần giảng lần tái sau
Tất ý kiến đóng góp điều trân trọng Xin chân thành cảm ơn!
(5)4
Chương
Một số kỹ thuật – phong cách lập trình tốt
\[
Một chương trình nguồn xem tốt không đánh giá thông qua thuật giải cấu trúc liệu thích hợp Mà phụ thuộc vào phong cách kỹ thuật mã hố (coding) người viết chương trình
Nếu người lập trình viết chương trình thực yêu cầu đặt mã nguồn lộn xộn phong cách lập trình cẩu thả, mã nguồn gây khó khăn cho người lập trình!
Đơi người lập trình khơng quan tâm đến vấn đề ban đầu làm việc với chương trình nhỏ Tuy nhiên, vấn đề phát sinh họ phải làm việc với dự án lớn chương trình lúc khơng cịn đơn giản vài chục dịng lệnh Nếu khơng rèn luyện phong cách trang bị số kỹ thuật lập trình tốt người lập trình đối mặt với nhiều khó khăn…
Trong chương xin giới thiệu số kỹ thuật phong cách lập trình bản, nhiều giúp cho người học viết chương trình tốt
1.1 Cách đặt tên cho biến hàm
Thông thường tùy theo ngôn ngữ mơi trường lập trình, người viết chương trình thường chọn cho phong cách quán việc đặt tên định danh Một số quy tắc cần quan tâm đặt tên sau:
1 Tên định danh phải thể ý nghĩa: thông thường biến nguyên i, j, k dùng làm biến lặp; x, y dùng làm biến lưu tọa độ…Còn biến lưu trữ liệu khác nên đặt gợi nhớ: biến đếm số lần dùng “count” hay So_Luong, biến lưu trọng lượng “weight”, chiều cao “height”…Nếu đặt ngắn gọn c cho biến đếm, hay w cho khối lượng sau nhìn vào chương trình khó hiểu!
(6)119 27 Nhập danh sách tên gồm n người, xuất cách xếp n người vào
bàn tròn
28 Nhập vào danh sách n bạn nam n bạn nữ, xuất danh sách cách xếp 2n bạn vào bàn trịn có xen lẫn nam nữ
29 Viết chương trình liệt kê tất hốn vị từ “HUTECH”
30 Viết chương trình liệt kê tất hoán vị chữ từ "MISSISSIPPI"
31 Viết chương trình mơ bước thực thuật toán xếp sau: a Phương pháp chọn
b Phương pháp bọt c Phương pháp chèn
d Phương pháp đổi chỗ trực tiếp e Phương pháp ShellSort
f Phương pháp phân đoạn g Phương pháp số
32 Cho mảng nguyên n >100 phần tử, phần tử phát sinh ngẫu nhiên Viết hàm tìm kiếm phần tử mảng
33 Tương tự tập bên trên, hàm tìm kiếm theo dạng nhị phân Sinh viên dùng phương pháp xếp để xếp lại mảng trước thực tìm kiếm nhị phân
34 Viết chương trình đo thời gian thực thuật toán xếp bên Chương trình phát sinh ngẫu nhiên liệu test (mảng số ngun, có kích thước n >= 1000) , cho thuật toán chạy ghi nhận lại thời gian thực 35 Viết chương trình khơng đệ quy cho thuật giải Quicksort, (áp dụng stack để khử
đệ quy)
36 Nhập vào biểu thức trung tố, chuyển đổi thành biểu thực hậu tố tính giá trị biểu thức Lưu ý: tốn hạng nhiều số hay số thực Sinh viên mở rộng với toán tử khác
Ví dụ: (20+5)*3+(10/5) => 20 + * 10 / + Kết quả: 77
(7)120 39 Viết chương trình xếp theo số (RadixSort), sử dụng cấu trúc
liệu queue để lưu tạm trình xếp Hướng dẫn sử dụng 10 hàng đợi để lưu tạm số Gồm hàng đợi đến 9, hàng đợi lưu số có số bước phân hàng đơn vị, hàng chục, hàng trăm tương ứng
(8)121
TÀI LIỆU THAM KHẢO
1 Brian W Kernighan, Rob Pike, The Practice of Programming, Addison Wesley, 1999
2 Ellis Horowitz, Sartaj Sahni, Fundamentals of Data Structures, ebook, 1981 R Neapolitan, K Naimipour , Foundations of Algorithms Using C++
Pseudocode, Jones and Bartlett Publishers , 2004
4 Lê Hoài Bắc, Nguyễn Thanh Nghị, Kỹ lập trình, NXB KHKT, 2005 Trần Hồng Thọ, Giáo trình Kỹ thuật Lập trình Nâng cao, ĐH Đà Lạt, 2002 Dương Anh Đức, Trần Hạnh Nhi, Nhập môn Cấu trúc liệu thuật toán,
ĐH KHTN, 2000
7 Lê Hữu Lập, Nguyễn Duy Phương, Giáo trình kỹ thuật lập trình, NXB Bưu
Điện, 2002
8 Lê Minh Hồng, Giải thuật lập trình, NXB ĐH Sư Phạm HN, 1999- 2002