02/10/2018, 14:19
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 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;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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();
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 :
";
cout << "1. Red, 2. Orange, 3.Yellow, 4. Spring Green
";
cout << "5. Red, 6. Orange, 7.Yellow, 8. Spring Green
";
cout << "9. Red, 10. Orange, 11.Yellow, 12. Spring Green
";
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;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ThanhPhan::ThanhPhan() { text = ""; mauNen = 0; mauText = 0; } ThanhPhan::~ThanhPhan() { } void ThanhPhan::nhap() { cout << "Chon mau bang so duoi day :
"; cout << "1. Red, 2. Orange, 3.Yellow, 4. Spring Green
"; cout << "5. Red, 6. Orange, 7.Yellow, 8. Spring Green
"; cout << "9. Red, 10. Orange, 11.Yellow, 12. Spring Green
"; 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:
";
ThanhPhan::nhap();
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Nhan::Nhan() { } Nhan::~Nhan() { } void Nhan::nhap() { cout << "Nhap label:
"; ThanhPhan::nhap(); } |
#include "Nut.h"
Nut::Nut()
{
}
Nut::~Nut()
{
}
void Nut::nhap()
{
cout << "Nhap button:
";
cout << "Chon 1: Nhap button image
Chon 2: Button text
";
int tl;
cin >> tl;
if (tl == 1)
{
cout << "Nhap button image:
";
cout << ".....Xog!!";
text = "";
mauNen = 0;
mauText = 0;
}
else
{
cout << "Nhap button text:
";
ThanhPhan::nhap();
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include "Nut.h" Nut::Nut() { } Nut::~Nut() { } void Nut::nhap() { cout << "Nhap button:
"; cout << "Chon 1: Nhap button image
Chon 2: Button text
"; int tl; cin >> tl; if (tl == 1) { cout << "Nhap button image:
"; cout << ".....Xog!!"; text = ""; mauNen = 0; mauText = 0; } else { cout << "Nhap button text:
"; 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
Chon 2: Nhap button
";
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!
";
else
cout << "Thanh phan dau tien Khong la mau bo tuc!
";
//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
";
else
if (spt == 2 && isMauBoTuc(mau[0], mau[1]))
cout << "Theo nguyen tac: Mau bo tuc
";
else
if (spt == 3 && isMauTuongDong(mau[0], mau[1], mau[2]))
cout << "Theo nguyen tac: Mau tuong dong
";
else
cout << "Khong theo nguyen tac nao!
";
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #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
Có thể bạn quan tâm
0
|