Programming2.pdf

‫ﺳﺎﺧﺘﻤﺎن دادﻩ و اﻟﮕﻮرﯾﺘﻢ‬
‫ﺗﻤﺮﯾﻦ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ دوم‬
‫ﺁذر ‪1386‬‬
‫ﺳﻮال اول(‬
‫هﺪف اﯾﻦ ﺳﻮال ﺗﻤﺮﯾﻦ ﭘﻴﺎدﻩ ﺳﺎزﯼ ﮐﻠﯽ ﻣﻔﺎهﻴﻢ درﺧﺖ اﺳﺖ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺘﻮاﻧﺪ ﯾﮏ درﺧﺖ ﺟﺴﺘﺠﻮﯼ ﺑﺎﯾﻨﺮﯼ را ﺑﺴﺎزد‪ ،‬ﺑﻪ ﺁن ﻋﻨﺼﺮ اﺿﺎﻓﻪ ﮐﻨﺪ‪ ،‬در‬
‫ﺁن ﺟﺴﺘﺠﻮ ﮐﻨﺪ‪ ،‬ﻋﻨﺼﺮﯼ از ﺁن را ﺣﺬف ﻧﻤﻮدﻩ و اﻧﻮاع ﭘﻴﻤﺎﯾﺶ هﺎ را روﯼ ﺁن اﻧﺠﺎم دهﺪ‪.‬‬
‫ﻋﻨﺎﺻﺮ اﯾﻦ درﺧﺖ اﻋﺪاد ﺻﺤﻴﺢ هﺴﺘﻨﺪ‪.‬‬
‫ورودﯼ ﺧﺮوﺟﯽ‪:‬‬
‫ورودﯼ ﺷﻤﺎ ﺷﺎﻣﻞ ﺗﻌﺪادﯼ ﺳﻄﺮ اﺳﺖ‪ .‬در هﺮ ﮐﺪام از ﺳﻄﺮهﺎﯼ ﺑﻌﺪ ﯾﮑﯽ از‬
‫دﺳﺘﻮرهﺎﯼ ‪ add, search, delete, inorder, preorder, postorder‬ﻣﯽ ﺁﯾﺪ و ﺑﺮاﯼ‬
‫ﺳﻪ دﺳﺘﻮر ‪ add, search, delete‬ﯾﮏ ﻋﺪد ﺻﺤﻴﺢ ﺑﻌﺪ اﯾﻦ دﺳﺘﻮرهﺎ ﻣﯽ ﺁﯾﻨﺪ‪ .‬ﺧﺮوﺟﯽ‬
‫هﺮ دﺳﺘﻮر در ﯾﮏ ﺳﻄﺮ ﭼﺎپ ﻣﯽ ﺷﻮد )اﮔﺮ ﺧﺮوﺟﯽ داﺷﺘﻪ ﺑﺎﺷﺪ( و ﺧﺮوﺟﯽ ‪search‬‬
‫ﺑﻪ ﺻﻮرت ‪ 0‬در ﺻﻮرت ﻋﺪم وﺟﻮد و ‪ 1‬در ﺻﻮرت وﺟﻮد ﻣﯽ ﺑﺎﺷﺪ‪ .‬ﺑﺮاﯼ ﺳﻪ دﺳﺘﻮر‬
‫‪ inorder, preorder, postorder‬اﻋﺪاد در ﯾﮏ ﺳﻄﺮ ﺑﺎ ﭘﻴﻤﺎﯾﺶ ﺧﻮاﺳﺘﻪ ﺷﺪﻩ ﻧﻤﺎﯾﺶ‬
‫دادﻩ ﺷﻮﻧﺪ‪ .‬ﺑﻪ ﻣﺜﺎل زﯾﺮ دﻗﺖ ﮐﻨﻴﺪ‪.‬‬
‫‪Output.txt‬‬
‫‪1‬‬
‫‪0‬‬
‫‪3 4 5 6‬‬
‫‪Input.txt‬‬
‫‪add 6‬‬
‫‪add 3‬‬
‫‪add 4‬‬
‫‪add 5‬‬
‫‪search 6‬‬
‫‪search 1‬‬
‫‪preorder‬‬
‫ﺳﻮال دوم(‬
‫هﺪف اﯾﻦ ﺳﻮال ﺑﻪ ﮐﺎر ﮔﻴﺮﯼ ﻋﻤﻠﯽ درﺧﺖ اﺳﺖ‪.‬‬
‫ﯾﮏ دﯾﮑﺸﻨﺮﯼ اﻧﮕﻠﻴﺴﯽ ﺑﻪ اﻧﮕﻠﻴﺴﯽ ﺑﻪ ﮐﻤﮏ درﺧﺖ ﺑﻨﻮﯾﺴﻴﺪ‪ .‬ﺑﺮاﯼ اﯾﻦ ﺳﻮال ﻻزم اﺳﺖ‬
‫ﯾﮏ ﺻﻔﺤﻪ ﻧﻪ ﺑﻴﺸﺘﺮ ﺗﻮﺿﻴﺢ دهﻴﺪ ﮐﻪ از ﭼﻪ روﺷﯽ و ﭼﮕﻮﻧﻪ اﺳﺘﻔﺎدﻩ ﮐﺮدﻩ اﯾﺪ‪) .‬راهﻨﻤﺎﯾﯽ‬
‫هﺎﯼ ﻻزم در ﺳﺮ ﮐﻼس ﺣﻞ ﺗﻤﺮﯾﻦ اﯾﻦ هﻔﺘﻪ(‬
‫ورودﯼ ﺧﺮوﺟﯽ‪:‬‬
‫ﯾﮏ ﻓﺎﯾﻞ دادﻩ هﺎﯼ دﯾﮑﺸﻨﺮﯼ ﺑﻪ ﺷﻤﺎ دادﻩ ﻣﯽ ﺷﻮد ﮐﻪ ﺷﺎﻣﻞ ﻟﻐﺖ و ﻣﻌﻨﯽ ﺁن اﺳﺖ‬
‫)ﻟﻐﺎت ﻓﺎﺻﻠﻪ ﻧﺪارﻧﺪ و ﺗﻨﻬﺎ ﯾﮏ ﻓﺎﺻﻠﻪ ﺑﻴﻦ ﻟﻐﺖ و ﻣﻌﻨﯽ ﺁن ﻣﯽ ﺑﺎﺷﺪ( و ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎ‬
‫ﮔﺮﻓﺘﻦ ورودﯼ از ﮐﺎرﺑﺮ ﺑﺎﯾﺪ ﻣﻌﻨﯽ ﺁﻧﺮا ﭼﺎپ ﮐﻨﺪ‪ .‬ورودﯼ و ﺧﺮوﺟﯽ از ‪.standard IO‬‬
‫‪Input.txt‬‬
‫‪hello hi‬‬
‫‪data facts‬‬
‫‪structure building‬‬
‫ﻧﮑﺘﻪ‪:‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫ﺑﺮﻧﺎﻣﻪ هﺎ را ﺑﺎ ‪ C++‬ﯾﺎ ‪ Java‬ﺑﻨﻮﯾﺲ‪.‬‬
‫ورودﯼ هﺎﯼ ﻣﺴﺎﺋﻞ از ﻓﺎﯾﻞ ‪ input.txt‬و ﺧﺮوﺟﯽ هﺎ در ﻓﺎﯾﻞ ‪ output.txt‬ﻣﯽ‬
‫ﺑﺎﺷﺪ‪.‬‬
‫ﮐﺪ ﺟﻮاب هﺮ ﺑﺮﻧﺎﻣﻪ و ﮔﺰارش ﺳﻮال دو را ﺗﺎ ‪ 25‬ﺁذر ﺑﺮاﯼ ﻣﻦ ﺑﻔﺮﺳﺖ و اﮔﺮ اﺑﻬﺎﻣﯽ‬
‫هﻢ هﺴﺖ ﺑﻪ ﻣﻦ ﭘﺴﺖ اﻟﮑﺘﺮوﻧﻴﮑﯽ ﺑﻔﺮﺳﺖ‪.‬‬
‫اﮔﺮ ‪ C++‬ﻣﯽ ﻧﻮﯾﺴﯽ از ‪ stl‬و اﮔﺮ ‪ java‬ﻣﯽ ﻧﻮﯾﺴﯽ از ‪ API‬هﺎﯼ ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ‬
‫ﺗﻤﺮﯾﻦ در ﺳﻮال اول اﺳﺘﻔﺎدﻩ ﻧﮑﻦ‪.‬‬
‫ﭼﻮن ﺟﻮاﺑﻬﺎﯼ ﺷﻤﺎ ﻣﺎ ﻣﺎﺷﻴﻦ ﺗﺼﺤﻴﺢ ﻣﯽ ﺷﻮد ﻟﻄﻔﺎ ﺳﻴﻨﺘﮑﺲ ورودﯼ و ﺧﺮوﺟﯽ‬
‫را ﮐﺎﻣﻞ رﻋﺎﯾﺖ ﮐﻦ و اﮔﺮ ﻧﻪ ﻣﻦ ﻣﺴﺌﻮل ﺁن ﻧﺨﻮاهﻢ ﺑﻮد‪.‬‬
‫ﻋﻤﻞ ﻗﺒﻴﺢ ﮐﭙﯽ ﮐﺮدن در ﺗﻤﺎرﯾﻦ ورﻗﯽ ﺑﺎ ﻋﺚ ﺗﻘﺴﻴﻢ ﻧﻤﺮﻩ ﺑﻴﻦ ﭼﻨﺪ ﻧﻔﺮ ﻣﯽ ﺷﻮد‬
‫وﻟﯽ در ﺗﻤﺎرﯾﻦ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ اﯾﻦ ﻋﻤﻞ ﻣﺘﺎﺳﻔﺎﻧﻪ ﺑﺎﻋﺚ ﺣﺬف ﻧﻤﺮﻩ ﺑﻴﻦ ﭼﻨﺪ ﻧﻔﺮ‬
‫ﻣﯽ ﺷﻮد‪.‬‬
‫ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ )واﻋﻈﯽ(‬