1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tổng Hợp Các Kỹ Thuật Lập Trình

323 1,2K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 323
Dung lượng 3,39 MB

Nội dung

Kỹ thuật lập trình Chương 10: Thuật toán tổng quát 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 start() 1100101100100010000010 1100101100100010000010 stop() 0101010101010101100001 0101010101010101100001 y = A*x + B*u; 0101010100101010100101 0101010100101010100101 x = C*x + d*u; 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 LQGController 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 start() 1010011000110010010010 stop() 1010011000110010010010 1100101100100010000010 1100101100100010000010 12/25/2007 Nội dung chương 10 10.1 10.2 10.3 Tổng quát hóa kiểu liệu phần tử Tổng quát hóa phép toán sở Tổng quát hóa phương pháp truy lặp phần tử Chương 10: Thuật toán tổng quát 10.1 Tổng quát hóa kiểu liệu phần tử ƒ Thực tế: — Khoảng 80% thời gian làm việc người thư ký văn phòng trước ₫ây (và nhiều nơi) sử dụng cho công việc tìm kiếm, xếp, ₫ối chiếu, so sánh, tài liệu hồ sơ — Trung bình, khoảng 80% mã chương trình thời gian thực chương trình dành cho thực thuật toán liên quan trực tiếp tới toán ứng dụng cụ thể, mà liên quan tới tìm kiếm, xếp, lựa chọn, so sánh liệu ƒ Dữ liệu ₫ược quản lý tốt cấu trúc dạng "container" (vector, list, map, tree, queue, ) ƒ Vấn ₫ề xây dựng hàm áp dụng cho "container": Nhiều hàm khác kiểu liệu tham số áp dụng, không khác thuật toán ƒ Giải pháp: Xây dựng khuôn mẫu hàm, tổng quát hóa kiểu liệu phần tử Chương 10: Thuật toán tổng quát ƒ Ví dụ: Thuật toán tìm ₫ịa phần tử ₫ầu tiên mảng có giá trị lớn số cho trước: template T* find_elem(T *first, T* last, T k) { while (first != last && !(*first > k)) ++first; return first; } void main() { int a[] = { 1, 3, 5, 2, 7, 9, }; int *p = find_elem(a,a+7,4); if (p != a+7) { cout "liên kết tĩnh" ƒ Vấn ₫ề thực tế: © 2004, HOÀNG MINH SƠN — Các ₫ối tượng ₫a dạng, giao diện giống (phép toán giống nhau), cách thực khác => thực thi nào? — Một chương trình ứng dụng chứa nhiều kiểu ₫ối tượng (₫ối tượng thuộc lớp khác nhau, có kiểu sở) => quản lý ₫ối tượng nào, danh sách hay nhiều danh sách khác nhau? Chương 7: Quan hệ lớp © 2007 AC - HUT 21 Vấn ₫ề chế "liên kết tĩnh" ƒ Xem lại chương trình trước, hàm Rectangle::draw ₫ều in tên "Rectangle" => chưa hợp lý nên cần ₫ược ₫ịnh nghĩa lại lớp dẫn xuất void Square::draw() { std::cout [...]... cấu trúc dữ liệu tập hợp khác nhau cũng như nhiều tiêu chuẩn sắp xếp khác nhau Viết chương trình minh họa ƒ Xây dựng thuật toán cộng/trừ/nhân/chia từng phần tử của hai cấu trúc dữ liệu tập hợp bất kỳ Viết chương trình minh họa Chương 10: Thuật toán tổng quát 24 Kỹ thuật lập trình Chương 8: Tiến tới tư duy lập trình hướng ₫ối tượng 0101010101010101100001 0101010101010101100001 StateController 0101010100101010100101... áp dụng ₫ược tương tự con trỏ } Chương 10: Thuật toán tổng quát 19 ƒ Tổng quát hóa thuật toán find_max: template ITERATOR find_max(ITERATOR first, ITERATOR last) { ITERATOR pMax = first; while (first != last) { if (*first > *pMax) pMax = first; ++first; } Các phép toán áp dụng return pMax; ₫ược tương tự con trỏ } Chương 10: Thuật toán tổng quát 20 Bổ sung bộ truy lặp cho kiểu Vector... b.pItem; } }; Chương 10: Thuật toán tổng quát 22 Khuôn mẫu List cải tiến template class List { ListItem *pHead; public: ListIterator begin() { return ListIterator(pHead); } ListIterator end() { return ListIterator(0); } }; Chương 10: Thuật toán tổng quát 23 Bài tập về nhà ƒ Xây dựng thuật toán sắp xếp tổng quát ₫ể có thể áp dụng cho nhiều cấu trúc dữ liệu tập hợp khác nhau cũng... Chương 10: Thuật toán tổng quát 11 Kết hợp 2 bước tổng quát hóa template T* find_elem(T* first, T* last, T k, COMP comp) { while (first != last && !comp(*first, k)) ++first; return first; } template void apply(T* first, T* last, OP& op) { while (first != last) { op(*first); ++first; } } Chương 10: Thuật toán tổng quát 12 Khuôn mẫu lớp cho các ₫ối tượng... apply(a,a+7,Negate()); apply(a,a+7,Print()); char c; cin >> c; 14 }Chương 10: Thuật toán tổng quát 10.3 Tổng quát hóa truy lặp phần tử ƒ Vấn ₫ề 1: Một thuật toán (tìm kiếm, lựa chọn, phân loại, tính tổng, ) áp dụng cho một mảng, một vector, một danh sách họăc một cấu trúc khác thực chất chỉ khác nhau ở cách truy lặp phần tử ƒ Vấn ₫ề 2: Theo phương pháp truyền thống, ₫ể truy lặp phần tử của... cho các cấu trúc dữ liệu mà không cần biết chi tiết thực thi bên trong từng cấu trúc ƒ Ý tưởng: Mỗi cấu trúc dữ liệu cung cấp một kiểu bộ truy lặp riêng, có ₫ặc tính tương tự như một con trỏ (trong trường hợp ₫ặc biệt có thể là một con trỏ thực) ƒ Tổng quát hóa thuật toán copy: template void copy(Iterator1 s, Iterator2 d, int n) { while (n ) { *d = *s; ++s; ++d; } Các. .. Chương 10: Thuật toán tổng quát 17 ƒ Áp dụng cho kiểu List (₫ã làm quen): template ListItem* find_max(List& l) { ListItem *pItem = l.getHead(); ListItem *pMaxItem = pItem; while (pItem != 0) { if (pItem->data > pMaxItem->data) pMaxItem = pItem; pItem = pItem->getNext(); } return pMaxItem; }  Cần tổng quát hóa phương pháp truy lặp phần tử! Chương 10: Thuật toán tổng quát 18... List& s, List& d) { ListItem *sItem=s.getHead(), *dItem=d.getHead(); while (sItem != 0) { dItem->data = sItem->data; dIem = dItem->getNext(); sItem=sItem->getNext(); } } Chương 10: Thuật toán tổng quát 16 Ví dụ thuật toán find_max ƒ Áp dụng cho kiểu mảng thô template T* find_max(T* first, T* last) { T* pMax = first; while (first != last) { if (*first > *pMax) pMax = first; ++first;... biết cấu trúc ₫ó ₫ược xây dựng như thế nào — Mảng: Truy lặp qua chỉ số hoặc qua con trỏ — Vector: Truy lặp qua chỉ số — List: Truy lặp qua quan hệ móc nối (sử dụng con trỏ) — Chương 10: Thuật toán tổng quát 15 Ví dụ thuật toán copy ƒ Áp dụng cho kiểu mảng thô template void copy(const T* s, T* d, int n) { while (n ) { *d = *s; ++s; ++d; } } ƒ Áp dụng cho kiểu Vector template void... khó theo dõi, dễ gây lỗi, không bảo vệ ₫ược chất xám Chương 8: Tiến tới tư duy hướng đối tượng 6 8.4 Tư duy hướng hàm

Ngày đăng: 09/11/2015, 17:56

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w