Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 3 123 CuốiCuối
Kết quả 1 đến 10 của 30
  1. #1
    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
    Thực sự phải cảm ơn anh huynguyen rất nhiều! (Posted by Dreaminess)

  2. #2
    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

  3. #3
    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.
    Đọc rõ những gì anh Huy nói nhé tienlbhoc. Chúng ta chỉ thử làm việc theo nhóm , coi như là bước chuẩn bị để nhảy xa hơn thôi 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
    Theo em là nên có 1 hàm rút gọn phân số. Tiếp nữa là các hàm hiển thị không chỉ là đưa kết quả ra màn hình mà phải đưa được hướng dẫn cách giải ra màn hình.
    vd:
    2/3 + 10/5 = (2*5 + 4*3)/3*5 = 22/15 :

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kidkid
    Đọc rõ những gì anh Huy nói nhé tienlbhoc. Chúng ta chỉ thử làm việc theo nhóm , coi như là bước chuẩn bị để nhảy xa hơn thôi 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:


    Theo em là nên có 1 hàm rút gọn phân số. Tiếp nữa là các hàm hiển thị không chỉ là đưa kết quả ra màn hình mà phải đưa được hướng dẫn cách giải ra màn hình.
    vd:
    2/3 + 10/5 = (2*5 + 4*3)/3*5 = 22/15 :
    Chắc chắn là class này phải viết trong console rồi .
    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 .

  5. #5
    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 ?
    Anh định viết trên Windows Form (dùng MFC hoặc ko dùng cũng được).

    Em chưa rõ lắm chức năng các hàm này:
    4 chức năng: rút gọn, chuẩn hoá, lấy số đối và nghịch đảo, thay vì phải viết hàm thì anh dùng chồng toán tử cho tiện lợi.

    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)
    Đưa ra 1 ý tưởng mà chính mình ko làm được thì em nghĩ có ai làm chung với em ko?

    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
    Chưa lo được cái gốc, đã tính đến chuyện ngồi ở trên ngọn cây 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
    Cái này ko khó, chỉ cần biết dùng thư viện string thì mọi việc đều giải quyết dễ dàng.

    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.

  6. #6
    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.

  7. #7
    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 đề.

  8. #8
    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.

  9. #9
    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ố

  10. #10
    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

 

 
Trang 1 của 3 123 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •