تالار گفتمان مانشت

نسخه‌ی کامل: ساختمان(برج هانوی)
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام بچه ها من یه سوال داشتم از بخش هانوی فصل ۱ page20 مقسمی....



A TO C

tower(n-1,a,c,b) a
writeln('move a disk from , a to c ) b
tower(n-1,b,a,) c
N=3
>>>>>>>>>>که تعداد حالات داریم ۱- ۲^n >>>>>>
حالا اگه کد هامون به این صورت باشه در زبان پاسکال
A TO B , B TO C
Writeln(move a disk from, a to b) a
Tower(n-1,a,b,c) b
Writeln(move a disk from b to c ) c

حالا تو کتاب نوشته که این راه حل اشتباه هست ؟ چراااا
ایا بخاطر اینکه حالت های برج به ۱۱تا میرسه و ابتدا به میله ی کمکی ب و بعد به مقصد سی میبره؟
دوستانی که بلدند لطفا راهنمایی کنند
مرسی
چرا نمی تونیم فایل پیوست کنیم ؟ من نمی تونم یا کلا تو این فروم این امکان نیست ؟ من اشکالام از مسائل کتاب و میخوام عکس سوال رو بگذارم نه این که تایپ کنم . نمی شه ؟اقا جواب بدین
من نظرم راجع به این سوال اینه که نمیشه به صورت بازگشتی نوشتش
چون اگه اون بالایی رو روی میله کمکی بذاریم میله کمکی رو از دست میدیم.
(28 تير 1391 09:47 ب.ظ)nomad:D نوشته شده توسط: [ -> ]من نظرم راجع به این سوال اینه که نمیشه به صورت بازگشتی نوشتش
چون اگه اون بالایی رو روی میله کمکی بذاریم میله کمکی رو از دست میدیم.
نه میدونی قضیه چی.....
هر دوی اونها که میشه بصورت بازگشتی نوشت فقط اینکه اون بالاییه از a to c
ولی پایینیه از a to b b to c
فکر میکنم بخاطر اینکه تعداد جابجایی ها زیاد هست جواب قابل قبول نیس...
(28 تير 1391 07:31 ب.ظ)anahitanamvar نوشته شده توسط: [ -> ]چرا نمی تونیم فایل پیوست کنیم ؟ من نمی تونم یا کلا تو این فروم این امکان نیست ؟

سلام؛
فکر نمی کنم مشکلی در پیوست فایل ها باشه؛
از ویرایشگر کامل استفاده می کنید یا سریع؟

(28 تير 1391 05:33 ب.ظ)jameshenas نوشته شده توسط: [ -> ]سلام بچه ها من یه سوال داشتم از بخش هانوی فصل ۱ page20 مقسمی....

A TO B , B TO C
Writeln(move a disk from, a to b) a
Tower(n-1,a,b,c) b
Writeln(move a disk from b to c ) c

حالا تو کتاب نوشته که این راه حل اشتباه هست ؟ چراااا

سلام؛
دستور اولی که اجرا میشه "(Writeln(move a disk from, a to b" کوچکترین دیسک رو از A به B منتقل میکنه؛
بنابراین شما دیگه نمیتونید به کمک میله B باقیمونده n-1 دیسک رو از A به C انتقال بدید (چون هیچ دیسکی روی B نمی تونه قرار بگیره)؛
میتونید به ازای n=3 تریسش کنید؛ در اینصورت سه انتقال متوالی از A به B باید انجام بشه که امکان پذیر نیست؛
درست میگم؟
(29 تير 1391 02:33 ب.ظ)Giasoddin نوشته شده توسط: [ -> ]
(28 تير 1391 05:33 ب.ظ)jameshenas نوشته شده توسط: [ -> ]سلام بچه ها من یه سوال داشتم از بخش هانوی فصل ۱ page20 مقسمی....

A TO B , B TO C
Writeln(move a disk from, a to b) a
Tower(n-1,a,b,c) b
Writeln(move a disk from b to c ) c

حالا تو کتاب نوشته که این راه حل اشتباه هست ؟ چراااا

سلام؛
دستور اولی که اجرا میشه "(Writeln(move a disk from, a to b" کوچکترین دیسک رو از A به B منتقل میکنه؛
بنابراین شما دیگه نمیتونید به کمک میله B باقیمونده n-1 دیسک رو از A به C انتقال بدید (چون هیچ دیسکی روی B نمی تونه قرار بگیره)؛
میتونید به ازای n=3 تریسش کنید؛ در اینصورت سه انتقال متوالی از A به B باید انجام بشه که امکان پذیر نیست؛
درست میگم؟

من هم همین نظر رو دارم.
ببین من تریس کردم n=3
درسته بنظرتون؟
این لینک رو نیگاه عکس گرفتم نمیدونم چرا اینجا نمیشه

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
بله این روشی که حلقه ها رو جا به جا کردید درسته ولی من فکر میکنم این رو نمیشه به صورت بازگشتی نوشت.
چون وقتی اون یه دونه اولی رو میذارید رویِ میله کمکی دیگه نباید بهش دست بزنید و در مرحله بعد باید اون n-1 حلقه رو بذارید روی میله مقصد (که نمیشه چون نمیتونید حلقه های بزرگتر رو روی حلقه کوچکتر بذارید).
این استدلال شخصی من هست. شاید اشتباه می کنم.
(29 تير 1391 07:49 ب.ظ)nomad:D نوشته شده توسط: [ -> ]بله این روشی که حلقه ها رو جا به جا کردید درسته ولی من فکر میکنم این رو نمیشه به صورت بازگشتی نوشت.
چون وقتی اون یه دونه اولی رو میذارید رویِ میله کمکی دیگه نباید بهش دست بزنید و در مرحله بعد باید اون n-1 حلقه رو بذارید روی میله مقصد (که نمیشه چون نمیتونید حلقه های بزرگتر رو روی حلقه کوچکتر بذارید).
این استدلال شخصی من هست. شاید اشتباه می کنم.

اره دیگه من این روش ابداعی خودمه ولی اگه بخایم اون چیزی که شما میگین رو انجام بدیم نشه چون دیسک بزرگ نباید روی دیسک کوچیکه باشه...
پس نتیجه میگیریم که دومیه رو نمیشه از روش بازگشتی حلش کردRolleyes
لینک مرجع