You are on page 1of 6

{ {

CHƯƠNG 2 : ĐỆ QUY int n; int n, x;


Xây dựng các hàm đệ qui tính các biểu thức như cout << "Nhap vao so nguyen duong n : "; cin >> cout << "Nhap he so vao so mu : ";
sau: a. 𝑆1 = 1 + 2 + 3 + ⋯ + 𝑛 (n là số nguyên n; cin >> x >> n;
dương) b. 𝑆2 = 1^ 2 + 2 ^2 + 3 ^2 + ⋯ + 𝑛 ^2 (n là cout << "Tong cac so tu 1 den " << n << " la : " << cout << x << " ^ " << n << " = " << mu(x, n) <<
số nguyên dương) c. 𝑆3 = 1 + 1/ 3 + 1 /5 + ⋯ + 1 /𝑛 tong(n) << endl; endl;}
(n là số nguyên dương và là số lẻ) d. 𝑆4 = 1! + 2! + cout << "tong binh phuong cac so tu 1 den Bài 5.đếm số chữ số,số đảo ngược,tổng các chữ số
3! + ⋯ + 𝑛! (n là số nguyên dương) " << n << " la : " << tongbp(n) << endl; chẵn/lẻ của một số nguyên không âm
#include<cmath> cout << "tong 1 + 1/2 + ....+ 1/" << n << " int dem(int n)
int tong(int n) la : " << ps(n) << endl; {
{ cout << "Tong 1! + 2! +...+ " << n << "! = if (n < 10)
if (n == 1) " << tonggt(n) << endl;} return 1;
return 1; Bài 3. Viết hàm đệ qui tính giá trị Fibonacci của else
else một số nguyên không âm return dem(n / 10) + 1;
return tong(n - 1) + n; int fibo(int n) }
} { void dao(int n)
int tongbp(int n) if (n == 0) {
{ return 0; if (n < 10)
if (n == 1) else cout << n;
return 1; if (n == 1 || n == 2) else
else return 1; {
return tongbp(n - 1) + pow(n, 2); else cout << n % 10;
} return fibo(n - 1) + dao(n / 10);
double ps(int n) fibo(n - 2); }
{ } }
if (n == 1) int main()
return 1; { int tongch(int n)
else int n; {
return ps(n - 2) + 1 / (double)n; cout << "nhap vao so n : "; if (n == 0)
} cin >> n; return 0;
int gt(int n) cout << "gia tri fibonaci cua so " << n << " else
{ la : " << fibo(n) << endl;} if (n % 2 == 0)
if (n == 0) Bài 4. Viết hàm đệ qui tính giá trị của x^ n ; với return tongch(n / 10) +
return 1; x, n là số nguyên. n % 10;
else double mu(int x, int n) else
return gt(n - 1) * n; { return tongch(n / 10);
} if (n == 0) }
int tonggt(int n) return 1; int tongle(int n)
{ else {
if (n == 1) if (n > 0) if (n == 0)
return 1; return mu(x, n -1) * x; return 0;
else else else
return gt(n) + tonggt(n - 1); return mu(n, n +1) / x; if (n % 2 != 0)
} } return tongle(n / 10) +
int main() int main() n % 10;
else cout << "Nhap so he nhi phan : "; else
return tongle(n / 10); cin >> n; return(tong(a, n - 1) + a[n - 1]);
} cout << "So He thap phan cua so " << n }
int main() << " la : " << Bin2Dec(n) << endl;} int min(int a[], int n)
{ Bài 10. tìm ước số chung lớn nhất của hai số {
int n; nguyên. if (n == 1)
cout << "Nhap vao so nguyen : "; #include<cmath> return a[0];
cin >> n; int ucln(int a, int b) else
cout << "So chu so cua " << n << " la : " { if (a[n - 1] < min(a, n - 1))
<< dem(n) << endl; if (a == b) return a[n - 1];
cout << "So dao cua so " << n << " la : "; return a; else
dao(n); else return min(a, n - 1);
cout << "\nTong cac chu so chan la : " << if (a > b) }
tongch(n) << endl; a = a - b; int main()
cout << "Tong cac so le la : " << tongle(n) else {
<< endl;} b = b - a; int a[M], n;
Bài 8. chuyển từ hệ thập phân sang nhị phân return ucln(a, b); cout << "Nhap vao so phan tu cau mang : ";
int nhiphan(int n) } cin >> n;
{ int ucln1(int a, int b) cout << "Xuat mang : \n";
int a; { for (int i = 0; i < n; i++)
if (n == 0) int r; {
return 0; if (b == 0) a[i] = rand() % 20;
else return a; cout << " " << a[i];}
a = n % 2; { cout << "\nTong cac phan tu : " << tong(a, n) <<
return nhiphan(n / 2) * 10 + a; r = a % b; endl;
a = b; b = r; cout << "Gia tri nho nhat : " << min(a, n) << endl;}
} }
int main() return ucln1(a, b);
{
int n; }
cout << "Nhap vao so thap phan : "; int main()
cin >> n; {
cout << "So nhi phan la : " << nhiphan(n) << endl;} int a, b;
Bài 9.chuyển nhị phân sang hệ thập phân cout << "Nhap hai so nguyen a b : ";
int Bin2Dec(int n) cin >> a >> b;
{ cout << "UCLN cua " << a << " va " << b
if (n == 1) << " la : " << ucln(a, b) << endl;}
return 1; Bài 11. qui tính tổng các giá trị và tìm giá trị nhỏ
else nhất của một mảng 1 chiều
return (n % 10 + 2 * Bin2Dec(n / #include<cstdlib>
10)); const int M = 20;
} int tong(int a[], int n)
int main() {
{ if (n == 1)
int n; return 1;
CHƯƠNG 5 :STRUCT VÀ CLASS { Bài 3. kiểu dữ liệu NhanVien gồm : - Mã - Họ tên
Bài 2. Định nghĩa kiểu dữ liệu PhanSo gồm tử số Phanso PC; kiểu string - Năm vào làm ,Năm sinh kiểu int
và mẫu số (số nguyên). m tính tổng, hiệu, tích, PC.ts = p1.ts * p2.ms + p2.ts * p1.ms; - Nhập vào đầy đủ thông tin - Xuất lại thông tin .
thương của 2 phân số PC.ms = p1.ms * p2.ms; - Tính tuổi và thâm niên :
#include<cmath> PC = toigian(PC); #include<string>
struct Phanso return PC; struct Nhanvien
{ } {
int ts; Phanso trups(Phanso p1, Phanso p2) string ma;
int ms; { string hoten;
}; Phanso kq; int ns;
void nhap(Phanso& ps) kq.ts= p1.ts * p2.ms - p2.ts * p1.ms; int nvl;
{ kq.ms = p1.ms * p2.ms; };
cout << "Nhap tu so : "; if (kq.ts != 0) void nhap(Nhanvien& nv)
cin >> ps.ts; kq = toigian(kq); {
do return kq; cout << "Nhap ma nhan vien : ";
{ } getline(cin, nv.ma);
cout << "Nhap mau so : "; Phanso tichps(Phanso p1, Phanso p2) cout << "Nhap ho ten sinh vien : ";
cin >> ps.ms; { getline(cin,nv.hoten);
if (ps.ms == 0) Phanso kq; cout << "Nhap nam sinh : ";
cout << "Nhap sai nhap lai\n"; kq.ts = p1.ts * p2.ts; cin >> nv.ns;
} while (ps.ms == 0); kq.ms = p1.ms * p2.ms; cout << "Nhap nam vao lam viec : ";
} kq = toigian(kq); cin >> nv.nvl;
void xuat(Phanso ps) return kq; cout << endl;
{ } }
cout << ps.ts << "/" << ps.ms; Phanso thuongps(Phanso p1, Phanso p2) void xuat(Nhanvien nv)
} { {
int ucln(int a, int b) cout << "----XUAT THONG TIN----\n";
{ Phanso kq; cout << "Ma nhan vien : " << nv.ma << endl;
a = abs(a); b = abs(b); kq.ts = p1.ts * p2.ms; cout << "Ho va ten : " << nv.hoten << endl;
while (a != b) kq.ms = p1.ms * p2.ts; cout << "Nam sinh : " << nv.ns << endl;
if (a > b) kq = toigian(kq); cout << "Nam lam viec : " << nv.nvl << endl;
a = a - b; return kq; }
else } void tuoi(Nhanvien nv)
b = b - a; int main() {
return a; { int y = 2023;
} Phanso a, b, kq; int t = y - nv.ns;
Phanso toigian(Phanso ps) cout << "Nhap phan so thu nhat \n "; cout << "Tuoi cua nhan vien : " << t << endl;
{ nhap(a); }
Phanso kq; cout << "Nhap phan so thu hai \n "; void thamnien(Nhanvien nv)
int d = ucln(ps.ts, ps.ms); nhap(b); {
kq.ts = ps.ts / d; cout << "\nTong hai phan so : "; int y = 2023;
kq.ms = ps.ms / d; kq = congps(a, b); int tn = y - nv.nvl;
return kq; xuat(a); cout << "+"; xuat(b);cout<< " = "; cout << "Tham nien " << tn << " nam " << endl;
} xuat(kq); cout << endl; }
Phanso congps(Phanso p1, Phanso p2) TƯƠNG TỰ} int main()
{ cout << "Dia chi : " << sv.diachi << endl; }
Nhanvien nv; cout << "Nam sinh : " << sv.ns << endl; char s;
nhap(nv); cout << "Diem mon toan : " << sv.dt << endl; do
xuat(nv); cout << "Diem mon van : " << sv.dv << endl; {
tuoi(nv); cout << "Diem mon ngoai ngu : " << sv.dnn << int k;
thamnien(nv); endl; do
cout << endl;} } {
Bài 4. kiểu dữ liệu SinhVien gồm : - Mã số Họ tên void diemtb(Sinhvien sv) cout << "Nhap STT
- Địa chỉ kiểu string - Năm sinh kiểu int - Điểm { sinh vien muon truy xuat Hien co ( " << n << " sinn
toán - Điểm văn - Điểm ngoại ngữ kiểu double : - cout << "DIEM TRUNG BINH\n"; vien trong danh sach )" << endl;
Nhập vào thông (sĩ số không quá 45). cout << "MSSV: " << sv.ms << endl; cin >> k;
- Xuất người dùng yêu cầu (thông qua việc nhập cout << "Hoo va ten : " << sv.hoten << endl; if (k > n)
số thứ tự của sinh viên). double tb = ((sv.dt + sv.dv) * 2 + sv.dnn) / 5; cout << "Nhap sai nhap lai\n";
- Tính điểm trung bình và xuất lại thông tin mã cout << "Diem trung binh la : " << tb << endl; } while (k > n);
số sinh viên, họ tên và điểm trung bình của từng } cout << "Xuat thong tin sinh
sinh viên và xếp loại G K TB DTB. void xeploai(Sinhvien sv) vien thu : " << k << endl;
#include<string> { xuat(sv[k - 1]);
struct Sinhvien cout << "XEP LOAI SINH VIEN\n"; diemtb(sv[k - 1]);
{ double tb = ((sv.dt + sv.dv) * 2 + sv.dnn) / 5; xeploai(sv[k - 1]);
string ms, hoten, diachi; if (tb >= 8) cout << "\nTiep tuc truy xuat (Y
int ns = 0; cout << "Xep loai GIOI"; hoac N )" << endl;
double dt = 0; if (tb >= 6.5 && tb < 8) cin >> s;
double dv = 0; cout << "Xep loai KHA"; system("cls");
double dnn = 0; if (tb >= 5 && tb < 6) } while (s != 'N');
}; cout << "Xep loai TRUNG }
void nhap(Sinhvien& sv) BINH"; Bài 5. kiểu dữ liệu Sach : - Tên . - Tên tác giả kiểu
{ if (tb < 5) mảng 1 chiều char, tối đa 20 ký tự.
cout << "----NHAP THONG TIN SINH cout << "DUOI TRUNG BINH"; - Ngày tháng năm xuất bản kiểu struct NTN
VIEN----\n"; } (ngày, tháng, năm )
cout << "Ma so sinh vien: "; int main() Viết : - Nhập vào thông tin của tối đa 50 quyển
cin.ignore(); { sách. - Xuất lại thông tin của quyển sách nào đó
getline(cin, sv.ms); int n; #include<string>
cout << "\nHo va ten : ";getline(cin, sv.hoten); do struct ntn
cout << "Dia chi : ";getline(cin, sv.diachi); { {
cout << "Nam sinh : ";cin >> sv.ns; cout << "Nhap so luong sinh vien : "; int d, m, y;
cout << "Diem mon toan : ";cin >> sv.dt; cin >> n; };
cout << "Diem mon van : ";cin >> sv.dv; if (n > 45) struct sach
cout << "Diem mon ngoai ngu : ";cin >> sv.dnn; cout << "Nhap sai nhap lai\n"; {
cout << endl; } while (n > 45); char tensach[20];
} Sinhvien* sv = new Sinhvien[n]; char tentg[20];
void xuat(Sinhvien sv) for (int i = 0; i < n; i++) ntn ngayxb;
{ { };
cout << "****XUAT THONG TIN****";; cout << "Sinh vien thu " << i + 1 << endl; void nhap(sach* s, int n)
cout << "\nMa so sinh vien : " << sv.ms << endl; nhap(sv[i]); {
cout << "Ho va ten : " << sv.hoten << endl; system("cls");
cout << "Nhap thong tin cua " << n << " timtg(s, n, tg); }
quyen sach " << endl; delete[]s; cout << "\nXuat thong tin san pham : ";
for (int i = 0; i < n; i++) s = 0;} for (int i = 0; i < n; i++)
{ Bài 6. SanPham gồm : - Mã kiểu char (tối đa 10 {
cin.ignore(); ký tự) - Tên string. - Đơn giá double - Số lượng cout << "\nMa san pham : " << sp[i].masp;
cout << "\nQuyen sach thu " << i + 1 << endl; tồn khoi nt. cout << "\nTen san pham : " << sp[i].tensp;
cout << "\nTen sach : "; cin.getline(s[i].tensach, 20); Viết chương trình dùng cấp phát động và ký cout << "\nDon gia : " << sp[i].dongia;
cout << "\nTen tac gia : "; cin.getline(s[i].tentg, 20); pháp độ dời để: - Nhập thông tin cho tối đa 30 cout << "\nSo luong ton kho : " << sp[i].sltk;
cout << "\nNgay xuat ban : "; cin >> s[i].ngayxb.d; sản phẩm. - Xuất thông tin . - Sửa thông tin của cout << endl;
cout << "\nThang xuat ban : "; cin >> s[i].ngayxb.m; một sản phẩm bất kỳ . - Xóa thông tin của một }
cout << "\nNam xuat ban : "; cin >> s[i].ngayxb.y; sản phẩm bất kỳ . - Sắp xếp theo trình tự số cin.ignore();
} lượng tồn kho tăng dần. cout << "\nSua thong tin san pham ";
cin.ignore(); #include<string> cout << "Nhap ma san pham : "; cin.getline(Ma, 10);
} struct sanpham for (int i = 0; i < n; i++)
void timtg(sach* s, int n, char* tg) { {
{ char masp[11]; if (!strcmp(sp[i].masp, Ma))
bool kq = false; string tensp; {
cout << "Xuat thong tin tac gia : " << tg << endl; double dongia; cout<<"Ten san pham "<<sp[i].tensp<<" sua lai : ";
for(int i=0;i<n;i++) int sltk; getline(cin, sp[i].tensp);
if (!strcmp(s[i].tentg, tg)) }; cout << "Don gia " << sp[i].dongia << " sua lai : ";
{ int main() cin >> sp[i].dongia;
cout << "\nTen sach :" << s[i].tensach << endl; { cout << "luong ton kho" << sp[i].sltk << " sua lai : ";
cout << "Ngay xuat ban : " << s[i].ngayxb.d << "/" sanpham* sp, temp; cin >> sp[i].sltk;
<< s[i].ngayxb.m <<"/"<< s[i].ngayxb.y << endl; char Ma[11]; cin.ignore();
kq = true; int n; flag = true;
} bool flag = false; break;
if (!kq) do }
cout << "Khong tim thay tac gia " << tg << endl; {
} cout << "Nhap so sa pham : ";
int main() cin >> n; }
{ if (n < 1 || n>30) if (flag)
sach* s; cout << "Nhap sai nhap lai !!\n"; cout << "\nKhong tim thay san pham " << Ma;
int n; } while (n < 1 || n>30); cout << "\nXoa thong tin san pham ";
char tg[20]; sp = new sanpham[n]; cout << "\nNhap ma san pham"; cin.getline(Ma, 10);
do cout << "Nhap thong tin san pham : "; for (int i=0;i<n;i++)
{ for (int i = 0; i < n; i++) if (!strcmp(sp[i].masp, Ma))
cout << "Nhap so luong sach : "; { {
cin >> n; cout << "\nSan pham thu : " << i + 1; for (int k = 1; k < n - 1; k++)
if (n < 1 || n>50) cin.ignore(); sp[k] = sp[k + 1];
cout << "Nhap sai nhap lai \n"; cout << "\nMa san pham : "; n--;
} while (n < 1 || n>50); cin.getline(sp[i].masp, 10); break;
s = new sach[n]; cout << "\nTen san pham : "; }
nhap(s, n); getline(cin, sp[i].tensp); cout << "\nSap xep san pham theo so
cout << "Nhap ten tac gia can tim : "; cout << "\nDon gia : "; cin >> sp[i].dongia; luong ton kho tang dan : ";
cin.getline(tg, 20); cout << "\nso luong ton kho : "; cin >> sp[i].sltk; for(int i=0;i<n;i++)
for (int j = i + 1; j < n; j++) } while (mauso == 0); phanso p1, p2, p3, p4, p5, p6;
{ } cout << "\nNhap phan so thu nhat : " << endl;
temp = sp[i]; void phanso::xuat() p1.nhap();
sp[i] = sp[j]; { cout << "Nhap phan so thu hai :" << endl;
sp[j] = temp; cout << tuso << "/" << mauso; p2.nhap();
} } cout << "\nCac phep toan phan so : " << endl;
for (int i = 0; i < n; i++) void phanso::toigian() p3.cong(p1, p2);
{ { p4.tru(p1, p2);
cout << "\nMa san pham : " << sp[i].masp; double a = abs(tuso), b = abs(mauso); p5.nhan(p1, p2);
cout << "\nTen san pham : " << sp[i].tensp; while (a != b) p6.chia(p1, p2);
cout << "\nDon gia : " << sp[i].dongia; { p1.xuat(); cout << " + "; p2.xuat(); cout << " = ";
cout << "\nSo luong ton kho : " << sp[i].sltk << if (a > b) p3.xuat(); cout << endl;
endl; a -= b; p1.xuat(); cout << " - "; p2.xuat(); cout << " = ";
} else p4.xuat(); cout << endl;
delete[]sp; b -= a; p1.xuat(); cout << " * "; p2.xuat(); cout << " = ";
sp = 0; }; p5.xuat(); cout << endl;
cout << endl;} tuso /= a; p1.xuat(); cout << " : "; p2.xuat(); cout << " = ";
Bài 9. Viết lớp PhanSo với 2 biến tử số và mẫu số mauso /= b; p6.xuat(); cout << endl;}
có mức độ truy xuất là private. }
Các hàm tính toán và trả dữ liệu đều truy xuất ở void phanso::cong(phanso p1,phanso p2)
mức public. tính cộng, trừ, nhân, chia giữa 2 {
phân số. tuso = p1.tuso * p2.mauso + p2.tuso * p1.mauso;
#include<cmath> mauso = p1.mauso * p2.mauso;
class phanso toigian();
{ }
void phanso::tru(phanso p1, phanso p2)
private: {
double tuso, mauso; tuso = p1.tuso * p2.mauso - p2.tuso * p1.mauso;
public: mauso = p1.mauso * p2.mauso;
void nhap(); if (tuso != 0)
void xuat(); toigian();
void cong(phanso, phanso); }
void tru(phanso, phanso); void phanso::nhan(phanso p1, phanso p2)
void nhan(phanso, phanso); {
void chia(phanso, phanso); tuso = p1.tuso * p2.tuso;
void toigian(); mauso = p1.mauso * p2.mauso;
}; toigian();
void phanso::nhap() }
{ void phanso::chia(phanso p1, phanso p2)
do {
{ tuso = p1.tuso * p2.mauso;
cout << "Nhap vao tu so : "; cin >> tuso; mauso = p1.mauso * p2.tuso;
cout << "Nhap vao mau so : "; cin >> mauso; }
if (mauso == 0) int main()
cout << "Nhap sai nhap lai !!\n"; {

You might also like