Đề tài Phần mềm tính chu vi hình tròn

Tìm chu vi đường tròn là bài toán quan trọng trong bất cứ ngành kỹ thuật nào. Do đó, tìm chu vi đường tròn là cần thiết và thuật toán tối ưu tìm ra chu vi đường tròn là thật sự quan trọng. Một trong những bài toán đặt ra trong thực tế là việc tìm chu vi đường tròn từ ba điểm không thẳng hàng cho trước và phương pháp đó tốt nhất theo một chỉ tiêu cụ thể, nghiên cứu lời giải các lớp bài toán tối ưu thuộc về lĩnh vực ứng dụng toán học

doc18 trang | Chia sẻ: vietpd | Lượt xem: 2263 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Đề tài Phần mềm tính chu vi hình tròn, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN 1 (Học kỳ II, Niên khóa 2010-2011) GIÁO VIÊN HƯỚNG DẪN: STT HỌ VÀ TÊN MSCB 1 NGUYỄN THANH BÌNH 1530 SINH VIÊN THỰC HIỆN: STT HỌ VÀ TÊN MSSV THƯỞNG (Tối đa 1 diểm) ĐIỂM 1 ĐOÀN VĂN QUÝ 1091704 I. HÌNH THỨC (Tối đa 0,5 điểm) Bìa (Tối đa 0,25 điểm) Các tiêu đề: Trường ĐHCT, Khoa CNTT Loại niên luận: 1, tên đề tài Giáo viên hướng dẫn: chức danh, họ tên Thông tin về sinh viên thực hiện: họ tên, mã số, lớp Năm thực hiện Bố cục (Tối đa 0,25 điểm) Nhận xét của giáo viên hướng dẫn và giáo viên chấm Mục luc: cấu trúc chương, mục, tiểu mục Phụ lục (nếu có) Tài liệu tham khảo II. NỘI DUNG (Tối đa 3 điểm) Tổng quan (Tối đa 0,5 điểm) Mô tả bài toán, mục tiêu cần đạt được (0,25 điểm) Hướng giải quyết và kế hoạch thực hiện (0,25 điểm) Lý thuyết (Tối đa 0,5 điểm) Các khái niệm sử dụng trong đề tài Kết quả vận dụng lý thuyết vào đề tài Ứng dung (Tối đa 2,0 điểm) Phân tích yêu cầu của bài toán, xây dựng các cấu trúc dữ liệu cần thiết (tối đa 0,5 điểm) Giải thuật (Lưu đồ - Ngôn ngữ giả) (1,0 điểm) Giới thiệu chương trình (0,5 điểm) Kết luận (Tối đa 0,5 điểm) Nhận xét kết quả đạt được Hạn chế Hướng phát triển III. CHƯƠNG TRÌNH DEMO (Tối đa 5,0 điểm) Giao diện thân thiện với người dùng (1,0 điểm) Hướng dẫn sử dụng (0,5 điểm) Kết quả thực hiên đúng với kết quả của phần ứng dụng (3,5 điểm) Ghi chú: điểm trong khung “các sinh viên thực hiện” là điểm kết quả cuối cùng của từng sinh viên trong quá trình thực hiện niên luận 1. Nếu sinh viên demo chương trình và trả lời vấn đáp không đạt yêu cầu của giáo vên hướng dẫn thì sinh viên sẽ nhận điểm F cho học phần này. Cần Thơ, ngày …... tháng 4 năm 2011 GIÁO VIÊN HƯỚNG DẪN Nguyễn Thanh Bình MỤC LỤC a & b CHƯƠNG 1: PHẦN TỔNG QUAN GIỚI THIỆU: Tìm chu vi đường tròn là bài toán quan trọng trong bất cứ ngành kỹ thuật nào. Do đó, tìm chu vi đường tròn là cần thiết và thuật toán tối ưu tìm ra chu vi đường tròn là thật sự quan trọng. Một trong những bài toán đặt ra trong thực tế là việc tìm chu vi đường tròn từ ba điểm không thẳng hàng cho trước và phương pháp đó tốt nhất theo một chỉ tiêu cụ thể, nghiên cứu lời giải các lớp bài toán tối ưu thuộc về lĩnh vực ứng dụng toán học. Tuy nhiên cũng cần phải nói rằng trong nhiều trường hợp chúng ta chưa thể xây dựng một thuật toán nào thực sự hữu hiệu để giải bài toán, mà cho tới nay việc tìm chi vi cua đường tròn là thực sự chưa sẽ tối ưu, và cần phải tìm ra thuật toán tốt nhất cho mọi trường hợp. Việc tính chu vi đường tròn có thể được thực hiện bằng nhiều phương pháp, trong quyển niên luận 1 này chúng ta nghiêm cứu một phương pháp đó là lập trình hướng đối tượng và kiến thức là dùng hệ thức “Hê-rong ” tìm ra các số liệu liên quan. MÔ TẢ BÀI TOÁN: Bài toán tính chu vi đường tròn sẽ thật đơn giản khi chúng ta biết được bán kính của đường tròn, nhưng nếu không biết bán kính thì sa? Bài toán được đặt tên từ vấn đề tìm ra chu vi của đường tròn từ ba điểm cho trước. Bài toán thường được ứng dụng trong công việt tính toán đơn giản trong kiến thức toán phổ thông, các ngành xây dựng, thiết kế và tạo các bản vẽ.. Nội dung bài toán là tìm ra chu vi đường tròn với giá trị nhập từ người dùng (từ file) mỗi bộ sáu số tương ưng với các tọa độ trong mặt phẳng đề-các. Kết quả cần tìm là một chu vi và được lưu vào file . MỤC TIÊU CẦN ĐẠT ĐƯỢC: Nắm vững cơ sở lý thuyết về lập tình hướng đối tượng trên môi trường C++ và các kỹ thuật thiết kế giải thuật mà quan trọng là thiết kế các hàm xây dựng, hàm thành viên… Hiểu được kỹ thuật lập trình hướng đối tượng và ứng dụng vào thực tế bài toán. Thiết kế chương trình sao cho có thể: Nhập vào bài toán: Thuật toán nhập vào tọa độ của điểm. Thuật toán tìm các giá trị hay kết quả cần thiết cho công việc tính toán. Xuất ra phương án: Xuất ra các điểm vừa nhập từ file. Xuất ra màn hình các gía trị cẩn thiết cho việc tính chu vi của đường tròn. Xuất ra chu vi của đường tròn(ra màn hình hay ra filexuat). Kiểm tra tính đúng đắn của chương trình. Đánh giá giải thuật, so sánh với các giải thật khác. HƯỚNG GIẢI QUYẾT: Xây dựng giải thuật tìm ra chu vi đường tròn bằng ngôn ngữ giả, sau đó tối ưu hóa giải thuật thành chương trình. Lập trình trên máy tính và cho chạy. Tìm chu vi đường tròn bằng các thuật toán trong lập trình hướng đối tượng, như khai báo một class, các hàm xây dựng và các hàm thành viên. Tìm một thuật toán tồi ưu nhất có thể để tìm chu vi đường tròn nhanh nhất có thể. Bài toán này chúng ta đưa các chưng trình về các đối tượng sinh động và dễ dàng thực hiện các phép toán trên các đối tượng. 1.5 KẾ HOẠCH THỰC HIỆN: Tuần 1,2,3 Tìm hiểu các chiến lược thiết kế giải thuật, mà đặc biệt ở đây là dung lập trình hướng đối tượng . Tuần 4,5,6 Xây dựng hàm và chương trình theo giải thuật đã đề ra. Thử tìm xem có giải thuật nào tốt hơn không. Tuần 7,8 Viết bài báo cáo. CHƯƠNG 2: PHẦN LÝ THUYẾT CÁC KHÁI NIỆM CƠ BẢN: Lập trình hướng đối tượng(object-oriented programming OOP): Là kĩ thuật lập trình dựa trên công nghệ đối tượng, làm tăng năng suất lập trình, đơn giản hóa độ phức tập của chương trình , giúp người lập trình hình thức hóa chương trình thành của mình thành các đối tượng. Lớp (class): Class là khuôn mẫu tạo ra đối tượng. Ví dụ: class Diem{ private: public: protected: } ; private (riêng): - Riêng tư là thể tính chất đóng mạnh nhất của một đặc tính hay một lớp trong lập trình hướng đối tượng. - ví dụ: class Diem{ private: int x; }; b. bublic (dung chung): - Công cộng là một tính chất được dùng để gán cho các phương thức, các biến nội tại, hay các lớp mà khi khai báo thì người lập trình đã cho phép các câu lệnh bên ngoài cũng như các đối tượng khác được phép dùng đến nó. - ví dụ: Class Diem{ Public: Diem(); }; protected (bảo vệ): - là tính chất mà khi dùng để áp dụng cho các phương thức, các biến nội tại, hay các lớp thì chỉ có trong nội bộ của lớp đó. - ví dụ: class Diem { protected: int y; }; 2.1.3 Hàm thành viên: - Là hàm dung để gọi thực thi trong hàm main(). - ví dụ: class Diem { … bublic: Diem(); Diem(int a, int b); … }; Tính chu vi đường tròn: - Là độ dài của đường tròn, tính theo công thức 2xπxR( trong đó π là hệ số có giá trị là 3.14, R là bán kính đường tròn). 2.1.5 Diện tích đường tròn: - Là phần nhìn thấy của đường tròn, tính theo công thức πxR2( trong đó π là hệ số có giá trị là 3.14, R là bán kính đường tròn). KẾT QUẢ VẬN DỤNG VÀO BÀI TOÁN Hình thức hóa bài toán tìm chu vi đường tròn, với những thuất toán phúc tạp để tìm chu vi đường tròn, nhưng với hướng đối tượng chúng ta có thể xem bài toán tìm chu vi đường tròn tphức tạp thành bài toán gần gũi hơn. Bài toán tìm chu vi đường tròn được vận dụng nhiều trong đời sống, đặc biệt là những ngành kĩ thuật, xây dựng…. Đặc biệt là trong xây dựng, bài toán tìm chu vi giúp rất nhiều trong kỹ thuật. Làm cho bài toán tìm chu vi của đường tròn ngày càng phong phú và đa dạng. CHƯƠNG 3: KẾT QUẢ ỨNG DỤNG 3.1 PHÂN TÍCH BÀI TOÁN: 3.1.1 Yêu cầu và cách giải bài toán: Theo yêu cầu của bài toán thì ta cần tìm được chu vi của đường tròn khi biết tọa độ ba điểm được biết trước tọa độ. Chu vi đường tròn được tìm tính ra khi ta dung hệ thức hê-rông. 3.1.2 Tổ chức dữ liệu: Chương trình được xậy dựng bắt đầu từ một class, với các hàm thành viên và các hàm xây dựng cho thuật toán thì việc tìm ra chu vi đường tròn là công việc không phức tạp. Khai báo một class: class Diem{ }; b. Xây dựng các hàm thành viên: float GiaTriX(){ return x; } float GiaTriY(){ return y; } c. Tái định nghĩa toán tử: friend ostream& operator << (ostream& os, Diem d){ os<<d.x; os<<"\n"; os<<d.y; return os; } friend istream& operator >> (istream& is, Diem&d){ cout <<"Nhap diem x: "; is>>d.x; cout <<"Nhap diem y: "; is>>d.y; return is; } d. Hàm nhập – xuất file: friend int ReadFile(char *nameFile){ int dx; int dy; Diem X; char name; float x; float y; ifstream is(nameFile); is >> x; is >> y; is.close(); if(tam == 1){ A.x = (float)x; A.y = (float)y; } else if(tam ==2){ B.x = x; B.y = y; } else{ C.x = x; C.y = y; } cout << x << " "<<y << "\n"; return 0; } void xuatFile(float d){ FILE *f1; f1=fopen("filexuat.txt","wt"); fprintf(f1,"%.2f ",d); fprintf(f1,"\n"); fclose(f1); } 3.2 THIẾT KẾ GIẢI THUẬT: 3.2.1 Giải thuật: Với bài toán này nếu ta sử phương pháp lập trình cấu trúc sẽ gặp nhiều vấn đề về việc tính các khoảng cách và tọa độ các điểm sẽ rời rạc nhau, với lập trinh hướng đối tượng những phần tử rời rạc sẽ được mô hỉnh hóa thành một đối tượng . Và việc thực hiện phép toán trên đối tượng sẽ thật dễ dàng hơn, nhưng bên cạnh đó vẫn còn các hàm độc lập. Bài toán tìm chu vi đường tròn từ ba điểm cho trước trong mặt phẳng đề-các vuông góc bằng cách dùng hệ thức hê-rông với các số liệu liên quan chúng ta tìm ra diện tích đường tròn, tiếp đến tìm ra bán kính đường tròn ngoại tiếp tam giác cho trước và cuối cùng là tìm ra chu vi đường tròn với độ chính xác là hai số thập phân. Giải thuật để tìm chu vi nhu sau: Lấy số liệu từ file bộ text gồm ba tọa độ(giả sử ba điểm là A,B,C) Tính độ dài các cạnh AB,BC,AC; Tìm nữa chu vi của tam giác; P = (AB+BC+AC)/2; Tìm diện tích của tam giác; S = sqrt(P(P – AB)(P-BC)(P-AC)); Tìm bán kính đường tròn; R = (AB+BC+AC)/4S; Tìm chu vi đường tròn; CV = 2πR; 3.3 GIỚI THIỆU CHƯƠNG TRÌNH: 3.3.1 Môi trường cài đặt: Chương trình được cài đặt bằng ngôn ngữ C++. Môi trường cài đặt DEV C++ 4.9.9.2, Copyright © Bloodshed Software. Giấy phép: GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright ©1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA 3.3.2 Cách thức thực thi chương trình: Trình biên dịch của Dev C++ 4.9.9.2 sẽ biên dịch mã code chương trình ra file thực thi .exe. 3.3.3 Một vài giao diện của chương trình: Giao diện chương trình sau khi trình biên dịch biên dịch xong: Sau khi nhận các số liệu từ file giao diện như sau: gồm tọa ba điểm và độ dài các đoạn thẳng. Bên cạnh đó cũng in xuất ra màn hình đồ họa vẽ tam giác và đường tròn: Dùng phím chức năng 1 xuất ra hướng dẫn dùng chương trình: Dùng phím chứa năng 2 hiện thông tin giảng viên và sinh vien: Dùng phím chức năng 3 xem tọa độ tâm của đường tròn: Dùng phím chức năng 4 xem thông tin về các thông số của đường tròn: Dùng phím chứa năng 0 thoát khỏi chương trình làm việc: Nếu trường hợp ba điểm không tao thành tam giác thì màn hình đồ họa xuất hiện như sau: Khi dùng phím chức năng 4 thì thông tin được hiện như sau: CHƯƠNG 4: KẾT LUẬN – ĐÁNH GIÁ 4.1 CÁC KẾT QUẢ ĐẠT ĐƯỢC: Đã giải quyết được vấn đề của bài toán theo đúng tiến độ và kế hoạch đã đề ra. Những thu hoạch về mặt chuyên môn, kinh nghiệm: Thấy được sự cần thiết của việc phân tích giải thuật để có thể lựa chọn một giải thuật tốt hoặc đánh giá để cải tiến giải thuật đó. Biết thêm về các chiến lược thiết kế giải thuật, sẽ có ích rất nhiều cho việc học tập sau này. Qua đó ta thấy rằng, không có một phương pháp nào có thể giúp chúng ta xây dựng (thiết kế) nên các giải thuật cho tất cả các loại bài toán mà chúng ta nên dựa vào những chiến lược thiết kế các giải thuật chung nhất đó để áp dụng cho những bài toán khác nhau. Ưu điểm: chương trình nhỏ gọn, dễ hiểu, đáp ứng được những yêu cầu đặt ra của bài toán. Có màn hình đồ họa cho các trường hợp khi ba điểm nhập tao nên tam giác. Giải thuật là những công thức toán hình học đơn giản, dễ hiểu, gần gũi với người dùng. Dùng lập trình hướng đối tượng làm đối tượng hóa các thuộc tính. Hạn chế: chưa tìm được giải thuật nào tốt hơn giải thuật hiện tại, chương trình con đơn sơ. Nguyên nhân: do thời gian hạn chế và kiến thức nên chưa tìm ra một phương pháp tối ưu nhất có thể. Tóm lại, qua đề tài này ta thấy được rằng trong thực tế việc sử dụng kết quả bài toán là thường xuyên trong những ngành kỹ thuật công nghệ và phổ thông. Thông thường các bài toán thực tế đòi hỏi phải có sự tổng hợp, pha trộn nhiều thuật toán, nhiều kỹ thuật mới có được một lời giải tốt. Không được lạm dụng một kỹ thuật nào và cũng không xem thường một phương pháp nào khi bắt tay vào giải một bài toán. Các phương pháp phải được vận dụng hết sức triệt để. 4.2 HƯỚNG PHÁT TRIỂN: Do thời gian có hạn nên chưa thể khắc phục được hạn chế trên. Nếu có thời tôi sẽ khắc phục hạn chế đó, thiết kế thêm một số biến thể của bài toán như: Phát triển chương trình lên một mức cao hơn thành một chương trình ứng dụng thực sự có thể áp dụng vào thực tế. Sẽ có đồ họa đẹp mắt hơn, sinh động hơn, phần trợ giúp cho người dùng ngay trên chương trình, dùng bàn phím di chuyển của bàn phím chứ không dùng các số để lựa chọn, bên cạnh những lỗi được phát hiện còn những lỗi chưa được tìm ra, nếu có gì sai xót xin hãy gửi ý kiến qua địa chỉ email: dvquy704@student.ctu.edu.vn . PHỤ LỤC HƯỚNG DẪN SỬ DỤNG DEMO Thật chất để sử dụng được demo thì cũng không khó, vì đây là demo hết sức đơn giản. Bạn chỉ cần xem qua phần giới thiệu chương trình thì bạn cũng đã biết cách sử dụng demo. Chương trình code gồm hai phần: một phần dùng chạy có tên “nl_1.cpp”, phần hai có tên “vedt.cpp” dùng chạy trong Project2 để vẽ minh họa đường tròn. Nhưng để dễ dàng bạn hãy làm theo những bước đơn giản sau: Mở chương trình lên bằng phần mềm Dev C++ 4.9.9.2 hoặc bạn cũng có thể mở bằng Turbo C++ 3.0 đều được. Sau đó bạn hãy ấn phím F9 hoặc dùng menu Execute trên thanh công cụ để biên dịch chương trình. Nếu sau khi biên dịch không có lỗi gì xảy ra thì ta biết rằng chương trình đã chạy tốt. Lúc này chương trình sẽ xuất hiện một màn hình đồ họa và một Menu lựa chọn. Tiếp theo bạn dùng các phím chức năng đã có chứ thích rõ ở phần Menu để chọn các tùy chọn. Nhấn phím bắt kì( hay Enter) chọn tùy chọn đó và quay về Menu chính bằng cách nhắn phím bắt kì ( hay Enter). Chương trình với hai phần rõ rang: Chương trình thực hiện yêu cầu của bài toán. Chương trình thực hiện vẽ hệ trục tọa độ và hình tròn tương ứng. Chương trình sẽ hiện ra cho bạn những dữ liệu nguồn và dữ liệu đích, màn hình điều khiển gần gủi với dân lập trình và người sử dụng. TÀI LIỆU THAM KHẢO [1] Trương Văn Chí Công. Lập trình hướng đối tượng & C++. Khoa CNTT & TT - Đại học Cần Thơ, 12/2003. [2] Bài Giảng Kỹ thuật lập trình C. Khoa CNTT & TT - Đại Học Hàng Hải. [3] [4] [5] Lâm Chí Nguyện. Silde bài giảng lập trình hướng đối tượng với C++. Khoa CNTT & TT – Đại Học Cần Thơ [6] Phạm Văn Ất. C++ và Lập Trình Hướng Đối Tượng. Khoa Học Kỹ Thuật, 2000