class này có các phương thức sau: hàm contructor, nhập,xuất, cộng (lấy phân số thứ nhất cộng phân số thứ hai, và phần nguyên thứ nhất cộng phần nguyên thứ hai. Nếu hỗn số nào có phần [r]
Trang 1Mục lục
CHỦ ĐỀ 1: CLASS 2
Lopps 2
LOPHS 4
LOPMANG 6
OOP_Set 9
LOPDATHUC 11
1718_2_LTHDT_Midterm_01 13
OOP_NDTN_ExA1 16
OOP_NDTN_ExA2 18
OOP_NDTN_ExB1 19
OOP_NDTN_ExB2 20
Chủ đề 2: fiend và Quá tải toán tử : 22
Bài 1: LOPSV2 23
Bài 2: LOPMANGSV 24
Bài 3 : TAPSOMOI 26
Bài 4: OOP_NDTN_ExB3 28
Bài 5: OOP_NDTN_ExA3 29
Bài 6: 1718_2_LTHDT_Midterm_02 30
Chủ đề 3: KHUÔN HÌNH 33
Template2 33
KhuonHinhTong 35
TEMPTAPSOMOI 37
Chủ đề 4: kế thừa 39
Bài 1: HCNHV 39
Bài 3: LTHDT_HonSo1 43
Bài 4: LTHDT_HonSo2 44
Chủ đề 5: Đa hình 46
Bài 1: QLINTERNET 46
Bài 2: DAHINH1 49
Trang 25 Cộng, trừ, nhân, chia, so sánh với phân số khác
Viết chương trình sử dụng lớp phân số ở trên để giải quyết các yêu cầu sau
Input: Gồm 2 dòng
- Dòng 1 là phân số X có 2 số là tử và mẫu số
- Dòng 2: chứa 1 số nguyên k
Output:
- Dòng 1: Xuất tử của phân số X
- Dòng 2: Xuất mẫu phân số X
- Dòng 3: Phân số nghịch đảo của phân số X
- Dòng 4: Phân số rút gọn của phân số X
- Dòng 5: xuất phân số Y (Phân số Y là phân số có tử và mẫu được tính như sau:
tử của Y = tử của X + k
mẫu của Y = mẫu của X + k)
- Dòng 6: Xuất phân số tích (sau khi rút gọn) của phân số X và phân số Y
2 4
1
2
4 4/2 1/2 3/5 3/10
Trang 3int getMau(){return mau;}
PS(int t=0, int m=1){ tu = t; mau= m; }
PS(const PS &p) { tu = p.tu; mau= p.mau; }
friend ostream& operator << (ostream& os, PS &p){
os<< p.tu <<"/"<< p.mau;
return os;
}
PS RutGonPS(){
int ucln= UCLN(tu, mau);
return PS(tu/ucln, mau/ucln);
//doi void -> PS
//tu /= ucln;
//mau /=ucln;
}
PS NghichDaoPS(){ return PS(mau, tu);}
//phep toan: + - / * , logic so sanh
PS operator + (PS p){
int a= tu*p.mau + p.tu*mau;
int b = mau* p.mau;
return PS(a,b);
}
PS operator - (PS p){
int a= tu*p.mau - p.tu*mau;
int b = mau* p.mau;
//ham khac : ham cong so nguyen
PS CongSoNguyen(int k){ return PS(tu+k, mau +k); }
//1/2 + 1 ~ 1/2 + 1/1 = 3/2 -> friend operator + (PS p1 , PS p2)
};
Trang 4Điểm văn, toán.
Xây dựng lớp học sinh cho phép thực hiện các thao tác:
Nhập, xuất
Lấy họ tên, điểm văn, toán
Gán giá trị cho họ tên, điểm văn, điểm toán
Tính điểm trung bình
Xếp loại theo tiêu chí:
Gioi (>= 8.0), Kha (>= 7.0)
Trung binh (>= 5.0), Yeu (< 5)
Viết chương trình giải bài sau:
Trang 51 Khai báo 1 chuỗi, ví dụ:
string s; //lưu ý: thư viện: #include
HS(string s=" -", double t=0, double v=0){
hoten=s; dvan = v; dtoan=t;
Trang 6is>>hs.dtoan>> hs.dvan;
return is;
}
friend ostream& operator << (ostream& os , HS hs){
os<<hs.hoten << "|"<< hs.dtoan<< "|"<<hs.dvan<<endl;
if(dtb >= 8) return "Gioi";
if(dtb >= 7) return "Kha";
if(dtb >= 5) return "Trung binh";
for(int i=1; i< n; i++){
if( dsHS[i].getDTB() > dsHS[index].getDTB() )
Lấy phần tử tại vị trí nào đó
Gán giá trị cho phần tử tại vị trí nào đó
Trang 7Output:
- Dòng 1: số lượng phần tử của mảng
- Dòng 2: Xuất TRUE nếu có giá trị X trong mảng, xuất FALSE nếu không có giá trị X trong mảng
- Dòng 3: xuất mảng theo thứ tự tăng dần
- Dòng 4: Sau khi phần tử đầu mảng tăng lên 1 đơn vị (mảng ban đầu) hãy xuất mảng theo thứ tự giảm dần
* NGUYEN KHAC VAN **
* int a[]= {1,2,3,4} //size= 4
* int a[]= new int[10]{1,2,3,4} //size= 10 (0 cho 6 tu phan chua co)
* int a[10]; //size= 10 {0,0,0,0 }
Trang 8void sortMANG(bool flag = true){
//flag = true (sx tang dan), false (sx giam dan)
for(int i= 0; i< n-1; i++)
Trang 9Xây dựng chương trình quản lý các đối tượng Tập Hợp (Set), biết rằng:
• Đối tượng Tập Hợp có thể chứa N số nguyên
• Các đối tượng Tập Hợp có thể tương tác với nhau qua các phép toán:
o Phép Giao (Intersect): kết quả phép giao giữa 2 tập hợp A và B sẽ
là 1 tập hợp chỉ chứa các giá trị vừa thuộc A, vừa thuộc B
o Phép Hợp (Union): kết quả phép hợp giữa 2 tập hợp A và B sẽ là 1 tập hợp chứa tất cả giá trị thuộc A và thuộc B
Yêu cầu:
1 Xây dựng lớp đối tượng Tập Hợp (Set) có đầy đủ thành phần dữ liệu và phương thức cần thiết Việc xây dựng chương trình phải được thực hiện bằng phương pháp lập trình hướng đối tượng, thể hiện đúng nguyên lý đóng gói và cơ chế che dấu dữ liệu
2 Sử dụng kĩ thuật cấp phát động để tạo mảng lưu các giá trị trong Tập Hợp
• Dòng thứ tư: chứa kết quả phép hợp của tập hợp thứ nhất và thứ hai Các giá trị của tập hợp kết quả được xếp theo thứ tự tăng dần Nếu là tập hợp rỗng thì xuất số 0
#include <bits/stdc++.h>
using namespace std;
Trang 10for (int i = 0 ; i < a.getn() ; ++i) {
for (int j = 0 ; j < b.getn() ; ++j) {
for (int i = 0 ; i < a.getn() ; ++i) c[n++] = a.getphantu(i);
for (int i = 0 ; i < b.getn() ; ++i) {
int dem = 0;
for (int j = 0 ; j < a.getn() ; ++j) {
if (b.getphantu(i) == a.getphantu(j)) ++dem;
Trang 11Xây dựng lớp đối tượng Đa thức (Polynomial) để biểu diễn đa thức có dạng
anxn + an-1xn-1 + an-2xn-2 + … + a2x2 + a1x + a0
Yêu cầu:
1. Xây dựng lớp đối tượng với đầy đủ thành phần dữ liệu cần thiết, bao gồm:
- 1 số nguyên không âm biểu diễn bậc của đa thức
- 1 mảng các hệ số kiểu số thực
2. Xây dựng các phương thức khởi tạo:
- Khởi tạo không tham số với bậc là 0 (đa thức bậc 0)
- Khởi tạo sao chép
3. Xây dựng phương thức tính giá trị đa thức khi biết giá trị biến x
4. Xây dựng phương thức tính đạo hàm bậc 1 của đa thức
5. Xây dựng phương thức nạp chồng toán tử nhập và xuất cho đa thức
Lưu ý:
Khi xuất đa thức, SV cần kiểm tra định dạng của đơn thức trong những trường hợp sau:
- Hệ số là số âm thì xuất dấu – (dấu trừ) đứng trước hệ số
- Hệ số là số dương thì xuất dấu + (dấu cộng) đứng trước hệ số (ngoại trừ hệ số đầu tiên)
- Hệ số là 1 thì không cần xuất hệ số
- Hệ số là 0 thì không cần xuất đơn thức
- Số mũ là 1 thì không cần xuất số mũ của biến x
- Số mũ là 0 thì chỉ xuất hệ số
Input:
- Dòng đầu tiên là 1 số nguyên không âm N cho biết bậc của đa thức
- Dòng thứ hai là N + 1 số thực cho biết các hệ số từ N đến 0 của đa thức
- Dòng thứ ba là số thực K cho biết giá trị của biến x để tính giá trị đa thức
Output:
- Dòng đầu tiên là đa thức được xuất theo định dạng
anx^n + an-1x^n-1 + an-2x^n-2 + … + a2x^2 + a1x + a0
Trang 12- Dòng thứ hai là đạo hàm bậc 1 của đa thức ban đầu, được xuất theo định dạng như trên
- Dòng thứ ba là giá trị đạo hàm bậc 1 của đa thức khi x = K
4
5 -4 3 -2 1
2
5x^4 – 4x^3 + 3x^2 – 2x + 1 20x^3 – 12x^2 + 6x – 2
122
#include <iostream>
#include <cmath>
using namespace std;
class DaThuc {
private:
int n;
double a[100];
public:
void Nhap() {
cin >> n;
for (int i = 0 ; i <= n ; ++i) cin >> a[i];
}
void XuatMotSoHang (int a , int n , int &dem) { if (a != 0) { if (dem == 0) { if (n == 0) cout << a; if (n == 1) cout << a << "x"; if (n > 1) cout << a << "x^" << n; ++dem; }
else { if (dem == 1) { if (n == 0) { if (a > 0) cout << "+" << a; if (a < 0) cout << a; }
if (n == 1) { if (a == 1) cout << "+x"; if (a == -1) cout << "-x"; if (a < -1 || (a > -1 && a < 0)) cout << a << "x"; if (a > 1 || (a < 1 && a > 0)) cout << "+" << a << "x"; }
if (n > 1) { if (a == 1) cout << "+x^" << n; if (a == -1) cout << "-x^" << n; if (a < -1 || (a > -1 && a < 0)) cout << a << "x^" << n; if (a > 1 || (a < 1 && a > 0)) cout << "+" << a << "x^" << n; }
}
}
}
}
void Xuat() {
Trang 13int dem = 0;
for (int i = 0 ; i <= n ; ++i) {
XuatMotSoHang (a[i] , n - i , dem);
}
}
void DaoHam() {
for (int i = 0 ; i <= n ; ++i) {
a[i] = a[i] * (n - i);
for (int i = 0 ; i <= n ; ++i) {
giatri += a[i] * pow (x , n - i);
Trang 14Cho biết:
- Phương thức getName trả về chuỗi “firstName lastName”;
- Phương thức getAnnualSalary trả về giá trị lương 1 năm = 12 * salary
- Phương thức raiseSalary thực hiện việc tăng lương nhân viên theo % và trả về mức lương mới sau khi tăng;
- Phương thức toString trả về chuỗi thông tin nhân viên theo định dạng:
“Employee[id=?,name=firstName lastName,salary=?]”;
Yêu cầu: phải thực hiện đúng theo phương pháp lập trình hướng đối tượng và yêu cầu đề bài Bài làm không
đúng phương pháp hoặc sai yêu cầu sẽ không được tính điểm
Lưu ý: lương nhân viên được xuất ra theo dạng tiền tệ, bắt đầu bằng kí tự $ và có tối đa 2 số lẻ ở phần thập
phân
Input:
- Dòng 1 - 4: lần lượt là các thông tin của 1 nhân viên;
- Dòng 5: giá trị số thực cho biết số % tăng lương cho nhân viên
Output:
- Dòng 1: thông tin nhân viên được xuất theo định dạng đã mô tả
- Dòng 2: mức lương mới của nhân viên sau khi tăng
- Dòng 3: lương 1 năm của nhân viên (áp dụng mức lương mới sau khi tăng)
int getID(){ return id; }
string getFirstName(){ return firstName; }
string getLastName(){ return lastName; }
string getName(){ return firstName +" " + lastName; }
double getSalary(){ return salary; }
void setSalary(double _salary){ salary = _salary;}
double getAnnualSalary(){ return 12*salary; }
double raiseSalary(double percent){
salary = salary*(1 + percent);
Trang 15return s;
}
Employee(int _id=0, string _firstName="firstName", string _lastName="lastName", double _salary= 0){
id = _id; firstName = _firstName; lastName = _lastName; salary = _salary;
}
friend istream& operator >> (istream& is, Employee &e){
is>> e.id >> e.firstName >> e.lastName >> e.salary;
return is;
}
friend ostream& operator << (ostream& os, Employee e){
os<< "Employee[id= " << e.id << ",name=" << e.getName()
Employee operator ++(int){ // ++a
Employee res = *this;
Employee operator (int){ // a
Employee res = *this;
bool operator <(Employee em){
return (getAnnualSalary() < em.getAnnualSalary());
}
bool operator >(Employee em){
return (getAnnualSalary() > em.getAnnualSalary());
Trang 16}
bool operator ==(Employee em){
return (getAnnualSalary() == em.getAnnualSalary());
}
bool operator !=(Employee em){
return (getAnnualSalary() != em.getAnnualSalary());
cout<<"$"<<(emp1++ - plus1 ).getSalary()<<endl;
cout<<"$"<<( emp2 + plus2 ).getSalary()<<endl;
Employee[id= 12,name=Up Coder,salary= $5000.00]
Employee[id= 13,name=Fit Hcmup,salary= $6500.30]
Ta có định nghĩa kiểu dữ liệu ARRINT1: P= a0 a1⋯an-1
Trong đó, ARRINT1 có thuộc tính len =n (độ dài) và mảng a[n] để lưu (ký tự số), các giá trị ai trong phạm vi từ 0 → 9 và giá trị an-1 # 0
Trang 17Ví dụ: len=6 và mảng a[]={6;5;4;3;2;1} → P= 123456
Xây dựng lớp ARRINT1 dùng để mô tả đối tượng trên:
- Có hàm khởi tạo mặc định để tạo ra đa thức len=1 và a0 = 0
- Có hàm khởi tạo 1 tham số kiểu int truyền vào là thuộc tính len của lớp ARRINT1 để tạo ra đa thức
mà các hệ số đều bằng 1
- Có hàm khởi tạo 2 tham số lần lượt là độ dài len và mảng số nguyên chứa các an, an-1, …,
a0 (kiểu int[])
- Có property getLen, setLen giá trị len của ARRINT1
- Phương thức Input: với tham số truyền vào gồm số nguyên cho biết len và mảng số nguyên biểu diễn các giá trị của các hệ số từ a[n-1] đến a[0].-
- Phương thức Output: xuất thông tin theo dạng:
len :a0 a1⋯an-1
Input:
o Dòng 1: số nguyên N cho biết thuộc tính len
oDòng 2: N số nguyên cho biết giá trị các hệ số từ a[N-1] đến a[0] (Trường hợp là chỉ có “#” thực hiện tạo ARRINT1 1 tham số len)
void nhap_mang(int a[],int n) {
for(int i=0;i<n;++i) cin>>a[i];
}
void ARRINT1(int a[],int n) {
cout<<n<<": ";
if(a[0]==a[1] && a[0]==0) {
for(int i=0;i<n;++i) cout<<1;
void xuat_mang(int a[],int n) {
for(int i=0;i<n;++i) cout<<a[i]<<" ";
Trang 18}
OOP_NDTN_ExA2
Từ định nghĩa kiểu dữ liệu ARRINT1: P= a0 a1⋯an-1
Trong đó, ARRINT1 có thuộc tính len =n (độ dài) và mảng a[n] để lưu (ký tự số), các giá trị ai trong phạm vi từ 0 → 9 và giá trị an-1 # 0
Ví dụ: len=6 và mảng a[]={6;5;4;3;2;1} → P= 123456
Xây dựng tiếp các phương thức sau:
- Phương thức getMod trả về số nguyên với 1 tham số truyền vào
là b (kiểu int) để tính tổng mod của từng phần tử với tham số b
- Phương thức getOddNumber trả về kiểu ARRINT1 với len bằng số lượng chữ số lẻ trong mảng và mảng a[] chứa các số lẻ theo đúng thứ tự nguyên thêm vào mảng
Ví dụ: Gọi getOddNumber cho P(6, a[]={1,2,3,4,5,6}) → Q(3, a[]={1,3,5})
Input:
o Dòng 1: số nguyên N cho biết thuộc tính len và giá trị b
o Dòng 2: N số nguyên cho biết giá trị các hệ số từ a[N-1] đến a[0]
Output:
o Dòng 1: cho biết giá trị khi dùng getMod với số nguyên b
o Dòng 2: hiển thị ARRINT1 sau khi thực hiện gọi getOddNumber
6 2
3 1 2 4 0 2
2 2:13
4 3
1 1 1 1
4 4:11
void cap_phat(int *&a,int moi,int cu) {
int *b=new int[cu];
for(int i=0;i<cu;++i) b[i]=a[i];
Trang 19void nhap_mang(int *&a,int &n,int x) {
if(n==0) a=new int;
Ta có định nghĩa kiểu dữ liệu ARRINT2: P= a0 a1⋯an-1
Trong đó, ARRINT2 có thuộc tính len =n (độ dài) và mảng a[n] để lưu (ký tự số), các giá trị ai trong phạm vi từ 0 → 9 và giá trị an-1 # 0
Ví dụ: len=6 và mảng a[]={6;5;4;3;2;1} → P= 123456
Xây dựng lớp ARRINT2 dùng để mô tả đối tượng trên:
- Có hàm khởi tạo mặc định để tạo ra đa thức len=1 và a0 = 0
- Có hàm khởi tạo 1 tham số kiểu int truyền vào là thuộc tính len của lớp ARRINT2 để tạo ra đa thức
mà các hệ số tăng dần theo bậc từ 1 tới n-1
- Có hàm khởi tạo 2 tham số lần lượt là độ dài len và mảng số nguyên chứa các an, an-1, …,
a0 (kiểu int[])
- Có property getLen, setLen giá trị len của ARRINT2
- Phương thức Input: với tham số truyền vào gồm số nguyên cho biết len và mảng số nguyên biểu diễn các giá trị của các hệ số từ a[n-1] đến a[0].-
- Phương thức Output: xuất thông tin theo dạng:
len :a0 a1⋯an-1
Input:
o Dòng 1: số nguyên N cho biết thuộc tính len
Trang 20oDòng 2: N số nguyên cho biết giá trị các hệ số từ a[N-1] đến a[0] (Trường hợp là chỉ có “#” thực hiện tạo ARRIN2 1 tham số len)
Từ định nghĩa kiểu dữ liệu ARRINT2: P= a0 a1⋯an-1
Trong đó, ARRINT2 có thuộc tính len =n (độ dài) và mảng a[n] để lưu (ký tự số), các giá trị ai trong phạm vi từ 0 → 9 và giá trị an-1 # 0
Ví dụ: len=6 và mảng a[]={6;5;4;3;2;1} → P= 123456
Xây dựng tiếp các phương thức sau:
- Phương thức getDiv trả về số nguyên với 1 tham số truyền vào
là b (kiểu int) để tính tổng phần nguyên của phép chia lấy từng phần tử với tham số b.
Trang 21- Phương thức getEvenNumber trả về kiểu ARRINT2 với len bằng số lượng chữ số chẵn trong mảng
và mảng a[] chứa các số chẵn theo đúng thứ tự thêm vào mảng
Ví dụ: getEvenNumber cho P(6, a[]={1,2,3,4,5,6}) → Q(3, a[]={2,4,6})
Input:
o Dòng 1: số nguyên N cho biết thuộc tính len và giá trị b
o Dòng 2: N số nguyên cho biết giá trị các hệ số từ a[N-1] đến a[0]
Output:
o Dòng 1: cho biết giá trị khi dùng getDiv với số nguyên b
o Dòng 2: hiển thị ARRINT2 sau khi thực hiện gọi getEvenNumber
6 2
2 3 1 4 0 2
5 4:2042
5 4
1 0 4 2 7
2 2:24
void cap_phat(int *&a,int moi,int cu) {
int *b=new int[cu];
for(int i=0;i<cu;++i) b[i]=a[i];
void nhap_mang(int *&a,int &n,int x) {
if(n==0) a=new int;
Trang 22else cap_phat(a,n+1,n);
a[n]=x;
++n;
}
void xoa(int *a,int &n,int vt) {
for(int i=vt+1;i<n;++i) a[i-1]=a[i];
Chủ đề 2: fiend và Quá tải toán tử :
1 Khai báo 1 chuỗi, ví dụ:
string s; //lưu ý: thư viện: #include <string>
2 Nhập vào 1 chuỗi không có khoảng trắng
Trang 235 Nhập chuỗi, mà trước đó nhập vào 1 dãy có kết thúc bằng ctrl + z
+ mảng số thực: lưu danh sách điểm các môn học (các điểm là các số thực >=0 và <=10)
+ số lượng phần tử của danh sách điểm
Thao tác: xây dựng các toán tử >>, <<, [], =, lấy điểm trung bình cộng, các phương thức khởi tạo (3 phương
thức), phương thức hủy, các phương thức get và set
- Lớp SinhViên, gồm có các thuộc tính
+ Họ tên (chuỗi có khoảng trắng)
+ Mã Sinh Viên (chuỗi không có khoảng trắng)
+ Điểm (thuộc lớp điểm khai báo ở trên)
Thao tác: xây dựng các toán tử >>, <<, =, < (dựa vào điểm trung bình), lấy điểm trung bình cộng, các phương
thức khởi tạo (3 phương thức), phương thức hủy, các phương thức get và set
Yêu cầu 2: Viết chương trình sử dụng lớp sinh viên và lớp điểm ở trên để giải bài sau:
-Input:
+ Dòng 1: Nhập họ tên sinh viên
+ Dòng 2: nhập mã sinh viên
+ Dòng 3: Gồm nhiều số thực (mỗi số cách nhau 1 khoảng trắng) là điểm của sinh viên này
- Output: Xuất theo cấu trúc
+ Dòng 1: Ho Ten: họ tên sinh viên
+ Dòng 2: Ma Sinh Vien: mã sinh viên
+ Dòng 3: DTB: Điểm trung bình của sinh viên
Trang 24SinhVien(string _hoten, string _mssv, Diem _d ){ hoten= _hoten;
mssv= _mssv;
diem = _d;
} SinhVien(const SinhVien &sv){
hoten= sv.hoten;
mssv= sv.mssv;
diem = sv.diem;
} ~SinhVien(){}
friend istream& operator >>(istream& is,SinhVien& SV){
os<<"Ho Ten: "<<SV.hoten <<endl;
os<<"Ma Sinh Vien: "<<SV.mssv<<endl;
os<< fixed<< setprecision(1) ; os<< "DTB: "<<SV.diem.getDTB()<<endl;
return os;
} };
Yêu cầu1: xây dựng lớp MangSinhVien (mảng sinh viên) với các thuộc tính sau:
+ Mảng 1 chiều kiểu sinh viên (lớp sinh viên là lớp được miêu tả ở bài Lớp SinhVien)
+ 1 số nguyên - lưu số lượng phần tử của mảng ở trên
Xây dựng các thao tác sau:
- quá tải >>, <<,[], =
- các phương thức khởi tạo, hủy, set và get
- phương thức tính điểm trung bình của mảng (tính trung bình của tất cả điểm trung bình của sinh viên)
- phương thức trả về vị trí của sinh viên có điểm trung bình lớp nhất (vị trí ở đây là vị trí nằm trong mảng)
yêu cầu 2: Sử dụng lớp MangSinhVien ở trên để giải bài sau:
- Input:
+ Dòng 1: nhập vào số nguyên N
+ Nx3 dòng tiếp theo, cứ mỗi 3 dòng là chứa thông tin của một sinh viên gồm: Họ tên, Mã Số Sinh Viên, Điểm số của sinh viên đó
Trang 25double& operator [] (int i) {return a[i];}
// khoi tao , huy
Diem (int N = 1 , double A[] = new double [1]) {
int getN () {return n;}
double getA (int i) {return a[i];}
os << "Ho Ten: " << sv.hoten << endl;
os << "Ma Sinh Vien: " << sv.mssv << endl;
os << "DTB: " << fixed << setprecision (1) << sv.getDTBSV();
} double getDTBSV () { return d.getDTB();
} bool operator < (SinhVien sv) { return (getDTBSV() < sv.getDTBSV()) ? true : false;
} };
class MangSinhVien { int n;
}