project1.pdf

‫ﭘﺮوژﻩ اول‬
‫ﺳﺎﺧﺘﻤﺎن دادﻩ هﺎ و اﻟﮕﻮرﻳﺘﻢ هﺎ‬
‫ﺳﺮرﺳﻴﺪ ﺗﺤﻮﻳﻞ‪١٣٨۶/١/٢٠ :‬‬
‫ﭘﺮدازش ﻋﺒﺎرت هﺎ‬
‫ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﮏ ﻋﺒﺎرت رﻳﺎﺿﯽ را از ورودﯼ درﻳﺎﻓﺖ ﮐﺮدﻩ و ﺳﭙﺲ اﻋﻤﺎل ﺧﻮاﺳﺘﻪ ﺷﺪﻩ را روﯼ‬
‫ﺁن اﻧﺠﺎم دهﺪ و ﻧﺘﻴﺠﻪ را در ﺧﺮوﺟﯽ ﺑﻨﻮﻳﺴﺪ‪ .‬اﻳﻦ ﻋﺒﺎرت رﻳﺎﺿﯽ ﺷﺎﻣﻞ ﺟﻤﻊ )‪ ،(+‬ﺿﺮب)*(‪ ،‬ﺗﻘﺴﻴﻢ‬
‫ﺻﺤﻴﺢ)‪ ،(/‬ﺗﻔﺮﻳﻖ)‪ ،(-‬ﭘﺮاﻧﺘﺰ‪ ،‬ﺗﻮان)^(‪ ،‬اﻋﺪاد ﺻﺤﻴﺢ)‪ (signed long‬و ﻣﺘﻐﻴﺮ هﺎ )ﺣﺮوف ﮐﻮﭼﮏ‬
‫اﻧﮕﻠﻴﺴﯽ( اﺳﺖ‪ .‬ﺑﺎ اﻳﻨﮑﻪ ﺗﻔﺮﻳﻖ ﻳﮏ ﻋﻤﻠﮕﺮ دوﺗﺎﻳﯽ اﺳﺖ و ﺑﻪ ﺻﻮرت ﺗﻨﻬﺎ ﭘﺸﺖ ﻣﺘﻐﻴﺮ هﺎ ﻧﻤﯽ ﺁﻳﺪ )ﻣﺜﻞ‬
‫‪ ،(–a‬اﻣﺎ اﻋﺪاد ﺻﺤﻴﺢ ﻣﯽ ﺗﻮاﻧﻨﺪ ﻣﻨﻔﯽ ﺑﺎﺷﻨﺪ‪ .‬اوﻟﻮﻳﺖ ﻋﻤﻠﮕﺮ هﺎ اﺑﺘﺪا ﺑﺮاﯼ ﭘﺮاﻧﺘﺰ‪ ،‬ﺳﭙﺲ ﺗﻮان‪ ،‬ﺳﭙﺲ‬
‫ﺿﺮب و ﺗﻘﺴﻴﻢ و در ﺁﺧﺮ ﺟﻤﻊ و ﺗﻔﺮﻳﻖ اﺳﺖ‪ .‬در ﺻﻮرﺗﯽ ﮐﻪ ﺿﺮب و ﺗﻘﺴﻴﻢ ﻳﺎ ﺟﻤﻊ و ﺗﻔﺮﻳﻖ ﭘﺸﺖ ﺳﺮ‬
‫هﻢ ﻧﻮﺷﺘﻪ ﺷﻮﻧﺪ اوﻟﻮﻳﺖ ﺑﺎ ﻋﻤﻠﮕﺮ ﺳﻤﺖ ﭼﭗ و در ﻣﻮرد ﺗﻮان ﺑﺎ ﻋﻤﻠﮕﺮ ﺳﻤﺖ راﺳﺖ اﺳﺖ‪ .‬ﻳﻌﻨﯽ ﻋﺒﺎرت‬
‫هﺎﯼ زﻳﺮ ﺑﺎﻳﺪ اﻳﻦ ﮔﻮﻧﻪ ﺗﺮﺟﻤﻪ ﺷﻮﻧﺪ‪:‬‬
‫)‪a * b / c = ((a*b)/c‬‬
‫))‪a ^ b ^ c = (a^(b^c‬‬
‫ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ اﺑﺘﺪا از ﺧﻂ اول ورودﯼ اﺳﺘﺎﻧﺪارد ﻋﺒﺎرت ﻣﻮرد ﻧﻈﺮ را ﺑﺨﻮاﻧﺪ‪ .‬اﻳﻦ ﻋﺒﺎرت ﺷﺎﻣﻞ‬
‫ﻓﻀﺎهﺎﯼ ﺧﺎﻟﯽ )… ‪ (Space, tab,‬ﻧﻴﺴﺖ و ﺑﺮاﯼ ﺳﺎدﮔﯽ ﺑﺎ ﮐﺎراﮐﺘﺮ ‪ $‬ﭘﺎﻳﺎن ﻣﯽ ﻳﺎﺑﺪ‪ .‬ﺳﭙﺲ در ﺧﻂ‬
‫ﺑﻌﺪ ﺗﻌﺪاد درﺧﻮاﺳﺖ هﺎ )‪ (n‬ﺑﻪ ﺻﻮرت ﻳﮏ ﻋﺪد ﺻﺤﻴﺢ ﻣﯽ ﺁﻳﺪ‪ .‬ﺳﭙﺲ در ‪ n‬ﺧﻂ ﺑﻌﺪﯼ درﺧﻮاﺳﺖ هﺎ‬
‫ﻣﻄﺮح ﻣﯽ ﺷﻮﻧﺪ ﮐﻪ در زﻳﺮ ﺗﻮﺿﻴﺢ ﺁن هﺎ را ﻣﯽ ﺑﻴﻨﻴﺪ‪:‬‬
‫‪post‬‬
‫در ﺻﻮرﺗﯽ ﮐﻪ اﻳﻦ ﮐﻠﻤﻪ ﺑﻪ ﻋﻨﻮان در ﺧﻮاﺳﺖ ﻣﻄﺮح ﺷﺪﻩ ﺑﻮد‪ ،‬در ﺧﺮوﺟﯽ اﺳﺘﺎﻧﺪارد ﺷﮑﻞ ﭘﺴﻮﻧﺪﯼ‬
‫ﻋﺒﺎرت را ﺑﻨﻮﻳﺴﻴﺪ‪ .‬ﺑﻴﻦ هﺮ دو ﮐﻠﻤﻪ ﻳﮏ ﻓﺎﺻﻠﻪ ﺧﺎﻟﯽ )‪ (space‬ﻗﺮار دهﻴﺪ‪ .‬دﻗﺖ ﮐﻨﻴﺪ ﮐﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ‬
‫اﻳﻨﮑﻪ ﺗﺮﺗﻴﺐ اﻋﺪاد و ﻣﺘﻐﻴﺮ هﺎ در ﺷﮑﻞ ﭘﺴﻮﻧﺪﯼ ﺗﻐﻴﻴﺮﯼ ﻧﻤﯽ ﮐﻨﺪ‪ ،‬ﻋﺒﺎرت ﺑﻪ ﺻﻮرت ﻳﮑﺘﺎ ﺑﻪ دﺳﺖ ﻣﯽ‬
‫ﺁﻳﺪ‪.‬‬
‫‪pre‬‬
‫در ﺻﻮرﺗﯽ ﮐﻪ اﻳﻦ ﮐﻠﻤﻪ در ورودﯼ ﺁﻣﺪﻩ ﺑﻮد‪ ،‬ﺷﮑﻞ ﭘﻴﺸﻮﻧﺪﯼ ﻋﺒﺎرت را در ﺧﺮوﺟﯽ ﺑﻨﻮﻳﺴﻴﺪ‪.‬‬
‫‪paran‬‬
‫ﺑﺎ دﻳﺪن اﻳﻦ درﺧﻮاﺳﺖ در ﺧﺮوﺟﯽ ﺷﮑﻞ ﭘﺮاﻧﺘﺰ ﮔﺬارﯼ ﺷﺪﻩ ﻋﺒﺎرت را ﭼﺎپ ﮐﻨﻴﺪ‪ .‬ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﮐﻪ ﺑﻪ‬
‫ازاﯼ هﺮ ﻋﻤﻠﮕﺮ ﺑﺎﻳﺪ ﻳﮏ ﺟﻔﺖ ﭘﺮاﻧﺘﺰ در اﻃﺮاف ﺁن ﻗﺮار ﺑﮕﻴﺮد ﺗﺎ از هﺮﮔﻮﻧﻪ اﺑﻬﺎم ﺟﻠﻮﮔﻴﺮﯼ ﺷﻮد‪ .‬از‬
‫اﺿﺎﻓﻪ ﮐﺮدن ﻓﺎﺻﻠﻪ ﺧﺎﻟﯽ ﭘﺮهﻴﺰ ﮐﻨﻴﺪ‪.‬‬
‫‪calc‬‬
‫در ﺻﻮرﺗﯽ ﮐﻪ اﻳﻦ ﻋﺒﺎرت در ورودﯼ ﺁﻣﺪﻩ ﺑﺎﺷﺪ‪ ،‬در ﺧﻂ زﻳﺮ ﺑﻪ ﺗﻌﺪاد ﻣﺘﻐﻴﺮ هﺎﯼ ﻋﺒﺎرت ﻋﺪد‬
‫ﺻﺤﻴﺢ ﺁﻣﺪﻩ اﺳﺖ‪ .‬ﺑﺮاﯼ ﻣﺜﺎل اﮔﺮ ﻋﺒﺎرت دو ﻣﺘﻐﻴﺮ ‪ a‬و ‪ b‬داﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬در ﺧﻂ ﭘﺎﻳﻴﻦ ﻣﻤﮑﻦ اﺳﺖ ورودﯼ‬
‫ﺑﻪ ﺻﻮرت ‪ a=12 b=-3‬ﺁﻣﺪﻩ ﺑﺎﺷﺪ‪ .‬ﺑﻴﻦ هﺮ ﻗﺴﻤﺖ ﻳﮏ ﻓﺎﺻﻠﻪ ﺧﺎﻟﯽ ﻗﺮار دارد و ﻣﺘﻐﻴﺮ هﺎ ﺗﺮﺗﻴﺐ‬
‫ﺧﺎﺻﯽ ﻧﺪارﻧﺪ‪ .‬ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﺑﺎ ﮔﺮﻓﺘﻦ ﻣﻘﺎدﻳﺮ ﻣﺘﻐﻴﺮ هﺎ‪ ،‬ﺁن هﺎ را ﺟﺎﯼ ﮔﺬارﯼ ﮐﻨﺪ و ﭘﺎﺳﺦ را در‬
‫ﺧﺮوﺟﯽ ﭼﺎپ ﮐﻨﺪ‪.‬‬
‫‪der a‬‬
‫ﭘﺲ از ﻋﺒﺎرت ‪ der‬ﻳﮏ ﻣﺘﻐﻴﺮ ﻣﯽ ﺁﻳﺪ ﮐﻪ ﻧﺸﺎن ﻣﯽ دهﺪ ﺑﺎﻳﺪ ﻧﺴﺒﺖ ﺑﻪ ﮐﺪام ﻣﺘﻐﻴﺮ ﻣﺸﺘﻖ ﺑﮕﻴﺮﻳﺪ‪.‬‬
‫ﻣﻤﮑﻦ اﺳﺖ اﻳﻦ ﻣﺘﻐﻴﺮ در ﻋﺒﺎرت ﻣﻮﺟﻮد ﻧﺒﺎﺷﺪ )در اﻳﻦ ﺻﻮرت ﻣﻘﺪار ﻣﺸﺘﻖ ﺻﻔﺮ ﻣﯽ ﺷﻮد(‪ .‬ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ‬
‫ﺑﺎﻳﺪ ﻣﺸﺘﻖ ﻋﺒﺎرت را ﻧﺴﺒﺖ ﺑﻪ ﻣﺘﻐﻴﺮ دادﻩ ﺷﺪﻩ ﺣﺴﺎب ﮐﻨﺪ‪ ،‬ﻣﻘﺪار ﻣﺘﻐﻴﺮ هﺎ را ﻣﺎﻧﻨﺪ ‪ calc‬از ورودﯼ‬
‫درﻳﺎﻓﺖ ﮐﺮدﻩ و ﺑﺎ ﺟﺎﯼ ﮔﺬارﯼ ﻣﻘﺪار هﺎ در ﻋﺒﺎرت ﻣﺸﺘﻖ‪ ،‬ﭘﺎﺳﺦ را در ﺧﺮوﺟﯽ ﭼﺎپ ﮐﻨﺪ‪.‬‬
‫ورودﯼ‪/‬ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫ﺑﺮاﯼ اﻳﻨﮑﻪ ﻗﺎﻟﺐ ورودﯼ و ﺧﺮوﺟﯽ ﺑﺮاﯼ ﺷﻤﺎ روﺷﻦ ﺷﻮد ﺑﻪ ورودﯼ و ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ زﻳﺮ ﺗﻮﺟﻪ‬
‫ﮐﻨﻴﺪ‪:‬‬
‫‪Input:‬‬
‫‪12/c+c*p^(8+9)$‬‬
‫‪5‬‬
‫‪post‬‬
‫‪pre‬‬
‫‪paran‬‬
‫‪calc‬‬
‫‪c=5 p=-1‬‬
‫‪der c‬‬
‫‪c=-2 p=1‬‬
‫‪output:‬‬
‫‪12 c / c p 8 9 + ^ * +‬‬
‫‪+ / 12 c * c ^ p + 8 9‬‬
‫))))‪((12/c)+(c*(p^(8+9‬‬
‫‪-3‬‬
‫‪-2‬‬
‫ﻧﮑﺘﻪ هﺎﯼ ﻣﻬﻢ‪:‬‬
‫ƒ‬
‫ƒ‬
‫ƒ‬
‫ƒ‬
‫ƒ‬
‫ﺑﺮﻧﺎﻣﻪ هﺎﯼ ﺷﻤﺎ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ‪ C/C++‬ﻳﺎ ﺟﺎواﯼ اﺳﺘﺎﻧﺪارد ﻧﻮﺷﺘﻪ ﺷﻮﻧﺪ‪ ،‬ﺑﻪ ﻃﻮرﯼ ﮐﻪ در‬
‫ﻣﺤﻴﻂ ‪ linux‬ﺑﺘﻮاﻧﻨﺪ ﺗﺮﺟﻤﻪ و اﺟﺮا ﺷﻮﻧﺪ‪.‬‬
‫ﻧﺎم ﺑﺮﻧﺎﻣﻪ ﺧﻮد را ﺑﻪ ﺻﻮرت ‪ prj1-8???????.cpp‬ﻳﺎ ‪prj1-8???????.java‬‬
‫ﻗﺮار دهﻴﺪ و ﺑﻪ ﺟﺎﯼ ﻋﻼﻣﺖ هﺎﯼ ﺳﻮال ﺷﻤﺎرﻩ داﻧﺸﺠﻮﻳﯽ ﺧﻮد را ﺑﮕﺬارﻳﺪ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪ هﺎ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ﻳﮏ ﻧﻔﺮﯼ ﻧﻮﺷﺘﻪ ﺷﻮﻧﺪ و هﺮﮔﻮﻧﻪ ﺷﺒﺎهﺖ ﺑﺮﻧﺎﻣﻪ هﺎ ﺑﻪ ﻳﮑﺪﻳﮕﺮ ﺑﻪ‬
‫ﻃﻮرﯼ ﮐﻪ ﻣﺸﮑﻮﮎ ﺑﻪ ﮐﭙﯽ ﮐﺮدن ﺑﺎﺷﺪ‪ ،‬ﺑﺎﻋﺚ ﻣﯽ ﺷﻮد ﺟﺮﻳﻤﻪ اﯼ ﺑﻪ ﺷﻤﺎ ﺗﻌﻠﻖ ﺑﮕﻴﺮد‪.‬‬
‫هﻤﺮاﻩ ﺑﺮﻧﺎﻣﻪ ﺧﻮد ﺑﺎﻳﺪ ﻳﮏ ﻓﺎﻳﻞ ‪ word‬ﻳﺎ ‪) pdf‬ﺑﺎ ﻧﺎم ???????‪ (prj1-8‬ﺑﻪ ﻋﻨﻮان‬
‫‪ documentation‬ﺑﻔﺮﺳﺘﻴﺪ ﮐﻪ ﻧﺤﻮﻩ ﮐﺎر ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ را )از ﺟﻤﻠﻪ ﻗﺴﻤﺖ هﺎﯼ ﻣﺨﺘﻠﻒ‬
‫ﺑﺮﻧﺎﻣﻪ و اﻟﮕﻮرﻳﺘﻢ هﺎﯼ اﺳﺘﻔﺎدﻩ ﺷﺪﻩ( ﺑﻪ اﺧﺘﺼﺎر ﺗﻮﺿﻴﺢ دهﺪ‪ .‬ﺑﻪ ﺑﺮﻧﺎﻣﻪ هﺎﻳﯽ ﮐﻪ‬
‫‪ documentation‬ﻧﺪاﺷﺘﻪ ﺑﺎﺷﻨﺪ و ﻳﺎ ‪ documentation‬ﺑﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺗﻄﺒﻴﻖ‬
‫ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ ﻧﻤﺮﻩ اﯼ ﺗﻌﻠﻖ ﻧﻤﯽ ﮔﻴﺮد‪.‬‬
‫ﺑﺮﻧﺎﻣﻪ هﺎﯼ ﺷﻤﺎ ﺑﻪ ﺻﻮرت ﺧﻮدﮐﺎر ﺻﺤﻴﺢ ﻣﯽ ﺷﻮﻧﺪ‪ ،‬ﺑﻨﺎﺑﺮاﻳﻦ ﺑﻪ ﻗﺎﻟﺐ ورودﯼ و ﺧﺮوﺟﯽ‬
‫دﻗﺖ ﮐﻨﻴﺪ‪ .‬از ﻧﻮﺷﺘﻦ ﮐﻠﻤﺎت اﺿﺎﻓﯽ ﻣﺎﻧﻨﺪ ”‪ “Enter expression:‬و اﻣﺜﺎل ﺁن ﺟﺪًا‬
‫ﺧﻮددارﯼ ﮐﻨﻴﺪ‪ .‬هﺮﮔﻮﻧﻪ اﺷﺘﺒﺎﻩ در ﻗﺎﻟﺐ ﺧﺮوﺟﯽ ﻣﯽ ﺗﻮاﻧﺪ ﻣﻨﺠﺮ ﺷﻮد ﮐﻪ ﺑﺮﻧﺎﻣﻪ ‪ tester‬ﺑﻪ‬
‫ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻧﻤﺮﻩ ﺻﻔﺮ ﺑﺪهﺪ‪.‬‬
‫ƒ ﭘﺲ از اﻟﺼﺎق دو ﻓﺎﻳﻞ ﺑﺮﻧﺎﻣﻪ و ﺗﻮﺿﻴﺤﺎت‪ ،‬ﻧﺎم و ﻧﺎم ﺧﺎﻧﻮادﮔﯽ ﺧﻮد را در ﺑﺪﻧﻪ ﻧﺎﻣﻪ‬
‫ﺑﻨﻮﻳﺴﻴﺪ‪ ،‬ﻣﻮﺿﻮع ﻧﺎﻣﻪ را ﺑﺮاﺑﺮ ???????‪ prj1-8‬ﻗﺮار دهﻴﺪ و ﺑﻪ ﺁدرس‬
‫‪ [email protected]‬ﺑﻔﺮﺳﺘﻴﺪ‪ .‬ﻧﺎﻣﻪ هﺎﻳﯽ ﮐﻪ ﺑﻴﺶ از ‪ ۴٨‬ﺳﺎﻋﺖ از ﻧﻴﻤﻪ ﺷﺐ‬
‫ﺳﺮرﺳﻴﺪ ﺗﺎﺧﻴﺮ داﺷﺘﻪ ﺑﺎﺷﻨﺪ ﺑﻪ هﻴﭻ وﺟﻪ ﺗﺼﺤﻴﺢ ﻧﻤﯽ ﺷﻮﻧﺪ‪.‬‬
‫ƒ اﮔﺮ اﺑﻬﺎﻣﯽ در ﺻﻮرت ﭘﺮوژﻩ وﺟﻮد دارد ﺳﻮال هﺎﯼ ﺧﻮد را در ﺑﺨﺶ ‪discussion‬‬
‫‪ area‬ﺳﺎﻳﺖ درس ﻣﻄﺮح ﮐﻨﻴﺪ‪.‬‬