Giáo trình Hệ điều hành - Chương 15: Khuôn mẫu - Nguyễn Sơn Hoàng Quốc

pdf 35 trang huongle 6310
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ điều hành - Chương 15: Khuôn mẫu - Nguyễn Sơn Hoàng Quốc", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_he_dieu_hanh_chuong_15_khuon_mau_nguyen_son_hoang.pdf

Nội dung text: Giáo trình Hệ điều hành - Chương 15: Khuôn mẫu - Nguyễn Sơn Hoàng Quốc

  1. Khoa CNTT LTHĐT Chương 15 KHUÔN MẪU GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 1 ThS. Nguyễn Tấn Trần Minh Khang
  2. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Định nghĩa hàm tìm số nhỏ nhất của hai số nguyên: 11. int NhoNhat(int a, int b) 12. { 13. int lc = a; 14. if (b < lc) 15. lc = b; 16. return lc; 17. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 2 ThS. Nguyễn Tấn Trần Minh Khang
  3. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Định nghĩa hàm tìm số nhỏ nhất của hai số thực: 11. float NhoNhat(float a, float b) 12. { 13. float lc = a; 14. if (b < lc) 15. lc = b; 16. return lc; 17. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 3 ThS. Nguyễn Tấn Trần Minh Khang
  4. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Định nghĩa hàm tìm số nhỏ nhất của hai số nguyên dài: 11. long NhoNhat(long a, long b) 12. { 13. long lc = a; 14. if (b < lc) 15. lc = b; 16. return lc; 17. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 4 ThS. Nguyễn Tấn Trần Minh Khang
  5. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Định nghĩa hàm tìm số nhỏ nhất của hai số thực dài: 11. double NhoNhat(double a, double b) 12. { 13. double lc = a; 14. if (b < lc) 15. lc = b; 16. return lc; 17. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 5 ThS. Nguyễn Tấn Trần Minh Khang
  6. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Định nghĩa hàm tìm số nhỏ nhất của hai phân số: 11. PHANSO NhoNhat(PHANSO a, PHANSO b) 12. { 13. PHANSO lc = a; 14. if (b < lc) 15. lc = b; 16. return lc; 17. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 6 ThS. Nguyễn Tấn Trần Minh Khang
  7. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM 11. struct phanso 12. { 13. int tu; 14. int mau; 15. }; 16. typedef struct phanso PHANSO; 17. int operator<(PHANSO, PHANSO); GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 7 ThS. Nguyễn Tấn Trần Minh Khang
  8. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM 11. int operator<(PHANSO x,PHANSO y) 12. { 13. float a=(float)x.tu/x.mau; 14. float b=(float)y.tu/y.mau; 15. if(a<b) 16. return 1; 17. return 0; 18. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 8 ThS. Nguyễn Tấn Trần Minh Khang
  9. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Định nghĩa hàm tìm số nhỏ nhất của hai kiểu bất kỳ: 11. template 12. T NhoNhat(T a, T b) 13. { 14. T lc = a; 15. if (b < lc) 16. lc = b; 17. return lc; 18. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 9 ThS. Nguyễn Tấn Trần Minh Khang
  10. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Bài toán: Viết chương trình tìm số nhỏ nhất của hai kiểu dữ liệu bất kỳ bằng cách sử dụng kỹ thuật khuôn mẫu hàm (template function) − Chương trình GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 10 ThS. Nguyễn Tấn Trần Minh Khang
  11. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM − Chương trình 11. #include 12. struct phanso 13. { 14. int tu; 15. int mau; 16. }; 17. typedef struct phanso PHANSO; 18. int operator 21. T NhoNhat(T a, T b); GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 11 ThS. Nguyễn Tấn Trần Minh Khang
  12. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM 11. void main() 12. { 13. int a1=5, a2=3; 14. int a=NhoNhat(a1, a2); 15. cout<<"Nho nhat:"<<a; 16. float b=NhoNhat(1.5, 2.3); 17. cout<<"\nNho nhat :"<<b; 18. PHANSO p1={1,2}; 19. PHANSO p2={1,3}; 20. PHANSO p=NhoNhat(p1, p2); 21. cout << "\nNho nhat :"; 22. Xuat(p); 23. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 12 ThS. Nguyễn Tấn Trần Minh Khang
  13. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM 11. template 12. T NhoNhat(T a, T b) 13. { 14. T lc = a; 15. if(b<lc) 16. lc = b; 17. return lc; 18. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 13 ThS. Nguyễn Tấn Trần Minh Khang
  14. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM 11. int operator<(PHANSO x, PHANSO y) 12. { 13. float a=(float)x.tu/x.mau; 14. float b=(float)y.tu/y.mau; 15. if(a<b) 16. return 1; 17. return 0; 18. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 14 ThS. Nguyễn Tấn Trần Minh Khang
  15. Khoa CNTT LTHĐT 1. KHUÔN MẪU HÀM 11. void Xuat(PHANSO x) 12. { 13. cout<<x.tu<<"/"<<x.mau; 14. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 15 ThS. Nguyễn Tấn Trần Minh Khang
  16. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP − Viết chương trình nhập mảng số nguyên. Đếm số phần tử dương trong mảng và xuất kết quả. GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 16 ThS. Nguyễn Tấn Trần Minh Khang
  17. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. #include 12. class CMangNguyen 13. { 14. private: 15. int a[100]; 16. int n; 17. public: 18. void Nhap(); 19. void Xuat(); 20. int DemDuong(); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 17 ThS. Nguyễn Tấn Trần Minh Khang
  18. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. void CMangNguyen::Nhap() 12. { 13. cout > n; 15. for (int i=0;i > a[i]; 19. } 20. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 18 ThS. Nguyễn Tấn Trần Minh Khang
  19. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. void CMangNguyen::Xuat() 12. { 13. for (int i=0;i<n;i++) 14. cout << a[i] << " "; 15. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 19 ThS. Nguyễn Tấn Trần Minh Khang
  20. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. int CMangNguyen::DemDuong() 12. { 13. int dem = 0; 14. for (int i=0;i 0) 16. dem = dem + 1; 17. return dem; 18. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 20 ThS. Nguyễn Tấn Trần Minh Khang
  21. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP − Viết chương trình nhập mảng số thực. Đếm số phần tử dương trong mảng và xuất kết quả. GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 21 ThS. Nguyễn Tấn Trần Minh Khang
  22. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. #include 12. class CMangThuc 13. { 14. private: 15. float a[100]; 16. int n; 17. public: 18. void Nhap(); 19. void Xuat(); 20. int DemDuong(); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 22 ThS. Nguyễn Tấn Trần Minh Khang
  23. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. void main() 12. { 13. CMangThuc a; 14. a.Nhap(); 15. a.Xuat(); 16. int kq = a.DemDuong(); 17. cout << "\n :" << kq; 18. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 23 ThS. Nguyễn Tấn Trần Minh Khang
  24. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. void CMangThuc::Nhap() 12. { 13. cout > n; 15. for (int i=0;i > a[i]; 19. } 20. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 24 ThS. Nguyễn Tấn Trần Minh Khang
  25. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. void CMangThuc::Xuat() 12. { 13. for (int i=0;i<n;i++) 14. cout << a[i] << " "; 15. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 25 ThS. Nguyễn Tấn Trần Minh Khang
  26. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. int CMangThuc::DemDuong() 12. { 13. int dem = 0; 14. for (int i=0;i 0) 16. dem = dem + 1; 17. return dem; 18. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 26 ThS. Nguyễn Tấn Trần Minh Khang
  27. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP − Viết chương trình nhập mảng kiểu bất kỳ. Đếm số phần tử dương trong mảng và xuất kết quả bằng GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 27 ThS. Nguyễn Tấn Trần Minh Khang
  28. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. template 12. class CMang 13. { 14. private: 15. T a[100]; 16. int n; 17. public: 18. void Nhap(); 19. void Xuat(); 20. int DemDuong(); 21. }; GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 28 ThS. Nguyễn Tấn Trần Minh Khang
  29. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. void main() 12. { 13. CMang a; 14. a.Nhap(); 15. a.Xuat(); 16. int kq1 = a.DemDuong(); 17. cout b; 19. b.Nhap(); 20. b.Xuat(); 21. int kq2 = b.DemDuong(); 22. cout<<"\n :"<<kq2; 23. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 29 ThS. Nguyễn Tấn Trần Minh Khang
  30. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. template 12. void CMang ::Nhap() 13. { 14. cout >n; 16. for (int i=0;i > a[i]; 20. } 21. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 30 ThS. Nguyễn Tấn Trần Minh Khang
  31. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. template 12. void CMang ::Xuat() 13. { 14. for (int i=0;i<n;i++) 15. cout<<a[i]<<" "; 16. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 31 ThS. Nguyễn Tấn Trần Minh Khang
  32. Khoa CNTT LTHĐT 2. KHUÔN MẪU LỚP 11. template 12. int CMang ::DemDuong() 13. { 14. int dem = 0; 15. for (int i=0;i 0) 17. dem = dem + 1; 18. return dem; 19. } GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 32 ThS. Nguyễn Tấn Trần Minh Khang
  33. Khoa CNTT LTHĐT 3. LƯU Ý − Khi tạo khuôn mẫu hàm (khuôn mẫu lớp) phần khai báo và phần định nghĩa hàm (định nghĩa lớp) phải nằm trong cùng một tập tin. GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 33 ThS. Nguyễn Tấn Trần Minh Khang
  34. Khoa CNTT LTHĐT 4. BÀI TẬP 1 − Viết các hàm thực hiện công việc sau bằng kỹ thuật khuôn mẫu hàm (áp dụng cho các kiểu số nguyên, số thực, PHANSO): Tìm số lớn nhất trong hai số kiểu dữ liệu tùy ý. Tìm số nhỏ nhất trong hai số kiểu dữ liệu tùy ý. Tính tổng hai số kiểu dữ liệu tùy ý. Tính hiệu hai số kiểu dữ liệu tùy ý. GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 34 ThS. Nguyễn Tấn Trần Minh Khang
  35. Khoa CNTT LTHĐT 4. BÀI TẬP 02 − Xây dựng lớp mảng kiểu dữ liệu tùy ý thực hiện các chức năng sau (áp dụng đối với mảng số nguyên, mảng số thực, mảng phân số) Phương thức nhập mảng Phương thức xuất mảng Phương thức tính tổng các phần tử trong mảng Phương thức tìm phần tử nhỏ nhất trong mảng Phương thức đếm số lần xuất hiện của giá trị x trong mảng GV. Nguyễn Sơn Hoàng Quốc Chương 15 - 35 ThS. Nguyễn Tấn Trần Minh Khang