Project-2.pdf

‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي )‪(40153‬‬
‫‪f‬‬
‫ﻣﺪرس‪ :‬ﺣﻤﯿﺪ ﺿﺮاﺑﯽزاده‬
‫داﻧﺸﮑﺪهي ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﭘﺮوژه‪ :‬ﻣﺮﺣﻠﻪي دوم‬
‫ﻣﻬﻠﺖ ﺗﺤﻮﯾﻞ‪ :‬ﭼﻬﺎرﺷﻨﺒﻪ ‪ 7‬دي ‪ ،1390‬ﺳﺎﻋﺖ ‪ 9‬ﺻﺒﺢ‬
‫ﭘﺮوژهي ﻧﻬﺎﯾﯽ درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴﯽ‪ ،‬ﭘﯿﺎدهﺳﺎزي ﯾﮏ ﺻﻔﺤﻪي ﮔﺴﺘﺮده )‪ (spreadsheet‬اﺳﺖ‪ .‬در اﯾﻦ ﻣﺮﺣﻠﻪ‪،‬‬
‫ﺷﻤﺎ ﺗﺠﺰﯾﻪي ﻋﺒﺎرات رﯾﺎﺿﯽ را ﮐﻪ ﻣﻮردﻧﯿﺎز اﯾﻦ ﭘﺮوژه ﺧﻮاﻫﺪ ﺑﻮد ﭘﯿﺎدهﺳﺎزي ﻣﯽﮐﻨﯿﺪ‪.‬‬
‫ﻧﮑﺎت ﮐﻠﯽ‬
‫‪ ‬ﮐﺪ ﻫﺮ ﺑﺨﺶ را در ﯾﮏ ﻓﺎﯾﻞ ﺟﺪاﮔﺎﻧﻪ و ﺑﺎ ﻧﺎم ﺧﻮاﺳﺘﻪ ﺷﺪه ﻗﺮار دﻫﯿﺪ )ﻗﺎﻟﺐ ﻓﺎﯾﻞﻫﺎ ﺑﻪ ﺷﻤﺎ داده ﺷﺪه اﺳﺖ(‪.‬‬
‫ﺑﺎﻻي ﻫﺮ ﻓﺎﯾﻞ ﻧﺎم‪ ،‬ﻧﺎم ﺧﺎﻧﻮادﮔﯽ و ﺷﻤﺎرهي داﻧﺶﺟﻮﯾﯽ ﺧﻮد را ذﮐﺮ ﮐﻨﯿﺪ‪.‬‬
‫‪ ‬ﮐﺎﻣﻨﺖﮔﺬاري ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎ ﺟﺰﺋﯽ از ﻧﻤﺮهي ﺷﻤﺎ اﺳﺖ‪.‬‬
‫‪ ‬ﻣﻮﻋﺪ ارﺳﺎل‪ ،‬ﺳﺎﻋﺖ ‪ 9:00‬ﺻﺒﺢ روز ﭼﻬﺎرﺷﻨﺒﻪ ‪ 7‬دي ﻣﺎه ‪ 1390‬اﺳﺖ‪.‬‬
‫‪ ‬در ﺻﻮرت ﺗﺎﺧﯿﺮ‪ ،‬ﺑﻪ ازاي روز اول ‪ ٪30‬از ﻧﻤﺮهي ﺷﻤﺎ ﮐﺎﺳﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ‪ .‬ﺗﺄﺧﯿﺮ ﺑﯿﺸﺘﺮ از ﺑﯿﺴﺖ و ﭼﻬﺎر ﺳﺎﻋﺖ‬
‫ﻗﺎﺑﻞ ﻗﺒﻮل ﻧﯿﺴﺖ‪.‬‬
‫‪ ‬ﻫﻢﻓﮑﺮي ﺑﺎ دﯾﮕﺮ داﻧﺶﺟﻮﯾﺎن ﻣﻮرد ﻗﺒﻮل اﺳﺖ‪ ،‬اﻣﺎ ﻓﺎﯾﻞﻫﺎﯾﯽ ﮐﻪ ﻣﯽﻓﺮﺳﺘﯿﺪ ﺑﺎﯾﺪ ﺑﻪﻃﻮر ﮐﺎﻣﻞ ﺗﻮﺳﻂ ﺧﻮدﺗﺎن‬
‫ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺎﺷﻨﺪ‪.‬‬
‫‪ ‬در ﺻﻮرت وﺟﻮد ﻫﺮﮔﻮﻧﻪ ﻣﺸﮑﻞ‪ ،‬ﺳﻮاﻻت ﺧﻮد را از ﻃﺮﯾﻖ ﺳﯿﺴﺘﻢ ﭘﯿﺎﺗﺰا ﺑﺎ ﮐﻤﮏﻣﺪرﺳﯿﻦ در ﻣﯿﺎن ﺑﮕﺬارﯾﺪ‪.‬‬
‫ﺑﺨﺶ اول‪ :‬ﺟﺪول ﻣﺘﻐﯿﺮﻫﺎ‬
‫ﻧﺎم ﻓﺎﯾﻞ‪symbols.cpp :‬‬
‫ﻓﺎﯾﻞ ‪ symbols.h‬ﮐﻪ ﺑﻪ ﻫﻤﺮاه ﭘﺮوژه داده ﺷﺪه اﺳﺖ‪ ،‬ﺷﺎﻣﻞ ﺗﻌﺮﯾﻒ دو ﮐﻼس ‪ Variable‬و ‪ Symbols‬اﺳﺖ ﮐﻪ‬
‫ﺑﺮاي ﻧﮕﻪداري و ﺑﺎزﯾﺎﺑﯽ ﻣﻘﺪار ﻣﺘﻐﯿﺮﻫﺎ در ﺑﺮﻧﺎﻣﻪي اﺻﻠﯽ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﯽﮔﯿﺮﻧﺪ‪ .‬ﻫﺮ ﺷﯽء از ﻧﻮع ‪Variable‬‬
‫اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﯾﮏ ﻣﺘﻐﯿﺮ را ﮐﻪ ﺷﺎﻣﻞ ﻧﺎم و ﻣﻘﺪار ﻣﺘﻐﯿﺮ اﺳﺖ ﻧﮕﻪداري ﻣﯽﮐﻨﺪ‪ .‬در ﮐﻼس ‪ Symbols‬ﺟﺪوﻟﯽ از‬
‫ﻣﺘﻐﯿﺮﻫﺎ )ﺑﺎ ﻃﻮل ﺣﺪاﮐﺜﺮ ‪ (MAX_VARIABLES‬ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ و ﺗﻮاﺑﻊ ﻣﻮرد ﻧﯿﺎز ﺑﺮاي اﺿﺎﻓﻪ ﮐﺮدن ﯾﮏ ﻣﺘﻐﯿﺮ در‬
‫اﯾﻦ ﺟﺪول و ﺑﺎزﯾﺎﺑﯽ ﻣﻘﺪار ﯾﮏ ﻣﺘﻐﯿﺮ درون اﯾﻦ ﺟﺪول ﭘﯿﺶﺑﯿﻨﯽ ﺷﺪه اﺳﺖ‪.‬‬
‫ﭘﯿﺎدهﺳﺎزي اوﻟﯿﻪي ﮐﻼسﻫﺎي ‪ Variable‬و ‪ Symbols‬در ﻓﺎﯾﻞ ‪ symbols.cpp‬آﻣﺪه اﺳﺖ‪ .‬ﺷﻤﺎ ﺑﺎﯾﺪ ﺗﻮاﺑﻌﯽ را‬
‫ﮐﻪ ﺑﻪ ﻃﻮر ﮐﺎﻣﻞ در اﯾﻦ ﻓﺎﯾﻞ ﭘﯿﺎدهﺳﺎزي ﻧﺸﺪهاﻧﺪ ﺗﮑﻤﯿﻞ ﮐﻨﯿﺪ‪ .‬ﺑﻪ ﻃﻮر ﺧﺎص ﺷﻤﺎ ﺑﺎﯾﺪ ﺗﺎﺑﻊ زﯾﺮ از ﮐﻼس ‪ Symbols‬را‬
‫ﭘﯿﺎدهﺳﺎزي ﮐﻨﯿﺪ‪:‬‬
‫;)‪double Symbols::get_value(string name‬‬
‫اﯾﻦ ﺗﺎﺑﻊ ﻧﺎم ﯾﮏ ﻣﺘﻐﯿﺮ را ﺑﻪ ﻋﻨﻮان ورودي ﻣﯽﮔﯿﺮد و ﻣﻘﺪار ﻣﺘﻨﺎﻇﺮ ﺑﺎ آن ﻣﺘﻐﯿﺮ را از درون ﺟﺪول ﻣﺘﻐﯿﺮﻫﺎ ﺑﺮﻣﯽﮔﺮداﻧﺪ‪.‬‬
‫اﮔﺮ در ﺟﺪول ﭼﻨﯿﻦ ﻣﺘﻐﯿﺮي وﺟﻮد ﻧﺪاﺷﺖ‪ ،‬ﺗﺎﺑﻊ ﻣﻘﺪار ﺻﻔﺮ را ﺑﺮﻣﯽﮔﺮداﻧﺪ‪ .‬در واﻗﻊ ﻣﺘﻐﯿﺮي ﮐﻪ ﻣﻘﺪاردﻫﯽ ﻧﺸﺪه ﺑﺎﺷﺪ‪ ،‬ﺑﻪ‬
‫ﺻﻮرت ﭘﯿﺶﻓﺮض ﻣﻘﺪار ﺻﻔﺮ دارد‪.‬‬
‫ﭘﺮوژه‪ :‬ﻣﺮﺣﻠﻪي دوم ‪ -‬درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي‬
‫‪1‬‬
‫ﺑﺨﺶ دوم‪ :‬ﺗﺠﺰﯾﻪي ﻋﺒﺎرات‬
‫ﻧﺎم ﻓﺎﯾﻞ‪parse.cpp :‬‬
‫ﻓﺮض ﮐﻨﯿﺪ ﯾﮏ رﺷﺘﻪ ﺑﻪ ﺷﻤﺎ داده اﺳﺖ ﮐﻪ ﻓﻘﻂ ﺷﺎﻣﻞ اﻋﺪاد‪ ،‬ﻋﻤﻠﮕﺮﻫﺎي رﯾﺎﺿﯽ‪ ،‬ﻣﺘﻐﯿﺮﻫﺎ‪ ،‬ﺗﻮاﺑﻊ رﯾﺎﺿﯽ و ﭘﺮاﻧﺘﺰ اﺳﺖ‪.‬‬
‫ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻘﺪم ﻋﻤﻠﯿﺎت و ﻣﻘﺪار ﻣﺘﻐﯿﺮﻫﺎ‪ ،‬ﺣﺎﺻﻞ ﻋﺒﺎرت ﻣﻮرد ﻧﻈﺮ را ﺑﻪ دﺳﺖ آورﯾﺪ‪.‬‬
‫ﺑﺮاي ﻣﺜﺎل ﻓﺮض ﮐﻨﯿﺪ ﻋﺒﺎرت زﯾﺮ داده ﺷﺪه اﺳﺖ‪:‬‬
‫)‪A / 2 + c * ((A - 1) * 4) - a2 * t + max_t + tan(3.1415926535/4‬‬
‫و ﻣﻘﺪار ﻣﺘﻐﯿﺮﻫﺎي ﺑﻪﮐﺎر رﻓﺘﻪ ﺑﻪ ﺻﻮرت زﯾﺮ اﺳﺖ‪:‬‬
‫‪A = 2, c = 2.5, a2 = 3.5, t = 4, max_t = 5.5‬‬
‫در اﯾﻦ ﺻﻮرت ﻣﻘﺪار ﻋﺒﺎرت ﻓﻮق ﺑﺮاﺑﺮ اﺳﺖ ﺑﺎ ‪.3.5‬‬
‫ﺷﻤﺎ ﺑﺎﯾﺪ در ﻓﺎﯾﻞ ‪ parse.cpp‬ﺗﺎﺑﻊ زﯾﺮ را ﭘﯿﺎدهﺳﺎزي ﮐﻨﯿﺪ‪:‬‬
‫;)‪double parse(string exp‬‬
‫اﯾﻦ ﺗﺎﺑﻊ‪ ،‬ﯾﮏ ﻋﺒﺎرت را ﺑﻪ ﻋﻨﻮان ورودي ﻣﯽﮔﯿﺮد و ﺣﺎﺻﻞ آن را ﺑﻪ ﺻﻮرت ﯾﮏ ﻋﺪد اﻋﺸﺎري ﺑﺮﻣﯽﮔﺮداﻧﺪ‪.‬‬
‫ﺑﺪﯾﻬﯽ اﺳﺖ ﮐﻪ ﺑﺮاي ﭘﯿﺎدهﺳﺎزي اﯾﻦ ﺗﺎﺑﻊ ﻣﺠﺎز ﻫﺴﺘﯿﺪ ﺗﻮاﺑﻊ دﯾﮕﺮي را ﻧﯿﺰ ﭘﯿﺎدهﺳﺎزي ﮐﻨﯿﺪ‪.‬‬
‫ﻧﮑﺎت‪:‬‬
‫ﭘﺮوژه‪ :‬ﻣﺮﺣﻠﻪي دوم ‪ -‬درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي‬
‫‪2‬‬
‫‪ ‬ﻋﻤﻠﯿﺎت رﯾﺎﺿﯽ ﻣﺠﺎز‪ ،‬ﺟﻤﻊ‪ ،‬ﺗﻔﺮﯾﻖ‪ ،‬ﺿﺮب و ﺗﻘﺴﯿﻢ‪ ،‬و ﺗﻮاﺑﻊ ﻣﺠﺎز ‪ sin‬و ‪ cos‬و ‪ tan‬و ‪ arctan‬ﻫﺴﺘﻨﺪ‪.‬‬
‫‪ ‬در ﻣﺤﺎﺳﺒﻪي ﻋﺒﺎرتﻫﺎ‪ ،‬ﺑﺎﯾﺪ اوﻟﻮﯾﺖﻫﺎي ﻋﻤﻠﮕﺮﻫﺎ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮﻧﺪ‪ .‬ﻋﻼﻣﺖ ﻣﻨﻔﯽ )ﯾﮑﺎﻧﯽ( ﺑﯿﺶﺗﺮﯾﻦ اوﻟﻮﯾﺖ را‬
‫در ﺑﯿﻦ ﻋﻤﻠﮕﺮﻫﺎ دارد‪ .‬ﺿﺮب و ﺗﻘﺴﯿﻢ ﻧﯿﺰ ﻧﺴﺒﺖ ﺑﻪ ﺟﻤﻊ و ﺗﻔﺮﯾﻖ داراي اوﻟﻮﯾﺖ ﻫﺴﺘﻨﺪ‪.‬‬
‫‪ ‬اوﻟﻮﯾﺖ ﺿﺮب و ﺗﻘﺴﯿﻢ ﺑﺎ ﻫﻢ ﺑﺮاﺑﺮ و ﺗﻘﺪم آنﻫﺎ ﻧﺴﺒﺖ ﺑﻪ ﯾﮑﺪﯾﮕﺮ از ﭼﭗ ﺑﻪ راﺳﺖ اﺳﺖ‪ .‬ﺟﻤﻊ و ﺗﻔﺮﯾﻖﻫﺎي‬
‫ﻣﺘﻮاﻟﯽ ﻫﻢ ﺑﺎﯾﺪ از ﭼﭗ ﺑﻪ راﺳﺖ اﺟﺮا ﺷﻮﻧﺪ‪.‬‬
‫‪ ‬ﻧﺎم ﻫﺮ ﻣﺘﻐﯿﺮ ﻣﯽﺗﻮاﻧﺪ ﺷﺎﻣﻞ ﺣﺮوف )ﺑﺰرگ ﯾﺎ ﮐﻮﭼﮏ( اﻧﮕﻠﯿﺴﯽ‪ ،‬ارﻗﺎم و _ )‪ (underscore‬ﺑﺎﺷﺪ‪ ،‬وﻟﯽ ﻧﺎم‬
‫ﻣﺘﻐﯿﺮ ﺑﺎ ﯾﮏ رﻗﻢ ﺷﺮوع ﻧﻤﯽﺷﻮد‪.‬‬
‫ﺧﻄﺎﯾﺎﺑﯽ‪:‬‬
‫)ﻧﻤﺮهي اﺿﺎﻓﯽ!(‬
‫رﺷﺘﻪاي ﮐﻪ ﺑﻪ ﺗﺎﺑﻊ ‪ parse‬داده ﻣﯽﺷﻮد‪ ،‬ﻣﻤﮑﻦ اﺳﺖ ﻣﻌﺘﺒﺮ ﻧﺒﺎﺷﺪ‪ .‬ﻣﺜﻼً رﺷﺘﻪﻫﺎي ‪B1 + ( C - ) ، 0A – B1‬‬
‫و ‪ (A0 – 2‬ﺧﻄﺎ دارﻧﺪ‪ .‬ﺧﻄﺎﯾﺎﺑﯽ ﺑﻪ اﯾﻦ ﻣﻌﻨﯽ اﺳﺖ ﮐﻪ ﺗﺎﺑﻊ ‪ parse‬در ﭼﻨﯿﻦ ﺷﺮاﯾﻄﯽ ﻣﻘﺪار ﺻﻔﺮ ﺑﺮﮔﺮداﻧﺪ‪ .‬اﮔﺮ‬
‫ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﻗﺎدر ﺑﻪ ﺧﻄﺎﯾﺎﺑﯽ ﺑﺎﺷﺪ‪ ،‬ﻧﻤﺮهي اﺿﺎﻓﯽ درﯾﺎﻓﺖ ﺧﻮاﻫﯿﺪ ﮐﺮد؛ وﻟﯽ در ﺣﺎﻟﺖ ﻋﺎدي ﻣﯽﺗﻮاﻧﯿﺪ ﻓﺮض ﮐﻨﯿﺪ ﮐﻪ‬
‫ﻋﺒﺎرات دادهﺷﺪه داراي ﺧﻄﺎ ﻧﯿﺴﺘﻨﺪ‪.‬‬
‫ﭘﺮوژه‪ :‬ﻣﺮﺣﻠﻪي دوم ‪ -‬درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي‬
‫‪3‬‬