HW3.pdf

‫ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﭘﻴﺸﺮﻓﺘﻪ‬
‫ﻧﻴﻢ ﺳﺎل دوم ‪84-85‬‬
‫ﺗﻤﺮﻳﻦ‪3‬‬
‫ﺷﺮح ﺗﻤﺮﻳﻦ‪:‬‬
‫در اﺛﺮ اﻓﺰاﻳﺶ ﺟﻤﻌﻴﺖ و ﺑﻪ دﻧﺒﺎل ﺁن درﺧﻮاﺳﺖ ﺑﺮاﯼ ﺷﻤﺎرﻩ ﺗﻠﻔﻦ هﺎﯼ ﺟﺪﻳﺪ ﺷﺮﮐﺖ ﻣﺨﺎﺑﺮات در ﻃﯽ ﺳﺎل هﺎﯼ‬
‫ﻣﺨﺘﻠﻒ ﻣﺠﺒﻮر ﺑﻪ ﺗﻐﻴﻴﺮ ﺷﻤﺎرﻩ ﺗﻠﻔﻦ هﺎﯼ ﻣﻮﺟﻮد ﺷﺪﻩ اﺳﺖ ‪.‬‬
‫ﻳﮏ ﺷﻤﺎرﻩ ﺗﻠﻔﻦ از دو ﻗﺴﻤﺖ ﺗﺸﮑﻠﻴﻞ ﺷﺪﻩ اﺳﺖ‪ :‬ﮐﺪ ﺷﻬﺮ و ﺷﻤﺎرﻩ ﻣﺤﻠﯽ ‪ .‬ﻣﺜﻼ اﮔﺮﮐﺪ ﺷﻬﺮﯼ ‪ 021‬ﺑﺎﺷﺪ‪ ،‬ﻳﮏ‬
‫ﺷﻤﺎرﻩ ﺗﻠﻔﻦ در ﺁن ﺷﻬﺮ ﻣﯽ ﺗﻮاﻧﺪ‪ 0211234567‬ﺑﺎﺷﺪ‪ .‬ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﮐﻪ هﻴﭻ ﮐﺪ ﭘﻴﺸﻮﻧﺪ ﮐﺪ دﻳﮕﺮ ﻧﻴﺴﺖ‪.‬‬
‫ﺷﻤﺎ ﺑﺎﻳﺪ ﺑﺮﻧﺎﻣﻪ اﯼ ﺑﻨﻮﻳﺴﻴﺪ ﮐﻪ ﺑﺎ ﮔﺮﻓﺘﻦ اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﮐﺪ و ﺷﻤﺎرﻩ ﺗﻠﻔﻦ هﺎﯼ ﻳﮏ ﺷﻬﺮ ﺑﻪ ﻋﻼوﻩ ﯼ ﺗﻐﻴﻴﺮات‬
‫اﯼ ﮐﻪ روﯼ ﺁن هﺎ ﺻﻮرت ﮐﺮﻓﺘﻪ ‪ ،‬ﺷﻤﺎرﻩ ﺗﻠﻔﻦ هﺎ ﯼ ﺗﻐﻴﻴﺮ ﻳﺎﻓﺘﻪ را ﺑﺪهﺪ‪.‬‬
‫اﻳﻦ ﺗﻐﻴﻴﺮات ﺑﻪ ﺳﻪ دﺳﺘﻪ ﻗﻮاﻋﺪ زﻳﺮ ﻣﺤﺪود ﺷﺪﻩ اﻧﺪ‪.‬‬
‫‪ .1‬ﺗﮑﺮار رﻗﻢ ‪ i‬ام در ﺗﻤﺎم ﺷﻤﺎرﻩ هﺎﯼ ﻣﺤﻠﯽ ﻳﮏ ﺷﻬﺮ‪.‬‬
‫• ﺗﮑﺮار رﻗﻢ دوم‪ ،‬ﺷﻤﺎرﻩ ﯼ ‪ 0211234567‬را ﺑﻪ ‪ 02112234567‬ﺗﺒﺪﻳﻞ ﻣﯽ ﮐﻨﺪ‪.‬‬
‫‪ .2‬ﺟﺎﺑﺠﺎ ﮐﺮدن رﻗﻢ ‪ i‬ام ﺑﺎ رﻗﻢ‪ i+1‬در ﺗﻤﺎم ﺷﻤﺎرﻩ هﺎﯼ ﻣﺤﻠﯽ ﻳﮏ ﺷﻬﺮ‪.‬‬
‫• ﺟﺎﺑﺠﺎ ﮐﺮدن رﻗﻢ دوم و ﺳﻮم‪ ،‬ﺷﻤﺎرﻩ ﯼ ‪ 021123456‬را ﺑﻪ ‪ 0211324567‬ﺗﺒﺪﻳﻞ ﻣﯽ ﮐﻨﺪ‪.‬‬
‫‪ .3‬ﺗﻐﻴﻴﺮ ﮐﺪ ﻳﮏ ﻣﻨﻄﻘﻪ ‪.‬‬
‫• ﺗﻐﻴﻴﺮ ﮐﺪ ‪ 021‬ﺑﻪ ‪ ،0211‬ﺷﻤﺎرﻩ ﯼ ‪ 0211234567‬را ﺑﻪ ‪ 02111234567‬ﺗﺒﺪﻳﻞ ﻣﯽ ﮐﻨﺪ‪.‬‬
‫ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﮐﻪ ﺗﻐﻴﻴﺮ ﮐﺪ در ﻗﺎﻋﺪﻩ ﯼ ﺷﻤﺎرﻩ ﯼ ‪ 3‬ﺧﺎﺻﻴﺖ ﭘﻴﺸﻮﻧﺪ ﯼ ﮐﺪ هﺎ را ﺣﻔﻆ ﻣﯽ ﮐﻨﺪ ‪.‬‬
‫ورودﯼ هﺎ‪:‬‬
‫ﻗﺴﻤﺖ اول ورودﯼ ﮐﺪ ﺷﻬﺮ هﺎ را ﻧﺸﺎن ﻣﯽ دهﺪ‪.‬‬
‫ﺧﻂ اول ﺷﺎﻣﻞ ﻋﺪدﯼ اﺳﺖ ﮐﻪ ﻧﺸﺎن دهﻨﺪﻩ ﯼ ﺗﻌﺪاد ﮐﺪ هﺎ ﯼ ﻣﻮﺟﻮداﺳﺖ ‪ ،‬اﻳﻦ ﻋﺪد در ﻣﺤﺪودﻩ ﯼ‬
‫‪ 1 ≤ A ≤ 1000‬ﻗﺮار دارد‪.‬‬
‫‪ A‬ﺧﻂ ﺑﻌﺪﯼ ﺑﻪ ﺷﮑﻞ زﻳﺮ هﺴﺘﻨﺪ‪:‬‬
‫‪area-code area-name‬‬
‫ﮐﻪ در ﻋﺒﺎرت ﺑﺎﻻ ‪ area-code‬ﻳﮏ رﺷﺘﻪ اﺳﺖ ﮐﻪ ﺣﺪاﻗﻞ ‪ 1‬و ﺣﺪاﮐﺜﺮ ‪ 5‬رﻗﻢ اﺳﺖ و ﻧﺸﺎن دهﻨﺪﻩ ﯼ ﮐﺪ ﻣﻨﻄﻘﻪ اﺳﺖ‬
‫و ‪ area-name‬ﻳﮏ رﺷﺘﻪ اﺳﺖ ﮐﻪ ﺣﺪاﻗﻞ ‪1‬و ﺣﺪاﮐﺜﺮ ‪ 20‬ﺣﺮف دارد ﮐﻪ ﻣﯽ ﺗﻮاﻧﺪ ﺑﻪ دو ﺻﻮرت ‪ uppercase‬و‬
‫‪ lowercase‬ﺁﻣﺪﻩ ﺑﺎﺷﺪ‪.‬‬
‫ﻗﺴﻤﺖ دوم ورودﯼ ﺗﻐﻴﻴﺮاﺗﯽ ﮐﻪ روﯼ ﺷﻤﺎرﻩ ﺗﻠﻔﻦ هﺎ ﺻﻮرت ﮔﺮﻗﺘﻪ را ﺑﺎ اﺳﺘﻔﺎدﻩ از ﺷﻤﺎرﻩ ‪ 3‬ﻗﺎﻋﺪﻩ ﯼ ﺑﺎﻻ ﺗﻮﺻﻴﻒ‬
‫ﻣﯽ ﮐﻨﺪ‪.‬‬
‫اوﻟﻴﻦ ﺧﻂ اﻳﻦ ﻗﺴﻤﺖ ﻋﺪد ‪ R‬ﻗﺮار داردﮐﻪ ﻧﺸﺎن ﻣﯽ دهﺪ ﭼﻪ ﺗﻌﺪاد ﻗﺎﻋﺪﻩ اﻋﻤﺎل ﺷﺪﻩ اﺳﺖ‪ ،‬ﺳﭙﺲ در‪ R‬ﺧﻂ ﺑﻌﺪﯼ‬
‫ﻗﻮاﻋﺪ اﻋﻤﺎل ﺷﺪﻩ ﺑﺎ ﻓﺮﻣﺖ زﻳﺮ ﻣﯽ ﺁﻳﻨﺪ‪:‬‬
‫‪year‬‬
‫‪rule-info‬‬
‫در ﻋﺒﺎرت ﺑﺎﻻ ‪ year‬ﻧﺸﺎن دهﻨﺪﻩ ﯼ ﺳﺎﻟﯽ اﺳﺖ ﮐﻪ ﺗﻐﻴﻴﺮ در ﺁن اﻧﺠﺎم ﺷﺪﻩ ) ﺷﻤﺎ ﻣﯽ ﺗﻮاﻧﻴﺪ ﻓﺮض ﮐﻨﻴﺪ ﮐﻪ ﺗﻐﻴﻴﺮ در‬
‫اوﻟﻴﻦ روز ﺳﺎل ذﮐﺮ ﺷﺪﻩ ﺻﻮرت ﮔﺮﻓﺘﻪ اﺳﺖ( و ﻗﺴﻤﺖ ‪ rule-info‬اﻃﻼﻋﺎﺗﯽ در ﺑﺎرﻩ ﯼ ﻧﺤﻮﻩ ﯼ ﺗﻐﻴﻴﺮات‬
‫ﺻﻮرت ﮔﺮﻓﺘﻪ ﻣﯽ دهﺪ‪ .‬ﺑﺮ ﺣﺴﺐ اﻳﻦ ﮐﻪ ﭼﻪ ﻗﺎﻋﺪﻩ اﯼ اﻋﻤﺎل ﺷﺪﻩ ‪ rule-info‬ﻣﯽ ﺗﻮاﻧﺪ ﻣﺎﻧﻨﺪ ﻳﮑﯽ از ﺳﻪ ﻓﺮم زﻳﺮ‬
‫ﺑﺎﺷﺪ‪:‬‬
‫‪• 1 area-name i‬‬
‫‪• 2 area-name i‬‬
‫‪• 3 area-name new-area-code‬‬
‫ﻗﺴﻤﺖ ﺳﻮم ﺷﺎﻣﻞ ﺗﻌﺪادﯼ ﺳﻮال اﺳﺖ ﮐﻪ هﺮ ﮐﺪام ﺑﻪ ﻓﺮم زﻳﺮ در ﻳﮏ ﺧﻂ ﺁﻣﺪﻩ اﻧﺪ‪.‬‬
‫‪year1 year2 number‬‬
‫ﺳﻮاﻻت را ﺑﻪ اﻳﻦ ﺷﮑﻞ ﺑﺨﻮاﻧﻴﺪ‪:‬‬
‫در ﺳﺎل ‪ year1‬ﺷﻤﺎرﻩ ﺗﻠﻔﻦ ‪ number‬وﺟﻮد داﺷﺘﻪ اﺳﺖ‪ ،‬اﻳﻦ ﺷﻤﺎرﻩ در ﺳﺎل ‪ year2‬ﺑﻪ ﭼﻪ ﺷﻤﺎرﻩ اﯼ‬
‫ﺗﺒﺪﻳﻞ ﺷﺪﻩ اﺳﺖ؟‬
‫ﺑﺮ اﻳﻦ اﺳﺎس ﺷﻤﺎ ﺑﺎﻳﺪ ﺷﻤﺎرﻩ ﺗﻠﻔﻦ دادﻩ ﺷﺪﻩ را ﺑﺮ اﺳﺎس ﻗﺎﻋﺪﻩ هﺎﻳﯽ ﮐﻪ در ﺳﺎﻟﻬﺎﯼ ﺑﻴﻦ ‪ year1+1‬و ‪ year2‬روﯼ‬
‫ﺷﻤﺎرﻩ ﺗﻠﻔﻦ هﺎ ﺻﻮرت ﮔﺮﻓﺘﻪ ‪ ،‬ﺗﻐﻴﻴﺮ دهﻴﺪ و ﺣﺎﺻﻞ را در ﺧﺮوﺟﯽ ﭼﺎپ ﮐﻨﻴﺪ‪.‬ﺳﺎل ﻋﺪدﯼ ﻣﺜﺒﺖ و ﮐﻮﭼﮑﺘﺮ از ‪10 9‬‬
‫ﻣﯽ ﺑﺎﺷﺪ‪ 0 < year ≤ 10 9 ،‬و ‪. year1 < year 2‬‬
‫ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﮐﻪ در ﺧﻄﻮﻃﯽ از ورودﯼ از ﺑﻴﺶ از ﻳﮏ رﺷﺘﻪ ﺗﺸﮑﻴﻞ ﺷﺪﻩ اﻧﺪ‪ ،‬رﺷﺘﻪ هﺎ ﺑﻪ وﺳﻴﻠﻪ ﯼ ﻳﮏ ﻳﺎ ﭼﻨﺪ ﺟﺎﯼ‬
‫ﺧﺎﻟﯽ)‪ (space‬از هﻢ ﺟﺪا ﺷﺪﻩ اﻧﺪ‪.‬‬
‫در ﺁﺧﺮﻳﻦ ﺧﻂ ورودﯼ ‪ 3‬ﺻﻔﺮ ﻗﺮار دارد‪.‬‬
‫ﺗﻮﺟﻪ‪:‬‬
‫در ﻣﻮﻗﻊ ﺗﺴﺖ ﮐﺮدن ﺑﺮﻧﺎﻣﻪ‪ ،‬ورودﯼ هﺎ ﯼ ﺑﺎ ﻓﺮﻣﺖ اﺷﺘﺒﺎﻩ هﻢ ﻣﻤﮑﻦ اﺳﺖ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﯼ ﺷﻤﺎ دادﻩ ﺷﻮد‪ ،‬ﻟﺬا ﺑﺮﻧﺎﻣﻪ ﯼ‬
‫ﺷﻤﺎ ﺑﺎﻳﺪ اﻳﻦ ﻗﺎﺑﻠﻴﺖ را داﺷﺘﻪ ﺑﺎﺷﺪ ﮐﻪ ورودﯼ هﺎﯼ ﻧﺎ ﻣﻌﺘﺒﺮ را ﺗﺸﺨﻴﺺ دهﺪ و ‪ exception‬هﺎ را ‪ handle‬ﮐﻨﺪ‪.‬‬
‫ﺧﺮوﺟﯽ‪:‬‬
‫در هﺮ ﺧﻂ ﺧﺮوﺟﯽ ﺟﻮاب هﺮ ﻳﮏ از ﺳﻮال هﺎ ﮐﻪ ﺷﻤﺎرﻩ ﺗﻠﻔﻦ ﺗﻐﻴﻴﺮ ﻳﺎﻓﺘﻪ اﺳﺖ‪ ،‬وﺟﻮد دارد‪.‬‬
‫ﻳﮏ ﻧﻤﻮﻧﻪ ورودﯼ و ﺧﺮوﺟﯽ ﺑﺮاﯼ ﻧﻤﻮﻣﻪ در زﻳﺮ ﺁﻣﺪﻩ اﺳﺖ‪:‬‬
‫‪Oland‬‬
‫‪Moland‬‬
‫‪Boland‬‬
‫‪Kamand‬‬
‫‪1 Moland 2‬‬
‫‪3 Moland 0515‬‬
‫‪2 Boland 3‬‬
‫‪1 Kamand 1‬‬
‫‪1 Kamand 1‬‬
‫‪1 Kamand 1‬‬
‫‪3 Oland‬‬
‫‪012345‬‬
‫‪2005 0311243426‬‬
‫‪2005 05113837462‬‬
‫‪2005 03121437478‬‬
‫‪In.txt‬‬
‫‪4‬‬
‫‪021‬‬
‫‪0511‬‬
‫‪0311‬‬
‫‪03121‬‬
‫‪7‬‬
‫‪2002‬‬
‫‪2001‬‬
‫‪2003‬‬
‫‪2005‬‬
‫‪2000‬‬
‫‪1999‬‬
‫‪1998‬‬
‫‪2000‬‬
‫‪2000‬‬
‫‪2000‬‬
‫‪0 0 0‬‬
‫‪Out.txt‬‬
‫‪0311244326‬‬
‫‪051538837462‬‬
‫‪031214437478‬‬
‫ﻣﻼﺣﻈﺎت‪:‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫ﺗﻤﺮﻳﻦ را ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ﺗﮏ ﻧﻔﺮﻩ اﻧﺠﺎم دهﻴﺪ‪.‬‬
‫اﻳﻦ ﺗﻤﺮﻳﻦ را ﺑﺎﻳﺪ ﺑﺎ اﺳﺘﻔﺎدﻩ از ‪ collection‬هﺎ در‪ java‬ﭘﻴﺎدﻩ ﺳﺎزﯼ ﮐﻨﻴﺪ و در ﺻﻮرت ﻧﻴﺎز ﺳﺎﺧﺘﺎر دادﻩ‬
‫هﺎﯼ ﻻزم را اﻳﺠﺎد ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪ ﯼ ﺷﻤﺎ ﺑﺎﻳﺪ در زﻣﺎن ﻣﻌﻘﻮل ﺧﺮوﺟﯽ هﺎ را ﺑﺪهﺪ‪.‬‬
‫ورودﯼ هﺎ ﺑﺎﻳﺪ از ﻓﺎﻳﻞ ‪ In.txt‬ﺧﻮاﻧﺪﻩ ﺷﻮﻧﺪ و ﺧﺮوﺟﯽ هﺎ در ﻓﺎﻳﻞ ‪ Out.txt‬رﻳﺨﺘﻪ ﺷﻮﻧﺪ‪.‬‬
‫ﻧﺎم ﮐﻼس اﺻﻠﯽ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ‪ HW3.java‬ﺑﺎﺷﺪ‪ ،‬در ﻣﻮرد ﻧﺎم ﮐﻼس هﺎﯼ دﻳﮕﺮﯼ ﮐﻪ ﻣﻤﮑﻦ اﺳﺖ‬
‫اﺳﺘﻔﺎدﻩ ﮐﺮدﻩ ﺑﺎﺷﻴﺪ هﻴﭻ ﻣﺤﺪودﻳﺘﯽ وﺟﻮد ﻧﺪارد‪.‬‬
‫ﺑﺮاﯼ ﺗﺤﻮﻳﻞ ﺗﻤﺮﻳﻦ ﻳﮏ ‪ email‬ﺑﺎ ﻣﺸﺨﺼﺎت زﻳﺮ ارﺳﺎل ﮐﻨﻴﺪ‪:‬‬
‫‪• Recipient: f_sadeghi@ce.sharif.edu‬‬
‫‪• Subject:‬‬
‫‪JAVA-HW3-84111111‬‬
‫‪• Attachment : HW3-84111111.rar‬‬
‫ﻓﺎﻳﻞ ‪ HW3-[stid].rar‬ﺑﺎﻳﺪ ﺷﺎﻣﻞ ﻓﺎﻳﻞ هﺎﯼ ‪ .java‬و ‪ .bat‬ﺑﺎﺷﺪ‪.‬‬
‫‪ .7‬در ﺻﻮرﺗﯽ ﮐﻪ ﻓﺮﻣﺖ هﺎﯼ ورودﯼ و ﺧﺮوﺟﯽ ‪ ،‬ﻧﺎم ﻓﺎﻳﻞ هﺎ ﯼ ورودﯼ و ﺧﺮوﺟﯽ و ﻧﺎم ﮐﻼس اﺻﻠﯽ ﺷﻤﺎ‬
‫ﺑﺎ ﻣﻮارد ﮔﻔﺘﻪ ﺷﺪﻩ ﻣﻄﺎﺑﻘﺖ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﻨﺪ ﻧﻤﺮﻩ اﯼ ﺑﻪ ﺷﻤﺎ ﺗﻌﻠﻖ ﻧﺨﻮاهﺪ ﮔﺮﻓﺖ ) ﺑﻪ ﺑﺰرﮔﯽ و ﮐﻮﭼﮑﯽ‬
‫ﺣﺮوف دﻗﺖ ﮐﻨﻴﺪ (‪.‬‬