Tải bản đầy đủ (.pdf) (62 trang)

Bài giảng lập trình nâng cao

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (453.65 KB, 62 trang )

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


×