Assignment 3.pdf

Introduction to Programming
Assignment 3
Due: 11:59 pm, Sunday, November 14, 2010 (23/8/1389)
Instructor: Ebrahim Barzegary
Email: [email protected]
1
Fall 2010
Sharif University of Technology
‫ﺗﻮﺿﻴﺤﺎت‬
‫ﻗﺒﻞ از ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪﻫﺎ و ارﺳﺎل آﻧﻬﺎ ﺑﻪ ﻣﻮارد زﻳﺮ ﺗﻮﺟﻪ ﻧﻤﺎﺋﻴﺪ‪ .‬ﻋﺪم رﻋﺎﻳﺖ ﻫﺮ ﻳﻚ از ﻣﻮارد زﻳﺮ‬
‫ﻣﻨﺠﺮ ﺑﻪ از دﺳﺖ دادن ﻛﻞ ﻧﻤﺮهي اﻳﻦ ﺗﻤﺮﻳﻦ ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫ در داﺧﻞ ﻫﺮ ﻛﺪام از ﺑﺮﻧﺎﻣﻪﻫﺎ‪ ،‬ﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ ﺧﻮد را ﺑﻪ ﺻﻮرت زﻳﺮ )‪(comment‬‬
‫ﺑﻨﻮﻳﺴﻴﺪ‪:‬‬
‫‪//ID: your student ID‬‬
‫ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل‪:‬‬
‫‪//ID:89654321‬‬
‫ ﺑﻌﺪ از ﻧﻮﺷﺘﻦ ﻫﻤﻪي ﺑﺮﻧﺎﻣﻪﻫﺎ‪ ،‬ﻓﺎﻳﻞ ‪ .cpp‬ﻣﺮﺑﻮط ﺑﻪ ﻫﻤﻪي آنﻫﺎ را در ﻳﻚ ﭘﻮﺷﻪ ﺑﻪ ﻧﺎم‬
‫‪ assignment#3_stdID‬ﻗﺮار دﻫﻴﺪ )ﻛﻪ در آن ‪ stdID‬ﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ ﺷﻤﺎﺳﺖ(؛ ﻣﺜﻼً‬
‫‪ .assignment#3_89654321‬ﺳﭙﺲ اﻳﻦ ﭘﻮﺷﻪ را ﻓﺸﺮده ﻛﻨﻴﺪ‪ .‬ﻓﺎﻳﻞ ﻓﺸﺮده ﺷﺪه را ﺑﻪ‬
‫آدرس ‪ [email protected]‬ارﺳﺎل ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫‪2‬‬
‫ﺗﻮﺿﻴﺤﺎت‬
‫)اداﻣﻪ(‬
‫ ﻋﻨﻮان اﻳﻤﻴﻞ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ‪ assignment#3_stdID‬ﺑﺎﺷﺪ‪ ،‬ﻛﻪ در آن ‪ stdID‬ﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻲ‬
‫ﺷﻤﺎﺳﺖ‪.‬‬
‫ ﻧﺤﻮهي ورودي ﮔﺮﻓﺘﻦ و ﺧﺮوﺟﻲ دادن ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﺑﺎﻳﺪ دﻗﻴﻘﺎً ﺑﻪ ﺻﻮرت ﮔﻔﺘﻪ ﺷﺪه در ﻣﺴﺄﻟﻪ ﺑﺎﺷﺪ‪.‬‬
‫)ﻣﺜﻼً ﺑﻪ ﻓﺎﺻﻠﻪﻫﺎ و ﺑﺰرگ و ﻛﻮﭼﻚ ﺑﻮدن ﺣﺮوف دﻗﺖ ﻛﻨﻴﺪ‪(.‬‬
‫ ﺑﻪ ﻫﺮ ﻳﻚ از ﺑﺮﻧﺎﻣﻪﻫﺎي ﺷﻤﺎ‪ ،‬ﺗﻌﺪادي دادهي ﻧﻤﻮﻧﻪ ﺟﻬﺖ آزﻣﺎﻳﺶ ﺑﺮﻧﺎﻣﻪ‪ ،‬داده ﺧﻮاﻫﺪ ﺷﺪ‪ ،‬ﺑﻨﺎﺑﺮاﻳﻦ‬
‫ﺗﻮﺻﻴﻪ ﻣﻲﺷﻮد ﻛﻪ ﺣﺘﻤﺎً ﻳﻚ ﺑﺎر ﺗﺴﺖﻫﺎي ﻧﻤﻮﻧﻪ را ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎﻳﺘﺎن ﺑﺪﻫﻴﺪ‪.‬‬
‫ ﺗﺬﻛﺮ ‪ :1‬ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺸﺎﺑﻪ ﻧﻤﺮهي ﻣﻨﻔﻲ ﺗﻌﻠﻖ ﺧﻮاﻫﺪ ﮔﺮﻓﺖ‪ .‬ﺑﻨﺎﺑﺮاﻳﻦ اﻛﻴﺪاً ﺗﻮﺻﻴﻪ ﻣﻲﺷﻮد ﻛﻪ ﻫﺮ‬
‫داﻧﺸﺠﻮ ﺑﺮﻧﺎﻣﻪي ﺧﻮد را ﺑﻪ ﺗﻨﻬﺎﻳﻲ ﻧﻮﺷﺘﻪ و ﺣﺘﻲاﻻﻣﻜﺎن داراي اﻟﮕﻮرﻳﺘﻢ‪ ،‬ﻛﺪ و ﻧﺤﻮهي ﭘﻴﺎدهﺳﺎزي‬
‫ﻣﺘﻔﺎوﺗﻲ ﺑﺎﺷﺪ‪.‬‬
‫ ﺗﺬﻛﺮ ‪ :2‬ﻫﻤﺎﻧﮕﻮﻧﻪ ﻛﻪ در ﺻﻔﺤﻪ اول ذﻛﺮ ﺷﺪه اﺳﺖ‪ ،‬ﻣﻬﻠﺖ ارﺳﺎل ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪ اﻳﻤﻴﻞ ﻣﺸﺨﺺ ﺷﺪه‪،‬‬
‫ﺳﺎﻋﺖ ‪ 23:59‬ﻳﻜﺸﻨﺒﻪ )‪ (89/8/23‬ﻣﻲﺑﺎﺷﺪ‪ .‬ﺑﻪ ﺗﻤﺮﻳﻦﻫﺎﻳﻲ ﻛﻪ ﭘﺲ از اﻳﻦ ﺳﺎﻋﺖ ﺑﻪ آدرسِ ﻣﺸﺨﺺ‬
‫ﺷﺪه ارﺳﺎل ﮔﺮدﻧﺪ‪ ،‬ﻧﻤﺮه ﺻﻔﺮ ﺗﻌﻠﻖ ﺧﻮاﻫﺪ ﮔﺮﻓﺖ ‪.‬‬
‫ ﺗﺬﻛﺮ ‪ :3‬ﺑﺮﻧﺎﻣﻪ ﻫﺎي ﺷﻤﺎ ﺑﻪ ﺻﻮرت ﺣﻀﻮري ﺗﺤﻮﻳﻞ ﮔﺮﻓﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﺷﻤﺎ ﺑﺎﻳﺪ ﻗﺎدر ﺑﻪ‬
‫ﺗﻮﺿﻴﺢ دادن روش ﻛﺎرﻛﺮد ﺑﺮﻧﺎﻣﻪ ﺧﻮد و در ﺻﻮرت ﻟﺰوم ﺗﻐﻴﻴﺮ در آن ﺑﺎﺷﻴﺪ ‪.‬‬
‫‪3‬‬
‫ﻣﺴﺄﻟﻪي اول‪ ،‬ﻋﺪد ﮔﻢ ﺷﺪه !!! )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ‪(lostNum.cpp :‬‬
‫ ﻳﻚ ﺟﺎﻳﮕﺸﺖ از اﻋﺪاد ‪ 1‬ﺗﺎ ‪ n‬دارﻳﻢ ﻛﻪ ﻳﻜﻲ از اﻋﺪاد آن ﮔﻢ ﺷﺪه اﺳﺖ !!!‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻋﺪد ﮔﻢ ﺷﺪه را ﭘﻴﺪا ﻛﻨﺪ‪.‬‬
‫در ﺧﻂ اول ورودي ﺑﻪ ﺷﻤﺎ ﻋﺪد ‪ n‬داده ﻣﻲﺷﻮد‪ ،‬ﺳﭙﺲ در ﺧﻂ ﺑﻌﺪ ‪n-1‬‬
‫ﻋﺪد داده ﻣﻲﺷﻮد ﻛﻪ ﺑﺎ ﻓﺎﺻﻠﻪ از ﻫﻢ ﺟﺪا ﺷﺪهاﻧﺪ‪ .‬ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﺑﺎﻳﺪ در‬
‫ﺧﺮوﺟﻲ‪ ،‬ﻋﺪد ﮔﻢ ﺷﺪه را ﺑﻨﻮﻳﺴﺪ ‪.‬‬
‫ﻧﻜﺘﻪ ‪ :‬ﺷﻤﺎ در ﺑﺮﻧﺎﻣﻪي ﺧﻮد ﻣﺠﺎز ﺑﻪ اﺳﺘﻔﺎده از آراﻳﻪ ﻳﺎ ﻫﻴﭻ داده ﺳﺎﺧﺘﺎر دﻳﮕﺮي ﻧﻴﺴﺘﻴﺪ و ﻓﻘﻂ‬
‫ﻣﻲﺗﻮاﻧﻴﺪ از ﺗﻚ ﻣﺘﻐﻴﺮﻫﺎﻳﻲ از ﻧﻮع ‪ int‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫‪Sample Output :‬‬
‫‪4‬‬
‫‪Sample Input :‬‬
‫‪8‬‬
‫‪3512768‬‬
‫‪4‬‬
‫ﻣﺴﺄﻟﻪي دوم‪ ،‬ﻣﺤﺎﺳﺒﻪي ﻋﺪد ∏ )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ‪(pi.cpp :‬‬
‫ ﻣﻲﺧﻮاﻫﻴﻢ ﻋﺪد ﭘﻲ را ﺑﺎ اﺳﺘﻔﺎده از روش ﻣﻮﻧﺖ ﻛﺎرﻟﻮ ﻣﺤﺎﺳﺒﻪ ﻛﻨﻴﻢ‪ .‬اﻳﻦ‬
‫روش ﺑﻪ اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ ‪ n‬ﺑﺎر ﻳﻚ ﻧﻘﻄﻪ ﺑﻪ ﻃﻮر ﺗﺼﺎدﻓﻲ )‪ (Random‬را‬
‫اﻧﺘﺨﺎب ﻣﻲﻛﻨﻴﻢ ﺑﻪ ﻃﻮري ﻛﻪ‪− 1 ≤ x, y ≤ 1 :‬‬
‫ﭼﻮن اﻳﻦ اﻧﺘﺨﺎب ﺷﻤﺎ ﺑﺮ اﺳﺎس ﺗﺼﺎدف ﺑﻮده اﺣﺘﻤﺎل اﻳﻨﻜﻪ اﻳﻦ ﻧﻘﻄﻪ در‬
‫درون داﻳﺮه ﺑﻪ ﻣﺮﻛﺰ )‪ (0,0‬و ﺑﻪ ﺷﻌﺎع ‪ 1‬ﻗﺮار ﺑﮕﻴﺮد ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ ‪. ∏/4‬‬
‫ﺑﺮاي اﻳﻨﻜﻪ ﻋﺪد ﭘﻲ را ﺣﺴﺎب ﻛﻨﻴﺪ ﺗﻌﺪاد‬
‫‪ 1000000‬ﻧﻘﻄﻪ ﺑﻪ ﻃﻮر ﺗﺼﺎدﻓﻲ اﻧﺘﺨﺎب‬
‫ﻛﻨﻴﺪ و ﺑﺎ اﺳﺘﻔﺎده از ﻧﺴﺒﺖ ﺗﻌﺪاد ﻧﻘﺎط درون‬
‫داﻳﺮه ﺑﻪ ﺗﻌﺪاد ﻛﻞ ﻧﻘﺎط ﻛﻪ ﺗﻘﺮﻳﺒﺎ ‪∏/4‬‬
‫اﺳﺖ ﻣﻘﺪار ﻋﺪد ﭘﻲ را ﺣﺴﺎب ﻛﻨﻴﺪ ‪.‬‬
‫‪5‬‬
‫ﻣﺴﺄﻟﻪي دوم‬
‫)اداﻣﻪ(‬
‫ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ورودي ﻧﺪارد و ﺧﺮوﺟﻲ آن ﻳﻚ ﻋﺪد اﺳﺖ ﻛﻪ ﻫﻤﺎن ﻋﺪد ﭘﻲ‬
‫اﺳﺖ‪.‬‬
‫ﺗﻮﺟﻪ ‪ :‬ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ داراي ﺗﺎﺑﻌﻲ ﺑﺎﺷﺪ ﻛﻪ ﻳﻚ ﻋﺪد ﺗﺼﺎدﻓﻲ ﺗﻮﻟﻴﺪ ﻛﻨﺪ‪ ،‬اﮔﺮ در‬
‫داﻳﺮه ﻗﺮار داﺷﺖ ﻣﻘﺪار ‪ 1‬را ﺑﺮﮔﺮداﻧﺪ و اﮔﺮ وﺟﻮد ﻧﺪاﺷﺖ ﻣﻘﺪار ‪ 0‬و ﺳﭙﺲ ﻧﺴﺒﺖ‬
‫ﺗﻌﺪاد ﺑﺎرﻫﺎﻳﻲ ﻛﻪ ﺗﺎﺑﻊ ﻋﺪد ‪ 1‬را ﺑﺮﮔﺮداﻧﺪه ﺑﻪ ﺗﻌﺪاد ﻛﻞ آزﻣﺎﻳﺶﻫﺎ را ﺣﺴﺎب‬
‫ﻛﻨﻴﺪ‪.‬‬
‫‪6‬‬
‫ﻣﺴﺄﻟﻪي ﺳﻮم‪ ،‬ﺗﻐﻴﻴﺮ ﻣﺒﻨﺎ )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ‪(radixChanging.cpp :‬‬
‫ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪد را در ﻣﺒﻨﺎﻳﻲ ﻏﻴﺮ از ﻣﺒﻨﺎي ‪ 10‬ﮔﺮﻓﺘﻪ و آن‬
‫ﻋﺪد را در ﻣﺒﻨﺎي ‪ 10‬ﻧﻤﺎﻳﺶ دﻫﺪ‪ .‬ﺑﺮﻧﺎﻣﻪ ﺑﻪ اﻳﻦ ﺻﻮرت ﻋﻤﻞ ﻣﻲﻛﻨﺪ ﻛﻪ در‬
‫ورودي‪ ،‬اﺑﺘﺪا ﻋﺪد ﻣﻮرد ﻧﻈﺮ و ﺑﻌﺪ از آن ﺑﺎ ﻳﻚ ﻓﺎﺻﻠﻪ ﻣﺒﻨﺎي آن ﻋﺪد داده‬
‫ﻣﻲﺷﻮد‪ .‬در ﺧﺮوﺟﻲ ﺑﺎﻳﺪ ﻣﺒﻨﺎي ‪ 10‬ﻣﺮﺑﻮط ﺑﻪ آن ﻋﺪد ﭼﺎپ ﺷﻮد‪.‬‬
‫)ﺗﻮﺟﻪ‪ :‬ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﺑﺎﻳﺪ داراي ﺗﺎﺑﻌﻲ ﺑﺎﺷﺪ ﻛﻪ دو ﻋﺪد ﺑﻪ ﻋﻨﻮان ورودي ﺑﮕﻴﺮد ﻛﻪ ﻳﻜﻲ ﻋﺪد و‬
‫دﻳﮕﺮي ﻣﺒﻨﺎي آن اﺳﺖ و ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ ﻣﻘﺪار آن ﻋﺪد در ﻣﺒﻨﺎي ‪ 10‬را ﺑﺪﻫﺪ‪(.‬‬
‫‪Sample Output :‬‬
‫‪153‬‬
‫‪Sample Input :‬‬
‫‪231 8‬‬
‫‪7‬‬
‫ﻣﺴﺄﻟﻪي ﭼﻬﺎرم‪ ،‬ﺟﻨﺎس ﻗﻠﺐ! )ﻧﺎم ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ‪(heart.cpp :‬‬
‫ ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪد از ورودي ﺑﺨﻮاﻧﺪ و ﺗﻌﻴﻴﻦ ﻛﻨﺪ ﻛﻪ ﺟﻨﺎس‬
‫ﻗﻠﺐ دارد ﻳﺎ ﻧﻪ‪ .‬ﻋﺪدي ﺟﻨﺎس ﻗﻠﺐ دارد ﻛﻪ از ﻫﺮ دو ﺟﻬﺖ ﻳﻜﺴﺎن ﺧﻮاﻧﺪه‬
‫ﺷﻮد‪ .‬در ﺻﻮرﺗﻲ ﻛﻪ ﺟﻨﺎس ﻗﻠﺐ اﺳﺖ در ﺧﺮوﺟﻲ ‪ YES‬و اﮔﺮ ﻧﻴﺴﺖ ‪NO‬‬
‫ﭼﺎپ ﻛﻨﺪ‪.‬‬
‫ﻧﻜﺘﻪ ‪ :‬ﺷﻤﺎ در ﺑﺮﻧﺎﻣﻪي ﺧﻮد ﻣﺠﺎز ﺑﻪ اﺳﺘﻔﺎده از آراﻳﻪ ﻳﺎ ﻫﻴﭻ داده ﺳﺎﺧﺘﺎر دﻳﮕﺮي ﻧﻴﺴﺘﻴﺪ و ﻓﻘﻂ‬
‫ﻣﻲﺗﻮاﻧﻴﺪ از ﺗﻚ ﻣﺘﻐﻴﺮﻫﺎﻳﻲ از ﻧﻮع ‪ int‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫‪Sample Output :‬‬
‫‪NO‬‬
‫‪Sample Input :‬‬
‫‪1234‬‬
‫‪Sample Output:‬‬
‫‪YES‬‬
‫‪Sample Input :‬‬
‫‪1467641‬‬
‫‪8‬‬