Sắp xếp 4 số nguyên từ lớn đến bé

/* nhap 4 so sap xep theo thu tu tu lon den be*/
#include<iostream>
using namespace std;
int sapxep (int a,int b);
int main ()
{
	int a,b,c,d;
	cout <<"Nhap 4 so nguyen bat ky: " <<endl;
    cin >>a >>b >>c >>d;
    sapxep(a,b);
    sapxep(a,c);
    sapxep(a,d);
    sapxep(b,c);
    sapxep(b,d);
    sapxep(c,d);
    cout <<a <<" " <<b <<" " <<c <<" " <<d;
    }
int sapxep (int a,int b)
{
	int t;
	if(a<b)
	{
	t=a;
	a=b;
	b=t;
	}
	}

Cho em hỏi vì sao khi chạy nó vẫn sắp xếp theo thứ tự a,b,c,d ban đầu mà không đổi chỗ ạ. Em mới học lập trình nên còn gà ạ

Dùng tham chiếu nhé :v để vầy là chỉ truyền mỗi giá trị thôi :slight_smile:

Mà thớt học hàm sớm thế :smiley:

2 Likes

Bác sửa lại hộ em tý
Cụ thể tham chiếu là như nào, giá trị là như nào bác, em có seach google rồi những vẫn chưa thông @@

Hiểu đơn giản là bạn đang có 4 biến: a b ứng với địa chỉ 1 2

Nếu bạn truyền theo cách bình thường thì function sapxep sẽ copy 2 biến a b đó vào 1 chỗ khác, lúc này 2 biến này sẽ có địa chỉ là: 3 4 (VD)

Vì vậy dù bạn sắp xếp kiểu gì ở trong hàm sapxep thì chỉ là thay đổi qua lại giá trị ở địa chỉ 5 6 trong khi cái chúng ta cần là thay đổi giá trị ở địa chỉ 1 2

Nên hướng giải quyết là truyền tham chiếu nhé

Nếu bạn truyền tham chiếu thì thằng sapxep sẽ không copy biến sang 1 địa chỉ mới mà sẽ dùng luôn ở địa chỉ truyền vào

P.s: Em hiểu theo ý em, pro nào thấy em hiểu sai có thể giúp đỡ cho em hiểu rõ thêm 1 chút ạ @@

1 Like

TRUYền bằng giá trị vào 1 hàm, đó là truyền 1 bản copy của giá trị đó vào hàm, giá trị gốc trong caller không thay đổi Truyền bằng tham chiếu là truyền địa chỉ của biến đó vào hàm và sử dụng con trỏ để tham chiếu giá trị đó, giá trị gốc trong caller sẽ thay đổi theo.
BÀi toán này có thể dùng mảng và bubble để giải quyết đơn giản, không cần phải gọi ra nhiều hàm như vậy đâu.

1 Like

Bạn đã biết về vòng lặp chưa?
Còn code thì bạn nên dùng tham chiếu & hoặc biến con trỏ * thử nhé!

1 Like

Thanks mn, mình hiểu rồi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?