PDA

View Full Version : سوال در مورد sorting در زبان C



mahsa_ahn
چهارشنبه 14 بهمن 1388, 12:52 عصر
سلام من یه پروژه ی کتابخونه دارم که باید توی یه قسمتش این قابلیتو اضافه کنم که اسامی اعضا و کتاب ها رو از راه های مختلف مرتب کنه و نمایش بده...مثلا اعضا رو هم بتونه بر اساس شماره عضویت مرتب کنه و هم نام خانوادگی و کتاب ها رو هم بر اساس نام نویسنده و هم نام خود کتاب...صفحه 139 کتاب جعفرنژاد یه مثال واسه مرتب کردن نام خانوادگی داره ولی توی اون مثال برای اسم ها آرایه 2 بعدی تعریف کرده ولی من 1 بعدی تعریف کردم...میشه کمکم کنید این قسمتو بنویسم؟
برای اطلاعاتون برنامم به زبان c هست

amin1softco
چهارشنبه 14 بهمن 1388, 16:02 عصر
شما مشخص کن با چه روشی می خواهی این لیست را مرتب کنی

ولی ساده ترین کار استفاده از یک آرایه تمپ هست که اول کل اطلاعات را به اون منتقل کنی تا مرتب شد دوباره روی اولی بنویسی که یک بعدیه

mahsa_ahn
چهارشنبه 14 بهمن 1388, 22:04 عصر
اون قسمت مرتب کردن رو نوشتم الان برنامه اجرا میشه ولی خیلی جاهاش اشکال داره...من دارم یکی یکی دارم گزینه های منو رو بررسی میکنم...رسیدم به گزینه ی سوم ولی نمیدونم چرا وقتی به این گزینه میرم دیگه نمیتونه خارج بشه...منظورم اینه که برمیگرده به منو ولی دیگه از تو منو خارج نمیشه...یه نگاه بش بندازید لطفا...
پدرم درومد پای این پروژه....http://forum.p30world.com/images/New-smile/N_aggressive%20%2840%29.gif
http://rapidshare.com/files/345437430/LIBRARY.CPP.html

mahsa_ahn
پنج شنبه 15 بهمن 1388, 00:15 صبح
int menu(void){
char s[10];
int c;
printf("1)Add a new book:\n");
printf("2)Add a new member:\n");
printf("3)Edit memeber's informatin:\n");
printf("4)Edit information of books:\n");
printf("5)remove a book:\n");
printf("6)Remove a member:\n");
printf("7)Display lis of books:\n");
printf("8)Display member's list:\n");
printf("9)Search for members:\n");
printf("10)Search for books:\n");
printf("11)Load memeber file:\n");
printf("12)Load book file:\n");
printf("13)Borrow book:\n");
printf("14)Display list of borrowed books:\n");
printf("15)Add an assistant:\n");
printf("16)exit\n");
printf: printf("Please enter your choose between 1-16:\n");
gets(s);
c=atoi(s);
if(c<1||c>16)
goto printf;
else{
clrscr();
return(c); }

}


void editm(void){
int n,i,j,t,k;
first: printf("Enter member's ID:\n");
scanf("%d",&n);
for(j=0;j<MAX;j++){
if(n==mem_info[j].memno)
goto last;
if(mem_info[j].memno!=n){
edit:printf("wrong ID!\n1.another member\n2.back");
scanf("%d",&t);
if(t==2){
clrscr();
menu();}
if(t==1)
goto first;
else
printf("wrong number");
goto edit; }
}

last: printf("enter new member name:\n");
scanf("%s",mem_info[j].name);
printf("enter new family name:\n");
scanf("%s",mem_info[j].family);
printf("enter new address:\n");
scanf("%s",mem_info[j].address);
printf("enter telephone number:\n");
scanf("%d",&mem_info[j].phno);
printf("enter new ID:");
scanf("%d",&mem_info[j].memno);
printf("press any key...");
getch();
clrscr();
goto edit; }








700خطه من اینجارو که مشکل داشت گذاشتم

qwerty11
پنج شنبه 15 بهمن 1388, 01:01 صبح
سلام،

ببخشید این کدی که گذاشتین مربوط به sort میشد !؟:متفکر:

خیلی خسته نباشین که 700 خط کد نوشتین... من کدتون رو نگاه کردم، دستورات printf بسیار زیاد بودن! هیچ جوره نمیتونین این چاپ کردن ها رو کم کنین !؟

ویرایش : کد مربوط به sort کردنتون رو دیدیم. یه struct مجموعه ای از فیلدهاست نه فقط یه فیلد اسم. منظورم اینه که شما فقط نباید فیلد name دوتا متغیر رو با هم عوض کنین و باید کل محتویات 2 تا struct رو با هم عوض کنین. یه سوال دیگه هم برام پیش اومد این بود که آیا تعداد کتابها رو داریم یا نه !؟

mahsa_ahn
پنج شنبه 15 بهمن 1388, 01:07 صبح
سلام،

ببخشید این کدی که گذاشتین مربوط به sort میشد !؟:متفکر:

