LẬP TRÌNH NÂNG CAO
KHOA CNTT - 2022
PHAN HỒ DUY PHƯƠNG
3/29/2022
PHAN HỒ DUY PHƯƠNG
NỘI DUNG
1. Đệ qui
2. Chuỗi
3. Tập tin
4. Đa luồng
5. Phân tích thuật tốn
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
LẬP TRÌNH NÂNG CAO
3/29/2022
Phan Hồ Duy Phương
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
Định nghĩa: là phương pháp lập trình cho phép
một hàm gọi lại chính nó.
VD:
void Test(){
Test();
}
=> phải có điểm dừng
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
Ưu điểm:
oThuận lợi cho việc biểu diễn bài toán
oLập trình tinh gọn
Khuyết điểm:
oKhơng tối ưu về thời gian
oGây tốn bộ nhớ.
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
Chương trình đệ qui được chia 2 phần:
Phần cơ sở: Điểm dừng hay điều kiện thốt khởi
chương trình.
Phần đệ qui: Gọi lại chính nó
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
oĐệ qui tuyến tính (Linear Recusion)
oĐệ qui nhị phân (Binary Recursion)
oĐệ qui lồng (Nested Recursion)
oĐệ qui hỗ tương (Mutual Recursion)
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
Đệ qui tuyến tính (Linear Recusion): Mỗi lần
thực hiện gọi đệ qui một lần.
VD:
int tinhGiaiThua(int n){
if(n==1)
return 1;
else
return n*tinhGiaiThua(n-1);
}
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
Đệ qui nhị phân (Binary Recusion): Mỗi lần thực
hiện gọi đệ qui hai lần.
VD:
int Combine(int n, int k){
if(k==0||k==n)
return 1;
else
return
Combine(n-1,k)+ Combine(n-1,k-1);
}
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
Đệ qui lồng (Nested Recusion)
VD:
int Ackerman(int n, int n){
if(m==0)
return n+1;
else
if(n==0) return Ackerman(m-1,1);
else
return
Ackerman(m-1, Ackerman(m,n-1));
}
3/29/2022
PHAN HỒ DUY PHƯƠNG
ĐỆ QUI
Đệ qui hỗ tương (Mutual Recusion)
VD:
bool isEven(int n)
bool isOdd(int n)
{
{
if(n==0)
if(n==1)
return true;
return true;
else
else
return isOdd(n-1);
return isEven(n-1);
}
}
3/29/2022
PHAN HỒ DUY PHƯƠNG
BÀI TẬP
1. Đổi sang hệ nhị phân của số nguyên dương n
o Nếu n == 0 thì => Bn = 0
o Bn = Bn/2 * 10 + b; với b = n%2
2. Tính P(n)=1.3.5...(2n+1) với n>=0
o Nếu n= 0 thì => Pn = 1
o Pn = (2n+1) * P(n-1)
3/29/2022
PHAN HỒ DUY PHƯƠNG
NỘI DUNG
1. Đệ qui
2. Chuỗi và các thao tác trên chuỗi
3. Tập tin
4. Đa luồng
5. Phân tích thuật tốn
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
VÀ CÁC THAO TÁC
TRÊN CHUỖI
LẬP TRÌNH NÂNG CAO
3/29/2022
Phan Hồ Duy Phương
PHAN HỒ DUY PHƯƠNG
CHUỖI
KHÁI NIỆM
oKiểu char chỉ chứa được 1 ký tự => để lưu trữ
một chuỗi các ký tự (nhiều ký tự) ta sử dụng một
mảng (array) các ký tự.
oChuỗi ký tự kết thúc bằng ký tự ‘\0’ (null)
oĐộ dài chuỗi = kích thước mảng – 1
VD:
string s;
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
KHAI BÁO CHUỖI
oKhai báo :
string s = “\t Mekong \nUni”;
Console.Write(“{0}”,s);
//
Mekong
// Uni
oKhai báo verbatim (@) – nguyên thể:
string s = @“\tMekong \n Un i”;
Console.Write(“{0}”,s);
// \tMekong \n Uni
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
KHAI BÁO CHUỖI
oKhai báo chuỗi interpolation($) :
int a = 5;
string s = $“Gia tri a = {a}”;
Console.Write(s);
// Gia tri a = 5
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
NHẬP XUẤT CHUỖI
string s;
Console.Write(“Nhap chuoi:”);
S = Console.ReadLine();
Console.Write(“{0}”,s);
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
CÁC HÀM THAO TÁC TRÊN CHUỖI
o s.Length: độ dài chuỗi s
VD: string s = “mekong”;
int len = s.Length; // len = 6
o .ToLower(): chuyển chuỗi s thành chuỗi thường
VD: string s = “MeKong”;
s = s.ToLower();
Console.Write(s); // mekong
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
CÁC HÀM THAO TÁC TRÊN CHUỖI
o s.ToCharArray: chuyển đổi thành mảng ký tự
VD: string s = “mekong”;
char[] arr = s.ToCharArray()
foreach(char c in arr){
Console.Write(c);
}
3/29/2022
PHAN HỒ DUY PHƯƠNG