DAexer2.pdf

‫))ﺑﻪ ﻧﺎم ﺧﺪاوﻧﺪ ﺑﺨﺸﻨﺪه ي ﻣﻬﺮﺑﺎن ((‬
‫ﺗﻤﺮﻳﻦ ﺷﻤﺎره ي‪ 2‬درس ﻃﺮاﺣﻲ اﻟﮕﻮرﻳﺘﻤﻬﺎ‬
‫ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ ﺗﻤﺮﻳﻦ ‪ 1387/1/23 :‬ﺳﺎﻋﺖ ‪23:59‬‬
‫)‪(Divide And Conquer‬‬
‫ﻣﻼﺣﻈﺎت ‪:‬‬
‫ اﻳﻦ ﺗﻤﺮﻳﻦ ﻫﻢ داراي ﻗﺴﻤﺘﻬﺎي ﺗﺌﻮري و ﻫﻢ ﻋﻤﻠﻲ اﺳﺖ‪ .‬ﭘﺎﺳﺦ ﻗﺴﻤﺘﻬﺎي ﺗﺌﻮري و ﻋﻤﻠﻲ را در ﻗﺎﻟﺐ ﻳﻚ ﻓﺎﻳﻞ ﻓﺸﺮده ﺑﻪ ﻧﺎم‬‫‪ Ex2-yourID.zip‬ﺑﻪ آدرس ‪ [email protected]‬ﻣﻴﻞ ﻛﻨﻴﺪ‪ .‬ﻋﻨﻮان ﭘﺴﺖ اﻟﻜﺘﺮوﻧﻴﻜﻲ ﻧﻴﺰ ‪ Ex2-yourID‬ﺑﺎﻳﺪ ﺑﺎﺷﺪ‪.‬‬
‫ ﺑﻪ ﻫﻴﭻ وﺟﻪ ﻛﺎر ﻫﺎي ﻏﻴﺮ اﺧﻼﻗﻲ ﻣﺜﻞ روﻧﻮﻳﺴﻲ و ﻛﭙﻲ ﺑﺮﻧﺎﻣﻪ ي دﻳﮕﺮان و ‪ ....‬ﭘﺬﻳﺮﻓﺘﻪ ﻧﻴﺴﺖ‪ .‬درﺻﻮرت ﻣﺸﺎﻫﺪه ﻧﻤﺮه ي ﺷﻤﺎ ‪ -100‬در ﻧﻈﺮ‬‫ﮔﺮﻓﺘﻪ ﻣﻲ ﺷﻮد‪) .‬اﮔﺮ ﺗﻤﺮﻳﻨﺎت را ﺑﺎ ﻫﻢ ﻣﻲ ﻧﻮﻳﺴﻴﺪ ﺳﻌﻲ ﻛﻨﻴﺪ ﻃﺮﻳﻖ ﻧﻮﺷﺘﻦ ﺷﻤﺎ ﻣﺎﻧﻨﺪ ﻳﻜﺪﻳﮕﺮ ﻧﺒﺎﺷﺪ‪ .‬ﭼﻮن در ﺻﻮرت ﻣﺸﺎﺑﻬﺖ ﺑﺎ وﺟﻮد ﺑﻲ‬
‫ﮔﻨﺎﻫﻲ‪ ،‬ﮔﻨﺎﻫﻜﺎر ﺷﻨﺎﺧﺘﻪ ﺧﻮاﻫﻴﺪ ﺷﺪ و ﻧﻤﺮه ي ﺧﻮد را از دﺳﺖ ﺧﻮاﻫﻴﺪ داد(‬
‫ ﺑﻪ ﻫﻴﭻ وﺟﻪ زﻣﺎن ﺗﺤﻮﻳﻞ اﻳﻦ ﺗﻤﺮﻳﻦ ﺗﻤﺪﻳﺪ ﻧﻤﻲ ﺷﻮد‪ .‬ﺑﻪ ازاي ﻫﺮﺳﺎﻋﺖ ﺗﺎﺧﻴﺮ‪ 20‬ﻧﻤﺮه )از ‪ 100‬ﻧﻤﺮه( را از دﺳﺖ ﻣﻲ دﻫﻴﺪ‪.‬‬‫‪ -‬ﻫﺮ ﮔﻮﻧﻪ ﺳﻮال و ﻣﺸﻜﻠﻲ و ﻳﺎ اﻳﺮادي را ﻣﻲ ﺗﻮاﻧﻴﺪ ﺑﺎ ‪ [email protected]‬در ﻣﻴﺎن ﺑﮕﺬارﻳﺪ‪.‬‬
‫‪ -1‬ﺷﺒﻜﻪ ﻫﺎي ﻣﻮازي ﺟﺎﻳﮕﺸﺖ ﺳﺎز‬
‫☺ ﻛﻠﻴﺪ ﺑﺎ دو ورودي و دو ﺧﺮوﺟﻲ را ﻣﻲ ﺗﻮان در دو ﻣﻮﻗﻌﻴﺖ ﻣﺨﺘﻠﻒ ﻗﺮار داد‪.‬‬
‫در ﺷﻜﻞ ﺑﻌﺪي ﻃﺮح ارﺗﺒﺎط ﺑﺎ ‪ 3‬ورودي و ‪ 3‬ﺧﺮوﺟﻲ داده ﺷﺪه اﺳﺖ‪ .‬ﻛﻪ وﻳﮋﮔﻲ ﻫﻤﻪ ﻛﺎره ﺑﻮدن را دارد‪ :‬ﺑﺎ ﺗﻐﻴﻴﺮ دادن وﺿﻊ ﻛﻠﻴﺪ‪ ،‬ﻣﻲ ﺗﻮان ﺑﻪ ﻫﺮﻳﻚ‬
‫از !‪ 3‬ﺣﺎﻟﺘﻲ ﻛﻪ ﻣﻲ ‪ 3‬ورودي را ﺑﻪ ‪ 3‬ﺧﺮوﺟﻲ ﻣﻲ ﺑﺮد رﺳﻴﺪ ﻳﻌﻨﻲ ‪:‬‬
‫ﻳﻚ ﺷﺒﻜﻪ ي ﻫﻤﻪ ﻛﺎره‪:‬‬
‫♠ ﻃﺮح ﻣﺮﺑﻮط ﺑﻪ ﻳﻚ ﺷﺒﻜﻪ ي ﻫﻤﻪ ﻛﺎره ﺑﺎ ‪ 4‬ورودي و ‪ 4‬ﺧﺮوﺟﻲ را ﺑﺴﺎزﻳﺪ‪ .‬ﻳﻌﻨﻲ اﻣﻜﺎن ﻫﺮﻳﻚ از ‪ 24‬اﺗﺼﺎل ﻣﻤﻜﻦ ورودي ﻫﺎ و ﺧﺮوﺟﻲ ﻫﺎ را‬
‫ﻓﺮاﻫﻢ ﺑﺴﺎزد‪.‬‬
‫♣ ﺣﺪاﻗﻞ ﺗﻌﺪاد ﻛﻠﻴﺪﻫﺎﻳﻲ ﻛﻪ ﺑﺮاي اﺗﺼﺎل اﻳﻦ ﻃﺮح ﻻزم اﺳﺖ ﭼﻘﺪر اﺳﺖ؟‬
‫ﺑﺴﺎزﻳﺪ‪ .‬ﺑﻪ ﻛﻤﻚ اﺳﺘﻘﺮا ﺛﺎﺑﺖ ﻛﻨﻴﺪ ﺷﺒﻜﻪ اي ﻛﻪ ﺳﺎﺧﺘﻪ اﻳﺪ ﻫﻤﻪ ﻛﺎره اﺳﺖ‪.‬‬
‫ورودي و‬
‫♥ ﻳﻚ ﺷﺒﻜﻪ ي ﻫﻤﻪ ﻛﺎره ﺑﺎ‬
‫‪ -2‬ﻧﻤﺎي ﺷﻬﺮ زﺷﺖ ﺑﺎ آﺳﻤﺎن ﺧﺮاش ﻫﺎي زﺷﺖ !‬
‫☻ ﺗﻌﺪادي آﺳﻤﺎن ﺧﺮاش در ﺷﻬﺮي وﺟﻮددارد‪ .‬ﻣﻨﻈﺮه ي ﻫﺮ ﻳﻚ از اﻳﻦ آﺳﻤﺎن ﺧﺮاش ﻫﺎ از دور ﺑﻪ ﺷﻜﻞ ﻣﺴﺘﻄﻴﻞ اﺳﺖ‪ .‬ﻣﺸﺨﺼﺎت اﻳﻦ‬
‫ﻣﺴﺘﻄﻴﻞ ﻫﺎداده ﺷﺪه اﺳﺖ‪ .‬ﻣﻲ ﺧﻮاﻫﻴﻢ ﺑﺪاﻧﻴﻢ ﻛﻪ ﻣﻨﻈﺮه ي اﻳﻦ آﺳﻤﺎن ﺧﺮاش ﻫﺎ از دور )ﺑﺎ ﺣﺬف ﺧﻄﻮﻃﻲ ﻛﻪ ﻣﺨﻔﻲ ﻫﺴﺘﻨﺪ( ﺑﻪ ﭼﻪ ﺷﻜﻞ‬
‫اﺳﺖ‪ .‬ﺑﺮاي ﻣﺜﺎل ﻧﻤﻮﻧﻪ اي از ورودي و ﺧﺮوﺟﻲ را در ﺷﻜﻞ زﻳﺮ ﻣﻲ ﺑﻴﻨﻴﺪ‪.‬‬
‫‪٢‬‬
‫ﻓﺮض ﻛﻨﻴﺪ ﻛﻒ ﺗﻤﺎم ﺳﺎﺧﺘﻤﺎن ﻫﺎ روي ﻳﻚ ﺧﻂ واﻗﻊ ﻫﺴﺘﻨﺪ‪ .‬آﺳﻤﺎن ﺧﺮاش ‪ i‬ام ﺗﻮﺳﻂ ‪ 3‬ﺗﺎﻳﻲ‬
‫و‬
‫ﻣﺸﺨﺺ ﻛﻨﻨﺪه ي ﻣﺨﺘﺺ ‪ x‬ﻣﺮﺑﻮط ﺑﻪ ﺳﻤﺖ ﭼﭗ و راﺳﺖ ﺳﺎﺧﺘﻤﺎن و‬
‫ورودي ﻣﺮﺑﻮط ﺑﻪ ﺷﻜﻞ ﺑﺎﻻ ‪ ،‬ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ ‪:‬‬
‫ﻣﺸﺨﺺ ﻣﻲ ﺷﻮدﻛﻪ‬
‫ارﺗﻔﺎع ﺳﺎﺧﺘﻤﺎن را ﻣﺸﺨﺺ ﻣﻲ ﻛﻨﺪ‪ .‬ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل‬
‫)‪(1،8،3) , (2،9،5), (1،4،7), (11, 6, 14) ,(12،11, 13‬‬
‫ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺗﻌﺪاد آﺳﻤﺎن ﺧﺮاش ﻫﺎ و ﻣﺸﺨﺼﺎت آﻧﻬﺎ را از ﻓﺎﻳﻞ ورودي درﻳﺎﻓﺖ ﻛﻨﺪ و ﺧﺮوﺟﻲ را ﺑﻪ ﺻﻮرت ﮔﺮاﻓﻴﻜﻲ ﻧﻤﺎﻳﺶ دﻫﺪ‪.‬‬
‫ﺗﻌﺪاد ﺳﺎﺧﺘﻤﺎن ﻫﺎ ﺣﺪاﻛﺜﺮ‪ 1000000‬ﺗﺎﺳﺖ و اﻋﺪاد ﻣﺮﺑﻮط ﺑﻪ ﻣﺸﺨﺼﺎت ﻫﺮ ﻳﻚ از ﺳﺎﺧﺘﻤﺎن ﻫﺎ ﺑﻴﻦ ‪ 0‬ﺗﺎ ‪ 10000‬ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫ﻓﺎﻳﻞ ورودي ‪ ،‬ﻓﺎﻳﻞ ‪ view.in‬ﻣﻲ ﺑﺎﺷﺪ‪ .‬در ﺳﻄﺮ اول آن ﺗﻌﺪاد ﺳﺎﺧﺘﻤﺎن ﻫﺎ و در ﺳﻄﺮ ﻫﺎي ﺑﻌﺪي در ﻫﺮ ﺳﻄﺮ ﻣﺸﺨﺼﺎت ﻳﻚ ﺳﺎﺧﺘﻤﺎن‬
‫ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ‪ .‬ﺑﻪ ﻣﺜﺎل زﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ ‪:‬‬
‫ﻓﺎﻳﻞ ﻣﺮﺑﻮط ﺑﻪ ﻛﺪ ﺑﺮﻧﺎﻣﻪ ي ﺧﻮد را در ﻓﺎﻳﻞ ‪ view.cpp‬ﻳﺎ ‪ view.java‬ﺑﻨﻮﻳﺴﻴﺪ‪ .‬در ﺻﻮرت اﺳﺘﻔﺎده از‪ C++‬ﻣﻲ ﺗﻮاﻧﻴﺪ از ﻫﺮ ﻛﺪام از‬
‫ﻓﻨﺎوري ﻫﺎ ي ‪ openGL‬ﻳﺎ ‪ DirectX‬اﺳﺘﻔﺎده ﻧﻤﺎﻳﻴﺪ‪.‬‬
‫‪٣‬‬