سلام دوستان
بالاخره این برنامه عیجیب غریب برج های هانوی تموم شد. این برنامه با اینکه دو روز وقت من رو گرفت اما برنامه خوبی شد. از تمام نکات مندسی نرم افزار که بلد بودم در این برنامه کمک گرفتم.
یکی از کارهایی که خیلی دوست دارم از اون استفاده بکنم و متاسفانه حتی برنامه نویس های حرفه ای هم در ایران کمتر از اون استفاده میکنن اعلان متغییر ها و توابع به صورت کامل و با اسم متغییر کامل بود. شاید هرگز نمیدونستم که این روش اینقدر مفیده. از امروز در برنامه های خودم برای کامپایل برنامه های حتی کوچیک هم از اعلان درست متغییر ها استفاده میکنم. یکی از مزایای این روش در بازخوانی برنامه هاست. یعنی وقتی که خود شما دوباره میخواین این برنامه رو بخونین و یا اینکه کس دیگه ای میخواد برنامه ی شما رو بخونه کمتر خودش رو درگیر اسم ها با معنای گنگ و یا بی معنی میکنه. گرچه کامپایلر ویژوال وقتی که کلیک راست روی هر متغییر میکنین در کلیپ بورد خودش یک option داره که اسمش هست GO TO Definition که از اسمش معلومه که چی کار میکنه. اما خیلی از اوقات آدم حوصله استفاده از این رو هم نداره. تازه اینکه همیشه کامپایلر همراه آدم نیست که آدم بتونه از این option استفاده بکنه.
در ضمن اینکه در این برنامه توضیحات خیلی کاملی رو گذاشتم که در صورت تمایل میتونید به اون ها نگاهی بیندازید. اگر چه همین الان قسمت های مبهم برنامه رو برای شما هم شرح میدم.
اولین قسمت مبهم برنامه ی خودم فکر میکنم در استفاده از تابع findPlace باشه. این تایع خیلی گنگ شد. خودم هم سعی کردم که هرچه بیشتر اون رو خوانا تر بکنم اما نمیشد. در قسمت اول این برنامه مقدار دهی متغییر های giveA , giveC , giveB هست که در این قسمت تایع از قسمت بالایی آرایه های A ,B ,C شروع میکنه به شمردن و به سمت پایین میاد. در این برنامه من آرایه ها با حداکثر طول 16 استفاده کردم. چون حتی برای 16 تا هم کامپایلر من طول میکشید که کامپایل بکنه . برای آرایه ای با طول 15 کامپایلر حدود سی و دو هزار با باید شکل رسم کنه که اصلا هیچ کس حوصله خوندن این همه شکل رو نداره. یکی دیگه از دلایلی که از آرایه با طول 16 استفاده کردم اینه که چون این برنامه به صورت کنسول نوشته شده بیشتر از این مقادیر در پنجره cmd اصلا نوشته نمی شه. چون برنامه های پنجره cmd فقط با حدود 64 نویسه کار میکنن. اگر چه من از تابع Cosole::SetWindowSize استفاده کردم تا بلکه این مقدار کمی افزایش پیدا بکنه. اما این رو هم در نظر گرفتم که بعضی ها همچنان با کامپایلر های قدیمی استفاده میکنن . حداقل من تابعی برای استفاده اون ها برای افزایش نویسه ها ندیدم.
خوب همون طور که گفتم وقتی متغییر ها شروع به شمارش میکنن وقتی به مقدار برسن اون مقدار رو بر میگردونن. تابع findPlace از همین مقادیر که در خود تابع به دست اومدن استفاده میکنه و مکان بعدی که در اون متغییر باید شکل رسم بشه رو پیدا میکنه.
یک نکته دیگه که خودم رو هم در طول برنامه اذیت کرد این بود که گاهی از native و گاهی از دات نت استفاده کردم. مثلا در یکجا برای به صدا درآوردن بلندگوی کیس از دستور Beep و یک جا از دستور “\a” باعث میشه که کسی که برنامه رو میخونه گیج بشه. اگه خواستین بگین تا این برنامه رو به صورت native کنم و براتون بگذارم.
برای دیدن فایل exe این برنامه باید از دات نت فریم ورک استفاده بکنین. چون تحت دات نت نوشته شده. کد برنامه رو هم در کنارش گذاشتم.
خوب برای دانلود این برنامه از لینک زیر استفاده کنین. نظر رو هم فراموش نکنین. میخوام نظر شما رو در مورد برنامه ای که نوشتم بدونم . ممنون
لینک دانلود برنامه برج های هانوی به زبان ++C
موفق باشین.
+ نوشته شده توسط مهران در جمعه دهم مهر 1388 و ساعت
19:16 |