PDA

نسخه کامل مشاهده نسخه کامل : مشکل این برنامه چیه ؟ لیست های پیوندی



aaaammmm87
01-07-2009, 13:03
سلام
این برنامه واسه گرفتن اسامی دانشجویان به صورت لیست پیوندی هستش ولی لیست کردن و جستجوش کار نمیکنه ؟ نمیدونم چرا ؟

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

عــــلی
01-07-2009, 14:24
سلام خسته نباشید.
خط :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدرو پاک کن.
ببخشید فکر کنم تایپتونو نخوندم معذرت میخوام اشتباه شد.
موفق باشید.

aaaammmm87
01-07-2009, 15:19
سلام خسته نباشید.
خط :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدرو پاک کن.
ببخشید فکر کنم تایپتونو نخوندم معذرت میخوام اشتباه شد.
موفق باشید.
دوست عزیز اصلا هیچ ربطی به اون خط نداره اینو INCLUDE کردم واسه اینکه تابع NULL شناسایی بشه:27::11:

roya_borhany
01-07-2009, 16:15
سلام. به نظرت تعریف لیست پیوندی و اشاره گر اشتباه نیست؟ تا اون جایی که یادمه از typedef باید استفاده کرد:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

aaaammmm87
01-07-2009, 21:29
سلام. به نظرت تعریف لیست پیوندی و اشاره گر اشتباه نیست؟ تا اون جایی که یادمه از typedef باید استفاده کرد:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نوچ تعریفم درسته مشکلی نداره . :11:

sin2x=2sinxcosx
01-07-2009, 21:37
دوست عزیز اصلا هیچ ربطی به اون خط نداره اینو INCLUDE کردم واسه اینکه تابع NULL شناسایی بشه:27::11:

کي گفته بايد براي NULL اين رو include کني ؟

sin2x=2sinxcosx
01-07-2009, 21:51
مشکلتون اينجاست که مثلا وقتي ميخواد ليست کنه نمي تونه تشخيص بده که بعدي NULL هست يا نه . ما فقط يه نفر داريم ولي باز هم بعد از اين که اونو چاپ کرد از شرط temp != NULL رد ميشه .

DaneshD
01-07-2009, 23:27
مشکل اینه که شما student *temp=new student; رو درون هر تابع تعریف کردید. در اینصورت وقتی در تابع input شما یک لیست پیوندی میسازید، وقتی از تابع خارج میشید اون لیست دیگه وجود نداره (درواقع طبق کد شما داره چون اونرو delete نکردید اما آدری اون گم شده) و دوباره شما یک لیست جدید در هردو تابع output و search میسازید با دستور student *temp=new student;

برای اصلاح این خط رو

student *temp;

خارج از تمام تابع ها تعریف کنید تا برای تمام توابع به صورت global باشه و فقط یکبار این دستور

student *temp=new student;

رو در تابع input اجرا کنید تا فقط یکبار لیست ساخته بشه چون در هنگام جستجو و نمایش لیست نیازی به ساختن دوباره اون نیست. در ضمن در آخر برنامه خودتون حتما لیست ساخته شده رو delete کنید تا memory leak که به معنی گرفتن و رها نکردن حافظه هست، براتون پیش نیاد.

aaaammmm87
02-07-2009, 07:57
کي گفته بايد براي NULL اين رو include کني ؟


مشکلتون اينجاست که مثلا وقتي ميخواد ليست کنه نمي تونه تشخيص بده که بعدي NULL هست يا نه . ما فقط يه نفر داريم ولي باز هم بعد از اين که اونو چاپ کرد از شرط temp != NULL رد ميشه .


مشکل اینه که شما student *temp=new student; رو درون هر تابع تعریف کردید. در اینصورت وقتی در تابع input شما یک لیست پیوندی میسازید، وقتی از تابع خارج میشید اون لیست دیگه وجود نداره (درواقع طبق کد شما داره چون اونرو delete نکردید اما آدری اون گم شده) و دوباره شما یک لیست جدید در هردو تابع output و search میسازید با دستور student *temp=new student;

برای اصلاح این خط رو

student *temp;

خارج از تمام تابع ها تعریف کنید تا برای تمام توابع به صورت global باشه و فقط یکبار این دستور

student *temp=new student;

رو در تابع input اجرا کنید تا فقط یکبار لیست ساخته بشه چون در هنگام جستجو و نمایش لیست نیازی به ساختن دوباره اون نیست. در ضمن در آخر برنامه خودتون حتما لیست ساخته شده رو delete کنید تا memory leak که به معنی گرفتن و رها نکردن حافظه هست، براتون پیش نیاد.

تابع NULL توی این تابع هست . میتونی از MSDN خود C استفاده کنی و ببینی !
************************************************** **********
قاعدتا باید تشخیص بده که بعدی NULL هستش چون که من با دو اشاره گر FIRST , LAST اول و اخر رو مشخص میکنم !
************************************************** **********
دوست عزیز ممنونم از توضیحتون ولی اگه توجه کنی من هر بار که یه TEMP می سازم فقط از اون برای ایجاد یه گره جدید ازش استفاده میکنم و طبق FIRST , LAST حرکتم رو ایجاد میکنم که این باید درست باشه ( الگوریتمی) !
دوست عزیز شما میتونید اینو درستش رو بنویسید ؟ ؟ ؟ ؟ :11:

DaneshD
02-07-2009, 09:21
کد اصلاح شده


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدفکر کنم فقط روتین input رو تغییر دادم که آدرسها در هنگام اضافه کردن گم میشدن و آخرین رکورد هم به NULL اشاره نمیکرد. این دو خط رو در ابتدای main اضافه کن که اشاره گرها مقدار اولیه NULL داشته باشند:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

aaaammmm87
03-07-2009, 11:00
کد اصلاح شده

[/html]فکر کنم فقط روتین input رو تغییر دادم که آدرسها در هنگام اضافه کردن گم میشدن و آخرین رکورد هم به NULL اشاره نمیکرد. این دو خط رو در ابتدای main اضافه کن که اشاره گرها مقدار اولیه NULL داشته باشند:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

متاسفانه باز هم درست نشد:41:

DaneshD
03-07-2009, 15:07
چرا درسته. منم که بر خلاف حرفهایی که میزنم سورس کد رو برای شما گذاشتم. تستش هم کرده بودم و کاملا درست کار میکرد. برنامه قبلی شما اصلا segmentation fault میداد. الان چه پیغام خطایی میگیرید که کار نمیکنه؟

aaaammmm87
03-07-2009, 16:36
چرا درسته. منم که بر خلاف حرفهایی که میزنم سورس کد رو برای شما گذاشتم. تستش هم کرده بودم و کاملا درست کار میکرد. برنامه قبلی شما اصلا segmentation fault میداد. الان چه پیغام خطایی میگیرید که کار نمیکنه؟

سلام
دقیقا همون مشکل قبلی رو داره! اضافه میکنه ولی نه سرچش کار میکنه نه لیست کردنش؟

DaneshD
04-07-2009, 15:49
سلام
دقیقا همون مشکل قبلی رو داره! اضافه میکنه ولی نه سرچش کار میکنه نه لیست کردنش؟


کد کامل این هست:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمطمئن هستم کار میکنه. قبلا هم همین بود، منتنها من فقط قسمتهایی که فکر میکردم مهم باشه گذاشته بودم.