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

Bài giảng Lập trình nâng cao - Phan Hồ Duy Phương

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 (903.28 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



×