ﺑﺴﻤﻪ ﺗﻌﺎﻟﻲ ﭘﺮوژهي ﭘﺎﻳﺎﻧﻲ درس ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي ﻣﻮﻋﺪ ارﺳﺎل :ﺟﻤﻌﻪ 8ﺑﻬﻤﻦ 1389 ﻧﻜﺎت ﻛﻠﻲ • ﭘﺮوژه ﻫﺎ را ﻣﻴﺘﻮاﻧﻴﺪ ﺑﻪ ﺻﻮرت ﮔﺮوﻫﻲ در ﻗﺎﻟﺐ ﮔﺮوه ﻫﺎي دوﻧﻔﺮه اﻧﺠﺎم دﻫﻴﺪ وﻟﻲ اﻧﺠﺎم ﭘﺮوژه ﺑﺼﻮرت ﻓﺮدي ﻧﻤﺮه اﺿﺎﻓﻲ ﺑﻴﺸﺘﺮي ﺧﻮاﻫﺪ داﺷﺖ . • دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎﻳﺪ ﻓﺎﻳﻞ)ﻫﺎي( ﺧﻮد را داﺧﻞ ﻳﻚ ﻓﺎﻳﻞ zipﺑﻪ ﻧﺎم project_STDID ) STDIDﺷﻤﺎرهي داﻧﺸﺠﻮﻳﻴﺘﺎن اﺳﺖ (.ﻗﺮار دﻫﻴﺪ )ﻣﺜﻞ (8912345.zipو ﻓﺎﻳﻞ zipرا ارﺳﺎل ﻛﻨﻴﺪ .دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ در ﻓﺎﻳﻞ ارﺳﺎﻟﻲ ﺷﻤﺎ ﻋﻼوه ﺑﺮ ﻓﺎﻳﻞﻫﺎي ﻣﺮﺑﻮط ﺑﻪ ﻛﺪ ﺑﺮﻧﺎﻣﻪ ،ﺑﺎﻳﺪ ﺷﺎﻣﻞ ﻳﻚ ﻓﺎﻳﻞ ﺑﺎ ﻓﺮﻣﺖ PDFﺑﻪ ﻧﺎم STDID.pdfﺑﺎﺷﺪ ﻛﻪ ﺣﺎوي ﻣﺴﺘﻨﺪات ﺷﻤﺎﺳﺖ .اﻳﻦ ﻓﺎﻳﻞ ﺑﺎﻳﺪ ﺷﺎﻣﻞ ﺧﻼﺻﻪي ﻋﻤﻠﻜﺮد ﻫﺮ ﻳﻚ از ﺗﻮاﺑﻊ struct ،ﻳﺎ classﻫﺎ و اﻳﺪهﻫﺎي ﻛﻠﻲ ﺑﺮﻧﺎﻣﻪﺗﺎن ﺑﺎﺷﺪ .در ﺻﻮرت اﻧﺠﺎم ﭘﺮوژه ﺑﺼﻮرت ﮔﺮوﻫﻲ ﻳﻜﻲ از اﻓﺮاد ﺑﻪ ﻋﻨﻮان ﺳﺮﮔﺮوه اﻧﺘﺨﺎب و در ﺗﻤﺎﻣﻲ ﻗﺴﻤﺖ ﻫﺎ ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ او ﻗﺮار ﺑﮕﻴﺮد .در اﻳﻦ ﺻﻮرت ﻓﺎﻳﻞ zipﺷﻤﺎ ﺑﺎﻳﺪ داراي ﻳﻚ ﻓﺎﻳﻞ txtﺑﺎﺷﺪ ﻛﻪ در آن ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ ﻫﺮ دو ﻧﻔﺮ ﻗﺮار داﺷﺘﻪ ﺑﺎﺷﺪ . • ﻓﺎﻳﻞ zipرا ﺑﺎ ﻋﻨﻮان project_STDIDﺑﻪ آدرس زﻳﺮ اﻳﻤﻴﻞ ﻛﻨﻴﺪ: [email protected] • آﺧﺮﻳﻦ ﻣﻬﻠﺖ ارﺳﺎل ﺳﺎﻋﺖ 23:59روز ﺟﻤﻌﻪ 8ﺑﻬﻤﻦ 1389اﺳﺖ و ﺑﻪ ﻫﻴﭻ ﻋﻨﻮان ﺗﻤﺪﻳﺪ ﻧﺨﻮاﻫﺪ ﺷﺪ. • ﺑﻪ ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺸﺎﺑﻪ ﻧﻤﺮهي ﻣﻨﻔﻲ ﺗﻌﻠﻖ ﺧﻮاﻫﺪ ﮔﺮﻓﺖ. • ﺳﻮاﻻت ﺧﻮد را ﺑﺎ ﻓﺮﺳﺘﺎدن اﻳﻤﻴﻞ ﺑﻪ آدرس زﻳﺮ ﻣﻄﺮح ﻛﻨﻴﺪ: [email protected] ﭼﻜﻴﺪه در ﭘﺮوژه ﭘﺎﻳﺎن ﺗﺮم اﻳﻦ درس ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ ﻛﻪ اﻋﻤﺎل درج ، ﺣﺬف ،ﺟﺴﺘﺠﻮ ،ﻣﺮﺗﺐ ﺳﺎزي ادﻏﺎﻣﻲ و واروﻧﻪ ﻛﺮدن را ﭘﺸﺘﻴﺒﺎﻧﻲ ﻛﻨﺪ .ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻳﻜﻲ از اﻧﻮاع داده ﺳﺎﺧﺘﺎرﻫﺎي ﭘﺮﻛﺎرﺑﺮد اﺳﺖ ﻛﻪ در اداﻣﻪ ﺑﻴﺸﺘﺮ ﺑﺎ آن آﺷﻨﺎ ﺧﻮاﻫﻴﺪ ﺷﺪ .ﻫﺪف از ﻃﺮاﺣﻲ اﻳﻦ ﭘﺮوژه آﺷﻨﺎﻳﻲ ﺷﻤﺎ ﺑﺎ Pointerو Structاﺳﺖ . ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻳﺎ ﻓﻬﺮﺳﺖ ﺳﺎﺧﺘﺎري ﺷﺎﻣﻞ دﻧﺒﺎﻟﻪاي از ﻋﻨﺎﺻﺮ اﺳﺖ ﻛﻪ ﻫﺮ ﻋﻨﺼﺮ داراي اﺷﺎرهﮔﺮي ﺑﻪ ﻋﻨﺼﺮ ﺑﻌﺪي در دﻧﺒﺎﻟﻪ اﺳﺖ .ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي از ﺟﻤﻠﻪٔ ﺳﺎدهﺗﺮﻳﻦ و راﻳﺞﺗﺮﻳﻦ دادهﺳﺎﺧﺘﺎرﻫﺎ اﺳﺖ و در ﭘﻴﺎدهﺳﺎزي ﺑﺴﻴﺎري از دادهﺳﺎﺧﺘﺎرﻫﺎ ﭘﺸﺘﻪ ) ، (Stackﺻﻒ )(Queueو ﺟﺪول درﻫﻢﺳﺎزي ) (Hash tableاﺳﺘﻔﺎده ﻣﻲﺷﻮد .ﻣﺰﻳﺖ ﻣﻬﻢ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻧﺴﺒﺖ ﺑﻪ آراﻳﻪﻫﺎ اﻳﻦ اﺳﺖ ﻛﻪ ﺗﺮﺗﻴﺐ ﻗﺮار ﮔﺮﻓﺘﻦ دادهﻫﺎ در آن ﺑﺎ ﺗﺮﺗﻴﺐ ﻗﺮار ﮔﺮﻓﺘﻦ آنﻫﺎ در ﺣﺎﻓﻈﻪ ﻣﺘﻔﺎوت اﺳﺖ .ﺑﻪ ﻫﻤﻴﻦ دﻟﻴﻞ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي داراي اﻳﻦ وﻳﮋﮔﻲ اﺳﺖ ﻛﻪ درج و ﺣﺬف ﮔﺮهﻫﺎ در ﻫﺮ ﻧﻘﻄﻪاي از ﻟﻴﺴﺖ ،ﺑﺎ ﺗﻌﺪاد ﺛﺎﺑﺘﻲ از ﻋﻤﻠﻴﺎت اﻣﻜﺎنﭘﺬﻳﺮ اﺳﺖ .از ﻃﺮف دﻳﮕﺮ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي اﺟﺎزه دﺳﺘﻴﺎﺑﻲ ﺗﺼﺎدﻓﻲ ﺑﻪ داده ﻳﺎ ﻫﺮﮔﻮﻧﻪ اﻧﺪﻳﺲ ﮔﺬاري را ﻧﻤﻲدﻫﺪ .در ﻧﺘﻴﺠﻪ ﺑﺴﻴﺎري از اﻋﻤﺎل اﺑﺘﺪاﻳﻲ ﻧﻈﻴﺮ ﺑﻪ دﺳﺖ آوردن آﺧﺮﻳﻦ ﻋﻨﺼﺮ ﻟﻴﺴﺖ ،ﭘﻴﺪا ﻛﺮدن ﻋﻨﺼﺮ ﺷﺎﻣﻞ داده ﻣﻮرد ﻧﻈﺮ ،ﻳﺎ ﻣﺸﺨﺺ ﻛﺮدن ﻣﻜﺎن درج ﻳﻚ ﻋﻨﺼﺮ ﺟﺪﻳﺪ ﻣﻤﻜﻦ اﺳﺖ ﻧﻴﺎزﻣﻨﺪ ﺑﺮرﺳﻲ اﻛﺜﺮ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ ﺑﺎﺷﺪ. ﺑﺮاي ﭘﻴﺎده ﺳﺎزي ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﺷﻤﺎ ﺑﺎﻳﺪ از Structاﺳﺘﻔﺎده ﻛﻨﻴﺪ .ﻫﺮ Structﻣﺸﺨﺺ ﻛﻨﻨﺪه ﻳﻚ ﻋﻨﺼﺮ ﻟﻴﺴﺖ اﺳﺖ و داراي دو ﭘﺎراﻣﺘﺮ اﺳﺖ :ﻳﻚ اﺷﺎره ﮔﺮ ) (Pointerﻛﻪ ﺑﻪ ﻋﻨﺼﺮ ﺑﻌﺪي اﺷﺎره ﻣﻴﻜﻨﺪ و ﻳﻚ ﻣﺘﻐﻴﺮ intﻛﻪ ارزش آن ﻋﻨﺼﺮ اﺳﺖ .اﺷﺎره ﮔﺮ ﻋﻨﺼﺮ آﺧﺮ ﺑﻪ NULL اﺷﺎره ﻣﻴﻜﻨﺪ و ﻳﻚ اﺷﺎره ﮔﺮ ﻧﻴﺰ ﺑﺎﻳﺪ داﺷﺘﻪ ﺑﺎﺷﻴﻢ ﻛﻪ ﺑﻪ ﻋﻨﺼﺮ اول اﺷﺎره ﻛﻨﺪ .ﺷﻜﻞ زﻳﺮ ﻧﺸﺎن دﻫﻨﺪه ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﺳﺎده اﺳﺖ . ﺑﺮاي دﺳﺘﺮﺳﻲ ﺑﻪ ﻫﺮ ﻋﻨﺼﺮ ﺑﺎﻳﺪ ﺑﺎ اﺳﺘﻔﺎده از اﺷﺎره ﮔﺮ ﺑﻪ ﻋﻨﺼﺮ اول ﺷﺮوع ﻛﺮده و از ﻃﺮﻳﻖ اﺷﺎره ﮔﺮﻫﺎ ﺑﻪ ﻋﻨﺼﺮﻫﺎي ﺑﻌﺪي ﺑﺮوﻳﺪ ﺗﺎ ﺑﻪ ﻋﻨﺼﺮ ﻣﻮرد ﻧﻈﺮ ﺑﺮﺳﻴﺪ . ﺑﺮﻧﺎﻣﻪ ﻫﻤﺎﻧﻄﻮر ﻛﻪ ﮔﻔﺘﻪ ﺷﺪ ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ .ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﺑﻪ اﻳﻦ ﺻﻮرت ﺑﺎﺷﺪ ﻛﻪ در اﺑﺘﺪا ﺷﻤﺎ ﻳﻚ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي دارﻳﺪ ﻛﻪ در آن ﻫﻴﭻ ﻋﻨﺼﺮي درج ﻧﺸﺪه اﺳﺖ . در ﻫﺮ ﻣﺮﺣﻠﻪ ﺗﺎ زﻣﺎﻧﻲ ﻛﻪ دﺳﺘﻮر ﺧﺮوج داده ﻧﺸﺪه اﺳﺖ ،ﻣﻨﺘﻈﺮ ﻳﻚ ﺣﺮف ﻛﻪ ﻧﺸﺎن دﻫﻨﺪه ﻳﻚ دﺳﺘﻮر ﺑﺎﺷﺪ و ﺑﺎ ﮔﺮﻓﺘﻦ آن ،در ﺻﻮرت وﺟﻮد ﻣﻘﺎدﻳﺮ ورودي را ﮔﺮﻓﺘﻪ و آن دﺳﺘﻮر را اﺟﺮا ﻛﻨﺪ . ﺟﺪول زﻳﺮ ﻧﺸﺎن دﻫﻨﺪه دﺳﺘﻮرات و ﺣﺮوف آن اﺳﺖ . ﻧﻤﺮه ﺣﺮف دﺳﺘﻮر 10 i ﻳﻚ ﻋﺪد را از ورودي ﮔﺮﻓﺘﻪ و ﻳﻚ ﻋﻨﺼﺮ ﺑﺎ ﻣﻘﺪار آن ﻋﺪد ﺑﻪ اول ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي اﺿﺎﻓﻪ ﻛﻨﺪ. 10 d ﻳﻚ ﻋﺪد ﻣﺜﻞ iرا از ورودي ﮔﺮﻓﺘﻪ و ﻋﻨﺼﺮ iام را از ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﺣﺬف ﻣﻴﻜﻨﺪ. 15 f ﻳﻚ ﻋﺪد از ورودي ﮔﺮﻓﺘﻪ و ﺑﮕﻮﻳﺪ ﻋﻨﺼﺮ ﺑﺎ ﻣﻘﺪار آن ﻋﺪد در ﻛﺪام اﻧﺪﻳﺲ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ﻗﺮار دارد .در ﺻﻮرﺗﻲ ﻛﻪ ﻋﻨﺼﺮي ﺑﺎ آن ﻣﻘﺪار وﺟﻮد ﻧﺪاﺷﺖ ، -1ﺑﺎزﮔﺮداﻧﺪ. 15 z 20 r ﻳﻚ ﻋﺪد ﻣﺜﻞ iاز ورودي ﮔﺮﻓﺘﻪ و ﻣﻘﺪار ﻋﻨﺼﺮ iام را ﭼﺎپ ﻣﻴﻜﻨﺪ. ﺗﺮﺗﻴﺐ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي را ﺑﺮﻋﻜﺲ ﻣﻴﻜﻨﺪ. 20+15 s 10 p ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي را ﺑﺮ اﺳﺎس ﻣﻘﺎدﻳﺮ ﻋﻨﺎﺻﺮ ﺑﻪ ﺻﻮرت ﺻﻌﻮدي ﺑﺎ اﺳﺘﻔﺎده از اﻟﮕﻮرﻳﺘﻢ ﻣﺮﺗﺐ ﺳﺎزي ادﻏﺎﻣﻲ ﻣﺮﺗﺐ ﻣﻴﻜﻨﺪ. ﻣﻘﺎدﻳﺮ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي را ﺑﻪ ﺗﺮﺗﻴﺐ ﭼﺎپ ﻣﻴﻜﻨﺪ. 0 e از ﺑﺮﻧﺎﻣﻪ ﺧﺎرج ﻣﻴﺸﻮد. ﺑﺮاي ﭘﻴﺎده ﺳﺎزي ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻧﻜﺎت زﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ : • ﺑﺮاي اﻃﻼﻋﺎت ﺑﻴﺸﺘﺮ راﺟﻊ ﺑﻪ ﻧﺤﻮه ﭘﻴﺎده ﺳﺎزي اﻳﻦ دﺳﺘﻮرات ﺑﻬﺘﺮ اﺳﺖ از ﺳﺎﻳﺖ وﻳﻜﻲ ﭘﺪﻳﺎ اﺳﺘﻔﺎده ﻛﻨﻴﺪ .ﺑﺮاي اﻳﻦ ﻫﻢ ﻣﻴﺘﻮاﻧﻴﺪ ﺑﻪ ﺻﻔﺤﻪ ﻓﺎرﺳﻲ ﻫﻢ اﻧﮕﻠﻴﺴﻲ ﻣﺮاﺟﻌﻪ ﻛﻨﻴﺪ . ﻣﻌﺎدل اﻧﮕﻠﻴﺴﻲ ﻟﻴﺴﺖ ﭘﻴﻮﻧﺪي ” “Linked Listاﺳﺖ . • ﺑﻪ دﻟﻴﻞ اﻳﻨﻜﻪ ﺳﺎﺧﺘﻦ ﻳﻚ ﻧﻤﻮﻧﻪ از ﻳﻚ Structﺑﺎ اﺳﺘﻔﺎده از دﺳﺘﻮر newﺑﻪ ﺷﻤﺎ آﻣﻮزش داده ﻧﺸﺪه اﺳﺖ ﺑﺮاي ﭘﻴﺎده ﺳﺎزي ﻣﻴﺘﻮاﻧﻴﺪ از ﻳﻚ آراﻳﻪ از Structاﺳﺘﻔﺎده ﻛﻨﻴﺪ وﻟﻲ ﻧﻤﻴﺘﻮاﻧﻴﺪ از ﺗﺮﺗﻴﺐ Structﻫﺎ در آراﻳﻪ اﺳﺘﻔﺎده ﻛﻨﻴﺪ . • ﻣﺮﺗﺐ ﺳﺎزي ﺑﺎ اﺳﺘﻔﺎده از اﻟﮕﻮرﻳﺘﻢ ﻫﺎي دﻳﮕﺮ 15ﻧﻤﺮه اﺿﺎﻓﻲ ﻗﺴﻤﺖ ﻣﺮﺗﺐ ﺳﺎزي را ﻧﻤﻲ ﮔﻴﺮد . • ﻗﺴﻤﺖ ﺧﺎرج ﺷﺪن از ﺑﺮﻧﺎﻣﻪ ﻧﻤﺮه اي ﻧﺪارد وﻟﻲ ﺣﺘﻤﺎ ﺑﺎﻳﺪ ﭘﻴﺎده ﺳﺎزي ﺷﻮد . ﻧﻤﻮﻧﻪ در زﻳﺮ ﻧﻤﻮﻧﻪ اي از ورودي و ﺧﺮوﺟﻲ ﻣﺘﻨﺎﻇﺮ ﺑﺎ آن را ﻧﺸﺎن ﻣﻴﺪﻫﻴﻢ : Sample Output : 1 -1 10 6 20 10 5 Sample Input : i 10 i 14 i 20 d2 i5 f 20 f 14 s r z2 i6 p e ﻧﻤﺮه اﺿﺎﻓﻲ در اﻳﻦ ﺑﺨﺶ ﺷﻤﺎ ﻣﻲﺗﻮاﻧﻴﺪ ﺑﺎ اﺿﺎﻓﻪ ﻛﺮدن ﻳﻚ واﺳﻂ ﻛﺎرﺑﺮي ﺗﺎ ﺳﻘﻒ 40ﻧﻤﺮه اﺿﺎﻓﻲ درﻳﺎﻓﺖ ﻛﻨﻴﺪ .ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﺑﺎﻳﺪ در ﺻﻮرت وارد ﻛﺮدن ﺣﺮف xوارد ﺑﺨﺶ واﺳﻂ ﻛﺎرﺑﺮي ﺷﻮد .وﻇﻴﻔﻪي واﺳﻂ ﻛﺎرﺑﺮي اﻳﺠﺎد ﻣﺤﻴﻄﻲ زﻳﺒﺎ و راﺣﺖ ﺑﺮاي ﻛﺎرﺑﺮ اﺳﺖ .ﺑﺮاي ﻣﺜﺎل ﻧﻤﺎﻳﺶ ﻟﻴﺴﺖ دﺳﺘﻮرات ﻣﻤﻜﻦ ﺑﺮاي ﻛﺎرﺑﺮ ﻣﻲﺗﻮاﻧﺪ ﺳﺎده ﺗﺮﻳﻦ ﻧﻮع آن ﺑﺎﺷﺪ .ﻣﻲﺗﻮاﻧﻴﺪ ﺑﺎ اﺿﺎﻓﻪ ﻛﺮدن ﻗﺎﺑﻠﻴﺖﻫﺎي ﻣﺨﺘﻠﻒ، واﺳﻂ ﺧﻮد را ارﺗﻘﺎء داده و ﻧﻤﺮهي ﺑﻴﺸﺘﺮي درﻳﺎﻓﺖ ﻛﻨﻴﺪ.
© Copyright 2026 Paperzz