برنامه ي من چه مشکلي داره؟؟!!

در اين بخش مي‌توانيد به مباحث مربوط به انواع زبان هاي برنامه نويسي بپردازيد

مدیران انجمن: athlon64x2, abbas.m.k, شوراي نظارت

Major II
Major II
نمایه کاربر
پست: 258
تاریخ عضویت: پنج‌شنبه ۲۹ تیر ۱۳۸۵, ۳:۳۶ ق.ظ
محل اقامت: دانشگاه
سپاس‌های ارسالی: 6 بار
سپاس‌های دریافتی: 25 بار
تماس:

پست توسط borhan »

واقعا دستتون درد نکنه..
من از ويندوز xp استفاده ميکنم...از نسخه ي توربو c++ 4.5 استفاده ميکنم..
بعد،فايلهاي bak,exe,obj در پوشه ي اصلي ايجاد شده،
از راهنماييهاي شما نهايت تشکر را دارم :(
زود ازدواج کردن اشتباهه،ولي دير ازدواج کردن اشتباهي بزرگتر..
Colonel II
Colonel II
پست: 90
تاریخ عضویت: پنج‌شنبه ۹ شهریور ۱۳۸۵, ۹:۱۵ ب.ظ
سپاس‌های دریافتی: 9 بار

پست توسط athlon64x2 »

سلام دوست بسيار عزيزم

شما محبت داريد خوشحال ميشم بتونم کمکي ولو بسيار کوچک انجام بدم

در اينجا به تناسب سوالاتي که مطرح کردم و پاسخي که محبت کرديد در رابطه با نسخه کمپايلر و ويندوز خواهم نوشت و در مورد کد هم توضيح کوچکي خواهم داد.

کمپايلر
----------
اگر برنامه نويسي در محيي real dos براتون اهميت داره حتما فکر ارتقا به نسخه 5.02 بورلند سي++ باشيد . obj ها و lib هاي نسخه هاي قديمي تر باگهاي زيادي دارن که بدليل اين بود که نسخه 4 اولين نسخه اي بود که ساپورت ويندوز به بورلند سي اضافه شد . بسياري از پيغام هاي خطايي که ميگيريد بخصوص در موارد memory access violation بخاطر همين باگ هاست چرا که کد قديمي بورلند براي محييط داس نوشته شده بود که مديريت حافظه توش بي معني بود و هر برنامه اي به هر کجاي حافظه که اراده ميکرد خيلي راحت و مستقيم آدرس دهي ميکرد و دسترسي داشت نسخه 5.02 هم معجزه نميکه اما پايدار تره. اگر هم صرفا ميخواهيد سي++ برنامه بنويسيد gc++ و visual C++ نسخه 6 بهترين انتخاب ها هستن. متاسفانه يا خوشبختانه! VC 7 به بعد بخاطر افزودن پشتيباني از unmanaged+managed code کمپايل کدي که توليد ميکنن سازگار با نسخه قبلي نيست بخصوص در مورد dll هايي که توليد ميکنه يا براي اجرا باز ميکنه . در ضمن توربو سي ها مدت کوتاهي همزمان با بورلند سي منتشر شدن که فرقشون فقط همراه نبودن با توربو ديباگر و توربو اسمبلر و اگر اشتباه نکنم بهينه سازي کمتر کد بود . براي داس مود همون بورلند سي++ 5.02 از همه بهتره . براي کنسول vc6 فوق العاده راحت و پشتيباني خوب ansi و template ها هم کامل هستن اما اگر سازگاري با تمام پلتفرم ها بخصوص لينوکس و ويندوز مد نظره gcc++ فعلا انتخاب برتر هست که بسته به سليقه خود شماست.

براي gcc يک پکيج کامل و عالي در اين آدرس هست
[External Link Removed for Guests]

پچ هاي بورلند براي نسخه هاي قديمي بورلند سي++ هم در اين آدرسه . ميتونين پچ هاي 4.5 رو هم امتحان کنيد اما توصيه من نصب 5.02 و نصب آخرين پچ اونه
[External Link Removed for Guests]

ويندوز
----------
در ويندوز nt از نسخه 5 به بعد ميکروسافت ماشين مجازي داس رو بازنويسي کرد. البته قصدش پشتيباني بهتر از بازي ها بود هنوز فرصت تست برنامه هاي داس در ويستا رو پيدا نکردم اما تجربه پريشب در نوشتن يه برنامه مقيم حافظه چندان جالب نبود به شخصه بهترين روش رو استفاده از vmware و ساختن يک ماشين مجازي با داس 7.1 بخاطر درست نشون دادن سايز و اسم طولاني فايلها و .. ميدونم گو اينکه نظرات متفاوته اما براي من مزيت جلوگيري از بوت مکرر دسترسي به کد در ويندوز و ديدن و ويرايش حجم خيلي بيشتري از کد در مقايسه با صفحه 2000 کاراکتري داس و .. بوده . صرفه جويي که به اين شکل در وقت ميشه باور کردني نيست .


مشکل کد شما
-------------------
مشکل شما در دو بخشه . يکي کمپايلر شما که در iostream يک باگ داره که بخاطر روشي که در کد نويسي اتخاذ کردين (توضيح خواهم داد) خطاي دسترسي داده و در بخش دوم خود کد هست که يکي دو باگ کوچولو يک چالش براي کمپايلر باگ دار که باگ نيست اما اشتباهه و چند جاهم خطر بزرگ buffer overrun رو داريد.

اگر هدف ديباگ صرفا اجراي کد خودتون باشه کار چندان زيادي نداره . بطور خلاصه شما از روش سي (فايل بافر شده) همزمان و تو در تو با روش جديد سي++ (iostream) ها استفاده کردين و حتي در يکي دو جا ورودي همزمان از دو تا ميگيرين که کار درستي نيست و ظاهرا به همين دليل کد ايجاد شده خطاي دسترسي ميده تا جاييکه يادم هست اين يک باگ شناخته شده در بورلند سي 4 بود و در نسخه 5 برطرف شد البته اين روش کاملا اشتباهه. در برنامه بايد صرفا از يکي از روش ها و کتابخانه ها استفاده کنيد حتي اگر در اجراهاي اوليه به مشکلي برخورد نکنيد . البته استفاده از unbufered به شرطي که قاطي با هم نباشن اشکالي نداره. در اين مرحله کد شما کار خواهد کرد اما اشکالات فراواني در کد باقي ميمونه.

ميشه يک مرحله جلوتر رفت و اين مشکلات که بطور بالقوه ميتونن سبب ريست شدن کامپيوتر يا بهم ريختن برنامه يا بيرون پريدن ناگهاني از برنامه بشن رو برطرف کرد. تا اينجا برنامه شما سي ميشه نه سي++.

راه ديگه هم بازنويسي کد هست. کد فعلي procedural هست و در واقع ساختار برنامه سي هست که از کتابخانه هاي c++ استفاده کرده. اگر مايل باشيد ميشه اونو شيي گرا نوشت و مشکلات رو نيز برطرف کرد. هرکدوم که مد نظرتونه بفرماييد در خدمتم .

ارادتمند شما
نعيمي
Colonel II
Colonel II
پست: 90
تاریخ عضویت: پنج‌شنبه ۹ شهریور ۱۳۸۵, ۹:۱۵ ب.ظ
سپاس‌های دریافتی: 9 بار

پست توسط athlon64x2 »

سلام دوست گرامي

اين کد خودتون هست با حداقل تغييرات ممکن . همونطور که در تاپيکي که دوست عزيزم آقاي bmyazdani معرفي کردند پاسخ دادم ديباگ اين کد فقط برنامه رو قابل اجرا ميکنه ولي مشکلات متفاوتي در اون از نظر طراحي و پياده سازي با قي ميمونه چرا که الان علاوه بر تکرار شدن يک کد در چند تابع کاملا به شدت ميطلبه که سورت کردن و جستجو نمايش اطلاعات جزو کلاسي باشن که يک ديناميک آرايه از students هست و از اون طرف هم student بلد باشه خودش اطلاعات رو وارد کنه . در واقع با دو کلاس Student و StudentS بازنويسي بشه به شکلي که StudentS يک vector از Student باشه اينجوري کاملا سر و شکل يک برنامه سي++ رو پيدا ميکنه .
در ضمن معرفي تمام توابع بصورت گلوبال روش خوبي نيست که متاسفانه اين اشتباه تو اغلب کتابها ديده ميشه و بطور عجيبي مرسوم شده. اصولا کلاسها براي اين ساخته شده که رفتارها و داده ها encapsulate بشن گلوبال کردن درست بر عکس اون رفتار ميکنه!! يعني يه برنامه سي که بي دليل تابع و متغير گلوبال نداره از يک برنامه سي++ با دهها تابع گلوبال ساختمندتره.

باگ جدي که وجود داشت استفاده از ios و FILE بطور همزمان بود چراکه puts از fprintf استفاده ميکنه و استفاده همزمان از ios که در سي++ اضافه شدن و buffered file که از زمان سي وجود داره مجاز نيست . بقيه تغييرات در حد جايگزيني روتين مقايسه string و تغييران جزيي ديگه بود که چندان حايز اهميت نيست. حذف clrscr هم به اين دليله که جزو ansic++ نيست . اگر مايل بوديد با يک روتين رد کردن رديف ها ميشه جايگزين کنيد . بقيه توضيحات رو هم اين تاپيک نوشتم http://centralclubs.com/viewtopic.php?p=79087 که اميدوارم کمک کننده باشه
اين کد در gcc 4.1.0 تست شده و بدون مشکل هست. اميدوارم اين نسخه در کمپايلر شما هم بدون مشکل اجرا بشه .


Please Login or Register to see this code

ارادتمند
نعيمي
Major II
Major II
نمایه کاربر
پست: 258
تاریخ عضویت: پنج‌شنبه ۲۹ تیر ۱۳۸۵, ۳:۳۶ ق.ظ
محل اقامت: دانشگاه
سپاس‌های ارسالی: 6 بار
سپاس‌های دریافتی: 25 بار
تماس:

پست توسط borhan »

بابت زحمتتون از شما تشکر ميکنم :razz:
متاسفانه اينم کار نکرد :sad:
به احتمال زياد تقصير از نحوه ي نصب يا PC خودم باشد،
شب بازم خبرشو بهتون اغلام ميکنم..
زود ازدواج کردن اشتباهه،ولي دير ازدواج کردن اشتباهي بزرگتر..
Major II
Major II
نمایه کاربر
پست: 258
تاریخ عضویت: پنج‌شنبه ۲۹ تیر ۱۳۸۵, ۳:۳۶ ق.ظ
محل اقامت: دانشگاه
سپاس‌های ارسالی: 6 بار
سپاس‌های دریافتی: 25 بار
تماس:

پست توسط borhan »

باز هم از شما نهايت تشکر را دارم..
اگر زحمت بکشين و اونو به صورت شي گرا بنويسيد و مقايسه اي بين اين دو داشته باشم ممنون ميشم :razz:
زود ازدواج کردن اشتباهه،ولي دير ازدواج کردن اشتباهي بزرگتر..
Colonel II
Colonel II
پست: 90
تاریخ عضویت: پنج‌شنبه ۹ شهریور ۱۳۸۵, ۹:۱۵ ب.ظ
سپاس‌های دریافتی: 9 بار

پست توسط athlon64x2 »

سلام دوست گرامي

اينم برنامه شما البته با ساختاري که به نظر من شايد کمي بهتر باشه البته کاملا سليقه اي هست . ميتونيد اونو با کد قبلي مقايسه کنيد . در اينجا عملکرد برنام شما به دو کلاس تقسيم شده .
student که قابليت دريافت اطلاعات خودش و تعريف نحوه مقايسه بين اجزايي از جنس خودش رو داره
StudentS که يک ديناميک آرايه از student هست و توانايي سورت کردن جستجو کردن و نمايش ليست رو داره

فعلا seh و ... بهش اضافه نشد تا مقايسه با کد خودتون راحت تر باشه . در ضمن براي کمپايلش به يکي از نسخه هاي جديد stl نياز داريد (منظور از جديد يعني آخرينش که 97 هست!) . روي VC 6 و gcc 4.1.0 تست شده و بدون مشکله . به احتمال زياد روي بورلند سي حتي 5.02 کار نخواهد کرد بخاطر پشتياني بد بورلند از stl اما ميتونيد امتحان کنيد .

متاسفانه اديتور با حجم فايل مشکل داره و پيغام internal server error 500 ميده . البته سبب خير شد چون بايد 3 قسمت ميشد که من تصميم گرفته بودم براي راحتي مقايسه يک فايلشون کنم. حالا در 3 فايل تقديم ميشه .

پي نوشت: متاسفانه حتي با 3 يا 4 قسمت هم ارسال امکان پذير نشد و ظاهرا مشکل اصلي فقط در تابع main هست که آپلود آن سبب پيغام خطاي اديتور ميشود. مجموعه فايلها رو خدمت مدير محترم سايت ارسال ميکنم تا در صورت امکان اين محبت رو بکنند و به پست اضافه کنند. پيشاپيش از زحمتي که ايجاد ميشه عذر خواهي ميکنم

ارادتمند
نعيمي

Mahdi1944:
به درخواست شما کدهاي مربوطه به پست اضافه شد
[External Link Removed for Guests]
ممنون از زحمات شما دوست خوبم :D
Colonel II
Colonel II
پست: 90
تاریخ عضویت: پنج‌شنبه ۹ شهریور ۱۳۸۵, ۹:۱۵ ب.ظ
سپاس‌های دریافتی: 9 بار

پست توسط athlon64x2 »

borhan,

دوست عزيزم
با توجه به اينکه سوال در دو تاپيک مطرح شده بوده متاسفانه بحث دو قسمت شده که اگر مديران محترم و بزرگوار سايت لطف کنند و در صورت صلاحديد اين دو تاپيک رو ادغام کنند کمک کننده خواهد بود .
http://centralclubs.com/viewtopic.php?t=19445

در مورد کمپايلر ها اگر براتون مقدور باشه و کمپايلر و آپگريد کنيد کمک بزرگي خواهد بود. بورلند سي++ 5.02 حداقل چيزي است که به اون نياز داريد VC6 و GCC 4 انتخابهاي بهتري هستند . مشکل بورلند سي++ ها به قدمت اونا برميگرده. اگرهم علاقمند کتابخانه هاي بورلند هستيد بورلند سي++ 5.5 که همراه اغلب محصولات بورلند مثل c++ builder وجود داره انتخاب خوبي است و نسخه کتابخانه استاندارد سي اون هم جديد ترين هست .

در مورد تغييرات و شيي گرا شدن کد هم که پيشنهاد داده بودم + تغييراتي که در همين پست قبلي در موردشون صحبت کردم کد شما رو دوباره نويسي کردم که در تاپيکي که لينک اونرو دادم ميتونيد ببينيد

در ضمن از فرصت استفاده ميکنم از جناب mahdi1944 که وجود مشغله فراوان زحمت قرار دادن کد روي سايت رو متحمل شدند يک دنيا تشکر و سپاسگزاري ميکنم

ارادتمند شما
نعيمي
Administrator
Administrator
نمایه کاربر
پست: 15899
تاریخ عضویت: جمعه ۷ بهمن ۱۳۸۴, ۷:۵۱ ب.ظ
سپاس‌های ارسالی: 72687 بار
سپاس‌های دریافتی: 31680 بار
تماس:

پست توسط Mahdi1944 »

athlon64x2 عزيز
ضمن عرض تشکر و پوزش به خاطر دير شدن درخواست شما :o
دو تاپيک مورد نظر شما در هم ادغام شد :D
زندگي صحنه يکتاي هنرمندي ماست هرکسي نغمه خود خواند و از صحنه رود
صحنه پيوسته به جاست خرم آن نغمه که مردم بسپارند به ياد


[External Link Removed for Guests] | [External Link Removed for Guests] | مجله الکترونيکي سنترال کلابز

[External Link Removed for Guests] | [External Link Removed for Guests] | [External Link Removed for Guests]

لطفا سوالات فني را فقط در خود انجمن مطرح بفرماييد، به اين سوالات در PM پاسخ داده نخواهد شد
ارسال پست

بازگشت به “برنامه نويسي”