Kiến thức

Hàm swap trong lập trình C/C++ – Hàm hoán vị giá trị 2 biến

Hàm swap hoán đổi giá trị của 2 biến cho nhau là hàm mà trong các bài toán thực tế ta sẽ cần áp dụng khá nhiều, ví dụ như trong bài toán sắp xếp. Vậy trong bài viết này chúng ta sẽ cùng tìm hiểu tư tưởng bài toán hoán vị, cũng như cùng nhau đi viết hàm hoán vị với lập trình C/C++ nhé.

DANH SÁCH BÀI VIẾT Hàm memset trong C/C++ – Sao chép ký tự x tới n ký tự trong một chuỗi Hàm swap trong lập trình C/C++ – Hàm hoán vị giá trị 2 biến Hàm tính lũy thừa(số mũ) trong lập trình C/C++ Hàm tính căn bậc 2 trong lập trình C/C++ Cách tính căn bậc 3, căn bậc 4 và căn bậc n trong lập trình C/C++

Tư tưởng bài toán hoán vị

Hàm swap trong lập trình C/C++ - Hàm hoán vị giá trị 2 biến

Giả sử bạn đang có 2 cốc nước, ta gọi là cốc A đang đựng nước lọc và cốc B đang đựng nước cam. Vậy làm sao để có thể hoán đổi cốc A đựng nước cam và ngược lại.

Để làm được việc đó chắc chắn ta sẽ cần tới một cốc phụ gọi là cốc C nữa.

  • Bước 1: Ta đổ cốc nước lọc A vào C.
  • Bước 2: Đổ cốc nước cam B vào A.
  • Bước 1: Đổ cốc nước lọc trong C vào cốc B.
Chuyên gia chia sẻ  Cách tính delta và delta phẩy phương trình bậc 2 Ôn thi vào lớp 10 môn Toán

Như vậy có phải lúc này cốc A sẽ đựng cốc nước cam, và cốc B sẽ đựng cốc nước lọc. Và trong lập trình ta cũng làm tương tự như vậy, ta khai báo 1 biến gọi là biến temp(tạm), sau đó gán temp = A, A = B, B = temp, như vậy là đã hoán đổi được giá trị của 2 biến A, B.

Hàm swap xây dựng sẵn trong thư viện C++

Trong thư viện iostream của C++, hàm swap đã được xây dựng sẵn với cấu trúc:

void swap(object A, object B)

Với A, B là bất kì một kiểu dữ liệu nào từ int, float…tới một struct hay thậm chí là một đối tượng class.

Mình sẽ có đoạn code minh họa hoán đổi 2 biến kiểu dữ liệu int như bên dưới.

Kết quả chạy chương trình:

Nhap 2 so a, b: 3 5 Ban da nhap: a = 3 b = 5 Sau khi swap: a = 5 b = 3

Một chương trình hoán vị không sử dụng hàm hoán vị con

Một chương trình hoán vị 2 biến không sử dụng tới hàm mà sẽ hoán đổi 2 biến trực tiếp trong main. Tất nhiên khi làm thực tế thì sẽ không ai viết thế này cả, nhược điểm là không viết hàm con thì cứ mỗi lần hoán đổi 2 phần tử ta sẽ viết lai lệnh hoán đổi nên code không tối ưu.

Code mẫu:

Kết quả khi chạy chương trình thì cũng sẽ như ví dụ trên.

Viết hàm hoán vị với C

Mình có 1 đoạn chương trình con như sau, bạn hãy thử dự đoán trước kết quả xem kết quả có giống khi chạy chương trình không nhé!.

Chuyên gia chia sẻ  Phương pháp Đầu tư mới “Low Risk High Return – Rủi ro thấp Lợi nhuận cao”

Và đây chính là kết quả khi chạy chương trình.

Viết hàm hoán vị với C

Ủa ủa ủa…là sao ta?? tại sao chương trình lại không thể hoán đổi được giá trị của 2 biến.

Bởi vì khi ta viết hàm Swap như vậy tức là ta chỉ đang truyền tham trị tức là chỉ truyền vào 2 giá trị của a, b vào hàm swap chứ không phải truyền vào vị trí ô nhớ của 2 biến a, b. Vì vậy lúc này hàm swap sẽ tạo ra 2 bản sao tại vị trí ô nhớ khác và thao tác trên 2 ô nhớ mới đó, 2 biến a, b sau khi thoát khỏi hàm vẫn sẽ giữ nguyên giá trị ban đầu của nó.

Để khác phục tình trạng đó trong C ta sẽ sử dụng tham trỏ, ta sẽ truyền 2 đối số là int *a, int *b trong hàm swap.

Vì là 2 tham trỏ nên khi gọi hàm ta cũng sẽ phải truyền vào đó là địa chỉ biến, tức là truyền vào &a, &b(Dấu & để lấy địa chỉ biến).

  • Khóa học lập trình C/C++ từ A-Z cho người mới – Giảm giá 40% hôm nay
  • Khóa học Java cơ bản dành cho người mới bắt đầu- Giảm 40% hôm nay
  • Khóa học lập trình Android từ cơ bản đến thành thạo – Giảm ngay 40%

Ta viết lại chương trình chạy đúng như sau:

Và đây là kết quả khi chạy chương trình.

Viết hàm hoán vị với C

Như vậy là chương trình của chúng ta đã chạy đúng với mong muốn ban đầu.

Chuyên gia chia sẻ  KuCoin Token Giá

Viết hàm hoán vị với C++

>>XEM THÊM: Khóa học lập trình C/C++ từ A-Z cho người mới – Giảm giá 40% hôm nay

Đối với C++ ta cũng sẽ viết hàm Swap tương tự, tuy nhiên trong C++ có tham chiếu(hoặc gọi tham biến) nên code sẽ nhìn đơn giản và dễ hiểu hơn một chút so với tham trỏ trong C.

CODE MẪU

Và kết quả khi chạy chương trình

Nhap 2 so a, b: 2 5 Ban da nhap: a = 2 b = 5 Sau khi swap: a = 5 b = 2

Cuối cùng thì mình xin cảm ơn bạn đã đọc bài viết, chúc bạn học tốt! sớm trở thành một Pro Dev.

[Xem tất cả bài viết chủ đề C/C++ tại đây]

Đánh giá bài viết post

Phạm Văn Sỹ

Tôi là Phạm Văn Sỹ chuyên gia uy tín trong lĩnh vực kinh tế và kinh doanh là sinh viên của trường Đại học Ngoại Thương. Với kiến thức sâu rộng sau 12 năm ở bên ngoài thương trường thị trường tôi mong muốn chia sẻ các kiến thức chuyên sâu hữu ích dành cho mọi người.

Related Articles

Back to top button