BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm Hiểu ...

Tài liệu đại học Toggle navigation
  • Miễn phí (current)
  • Danh mục
    • Khoa học kỹ thuật
    • Công nghệ thông tin
    • Kinh tế, Tài chính, Kế toán
    • Văn hóa, Xã hội
    • Ngoại ngữ
    • Văn học, Báo chí
    • Kiến trúc, xây dựng
    • Sư phạm
    • Khoa học Tự nhiên
    • Luật
    • Y Dược, Công nghệ thực phẩm
    • Nông Lâm Thủy sản
    • Ôn thi Đại học, THPT
    • Đại cương
    • Tài liệu khác
    • Luận văn tổng hợp
    • Nông Lâm
    • Nông nghiệp
    • Luận văn luận án
    • Văn mẫu
  • Luận văn tổng hợp
  1. Home
  2. Luận văn tổng hợp
  3. BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về thư viên STL
Trich dan BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về thư viên STL - Pdf 26

TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN******** LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ĐỀ TÀI: “Tìm hiểu về thư viên STL: Tổng quan về STL, Algorithms, Iterators và FunctionObject. Viết chương trình nhập vào một danh sách n sinh viên, mỗi sinh viên có cácthông tin về họ tên, lớp, điểm TBC. Tìm sinh viên có tên nhập vào từ bàn phím. Yêucầu trong chương trình có sử dụng container list để chứa các đối tượng sinh viên,algorithms find_if và đối tượng hàm tự tạo để tìm kiếm”Giáo viên hướng dẫn: NGÔ CÔNG THẮNGLớp : THC_K52Sinh viên thực hiện : 1. VŨ THỊ MAI HOA2. LÊ THỊ HỒNG NHUNG3. BÙI THỊ THU NGÂN 4. NHÂM THỊ NHÀN Phân công công việc:Phần I:1. Tìm hiểu về thư viện chuẩn STL: Bùi Thị Thu Ngân2. Tìm hiểu về thư viện Algorithm: Vũ Thị Mai Hoa3. Tìm hiểu về Iterator: Nhâm Thị Nhàn4. Tìm hiểu về Function Object: Lê Thị Hồng NhungPhần II: Chương trình cả nhóm cùng làmMỞ ĐẦU C++ được đánh giá là ngôn ngữ mạnh vì tính mềm dẻo, gần gũi với ngôn ngữ máy. Ngoài ra, với khả năng lập trình theo mẫu ( template ), C++ đã khiến ngôn ngữ lập trình trở thành khái quát, không cụ thể và chi tiết như nhiều ngôn ngữ khác. Sức mạnh của C++ đến từ STL, viết tắt của Standard Template Library - một thư viện template cho C++với những cấu trúc dữ liệu cũng như giải thuật được xây dựng tổng quát mà vẫn tận Bộ thư viện này thực hiện toàn bộ các công việc vào ra dữ liệu (iostream), quản lýmảng (vector), thực hiện hầu hết các tính năng của các cấu trúc dữ liệu cơ bản (stack,queue, map, set ). Ngoài ra, STL còn bao gồm các thuật toán cơ bản: tìm min, max,tính tổng, sắp xếp (với nhiều thuật toán khác nhau), thay thế các phần tử, tìm kiếm (tìmkiếm thường và tìm kiếm nhị phân), trộn. Toàn bộ các tính năng nêu trên đều được cungcấp dưới dạng template nên việc lập trình luôn thể hiện tính khái quát hóa cao. Nhờ vậy,STL làm cho ngôn ngữ C++ trở nên trong sáng hơn nhiều.Đặc điểm thư viện STL là được hỗ trợ trên các trình biên dịch ở cả hai môi trườngWINDOWS lẫn UNIX, vì vậy nên khi sử dụng thư viện này trong xử lý thuận tiện choviệc chia sẽ mã nguồn với cộng đồng phát triển.Vì thư viện chuẩn được thiết kế bởi những chuyện gia hàng đầu và đã được chứngminh tính hiệu quả trong lịch sử tồn tại của nó, các thành phần của thư viện này đượckhuyến cáo sử dụng thay vì dùng những phần viết tay bên ngoài hay những phương tiệncấp thấp khác. Thí dụ, dùng std::vector hay std::string thay vì dùng kiểu mảng đơn thuầnlà một cách hữu hiệu để viết phần mềm được an toàn và linh hoạt hơn.Các chức năng của thư viện chuẩn C++ được khai báo trong namespace std;II/. Thư viện ALGORITHM: 1/. Giới thiệu:Như đã giới thiệu trong các phần trước, STL cung cấp các thuật toán cơ bản nhằmmục đích giúp bạn không phải code lại những giải thuật quá cơ bản như (sắp xếp, thaythế, tìm kiếm ). Các công cụ này không những giúp bạn rút ngắn thời gian lập trình màcòn cả thời gian gỡ rối khi thuật toán cơ bản được cài đặt không chính xác.Ngoài ra, với STL Algorithm, bạn có nhiều lựa chọn cho những thuật toán cơ bản.Ví dụ, với thuật toán sắp xếp, bạn có thể lựa chọn giữa thuật toán sắp xếp nhanh(quicksort) cho kết quả rất nhanh với độ phức tạp NlogN trong đa số các trường hợp,nhưng lại có độ phức tạp N*N trong trường hợp xấu nhất và thuật toán sắp xếp vungđống (heapsort) chạy chậm hơn quicksort nhưng có độ phức tạp trong mọi trường hợp làNlogN.Chú ý rằng các thuật toán của STL Algorithm có thể áp dụng cho mọi kiểu iterator,kể cả con trỏ thường(không phải là iterator của STL). Như vậy, các thuật toán sắp xếp,dụng lệnh này bạn phải khai báo 1 hàm có giá trị trả về là bool nhận tham sốlà giá trị của 1 element. Khi hàm trả về true, giá trị tương ứng sẽ bị thay thếbới giá trị mới. Hàm kiểm tra nên khai báo inline để tốc độ nhanh hơn. Đảo ngược containter (reverse) Copy iterator ( tương tự memcpy() đối với pointer ) Xóa với remove và remove_if- Các hàm có hậu tố _copy như remove_copy, remove_if_copy, replace_copy,replace_if_copy, reverse_copy sử dụng tương tự nhưng tạo ra và thao tác trên bảnsao container.2.3/ Nhóm các hàm sắp xếp:- Hàm sort ( quicksort )Hàm này có 2 phiên bản: Sắp xếp lại một chuỗi phần tử theo thứ tự tăng dần (ascending) sort (v.begin(),v.end()); Sắp xếp lại một chuỗi phần tử thỏa một binary predicatesort(A, A+N, greater<int>() );Hoặc:template<typename T>class Bigger{public:bool operator()(const T& t1,const T& t2){return t1>t2;}};template<typename T>class Output{public:void operator()(const T& t){cout<<t<<endl;}};int main(int argc, char* argv[]){vector<int> v;for(int i=0;i<10;i++) v.push_back(i);sort(v.begin(),v.end(),Bigger<int>());for_each(v.begin(),v.end(),Output<int>());return 0;III/. ITERATOR (Bộ Lặp)* Container (thùng chứa) là khái niệm chỉ các đối tượng lưu trữ các đối tượng(giá trị) khác. Đối tượng container sẽ cung cấp các phương thức để truy cập các thànhphần (element) của nó.Các container chia làm 2 loại:o Sequential container (các ctdl tuần tự) bao gồm list, vector và deque.o Asociative container (các ctdl liên kết) bao gồm map, multimap, set và multiset.* LISTList trong STL là danh sách liên kết đôi. Không giống như vector, hỗ trợ truy xuấtmột cách ngẫu nhiên (random access ), một danh sách chỉ có thể được truy xuất mộtcách tuần tự. Nghĩa là nếu bạn muốn truy xuất một phần tử bất kì trong list thì bạn phảibắt đầu duyệt từ phần tử đầu tiên hoặc phần tử cuối cùng củalist rồi duyệt lần lượt quacác iterator đến phần tử đó. Để sử dụng list, bạn phải khai báo file header list: #include <list>List có thể khởi tạo bằng constructor mặc định hoặc sao chép từ mảng, từ list kháchay container khác* Iterator Là khái niệm sử dụng để chỉ một con trỏ trỏ đến các phần tử trong 1container. Mỗi container có một loại iterator khác nhau. Trong thư viện STL thì người tatích hợp lớp đối tượng Iterator cùng với các container. Tư tưởng được thể hiện như sau:• Các đối tượng Iterator là các con trỏ đến các đối tượng của lớp lưu trữ:typedef__gnu_cxx::__normal_iterator <pointer,vector_type> iterator;• Khai báo lớp Iterator như là 1 lớp nằm trong lớp lưu trữ.• Xác định trong lớp lưu trữ các phương thức thành phần như:o begin() – trả lại con trỏ kiểu đối tượng Iterartor đến phần tử đầu tiên củanằm trong đối tượng lớp lưu trữ.o end() – trả lại con trỏ kiểu Iterator trỏ đến 1 đối tượng nào đó bên ngoàitập các phần tử được lưu trữ. Đối tượng bên ngoài nào đó có thể có cácđịnh nghĩa khác nhau.Trong trường hợp cụ thể như vector ta có thể hiểu làtrỏ đến phần tử sau phần tử cuối cùng.• Xác định trong lớp đối tượng kiểu Iterator các toán tử như sau:Output ( OutIter ) Chứa nhưng không nhận giá trị. Chỉ cho phép dichuyển tới.Nếu container khai báo const, chúng ta phải dùng const_iterator thay vì iterator:const list<string> list1;list<string>::const_iterator i = list1.begin();STREAM ITERATORSStream Iteartor cung cấp khả năng xử lý trên dòng nhập xuất, bạn có thể thêmbớt, xóa sửa trực tiếp trên stream. Một ví dụ là nhập và in ra 1 container không cần vòngfor():vector <int> v (istream_iterator <int>(cin), istream_iterator <int>());copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));REVERSE_ITERATORTrong các reversible container còn định nghĩa thêm reverse_iterator ( iterator đảongược ). Nó được định vị tuần tự theo một trình tự ngược lại với iterator. Vì vậy,reverse_iterator đầu tiên sẽ trỏ đến cuối của container, tăng giá trị của reverse_iterator sẽlàm nó trỏ đến thành phần đứng trước … Tương ứng với iterator end() và iterator begin() ta có reverse_iterator rbegin() vàreverse_iterator rend();Chuyển đổi qua lại giữa reverse_iterator và iterator:- Hàm thành viên base(): trả về một iterator trỏ đến phần tử hiện tại củareverse_iterator.-Tạo reverse_iterator từ iterator:Contructor reverse_iterator (RandomAccessIteratori);IV/. FUCTION OBJECT:1/. Khái niệm:Một function object (đối tượng hàm) là một object (đối tượng) được sử dụng nhưmột function (hàm). Gọi function object nghĩa là chúng ta đang gọi đến operator() củanó. Viết một function object nghĩa là viết operator() cho một lớp. Các function object làcác object, bởi vậy chúng có trạng thái, còn các hàm bình thường thì không, do đó,chúng có thể ứng xử khác nhau tùy vào trạng thái – và điều đó tạo nên sự linh hoạtvoid operator()(int i) const{cout<<i<<endl;}};Instance của lớp này là một object được gọi là function object, là một object đượcsử dụng như một function. Sử dụng như thế nào ?iprintf x;x(5);hoặciprintf()(5);Khi ta gọi iprintf()(5) nghĩa là chúng ta đang gọi đến operator() của lớp iprintfCài đặt cụ thể cho operator() tùy thuộc vào ngữ cảnh sử dụng của function object.Sự phức tạp hóa này mang lại ứng dụng :1/. Làm tiêu chí s ắp xếp cho các container: Nếu các phần tử của set là các kiểu cơ bản như int hay string, chúng ta có thể sửdụng các tiêu chí sắp xếp sẵn có như greater hay less.Ví dụ dòng khai báo : std::set< std::string, greater< std::string > > strSet;Tuy nhiên, nếu các phần tử cần đưa vào set có kiểu do người dùng định nghĩa, vídụ là các đối tượng của một lớp, mà thậm chí lớp đó không có operator < > thì làm saođể xác định thứ tự của chúng trong set? Cách giải quyết là chúng ta tự định nghĩa mộttiêu chí sắp xếp mới, đây chính là lúc cần đến function object. ( xem trong phầnassociative container )2/. Làm tham s ố cho các STL algorithm :Việc một function object được sử dụng ở đâu sẽ quyết định cách viết operator() củalớp đó.Ví d ụ : dưới đây là một lớp có nhiều hơn một operator()class iprintf{int i;một function hoặc một functor có điều kiện giá trị trả về đúng hoặc sai hoặc một giá trịcó thể chuyển kiểu thành đúng hoặc sai. Trong C/C++, đúng có nghĩa là khác 0 và sai cónghĩa là bằng 0Ví d ụ hàm sau đây là một predicatedouble truefalse(double n){return n;}Một số hàm thường dùng trong algorithm- Hàm findvector<int> v;v.push_back(4);v.push_back(3);v.push_back(2);vector<int>::iterator i = find (v.begin(),v.end(),3);if(i!=v.end()) cout<<*i;Hàm find tìm từ phần tử v.begin() đến phần tử v.end() và trả về iterator trỏ đếnphần tử có giá trị là 3, nếu không tìm thấy sẽ trả về v.end()- Hàm find_ifint IsOdd(int n){return n%2;}int main(){list<int> l;l.push_back(4);l.push_back(5);l.push_back(2);list<int>::iterator i=find_if(l.begin(),l.end(),IsOdd);if(i!=l.end()) cout<<*i;}Hàm find_if tìm từ phần tử v.begin() đến phần tử v.end() và trả về iterator trỏ đếnphần tử có giá trị thỏa predicate, nếu không tìm thấy sẽ trả về v.end()int main(){compare c;int a[] = {1, 2, 3, 4, 5};list<int> l(a,a+3); //list ít phần tử hơn mảngcout<<equal(l.begin(),l.end(),a,c)<<endl;a[2] = 6;cout<<equal(l.begin(),l.end(),a,c)<<endl;return 0;}Hàm equal so sánh từng phần tử của list từ phần tử l.begin() đến phần tử l.end() vớitừng phần tử tương ứng của mảng a sao cho mỗi cặp phần tử đều thỏa predicate là c, trảvề là true nếu từng cặp phần tử so sánh với nhau đều cho giá trị true (không cần quantâm đến số lượng phần tử có tương ứng không) Nhưng chỉ cần một cặp trả về false thìhàm sẽ trả về false4/ . Thư viện Functional: #include <functional>a)H ạng của một predicate:Có nhiều sự mập mờ do từ đồng nghĩa giữa các khái niệm toán học trong cả haingôn ngữ tiếng Việt và tiếng Anh, do đó định nghĩa sau chỉ ở mức cố gắng chính xácnhất có thể được:Số toán tử (operand) của một phép toán (operator), tương ứng là số đối số(argument) của một hàm (function), được gọi là hạng (arity) của phép toán hay hàm đó.Tương tự, số toán tử (operand) của một biểu thức (expression), tương ứng là số đốisố (argument) của một đối tượng hàm (functor), được gọi là hạng (arity) của biểu thứchay đối tượng hàm đóVí dụ:- Unary (đơn nguyên, đơn phân, một toán hạng, một ngôi): n! (giai thừa của n) là một unary operator n! là một unary expression, chỉ bao gồmmột unary operatortypedef Arg1 first_argument_type;typedef Arg2 second_argument_type;typedef Result result_type;};Binary_function là cấu trúc định nghĩa sẵn cho tất cả binary function và binaryfunctor với Arg1 là kiểu dữ liệu của đối số thứ nhất và Arg2 là kiểu dữ liệu của đối sốthứ hai và Result là kiểu trả về của hàm có operator()Tương tự chúng ta có thể tự viết các cấu trúc ternary_function,quaternary_function.…v v nếu muốn.- Ràng buộc (bind) toán hạng cho predicateCó nhiều hàm chỉ chấp nhận một đối số, nhưng chúng ta lại cần chuyền vào cho nócác predicate là binary predicate như binary function hay binary functor. Trong trườnghợp đó chúng ta cần ràng buộc toán hạng cho binary predicate đó để nó trở thành mộtunary predicate.Ví dụ chúng ta cần dùng hàm find_if để tìm các phần tử trong một vector thỏa mộtbinary predicate, nhưng find_if lại chỉ chấp nhận unary predicate, khi đó chúng ta cầnràng buộc toán hạng cho binary predicate đó để nó trở thành một unary predicate binarypredicate muốn được ràng buộc toán hạng phải được định nghĩa là một binary_function+ Hàm bind1stHàm bind1st ràng buộc toán hạng thứ nhất của một binary predicate với một giá trịcho trước để nó trở thành một unary predicate với đối số còn lại của binary predicate banđầu trở thành đối số của unary predicate kết quả+ Hàm bind2ndHàm bind2nd ràng buộc toán hạng thứ hai của một binary predicate với một giá trịcho trước để nó trở thành một unary predicate với đối số còn lại của binary predicate banđầu trở thành đối số của unary predicate kết quảb)Các hàm toán h ọc cơ bản c ủa thư viện functional:Bao gồm cộng (plus) trừ (minus) nhân (multiplies) chia (divides) chia lấy dư(modulus) đổi dấu (negate)PHẦN II: CHƯƠNG TRÌNHSV sv1[10];list<SV> SVlist;list<SV>::iterator it1;cout<<"\n\t=========CHUONG TRINH QUAN LY SINH VIEN============"<<endl<<endl;cout<<"\t\tNhap tong so sinh vien: ";cin>>n;//Nhap danh sanh sinh viencout<<"\t\tNhap thong tin chi tiet cua tung sinh vien"<<endl;for(i=0;i<n;i++) { cout<<"Nhap danh sach sinh vien thu "<<i+1<<":"; cin.ignore(1); sv1[i].nhap(); SVlist.push_back(sv1[i]); }//Hien danh sach sinh viencout<<"\n\nDanh sach sinh vien vua nhap:"<<endl;i=0;for(it1=SVlist.begin();it1!=SVlist.end();it1++){sv1[i].hien();i++;}/* char name[30];cout<<"Nhap ten sinh vien can tim: ";cin.get(name,30);it1=find_if(SVlist.begin(),SVlist.end(),bind2nd(searchsv(),name)); if(it1!=SVlist.end()) { cout<<"Sinh vien voi ten can tim la:"; dokiến thức quý giá về môn học để chúng em có thể hoàn thành bài tập lớn này.Tuy nhiên,bài tập lớn của chúng em chắc chắn còn nhiều thiếu sót mong thầy thông cảm và góp ýcho chúng em. Chúng em xin chân thành cảm ơn!TÀI LIỆU THAM KHẢO:1. Bài giảng: Ngôn ngữ lập trình C ++ và lập trình hướng đối tượng- NgôCông Thắng2. Ngôn ngữ lập trình C ++ và cấu trúc dữ liệu -Nguyễn Việt Hương3. C++ và lập trình hướng đối tượng GS.Phạm Văn Ất, NXB GTVT, 2005.4. Lập trình hướng đối tượng với C++ - Nguyễn Thanh Thủy và đồng nghiệp5. Bài giảng ngôn ngữ lập trình C/C++ - Phạm Hồng Thái – ĐH Công Nghệ -ĐHQGHN 6. Và một số tài liệu khác

Tải File Word Nhờ tải bản gốc Tài liệu, ebook tham khảo khác
  • BÁO cáo đồ án môn lập TRÌNH HưỚNG đối TưỢNG
  • Bài tập lớn Lập Trình Hướng Đối Tượng Thầy Cao Tuấn Dũng
  • Báo cáo Bài tập lớn: Phân tích thiết kế hệ thống quản lý thư viện sách
  • Báo cáo bài tập lớn môn Trí tuệ nhân tạo Tìm hiểu về thuật toán Minimax
  • BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Ứng dụng chơi nhạc Midi
  • BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về vàora với tệp nhị phân (binary file),
  • BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về kỹ thuật bắt lỗi vàora
  • BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về kỹ thuật bắt lỗi vàora
  • BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về mẫu hàm (function template), mẫu lớp (class template)
  • BÁO CÁO LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tìm hiểu về mẫu hàm (function template), mẫu lớp (class template)
  • Giải pháp nhằm nâng cao hiệu quả đầu tư và hoạt động sản xuất kinh doanh của công ty Cao su Sao Vàng
  • Cách Bảo quản thịt gấc tươi
  • Giải pháp nhằm nâng cao khả năng cạnh tranh của Ngân hàng Đầu tư và phát triển Chi nhánh Thăng Long
  • Giáo án Tổng hợp lớp 5 - Năm 2016 - 2017 - Trường Tiểu học Hoa Thủy - Tuần 12
  • Báo cáo Thực tập tại Công ty cổ phần vận tải 1-TRACO
  • Báo cáo Tìm hiểu quy trình xuất nhập kho ngoại quan tại Công ty cổ phần Gemadept
  • Báo cáo Thực tế kiến tập tại cảng Lotus
  • Các biện pháp nâng cao hiệu quả hoạt động sản xuất kinh doanh của công ty TNHH thương mại Tuấn Anh
  • Đề xuất các giải pháp nâng cao hiệu quả hoạt động giao nhận container tại công ty TNHH Jardine Việt Nam, chi nhánh Hải Phòng
  • Giải pháp nâng cao chất lượng phục vụ của nhà hàng Lang Liêu
Hệ thống tự động tổng hợp link tải tài liệu, ebook miễn phí cho các bạn sinh viên tham khảo.

Học thêm

  • Nhờ tải tài liệu
  • Từ điển Nhật Việt online
  • Từ điển Hàn Việt online
  • Văn mẫu tuyển chọn
  • Tài liệu Cao học
  • Tài liệu tham khảo
  • Truyện Tiếng Anh
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status

Top

Từ khóa » Bài Tập Lớn Lập Trình C