30/09/2018, 16:16

Cho em ý tưởng sắp sếp dtb sinh viên tăng or giảm 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("
");
	puts(x.hoten);
	printf("
Ma so sinh vien la: %d",x.mssv);
	printf("
");
	puts(x.lop);
	printf("
");
	puts(x.khoa);
	printf("
Diem toan: %d",x.toana1);
	printf("
Diem vat ly : %d",x.vatly);
	printf("
Diem lap trinh: %d",x.laptrinh);
	printf("
");
	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();
}
Gió viết 18:30 ngày 30/09/2018
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);
....
Nguyễn Minh Dũng viết 18:26 ngày 30/09/2018

@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

viết 18:17 ngày 30/09/2018

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à

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

Chaylok Cửu viết 18:30 ngày 30/09/2018

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

Chaylok Cửu viết 18:31 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:26 ngày 30/09/2018

Để 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?

Chaylok Cửu viết 18:23 ngày 30/09/2018

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

Bài liên quan
0