-
14-10-2007, 08:36 AM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Phần mềm hỗ trợ học Phân số
Đây là đồ án mình đã làm lâu rồi, trong bộ môn Lập trình hướng đối tượng. Hôm nay ngồi xem lại thấy còn nhiều cái chưa hay và cũng muốn đưa ra để anh chị em cùng thảo luận phát triển thêm.
Cơ bản phần mềm này gồm 2 chức năng:
Thực hiện từng bước cách tính toán 2 phân số.
Thực hiện từng bước cách tính 1 biểu thức phân số.
Để tiện cho việc khởi đầu, mình xin đưa ra thư viện fraction (chỉ có prototype) mà mình đã làm để hỗ trợ cho phần mềm này, các bạn xem rồi bổ sung thêm các phương thức nhé và mở rộng thêm nhé.
Ý định của mình là mong chúng ta hợp sức thử viết 1 phần mềm đơn giản xem thế nào, nếu có thể làm được thông qua forum này thì chuyện xây dựng 1 nhóm thiết kế phần mềm là ko xa lắm.
Lớp fraction (cơ bản):
Mã:#ifndef fraction_h #define fraction_h #include <iostream> using namespace std; class fraction { private: int ts,ms; public: fraction(int t = 0,int m = 1){ts = t; ms = m;}; friend ostream& operator<<(ostream&,fraction&); friend istream& operator>>(istream&,fraction&); fraction operator~(); //reduce fraction operator+(); //standard fraction operator-(); /egative fraction operator*(); //reciprocal fraction operator+(fraction); fraction operator-(fraction); fraction operator*(fraction); fraction operator/(fraction); }; #endif
View more random threads:
- ntnative.h tổng hợp tất cả các struct,define của Native API
- Source code hack plant vs zombie (Demo global hook dễ hiểu)
- Phần mềm minh họa hệ mật mã khóa công khai (RSA)
- Code C khóa chuột máy tính. Buồn buồn nghịch chơi tí :)
- Thực hành lập trình Game với VC++6.0 sử dụng DirectX : Tank2D
- Source code hack Chicken Invaders 4 - Ultimate Omelette
- WinDib - Giấu tập tin trong ảnh với MFC
- Code game Bomber
- Mã nguồn chương trình nghe file midi!
- Project Demo một số thuật toán Lý thuyết đồ thị
-
14-10-2007, 01:37 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
lần trước anh bảo không có hứng lập nhóm cơ mà, sao giờ đổi nhanh vậy [IMG]images/smilies/biggrin.png[/IMG] , em nghĩ chúng ta nên làm phần mềm vẽ đồ thị hàm số 2D và 3D thì hơn (chúng ta trừ em).
Em nhận xét cái trên, thiếu chuyển số thập phân sang phân số
Ví dụ: 0.232 thành ... thuật giải theo em được biết là biến 0.232 =232/1000 rồi giản ước đi
còn nữa, với số thập phân vô hạn không tuần hoàn 0.2345454545... tức là 0.23(45) đó, quên mất công thức rồi, cái này là cái công thức cấp số nhân tới vô hạn với công bội <1 hay sao ấy, quên mất rồi [IMG]images/smilies/biggrin.png[/IMG][IMG]images/smilies/biggrin.png[/IMG] .
Còn một điều nữa, để như cái 570ES em đang dùng, soft này phải chuyển được string :"1+1" thành biểu thức 1+1, không hề đơn giản đâu
-
14-10-2007, 01:48 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Ý định của mình là mong chúng ta hợp sức thử viết 1 phần mềm đơn giản xem thế nào, nếu có thể làm được thông qua forum này thì chuyện xây dựng 1 nhóm thiết kế phần mềm là ko xa lắm.
+ Không hiểu anh H định viết trong đâu nhỉ MFC hay console ?
+ Em chưa rõ lắm chức năng các hàm này:
fraction operator~(); //reduce
fraction operator+(); //standard
fraction operator-(); /egative
fraction operator*(); //reciprocal
vd:
2/3 + 10/5 = (2*5 + 4*3)/3*5 = 22/15 :
-
14-10-2007, 02:30 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi kidkid
Còn việc in ra 2/3 + 10/5 = (2*5 + 4*3)/3*5 = 22/15 thì không khó mà in thế này nhìn lèm nhèm , không được đẹp .
-
14-10-2007, 02:59 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Không hiểu anh H định viết trong đâu nhỉ MFC hay console ?
Em chưa rõ lắm chức năng các hàm này:
em nghĩ chúng ta nên làm phần mềm vẽ đồ thị hàm số 2D và 3D thì hơn (chúng ta trừ em)
Em nhận xét cái trên, thiếu chuyển số thập phân sang phân số
Ví dụ: 0.232 thành ... thuật giải theo em được biết là biến 0.232 =232/1000 rồi giản ước đi
còn nữa, với số thập phân vô hạn không tuần hoàn 0.2345454545... tức là 0.23(45) đó, quên mất công thức rồi, cái này là cái công thức cấp số nhân tới vô hạn với công bội <1 hay sao ấy, quên mất rồi
soft này phải chuyển được string :"1+1" thành biểu thức 1+1, không hề đơn giản đâu
Yêu cầu trong tuần này: Các bạn hãy viết chi tiết các phương thức sử dụng trong class này (theo như những gì mình đã gợi ý hoặc thêm các phương thức mà bạn cho là cần thiết), đừng quan tâm đến chuyện xuất nó ra thế nào. Các bạn hoàn thiện chức năng xử lý trước đã, chuyện in ra = cách nào thuộc về chức năng giao diện.
Đừng vì có người post rồi nên mình ko post nhé, ai viết được thì cũng phải post lên nếu các bạn muốn tham gia vào hoạt động nhóm của forum.
-
15-10-2007, 01:23 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
OK, để em làm thử hai chức năng cơ bản mà anh huynguyen đã đưa ra, nhưng em không viết được bằng C đâu, chỉ đóng góp cách làm thôi.
-
15-10-2007, 02:13 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Đang ở
- hà nội
- Bài viết
- 0
Em có thể viết = J#, C#, C++, VB
Nếu các bạn dùng bộ dotNET thì chuyện ngôn ngữ ko còn là vấn đề.
-
15-10-2007, 05:01 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Chương trình viết bằng pascal thực hiện:
- nhập 2 phân số và chuẩn hoá chúng ( rút gọn, đưa dấu âm lên tử)
- tính tổng, hiệu, tích, thương, nghịch đảo của chúng và in ra màn hình dạng phân số đã chuẩn hoá.
Mã:{Chu y: Moi ham deu tao ra mot bien dong moi lam ket qua tra ve} {dat tham so xoa bang true de xoa tham so gui vao } uses crt; type phanso= record tu, mau: longint; end; pphanso=^phanso; function toigian(p1: pphanso; xoa: boolean): pphanso; var p: pphanso; a, b, t, uoc: longint; begin {Thuat toan OClit tim uoc so chung nho nhat} a:= abs(p1^.tu); b:= abs(p1^.mau); repeat if a< b then begin t:= a; a:= b; b:= t; end; a:= a-b; until a=0; uoc:= b; new(p); p^.tu:= p1^.tu div uoc; p^.mau:= p1^.mau div uoc; {Toi gian ve dau, dat dau tru tren tu so} if p^.mau<0 then begin p^.tu:= -p^.tu; p^.mau:= -p^.mau; end; toigian:= p; if xoa then begin dispose(p1); end; end; function cong(p1, p2: pphanso; xoa: boolean): pphanso; var p: pphanso; begin new(p); if p1^.mau= p2^.mau then begin p^.tu:= p1^.tu + p2^.tu; p^.mau:= p1^.mau; end else begin p^.tu:= p1^.tu* p2^.mau+p2^.tu*p1^.mau; p^.mau:= p1^.mau* p2^.mau; end; cong:= toigian(p, false); dispose(p); if xoa then begin dispose(p1); dispose(p2); end; end; function tru(p1, p2: pphanso; xoa: boolean): pphanso; var p: pphanso; begin new(p); if p1^.mau= p2^.mau then begin p^.tu:= p1^.tu - p2^.tu; p^.mau:= p1^.mau; end else begin p^.tu:= p1^.tu* p2^.mau - p2^.tu*p1^.mau; p^.mau:= p1^.mau * p2^.mau; end; tru:= toigian(p, false); dispose(p); if xoa then begin dispose(p1); dispose(p2); end; end; function nhan(p1, p2: pphanso; xoa: boolean): pphanso; var p: pphanso; begin new(p); p^.tu:= p1^.tu* p2^.tu; p^.mau:= p1^.mau * p2^.mau; nhan:= toigian(p, false); dispose(p); if xoa then begin dispose(p1); dispose(p2); end; end; function nghichdao(p1: pphanso; xoa: boolean): pphanso; var p: pphanso; begin new(p); p^.tu:= p1^.mau; p^.mau:= p1^.tu; nghichdao:= p; if xoa then begin dispose(p1); end; end; function chia(p1, p2: pphanso; xoa: boolean): pphanso; var p: pphanso; begin p:= nhan(p1, nghichdao(p2, false), false); chia:= p; if xoa then begin dispose(p1); dispose(p2); end; end; var p1, p2,p, pmark: pphanso; ans: char; begin Mark(pmark); repeat clrscr; new(p1); new(p2); write('Nhap tu so va mau so cho phan so 1 (2 3 nghia la 2/3): '); readln(p1^.tu, p1^.mau); write('Nhap tu so va mau so cho phan so 2 (2 3 nghia la 2/3): '); readln(p2^.tu, p2^.mau); p1:= toigian(p1,false); p2:= toigian(p2,false); writeln('Thuc hien phep tinh cong phan so 1 voi phan so 2: '); p:= cong(p1, p2, false); writeln(p1^.tu,' / ', p1^.mau, ' + ', p2^.tu,' / ', p2^.mau,' = ', p^.tu, ' / ', p^.mau ); writeln('Thuc hien phep tinh tru phan so 1 voi phan so 2: '); p:= tru(p1, p2, false); writeln(p1^.tu,' / ', p1^.mau, ' - ', p2^.tu,' / ', p2^.mau,' = ', p^.tu, ' / ', p^.mau ); writeln('Thuc hien phep tinh nhan phan so 1 voi phan so 2: '); p:= nhan(p1, p2, false); writeln(p1^.tu,' / ', p1^.mau, ' * ', p2^.tu,' / ', p2^.mau,' = ', p^.tu, ' / ', p^.mau ); writeln('Thuc hien phep tinh nghich dao phan so 1 : '); p:= nghichdao(p1, false); writeln(p1^.tu,' / ', p1^.mau, ' ^ (-1)',' = ', p^.tu, ' / ', p^.mau ); writeln('Thuc hien phep tinh nhan phan so 1 voi phan so 2: '); p:= chia(p1, p2, false); writeln('(',p1^.tu,' / ', p1^.mau,')', ' / ', '(',p2^.tu,' / ', p2^.mau,')',' = ', p^.tu, ' / ', p^.mau ); write('Ban co muon thuc hien phep tinh khac khong (c/k): '); ans:= readkey; until upcase(ans)= 'K'; release(pmark); end.
-
16-10-2007, 08:48 AM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
bước phát triển tiếp theo sẽ là tính được biểu thức chứa phân số
-
16-10-2007, 11:14 AM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Ko cần phải đính kèm file đâu hailoc, em post code lên để mọi người xem là được rồi. Dùng Pascal thì sao OOP được đây
Dụng cụ cầm tay (hand tools) là một trong những dụng cụ được sử dụng phổ thông trong cuộc sống hàng ngày của mọi người. Đặc biệt đối với cánh mày râu thì những dụng cụ này đã trở thành quá thân...
Một số bổ ích của bộ bộ đồ cầm tay...