Thực hành ngôn ngữ lập trình C++ - Bài thực hành số 10
Lớp vector này có các phương thức sau:
1) xây dựng các phương thức constructor, destructor
2) void push_back(int): chèn thêm một phần tửvào cuối
3) void pop_back(int): lấy phần tửcuối ra
4) int getAt(int index):lấy một phần tửthứ index
5) void setAt(int index, int value):gán giá trị valuecho phần tửthứ index
6) int size():trảvềsốphần tử(sốchiều) của vector
7) void clear():xóa tất cảcác phần tửcủa vector
8) void print():in các phần tửnày ra màn hình
TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008 Lê Anh Cường, Hoàng Thị Điệp - Bộ môn Khoa học Máy tính Bài thực hành số 10 A- BÀI TẬP LẬP TRÌNH Bài 1: Xây dựng lớp vector cho dữ liệu kiểu int class MyVector { // khai báo dữ liệu // constructor // destructor // các phương thức (hàm) }; Lớp vector này có các phương thức sau: 1) xây dựng các phương thức constructor, destructor 2) void push_back(int): chèn thêm một phần tử vào cuối 3) void pop_back(int) : lấy phần tử cuối ra 4) int getAt(int index): lấy một phần tử thứ index 5) void setAt(int index, int value): gán giá trị value cho phần tử thứ index 6) int size(): trả về số phần tử (số chiều) của vector 7) void clear(): xóa tất cả các phần tử của vector 8) void print(): in các phần tử này ra màn hình Chú ý: thiết kế phần nào là private, phần nào là public Viết chương trình minh họa việc sử dụng lớp vector này: - Nhập vào một dãy các số nguyên (nhập vào đối tượng này). Không cố định trước số phần tử muốn nhập. - Thử nghiệm các phương thức trên Gợi ý đoạn mã nhập dãy số nguyên đến khi dừng lại: MyVector mv; while(1) { int x ; cout << “x = ” ; cin >> x ; cin.ignore(1) ; mv.push_back(x) ; cout << “nhap tiep ko (c/k)” ; char c ; cin.get(c); if( c==’k’ ) break ; } TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008 Lê Anh Cường, Hoàng Thị Điệp - Bộ môn Khoa học Máy tính Bài 2: Xây dựng chương trình quản lý nhân viên. Thiết kế theo tư tưởng hướng đối tượng như sau: - Xây dựng lớp Personnel - Xây dựng lớp quản lý nhân viên (ký hiệu là PersonnelManager) 1) Lớp Personnel bao gồm dữ liệu (private) và chức năng (public) như sau: a) Dữ liệu: tên, năm sinh b) Chức năng (phương thức): + set tên + set năm sinh + get tên + get năm sinh + hiển thị thông tin nhân viên ra string. Ví dụ khai báo phương thức này: string showInfo(); 2) Lớp PersonnelManager bao gồm dữ liệu (private) và chức năng (public) như sau: a) Dữ liệu: danh sách nhân viên (có thể có nhiều cách cài đặt ở đây: dùng mảng tĩnh, dùng mảng cấp phát động) b) Chức năng (phương thức): + hiển thị ra màn hình tất cả nhân viên + hiển thị ra màn hình các nhân viên theo thứ tự tuổi tăng dần + ghi ra một file text các nhân viên theo thứ tự tuổi tăng dần + hiển thị ra màn hình các nhân viên có tuổi >= 50 (đọc năm hiện tại từ bàn phím) + ghi ra file text các nhân viên có tuổi >= 50 (đọc năm hiện tại từ bàn phím) + lấy dữ liệu từ file text vào chương trình. File text chứa dữ liệu có dạng: Le Van A 1975 Le Van B 1977 … Chú ý: ngoài những phương thức public như chỉ ra ở trên, phải xây dựng thêm các phương thức private để xử lý nội bộ, chẳng hạn như phương thức sắp xếp, … TH Ngôn ngữ lập trình C++ Học kì I, năm học 2007-2008 Lê Anh Cường, Hoàng Thị Điệp - Bộ môn Khoa học Máy tính B- PHỤ LỤC Hướng dẫn bài 1: cách cài đặt dữ liệu Dùng mảng cấp phát động trỏ bởi con trỏ data. Khi thêm dữ liệu mà không đủ bộ nhớ thì cấp phát lại. Dưới đây là đoạn mã gợi ý: //---------------------------------------------------------------------------- // Khai bao lop MyVector dung de luu mot day so nguyen //---------------------------------------------------------------------------- class MyVector { public: // ham tao & ham huy ... // cac phuong thuc public... private: // ham cap phat lai bo nho cho data (tang kich thuoc len delta) bool reallocate(unsigned int delta); int * data; // con tro chi toi mang int cap phat dong unsigned int maxSize; // so chieu toi da cua vector unsigned int currentsize; // so chieu hien tai cua vector }; //---------------------------------------------------------------------------- // ham cap phat lai bo nho cho data (tang kich thuoc len delta) // goi toi khi currentsize == maxSize //---------------------------------------------------------------------------- bool MyVector::reallocate(unsigned int delta) { int * holder = data; unsigned int oldMaxSize = maxSize; // cap phat lai cho data maxSize += delta; data = new int[maxSize]; if(data == NULL) return false; // neu cap phat khong thanh cong // sao du lieu tu holder sang data for(int i = 0; i < oldMaxSize; i++) data[i] = holder[i]; // xoa vung nho cu delete [] holder; holder = NULL; return true; }
File đính kèm:
- Thực hành ngôn ngữ lập trình C++ - Bài thực hành số 10.pdf