ﺑﻪ ﻧﺎم ﺧﺪا ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺑﺎ C/C++ داﻧﺸﻜﺪه م.ﻛﺎﻣﭙﻴﻮﺗﺮ ،داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ 7 :ﺧﺮداد 86 ﺗﻤﺮﻳﻦ ﺳﺮي ﭼﻬﺎرم ﺗﻤﺮﻳﻦ ﻫﺎ را ﺗﺎ ﻧﻴﻤﻪ ﺷﺐ زﻣﺎن ﺗﺤﻮﻳﻞ ﺑﻪ آدرس اي-ﻣﻴﻞ درس ارﺳﺎل ﻧﻤﺎﻳﻴﺪ. ce153c@gmail.com hw4-StudentID خالی بماند Main.cc || main.c || main.cpp email subject Body Attachment ﺗﻮﺟﻪ ﻛﻨﻴﺪ: • در اﻳﻦ ﺗﻤﺮﻳﻦ ﺑﺮﺧﻼف ﺗﻤﺮﻳﻦ ﻫﺎي ﻗﺒﻠﻲ ﺑﻪ ﺟﺎي ﻧﻮﺷﺘﻦ ﭼﻨﺪ ﺑﺮﻧﺎﻣﻪ ﻛﻮﭼﻚ ﻣﻲ ﺑﺎﻳﺴﺖ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﺑـﺰرگ ﺗﺤﻮﻳﻞ دﻫﻴﺪ .ﺑﻪ ﻫﻤﻴﻦ دﻟﻴﻞ ﻣﻤﻜﻦ اﺳﺖ در ﻃﻲ ﻛﺪ زدن دﭼﺎر ﻣﺸﻜﻼت ﺑﺴﻴﺎري ﺷـﻮﻳﺪ .ﺑـﻪ اﻳـﻦ ﻣﻨﻈـﻮر ﺗﻮﺻﻴﻪ ﻣﻲ ﻛﻨﻴﻢ ﻛﺪ زدن را از ﻫﻤﻴﻦ اﻣﺮوز ﺷﺮوع ﻛﻨﻴﺪ! • ﻳﻜﻲ از ﻣﻬﻤﺘﺮﻳﻦ ﻣﺮاﺣﻞ در ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ Debugﻛﺮدن ﻛﺪ ﻣﻲ ﺑﺎﺷﺪ .اﺻﻮل ﭘﺎﻳـﻪ اي Debugging 1 در ﻛﻼس ﻫﺎي ﺗﻤﺮﻳﻦ ﺑﻪ ﺷﻤﺎ آﻣﻮزش داده ﺧﻮاﻫﻨﺪ ﺷﺪ .ﺧﺪاوﻧﺪ ﻛﺪ ﺷﻤﺎ را از bugﻫﺎ ﺣﻔﻆ ﻛﻨﺎد! • ﺿﻤﻦ ﺗﺸﻮﻳﻖ ﺷﻤﺎ ﺑﻪ ﻫﻤﻜﺎري ﻓﻜﺮي در ﺣﻞ اﻳﻦ ﺗﻤﺮﻳﻦ در ﺻﻮرت ﺷﺒﺎﻫﺖ ﺑﻴﺶ از اﻧﺪازه ﺑﻴﻦ ﻛـﺪ ﺷـﻤﺎ و دﻳﮕﺮان ﻧﻤﺮه ﻣﻨﻔﻲ درﻳﺎﻓﺖ ﺧﻮاﻫﻴﺪ ﻛﺮد. • ﭘﺎﺳﺦ ﻫﺎي ﺧﻮد را ﻫﻤﺮاه ﺑﺎ ﺗﻮﺿﻴﺤﺎت ﻣﺒﺴﻮط ارﺳﺎل ﻧﻤﺎﻳﻴﺪ. 1 دﻳﺒﺎگ ﻛﺮدن در اﺻﻄﻼح ﺑﻪ ﺗﺼﺤﻴﺢ اﻳﺮاد ﻫﺎي ﻳﻚ ﺷﻲ ) ،ﻋﻤﻮﻣﺎ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﻛﺎﻣﭙﻴﻮﺗﺮي ( اﻃﻼق ﻣﻲ ﺷﻮد .ﻳﻌﻨﻲ ﺷﻤﺎ ) ﻛﻪ ﻟﺰوﻣﺎً ﺳﺎزﻧﺪه ﺑﺮﻧﺎﻣﻪ ﻧﻴﺴﺘﻴﺪ ( .ﺑﺎ ﺧﻮاﻧﺪن ﻛﺪ ﻫﺎ و ﻋﻤﻠﻜﺮد ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻛﻤﻚ اﺑﺰارﻫﺎي ﺧﺎص اﻳﺮادات ﺑﺮﻧﺎﻣﻪ را ﭘﻴﺪا و اﺻﻼح ﻛﻨﻴﺪ .ﻧﻘﺎط ﺷﻜﺴﺖ ﻫﻢ ﺑﻪ ﺧﻄﻮﻃﻲ ﻣﻲ ﮔﻮﻳﻨﺪ ﻛﻪ از ﻧﻈﺮ دﻳﺒﺎﮔﺮ ) ﻛﺴﻲ ﻛﻪ دﻳﺒﺎگ ﻣﻲ ﻛﻨﺪ ( ﻧﻘﻄﻪ ﻫﺎﻳﻲ از ﺑﺮﻧﺎﻣﻪ ﻫﺴﺘﻨﺪ ﻛﻪ ﭼﻤﻮش ﺑﺎزي در ﻣﻲ آورﻧﺪ .اﻳﻦ ﺧﻄﻮط را ﻣﻲ ﺗﻮان ﻣﺸﺨﺺ ﻛﺮد ﺗﺎ ﺑﺮﻧﺎﻣﻪ در ﻫﻨﮕﺎم اﺟﺮاي آﻧﻬﺎ ﻣﺘﻮﻗﻒ ﺷﺪه و از آن ﭘﺲ ﺗﺤﺖ ﻧﻈﺎرت اﺟﺮا ﺷﻮد .در ﺻﻮرت داﺷﺘﻦ ﻳﻚ اﺑﺰار دﻳﺒﺎگ ﺧﻮب ﺣﺘﻲ ﻣﻲ ﺗﻮان روﻧﺪي را ﻛﻪ ﺑﻪ اﻳﺠﺎد اﺷﻜﺎل ﻣﻨﺘﻬﻲ ﺷﺪه اﺳﺖ را ﻧﻴﺰ ﭘﻴﺪا ﻛﺮد. رﻳﺸﻪ ﺷﻨﺎﺳﻲ ﻛﻠﻤﻪ دﻳﺒﺎگ Debugﻧﻴﺰ ﺟﺎﻟﺐ اﺳﺖ .در اﻓﺴﺎﻧﻪ ﻫﺎ)!( آﻣﺪه اﺳﺖ ﻛﻪ روزي روزﮔﺎري ﻛﺎﻣﭙﻴﻮﺗﺮ ENIAC Mark Iدر ﻫﻨﮕﺎم ﻛﺎر ﻛﺮدن دﭼﺎر ﻣﺸﻜﻞ ﺷﺪ .اﭘﺮاﺗﻮر ﻫﺎ ﺑﻌﺪ از ﻛﻠﻲ ﺗﻼش ﺗﻮاﻧﺴﺘﻨﺪ ﻋﻠﺖ اﻳﻦ اﻳﺮاد را ﭘﻴﺪا ﻛﻨﻨﺪ .ﻳﻚ ﺣﺸﺮه ) ( bugدر درون ﻣﺪار ﻫﺎي ﻣﺎﺷﻴﻦ رﻓﺘﻪ ﺑﻮد و ﻫﻤﺎن ﺟﺎ ﺟﺎن داده و ﻣﺎﻧﻊ از ﻋﻤﻠﻜﺮد ﺻﺤﻴﺢ ﺷﺪه ﺑﻮد .ﺑﻪ ﻫﻤﻴﻦ ﺷﻜﻞ اﭘﺮاﺗﻮر ﺑﻌﺪ از اﺻﻼح ﻣﺎﺷﻴﻦ ﮔﻔﺖ : "ﻣﻦ ﻳﻚ ) bugﺣﺸﺮه ( ﭘﻴﺪا ﻛﺮدم" و از آن ﺑﻪ ﺑﻌﺪ ﺑﻪ ﻛﻠﻴﻪ اﺷﻜﺎﻻت ﻛﺎﻣﭙﻴﻮﺗﺮ ) ﻛﻪ ﻣﻄﻤﺌﻨﺎ دﻳﮕﺮ ﺗﻘﺼﻴﺮ ﺣﺸﺮات ﻧﺒﻮده اﺳﺖ ( ﺑﻪ ﺑﺎگ ﺗﻌﺒﻴﺮ ﻣﻲ ﺷﻮد و روﻧﺪ رﻓﻊ اﺷﻜﺎل را دﻳﺒﺎگ ﻣﻲ ﮔﻮﻳﻨﺪ. پ.ن.اﮔﺮﭼﻪ ﺑﺴﻴﺎري از اﻓﺮاد ﻓﻜﺮ ﻣﻲ ﻛﻨﻨﺪ ﻛﻪ رﻳﺸﻪ ﻛﻠﻤﻪ bugﺑﻪ داﺳﺘﺎن ﺑﺎﻻ ﺑﺮ ﻣﻲ ﮔﺮدد اﻣﺎ ﭼﻨﻴﻦ ﻧﻴﺴﺖ .در ﺣﻘﻴﻘﺖ ﻛﻠﻤﻪ ﺑﺎگ ﻣﺪت ﻫﺎ ﻗﺒﻞ ﺑﺮاي ﻋﻤﻮم اﺷﻜﺎﻻت ﻣﺎﺷﻴﻦ وﺟﻮد داﺷﺖ .وﻟﻲ ﭼﺮا ﻣﻦ ﺑﺎ ﮔﻔﺘﻦ ﺣﻘﻴﻘﺖ ﻳﻚ داﺳﺘﺎن و ﺑﺎور ﺧﻮب و زﻳﺒﺎي ﺗﺎرﻳﺨﻲ را ﺧﺮاب ﻛﺮده ام؟ اﻣﺮوزه ﻳﻜﻲ از ﻣﻬﻤﺘﺮﻳﻦ ﻣﻌﻀﻼت در ﺗﻘﺮﻳﺐ زدن داده ﻫﺎ در رﻳﺎﺿﻴﺎت ﻛﺎرﺑﺮدي دروﻧﻴـﺎﺑﻲ ﺗﻌـﺪادي ﻧﻘﻄـﻪ) ﻣﻌﺮف ﻳﻚ ﺳﻴﮕﻨﺎل ﮔﺴﺴﺘﻪ در زﻣﺎن -ورودي ( ﺑﻪ ﻛﻤﻚ ﻳﻚ ﺗﺎﺑﻊ )ﻣﻌﺮف ﻳﻚ ﺳﻴﮕﻨﺎل ﭘﻴﻮﺳﺘﻪ در زﻣﺎن -ﺧﺮوﺟﻲ ( ﻣﻲ ﺑﺎﺷﺪ .ﻛﻠﻲ ﺗﺮﻳﻦ ﺻﻮرت ﻳﻚ ﻣﺴﺌﻠﻪ دروﻧﻴﺎﺑﻲ ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ: nﻧﻘﻄﻪ x1, ... , xnو y1,...,ynداده ﺷﺪه اﺳﺖ .ﭼﻨﺪ ﺟﻤﻠﻪ اي ) pn-1(xاز درﺟﻪ ﺣـﺪاﻛﺜﺮ n-1را ﺑﻪ ﻧﺤﻮي ﺑﻴﺎﺑﻴﺪ ﺑﻪ ﻃﻮري ﻛﻪ ﺑﺮاي ﻫﺮ 0<i≤nداﺷﺘﻪ ﺑﺎﺷﻴﻢ pn-1(xi) = yi ﺑﺮاي ﻣﺜﺎل ﺗﺎﺑﻊ p2(x) = 1 + 4x – 2x2ﻧﻘﺎط ) (-2,-15), (3,-5), (1,3را دروﻧﻴﺎﺑﻲ ﻣﻲ ﻧﻤﺎﻳﺪ. اﻧﻮاع ﻣﺨﺘﻠﻔﻲ از دروﻧﻴﺎﺑﻲ ﺑﺮ ﺣﺴﺐ ﻛﺎراﻳﻲ و دﻗﺖ آﻧﻬﺎ وﺟﻮد دارﻧﺪ .ﻫﺪف ﺷﻤﺎ در اﻳﻦ ﭘﺮوژه ﭘﻴﺎده ﺳﺎزي ﭼﻨﺪ دروﻧﻴـﺎﺑﻲ ﻛﺎراﻣﺪ ﻣﻲ ﺑﺎﺷﺪ. • دروﻧﻴﺎﺑﻲ ﺑﻪ ﻛﻤﻚ ﻣﺎﺗﺮﻳﺲ واﻧﺪرﻣﻮﻧﺪ:2 ﻓﺮض ﻛﻨﻴﺪ ﭼﻨﺪ ﺟﻤﻠﻪ اي ) p(xﺑﻪ ﺻﻮرت زﻳﺮ ﺑﺎﺷﺪ: pn-1(x) = a1 + a2x + a3x2 + ... + anxn-1 = y ﺑﺪﻳﻬﻲ اﺳﺖ ﻛﻪ ﺑﺎ ﺣﻞ ﻣﻌﺎدﻟﻪ ﻣﺎﺗﺮﻳﺴﻲ زﻳﺮ ﻣﻲ ﺗﻮان ﺿﺮاﻳﺐ aiرا ﺑﺪﺳﺖ آورد: ﺣﻞ و ﺑﺮرﺳﻲ اﻳﻦ ﻣﺎﺗﺮﻳﺲ ﺑﺮ ﻋﻬﺪه ﺷﻤﺎ! Vandermonde Matrix 2 • دروﻧﻴﺎﺑﻲ ﭼﻨﺪ ﺟﻤﻠﻪ اي و دروﻧﻴﺎﺑﻲ ﻫﺮﻣﻴﺖ ﻣﻜﻌﺒﻲ: دروﻧﻴﺎﺑﻲ ﺑﻪ ﻛﻤﻚ ﻣﺎﺗﺮﻳﺲ واﻧﺪوﻣﻮﻧﺪ ﺷﻴﻮه ﺳﺮراﺳﺘﻲ ﺑﺮاي ﺗﻘﺮﻳﺐ اﺳﺖ اﻣﺎ اﻳﺮاد اﺳﺎﺳﻲ آن ﻛﻨﺪي ﺑﻴﺶ از ﺣﺪ اﺳﺖ .در اﻳﻦ راﺳﺘﺎ ﺗﻘﺮﻳﺐ ﻫﺎي ﺑﻬﺘﺮ و ﻛﺎراﻣﺪ ﺗﺮي اراﺋﻪ ﺷﺪه اﺳﺖ .ﻧﻤﻮﻧـﻪ از اﻳـﻦ ﺗﻘﺮﻳـﺐ ﻫـﺎ ﺗﻘﺮﻳـﺐ ﻫﺮﻣﻴﺖ درﺟﻪ ﺳﻪ ﻣﻲ ﺑﺎﺷﺪ. ﻓﺮق اﺳﺎﺳﻲ اﻳﻦ دروﻧﻴﺎﺑﻲ ﺑﺎ ﻣﻮارد ﻣﺸﺎﺑﻪ ﺑﻪ روش واﻧﺪرﻣﻮﻧـﺪ دﺧﻴـﻞ ﻛـﺮدن ﻣـﺸﺘﻘﺎت ﺗـﺎﺑﻊ در ﻣﺤﺎﺳﺒﻪ ﺗﺎﺑﻊ اﺳﺖ ﺗﺎ ﻧﻤﻮدار ﻫﺎي ﻫﻤﻮارﺗﺮي ﺑﺪﺳﺖ آﻳﺪ.3 ﺑﻪ ﺻﻮرت ﺧﻼﺻﻪ در ﻣﺴﺌﻠﻪ دروﻧﻴﺎﺑﻲ ﻫﺮﻣﻴﺖ ﺷﻤﺎ ﻣﻲ ﺑﺎﻳﺴﺖ ﺑﺎ داﺷﺘﻦ ﻣﻘـﺎدﻳﺮ xr, xl, yr, yl و ﻣﻘﺎدﻳﺮ ﻣﺸﺘﻘﺎت sr,slﻛﻪ در آن r,lﺑﻪ ﺗﺮﺗﻴﺐ ﺑﻪ ﻣﻌﻨﺎي ﭼﭗ و راﺳﺖ ﻣﻲ ﺑﺎﺷﻨﺪ ﺿﺮاﻳﺐ a,b,c,dرا در ﻣﻌﺎدﻟﻪ زﻳﺮ ﭘﻴﺪا ﻧﻤﺎﻳﻴﺪ: )q(z) = a + b(z-xL) + c(z-xL)2 + d(z-xL)2(z-xR اﻟﺒﺘﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﻜﻪ: q(xL) = yL q(xR) = yR q'(xL) = sL q'(xR) = yR ﺑﺮاي اﻳﻨﻜﺎر ﺑﺎ در ﻧﻈﺮ ﮔﺮﻓﺘﻦ ﻣﺸﺘﻖ ﻋﺒﺎرت ﻓﻮق )q'(z) = b + 2c(z-xL) + d(2(z-xL)(z-xR) + (z-xL)2 ﺿﺮاﻳﺐ a,b,c,dﺑﻪ آﺳﺎﻧﻲ ﺑﺪﺳﺖ ﺧﻮاﻫﻨﺪ آﻣﺪ. 3ﺗﻌﺮﻳﻒ دﻗﻴﻖ اﻳﻨﻜﻪ واﻗﻌﺎً ﻳﻚ ﻧﻤﻮدار ﻫﻤﻮار smoothﺑﻪ ﭼﻪ ﻣﻌﻨﻲ ﻣﻲ ﺑﺎﺷﺪ را در رﻳﺎﺿﻴﺎت 2ﻓﺮا ﺧﻮاﻫﻴﺪ ﮔﺮﻓﺖ ﻳﺎد ﮔﺮﻓﺘﻪ اﻳﺪ )وﻟﻲ( .در ﺣﺎل ﺣﺎﺿﺮ ﺗﻨﻬﺎ ﺑﻪ ﺷﻬﻮد ﺧﻮد در اﻳﻦ زﻣﻴﻨﻪ ﺗﻜﻴﻪ ﻛﻨﻴﺪ. ورودي/ﺧﺮوﺟﻲ: ورودي ﺧــﻮد را از standard inputﺑﺨﻮاﻧﻴــﺪ و ﺧﺮوﺟــﻲ ﺗــﺎن را ﺑــﺮ روي standard outputﺑﻨﻮﻳﺴﻴﺪ. 4 .1ورودي ﺑﺮﻧﺎﻣﻪ: ورودي ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ اﺑﺘﺪا ﻋﺪد ) nﺗﻌﺪاد ﻧﻘﺎط ( و ﺑﻌـﺪ از ان nزوج ﻧﻘﻄـﻪ ﺑـﻪ ﺷـﻜﻞ xi,yiﻣﻲ ﺑﺎﺷﺪ. .2ﺧﺮوﺟﻲ ﻫﺎي ﺑﺮﻧﺎﻣﻪ: ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻣﻲ ﺑﺎﻳﺴﺖ دروﻧﻴﺎﺑﻲ ﻧﻘﺎط ورودي را ﺑﻪ ﻛﻤﻚ ﻣﺎﺗﺮﻳﺲ واﻧﺪرﻣﻮﻧﺪ و روش ﻫﺮﻣﻴﺖ دروﻧﻴﺎﺑﻲ ﻛﻨﺪ .ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎﻳﺪ ﻫﺮ دو دروﻧﻴﺎﺑﻲ را ﭘﻴﺎده ﺳـﺎزي ﻧﻤﺎﻳﻴـﺪ .در اﻧﺘﻬﺎ ﭼﻨﺪ ﺟﻤﻠﻪ اي ﻛﻪ ﺣﺎﺻﻞ از دروﻧﻴﺎﺑﻲ ﻧﻘﻄﻪ ﻫﺎ ﻫﺴﺘﻨﺪ را ﺑﻨﻮﻳﺴﻴﺪ. .3ﻧﻤﺮه اﺿﺎﻓﻲ: ﭘﻴﺎده ﺳﺎزي ﻣﻮارد زﻳﺮ ﻣﺸﻤﻮل ﻧﻤﺮه اﺿﺎﻓﻲ ﺧﻮاﻫﺪ ﺑﻮد: ﻛﺸﻴﺪن ﻧﻤﻮدار ﭼﻨﺪ ﺟﻤﻠﻪ اي دروﻧﻴﺎﺑﻲ ﺷﺪه ﺑﺮ روي ﺻﻔﺤﻪ ﻣـﺎﻧﻴﺘﻮر ﺑـﺎ ﻛﻤـﻚ ﻛﺘﺎﺑﺨﺎﻧﻪ ﻫﺎي ﮔﺮاﻓﻴﻜﻲ ﻣﻮﺟﻮد ﺑﺮاي C/C++ ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ. ﭘﺮوﻓﺴﻮر ﺷﺎﭘﻮر: 4ﺑﺮاي اﻳﻦ ﻛﺎر از header fileﻫﺎي )stdio.hﺑﺮاي زﺑﺎن (Cو ) iostreamﺑﺮاي زﺑﺎن (C++اﺳﺘﻔﺎده ﻛﻨﻴﺪ.
© Copyright 2025 Paperzz