1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình nâng cao - Chương 4: Hàm

80 33 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 466,71 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Lập trình nâng cao - Chương 4: Hàm cung cấp cho người học các kiến thức: Mục đích sử dụng, cách sử dụng, cơ chế truyền tham số, biến địa phương và tổ chức bộ nhớ, hàm đệ quy. Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

Hàm Lập trình nâng cao

Trang 3

–  Chia bài toán lớn thành các bài toán nhỏ hơn –  Tách khái niệm ra khỏi cài đặt

•  Bạn có phải biết code của hàm sqrt()?

Ø  Chương trình dễ hiểu hơn –  Tránh code lặp đi lặp lại

Ø Lập trình có cấu trúc – structured programming

Trang 4

thành các thư viện math, iostream, stdlib…

Trang 5

Các tham số à hàm à giá trị trả về

Trang 6

Hàm đặt sau main cần có funcpon prototype đặt trước

int absolute( int x); // function prototype

Trang 7

Hàm đặt trước không cần prototype

int absolute( int x) { // function definition

Trang 9

int absolute( int x);

<return type> <funcpon name>(<parameter list>);

Trang 13

Cấu trúc bộ nhớ

Trang 14

các thanh ghi

Trang 17

phân một không gian bộ nhớ riêng

–  Hệ điều hành ánh xạ một phần bộ nhớ logic với bộ nhớ vật lý

–  Địa chỉ trong các không gian khác nhau là độc lập

Trang 18

Biến và các lời gọi hàm

Trang 20

khối lệnh đó

Trang 21

Biến trong vùng bộ nhớ của lời gọi hàm – stack frame

Lower address

Stack frame của f()

p2

b

a Return address

p1

Đáy stack

Đỉnh stack

Trang 22

Lower address

p2

b

a Return address

p1

Đáy stack

Đỉnh stack

Trang 23

Lower address

p2

b

a Return address

p1

Đáy stack

Đỉnh stack

Trang 24

Funcpon call stack (Stack frame cho lời gọi hàm)

Lower address

Stack memory Frame for main()

Trang 25

Lower address

Stack memory Frame for main()

Trang 26

int main() { a();

return 0;

} int a() { b();

c();

return 0;

} int b() {return 0;}

int c() {return 0;}

Higher address

Lower address

Stack memory

Frame for main()

main()

gọi a()

Frame for a()

Trang 27

Lower address

Stack memory

Frame for main() Frame for a()

Trang 28

int main() { a();

return 0;

} int a() { b();

c();

return 0;

} int b() {return 0;}

int c() {return 0;}

Higher address

Lower address

Stack memory

Frame for main()

a() gọi b()

Frame for a()

Frame for b()

Trang 29

int main() { a();

return 0;

} int a() { b();

c();

return 0;

} int b() {return 0;}

int c() {return 0;}

Higher address

Lower address

Stack memory

Frame for main()

b() trả về

Frame for a()

Trang 30

Lower address

Stack memory

Frame for main() Frame for a()

Trang 31

int main() { a();

return 0;

} int a() { b();

c();

return 0;

} int b() {return 0;}

int c() {return 0;}

Higher address

Lower address

Stack memory

Frame for main()

a() gọi c()

Frame for a()

Frame for c()

Trang 32

int main() { a();

return 0;

} int a() { b();

c();

return 0;

} int b() {return 0;}

int c() {return 0;}

Higher address

Lower address

Stack memory

Frame for main()

c() trả về

Frame for a()

Trang 33

Lower address

Stack memory

Frame for main() Frame for a()

Trang 34

int main() { a();

return 0;

} int a() { b();

c();

return 0;

} int b() {return 0;}

int c() {return 0;}

Higher address

Lower address

Stack memory

Frame for main()

a() trả về

Trang 35

Cơ chế truyền tham số

Trang 36

Đỉnh stack Frame for

main()

Trang 37

Đỉnh stack

t : ??

Frame for main()

Frame for my_swap()

Trang 38

Đỉnh stack

t : 2

Frame for main()

Frame for my_swap()

Trang 39

Đỉnh stack

t : 2

Frame for main()

Frame for my_swap()

Trang 40

Đỉnh stack

t : 2

Frame for main()

Frame for my_swap()

Trang 41

Đỉnh stack

Frame for main()

Frame for my_swap() no longer exists

Trang 42

Đỉnh stack

Frame for main()

Frame for my_swap() no longer exists

Trang 45

Đối số / Tham số Tham trị / Tham biến

int main() { int a = 2;

int b = 3;

g(b);

}

Trang 46

f không được sửa x, g không được sửa y

Trang 47

Nên dùng const cho tất cả các tham số

không nên bị sửa giá trị

Lý do: đề phòng lỗi của lập trình viên

Trang 50

Chỉ áp dụng được cho các tham số cuối

Trang 51

Hàm đệ quy

Trang 52

}

Trang 53

}

Trang 54

}

Trang 55

Frame for swap()

Trang 56

Đỉnh stack

Frame for swap()

Trang 57

Đỉnh stack

Frame for swap()

x = 3

Trang 58

Đỉnh stack

Frame for swap()

x = 3 factorial(2)

x = 2

Trang 59

Đỉnh stack

Frame for swap()

x = 3 factorial(2)

x = 2 factorial(1)

x = 1

Trang 60

factorial(4)

x = 4 factorial(3)

x = 3 factorial(2)

x = 2

Trang 61

Đỉnh stack

Frame for swap()

x = 3

Return 2

Trang 62

Đỉnh stack

Frame for swap()

Trang 63

Frame for swap()

main() res = 24

Trang 64

Tìm kiếm nhị phân đệ quy

Trang 65

•  Tìm từ 0 đến 8

Trang 69

hŒp://www.drdobbs.com/security/anatomy-of-a-stack-smashing-aŒack-and-h/240001832

Trang 70

•  f(n): số bước chuyển n đĩa từ cọc này -> cọc khác

Trang 71

•  factorial(n) = factorial(n-1) * n

Trang 72

•  factorial(n) = factorial(n-1) * n

Trang 73

•  factorial(n) = factorial(n-1) * n

•  Tháp Hà Nội f(n) = f(n-1) …

•  move(n-1, 1, 2)

Trang 74

•  factorial(n) = factorial(n-1) * n

Trang 75

•  factorial(n) = factorial(n-1) * n

Trang 76

}

Trang 80

C(N) = C(N-1) + ([N] + s), với mọi s thuộc C(N-1) Combinapon(“abc”, 3) -> in ra 8 kết quả

Ngày đăng: 15/05/2020, 22:54

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm