Assignment-7.pdf

‫ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي )‪(40153‬‬
‫‪f‬‬
‫ﻣﺪرس‪ :‬ﺣﻤﯿﺪ ﺿﺮاﺑﯽزاده‬
‫داﻧﺸﮑﺪهي ﻣﻬﻨﺪﺳﯽ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﺗﻤﺮﯾﻦ ﺳﺮي ﻫﻔﺘﻢ‬
‫ﻣﻬﻠﺖ ﺗﺤﻮﯾﻞ‪ :‬ﭼﻬﺎرﺷﻨﺒﻪ ‪ 23‬آذر ‪ ،1390‬ﺳﺎﻋﺖ ‪ 9‬ﺻﺒﺢ‬
‫ﻧﮑﺎت ﮐﻠﯽ‬
‫‪ ‬ﮐﺪ ﻫﺮ ﺗﻤﺮﯾﻦ را در ﯾﮏ ﻓﺎﯾﻞ ﺟﺪاﮔﺎﻧﻪ و ﺑﺎ ﻧﺎم ﺧﻮاﺳﺘﻪ ﺷﺪه ﻗﺮار دﻫﯿﺪ‪ .‬ﺑﺎﻻي ﻫﺮ ﻓﺎﯾﻞ ﻧﺎم‪ ،‬ﻧﺎم ﺧﺎﻧﻮادﮔﯽ و‬
‫ﺷﻤﺎرهي داﻧﺶﺟﻮﯾﯽ ﺧﻮد را ذﮐﺮ ﮐﻨﯿﺪ‪.‬‬
‫‪ ‬ﺑﺮاي ارﺳﺎل ﺗﻤﺮﯾﻦﻫﺎ ﺑﻪ ﺳﺎﯾﺖ درس ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‪.‬‬
‫‪ ‬ﮐﺎﻣﻨﺖﮔﺬاري ﺑﺮاي ﺑﺮﻧﺎﻣﻪﻫﺎ ﺟﺰﺋﯽ از ﻧﻤﺮهي ﺗﻤﺮﯾﻦ ﺷﻤﺎﺳﺖ‪.‬‬
‫‪ ‬ﺑﺮﻧﺎﻣﻪﻫﺎي ﻣﺮﺑﻮط ﺑﻪ اﯾﻦ ﺗﻤﺮﯾﻦ ﺑﺎﯾﺪ ﺻﺮﻓﺎً ﺑﻪ زﺑﺎن ‪) C‬و ﻧﻪ ‪ (C++‬ﻧﻮﺷﺘﻪ ﺷﺪه و ﺑﺎ ﮐﺎﻣﭙﺎﯾﻠﺮﻫﺎي اﺳﺘﺎﻧﺪارد ﺳﯽ‬
‫)‪ (C99‬ﻗﺎﺑﻞ ﮐﺎﻣﭙﺎﯾﻞ ﺑﺎﺷﻨﺪ‪.‬‬
‫‪ ‬در ﺻﻮرت ﺗﺎﺧﯿﺮ‪ ،‬ﺑﻪ ازاي روز اول ‪ ٪30‬از ﻧﻤﺮهي ﺷﻤﺎ ﮐﺎﺳﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ‪ .‬ﺗﺄﺧﯿﺮ ﺑﯿﺸﺘﺮ از ﺑﯿﺴﺖ و ﭼﻬﺎر ﺳﺎﻋﺖ‬
‫ﻗﺎﺑﻞ ﻗﺒﻮل ﻧﯿﺴﺖ‪.‬‬
‫‪ ‬ﻗﻄﻊ ﺑﻮدن اﯾﻨﺘﺮﻧﺖ ﺧﻮاﺑﮕﺎه‪ ،‬ﮐﻨﺪي ﭘﺎﯾﮕﺎه اﯾﻨﺘﺮﻧﺘﯽ داﻧﺸﮑﺪه‪ ،‬ﺗﻤﺎم ﺷﺪن ﮐﺎرت اﯾﻨﺘﺮﻧﺖ و … ﻫﯿﭻﮐﺪام دﻟﯿﻞ‬
‫ﻣﻮﺟﻬﯽ ﺑﺮاي ﺗﺄﺧﯿﺮ ﻧﯿﺴﺘﻨﺪ‪ .‬ﺑﻨﺎﺑﺮاﯾﻦ ﭘﯿﺸﻨﻬﺎد ﻣﯽﺷﻮد ﺟﻮابﻫﺎي ﺧﻮد را در داﻧﺸﮑﺪه ارﺳﺎل ﮐﻨﯿﺪ‪.‬‬
‫‪ ‬ﻫﻢﻓﮑﺮي ﺑﺎ دﯾﮕﺮ داﻧﺶﺟﻮﯾﺎن ﻣﻮرد ﻗﺒﻮل اﺳﺖ‪ ،‬اﻣﺎ ﻓﺎﯾﻞﻫﺎﯾﯽ ﮐﻪ ﻣﯽﻓﺮﺳﺘﯿﺪ ﺑﺎﯾﺪ ﺑﻪﻃﻮر ﮐﺎﻣﻞ ﺗﻮﺳﻂ ﺧﻮدﺗﺎن‬
‫ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺎﺷﻨﺪ‪ .‬ﮐﻢﺗﺮﯾﻦ ﺗﺨﻄﯽ از اﯾﻦ ﻣﻮﺿﻮع ﺑﺎﻋﺚ درﯾﺎﻓﺖ ﻧﻤﺮهي ‪ -100‬ﺑﺮاي ﮐﻤﮏدﻫﻨﺪه و ﮐﻤﮏﮔﯿﺮﻧﺪه‬
‫ﺧﻮاﻫﺪ ﺑﻮد و در ﺻﻮرت ﺗﮑﺮار‪ ،‬ﻣﻨﺠﺮ ﺑﻪ ﺣﺬف درس و ﮔﺰارش ﺑﻪ ﮐﻤﯿﺘﻪي اﻧﻀﺒﺎﻃﯽ ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫‪ ‬در ﺻﻮرت وﺟﻮد ﻫﺮﮔﻮﻧﻪ ﻣﺸﮑﻞ‪ ،‬ﺳﻮاﻻت ﺧﻮد را از ﻃﺮﯾﻖ ﺳﯿﺴﺘﻢ ﭘﯿﺎﺗﺰا ﺑﺎ ﮐﻤﮏﻣﺪرﺳﯿﻦ در ﻣﯿﺎن ﺑﮕﺬارﯾﺪ‪.‬‬
‫ﻣﺴﺌﻠﻪي اول‪ :‬ﺣﺮﮐﺖ اﺳﺐﻫﺎ‬
‫ﻧﺎم ﻓﺎﯾﻞ‪knights.c :‬‬
‫ﻫﺪف از اﯾﻦ ﺗﻤﺮﯾﻦ ﺣﻞ ﯾﮏ ﻣﺴﺌﻠﻪي ﻗﺪﯾﻤﯽ در ﺷﻄﺮﻧﺞ ﺑﻪ ﻧﺎم ﺣﺮﮐﺖ اﺳﺐﻫﺎ اﺳﺖ‪ .‬ﯾﮏ ﺻﻔﺤﻪي ﺷﻄﺮﻧﺞ ﺧﺎﻟﯽ را در ﻧﻈﺮ‬
‫ﺑﮕﯿﺮﯾﺪ‪ .‬ﯾﮏ ﻣﻬﺮهي اﺳﺐ را در ﯾﮑﯽ از ﺧﺎﻧﻪﻫﺎي ﺷﻄﺮﻧﺞ ﻗﺮار ﻣﯽدﻫﯿﻢ‪ .‬ﺳﺆال اﯾﻦ اﺳﺖ ﮐﻪ آﯾﺎ اﯾﻦ اﺳﺐ ﻣﯽﺗﻮاﻧﺪ ﺑﺎ ﺷﺮوع‬
‫از اﯾﻦ ﺧﺎﻧﻪ و ﺑﺎ ﺣﺮﮐﺖﻫﺎي ﻣﺠﺎز )‪-L‬ﻣﺎﻧﻨﺪ( ﺗﻤﺎم ﺧﺎﻧﻪﻫﺎي ﺷﻄﺮﻧﺞ را ﯾﮏ ﺑﺎر و ﻓﻘﻂ ﯾﮏ ﺑﺎر ﺑﺎزدﯾﺪ ﮐﻨﺪ؟ ﭘﺎﺳﺦ اﯾﻦ ﻣﺴﺌﻠﻪ‬
‫ﻫﻤﻮاره ﻣﺜﺒﺖ اﺳﺖ‪.‬‬
‫ﯾﮏ روش ﺳﺎده ﺑﺮاي ﺣﻞ اﯾﻦ ﻣﺴﺌﻠﻪ ﺑﻪ ﺻﻮرت زﯾﺮ اﺳﺖ‪ :‬در ﻫﺮ ﻣﺮﺣﻠﻪ‪ ،‬ﺗﻤﺎم ﺧﺎﻧﻪﻫﺎي ﻣﻤﮑﻦ ﮐﻪ اﺳﺐ ﻣﯽﺗﻮاﻧﺪ ﺑﺎ ﯾﮏ‬
‫ﺣﺮﮐﺖ ﺑﻪ آنﻫﺎ ﺑﺮﺳﺪ را ﭘﯿﺪا ﻣﯽﮐﻨﯿﻢ )ﻣﺴﻠﻤﺎً اﯾﻦ ﺧﺎﻧﻪﻫﺎ ﻧﺒﺎﯾﺪ ﻗﺒﻼ ﺑﺎزدﯾﺪ ﺷﺪه ﺑﺎﺷﻨﺪ(‪ .‬ﺳﭙﺲ ﺑﺮاي ﻫﺮ ﯾﮏ از اﯾﻦ ﺧﺎﻧﻪﻫﺎ‬
‫ﺗﻌﺪاد ﺣﺮﮐﺎﺗﯽ ﮐﻪ اﺳﺐ ﻣﯽﺗﻮاﻧﺪ از آن ﺧﺎﻧﻪ اﻧﺠﺎم دﻫﺪ را ﻣﺤﺎﺳﺒﻪ ﻣﯽﮐﻨﯿﻢ‪ .‬ﺳﭙﺲ اﺳﺐ را ﺑﻪ ﺧﺎﻧﻪاي ﺣﺮﮐﺖ ﻣﯽدﻫﯿﻢ ﮐﻪ‬
‫ﮐﻢﺗﺮﯾﻦ ﺗﻌﺪاد ﺣﺮﮐﺎت ﻣﻤﮑﻦ ﺑﻌﺪي را داﺷﺘﻪ ﺑﺎﺷﺪ‪ .‬اﮔﺮ اﯾﻦ ﮐﻢﺗﺮﯾﻦ ﺗﻌﺪاد ﺑﺮاي دو ﺧﺎﻧﻪ ﻣﺴﺎوي ﺑﻮد‪ ،‬ﻣﯽﺗﻮاﻧﯿﻢ ﻫﺮ ﯾﮏ از‬
‫آن ﺧﺎﻧﻪﻫﺎ را ﺑﻪ دﻟﺨﻮاه اﻧﺘﺨﺎب ﮐﻨﯿﻢ‪.‬‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﺑﺎ درﯾﺎﻓﺖ ﻣﺨﺘﺼﺎت ﯾﮏ ﺧﺎﻧﻪ از ﺷﻄﺮﻧﺞ و ﺑﺎ اﺳﺘﻔﺎده از روش ﻓﻮق ﻣﺸﺨﺺ ﮐﻨﺪ ﮐﻪ ﭼﮕﻮﻧﻪ ﻣﯽﺗﻮان ﺑﺎ‬
‫ﺷﺮوع از آن ﺧﺎﻧﻪ‪ ،‬ﻫﺮ ‪ 64‬ﺧﺎﻧﻪي ﺷﻄﺮﻧﺞ را دﻗﯿﻘﺎً ﯾﮏ ﺑﺎر ﺑﺎزدﯾﺪ ﮐﺮد‪ .‬ﺧﺮوﺟﯽ ﺑﺮﻧﺎﻣﻪ ﯾﮏ آراﯾﻪي دوﺑﻌﺪي اﺳﺖ ﮐﻪ در ﻫﺮ‬
‫دراﯾﻪي آن ﻋﺪدي ﺑﯿﻦ ‪ 1‬ﺗﺎ ‪ 64‬ﻗﺮار داده ﺷﺪه اﺳﺖ ﮐﻪ ﻧﺸﺎندﻫﻨﺪهي ﺗﺮﺗﯿﺐ ﺑﺎزدﯾﺪ آن ﺧﺎﻧﻪ از ﺷﻄﺮﻧﺞ ﺗﻮﺳﻂ اﺳﺐ اﺳﺖ‪.‬‬
‫ورودي ﻧﻤﻮﻧﻪ‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫| ‪5 | 52‬‬
‫| ‪3 | 22 | 47 | 56‬‬
‫| ‪| 61 | 20‬‬
‫| ‪4 | 53 | 48 | 57‬‬
‫| ‪2 | 23 | 60 | 55‬‬
‫|‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫| ‪6‬‬
‫| ‪| 19 | 62 | 21 | 46 | 59 | 64 | 51‬‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫| ‪1 | 36 | 63 | 54 | 43 | 58 | 49‬‬
‫| ‪| 24‬‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫| ‪7 | 40‬‬
‫| ‪| 35 | 18 | 45 | 42 | 31 | 50‬‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫| ‪| 28 | 25 | 32 | 37 | 44 | 41 | 10 | 13‬‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫| ‪8‬‬
‫| ‪| 17 | 34 | 27 | 30 | 15 | 12 | 39‬‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫| ‪9 | 14 | 11‬‬
‫| ‪| 26 | 29 | 16 | 33 | 38‬‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫ﺗﻤﺮﯾﻦ ﺳﺮي ﻫﻔﺘﻢ ‪ -‬درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي‬
‫‪+----+----+----+----+----+----+----+----+‬‬
‫‪Start row: 4‬‬
‫‪Start column: 2‬‬
‫‪1‬‬
‫ﻣﺴﺌﻠﻪي دوم‪ :‬ﻣﺮﺗﺐﺳﺎزي ﺳﺮﯾﻊ‬
‫ﻧﺎم ﻓﺎﯾﻞ‪quick_sort.c :‬‬
‫ﯾﮑﯽ از اﻟﮕﻮرﯾﺘﻢﻫﺎي ﭘﺮﮐﺎرﺑﺮد ﺑﺮاي ﻣﺮﺗﺐﺳﺎزي‪ Quick Sort ،‬ﯾﺎ ﻣﺮﺗﺐﺳﺎزي ﺳﺮﯾﻊ اﺳﺖ‪ .‬در اﯾﻦ روش‪ ،‬ﺑﺮاي‬
‫ﻣﺮﺗﺐﺳﺎزي ﻋﻨﺎﺻﺮ ﯾﮏ دﻧﺒﺎﻟﻪ‪ ،‬ﯾﮑﯽ از آنﻫﺎ ﺑﻪ ﺻﻮرت ﺗﺼﺎدﻓﯽ ﺑﻪ ﻋﻨﻮان ﻣﺤﻮر اﻧﺘﺨﺎب ﻣﯽﺷﻮد؛ ﺳﭙﺲ ﻋﻨﺎﺻﺮ آن دﻧﺒﺎﻟﻪ ﺑﻪ‬
‫ﮔﻮﻧﻪاي ﻗﺮار ﻣﯽﮔﯿﺮﻧﺪ ﮐﻪ ﻫﻤﻪي ﻋﻨﺎﺻﺮ ﮐﻮﭼﮏﺗﺮ از ﻣﺤﻮر در آﻏﺎز دﻧﺒﺎﻟﻪ‪ ،‬و ﻫﻤﻪي ﻋﻨﺎﺻﺮ ﺑﺰرگﺗﺮ ﯾﺎ ﻣﺴﺎوي ﻣﺤﻮر در‬
‫اداﻣﻪ ﻗﺮار ﮔﯿﺮﻧﺪ‪ .‬ﺑﻪ اﯾﻦ ﻋﻤﻞ ﺑﺨﺶﺑﻨﺪي ﮔﻔﺘﻪ ﻣﯽﺷﻮد‪ .‬ﻣﺜﻼً در دﻧﺒﺎﻟﻪي زﯾﺮ‪:‬‬
‫> ‪< 1, 100, 5, 3, 2, 10, 4‬‬
‫اﮔﺮ ﻋﺪد ‪ 5‬ﺑﻪ ﻋﻨﻮان ﻣﺤﻮر اﻧﺘﺨﺎب ﺷﻮد‪ ،‬ﭘﺲ از ﻋﻤﻞ ﺑﺨﺶﺑﻨﺪي‪ ،‬دﻧﺒﺎﻟﻪي زﯾﺮ ﺣﺎﺻﻞ زﯾﺮ ﻣﯽﺷﻮد‪:‬‬
‫> ‪< 1, 3, 2, 4, 5, 100, 10‬‬
‫اﮐﻨﻮن اﮔﺮ ﺗﺎﺑﻊ ﻣﺮﺗﺐﺳﺎزي ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘﯽ روي دو ﺑﺨﺶ زﯾﺮ ﮐﻪ ﺣﺎﺻﻞ از ﺑﺨﺶﺑﻨﺪي اﺳﺖ اﺟﺮا ﺷﻮد‪:‬‬
‫> ‪< 1, 3, 2, 4 >, < 100, 10‬‬
‫در اﯾﻦ ﺻﻮرت ﮐﻞ دﻧﺒﺎﻟﻪ ﺑﻪ ﺻﻮرت ﻣﺮﺗﺐ در ﺧﻮاﻫﺪ آﻣﺪ‪.‬‬
‫در اﯾﻦ ﺗﻤﺮﯾﻦ ﺷﻤﺎ ﺗﺎﺑﻌﯽ ﻣﯽﻧﻮﯾﺴﯿﺪ ﮐﻪ ﺑﺎ اﺳﺘﻔﺎده از اﻟﮕﻮرﯾﺘﻢ ﻣﺮﺗﺐﺳﺎزي ﺳﺮﯾﻊ آراﯾﻪاي از اﻋﺪاد ﺻﺤﯿﺢ را ﻣﺮﺗﺐ ﻣﯽﮐﻨﺪ‪.‬‬
‫اﯾﻦ ﺗﺎﺑﻊ را دﻗﯿﻘﺎً ﺑﻪ ﺻﻮرت زﯾﺮ ﭘﯿﺎدهﺳﺎزي ﮐﻨﯿﺪ‪:‬‬
‫;)‪void quick_sort(int *start, int *end‬‬
‫ﻋﻨﺎﺻﺮي ﮐﻪ ﻗﺮار اﺳﺖ ﻣﺮﺗﺐ ﺷﻮﻧﺪ‪ ،‬ﺑﺎ اﺷﺎرهﮔﺮﻫﺎي ‪ start‬و ‪ end‬ﻣﺸﺨﺺ ﻣﯽﺷﻮﻧﺪ‪ .‬ﻣﺜﻼً ﺑﺮاي ﻣﺮﺗﺐﺳﺎزي آراﯾﻪي ‪a‬‬
‫ﺗﻤﺮﯾﻦ ﺳﺮي ﻫﻔﺘﻢ ‪ -‬درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي‬
‫‪2‬‬
‫ﮐﻪ ﺑﻪ ﺻﻮرت ;]‪ int a[1000‬ﺗﻌﺮﯾﻒ ﺷﺪه‪ ،‬ﺗﺎﺑﻊ ‪ quick_sort‬ﺑﻪ ﺻﻮرت زﯾﺮ ﻓﺮاﺧﻮاﻧﯽ ﻣﯽﺷﻮد‪:‬‬
‫;)‪quick_sort(a, a + 1000‬‬
‫ﺑﻪ ﻃﻮر ﮐﻠﯽ ﺑﺎ ﻓﺮاﺧﻮاﻧﯽ )‪ quick_sort(a + i, a + j‬ﻋﻨﺎﺻﺮي از آراﯾﻪي ‪ a‬ﮐﻪ اﻧﺪﯾﺴﺸﺎن در ﺑﺎزهي )‪ [i, j‬ﻗﺮار دارد‪،‬‬
‫ﺑﻪ ﻋﻨﻮان ﯾﮏ ﺗﮑﻪ آراﯾﻪ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه و ﻣﺮﺗﺐ ﻣﯽﺷﻮﻧﺪ‪.‬‬
‫ﺗﺬﮐﺮ‪ :‬در ﭘﯿﺎدهﺳﺎزي اﯾﻦ ﺗﺎﺑﻊ ﻧﺒﺎﯾﺪ آراﯾﻪي اﺿﺎﻓﯽ ﺗﻌﺮﯾﻒ ﮐﻨﯿﺪ‪.‬‬
‫ﻣﺴﺌﻠﻪي ﺳﻮم‪ :‬اﻓﺮاز رﺷﺘﻪ‬
‫ﻧﺎم ﻓﺎﯾﻞ‪strtok.c :‬‬
‫در ﮐﺘﺎﺑﺨﺎﻧﻪي اﺳﺘﺎﻧﺪارد ‪ ،string.h‬ﺗﺎﺑﻌﯽ ﺑﻪ ﻧﺎم ‪ strtok‬وﺟﻮد دارد ﮐﻪ وﻇﯿﻔﻪي آن ﺷﮑﺴﺘﻦ ﯾﮏ رﺷﺘﻪي دادهﺷﺪه ﺑﻪ‬
‫دﻧﺒﺎﻟﻪاي از ﭼﻨﺪ ﮐﻠﻤﻪ ﯾﺎ ‪ token‬اﺳﺖ ﮐﻪ اﯾﻦ ﮐﻠﻤﺎت ﺗﻮﺳﻂ »ﺟﺪاﮐﻨﻨﺪهﻫﺎ« )ﻫﻤﺎﻧﻨﺪ ﻓﺎﺻﻠﻪ ﯾﺎ ﻋﻼﺋﻢ ﺳﺠﺎوﻧﺪي( از ﻫﻢ‬
‫ﺟﺪا ﺷﺪهاﻧﺪ‪ .‬اﯾﻦ ﺗﺎﺑﻊ ﺑﻪ ﺻﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ‪:‬‬
‫;)‪char *strtok(char *str, const char *delim‬‬
‫در اوﻟﯿﻦ ﻓﺮاﺧﻮاﻧﯽ‪ ،‬دو رﺷﺘﻪي ‪ str‬و ‪ delim‬ﺑﻪ ﺗﺎﺑﻊ داده ﻣﯽﺷﻮﻧﺪ ﮐﻪ ‪ str‬ﺣﺎوي رﺷﺘﻪي اﺻﻠﯽ‪ ،‬و ‪ delim‬ﺷﺎﻣﻞ‬
‫ﺟﺪاﮐﻨﻨﺪهﻫﺎﺳﺖ‪ .‬ﺧﺮوﺟﯽ اﯾﻦ ﺗﺎﺑﻊ اﺷﺎرهﮔﺮ ﺑﻪ اﺑﺘﺪاي اوﻟﯿﻦ ﮐﻠﻤﻪ در رﺷﺘﻪي ‪ str‬اﺳﺖ‪ .‬ﻫﻤﭽﻨﯿﻦ‪ ،‬ﺗﺎﺑﻊ در اﻧﺘﻬﺎي ﮐﻠﻤﻪ‬
‫)ﺑﻪﺟﺎي اوﻟﯿﻦ ﮐﺎراﮐﺘﺮ ﺟﺪاﮐﻨﻨﺪه ﺑﻌﺪ از ﮐﻠﻤﻪ( ﯾﮏ ﮐﺎرﮐﺘﺮ ‪ \0‬ﻗﺮار ﻣﯽدﻫﺪ‪ .‬در ﻓﺮاﺧﻮاﻧﯽﻫﺎي ﺑﻌﺪي‪ ،‬اﮔﺮ ﺑﻪ ﺟﺎي ‪،str‬‬
‫ﻣﻘﺪار ‪ NULL‬ﺑﻪ ﺗﺎﺑﻊ داده ﺷﻮد‪ ،‬ﺗﺎﺑﻊ ﮐﺎر ﺧﻮد را ﺑﺮ روي رﺷﺘﻪي ‪ str‬ﻗﺒﻠﯽ اداﻣﻪ ﻣﯽدﻫﺪ و اﺷﺎرهﮔﺮ ﺑﻪ اﺑﺘﺪاي ﮐﻠﻤﻪ ي‬
‫ﺑﻌﺪي در ‪ str‬را ﺑﺮﻣﯽﮔﺮداﻧﺪ‪ .‬اﮔﺮ ﻫﻨﮕﺎم ﻓﺮاﺧﻮاﻧﯽ ﺗﺎﺑﻊ‪ ،‬ﮐﻠﻤﻪي دﯾﮕﺮي در ‪ str‬ﭘﯿﺪا ﻧﺸﻮد‪ ،‬ﺗﺎﺑﻊ ﻣﻘﺪار ‪ NULL‬را‬
‫ﺑﺮﻣﯽﮔﺮداﻧﺪ‪.‬‬
‫در اﯾﻦ ﺗﻤﺮﯾﻦ ﺷﻤﺎ ﺗﺎﺑﻊ ‪ strtok‬را ﺷﺒﯿﻪﺳﺎزي ﻣﯽﮐﻨﯿﺪ‪ .‬اﯾﻦ ﺗﺎﺑﻊ را دﻗﯿﻘﺎً ﺑﻪ ﺷﮑﻞ زﯾﺮ ﭘﯿﺎدهﺳﺎزي ﮐﻨﯿﺪ‪:‬‬
‫;)‪char *my_strtok(char *str, const char *delim‬‬
‫ﻋﻤﻞﮐﺮد اﯾﻦ ﺗﺎﺑﻊ ﺑﺎﯾﺪ دﻗﯿﻘﺎً ﺷﺒﯿﻪ ﻋﻤﻞﮐﺮد ﺗﺎﺑﻊ ‪ strtok‬در ﮐﺘﺎﺑﺨﺎﻧﻪي اﺳﺘﺎﻧﺪارد ﺑﺎﺷﺪ‪ .‬ﻧﻤﻮﻧﻪاي از اﯾﻦ ﻋﻤﻞﮐﺮد در‬
‫ﻗﻄﻌﻪﮐﺪ زﯾﺮ ﻧﻤﺎﯾﺶ داده ﺷﺪه اﺳﺖ‪.‬‬
‫ﺧﺮوﺟﯽ ﻧﻤﻮﻧﻪ‬
‫‪Mona‬‬
‫‪Ali‬‬
‫‪and‬‬
‫‪Zeinab‬‬
‫‪are‬‬
‫‪here‬‬
‫;"!‪char str[] = "Mona, Ali, and Zeinab are here‬‬
‫;" ;‪char delim[] = ".!,‬‬
‫;)‪char *token = strtok(str, delim‬‬
‫{ )‪while (token != NULL‬‬
‫;)‪printf("%s\n", token‬‬
‫;)‪token = strtok(NULL, delim‬‬
‫}‬
‫ﻧﮑﺘﻪ‪ :‬ﺗﻮﺻﯿﻪ ﻣﯽﺷﻮد اﺷﺎرهﮔﺮ ﺑﻪ آﺧﺮﯾﻦ ﮐﺎراﮐﺘﺮ ﭘﺮدازشﻧﺸﺪه در رﺷﺘﻪي ‪ str‬را ﺗﻮﺳﻂ ﯾﮏ ﻣﺘﻐﯿﺮ ‪ static‬در ﺗﺎﺑﻊ‬
‫‪ my_strtok‬ﺑﺮاي اﺳﺘﻔﺎده در ﻓﺮاﺧﻮاﻧﯽﻫﺎي ﺑﻌﺪي ﻧﮕﻪداري ﮐﻨﯿﺪ‪.‬‬
‫ﺗﻤﺮﯾﻦ ﺳﺮي ﻫﻔﺘﻢ ‪ -‬درس ﻣﺒﺎﻧﯽ ﺑﺮﻧﺎﻣﻪﺳﺎزي‬
‫ﻗﻄﻌﻪﮐﺪ ﻧﻤﻮﻧﻪ‬
‫‪3‬‬