Assignment3.pdf

‫تمرین سری سوم‬
‫درس مبانی برنامه نویسی‬
‫موعد ارسال‪ :‬سهشنبه ‪ 3‬دی ‪3329‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫موعد ارسال‪ :‬سهشنبه ‪ 3‬دی ‪2331‬‬
‫نکات کلی‬
‫‪ ‬موعد تحویل ساعت ‪( 11:11‬ظهر) روز سهشنبه ‪ 3‬دی ‪ 1311‬بوده و به هیچ عنوان تمدید نخواهد شد‪.‬‬
‫‪ ‬تأخیر تا ‪ 1‬ساعت‪ ،‬به ازای هر ‪ 3‬دقیقه موجب کسر شدن ‪ %1‬نمره‪ ،‬از ‪ 1‬ساعت تا ‪ 12‬ساعت موجب کسر شدن‬
‫‪ %12‬نمره‪ ،‬از ‪ 12‬ساعت تا ‪ 11‬ساعت‪ ،‬به ازای هر ‪ 1‬دقیقه موجب کسر شدن ‪ %1‬نمرهی دیگر و بین ‪ 11‬ساعت‬
‫تا ‪ 24‬ساعت باعث کسر شدن ‪ %12‬نمره میشود ‪ .‬از ‪ 24‬ساعت تا ‪ 21‬ساعت نیز‪ ،‬به ازای هر ‪ 1.1‬دقیقه موجب‬
‫کسر شدن ‪ %1‬درصد نمره ی دیگر می شود‪ ( .‬بدیهی است که با تاخیر بیش از ‪ 21‬ساعت ‪ %122‬نمره از شما‬
‫کسر شده و دیگر از این تمرین نمره ای نمی گیرید )‬
‫‪ ‬قطع بودن اینترنت خوابگاه‪ ،‬کندی پایگاه اینترنتی دانشکده‪ ،‬تمام شدن کارت اینترنت و … هیچکدام دلیل‬
‫موجهی برای تأخیر نیستند‪ .‬بنابراین پیشنهاد میشود جوابهای خود را در دانشکده ارسال کنید‪.‬‬
‫‪ ‬هرگونه رونوشت‪ ،1‬برای منبع رونوشت و همچنین نسخههای رونویسی شده ‪ -1‬نمره در پی خواهد داشت‪.‬‬
‫‪ ‬تالش برای استفاده از منابع سیستم مانند کارت صدا و پرینتر و ‪ ...‬منجر به دریافت نمرهی صفر میشود‪.‬‬
‫‪ ‬سواالت خود را در صفحه درس مبانی برنامه سازی در سایت ‪ piazza.com‬مطرح کنید‪.‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫‪ 1‬کپی یا همان کُپ‬
‫‪1‬‬
‫مسئله ‪ .2‬حلقهی تو در تو‬
‫برنامهای بنویسید که عدد طبیعی ‪ n‬را از کاربر دریافت کرده و مربعی ‪ n*n‬از اعدد را به صورت زیر چاپ نماید‪.‬‬
‫در این مربع اعداد موجود در قطر اصلی برابر ‪ 1‬و اعداد زیر قطر اصلی همگی برابر صفر میباشند و باقی اعداد توسط فرمول زیر‬
‫بدست میآیند‪:‬‬
‫هر عدد برابر است با مجموع اعداد سمت چپش ضرب در شمارهی سطر آن عدد‪ ،‬به عالوهی مجموع اعداد زیرینش ضرب در‬
‫شمارهی ستون آن عدد ( شمارهی سطرها و ستونها از ‪ 1‬شروع میشود )‪.‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪13‬‬
‫‪01‬‬
‫‪1 3 22 234 3280‬‬
‫‪0 1 5 44 520‬‬
‫‪0 0 1 7 74‬‬
‫‪00019‬‬
‫‪00001‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫‪1‬‬
‫‪2‬‬
‫‪5‬‬
‫مسئله ‪ .1‬سرامیک‬
‫برنامهای بنویسید که عدد طبیعی ‪ n‬را از ورودی دریافت کرده و با استفاده از تابع بازگشتی تعداد راههای موجود برای پوشاندن‬
‫یک مستطیل ‪ 2*n‬را با استفاده از سرامیکهای ‪ 2*1‬چاپ میکند‪ ( .‬سرامیکها میتوانند به صورت عمودی یا افقی در مستطیل‬
‫قرار بگیرند اما در انتها حتما باید تمام سطح مستطیل را بپوشانند )‬
‫برای مثال شکل زیر یکی از حاالتی است که یک مستطیل ‪ 1*3‬با استفاده از ‪ 3‬سرامیک پوشانده شده است‪:‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪5‬‬
‫‪4‬‬
‫‪8‬‬
‫‪5‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫‪2‬‬
‫‪2‬‬
‫‪3‬‬
‫مسئله‪ .3‬رمزنگاری‬
‫در این تمرین میخواهیم رشتههایی که با یک روش خاص رمزگذاری شدهاند را رمزگشایی کنیم تا بتوانیم به متن اصلی دست پیدا‬
‫کنیم‪.‬‬
‫برای رمزگشایی متن‪ ،‬در خط اول یک رشته به شما داده میشود که رشتهی کلید برای رمزگشایی میباشد‪ .‬در خط دوم یک سری‬
‫رشته با فرمتی که در زیر مشخص شده است میآیند که هر کدام از آنها یک کلمه را به یک کلمهی دیگر متناظر میکنند و در‬
‫خط سوم متن اصلی داده میشود‪.‬‬
‫برای رمزگشایی متن ابتدا باید در میان کلمات متن اصلی جستجو نماییم و در صورتی که کلمهای موجود بود که در خط دوم به‬
‫کلمهی دیگری متناظر شده بود آن را با کلمهی متناظرش جایگرین کنیم‪ .‬سپس متن اصلی را کاراکتر به کاراکتر میپیماییم‪ .‬در‬
‫صورتی که کاراکتر موردنظر قبال دیده نشده بود‪ ،‬آن را با اولین کاراکتر در رشتهی کلیدمان جمع میکنیم ( در صورتی که مجموع‬
‫از ‪ z‬بیشتر شد از ابتدا ادامه مییابد‪ .‬مثال ‪ ) b+y=a‬و از آن به بعد همیشه به جای آن کاراکتر‪ ،‬کاراکتر متناظر بدست آمده را قرار‬
‫میدهیم‪ .‬سپس برای دومین کاراکتری که قبال دیده نشده بود همین کار را با دومین کاراکتر از رشتهی کلیدمان انجام میدهیم و‬
‫به همین ترتیب تا آخر ( اگر به انتهای کاراکترهای رشتهی کلیدمان رسیدیم دوباره از اول شروع میکنیم )‬
‫و در نهایت متن رمزگشایی شده را چاپ میکنیم‪.‬‬
‫توجه کنید که شما باید تنها حروف کوچک انگلیسی را رمزگشایی کنید و باقی کاراکترها را بدون تغییر در خروجی نمایش دهید‪.‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫?‪salam khoobi‬‬
‫‪fmzk‬‬
‫‪edc=arar, qwejf=mnlnb, hi=hello‬‬
‫?‪qwejf euooqc‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫‪2‬‬
‫‪Tsj Pxestm tmejwowjejw td jfdtkx jiejmiji vtes mjv‬‬
‫‪key‬‬
‫‪qzmbettmd fmi ifef exojd‬‬
‫‪temp=a, d=b, with=easily, easily=with,‬‬
‫‪TEMP=nothing‬‬
‫‪The Python interpreter is with extended easily new‬‬
‫‪functions and data types‬‬
‫مسئله ‪ .4‬فایل‬
‫یک فایل داریم که در هر خط آن تنها یک رشته قرار دارد‪ .‬می خواهیم کاراکترهای به کار رفته در این رشتهها را به ترتیب از‬
‫بیشترین تعداد تکرار به کمترین تعداد تکرار مرتب و چاپ کنیم‪ ( .‬در صورتی که چند کاراکتر به تعداد مساوی تکرار شده بودند‬
‫کاراکتر بزرگتر ابتدا چاپ میشود ) برای این منظور رشتهها را یکی یکی میخوانیم و در صورتی که رشتهی خوانده شده تکراری‬
‫نبود کاراکترهای آن را مورد بررسی قرار میدهیم‪ .‬در صورتی که در فایل به رشتهی ‪ 0‬و یا انتهای فایل رسیدید باید خواندن‬
‫رشتهها را متوقف کنید‪.‬‬
‫خروجی نمونه‬
‫ورودی نمونه‬
‫‪ohaytspnmlkibzxwvurqjgfedc‬‬
‫‪words.txt‬‬
‫‪reawtsohfcupmidzyxvqnlkjgb‬‬
‫‪strings.txt‬‬
‫در این مثال محتوای ‪ words.txt‬برابر است با‪:‬‬
‫‪salam‬‬
‫‪khoobi‬‬
‫‪salam‬‬
‫‪python‬‬
‫‪0‬‬
‫‪java‬‬
‫‪ce‬‬
‫‪computer‬‬
‫‪software‬‬
‫‪hardware‬‬
‫‪ce‬‬
‫‪sharif‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫و محتوای ‪ strings.txt‬برابر است با‪:‬‬
‫‪1‬‬
‫مسئله ‪ .5‬مختصات‬
‫در این تمرین میخواهیم کالس ‪ Point‬را پیادهسازی و به وسیلهی آن دستگاه مختصات دوبعدی و اعمال برروی آنها را مدل‬
‫کنیم‪.‬‬
‫یک ‪ Point‬دارای دو مشخصهی ‪ x‬و ‪ y‬میباشد که شما برای آن باید توابع زیر را پیادهسازی نمایید‪:‬‬
‫) ‪__init__( self, x, y‬‬
‫این تابع‪ ،‬تابع سازنده میباشد که مختصات نقطه را برابر )‪ (x,y‬قرار میدهد‪.‬‬
‫) ‪distance( self, p‬‬
‫این تابع فاصلهی نقطهی ما را تا نقطهی ‪ p‬برمیگرداند‪.‬‬
‫) ‪rotate( self, angle, p‬‬
‫این تابع نقطهی ما را حول نقطهی ‪ p‬با زاویهی ‪ angle‬دوران میدهد‪ ( .‬واحد تمام ‪ angle‬ها رادیان میباشد )‬
‫) ‪add( self, p‬‬
‫این تابع مختصات نقطهی ما را با مختصات ‪ p‬جمع میکند‪.‬‬
‫) ‪addPolar( self, r, angle‬‬
‫این تابع نقطهی ما را با مختصات قطبی مشخص شده ( که ‪ r‬فاصلهی آن تا مرکز مختصات میباشد و ‪ angle‬زاویهی بین خط‬
‫رسم شده از مرکز به آن نقطه و محور طول میباشد ) جمع میکند‪.‬‬
‫) ‪__str__( self‬‬
‫این تابع مختصات نقطه را به این صورت برمیگرداند‪(x,y) :‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫‪6‬‬
‫بعد از پیادهسازی این کالس‪ ،‬با شروع برنامه ‪ 1‬عدد از کاربر دریافت میشود که نقطهی اولیهی ما را مشخص میکند‪ .‬سپس با هر‬
‫یک از دستورات زیر اعمال مورد نظر با استفاده از توابع موجود در کالس باید بر روی نقطه اعمال شود‪.‬‬
‫‪distance x y‬‬
‫با این دستور فاصلهی نقطهی مورد نظر از مختصات )‪ (x,y‬چاپ میشود‪.‬‬
‫‪rotate angle x y‬‬
‫با این دستور عمل دوران حول مختصات )‪ (x,y‬انجام میگیرد اما چیزی چاپ نمیشود‪.‬‬
‫‪add x y‬‬
‫با این دستور مختصات نقطهی ما با مختصات )‪ (x,y‬جمع میشود اما چیزی چاپ نمیشود‪.‬‬
‫‪addPolar r angle‬‬
‫با استفاده از این دستور مختصات نقطهی ما با مختصات قطبی )‪ (r,angle‬جمع میشود اما چیزی چاپ نمیشود‪.‬‬
‫‪print‬‬
‫با استفاده از این دستور مختصات نقطهی ما چاپ میشود‪.‬‬
‫‪end‬‬
‫با این دستور برنامه به اتمام میرسد‪.‬‬
‫ورودی نمونه‬
‫خروجی نمونه‬
‫‪1.41421356237‬‬
‫‪5.5 6.0‬‬
‫)‪(0.0,5.0‬‬
‫‪add 0.5 1.0‬‬
‫)‪(-0.940321764522,-0.0867457729869‬‬
‫‪add -1 -2.0‬‬
‫‪distance 6.0 6.0‬‬
‫‪addPolar -5 0‬‬
‫‪print‬‬
‫‪rotate 1.6 2 2‬‬
‫‪print‬‬
‫‪end‬‬
‫تمرین سری سوم درس مبانی برنامه نویسی‬
‫‪7‬‬