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

Ip 10 advanced topics

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 (416.5 KB, 18 trang )

Một số vấn đề nâng cao
GV. Nguyễn Minh Huy

Nhập môn lập trình - GV. Nguyễn Minh Huy

1


Nội dung




Mảng động
động..
Đệ quy
quy..
Các thuật tốn thơng dụng
dụng..

Nhập mơn lập trình - GV. Nguyễn Minh Huy

2


Nội dung




Mảng động.


động.
Đệ quy
quy..
Các thuật tốn thơng dụng
dụng..

Nhập mơn lập trình - GV. Nguyễn Minh Huy

3


Mảng động


Vấn đề với mảng tĩnh
tĩnh::
Phải khai báo kích thước tối đa.
đa.
 Không phải lúc nào cũng dùng hết
hết..
 Tốn nhiều bộ nhớ
nhớ..
 Nhu cầu mảng kích thước tùy biến
biến..





Khái niệm con trỏ

trỏ::


Biến “lưu động
động”.
”.
 Có thể “định cư”
cư” ở nhiều ô nhớ
nhớ..
 “Trỏ
Trỏ”” đến các ô nhớ khác nhau
nhau..

Nhập mơn lập trình - GV. Nguyễn Minh Huy

4


Mảng động


Con trỏ trong C:
Khai báo
báo:: liệu>
> **<Tên con trỏ>
trỏ>;
 Lấy địa chỉ biến
biến::

trỏ>
> = &&<Tên biến>
biến>;


int x = 5;
int y = 6;
int *p
*p;;
p = &x;
&x;


11
x 5

50
y 6

73
p 11

Truy xuất dữ liệu ô nhớ
nhớ::
biến>
> = **<Tên con trỏ>
trỏ>;

