project list_version 2.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪا‬
‫ﻟﻴﺴﺖ ﭘﺮوژه ﻫﺎ درس ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ‬
‫ﻣﻬﻠﺖ ارﺳﺎل ﻛﺪ‪ 4 :‬ﺑﻬﻤﻦ ﺳﺎﻋﺖ ‪23:59‬‬
‫ﺗﺤﻮﻳﻞ ﺣﻀﻮري‪ 5 :‬و ‪ 6‬ﺑﻬﻤﻦ‬
‫ﻟﻄﻔﺎ ﻗﺒﻞ از اﻧﺠﺎم ﭘﺮوژه ﺑﻪ ﻧﻜﺎت زﻳﺮ ﺗﻮﺟﻪ ﻓﺮﻣﺎﻳﻴﺪ‪:‬‬
‫• اﮔﺮ ﺳﻮاﻟﻲ داﺷﺘﻴﺪ ﻣﻲ ﺗﻮاﻧﻴﺪ از ﻃﺮﻳﻖ ﭘﺴﺖ اﻟﻜﺘﺮوﻧﻴﻚ در ﮔﺮوه درس ﻣﻄﺮح ﻛﻨﻴﺪ‪) .‬در ﺻﻔﺤﻪ‬
‫درس ﻧﺸﺎﻧﻲ ﮔﺮوپ ﻗﺮار ﮔﺮﻓﺘﻪ اﺳﺖ‪(.‬‬
‫• ﺑﻪ دﻟﺨﻮاه ﻳﻜﻲ از ‪ 3‬ﭘﺮوژه ي زﻳﺮ را اﻧﺘﺨﺎب ﻛﻨﻴﺪ‪.‬‬
‫• در ﻧﺎﻣﮕﺬاري ﻣﺘﻐﻴﻴﺮ ﻫﺎ از ﻧﺎم ﻫﺎي ﻣﻌﻨﻲ دار اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪ .‬ﺑﺮاي ﻣﺜﺎل ﺑﺮاي ﻧﮕﻪ داري ﺗﻌﺪاد‪ ،‬از‬
‫ﻣﺘﻐﻴﺮ ﺑﺎ ﻧﺎم ﻫﺎﻳﻲ ﻣﺎﻧﻨﺪ ‪ count ،num‬و ‪ ...‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫• در ﻣﻮاﻗﻊ ﻟﺰوم‪ ،‬از ﻛﺎﻣﻨﺖ اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫• ﺑﻪ ﻫﻤﺮاه ﻛﺪ ﺧﻮد‪ ،‬ﻳﻚ ﻓﺎﻳﻞ ﭘﻲ دي اف‪ ،‬ﺷﺎﻣﻞ ﺗﻮﺿﻴﺤﺎت ﻻزم و ﻣﺴﺘﻨﺪات را ارﺳﺎل ﻛﻨﻴﺪ‪.‬‬
‫• ﻛﺪ و ﻓﺎﻳﻞ ﻣﺴﺘﻨﺪات را در ﻳﻚ ﻓﻮﻟﺪر ﻗﺮار داده‪ ،‬ﺑﺎ ﻋﻨﻮان ‪ project_STDID.zip‬ﻓﺸﺮده ﻛﻨﻴﺪ و‬
‫آن را ﺗﺎ ﻣﻮﻋﺪ ﻣﻘﺮر ﺑﻪ آدرس ‪ [email protected]‬ارﺳﺎل ﻛﻨﻴﺪ‪.‬‬
‫• ﻣﻬﻠﺖ دﻗﻴﻖ ارﺳﺎل ﭘﺮوژه و ﻧﺤﻮه ي ﺗﺤﻮﻳﻞ ﺣﻀﻮري ‪ ،‬ﻣﺘﻌﺎﻗﺒﺎ اﻋﻼم ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫• دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﻣﻬﻠﺖ ارﺳﺎل ﭘﺮوژه ﺗﻤﺪﻳﺪ ﻧﺨﻮاﻫﺪ ﺷﺪ و ﺑﻪ ازاي ﻫﺮ روز ﺗﺎﺧﻴﺮ ‪ %25‬از ﻧﻤﺮه ي‬
‫ﺗﻤﺮﻳﻦ ﻛﺴﺮ ﻣﻲ ﺷﻮد‪ .‬ﺑﻪ ﭘﺮوژه ﻫﺎﻳﻲ ﻛﻪ ﺑﺎ ﺑﻴﺶ از ‪ 3‬روز ﺗﺎﺧﻴﺮ ﻓﺮﺳﺘﺎده ﺷﻮﻧﺪ‪ ،‬ﻧﻤﺮه اي ﺗﻌﻠﻖ‬
‫ﻧﻤﻲ ﮔﻴﺮد‪.‬‬
‫• ﺗﻤﺎﻣﻲ ﭘﺮوژه ﻫﺎ ﺗﻚ ﻧﻔﺮه ﻫﺴﺘﻨﺪ‪.‬‬
‫ﭘﺮوژه اول ‪ :‬ﺷﺒﻴﻪ ﺳﺎزي اﻛﺴﻞ‬
‫در اﻳﻦ ﭘﺮوژه ﻫﺪف ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ اي اﺳﺖ ﻛﻪ ﺗﺎ ﺣﺪ زﻳﺎدي ﻣﺸﺎﺑﻪ اﻛﺴﻞ ﻋﻤﻞ ﻛﻨﺪ‪ .‬ﺑﺪﻳﻦ ﺗﺮﺗﻴﺐ ﻛﻪ ﺷﻤﺎ‬
‫ﺑﺎﻳﺪ ﻳﻚ ﺻﻔﺤﻪ ﻣﺘﺸﻜﻞ از ﺗﻌﺪاد زﻳﺎدي ﺧﺎﻧﻪ )ﺻﺪ در ﺻﺪ( در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ در ﻫﺮ ﻟﺤﻈﻪ‬
‫ﺗﻌﺪادي از آﻧﻬﺎ روي ﺻﻔﺤﻪ ﻗﺮار داده ﻣﻲ ﺷﻮﻧﺪ )ﺑﺴﺘﻪ ﺑﻪ اﻧﺪازه اي ﻛﻪ ﺷﻤﺎ ﺑﺮاي ﻫﺮ ﺧﺎﻧﻪ در ﻧﻈﺮ ﻣﻲ ﮔﻴﺮﻳﺪ(‬
‫ﺧﺎﻧﻪ ﻫﺎي اﻳﻦ اﻛﺴﻞ ﺑﺎﻳﺪ ﻫﻤﺎﻧﻨﺪاﻛﺴﻞ واﻗﻌﻲ ﻧﺎﻣﮕﺬاري ﺷﻮﻧﺪ و در ﺑﺎﻻ و ﭼﭗ ﺻﻔﺤﻪ ﻧﺸﺎن داده ﺷﻮﻧﺪ‪) .‬ﺧﺎﻧﻪ‬
‫اول ﺑﺎ ﺣﺮف ‪ A‬ﻧﺸﺎن داده ﺷﻮد و ‪ (...‬اﻳﻦ ﻧﺎﻣﮕﺬاري و ﻧﺤﻮه ﻧﻤﺎﻳﺶ را دﻗﻴﻘﺎ ﺑﺎﻳﺪ ﻣﺸﺎﺑﻪ اﻛﺴﻞ اﻋﻤﺎل ﻛﻨﻴﺪ‪ .‬اﻳﻦ‬
‫ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ ﻳﻚ ﺧﻂ ﻓﺮﻣﺎن ﻧﻴﺰ داﺷﺘﻪ ﺑﺎﺷﺪ ﻛﻪ در آن ﻛﺎرﺑﺮ ﻣﻲ ﺗﻮاﻧﺪ ﻳﻚ ﻋﺪد ﻳﺎ ﻓﺮﻣﺎن را وارد ﻛﻨﺪ ﻛﻪ ﺟﻮاب‬
‫ﺑﺎﻳﺪ در ﺧﺎﻧﻪ ي ﻓﻌﺎل ﻗﺮار ﮔﻴﺮد و ﻧﻤﺎﻳﺶ داده ﺷﻮد ‪.‬ﻓﺮﻣﺎن ﻫﺎﻳﻲ ﻛﻪ ﻛﺎرﺑﺮ ﻣﻲ ﺗﻮاﻧﺪ وارد ﻛﻨﺪ ‪ 4‬دﺳﺘﻮر‬
‫‪ sum,average,max,min‬ﻣﻲ ﺑﺎﺷﺪﻛﻪ ﺑﻪ ﺻﻮرت زﻳﺮ ﻗﺎﺑﻞ اﺳﺘﻔﺎده ﻣﻲ ﺑﺎﺷﻨﺪ‪:‬‬
‫)‪Sum(B1:B4‬‬
‫‪or‬‬
‫)‪average(A6:A10‬‬
‫)‪or max(C3:C74‬‬
‫ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻲ ﺑﻴﻨﻴﺪ اﻳﻦ دﺳﺘﻮرﻫﺎ دﻗﻴﻘﺎ ﻣﺎﻧﻨﺪ اﻛﺴﻞ واﻗﻌﻲ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﻧﺪ و ﺑﻪ ﻫﻤﺎن ﻃﺮﻳﻖ ﻧﻴﺰ ﻣﺤﺎﺳﺒﻪ‬
‫ﻣﻲ ﮔﺮدﻧﺪ‪.‬‬
‫ﺟﻮاب اﻳﻦ دﺳﺘﻮر ﻫﺎ ﺑﺎﻳﺪ در ﺧﺎﻧﻪ ي ﻓﻌﺎل ﺣﺎﻓﻈﻪ ﻗﺮار ﮔﻴﺮد‪.‬‬
‫اﻣﻜﺎﻧﺎت اﺧﺘﻴﺎري‬
‫اﻳﻦ ﻣﻮارد ﺟﻨﺒﻪ اﺿﺎﻓﻲ دارﻧﺪ و ﺑﺴﺘﻪ ﺑﻪ ﻧﻮع آﻧﻬﺎ و ﻧﺤﻮه اﺟﺮاي ﺷﻤﺎ ﻧﻤﺮه ﻣﺎزاد ﺧﻮاﻫﻨﺪ داﺷﺖ‪:‬‬
‫‪ .1‬ﻣﺤﺎﺳﺒﻪ ﺗﻮاﺑﻊ دﻳﮕﺮي ﭼﻮن ‪ sin,cos,exp,log,...‬و ﻗﺮار دادن در ﺧﺎﻧﻪ ﻓﻌﺎل‬
‫‪ .2‬ﻣﺤﺎﺳﺒﻪ ﺗﺮﻛﻴﺒﻲ ﺗﻮاﺑﻊ ﻛﻪ ﺷﺎﻣﻞ ﻫﺮﮔﻮﻧﻪ ﻋﻤﻠﻴﺎت ﺟﺒﺮي روي ﺗﻮاﺑﻊ ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫))‪(sum(A2:A6) + average(C3:C5‬‬
‫‪ .3‬اﻣﻜﺎن ‪ LOAD‬و ‪ SAVE‬ﺑﺮﻧﺎﻣﻪ‬
‫ﺗﻮﺿﻴﺤﺎت ﺗﻜﻤﻴﻠﻲ‪:‬‬
‫• ﺧﺎﻧﻪ ي ﻓﻌﺎل ﺑﻪ ﻃﻮر ﭘﻴﺸﻔﺮض ‪ A1‬اﺳﺖ‪.‬‬
‫• ﺑﺮاي ﺟﺪول‪ ،‬ﻳﻚ آراﻳﻪ ‪ 100*100‬در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪ ،‬اﻣﺎ در ﻫﺮ ﻣﺮﺣﻠﻪ ﻳﻚ زﻳﺮ آراﻳﻪ ي ﻓﻌﺎل ‪ 20*20‬آن‬
‫را ﻧﻤﺎﻳﺶ دﻫﻴﺪ‪.‬‬
‫• در ورودي ﺑﺎ ﻫﺮ ﻛﺪام از ﻛﺎراﻛﺘﺮ ﻫﺎي ‪ u,d,l,r‬ﺑﻪ ﺗﺮﺗﻴﺐ ﺧﺎﻧﻪ ي ﻓﻌﺎل را ﻳﻚ واﺣﺪ ﺑﻪ ﺑﺎﻻ‪ ،‬ﭘﺎﻳﻴﻦ‪ ،‬ﭼﭗ ‪،‬‬
‫راﺳﺖ ﻣﻨﺘﻘﻞ ﻛﻨﻴﺪ‪) .‬اﮔﺮ ﺑﺎ اﻳﻦ دﺳﺘﻮر ﺧﺎﻧﻪ از ﺟﺪول ﺧﺎرج ﻣﻲ ﺷﻮد‪ ،‬ﻧﺒﺎﻳﺪ آن را اﻋﻤﺎل ﻛﻨﻴﺪ(‬
‫• در ورودي ﺑﺎ دﺳﺘﻮر ‪ goto C5‬ﺑﻪ ﻃﻮر ﻣﺴﺘﻘﻴﻢ ﺑﻪ ﺧﺎﻧﻪ ي ‪ C5‬ﺑﺮوﻳﺪ‪.‬‬
‫• وارد ﻛﺮدن ﻫﺮ ﻛﺪام از دﺳﺘﻮرات ‪ max,sum,average, min‬ﻣﻘﺪار ﺧﺎﻧﻪ ي ﻓﻌﺎل را ﺗﻐﻴﻴﺮ ﻣﻲ‬
‫دﻫﺪ‪.‬‬
‫• ﺣﻮاﺳﺘﺎن ﺑﺎﺷﺪ ﻫﻨﮕﺎم ﺗﻐﻴﻴﺮ ﻳﻚ ﺧﺎﻧﻪ‪ ،‬ﺗﻤﺎم ﺧﺎﻧﻪ ﻫﺎي واﺑﺴﺘﻪ ﺑﻪ آن ﻧﻴﺰ ﺑﺎﻳﺪ ﺗﻐﻴﻴﺮ ﻛﻨﻨﺪ‪.‬‬
‫ﭘﺮوژه دوم ‪ :‬ﺑﺎزي ﺑﺎ ﻋﺒﺎرات رﻳﺎﺿﻲ‬
‫در ﻳﻚ ﻓﺎﻳﻞ ورودي ﺑﻪ ﻧﺎم ‪ Input.txt‬دﺳﺘﻮراﺗﻲ وﺟﻮد دارد ﻛﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﭘﺲ از آﻧﺎﻟﻴﺰ آﻧﻬﺎ ﺟﻮاﺑﻬﺎي ﻻزم را‬
‫در ﻓﺎﻳﻞ ‪ Output.txt‬ﻗﺮار دﻫﻴﺪ ‪ .‬اﻳﻦ دﺳﺘﻮرات ﺑﻪ دو ﺑﺨﺶ ﻣﺤﺎﺳﺒﺎﺗﻲ و ﻧﻤﺎﻳﺸﻲ ﺗﻘﺴﻴﻢ ﻣﻲ ﮔﺮدﻧﺪ ‪:‬‬
‫دﺳﺘﻮرات ﻣﺤﺎﺳﺒﺎﺗﻲ‪:‬‬
‫اﻳﻦ دﺳﺘﻮرات ﺑﻪ دو ﻓﺮﻣﺖ ﻛﻠﻲ زﻳﺮ ﻣﻲ ﺑﺎﺷﻨﺪ‪:‬‬
‫‪Name1 N1 Operator1 N2 Operator2 N3 Operator3 N4‬‬
‫‪Swap N1 N2‬‬
‫در ﻓﺮﻣﺖ اول ‪ Name 1‬ﻧﺎم ﻣﺘﻐﻴﺮي اﺳﺖ ﻛﻪ ﻗﺮار اﺳﺖ ﺣﺎﺻﻞ ﻋﺒﺎرت ﻣﺤﺎﺳﺒﻪ ﺷﺪه )ﺑﻪ ﺻﻮرت ﻳﻚ‬
‫ﭼﻨﺪﺟﻤﻠﻪ اي ﺑﺎ ﻣﺘﻐﻴﻴﺮ ‪ ( x‬در آن ﻗﺮار ﮔﻴﺮد‪.‬‬
‫اﭘﺮاﺗﻮرﻫﺎ ﺷﺎﻣﻞ ﻳﻜﻲ از ﻋﻼﻣﺎت *‪ - ، + ،‬ﻣﻲ ﺑﺎﺷﻨﺪ و ‪ N1,N2,N3,N4‬ﻣﻲ ﺗﻮاﻧﻨﺪ ﻣﺘﻐﻴﺮي از ﭘﻴﺶ ﺗﻌﺮﻳﻒ‬
‫ﺷﺪه ‪ ،‬ﻳﻚ ﻋﺪد و ﻳﺎ ﺧﻮد ‪ x‬ﺑﺎﺷﻨﺪ‪) .‬ﺑﻴﻦ اﭘﺮاﺗﻮرﻫﺎ و ﻣﺘﻐﻴﺮﻫﺎ ﻳﻚ ﻓﻀﺎي ﺧﺎﻟﻲ وﺟﻮد دارد ( ﻻزم ﺑﻪ ذﻛﺮ اﺳﺖ‬
‫ﻛﻪ در ﻣﺤﺎﺳﺒﻪ ﻋﺒﺎرت ﻣﺮﺑﻮﻃﻪ ﺑﺎﻳﺪ اوﻟﻮﻳﺖ اﭘﺮاﺗﻮرﻫﺎ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪.‬‬
‫ﭘﺲ در ﻧﻬﺎﻳﺖ ﻫﺮ ﻣﺘﻐﻴﺮ ﺑﺮاﺑﺮ ﻳﻚ ﭼﻨﺪﺟﻤﻠﻪ اي اﺳﺖ ﻛﻪ ﺷﻤﺎ ﺑﺎﻳﺪ آن را ﺑﻪ ﻫﺮ ﻧﺤﻮ ذﺧﻴﺮه ﻛﻨﻴﺪ‪.‬‬
‫در ﻓﺮﻣﺖ دوم دﺳﺘﻮر ﺳﺒﺐ ﺟﺎﺑﺠﺎﻳﻲ رواﺑﻂ ﭼﻨﺪﺟﻤﻠﻪ اي ‪ N1 , N2‬ﻣﻲ ﮔﺮدد‪.‬‬
‫ﺑﻪ ﻧﻤﻮﻧﻪ اي از اﻳﻦ دﺳﺘﻮرات ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪:‬‬
‫‪Temp1 1 + x * 2‬‬
‫‪Temp2 Temp1 * 2‬‬
‫‪Temp3 Temp1 + x * Temp2 – 3‬‬
‫‪Swap Temp1 Temp2‬‬
‫در اوﻟﻴﻦ ﺧﻂ اﺑﺘﺪا ﻣﺘﻐﻴﺮ ‪ Temp1‬ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮد و ﻣﻘﺪار آن ﺑﺮاﺑﺮ ‪ 2x+1‬ﻗﺮار ﻣﻲ ﮔﻴﺮد‪ .‬ﺳﭙﺲ ﻣﺘﻐﻴﻴﺮ‬
‫‪ Temp2‬ﺑﺼﻮرت دوﺑﺮاﺑﺮ ‪ (Temp2=4x+2) Temp1‬ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮد و ﻧﻬﺎﻳﺘﺎ ‪ Temp3‬ﺑﺮاﺑﺮ‬
‫‪ 4x^2+4x-2‬ﻗﺮار ﻣﻴﮕﻴﺮد‪ .‬ﭘﺲ از اﺟﺮاي ﺧﻂ ﭼﻬﺎرم‪ Temp2=2x+1 ،‬و ‪ Temp=4x+2‬ﻣﻲ ﮔﺮدد‪.‬‬
‫دﺳﺘﻮرات ﻧﻤﺎﻳﺸﻲ‪:‬‬
‫اﻳﻦ دﺳﺘﻮرات ﺑﻪ ﺳﻪ ﺻﻮرت زﻳﺮ ﻣﻲ ﺑﺎﺷﻨﺪ‪:‬‬
‫‪Show Name‬‬
‫‪Calc Name Numeber‬‬
‫‪IsEqual Name1 Name2‬‬
‫دﺳﺘﻮر ‪ Show‬راﺑﻄﻪ ي ﭼﻨﺪﺟﻤﻠﻪ اي ﻣﺮﺑﻮط ﺑﻪ ﻣﺘﻐﻴﻴﺮ ‪ name‬را ﻧﺸﺎن ﻣﻲ دﻫﺪ‪ .‬دﺳﺘﻮر ‪ Calc‬ﻣﻘﺪار ﻋﺪد‬
‫اﻋﺸﺎري ‪ Number‬را ﺑﻪ ﺟﺎي ‪ x‬در راﺑﻄﻪ ي ﭼﻨﺪﺟﻤﻠﻪ اي ‪ name‬ﻗﺮار داده ﺣﺎﺻﻞ را ﻣﻲ ﻳﺎﺑﺪ‪ .‬دﺳﺘﻮر‬
‫‪ IsEqual‬اﮔﺮ راﺑﻄﻪ ي ﭼﻨﺪ ﺟﻤﻠﻪ اي دو ﻣﺘﻐﻴﻴﺮ ‪ Name1, Nam2‬ﻳﻜﺴﺎن ﺑﻮد‪ ،‬در ﺧﺮوﺟﻲ ‪ yes‬و در ﻏﻴﺮ‬
‫اﻳﻦ ﺻﻮرت ﻛﻠﻤﻪ ي ‪ no‬را ﭼﺎپ ﻣﻲ ﻛﻨﺪ‪.‬‬
‫ﻧﻜﺎت‪:‬‬
‫• در ﻓﺎﻳﻞ ورودي ‪ Input.txt‬ﻫﻢ دﺳﺘﻮرات ﻣﺤﺎﺳﺒﺎﺗﻲ و ﻫﻢ دﺳﺘﻮرات ﻧﻤﺎﻳﺸﻲ وﺟﻮد دارﻧﺪ ‪ .‬وﻟﻲ ﺑﻪ‬
‫ازاي ﻫﺮ دﺳﺘﻮر ﻧﻤﺎﻳﺸﻲ ﻳﻚ ﺧﻂ ﺟﻮاب در ﻓﺎﻳﻞ ﺧﺮوﺟﻲ ‪ Output.txt‬ﭼﺎپ ﻣﻲ ﮔﺮدد‪.‬‬
‫• ﻫﺮ ﭼﻨﺪ ﺟﻤﻠﻪ اي را ﺣﺪاﻛﺜﺮ ﺗﺎ درﺟﻪ ‪ 20‬ﺗﻌﺮﻳﻒ ﻣﻲ ﻛﻨﻴﻢ‪.‬‬
‫• از ﻋﻼﻣﺖ ﺿﺮب در ﻧﻤﺎﻳﺶ اﺳﺘﻔﺎده ﻧﻤﻲ ﺷﻮد‪ .‬ﺑﺮاي ﻣﺜﺎل ﻋﺒﺎرت ‪ 2x+2‬را ﻧﺒﺎﻳﺪ ﺑﻪ ﺻﻮرت ‪2*x+2‬‬
‫ﻧﻮﺷﺖ‪.‬‬
‫• در ﭼﺎپ ﻣﻌﺎدﻻت ﺟﺒﺮي ﺑﺎﻳﺪ ﻫﻤﻴﺸﻪ ﺗﺮﻣﻲ ﻛﻪ درﺟﻪ ﺑﻴﺸﺘﺮ دارد را زودﺗﺮ ﭼﺎپ ﻛﻨﺪ ‪.‬ﺑﺮاي ﻣﺜﺎل‬
‫ﻋﺒﺎرت ‪ 2x^2+2x‬ﻫﺮﮔﺰ ﺑﻪ ﺻﻮرت ‪ 2x+2x^2‬ﭼﺎپ ﻧﻤﻲ ﮔﺮدد‪.‬‬
‫• ﻫﺮ دو ﻓﺎﻳﻞ ورودي و ﺧﺮوﺟﻲ ﻣﺘﻨﻲ ﻫﺴﺘﻨﺪ‪.‬‬
‫• دﺳﺘﻮرات ﺑﺼﻮرت ﺣﺮوف ﺑﺰرگ و ﻛﻮﭼﻚ ﻳﻜﺴﺎن ﻣﻲ ﺑﺎﺷﻨﺪ‪) .‬ﺑﺮاي ﻣﺜﺎل ‪ isEQUAL‬ﺑﺎ ‪IsEqual‬‬
‫ﻳﻜﺴﺎن اﺳﺖ‪(.‬‬
‫• ﺗﻨﻬﺎ ﻣﺘﻐﻴﻴﺮي ﻛﻪ در ﺗﻌﺎرﻳﻒ ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ ‪ x‬ﻣﻲ ﺑﺎﺷﺪ و ﻣﺘﻐﻴﻴﺮ ﻫﺎﻳﻲ ﻧﻈﻴﺮ …‪ y,z,‬وﺟﻮد ﻧﺪارﻧﺪ‪.‬‬
‫• در ﻧﻤﺎﻳﺶ ﻋﺒﺎرات ﺟﺒﺮي ﻫﻤﻴﺸﻪ در دو ﻃﺮف ﻋﻤﻠﮕﺮ ﺟﻤﻊ و ﺗﻔﺮﻳﻖ ﻳﻚ ﻓﺎﺻﻠﻪ ﻗﺮار دﻫﻴﺪ وﻟﻲ در‬
‫اﻃﺮاف ﻋﻤﻠﮕﺮ ﺗﻮان ﻫﻴﭻ ﻓﺎﺻﻠﻪ اي ﻧﮕﺬارﻳﺪ‪.‬‬
‫) ﺷﻜﻞ ﺻﺤﻴﺢ ‪ 2x^2 + 2x :‬؛ ﺷﻜﻞ ﻏﻠﻂ‪(2x ^ 2+2x :‬‬
‫ﻧﻤﻮﻧﻪ اي از ﻳﻚ ﻓﺎﻳﻞ ورودي‪:‬‬
‫‪Temp1 1 + x * 2‬‬
‫‪Temp2 Temp1 * 2‬‬
‫‪SHOW Temp2‬‬
‫‪Calc Temp1 ‐1.2‬‬
‫‪Temp3 Temp1 + x * Temp2 – 3‬‬
‫‪isequal Temp2 Temp3‬‬
‫ﻧﻤﻮﻧﻪ ﻓﺎﻳﻞ ﺧﺮوﺟﻲ اﻳﻦ ورودي‪:‬‬
‫‪4x + 2‬‬
‫‪‐1.4‬‬
‫‪No‬‬
‫ﺗﻮﺿﻴﺤﺎت ﺗﻜﻤﻴﻠﻲ‪:‬‬
‫• ﺑﻪ ﻋﻨﻮان ﻧﻤﺮه اﺿﺎﻓﻪ‪ ،‬ﺑﺮﻧﺎﻣﻪ ﺧﻮد را ﻃﻮري ﺗﻐﻴﻴﺮ دﻫﻴﺪ ﻛﻪ ﺗﻘﺴﻴﻢ‪ ،‬ﺗﻮان و ﭘﺮاﻧﺘﺰ ﮔﺬاري را ﻫﻢ در ورودي‬
‫‪ support‬ﻛﻨﺪ‪ .‬دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ‪ syntax‬ﺧﺮوﺟﻲ ﻓﺮﻗﻲ ﻧﻤﻲ ﻛﻨﺪ‪.‬‬
‫ﭘﺮژه ﺳﻮم‪ :‬اﻧﺒﺎر داري‬
‫در اﻳﻦ ﭘﺮوژه ﺑﺮﻧﺎﻣﻪ ﻛﻨﺘﺮل ورود و ﺧﺮوج ﻛﺎﻻﻫﺎي ﺷﺮﻛﺖ ‪ ABC‬را ﭘﻴﺎده ﺳﺎزي ﻣﻲ ﻛﻨﻴﻢ‪ .‬دو ﻟﻴﺴﺖ در اﺧﺘﻴﺎر‬
‫دارﻳﻢ‪ .‬ﻳﻜﻲ ﻟﻴﺴﺖ ﻛﺎﻻ ﻫﺎ ﻛﻪ ﻧﺎم ﻫﺮ ﻛﺎﻻ در آن اﺳﺖ و دﻳﮕﺮي ﻟﻴﺴﺖ اﺳﺎﻣﻲ ﻛﻪ اﺳﻢ اﺷﺨﺎﺻﻲ ﻛﻪ ﻛﺎﻻ ﺑﻪ‪/‬از اﻧﺒﺎر‬
‫وارد‪/‬ﺧﺎرج ﻣﻲ ﻛﻨﻨﺪ را ذﺧﻴﺮه ﻣﻲ ﻛﻨﺪ‪ .‬ﻫﻤﭽﻨﻴﻦ ﻳﻚ ﺳﺮي ﻣﺤﻤﻮﻟﻪ ﺑﻪ اﻧﺒﺎر وارد‪/‬ﺧﺎرج ﻣﻲ ﺷﻮد‪ .‬ﻋﻼوه ﺑﺮ اﻳﻦ ﻣﻲ‬
‫ﺗﻮاﻧﻴﻢ ﭼﻨﺪ ﻧﻮع ﮔﺰارش ﻧﻴﺰ از وﺿﻌﻴﺖ اﻧﺒﺎر ﺗﻬﻴﻪ ﻛﻨﻴﻢ‪.‬‬
‫در اﻧﺒﺎر ﺷﺮﻛﺖ ورود و ﺧﺮوج ﻛﺎﻻ ﻫﺎ ﺑﺎ ﻛﻨﺘﺮل ﺗﮓ ﻫﺎي ‪ RFID‬ﺑﺮ روي آﻧﻬﺎ ﻛﻨﺘﺮل ﻣﻲ ﺷﻮد‪ .‬ﭘﺲ در واﻗﻊ ﺑﺮاي‬
‫ورود و ﺧﺮوج‪ ،‬ﺷﻤﺎره ي ﻛﺎﻻ ﻫﻤﺎن ﻛﺪي اﺳﺖ ﻛﻪ از ﻃﺮﻳﻖ ﺗﮓ ﻓﺮﺳﺘﺎده ﻣﻲ ﺷﻮد و ﺑﺎ ورود و ﺧﺮوج ﻛﺎﻻ ﺑﻪ‬
‫ﺻﻮرت ﺑﻼدرﻧﮓ‪ ،‬ﻛﻠﻴﻪ ي ﺗﻐﻴﻴﺮات ﻻزﻣﻪ در داده ﻫﺎ اﻧﺠﺎم ﺧﻮاﻫﺪ ﺷﺪ‪ .‬ﻛﺪ ﻫﺮ ﺗﮓ ‪ RFID‬را ﻳﻚ ﺳﻴﮕﻨﺎل‬
‫دﻳﺠﻴﺘﺎل ‪ 16‬ﺑﻴﺘﻲ ﻓﺮض ﻛﻨﻴﺪ و ﺗﺎﺑﻌﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺷﻤﺎره ي ﺗﮓ ﻫﺎي رﻧﺪوم را ﺑﺮاي اﻳﻦ اﺟﻨﺎس ﺗﻮﻟﻴﺪ ﻛﻨﺪ‪ .‬در‬
‫ﻫﻨﮕﺎم ﺑﺮرﺳﻲ ﻫﺮ ﻛﺎﻻ ‪ ،‬ﻛﺪ آﻧﻬﺎ ﻧﻴﺰ ﺑﺎﻳﺪ ﺑﻪ ﻣﺪﻳﺮ ﮔﺰارش داده ﺷﻮد‪ .‬ورودي ﻫﺎي ‪ 16‬ﺑﻴﺘﻲ ﺷﻤﺎ‪ ،‬ﻫﻤﺎن ﺳﻴﮕﻨﺎل‬
‫ﻓﺮﺿﻲ ﺻﺎدره از ‪ RFID‬ﻫﺎ ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﺣﺎل ﺑﻪ ﺗﻮﺟﻪ ﺑﻪ اﻳﻦ ﻧﻜﺎت‪ ،‬ﺑﺮﻧﺎﻣﻪ ي ﺷﻤﺎ ﺑﺎﻳﺪ ﺗﻮاﺑﻊ زﻳﺮ را دارا ﺑﺎﺷﺪ‪:‬‬
‫اﺿﺎﻓﻪ ﻛﺮدن ﻧﺎم ﻛﺎﻻ ﺑﻪ ﻟﻴﺴﺖ )ﻫﺮﻛﺎﻻ ﻛﻪ ﺗﻮﻟﻴﺪ ﻣﻲ ﺷﻮد ﻳﻚ ﺗﮓ ﺑﺮاي آن ﺗﻬﻴﻪ ﻣﻲ ﺷﻮد‪(.‬‬
‫‪> to goods’ list‬ﻧﺎم ﻛﺎﻻ< ‪Insert‬‬
‫ﻧﻤﺎﻳﺶ ﻛﺎﻻ ﻫﺎي ﻣﻮﺟﻮد‬
‫‪Show goods’ list‬‬
‫اﺿﺎﻓﻪ ﻛﺮدن ﺑﻪ ﻟﻴﺴﺖ اﺷﺨﺎص‬
‫‪Add (name,last name,phone number) to names’ list‬‬
‫ﻧﻤﺎﻳﺶ ﻟﻴﺴﺖ اﺳﺎﻣﻲ‬
‫‪Show names’ list‬‬
‫وارد ﻛﺮدن ﻳﻚ ﻣﺤﻤﻮﻟﻪ ﺑﻪ اﻧﺒﺎر)ﻫﺮ ﻣﺤﻤﻮﻟﻪ ﻛﻪ وارد ﻣﻲ ﺷﻮد‪ ،‬اﮔﺮ ﺗﮓ داﺷﺖ ﻛﻪ ﻫﻴﭻ‪ .‬وﮔﺮﻧﻪ ﺑﺮ روي آن ﻳﻚ ﺗﮓ‬
‫ﺟﺪﻳﺪ ﻣﻲ ﭼﺴﺒﺎﻧﻴﻢ‪(.‬‬
Insert N good to Anbar by (name,lastname) at
(year,month,day,tag) which consists of:
Num1 good1
Num2 good2
.
.
NumN goodN
(‫ﺧﺎرج ﻛﺮدن ﻳﻚ ﻣﺤﻤﻮﻟﻪ از اﻧﺒﺎر )ﻛﻨﺘﺮل ﺗﮓ ﻳﺎدﻣﺎن ﺑﺎﺷﺪ‬
Exclude N good from Anbar by (name,lastname) at
(year,month,day,tag) which consists of:
Num1 good1 Tag:1110011110101100
Num2 good2 Tag:1110010000101100
.
.
NumN goodN Tag:1110011100101100
.‫" را ﭼﺎپ ﻛﻨﻴﺪ‬..." ‫ ﻋﺒﺎرت‬،‫در ﺻﻮرﺗﻲ ﻛﻪ ﻛﻤﺘﺮ از ﻣﻘﺪار ﻛﺎﻻي ﻣﻮﺟﻮد ﺑﺨﻮاﻫﻴﻢ ﻛﺎﻻ ﺑﺮدارﻳﻢ‬
‫ﮔﺰارش از وﺿﻊ ﻣﻮﺟﻮري ﻛﺎﻻ‬
Report good
:‫در ﻫﺮ ﺧﻂ ﺧﺮوﺟﻲ ﻧﺎم ﻛﺎﻻ و ﺗﻌﺪاد ﻣﻮﺟﻮد از آن و ﺷﻤﺎره ﺗﮓ آن را ﺑﻨﻮﻳﺴﻴﺪ‬
Good1 num1 Tag:1110011000101100
Good2 num2 Tag:1110011001100000
.
.
GoodN NumN Tag:1010011111101100
:‫ﮔﺰارش از ﻣﺤﻮﻟﻪ ﻫﺎﻳﻲ ﻛﻪ وارد ﺷﺪه اﻧﺪ‬
Report Mahmuleha from (year,month,day) to (year,month,day)
.‫ﺧﺎرج ﺷﺪه اﻧﺪ را ﭼﺎپ ﻛﻨﻴﺪ‬/‫در ﺧﺮوﺟﻲ ﻟﻴﺴﺘﻲ از ﻣﺤﻤﻮﻟﻪ ﻫﺎﻳﻲ ﻛﻪ در آن ﻣﺪت وارد‬
Mahmule#1 inserted/excluded by (name,lastname) on
‫‪(year,month,day,tag) consists of:‬‬
‫‪Num1 good1 Tag:1110011000100100‬‬
‫‪Num2 good2 Tag:1110011000100000‬‬
‫‪.‬‬
‫‪.‬‬
‫‪NumN goodN Tag:1110011000101111‬‬
‫ﺗﻮﺿﻴﺤﺎت ﺗﻜﻤﻴﻠﻲ‪:‬‬
‫• ﺑﺮاي اﻳﻦ ﺳﻮال ﺣﺘﻤﺎ از ‪ linked list‬ﺑﺎ اﺳﺘﻔﺎده از ‪ pointer‬و ‪ struct‬ﻫﺎ اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫• ﺑﻪ ﻋﻨﻮان ﻧﻤﺮه ي اﺿﺎﻓﻪ‪ ،‬ﻋﻼوه ﺑﺮ ‪ ،linked list‬ﻣﻲ ﺗﻮاﻧﻴﺪ ﻗﺴﻤﺘﻲ از داده ﻫﺎ را ﺑﺎ اﺳﺘﻔﺎده از‬
‫‪ dynamic allocation‬ﻓﻀﺎي آراﻳﻪ اي )ﻛﻪ در ﻛﻼس ﺣﻞ ﺗﻤﺮﻳﻦ ﺗﻮﺿﻴﺢ داده ﺷﺪ( ذﺧﻴﺮه و ﺑﺎزﻳﺎﺑﻲ‬
‫ﻛﻨﻴﺪ‪.‬‬
‫ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ‬