BÀI TẬP CHƯƠNG TRÌNH CHUYÊN ĐỀ NGÀNH LẬP TRÌNH -LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C++

39 452 0
BÀI TẬP CHƯƠNG TRÌNH CHUYÊN ĐỀ NGÀNH LẬP TRÌNH -LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C++

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRUNG TÂM TIN HỌC – ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 227 Nguy ễn Văn Cừ - Qu ận 5 - Tp.H ồ Chí Minh Tel: 38351056 – Fax 8324466 – Email: ttth@hcmuns.edu.vn Mã tài liệu: DT_NCM_LT_BT_CD_LTHDTC++ Phiên bản 1.0 – Tháng 02/2010 BÀI TẬP CHƯƠNG TRÌNH CHUYÊN ĐỀ NGÀNH LẬP TRÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C++ Bài tập Lập trình hướng đối tượng với C++ 2/39 CHƯƠNG 2: CÁC MỞ RỘNG CỦA C++ 1. Viết hàm GiaiPTBậc2() sau, hàm này trả về số nghiệm n và giá trị các nghiệm x1, x2 (nếu có) của một phương trình bậc 2 với các hệ số a, b và c: void GiaiPTBậc2 (double a, double b, double c, int &n, double &x1, double &x2); 2. Viết hàm SapXep() sau, hàm thực hiện sắp xếp một mảng số nguyên theo chiều tăng dần hoặc giảm dần, mặc định kiểu sắp xếp là tăng dần. void SapXep(int a[], int n, int tang = 0); Khi đối số thứ ba nhận giá trị mặc định bằng không hàm sắp xếp tăng dần, ngược lại hàm sắp xếp giảm dần. 3. Sử dụng các toán tử new và delete thực hiện các thao tác cấp phát và giải phóng bộ nhớ động cho mảng một chiều, sau đó thực hiện một số bài toán cơ bản trên mảng một chiều. 4. Sử dụng các toán tử new và delete thực hiện các thao tác cấp phát và giải phóng bộ nhớ động cho mảng hai chiều, sau đó thực hiện một số bài toán cơ bản trên mảng hai chiều. 5. Khai báo kiểu dữ liệu PS biểu diễn thông tin của một phân số, sau đó định nghĩa các hàm và hàm toán tử sau: void Nhap(PS &u); void Xuat(const PS &u); int USCLN(int x, int y); void RutGon(PS &u) ; //Toán tử số học PS operator+(const PS &u, const PS &v); PS operator-(const PS &u, const PS &v); PS operator*(const PS &u, const PS &v); PS operator/(const PS &u, const PS &v); //Toán tử quan hệ int operator>(const PS &u, const PS &v); int operator>=(const PS &u, const PS &v); int operator<(const PS &u, const PS &v); int operator<=(const PS &u, const PS &v); int operator==(const PS &u, const PS &v); int operator!=(const PS &u, const PS &v); //Toán tử số học mở rộng Bài tập Lập trình hướng đối tượng với C++ 3/39 void operator+=(PS &u, const PS &v); void operator-=(PS &u, const PS &v); void operator*=(PS &u, const PS &v); void operator/=(PS &u, const PS &v);  Hướng dẫn int operator>(const PS &u, const PS &v) { if(u.ts * v.ms > u.ms * v.ts) return 1; else return 0; } void operator+=(PS &u, const PS &v) { u.ts = u.ts * v.ms + u.ms * v.ts; u.ms = u.ms * t.ms; RutGon(u); } 6. Khai báo kiểu dữ liệu DT biểu diễn thông tin của một đa thức, sau đó định nghĩa các hàm và hàm toán tử sau: void Nhap(DT &u); void Xuat(DT u); DT operator+(const DT &u, const DT &v); //Toán tử cộng hai đa thức DT operator-(const DT &u, const DT &v); // Toán tử trừ hai đa thức DT operator*(const DT &u, const DT &v); // Toán tử nhân hai đa thức void operator-(const DT &u); // Toán tử đảo dấu đa thức double operator^( const DT &u, double x); /*Toán tử tính giá trị đa thức tại x*/  Hướng dẫn: struct DT { int n; //Bậc đa thức double arr[SIZE]; //Mảng chứa các hệ số của đa thức }; DT operator+(const DT &u, const DT &v) { int k = (u.n > v.n ? u.n : v.n); DT ret; Bài tập Lập trình hướng đối tượng với C++ 4/39 ret.n = k; for(int i = 0; i < ret.n + 1; i++) { if(i <= u.n && i <= v.n) ret.arr[i] = u.arr[i] + v.arr[i]; else if(i <= u.n) ret.arr[i] = u.arr[i]; else ret.arr[i] = v.arr[i]; } return ret; } DT operator*(const DT &u, const DT &v) { int i, j; int k = u.n + v.n; DT ret; ret.n = k; //Khởi tạo các hệ số của đa thức ret bằng 0 for(i = 0; i < ret.n + 1; i++) ret.arr[i] = 0; //Nhân hai đa thức for(i = 0; i < u.n + 1; i++) for(j = 0; j < v.n + 1; j++) ret.arr[i+j] += u.arr[i] * v.arr[j]; retunr ret; } Bài tập Lập trình hướng đối tượng với C++ 5/39 CHƯƠNG 3: ĐỐI TƯỢNG VÀ LỚP 1. Xây dựng một lớp TamGiác để mô tả các đối tượng tam giác như sau: class TamGiac { private: double a, b, c; //Ba cạnh tam giác public: TamGiac(double aa = 0, double bb = 0, double cc = 0); void Nhap(); //Nhập ba cạnh void Xuat(); //Xuất thông tin tam giác int HopLe(); //Kiểm tra ba cạnh tam giác hợp lệ không? void PhanLoai(); //Phân loại tam giác double ChuVi(); //Tính chu vi tam giác double DienTich(); //Tính diện tích tam giác };  Hướng dẫn: void TamGiac ::PhanLoai() { if(a == b || b == c || c == a) if(a == b && b == c) cout << “Day la tam giac deu\n”; else if(a * a == b * b + c * c || b * b == a * a + c * c || c * c == a * a + b * b) cout << “Day la tam giac vuong can\n”; else cout << “Day la tam giac can\n”; else if(a * a == b * b + c * c || b * b == a * a + c * c || c * c == a * a + b * b) cout << “Day la tam giac vuong\n”; else cout << “Day la tam giac thuong\n”; } 2. Xây dựng một lớp Gio để mô tả các đối tượng thời gian (giờ, phút, giây) như sau: class Gio { private: int h, m, s; //giờ, phút, giây Bài tập Lập trình hướng đối tượng với C++ 6/39 public: Gio(int hh = 0, int mm = 0, int ss = 0); void Nhap(); int HopLe(); //Kiểm tra giờ hợp lệ void Xuat24(); //xuất giờ theo 24 tiếng void Xuat12(); //xuất giờ theo 12 tiếng void TangGiay(int n); //Tăng giờ lên n giây Giơ Cong(const Gio &u); //Cộng hai giờ Giơ Tru(const Gio &u); //Trừ hai giờ };  Hướng dẫn: void Gio::TangGiay(int n) { s += n; if(s > 59) { m += s/60; s %= 60; if(m > 59) { h += m/60; m %= 60; } } } Gio Gio::Cong(const Gio &u) { Gio ret; ret.s = s + u.s; if(ret.s > 59) ret.s %= 60; ret.m = m + u.m + (s + u.s)/60; if(ret.m > 59) ret.m %= 60; ret.h = h + u.h + (m + u.m)/60; if(ret.h > 23) ret.m %= 24; Bài tập Lập trình hướng đối tượng với C++ 7/39 return ret; } 3. Xây dựng một lớp Ngay để mô tả các đối tượng thời gian (ngày, tháng, năm) như sau: class Ngay { private: int d, m, y; //ngày, tháng, năm public: Ngay(int dd = 1, int mm = 1, int yy = 1); void Nhap(); void Xuat(); int Nhuan(); //Kiểm tra năm nhuần int SNTrongThang(); //Tình số ngày trong tháng int HopLe(); //Kiểm tra ngày hợp lệ void TangNgay(); //Tăng ngày lên một ngày void GiamNgay(); // Giảm ngày xuống một ngày void TangTuan(); //Tăng ngày lên một tuần void GiamTuan(); // Giảm ngày xuống một tuần };  Hướng dẫn void Ngay::TangNgay() { d++; if(d > SNTrongThang()) { d = 1; m++; if(m > 12) { m = 1; y++; } } } void Ngay::GiamNgay() { d ; if(d < 1) { m ; Bài tập Lập trình hướng đối tượng với C++ 8/39 if(m < 1) { m = 12; y ; } d = SNTrongThang(); } } void Ngay::TangTuan() { d += 7; if(d > SNTrongThang ()) { d = d - SNTrongThang (); m++; if(m > 12) { m = 1; y++; } } } int Ngay::GiamTuan() { d -= 7; if(d < 1) { m ; if(m < 1) { m = 12; y ; } d = d + SNTrongThang (); } } 4. Xây dựng một lớp Diem để mô tả các đối tượng điểm trong mặt phẳng như sau: class Diem { private: int x, y; //Tọa độ public: Bài tập Lập trình hướng đối tượng với C++ 9/39 Diem(int xx = 0, int yy = 0); void Nhap(); void Xuat(); void DiChuyen(int dx, int dy); //Di chuyển điểm đi một độ dời (dx, dy) int Trung(Diem u); //Kiểm tra hai điểm trùng nhau Diem DoiXung(); /*Tìm điểm đối xứng với một điểm cho trước qua gốc tọa độ*/ double KCach(const Diem &u); //Khoảng cách hai điểm int HopLe(const Diem &u, const Diem &v); /*Kiểm tra 3 đỉnh có tạo thành tam giác */ double ChuVi(Diem &u, Diem &v); //Tính Chu vi tam giác qua ba điểm double DienTich(Diem &u, Diem &v); /*Tính Diện tích tam giác qua ba điểm*/ }; 5. Xây dựng một lớp Vector để mô tả các đối tượng vector trong không gian n chiều như sau: class Vector { private: int n; //số chiều double *p; //Con trỏ tới vùng nhớ động chứa các tọa độ public: Vector(); //Hàm thiết lập không đối số Vector(int nn); //Hàm thiết lập một đối số Vector(const Vector &u); //Hàm thiết lập sao chép ~Vector(); //Hàm hủy bỏ void Nhap(); //Nhập tọa độ void Xuat(); //Xuất tọa độ int LayN(); //Lấy số chiều Vector Cong(const Vector &u); //Cộng 2 vector Vector Tru(const Vector &u); //Trừ hai vector Vector Nhan(double x); //Nhân một vector với một số thực double Nhan(const Vector &u); //Nhân vô hướng hai vector }; 6. Xây dựng một lớp DaThuc để mô tả các đối tượng đa thức như sau: class DaThuc { Bài tập Lập trình hướng đối tượng với C++ 10/39 private: int n; //Bậc đa thức double *p; //con trỏ tới vùng nhớ động chứa các hệ số public: DaThuc(); //Hàm thiết lập không đối số DaThuc(int nn); //Hàm thiết lập một đối số DaThuc (const DaThuc &u); //Hàm thiết lập sao chép ~ DaThuc (); //Hàm hủy bỏ void Nhap(); //Nhập đa thức void Xuat(); //Xuất đa thức double GiaTri(double x); //Tính giá trị đa thức tại x DaThuc Cong(const DaThuc &u); //Cộng hai đa thức DaThuc Tru(const DaThuc &u); //Trừ hai đa thức DaThuc Nhan(const DaThuc &u); //Nhân hai đa thức };  Hướng dẫn: DaThuc::DaThuc(int nn) { n = nn; p = new double[n + 1]; //Một đa thức bậc n có n + 1 hệ số } 7. Xây dựng lớp MaTran để mô tả các đối tượng ma trận như sau: class MaTran { private: int sd, sc; //Số dòng và số cột double **p; //Con trỏ tới vùng nhớ động chứa các phần tử public: MaTran (); //Hàm thiết lập không đối số MaTran(int sd1, int sc1); //Hàm thiết lập hai đối số MaTran (const MaTran &u); //Hàm thiết lập sao chép ~ MaTran (); //Hàm hủy bỏ void Nhap(); void Xuat(); double TongDong(int k); //Tổng các phần tử ở dòng thứ k int LaySD(); //Lấy số dòng [...]... return os; } 4 Xây dựng lớp DaThuc để mô tả các đối tượng đa thức như sau: class DaThuc { private: int n; //Bậc đa thức double *p; //con trỏ tới vùng nhớ chứa các hệ số public: DaThuc(); //Hàm thiết lập không đối số DaThuc(int nn); //Hàm thiết lập một đối số Lập trình hướng đối tượng với C++ 22/39 Bài tập DaThuc (const DaThuc &u); ~ DaThuc (); //Hàm thiết lập sao chép //Hàm hủy bỏ void Nhap(); void Xuat();... pnv[i]->TienLuong() >(istream &is, Vector &u)... HDBH::SuaTB(double tb1) { tstb -= tb; tstb += tb1; } void HDBH::Xuat() { cout . DT_NCM_LT_BT_CD_LTHDTC++ Phiên bản 1.0 – Tháng 02/2010 BÀI TẬP CHƯƠNG TRÌNH CHUYÊN ĐỀ NGÀNH LẬP TRÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C++ Bài tập Lập trình hướng đối tượng với C++ 2/39 CHƯƠNG. u.arr[i] * v.arr[j]; retunr ret; } Bài tập Lập trình hướng đối tượng với C++ 5/39 CHƯƠNG 3: ĐỐI TƯỢNG VÀ LỚP 1. Xây dựng một lớp TamGiác để mô tả các đối tượng tam giác như sau: class TamGiac. don:” <<tshd<<” ”; } Bài tập Lập trình hướng đối tượng với C++ 18/39 CHƯƠNG 4: TOÁN TỬ TRÊN LỚP 1. Xây dựng lớp SoPhuc để mô tả các đối tượng số phức như sau: class SoPhuc

Ngày đăng: 12/04/2015, 14:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan