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

Chia sẻ: Nguyen Nam | Ngày: | Loại File: PPT | Số trang:29

0
73
lượt xem
13
download

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

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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ì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.

Chủ đề:
Lưu

Nội dung Text: Xây dựng chương trình sử dụng tiện ích makefile.

  1. 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)  Exercises
  2. Makefile - Độ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.
  3. 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.
  4. 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.
  5. 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)
  6. makefile sum: main.o sum.o gcc–o sum main.o sum.o main.o: main.c sum.h gcc–c main.c sum.o: sum.c sum.h gcc–c sum.c
  7. Luật cú pháp main.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)
  8. 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.o main.o: sum.h gcc–c main.c sum.o: sum.h gcc–c sum.c
  9. makefile 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.o main.o sum.o: sum.h gcc–c $*.c
  10. Binary 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.
  11. 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ự sau
  12. Inorder 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 tr15
  13. Hàm in theo thứ tự giữa void inorderprint(TreeTypetree) { if (tree!=NULL) { inorderprint(tree->left); printf("%4d\n",tree->Key); inorderprint(tree->right); } }
  14. 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 tr17
  15. Hàm in theo thứ tự sau  void postorderprint(TreeTypetree) { if (tree!=NULL) { postorderprint(tree->left); postorderprint(tree->right); printf("%4d\n",tree->Key); } }
  16. 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,20
  17. Hàm in theo thứ tự trước void preorderprint(TreeTypetree) { if (tree!=NULL) { printf("%4d\n",tree->Key); preorderprint(tree->left); preorderprint(tree->right); } }
  18. 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.
  19. Gợi ý  Chỉ cần sử dụng hàm InOrderTraversal()
  20. Duyệt theo thứ tự giữa bằng cách lặp void 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; } }

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản