ﺗﻤﺮﯾﻦ ﺷﻤﺎره 2 ﻣﻬﻠﺖ ﺗﺤﻮﯾﻞ 27 :ﻓﺮوردﯾﻦ 1391 ﻗﺒﻞ ار اﻧﺠﺎم ﺗﻤﺮﯾﻦﻫﺎ ﻣﻮارد زﯾﺮ را ﺑﻪ دﻗﺖ ﻣﻄﺎﻟﻌﻪ ﺑﻔﺮﻣﺎﯾﯿﺪ: در ﺧﻂ اول ﻫﺮ ﯾﮏ از ﺑﺮﻧﺎﻣﻪﻫﺎ ﺷﻤﺎرهي داﻧﺸﺠﻮﯾﯽ و ﻧﺎم ﺧﻮد را ﺑﻪ ﺻﻮرت زﯾﺮ ﺑﻨﻮﯾﺴﯿﺪ: )//ID: Your Student ID (First Last Name ﺑﻌﺪ از ﻧﻮﺷﺘﻦ ﺗﻤﺮﯾﻦﻫﺎ ﻓﺎﯾﻞ ﻣﺮﺑﻮﻃﻪ را در ﯾﮏ ﭘﻮﺷﻪ ﺑﺎ ﻧﺎم assignment#assNom-StudentIDﻗﺮار دﻫﯿﺪ و ﺳﭙﺲ اﯾﻦ ﭘﻮﺷﻪ را ﻓﺸﺮده ﮐﻨﯿﺪ .ﻓﺎﯾﻞ ﻓﺸﺮده را ﺑﻪ آدرس [email protected]ارﺳﺎل ﻧﻤﺎﯾﯿﺪ. ﻋﻨﻮان ﻣﯿﻞ ﺑﻪ ﺻﻮرت assignment#assNom-StudentIDﺑﺎﺷﺪ. اﺷﺘﺒﺎه در ﻧﺎم ﮔﺬاري ﻓﺎﯾﻞ ﻣﻮﺟﺐ ﻋﺪم ﺗﺼﺤﯿﺢ ﺗﻤﺮﯾﻦ ﺧﻮاﻫﺪ ﺷﺪ. ﻧﺤﻮهي ﺧﻮاﻧﺪن ورودي و ﻧﻮﺷﺘﻦ ﺧﺮوﺟﯽ ﺑﺎﯾﺪ رﻋﺎﯾﺖ ﺷﻮد. ﮔﺬاﺷﺘﻦ ﮐﺎﻣﻨﺖﻫﺎ و اﺳﻢﮔﺬاري ﻣﻨﺎﺳﺐ ﺧﻮد ﻗﺴﻤﺘﯽ از ﻧﻤﺮه ﺳﻮال اﺳﺖ. ﺑﻪ ازاي ﻫﺮ روز ﺗﺎﺧﯿﺮ در ارﺳﺎل ﺗﻤﺮﯾﻦﻫﺎ %20از ﻧﻤﺮه ﺗﻤﺮﯾﻦ ﮐﺎﺳﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ. ﺳﻮاﻻت ﺧﻮد را ﺑﺎ اﻧﺘﺨﺎب ﻣﻮﺿﻮع ﻣﻨﺎﺳﺐ در [email protected]ﻣﻄﺮح ﻧﻤﺎﯾﯿﺪ. .1ﻫﻨﺪﺳﻪ)اﺳﻢ ﻓﺎﯾﻞ ﻫﺎ در اﻧﺘﻬﺎي ﺳﻮال ﮔﻔﺘﻪ ﺷﺪه( ﺑــﺮاي اﯾــﻦ ﺳــﻮال ﺑﺎﯾــﺪ ﮐــﻼس ﻫــﺎﯾﯽ ﺑــﺮاي ﺷــﺒﯿﻪ ﺳــﺎزي ﻣﻔــﺎﻫﯿﻢ اوﻟﯿــﻪ ﻫﻨﺪﺳــﯽ ﻣﺎﻧﻨــﺪ ﻧﻘﻄــﻪ ،ﺧــﻂ و ﭼﻨــﺪ ﺿــﻠﻌﯽ ﭘﯿــﺎده ﺳــﺎزي ﮐﻨﯿــﺪ . ﻧﺤــﻮه ي ﭘﯿــﺎده ﺳــﺎزي اﯾــﻦ ﮐــﻼس ﻫــﺎ ﺑــﺮ ﻋﻬــﺪه ي ﺧــﻮد ﺷﻤﺎﺳــﺖ ،اﻣــﺎ در ﭘﯿــﺎده ﺳــﺎزي ﮐــﻼس ﻣﺮﺑــﻮط ﺑــﻪ ﭼﻨــﺪ ﺿــﻠﻌﯽ ﺣﺘﻤــﺎ ﺑﺎﯾــﺪ ﯾﮑــﯽ از ﮐﻼس ﻫﺎي ﭘﯿﺎده ﺳﺎزي ﺷﺪه ﺑﺮاي ﺧﻂ ﯾﺎ ﻧﻘﻄﻪ اﺳﺘﻔﺎده ﮐﻨﯿﺪ . ﻧﻘﻄﻪ : ﮐﻼس ﭘﯿﺎده ﺳﺎزي ﺷﺪه ﺑﺮاي ﻧﻘﻄﻪ ﺑﺎﯾﺪ ﺷﺎﻣﻞ ﺗﻮاﺑﻊ زﯾﺮ ﺑﺎﺷﺪ : { class point … ; ) point (int x, int y ;)(int getX ;)(int getY ;)*int distance (point ;)*line* Line (point ;)*polygon* triangle(point*, point … ;} ) : point (int x, int yاﯾــﻦ ﺗــﺎﺑﻊ constructorاﯾــﻦ ﮐــﻼس اﺳــﺖ .دو ﻣﺨﺘﺼــﻪ ي ﻣﺮﺑــﻮط ﺷــﯽ را ﮔﺮﻓﺘــﻪ و ﺷــﯽ ﻣــﯽ ﺳﺎزد. )( : int getXاﯾﻦ ﺗﺎﺑﻊ ﻣﻘﺪار ﻣﺮﺑﻮط ﺑﻪ ﻣﺨﺘﺼﻪ ي xرا ﺑﺮ ﻣﯿﮕﺮداﻧﺪ . )( : int getYاﯾﻦ ﺗﺎﺑﻊ ﻣﻘﺪار ﻣﺮﺑﻮط ﺑﻪ ﻣﺨﺘﺼﻪ ي yرا ﺑﺮ ﻣﯿﮕﺮداﻧﺪ. )*distance(point : intاﯾـــﻦ ﺗـــﺎﺑﻊ ﻓﺎﺻـــﻠﻪ ي ﺑـــﯿﻦ اﯾـــﻦ ﻧﻔﻄـــﻪ و ﻧﻘﻄـــﻪ ي ﭘـــﺎس داده ﺷـــﺪه را ﻣﺤﺎﺳـــﺒﻪ ﮐـــﺮده و ﺑـــﺎز ﻣﯿﮕﺮداﻧﺪ . )* : line* Line(pointاﯾـــﻦ ﺗـــﺎﺑﻊ ﺧـــﻂ اﯾﺠـــﺎد ﺷـــﺪه ﺗﻮﺳـــﻂ اﯾـــﻦ ﻧﻘﻄـــﻪ و ﻧﻘﻄـــﻪ ي ﭘـــﺎس داده ﺷـــﺪه را ﺳـــﺎﺧﺘﻪ و ﯾـــﮏ اﺷـــﺎره ﮔﺮ ﺑﻪ ﺷﯽ ﺳﺎﺧﺘﻪ ﺷﺪه ﺑﺮ ﻣﯿﮕﺮداﻧﺪ. )*point , *: Polygon* triangle(pointاﯾـــﻦ ﺗـــﺎﺑﻊ ﻣﺜﻠـــﺚ اﯾﺠـــﺎد ﺷـــﺪه ﺗﻮﺳـــﻂ اﯾـــﻦ ﻧﻘﻄـــﻪ و دو ﻧﻘﻄـــﻪ ي ﭘـــﺎس داده ﺷﺪه را ﻣﯿﺴﺎزد و ﯾﮏ اﺷﺎره ﮔﺮ ﺑﻪ ﺷﯽ ﺳﺎﺧﺘﻪ ﺷﺪه ﺑﺮ ﻣﯿﮕﺮداﻧﺪ. ﺧﻂ: ﮐﻼس ﭘﯿﺎده ﺳﺎزي ﺷﺪه ﺑﺮاي ﺧﻂ ﺑﺎﯾﺪ ﺷﺎﻣﻞ ﺗﻮاﺑﻊ زﯾﺮ ﺑﺎﺷﺪ. { class line ... ;)*line(point*,point ;)*bool isParallel(line ;)*bool isPrependicular(line ;)*point* intersection(line ;)*line* parallel(point ;)*polygon* triangle(line*,line ... ;} )* : line (point* , pointاﯾــﻦ ﺗــﺎﺑﻊ constructorﻣﺮﺑــﻮط ﺑــﻪ اﯾــﻦ ﮐــﻼس اﺳــﺖ .دو ﻧﻘﻄــﻪ ﮔﺮﻓﺘــﻪ و ﺑــﺎ ﺗﻮﺟــﻪ ﺑــﻪ آن ﻫــﺎ ﺷﯽ ﺧﻂ را ﻣﯽ ﺳﺎزد. )* : bool isParallel(lineاﯾﻦ ﺗﺎﺑﻊ وﺿﻌﯿﺖ ﺗﻮازي اﯾﻦ ﺧﻂ ﺑﺎ ﺧﻂ داده ﺷﺪه را ﺑﺎز ﻣﯿﮕﺮداﻧﺪ . )* : bool isPrependicular(lineاﯾﻦ ﺗﺎﺑﻊ وﺿﻌﯿﺖ ﺗﻌﺎﻣﺪ اﯾﻦ ﺧﻂ ﺑﺎ ﺧﻂ داده ﺷﺪه را ﺑﺎز ﻣﯿﮕﺮداﻧﺪ . )*intersection(line * : pointاﯾــــﻦ ﺧــــﻂ ﻧﻘﻄــــﻪ ي ﺑﺮﺧــــﻮرد اﯾــــﻦ ﺧــــﻂ ﺑــــﺎ ﺧــــﻂ داده ﺷــــﺪه را ﻣﺤﺎﺳــــﺒﻪ ﻣﯿﮑﻨــــﺪ و ﺑﺮﻣﯿﮕﺮداﻧﺪ ).ﻓﺮض ﮐﻨﯿﺪ ﻣﺨﺘﺼﺎت ﻧﻘﻄﻪ ي ﺑﺮ ﺧﻮرد ﺣﺘﻤﺎ ﺻﺤﯿﺢ اﺳﺖ ( . )* : line* parallel(pointاﯾﻦ ﺗﺎﺑﻊ ﯾﮏ ﺧﻂ ﻣﻮازي ﮔﺬرﻧﺪه از ﻧﻘﻄﻪ ي داده ﺷﺪه ،ﺑﺎ اﯾﻦ ﺧﻂ ﻣﯿﺴﺎزد و ﺑﺮﻣﯿﮕﺮداﻧﺪ. )*triangle(line*,line * : polygonاﯾـــﻦ ﺗـــﺎﺑﻊ ﻣﺜﻠـــﺚ ﺳـــﺎﺧﺘﻪ ﺷـــﺪه از اﯾـــﻦ ﺧـــﻂ و دو ﺧـــﻂ داده ﺷـــﺪه را ﺳـــﺎﺧﺘﻪ و ﺑـــﺎز ﻣﯿﮕﺮداﻧﺪ ) .ﻓﺮض ﮐﻨﯿﺪ ﻫﺮ 3ﻧﻘﻄﻪ ي ﺑﺮﺧﻮرد ﻣﺨﺘﺼﺎت ﺻﺤﯿﺢ دارﻧﺪ( . ﭼﻨﺪ ﺿﻠﻌﯽ : ﮐﻼس ﭘﯿﺎده ﺳﺎزي ﺷﺪه ﺑﺮاي ﭼﻨﺪ ﺿﻠﻌﯽ ﻫﺎ ﺑﺎﯾﺪ ﺷﺎﻣﻞ ﻣﻮارد زﯾﺮ ﺑﺎﺷﺪ . { class polygon … ;)polygon(point** arr,int size ;)polygon(line** arr,int size ;)(bool isTriangle ;)(bool isSquare ... ;} ) : polygon (point** arr , int sizeاﯾـــﻦ ﺗـــﺎﺑﻊ ﯾﮑـــﯽ از constructorﻫـــﺎي اﯾـــﻦ ﮐـــﻼس اﺳـــﺖ و در آن ﺑﺎﯾـــﺪ ﺷـــﯽ ﻣﺮﺑــﻮط ﺑــﻪ ﭼﻨــﺪ ﺿــﻠﻌﯽ ﺑــﺮ اﺳــﺎس ﻧﻘــﺎط داده ﺷــﺪه ﺳــﺎﺧﺘﻪ ﺷــﻮد ) .ﻧﻘــﺎط-راس ﻫــﺎي ﭼﻨــﺪ ﺿــﻠﻌﯽ -ﺑــﻪ ﺗﺮﺗﯿــﺐ در آراﯾــﻪ ﻗــﺮار ﺧﻮاﻫﻨﺪ ﮔﺮﻓﺖ( )size ,int arr **(line : polygonاﯾـــﻦ ﺗـــﺎﺑﻊ ﯾﮑـــﯽ از constructorﻫـــﺎي اﯾـــﻦ ﮐـــﻼس اﺳـــﺖ و در آن ﺑﺎﯾـــﺪ ﺷـــﯽ ﻣﺮﺑــﻮط ﺑــﻪ ﭼﻨــﺪ ﺿــﻠﻌﯽ ﺑــﺮ اﺳــﺎس ﺧﻄــﻮط داده ﺷــﺪه ﺳــﺎﺧﺘﻪ ﺷــﻮد ) .ﺧﻄــﻮط –ﺿــﻠﻊ ﻫــﺎي ﭼﻨــﺪ ﺿــﻠﻌﯽ -ﺑــﻪ ﺗﺮﺗﯿــﺐ در آراﯾــﻪ ﻗﺮار ﺧﻮاﻫﻨﺪ ﮔﺮﻓﺖ( )( : bool isTriangleدر ﺻﻮرت ﻣﺜﻠﺚ ﺑﻮدن اﯾﻦ ﭼﻨﺪ ﺿﻠﻌﯽ trueو در ﻏﯿﺮ اﯾﻦ ﺻﻮرت falseﺑﺎز ﻣﯽ ﮔﺮداﻧﺪ . )( : bool isSquareدر ﺻﻮرت ﻣﺮﺑﻊ ﺑﻮدن اﯾﻦ ﭼﻨﺪ ﺿﻠﻌﯽ trueو در ﻏﯿﺮ اﯾﻦ ﺻﻮرت falseﺑﺎز ﻣﯽ ﮔﺮداﻧﺪ . ﺗﻮﺟﻪ ﮐﻨﯿﺪ : .1ﻣﺨﺘﺼــﺎت از ﻧــﻮع intاﺳــﺖ .در ﻧﺘﯿﺠــﻪ ﺗﺴــﺖ ﻫــﺎي داده ﺷــﺪه ﻃــﻮري اﻧﺘﺨــﺎب ﻣﯿﺸــﻮﻧﺪ ﮐــﻪ ﻧﻘــﺎط ﺑﺮﺧــﻮرد و ﻓﺎﺻــﻠﻪ ي ﻧﻘــﺎط ﻫــﻢ ﯾﮏ ﻋﺪد ﺻﺤﯿﺢ ﺷﻮد . .2ﺗﻌﺮﯾﻒ ﺗﻮاﺑﻊ ﺣﺘﻤﺎ ﺑﺎﯾﺪ ﺑﻪ ﺻﻮرت ﺧﻮاﺳﺘﻪ ﺷﺪه ﺑﺎﺷﺪ. .3ﻓﺎﯾﻞ ﻫﺎﯾﯽ ﮐﻪ ﺑﺎﯾﺪ در ﭘﻮﺷﻪ ي ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ ﺳﻮال ﻗﺮار ﮔﯿﺮﻧﺪ : point.h (a line.h (b polygon.h (c point.cpp (d line.cpp (e polygon.cpp (f .4اﯾﻦ ﺗﻤﺮﯾﻦ ﺗﺎﺑﻊ mainﻧﺪارد. .5ﺑﺎﯾﺪ ﺗﺎ ﺟﺎﯾﯽ ﮐﻪ ﻣﻤﮑﻦ اﺳﺖ ﺑﻪ ﻣﺤﺘﻮﯾﺎت داﺧﻞ ﮐﻼس ﻫﺎ ﺑﻪ ﺻﻮرت ﻋﻤﻮﻣﯽ دﺳﺘﺮﺳﯽ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﯿﻢ . .2اﻋﺪاد ﺑﺰرگ )(BigNumber.h/BigNumber.cpp ﻫﻤﺎﻧﻄﻮر ﮐﻪ ﻣﯽ داﻧﯿﺪ ﺑﺎ ﻧﻮع داده ﻫﺎ در C++ﺑﺎزه ﮐﻮﭼﮑﯽ از اﻋﺪاد را ﻣﯽ ﺗﻮان ﭘﻮﺷﺶ داد .ﺣﺎل ﺑﺮاي ﭘﻮﺷﺶ ﺑﺎزه ﮔﺴﺘﺮده ﺗﺮي از اﻋﺪاد ﺻﺤﯿﺢ ﮐﻼﺳﯽ ﺑﺎ ﻧﺎم BigNumberرا ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﯿﻢ. ﺷﻤﺎ ﺑﺎﯾﺪ ﮐﻼﺳﯽ ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﺑﺘﻮان ﮐﺎرﻫﺎي زﯾﺮ را اﻧﺠﺎم دﻫﺪ) constﺑﻮدن ﺗﺎﺑﻊ ﻫﺎ را رﻋﺎﯾﺖ ﮐﻨﯿﺪ :(. ;BigNumber A, B cin>>A, B=A, A+B,A+=B, A-B, A-=B, A*B, A*=B, A/B, A/=B,A%B, A%=B, A++, A--, A==B, A > B, A >= B, A!=B, A<B, A<=B, cout<<B ﻋﻤﻠﮕﺮ ] A[iﮐﻪ رﻗﻢ iام Aرا ﺑﻪ ﺻﻮرت intﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ. ﻋﻤﻠﮕﺮ ) A(i, jﮐﻪ ارﻗﺎم ﺑﯿﻦ رﻗﻢ iام و jام را ﺑﻪ ﺻﻮرت ﻧﻮﻋﯽ از BigNumberﺑﺎز ﻣﯽ ﮔﺮداﻧﺪ. ﺑﻪ ﻋﺒﺎرﺗﯽ ﻋﻤﻠﮕﺮﻫﺎي ﻣﻮرد ﻧﻈﺮ را ﺗﻌﺮﯾﻒ ﻣﺠﺪد ﮐﻨﯿﺪ. ﻫﻢ ﭼﻨﯿﻦ constructorﻫﺎي زﯾﺮ را ﭘﯿﺎده ﺳﺎزي ﮐﻨﯿﺪ : )&BigNumber(const string )BigNumber (const int )&BigNumber (const BigNumber ﺗﻮﺟﻪ ﮐﻨﯿﺪ : .١ﺣﺎﺻﻞ ﺗﻤﺎم ﻋﻤﻠﯿﺎت ﻫﺎ ﻋﺪدي ﺻﺤﯿﺢ اﺳﺖ. .٢ﺑــﺮاي ﭘﯿــﺎده ﺳــﺎزي اﻋــﺪاد ﺻــﺤﯿﺢ ﺑــﺰرگ اﺑﺘــﺪا ﺑــﻪ ﭘﯿــﺎده ﺳــﺎزي اﻋــﺪاد ﺻــﺤﯿﺢ ﻣﺜﺒــﺖ ) ﯾﻌﻨــﯽ ﺑــﺪون در ﻧﻈــﺮ ﮔــﺮﻓﺘﻦ ﻋﻼﻣــﺖ ( ﻓﮑــﺮ ﮐﻨﯿﺪ و ﺳﭙﺲ ﻋﻼﻣﺖ اﻋﺪاد را ﻫﻢ ﻟﺤﺎظ ﮐﻨﯿﺪ . .٣ﺑــﺮاي رﻋﺎﯾــﺖ ﺷــﯽ ﮔﺮاﯾـــﯽ ﺑﻬﺘــﺮ اﺳــﺖ ﻓﺎﯾـــﻞ ﻫــﺎي .hو .cppﺟـــﺪا از ﻫــﻢ ﺑﺎﺷــﻨﺪ .ﯾﻌﻨـــﯽ ﻓﺎﯾــﻞ ﻫــﺎي BigNumber.hو BigNumber.cppداﺷـــﺘﻪ ﺑﺎﺷـــﯿﺪ ﮐـــﻪ ﺑـــﻪ ﺗﺮﺗﯿـــﺐ ﺳـــﺎﺧﺘﺎر ﮐﻠـــﯽ ﮐـــﻼس ) وﯾﮋﮔـــﯽ ﻫـــﺎ و ﺗـــﻮاﺑﻌﺶ ( و ﭘﯿـــﺎده ﺳـــﺎزي ﺗﻮاﺑـــﻊ ﮐﻼس را ﺷﺎﻣﻞ ﻣﯽ ﺷﻮﻧﺪ. .٤دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ ﺗﻌﺪاد ارﻗﺎم ﻫﺮ ﻋﺪدي ﻣﯽ ﺗﻮاﻧﺪ ﺑﺎﺷﺪ. .٥ﻣــــــــﯽ ﺗﻮاﻧﯿــــــــﺪ از ﻟﯿﻨــــــــﮏ http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2Bاﺳــــــــﺘﻔﺎده ﮐﻨﯿﺪ. ﺣــﺎل ﺑــﺎ اﺳــﺘﻔﺎده از اﯾــﻦ ﮐــﻼس ﺑﺮﻧﺎﻣــﻪ اي ﺑﻨﻮﯾﺴــﯿﺪ ﮐــﻪ ﯾــﮏ ﻋﺒــﺎرت رﯾﺎﺿــﯽ ﺳــﺎده ﻣﺸــﺘﻤﻞ ﺑــﺮ ﯾــﮏ ﻋﻤﻠﯿــﺎت را از ورودي ﺧﻮاﻧــﺪه و ﻧﺘﯿﺠــﻪ ي آن را ﻧﺸﺎن ﻣﯿﺪﻫﺪ .اﺟﺮاي ﺑﺮﻧﺎﻣﻪ ﺑﺎ دﺳﺘﻮر endﺗﻤﺎم ﻣﯿﺸﻮد. ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ ورودي ﻧﻤﻮﻧﻪ 1000000000000000000000000000000 1000000000000 * 1000000000000000000 12345678901234569124 12345678901234567890 + 1234 797492379792749794797349>=6786868697999739 end true
© Copyright 2026 Paperzz