Danh mục

Xây dựng chương trình sử dụng tiện ích makefile.

Số trang: 29      Loại file: ppt      Dung lượng: 136.00 KB      Lượt xem: 12      Lượt tải: 0    
Hoai.2512

Hỗ trợ phí lưu trữ khi tải xuống: 7,000 VND Tải xuống file đầy đủ (29 trang) 0

Báo xấu

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Các chương trình nhỏ = 1 file đơn.Các chương trình không quá nhỏ:- Có rất nhiều dòng code- Các thành phần phức tạp.- Nhiều hơn 1 người lập trìnhCác vấn đề:- Các file dài khó để quản lí (cho cả người lập trìnhvà máy).- Mọi thay đổi đề đòi hỏi sự biên dịch dài. Nhiềungười lập trình không thể chỉnh sửa các file đòngthời.
Nội dung trích xuất từ tài liệu:
Xây dựng chương trình sử dụng tiện ích makefile.Chủ đề của tuần thế nào để xây dựng chương trình sử dụng Làm tiện ích makefile. Duyệt cây- Depth first search (duyệt theo chiều sâu) - Duyệt thứ tự trước - Duyệt thứ tự giữa - Duyệt thứ tự sau- Breadth first search (duyệt theo chiều rộng) ExercisesMakefile - Động cơ thúc đẩy chương trình nhỏ => 1 file đơn. Các Các chương trình không quá nhỏ:- Có rất nhiều dòng code- Các thành phần phức tạp.- Nhiều hơn 1 người lập trình Các vấn đề:- Các file dài khó để quản lí (cho cả người lập trình và máy).- Mọi thay đổi đề đòi hỏi sự biên dịch dài. Nhiều người lập trình không thể chỉnh sửa các file đòng thời.Makefile - Động cơ thúc đẩy Giải pháp: chia project(dự án/công trình) thành các file. Mục tiêu:- Phân chia tốt các thành phần- Tối thiểu sự biên dịch khi có gì đó thay đổi.- Dễ dàng bảo trì cấu trúc project, sự phụ thuộc và sự sáng tạo.Bảo trì project Được thực hiện trong UNIX với công cụ makefile. 1 makefile là 1 file (script - bản thảo) chứa:- Cấu trúc project (các files, sự phụ thuộc).- Giới thiệu cách tạo file Lệnh make đọc 1 makefile, hiểu cấu trúc project và tạo file thực thi. Lưu ý rằng công cụ makefile không chỉ giới hạn với lập trình C.Project structure (cấu trúc project) Cấu trúc project và sự phụ thuộc có thể biểu diễn bởi 1 DAG (Directed Acyclic Graph – Đồ thị có hướng không có chu trình) Ví dụ:- Chương trình có 3 files- Main.c, sum.c, sum.h- Sum.h được include trong file both.c- File thực thi là file sum(Xem hình minh hoạ trong slide tiếng anh tr7)makefilesum: main.o sum.o gcc–o sum main.o sum.omain.o: main.c sum.h gcc–c main.csum.o: sum.c sum.h gcc–c sum.cLuật cú phápmain.o: main.c sum.h //sự phụ thuộc(phím tab)gcc–c main.c //hành động(xem hình minh hoạ slide tiếng anh tr9)Các makefile tương đương phụ thuộc (mặc định) vào file .c tương ứng.Bởi .o vậy, makefile tương đương là:sum: main.o sum.o gcc–o sum main.o sum.omain.o: sum.h gcc–c main.csum.o: sum.h gcc–c sum.cmakefile tương đương (tiếp) có thể nén các sự phụ thuộc giống Ta nhau và sử dụng các lệnh gắn liền để tạo 1 makefile tương đương khác (ngắn hơn):sum: main.o sum.o gcc–o $@ main.o sum.omain.o sum.o: sum.hgcc–c $*.cBinary Tree Traversal (duyệt cây nhị fân) Rất nhiều phép toán trên cây nhị fân được thực hiện bởi trình diễn duyệt 1 cây nhị fân. Trong duyệt, thì mỗi phần tử của cây nhị fân chỉ được thăm đúng 1 lần. Khi thăm 1 phần tử, tất cả các hành động (tạo 1 bản sao, đưa ra màn hình, tính giá trị phép toán…) với sự lưu tâm tới phần tử này được thực hiện.DFS Duyệt theo chiều sâu: Chiến lược này bao gồm tìm kiếm theo chiều sâu của cây bất cứ khi nào có thể. Các loại:- Thứ tự trước- Thứ tự giữa- Thứ tự sauInorder Traversal (duyệt theo thứ tự giữa) Thăm các node trong cây con trái, sau đó thăm root của cây, rồi thăm các node trong cây con phải. Hình minh hoạ slide tiếng anh tr15Hàm in theo thứ tự giữavoid inorderprint(TreeTypetree){ if (tree!=NULL) { inorderprint(tree->left); printf(%4d ,tree->Key); inorderprint(tree->right); }}Postorder Traversal (duyệt theo thứ tựsau) các node ở cây con trái, sau đó là Thăm các node của cây con phải, rồi đến root. Hình minh hoạ slide tiếng anh tr17Hàm in theo thứ tự sau void postorderprint(TreeTypetree){ if (tree!=NULL) { postorderprint(tree->left); postorderprint(tree->right); printf(%4d ,tree->Key); }}Preorder Traversal (duyệt theo thứ tựtrước) root đầu tiên, ấu đó thăm đến các Thăm node của cây con trái, rồi cây con phải. Hình minh hoạ slide tiếng anh tr19,20Hàm in theo thứ tự trướcvoid preorderprint(TreeTypetree){ if (tree!=NULL) { printf(%4d ,tree->Key); preorderprint(tree->left); preorderprint(tree->right); }}Exercise Trở lại bài tập của tuần trước.Ta đã có 1 cây trữ danh bạ điện thoại. Bây giờ đưa tất cả dữ liệu trong file nhị fân ra theo thứ tự tăng dần của địa chỉ email.Gợi ý Chỉ cần sử dụng hàm InOrderTraversal()Duyệt theo thứ tự giữa bằng cáchlặpvoid iter_inorder(TreeTypenode){ int top= -1; /* khởi tạo stack */ TreeType stack[MAX_STACK_SIZE]; for (;;) { for (; node; node=node->left) add(&top, node);/* thêm vào stack*/ node= delete(&top);/*xoá khỏi stack*/ if (node==NULL) break;/* stack rỗng*/ printf(“%d”, node->key); node = node->right; }} ...

Tài liệu được xem nhiều: