Lớp Sư phạm Cử nhân tin học khóa 1
Chào mừng bạn trở lại diễn đàn.

Bài tập phân số sử dụng vector nộp cho thầy.

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Bài tập phân số sử dụng vector nộp cho thầy.

Bài gửi by PhamNam on 25/7/2008, 2:53 am

Đã thêm phần nhập giá trị n và chỉnh sửa lỗi.
XuLyPhanSo.h
Code:

#ifndef XULYPHANSO_H
#define XULYPHANSO_H 1

class PhanSo{
private:
   int tu, mau;
public:
   PhanSo();
   PhanSo(int t, int m);
   PhanSo(const PhanSo& ps);
   PhanSo cong(PhanSo ps2);
   void xuat();
   void rutgon();
   PhanSo operator+(PhanSo ps2);
};

#endif
DayPhanSo.h
Code:

#ifndef DAYPHANSO_H
#define DAYPHANSO_H 1

#include "XuLyPhanSo.h"
#include <vector>

using namespace std;

class DayPhanSo{
private:
   vector<PhanSo> mps;
public:
   DayPhanSo();
   void them(PhanSo ps);
   PhanSo tong();
   void xuat();
};

#endif
XulyPhanSo.cpp
Code:


#include "XuLyPhanSo.h"
#include <cmath>
#include <iostream>

using namespace std;

PhanSo::PhanSo()
{
  tu = 0;
  mau = 1;
}

PhanSo::PhanSo(int t, int m)
{
  tu = t;
  mau = m;
}

PhanSo::PhanSo(const PhanSo& ps)
{
  tu = ps.tu;
  mau = ps.mau;
}

PhanSo PhanSo::cong(PhanSo ps2)
{
  PhanSo t;

  t.tu = tu*ps2.mau + mau*ps2.tu;
  t.mau = mau*ps2.mau;
  t.rutgon();

  return t;
}

void PhanSo::xuat()
{
  cout << tu << "/" << mau;
}

int UCLN(int a, int b)
{
   a = abs(a);
   b = abs(b);

   if (a == 0)
      return b;
   if (b == 0)
      return a;

   while (a != b)
   {
      if (a > b) a -= b;
      else b -= a;
   }

   return a;
}


void PhanSo::rutgon()
{
  int uscln = UCLN(tu, mau);
  if (uscln == 0) 
      return;
  tu /= uscln;
  mau /= uscln;
}

PhanSo PhanSo::operator +(PhanSo ps2)
{
  PhanSo t;

  t.tu = tu*ps2.mau + mau*ps2.tu;
  t.mau = mau*ps2.mau;
  t.rutgon();

  return t;
}
DayPhanSo.cpp
Code:

#include "DayPhanSo.h"
#include <iostream>

using namespace std;

DayPhanSo::DayPhanSo()
{
   mps.clear();
}

void DayPhanSo::them(PhanSo ps)
{
   mps.push_back(ps);
}

PhanSo DayPhanSo::tong()
{
   vector<PhanSo>::iterator it;
   
   PhanSo t;

   for (it = mps.begin(); it!=mps.end(); it++)
   {
      t  = t + *it;
   }

   return t;
}

void DayPhanSo::xuat()
{
   vector<PhanSo>::iterator it;

   for (it = mps.begin(); it!=mps.end(); it++)
   {
      it->xuat(); cout << endl;
   }
}
BTPS.cpp
Code:


#include "XuLyPhanSo.h"
#include "DayPhanSo.h"
#include <iostream>

using namespace std;

int main()
{
  //int n = 10;
   int n;
   cout<<"Nhap so luong phan so: ";
   cin >>n;
  DayPhanSo dayps;
  for (int i = 1; i <= n; i++)
  {
      PhanSo t(1, i);
      dayps.them(t);
  }

  dayps.xuat(); cout << endl;
  cout<<"S= ";
  dayps.tong().xuat();cout << endl;

  system("PAUSE");
  return 0;
}

PhamNam

