تمرین سری چهارم درس مبانی برنامهسازی مهلت ارسال :سهشنبه یازدهم دیماه ۱۳۸۶ آیدین نصیریشرق )(aideen@gmail.com فهرست نحوه ارسال 1 ................................................................ آدرس ارسال 1 ............................................................. عنوان ایمیل 1 .............................................................. پیوست ایمیل 2 ............................................................. مهلت ارسال 2 .............................................................. نحوه نمرهدهی به برنامه 3 ........................................................ نکات آخر 3 ............................................................... تمرین اول :جمع اعداد خیلی بزرگ! ) ۳۰نمره( 4 .............................................. تمرین دوم :دنباله جادویی ) ۳۰نمره( 5 ................................................... تمرین سوم :کامبیز و برجهای هانوی! ) ۴۰نمره( 6 .............................................. تمرین سری چهارم درس مبانی برنامهسازی مهلت ارسال :سهشنبه یازدهم دیماه ۱۳۸۶ نحوه ارسال لطف ًا به موارد زیر در ارسال ایمیل پاسخهای خود دقت کنید .بدیهیست که در صورت بروز هرگونه اشتباهی در این پروسه ،نمره شما ممکن است اکیدًا صفر بشود و اکیدًا هیچ اعتراضی در این زمینه پذیرفته نیست .این اشتباهات شامل • ارسال ایمیل به هر آدرسی غیر از آدرس ذکر شده • درج عنوان اشتباه • نامگذاری نادرست فایلها )حتی اشتباه در نامگذاری حروف بزرگ و کوچک( • اشتباه در زیپکردن فایلها ،نامگذاری نادرست فایل زیپ شده نهایی ،اشتباه در attachکردن فایل زیپ • کامپایل نشدن برنامه توسط کامپایلر ) g++در MinGWیا (DevCPP • خواندن و نوشتن اشتباه و زائد )هر گونه توضیح اضافه در خروجی یا قرار دادن )( getcharدر انتهای برنامه( و موارد مشابه خواهد بود. آدرس ارسال برنامههای خود را ،پس از تکمیل شدن و بررسی نکات ذیل بهصورت پیوست 1به آدرس cpp8613hw@gmail.comارسال کنید .دقت کنید که بدنهی ایمیل شما ممکنست به هیچوجه خوانده نشود .پس از ارسال ایمیل ،احتما ًال یک ایمیل از طرف ) Cpp Assistantهمان آدرس فوق( به شما میآید که مبنی بر دریافت ایمیل است. توجه کنید که این آدرس ممکنست در طول مهلت ارسال توسط دستیاران درس چک نشود؛ پس اگر سؤال یا مشکلی داشتید ،حتم ًا بهطور مستقیم با یکی از دستیاران درس )ترجیح ًا ( aideen@gmail.comتماس بگیرید .ضمن ًا از ارسال برنامههایتان توسط ایمیلی بهجز ایمیل شخصی خودتان ،اکیدًا خودداری کنید .ایمیلهای خودتان را )حداقل( هر ۳روز یک بار چک کنید! درصورتی که پس از فرستادن برنامههایتان )و پیش از اتمام موعد مقرّر( تصمیم به ارسال مجدد )و با تغییر( برنامههایتان گرفتید ،ایمیل دیگری با همان مشخصات و فرمتهای ایمیل قبلی به همان آدرس بزنید و در بدنهی ایمیل دلیل ارسال مجدد و تغییرات ایجاد شده را بنویسید .دقت کنید در ایمیل ممکنست کسری از نمره را از دست بدهید. عنوان ایمیل عنوان یا subjectایمیل شما باید به فرمت 86abcdef-4باشد که در آن به جای 86abcdefشماره دانشجوییتان را باید قرار دهید .بهعنوان مثال دانشجوی به شماره دانشجویی ۸۶۱۱۳۸۰۴باید عبارت 86113804-4را برای این سری از تمرینها )سری چهارم( انتخاب کند. ال حذف شده و نمرهشان صفر شود. دقت کنید که ممکنست ایمیلهای ارسالی که فرمت عنوان را رعایت نکرداند ،کام ً Attachment تمرین سری چهارم درس مبانی برنامهسازی جدید باید تمامی فایلها را عین ًا مانند ایمیل اوّلتان و عین ًا با همان فرمت ،قرار دهید .ضمن ًا درصورتیکه دلیلتان برای ارسال موجه نباشد، 1 1 پیوست ایمیل ت P42.cppو های گفته شده )نظییر p ،P41.cpp های خود را با نام ی برنامه ی 2 دلخواه ذخیره کنید .سپپس با انتخاب ه (P43نوشته و در یک پوشه 3.cpp کلیک راست ماوس ،از منوی ک تمامی ففایل و زدن Compressed Folder Sen nd to گزینهی سؤالی از طرف در صورت پرسیدن س را انتخاب کرده و ر بزنید. ویندوز ،گگزینهی Noرا د یک فایل شبیه نهایت ًا فایل zipساخته شود توسط خود ویندوز را به ک در آن abcdefساییر ارقام شماره 86abcdef-4تغغییر نام دهید که ر 4.zip ال دانشجوی به شماره دانشجویی ۸۶۱۱۱۳۸۰۴باید نام دانشجویی شماست .مث ً ی کنید که وجود د زیپشدهاش 86113804-4.zipباشد .دقت فایل پ ده و اشتباه در نامگذاری فایل، های اضافی غیر از ۳فایل خواستهشد فایل ی دن نمره بشود. ست باعث کسر شد ممکنس ظیر (zipبه طور دقت کننید که ممکنست پسوند فایلها )نظ فرض به شما نشان داده نشود و پس از تغییر نام فایل ،به پیش ض طور خوددکار در انتهای نام شما )بدون اینکه ممتوجه شوید( درج الف انتظار ،نام واقعی فایل شما شود! در اینصورت برخال 86113804-4.zip p.zip بود، در حالیکه 86113804-4ببه شما نمایش داده میشود! برای 4.zip است منجر به صفر جلوگیری از بروز این مشککل که ممکن ت ی شدن ننمره شما بشود ،از منوی Folder Option T Tools باالیی ،گزینهی انتخاب کرده و سپس در پنجرهای که باز ب را میشود ،از قسمت known file types View گزینهی Hide extension ns for را )پاایینترین گزینهی قابل رؤیت!( غیر نید )تیک آن را برددارید( .اکنون میتووانید مطمئن باشد فعال کنی هستند که میبینید! د که نام فاایلها همانی تمرین سری چهارم درس مبانی برنامهسازی 2 مهلت ارسال ماه است .پس از این تاریخ ،شما ۲۴ساععت وقت دارید تا ببا کسر ۲۰٪از مهلت شمما برای ارسال این تمارین ساعت ۲۳:۵۹۹:۵۹روز سهشنببه ،یازدهم دی ه اینترنت ،داشتن تمرین ،کووئیز و میانترم ، شدن کارت اینترنت خوابگاه ،تمام ش ت سابی ،تمارین خود را با تأخیر ارسال ککنید .دالیلی نظیر ققطع بودن نمره اکتس نمیسازند. فوت اقوام درجه ۲به باال و ...همگی غیرموجه بوده و هیچ ععذری را پذیرفته ی ن ،خواب ماندن ،ت های دیگر ،فراموشی ،ببرگشتن از شهرستان درس ی Folderیا Directory 2 نحوه نمرهدهی به برنامه برنامههای خود را با نامهای خواسته شده ذخیره و آمادهسازی کنید و حتم ًا نام ،نام خانوادگی و شماره دانشجویی خود را )با حروف انگلیسی( باالی هر برنامه به صورت کامنت قرار دهید .همچنین رویه اجرای برنامه و تمام متغیرها و توابع خود را با قرار دادن کامنتهای الزم حتم ًا خوانا و واضح کنید .تخطی از این موارد ممکنست باعث شود شما درصدی از نمره را از دست بدهید. معیار نمرهدهی به برنامه صرفاً ،صحّت عملکرد و سرعت اجرای برنامه میباشد ،امّا خوانایی و وضوح کد اکیدًا توصیه میشود .دقّت کنید که یک برنامهی طوالنی ولی دقیق و کارا بسیار با اهمیتتر از یک برنامهی کثیف)!( و فشرده است. در بعضی از برنامههای خواسته شده ،محدودیتی برای ورودیها ذکر شده است .با این محدودیتها و محاسبهی تعداد اعمال برنامهشما ،و این فرض که در هر ثانیه بین ۱۰۶تا ۱۰۹دستور توسط کامپیوتر انجام میشود ،3شما میتوانید تقریبی از زمان اجرای برنامهی خود بهدست بیاورید. به هر یک از برنامههای شما ۱۰ ،ورودی مختلف داشته میشود و برنامهی شما باید در حداکثر ۱ثانیه )برای هر ورودی( پاسخ صحیح را ارائه داده و به پایان برسد ،در غیر اینصورت ،نمرهی آن ورودی را نمیگیرید .با این وصف ،حلقهی زیر برای ۱, ۰۰۰, ۰۰۰, ۰۰۰ ،بیشتر از ۱ثانیه طول میکشد و نتیجت ًا الگوریتم مناسبی برای محاسبهی »باقیماندهی مجموع اعداد ۱تا nبر «۱۰۰۰نمیباشد! ;int sum = 0 )for (int i=0; i<n; i++ ;sum = (sum + i) % 1000 بد نیست این کد را نوشته و ببینید حداکثر مقدار که در حدود یک ثانیه کار به پایان میرسید ،چه توانی از ۱۰است؟! نکات آخر پیش از ارسال برنامهها ،یکبار دیگر به نکات زیر توجه کرده و آنها را در هر ۳برنامهی خود بررسی کنید. • از خواندن و نوشتن اضافی )نظیر نوشتن The result is: 10به جای 10و گذاشتن )( getcharدر پایان برنامه( بپرهیزید. • اسم برنامههایتان صحیح )بدون پسوند اضافه( باشد .توجه کنید که P41.cppبا ) p41.cppغلط( و ) P41.CPPغلط( متفاوت است! • نام و نام خانوادگی و توضیحات اضافی را بهصورت commentدر برنامههایتان قرار داده باشد. • از دوستانتان و دستیاران درس کمک بگیرید ولی هرگز کُپ نزنید! دقت کنید که رعایت نکردن هر یک از ۴نکتهی فوق ممکنست باعث از دست دادن تمام یا بخشی از نمرهی شود. در صورت مشاهدهی کُپ یا کدی که توسط خود دانشجو نوشته نشده باشد ،نمرهی فرد یا افراد خاطی )منجمله ُکپدهنده!( به -۱تبدیل خواهد شد .در صورتی که از شخص خاص کمک الگوریتمی گرفتهاید ،حتم ًا این نکته را )نام فرد کمک گیرنده و توضیح کمک وی( بهصورت commentدر ابتدای برنامهی خود بنویسید. تمرین سری چهارم درس مبانی برنامهسازی 3این اعداد به نوع کامپیوتر ،نوع دستورات و موارد زیادی وابستهاند ،اما به طور تقریبی صحیحاند. 3 تمرین اول :ج مع اعداد خیلی بزرگ ! ) ۳۰نمره ( برنامه شما برای این تمرین باید با نام P41.cppنوشته و ذخیره شود. برنامهای بنویسید که ابتدا یک عدد طبیعی را از ورودی بخواند؛ سپس در سطر دوم ورودی، عدد »خیلی بزرگ« خوانده و حاصل جمع این اعداد را در خروجی بنویسد .دقّت کنید که اعداد خیلی بزرگ ممکن است در هیچ یک از نوع4های متعارف جا نشود. • حداکثر مقدار ۱۰ ،بوده و هر یک از اعداد خیلی بزرگ نامنفی بوده و حداکثر ۱۰۰رقم خواهند داشت. • در سمت چپ هیچ عددی در ورودی صفر اضافی وجود ندارد )نظیر (۰۰۱۲و در خروجی نیز این نکته باید رعایت شود. خروجی صحیح مثال ورودی 1110 3 1000 100 10 مثال ورودی 2 1234567890123456789012345678901234567890 2011111111111111111111111111111111111112 خروجی صحیح 3245679001234567900123456790012345679002 تمرین سری چهارم درس مبانی برنامهسازی Type 4 4 تمرین دوم :د نباله جادویی ) ۳۰نمره ( برنامه شما برای این تمرین باید با نام P42.cppنوشته و ذخیره شود. برنامهای بنویسید که عدد مثبت آیا با اتصال یک جایگشت کامل از و سپس کلمهی حداکثر ۱۰حرفی را از ورودی بخواند ،سپس یک جملهی دراز خوانده و نهایت ًا مشخص کند که کلمه خوانده شده میتوان به آن جمله رسید یا نه؟ دقت کنید که هر یک از کلمات داده شده دقیق ًا یکبار باید در جمله بهکار گرفته شود .در صورتی که جایگشتی از کلمات ،جمله را میسازد در خروجی ) YESبا حروف بزرگ( و در غیر اینصورت ) NOبا حروف بزرگ( بنویسید. حداکثر مقدار برابر ۱۵است .کلمات و همچنین جمله صرف ًا از حروف کوچک و بزرگ الفبای انگلیسی ساخته شدهاند و هیچ فاصلهای میان حروف آنها نیست. توجه کنید که بررسی تمام ! ۱۵حالت قرارگیری کلمات در کنار یکدیگر ،ممکنست زمان بسیار زیادی طول بکشد؛ از این رو شاید بد نباشد انتخاب کلمات اندکی هوشمندان شود .برای مثال اگر کلمات صرف ًا ۱۵کلمهی یک حرفی aتا oبوده و جمله مورد نظر bcdefghijklmnoaباشد ،نه تنها تمام ! ۱۴جایگشتی که حرف اوّل آنها aاست )نظیر (abcdefghijklmnoبهدردنخور هستند؛ بلکه ! ۱۴جایگشتی که با cشروع میشوند۱۴! ، جایگشتی که با dشروع میشوند و ...نیز لزومی ندارد بررسی شوند! خروجی صحیح مثال ورودی YES 3 TheWay Closed is TheWayisClosed خروجی صحیح مثال ورودی NO 4 Ali Is MyName MyNameIsAli MyNameIsAliIsMyName مثال ورودی 8 A B C D E F G H CDEFGHBA YES تمرین سری چهارم درس مبانی برنامهسازی خروجی صحیح 5 تمرین سوم :کامبیز و ب رج های هانوی ! ) ۴۰نمره ( برنامه شما برای این تمرین باید با نام P43.cppنوشته و ذخیره شود. مسئله »برجهای هانوی« از سه میله با نامهای Aو Bو Cتشکیل میشود که nعدد دیسک با قطرهای مختلف )و ارتفاعهای یکسان( در میلهها قرار دارند. در ابتدای کار تمام دیسکها بهصورت مرتب شده بر اساس قطرشان )طوری که کمقطرترین دیسک باالترین و بزرگترین دیسک پایینترین باشد( روی میلهی Aقرار دارند. یک حرکت »مجاز« در این مسئله برداشتن باالترین دیسک از یک میله )میله مبدأ( و قرار دادن آن در میلهای دیگر )میله مقصد( است بهطوری که هیچ گاه یک دیسک روی دیسکی با قطر کوچکتر قرار نگیرد .با این وصف ،یک حرکت را میتوان با دو حرف بزرگ انگلیسی نمایش داد که حرف اوّل میله مبدأ و حرف دوم میله مقصد است .برای مثال حرکت ABیعنی برداشتن باالترین دیسک میله Aو قرار دادن آن روی تمام دیسکهای میله ) Bدر صورت وجود(. دقّت کنید که حرکت ABتنها زمانی مجاز است که میله Aحداقل یک دیسک داشته باشد و بهعالوه یا میله Bخالی باشد یا قطر باالترین دیسک میله A )که جابهجا میشود( از قطر باالترین دیسک میله Bکمتر باشد. با شروع از حالتی که تمام دیسکها بهصورت مرتب در میلهی Aقرار دارند )نظیر شکل باال( ،بازی هنگامی تمام میشود که یا تمام دیسکها به همین ترتیب در میلهی Bقرار بگیرند )و میلههای Aو Cخالی باشد( یا تمام دیسکها به همین ترتیب در میلهی Cقرار بگیرند )و میلههای Aو Bخالی باشند(. منوچهر برای حل کردن این معما ،الگوریتم زیر را در پیش میگیرد .او ابتدا یک جایگشت از تمام ۶حرکت موجود در نظر میگیرد )برای مثال جایگشت CA, AB, BC, BA, AC, CBاز چپ به راست( ،سپس در هر مرحله سمتچپترین حرکت مجاز از حرکات این جایگشت را انجام میدهد .در عین حال ،او هیچوقت دوست ندارد یک دیسک را در دو حرکت متوالی جابهجا کند و از این رو اگر یک حرکت )بعد از حرکت اوّل( از مقصد حرکت بعدی آغاز شود ،او این حرکت را غیرمجاز تلقّی میکند .برای مثال اگر همین جایگشت گفتهشده را روی میلههای شکل باال در نظر بگیریم ،اوّلین حرکت منوچهر AB خواهد بود )چرا که CAبهدلیل خالی بودن میله Cغیرمجاز است( و حرکت دوم او ACخواهد بود CA :غیر مجاز است چون Cهنوز خالی است؛ ABغیر مجاز است چون دیسک با قطر ۲را نمیتوان روی دیسک با قطر )۱که در حرکت اوّل به Bمنتقل شده( قرار داد؛ BCنیز غیرمجاز است چرا که دیسک رویی Bدر حرکت قبل تکان خورده و منوچهر دوست ندارد یک دیسک را در ۲حرکت متوالی تکان بدهد ،مشابه ًا BAنیز غیر مجاز است و از این رو تمرین سری چهارم درس مبانی برنامهسازی 6 سمتچپترین حرکت مجاز ACاست! میتوان اثبات کرد که الگوریتم منوچهر همیشه پایان مییابد! آنچه از شما خواسته میشود اینست که با دانستن تعداد دیسکها و استراتژی منوچهر )جایگشتی از ۶حرکت ممکن( ،مشخص کنید که منوچهر چند جابهجایی انجام میدهد تا بازی تمام شود. خط اوّل ورودی تنها یک عدد را داشته و در خط دوم یک جایگشت از حرکات ممکن بهصورت ۶رشتهی دو حرفی )معتبر و دو به دو متمایز( داده میشود .بهازای هر تست ورودی ،در یک سطر تعداد حرکاتی که منوچهر میکند را بنویسید. میدانیم ۳۰ ۱۸ ۱و جواب خروجی هیچ تستی بیشتر از ۱۰نخواهد بود. خروجی صحیح مثال ورودی 7 3 AB BC CA BA CB AC خروجی صحیح مثال ورودی 2 AB BA CA BC CB AC 5 این سری از تمرینها ،آخرین سری بوده و تنها شامل ۳سؤال است! »موفق باشید!« تمرین سری چهارم درس مبانی برنامهسازی 7
© Copyright 2025 Paperzz