biến>
> = <Tên con trỏ>[
trỏ>[<
nhớ>
> ];
int z = *p;
*p;
int t = p[2]
p[2];;

Nhập môn lập trình - GV. Nguyễn Minh Huy

5


Mảng động


Con trỏ trong C:


Lệnh xin cấp vùng nhớ
nhớ::







Cú pháp
pháp:: calloc
calloc((nhớ>,
>, <
kích thước mỗi ơ nhớ
nhớ>
> );
Trả về:
về: địa chỉ vùng nhớ (thành công
công),
), NULL ((thất
thất bại).
bại).
Địa chỉ trả về phải cùng kiểu với con trỏ nhận
nhận..

Lệnh thu hồi vùng nhớ
nhớ::


Cú pháp
pháp:: free(
free(<
trỏ>
> );


int *p = (int *) calloc(
calloc( 5, sizeof(
sizeof( int ) );
p 65

0

0

0

0

0

HocSinh *h = (HocSinh *) calloc
calloc(( 3, sizeof(
sizeof( HocSinh ) );
h 78
free(p);
free(p
free(h
free(
h );
Nhập mơn lập trình - GV. Nguyễn Minh Huy

hoten:???
ngaysinh:???
diemvan:???
diemtoan:???


hoten:???
ngaysinh:???
diemvan:???
diemtoan:???

hoten:???
ngaysinh:???
diemvan:???
diemtoan:???
6


Nội dung




Mảng động
động..
Đệ quy
quy..
Các thuật tốn thơng dụng
dụng..

Nhập mơn lập trình - GV. Nguyễn Minh Huy

7



Đệ quy


Khái niệm đệ quy
quy::
Định nghĩa một khái niệm dựa trên chính nó.
nó.
 Cấu trúc
trúc::







Ví dụ:
dụ: định nghĩa lũy thừa xn





Phần định nghĩa trường hợp cơ bản (tường minh).
Phần định nghĩa đệ quy
quy..
LT(x, 0) = 1.
LT(x, n) = x * LT(x, n – 1), n > 0.

Ưu điểm

điểm::



Nêu bản chất vấn đề.
đề.
Ngắn gọn
gọn,, dễ hiểu
hiểu..

Nhập mơn lập trình - GV. Nguyễn Minh Huy

8


Đệ quy


Hàm đệ quy
quy::
Dùng cài đặt khái niệm đệ quy
quy..
 Cấu trúc
trúc::



<Kiểu trả về>
về> <Tên hàm>(
hàm>(<

<Danh sách tham số>
số>)
{
if ((bản>)
>)
<Xử lý trường hợp cơ bản>
bản>;
else
quy>
>;
}
long luythua
luythua(float
(float x, int n)
{
if ( n == 0 )
return 1;
1;
return x * luythua
luythua(x,
(x, n – 1);
1);
}
Nhập môn lập trình - GV. Nguyễn Minh Huy

9



Nội dung




Mảng động
động..
Đệ quy
quy..
Các thuật tốn thơng dụng.
dụng.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

10


Các thuật tốn thơng dụng


Bài tốn sắp xếp
xếp::
Nhập vào mảng N số nguyên
nguyên..
 Sắp xếp và xuất mảng theo thứ tự tăng dần
dần..
 Thuật toán Interchange Sort.
 Thuật toán Selection Sort.
 Thuật tốn Quicksort

Quicksort..
s


Nhập mơn lập trình - GV. Nguyễn Minh Huy

11


Các thuật tốn thơng dụng


Bài tốn sắp xếp
xếp::


Nghịch thế:
thế:





Cặp phần tử đứng không đúng thứ tự.
tự.
(ai, aj) nghịch thế  i < j và ai > aj.

Thuật toán Interchange Sort:




Xét tất cả các cặp phần tử mảng
mảng..
Với mỗi cặp
cặp,, hoán vị chúng nếu nghịch thế.
thế.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

12


Các thuật tốn thơng dụng


Bài tốn tìm kiếm:
kiếm:


Trị chơi đốn số:
số:
B1: người chơi nghĩ ra một số nguyên N (1 <= N <= 100).
 B2: máy đưa ra dự đoán một số nguyên K.
 B3: người chơi cho biết K lớn hơn
hơn,, nhỏ hơn hay bằng N.
 B4: nếu bằng  kết thúc trò chơi
chơi..
ngược lại  quay lại B2.
Hãy đề ra một thuật toán để số lần đoán của máy là ít nhất
nhất..



 Tìm kiếm tuần tự:
tự: O(n).
 Tìm kiếm nhị phân
phân:: O(log2n).

Nhập mơn lập trình - GV. Nguyễn Minh Huy

13


Một số thuật tốn thơng dụng


Bài tốn tìm kiếm:
kiếm:


Tìm kiếm nhị phân
phân::



B1: đặt (left, right) là đoạn cần tìm
tìm..
B2: nếu chiều dài đoạn cần tìm = 0  kết thúc thất bại.
bại.
ngược lại
B2.1: kiểm tra phần tử giữa đoạn

đoạn..
B2.2: nếu thỏa điều kiện tìm  kết thúc thành cơng
cơng..
ngược lại
B2.2.1: thu hẹp một nửa đoạn cần tìm
(dựa vào phần tử giữa
giữa).
).
B2.2.2: quay lại B2.

Nhập mơn lập trình - GV. Nguyễn Minh Huy

14


Tóm tắt


Con trỏ
trỏ::
Biến “tham chiếu
chiếu”,
”, ““trỏ
trỏ”” đến các ơ nhớ
nhớ..
 Tốn tử &: lấy địa chỉ ơ nhớ
nhớ..
 Tốn tử *: truy xuất ô nhớ
nhớ..





Đệ quy
quy::
Định nghĩa một khái niệm dựa trên chính nó.
nó.
 Hàm đệ quy
quy:: hàm gọi lại chính mình
mình..




Thuật tốn thơng dụng
dụng::
Sắp xếp Interchange Sort.
 Tìm kiếm nhị phân
phân..


Nhập mơn lập trình - GV. Nguyễn Minh Huy

15


Bài tập


Bài tập 10.1:

Thông tin một học sinh bao gồm
gồm:: họ tên,
tên, điểm văn
văn,, điểm toán
toán..
File input.txt chứa danh sách học sinh như sau
sau::
- Dòng đầu tiên chứa
chứa:: N ((số
số học sinh trong danh sách
sách).
).
- N dòng tiếp theo
theo,, dòng i (1 <= i <= N) chứa:
chứa: hoteni vani toani
(thông tin học sinh thứ i trong danh sách
sách).
).
Viết chương trình C (sử
(sử dụng kiểu cấu trúc và mảng động
động):
):
- Nhập danh sách học sinh từ file input.txt
- Xuất danh sách học sinh giỏi (điểm trung bình >= 8)
theo thứ tự điểm trung bình giảm dần vào
file output.txt (cấu
(cấu trúc tương tự file input.txt).

Nhập mơn lập trình - GV. Nguyễn Minh Huy


16


Bài tập


Bài tập 10.2:
Viết chương trình C tìm ước chung lớn nhất (sử dụng đệ quy
quy)) như sau
sau::
- Nhập vào hai số nguyên dương a, b.
- Tìm và xuất ước chung lớn nhất của a, b ((thuật
thuật tốn Euclid).

Nhập mơn lập trình - GV. Nguyễn Minh Huy

17


Bài tập


Bài tập 10.3:
Viết chương trình C tính dãy Fibonacci ((sử
sử dụng đệ quy
quy)) như sau
sau::
- Nhập vào số nguyên N >= 0.
- Xuất các số Fibonacci từ F0 đến FN.


Nhập mơn lập trình - GV. Nguyễn Minh Huy

18



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×