HW 3.pdf

‫دانشگاه شریف‬
‫تمرین سری سوم درس مبانی برنامه نویسی پایتون‬
‫دمرس‪:‬‬
‫حق‬
‫علیرضا رطقی یقت‬
‫رطاح تمرین‪:‬‬
‫علیرضا خادمی‬
‫‪1‬‬
‫پاییز ‪۴۹‬‬
‫دانشگاه شریف‬
‫تمرین سری سوم درس مبانی برنامه نویسی پایتون‬
‫پاییز ‪۴۹‬‬
‫به نکات زیر حتما دقت کنید‪:‬‬
‫‪ ‬موعد تحویل تمرین تمدید نخواهد شد‪.‬‬
‫‪ ‬قطع بودن اینترنت منزل یا خوابگاه‪ ،‬کندی سرعت اینترنت‪ ،‬عدم وقت و ‪ ...‬هیچ کدام دلیل‬
‫موجهی برای تاخیر نیستند‪ .‬سعی کنید چند ساعت زودتر از مهلت تعیین شده اقدام به ارسال‬
‫پاسخ خود کنید که بتوانید این مشکالت را حل کنید‪.‬‬
‫‪ ‬تذکر ‪ :‬به برنامه های مشابه نمره منفی تعلق خواهد گرفت‪ .‬بنابراین اکیدا توصیه می شود که هر‬
‫دانشجو برنامه خود را به تنهایی نوشته و حتی االمکان دارای الگوریتم‪ ،‬کد و نحوه پیاده سازی‬
‫متفاوتی باشد (اولین تقلب‪ :‬دو نمره منفی‪ ،‬دومین تقلب‪ ۹ :‬نمره منفی‪ ،‬سومین تقلب‪ :‬عدم قبولی‬
‫در درس)‪.‬‬
‫‪ ‬زمان تحویل حضوری تمرین بعد از مهلت ارسال آن خواهد بود و به زودی اعالم خواهد شد‪.‬‬
‫‪ ‬سواالت خود را در صفحه درس برنامه نویسی در سایت ‪ piazza.com‬به آدرس زیر مطرح‬
‫کنید‪:‬‬
‫‪ https://piazza.com/sharif/fall2015/ce1531213/home/‬‬
‫تمرینهای‬
‫‌‬
‫‪ ‬برای آپلود تمرین ها به سایت ‪ Quera.ir‬مراجعه کرده و مطابق با دستورالعمل‪،‬‬
‫خود را آپلود کنید‪.‬‬
‫‪( ‬دستورالعمل آپلود تمرین ها‪ ،‬در صفحه درس و سایت ‪ piazza‬موجود می باشد)‬
‫آخرین مهلت ارسال تمرین‪:‬‬
‫تا پایان روز ‪ 27‬آذر (ساعت ‪)2۹‬‬
‫‪2‬‬
‫دانشگاه شریف‬
‫تمرین سری سوم درس مبانی برنامه نویسی پایتون‬
‫سوال اول ‪ :‬تخمین عدد ‪π‬‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫میخواهیم عدد پی را تخمین بزنیم‪.‬‬
‫فرض میکنیم اندازه ضلع مربع در شکل ‪ 01‬میباشد‪.‬‬
‫به این ترتیب ابتدا تابع )‪ IsInCircle(x,y‬را بنویسید که مشخص کند یک نقطه داخل ربع دایره قرار دارد یا خیر‪.‬‬
‫سپس با تولید تعدادی نقطه تصادفی که در داخل مربع قرار دارند‪ ،‬نسبت تعداد نقاط داخل دایره به تعداد کل‬
‫نقاط را حساب کنید‪.‬‬
‫این نسبت برابر است با یک چهارم عدد پی‪.‬‬
‫بدین ترتیب تابع ) (‪ Find‬را به گونهای بنویسید که تعیین کند که تعداد نقاط تصادفی باید حداقل چند باشد تا به خطای یک‬
‫صدم برسیم‪ ( .‬افزودن نقاط تصادفی تا زمانی که به خطای مورد انتظار برسیم )‬
‫سپس یک عدد از ورودی خوانده و به تعداد آن تابع ) (‪ Find‬را صدا بزنید و میانگین خروجی ها را به عنوان نتیجه نهایی تا پنج‬
‫رقم اعشار چاپ کنید‪.‬‬
‫تذکر ‪:‬‬
‫با توجه به تصحیح کد توسط سیستم در ابتدای کد خود عبارت زیر را بنویسید ‪:‬‬
‫‪from random import randint , seed‬‬
‫)‪seed(10‬‬
‫همچنین برای تولید عدد تصادفی از عبارت زیر استفاده کنید ‪:‬‬
‫) ‪x = float(random.randint(0,10000) /1000‬‬
‫) ‪y = float(random.randint(0,10000) /1000‬‬
‫‪Sample Output‬‬
‫‪Sample Input‬‬
‫‪75.88462‬‬
‫‪26‬‬
‫‪19.53465‬‬
‫‪101‬‬
‫‪0.00000‬‬
‫‪0‬‬
‫‪1.97300‬‬
‫‪1000‬‬
‫‪0.01629‬‬
‫‪121121‬‬
‫‪986.50000‬‬
‫‪2‬‬
‫‪151.76923‬‬
‫‪13‬‬
‫‪3‬‬
‫دانشگاه شریف‬
‫تمرین سری سوم درس مبانی برنامه نویسی پایتون‬
‫سوال دوم ‪ :‬حل عددی معادله ‪ f(x) = 0‬به روش سکانت (وتری)‬
‫کوچکترین‬
‫ریشه‬
‫مثبت‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫معادله با استفاده از روش سکانت و با دقت هفت رقم اعشار محاسبه کنید‬
‫‪.‬‬
‫‪| f(yi+1) | < 10-7‬‬
‫توضیحات بیشتر ‪:‬‬
‫‪https://en.wikipedia.org/wiki/Secant_method‬‬
‫جواب مسئله ‪:‬‬
‫‪1.4474142‬‬
‫‪4‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی پایتون‬
‫دانشگاه شریف‬
‫سوال سوم ‪ :‬قورباغه احمق‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫یک قورباغه در برکه ای درحال حرکت است‪ .‬کمک کنید وضعیت اتفاق افتاده برای قورباغه مشخص شود! برنامه ای بنویسید که در‬
‫خط اول سطر و ستون جدول بازی و در خطوط بعدی به ترتیب نوع هر خانه را سطر به سطر بگیرد‪ .‬در خطوط بعدی دستورات‬
‫وارد میشوند‪ .‬دقت کنید شروع حرکت از خانه صفر و صفر است! یعنی گوشه باال چپ!‬
‫دستورات ‪:‬‬
‫‪ : Up‬باال ‪ : Down ،‬پایین ‪ : Right ،‬راست ‪ : Left ،‬چپ ‪ : Finish ،‬پایان بازی‬
‫‪ : Location‬درخواست موقعیت فعلی قورباغه‬
‫خانه های حرکت قورباغه انواع مختلفی دارد ‪:‬‬
‫) (‪ : E‬انرژی به مقدار داخل پرانتز که میتواند مثبت یا منفی و ضریب ‪ 2‬باشد تغییر کند ‪.‬‬
‫‪ : N‬خانه نرمال‬
‫‪ : C‬تمساح‬
‫) (‪ : J‬جهش به خانه ذکر شده‬
‫قوانین بازی ‪:‬‬
‫‪-‬‬
‫با ورود به هر خانه ‪ ،‬در صورتی که آن خانه نرمال نباشد یکی از جمله های خروجی مربوط باید چاپ گردد ‪.‬‬
‫‪-‬‬
‫در صورتی که دستور جهش به خانه بیرون از جدول باشد عبارت "ناممکن" همانند مثال چاپ گردد ‪.‬‬
‫‪-‬‬
‫قورباغه در دو حالت میمیرد ‪ :‬یکی با انرژی زیر صفر و یکی با شکار توسط تمساح !‬
‫‪-‬‬
‫با تایپ دستور ‪ Finish‬بازی تمام شده و انرژی قورباغه چاپ میشود !‬
‫انواع جمله های خروجی بدین صورت هستند ‪:‬‬
‫!‪Energy 30‬‬
‫)‪Location (4,0‬‬
‫)‪Jump to (3,1‬‬
‫!‪Impossible place‬‬
‫!‪Frog hunted by crocodile :-/! Energy 25‬‬
‫!‪Frog died! Energy -10‬‬
‫‪5‬‬
۴۹ ‫پاییز‬
‫دانشگاه شریف‬
‫تمرین سری سوم درس مبانی برنامه نویسی پایتون‬
Sample Input
5*6
N E(20) J(3,2) N N E(-5)
NNNNNC
C E(10) N N J(0,0) C
Sample Output
Energy 20!
Jump to (3,2)
Energy 25!
Impossible place!
Frog hunted by crocodile :-/! Energy 25!
N E(5) N N N C
J(2,0) E(-10) N N C N
Right
Right
Left
Left
Left
Up
6
‫دانشگاه شریف‬
‫تمرین سری سوم درس مبانی برنامه نویسی پایتون‬
‫سوال چهارم ‪ :‬رمزگذاری و رمزگشایی‬
‫پاییز ‪۴۹‬‬
‫( ‪ 22‬نمره )‬
‫برنامه ای بنویسید که هم عمل رمزگذاری و هم رمزگشایی را انجام دهد‪ .‬ورودی برنامه مشخص میکند که هدف رمزگذاری یا‬
‫رمزگشایی است ( ‪ encrypt‬برای رمزگذاری و ‪ decrypt‬برای رمزگشایی )‬
‫روش رمز کردن هم به این صورت است که فایلی به عنوان کلید به شما داده میشود که در آن مشخص شدهاست که کدام کاراکتر‬
‫باید با کدام کاراکتر دیگر جابهجا شود‪ .‬سایر کاراکترهای متن که در فایل کلید جایگزین آن ها مشخص نشده است‪ ،‬به همان‬
‫صورت اولیه در متن خروجی آورده میشوند‪.‬‬
‫متن اصلی که شما باید آن را رمزگذاری یا رمزگشایی کنید در فایل ”‪ “input.txt‬میباشد و شما به وسیلهی فایل ”‪“key.txt‬‬
‫که محتوی کلید می باشد ‪ ،‬با توجه به اینکه هدف رمزگذاری با رمزگشایی است ‪ ،‬متن اصلی را تغییر داده و حاصل را در فایل‬
‫”‪ “output.txt‬ذخیره کنید ‪.‬‬
‫به عنوان مثال کاربر در ورودی عبارت زیر را وارد کرده است ‪:‬‬
‫‪encrypt‬‬
‫محتوی فایل ‪ input‬بدین شکل میباشد ‪:‬‬
‫! ‪Hello , this is input file content‬‬
‫محتوی فایل ‪ key‬بدین صورت است ‪:‬‬
‫‪t ---> b‬‬
‫‪c ---> w‬‬
‫‪H ---> m‬‬
‫? >‪, ---‬‬
‫‪i ---> O‬‬
‫محتوی فایل ‪ output‬به صورت زیر خواهد بود ‪:‬‬
‫! ‪mello ? bhOs Os Onpub Fole wonbenb‬‬
‫تذکر ‪ :‬در ‪ decrypt‬باید بالعکس محتویات فایل ‪ key‬عمل کنید‪ .‬به عنوان نمونه‪ ،‬در مثال فوق حرف ‪ b‬به ‪ ،t‬حرف ‪ w‬به ‪ ،c‬و ‪...‬‬
‫تبدیل میشوند‪‌ .‬‬
‫تذکر ‪ :‬این تمرین را فقط در سایت ‪ quera‬آپلود کنید و نمرهدهی آن در تحویل حضوری صورت خواهد گرفت‪ .‬برخی از‬
‫تستکیسهای این تمرین در سایت ‪ piazza‬قرار داده شدهاست‪.‬‬
‫‪7‬‬