assignment1.pdf

‫برنامهسازی پیشرفته‬
‫نیمسال دوم ‪۹۵-۹۴‬‬
‫دانشکده مهندسی کامپیوتر‬
‫تمرینات سری اول‬
‫مدرس ‪ :‬مهدی عینعلی‬
‫‪ 110‬نمره‬
‫‪ .1‬تمرین برنامهنویسی سری اول ارایه شدهاست و مهلت ارسال این تمرین ساعت ‪ 23:59‬روز جمعه ‪ 14‬اسفند ماه ‪94‬‬
‫است‪.‬‬
‫‪ .2‬این تمرین از ساعت ‪ 23:59‬روز جمعه همین هفته قابل بارگذاری و داوری روی درگاه ‪ Quera‬است‪.‬‬
‫‪ .3‬همانطور که قبال گفته شد روی تمارین هیچگونه تمدیدی در مهلت ارسال تمارین صورت نمیگیرد‪ .‬بنابراین توصیه‬
‫میشود انجام تمرین را به نزدیکی زمان ددالین نیندازید ‪.‬‬
‫‪ .4‬تمرین باید به صورت حضوری تحویلداده شود و استفاده از کامنت‪ ،‬و ساختار مناسب کد نمره خواهدداشت‪ .‬بنابراین نمره‬
‫کامل از سیستم داوری به معنای نمره کامل نبوده و این نمره تنها بخشی از نمرهی شما خواهد بود‪.‬‬
‫‪ .5‬بارمبندی سواالت به گونهای است که مجموعا ‪ 110‬نمره در نظر گرفتهشده که این ‪ 10‬نمره ‪ ،‬نمره اضافی نیست!‬
‫‪ .6‬همانطور که در سیالبس درس ذکر شدهاست برخورد با تعویق تحویل تمرین یا تقلب دارای ضوابط دقیق و مشخص است‪.‬‬
‫‪ .7‬در صورت داشتن هرگونه مشکل‪ ،‬سوال خود را با تگ مناسب در ‪ Piazza‬مطرح کنید‪.‬‬
‫‪ .8‬میتوانید با درخواست وقت قبلی با دستیار مربوطه ارتباط بگیرید‪.‬‬
‫‪ .9‬طراحی این تمارین بر عهده یاسمین اسدی و پاشا قابوسی بود و شروین خستو ویرایش این تمرین را بر عهده داشت‪.‬‬
‫موفق باشید‪،‬‬
‫ﺑﺮﻧﺎﻣەﻧﻮﯾﺴﯽ ﭘﯿﺸﺮﻓﺘﻪ‬
‫ﻧﯿﻢ‌ﺳﺎل دوم ‪٩۵-٩۴‬‬
‫ﻣﺪرس ‪ :‬ﻣﻬﺪی ﻋﯿﻨﻌﻠﯽ‬
‫داﻧﺸﮑﺪه ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﺗﻤﺮﯾﻦ اول‬
‫‪ .١‬ﺑﺎزی ﺑﺎزی )‪ ٣٠‬ﻧﻤﺮه(‬
‫ﯾﺎﺳﻤﯿﻦ و ﺷﯿﺮﯾﻦ در ﺗﻌﻄﯿﻼت ﺑﻪ دﻟﯿﻞ ﻋﻼﻗﻪ ﺑﻪ ﺟﺎوا ﺗﺼﻤﯿﻢ ﺑﻪ ﻧﻮﺷﺘﻦ ﯾﮏ ﺑﺎزی دوز ﮔﺮﻓﺘﻨﺪ‪ .‬ﺟﺪول‬
‫اﯾﻦ ﺑﺎزی‪ m ،‬ﺳﻄﺮ و ‪ n‬ﺳﺘﻮن دارد‪ .‬در ﻫﺮ ﻣﺮﺣﻠﻪ‪ ،‬ﯾﺎﺳﻤﯿﻦ ﯾﺎ ﺷﯿﺮﯾﻦ ﯾﮑﯽ از ﺳﺘﻮن‌ﻫﺎی ﺟﺪول را‬
‫اﻧﺘﺨﺎب ﮐﺮده و از ﺑﺎﻻ ﻣﻬﺮەای داﺧﻞ آن ﻣﯽ‌اﻧﺪازد‪ .‬ﻣﻬﺮەی اﻧﺪاﺧﺘەﺷﺪه ﺗﺎ ﺟﺎﯾﯽ ﭘﺎﯾﯿﻦ ﻣﯽ‌رود ﮐﻪ ﻣﻬﺮەای‬
‫ﺳﺮ راه آن ﻧﺒﺎﺷﺪ ﯾﺎ ﺑﻪ ﺗﻪ ﺟﺪول ﺑﺮﺳﺪ‪ .‬ﻫﺮوﻗﺖ ﺑﺎزﯾﮑﻨﯽ ﺗﻮاﻧﺴﺖ ﭼﻬﺎر ﺧﺎﻧەی ﭘﺸﺖ ﺳﺮ ﻫﻢ اﻓﻘﯽ‪،‬‬
‫ﻋﻤﻮدی ﯾﺎ ارﯾﺐ را از آن ﺧﻮد ﮐﻨﺪ‪ ،‬ﺑﺮﻧﺪەی ﺑﺎزی اﺳﺖ‪ .‬اﮔﺮ ﺗﻤﺎم ﺧﺎﻧەﻫﺎی ردﯾﻒ ﺑﺎﻻ ﭘﺮ ﺷﻮﻧﺪ و ﮐﺴﯽ‬
‫ﻧﺘﻮاﻧﺪ ﺑﺮﻧﺪەی ﺑﺎزی ﺷﻮد‪ ،‬ﺑﺎزی ﻣﺴﺎوی اﻋﻼم ﻣﯽ‌ﺷﻮد‪ .‬ﺑﻪ اﯾﻦ دو داﻧﺸﺠﻮی ﮐﻮﺷﺎ در ﻧﻮﺷﺘﻦ اﯾﻦ ﺑﺎزی‬
‫ﯾﺎری رﺳﺎﻧﯿﺪ!‬
‫• ﺷﺮوع ﺑﺎزی ﻫﻤﯿﺸﻪ ﺑﺎ ﺷﯿﺮﯾﻦ اﺳﺖ‪.‬‬
‫ورودی‪ :‬در اﺑﺘﺪا دو ﻋﺪد ‪ m‬و ‪ n‬داده ﻣﯽ‌ﺷﻮد‪ ،‬ﺳﭙﺲ ﺷﻤﺎرەی ﺳﺘﻮن‌ﻫﺎی اﻧﺘﺨﺎﺑﯽ ﺑﺎزﯾﮑﻨﺎن در اداﻣﻪ‬
‫ﻣﯽ‌آﯾﺪ‪.‬‬
‫ﺧﺮوﺟﯽ‪ :‬ﺑﺴﺘﻪ ﺑﻪ ورودی ﯾﮑﯽ از ﺳﻪ ﺣﺎﻟﺖ زﯾﺮ در ﺧﺮوﺟﯽ ﭼﺎپ ﻣﯽ‌ﺷﻮد )ﺑﻪ ﻃﺮز ﻧﻮﺷﺘﻦ رﺷﺘەﻫﺎ دﻗﺖ‬
‫ﮐﻨﯿﺪ(‪:‬‬
‫!‪Shirin Wins‬‬
‫!‪Yasamin Wins‬‬
‫‪It’s a tie.‬‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫ورودی ﻧﻤﻮﻧﻪ‬
‫!‪Yasamin Wins‬‬
‫‪44‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪0‬‬
‫‪2‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪2‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪ .٢‬ﺳﻮدوﮐﻮ )‪ ٣٠‬ﻧﻤﺮه(‬
‫ﺑﺎﯾﺪ ﺗﻌﺪاد ﺟﻮاب‌ﻫﺎی ﻣﻤﮑﻦ ﺑﺮای ﯾﮏ ﺟﺪول ‪ ٣x٣‬را ﺑﺎ ﻗﻮاﻧﯿﻦ زﯾﺮ ﭘﯿﺪا ﮐﻨﯿﺪ‪:‬‬
‫• ﻓﻘﻂ اﻋﺪاد ‪ ١‬و ‪ ٢‬و ‪ ٣‬در ﺟﺪول ﺑﺎﺷﻨﺪ‪.‬‬
‫• در ﻫﺮ ﺳﻄﺮ و ﻫﺮ ﺳﺘﻮن ﻧﺒﺎﯾﺪ اﻋﺪاد ﺗﮑﺮاری داﺷﺘﻪ ﺑﺎﺷﯿﻢ‪.‬‬
‫در ورودی‪ ٣ ،‬ﺧﻂ ﮐﻪ در ﻫﺮ ﺧﻂ ‪ ٣‬ﮐﺎراﮐﺘﺮ ﮐﻪ ﯾﮑﯽ از ﺣﺎﻟﺖ‌ﻫﺎی }‪ {١,٢,٣,x‬اﺳﺖ ﻣﯽ‌آﯾﺪ ﮐﻪ اﯾﻦ ‪٣‬‬
‫ﺧﻂ‪ ،‬ﺗﺸﮑﯿﻞ ﯾﮏ ﺟﺪول ‪ ٣x٣‬ﻣﯽ‌دﻫﻨﺪ‪ .‬ﻫﺮ ﮐﺎراﮐﺘﺮ ﺑﺎ ﯾﮏ ﻓﺎﺻﻠﻪ از ﮐﺎراﮐﺘﺮ ﺑﻌﺪی ﺟﺪا ﺷﺪەاﺳﺖ‪.‬‬
‫ﮐﺎراﮐﺘﺮﻫﺎی ‪ x‬ﻣﻘﺪار ﻣﺸﺨﺼﯽ ﻧﺪارﻧﺪ‪.‬‬
‫در ﺧﺮوﺟﯽ‪ ،‬ﺗﻌﺪاد ﺣﺎﻻت ﻣﻤﮑﻦ ﺑﺮای ﺟﻮاب را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫ورودی ﻧﻤﻮﻧﻪ‬
‫‪2‬‬
‫‪1xx‬‬
‫‪2xx‬‬
‫‪3xx‬‬
‫‪ .٣‬زﯾﺮرﺷﺘەﻫﺎ )‪ ١٠‬ﻧﻤﺮه(‬
‫ﺑﺮﻧﺎﻣەای ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ اﺑﺘﺪا ﻋﺪد ﺻﺤﯿﺢ ‪ n‬و ﺳﭙﺲ ‪ n‬رﺷﺘﻪ از ورودی ﺑﮕﯿﺮد‪ .‬ﺧﺮوﺟﯽ ﺑﺮﻧﺎﻣﻪ‪ ،‬ﻃﻮل‬
‫ﺑﺰرﮔﺘﺮﯾﻦ رﺷﺘەای ﻣﺜﻞ ‪ s‬اﺳﺖ ﮐﻪ ﺑﻪ ازای ﻫﺮ ﯾﮏ از ‪ n‬رﺷﺘەی دادەﺷﺪه‪ s ،‬و ﯾﺎ وارون آن را ﺑﻪ ﻋﻨﻮان‬
‫زﯾﺮرﺷﺘﻪ داﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬ﻣﺜﻼ در ورودی ﻧﻤﻮﻧﻪ‪ ،‬رﺷﺘەی ‪ CD‬در ﺷﺮط ﮔﻔﺘەﺷﺪه ﺻﺪق ﻣﯽ‌ﮐﻨﺪ‪.‬‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫ورودی ﻧﻤﻮﻧﻪ‬
‫‪2‬‬
‫‪3‬‬
‫‪ABCD‬‬
‫‪BCDFF‬‬
‫‪BRDC‬‬
‫‪ .۴‬ﻧﻤﻮدارﻫﺎ )‪ ٣٠‬ﻧﻤﺮه(‬
‫اﻣﯿﺮﭘﺎﺷﺎ “ﻓﮑﺮ ﻣﯽ‌ﮐﻨﺪ” ﮐﻪ ﺧﯿﻠﯽ ﺧﻔﻦ اﺳﺖ وﻟﯽ در ﺣﻘﯿﻘﺖ از ﺷﻤﺎ ﻣﯽ‌ﺧﻮاﻫﺪ ﮐﻪ ﻧﻤﻮدارﻫﺎﯾﺶ را رﺳﻢ‬
‫ﮐﻨﯿﺪ‪ .‬ﺑﺮﻧﺎﻣەی ﺷﻤﺎ ﺑﺎﯾﺪ ﻧﻤﻮداری را ﮐﻪ ﺗﻮﺳﻂ ﮔﺮﻓﺘﻦ ﻣﺨﺘﺼﺎت ‪ ٩‬ﻧﻘﻄﻪ از ﮐﺎرﺑﺮ رﺳﻢ ﻣﯽ‌ﺷﻮد‪ ،‬رﺳﻢ ﮐﻨﺪ‪.‬‬
‫ﻣﺨﺘﺼﺎت اﯾﻦ ﻧﻘﻄەﻫﺎ ﻫﻤﮕﯽ ﺑﺎﯾﺪ ﺑﯿﻦ ‪ ٠‬ﺗﺎ ‪ ١٠‬ﺑﺎﺷﻨﺪ‪ ،‬در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﭘﯿﻐﺎم ”‪ “Error 406‬ﭼﺎپ‬
‫ﺷﻮد‪.‬‬
‫• روی ﻣﺤﻮر اﻓﻘﯽ‪ ،‬ﺳﺘﺎرەﻫﺎ را ﺑﺎ ‪ space ٣‬از ﻫﻢ ﺟﺪا ﮐﻨﯿﺪ‪.‬‬
‫)‪(1,1) (2,2) (3,3) (4,4) (5,5‬‬
‫)‪(6,6) (7,7) (8,8) (9,9‬‬
‫ورودی ﻧﻤﻮﻧﻪ‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫‪ .۵‬ﺗﮑﺮار ﺣﺮوف )‪ ١٠‬ﻧﻤﺮه(‬
‫ﻣﯿﻨﺎ ﺑﻪ دﻻﯾﻠﯽ )!( ﻻزم دارد ﮐﻪ ﺑﯿﺸﺘﺮﯾﻦ ﺣﺮف ﺗﮑﺮار ﺷﺪه در ﺗﻌﺪادی ﮐﻠﻤﻪ را ﭘﯿﺪا ﮐﻨﺪ‪ .‬ﺑﺮای ﯾﺎﻓﺘﻦ اﯾﻦ‬
‫ﺣﺮف ﺑﻪ ﻣﯿﻨﺎ ﮐﻤﮏ ﮐﻨﯿﺪ!‬
‫• ﺗﻤﺎﻣﯽ رﺷﺘەﻫﺎی دادەﺷﺪه از ﺣﺮوف ‪ a-z‬ﮐﻮﭼﮏ ﺗﺸﮑﯿﻞ ﺷﺪه و ﺣﺮوف ﺑﺰرگ ﻧﺪارﯾﻢ‪.‬‬
‫• اﮔﺮ در رﺷﺘەﻫﺎی دادەﺷﺪه‪ ،‬ﭼﻨﺪ ﺣﺮف ﺑﻪ ﺻﻮرت ﻣﺸﺘﺮک ﺑﯿﺸﺘﺮﯾﻦ ﺗﮑﺮار را داﺷﺘﻨﺪ‪ ،‬ﺣﺮﻓﯽ ﮐﻪ‬
‫در اﻟﻔﺒﺎ زودﺗﺮ از ﺑﻘﯿﻪ ﻣﯽ‌آﯾﺪ را ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﯽ ﭼﺎپ ﮐﻨﯿﺪ‪ .‬ﺑﺮای ﻣﺜﺎل اﮔﺮ دو ﺣﺮف ‪ y‬و ‪a‬‬
‫ﺑﯿﺸﺘﺮﯾﻦ ﺗﮑﺮار را داﺷﺘﻨﺪ‪ ،‬در ﺧﺮوﺟﯽ ﺣﺮف ‪ a‬را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ورودی‪ :‬اﺑﺘﺪا ﺗﻌﺪاد ﮐﻠﻤﺎت و ﺳﭙﺲ ﮐﻠﻤﺎت داده ﻣﯽ‌ﺷﻮد‪.‬‬
‫ﺧﺮوﺟﯽ‪ :‬ﻓﻘﻂ ﭘﺮﺗﮑﺮارﺗﺮﯾﻦ ﺣﺮف را ﺑﻨﻮﯾﺴﯿﺪ )ﺑﺎ ﺣﺮوف ﮐﻮﭼﮏ(‪.‬‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫‪l‬‬
‫ورودی ﻧﻤﻮﻧﻪ‬
‫‪7‬‬
‫‪when‬‬
‫‪all‬‬
‫‪else‬‬
‫‪fail‬‬
‫‪ctrl‬‬
‫‪alt‬‬
‫‪del‬‬