![]() |
|
|
Thread Tools |
|
#1
|
||
|
||
|
[lập trình -hỏi] sắp xếp trong cấu trúc struct
cho em hỏi các vấn đề sau
về C nha mấy bác em có struct sau : Code:
typedef struct sinhvien
{
char mssv[15];
char hoten[40];
int diem;
} sv;
sv *a;
----> tổng cộng phải viết là 4 hàm, trong khi đó 2 hàm tăng và 2 hàm giảm giống y hệt nhau chỉ khác cái điều kiện là so sánh các trường khác nhau. Thế nhỡ bắt sắp xếp theo 10-20 trường thì lúc đấy vỡ mồm Em muốn hỏi các bác cách nào để chỉ viết 2 hàm: tăng và giảm mà sử dụng được cho nhiều trường trong struct đó không ạh. ![]() Hàm sắp xếp theo mssv của em đây, cái này em xếp theo kiểu đổi chỗ trực tiếp cho nó gọn : Code:
void doitructiep(sv *a,int n)
{
for (int i=0;i0) doicho(a[i],a);
}
cám ơn các bác nhiều ạh
|
|
#2
|
||
|
||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
Sao bác ko viết 1 hàm tăng 1 hàm giảm với parameter là 1 phần tử của struct ??
|
|
#3
|
||
|
||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
bác viết hộ em cái ạh
, ko hiểu sao lại ngu đột xuất vậy
|
|
#4
|
|||
|
|||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
Đây rồi, tớ đang rỗi nên code thử phát
, thêm vào một biến kiểu enum để xác định kiểu sắp xếp nữa là OK, nên chỉ cần viết một hàm thôi Code:
/* Define compare type */
typedef enum E_SORT_TYPE
{
E_SHORT_BY_NAME_UP = 0, /* Increase by name */
E_SHORT_BY_NAME_DOWN, /* Decrease by name */
E_SHORT_BY_ID_UP, /* Increase by ID */
E_SHORT_BY_ID_DOWN /* Decrease by ID */
};
void doitructiep(sv *a,int n, E_SORT_TYPE eSortType )
{
for (int i=0;i<n;i++)
{
for (int j=i+1;j<n;j++)
{
bool isSwap = false; /* Flag to indicate swap two nood */
switch ( eSortType )
{
case E_SHORT_BY_ID_DOWN:
/* Add code to compare by ID then set value to flag isSwap */
break;
case E_SHORT_BY_ID_UP:
/* Add code to compare by ID then set value to flag isSwap */
break;
case E_SHORT_BY_NAME_UP:
/* Add code to compare by name then set value to flag isSwap */
break;
case E_SHORT_BY_NAME_DOWN:
/* Add code to compare by namethen set value to flag isSwap */
break;
default:
/* Output log indicate wrong parameter here */
break;
}
if ( isSwap )
{
doicho(a[i],a);
}
}
}
}
|
|
#5
|
|||
|
|||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
đệt
đơn giản thế cũng hỏi code tối ưu là đây Code:
toi uu ps: bổ sung thêm bản anh hóa: Code:
optimal Code:
perfect
__________________
[QUOTE][QUOTE] [CENTER][SIZE="3"][COLOR="Navy"] Mạn Hoa Lạc Địa - Man Hỏa Thôn Thiên [B]Randha Savah[/B][/COLOR][/SIZE][/CENTER] [/QUOTE][/QUOTE] |
|
#6
|
||
|
||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
Quote:
vậy thấy cũng thủ công wá . ý em là chọn trường nào thì so sánh trường đó, làm 1 thao tác so sánh thôi, có bác nào biết ko
|
|
#7
|
||
|
||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
Thế bác đợi chiều rồi em up code nhé
Em cũng đang học Cpp
|
|
#8
|
||
|
||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
cám ơn bác trước nhá
|
|
#9
|
|||
|
|||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
các bác cứ đưa vấn đề chuyên môn vào f17 thảo nào nó cứ bị nhạt đi
về nhà đừng bàn chuyện công việc chứ
|
| bug_bunny145 |
| View Public Profile |
| Find all posts by bug_bunny145 |
|
#10
|
|||
|
|||
|
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct
em chỉ mới nghĩ dc như thế này: sao bác ko viết 1 hàm so sánh, hàm này nhận 2 đối số kieu char,
if (strcmp(x.mssv,y.mssv)>0) return 1 else return 0 xong viet thêm 1 hàm sắp xếp nữa, gọi hàm so sánh trên nếu kq trả về 1 thì đảo, còn 0 thì thôi.. đây là ngu kiến của em, có gì các pác cho em ít ít gạch xíu
|
![]() |
|
|