خیلی خسته نباشین که 700 خط کد نوشتین... من کدتون رو نگاه کردم، حداقل نصف خطها دستورات printf بود! هیچ جوره نمیتونین این چاپ کردن ها رو کم کنین !؟
نخیر کامل مطلبو بخونید اینایی که گذاشتم مربوط به sort نیست....مربوط به ویرایش اطلاعاته وقتی وارد این تابع میشم دیگه بیرون نمیاد...فعلا مشکل اینه
اون دستور printf ها هم نمیشه کم کرد...بالاخره باید استاد یا کاربر بفهمه چی کار کنه یا نه؟!
آدم با این حرفا خستگی به تنش میمونه که...10 روزه پای این پروژه ام آخرش یکی درمیاد اینطوری میگه...:گریه:

qwerty11
پنج شنبه 15 بهمن 1388, 05:51 صبح
اون دستور printf ها هم نمیشه کم کرد...بالاخره باید استاد یا کاربر بفهمه چی کار کنه یا نه؟!
آدم با این حرفا خستگی به تنش میمونه که...10 روزه پای این پروژه ام آخرش یکی درمیاد اینطوری میگه...من چه حرف بدی زدم !؟ الآن مثلاً گفتم printf زیاد داری خستگی تو تنت بیشتر شده !؟ printf هم جزء دستورات برنامه نویسیه!!! من فقط به خاطر خودتون گفتم که کدتون یکم کمتر بشه ! بگذریم...

خط آخر چرا goto edit گذاشتین دوباره !؟ فکر کنم به جای اون باید return میزاشتین

amin1softco
پنج شنبه 15 بهمن 1388, 06:39 صبح
فکر کنم مشکلت حل بشه اگر یک نقطه end: آخر تابع در نظر بگیری و وقتی برک شد بری اونجا تا از تابع خارج بشه

mahsa_ahn
پنج شنبه 15 بهمن 1388, 10:30 صبح
سلام،
ویرایش : کد مربوط به sort کردنتون رو دیدیم. یه struct مجموعه ای از فیلدهاست نه فقط یه فیلد اسم. منظورم اینه که شما فقط نباید فیلد name دوتا متغیر رو با هم عوض کنین و باید کل محتویات 2 تا struct رو با هم عوض کنین. یه سوال دیگه هم برام پیش اومد این بود که آیا تعداد کتابها رو داریم یا نه !؟
یه سوال کد مربوط به sort منو از کجا دیدید؟ اون فایلی که تو رپید شیر آپلود کردم که باز نمیشه بقیه ی کدهایی هم که گذاشتم به sort مربوط نیست:لبخند:؟؟؟؟حالا به هر صورت میشه بیشتر توضیح بدید؟ یکمی نفهمیدم:لبخند::متفکر:
برای تعداد کتابها هم یه ماکزیمم در نظر گرفتم که 100 تا هست...تعداد دقیق رو نداریم فقط میدونیم حداکثر 100 تا میتونه بگیره

qwerty11
پنج شنبه 15 بهمن 1388, 12:58 عصر
من دیروز اون فایلی رو که تو رپیدشیر آپ کردین دیدم! الآنم یکم تست کردم، بازم میشه دانلودش کرد.

شما باید حتماً یه متغیر عمومی برای تعداد کتابها و تعداد کاربرها در نظر بگیرین تا از بوجود آمدن مشکلات احتمالی جلوگیری کنین. اما تو این مسئله ی خاص اگر از لیست پیوندی استفاده میکردین بهتر بود. درباره ی سورت کردن یه آرایه از struct ها مثلاً بر اساس فیلد ID:


for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(strct[i].ID>strct[j].ID){
strct temp=strct[i];
strct[i]=strct[j];
strct[j]=temp;
}
}
}

mahsa_ahn
پنج شنبه 15 بهمن 1388, 22:59 عصر
من دیروز اون فایلی رو که تو رپیدشیر آپ کردین دیدم! الآنم یکم تست کردم، بازم میشه دانلودش کرد.

شما باید حتماً یه متغیر عمومی برای تعداد کتابها و تعداد کاربرها در نظر بگیرین تا از بوجود آمدن مشکلات احتمالی جلوگیری کنین. اما تو این مسئله ی خاص اگر از لیست پیوندی استفاده میکردین بهتر بود. درباره ی سورت کردن یه آرایه از struct ها مثلاً بر اساس فیلد ID:


for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(strct[i].ID>strct[j].ID){
strct temp=strct[i];
strct[i]=strct[j];
strct[j]=temp;
}
}
}


structure رو باید با strcpy کپی کنم دیگه آره؟فکر نمیکنم همینطوری با این دستور(for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(strct[i].ID>strct[j].ID){
strct temp=strct[i];
strct[i]=strct[j];
strct[j]=temp;
}
}
}) انجام بشه؟

qwerty11
پنج شنبه 15 بهمن 1388, 23:27 عصر
نه. همینجوری که من نوشتم درست انجام میشه. از یه ورژن c به بعد میشه دو تا struct رو مساوی هم قرار داد. یعنی دقیقاً با عمل = .
strcpy برای کپی کردن یه رشته تو یه رشته دیگه هستش و در مورد struct کاربردی نداره.