ﺗﻤﺮﻳﻨﺎت ﺳﺮي ﺷﺸﻢ آﺧﺮﻳﻦ ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ ﺳﺎﻋﺖ 12:00ﻇﻬﺮ ﺟﻤﻌﻪ 30آذر 86 ﻧﺤﻮه ﺗﺤﻮﻳﻞ: • ﻧﺎم ﻓﺎﻳﻞ ﻣﺮﺑﻮط ﺑﻪ ﺑﺮﻧﺎﻣﻪ در اﺑﺘﺪاي ﻫﺮ ﺳﻮال ﻣﺸﺨﺺ ﺷﺪه اﺳﺖ .ﻓﻘﻂ ﻫﻤﻴﻦ ﻓﺎﻳﻞ ﻫﺎي cppﺧﻮد را در ﻳﻚ داﻳﺮﻛﺘﻮري ﺑﻪ ﻧﺎم ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ ﺧﻮد ﻗﺮار دﻫﻴﺪ ،داﻳﺮﻛﺘﻮري را ﺑﻪ ﻫﻤﺎن ﻧﺎم zipﻛﺮده و آن را ﺑﺎ ﻣﺸﺨﺼﺎت زﻳﺮ emailﺑﺰﻧﻴﺪ .ﺑﻪ ﺟﺎي Xﻫﺎ ﺷﻤﺎره ي داﻧﺸﺠﻮﻳﻲ ﺧﻮد را ﻗﺮار دﻫﻴﺪ .ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻫﺎﻳﻲ ﻛﻪ ﺑﻪ ﺻﻮرت دﻳﮕﺮي ﻓﺮﺳﺘﺎده ﺷﺪه ﺑﺎﺷﻨﺪ ﻧﻤﺮه اي ﺗﻌﻠﻖ ﻧﻤﻲ ﮔﻴﺮد. [email protected] HW6-XXXXXXXX XXXXXXXX.zip To: Subject: Attachment: • ﺑﺮﻧﺎﻣﻪ ﻫﺎي ﺧﻮد را ﻣﺮﺗﺐ و ﺧﻮاﻧﺎ ﺑﻨﻮﻳﺴﻴﺪ .از اﺳﺎﻣﻲ ﻣﻨﺎﺳﺐ ﺑﺮاي ﻣﺘﻐﻴﺮﻫﺎ و ﺗﻮاﺑﻊ اﺳﺘﻔﺎده ﻛﻨﻴﺪ ،ﻋﻼوه ﺑﺮ اﻳﻦ ﻗﺒﻞ از ﺑﺪﻧﻪ اﺻﻠﻲ ﻫﺮ ﺗﺎﺑﻊ ﺗﻮﺿﻴﺢ ) (Commentﻣﺨﺘﺼﺮي راﺟﻊ ﺑﻪ ﻋﻤﻠﻜﺮد و ورودي و ﺧﺮوﺟﻲ ﻫﺎي آن اراﺋﻪ ﻛﻨﻴﺪ. • ورودي و ﺧﺮوﺟﻲ ﻫﺎ ﺑﺎﻳﺪ دﻗﻴﻘﺎ ﻣﻄﺎﺑﻖ ﺳﻮال ﺑﺎﺷﻨﺪ .ﻧﻮﺷﺘﻦ ﻫﺮ ﮔﻮﻧﻪ outputاﺿﺎﻓﻲ در ﺧﺮوﺟﻲ ﺑﺎﻋﺚ اﺧﺘﻼل در ﺗﺼﺤﻴﺢ ﺳﻮال ﺧﻮاﻫﺪ ﺷﺪ. ﺳﻮال -1درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ )(bst.cpp در اﻳﻦ ﺗﻤﺮﻳﻦ ﺷﻤﺎ ﺑﺎﻳﺪ ﺳﺎﺧﺘﺎر داده اي ﻣﻮﺳﻮم ﺑﻪ Binary Search Treeرا ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ .اﻳﻦ درﺧﺖ داراي ﺧﻮاص زﻳﺮ اﺳﺖ: • ﻫﺮ راس ﻋﻼوه ﺑﺮ ﻳﻚ ﻛﻠﻴﺪ ﻣﺠﺰا )در اﻳﻨﺠﺎ ﻋﺪد ﻃﺒﻴﻌﻲ( داراي ﺳﻪ اﺷﺎره ﮔﺮ right ،leftو pاﺳﺖ ﻛﻪ ﺑﻪ ﺗﺮﺗﻴﺐ ﻧﻤﺎﻳﺎﻧﮕﺮ ﻓﺮزﻧﺪ ﺳﻤﺖ ﭼﭗ ،ﻓﺮزﻧﺪ ﺳﻤﺖ راﺳﺖ و راس ﭘﺪر ﻫﺴﺘﻨﺪ. • ﻓﺮض ﻛﻨﻴﺪ xﻳﻚ راس در ﭼﻨﻴﻦ درﺧﺘﻲ ﺑﺎﺷﺪ .اﮔﺮ yﻳﻚ راس در زﻳﺮدرﺧﺖ ﺳﻤﺖ ﭼﭗ xﺑﺎﺷﺪ دارﻳﻢ : ﻫﻤﭽﻨﻴﻦ اﮔﺮ yدر زﻳﺮدرﺧﺖ ﺳﻤﺖ راﺳﺖ xﻗﺮار ﮔﺮﻓﺘﻪ ﺑﺎﺷﺪ دارﻳﻢ: ﺷﻜﻞ زﻳﺮ ﻳﻚ درﺧﺖ ﺟﺴﺘﺠﻮي دودوﻳﻲ را ﻧﺸﺎن ﻣﻲ دﻫﺪ: ﺷﻤﺎ ﺑﺎﻳﺪ ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ دو ﻋﻤﻞ insertو searchرا ﺑﺮاي اﻳﻦ ﺳﺎﺧﺘﺎر داده اي اﻧﺠﺎم دﻫﺪ .ﺑﺮاي اﻳﻦ ﻛﺎر ﻫﺮ راس را ﺑﻪ ﻛﻤﻚ ﻳﻚ structﻣﺪل ﻛﻨﻴﺪ )ﻣﺸﺎﺑﻪ ﻛﺎري ﻛﻪ ﺑﺮاي linked-listاﻧﺠﺎم دادﻳﻢ( .ﻫﻤﭽﻨﻴﻦ ﺧﻮد درﺧﺖ را ﻧﻴﺰ ﺑﺎ اﺳﺘﻔﺎده از structﻣﺪل ﻛﻨﻴﺪ ﻛﻪ داراي اﺷﺎره ﮔﺮي ﺑﻪ رﻳﺸﻪ ي درﺧﺖ ) (rootﺑﺎﺷﺪ .ﻋﻤﻠﻜﺮد ﻫﺮ ﻳﻚ از ﺗﻮاﺑﻊ searchو insertدر اداﻣﻪ آﻣﺪه اﺳﺖ: • : Searchﺑﺎ درﻳﺎﻓﺖ ﻳﻚ ﻋﺪد ،آن را در درﺧﺖ ﺟﺴﺘﺠﻮ ﻣﻲ ﻛﻨﺪ .در ﺻﻮرت ﭘﻴﺪا ﻛﺮدن ﻛﻠﻴﺪ ﻣﻮرد ﻧﻈﺮ trueو در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﻣﻘﺪار falseرا ﺑﺎز ﻣﻲ ﮔﺮداﻧﺪ. • : Insertﺑﺎ درﻳﺎﻓﺖ ﻳﻚ ﻋﺪد آن را در ﺟﺎي ﻣﻨﺎﺳﺒﻲ در درﺧﺖ وارد ﻣﻲ ﻛﻨﺪ .دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﭘﺲ از وارد ﻛﺮدن ﻋﺪد ﺟﺪﻳﺪ ،درﺧﺖ ﻫﻤﭽﻨﺎن ﺧﺎﺻﻴﺖ ﻫﺎي ﺧﻮد را ﺣﻔﻆ ﻣﻲ ﻛﻨﺪ .ﻫﻤﭽﻨﻴﻦ ﻻزم اﺳﺖ ﺧﺎﻟﻲ ﺑﻮدن ﻳﺎ ﻧﺒﻮدن درﺧﺖ را ﭼﻚ ﻛﻨﻴﻢ .ﺷﺒﻪ ﻛﺪ ﻋﻤﻞ insertﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ: ? Tree T was empty )TREE-INSERT(T, z 1 y ← NIL ]2 x ← root[T NIL 3 while x 4 do y ← x 5 ]if key[z] < key[x 6 ]then x ← left[x 7 ]else x ← right[x 8 p[z] ← y 9 if y = NIL 10 then root[T] ← z 11 ]else if key[z] < key[y 12 then left[y] ← z 13 else right[y] ← z ورودي ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺷﺮح زﻳﺮ اﺳﺖ: • اﺑﺘﺪا ﻋﺪد nرا در ﺧﻂ اول درﻳﺎﻓﺖ ﻛﻨﻴﺪ. • در ﻫﺮﻳﻚ از nﺧﻂ ﺑﻌﺪي :اﺑﺘﺪا ﻳﻚ ﻛﺎرﻛﺘﺮ ﺑﺨﻮاﻧﻴﺪ ‘I’ .ﺑﻪ ﻣﻌﻨﻲ insertو ’ ‘sﺑﻪ ﻣﻌﻨﻲ searchﺧﻮاﻫﺪ ﺑﻮد. ﺳﭙﺲ ﻳﻚ ﻋﺪد ﻃﺒﻴﻌﻲ ﻛﻪ در ﺣﺎﻟﺖ اول ﻋﺪدي اﺳﺖ ﻛﻪ ﺑﺎﻳﺪ ﺑﻪ درﺧﺖ اﺿﺎﻓﻪ ﺷﻮد و در ﺣﺎﻟﺖ دوم ﻋﺪدي اﺳﺖ ﻛﻪ ﺑﺎﻳﺪ ﻣﻮرد ﺟﺴﺘﺠﻮ ﻗﺮار ﮔﻴﺮد. ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﺷﺎﻣﻞ دو ﺑﺨﺶ اﺳﺖ: 9اﺑﺘﺪا در ﻳﻚ ﺧﻂ ﺗﻤﺎﻣﻲ ﻛﻠﻴﺪﻫﺎي ﻣﻮﺟﻮد در درﺧﺖ را ﭼﺎپ ﻛﻨﻴﺪ .ﺗﺮﺗﻴﺐ ﻧﻤﺎﻳﺶ ﻛﻠﻴﺪﻫﺎ ﺑﺎﻳﺪ ﺑﻪ ﻧﺤﻮي ﺑﺎﺷﺪﻛﻪ: .aﻓﺮض ﻛﻨﻴﺪ xﻳﻚ راس در ﭼﻨﻴﻦ درﺧﺘﻲ ﺑﺎﺷﺪ .اﮔﺮ yﻳﻚ راس در زﻳﺮدرﺧﺖ ﺳﻤﺖ ﭼﭗ xﺑﺎﺷﺪ ﺣﺘﻤﺎ yﻗﺒﻞ از xﭼﺎپ ﺷﻮد .ﻫﻤﭽﻨﻴﻦ اﮔﺮ yدر زﻳﺮدرﺧﺖ ﺳﻤﺖ راﺳﺖ xﻗﺮار ﮔﺮﻓﺘﻪ ﺑﺎﺷﺪ ﺣﺘﻤﺎ x ﻗﺒﻞ از yﭼﺎپ ﺷﻮد. .bﺑﻴﻦ ﻫﺮ دو ﻛﻠﻴﺪ ﻳﻚ ﻓﺎﺻﻠﻪ ﭼﺎپ ﺷﻮد. 9ﺑﻪ ازاي ﻫﺮ دﺳﺘﻮر searchﻛﻪ در ورودي ﺧﻮاﻧﺪه ﺷﺪه ،ﻳﻚ ﺧﻂ ﺣﺎوي ” “trueﻳﺎ ” “falseﭼﺎپ ﺷﻮد) .ﺑﺎ ﺣﻔﻆ ﺗﺮﺗﻴﺐ ورودي .ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎﻳﺪ وﺿﻌﻴﺖ درﺧﺖ در ﻫﻨﮕﺎم وارد ﺷﺪن دﺳﺘﻮر searchرا در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ و ﻧﻪ وﺿﻌﻴﺖ ﻧﻬﺎﻳﻲ درﺧﺖ را(. ﺳﻮال -2اﻋﺪاد ﻣﺨﺘﻠﻂ )(complex.cpp ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ اﻋﻤﺎل رﻳﺎﺿﻲ در داﻣﻨﻪ ي اﻋﺪاد ﻣﺨﺘﻠﻂ را اﻧﺠﺎم دﻫﺪ .ﺑﺮاي اﻳﻦ ﻛﺎر ،ﻛﻼﺳﻲ ﺑﻪ ﻧﺎم Complex ﺑﻨﻮﻳﺴﻴﺪ .اﻳﻦ ﻛﻼس داراي دو ﻣﺘﻐﻴﺮ privateاز ﻧﻮع doubleاﺳﺖ ﻛﻪ ﺑﺨﺶ ﺣﻘﻴﻘﻲ و ﺿﺮﻳﺐ iرا در ﺧﻮد ﻧﮕﻪ ﻣﻲدارﻧﺪ. ﻳﻚ constructorﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺑﺎ اﺳﺘﻔﺎده ار آن ﺑﺘﻮان Objectﻫﺎي ﺟﺪﻳﺪ ﺑﺎ ﻣﻘﺎدﻳﺮ دﻟﺨﻮاه اﻳﺠﺎد ﻛﺮد .در ﺻﻮرت ﻣﺸﺨﺺ ﻧﻜﺮدن ﻣﻘﺪارﻫﺎ اﻳﻦ constructorﺑﺎﻳﺪ داراي ﻣﻘﺎدﻳﺮ ﭘﻴﺶ ﻓﺮض ﺑﺮاي ﻣﺘﻐﻴﺮﻫﺎ ﺑﺎﺷﺪ .ﻛﻼس ﺷﻤﺎ ﻫﻤﭽﻨﻴﻦ ﺑﺎﻳﺪ داراي ﺗﻮاﺑﻊ publicﺑﻪ ﺷﺮح زﻳﺮ ﺑﺎﺷﺪ: .1ﺗﺎﺑﻊ addﻛﻪ ﺑﺎ درﻳﺎﻓﺖ ﻳﻚ Objectاز ﻧﻮع ،Complexآن را ﺑﺎ ﻧﻤﻮﻧﻪ اﺻﻠﻲ ﺟﻤﻊ ﻛﻨﺪ. .2ﺗﺎﺑﻌﻲ subtractﻛﻪ ﺑﺎ درﻳﺎﻓﺖ ﻳﻚ Objectاز ﻧﻮع ،Complexآن را از ﻧﻤﻮﻧﻪ اﺻﻠﻲ ﻛﻢ ﻛﻨﺪ. .3ﺗﺎﺑﻌﻲ multiplyﻛﻪ ﺑﺎ درﻳﺎﻓﺖ ﻳﻚ Objectاز ﻧﻮع ،Complexآن را ﺑﺎ ﻧﻤﻮﻧﻪ اﺻﻠﻲ ﺿﺮب ﻛﻨﺪ. .4ﺗﺎﺑﻌﻲ printﻛﻪ ﻋﺪد ﻣﺨﺘﻠﻂ ﻧﻤﻮﻧﻪ اﺻﻠﻲ را ﺑﻪ ﻓﺮم ) (a, bﻧﻤﺎﻳﺶ دﻫﺪ. ﻧﻤﻮﻧﻪ اي از ﻛﺎرﻛﺮد اﻳﻦ ﻛﻼس در اداﻣﻪ آﻣﺪه اﺳﺖ: ;}…{class Complex { )(void main ;)Complex a(2, 5 ;)Complex b(1, 3 ;)a.add(b ;)(a.print ;)b.multiply(b ;)(b.print ;)a.subtract(b ;)(a.print } ﻛﻪ ﺧﺮوﺟﻲ آن ﺑﻪ ﺷﻜﻞ زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد: )(3,8 )(-8,8 )(11,0 در ﺗﺎﺑﻊ ،mainﻋﻴﻨﺎ ﻫﻤﻴﻦ ﻋﺒﺎرات ﻧﻤﻮﻧﻪ را ﻗﺮار دﻫﻴﺪ. ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ
© Copyright 2025 Paperzz