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
CHUỖI
o s.ToUpper(): chuyển chuỗi s thành chuỗi hoa
VD: string s = “MeKong”;
s = s.ToUpper();
Console.Write(s); // MEKONG
o s.Contrain(s1): Kiểm tra chuỗi s có chứa chuỗi
con s1
VD: string s = “Mekong”;
bool b = s.Contrain(“kong”);
// giá trị b là true
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
o String.Compare(s1,s2,true): so sánh hai chuỗi s1 và
s2, không phân biệt hoa thường.
o -1 nếu s1 < s2
o 0 nếu s1 == s2
o 1 nếu s1 > s2
VD:
string s1 = “mekong”;
string s2 = “Mekong”;
int i = String.Compare(s1,s2,true);
// i == 0
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
o String.Compare(s1,s2,false) hay s1.CompareTo(s2):
so sánh hai chuỗi s1 và s2, phân biệt hoa thường.
o -1 nếu s1 < s2
o 0 nếu s1 == s2
o 1 nếu s1 > s2
VD:
string s1 = “mekong”;
string s2 = “Mekong”;
int i = String.Compare(s1,s2,false);
// i > 0
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
o s1.Equals(s2): kiểm tra (so sánh) chuỗi s1 có
bằng s2 hay không, phân biệt hoa thường.
VD:
string s1 = “mekong”;
string s2 = “Mekong”;
bool b = s1.Equals(s2);
Console.Write(b); // False
3/29/2022
PHAN HỒ DUY PHƯƠNG
CHUỖI
o s1.IndexOf(s2): Tìm vị trí xuất hiện đầu tiên
của s2 trong s1.
oTìm thấy: Trả về vị trí xuất hiện đầu tiên của s2
trong s1.
oKhơng tìm thấy: trả về -1
o VD:
string s1 = “Mekong Uni”;
string s2 = “Mekong”;
if(s1.IndexOf(s2)>= 0)
Console.Write(“Tim thay s2”);
3/29/2022
PHAN HỒ DUY PHƯƠNG