Hỏi ý tưởng sắp xếp điểm trung bình sinh viên trong hàm khai báo struct

làm sao để sắp xếp diem trung bình sinh viên ,em lam hoài không ra đoạn code cua em.
chỉ cần cho ý tưởng là dc rồi.tks

struct HocSinh
{
	char hoten[30];
	int mssv;
	char lop[30];
	char khoa[30];
	int toana1;
	int vatly;
	int laptrinh;
	float dtb;
};
typedef struct HocSinh HOCSINH;
struct manghocsinh
{
	HOCSINH a[100];
	int n;
};
typedef struct manghocsinh MANGHOCSINH;
void nhap(HOCSINH &);
void nhap(MANGHOCSINH &);
void xuat(HOCSINH);
void xuat(MANGHOCSINH);
void xuly(HOCSINH &);
void xuly(MANGHOCSINH &);
void nhap(HOCSINH &x)
{
		printf("Nhap Ho-Ten: ");
		fflush(stdin);gets(x.hoten);
		printf("Ma so sinh vien la: ");
		scanf("%d",&x.mssv);
		printf("Ten Lop: ");
		fflush(stdin);gets(x.lop);
		printf("Ten Khoa: ");
		fflush(stdin);gets(x.khoa);
		printf("Nhap diem toan: ");
		scanf("%d",&x.toana1);
		printf("Nhap diem vat ly : ");
		scanf("%d",&x.vatly);
		printf("Nhap diem laptrinh: ");
		scanf("%d",&x.laptrinh);

}

void xuat(HOCSINH x )
{
	printf("\n");
	puts(x.hoten);
	printf("\nMa so sinh vien la: %d",x.mssv);
	printf("\n");
	puts(x.lop);
	printf("\n");
	puts(x.khoa);
	printf("\nDiem toan: %d",x.toana1);
	printf("\nDiem vat ly : %d",x.vatly);
	printf("\nDiem lap trinh: %d",x.laptrinh);
	printf("\n");
	printf("Diem trung binh: %f",x.dtb);
}
void xuly(HOCSINH &x)
{
	x.dtb = (float)(x.toana1 + x.vatly + x.laptrinh ) / 3;
}
void nhap(MANGHOCSINH &x)
{
	printf("Nhap so luong hs: ");
	scanf("%d", &x.n);
	for(int i=0;i<x.n;i++)
	{
		nhap(x.a[i]);
	}
}
void xuly(MANGHOCSINH &x)
{
	for(int i=0;i<x.n;i++)
	{
		xuly(x.a[i]);
	
	}
}
void xuat(MANGHOCSINH x)
{
	for(int i=0;i<x.n;i++) 
	{
		xuat(x.a[i]);
	}
}

void main()
{
	MANGHOCSINH hs;
	nhap(hs);
	xuly(hs);
	xuat(hs);
	getch();
}
1 Like
int compare(const void *a,const void *b){
    const HocSinh *x=a,*y=b;
    return x->dtb-y->dtb;
}

//sort
qsort(hs.a,hs.n,sizeof(HocSinh),compare);
....
2 Likes

@Gio giỏi quá, nhưng nên giải thích cho @Chaylok_C_u hiểu với, anh nghĩ @Chaylok_C_u không hiểu cách em giải quyết đâu :smile:

1 Like

Tham số thứ 3 của std::sort() trong C++ là 1 Functor. Hàm compare trên sẽ đóng vai functor đó thôi mà :smiley:

Với giá trị trả về là (x->dtb) - (y->dtb) sẽ là sắp xếp giảm dần.

1 Like

Giải thích rõ thêm tý đi anh.chưa hiểu với cách viết của anh :smile:

máy cái mũi tên -> với cái sao * ở trên đầu chưa học nên không hiểu lắm :smile:

Để hiểu cái dấu -> thì em xem bài này. Còn * là con trỏ thôi. Em đã học con trỏ chưa?

1 Like

dạ chưa ,vài ngày nữa mới học . :smile:

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