تمرین سری سوم درس مبانی برنامهسازی مهلت ارسال :شنبه اوّل دیماه ۱۳۸۶ آیدین نصیریشرق )([email protected] فهرست نحوه ارسال 1 ................................................................ آدرس ارسال 1 ............................................................. عنوان ایمیل 1 .............................................................. پیوست ایمیل 2 ............................................................. مهلت ارسال 2 .............................................................. نحوه نمرهدهی به برنامه 3 ........................................................ نکات آخر 3 ............................................................... تمرین اول :تبدیل جایگشت به عدد ) ۲۰نمره( 4 .............................................. تمرین دوم :زیرمجموعهها ) ۲۰نمره( 5 .................................................... تمرین سوم :روبات و جواهرات گمشده ) ۳۰نمره( 6 .............................................. تمرین چهارم :شبیهسازی جستوجوی دودویی ) ۳۰نمره( 7 ......................................... تمرین سری سوم درس مبانی برنامهسازی مهلت ارسال :شنبه اوّل دیماه ۱۳۸۶ نحوه ارسال لطف ًا به موارد زیر در ارسال ایمیل پاسخهای خود دقت کنید .بدیهیست که در صورت بروز هرگونه اشتباهی در این پروسه ،نمره شما ممکن است اکیدًا صفر بشود و اکیدًا هیچ اعتراضی در این زمینه پذیرفته نیست .این اشتباهات شامل • ارسال ایمیل به هر آدرسی غیر از آدرس ذکر شده • درج عنوان اشتباه • نامگذاری نادرست فایلها )حتی اشتباه در نامگذاری حروف بزرگ و کوچک( • اشتباه در زیپکردن فایلها ،نامگذاری نادرست فایل زیپ شده نهایی ،اشتباه در attachکردن فایل زیپ • کامپایل نشدن برنامه توسط کامپایلر ) g++در MinGWیا (DevCPP • خواندن و نوشتن اشتباه و زائد )هر گونه توضیح اضافه در خروجی یا قرار دادن )( getcharدر انتهای برنامه( و موارد مشابه خواهد بود. آدرس ارسال برنامههای خود را ،پس از تکمیل شدن و بررسی نکات ذیل بهصورت پیوست 1به آدرس [email protected]ارسال کنید .دقت کنید که بدنهی ایمیل شما ممکنست به هیچوجه خوانده نشود .پس از ارسال ایمیل ،احتما ًال یک ایمیل از طرف ) Cpp Assistantهمان آدرس فوق( به شما میآید که مبنی بر دریافت ایمیل است. توجه کنید که این آدرس ممکنست در طول مهلت ارسال توسط دستیاران درس چک نشود؛ پس اگر سؤال یا مشکلی داشتید ،حتم ًا بهطور مستقیم با یکی از دستیاران درس )ترجیح ًا ( [email protected]تماس بگیرید .ضمن ًا از ارسال برنامههایتان توسط ایمیلی بهجز ایمیل شخصی خودتان ،اکیدًا خودداری کنید .ایمیلهای خودتان را )حداقل( هر ۳روز یک بار چک کنید! درصورتی که پس از فرستادن برنامههایتان )و پیش از اتمام موعد مقرّر( تصمیم به ارسال مجدد )و با تغییر( برنامههایتان گرفتید ،ایمیل دیگری با همان مشخصات و فرمتهای ایمیل قبلی به همان آدرس بزنید و در بدنهی ایمیل دلیل ارسال مجدد و تغییرات ایجاد شده را بنویسید .دقت کنید در ایمیل جدید باید تمامی فایلها را عین ًا مانند ایمیل اوّلتان و عین ًا با همان فرمت ،قرار دهید .ضمن ًا درصورتیکه دلیلتان برای ارسال موجه نباشد، عنوان ایمیل عنوان یا subjectایمیل شما باید به فرمت 86abcdef-3باشد که در آن به جای 86abcdefشماره دانشجوییتان را باید قرار دهید .بهعنوان مثال دانشجوی به شماره دانشجویی ۸۶۱۱۳۸۰۴باید عبارت 86113804-3را برای این سری از تمرینها )سری دوم( انتخاب کند. ال حذف شده و نمرهشان صفر شود. دقت کنید که ممکنست ایمیلهای ارسالی که فرمت عنوان را رعایت نکرداند ،کام ً Attachment تمرین سری سوم درس مبانی برنامهسازی ممکنست کسری از نمره را از دست بدهید. 1 1 پیوست ایمیل ت ظیر ،P32.cpp ،P31.cpp های گفته شده )نظ های خود را با نامها برنامه ی (P34.cppنوشته و در یک پپوشه 2دلخواه ذخیره کنید .سپس P P33و 3.cpp انتخاب تمامی فایل و زدن کلیک راست ماووس ،از منوی ب با Compressed Folder Send d to گزینهی سؤالی از طرف در صورت پرسیدن س را انتخاب کرده و ر بزنید. ویندوز ،گگزینهی Noرا د یک فایل شبیه نهایت ًا فایل zipساخته شود توسط خود ویندوز را به ک در آن abcdefساییر ارقام شماره 86abcdef-3تغغییر نام دهید که ر 3.zip ال دانشجوی به شماره دانشجویی ۸۶۱۱۱۳۸۰۴باید نام دانشجویی شماست .مث ً ی کنید که وجود د زیپشدهاش 86113804-3.zipباشد .دقت فایل پ ده و اشتباه در نامگذاری فایل، های اضافی غیر از ۴فایل خواستهشد فایل ی دن نمره بشود. ست باعث کسر شد ممکنس ظیر (zipبه طور دقت کننید که ممکنست پسوند فایلها )نظ فرض به شما نشان داده نشود و پس از تغییر نام فایل ،به پیش ض طور خوددکار در انتهای نام شما )بدون اینکه ممتوجه شوید( درج الف انتظار ،نام واقعی فایل شما شود! در اینصورت برخال 86113804-3.zip p.zip بود، در حالیکه 86113804-3ببه شما نمایش داده میشود! برای 3.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در پایان برنامه( بپرهیزید. • اسم برنامههایتان صحیح )بدون پسوند اضافه( باشد .توجه کنید که P31.cppبا ) p31.cppغلط( و ) P31.CPPغلط( متفاوت است! • نام و نام خانوادگی و توضیحات اضافی را بهصورت commentدر برنامههایتان قرار داده باشد. • از دوستانتان و دستیاران درس کمک بگیرید ولی هرگز کُپ نزنید! دقت کنید که رعایت نکردن هر یک از ۴نکتهی فوق ممکنست باعث از دست دادن تمام یا بخشی از نمرهی شود. در صورت مشاهدهی کُپ یا کدی که توسط خود دانشجو نوشته نشده باشد ،نمرهی فرد یا افراد خاطی )منجمله ُکپدهنده!( به -۱تبدیل خواهد شد .در صورتی که از شخص خاص کمک الگوریتمی گرفتهاید ،حتم ًا این نکته را )نام فرد کمک گیرنده و توضیح کمک وی( بهصورت commentدر ابتدای برنامهی خود بنویسید. تمرین سری سوم درس مبانی برنامهسازی 3این اعداد به نوع کامپیوتر ،نوع دستورات و موارد زیادی وابستهاند ،اما به طور تقریبی صحیحاند. 3 تمرین اول :تبدیل جای گشت به عدد ) ۲۰نمره ( برنامه شما برای این تمرین باید با نام P31.cppنوشته و ذخیره شود. برنامهای بنویسید که ابتدا یک عدد طبیعی را از ورودی بخواند؛ سپس در سطر دوم ورودی ،یک جایگشت از اعداد ۱تا صورتی که تمام جایگشت ! جایگشت ممکن ۱تا خوانده و مشخّص کند که در را به ترتیب دیکشنری 4مرتب کنیم ،جایگشت داده شده در ورودی چندمین جایگشت است؟ تبدیل معکوس این عمل )عدد به جایگشت( در کالس حل تمرین ،بررسی شده و یک راهحل این تمرین ،مشاب ِه آن کار ،به صورت بازگشتی است! حداکثر مقدار ۱۵ ،بوده و عدد خروجی باید در بازهی ! ۱,باشد .اعداد ورودی در سطر دوم با فاصلهی خالی جدا شدهاند خروجی صحیح مثال ورودی 3 3 1 2 مثال ورودی 5 خروجی صحیح 4 3 4 1 2 تمرین سری سوم درس مبانی برنامهسازی 4 ابتدا بر اساس درایه اوّل ،در صورت تساوی بر اساس درایه دوم و 17 Dictionary Order:... 4 تمرین دوم :ز یرمجموعه ها ) ۲۰نمره ( برنامه شما برای این تمرین باید با نام P32.cppنوشته و ذخیره شود. برنامهای بنویسید که عدد مثبت و سپس عدد ۱را از ورودی خوانده و تمام زیرمجموعههای عضوی مجموعهی ۱, ۲, … ,را بهترتیب الفبایی در خروجی بنویسد .دقت کنید که اعضای هر زیرمجموعه در یک خط به صورت اکیدًا صعودی میبایست نوشته شود و خود زیرمجموعهها نیز باید ابتدا بر حسب عنصر اوّل )کوچکترین( ،سپس در صورت تساوی بر حسب عنصر دوم و ...مرتب شوند. • حداکثر مقدار ۳۰ ،است. سعی کنید این برنامه را به دو طریق بازگشتی و غیربازگشتی نوشته و زمان اجرای آنها را با هم مقایسه کنید .دقّت کنید که برای مقایسهی زمان اجرا بهتر است خروجی برنامهتان را در یک فایل بریزید؛ نظیرa.exe > out.txt : اینکار باید در محیط ) command promptدستور (cmdانجام شود! خروجی صحیح مثال ورودی 1 2 1 3 2 3 3 2 خروجی صحیح مثال ورودی 4 1 مثال ورودی 1 2 3 4 خروجی صحیح 4 3 3 4 4 4 2 2 3 3 1 1 1 2 تمرین سری سوم درس مبانی برنامهسازی 5 تمرین سوم :ر وبات و جواهرات گم شده ) ۳۰نمره ( برنامه شما برای این تمرین باید با نام P33.cppنوشته و ذخیره شود. یک روبات احمق صبح یک روز بارانی روی نقطهی ۰, ۰صفحه مختصات دو بعدی ایستاده و بهدنبال جعبهی جواهرات گمشدهاش که در یکی از نقاط صحیح صفحهی مختصات است ،میگردد .برای این منظور او در ثانیهی صفر به سمت شرق )سمت مثبت محور ها( میرود و پس از آن در هر ثانیه یک واحد )روی یک خط صاف به طول یک( به جلو میرود؛ اما چون پای راستش میلنگد ،جهت حرکتش تمایل به ۹۰درجه چرخش به سمت راست )نسبت به جهت قبلیاش( دارد و اگر در پایان یک ثانیه خانهی سمت راست )سمت راست نسبت به جهت آخرین حرکت قبلی و نه لزوم ًا شرق( خانهی جاریاش را ندیده باشد ،به آن خانه متمایل میشود. شکل زیر مسیر حرکت روبات تا ثانیهی ۲۲را نشان میدهد .برای مثال در انتهای ثانیهی ،۳وقتی روبات در خانه ۰, ۱قرار دارد علیرغم میل ال آنجا را دیده است. باطنیاش برای چرخش به سمت راست و رفتن به نقطهی ، ۰, ۰نمیتواند به آن خانه برود چرا که قب ً 3 2 1 0 3 1 2 -1 0 -2 -3 -1 -2 -3 برنامهای بنویسید که مختصات جعبهی جواهرات )ابتدا تمرین سری سوم درس مبانی برنامهسازی 6 و سپس مختصههای داده شده در ورودی در بازهی ۱۰۰۰۰۰, ۱۰۰۰۰۰ آن( را از ورودی خوانده و مشخص کند روبات پس از چند ثانیه به آنجا میرسد. قرار دارند. خروجی صحیح مثال ورودی -1 -1 مثال ورودی 4 خروجی صحیح -2 1 19 تمرین چهارم :ش بیه سازی جست وجوی دودویی ) ۳۰نمره ( برنامه شما برای این تمرین باید با نام P34.cppنوشته و ذخیره شود. بازی »جستوجوی دودویی« یک بازی دو نفرهاست که در آن ابتدا نفر اوّل یک عدد مثبت کوچکتر از ۱۰۲۴انتخاب کرده و در ذهن خود نگه میدارد .سپس نفر دوم با پرسیدن سؤال سعی میکند در سریعترین زمان ممکن آن عدد را حدس بزند .هر سؤال نفر دوم صرف ًا یک عدد صحیح در بازهی ۱, ۱۰۲۳است و پاسخ نفر اوّل یکی از گزینههای »عددی که گفتی ،بزرگتر از عدد انتخابی من است« یا »عددی که گفتی ،کوچکتر از عدد انتخابی من است« یا »آفرین ،خودشه!« است. یک الگوریتم بهینه برای نفر دوم اینست که با پرسیدن عدد میانهی بازهای که جواب میتوان در آن باشد ،اندازهی آن بازه را )حدودًا( نصف کند .برای مثال اگر نفر دوم در اوّلین پرسش خود ،عدد ۵۱۲را بیان کند آن گاه حتی در بدترین حالت اندازهی بازهی ممکن برای جواب از ۱۰۲۳واحد به ۵۱۱واحد )یا بازهی ۱, ۵۱۱یا بازهی ( ۵۱۳, ۱۰۲۳کاهش مییابد! میتوان اثبات کرد که با این الگوریتم ،یقین ًا نفر دوم در حداکثر ۱۰حرکت پاسخ را مییابد. بهعنوان مثال فرض کنید که بعد از پرسیدن ،۵۱۲نفر دوم پاسخ »عددی که گفتی ،کوچکتر از عدد انتخابی من است« را میشنود؛ در این صورت وی یقین مییابد که عدد انتخاب شده توسط نفر اوّل در بازهی ۵۱۳, ۱۰۲۳است و بنابراین در پرسش بعدی خود ،عدد ۷۶۸را مطرح میکند تا حتی در بدترین حالت ،اندازهی بازهی جواب را به ۲۵۵برساند! )به عنوان یک نکتهی شهودی ،در نظر بگیرید که اگر بازهی جواب نفر اوّل فیالواقع )اگر دغلکار باشد!( باید یکی از بازههای 1 , یا 1, , باشد و نفر دوم را بپرسد، را برگزیند که در صورتی که اندازهی این دو بازه برابر نباشد ،بازهی بزرگتر را همواره بر میدارد ،پس پرسش بهینه برای نفر دوم ،پرسشی است که دو بازهی مذکور را هماندازه انتخاب کند(. با این توضیحات ،برنامهای بنویسید که بازی را )توسط هر دو نفر( شبیهسازی کند. در تنها خط ورودی ،عدد ۱۰۲۳ ۱که عدد انتخابی نفر اوّل است داده میشود .شما باید به تعداد پرسشهایی که نفر دوم با الگوریتم فوق میکند ،در خروجی سؤالی که باید پرسیده شود و جوابی که شنیده میشود را با یک فاصله در یک خط بنویسید .جواب شنیدهشده را باید با یکی از حروف بزرگ Mیا Lیا Eنمایش دهید که بهترتیب بیانگر »عددی که گفتی ،بزرگتر از عدد من است« ...» ،کوچکتر از «...و نهایت ًا »آفرین!« است .مسلم ًا )تنها( جواب آخرین سؤال نوشته در خروجی باید Eباشد! از نوشتن سایر حروف و حروف کوچک جدًا خودداری کنید! خروجی صحیح مثال ورودی 768 مثال ورودی 512 L 768 E خروجی صحیح 11 »موفق باشید!« تمرین سری سوم درس مبانی برنامهسازی 512 L 256 L 128 L 64 L 32 L 16 L 8 M 12 L 10 M 11 E 7
© Copyright 2026 Paperzz