Tổng số bài gửi : 6
Registration date : 24/12/2007

Xem lý lịch thành viên http://www.dongnai.edu.vn

Về Đầu Trang Go down

Re: Bài tập phân số sử dụng vector nộp cho thầy.

Bài gửi by Admin on 25/7/2008, 5:58 am

Như vậy vẫn chưa đủ đâu, các bạn cần thêm các phần sau:
+Phần bắt buộc:
xvii. Sửa đổi yêu cầu chương trình thay vì xuất ra màn hình phân số tổng của dãy phân số thì cần xuất ra số thực tổng của dãy phân số trên. Chỉnh sửa lại chương trình để thực hiện được yêu cầu này. Gợi ý: xác định hàm cần thêm vào, thêm vào đâu (lớp nào?),….
xviii. Thêm vào toán tử xuất >> để xuất một phân số ra màn hình.
+Phần thêm điểm:
xix. Chương trình đã hoàn thành, hãy đề nghị một số cách thức để làm tối ưu hóa họat động của chương trình. Gợi ý: sử dụng truyền tham số bằng tham chiếu hằng thay vì bằng tham trị, cải tiến hàm UCLN,….
xx. Hàm tạo từ hai số nguyên đại diện cho tử số và mẫu số vẫn có khả năng sai lỗi lôgic nếu mẫu số truyền vào bằng 0. Hãy đề nghị một cách thức (thêm hàm hoặc xử lý đặc biệt) để xử lý trường hợp này và thông báo cho người dùng biết là phân số tạo ra không hợp lệ.
avatar
Admin
Admin

Tổng số bài gửi : 148
Registration date : 17/12/2007

Xem lý lịch thành viên http://cnthk1.tk

Về Đầu Trang Go down

Bổ sung phần xuất kết quả ra dạng thập phân

Bài gửi by PhamNam on 26/7/2008, 12:35 pm

Theo phần đề nghị của bài viết trên, các bạn bổ sung các dòng lệnh sau đây vào tập tin tương ứng để thực hiện yêu cầu xuất phân số theo dạng thập phân:

1. Khai báo trong file: DayPhanSo.h:
Code:

void xuatPS();
double xuatST();
2. Khai báo trong file : XuLyPhanSo.h
Code:

   void xuatPS();
   double xuatST();
3. Khai báo trong file : XuLyPhanSo.cpp
Code:

void PhanSo::xuatPS()
{
   cout << tu*1.0 / mau;
}

double PhanSo::xuatST()
{
   double st;
   st = tu*1.0 / mau; //Nhân tử với 1.0 để chuyển kết quả ra dạng số thập phân.
   return st;
}
4. Khai báo trong file: BTPS.cpp (trong hàm main() )
Code:

dayps.xuatPS(); cout <<endl; // xuất ra lần lượt phân số dạng thập phân theo từng hàng
dayps.tong().xuatST(); cout <<endl; //Xuất dạng thập phân của tổng
   
Kết quả sau điều chỉnh vài đoạn mã trong file BTPS.cpp: exe

PhamNam

Tổng số bài gửi : 6
Registration date : 24/12/2007

Xem lý lịch thành viên http://www.dongnai.edu.vn

Về Đầu Trang Go down

Bài giải hoàn chỉnh

Bài gửi by Admin on 3/8/2008, 11:27 pm

Tải về toàn bộ 05 file hoàn chỉnh do anh Phúc thực hiện tại đây hay tại đây
Sau khi tải về, bạn cần phải mở chương trình C++ để điều chỉnh nội dung theo ý bạn.
Chúc bạn thực hiện thành công. Mọi thắc mắc xin liên lạc theo địa chỉ: huynhvan.phuc@yahoo.com.vn
avatar
Admin
Admin

Tổng số bài gửi : 148
Registration date : 17/12/2007

Xem lý lịch thành viên http://cnthk1.tk

Về Đầu Trang Go down

Re: Bài tập phân số sử dụng vector nộp cho thầy.

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết