Giải đề thi Lập trình hướng đối tượng UIT – Đề HK2 2016-2017

Đề Thi OOP – Lập trình hướng đối tượng, ĐH Công Nghệ Thông Tin HK2 2016-2017

1. Đề thi Lập trình hướng đối tượng, ĐH Công Nghệ Thông Tin

 

2. Lời giải đề thi lập trình hướng đối tượng

Câu 1

a.

b.

  • Chương trình lỗi khi khởi tạo: Array M1;  Do class Array thiếu hàm khởi tạo mặc định. Sửa lỗi: Khai báo thêm constructor Array() { }
  • Lỗi ko thể truy xuất biến M2.A[3] do class khai báo mảng A ở thuộc tính private, khắc phục: Thêm từ khóa public trước int A[100];

Câu 2

class ThoiGian
{
private:
    int gio, phut, giay;
    bool hople(int, int, int);
public:
    ThoiGian() { }
    ThoiGian(int, int, int);
    friend istream& operator >> (istream& is, ThoiGian &a);
    friend ostream& operator << (ostream& os, ThoiGian a);
    void Giam();
    ThoiGian& operator--();
    ThoiGian operator--(int);
};

bool ThoiGian::hople(int x, int y, int z)
{
    return (x >= 0 && y >= 0 && z >= 0 && y <= 59 && z <= 59);
}

ThoiGian::ThoiGian(int x, int y, int z)
{
    gio = x;
    phut = y;
    giay = z;
}

void ThoiGian::Giam()
{
    if (hople(gio, phut, giay - 1))
        *this = ThoiGian(gio, phut, giay - 1);
    else
        if (hople(gio, phut - 1, 59))
            *this = ThoiGian(gio, phut - 1, 59);
        else
            *this = ThoiGian(gio - 1, 59, 59);
}

ThoiGian & ThoiGian::operator--()
{
    Giam();
    return *this;
}

ThoiGian ThoiGian::operator--(int)
{
    ThoiGian tmp(gio, phut, giay);
    Giam();
    return tmp;
}

istream & operator>>(istream & is, ThoiGian & a)
{
    is >> a.gio >> a.phut >> a.giay;
    return is;
}

ostream & operator<<(ostream & os, ThoiGian a)
{
    os << a.gio << ":" << a.phut << ":" << a.giay << endl;
    return os;
}

 

Câu 3

 

Ở đối tượng button sẽ có 2 loại là button text (gồm màu nền, text, màu text) và button image(ko có màu nền, text, và màu text), mình quản lí các màu bằng các số từ 1-12 và coi như button image có màu nền và màu text là 0

a. Các khai báo class

class ThanhPhan
{
protected:
    string text;
    int mauText;
    int mauNen;
public:
    ThanhPhan();
    virtual ~ThanhPhan();
    virtual void nhap();
    virtual int getMauNen();
    virtual int getMauText();
};

class Nhan :
    public ThanhPhan
{
public:
    Nhan();
    ~Nhan();
    void nhap();
};

class Nut :
    public ThanhPhan
{
public:
    Nut();
    ~Nut();
    void nhap();
};

 

b. Code cho thành phần các class

ThanhPhan::ThanhPhan()
{
    text = "";
    mauNen = 0;
    mauText = 0;

}


ThanhPhan::~ThanhPhan()
{
}

void ThanhPhan::nhap()
{
    cout << "Chon mau bang so duoi day : \n";
    cout << "1. Red, 2. Orange, 3.Yellow, 4. Spring Green\n";
    cout << "5. Red, 6. Orange, 7.Yellow, 8. Spring Green\n";
    cout << "9. Red, 10. Orange, 11.Yellow, 12. Spring Green\n";
    cout << "Chon mau nen : ";
    cin >> mauNen;
    cout << "Chon mau text : ";
    cin >> mauText;
    cin.ignore();
    cout << "Nhap text : ";
    getline(cin, text);
}

int ThanhPhan::getMauNen()
{
    return mauNen;
}

int ThanhPhan::getMauText()
{
    return mauText;
}

 

Nhan::Nhan()
{
}


Nhan::~Nhan()
{
}

void Nhan::nhap()
{
    cout << "Nhap label: \n";
    ThanhPhan::nhap();
}

 

#include "Nut.h"



Nut::Nut()
{
}


Nut::~Nut()
{
}

void Nut::nhap()
{
    cout << "Nhap button: \n";
    cout << "Chon 1: Nhap button image\n Chon 2: Button text\n";
    int tl;
    cin >> tl;
    if (tl == 1)
    {
        cout << "Nhap button image: \n";
        cout << ".....Xog!!";
        text = "";
        mauNen = 0;
        mauText = 0;
    }
    else
    {
        cout << "Nhap button text: \n";
        ThanhPhan::nhap();
    }
}

 

c. Code xử lí yêu cầu đề bài

#include <iostream>
#include "ThanhPhan.h"
#include "Nhan.h"
#include "Nut.h"
using namespace std;

bool isMauBoTuc(int x, int y)
{
    return abs(x - y) == 6;
}

bool isMauTuongDong(int x, int y, int z) // x, y, z tang dan
{
    int data[15] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,1,2 };
    return (data[x + 1] == y && data[x + 2] == z);
}

int main()
{
    ThanhPhan* DS[1000];
    int n;
    cout << "Nhap so luong thanh phan : ";
    cin >> n;

    for (int i = 0; i < n; i++)
    {
        cout << "Chon 1: Nhap Label\nChon 2: Nhap button\n";
        int tl;
        cin >> tl;
        if (tl == 1)
            DS[i] = new Nhan();
        else
            DS[i] = new Nut();
        DS[i]->nhap();
        cout << endl << endl;
    }

    //cau b
    if (isMauBoTuc(DS[0]->getMauNen(), DS[0]->getMauText()))
        cout << "Thanh phan dau tien la mau bo tuc!\n";
    else
        cout << "Thanh phan dau tien Khong la mau bo tuc!\n";

    //cau c
    int dd[13];
    for (int i = 0; i <= 12; i++)
        dd[i] = 0;
    for (int i = 0; i < n; i++)
        dd[DS[i]->getMauNen()]++;

    int spt = 0;
    int mau[13];
    for (int i = 1; i <= 12; i++)
        if (dd[i] != 0)
            mau[spt++] = i;
    cout << "Mau nen cac thanh phan: ";
    if (spt == 1)
        cout << "Theo nguyen tac: mau don sac\n";
    else
        if (spt == 2 && isMauBoTuc(mau[0], mau[1]))
            cout << "Theo nguyen tac: Mau bo tuc\n";
        else
            if (spt == 3 && isMauTuongDong(mau[0], mau[1], mau[2]))
                cout << "Theo nguyen tac: Mau tuong dong\n";
            else
                cout << "Khong theo nguyen tac nao!\n";
    return 0;
}

Link download full code: https://drive.google.com/file/d/0B0MpXzUlukFAbV9PUnJoallWeDg/view?usp=sharing

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *