Cài đặt lớp Gach (gạch lót nền) như sau:

Thuộc tính:

      + mã số, màu:              kiểu char*

      + số lượng viên trong 1 hộp, chiều dài, chiều ngang viên gạch (đv tính cm):            kiểu int

      + giá bán 1 hộp:          kiểu float

Phương thức:

+ Hàm xây dựng mặc nhiên

+ Hàm xây dựng có nhiều đối số

      + Hàm xây dựng sao chép

      + Phép gán

      + Hàm hủy

      + Tái định nghĩa toán tử nhập (>>) cho hộp gạch.

      + Tái định nghĩa toán tử xuất (<<) cho hộp gạch.

      + Hàm tính ra giá bán lẻ 1 viên gạch:             float  GiaBanLe();

    Biết rằng: giá bán lẻ sẽ cao hơn bán nguyên hộp là 20%.

+ Hàm tính ra diện tích nền tối đa có thể lót được của hộp gạch.

Viết hàm độc lập:                  int  SoLuong(Gach   G, int    X, int   Y);         đv tính cm

để tính số lượng hộp gạch  G  cần để lót được 1 diện tích sàn có chiều ngang  X và chiều dài  Y với quy định chỉ lót theo đúng chiều gạch (chiều ngang gạch lót theo chiều ngang diện tích).

Viết hàm main() thực hiện các công việc sau:

      + Nhập 1 danh sách gồm n loại gạch lót nền (với n được nhập từ bàn phím).

      + In ra màn hình thông tin các loại gách cùng với diện tích lót tương ứng.

      + Đếm số lượng gạch có màu “Xám”.

      + In ra màn hình loại gạch có chi phí lót thấp nhất (giá tiền / đơn vị diện tích).

      + Tính ra số lượng hộp gạch của từng loại gạch dùng để lót 1 diện tích chiều ngang là 6 m và chiều dài là 20m.

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
class gach{
      char maso[10];
      char *mau;
      int soluong;
      int dai;
      int ngang;
      float giaban;
      public:
             gach();
             gach(char *, char *, int, int, int, float);
             gach(const gach &);
             gach operator = (const gach &);
             ~gach(){
                     delete []mau;
                     }
             void nhap();
             void xuat();
             int DienTichLotToiDa() {
                 return  dai*ngang*soluong;
                 }
             int LaySoVien()      {return soluong;}
      int LayChieuNgang()  {return ngang;}
      int LayChieuDai()    {return dai;}
      char* LayMau()       {return mau;}
      char* LayMaSo()      {return maso;}
      float LayGiaBan()   {return giaban;}
             float Giabanle();
             friend ostream& operator << (ostream&, gach&);
             friend istream& operator >> (istream&, gach&);
             
      };
gach::gach(){
             strcpy(maso, “”);
             mau = new char[20];
             soluong=0;
             dai=0;
             ngang=0;
             giaban=0;
             }
gach::gach(char *ms, char *m, int sl, int cd, int cn, float gb){
             strcpy(maso, ms);
             mau = new char[20]; strcpy(mau, m);
             soluong=sl;
             dai=cd;
             ngang=cn;
             giaban=gb;
             }
gach::gach(const gach &t){
             strcpy(maso, t.maso);
             mau = new char[20]; strcpy(mau, t.mau);
             soluong=t.soluong;
             dai=t.dai;
             ngang=t.ngang;
             giaban=t.giaban;
                 }
gach gach::operator = (const gach &t){
           delete []mau;
             strcpy(maso, t.maso);
             mau = new char[20]; strcpy(mau, t.mau);
             soluong=t.soluong;
             dai=t.dai;
             ngang=t.ngang;
             giaban=t.giaban;
             return *this;
           }
void gach::nhap(){
     cout<< “Nhap ma so: “; gets(maso);
 cout<< “Nhap mau: “; gets(mau);
 cout<< “Nhap so vien: “; cin >> soluong;
 cout<< “Nhap chieu dai vien gach: “; cin >> dai;
 cout<< “Nhap chieu ngang vien gach: “; cin >> ngang;
 cout<< “Nhap gia ban 1 hop: “; cin >> giaban;
     }
void gach::xuat(){
     cout << “Gach ” << maso << ” co mau ” << mau << ” co ” << soluong
   << ” vien/hop, kich thuoc ” << dai << “x” << ngang << ” co gia ban “
          << giaban << ” dong/hop” << endl;
     }
float  gach::Giabanle() {
return  giaban/soluong*1.2;
}
ostream& operator << (ostream &os, gach &t){
         os << t.maso << endl;
         os << t.mau << endl;
         os << t.soluong << endl;
         os << t.dai << endl;
         os << t.ngang << endl;
         os << t.giaban << endl;
         return os;
         }
istream& operator >> (istream &is, gach &t){
         is.getline(t.maso,9);
         is.getline(t.mau,19);
         is >> t.soluong;
         is >> t.dai;
         is >> t.ngang;
         is >> t.giaban;
         return is;
         }
// Ham doc lap tinh ra so hop gach G  can lot cho dien tich  X*Y
int  SoLuong(gach G, int X, int Y){
int  slvngang = X / G.LayChieuNgang();
if (X%G.LayChieuNgang() > 0)
slvngang++;
int  slvdai = Y / G.LayChieuDai();
    if( Y % G.LayChieuDai() > 0)
     slvdai++;
int  tongsovien = slvngang * slvdai;
int   sohop = tongsovien / G.LaySoVien();
     if (tongsovien % G.LaySoVien() > 0)
  sohop ++;
return  sohop;
}
int main(){
//Nhap danh sach    
    int n, i, j;
    gach *ds;
    cout << “Nhap so luong loai Gach: \n”; cin >> n;
    ds = new gach[n];
    for (i=1; i<=n; i++){
        cout << “\n\nNhap loai gach ” << i << “: “;
        ds[i].nhap();
        }
//In thong tin
     cout << “\n\nThong tin cac loai gach:” << endl;
     for (i=1; i<=n; i++) {
  cout<< i << “. “;
         ds[i].xuat();
  cout<<”  Dien tich lot toi da: ” << ds[i].DienTichLotToiDa() << endl;
}
//Dem so gach XAM
int dem=0;
for (i=0; i<n; i++)
 if (strcmpi(ds[i].LayMau(), “Xam”) == 0 )
 dem++;
cout<<“So luong loai gach mau xam la: ” << dem << endl;
//Gach co chi phi thap nhat
int  vitri=0;
for (i=1; i<n; i++)
if (ds[i].LayGiaBan() / ds[i].DienTichLotToiDa()
  < ds[vitri].LayGiaBan() / ds[vitri].DienTichLotToiDa() )
vitri=i;
cout << “Loai gach co chi phi lot thap nhat la: ” << endl;
for (i=0; i<n; i++)
if (ds[i].LayGiaBan() / ds[i].DienTichLotToiDa()
==  ds[vitri].LayGiaBan() / ds[vitri].DienTichLotToiDa())
ds[i].xuat();
//So luong hop gach cua tung loai gach de lot dien tich 6 x 20
cout << “De lot dien tich 6x20m, so luong tung loai gach: ” << endl;
for (i=1; i<=n ; i++)
cout << i <<“. Gach “<<ds[i].LayMaSo()<<” can “
           << SoLuong(ds[i], 600, 2000) << endl;
           getch();
}