Read-only archive. Login and posting are unavailable.
Reply
 
Thread Tools
  #1  
Old 20-07-2010, 01:30
Senior Member
Join Date: 09-2008
Posts: 1,191
[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;
Yêu cầu là sắp xếp cho mã số sv tăng [giảm] dần và họ tên tăng [giảm] dần. Hàm sắp xếp thì em biết và viết được rồi. Nhưng vấn đề là nó không cơ động, tức là em phải viết hàm : tăng theo mssv, giảm theo mssv, tăng theo tên, giảm theo tên.

----> 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
Reply With Quote
  #2  
Old 20-07-2010, 01:41
Senior Member
Join Date: 06-2009
Posts: 151
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 ??
Reply With Quote
  #3  
Old 20-07-2010, 01:56
Senior Member
Join Date: 09-2008
Posts: 1,191
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
Reply With Quote
  #4  
Old 20-07-2010, 05:32
meojunior's Avatar
Junior Member
Join Date: 06-2010
Posts: 1
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);
			}
		}
	}
}
Reply With Quote
  #5  
Old 20-07-2010, 10:23
manhoa's Avatar
Senior Member
Join Date: 10-2008
Posts: 1,091
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
\m/


ps: bổ sung thêm bản anh hóa:

Code:
optimal
hoặc

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]
Reply With Quote
  #6  
Old 20-07-2010, 10:47
Senior Member
Join Date: 09-2008
Posts: 1,191
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct

Quote:
Originally Posted by meojunior View Post
Đâ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
cám ơn bác nhiều, nhưng hình như nó vẫn chưa tối ưu, của bác là so sánh nhiều trường trong cùng 1 hàm, thế nhỡ có 1 struct nhiều trường thì bắt buộc phải làm nhiều cái 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
Reply With Quote
  #7  
Old 20-07-2010, 10:52
Senior Member
Join Date: 06-2009
Posts: 151
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
Reply With Quote
  #8  
Old 20-07-2010, 11:06
Senior Member
Join Date: 09-2008
Posts: 1,191
Re: [lập trình -hỏi] sắp xếp trong cấu trúc struct

Quote:
Originally Posted by HunterBMT View Post
Thế bác đợi chiều rồi em up code nhé Em cũng đang học Cpp
cám ơn bác trước nhá
Reply With Quote
  #9  
Old 20-07-2010, 11:19
bug_bunny145's Avatar
Senior Member
Join Date: 02-2007
Posts: 180
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ứ
Reply With Quote
  #10  
Old 20-07-2010, 11:20
_[Z]_'s Avatar
K.I.A
Join Date: 09-2008
Posts: 432
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
Reply With Quote
Reply

« Previous Thread | Next Thread »

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


All times are GMT +7. The time now is 06:26.