Em chỉ sửa những ký tự đầu tiên thôi , chứ ko sửa hết họ tên thành Viết Hoa
Chưa hình dung ra được hướng lập trình. Nhờ mọi người giúp đỡ
//swap
}
``` với cả trong đoạn anh viết bên trên ấy ạ, swap này có tác dụng gì anh ?
E bỏ đi là bị báo lỗi
Cảm ơn mọi người ạ, e là mem mới nên bị hạn chế số lần rep và viết bài, hôm nay mới vào trả lời được !
Cảm ơn anh Đức @Maknae và anh @sueruan012 cũng như anh @rogp10 nhiều ạ !
Anh ơi thế cái chỗ viết hoa của anh Đức với phần sắp xếp sửa lại như nào ạ anh ?
Mình đã hướng dẫn bạn ấy sửa rồi. Bạn tự đọc lại. Vấn đề của bạn ấy là truyền sai biến thôi.
Mình không muốn trở thành spoon-feeder. Mong bạn hiểu.
1 Like
void sapxep(hocsinh a[100], int n)
{
int i,j;
hocsinh tg;
for(i = 0 ; i < n ; i++)
for( j = i +1; j < n; j ++)
{
if(a[i].diemtong < a[j].diemtong)
{
tg = a[j];
a[j] = a[i];
a[i] = tg;
}
}
}
void sapxep1(hocsinh a[100], int n)
{
int i,j;
for(i = 0 ; i < n ; i++)
for( j = i +1; j < n; j ++)
{
if(a[i].diemtong == a[j].diemtong)
a[i].namsinh > a[j].namsinh;
}
}
e tách thành 2 cái sắp xếp, nhưng vẫn chưa thấy ổn… haizzz
hại não quá
Điều kiện so sánh chỉ có 1 thôi. Bạn tách ra làm 2 cái sắp xếp là sai đấy.
Hình như bạn vẫn chưa hiểu nỗ lực của mình khi mình giải thích đoạn này
Dòng a[i].namsinh > a[j].namsinh;
chả có nghĩa lí gì khi bạn viết lửng lơ như thế cả!
Bài này điều kiện chỉ có 1 và duy nhất:
if (a[i].diemtong < a[j].diemtong) { //hiện tại tổng điểm của a[j] (thằng sau) cao hơn a[i] (thằng trước)
//swap 2 học sinh cho theo thứ tự tổng điểm giảm dần
} else if (a[i].diemtong == a[j].diemtong) {
//thì xét tiếp đến năm sinh (năm sinh bé hơn thì xếp trước)
if (a[i].namsinh > a[j].namsinh) {//hiện tại năm sinh của a[i] (thằng trước) đang cao hơn a[j] (thằng sau)
//swap 2 học sinh cho theo thứ tự năm sinh tăng dần nếu tổng điểm bằng nhau
}
}
2 Likes