Bài tập Kỹ thuật lập trình - Bài tập 6: Lớp, thao tác đối tượng và tính kế thừa - Khoa Khoa học và Kỹ thuật máy tính - Đại học BK - ĐHQG TP Hồ Chí Minh

Bài tập bắt buộc:
Bài 1.
Cho class biểu diễn số phức a + bi như sau:
class Complex{
protected:
float a,b;
public:
...
}
Yêu cầu:
- Tạo constructor khởi trị a = b = 0.
- Tạo hàm set giá trị a, b.
- Hiện thực các operator =; +; -; *; /, ^(luỹ thừa)
- Viết hàm tính magnitude
- Viết các operator ==, !=, <=, >=, <, > dựa trên độ lớn magnitude.
- Viết hàm in ra số phức dạng x+iy 
pdf 12 trang xuanthi 27/12/2022 2980
Bạn đang xem tài liệu "Bài tập Kỹ thuật lập trình - Bài tập 6: Lớp, thao tác đối tượng và tính kế thừa - Khoa Khoa học và Kỹ thuật máy tính - Đại học BK - ĐHQG TP Hồ Chí Minh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_tap_ky_thuat_lap_trinh_bai_tap_6_lop_thao_tac_doi_tuong.pdf

Nội dung text: Bài tập Kỹ thuật lập trình - Bài tập 6: Lớp, thao tác đối tượng và tính kế thừa - Khoa Khoa học và Kỹ thuật máy tính - Đại học BK - ĐHQG TP Hồ Chí Minh

  1. TRƯỜ NG ĐAỊ HOC̣ BÁ CH KHOA TP.HCM Khoa Khoa hoc̣ & Kỹ thuật Máy tính } void Complex::set(float x, float y){ a=x; b=y; } void Complex::print(){ cout<<a<<"+i"<<b; } void Complex::sva(Complex c){ a=c.a; b=c.b; } void Complex::add(Complex c){ a+=c.a; b+=c.b; } void Complex::sub(Complex c){ a-=c.a; b-=c.b; } void Complex::mul(Complex c){ float t1,t2; t1 = a*c.a - b*c.b; t2 = a*c.b + c.a*b; a = t1; b = t2; } void Complex::div(Complex c){ if (c.a!=0&&c.b!=0){ float t1,t2; t1=(a*c.a+b*c.b)/(c.a*c.a+c.b*c.b); t2=(c.a*b-a*c.b)/(c.a*c.a+c.b*c.b); a = t1; b = t2; } } void Complex::exp(int n){ Complex c; c.set(a,b); for (int i=1;i<n;i++){ c.mul(c); } a=c.a; b=c.b; } Kỹ thuật lập trình 501127 – HK2/2011-2012 2
  2. TRƯỜ NG ĐAỊ HOC̣ BÁ CH KHOA TP.HCM Khoa Khoa hoc̣ & Kỹ thuật Máy tính Lệnh p *p q *q n 1 Không xác định Không xác định Không xác định Không xác định 1 2 xác định 1 Không xác định Không xác định 1 3 xác định 1 xác định Không xác định 1 4 xác định 1 xác định 2 1 5 xác định 1 Không xác định Không xác định 1 a) int *p, m, n; n = 3; //1 m = 2; //2 p = &m; //3 *p = n + 1; //4 p = &n; //5 *p = m + 1; //6 Lệnh p *p m n 1 Không xác định Không xác định Không xác định 3 2 Không xác định Không xác định 2 3 3 xác định 2 2 3 4 xác định 4 4 3 5 xác định 3 4 3 6 xác định 5 4 5 b) int *p, m, n; n = 1; //1 m = 2; //2 p = new int; //3 *p = n + 1; //4 p = &n; //5 *p = m + 1; //6 Lệnh p *p m n 1 Không xác định Không xác định Không xác định 1 2 Không xác định Không xác định 2 1 3 xác định Không xác định 2 1 4 xác định 2 2 1 5 xác định 1 2 1 6 xác định 3 2 3 Bài 3. Class Array quản lý mảng 2 chiều như sau. class Array{ protected: int m,n; int a; Kỹ thuật lập trình 501127 – HK2/2011-2012 4
  3. TRƯỜ NG ĐAỊ HOC̣ BÁ CH KHOA TP.HCM Khoa Khoa hoc̣ & Kỹ thuật Máy tính } cout >a[i][j]; } } } nAssignment=0; nCopy=0; } ~Array(){ //destructor for(int i=0;i<m;i++){ delete []a[i]; } delete []a; } void setM(int m,int* arr){ for(int i=0;i<n;i++){ a[m][i]=arr[i]; } } void setN(int n,int* arr){ for(int i=0;i<m;i++){ a[i][n]=arr[i]; } } int* getM(int m){ int *arr=new int[n]; for(int i=0;i<n;i++){ Kỹ thuật lập trình 501127 – HK2/2011-2012 6
  4. TRƯỜ NG ĐAỊ HOC̣ BÁ CH KHOA TP.HCM Khoa Khoa hoc̣ & Kỹ thuật Máy tính cout >M>>N; int *tM,*tN; tM=a.getM(M); tN=a.getN(N); cout<<"Hang M:\n"; for(int i=0;i<n;i++) cout<<tM[i]<<" "; cout<<"\nCot N:\n"; for(int i=0;i<m;i++) cout<<tN[i]<<" "; delete tM; delete tN; cout<<"\nSo lan goi ham assign: "<<a.getNumberAss()<<" - So lan goi ham copy: "<<a.getNumberCopy()<<endl; return 0; } Bài tập làm thêm Bài 4. Hiện thực lớp hình chữ nhật Rectangle theo các miêu tả về thuộc tính dữ liệu và hàm thành viên như sau: Có hai thuộc tính chiều dài (length) và chiều rộng (width). Định nghĩa hàm khởi tạo có hai thông số ứng với hai thông tin chiều dài và chiều rộng, giá trị mặc định cho hai thông số này lần lượt là 20 và 10. Định nghĩa thủ tục display để hiển thị các thuộc tính ra màn h.nh. Định nghĩa thủ tục getInfo để yêu cầu người dùng nhập các thông tin cho thuộc tính. Định nghĩa các thủ rục set để gán giá trị cho các thuộc tính. Định nghĩa các hàm get để truy xuất giá trị của các thuộc tính. Định nghĩa hàm area để tính diện tích của h.nh chữ nhật. Hiện thực lớp hình hộp Box theo miêu tả sau: Thừa kế lớp Rectangle ở trên. Có thêm thuộc tính chiều sâu depth. Định nghĩa đè (override) các thủ tục display, getInfo và hàm area của lớp Rectangle. Kỹ thuật lập trình 501127 – HK2/2011-2012 8
  5. TRƯỜ NG ĐAỊ HOC̣ BÁ CH KHOA TP.HCM Khoa Khoa hoc̣ & Kỹ thuật Máy tính public: void display(); // print parameters of rectangle void getInfo(); // request for parameters float area(); // caculate area }; void Box::display(){ cout >length; cout >width; cout >depth; } float Box::area(){ return 2*length*width+2*width*depth+2*depth*length; } Bài 5. Cho biết giá trị của *p, *q, m và n tương ứng với các dòng lệnh sau khi chương trình thực thi. Kiểm tra lại bằng chương trình. a) int *p, m, n; n = 1; //1 m = 2; //2 p = new int; //3 n = *p; //4 p = &m; //5 n = *p + 1; //6 Lệnh p *p m n 1 Không xác định Không xác định Không xác định 1 2 Không xác định Không xác định 2 1 3 xác định Không xác định 2 1 4 xác định Không xác định 2 Không xác định 5 xác định 2 2 Không xác định 6 xác định 2 2 3 b) int *p, m, n; n = 1; //1 m = 2; //2 Kỹ thuật lập trình 501127 – HK2/2011-2012 10
  6. TRƯỜ NG ĐAỊ HOC̣ BÁ CH KHOA TP.HCM Khoa Khoa hoc̣ & Kỹ thuật Máy tính 5 XĐ KXĐ XĐ 2 2 6 XĐ KXĐ XĐ KXĐ 2 7 XĐ 2 XĐ 2 2 8 XĐ 2 XĐ 2 3 e) int *p, *q, n, m; n = 1; //1 m = 2; //2 p = &n; //3 q = &m; //4 n++; //5 m ; //6 p = q; //7 q = &n; //8 Lệnh p *p q *q m n 1 KXĐ KXĐ KXĐ KXĐ KXĐ 1 2 KXĐ KXĐ KXĐ KXĐ 2 1 3 XĐ 1 KXĐ KXĐ 2 1 4 XĐ 1 XĐ 2 2 1 5 XĐ 2 XĐ 2 2 2 6 XĐ 2 XĐ 1 1 2 7 XĐ 1 XĐ 1 1 2 8 XĐ 1 XĐ 2 1 2 f) int *p, *q, n, m; p = new int; //1 *p = 1; //2 q = p; //3 p = &m; //4 m = *q; //5 n = 1; //6 delete q; //7 m = *q + *p; //8 Lệnh p *p q *q m n 1 XĐ KXĐ KXĐ KXĐ KXĐ KXĐ 2 XĐ 1 KXĐ KXĐ KXĐ KXĐ 3 XĐ 1 XĐ 1 KXĐ KXĐ 4 XĐ KXĐ XĐ 1 KXĐ KXĐ 5 XĐ 1 XĐ 1 1 KXĐ 6 XĐ 1 XĐ 1 1 1 7 XĐ 1 XĐ KXĐ 1 1 8 XĐ KXĐ XĐ KXĐ KXĐ 1 Hết - Kỹ thuật lập trình 501127 – HK2/2011-2012 12