Đề 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