Podcast
Questions and Answers
Mục đích chính của việc sử dụng hàm trong lập trình là gì?
Mục đích chính của việc sử dụng hàm trong lập trình là gì?
- Tăng độ phức tạp của chương trình.
- Giảm hiệu suất của chương trình.
- Chia bài toán lớn thành các bài toán nhỏ hơn, dễ quản lý và tái sử dụng. (correct)
- Làm cho code khó đọc hơn.
Sự khác biệt giữa hàm internal và external là gì?
Sự khác biệt giữa hàm internal và external là gì?
- Hàm internal được định nghĩa bởi người dùng, còn hàm external là các hàm có sẵn trong các thư viện. (correct)
- Hàm internal chỉ có thể sử dụng trong một file, còn hàm external có thể sử dụng ở mọi file.
- Hàm internal được cung cấp bởi thư viện hệ thống, còn hàm external do người dùng định nghĩa.
- Hàm internal có hiệu suất cao hơn hàm external.
Trong cú pháp định nghĩa hàm, phần nào chỉ định kiểu dữ liệu mà hàm sẽ trả về sau khi thực hiện?
Trong cú pháp định nghĩa hàm, phần nào chỉ định kiểu dữ liệu mà hàm sẽ trả về sau khi thực hiện?
- `<parameter list>`
- `<function name>`
- `<return type>` (correct)
- `<sequence of statements>`
Khi nào cần khai báo function prototype trong C++?
Khi nào cần khai báo function prototype trong C++?
Trong cơ chế truyền tham số pass-by-value
, điều gì xảy ra với các tham số?
Trong cơ chế truyền tham số pass-by-value
, điều gì xảy ra với các tham số?
Điều gì xảy ra khi bạn cố gắng sửa đổi một tham số được truyền theo kiểu pass-by-value
?
Điều gì xảy ra khi bạn cố gắng sửa đổi một tham số được truyền theo kiểu pass-by-value
?
Trong pass-by-reference
, điều gì thực sự được truyền vào hàm?
Trong pass-by-reference
, điều gì thực sự được truyền vào hàm?
Lợi ích chính của việc sử dụng pass-by-reference
so với pass-by-value
là gì?
Lợi ích chính của việc sử dụng pass-by-reference
so với pass-by-value
là gì?
Biến địa phương là gì?
Biến địa phương là gì?
Phạm vi hiệu lực của một biến địa phương được xác định như thế nào?
Phạm vi hiệu lực của một biến địa phương được xác định như thế nào?
CPU tương tác với bộ nhớ như thế nào?
CPU tương tác với bộ nhớ như thế nào?
Kích thước của mỗi ô nhớ trong bộ nhớ thường là bao nhiêu?
Kích thước của mỗi ô nhớ trong bộ nhớ thường là bao nhiêu?
Trong kiến trúc bộ nhớ, Big-endian là gì?
Trong kiến trúc bộ nhớ, Big-endian là gì?
Bộ nhớ ảo (virtual memory) cung cấp lợi ích gì?
Bộ nhớ ảo (virtual memory) cung cấp lợi ích gì?
Stack frame trong bộ nhớ được sử dụng để làm gì?
Stack frame trong bộ nhớ được sử dụng để làm gì?
Điều gì xảy ra với stack frame khi một hàm trả về (return)?
Điều gì xảy ra với stack frame khi một hàm trả về (return)?
Cho đoạn code sau:
void swap(int x, int y) {
int t = x; x = y; y = t;
}
int main() {
int a = 2, b = 3;
swap(a, b);
cout << a << "," << b;
}
Kết quả in ra màn hình là gì?
Cho đoạn code sau:
void swap(int x, int y) {
int t = x; x = y; y = t;
}
int main() {
int a = 2, b = 3;
swap(a, b);
cout << a << "," << b;
}
Kết quả in ra màn hình là gì?
Để hàm swap
có thể tráo đổi giá trị của hai biến, cơ chế truyền tham số nào cần được sử dụng?
Để hàm swap
có thể tráo đổi giá trị của hai biến, cơ chế truyền tham số nào cần được sử dụng?
Trong đoạn code sau, x
và y
được gọi là gì:
int f(int x, int y) { ... }
int main() {
int a = 2, b = 3;
f(a, b);
}
Trong đoạn code sau, x
và y
được gọi là gì:
int f(int x, int y) { ... }
int main() {
int a = 2, b = 3;
f(a, b);
}
Khi nào nên sử dụng const
cho tham số của hàm?
Khi nào nên sử dụng const
cho tham số của hàm?
Lợi ích của việc sử dụng hằng tham biến (ví dụ: const string& y
) thay vì tham trị (ví dụ: string x
) với kiểu dữ liệu lớn là gì?
Lợi ích của việc sử dụng hằng tham biến (ví dụ: const string& y
) thay vì tham trị (ví dụ: string x
) với kiểu dữ liệu lớn là gì?
Cho đoạn code sau:
int a = 1;
int& b = a;
b++;
cout << a << " " << b;
Kết quả in ra màn hình là gì?
Cho đoạn code sau:
int a = 1;
int& b = a;
b++;
cout << a << " " << b;
Kết quả in ra màn hình là gì?
Giá trị mặc định của tham số trong hàm có tác dụng gì?
Giá trị mặc định của tham số trong hàm có tác dụng gì?
Ưu điểm của việc sử dụng hàm đệ quy là gì?
Ưu điểm của việc sử dụng hàm đệ quy là gì?
Trong một hàm đệ quy, điều kiện dừng để làm gì?
Trong một hàm đệ quy, điều kiện dừng để làm gì?
Trong hàm đệ quy tính giai thừa, trường hợp cơ bản thường là gì?
Trong hàm đệ quy tính giai thừa, trường hợp cơ bản thường là gì?
Thứ tự thực hiện các lời gọi hàm trong stack frame của một chương trình như thế nào?
Thứ tự thực hiện các lời gọi hàm trong stack frame của một chương trình như thế nào?
Trong tìm kiếm nhị phân đệ quy, điều kiện nào xác định việc tiếp tục tìm kiếm trong nửa bên trái của mảng?
Trong tìm kiếm nhị phân đệ quy, điều kiện nào xác định việc tiếp tục tìm kiếm trong nửa bên trái của mảng?
Công thức đệ quy nào sau đây được sử dụng trong thuật toán tìm kiếm nhị phân đệ quy khi giá trị tại vị trí giữa (mid) lớn hơn giá trị cần tìm (key)?
Công thức đệ quy nào sau đây được sử dụng trong thuật toán tìm kiếm nhị phân đệ quy khi giá trị tại vị trí giữa (mid) lớn hơn giá trị cần tìm (key)?
Trong bài toán Tháp Hà Nội, công thức đệ quy nào mô tả số bước di chuyển cần thiết để chuyển n đĩa?
Trong bài toán Tháp Hà Nội, công thức đệ quy nào mô tả số bước di chuyển cần thiết để chuyển n đĩa?
Cho đoạn code sau về duyệt hoán vị:
permutation(s, lo+1, hi) // đệ quy phần còn lại
swap(s, lo, i); // quay lui về như cũ để thử cách khác
Mục đích của dòng code swap(s, lo, i);
là gì?
Cho đoạn code sau về duyệt hoán vị:
permutation(s, lo+1, hi) // đệ quy phần còn lại
swap(s, lo, i); // quay lui về như cũ để thử cách khác
Mục đích của dòng code swap(s, lo, i);
là gì?
Cho đoạn code sau:
void combination(k) {
if (k<1) {
output();
return;
}
member[k] = true;
combination(k-1);
member[k] = false;
combination(k-1);
}
Đoạn code này dùng để làm gì?
Cho đoạn code sau:
void combination(k) {
if (k<1) {
output();
return;
}
member[k] = true;
combination(k-1);
member[k] = false;
combination(k-1);
}
Đoạn code này dùng để làm gì?
Trong quá trình duyệt tổ hợp bằng đệ quy, điều gì xảy ra khi member[k] = true
?
Trong quá trình duyệt tổ hợp bằng đệ quy, điều gì xảy ra khi member[k] = true
?
Chọn phát biểu đúng về kiểu dữ liệu và bộ nhớ?
Chọn phát biểu đúng về kiểu dữ liệu và bộ nhớ?
Trong một hàm đệ quy để giải bài toán tháp Hà Nội, các tham số thường bao gồm những gì?
Trong một hàm đệ quy để giải bài toán tháp Hà Nội, các tham số thường bao gồm những gì?
Biến tham chiếu (reference) trong C++ có đặc điểm gì?
Biến tham chiếu (reference) trong C++ có đặc điểm gì?
Hàm nào sau đây là một ví dụ về một hàm external?
Hàm nào sau đây là một ví dụ về một hàm external?
Khi sử dụng bộ nhớ ảo, địa chỉ bộ nhớ mà chương trình sử dụng là địa chỉ gì?
Khi sử dụng bộ nhớ ảo, địa chỉ bộ nhớ mà chương trình sử dụng là địa chỉ gì?
Cách tổ chức dữ liệu trong bộ nhớ theo kiểu Little-endian là như thế nào?
Cách tổ chức dữ liệu trong bộ nhớ theo kiểu Little-endian là như thế nào?
Khi nào một frame được thêm vào function call stack?
Khi nào một frame được thêm vào function call stack?
Flashcards
Mục đích của Hàm
Mục đích của Hàm
Chia bài toán lớn thành các bài toán nhỏ hơn, tách khái niệm khỏi cài đặt, tránh lặp code.
Hàm Internal là gì?
Hàm Internal là gì?
Hàm do người dùng tự định nghĩa.
Hàm External là gì?
Hàm External là gì?
Hàm có sẵn trong thư viện (ví dụ: abs, sqrt).
Input/Output của hàm
Input/Output của hàm
Signup and view all the flashcards
Function Prototype là gì?
Function Prototype là gì?
Signup and view all the flashcards
Cú pháp khai báo prototype hàm
Cú pháp khai báo prototype hàm
Signup and view all the flashcards
Truyền tham số theo giá trị (Pass-by-value)
Truyền tham số theo giá trị (Pass-by-value)
Signup and view all the flashcards
Truyền tham số theo tham chiếu (Pass-by-reference)
Truyền tham số theo tham chiếu (Pass-by-reference)
Signup and view all the flashcards
CPU và Bộ nhớ
CPU và Bộ nhớ
Signup and view all the flashcards
Lưu dữ liệu trong bộ nhớ
Lưu dữ liệu trong bộ nhớ
Signup and view all the flashcards
Big-endian là gì?
Big-endian là gì?
Signup and view all the flashcards
Little-endian là gì?
Little-endian là gì?
Signup and view all the flashcards
Bộ nhớ ảo (Virtual memory)
Bộ nhớ ảo (Virtual memory)
Signup and view all the flashcards
Biến là gì?
Biến là gì?
Signup and view all the flashcards
Biến địa phương
Biến địa phương
Signup and view all the flashcards
Tham số trong stack
Tham số trong stack
Signup and view all the flashcards
Khi một lời gọi hàm được chạy
Khi một lời gọi hàm được chạy
Signup and view all the flashcards
Khi hàm trả về (return)
Khi hàm trả về (return)
Signup and view all the flashcards
Pass-by-value (tham trị)
Pass-by-value (tham trị)
Signup and view all the flashcards
Pass-by-reference (tham biến)
Pass-by-reference (tham biến)
Signup and view all the flashcards
Đối số và Tham số
Đối số và Tham số
Signup and view all the flashcards
Hằng tham số
Hằng tham số
Signup and view all the flashcards
Hằng tham biến
Hằng tham biến
Signup and view all the flashcards
Biến tham chiếu
Biến tham chiếu
Signup and view all the flashcards
Giá trị mặc định của tham số
Giá trị mặc định của tham số
Signup and view all the flashcards
Hàm đệ quy là gì?
Hàm đệ quy là gì?
Signup and view all the flashcards
Hàm đệ quy
Hàm đệ quy
Signup and view all the flashcards
Tìm kiếm nhị phân đệ quy
Tìm kiếm nhị phân đệ quy
Signup and view all the flashcards
Công thức đệ quy
Công thức đệ quy
Signup and view all the flashcards
Trường hợp cơ bản của tìm kiếm nhị phân
Trường hợp cơ bản của tìm kiếm nhị phân
Signup and view all the flashcards
Study Notes
Hàm
- Hàm giúp chia bài toán phức tạp thành các bài toán nhỏ hơn, dễ quản lý hơn.
- Hàm tách khái niệm khỏi cài đặt, giúp chương trình dễ hiểu và tái sử dụng code.
- Lập trình có cấu trúc sử dụng hàm để tránh lặp code.
Phân Loại Hàm
- Internal: Hàm do người dùng tự định nghĩa
- External: Hàm được nhóm thành các thư viện (ví dụ:
abs
,sqrt
,exp
trongmath
,iostream
,stdlib
).
Input/output
- Hàm nhận tham số đầu vào và trả về một giá trị.
Định Nghĩa và Khai Báo Hàm
- Hàm đặt sau
main()
cần khai báo prototype trước. - Hàm đặt trước
main()
không cần prototype. - Cú pháp định nghĩa hàm:
<return type> <function name>(<parameter list>) { <local declarations> <sequence of statements> }
. - Cú pháp khai báo prototype hàm:
<return type> <function name>(<parameter list>);
.
Truyền Tham Số
- Pass-by-value: Giá trị của tham số được sao chép vào hàm
- Pass-by-reference: Tham số là một tham chiếu đến biến gốc
CPU và Bộ Nhớ
- CPU tính toán trên dữ liệu được lưu trữ trong các thanh ghi.
- Dữ liệu được chuyển giữa bộ nhớ và các thanh ghi.
- Kích thước mỗi ô nhớ là 8 bit, tương đương với 1 byte.
- Dữ liệu lớn hơn cần một chuỗi byte liên tiếp, xác định bởi địa chỉ byte đầu tiên và kích thước.
Bit và Giá Trị Dữ Liệu
- Big-endian: Thứ tự byte từ trái sang phải, địa chỉ byte tăng dần (ví dụ: mainframe, IPv4).
- Little-endian: Thứ tự byte từ trái sang phải, địa chỉ byte giảm dần (ví dụ: Intel x86, x86-64).
- Thứ tự byte mã hóa và giải mã cần nhất quán.
Bộ Nhớ Ảo
- Mỗi tiến trình được cấp một không gian bộ nhớ riêng.
- Hệ điều hành ánh xạ 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.
Biến
- Biến là tên của một vùng bộ nhớ cụ thể.
- Biến lưu trữ nội dung có thể đọc/ghi.
- Kiểu dữ liệu xác định cách đọc giá trị của biến (số ô nhớ và cách tính giá trị).
- Biến địa phương được khai báo trong một khối lệnh và có phạm vi hiệu lực tương ứng.
Stack Frame
- Biến trong vùng bộ nhớ của lời gọi hàm được gọi là stack frame.
- Khi hàm được gọi, bản sao của đối số được đẩy vào stack, lưu trữ địa chỉ trả về.
- Các biến địa phương được cấp phát trong stack.
- Khi hàm trả về, giá trị trả về được lưu vào thanh ghi hoặc stack.
- Frame của hàm bị đẩy ra khỏi stack, bao gồm biến địa phương, địa chỉ trả về, và tham số.
Function Call Stack
- Stack memory là khu vực bộ nhớ dùng để quản lý các lời gọi hàm.
- Mỗi lời gọi hàm tạo ra một "frame" trên stack để lưu trữ thông tin của hàm đó.
Tại Sao swap(int x, int y)
Không Hoạt Động?
- Trong pass-by-value,
x
vày
chỉ là bản sao củaa
vàb
. - Các thay đổi trong hàm
swap
không ảnh hưởng đếna
vàb
trongmain()
. - Khi hàm
swap
kết thúc, frame của nó bị loại bỏ khỏi stack.
Cơ Chế Truyền Tham Số
- Pass-by-value: Tham số là bản sao của đối số. Thay đổi tham số không ảnh hưởng đối số gốc.
- Pass-by-reference: Tham số là "nickname" của đối số. Thay đổi tham số sẽ thay đổi đối số.
- Với pass-by-value, x và y còn gọi là tham trị
- Với pass-by-reference, x và y còn gọi là tham biến
- Hằng tham số (ví dụ:
const string x
) không được sửa đổi trong hàm. - Nên sử dụng
const
cho tất cả tham số không cần sửa đổi để tránh lỗi. - Hằng tham biến (ví dụ:
const string& y
) tương đương tham trị về hiệu ứng phụ, nhưng hiệu năng tốt hơn khi làm việc với kiểu dữ liệu lớn do tránh được việc sao chép giá trị.
Biến Tham Chiếu
- Biến tham chiếu là một "nick" khác của một biến đã tồn tại.
Giá Trị Mặc Định của Tham Số
- Tham số có thể có giá trị mặc định (ví dụ:
int divide(int a, int b = 2)
). - Khi gọi hàm mà không truyền giá trị cho tham số này, giá trị mặc định sẽ được sử dụng.
- Chỉ các tham số cuối cùng mới được phép có giá trị mặc định.
Hàm Đệ Quy:
- Hàm đệ quy là hàm gọi chính nó.
- Cần có trường hợp cơ bản để dừng đệ quy.
Dưới đây là cách hàm đệ quy hoạt động và ví dụ về hàm tính giai thừa:
- Trường hợp cơ bản: Khi
x <= 1
, hàm trả về 1. - Trường hợp đệ quy: Khi
x > 1
, hàm trả vềx * factorial(x-1)
. - Hàm đệ quy đưa bài toán về các bài toán con nhỏ hơn, hội tụ về trường hợp cơ bản.
Ví dụ:
long factorial(long x) {
if (x > 1)
return (x * factorial(x-1));
else
return 1;
}
Tìm Kiếm Nhị Phân Đệ Quy:
- Tìm kiếm nhị phân (binary search) là một thuật toán tìm kiếm hiệu quả trên mảng đã sắp xếp.
- Thuật toán này có thể được thực hiện đệ quy.
Công thức đệ quy:
- Nếu
a[mid] < key
: Tìm kiếm trong nửa phải của mảng:search(mid+1, high)
- Nếu
a[mid] > key
: Tìm kiếm trong nửa trái của mảng:search(low, mid-1)
Các trường hợp cơ bản:
a[mid] == key
: Tìm thấy phần tử.low > high
: Không tìm thấy phần tử.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.