You are on page 1of 76

‫‪ -١‬ﺍﳌﻜﺪﺱ‬

‫ﺗﻠﻌﺐ ﻫﻴﻜﻠﻴﺔ اﳌﻜﺪس واﻟﺮﺗﻞ دوراً ﻫﺎﻣﺎً ﰲ اﻟﱪﳎﺔ وﻟﻐﺎت اﻟﱪﳎﺔ‪ .‬ﻓﻌﻠﻰ ﺳ ـ ــﺒﻴﻞ اﳌﺜﺎل‪ ،‬ﻳﺘﻢ ﲣﺰﻳﻦ اﻟﻌﻨﺎﺻ ـ ــﺮ ﰲ‬
‫ذاﻛﺮة اﳊﺎﺳــﺐ ﺳــﺘﺨﺪام اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺣﻴﺚ ﻳﺘﻢ ﻋﺎدة ﲣﺰﻳﻦ اﻷﻋﺪاد اﻟﺼــﺤﻴﺤﺔ اﳌﻮﺟﺒﺔ ﺑﺸــﻜﻞ ﺧﺎص ﺳــﺘﻌﻤﺎل‬
‫ﻫﺬا اﻟﻨﻈﺎم‪ .‬وﻫﺬا ﻳﻌﲏ أن اﻟﻨﻈﺎم اﻟﻌﺸـ ـ ـ ــﺮي ﻟﻠﻌﺪد اﻟﺼ ـ ـ ـ ـﺤﻴﺢ‪ ،‬اﻟﺬي ﻳﻈﻬﺮ ﰲ ﻣﻌﻄﻴﺎت ﺑﺮ ﻣﺞ ﻣﺎ‪ ،‬ﳚﺐ ﲢﻮﻳﻠﻪ إﱃ‬
‫ﻧﻈﺎم ﺛﻨﺎﺋﻲ‪ ،‬وﻋﺎدة ﻣﺎ ﻳﺘﻢ ذﻟﻚ ﺳـ ـ ـ ـ ـ ـ ــﺘﺨﺪام اﳌﻜﺪس‪ .‬ﻛﻤﺎ إن ﻣﻬﻤﺔ اﳌﱰﺟﻢ ﻫﻲ ﺗﻮﻟﻴﺪ ﺗﻌﻠﻴﻤﺎت ﻟﻐﺔ اﻵﻟﺔ اﳌﻄﻠﻮب‬
‫ﺗﻨﻔﻴﺬﻫﺎ ﻋﻮﺿـﺎً ﻋﻦ اﻟﱪ ﻣﺞ اﳌﺼــﺪر اﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺎت ﻋﺎﻟﻴﺔ اﳌﺴــﺘﻮى‪ .‬وأﺣﺪ أﺟﺰاء ﻫﺬﻩ اﳌﻬﻤﺔ ﻫﻮ إﳚﺎد ﺗﻌﻠﻴﻤﺎت ﻟﻐﺔ‬
‫اﻵﻟﺔ ﻣﻦ أﺟﻞ ﺗﻘﻴﻴﻢ اﻟﺘﻌﺎﺑﲑ اﳊﺴﺎﺑﻴﺔ ﺳﺘﺨﺪام ﺻﻴﻎ اﻟﺘﺪوﻳﻦ اﻟﻌﻜﺴﻲ ﺑﻮﺳﺎﻃﺔ اﳌﻜﺪس‪.‬‬
‫‪ -١-١‬ﺗﻌﺮﻳﻒ اﳌﻜﺪس‬
‫ﻳﻌﺮف اﳌﻜﺪس ﻋﻠﻰ أﻧﻪ ﳎﻤﻮﻋﺔ ﻣﺮﺗﺒﺔ ﻣﻦ اﻟﻌﻨﺎﺻــﺮ ﺣﺴــﺐ ﺗﺮﺗﻴﺐ إدﺧﺎﳍﺎ زﻣﻨﻴﺎً‪ ،‬ﺣﻴﺚ ﳝﻜﻦ إدﺧﺎل ﻋﻨﺎﺻــﺮ‬
‫ﺟﺪﻳﺪة ﻣﻦ ﻣﺪﺧﻞ واﺣﺪ وﺳﺤﺐ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﳌﻜﺪس ﻣﻦ ﻧﻔﺲ اﳌﺪﺧﻞ‪ ،‬ﻳﺪﻋﻰ ﻫﺬا اﳌﺪﺧﻞ ﺑﻘﻤﺔ اﳌﻜﺪس‪ .‬ﺗﺘﻤﻴﺰ‬
‫ﺑﻨﻴﺔ اﳌﻜﺪس ن اﻟﻌﻨﺼ ــﺮ اﳌﺪﺧﻞ أﺧﲑاً إﱃ اﳌﻜﺪس ﻫﻮ اﻟﻌﻨﺼ ــﺮ اﳌﺴ ــﺤﻮب أوﻻً ﻣﻦ‪ ،‬وﳍﺬا اﻟﺴ ــﺒﺐ ﻳﺪﻋﻰ اﳌﻜﺪس‬
‫أﺣﻴﺎ ً ﺑﻼﺋﺤﺔ ‪ .LIFO‬و ﻟﺘﺎﱄ ﻓﺈن اﳌﻜﺪس ﻳﻌﻄﻲ اﻟﻌﻨﺎﺻﺮ ﺑﻌﻜﺲ اﻟﱰﺗﻴﺐ اﻟﺬي ﺗﺪﺧﻞ ﻓﻴﻪ إﱃ اﳌﻜﺪس‪.‬‬
‫اﳌﻜﺪس إذاً ﻫﻮ ﳎﻤﻮﻋﺔ ﻣﺮﺗﺒﺔ ﻣﻦ اﻟﻌﻨﺎﺻـ ــﺮ ﺣﻴﺚ ﳝﻜﻦ ﺳـ ــﺤﺐ أو إدﺧﺎل ﻋﻨﺎﺻـ ــﺮ ﺟﺪﻳﺪة ﻣﻦ ﺎﻳﺔ واﺣﺪة‬
‫ﺗﺪﻋﻰ ﻗﻤﺔ اﳌﻜﺪس )‪ .(top of the stack‬ﻳﺒﲔ اﻟﺸ ـ ـ ــﻜﻞ ‪ ١–١‬ﻣﻜﺪس ﳛﺘﻮي ﻋﻠﻰ ﺛﻼﺛﺔ ﻋﻨﺎﺻ ـ ـ ــﺮ ﻫﻲ ‪ A‬و ‪ B‬و‬
‫‪ ،C‬وﻋﻨﺼـ ـ ـ ــﺮ ﻗﻤﺔ اﳌﻜﺪس ﻫﻮ ‪ C‬ﻳﺸـ ـ ـ ــﲑ إﻟﻴﻪ ‪ .top‬ﻣﻦ أﺟﻞ اﳊﺼـ ـ ـ ــﻮل ﻋﻠﻰ ﻓﻜﺮة ﺣﻘﻴﻘﻴﺔ ﻟﻌﻤﻞ اﳌﻜﺪس ﻻ ﺑﺪ ﻣﻦ‬
‫اﻻﻋﺘﻤﺎد ﻋﻠﻰ اﻟﺼﻮرة اﳌﺘﺤﺮﻛﺔ‪.‬‬

‫‪Top‬‬ ‫‪C‬‬
‫‪B‬‬
‫‪A‬‬
‫اﻟﺸﻜﻞ ‪١–١‬‬

‫ﻟﻨﻈﺮ إﱃ اﻟﺼــﻮرة اﳌﺘﺤﺮﻛﺔ ﻟﻠﻤﻜﺪس ﻧﺮى ﻛﻴﻔﻴﺔ ﺗﻮﺳــﻊ وﺗﻘﻠﺺ اﳌﻜﺪس ﻣﻊ ﻣﺮور اﻟﺰﻣﻦ‪ .‬ﻳﺒﲔ اﻟﺸــﻜﻞ ‪٢–١‬‬
‫ﺻﻮرة ﻣﺘﺤﺮﻛﺔ ﻟﻠﻤﻜﺪس اﳌﻌﻄﻰ ﰲ اﻟﺸﻜﻞ ‪.١–١‬‬

‫‪E‬‬
‫‪D‬‬ ‫‪D‬‬ ‫‪D‬‬
‫‪C‬‬ ‫‪C‬‬ ‫‪C‬‬ ‫‪C‬‬ ‫‪C‬‬
‫‪B‬‬ ‫‪B‬‬ ‫‪B‬‬ ‫‪B‬‬ ‫‪B‬‬ ‫‪B‬‬
‫‪A‬‬ ‫‪A‬‬ ‫‪A‬‬ ‫‪A‬‬ ‫‪A‬‬ ‫‪A‬‬
‫)‪a‬‬ ‫)‪b‬‬ ‫)‪c‬‬ ‫)‪d‬‬ ‫)‪e‬‬ ‫)‪f‬‬
‫اﻟﺸﻜﻞ ‪٢–١‬‬

‫‪١-١‬‬
‫ﰲ اﳊﺎﻟﺔ ‪ a‬ﻧﺮى اﳌﻜﺪس ﻛﻤﺎ ﻫﻮ ﻣﻮﺟﻮد ﻟﻠﺤﻈﺔ اﻟﱵ اﻟﺘﻘﻄﺖ ﻓﻴﻬﺎ ﺻـ ـ ـ ـ ـ ــﻮرة ﻟﻠﻤﻜﺪس اﳌﻌﻄﻰ ﺳـ ـ ـ ـ ـ ــﺎﺑﻘﺎً‪ .‬ﰲ‬
‫اﳊﺎﻟﺔ ‪ b‬ﲤﺖ إﺿﺎﻓﺔ اﻟﻌﻨﺼﺮ ‪ D‬إﱃ اﳌﻜﺪس ﺣﻴﺚ أﺻﺒﺢ ﻋﻨﺼﺮ اﻟﻘﻤﺔ ﰲ ﻫﺬﻩ اﳊﺎﻟﺔ ﻫﻮ اﻟﻌﻨﺼﺮ ‪ .D‬ﰲ اﳊﺎﻟﺔ ‪ c‬ﰎ‬
‫إﺿــﺎﻓﺔ ﻋﻨﺼــﺮ ﺟﺪﻳﺪ ﻫﻮ ‪ .E‬اﺑﺘﺪاءً ﻣﻦ اﳊﺎﻟﺔ ‪ d‬ﻳﺒﺪأ اﳌﻜﺪس ﻟﺘﻘﻠﺺ ﻧﺘﻴﺠﺔ ﺳــﺤﺐ اﻟﻌﻨﺎﺻــﺮ اﻟﺘﺎﻟﻴﺔ‪ E :‬و ‪ D‬و‬
‫‪ C‬ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪.‬‬
‫ﻋﻠﻰ ﺳـ ــﺒﻴﻞ اﳌﺜﺎل‪ ،‬اﻟﻌﻨﺼـ ــﺮ ‪ D‬ﻻ ﳝﻜﻦ ﺳـ ــﺤﺒﻪ ﻣﻦ اﳌﻜﺪس ﻣﺎ ﱂ ﻳﺘﻢ أوﻻً ﺳـ ــﺤﺐ اﻟﻌﻨﺼـ ــﺮ ‪ E‬ﻣﻦ اﳌﻜﺪس‪،‬‬
‫وﻫﺬا ﻳﺒﲔ اﳋﺎﺻ ـ ـ ــﻴﺔ اﳍﺎﻣﺔ ﻟﻠﻤﻜﺪس وﻫﻲ أن اﻟﻌﻨﺼ ـ ـ ــﺮ اﳌﺪﺧﻞ أﺧﲑاً إﱃ اﳌﻜﺪس ﻫﻮ اﻟﻌﻨﺼ ـ ـ ــﺮ اﳌﺴ ـ ـ ــﺤﻮب أوﻻً ﻣﻦ‬
‫اﳌﻜﺪس ﳍﺬا اﻟﺴﺒﺐ ﻳﺪﻋﻰ اﳌﻜﺪس أﺣﻴﺎ ً ﺑﻼﺋﺤﺔ ‪.LIFO‬‬
‫‪ -٢-١‬اﻟﻌﻤﻠﻴﺎت اﻷﺳﺎﺳﻴﺔ ﻋﻠﻰ اﳌﻜﺪس‬
‫ﺑﻔﺮض أﻧﻪ ﻟﺪﻳﻨﺎ اﳌﻜﺪس ‪ s‬واﻟﻌﻨﺼﺮ ‪ i‬ﻋﻨﺪﺋﺬ ﳝﻜﻦ ﺗﻨﻔﻴﺬ اﻟﻌﻤﻠﻴﺎت اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪-١‬ﻋﻤﻠﻴﺔ إﺿ ـ ــﺎﻓﺔ ﻋﻨﺼ ـ ــﺮ ‪ i‬إﱃ اﳌﻜﺪس ‪ ،s‬وﻟﻨﺴ ـ ــﻤﻲ ﻫﺬﻩ اﻟﻌﻤﻠﻴﺔ ‪ push‬وﻟﻨﻌﺮﻓﻬﺎ ﻋﻠﻰ ﺷ ـ ــﻜﻞ إﺟﺮاء ﺑﺮﳎﻲ‬
‫ﺑﻮﺳﻴﻄﲔ ‪ s‬و ‪ ،i‬وﻳﻌﻴﺪ ﻫﺬا اﻹﺟﺮاء ﺣﺎﻟﺔ اﳌﻜﺪس ﺑﻌﺪ إﺿﺎﻓﺔ اﻟﻌﻨﺼﺮ ﻟﺸﻜﻞ‪:‬‬
‫)‪push(s, i‬‬
‫ﻗﺒﻞ ﺗﻄﺒﻴﻖ ﻋﻤﻠﻴﺔ إﺿ ـ ــﺎﻓﺔ ﻋﻨﺼ ـ ــﺮ إﱃ اﳌﻜﺪس ﳚﺐ اﻟﺘﺄﻛﺪ ﻣﻦ ﻋﺪم ﻃﻔﺤﺎن اﳌﻜﺪس‪ ،‬وﺗﺘﺤﻘﻖ ﻫﺬﻩ اﻟﻌﻤﻠﻴﺔ‬
‫ﻋﻨﺪ ﺑﻠﻮغ ﻋﺪد ﻋﻨﺎﺻﺮ اﳌﻜﺪس اﻟﻌﺪد اﻷﻋﻈﻤﻲ ﻟﻌﻨﺎﺻﺮ اﳌﻜﺪس‪ .‬ﻟﺬﻟﻚ ﳚﺐ اﻟﺘﺄﻛﺪ ﻣﻦ ﻃﻔﺤﺎن اﳌﻜﺪس ﻟﻌﻤﻠﻴﺔ‬
‫‪ ،flow‬وﺳــﻨﻜﺘﺒﻬﺎ ﻋﻠﻰ ﺷــﻜﻞ إﺟﺮاء ﻟﺼــﻴﻐﺔ )‪ Flow(s‬اﻟﺬي ﺳــﻴﻌﺪ اﻟﻘﻴﻤﺔ ‪ true‬ﰲ ﺣﺎل اﻟﻄﻔﺤﺎن واﻟﻘﻴﻤﺔ ‪false‬‬
‫ﰲ ﻋﺪم اﻟﻄﻔﺤﺎن‪.‬‬
‫‪-٢‬ﻋﻤﻠﻴﺔ ﻗﺮاءة ﻋﻨﺼـ ـ ـ ــﺮ ‪ i‬ﻣﻦ ﻗﻤﺔ اﳌﻜﺪس وﻟﻨﺴـ ـ ـ ــﻤﻲ ﻫﺬﻩ اﻟﻌﻤﻠﻴﺔ ‪ pop‬وﻟﻨﻌﺮﻓﻬﺎ ﻋﻠﻰ ﺷـ ـ ـ ــﻜﻞ إﺟﺮاء ﺑﺮﳎﻲ‬
‫ﺑﻮﺳﻴﻂ وﺣﻴﺪ ﳝﺜﻞ اﳌﻜﺪس ‪ ،s‬وﻳﻌﻴﺪ ﻗﻴﻤﺔ ‪ i‬ﲤﺜﻞ اﻟﻌﻨﺼﺮ اﳌﻮﺟﻮد ﰲ ﻗﻤﺔ اﳌﻜﺪس ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ ﻟﺸﻜﻞ‪:‬‬
‫)‪i=pop(s‬‬
‫ﻻ ﳝﻜﻦ أن ﺗﻄﺒﻖ ﻋﻤﻠﻴﺔ اﻟﺴ ـ ـ ــﺤﺐ ‪ pop‬ﻋﻠﻰ اﳌﻜﺪس اﻟﻔﺎرغ اﻟﺬي ﻻ ﳛﺘﻮي ﻋﻠﻰ أﻳﺔ ﻋﻨﺎﺻ ـ ـ ــﺮ‪ ،‬ﻟﺬﻟﻚ ﻗﺒﻞ‬
‫ﺗﻄﺒﻴﻖ ﻋﻤﻠﻴﺔ ‪ pop‬ﳚﺐ أن ﻧﺘﺄﻛﺪ ﻣﻦ أن اﳌﻜﺪس ﻟﻴﺲ ﻓﺎرﻏﺎً ﺑﻮاﺳـ ـ ـ ـ ـ ــﻄﺔ اﻟﻌﻤﻠﻴﺔ ‪ .empty‬ﻟﻨﻌﺮف اﻟﻌﻤﻠﻴﺔ اﻟﱵ ﲢﺪد‬
‫ﻓﻴﻤﺎ إذا ﻛﺎن اﳌﻜﺪس ‪ s‬ﻓﺎرﻏﺎً أم ﻻ ﺟﺮاء ﺳ ـ ـ ــﻢ )‪ .Empty(s‬ﻳﻌﻴﺪ ﻫﺬا اﻻﺟﺮاء ﻗﻴﻤﺔ ‪ true‬إذا ﻛﺎن اﳌﻜﺪس ﻓﺎرﻏﺎً‬
‫وإﻻ ﻳﻌﻴﺪ اﻟﻘﻴﻤﺔ ‪.false‬‬
‫ﻹﺿﺎﻓﺔ إﱃ اﻟﻌﻤﻠﻴﺎت اﳌﺬﻛﻮرة آﻧﻔﺎً ﻻ ﺑﺪ ﻣﻦ ﺗﻌﺮﻳﻒ إﺟﺮاء ﻳﻨﺰع ﻗﻴﻤﺔ اﻟﻌﻨﺼﺮ اﳌﻮﺟﻮد ﰲ اﳌﻜﺪس‪ ،‬ﺳﻨﻌﺮف‬
‫ﻫﺬﻩ اﻟﻌﻤﻠﻴﺔ ﻋﻠﻰ ﺷﻜﻞ إﺟﺮاء ﺳﻢ ‪ .stacktop‬ﺳﻴﺄﺧﺬ ﻫﺬا اﻹﺟﺮاء وﺳﻴﻂ‪:‬‬
‫)‪stacktop(s‬‬
‫أﻳﻀ ـ ـﺎً اﻟﻌﻤﻠﻴﺔ ‪ stacktop‬ﻻ ﳝﻜﻦ ﺗﻄﺒﻴﻘﻬﺎ ﻋﻠﻰ اﳌﻜﺪس اﻟﻔﺎرغ‪ .‬إذاً اﻟﻌﻤﻠﻴﺘﲔ ‪ pop‬و ‪ stacktop‬ﻏﲑ ﻣﻌﺮﻓﺘﲔ ﻋﻠﻰ‬
‫اﳌﻜﺪس اﻟﻔﺎرغ‪ ،‬ﻓﺈذا ﺣﺎوﻟﻨﺎ ﺗﻄﺒﻴﻘﻬﻤﺎ ﻋﻠﻰ اﳌﻜﺪس اﻟﻔﺎرغ ﳓﺼــﻞ ﻋﻠﻰ ﻣﺎ ﻳﺴــﻤﻰ ﳉﻔﺎف ‪ . underflow‬ﻟﺘﻔﺎدي‬

‫‪٢-١‬‬
‫‪pop‬‬ ‫اﻟﺪﺧﻮل ﰲ ﺣﺎﻟﺔ اﳉﻔﺎف ﻟﻠﻤﻜﺪس ﳚﺐ أن ﻧﻀ ـ ــﻤﻦ ن ﻗﻴﻤﺔ )‪ empty(s‬ﺗﺴ ـ ــﺎوي ‪ false‬ﻗﺒﻞ ﺗﻄﺒﻴﻖ ﻋﻤﻠﻴﺔ‬
‫أو ‪.stacktop‬‬
‫‪ -٣-١‬ﲤﺜﻴﻞ اﳌﻜﺪس ﺑﻠﻐﺔ ‪Visual C++‬‬
‫ﻫﻨﺎك ﻋﺪة ﻃﺮق ﻟﺘﻤﺜﻴﻞ اﳌﻜﺪس ﺑﻠﻐﺔ ‪ ،Visual C++‬ﺣﺎﻟﻴﺎً ﺳﻨﺘﻌﺮف ﻋﻠﻰ أﺑﺴﻂ ﻫﺬﻩ اﻟﻄﺮق وﻫﻲ اﺳﺘﺨﺪام‬
‫اﳌﺼﻔﻮﻓﺎت‪ .‬ﺳﻮف ﻧﺼﺮح ﻋﻦ اﳌﻜﺪس ﻛﺴﺠﻞ ﺑﻠﻐﺔ ‪:Visual C++‬‬
‫‪struct stack‬‬
‫{‬
‫;]‪int item[101‬‬
‫;‪int maxstack‬‬
‫;‪int top‬‬
‫;‪} s‬‬
‫ﻧﻌﺮف ﺬا اﻟﺘﺼـﺮﻳﺢ ﻋﻦ ﺳـﺠﻞ ﻣﺼـﻔﻮﻓﺔ اﳌﻜﺪس ﻟﺘﺘﻀـﻤﻦ ‪ ،101‬ﺳـﻨﻌﺘﱪ اﳋﻠﻴﺔ رﻗﻢ ‪ 1‬ﺧﻠﻴﺔ ﺑﺪء ﻟﻠﻤﺼـﻔﻮﻓﺔ‪،‬‬
‫و ﻟﺘﺎﱄ ﳝﻜﻦ ﻟﻠﻤﻜﺪس أن ﻳﺘﻀﻤﻦ ﺣﱴ ‪ 100‬ﻋﻨﺼﺮ ‪ .item‬ﺳﻨﻌﺮف اﳌﻜﺪس ‪ s‬ﻛﻤﺘﻐﲑ ﻣﻦ ﳕﻂ ‪ ،stack‬وﻫﻮ ﻣﺘﻐﲑ‬
‫ﻋﺎم ﰲ اﻟﱪ ﻣﺞ‪ ،‬ﳍﺬا ﻟﻦ ﳓﺘﺎج إﱃ ﲤﺮﻳﺮ ﻫﺬا اﳌﺘﻐﲑ ﻛﻮﺳـ ـ ـ ـ ـ ــﻴﻂ إدﺧﺎل ﰲ إﺟﺮاءات اﻟﱪ ﻣﺞ‪ .‬وﻓﻖ ﻃﺮﻳﻘﺔ اﻟﺘﺼ ـ ـ ـ ـ ـ ـﺮﻳﺢ‬
‫اﳌﻌﺮﻓﺔ ﺬا اﻟﺸ ـ ــﻜﻞ‪ ،‬وﺑﻐﻴﺔ ﺗﺒﺴ ـ ــﻴﻂ اﳌﻮﺿ ـ ــﻮع ﺳ ـ ــﻨﻔﱰض أن ﻋﻨﺎﺻ ـ ــﺮ اﳌﺼ ـ ــﻔﻮﻓﺔ ‪ s.item‬ﻫﻲ أﻋﺪاد ﺻ ـ ــﺤﻴﺤﺔ‪ ،‬وأن‬
‫اﳌﻜﺪس ﻟﻦ ﳛﺘﻮي ﻋﻠﻰ أﻛﺜﺮ ﻣﻦ ‪ s.maxstack‬ﻋﻨﺼ ـ ـ ـ ــﺮ‪ ،‬ﻣﻊ اﻟﺘﻨﻮﻳﻪ إﱃ أﻧﻪ ﳝﻜﻨﻨﺎ ﺗﻐﻴﲑ ﳕﻂ اﻟﻌﻨﺎﺻ ـ ـ ـ ــﺮ اﻟﱵ ﺳ ـ ـ ـ ــﻴﺘﻢ‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ﰲ اﳌﻜﺪس ﺑﺘﻐﻴﲑ ﳕﻂ ﺑﻴﺎ ت اﳌﺼﻔﻮﻓﺔ ‪.s.item‬‬
‫ﻧﻌﱪ ﻋﻦ ﻋﺪد اﻟﻌﻨﺎﺻﺮ اﻟﱵ ﳝﻜﻦ أن ﳛﺘﻮﻳﻬﺎ اﳌﻜﺪس ﺑﻘﻴﻤﺔ ‪ ،s.maxstack‬ﻧﻌﱪ ﻋﻦ اﳌﻜﺪس اﻟﻔﺎرغ اﻟﺬي ﻻ‬
‫ﳛﺘﻮي ﻋﻠﻰ أﻳــﺔ ﻋﻨــﺎﺻـ ـ ـ ـ ـ ـ ــﺮ ﻟﻘﻴﻤــﺔ ‪ s.top‬اﳌﺴ ـ ـ ـ ـ ـ ـ ــﺎوﻳــﺔ ﻟﻠﺼـ ـ ـ ـ ـ ـ ــﻔﺮ‪ ،‬ﻟــﺬﻟــﻚ ﻟﺒــﺪء اﳌﻜــﺪس ‪ s‬ﰲ ﺣــﺎﻟــﺔ ﻓــﺎرﻏــﺔ ﳚــﺐ أن‬
‫ﻧﻜﺘﺐ‪ s.top=0 :‬وﻟﻨﻔﱰض أن اﻟﻌﺪد اﻷﻋﻈﻤﻲ ﻟﻘﻴﻢ اﳌﺪس ‪ 100‬ﻟﺬا ﺳﻨﻜﺘﺐ ‪.maxstack=100‬‬
‫ﲟﺎ أن ‪ top‬ﻫﻮ ﺣﻘﻞ ﰲ اﻟﺴﺠﻞ ‪ stack‬ﻓﺈن ﻗﻴﻤﺔ اﳌﺆﺷﺮ اﻟﺬي ﻳﺪل ﻋﻠﻰ ﻋﻨﺼﺮ اﻟﻘﻤﺔ ﻫﻮ ‪ .s.top‬إذا ﻛﺎﻧﺖ‬
‫ﻗﻴﻤﺔ ‪ s.top=3‬ﻓﻬﺬا ﻳﺪل ﻋﻠﻰ أن اﳌﻜﺪس ﳛﺘﻮي ﻋﻠﻰ ﺛﻼﺛﺔ ﻋﻨﺎﺻ ـ ـ ـ ـ ـ ــﺮ ﻫﻲ‪.s.item[3], s.item[2], s.item[1] :‬‬
‫وإذا ﻃﺒﻘﻨﺎ ﻋﻤﻠﻴﺔ ‪ pop‬ﻟﺴـ ــﺤﺐ ﻋﻨﺼـ ــﺮ ﻣﻦ اﳌﻜﺪس ﻓﺈن ﻗﻴﻤﺔ ‪ s.top‬ﳚﺐ أن ﺗﻌﺪل ﻟﺘﺼـ ــﺒﺢ ﻣﺴـ ــﺎوﻳﺔ ‪ ،2‬وﻳﺼـ ــﺒﺢ‬
‫ﻋﻨﺼ ــﺮ اﻟﻘﻤﺔ ﻫﻮ ]‪ ،s.item[2‬ﺑﻴﻨﻤﺎ إذا ﻃﺒﻘﻨﺎ ﻋﻤﻠﻴﺔ ‪ push‬ﻹﺿ ــﺎﻓﺔ ﻋﻨﺼ ــﺮ ﻋﻠﻰ اﳌﻜﺪس ﻓﺈن ﻗﻴﻤﺔ ‪ s.top‬ﳚﺐ أن‬
‫ﺗﻌﺪل ﻟﺘﺼﺒﺢ ﻣﺴﺎوﻳﺔ ‪ 4‬وﻳﺼﺒﺢ ﻋﻨﺼﺮ اﻟﻘﻤﺔ ﻫﻮ ]‪.s.item[4‬‬
‫أ‪-‬إﺟﺮاء ﲢﺪﻳﺪ ﺣﺎﻟﺔ ﺟﻔﺎف اﳌﻜﺪس‬
‫ﻳﻜﻮن اﳌﻜﺪس ﻓﺎرﻏﺎً إذا ﻛﺎﻧﺖ ﻗﻴﻤﺔ ‪ ،s.top=0‬وﳍﺬا ﻓﺈن اﺧﺘﺒﺎر ﺟﻔﺎف اﳌﻜﺪس ﻫﻮ اﺧﺘﺒﺎر ﻟﻘﻴﻤﺔ ‪،top‬‬
‫ﻧﺘﻴﺠﺔ ﻫﺬا اﻻﺧﺘﺒﺎر ﻫﻲ ﻗﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ‪ ،‬ﻟﺬا ﻓﻬﻲ اﻟﻘﻴﻤﺔ اﻟﱵ ﺳ ـ ـ ــﻴﻌﻴﺪﻫﺎ اﻹﺟﺮاء اﳋﺎص ﺬا اﻻﺧﺘﺒﺎر‪ .‬وﳝﻜﻦ ﺗﻌﺮﻳﻒ‬
‫ﻫﺬا اﻹﺟﺮاء ﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫)(‪bool empty‬‬

‫‪٣-١‬‬
‫{‬
‫)‪if (s.top==0‬‬
‫{‬
‫;" ‪cout<<endl<<"underflow,‬‬
‫;‪return true‬‬
‫}‬
‫;‪else return false‬‬
‫;}‬
‫وﻋﻨﺪ اﺳﺘﺪﻋﺎء ﻫﺬا اﻟﺘﺎﺑﻊ ﺑﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ اﻟﻨﺤﻮ اﻟﺘﺎﱄ‪:‬‬
‫;"‪if empty() cout<<"Stack is empty‬‬
‫;"‪else cout<<"Stack is not empty‬‬
‫ﺳ ــﺘﺆدي ﻫﺬﻩ اﻟﺘﻌﻠﻴﻤﺔ إﱃ إﺧﺮاج اﻟﻌﺒﺎرة‪ underflow, stack is empty :‬اﻵﺗﻴﺔ ﻋﻨﺪﻣﺎ ﻳﻜﻮن اﳌﻜﺪس ﻓﺎرغ‪،‬‬
‫أو اﻟﻌﺒﺎرة ‪ Stack is not empty‬ﻋﻨﺪﻣﺎ ﻳﻜﻮن اﳌﻜﺪس ﻏﲑ ﻓﺎرغ‪.‬‬
‫ب‪-‬إﺟﺮاء ﲢﺪﻳﺪ ﺣﺎﻟﺔ ﻃﻔﺤﺎن اﳌﻜﺪس‬
‫وﻛﺬﻟﻚ ﻟﺘﺤﺪﻳﺪ ﻓﻴﻤﺎ إذا ﻛﺎن اﳌﻜﺪس ﳑﺘﻠﺌﺎً أم ﻻ‪ ،‬ﺳــﺘﻜﻮن اﻟﻨﺘﻴﺠﺔ ﻗﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ‪ .‬ﻓﺈذا ﻛﺎﻧﺖ ‪ s.top‬ﻣﺴــﺎوﻳﺔ‬
‫‪ s.maxstack‬ﺳــﻴﻜﻮن اﳌﻜﺪس ﳑﺘﻠﺊ‪ ،‬واﻟﻨﺘﻴﺠﺔ ﺳ ـﺘﻜﻮن ‪ true‬وإﻻ ﺳــﺘﻜﻮن اﻟﻨﺘﻴﺠﺔ ‪ ،false‬ﻟﺬا ﳝﻜﻨﻨﺎ ﺗﻌﺮﻳﻒ إﺟﺮاء‬
‫اﻻﺧﺘﺒﺎر ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫)(‪bool flow‬‬
‫{‬
‫)‪if (s.top==s.maxstack‬‬
‫{‬
‫;" ‪cout<<endl<<"overflow,‬‬
‫;‪return true‬‬
‫}‬
‫;‪else return false‬‬
‫;}‬
‫وﻋﻨﺪ اﺳﺘﺪﻋﺎء ﻫﺬا اﻟﺘﺎﺑﻊ ﺑﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ اﻟﻨﺤﻮ اﻟﺘﺎﱄ‪:‬‬
‫)(‪if flow‬‬
‫;"‪cout<<"Stack is flow‬‬
‫;"‪else cout<<"Stack is not flow‬‬
‫ﺳﺘﺆدي ﻫﺬﻩ اﻟﺘﻌﻠﻴﻤﺔ إﱃ إﺧﺮاج اﻟﻌﺒﺎرة‪ overflow, stack is flow :‬ﻋﻨﺪﻣﺎ ﻳﻜﻮن اﳌﻜﺪس ﳑﺘﻠﺊ‪ :‬أو اﻟﻌﺒﺎرة‬
‫‪ Stack is not flow‬ﻋﻨﺪﻣﺎ ﻳﻜﻮن اﳌﻜﺪس ﻏﲑ ﳑﺘﻠﺊ‪.‬‬
‫ت‪-‬ﺳﺤﺐ ﻋﻨﺼﺮ ﻣﻦ اﳌﻜﺪس‬
‫ﻟﻘﺮاءة ﻋﻨﺼـ ـ ــﺮ ﻣﻦ اﳌﻜﺪس ﻫﻮ ﻗﺮاءة ﻋﻨﺼـ ـ ــﺮ ﻗﻤﺔ اﳌﻜﺪس‪ ،‬وﳝﻜﻦ ﺗﻨﻔﻴﺬ اﻟﻌﻤﻠﻴﺔ ﺟﺮاء )(‪ pop‬ﻳﻌﻴﺪ ﻋﻨﺼـ ـ ــﺮ‬
‫اﻟﻘﻤﺔ ﻣﻦ اﳌﻜﺪس‪ .‬وﳝﻜﻦ ﻛﺘﺎﺑﺔ ﻫﺬا اﻟﺘﺎﺑﻊ ﺑﻠﻐﺔ ‪ C++‬ﻛﻤﺎ ﻳﻠﻲ‪:‬‬

‫‪٤-١‬‬
‫)(‪int pop‬‬
‫{‬
‫;]‪return s.item[s.top‬‬
‫}‬
‫ﻻﺳﺘﺪﻋﺎء اﻹﺟﺮاء ‪ pop‬ﻧﻜﺘﺐ )(‪ x=pop‬ﻣﻦ أﺟﻞ ‪ x‬ﻣﺘﻐﲑ ﻣﻦ ﳕﻂ ﺑﻴﺎ ت اﳌﻜﺪس‪ ،‬و ﻟﺘﺎﱄ ﻓﺈن ‪ x‬ﺧﺬ‬
‫ﻗﻴﻤﺔ ﻋﻨﺼﺮ ﻗﻤﺔ اﳌﻜﺪس‪ .‬ﻹﺑﻌﺎد ﺣﺎﻟﺔ اﻟﺸﻚ ن اﳌﻜﺪس ﻟﻴﺲ ﻓﺎرﻏﺎً ﻗﺒﻞ ﺗﻄﺒﻴﻖ ﻋﻤﻠﻴﺔ ‪ pop‬ﻋﻠﻰ اﳌﻜﺪس ﻧﻜﺘﺐ‬
‫اﻟﻌﺒﺎرات اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫)(‪if (!empty()) x= pop‬‬
‫ﳊﺬف ﻋﻨﺼﺮ اﻟﻘﻤﺔ ﺑﻌﺪ ﻗﺮاءﺗﻪ ﺳﻨﻜﺘﺐ اﻻﺟﺮاء ‪ stacktop‬ﻟﺼﻴﻐﺔ اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫)(‪void stacktop‬‬
‫{‬
‫;‪s.top= s.top-1‬‬
‫;}‬
‫ﻳﻌﺒﺪ ﻫﺬا اﻹﺟﺮاء أﻳﻀـ ـﺎً ﺣﺎﻟﺔ اﳌﻜﺪس ﺑﻌﺪ ﺳ ــﺤﺐ اﻟﻌﻨﺼـ ـﺮ‪ ،‬وﻻ ﳝﻜﻦ ﺗﻨﻔﻴﺬﻩ إﻻ ﻋﻠﻰ اﳌﻜﺪس ﻋﲑ اﳉﺎف‪،‬‬
‫ﻟﺬا ﳝﻜﻦ اﺳﺘﺪﻋﺎﺋﻪ ﰲ ﺣﺎﻟﺔ ﻋﺪم اﳉﻔﺎف ﻟﺘﻌﻠﻴﻤﺔ اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫;)(‪if (!empty()) stacktop‬‬
‫ﻟﻘﺮاءة ﻋﻨﺼﺮ ﻗﻤﺔ اﳌﻜﺪس وﺳﺤﺒﻪ ﳝﻜﻦ ﻛﺘﺎﺑﺔ اﻟﺘﻌﻠﻴﻤﺎت اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫))(‪if (!empty‬‬
‫{‬
‫;)(‪x=pop‬‬
‫;)(‪stacktop‬‬
‫}‬
‫ﻗﺪ ﻻ ﻳﻜﻮن ﻣﻦ اﻟﻀﺮوري إﻳﻘﺎف اﻟﱪ ﻣﺞ ﻋﻨﺪ ﺳﺤﺐ ﻋﻨﺼﺮ ﻣﻦ ﻣﻜﺪس ﺟﺎف‪ ،‬ﺑﻞ ﻳﻜﻔﻲ اﻹﺷﺎرة إﱃ أن‬
‫ﺣﺎﻟﺔ اﳉﻔﺎف ﻗﺪ ﺣﺼﻠﺖ وﻧﱰك اﻟﺘﺼﺮف ﻷﻣﺮ ﻟﻠﱪ ﻣﺞ اﻟﺮﺋﻴﺴﻲ‪.‬‬
‫‪ -١-٣-١‬إﺿﺎﻓﺔ ﻋﻨﺼﺮ إﱃ اﳌﻜﺪس‬
‫‪s.item‬‬ ‫ﻳﺘﻢ إدﺧﺎل ﻋﻨﺼ ـ ـ ـ ـ ـ ــﺮ إﱃ اﳌﻜﺪس ﻋﻦ ﻃﺮﻳﻖ ز دة ‪ s.top‬ﲟﻘﺪار ‪ 1‬وﻣﻦ ﰒ إدﺧﺎل ‪ x‬إﱃ اﳌﺼ ـ ـ ـ ـ ـ ــﻔﻮﻓﺔ‬
‫وﳝﻜﻦ أن ﻳﻜﺘﺐ اﻹﺟﺮاء اﻟﺬي ﻳﻘﻮم ﺑﺬﻟﻚ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫)‪void push(int x‬‬
‫{‬
‫;‪s.top= s.top+1‬‬
‫;‪s.item[s.top] = x‬‬
‫;}‬
‫ﻟﻨﻔﺮض أن اﳌﺼــﻔﻮﻓﺔ ‪ s.item‬ﳑﺘﻠﺌﺔ وأﻧﻪ ﰎ اﺳــﺘﺪﻋﺎء اﻹﺟﺮاء اﻟﺴــﺎﺑﻖ ﻹدﺧﺎل ﻋﻨﺼــﺮ إﱃ اﳌﻜﺪس‪ .‬ﻳﺸــﺎر إﱃ‬
‫اﳌﺼﻔﻮﻓﺔ اﳌﻤﺘﻠﺌﺔ ﺑﻮاﺳﻄﺔ اﻟﻘﻴﻤﺔ ‪ s.top=100‬ﺣﺴﺐ اﻟﺘﺼﺮﳛﺎت اﳌﻌﻄﺎة ﺳﺎﺑﻘﺎً‪ ،‬وﻫﻜﺬا ﻓﺈن ﻋﻨﺼﺮ اﻟﻘﻤﺔ ﻟﻠﻤﻜﺪس‬

‫‪٥-١‬‬
‫‪1‬‬ ‫ﻫﻮ اﻟﻌﻨﺼـ ـ ــﺮ اﻷﺧﲑ ذو اﻟﺪﻟﻴﻞ ‪ .100‬ﻟﺬﻟﻚ ﻓﺈن ﳏﺎوﻟﺔ اﺳـ ـ ــﺘﺪﻋﺎء اﻹﺟﺮاء اﻟﺴـ ـ ــﺎﺑﻖ ﺗﺆدي إﱃ ز دة ‪ s.top‬ﲟﻘﺪار‬
‫ﻟﺘﺼـ ــﺒﺢ ﻣﺴـ ــﺎوﻳﺔ ‪ .101‬ﲟﺎ أن ﻫﺬﻩ اﻟﻘﻴﻤﺔ ﻫﻲ ﺧﺎرج اﺠﻤﻟﺎل ‪ 1..maxstack‬ﻓﺎن اﶈﺎوﻟﺔ اﳌﺬﻛﻮرة ﺳـ ــﺘﻨﺘﺞ ﺧﻄﺄ ﻳﻌﺮف‬
‫ﻟﻄﻔﺤﺎن ‪ ،overflow‬ﻟﺬا ﻓﺈن اﺳـ ـ ـ ـ ـ ـ ــﺘﺪﻋﺎء ﻫﺬا اﻹﺟﺮاء ﺳـ ـ ـ ـ ـ ـ ــﻴﺘﻢ ﺑﻌﺪ اﻟﺘﺤﻘﻖ ﻣﻦ ﻋﺪم ﻃﻔﺤﺎن اﳌﻜﺪس ﻟﺘﻌﻠﻴﻤﺔ‬
‫اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫;)‪if (!flow()) push(x‬‬
‫ﻧﻼﺣﻆ أن ﻫﺬا اﻹﺟﺮاء ﳜﺘﱪ ﺷـ ــﺮط اﻟﻄﻔﺤﺎن وﻳﺴـ ــﺘﺪﻋﻲ اﻹﺟﺮاء ‪ error‬ﻟﻄﺒﺎﻋﺔ رﺳـ ــﺎﻟﺔ ﺗﺪل ﻋﻠﻰ اﻟﻄﻔﺤﺎن‬
‫وإﻳﻘﺎف اﻟﺘﻨﻔﻴﺬ‪.‬‬
‫ﻣﺜﺎل ‪١–١‬‬
‫اﻛﺘﺐ ﺑﺮ ﻣﺞ ﻟﺘﺤﻮﻳﻞ ﻋﺪد ﻋﺸﺮي إﱃ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺳﺘﺨﺪام اﻟﻌﻤﻠﻴﺎت اﻷﺳﺎﺳﻴﺔ ﻋﻠﻰ اﳌﻜﺪس‪ .‬ﺧﻮارزﻣﻴﺔ‬
‫اﳊﻞ ﻫﻲ‪:‬‬
‫‪ -١‬ﻧﻘﻮم ﺑﺪﻓﻊ ﻗﻲ ﻗﺴﻤﺔ اﻟﻌﺪد اﻟﻌﺸﺮي ‪ number‬ﻋﻠﻰ ‪ (number%2) 2‬إﱃ اﳌﻜﺪس ‪ s‬ﺑﻮﺳﺎﻃﺔ اﻹﺟﺮاء‬
‫)(‪.push‬‬
‫‪ -٢‬ﻧﻘﻮم ﺑﺘﻘﺴﻴﻢ اﻟﻌﺪد اﻟﺼﺤﻴﺢ ‪ number‬ﻋﻠﻰ ‪ 2‬ﻗﺴﻤﺔ ﺻﺤﻴﺤﺔ وﻧﻀﻊ اﻟﻨﺎﺗﺞ ﰲ ‪:number‬‬
‫‪number=number/2‬‬
‫‪ -٣‬ﻧﻜﺮر اﳋﻄﻮﺗﲔ اﻟﺴﺎﺑﻘﺘﲔ إﱃ أن ﻳﺼﺒﺢ ‪.number=0‬‬
‫‪ -٤‬ﻧﻘﻮم ﺑﻌﻤﻠﻴﺔ ﺳﺤﺐ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﳌﻜﺪس ﺑﻮﺳﺎﻃﺔ اﻟﺘﺎﺑﻊ )(‪ pop‬إﱃ أن ﻳﺼﺒﺢ اﳌﻜﺪس ﻓﺎرﻏﺎً‪.‬‬
‫ﻳﺒﲔ اﳉﺪول اﻟﺘﺎﱄ ﲢﻮﻳﻞ اﻟﻌﺪد اﻟﻌﺸﺮي ‪ 20‬إﱃ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ووﺿﻊ اﳌﻜﺪس‪:‬‬
‫‪number‬‬ ‫‪S‬‬
‫‪20‬‬ ‫‪0‬‬
‫‪10‬‬ ‫‪0‬‬
‫‪5‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪0‬‬
‫‪1‬‬ ‫‪1‬‬
‫‪0‬‬
‫اﻟﱪ ﻣﺞ ﻟﻜﺎﻣﻞ ﻳﻜﻮن ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫>‪#include <iostream‬‬
‫;‪using namespace std‬‬
‫‪struct stack‬‬
‫{‬
‫;]‪int item[101‬‬
‫;‪int maxstack‬‬
‫;‪int top‬‬

‫‪٦-١‬‬
} s;

bool empty()
{
if (s.top==0)
{
cout<<endl<<"underflow, ";
return true;
}
else return false;
};

bool flow()
{
if (s.top==s.maxstack)
{
cout<<endl<<"overflow, ";
return true;
}
else return false;
};

void push(int x)
{
s.top= s.top+1;
s.item[s.top] = x;
};

int pop()
{
int x;
x=s.item[s.top];
s.top= s.top-1;
return x;
}

void main()
{
int number=20;
s.maxstack=100;
s.top=0;

٧-١
‫)))(‪while ((number>0)&&(!flow‬‬
‫{‬
‫;)‪push(number%2‬‬
‫;‪number/=2‬‬
‫}‬
‫;)(‪while (!empty()) cout<<pop‬‬
‫}‬
‫‪ -٢-٣-١‬ﲤﺜﻴﻞ أﻛﺜﺮ ﻣﻦ ﻣﻜﺪس‬
‫ﻟﻘﺪ ﺻ ــﻤﻤﻨﺎ اﻟﱪ ﻣﺞ اﻟﺴ ــﺎﺑﻖ ﻹدارة ﻣﻜﺪس واﺣﺪ ﻓﻘﻂ‪ ،‬وﻫﻨﺎك ﺑﻌﺾ اﳌﺴ ــﺎﺋﻞ اﻟﱵ ﺗﺘﻄﻠﺐ ﻣﻨﺎ ﺗﻌﺮﻳﻒ أﻛﺜﺮ‬
‫ﻣﻦ ﻣﻜﺪس‪ ،‬وﳍﺬا ﺳـﻨﻘﻮم ﺑﺘﻌﻤﻴﻢ اﻟﱪ ﻣﺞ ﲝﻴﺚ ﳝﻜﻨﻪ إدارة ﻣﻜﺪس أو أﻛﺜﺮ‪ .‬وﳍﺬا ﺳـﻨﻘﻮم ﻋﺎدة ﺗﻌﺮﻳﻒ إﺟﺮاءات‬
‫اﻟﱪ ﻣﺞ اﻟﺴـ ـ ـ ـ ـ ــﺎﺑﻖ ﲝﻴﺚ ﳓﺪد اﳌﻜﺪس اﻟﺬي ﺳـ ـ ـ ـ ـ ــﻴﺘﻢ ﺗﻨﻔﻴﺬ اﻟﻌﻤﻠﻴﺔ ﻋﻠﻴﻪ‪ ،‬و ﳌﻘﺎﺑﻞ ﻓﺈن ﺗﺞ اﺳـ ـ ـ ـ ـ ــﺘﺪﻋﺎء أي إﺟﺮاء‬
‫ﺳــﻴﻜﻮن ﺣﺎﻟﺔ ﺟﺪﻳﺪة ﻟﻠﻤﻜﺪس‪ .‬وإذا أﺧﺬ ﺑﻌﲔ اﻻﻋﺘﺒﺎر ن اﻹﺟﺮاء ﺑﻠﻐﺔ ‪ Visual C++‬ﻻ ﻳﻌﻴﺪ إﻻ ﻗﻴﻤﺔ واﺣﺪة‬
‫ﻧﺪرك ﺿـ ــﺮورة اﻟﺘﺼ ـ ـﺮﻳﺢ ﻋﻦ اﳌﻜﺪﺳـ ــﺎت ﻛﻤﺆﺷ ـ ـﺮات ﻣﻦ ﳕﻂ ‪ ،stack‬وﺑﺘﻌﺮﻳﻒ اﳌﺆﺷـ ــﺮ ﻛﻌﻨﻮان ﳌﻮﻗﻊ اﻟﺒﻴﺎ ت ُﳝﻜﻨﻨﺎ‬
‫ﺗﻌﺪﻳﻞ ﻫﺬﻩ اﻟﺒﻴﺎ ت ﺳﺘﺨﺪام أي إﺟﺮاء ﻣﻦ إﺟﺮاءات اﻟﱪ ﻣﺞ ﻋﻠﻰ ﻫﺬا اﻟﻌﻨﻮان‪.‬‬
‫إن ﻋﻤﻠﻴﺔ ﺳ ـ ــﺤﺐ ﻋﻨﺼ ـ ــﺮ ﻣﻦ اﳌﻜﺪس ﻋﻠﻰ ﺳ ـ ــﺒﻴﻞ اﳌﺜﺎل‪ ،‬ﺗﻄﻠﺒﺖ ﻣﻨﺎ ﺗﻌﺮﻳﻒ إﺟﺮاءﻳﻦ‪ :‬اﻷول ‪ pop‬ﻹﺧﺮاج‬
‫ﻋﻨﺼـ ــﺮ ﻣﻦ ﻣﻘﺪﻣﺔ اﳌﻜﺪس واﻟﺜﺎﱐ ﻫﻮ ‪ stacktop‬ﻹﻟﻐﺎء اﻟﻌﻨﺼـ ــﺮ ﻣﻦ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪ .‬واﻟﺴـ ــﺒﺐ ﰲ ذﻟﻚ ﻫﻮ أن ﻃﺒﻴﻌﺔ‬
‫اﻹﺟﺮاءات ﺑﻠﻐﺔ ‪ C++‬ﺗﻌﻴﺪ ﻧﺘﻴﺠﺔ واﺣﺪة ﻓﻘﻂ‪.‬‬
‫ﻗﺪ ﻳﻜﻮن ﻣﻦ اﻷﺳــﻬﻞ ﻋﻠﻰ اﳌﱪﻣﺞ‪ ،‬واﻷﺳــﺮع ﰲ ﺗﻨﻔﻴﺬ اﻟﱪ ﻣﺞ‪ ،‬ﲣﺼــﻴﺺ ذاﻛﺮة ﺧﺎﺻــﺔ ﺑﺘﺨﺰﻳﻦ اﳌﻜﺪس ﰲ‬
‫ﻣﻮﻗﻊ ﻣﺎ ﻣﻦ اﻟﺬاﻛﺮة‪ ،‬وﻣﻦ ﰒ إﻋﺎدة ﺗﻌﺮﻳﻒ اﻹﺟﺮاءات ﲝﻴﺚ ﺗﻌﻤﻞ ﻋﻠﻰ ﻧﺴـ ـ ـ ـ ـ ـ ــﺨﺔ اﳌﻜﺪس اﳌﺨﺰﻧﺔ ﰲ ﻫﺬا اﳌﻮﻗﻊ‪.‬‬
‫وﻫﻨﺎ ﳝﻜﻦ اﺳﺘﺨﺪام ﻓﻜﺮة اﳌﺆﺷﺮات ﻹﻋﺎدة ﺗﻌﺮﻳﻒ اﻟﱪ ﻣﺞ ﻛﻤﺎ ﰲ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫‪ -‬ﺳﻴﺼﺒﺢ ﺗﻌﺮﻳﻒ إﺟﺮاءي اﺧﺘﺒﺎر اﳉﻔﺎف ‪ empty‬واﻟﻄﻔﺤﺎن ‪ flow‬ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫)‪bool empty(stack *s‬‬
‫{‬
‫)‪if (s->top==0‬‬
‫{‬
‫;" ‪cout<<endl<<"underflow,‬‬
‫;‪return true‬‬
‫}‬
‫‪else‬‬
‫;‪return false‬‬
‫;}‬

‫)‪bool flow(stack *s‬‬


‫{‬
‫)‪if (s->top==s->maxstack‬‬

‫‪٨-١‬‬
{
cout<<endl<<"overflow, ";
return true;
}
else
return false;
};
:push ‫ ﺳﻴﺼﺒﺢ ﺗﻌﺮﻳﻒ إﺟﺮاء إﺿﺎﻓﺔ ﻋﻨﺼﺮ إﱃ اﳌﻜﺪس‬-
void push(int x, stack *s,)
{
s->top= s->top+1;
s->item[s->top] = x;
};
:pop ‫ ﺳﻴﺼﺒﺢ ﺗﻌﺮﻳﻒ إﺟﺮاء ﺳﺤﺐ ﻋﻨﺼﺮ ﻣﻦ اﳌﻜﺪس‬-
int pop(stack *s)
{
int x;
x=s->item[s->top];
s->top= s->top-1;
return x;
}
:‫وﻓﻴﻤﺎ ﻳﻠﻲ ﻧﺴﺨﺔ ﺟﺪﻳﺪة ﻣﻦ اﻟﱪ ﻣﺞ اﻟﺴﺎﺑﻖ‬
#include <iostream>
using namespace std;
struct stack
{
int item[101];
int maxstack;
int top;
} *MyStack;

bool empty(stack *s)


{
if (s->top==0)
{
cout<<endl<<"underflow, ";
return true;
}
else return false;
};

٩-١
bool flow(stack *s)
{
if (s->top==s->maxstack)\
{
cout<<endl<<"overflow, ";
return true;
}
else return false;
};

void push(int x, stack *s)


{
s->top= s->top+1;
s->item[s->top] = x;
};

int pop(stack *s)


{
int x;
x=s->item[s->top];
s->top= s->top-1;
return x;
}

void main()
{
int number=20;
MyStack=new stack;
MyStack->maxstack=100;
MyStack->top=0;
while ((number>0)&&(!flow(MyStack)))
{
push(number%2,MyStack);
number/=2;
}
while (!empty(MyStack)) cout<<pop(MyStack);
}
٢–١ ‫ﻣﺜﺎل‬
‫ ﳝﻜﻨﻨﺎ ﺑﻨﺎء‬100 ‫ ﲝﻴﺚ ﻳﻜﻮن اﻟﻌﺪد اﻷﻋﻈﻤﻲ ﻟﻌﻨﺎﺻـ ــﺮ ﻛﻞ ﻣﻨﻬﺎ‬S3 ‫ و‬S2 ‫ و‬S1 ‫ﻟﺘﻜﻮﻳﻦ ﺛﻼث ﻣﻜﺪﺳـ ــﺎت‬

١٠-١
‫ﻋﻠﻰ اﻟﺘﻤﺜﻴﻞ اﻟﺴﺎﺑﻖ ﺗﻌﺮﻳﻔﻬﺎ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫ﺳﻨﻜﺘﺐ ﰲ ﻣﻨﻄﻘﺔ اﻟﺘﺼﺮﻳﺢ ﻋﻦ اﻹﺟﺮاءات اﻟﺘﻌﻠﻴﻤﺔ‪:‬‬
‫;‪stack *S1, *S2, *S3‬‬
‫وﰲ داﺧﻞ اﻹﺟﺮاء ‪ main‬ﺳﻨﻜﺘﺐ اﻟﺘﻌﻠﻴﻤﺎت اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫;‪S1=new Stack‬‬
‫;‪S1->maxstack=100‬‬
‫;‪S1->top=0‬‬

‫;‪S2=new Stack‬‬
‫;‪S2->maxstack=100‬‬
‫;‪S2->top=0‬‬

‫;‪S3=new Stack‬‬
‫;‪S3->maxstack=100‬‬
‫;‪S3->top=0‬‬
‫وﻟﻨﻌﺮف إﺟﺮاء ﻳﻨﻘﻞ ﻋﻨﺼ ــﺮ اﳌﻘﺪﻣﺔ ﻣﻦ ‪ S1‬إﱃ ‪ ،S2‬أو ﺑﺼ ــﻔﺔ ﻋﺎﻣﺔ ﻧﻘﻞ ﻋﻨﺼ ــﺮ اﳌﻘﺪﻣﺔ ﻣﻦ اﳌﻜﺪس ‪ A‬إﱃ‬
‫اﳌﻜﺪس ‪ .B‬ﳝﻜﻨﻨﺎ ﺗﻀﻤﲔ ﻫﺬا اﻹﺟﺮاء ﺗﻌﻠﻴﻤﺔ واﺣﺪة ﻓﻘﻂ ﲝﻴﺚ ﺧﺬ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫)‪void move(stack *A, stack *B‬‬
‫{‬
‫;)‪if (A->top!=0) push(pop(A), B‬‬
‫}‬
‫ﻟﻨﻜﺘﺐ ﺗﻌﻠﻴﻤﺎت إدﺧﺎل اﻟﻘﻴﻢ ﻣﻦ ‪ 1‬إﱃ ‪ 10‬إﱃ اﳌﻜﺪس ‪ S1‬وﻣﻦ ﰒ ﻧﻨﻘﻞ ﻫﺬﻩ اﻟﻘﻴﻢ إﱃ اﳌﻜﺪس ‪ S2‬وﳔﺮج‬
‫ﳏﺘﻮ ت اﳌﻜﺪس ‪ ،S2‬ﳝﻜﻦ ﻟﻠﺘﻌﻠﻴﻤﺎت أن ﺗﻜﻮن ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫>‪#include <iostream‬‬
‫;‪using namespace std‬‬
‫‪struct stack‬‬
‫{‬
‫;]‪int item[101‬‬
‫;‪int maxstack‬‬
‫;‪int top‬‬
‫;}‬
‫;‪stack *S1, *S2, *S3‬‬
‫)‪bool empty(stack *s‬‬
‫{‬
‫;‪if (s->top==0) return true‬‬
‫;‪else return false‬‬
‫;}‬

‫‪١١-١‬‬
bool flow(stack *s)
{
if (s->top==s->maxstack) return true;
else return false;
};

void push(int x, stack *s)


{
s->top= s->top+1;
s->item[s->top] = x;
};

int pop(stack *s)


{
int x;
x=s->item[s->top];
s->top= s->top-1;
return x;
}
void move(stack *A, stack *B)
{
if (A->top!=0)
push(pop(A), B);
}

void main()
{
S1=new stack;
S1->maxstack=100;
S1->top=0;

S2=new stack;
S2->maxstack=100;
S2->top=0;

S3=new stack;
S3->maxstack=100;
S3->top=0;

for (int i=10;i>=1;i--) push(i,S1);


while (!empty(S1)) move(S1,S2);

١٢-١
‫;‪while (!empty(S2)) cout<<pop(S2)<<endl‬‬
‫}‬
‫ﻣﺜﺎل ‪٣–١‬‬
‫ﻟﻴﻜﻦ ﻟﺪﻳﻨﺎ ﻋﺪد ‪ n‬ﻣﻦ اﻷﻗﺮاص ﻗﻄﺎر ﻣﺘﻔﺎوﺗﺔ ﻣﺮﺗﺒﺔ ﺣﺴ ـ ـ ــﺐ ﻛﱪ أﻗﻄﺎرﻫﺎ داﺧﻞ ﻋﻤﻮد‪ .‬اﳌﻄﻠﻮب ﻧﻘﻞ ﻫﺬﻩ‬
‫اﻷﻗﺮاص‪ ،‬اﻟﻘﺮص ﺗﻠﻮ اﻵﺧﺮ إﱃ ﻋﻤﻮد آﺧﺮ ﲝﻴﺚ ﺗﺼ ـ ـ ـ ــﺒﺢ ﺑﻨﻔﺲ اﻟﱰﺗﻴﺐ‪ ،‬ﳝﻜﻦ اﺳ ـ ـ ـ ــﺘﺨﺪام ﻋﻤﻮد ﻟﺚ ﻣﺴ ـ ـ ـ ــﺎﻋﺪ‬
‫ﺑﺸﺮط ﻋﺪم وﺿﻊ ﻗﺮص ﻛﺒﲑ ﻓﻮق ﻗﺮص أﺻﻐﺮ‪ .‬إذا ﻓﺮﺿﻨﺎ أن ﺗﺮﺗﻴﺐ اﻷﻗﺮاص ﻳﺒﺪأ ﺻﻌﻮداً ﲝﺴﺐ اﳊﺠﻢ ﻣﻦ ‪ ،1‬أي‬
‫أن اﻟﻘﺮص اﻷﺻ ــﻐﺮ ﺧﺬ اﻟﺮﻗﻢ ‪ 1‬وﻣﻦ ﰒ اﻟﻘﺮص اﻷﻛﱪ ﺧﺬ اﻟﺮﻗﻢ ‪ 2‬وﻫﻜﺬا‪...‬وﻳﺒﲔ اﻟﺸ ــﻜﻞ ‪ ٣–١‬ﺑﻌﺾ ﻣﺮاﺣﻞ‬
‫ﻋﻤﻠﻴﺔ اﻟﻨﻘﻞ‪.‬‬

‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬

‫‪3‬‬
‫‪4‬‬ ‫‪2‬‬ ‫‪1‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬

‫‪1‬‬
‫‪4‬‬ ‫‪2‬‬ ‫‪3‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬

‫‪1‬‬
‫‪2‬‬
‫‪4‬‬ ‫‪3‬‬

‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬

‫‪Hanoi‬‬ ‫اﻟﺸﻜﻞ ‪ ٣–١‬ﺑﻌﺾ ﻣﺮاﺣﻞ ﻋﻤﻠﻴﺎت ﻧﻘﻞ اﻷﻗﺮاص ﰲ ﺑﺮج‬

‫ﻟﺘﺤﻠﻴﻞ اﳌﺴ ـ ــﺄﻟﺔ ﺳ ـ ــﻨﺒﺪأ ﲝﺎﻟﺔ وﺟﻮد ﻗﺮص واﺣﺪ ﰲ اﻟﻌﻤﻮد ‪ ،A‬وﻟﻨﻘﻞ ﻫﺬا اﻟﻘﺮص ﺳ ـ ــﺘﺨﺪام اﻟﻌﻤﻮد ‪) C‬أو‬

‫‪١٣-١‬‬
‫إﱃ ‪ ،B‬وﻟﻨﺮﻣﺰ ﳍ ــﺎ ﻹﺟﺮاء‬ ‫‪A‬‬ ‫ﺑ ــﺪون اﺳـ ـ ـ ـ ـ ـ ــﺘﺨ ــﺪاﻣ ــﻪ( ﻟ ــﺪﻳﻨ ــﺎ ﺧﻄﻮة واﺣ ــﺪة ﻓﻘﻂ وﻫﻲ‪ :‬ﻧﻘ ــﻞ اﻟﻘﺮص رﻗﻢ ‪ 1‬ﻣﻦ‬
‫)‪.Mov(1,A,B‬‬
‫أﻣﺎ ﰲ ﺣﺎﻟﺔ وﺟﻮد ﻗﺮﺻــﲔ ‪ 1‬و ‪ 2‬ﻓﺴــﻴﺘﻢ اﺳــﺘﺨﺪام اﻟﻌﻤﻮد ‪ C‬ﻛﻌﻤﻮد ﻣﺴــﺎﻋﺪ‪ ،‬وﺳــﻨﺮﻣﺰ ﳍﺬﻩ اﻟﻌﻤﻠﻴﺔ ﻹﺟﺮاء‬
‫)‪ ،Tour(2,A,B,C‬أي ﻧﻘﻞ ﻗﺮﺻﲔ ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد ‪ B‬ﲟﺴﺎﻋﺪة اﻟﻌﻤﻮد ‪ ،C‬وﻧﺘﺒﻊ اﳋﻄﻮات اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ -١‬ﻧﻘﻞ اﻟﻘﺮص ‪ 1‬ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد اﳌﺴﺎﻋﺪ ‪.C‬‬
‫‪ -٢‬ﻧﻘﻞ اﻟﻘﺮص ‪ 2‬ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ ‪.B‬‬
‫‪ -٣‬ﻧﻘﻞ اﻟﻘﺮص ‪ 1‬ﻣﻦ اﻟﻌﻤﻮد اﳌﺴﺎﻋﺪ ‪ C‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ ‪.B‬‬
‫أي إن اﻟﻌﻤﻠﻴﺎت ﺗﺘﻢ وﻓﻖ اﻹﺟﺮاء اﻟﺘﺎﱄ‪:‬‬
‫)‪Tour1(2,A,B,C‬‬
‫‪Begin‬‬
‫)‪Mov(1,A,C‬‬
‫)‪Mov(1,A,B‬‬
‫)‪Mov(1,C,B‬‬
‫‪End‬‬
‫وﻳﻜﺘﺐ ﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫)‪Tour2(2,S1,S2,S3‬‬
‫‪Begin‬‬
‫)‪Mov(S1,S3‬‬
‫)‪Mov(S1,S2‬‬
‫)‪Mov(S3,S2‬‬
‫‪End‬‬
‫وﰲ ﺣﺎﻟﺔ ﻧﻘﻞ ﺛﻼﺛﺔ أﻗﺮاص ﻣﻦ ‪ A‬إﱃ ‪ B‬ﲟﺴــﺎﻋﺪة اﻟﻌﻤﻮد ‪ C‬وﺳــﻨﺮﻣﺰ ﳍﺎ ﻹﺟﺮاء )‪ ،Tour3(3,A,B,C‬ﻧﺘﺒﻊ‬
‫اﳋﻄﻮات اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ -١‬ﻧﻘﻞ اﻟﻘﺮص ‪ 1‬ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد اﳌﺴﺎﻋﺪ ‪.B‬‬
‫‪ -٢‬ﻧﻘﻞ اﻟﻘﺮص ‪ 2‬ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ ‪.C‬‬
‫‪ -٣‬ﻧﻘﻞ اﻟﻘﺮص ‪ 1‬ﻣﻦ اﻟﻌﻤﻮد اﳌﺴﺎﻋﺪ ‪ B‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ ‪.C‬‬
‫‪ -٤‬ﻧﻘﻞ اﻟﻘﺮص ‪ 3‬ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ ‪.B‬‬
‫‪ -٥‬ﻧﻘﻞ اﻟﻘﺮص ‪ 1‬ﻣﻦ ‪ C‬إﱃ ‪.A‬‬
‫‪ -٦‬ﻧﻘﻞ اﻟﻘﺮص ‪ 2‬ﻣﻦ ‪ C‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ ‪.B‬‬
‫‪ -٧‬ﻧﻘﻞ اﻟﻘﺮص ‪ 1‬ﻣﻦ ‪ C‬إﱃ ‪.B‬‬
‫أي إن اﻟﻌﻤﻠﻴﺎت ﺗﺘﻢ وﻓﻖ اﻟﱰﺗﻴﺐ اﻟﺘﺎﱄ‪ :‬ﻧﻘﻞ ﻗﺮﺻ ـ ـ ـ ــﲔ ﻣﻦ اﻟﻌﻤﻮد اﻷﺳ ـ ـ ـ ــﺎﺳ ـ ـ ـ ــﻲ ‪ A‬إﱃ اﻟﻌﻤﻮد اﳌﺴ ـ ـ ـ ــﺎﻋﺪ ‪C‬‬

‫‪١٤-١‬‬
‫ﻟﻌﻤﻠﻴﺎت ‪ 1‬و ‪ 2‬و ‪ ،3‬وﻗﺪ ﲤﺖ ﺑﻨﻔﺲ ﻃﺮﻳﻘﺔ ﻧﻘﻞ ﻗﺮﺻ ـ ــﲔ ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد ‪ B‬ﲟﺴ ـ ــﺎﻋﺪة اﻟﻌﻤﻮد ‪ ،C‬أي‬
‫ﳝﻜﻦ أن ﺗﺘﻢ ﻹﺟﺮاء )‪ .Tour(2,A,C,B‬وﻣﻦ ﰒ ﻧﻘﻞ اﻟﻘﺮص اﻷﺧﲑ ﻣﻦ اﻟﻌﻤﻮد اﻷﺳ ـ ــﺎﺳ ـ ــﻲ ‪ A‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ‬
‫‪ B‬ﻟﻌﻤﻠﻴﺔ ‪ ،4‬أي ﻹﺟﺮاء )‪ .Mov(A,B‬وأﺧﲑاً ﻧﻘﻞ اﻟﻘﺮﺻ ـ ــﲔ ‪ 1‬و ‪ 2‬ﻣﻦ اﻟﻌﻤﻮد اﳌﺴ ـ ــﺎﻋﺪ ‪ C‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ‬
‫‪ B‬ﺳــﺘﺨﺪام اﻟﻌﻤﻮد ‪ A‬ﻟﻌﻤﻠﻴﺎت ‪ 5‬و ‪ 6‬و ‪ ،7‬وﻗﺪ ﲤﺖ ﻫﺬﻩ اﻟﻌﻤﻠﻴﺔ ﺑﻨﻔﺲ ﻃﺮﻳﻘﺔ ﻧﻘﻞ ﻗﺮﺻــﲔ ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ‬
‫اﻟﻌﻤﻮد ‪ B‬ﲟﺴﺎﻋﺪة ‪ ،C‬أي ﻹﺟﺮاء )‪ .Tour(2,C,B,A‬واﻹﺟﺮاء ﻳﺼﺒﺢ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫)‪Tour3(3,A,B,C‬‬
‫‪Begin‬‬
‫)‪Tour2(2,A,C,B‬‬
‫)‪Mov(A,B‬‬
‫)‪Tour2(2,C,B,A‬‬
‫‪End‬‬
‫وﻳﻜﺘﺐ ﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫)‪Tour3(3,S1,S2,S3‬‬
‫‪Begin‬‬
‫)‪Tour2(2,S1,S3,S2‬‬
‫)‪Mov(S1,S2‬‬
‫)‪Tour2(2,S3,S2,S1‬‬
‫‪End‬‬
‫وﻟﻨﻘﻞ أرﺑﻌﺔ أﻗﺮاص ﻣﻦ اﻟﻌﻤﻮد اﻷﺳ ـ ـ ــﺎﺳ ـ ـ ــﻲ ‪ A‬إﱃ اﻟﻌﻤﻮد ‪ B‬ﲟﺴ ـ ـ ــﺎﻋﺪة اﻟﻌﻤﻮد ‪ C‬ﺳ ـ ـ ــﻨﻨﻘﻞ ﺛﻼﺛﺔ أﻗﺮاص ﻣﻦ‬
‫اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد ‪ C‬ﺳ ـ ـ ــﺘﺨﺪام اﻟﻌﻤﻮد ‪ B‬ﻛﻌﻤﻮد ﻣﺴ ـ ـ ــﺎﻋﺪ‪ ،‬وﻣﻦ ﰒ ﺳ ـ ـ ــﻨﻨﻘﻞ اﻟﻘﺮص اﻷﺧﲑ ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ‬
‫اﻟﻌﻤﻮد ‪ ،B‬وأﺧﲑاً ﻧﻘﻞ ﺛﻼﺛﺔ أﻗﺮاص ﻣﻦ اﻟﻌﻤﻮد ‪ C‬إﱃ اﻟﻌﻤﻮد اﻟﻨﻬﺎﺋﻲ ‪ B‬ﺳﺘﺨﺪام ‪ A‬ﻛﻌﻤﻮد ﻣﺴﺎﻋﺪ‪ ،‬أي ﻹﺟﺮاء‬
‫اﻟﺘﺎﱄ‪:‬‬
‫)‪Tour4(4,S1,S2,S3‬‬
‫‪Begin‬‬
‫)‪Tour3(3,S1,S3,S2‬‬
‫)‪Mov(S1,S2‬‬
‫)‪Tour3(3,S3,S2,S1‬‬
‫‪End‬‬
‫وﺑﺸــﻜﻞ أﻋﻢ‪ ،‬إذا ﻣﺜﻠﻨﺎ اﻷﻗﺮاص ﺑﺴــﻠﺴــﻠﺔ أرﻗﺎم ﻣﺮﺗﺒﺔ ﺗﺼــﺎﻋﺪ ً )أو ﺗﻨﺎزﻟﻴﺎً( ﻣﻀــﻤﻨﺔ ﰲ ﻣﻜﺪس ‪ ،S1‬ﻓﺈن ﻧﻘﻞ‬
‫اﻷﻗﺮاص ﻣﻦ اﻟﻌﻤﻮد ‪ A‬إﱃ اﻟﻌﻤﻮد ‪ B‬ﺳﺘﺨﺪام اﻟﻌﻤﻮد ‪ C‬ﻛﻌﻤﻮد ﻣﺴﺎﻋﺪ ﻫﻲ ﻧﻘﻞ ﳏﺘﻮى اﳌﻜﺪس ‪ S1‬إﱃ اﳌﻜﺪس‬
‫‪ S2‬ﺳ ـ ــﺘﺨﺪام اﳌﻜﺪس اﳌﺴ ـ ــﺎﻋﺪ ‪ .S3‬ﻓﺈذا ﻛﺎن إﺟﺮاء ﻧﻘﻞ ‪ N‬ﻋﻨﺼ ـ ــﺮ ﻣﻦ اﳌﻜﺪس ‪ S1‬إﱃ اﳌﻜﺪس ‪ S2‬ﲟﺴ ـ ــﺎﻋﺪة‬
‫اﳌﻜﺪس ‪ S3‬ﻟﺸﻜﻞ‪:‬‬
‫)‪Tour(N,S1,S2,S3‬‬
‫‪Begin‬‬
‫‪If N=0 then Stop‬‬

‫‪١٥-١‬‬
Tour(N-1,S1,S3,S2)
Mov(S1,S2)
Tour (N-1,S3,S2,S1)
End
:‫ﳝﻜﻨﻨﺎ أن ﻧﻜﺘﺐ ﺗﻌﻠﻴﻤﺎت اﻹﺟﺮاء ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‬
void Tour(int n, stack *S1, stack *S2, stack *S3)
{
if (n==0) return;
Tour(n-1, S1, S3, S2);
Move(S1, S2);
Tour(n-1,S3, S2, S1);
}
:‫واﻟﱪ ﻣﺞ اﻟﻜﻠﻲ ﻳﺼﺒﺢ ﻛﻤﺎ ﻳﻠﻲ‬
#include <iostream>
using namespace std;
struct stack
{
int item[101];
int maxstack;
int top;
};
stack *S1, *S2, *S3;
bool empty(stack *s)
{
if (s->top==0) return true;
else return false;
};

bool flow(stack *s)


{
if (s->top==s->maxstack) return true;
else return false;
};

void push(int x, stack *s)


{
s->top= s->top+1;
s->item[s->top] = x;
};

١٦-١
int pop(stack *s)
{
int x;
x=s->item[s->top];
s->top= s->top-1;
return x;
}

void move(stack *A, stack *B)


{
if (A->top!=0) push(pop(A), B);
}

void Tour(int n, stack *A, stack *B, stack *C)


{
if (n==0) return;
Tour(n-1, A, C, B);
move (A, B);
Tour(n-1,C, B, A);
}

void main()
{
S1=new stack;
S1->maxstack=100;
S1->top=0;

S2=new stack;
S2->maxstack=100;
S2->top=0;

S3=new stack;
S3->maxstack=100;
S3->top=0;
for (int i=100;i>=1;i--) push(i,S1);
Tour (20, S1, S2, S3);
while (!empty(S2)) cout<<pop(S2)<<endl;
}
‫ وأدﻋﻮ اﻟﻘﺎرئ ﻹﻋﺎدة ﺗﻨﻔﻴﺬ ﻫﺬا‬،S2 ‫ إﱃ اﳌﻜﺪس‬S1 ‫ ﻋﻨﺼـ ـ ـ ـ ـ ـ ــﺮ ﻣﻦ اﳌﻜﺪس‬20 ‫ﻳﻌﻤﻞ اﻟﱪ ﻣﺞ ﻋﻠﻰ ﻧﻘﻞ‬
!‫ وﻣﺮاﻗﺒﺔ زﻣﻦ ﺗﻨﻔﻴﺬ اﻟﱪ ﻣﺞ ﻣﻦ أﺟﻞ ﻫﺬﻩ اﻟﻘﻴﻢ‬...‫ وﻫﻜﺬا‬35 ‫ وﻣﻦ ﰒ‬30 ‫ ﻋﻨﺼﺮ وﻣﻦ ﰒ‬25 ‫اﻟﱪ ﻣﺞ ﻟﻨﻘﻞ‬

١٧-١


  ˼

/ # 
) &* #+ ,% .         !" # $   % &'(   

 
    
: ? @ 1   A .
 $ *;< =' > 
   0 : 9+ 86    /7   &+  !  
  0 1'2 345
$'. I + 2H): # .<FG 1 ) !/DE    0
    
. 3C( !   *(5+ 6'   % 
 .,% 1  Q K
 <     0 $'. I +# PM*NO   &*. # J
   K
 ,%   1     AL
#+ 1   D2 <0 # P1   #+ Q/   #+ 1   1AL K
 R'<C &* # ,% K' 
 
    SN 
)  7 &* # ,%  9+ .1<TU C      0  /%
C 2 V     0 1D2  #+ Q    / 
.1I 1 <5 1<TU
    X+ $4'C 1'25 &C P!" # $    % W'< &>+  &T    /5 Q 17 3    0' 1GC *
VT /.
!+# $   % =' > &'(
C 1GC *
1<TU 
    M' V    0# .&T   0   &)  
   0
P*NZ &  
      0   ,% &  1
      0 *'[   . . M'F 1<TU \F4  Y4*
.1)
 . .% ]  *5+ \' 1H< 9+  1
0  . .% ] +  ^
/LQNHG/LVWV 
     ˺˼
3/ \F2C & # P1<T:  `UG &';     0 .I &  ;4*C .G `UG #O     a M! ] + _*FC
.I _*
F Y4* /'  .`UG c  " 1;C" b*)"  0<C I  '* `UG 1<T: '* .I
D' / M* &5 1<TU  '.; 0 `UG '* M]I .I & '  Kd # 1<TU 1D4   G &'; 0
1;'
4 Y4* f^
'     '.;    0 `UG ]I ] e  .5 J4+ V    A /  .>  ^ &';    0
C $4' &N
J'* 0<C 2 =/   G &';0
C O^
1.%g &) /%  .$4'  1 A &
% J
;  
'*
W# 1<TU   G. V'<     =/ I R<2     >  ^ &';    0
C /4 M* &5 F .9;C"
h1<TU i@7 &( K'H2 %  j'5 /7 27  O0 # .J /  J.';0
C /4# 9;C"
/2  Kd # PV'F 1)/  '*
M]< *'[ !+ N]kC /2  24+ _*
F2  l/ A/ Q' 0

*'m
 b* 2 # P  HI+ ] C ) #  C 1<'<  K'  1/F  ? @ 
 02  .I  1* D2
C
:1' 
$<*
 o 2 PN]L &) *  1.)* &5  1/F  K' ]I   *'g QXPQRGHV
LQWLWHP>@ 
LQWQXPQRGHV
1C0 *S2  A *2 @7 i@Nf' 9@ =/ :#+ *
2 1/F   9 > *2I N]L
:&%g  1.) /%
C M =/ ]<2 9I
'*
W# *2 N] 4]!+ ok .1/F 
ZKLOH LWHP>M@9 M

- 

:1.< C 1'  = /   M *2  +C *S2 = / 1) ekC /2 Kd #
IRU LQWQ QXPQRGHVQ! MQ 
   LWHP>Q@ LWHP>Q@
:1 '.
C ; *2 N]kC /2 Kd #
LWHP>M@ 9
QXPQRGHV
:1 ' i@7 N] & K' =A# ' 9@ q #;   9  1 ' N] *4 24+ _*FC
,WHP ,
 
 
 
 
 
 
 
 
=/  9  1 ' N] & M  #M  'C K' r 
   
C# M  1 ' 2I ZKLOH 1.) j/

:.  5 #; V# M 
,WHP ,
 
 
 
 
 
 
 
 
s*a 1AkC 1/F  1 /mg *S2 !
NC cF
5: # 1/F *S2I =' > !
N 9]F 22% 
:.  5 R< 1.) V
M QXPQRGHV
ZKLOH LWHP>M@9   M QXPQRGHV M
: 
&%g .I N]L $ '.  V  
C#
ZKLOH LWHP>M@9   M QXPQRGHV M
 IRU LQWQ QXPQRGHVQ! MQ 
   LWHP>Q@ LWHP>Q@
 LWHP>M@ 9
 QXPQRGHV
P*S2 *mS+ 7 9 1 ' /% 2I 1<TU 1 C  *2 N]kC V 0 $ '.
i@7 + t)U4
1/F    /% 2I + .9!,WHP>QXPQRGHV@ /% 2I 1<TU 1D4   *   2 N]kC     X+ V    0#

p- 

j/
2    QXPQRGHV!  5 ok .<FG s*   a N] ; @ PM> 1 ' N]  %
4  1u.

.*S2 N] I
< *4 2I J4+ : P1 /D &%C 1<TU   *S2I N]kC V 0 `/.: @7 W# 1<TU j* 
*S2 v04 4I+ o : P> *2I   *2 @7 =/  
 M]I  %
4  1<TU  *2I
 '> &%  gC 1<TU i@7 
  0 # .1  AL 1 < 1'  0%I 1'. C 1/F    b#@< *  2 . 1' 

1  * 2I <  2I &F "  # .I"   * S2 =' > 1) e   *G X4 K / &* # ,% &'( 
 &F"   *S2 1) e   *GX2 &* &'(   D 
 1 ) # .J
   *2I 1A# ,%
= Y4* @'F2  O^ t<.2  $:< i@7 &5 # .&* M*NO   > * 2I N] D' K
'  M* &5
.1<TU I M]e
        ˺˺˼
@%7# .
. 
'*
0) '2 A 1* ,% #+ &* *S2I /% P
&'(

345 o #+) TLWHPV>L@  /%'        
*      2 k &! *      2I &(  TLWHPV>L@ M*;< 345 o
&%gC 1* ,% #+ &* *S2I + _*FC .(TLWHPV>@ M*;<  /%'  
*2 k L PD[TXHXH
 12' $'G  1'2C &%gy V* '*
@7 k P 
*2  /2I J0F4  A 9/< *2I &5 9+ PV*S
.OLQHDUOLQNHGOLVW 1'G 1GC *
1<TU KC b* y# – &%g
  'DWD QH[W         
/LVW        «   QLO

  QRGH>@  QRGH>@    QRGH>Q@


–  

LQIRUPDWLRQ $/. &) #" :'.)        X


 7# QRGH M C I 1<TU  *      2I &5
*  2 9/< $/. &) + R') PQH[W !  
NC QH[WDGGUHVV  
 /2 &) 4( # GDWD !  
NC

      0 9@  /2 I .1<TU  1' 
M  /2I        X
'  
 /2 &) + P1<TU  . F
.SRLQWHU *aO C  MI   /S/.
( /2I  X
 #+)   *'g /7# OLVW J' 04 b/ >!N *aO 1^/C 1<TU &5   /S/ % y
  ]2   LC J
' #2 %   2'C .M      X *'[ J4+ >! *   aO C    4 .1<TU  MI #+
*'[  /2I /7# 18//           C b*  1   SN 1 ' .I 9/
< QH[W &) fC 1<TU  M*'N" M '
 .*'m

.1<TU 1D4   M!az QXOOSRLQWHU   *aO @7 
0 .( 1 ' D2I :C G 2) I*a
1<TU OLVW >! *      aO 1 ' .HPSW\ OLVW 1[!F 1<TU C I .I 9/
< : 
1<TU I
.QH[W DGGUHVV RI OLVW 18// 1'. 1^      /C 1[! 1<TUC c %  @%7 .( 9+) 18// 7 1[!F
:k M  *aO S 5 o .$'e! /  1
0 $<.G { C q G 2

- 

.S 1^/C D'  !g M . 02y QRGH S  x
.M ?.
$/. K0   02y GDWD S  x
.*aO 7# PS M .  
 /2 K0   02y QH[W S  x
  ! " # !$ %&'#˻˺˼
.1<TU  1 y #+ 1.Ny *    S2 /%      0) 7I ]I *'m
 .1'%'2] $'G  1'2C 7 1<TU
.
Cd  1/F      K;< + R')  1/F     . %'
    0 *7/; = 1<TU %'2 *7/; 

 ' /7  5 1<'<S ] I+ $ o 7*S2I 1<T: 2 J4+ _*
F2 P( &' .I p– &%g   *H2 C#
 7 *S2I 1dUd  1F O 1<TU + t)U4 .1<TU 1    V'< ] 1AkC [*4# P D 1 )
:1' 
$ /G =
4 ? @ .OLVW /7 1<TU i@D >! *aO +# '*
.I
1'2 }27 J4+ _*
F2 ' )# PJ
A `/.G ] D' =X4 % MI .I /< 7  #" M/G  x
:1'. 1^/C D2I * 2 1[! MI .I /<. 
3mJHWQRGH

/7  5 () 1 M i@D *aO /7 S + 2  @7 .M ?.  /2 S *'m


/ X =A/ 
#
= f : 1<TU k P1/F . UN J4+ t): .7  5  1'G 1<TU + R') E 1 <  '
.D' *S2 =A/ 0 MD;  $ *;) 1I/ ;
1'. 1^/C @7 ;2 .() 1 M . $4' K0    V'< ] N] 7 1' 
M/G  x
:
GDWD S m

.p– &%g  F 1 <  12' 1'. i@7 1;'


4

|- 

'DWD   'DWD 'DWD1H[W

OLVW    QXOO

 D
'DWD1H[W 
S 
'DWD1H[W 'DWD1H[W 
'DWD1H[W

OLVW   QXOO

E

'DWD1H[W 'DWD1H[W 'DWD1H[W 'DWD1H[W 
S
OLVW    QXOO

F
'DWD1H[W  'DWD1H[W 'DWD1H[W 'DWD1H[W 
OLVW    QXOO

(–  

&N
 QRGH S +  C .M ?.
QH[W K0 ='A/ 9!#*X  QRGH S M . GDWD K0 ='A/  C x
 X
 OLVW *'m
+ R')# .1'.S" 1<TU   #" M /%
 1' 
M k P1<TU 1 
:1' 
1'. 1^/C 1<TU   bX
 QRGH S k 1<TU   #" M  /2I
            QH[W S mOLVW
 ' /7  5 QRGH S M . QH[W &)  (1<TU   #" M  /2I 7 
) OLVW 1 ' =X 

. F 1 <
P1C/.G 1<TU >! *aO /7 OLVW +  C .bX *2 = 1<TU   *'g S 1H<. i@7  x
:1'. 1^/C ;2 + %  @7 .1<TU  M;  #" M  /2 J
' &  ; J4k
            /LVWmS
. G 1 <  12' 1'. i@7 1;'
4 PS 1 'C OLVW1 '  

:OLVW 1<TU 1    ] 1A &>+  1'e! / .I &<4   $ /G =' > =A/C
3mJHWQRGH
GDWD S m
QH[W S mOLVW
OLVWmS
1   [          1 ' 9+ 1 A &>+  (SXVK OLVW[ 1'. I I *  
) 1'e! / i@7 K'  % 

) V'<S &%gC &  1'e! / + 5f . GDWD S m[  C GDWD S m1'.  
 1^/C OLVW 1<TU
. QH[WOLVW QXOO 1[!  #+ &%gC 1<TU 345 / #

~- 

  ! ) !$ *+ #˼˺˼
$ o 7*      S2I 1<T: 2 J4+ _*FC .1<TU 1   MI N] 1'.   1      05  1'. i@7
*'[ 1<TU 1   #" M 1 ekC [*4# P– &%    g  D 1 <  ' /7  5 1<'<    S ] I+
'*
.I  7 *S2I 1dUd  1F O 1<TU + t)U4 .[ *'m
3< GDWD &< 1 ' # 1[!F
1   MI N] 1'. {'2 * 7 D o <C 1'. .OLVW /7 1<TU i@D >! *      aO +#
:1' 
$ /G =
4 ? @ 1<TU
SmOLVW:1'. 1^/COLVW >! *aO . 1#0 J
' & ;4SI0 *'m
  
 7  #" M/G  x
 .– &%g  E 1 <  ' /7  5 1<TU 1    *'g  7U5 V  
C#
.1<TU   #" . 
M    *'g V R'<C OLVW >! *aO 1 ' &  7 1' 
M/G  x
: 1'. 1^/C @7 ;2
              /LVWmQH[W S 
.– &%g  F 1 <  12' 1'. i@7 1;'
4

'DWD1H[W 'DWD1H[W 'DWD1H[W

OLVW   QXOO

'DWD1H[W 'DWD1H[W 'DWD1H[W


S
OLVW   QXOO

E
'DWD1H[W

S 
'DWD1H[W 'DWD1H[W

OLVW  QXOO

–  

:1' 
1'. 1^/C [ *'m
3< QRGH S M . GDWD K0 ='A/ x
              [mGDWD S 
i@D GDWD K    0 $/
< +  C# .1<TU  #" M 7     X  ' 345 
M   S *'    g
M*
   K QRGH S M ) . M i@7 b@) %LC V      S+ ? @ P [ *'m
3< D2 K M
>/ : J4" 1<TU  MI   *'   gQH[W S +  K[* .I OLVW >! *   aO $ o 1<TU  M 5
.OLVW >! *aO  QRGH S M #2
1*^

- 

1'. i@7 e;4  C P1<TU   #" M cm  1'. I c2d+ I0 *'m
5 
y+ S *'m
+ K. 4
>/ : J4k *'m
@7 1 ' 
 +  C ? @ .*N+ _ *[+ &>+  *'m
@7 
      0y + &
< 
M   K ' )  
C# .D4 /2I  X
 QH[W &) :# >! *aO : J4" P'.5 1C0 M #2
1*^
.1'4d D 
 %  :# 1
0
1 ' $*'m / # 
) 1'4d M*  
   U 1.C QRGH S & > &>+   1'2 }U
 J' `/[*   o
1^/C D2I * 4# P>   
U 1< S D. ># M **<
 1'2 }27 J4+ _*
F2 ' ) .S *aO
:1'.
IUHHQRGH S 
.– &%g  G 1 < *H4
S1 ' +  C .1    K M " PV'<S *'[ QRGH S   l/>* V 1'. i@7 @'F2  C
&<4   $ /G =' > =A/C .V'<S *'[ V X+ 1 ' ?.
l/>! 9+ k $!*) y
M . *aO 7
.[mSRS OLVW 1<TU 1  *2I < 1'e! /N .I
:1'. 1^/C S  7*aO ''  ] # M 6' ]  
SmJHWQRGH
@ DC .M  * y IUHHQRGH 1 '.  2'C PM  > M I ‚ <y JHWQRGH 1 '. f C / % 
I *(5+ &' F
C  C  ' K.%
2  .j.
# ‚<y *)"C D2% D 
  ]  :# &
 0 :  P`/. "
.D.'(  K'7F I# IUHHQRGH # JHWQRGH '
'.
,  - %./ 0 $˽˺˼
  /  S/ Y* ='G
  0 : . #+ &%  gC M]/>/ 1[!F   1'D
2 1I/ ; }27 + _*
F2  
1I/ ; i@7  MI <  0 JHWQRGH 1'. I  .IUHHQRGH # JHWQRGH $'. I UN  : 1I/ ; i@7
J4k P*N+ MI 9+ &( 7 1
0 *'[ MI 9+ +  C .1I/ ; ?.   M '  IUHHQRGH      2'C P
.IUHHQRGH  1^/C 1I/ ;  A 1I/A/ M #+ JHWQRGH  1^/C M]*
0 M 'C ƒ* }27 \'
1GC *
 1<TU i@7 I /% .,% &(  1GC *
 1<T: 7   1I/ ; i@D 1' 'G 1m'  
1  M]/>/  #" M & JHWQRGH 1'.  o .MI &5  QH[W &< 1^    /C {  D    X C =
  DF'X# Y4*  1!#*A   K 
M '  IUHHQRGH 1'.  2'C . 
U 1)
 D. ;# 1<TU
 1<T: I .1' 
JHWQRGH           1'. I 1^  /C 6'  
M]IL M*  0'
 D. > &>+  1<TU 1
.DYDLODEOHOLVW M'F 1<TU C  
U 1)

€- 

9LVXDO& +

     *1
˻˼
  + : .1/F    1^   /C  I *'
='G
   04 ? @ P  1I/ ; 7 1<TU +  C
M I r*     4 @%7# .DF†. † *     aO .I 9/
< + ; D2 &5# P1/F      '*      0) 1* /%
: 
5 1RGH7\SH
VWUXFW1RGH7\SH^
  LQWGDWD
  LQWQH[W
`
DYDLO 1)
 1   1      A 1RGH7\SH Q 4  I 1I/ ;  /%

 &%5 1<TU +


: 
&%g C //LVW &;05 1<TU i@7 b* 2 .OLVW D2/% ] * 1<TU 1#
6WUXFW//LVW^
 1RGH7\SH1RGH>@
 LQWDYDLOOLVW
`
:1 '.
C  1/F *S2  HI" ] C 1<TU   HI" ] ]<2
LQWQXPQRGHV 
&5  I *'m
5 /LVW Q 4  *aO I V* 
C /2 1'.N  M*5 @  1<TU =/ .I ‡F<.
:1' 
1 '.
C Y4* $ c *>
//LVW / QHZ//LVW
 1
   0 QRGH S I     A/I QRGH>S@ *'

   0 9LVXDO& 1m  &'(
@7 ]
IC

      02      # QH[W S  :C QRGH>S@QH[W ? @5# P GDWD S  :C QRGH>S@GDWD *'
# P$'e! /
/!QRGH>@ @T2I . 7 J
' + _*FC# P/ *'m
C 1<TU >! *'m
&( 2 .QXOO  :C  1 '
1'4( M G  .1<TU  #" $4' *     2I /7 /!QRGH>@GDWD @%7# P1<TU   #" M 7
* 2I /7 /!QRGH>@GDWD @T2I . 9# 0 QRGH>@QH[W + _*FC ./!QRGH>@QH[W 1^ /C 1<TU 
DF.N  /2I D0F4  A & < MI &5 .1( ( M   *'g /!QRGH>@QH[W # P1<TU  4( $4'
PI &%gC .  *aO 7#  1 ' QH[W D.)   X
 
1<TU  M*'N" M   &4 +  
# PJ `/ 02 QRGH 1/F  * 2I Q '  M . S * aO .7* aO# M $/
< 'C 1UI >/ :
.M ?. D2 X
 
$/. &(  QRGH>S@GDWD
1)
 1GC *
 1<T: &(  1'   + _*
F2       1[! MI  
       M]I  Y4* '%

 #" :'
<T: 2 + *
2   P/LVW &( 1<T: c2C  &'(
@7  
   2I 9+ .1<T: 9+   
  U
MI 1  A 2I POLVW %
# 2/% ] * 1<TU 7 1'4( 1<TU # PDYDLO M C +# 1)
 1<T: 7
OLVW  MI **< 2I \% C# POLVW  M> M 5 D
  02  # DYDLO  MI !*<2   OLVW   M>

„- 

/%
C +2   .OLVW 1<TU   
  : M]IL M7> V   R'<C DYDLO 1)
 1<T:   b  X
  
:1' 
$ '.
C 1<TU
IRU LQWM MQXPQRGHVM /!1RGH>M@QH[W M
/!1RGH>QXPQRGHV@QH[W 
/!DYDLO 
/!OLVW 
b* # 1HZ/LVW c *>L @7   02  P1<TU /% cC = i@'F2 K
 & F2 c *>  $ '.
i@7 = X2 
:.  5
YRLG1HZ/LVW ^
 IRU LQWM MQXPQRGHVM /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 
 /!DYDLO 
 /!OLVW 
`
*2   02 9@ QXPQRGHV #  'C V'<S ]I /7 M . *aO /% i@7 &'(
1*^ W#
.I &  9@ Y4* V # . V'<  ] 1^ /C U(  /% QXOO * aO # .QRGH 1/F  . ‰
:.  5 1<TU 1u'D
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG

VWUXFW1RGH7\SH^
 LQW'DWD
 LQWQH[W
`

VWUXFW//LVW^
 1RGH7\SH1RGH>@
 LQWDYDLOOLVW
`

LQWQXPQRGHV 
//LVW / QHZ//LVW
YRLG1HZ/LVW ^
 IRU LQWM MQXPQRGHVM /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 
 /!DYDLO 
 /!OLVW 
`

YRLGPDLQ ^
ˆ- 

 1HZ/LVW 
`
  " # 2!$ 34# -+
1  MI <02 OLVW M C + 
//LVW 1<TU 1   9DO D4'C M> MI 1AL
: 
c *>L b* 2 @D POLVW 1<TU   #+ M 5 D
04# DYDLO 1)
M 1<T:
YRLG3XW1RGH LQW9DO ^
 LQWQ
 Q /!1RGH>/!DYDLO@QH[W
 /!1RGH>/!DYDLO@'DWD 9DO
 /!1RGH>/!DYDLO@QH[W /!OLVW
 /!OLVW /!DYDLO
 /!DYDLO Q
`
:1 '.
C DYDLO M  9DO D2 ] * 1 ' 20
/!1RGH>/!DYDLO@'DWD 9DO
:1'.
C 1'" 1<TU 1  DYDLO M c *>L @7 <0#
Q /!1RGH>/!DYDLO@QH[W 
:1 '.
C DYDLO   Q 1 ' ]2 ]  Kd #
/!DYDLO Q
M!a c *>L ' # M i@7 <0
 M*'N" M  DYDLO 1'" 1<TU /% 2I J4+ t)U4
. 1<TU 1D4
‹ *NL ZKLOH 1.)  
  %  R') P1<TU K' ‹ *N  'F  1# 0 QH[W  1 ' = A# 
: 
&%g C K' i@7
LQWL /!OLVW
ZKLOH L  ^
 FRXW/!1RGH>L@'DWDHQGO
 L /!1RGH>L@QH[W
`
– %
1<TU i@7 ] I +2 # P 7I ]I //LVW Q 4  / 1<T: /%
C +2  OLVW  1<TU /%

:1' 
$ '.
C
LQWQXPQRGHV 
‹ !]L# .~– &%     g  D 1 < 1<TU @Nf
      .1HZ/LVW c *>L cI
     C OLVW 1<TU /%
C +2 #
:1' 
$ '.
C 3XW1RGH c *>L I
02 OLVW 1<TU   *S2
 LI /!DYDLO  3XW1RGH  

Š- 

 LI /!DYDLO  3XW1RGH  
 LI /!DYDLO  3XW1RGH  
1<TU 1 /% |– &%     g  E 1 < '# Pc *>L cI
      & 1<TU bF> !
N K
 ? @C
. #   /
.I P*S2 )] \F4  G # F $:< '  5 P *2 N] #

OLVW DYDLO 

DYDLO     

QRGH QRGH QRGH QRGH QRGH


D
OLVW  ODYDLO 

    

QRGH  QRGH QRGH QRGH  QRGH


E

OLVW  ODYDLO 

    

QRGH QRGH QRGH QRGH  QRGH


F
OLVW  ODYDLO 

    

QRGH QRGH QRGH QRGH  QRGH


G

5–  

: 
/7 .% Y4* #
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG

VWUXFW1RGH7\SH^
 LQW'DWD
 LQWQH[W
`
VWUXFW//LVW^
 1RGH7\SH1RGH>@
 LQWDYDLOOLVW
`
LQWQXPQRGHV 
//LVW / QHZ//LVW
YRLG1HZ/LVW ^
 IRU LQWM MQXPQRGHVM /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 

- 

 /!DYDLO 
 /!OLVW 
`

YRLG3XW1RGH LQW9DO ^
 LQWQ
 Q /!1RGH>/!DYDLO@QH[W
 /!1RGH>/!DYDLO@'DWD 9DO
 /!1RGH>/!DYDLO@QH[W /!OLVW
 /!OLVW /!DYDLO
 /!DYDLO Q
`
YRLGPDLQ ^
 1HZ/LVW 
 LI /!DYDLO  3XW1RGH  
 LI /!DYDLO  3XW1RGH  
 LI /!DYDLO  3XW1RGH  
 LQWL /!OLVW
 ZKLOH L  ^
  FRXW/!1RGH>L@'DWDHQGO
  L /!1RGH>L@QH[W
 `
`
" ? o P Kd #  Kd #  9+ PD N] '* \%I '*
C K' ‹*' Y4* @7 @'F2 2I
.1<TU 1  &N K'
  ) .1$  -`
 
C# PDYDLO   *2 @7 bX' 1'4d D'  
U r
 J. ># OLVW 1<TU  *2I <0
DYDLO         C OLVW  
 = 3XW1RGH 1AL c *> 1C
5 1*^ \F2C 3RS1RGH J 02 # <0 c *> 
%'
:.  5 3RS1RGH c *>L j*  V#
YRLG3RS1RGH ^
 LQWQ
 Q /!1RGH>/!OLVW@QH[W
 /!1RGH>/!OLVW@QH[W /!DYDLO
 /!DYDLO /!OLVW
 /!OLVW Q
`
\% C 1<TU K'* ] # P– (  D2/% K 
 < M]IL 1eU $ '.
.  '#
.~– &%g  ' D2/%
 1HZ/LVW 

p- 

 LI /!DYDLO  3XW1RGH  
 LI /!DYDLO  3XW1RGH  
 LI /!DYDLO  3XW1RGH  
 LI /!OLVW  3RS1RGH 
 LI /!OLVW  3RS1RGH 
 LI /!OLVW  3RS1RGH 
   6 7 -$
1<TU   M i@7 1A I M!I : 7  OLVW 1<TU  MI < 1'. I + W   t)U4
1<TU   D
   A# DYDLO  MI <    1'. I I j.
 : 1'. i@7  9+ P3RS1RGH c *>LC DYDLO
1AL 1'. I  J 
: c *>L @7 K'  1'F'5 .  ' *2 .3XW1RGH c *>LC 1'. i@7 K
 % POLVW
1# DYDLO 1)
1<TU 1   *'g 
$ *'m
I r*2  @D .'
<T: .I & #   <0 #
P//LVW 1<TU &N ] $ *'m
5  D2I j*
 :C 1'>!N $ *'m
5 Y4*  OLVW D4/%2       
1<TU
: 
&%g .I $ *'m
# 1<TU I j*
V# .$ *aO 5 *'m
@7 I r*2#
VWUXFW1RGH7\SH^
 LQW'DWD
 LQWQH[W
`
LQWQXPQRGHV 
VWUXFW//LVW^
 1RGH7\SH1RGH>@
`
//LVW / QHZ//LVW
LQWDYDLOOLVW
: 
&%g .I V' 1' #" 1)
1<TU .I *
'0 1<TU c2C c *> +
YRLG1HZ/LVW ^
 IRU LQWM MQXPQRGHVM /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 
`
1  = 
M . $4'5 9DO 1 ' 1      A .I &  R'<C 3XW1RGH c *>L j*  ' 2 #
$4'5 9DO 1 ' 1    A .I &  :KI+ &%    gC #+ .OLVW 1<TU 1  M i@7 =    A## DYDLO 1<TU
:.  5 c *>L V# POLVW 1<TU 1  M i@7 =A## OLVW 1<TU 1  = 
M .
YRLG3XW1RGH LQW9DOLQW OLVWLQW OLVW ^
 LQWQ
 Q /!1RGH> OLVW@QH[W
 /!1RGH> OLVW@'DWD 9DO
 /!1RGH> OLVW@QH[W OLVW
 OLVW OLVW
 OLVW Q
- 

`
 C OLVW 1<TU 1   DYDLO 1<TU 1  MI &2C / &%       g @DC c *>L j*  
 C DYDLO 1<TU 1   OLVW 1<TU 1  MI &2C ? @5 V    0# PM $4'C 1 'C D   '   

% D D# – (  1<TU /%
C V 0 9@ Y4*  M; 102 # . 1 ' C D'
: 
&%g .I
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG

VWUXFW1RGH7\SH^
 LQW'DWD
 LQWQH[W
`
LQWQXPQRGHV 
VWUXFW//LVW^
 1RGH7\SH1RGH>@
`

//LVW / QHZ//LVW
LQWDYDLOOLVW
YRLG1HZ/LVW ^
 IRU LQWM MQXPQRGHVM /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 
`

YRLG3XW1RGH LQW9DOLQW OLVWLQW OLVW ^
 LQWQ
 Q /!1RGH> OLVW@QH[W
 /!1RGH> OLVW@'DWD 9DO
 /!1RGH> OLVW@QH[W OLVW
 OLVW OLVW
 OLVW Q
`

YRLGPDLQ ^
 1HZ/LVW 
 DYDLO OLVW 
 LI DYDLO  3XW1RGH  OLVW DYDLO 
 LI DYDLO  3XW1RGH  OLVW DYDLO 
 LI DYDLO  3XW1RGH  OLVW DYDLO 
 LI OLVW  3XW1RGH  DYDLO OLVW 
 LI OLVW  3XW1RGH  DYDLO OLVW 

|- 


 LQWL OLVW
 ZKLOH L  ^
  FRXW/!1RGH>L@'DWDHQGO
  L /!1RGH>L@QH[W
 `
`
QRGH 1/F  K0 ~– &%g &( # PM) # 1/F  
C 1'GN 1<T:  *(5+ &'(  % 
.I# 1' 
1<'<     ] I"      X
# QRGH>@  + OLVW  #" 1<TU .1GC *
 VT / =C!+      X
 

      A M*(  /% GDWD D /)  *     S2 i@7 .I 9/
< 
   :'*

.1<TU   
*2 9/
< 
M . 1/F  A &'  .I 9/
< MI &% QH[W &< .1/F
µ¶   * aO # GDWD D.)   V'<  ]   X
 R') P QRGH>@ 7 1<TU  M*'N" M
 X
# QRGH>@  + OLVW 1<TU PJCg &%gC .1<TU  M*'N" M D4fC *'g 9@ QH[W D.) 
1' 
1<'< ] I"  X
# QRGH>@  + OLVW 1<TU .  :'*
.I# 1' 
1<'< ] I"
:'*
.I# 1' 
1<'<    ] I"     X
# QRGH>@  OLVW 1<TU + . :'*
.I#

P @%7# .1 C!" VT /. 1'>!N $ *   aO &(  1<'<  S ] I+ 7 
OLVWOLVWOLVWOLVW $ *'m

.QRGH>@  + D'  !   g 1<TU + 1') &(   1 ' ?.  OLVW *'m
+ 1') P( &'    .I
M]/>/ /% +  =' > .I ? @ . C VT / &%g
 K J4" 1
0 *'[  =' > /% P #+ &%gC#
.M'F 1<TU 
 GDWD 1H[W
  
  
  
OLVW   
OLVW   
  
  
  
  
  
  
OLVW   
  
  
  
  
OLVW   
  
  
  
  
  
  
  
  
  
  
  
8–  

~- 

0;
19: 
    ˼˼
D2 *2I 9+ < #+ 1<TU   *2I 1A +  $4'. 1.%'D5 $/F I VT /. 1'2C '

&  F% 1<TU  =/ 9+   *  2I 1  A  .$/F   1 )  2+!  5 *  S2 1) e .G
 :
.1<TU i@7  QC #*
P1/F     1'2C  c> DYDLO 1<TU i@7 cC *
2    # P1/F     M*<  &(  1<T:  o 2
.D! ] .I & 2 
1<TU cC ' 9@ OLVW >! *'m
.I 2#
VWUXFW1RGH7\SH^
 LQW'DWD
 LQWQH[W
`
LQWQXPQRGHV 
VWUXFW//LVW^
 1RGH7\SH1RGH>@
 LQWDYDLO
`

//LVW /
LQWOLVW
&5 @F2) )DFWRULQJ 1'. s*    a W< $ c *> 1I/ ;   J
T; .I & 2     1<TU M! ] Y4*C 1.%'D
QC *
# (M) # 1'. I @F2 c *> &5) &RKHVLRQ ?  
s*  a ? @5# P(1T;
. 1.C *'[ 1G'  0C 1'. I c *>
.(*7 &%g {  DX C = $ c *>L QC! 1'4%) &RXSOLQJ
2,< / *
* <#-+
.I &  
QHZ 1 '.
C / 1<TU *      aO 1u'D .I &  1HZ/LVW c *>kC M> 1<T: /%
C +2      
/2     Kd # ./ QHZ//LVW :&%    g C 1 '.

%# P1<TU $4/% 
M*5 @  =/ 6'    
.I c *>L 
% + % # .OLVW D2/% ] * 1<TU *'m
    1 ' 6'      # 1)
1<TU /%
C
: 
&%g
YRLG1HZ/LVW ^
 / QHZ//LVW
 IRU LQWM MQXPQRGHVM /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 
 /!DYDLO 
 /LVW 
`

- 

2,< 2!$ ),7 * <# -`
c *>L + .M> MI 1 ' D      '      
1)
 1<T:  c MI e*FC c *>L @7 /
cC *      aO /% 2I 1[! 1)
 1<T: /%# h: + 1[! 1)
 1<T: 345 o  ' !
NC
1[! *'[ 1<TU 345 o + P 1 ' c *>L ' '       1[! 1<TU 345 o# . #Π      0 /!DYDLO 1<TU
.Q /!DYDLO M i@7 K! ' # 1<TU  1 MI **<
C c *>L /'0
LQW1HZ1RGH LQW9DO ^
 LI /!DYDLO  UHWXUQ
 LQWQ /!DYDLO
 /!DYDLO /!1RGH>Q@QH[W
 /!1RGH>Q@QH[W 
 /!1RGH>Q@'DWD 9DO
 UHWXUQQ
`

QRGH  
Q
 QRGH   QRGH   QRGH QXPQRGH 
/!DYDLO   «««« 

=–  

2,< 2!$ 34# -$


1HZ1RGH c *>L I
 02  OLVW 1<TU  QRGH M 1): M 5 9DO 1 'C M> MI 1 AL
2I .1< S M> MI < K
 K o  1 ' c *>L @7 ' ' PD
A K
' 
M =/ <

c MI OLVW Q k  
C# QRGH  + _*
F2      (D2/% 1 C  #+) 1<TU 1   M 1    A *4
&% g   5 QC #* &  K
' 0 QRGH J ! 1/F   *NZ =/  M 1 A 4]!+ o + POLVW 1<TU
.€–
QRGH Q 

9DOP
QRGH    QRGH P QRGH QXPQRGH 
/!DYDLO Q QH[W « 

>–  

YRLG3XW1RGH LQW9DOLQWQRGH ^QRGHM  C MI 1A


 LQWQ 1HZ1RGH 9DO 
 LI Q  UHWXUQ
 LI QRGH  ^1<TU 1   MI 1A
  /!1RGH>Q@QH[W OLVW

€- 

  OLVW Q
 `
  HOVH^
   /!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
   /!1RGH>QRGH@QH[W Q
  `
`
2! !
?  2!  ,7 -‚
W< 
Q M 9+ PQRGH M K! 7*    aO      X
 
M 7 QRGH M . 1C    0 M
 02  .D'.I & ; 
M . 1C0 M <
c *> b* 2 ./!1RGH>Q@QH[W QRGH s*g
: 
&%g C c *>L @7 
%2 P1<TU c *aO OLVW *
2# 3UHGHFHVVRU c *>L @7
LQW3UHGHFHVVRU LQWQRGH ^
 LI QRGH OLVW UHWXUQOLVW
 LQWQ OLVW
 ZKLOH /!1RGH>Q@QH[W  ^
  LI /!1RGH>Q@QH[W QRGH UHWXUQQ
  Q /!1RGH>Q@QH[W
 `
 UHWXUQ
`
.D 1C0 M I R<4 
M /% : 2I  1 ' c *>L @7 ' 
' @ ) 2!$ -‹
S M 7# PQRGH D<   ] * M . S 1C  0 M < ; OLVW 1<TU  MI <  0
K
' Kd # .S 3UHGHFHVVRU QRGH c *>L cI
 K
' @D P/!QRGH>S@QH[W QRGH s*g W< 

.„– &%g J2'  5 QRGH M K*C S M . 1' 
M K!  


DYDLO  P « Q 


QRGH   QRGH   QRGH Q


QRGH  
OLVW    

QRGH   QRGH   QRGH  

A–  

1<TU C D< # OLVW 1<TU  QRGH M QC #! =GC OLVW 1<TU  MI <   1'. I & %
  0
c *> j*
C /2 @D # PDYDLO 1)
1<TU 1   bX
 OLVW 1<TU  <0
 MI &5# .DYDLO
:&%g C QRGH M . )UHH1RGH 1AL

„- 

YRLG)UHH1RGH LQWQRGH ^
 /!1RGH>QRGH@'DWD 
 /!1RGH>QRGH@QH[W /!DYDLO
 /!DYDLO QRGH
`
. K! M <  C DYDLO # OLVW '
<TU 1'2C ˆ– &%g '#

DYDLO   P « Q 

QRGH   QRGH   QRGH   QRGH Q

OLVW    


QRGH   QRGH   QRGH  

B–  

: 
&%g C 1<TU  QRGH MI < c *> j*  % #
YRLG3RS1RGH LQWQRGH ^
 LQWS 3UHGHFHVVRU QRGH 
 LI S  UHWXUQ
 LI QRGH OLVW OLVW /!1RGH>QRGH@QH[W
  HOVH 
   /!1RGH>S@QH[W /!1RGH>QRGH@QH[W
 )UHH1RGH QRGH 
`
(– %
@D .V'<   '*
   A > *  2I 1  A K
 R'<C PI   '* 1* K' $ o 1<T: /%2
1AkC / Kd # 1<TU K' '* W# M; 1 '. V'< % ]< $GGB9DOXH c *> /%
C /2
:.  5 c *>L b* 2# .KTU =/  1 ' i@7
YRLG$GGB9DOXH LQW9DO ^
 LQWQQ
 Q Q OLVW
 LI /!1RGH>OLVW@'DWD!9DO Q HOVH
 GR^
  LI /!1RGH>Q@QH[W  ^Q QEUHDN`
  Q Q
  Q /!1RGH>Q@QH[W
 ` ZKLOH /!1RGH>Q@'DWD9DO 
 3XW1RGH 9DOQ 
`
:.  5 1<TU '*
W# M  14 1 ' # M K! ‹* 3ULQWB/LVW c *> b* 2#
ˆ- 

YRLG3ULQWB/LVW LQWOLVW ^
 LQWL OLVW
 ZKLOH L  ^
  FRXWL/!1RGH>L@'DWDHQGO
  L /!1RGH>L@QH[W
 `
`
:$ '.
C  /
.I  P P P P K' j'2 Kd # PQ *S2I 10 N  1<T: /%
C +2
$GGB9DOXH  
$GGB9DOXH  
$GGB9DOXH  
$GGB9DOXH  
$GGB9DOXH  
:.  5 3ULQWB/LVW 1<T: 1I^ c *> 1A  C .% Y4* V
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG

VWUXFW1RGH7\SH^
 LQW'DWD
 LQWQH[W
`
LQWQXPQRGHV 
VWUXFW//LVW^
 1RGH7\SH1RGH>@
 LQWDYDLO
`

//LVW /
LQWOLVW

YRLG1HZ/LVW ^
 / QHZ//LVW
 IRU LQWM MQXPQRGHVM 
  /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 
 /!DYDLO 
 OLVW 
`

YRLG)UHH1RGH LQWQRGH ^
 /!1RGH>QRGH@QH[W /!DYDLO
 /!DYDLO QRGH

pŠ- 

`

LQW3UHGHFHVVRU LQWQRGH ^
 LI QRGH OLVW UHWXUQOLVW
 LQWQ OLVW
 ZKLOH /!1RGH>Q@QH[W  ^
  LI /!1RGH>Q@QH[W QRGH UHWXUQQ
  Q /!1RGH>Q@QH[W
 `
 UHWXUQ
`

YRLG3RS1RGH LQWQRGH ^
 LQWS 3UHGHFHVVRU QRGH 
 LI S  UHWXUQ
 LI QRGH OLVW OLVW /!1RGH>QRGH@QH[W
  HOVH 
   /!1RGH>S@QH[W /!1RGH>QRGH@QH[W
 )UHH1RGH QRGH 
`

LQW1HZ1RGH LQW9DO ^
 LI /!DYDLO  UHWXUQ
 LQWQ /!DYDLO
 /!DYDLO /!1RGH>Q@QH[W
 /!1RGH>Q@QH[W 
 /!1RGH>Q@'DWD 9DO
 UHWXUQQ
`
YRLG3XW1RGH LQW9DOLQWQRGH ^
 LQWQ 1HZ1RGH 9DO 
 LI Q  UHWXUQ
 LI QRGH  ^
  /!1RGH>Q@QH[W OLVW
  OLVW Q
 `
  HOVH^
   /!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
   /!1RGH>QRGH@QH[W Q
  `
`

YRLG3ULQWB/LVW LQWOLVW ^

p- 

 LQWL OLVW
 ZKLOH L  ^
  FRXWL/!1RGH>L@'DWDHQGO
  L /!1RGH>L@QH[W
 `
`

YRLGPDLQ ^
 1HZ/LVW 
 3XW1RGH  
 3XW1RGH  
 3XW1RGH  
 3XW1RGH  
 3XW1RGH  
 3RS1RGH  
 3RS1RGH  
 3ULQWB/LVW OLVW 
 FRXWHQGOHQGO
 3ULQWB/LVW /!DYDLO 
`
:1' 
YT
2 Y4* ‹*'
  
  
  

  
  

&C @ " #   D3 @ ) 2!$ !;-r
$'. . @'F2 I M!I : /7  1<TU \F4  Q =/   D /  OLVW 1<TU  QRGH MI &4
:1' 

@'2 9+ PDYDLO 1<TU C D<  #C OLVW 1<TU  M i@7 <        :7  #" 1'.  -
> <   c *> b* 2 # .)UHH1RGH c *>L $ '.  @'F2 #C 3RS1RGH c *>L $ '. 
 :)UHH1RGH c *>L I
0 : 3RSB1RGH
YRLG3RSB1RGH LQWQRGH ^
 LQWS 3UHGHFHVVRU QRGH 
 LI S  UHWXUQ
 LI QRGH OLVW OLVW /!1RGH>QRGH@QH[W
  HOVH 

pp- 

   /!1RGH>S@QH[W /!1RGH>QRGH@QH[W
`
K
 + %  Q =/   WC 0 c *>L @'F2
C D<  K 
QRGH M 1A :7 1'4( 1'.  -
K     C c *>L @7 b* 2 # PQ M> MI /% #C % 3XW1RGH c *>z &d  c *>kC      X+
 :.  5 3XWB1RGH
YRLG3XWB1RGH LQWQLQWQRGH ^
 LI QRGH  ^
  /!1RGH>Q@QH[W OLVW
  OLVW Q
 `
  HOVH^
   /!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
   /!1RGH>QRGH@QH[W Q
  `
`
Y] % # P /
.I c *>L @7 @'F2
C K
 Q =/   D /  QRGH M &4 k  
C#
:.  5 c *>L @7 b* # &KDQB1RGH J' 02 ) # c *>kC '
'. '7
YRLG&KDB1RGH LQWQRGHLQWQ ^
 3RSB1RGH QRGH 
 3XWB1RGH QRGHQ 
`
E &F 2!
2!$ %9-
M . 1'  M 5 QRGH M =/ *''m /7 OLVW 1<TU  QRGH M C QRGH MI  
      
W      0 345 
M . 1'  M 5 QRGH M =/ *''m Kd # P&KDB1RGH QRGHQRGH 9+ PQRGH
:K        C c *>L @  7        02 PL 3UHGHFHVVRU QRGH R  ') &KDB1RGH QRGHL 9+ PQRGH M  
:.  5 c *>L @7 j*  % # 6ZDSB1RGH QRGHQRGH
YRLG6ZDSB1RGH LQWQRGHLQWQRGH ^
 LQWL 3UHGHFHVVRU QRGH 
 LI QRGH OLVW L 
 &KDB1RGH QRGHQRGH 
 &KDB1RGH QRGHL 
`
; J4+ 9+ P1<TU 1  QRGH =      A# ; 1<TU 1 C  QRGH M 345 o J4+ t):
.L    1 ' ]2

p- 

  G1$ 7 7 -]
1<TU *     S2I '*
c *> j*  22%  PM C MI 
     0 9@ 6ZDSB1RGH c *>L 2F*   C
$IF 1'e! /N .  ' 
   02    .1<TU &N ] QC #* *''m
C ? o K
 + % # P' e2 #+ I    '*
 D 
 # P1<TU   D2'C  ' '
' 

 '
' &5 14! .I 1'e! / i@7 / P'*
1'. I  5,33/(
*   2I 9+ D' K
  1.)*   &   4 +    
   : # !
N: 1'. I ! *%# P'*
s*   a W< ) 
.'*
. 'F  '' 


D 1)U M # 1<TU  L MI 2 345# P( &'       .I ' e2 '* 1<TU '* 4]!+ o
:R'<C PM D'* QH[W
M /!1RGH>L@QH[W  # /!1RGH>L@QH[W/!1RGH>M@QH[W
9+
L OLVW
ZKLOH L  ^
 M /!1RGH>L@QH[W
 LI M  /!1RGH>L@'DWD/!1RGH>M@'DWD 
  6ZDSB1RGH LM 
 L /!1RGH>L@QH[W
`

 *'m
 b* 2    @D P1<TU I  : 
    }27  ] $'. i@7 ! *% .I 5LSSOH 1'e! /N /
*2I  
 !/# P' 

 *2I &% !


N 1.)  /N 2I WUXH   IDOVH  J
' *'m
 &RQW 'G2
P>  1<TU   
: # !
N: 1'. I @'F2 ! *% M]#  9+ 8>  WUXH   *'m
@7 1 ' ]/ 
:.  5 $'. V#
&RQW IDOVH
L OLVW
ZKLOH L  ^
 M /!1RGH>L@QH[W
 LI M  /!1RGH>L@'DWD/!1RGH>M@'DWD ^
  6ZDSB1RGH LM 
  &RQW WUXH
 `
 L /!1RGH>L@QH[W
`
&%  g C 1<TU *
 
)  
  : ! *% K
'   J4+ ;2   &RQW *'m
C Q* ^*  a ! *% /%
C#
:.  5 OLVW 1<TU * 9@ 6RUWB/LVW c *>: j*  % # .V'<
YRLG6RUWB/LVW ^
 LQWML OLVW

p|- 

 ERRO&RQW
 GR^
  &RQW IDOVH
  L OLVW
  ZKLOH L  ^
   M /!1RGH>L@QH[W
   LI M  /!1RGH>L@'DWD/!1RGH>M@'DWD ^
    6ZDSB1RGH LM 
    &RQW WUXH
   `
   L /!1RGH>L@QH[W
  `
 `ZKLOH &RQW 
`
– %
& ' Y4* 1C
5 ' 2    Pp– (   P P P P : /
.I K'  1<T: 4/5 
:' e2 '* 1* D> *N ' # 1<TU i@7 K' N] .I
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG

VWUXFW1RGH7\SH^
 LQW'DWD
 LQWQH[W
`
LQWQXPQRGHV 
VWUXFW//LVW^
 1RGH7\SH1RGH>@
 LQWDYDLO
`

//LVW /
LQWOLVW

YRLG1HZ/LVW ^
 / QHZ//LVW
 IRU LQWM MQXPQRGHVM 
  /!1RGH>M@QH[W M
 /!1RGH>QXPQRGHV@QH[W 
 /!DYDLO 
 /LVW 
`

p~- 


YRLG)UHH1RGH LQWQRGH ^
 /!1RGH>QRGH@'DWD 
 /!1RGH>QRGH@QH[W /!DYDLO
 /!DYDLO QRGH
`

LQW3UHGHFHVVRU LQWQRGH ^
 LI QRGH OLVW UHWXUQOLVW
 LQWQ OLVW
 ZKLOH /!1RGH>Q@QH[W  ^
  LI /!1RGH>Q@QH[W QRGH UHWXUQQ
  Q /!1RGH>Q@QH[W
 `
 UHWXUQ
`

YRLG3RS1RGH LQWQRGH ^
 LQWS 3UHGHFHVVRU QRGH 
 LI S  UHWXUQ
 LI QRGH OLVW OLVW /!1RGH>QRGH@QH[W
  HOVH 
   /!1RGH>S@QH[W /!1RGH>QRGH@QH[W
 )UHH1RGH QRGH 
`

YRLG3RSB1RGH LQWQRGH ^
 LQWS 3UHGHFHVVRU QRGH 
 LI S  UHWXUQ
 LI QRGH OLVW OLVW /!1RGH>QRGH@QH[W
  HOVH 
   /!1RGH>S@QH[W /!1RGH>QRGH@QH[W
`

YRLG3XWB1RGH LQWQLQWQRGH ^
 LI QRGH  ^
  /!1RGH>Q@QH[W OLVW
  OLVW Q
 `HOVH^
   /!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
   /!1RGH>QRGH@QH[W Q
  `
`

p- 

YRLG&KDB1RGH LQWQRGHLQWQ ^
 3RSB1RGH QRGH 
 3XWB1RGH QRGHQ 
`

YRLG6ZDSB1RGH LQWQRGHLQWQRGH ^
 LQWL 3UHGHFHVVRU QRGH 
 LI QRGH OLVW L 
 &KDB1RGH QRGHQRGH 
 &KDB1RGH QRGHL 
`
LQW1HZ1RGH LQW9DO ^
 LI /!DYDLO  UHWXUQ
 LQWQ /!DYDLO
 /!DYDLO /!1RGH>Q@QH[W
 /!1RGH>Q@QH[W 
 /!1RGH>Q@'DWD 9DO
 UHWXUQQ
`
YRLG3XW1RGH LQW9DOLQWQRGH ^
 LQWQ 1HZ1RGH 9DO LI Q  UHWXUQ
 LI QRGH  ^
  /!1RGH>Q@QH[W OLVW
  OLVW Q
 `HOVH^
   /!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
   /!1RGH>QRGH@QH[W Q
  `
`

YRLG$GGB9DOXH LQW9DO ^
 LQWQQ
 Q Q OLVW
 LI /!1RGH>OLVW@'DWD!9DO Q HOVH
 GR^
  LI /!1RGH>Q@QH[W  ^Q QEUHDN`
  Q Q
  Q /!1RGH>Q@QH[W
 ` ZKLOH /!1RGH>Q@'DWD9DO 
 3XW1RGH 9DOQ 
`
YRLG3ULQWB/LVW LQWOLVW ^
 LQWL OLVW

p€- 

 ZKLOH L  ^
  FRXWL/!1RGH>L@'DWDHQGO
  L /!1RGH>L@QH[W
 `
 FRXWHQGOHQGO
`
YRLG6RUWB/LVW ^
 LQWML OLVW
 ERRO&RQW
 GR^
  &RQW IDOVH
  L OLVW
  ZKLOH L  ^
   M /!1RGH>L@QH[W
   LI M  /!1RGH>L@'DWD/!1RGH>M@'DWD ^
    6ZDSB1RGH LM 
    &RQW WUXH
   `
   L /!1RGH>L@QH[W
  `
 `ZKLOH &RQW 
`

YRLGPDLQ ^
 1HZ/LVW 
 OLVW 
 $GGB9DOXH  
 $GGB9DOXH  
 $GGB9DOXH  
 $GGB9DOXH  
 $GGB9DOXH  
 3ULQWB/LVW OLVW 
 6RUWB/LVW 
 3ULQWB/LVW OLVW  
`
!!!! 1<TU .I 6RUWB/LVW c *>L  5LSSOH K  C 1#* '*
1'e! /N & 
:.  5 !18//
2I P7UXH   1 ' i@7 ] # P&RQW G2 *'m
  )DOVH 1 ' 2   0 GR 1.) @'F2
C c !/
 C PK'.  
  1'. I 9+ @'F2 2  . 
 : 1'. I @'F2 ! *%   X P'
' 

 '
' 'C  
  c *>
! :1<TU .I ZKLOH L  1.) @'F2  C# .7UXH   &RQW 1 ' ]
       PLI M  « !
N:

p„- 

] # .&RQW 7UXH 1 ' V  # P!!!!!18// :.  5 V  
   !!!!18//
.!!!!!18// :.  5 4( ! *%
@'F2  C 1<TU V      # P>  GR 1.) @'F2
.I  *'N" ! *%
+ : .!!!!!18// :.  5 1<TU V 
  R ( ! *%
1;'
2C#
.1.<  ‹#* K
# &RQW )DOVH

pˆ- 
‫‪ -2‬ﺍﻟﺮﺗﻞ ﻭﲤﺜﻴﻠﻪ‬

‫اﻟﺮﺗﻞ ﻫﻮ ﺑﻨﻴﺔ ﺑﻴﺎ ت ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺴ ـ ـ ـ ـ ــﺘﺨﺪم ﻟﻠﺘﻌﺒﲑ ﻋﻦ ﺣﺎﻻت ﻣﻦ اﻟﻮاﻗﻊ اﻟﻔﻌﻠﻲ‪ ،‬ﻣﺜﻞ اﻟﺮﺗﻞ ﻋﻠﻰ أﺣﺪ ﻧﻮاﻓﺬ‬
‫ﺑﻨﻚ‪ ،‬أول زﺑﻮن ﻳﺼـ ـ ــﻞ ﺳـ ـ ــﻴﻜﻮن أول زﺑﻮن ﺳـ ـ ــﻴﺨﺪم‪ .‬وﻛﺬﻟﻚ إن ﺧﻄﻮط اﻻﻧﺘﻈﺎر ﻫﻲ ﺧﻄﻮط ﺣﺮﻛﻴﺔ ﺗﺘﻐﲑ أﻃﻮاﳍﺎ‬
‫ﺣﺴﺐ اﳋﺪﻣﺔ‪ ،‬ﻣﺜﻞ اﻧﺘﻈﺎر اﻟﺴﻴﺎرات ﻋﻠﻰ إﺷﺎرة اﳌﺮور اﻟﱵ ﳝﻜﻦ ﲤﺜﻴﻠﻬﺎ ﺑﻮﺳﺎﻃﺔ اﻟﺮﺗﻞ‪ .‬ﻳﻌﻄﻲ اﻟﺮﺗﻞ اﻟﻌﻨﺎﺻﺮ ﺑﻨﻔﺲ‬
‫اﻟﱰﺗﻴﺐ اﻟﺬي ﺗﺪﺧﻞ ﻓﻴﻪ إﱃ اﻟﺮﺗﻞ؛ أي اﻟﻌﻨﺼﺮ اﳌﺪﺧﻞ أوﻻً إﱃ اﻟﺮﺗﻞ ﻫﻮ اﻟﻌﻨﺼﺮ اﳌﻨﺘﺰع أوﻻً ﻣﻦ اﻟﺮﺗﻞ‪ .‬ﳍﺬا اﻟﺴﺒﺐ‬
‫أﺣﻴﺎ ً ﻳﺪﻋﻰ اﻟﺮﺗﻞ ﺑﻼﺋﺤﺔ ‪ ،FIFO‬ﻋﻠﻰ ﻋﻜﺲ اﳌﻜﺪس اﻟﺬي ﻫﻮ ﻻﺋﺤﺔ ‪ .LIFO‬وﺑﺸ ــﻜﻞ ﻣﺸ ــﺎﺑﻪ ﻟﻠﻌﻤﻠﻴﺎت ﻋﻠﻰ‬
‫اﳌﻜﺪس إن اﻟﻌﻤﻠﻴﺎت اﻷﺳﺎﺳﻴﺔ اﻟﱵ ﺗﻄﺒﻖ ﻋﻠﻰ اﻟﺮﺗﻞ ﻫﻲ إدﺧﺎل ﻋﻨﺼﺮ إﱃ ذﻳﻞ اﻟﺮﺗﻞ‪ ،‬وﺳﺤﺐ ﻋﻨﺼﺮ ﻣﻦ ﻣﻘﺪﻣﺔ‬
‫اﻟﺮﺗﻞ‪ ،‬واﺧﺘﺒﺎر ﺣﺎﻻت اﳉﻔﺎف واﻟﻄﻔﺤﺎن ﻟﻠﺮﺗﻞ‪.‬‬
‫‪rear‬‬ ‫اﻟﺮﺗﻞ ‪ queue‬ﻫﻮ ﺣﻴﺰ ﻣﺮﺗﺐ ﻣﻦ اﻟﻌﻨﺎﺻﺮ‪ ،‬ﳝﻜﻦ إدﺧﺎل ﻋﻨﺎﺻﺮ إﻟﻴﻪ ﰲ ﺎﻳﺔ اﻟﺮﺗﻞ اﳌﺴﻤﺎة ﺑﺬﻳﻞ اﻟﺮﺗﻞ‬
‫وإﻟﻐﺎء اﻟﻌﻨﺎﺻـ ـ ــﺮ ﻣﻦ اﻟﻨﻬﺎﻳﺔ اﻷﺧﺮى ﺗﺪﻋﻰ ﲟﻘﺪﻣﺔ اﻟﺮﺗﻞ ‪ ،front‬ﺑﻴﻨﻤﺎ ﳝﻜﻦ‪ .‬ﻳﺒﲔ اﻟﺸـ ـ ــﻜﻞ ‪ ١–٢‬رﺗﻼً ﻓﻴﻪ )‪ (a‬ﳝﺜﻞ‬
‫ﺣﺎﻟﺔ رﺗﻼً ﻣﺘﻀــﻤﻨﺎً ﺛﻼﺛﺔ ﻋﻨﺎﺻــﺮ ‪ ،A, B, C‬ﺣﻴﺚ اﻟﻌﻨﺼــﺮ ‪ A‬ﰲ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ واﻟﻌﻨﺼــﺮ ‪ C‬ﰲ ذﻳﻞ اﻟﺮﺗﻞ‪ .‬ﻳﺘﻢ إﻟﻐﺎء‬
‫ﻋﻨﺼــﺮ ﻣﻦ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ )‪(b‬؛ ﺣﻴﺚ ﰎ إﻟﻐﺎء اﻟﻌﻨﺼــﺮ ‪ A‬ﻣﻦ اﳌﻘﺪﻣﺔ‪ .‬وأﺻــﺒﺢ اﻟﻌﻨﺼــﺮ ‪ B‬ﻫﻮ اﻟﺬي‬
‫ﳝﺜﻞ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪ .‬وﻳﺒﲔ )‪ (c‬ﰲ اﻟﺸﻜﻞ اﻟﺮﺗﻞ اﻟﺴﺎﺑﻖ ﺑﻌﺪ إﺿﺎﻓﺔ اﻟﻌﻨﺼﺮﻳﻦ ‪ D‬و ‪ E‬ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪.‬‬

‫اﻟﺸﻜﻞ ‪١–٢‬‬

‫ﲟﺎ أن اﻟﻌﻨﺼ ـ ــﺮ ‪ D‬أُدﺧﻞ إﱃ اﻟﺮﺗﻞ ﻗﺒﻞ ‪ E‬ﻓﺈن ﻫﺬا اﻟﻌﻨﺼ ـ ــﺮ ﻳﺰال ﻣﻦ اﻟﺮﺗﻞ ﻗﺒﻞ اﻟﻌﻨﺼ ـ ــﺮ ‪E‬؛ أي إن اﻟﻌﻨﺼ ـ ــﺮ‬
‫اﳌﺪﺧﻞ أوﻻً إﱃ اﻟﺮﺗﻞ ﻫﻮ اﻟﻌﻨﺼﺮ اﳌﻨﺘﺰع أوﻻً ﻣﻦ اﻟﺮﺗﻞ‪ .‬ﳍﺬا اﻟﺴﺒﺐ أﺣﻴﺎ ً ﻳﺪﻋﻰ اﻟﺮﺗﻞ ﺑﻼﺋﺤﺔ ‪ ،FIFO‬ﻋﻠﻰ ﻋﻜﺲ‬
‫اﳌﻜﺪس اﻟﺬي ﻫﻮ ﻻﺋﺤﺔ ‪ .LIFO‬وﻟﺘﻮﺿــﻴﺢ اﻟﺮﺗﻞ ﺑﺸــﻜﻞ أﻓﻀــﻞ‪ ،‬ﻟﻨﺘﺼــﻮر أن ﻧﻈﺎم ﻣﻌﻠﻮﻣﺎت ﻣﺴــﺘﻮدع ﻟﺒﻴﻊ اﻷدوﻳﺔ‬
‫ﻳﺘﻠﻘﻰ ﺷﺤﻨﺎت ﻣﻦ ﻣﻌﺎﻣﻞ اﻷدوﻳﺔ وﻳﺒﻴﻌﻬﺎ إﱃ اﻟﺼﻴﺪﻟﻴﺎت‪ ،‬وﲟﺎ أن ﻣﺪة ﺻﻼﺣﻴﺎت اﻷدوﻳﺔ ﺗﻨﺘﻬﻲ ﺧﻼل ﻓﱰة ﳏﺪدة‬
‫ﻓﻤﻦ ﻣﺼ ـ ــﻠﺤﺔ إدارة ﻣﺒﻴﻌﺎت اﳌﺴ ـ ــﺘﻮدع ﺟﻴﻞ ﺑﻴﻊ اﻷدوﻳﺔ اﻟﺪاﺧﻠﺔ أوﻻً إﱃ اﳌﺴ ـ ــﺘﻮدع ﻟﻔﱰة ﺗﻨﺘﻬﻲ ﻣﻌﻬﺎ اﻟﺸ ـ ــﺤﻨﺎت‬
‫اﻟﺪاﺧﻠﺔ ﻣﻦ ﻗﺒﻞ؛ أي إن ﻣﻦ ﻣﺼــﻠﺤﺔ إدارة اﳌﺒﻴﻌﺎت وﺿــﻊ ﺷــﺤﻨﺎت اﻷدوﻳﺔ ﰲ رﺗﻞ ﲝﻴﺚ ﺗﻮﺿــﻊ ﻛﻞ ﺷــﺤﻨﺔ داﺧﻠﺔ‬

‫‪١-٢‬‬
‫إﱃ اﳌﺴﺘﻮدع ﰲ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪ ،‬وﻛﻞ ﺷﺤﻨﺔ ﻣﺒﺎﻋﺔ ﳚﺐ إﺧﺮاﺟﻬﺎ ﻣﻦ ﻣﺆﺧﺮة اﻟﺮﺗﻞ‪.‬‬
‫ﻻ ﲣﺘﻠﻒ اﻟﻌﻤﻠﻴ ــﺎت ﰲ اﳌﻜ ــﺪس ﻛﺜﲑاً ﻋﻦ اﻟﻌﻤﻠﻴ ــﺎت ﰲ اﻟﺮﺗ ــﻞ‪ ،‬وﳍ ــﺬا ﻟﻦ ﳜﺘﻠﻒ ﲢﻠﻴ ــﻞ ﺗﻌﻠﻴﻤ ــﺎت ﻫ ــﺬﻩ‬
‫اﻹﺟﺮاءات ﻛﺜﲑاً ﻋﻦ ﻋﻤﻠﻴﺎت اﳌﻜﺪس‪ .‬وﺳ ــﻨﻮﺿ ــﺢ ﰲ ﻣﺎ ﻳﻠﻲ ﲨﻴﻊ ﻋﻤﻠﻴﺎت ﻫﺬﻩ اﻹﺟﺮاءات ﻣﺒﺎﺷــﺮة ﺑﻠﻐﺔ ‪Visual‬‬
‫‪.C++‬‬
‫‪ -2-1‬ﲤﺜﻴﻞ اﻟﺮﺗﻞ ﺑﻠﻐﺔ ‪Visual C++‬‬
‫ﳝﻜﻦ اﺳ ـ ــﺘﻌﻤﺎل ﺑﻨﻴﺔ ﻣﺼ ـ ــﻔﻮﻓﺔ ﻟﺘﺨﺰﻳﻦ ﻋﻨﺎﺻ ـ ــﺮ اﻟﺮﺗﻞ‪ ،‬إﺿ ـ ــﺎﻓﺔ إﱃ ذﻟﻚ‪ ،‬ﻳﻠﺰم ﻣﺘﻐﲑﻳﻦ ‪ front‬و ‪ rear‬ﳊﻔﻆ‬
‫ﻣﻮاﻗﻊ اﻟﻌﻨﺼـ ـ ـ ـﺮﻳﻦ اﻷول واﻷﺧﲑ ﰲ اﻟﺮﺗﻞ ﻋﻠﻰ اﻟﱰﺗﻴﺐ ﺿ ـ ـ ــﻤﻦ اﳌﺼ ـ ـ ــﻔﻮﻓﺔ‪ .‬ﻟﺘﺒﺴ ـ ـ ــﻴﻂ إﺟﺮاءات ﺗﺪاول ﺑﻴﺎ ت اﻟﺮﺗﻞ‬
‫ﺳـ ـ ـ ــﻨﻌﺮف ﻋﻦ ﻣﺆﺷـ ـ ـ ــﺮ رﺗﻞ ‪ q‬ﰲ اﻟﱪ ﻣﺞ‪ ،‬ﲝﻴﺚ ﺗﻌﻤﻞ ﻛﻞ إﺟﺮاءات اﻟﺮﺗﻞ ﻋﻠﻰ ﺗﻌﺪﻳﻞ ﺑﻴﺎ ت ﻫﺬا اﻟﺮﺗﻞ‪ .‬وﻟﻨﻜﺘﺐ‬
‫اﻟﺘﺼﺮﳛﺎت اﻟﺘﺎﻟﻴﺔ ﻟﺮﺗﻞ ذو ﻋﻨﺎﺻﺮ ﻣﻦ ﻧﻮع أﻋﺪاد ﺻﺤﻴﺤﺔ‪:‬‬
‫{ ‪struct queue‬‬
‫;]‪char item[101‬‬
‫;‪int maxqueue‬‬
‫;‪int front, rear‬‬
‫;‪} q‬‬
‫ﻟﻄﺒﻊ‪ ،‬إن اﺳـ ــﺘﺨﺪام اﳌﺼ ــﻔﻮﻓﺔ ﳊﻔﻆ ﻋﻨﺎﺻ ــﺮ اﻟﺮﺗﻞ ﻳﻌﻄﻲ إﻣﻜﺎﻧﻴﺔ اﻟﻄﻔﺤﺎن إذا اﺣﺘﻮى اﻟﺮﺗﻞ ﻋﻠﻰ ﻋﻨﺎﺻ ــﺮ‬
‫أﻛﺜﺮ ﳑﺎ ﻫﻮ ﳐﺼﺺ ﻟﻠﻤﺼﻔﻮﻓﺔ‪ ،‬ﰎ ﺗﻌﺮﻳﻒ اﳌﺘﻐﲑ ‪ q‬ﰲ اﻟﱪ ﻣﺞ ﻣﻦ ﳕﻂ ‪ queue‬ﻛﻤﺘﻐﲑ ﻛﻠﻲ‪.‬‬
‫‪ -2-2‬اﻟﻌﻤﻠﻴﺎت اﻷوﻟﻴﺔ ﻋﻠﻰ اﻟﺮﺗﻞ‬
‫ﲝﺴـ ــﺐ ﻣﻔﻬﻮم اﻟﺮﺗﻞ ﳝﻜﻨﻨﺎ ﺗﻌﺮﻳﻒ ﻋﻤﻠﻴﺘﲔ أﺳـ ــﺎﺳـ ــﻴﺘﲔ ﻋﻠﻴﻪ‪ ،‬وﳘﺎ‪ :‬إﺿـ ــﺎﻓﺔ ﻋﻨﺼـ ــﺮ إﱃ ﺎﻳﺔ اﻟﺮﺗﻞ وﺳـ ــﺤﺐ‬
‫ﻋﻨﺼـ ـ ـ ــﺮ ﻣﻦ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪ ،‬ﻳﻀـ ـ ـ ــﺎف إﱃ ﻫﺬﻩ اﻟﻌﻤﻠﻴﺎت ﻋﻤﻠﻴﺔ اﺧﺘﺒﺎر ﺟﻔﺎف اﻟﺮﺗﻞ وﻛﺬﻟﻚ ﻋﻤﻠﻴﺔ اﺧﺘﺒﺎر ﻃﻔﺤﺎﻧﻪ‪.‬‬
‫ﺳﻨﻌﺮف ﻫﺬﻩ اﻟﻌﻤﻠﻴﺎت ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫اﻟﻌﻤﻠﻴﺔ )‪ insert(q, x‬ﺗُﺪﺧﻞ اﻟﻌﻨﺼﺮ ‪ x‬ﰲ ذﻳﻞ اﻟﺮﺗﻞ ‪.q‬‬ ‫‪-1‬‬
‫اﻟﻌﻤﻠﻴﺔ )‪ remove(q‬ﺗَﻨﺰع ﻋﻨﺼﺮ اﳌﻘﺪﻣﺔ ﻣﻦ اﻟﺮﺗﻞ ‪ q‬وﺗﻀﻊ ﻗﻴﻤﺔ اﻟﻌﻨﺼﺮ ﲢﺖ اﳌﺘﺤﻮل ‪.x‬‬ ‫‪-2‬‬
‫اﻟﻌﻤﻠﻴﺔ )‪ empty(q‬ﺗﻌﻄﻲ ﻗﻴﻤﺔ ‪ true‬أو ‪ false‬اﻋﺘﻤﺎداً ﻋﻠﻰ ﻣﺎ إذا ﻛﺎن اﻟﺮﺗﻞ ﻓﺎرﻏﺎً أم ﻻ‪.‬‬ ‫‪-3‬‬
‫اﻟﻌﻤﻠﻴﺔ )‪ flow(q‬ﺗﻌﻄﻲ ﻗﻴﻤﺔ ‪ true‬أو ‪ false‬اﻋﺘﻤﺎداً ﻋﻠﻰ ﻃﻔﺤﺎن اﻟﺮﺗﻞ أم ﻻ‪.‬‬ ‫‪-4‬‬
‫ﻟﺘﺸﻜﻴﻞ اﻟﺮﺗﻞ اﳌﺒﲔ ﰲ اﻟﺸﻜﻞ ‪ ١–٢‬ﻧﻜﺘﺐ اﻟﺘﻌﺎﻗﺐ اﻟﺘﺎﱄ ﻟﻠﻌﻤﻠﻴﺎت )وﺑﻔﺮض أن اﻟﺮﺗﻞ ﰲ اﻟﺒﺪاﻳﺔ ﻓﺎرغ(‪:‬‬
‫; )‪insert(q, A‬‬
‫; )‪insert(q, B‬‬
‫; )‪insert(q, C‬‬ ‫)‪(a‬‬
‫; )‪x= remove(q‬‬ ‫)‪(b‬‬
‫; )‪insert(q, D‬‬
‫; )‪insert(q, E‬‬ ‫)‪(c‬‬

‫‪٢-٢‬‬
‫‪q‬‬ ‫ﺑﺘﺠﺎﻫﻞ اﺣﺘﻤﺎل اﻟﻄﻔﺤﺎن واﳉﻔﺎف ﻧﺴـ ـ ــﺘﻄﻴﻊ اﻟﺘﻌﺒﲑ ﻋﻦ اﻟﻌﻤﻠﻴﺔ )‪ insert(q,x‬ﺑﻮﺳ ـ ــﺎﻃﺔ إﺟﺮاء ﻳﻌﻴﺪ اﻟﺮﺗﻞ‬
‫)ﻋﻠﻰ اﻋﺘﺒﺎر أن ‪ q‬ﻣﺘﻐﲑ ﻛﻠﻲ ﰲ اﻟﱪ ﻣﺞ( ﲝﺎﻟﺘﻪ اﳉﺪﻳﺪة ﺑﻌﺪ إﺿ ـ ـ ـ ـ ــﺎﻓﺔ اﻟﻌﻨﺼ ـ ـ ـ ـ ــﺮ اﳉﺪﻳﺪ ﺑﻌﺪ ﲢﺮﻳﻚ ﻣﺆﺧﺮة اﻟﺮﺗﻞ‪.‬‬
‫وﳝﻜﻦ ﻛﺘﺎﺑﺔ ﻫﺬا اﻹﺟﺮاء ﻟﺸﻜﻞ‪:‬‬
‫{ )‪void insert(char x‬‬
‫;‪q.rear=q.rear+1‬‬
‫;‪q.item[q.rear] = x‬‬
‫;}‬
‫وﻧﻌﱪ ﻋﻦ ﻋﻤﻠﻴﺔ ﺣﺬف ﻋﻨﺼﺮ ﻣﻦ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ )(‪ pop‬ﺿﺎﻓﺔ اﻟﺮﻗﻢ ‪ 1‬إﱃ اﳌﺘﻐﲑ اﳌﺸﲑ إﱃ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪ .‬وﳝﻜﻦ‬
‫ﻛﺘﺎﺑﺔ اﻹﺟﺮاء ﻟﺸﻜﻞ‪:‬‬
‫{ )(‪char remove‬‬
‫]‪char x=q.item[q.front‬‬
‫;‪q.front=q.front+1‬‬
‫;‪return x‬‬
‫;}‬
‫ﻳﻌﻴﺪ اﻹﺟﺮاء اﻟﺴﺎﺑﻖ ﻋﻨﺼﺮ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ وﻳﻨﻘﻞ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ إﱃ اﻟﻌﻨﺼﺮ اﻟﺘﺎﱄ ﳌﻘﺪﻣﺘﻪ اﳊﺎﻟﻴﺔ ﺑﻌﺪ ﺳﺤﺐ اﻟﻌﻨﺼﺮ‪.‬‬
‫ﺳﻨﺨﺼﺺ ﺑﺸﻜﻞ أوﱄ اﻟﻘﻴﻤﺔ ‪ 0‬ﻟﻠﻤﺘﻐﲑ ‪ ،q.rear‬أﻣﺎ ﻗﻴﻤﺔ اﳌﺘﻐﲑ ‪ q.front‬ﻓﺴﻨﺨﺼﺼﻬﺎ ﻟﻘﻴﻤﺔ ‪ ،1‬وﻳﻜﻮن‬
‫اﻟﺮﺗﻞ ﻓﺎرﻏﺎً إذا ﲢﻘﻖ اﻟﺸﺮط اﻟﺘﺎﱄ‪:‬‬
‫‪q.rear < q.front‬‬
‫وﺑﻨﺎءً ﻋﻠﻴﻪ‪ ،‬ﻧﺴﺘﻄﻴﻊ ﲢﺪﻳﺪ ﻋﺪد اﻟﻌﻨﺎﺻﺮ ﰲ اﻟﺮﺗﻞ ﰲ أي ﳊﻈﺔ ﺑﻮﺳﺎﻃﺔ اﻟﻌﻼﻗﺔ اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪q.rear – q.front+1‬‬
‫ﻟﻨﺮى ﻣﺎ اﻟﺬي ﳝﻜﻦ أن ﳛﺪث ﲢﺖ ﻫﺬا اﻟﺘﻤﺜﻴﻞ‪ .‬ﻳﺒﲔ اﻟﺸ ـ ــﻜﻞ ‪ ٢–٢‬ﻣﺼ ـ ــﻔﻮﻓﺔ ﻣﺆﻟﻔﺔ ﻣﻦ ﲬﺴ ـ ــﺔ ﻋﻨﺎﺻ ـ ــﺮ‬
‫ﻣﺴــﺘﺨﺪﻣﺔ ﻟﺘﻤﺜﻴﻞ اﻟﺮﺗﻞ )أي ‪ .(maxqueue=5‬ﺑﺸــﻜﻞ أوﱄ‪ ،‬ﻟﺪﻳﻨﺎ اﻟﺮﺗﻞ ﻓﺎرغ ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ )‪ .(a‬وﻳﻌﱪ )‪ (b‬ﻋﻦ‬
‫إدﺧﺎل اﻟﻌﻨﺎﺻــﺮ ‪ A, B ,C‬إﱃ اﻟﺮﺗﻞ ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪ .‬ﻛﻤﺎ وﻳﻌﱪ )‪ (c‬ﻋﻦ اﻟﺮﺗﻞ اﻟﺴــﺎﺑﻖ ﺑﻌﺪ ﺳــﺤﺐ اﻟﻌﻨﺼ ـﺮﻳﻦ ‪ A‬و ‪B‬‬
‫ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪.‬‬

‫‪٣-٢‬‬
‫اﻟﺸﻜﻞ ‪٢–٢‬‬

‫أﻣﺎ )‪ (d‬ﻓﻴﻌﱪ ﻋﻦ اﻟﺮﺗﻞ اﻟﺴ ــﺎﺑﻖ ﺑﻌﺪ إﺿ ــﺎﻓﺔ اﻟﻌﻨﺼـ ـﺮﻳﻦ ‪ D‬و ‪ E‬ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪ ،‬وﻫﻜﺬا ﻳﻮﺟﺪ ‪ 5-3+1=3‬ﻓﻘﻂ‬
‫ﻣﻦ اﻟﻌﻨﺎﺻــﺮ ﰲ اﻟﺮﺗﻞ‪ .‬ﻹدﺧﺎل اﻟﻌﻨﺼــﺮ ‪ F‬إﱃ اﻟﺮﺗﻞ‪ ،‬ﻓﺈﻧﻪ ﳚﺐ ز دة ‪ q.rear‬ﲟﻘﺪار واﺣﺪ ﻟﻴﺼــﺒﺢ ‪ 6‬وﻣﻦ ﰒ وﺿــﻊ‬
‫اﻟﻌﻨﺼ ـ ــﺮ ﰲ اﳊﺠﺮة ]‪ . q.item[6‬ﻟﻜﻦ ‪ q.item‬ﻫﻲ ﻣﺼ ـ ــﻔﻮﻓﺔ ﻣﺆﻟﻔﺔ ﻣﻦ ﲬﺴ ـ ــﺔ ﻋﻨﺎﺻ ـ ــﺮ ﻓﻘﻂ‪ ،‬ﻟﺬﻟﻚ ﻻ ﻧﺴ ـ ــﺘﻄﻴﻊ‬
‫إدﺧﺎل اﻟﻌﻨﺼﺮ ‪ F‬إﱃ اﻟﺮﺗﻞ ﻋﻠﻰ اﻟﺮﻏﻢ ﻣﻦ أﻧﻪ ﻳﻮﺟﺪ ﺣﺠﺮات ﻓﺎرﻏﺔ ﰲ اﳌﺼﻔﻮﻓﺔ‪.‬‬
‫أﺣﺪ اﳊﻠﻮل ﻫﻮ ﺗﻌﺪﻳﻞ ﻋﻤﻠﻴﺔ ﻧﺰع ﻋﻨﺼــﺮ ﻣﻦ اﻟﺮﺗﻞ ﻟﺘﺼــﺒﺢ ﻋﻠﻰ اﻟﺸــﻜﻞ اﻟﺘﺎﱄ‪ :‬ﻋﻨﺪﻣﺎ ﻳُﺰال ﻋﻨﺼــﺮ ﻓﺈن اﻟﺮﺗﻞ‬
‫ﻳُﺰاح ﻛﺎﻣﻼً إﱃ ﺑﺪاﻳﺔ اﳌﺼــﻔﻮﻓﺔ‪ ،‬واﻟﻌﻤﻠﻴﺔ )(‪) remove‬ﺑﻌﺪ ﻋﻤﻠﻴﺔ ﻗﺮاءة اﻟﻌﻨﺼــﺮ ﺳــﺘﺨﺪام ‪ (pop‬ﻳﻌﱪ ﻋﻨﻬﺎ ﺑﻮﺳــﺎﻃﺔ‬
‫اﻟﻌﺒﺎرات اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫)‪for (i:= 1; i< q.rear; i++‬‬
‫; ]‪q.item[i] = q.item[i+1‬‬
‫‪q.rear :=q.rear-1‬‬
‫ﻧﻔﱰض ﰲ ﻫﺬﻩ اﳊﺎﻟﺔ أن ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ ﻫﻲ داﺋﻤﺎً اﻟﻌﻨﺼﺮ اﻷول ﰲ اﳌﺼﻔﻮﻓﺔ‪ ،‬ﻟﺬﻟﻚ ﻳﺼﺒﺢ اﳊﻘﻞ ‪ front‬ﻏﲑ‬
‫ﺿ ــﺮوري ﻋﻨﺪ اﻟﺘﺼ ـ ـﺮﻳﺢ ﻋﻦ اﻟﺮﺗﻞ‪ .‬ﻋﻨﺪﺋﺬ ﻳﻜﻮن اﻟﺮﺗﻞ ﻓﺎرﻏﺎً إذا ﻛﺎﻧﺖ ﻗﻴﻤﺔ ‪ q.rear‬ﺗﺴ ــﺎوي اﻟﺼ ــﻔﺮ‪ .‬ﻳﺒﲔ اﻟﺸ ــﻜﻞ‬
‫‪ ٣–٢‬اﻟﺮﺗﻞ اﳌﻌﻄﻰ ﰲ اﻟﺸﻜﻞ ‪ ٢–٢‬ﲢﺖ ﻫﺬا اﻟﺘﻤﺜﻴﻞ اﳉﺪﻳﺪ‪ .‬ﺑﺸﻜﻞ أوﱄ‪ ،‬إن اﻟﺮﺗﻞ اﳌﺒﲔ ﰲ اﻟﺸﻜﻞ )‪ (a‬ﻓﺎرﻏﺎً‪.‬‬
‫وﻳﻌﱪ اﻟﺸ ــﻜﻞ )‪ (b‬ﻋﻦ إدﺧﺎل اﻟﻌﻨﺎﺻ ــﺮ ‪ A‬و ‪ B‬و ‪ C‬إﱃ اﻟﺮﺗﻞ ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪ .‬وﻳﻌﱪ اﻟﺸ ــﻜﻞ )‪ (c‬ﻋﻦ اﻟﺮﺗﻞ اﻟﺴ ــﺎﺑﻖ‬
‫ﺑﻌﺪ ﺳ ــﺤﺐ اﻟﻌﻨﺼـ ـﺮﻳﻦ ‪ A‬و ‪ B‬ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪ ،‬ﺣﻴﺚ أﻧﻪ ﻳﺘﻢ إزاﺣﺔ ﲨﻴﻊ ﻋﻨﺎﺻ ــﺮ اﻟﺮﺗﻞ إﱃ ﻣﻘﺪﻣﺔ اﳌﺼ ــﻔﻮﻓﺔ ﰲ ﻛﻞ‬
‫ﻣﺮة ﻳﺘﻢ ﻓﻴﻬﺎ ﻧﺰع ﻋﻨﺼﺮ‪ .‬أﻣﺎ اﻟﺸﻜﻞ )‪ (d‬ﻓﻴﻌﱪ ﻋﻦ اﻟﺮﺗﻞ اﻟﺴﺎﺑﻖ ﺑﻌﺪ إﺿﺎﻓﺔ اﻟﻌﻨﺼﺮﻳﻦ ‪ D‬و ‪ E‬ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪ .‬واﻵن‬
‫ﻟﻮ أرد إدﺧﺎل اﻟﻌﻨﺼﺮ ‪ F‬إﱃ اﻟﺮﺗﻞ ﻳُﺼﺒﺢ ذﻟﻚ ﳑﻜﻨﺎً‪.‬‬

‫‪٤-٢‬‬
‫اﻟﺸﻜﻞ ‪٣–٢‬‬

‫ﻫﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻏﲑ ﻓﻌﺎﻟﺔ ﻛﺜﲑاً ﻷن ﻛﻞ ﻋﻤﻠﻴﺔ إﻟﻐﺎء ﻋﻨﺼ ـ ــﺮ ﺗﺘﻄﻠﺐ ﲢﺮﻳﻚ ﲨﻴﻊ اﻟﻌﻨﺎﺻ ـ ــﺮ اﳌﺘﺒﻘﻴﺔ ﰲ اﻟﺮﺗﻞ‪ .‬إذا‬
‫ﻛﺎن اﻟﺮﺗﻞ ﻣﺘﻀــﻤﻨﺎً ‪ 500‬أو ‪ 1000‬ﻋﻨﺼــﺮ ﻋﻠﻰ ﺳــﺒﻴﻞ اﳌﺜﺎل‪ ،‬ﻓﺈﻧﻨﺎ ﺳــﻨﺤﺘﺎج إﱃ زﻣﻦ ﻟﺘﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ اﻟﺘﺤﺮﻳﻚ‪ .‬إﺿــﺎﻓﺔ‬
‫إﱃ ذﻟﻚ‪ ،‬وﲝﺴ ـ ــﺐ ﺗﻌﺮﻳﻒ ﻋﻤﻠﻴﺔ اﻹﻟﻐﺎء ﻓﻬﻲ ﺗﺘﻀ ـ ــﻤﻦ ﻣﻌﺎﳉﺔ ﻋﻨﺼ ـ ــﺮ واﺣﺪ ﻓﻘﻂ‪ ،‬أﻣﺎ ﰲ ﻫﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻓﺈﻧﻨﺎ ﳔﺮج‬
‫ﻋﻦ ﻫﺬا اﻟﺘﻌﺮﻳﻒ وﻧﻌﺎﰿ ﻋﺪة ﻋﻨﺎﺻﺮ‪.‬‬
‫ﻫﻨﺎك ﺣﻞ آﺧﺮ‪ ،‬وﻫﻮ اﺳ ـ ـ ــﺘﻌﻤﺎل اﳌﺼ ـ ـ ــﻔﻮﻓﺔ اﻟﱵ ﲢﻔﻆ ﻋﻨﺎﺻ ـ ـ ــﺮ اﻟﺮﺗﻞ ﻛﺨﻂ داﺋﺮي ﺑﺪﻻً ﻋﻦ ﺣﺎﻟﺘﻬﺎ اﻟﺪاﺋﻤﺔ‬
‫ﻛﺨﻂ ﻣﺴ ــﺘﻘﻴﻢ‪ .‬ﰲ ﻫﺬﻩ اﳊﺎﻟﺔ‪ ،‬ﺳ ــﻨﺘﺨﻴﻞ اﻟﻌﻨﺼ ــﺮ اﻷول ﻟﻠﻤﺼ ــﻔﻮﻓﺔ وﻛﺄﻧﻪ ﻳﻠﻲ ﻣﺒﺎﺷ ــﺮة اﻟﻌﻨﺼ ــﺮ اﻷﺧﲑ‪ ،‬وﻫﺬا ﻳﺪل‬
‫ﺿـ ـ ــﻤﻨﺎً ﻋﻠﻰ أﻧﻪ ﺣﱴ وﻟﻮ ﻛﺎن اﻟﻌﻨﺼـ ـ ــﺮ اﻷﺧﲑ ﻟﻠﻤﺼـ ـ ــﻔﻮﻓﺔ ﻣﺸـ ـ ــﻐﻮﻻً ﻓﺈن اﻟﻘﻴﻤﺔ اﳉﺪﻳﺪة ﳝﻜﻦ أن ﺗﺪﺧﻞ ﰲ ﺣﺠﺮة‬
‫اﻟﻌﻨﺼﺮ اﻷول ﻟﻠﻤﺼﻔﻮﻓﺔ‪ ،‬ﻃﺎﳌﺎ أ ﺎ ﻓﺎرﻏﺔ ‪،‬ﻛﻤﺎ ﻳﺒﻴﻨﻪ اﻟﺸﻜﻞ ‪.٤–٢‬‬

‫‪٥-٢‬‬
‫اﻟﺸﻜﻞ ‪٤–٢‬‬

‫‪3, 4, 5‬‬ ‫ﻟﻨــﺄﺧــﺬ ﺣــﺎﻟــﺔ اﻟﺮﺗــﻞ اﳌﺒﻴﻨــﺔ ﰲ اﳊــﺎﻟــﺔ )‪ (a‬وﻓﻴــﻪ ﺛﻼﺛــﺔ ﻋﻨــﺎﺻ ـ ـ ـ ـ ــﺮ ﻣﻮﺟﻮدة ﺿ ـ ـ ـ ـ ــﻤﻦ اﳊﺠﺮات اﻟﺜﻼث‬
‫ﻟﻠﻤﺼﻔﻮﻓﺔ‪ ،‬ﻧﻼﺣﻆ أن اﳊﺠﺮة اﻷﺧﲑة ﻟﻠﻤﺼﻔﻮﻓﺔ ﻣﺸﻐﻮﻟﺔ ﻋﻠﻰ اﻟﺮﻏﻢ ﻣﻦ أن اﳌﺼﻔﻮﻓﺔ ﻏﲑ ﳑﺘﻠﺌﺔ‪ .‬وإن ﳏﺎوﻟﺔ إدﺧﺎل‬
‫ﻋﻨﺼــﺮ إﱃ ﻣﺆﺧﺮة اﻟﺮﺗﻞ ﺗﺆدي إﱃ وﺿــﻌﻪ ﰲ اﳌﻮﻗﻊ ‪ 1‬ﻟﻠﻤﺼــﻔﻮﻓﺔ ‪،‬ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ اﳊﺎﻟﺔ )‪ .(b‬إذاً اﻟﻌﻨ ـ ـ ـ ـ ـ ـﺼــﺮ اﻷول‬
‫ﻟﻠـﺮﺗﻞ ﻣﻮﺟﻮداً ﰲ اﳊـﺠﺮة ]‪ q.item[3‬ﻳﻠﻴﻪ اﻟﻌﻨﺎﺻﺮ ﰲ اﳊﺠﺮات اﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪:‬‬
‫]‪q.item[4] , q.item[5] , q.item[1‬‬
‫ﺗﺒﲔ اﳊﺎﻻت )‪ (d‬و )‪ (e‬و )‪ (c‬اﻟﺮﺗﻞ اﻟﺴـ ــﺎﺑﻖ ﺑﻌﺪ ﺣﺬف اﻟﻌﻨﺼ ـ ـﺮﻳﻦ ‪ C‬و ‪ ،D‬وﻣﻦ ﰒ إدﺧﺎل اﻟﻌﻨﺼـ ــﺮ ‪،G‬‬
‫وأﺧﲑاً إﻟﻐﺎء ‪ E‬ﻋﻠﻰ اﻟﱰﺗﻴﺐ‪ .‬ﻟﺴﻮء اﳊﻆ ﲟﻮﺟﺐ ﻫﺬا اﻟﺘﻤﺜﻴﻞ ﻻ ﻧﺴﺘﻄﻴﻊ ﲢﺪﻳﺪ ﻣﱴ ﻳﻜﻮن اﻟﺮﺗﻞ ﻓﺎرﻏﺎً‪ ،‬ﻓﺎﻟﺸﺮط‪:‬‬
‫‪q.rear < q.front‬‬
‫ﱂ ﻳﻌﺪ ﳏﻘﻘﺎً ﰲ ﲨﻴﻊ اﳊﺎﻻت اﳌﺒﻴﻨﺔ ﰲ اﻟﺸﻜﻞ ‪ ،٤–٢‬ﺣﻴﺚ ﻳﺘﺤﻘﻖ ﻓﻘﻂ ﰲ اﳊﺎﻻت )‪ (b), (d‬ﻋﻠﻰ اﻟﺮﻏﻢ ﻣﻦ‬
‫أن اﻟﺮﺗﻞ ﻏﲑ ﻓﺎرغ‪.‬‬
‫إﺣﺪى ﻃﺮق ﺣﻞ ﻫﺬﻩ اﳌﺸ ـ ــﻜﻠﺔ ﻫﻲ ﺗﻌﺪﻳﻞ ﻗﻴﻤﺔ ‪) q.front‬اﻟﱵ ﻫﻲ دﻟﻴﻞ ﻟﻌﻨﺼ ـ ــﺮ اﳌﺼ ـ ــﻔﻮﻓﺔ( ﲝﻴﺚ ﺗﺴ ـ ــﺒﻖ‬
‫ﻣﺒﺎﺷ ـ ـ ــﺮة اﻟﻌﻨﺼ ـ ـ ــﺮ ﰲ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ ﺑﺪﻻً ﻣﻦ أن ﺗﻜﻮن دﻟﻴﻞ ﻟﻠﻌﻨﺼ ـ ـ ــﺮ ﻧﻔﺴ ـ ـ ــﻪ‪ ،‬أي ‪ q.front=2‬ﺑﺪﻻً ﻣﻦ أن ﺗﻜﻮن‬
‫‪ ،q.front=3‬ﻋﻨﺪﺋﺬ اﻟﺸﺮط ‪ q.rear==q.front‬ﻳﺪل ﻋﻠﻰ ﺣﺎﻟﺔ اﻟﺮﺗﻞ اﻟﻔﺎرغ‪ ،‬و ﻟﺘﺎﱄ ﳚﺐ ﲢﻘﻴﻖ ﻣﺎ ﻳﻠﻲ‪:‬‬
‫; ‪q.front=maxqueue‬‬
‫;‪q.rear=maxqueue‬‬
‫ﻧﻼﺣﻆ أن ‪ q.front‬و ‪ q.rear‬ﺗﺒﺪأن ﺑﻘﻴﻤﺔ دﻟﻴﻞ اﻟﻌﻨﺼ ـ ــﺮ اﻷﺧﲑ ﻟﻠﻤﺼ ـ ــﻔﻮﻓﺔ‪ ،‬ﻷن اﻟﻌﻨﺼ ـ ــﺮ ﰲ اﳌﺼـ ـ ــﻔﻮﻓﺔ‬
‫ﻳﺴﺒﻖ ﻣﺒﺎﺷﺮة اﻟﻌﻨﺼﺮ اﻷول ﺿﻤﻦ اﻟﺮﺗﻞ ﲟﻮﺟﺐ ﻫﺬا اﻟﺘﻤﺜﻴﻞ اﻟﺪاﺋﺮي‪ ،‬وﲟﺎ أن ‪ q.rear==q.front‬ﻓﺈن اﻟﺮﺗﻞ ﺳﻴﻜﻮن‬

‫‪٦-٢‬‬
‫ﻓﺎرﻏﺎً ﺑﺸﻜﻞ أوﱄ‪ .‬و ﻟﺘﺎﱄ ﳝﻜﻦ أن ﻳﻜﺘﺐ اﻹﺟﺮاء اﻟﺬي ﻳﻌﱪ ﻋﻦ ﻋﻤﻠﻴﺔ ‪ empty‬ﻛﺎﻟﺘﺎﱄ‪:‬‬
‫{ )(‪bool empty‬‬
‫{ )‪if (q.rear==q.front‬‬
‫;" ‪cout<<endl<<"underflow,‬‬
‫;‪return true‬‬
‫}‬
‫;‪else return false‬‬
‫;}‬
‫أﻣﺎ إﺟﺮاء ﻓﺤﺺ ﺣﺎﻟﺔ ﻃﻔﺤﺎن اﻟﺮﺗﻞ ﻓﻴﻤﻜﻦ أن ﻳﻜﺘﺐ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫{ )(‪bool flow‬‬
‫{ )‪if (q.rear==q.front‬‬
‫;" ‪cout<<endl<<"ouverflow,‬‬
‫;‪return true‬‬
‫}‬
‫;‪else return false‬‬
‫;}‬
‫ﳚﺐ اﻻﻧﺘﺒﺎﻩ إﱃ أن اﺧﺘﺒﺎر ﻃﻔﺤﺎن اﻟﺮﺗﻞ ﰲ أول إدﺧﺎل ﺳ ـ ـ ـ ـ ــﻴﻌﻴﺪ اﻟﻨﺘﻴﺠﺔ ‪ ،true‬ﻟﺬا ﳚﺐ اﻟﺒﺪء ﺿ ـ ـ ـ ـ ــﺎﻓﺔ‬
‫ﻋﻨﺼﺮ واﺣﺪ ﻋﻠﻰ اﻷﻗﻞ إﱃ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪.‬‬
‫أ‪-‬ﻋﻤﻠﻴﺔ ﺳﺤﺐ ﻋﻨﺼﺮ ﻣﻦ اﻟﺮﺗﻞ‬
‫ﳝﻜﻦ ﲢﻘﻴﻖ ﻋﻤﻠﻴﺔ ﺳ ــﺤﺐ ﻋﻨﺼ ــﺮ ﻣﻦ اﻟﺮﺗﻞ ﺟﺮاءﻳﻦ ﻳﻜﺘﺐ اﻹﺟﺮاء اﻟﺬي ﳛﻘﻖ ﻋﻤﻠﻴﺔ ﺳ ــﺤﺐ ﻋﻨﺼ ــﺮ ﻣﻦ‬
‫ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ ﻛﺎﻟﺘﺎﱄ‪:‬‬
‫{ )(‪char remove‬‬
‫{ ))(‪if (!empty‬‬
‫;‪if (q.front==q.maxqueue) q.front=1‬‬
‫;‪else q.front=q.front+1‬‬
‫}‬
‫;]‪return q.item[q.front‬‬
‫;}‬
‫ب‪-‬ﻋﻤﻠﻴﺔ إدﺧﺎل ﻋﻨﺼﺮ إﱃ اﻟﺮﺗﻞ‬
‫ﻗﺒﻞ أن ﻧﻜﺘﺐ اﻹﺟﺮاء اﻟﺬي ﻳﻌﱪ ﻋﻦ ﻋﻤﻠﻴﺔ إدﺧﺎل ﻋﻨﺼـ ــﺮ إﱃ اﻟﺮﺗﻞ ﺳ ــﻨﺪرس ﺣﺎﻟﺔ اﻟﺮﺗﻞ اﳌﺒﲔ ﰲ اﻟﺸ ــﻜﻞ‬
‫‪ ،٥–٢‬ﺣﻴﺚ ﳛﺘﻮي اﻟﺮﺗﻞ ﰲ اﳊﺎﻟﺔ )‪ (a‬ﻋﻠﻰ ﺛﻼﺛﺔ ﻋﻨﺎﺻ ـ ــﺮ ‪ C, D, E‬ﰲ اﳌﻮاﻗﻊ اﻟﺘﺎﻟﻴﺔ وﻋﻠﻰ اﻟﱰﺗﻴﺐ‪q.item[3], :‬‬
‫]‪ .q.item[4], q.item[5‬وﲟﺎ أن اﻟﻌﻨﺼﺮ اﻷﺧﲑ ﻟﻠﺮﺗﻞ ﻣﻮﺟﻮد ﰲ اﳌﻮﻗﻊ ]‪ q.item[5‬ﻓﺈن ‪.q.rear=5‬‬

‫‪٧-٢‬‬
‫اﻟﺸﻜﻞ ‪٥–٢‬‬

‫وﲟﺎ أن اﻟﻌﻨﺼـ ـ ــﺮ اﻷول ﻟﻠﺮﺗﻞ ﻣﻮﺟﻮد ﰲ اﳌﻮﻗﻊ ]‪ q.item[3‬ﻓﺈن ‪ .q.front=2‬إن إدﺧﺎل اﻟﻌﻨﺼـ ـ ــﺮ ‪ F‬إﱃ اﻟﺮﺗﻞ‬
‫اﻟﺴــﺎﺑﻖ ﻳﺴــﺒﺐ ز دة ‪ q.rear‬ﲟﻘﺪار ‪ ،1‬ﻟﻜﻦ ﲟﺎ أن ﻗﻴﻤﺔ ﻫﺬا اﻟﺪﻟﻴﻞ ﺗﺴــﺎوي اﻟﻘﻴﻤﺔ اﻷﻋﻈﻤﻴﺔ ﻟﺪﻟﻴﻞ اﳌﺼــﻔﻮﻓﺔ ﻓﺈﻧﻨﺎ‬
‫ﳒﻌﻞ ‪ q.rear‬ﺗﺴﺎوي ‪ 1‬ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ اﳊﺎﻟﺔ )‪ .(b‬إذا ﻛﺮر ﻋﻤﻠﻴﺔ اﻹدﺧﺎل وأﺿﻔﻨﺎ اﻟﻌﻨﺼﺮ ‪ G‬إﱃ اﻟﺮﺗﻞ ﻓﺘﺼﺒﺢ‬
‫ﺣﺎﻟﺔ اﻟﺮﺗﻞ ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ اﳊﺎﻟﺔ )‪ ،(c‬ﺣﻴﺚ ‪ . q.front=q.rear=2‬ﰲ ﻫﺬﻩ اﳊﺎﻟﺔ أﺻ ـ ـ ـ ـ ــﺒﺤﺖ اﳌﺼ ـ ـ ـ ـ ــﻔﻮﻓﺔ ﳑﺘﻠﺌﺔ‬
‫وﳏﺎوﻟﺔ إدﺧﺎل ﻋﻨﺼﺮ آﺧﺮ ﺗﺴﺒﺐ اﻟﻄﻔﺤﺎن ‪ ،‬ﻟﻜﻦ ﻫﺬا ﻣﺸﺎر إﻟﻴﻪ ﺑﻮﺳﺎﻃﺔ اﻟﺸﺮط‪:‬‬
‫‪q.front == q.rear‬‬
‫وﻫﻮ ﻣﺎ ﻳﺸﲑ إﱃ اﻟﻄﻔﺤﺎن وﺑﻨﻔﺲ اﻟﻮﻗﺖ ﺑﺸﲑ إﱃ ﺣﺎﻟﺔ اﻟﺮﺗﻞ اﻟﻔﺎرغ‪ .‬ﻫﻜﺬا ﻳﺒﺪو أﻧﻪ ﻻ ﻳﻮﺟﺪ ﻃﺮﻳﻘﺔ ﻟﻠﺘﻤﻴﻴﺰ ﺑﲔ‬
‫ﺣﺎﻟﺔ اﻟﺮﺗﻞ اﻟﻔﺎرغ وﺣﺎﻟﺔ اﻟﺮﺗﻞ اﳌﻤﺘﻠﺊ‪ .‬أﺣﺪ اﳊﻠﻮل ﳍﺬﻩ اﳌﺸﻜﻠﺔ ﻫﻮ اﻟﺘﺨﻠﻲ ﻋﻦ ﻋﻨﺼﺮ واﺣﺪ ﻣﻦ اﳌﺼﻔﻮﻓﺔ‪ ،‬أي إذا‬
‫ﻛﺎن ﺣﺠﻢ اﳌﺼﻔﻮﻓﺔ ‪ 100‬ﻓﺈﻧﻨﺎ ﻧﺴﻤﺢ ﻟﻠﺮﺗﻞ ن ﻳﻨﻤﻮ ﻟﻴﻤﻸ ﻓﻘﻂ ‪ 99‬ﺣﺠﺮة‪ ،‬و ﻟﺘﺎﱄ ﳏﺎوﻟﺔ إدﺧﺎل ﻋﻨﺼﺮ اﳌﺎﺋﺔ‬
‫ﺳﻴﺆدي إﱃ ﺣﺎﻟﺔ اﻟﻄﻔﺤﺎن‪ .‬ﻳﻜﺘﺐ إﺟﺮاء إدﺧﺎل ﻋﻨﺼﺮ إﱃ اﻟﺮﺗﻞ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫{ )‪void insert(char x‬‬
‫;‪if (q.rear==q.maxqueue) q.rear=1‬‬
‫;‪else q.rear++‬‬
‫;‪if (!flow(q)) q.item[q.rear]=x‬‬
‫;}‬
‫ﳛﺪث اﻻﺧﺘﺒﺎر ﻣﻦ أﺟﻞ اﻟﻄﻔﺤﺎن ﰲ اﻹﺟﺮاء ‪ insert‬ﺑﻌﺪ ﺗﻌﺪﻳﻞ ‪ ،q.rear‬ﺑﻴﻨﻤﺎ ﳛﺪث اﻻﺧﺘﺒﺎر ﻣﻦ أﺟﻞ‬
‫اﳉﻔﺎف ﰲ اﻹﺟﺮاء ‪ remove‬ﰲ اﻟﺒﺪاﻳﺔ ﻗﺒﻞ ﺗﻌﺪﻳﻞ ‪.q.front‬‬
‫ﻣﺜﺎل ‪١–٢‬‬
‫ﻟﻨﻜﺘﺐ ﺑﺮ ﻣﺞ ﳛﻮل ﻋﺪد ﻋﺸﺮي إﱃ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺳﺘﺨﺪام اﻟﻌﻤﻠﻴﺎت اﻷﺳﺎﺳﻴﺔ ﻋﻠﻰ اﻟﺮﺗﻞ‪ .‬ﳝﻜﻦ ﺻﻴﺎﻏﺔ‬
‫ﻃﺮﻳﻘﺔ اﳊﻞ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬

‫‪٨-٢‬‬
.insert(number%2) ‫ إﱃ اﻟﺮﺗﻞ ﺑﻮﺳﺎﻃﺔ اﻹﺟﺮاء‬2 ‫ ﻋﻠﻰ‬number ‫ ﻧﻘﻮم ﺑﺪﻓﻊ ﻗﻲ ﻗﺴﻤﺔ اﻟﻌﺪد اﻟﻌﺸﺮي‬-1
:number ‫ ﻗﺴﻤﺔ ﺻﺤﻴﺤﺔ وﻧﻀﻊ اﻟﻨﺎﺗﺞ ﰲ‬2 ‫ ﻋﻠﻰ‬number ‫ ﻧﻘﻮم ﺑﺘﻘﺴﻴﻢ اﻟﻌﺪد اﻟﻌﺸﺮي‬-2
number=number/2

.number=0 ‫ ﻧﻜﺮر اﳋﻄﻮﺗﲔ اﻟﺴﺎﺑﻘﺘﲔ إﱃ أن ﻳﺼﺒﺢ‬-3


.ً‫ إﱃ أن ﻳﺼﺒﺢ اﻟﺮﺗﻞ ﻓﺎرﻏﺎ‬remove() ‫ ﻧﻘﻮم ﺑﻌﻤﻠﻴﺔ ﺳﺤﺐ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﻟﺮﺗﻞ ﺑﻮﺳﺎﻃﺔ اﻟﺘﺎﺑﻊ‬-4
:‫ إﱃ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ووﺿﻊ اﻟﺮﺗﻞ‬20 ‫ﻳﺒﲔ اﳉﺪول اﻟﺘﺎﱄ ﲢﻮﻳﻞ اﻟﻌﺪد اﻟﻌﺸﺮي‬
Number number% 2
20 0
10 0
5 1
2 0
1 1
0
:‫ﳝﻜﻦ أن ﻳﻜﻮن اﻟﱪ ﻣﺞ ﻟﻜﺎﻣﻞ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﱄ‬
#include <iostream>
using namespace std;
struct queue {
int item[101];
int maxqueue;
int front, rear;
} q;

bool flow() {
if (q.rear==q.front) {
cout<<endl<<"ouverflow, ";
return true;
}
else return false;
};

bool empty() {
if (q.rear==q.front) {
cout<<endl<<"underflow, ";
return true;
}
else return false;
};

٩-٢
‫{ )‪void insert(int x‬‬
‫;‪if (q.rear==q.maxqueue) q.rear=1‬‬
‫;‪else q.rear++‬‬
‫;‪if (!flow()) q.item[q.rear]=x‬‬
‫;}‬

‫{ )(‪int remove‬‬
‫{ ))(‪if (!empty‬‬
‫;‪if (q.front==q.maxqueue) q.front=1‬‬
‫;‪else q.front=q.front+1‬‬
‫}‬
‫;]‪return q.item[q.front‬‬
‫;}‬

‫{ )(‪void main‬‬
‫;‪int number=20‬‬
‫;‪q.maxqueue=100‬‬

‫;‪q.rear=q.front=q.maxqueue‬‬
‫{ ‪do‬‬
‫;)‪insert(number%2‬‬
‫;‪number/=2‬‬
‫;)))(‪} while ((number>0)&&(!flow‬‬
‫;)(‪while (!empty()) cout<<remove‬‬
‫}‬
‫ﻣﺜﺎل ‪٢–٢‬‬
‫ﻹدارة ﻣﺒﻴﻌﺎت إﺣﺪى اﳌﻮاد اﻟﺪواﺋﻴﺔ ﰲ ﻣﺴـ ـ ـ ــﺘﻮدع أدوﻳﺔ ﺗﻘﻮم اﻹدارة ﺿـ ـ ـ ــﺎﻓﺔ ﻛﻞ ﺷـ ـ ـ ــﺤﻨﺔ ﻷدوﻳﺔ ﻣﺸ ـ ـ ـ ـﱰاة‬
‫‪ Purchase‬ﺗﺪﺧﻞ اﳌﺴﺘﻮدع إﱃ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪ ،‬وﰲ ﻛﻞ ﻋﻤﻠﻴﺔ ﺑﻴﻊ ﺳﺘﺴﺤﺐ اﻟﻜﻤﻴﺔ ﻣﻦ ﻣﺆﺧﺮة اﻟﺮﺗﻞ ﲟﺎ ﻳﺘﻨﺎﺳﺐ ﻣﻊ‬
‫ﺣﺠﻢ اﻟﻄﻠﺒﻴﺔ اﳌﺒﺎﻋﺔ ‪ Sale‬ﲝﻴﺚ ﳝﻜﻦ ﰲ ﻛﻞ ﻋﻤﻠﻴﺔ ﺑﻴﻊ ﺳـ ـ ـ ــﺤﺐ ﻛﺎﻣﻞ اﻟﻜﻤﻴﺔ اﳌﺴـ ـ ـ ــﺠﻠﺔ ﰲ ﻣﺆﺧﺮة اﻟﺮﺗﻞ أو ﺟﺰء‬
‫ﻣﻨﻬﺎ‪.‬‬
‫إﺿــﺎﻗﺔ ﺷــﺤﻨﺔ أدوﻳﺔ ﺗﻌﲏ إﺿــﺎﻓﺔ ﻋﻘﺪة إﱃ ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ‪ ،‬وﻟﻨﺴــﻤﻲ ﻫﺬﻩ اﻟﻌﻤﻠﻴﺔ ‪ ،sale‬ﺗﺴــﺘﺪﻋﻲ ﻫﺬﻩ اﻟﻌﻤﻠﻴﺔ‬
‫ﻋﻤﻠﻴﺔ ‪ .purchase‬وﳝﻜﻦ ﺗﻌﺮﻳﻒ إﺟﺮاء إﺿﺎﻓﺔ ﺷﺤﻨﺔ أدوﻳﺔ ﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫{ )(‪void Purchase‬‬
‫;‪int x‬‬
‫;‪cin>>x‬‬
‫;)‪insert(x‬‬
‫}‬

‫‪١٠-٢‬‬
‫ﺑﻴﻊ ﻛﻤﻴﺔ ﻣﻦ اﻟﺪواء ﻫﻮ ﻋﻤﻠﻴﺔ ﺳ ـ ـ ــﺤﺐ ﻣﻦ ﻣﺆﺧﺮة اﻟﺮﺗﻞ ﻟﻌﻘﺪ ﲟﺎ ﻳﻜﺎﻓﺊ اﻟﻜﻤﻴﺔ اﳌﺒﺎﻋﺔ‪ ،‬وﻗﺪ ﺗﺴ ـ ـ ــﺎوي ﻫﺬﻩ‬
‫اﻟﻜﻤﻴﺔ ﻣﻘﺪار اﻟﻜﻤﻴﺔ اﳌﺴﺠﻠﺔ ﰲ اﻟﻌﻘﺪة أو أﻗﻞ أو أﻛﺜﺮ‪ ،‬ﻟﻨﺴﻤﻲ إﺟﺮاء إﺧﺮاج اﻟﺪﻓﻌﺔ ‪ .sale‬ﻗﺒﻞ ﺳﺤﺐ أي ﻛﻤﻴﺔ‬
‫ﳚﺐ اﻟﺘﺤﻘﻖ ﻣﻦ ﻋﺪم ﺟﻔﺎف اﻟﺮﺗﻞ‪ ،‬ﻟﺬا ﺳﻨﻜﺘﺐ اﻟﺘﻌﻠﻴﻤﺔ اﻟﺘﺎﻟﻴﺔ ﻋﻨﺪ ﺑﺪء اﻹﺟﺮاء‪:‬‬
‫;‪if (empty()) return‬‬
‫‪i‬‬ ‫إن ﻋﻘﺪة ﻣﻘﺪﻣﺔ اﻟﺮﺗﻞ ﻫﻲ اﻟﻌﻘﺪة اﻟﱵ ﺗﻠﻲ ﻟﱰﺗﻴﺐ ‪ q.front‬ﻟﺬا ﻓﺎﻟﻌﻘﺪة اﻟﱵ ﺳﻴﺘﻢ ﺗﻨﺰﻳﻞ اﻟﻜﻤﻴﺔ ﻣﻨﻬﺎ ﻫﻲ‬
‫اﻟﱵ ﲢﺪدﻫﺎ اﻟﺘﻌﻠﻴﻤﺎت اﻟﺘﺎﻟﻴﺔ‪:‬‬
‫;‪if (q.front==q.maxqueue) i=1‬‬
‫;‪else i=q.front+1‬‬
‫ﺑﻌﺪ اﻟﺘﺄﻛﺪ ﻣﻦ ﻋﺪم ﺟﻔﺎف اﻟﺮﺗﻞ وﲢﺪﻳﺪ رﻗﻢ ﻋﻘﺪة اﳌﻘﺪﻣﺔ ﺳﻨﺠﺮي اﺧﺘﺒﺎراً ﳓﺪد ﻣﻦ ﺧﻼﻟﻪ ﻓﻴﻤﺎ إذا ﻛﺎﻧﺖ‬
‫اﻟﻜﻤﻴﺔ ﺗﻔﻲ ﻟﺪﻓﻌﺔ ‪ x‬أم ﻻ‪ ،‬ﻓﺈذا ﻛﺎﻧﺖ اﻟﻜﻤﻴﺔ اﳌﻄﻠﻮﺑﺔ ‪ x‬أﻗﻞ ﻣﻦ اﻟﻜﻤﻴﺔ اﳌﺴﺠﻠﺔ ﰲ اﻟﻌﻘﺪة ﺳﺘﻨﺰل اﻟﻜﻤﻴﺔ ‪ x‬ﻣﻦ‬
‫ﻗﻴﻤﺔ اﻟﻌﻘﺪة‪ ،‬وﰲ اﳊﺎﻟﺔ اﳌﻐﺎﻳﺮة ﺳ ـ ــﻴﺘﻢ ﺣﺬف اﻟﻌﻘﺪة وإﻋﺎدة ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ اﻟﺴ ـ ــﺤﺐ ﻣﻦ أﺟﻞ اﳌﻘﺪار ‪ x‬ﻣﻄﺮوﺣﺎً ﻣﻨﻪ‬
‫ﻣﺎ ﰎ ﺳﺤﺒﻪ ﻣﻦ اﻟﻌﻘﺪة‪ .‬وﳝﻜﻦ ﻛﺘﺎﺑﺔ اﻹﺟﺮاء ﻟﺸﻜﻞ اﻟﺘﺎﱄ‪:‬‬
‫{ )‪void sale(int x‬‬
‫;‪if (empty()) return‬‬
‫;‪int i‬‬
‫;‪if (q.front==q.maxqueue) i=1‬‬
‫‪else‬‬
‫;‪i=q.front+1‬‬
‫{ )‪if (q.item[i]>x‬‬
‫;‪q.item[i]-=x; return‬‬
‫}‬
‫‪else‬‬
‫;))(‪sale(x-remove‬‬
‫}‬
‫وﺑﺮ ﻣﺞ إﺿﺎﻓﺔ اﻟﻜﻤﻴﺎت ‪ 30‬و ‪ 35‬و ‪ 45‬وﻣﻦ ﰒ ﺳﺤﺐ اﻟﻜﻤﻴﺔ ‪ 60‬وإﺧﺮاج اﳌﺘﺒﻘﻲ ﳝﻜﻦ أن ﻳﻜﺘﺐ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬
‫>‪#include <iostream‬‬
‫;‪using namespace std‬‬
‫{ ‪struct queue‬‬
‫;]‪int item[101‬‬
‫;‪int maxqueue‬‬
‫;‪int front, rear‬‬
‫;‪} q‬‬

‫{ )(‪bool flow‬‬
‫{ )‪if (q.rear==q.front‬‬
‫;" ‪cout<<endl<<"ouverflow,‬‬
‫;‪return true‬‬

‫‪١١-٢‬‬
}
else return false;
};

bool empty() {
if (q.rear==q.front) {
cout<<endl<<"underflow, ";
return true;
}
else return false;
};

void insert(int x) {
if (q.rear==q.maxqueue) q.rear=1;
else q.rear++;
if (!flow()) q.item[q.rear]=x;
};

int remove() {
if (!empty()) {
if (q.front==q.maxqueue) q.front=1;
else q.front=q.front+1;
}
return q.item[q.front];
};

void Purchase() {
int x;
cin>>x;
insert(x);
}
void sale(int x) {
if (empty()) return;
int i;
if (q.front==q.maxqueue) i=1;
else i=q.front+1;
if (q.item[i]>x) {
q.item[i]-=x;
return;
}
else sale(x-remove());

١٢-٢
}

void main() {
int number=20;
q.maxqueue=100;
q.rear=q.front=q.maxqueue;

insert(30);
insert(35);
insert(45);
sale(60);
while (!empty()) cout<<remove()<<endl;
}

١٣-٢

 -

  
  %! "      #  $              

4/ 5 /67 %1RGH . /  0 " ) 12 #- . ' ( ) " *+ ,#- %& 
A B % 5
*7@ ) /  % ) 1= >? % : 0 / 89: " 5  ;$#  <
-DE C  "      F-   5:7 .QH[W AC+ B  5
'@       ) 1=7 %3UHGHFHVVRU
*$ G /-  0 / " H  H  #  1= .  C  "  6 I$  " J< I$ ?
L9 LQGH[ B4  1 1= *$0$ "=- %# " 
$E)    89:  K 47 .
" OC- .QH[W 8    N' 1C M <     # 89: " &  /  47 %
$E  ) 1H $:
   0 H /    # .H7  
$E   ) > %<  1K6 5
%
$E   )   <    *'
. 29 Q 6 R    0 / 
$E  )   0 H P7- 4 7 %
$E  ) 5E=6 
.
$E  )
S4$ DC  QHZ /6 1/6 9LVXDO & V      WX S 1/ T U B  -Q %1 .' 
% V S4$  WX2 %S4$ 9: >$ / 89: /67 %B -D<6 H  1 # Y '  . 29 5

. V ( >$ / 9: #-7


H 
>$=- +7 %>$ /   
& 6 %+ "-$=6 5
Z 89: " .HE  + =( ;   
B ;  7 .1V [ M\ : - - 5 I$  " . 29 Y &!6 - (7 %
$E ) Y &!6  /
. 5
 -$=6 H  / H S :H ]      - %. 29 5
S4$ DC Y      %-  89: A
7
.,$ "-$=6 5
I$@ 9: A
7 # S 1/ $ ;  %^_ " F
7
"  $ ` : ,$ 89: " a$ 1= > 2 % K7 -HC@   *=   W .   ,$
"b 1 7 %+ 0 ]6 67 % ) G9C7 % ) 
bc2 % !6 "=- 5 / /
    ! ! d/ ^927 %&   K7 -HC@ ,$ " " $ 5- 
"!      .: 
.,$ 89:

  
  --
     1=    W  5$0 I$     '  . 29 5
/LQNHG /LVW    Y\ 6
12 &!6 67 .3RLQWHUV 6  WX S 1/ T U 6 /6 %. 29 5
"-7 5:  # M4Q7 . 
( 
   b( %  $ "    5
_( .  12 >$=6 .. / 1    Y4  ; '@ . 
.–e 1=[ 5
2 % . / >$  * - WX

 
. /   . / ( WX
 'DWD1RGH 3RLQWHUWRQH[W1RGH

.   Y\ 6 –e 1=[

( 
 b( 'DWD1RGH . /  " >$= 1  $: (QRGH .  12)   0 "  ) 12
. C$ . / >( L i - 5
18//    WX 9'?- %3RLQWHU1RGH !6  . /   WX
:5- 2 =W BK6 "=-7 %H   9'?- 1 5:
1RGHB1DPH 1RGH
 'DWD1RGH
 3RLQWHUWRQH[W1RGH
(QG
 %*$ L i1 #  0 > %9LVXDO& V  # " R-  %   -Q 
, #- 9:7 .  1= W  M < # B
/-  7 %! # 
/   k@ "  +( 5:
 J- / ^_ ,  #-7 .1  # & lE "   #    WX2 1  # 5
*$C " J- /
9LVXDO V B ,-   ) "=-  7....9=:7 AC+ 1     * -   WX ( 
  b( %1  #
:5 1=[ &
VWUXFWWDJBILHOG^
 PHPEHUBW\SHPHPEHU
 PHPEHUBW\SHPHPEHU
«««««««««
 WDJBILHOG QH[W
`
. - m 1 ( [- QH[W RC
 [- $:7 %3RLQWHU  WX & " $:7 %QH[W V *' "   " &   Y6

/ ]- %. - m .  "-$=6  97 .6 5 . /  "     F- L9 . 29 5
>$ / (
V 1!4 " %6 . -  . / "-$=6 S4$ n     )<- .. / 89:  "-D< n     )< >$ /
Y6 L9 3RLQWHU S4$ >$ / 89: /67 .QHZ / . - m .  " ,-   ) T U 5
% !
& " $:7 % -  * - % V 2 >$ / 9: H c7 %. / 89:  OE B ) )<6
. 5
.  ' . / 89: ,!  )67 %  # . / . -  . / &Q Y- %   $= 
 [7 ./LQNHG/LVW   ,$ Y   A %  / "  #  "-$= Z 89: , #6
a$ "  S 1/ , #6 + 5  ! V M <    ,$ "-$=6 "=- + B (  :
.3RLQWHU  WX

f 
   --
" F6 %Iq  $   -  "= :5 *K *' "  "-$=6 p 5- 
"!  
+ "-$= .
C 1       1=   W  :7 %,GB1XPEHU B4Q7 1DPH ] Y    :! 89:
1DPH ] Y "F6 %.  K 1  J- / M$  %I T+X:  *'H(7 %'  
1=  [ C . / >$ (   [- %QH[W Y     WX & " 1C ( 
  b( %,GB1XPEHU B4Q7
:5
VWUXFW6WXGHQW^
FKDU1DPH>@
FKDU,GB1XPEHU>@
6WXGHQW QH[W
`
& "    WX $:7 %AC ]  "   F6 5 . / >$ ( QH[W '@ 1    [-
.      W!  !7 .6WXGHQW & " /LVWB6WXGHQW      WX V J- /  "-$=6  !       .6WXGHQW
% T  .  E + 52 >$ / 9 OE      7 % T  . / . 29 " >$ n     )<
 V 89: " G /     . ( . - m  
   br %&  lE " 6 V "    F- G /    7
:5- 2 s ! 5
  V2
 6WXGHQW /LVWB6WXGHQW QHZ6WXGHQW
 6WXGHQW 6W QHZ6WXGHQW

  br M < #- 6W V7 % T ! .  ( YH 1=  [   [- /LVWB6WXGHQW V
%_(
] Y    %5$  %>K6 6!,GB1XPEHU 7 6W!1DPH 5
6W . /   .. - m . 
+ (   [6 5 18//  S  b7 ]- .  'p .6W!QH[W $
C . / >$  .B4Q7
"   F6 %. - m .  >$=- t %1HZ1RGH T m( G /     %s ! &   #!7 .?< a$4$ 5
 %T5   W
:5 1=[ T mr 9: G /- . - m ]q 
6WXGHQW 1HZ1RGH ^
 6WXGHQW V
 V QHZ6WXGHQW
 FRXW1DPHFLQ!!V!1DPH
 FRXW,GB1XPEHUFLQ!!V!,GB1XPEHU
 V!QH[W 18//
 UHWXUQV
`
( 18//  n )<-7 2 %V 5
]q  .  W!  -7 %V . - m .  T mr 9: >$=t -
/ ]=   %T mr 9: T   %. - m .  
 br .V . / >$ /- YU "7 %QH[W V

o 
:
 6W!QH[W 1HZ1RGH 
 6W 6W!QH[W
T mr T        7@ / 1/      %/LVWB6WXGHQW 6W 1m "  "-$=6 T  
6W WX K / 1  YU "7 %T ! . / C+ . /2 . -  . / WX #67 %1HZ1RGH
Y  T m( 5
/ 89:  / b7 _(7 ...9=:7 %C+ .  
 b( " s ! "= . / 89: (
:1=[ $GGB6WXGHQW
$GGB6WXGHQW ^
 6W!QH[W 1HZ1RGH 
 6W 6W!QH[W
`
1=   [  s ! ,!   )-7 % - m ]q  
   br T mr 9: T     s ! 5
 =-
:5
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG

VWUXFW6WXGHQW^
 FKDU1DPH>@
 FKDU,GB1XPEHU>@
 6WXGHQW QH[W
`

6WXGHQW /LVWB6WXGHQW QHZ6WXGHQW
6WXGHQW 6W QHZ6WXGHQW

6WXGHQW 1HZ1RGH ^
 6WXGHQW V
 V QHZ6WXGHQW
 FRXW1DPHFLQ!!V!1DPH
 FRXW,GB1XPEHUFLQ!!V!,GB1XPEHU
 V!QH[W 18//
 UHWXUQV
`

YRLG$GGB6WXGHQW ^
 6W!QH[W 1HZ1RGH 
 6W 6W!QH[W
`

e 

YRLGPDLQ ^
 6W /LVWB6WXGHQW
 $GGB6WXGHQW 
`
( V 9: WX 4 #7 %/LVWB6WXGHQW Y . C7 .  "-$=6 Y s ! 9E 6
.  G   F $GGB6WXGHQW T mr T     Y    YU "7 %6W!QH[W 18// >c
57 6W V
. -  . / >$ (   [ 6W 4 1 67 .6W!1H[W ( $   #-7 %1HZ1RGH T mr . - m
. - m " 18// 6W!QH[W V 4 ,!)67

/LVWB6WXGHQW 6W 6W!QH[W

18//




Y- 5  / ( .   " 6W  4 1  67 %/LVWB6WXGHQW V 5
v$E   T   > OC+
. -$=6
T mr 9E 6 Q =6  =- %*K 1!     . C7 /
H  ( Iq .    [  
   br
:5- 2 PDLQ 5#  T mr ,!)-7 %-Q =6 C 5
  [ $GGB6WXGHQW
YRLGPDLQ ^
 6W /LVWB6WXGHQW
 IRU LQWL L L 
  $GGB6WXGHQW 
`

  # !  " --
&   #!7 .,$        @ / 7 " %.  
   b(  7 %+ "-$=6  !/6
 .T 4 Y6 .  #' " + "-$=6 w E  < ,$  ; '@ @ / w
5 m( J- /6 1- /6 / .      W! Y .T 4 Y      97 .B'H 
/ x$U " s ! 5
/ 89:
T mr M <  Y  'p ( V " 
C  #  1  >( RC7 %1HZ1RGH 7 $GGBVWXGHQW
:5- 2 s ! ,!)-7 %s ! ( != 89: 
b( Y VWULQJ != 5
G / VWUFPSBV
LQFOXGHLRVWUHDP!
LQFOXGHVWULQJ!
XVLQJQDPHVSDFHVWG

u 

VWUXFW6WXGHQW^
 FKDU1DPH>@
 FKDU,GB1XPEHU>@
 6WXGHQW QH[W
`

6WXGHQW'DWD>@ ^^^
'
`^

``
       ^^
&
`^

``
       ^^
$
`^

``
       ^^
%
`^

``
       ^^
(
`^

``
      `

6WXGHQW /LVWB6WXGHQW QHZ6WXGHQW
6WXGHQW 6W

6WXGHQW 1HZ1RGH LQWL ^
 6WXGHQW V
 V QHZ6WXGHQW
 VWUFS\BV V!1DPH'DWD>L@1DPH 
 VWUFS\BV V!,GB1XPEHU'DWD>L@,GB1XPEHU 
 V!QH[W 18//
 UHWXUQV
`

YRLG$GGB6WXGHQW LQWL ^
 6W!QH[W 1HZ1RGH L 
 6W 6W!QH[W
`

YRLGPDLQ ^
 6W /LVWB6WXGHQW
 IRU LQWL L L $GGB6WXGHQW L 
`

% & '( )
"  -$
7 :KLOH a$  " q    W C "-$=6  =- / 89: H 
/ M +  w /   +
 WX >$=-  ^_7  - ( *$ 0$ $:  89: 5
J4$ k  W %GR«:KLOH a$  "
.IRU -Q =  M <       =

7 /   H >2 _(  .18// $: QH[W  . /

y 
.ZKLOH  M <   Q{( /6 5- 

6W /LVWB6WXGHQW
ZKLOH 6W!QH[W 18// ^
 6W 6W!QH[W
 FRXW1DPH6W!1DPH,GB1XPEHU
          6W!,GB1XPEHUHQGO
`

:1=[ 9LHZB/LVW Y    } 'r T m( 5
/ 89: " | ) >  =-
YRLG9LHZB/LVW 6WXGHQW / ^
 6W /
 ZKLOH 6W!QH[W 18//  ^
  6W 6W!QH[W
  FRXW1DPH6W!1DPH,GB1XPEHU6W!,GB1XPEHUHQGO
 `
`
:5 1=[ ,!) B2 5
-H$/ M < "=- ^97 %B#E Q =- > "=- T m( $:7
YRLG9LHZB/LVW 6WXGHQW / ^
 LI / 18// UHWXUQ
 FRXW1DPH/!1DPH ,GB1XPEHU/!,GB1XPEHUHQGO
 9LHZB/LVW /!QH[W 
`
 '( '-*
     / T m( "-$=6  =-     Q {( T m( "-$=   4 5 -  lE 
:5- 2 1RGHB1XPEHU
LQW1RGHB1XPEHU 6WXGHQW / ^
 LQWQ 
 6W /
 ZKLOH 6W!QH[W 18// ^
  Q
  6W 6W!QH[W
 `
 UHWXUQQ
`
:5- 2 LH$ 1=[ 1/ T mr J- /6 .H (  =- &# - 7
LQW1RGHB1XPEHU 6WXGHQW / ^
 LI /!QH[W 18// UHWXUQ
 HOVHUHWXUQ1RGHB1XPEHU /!QH[W 

z 
`
 '( +, .-
:5 LH$/ T mr . '@ . / " T  (QHZ l= ) GHOHWH /   TVc M$ 
YRLG'HOHWHB/LVW 6WXGHQW / ^
 LI / 18// UHWXUQHOVH'HOHWHB/LVW /!QH[W 
  GHOHWH/
`
" / G9C  1/- YU "7 - (  -  " / w /     T mr 9: M$    
. -  .  ( . '@ . /
 01 2
3! 2'(" # . 4( 5& -/
 =- 57 18//  QH[W    WX 
9'?- 5 . / 5:   + 5
'@ . /
- 6  E- .. / 89: ( 1 ) C 5/6 1= [   
2 w /   . / 89: ( *+
N' T m( "-$=6 1FE- 97 %## - ( . - m .  
b( 5
  # 5
. '@ . /
    #   # 5
.  'p " R!- 5 T mr .^_ "!- 5 *K .$ .H (7 . / 89: H-c
:. / 89: >$ /-7 I M4Q7 T " $=
6WXGHQW /DVWB1RGH 6WXGHQW / ^
 ZKLOH /!QH[W 18// 
  / /!QH[W
 UHWXUQ/
`
:5 1=[ .H7/ I$? T mr 9: 2  =- 2
6WXGHQW /DVWB1RGH 6WXGHQW / ^
 LI /!QH[W 18// UHWXUQ/
  HOVHUHWXUQ/DVWB1RGH /!QH[W 
`

% & 01 2'(  78 -6
.  7 %. '@ . /) /LVW   + 5
&RQGLWLRQ  / q      W A6 3 .  " R!
VWUFPS T mr M < :Q!'7   
2 w / M$ 5/6 1=[ ( / q W 6 A6
$:7 %"-7# 2 _(   /-7 %"
C "# " >Q- VWUFPS RC %. / ( *$0$ C
>  =- !     # 
/ I + 5
Y     + ]q " R! .VWULQJ != T m( " T m(
:5 T mr 5
2 ZKLOH C M <#
6WXGHQW 6HDUFKB1RGH 6WXGHQW /LVWFKDUQDPH>@ ^
 6WXGHQW 6
 6 /LVW

~ 
 ZKLOH 6 18//
  LI VWUFPSBV 6!1DPHQDPH  UHWXUQ6
   HOVH6 6!QH[W
 UHWXUQ18//
`
:5 LH$/ T mr ]= > "=- ; ' .  Q!'+ B6_ T mr M < =( \C7
6WXGHQW 6HDUFKB1RGH 6WXGHQW /LVWFKDUQDPH>@ ^
 LI VWUFPSBV /LVW!1DPHQDPH  UHWXUQ/LVW
 LI /LVW!QH[W 18// 6HDUFKB1RGH /LVW!QH[WQDPH 
 UHWXUQ18//
`
2'(" (: 2'(" ''-9
%3 . /   WX (   [- 5 . / 5: &RQGLWLRQ k   [ .H  3 . / QH[W C . /
%3 . / C . / L %$ . / ( 1     ) >  =- 3 . / " R!7 .3!QH[W L
:5 1=[ &RQGLWLRQ k W A6 .  " R! BE- /6   A! L9 T m+ T 
6WXGHQW QH[W 6WXGHQW /LVWFKDUQDPH>@  ^
 6WXGHQW 6
 6 6HDUFKB1RGH /LVWQDPH>@ 
 LI 6 18// UHWXUQ18//
  HOVHUHWXUQ6!QH[W
`
:5 1=[ : - 6 A! 3 . / C . / - 6  =- M 1=[ 7
6WXGHQW QH[W 6WXGHQW /LVW ^
 LI /LVW!QH[W 18// UHWXUQ18//
  HOVHUHWXUQ/LVW!QH[W
`
3UHGHFHVVRU 2'(" (< 2'(" ''-;
%3 . / : WX [- 6 .  5: &RQGLWLRQ k [ .H  3 . / 3UHGHFHVVRU # . /
:5 1=[ 6!QH[W!QDPH 5 WX M < R! "-$=6  =- .6!6XFHVVRU 3 L
6WXGHQW 3UHGHFHVVRU 6WXGHQW /LVWFKDUQDPH>@  ^
 6WXGHQW 6
 6 /LVW
 ZKLOH 6!QH[W 18// 
  LI VWUFPS 6!QH[W!1DPHQDPH  UHWXUQ6
   HOVH6 6!QH[W
 UHWXUQ18//
`

 
:5 1=[ /LVW # 5
3 . / # . / " R!  =- M 1=[ 7
6WXGHQW 3UHGHFHVVRU 6WXGHQW /LVW6WXGHQW 3  ^
 6WXGHQW 6
 6 /LVW
 ZKLOH 6!QH[W 18//
  LI 6!QH[W 3 UHWXUQ6
   HOVH6 6!QH[W
 UHWXUQ18//
`
:-H$/  ! M < 7
6WXGHQW 3UHGHFHVVRU 6WXGHQW /LVW6WXGHQW 3  ^
 LI /LVW!QH[W 3 UHWXUQ/LVW
 LI /LVW!QH[W 18// 
  UHWXUQ3UHGHFHVVRU /LVW!QH[W3 
   HOVHUHWXUQ18//
`
2''> 2'( 1?.-=
/DVWB1RGH T mr T     - " +7 R!  - ( 6 . - m .  
  br
- ( . -  . / >$ A YU "7 6WXGHQW   & " . - m .  >$= YU "7
89: 
   br $GGB1RGH T m( "-$=6 w E     % 5
. '@ . / C . / >$ /2 
:5 1=[  . /
YRLG$GGB1RGH 6WXGHQW /LVW ^
 6WXGHQW /
 / /DVWB1RGH /LVW 
 /!QH[W 1HZ1RGH 
`
:1=[ !# G / 1HZ1RGH . - m .  "-$= N< T mr T  Y6 RC
6WXGHQW 1HZB1RGH ^
 6WXGHQW /
 / QHZ6WXGHQW
 /!QH[W 18//
 FRXW1DPHFLQ!!/!1DPH
 FRXW,GB1XPEHUFLQ!!/!,GB1XPEHU
 UHWXUQ/
`
"6  " .  J   F >?2 %&RQGLWLRQ k    [ H  S4$ 5
6 . - m .  
   b(  
"  5Dm " 1  0$7 / 7 3 "6 / "  S4 ]  #
%3 56 / R / 7 3 "

€ 
$GGB1RGH3 /LVW T mr 7 5-  
>$=  . f–e 1 =     [ 5
 2 6 .  -   .  / A- q
.3 . / 6 . /2  ( . - m .  
bc N< &RQGLWLRQ
3 /

 ( . - m .  
b( f–e 1=[
YRLG$GGB1RGH3 6WXGHQW /LVWFKDUQDPH ^
 6WXGHQW / 6 3
 3 6HUFKB1RGH /LVWQDPH 
 6 1HZB1RGH 
 3!QH[W 6
 6!QH[W /
`
:5 T mr !# .H  3 .  ( . - m .  
b(  =- %Y  1=[ 7
YRLG$GGB1RGH3 6WXGHQW /LVW6WXGHQW 3 ^
 6WXGHQW / 6
 6 1HZB1RGH 
 / 3!QH[W
 3!QH[W 6
 6!QH[W /
`

% & % 2'( AB:-@
. / 89: " +7 R! /LVW   + " &RQGLWLRQ  /  q      W A6 6 .  G9
 . / >$ /2 / . / >$ S     b$ M$ YU "7 / 6 5 . /7 3 !     #6 5 . / H 7
:/ 89: "!- 5 T mr7 . o–e 1=[ 5
2 %3 . /
YRLG'HOHWB1RGH3 6WXGHQW /LVW6WXGHQW 6 ^
 6WXGHQW 3
 3 3UHGHFHVVRU /LVW6 
 3!QH[W 6!QH[W
`

 
3 6 /

+ " .  G9C o–e 1=[

D
3E 2'( 4 '8  -C
"6 / " 1= C7    # . / - 6 ]-   + 5
/ ; ' . / 3 .  * !   +
. / >$ " 12 * !     ]- B L . e–e 1=    [ 5
2  5
&   T m( YU "7
/ "-7 * !      ^927 . /!QH[W / . / C . / >$ / % 3!QH[W 3 . / C
3/ / 7 33 3!3UHGHVHVVRU 5$      #6 w E 7 / 7 3 " 12 A!    #6 5 / C
:5: E< +C . " D  ,) B=[ T mr = .!3UHGHVHVVRU
7 ,!) .14@  . C7 .    1)E- L i"6 ! "6 / >$2 C 5: :# F!   -
 :5 1=[  * !+

3 /

  + 5
"6  S4$ * ! e–e 1=[
6WXGHQW 6ZDSB1RGH 6WXGHQW /LVW6WXGHQW 36WXGHQW / ^
 33 3UHGHFHVVRU /LVW3 
 3/ 3UHGHFHVVRU /LVW/ 
 6 3!QH[W
 3!QH[W /!QH[W
 /!QH[W 6
 33!QH[W /
 3/!QH[W 3
 UHWXUQ/LVW
`
B : OC %/!QH[W 3 > L %33 / > R " "6 / >$2 C 5: :5G   -f
) 7 V C >$= 57 #E  3 . / A/6 Y 3!QH[W /QH[W @ 9E _(

f 
33!QH[W / ‚ !#  ^927 %3!QH[W / @ 9: " +  ]= > ]- 9 %3  
 :5 1=[  89: s/6 .#E  / . / A/6  1/- L9
LI 33 / ^
 /!QH[W 3!QH[W
 3!QH[W /
 LI 3/ 18// 3/!QH[W 3
  HOVH/LVW 3
 UHWXUQ/LVW
`
9E _( B : OC %3!QH[W / > L %3/ 3 > R "6 / >$2 C 5: :G G   -o
 ) 7 V C >$= 57 #E  / . / A/6 Y /!QH[W 3QH[W @
L9 3/!QH[W 3 ‚ !#  ^927 %/!QH[W 3 @ 9: " +  ]= > ]- 9 %/ 
 :5 1=[  89: s/6 .#E  3 . / A/6  1/-

LI 3/ 3 ^
 3!QH[W /!QH[W
 /!QH[W 3
 LI 33 18// 33!QH[W /
  HOVH/LVW /
 UHWXUQ/LVW
`
33 3 > L %; ' . /  7@ . / * ! C 5: :"
  -e
9E 6  s ! 5
?' ( LHX- 9:7 3/ /!3UHGHFHVVRU 18// 7 !3UHGHFHVVRU 18//
33!QH[W / @ 9E  " G$  89: 1K / .3/!QH[W 3 @ 7 33!QH[W / @
% 5
7@ . / 5: 3 . / x2 _( L %33 18// >2 _(7 %33 18// >2 _( +(
+( 3/!QH[W 3 @ 9E  " B[ 1=[7 ./LVW / @  -  5: / - ! . / 1/ 
% 5
7@ . / 5: / . / x2 _( L %3/ 18// >2 _(7 %3/ 18// >2 _(
: 7@  89: s/67 ./LVW 3 @  -  5: 3 - ! . / 1/ 
6WXGHQW 6ZDSB1RGH 6WXGHQW /LVW6WXGHQW 36WXGHQW / ^
 6WXGHQW 6 33 3/
 33 3UHGHFHVVRU /LVW3 
 3/ 3UHGHFHVVRU /LVW/ 
 6 3!QH[W
 3!QH[W /!QH[W
 /!QH[W 6

o 
 LI 33 18// 33!QH[W /
  HOVH/LVW /
 LI 3/ 18// 3/!QH[W 3HOVH/LVW 3
 UHWXUQ/LVW
`
:5- 2 5  B=[ T mr ]= >  =- d/! F/ S + 89: s 7
6WXGHQW 6ZDSB1RGH 6WXGHQW /LVW6WXGHQW 36WXGHQW / ^
 6WXGHQW 6 33 3/
 33 3UHGHFHVVRU /LVW3 
 3/ 3UHGHFHVVRU /LVW/ 
 LI 33 / ^
  /!QH[W 3!QH[W
  3!QH[W /
  LI 3/ 18// 3/!QH[W 3
   HOVH/LVW 3
  UHWXUQ/LVW
 `
 LI 3/ 3 ^
  3!QH[W /!QH[W
  /!QH[W 3
  LI 33 18// 33!QH[W /
   HOVH/LVW /
  UHWXUQ/LVW
 `
 6 3!QH[W
 3!QH[W /!QH[W
 /!QH[W 6
 LI 33 18// 33!QH[W /HOVH/LVW /
 LI 3/ 18// 3/!QH[W 3HOVH/LVW 3
 UHWXUQ/LVW
`
&
I J
-H
.&
/ " &7  1- ! %H  Q/ A
7 %P 6 7 -    )6 !6 6 +    0 ]6 6 "=-
 ]6 6 - q "! 5- 
.   : -Q 5 PQ$< " - >$=6 > "=
]6  PQ$' 
:%XEEOH  E PQ$< .# -  ]6  PQ$' A
7  
6WXGHQW 6RUW 6WXGHQW /LVW ^
 6WXGHQW / / 6
 / /LVW
 ZKLOH /!QH[W 18// ^

e 
  / /!QH[W
  ZKLOH / 18// ^
   LI VWUFPS /!,GB1XPEHU/!,GB1XPEHU !  ^
    /LVW 6ZDSB1RGH /LVW// 
    6 /
    / /
    / 6
   `
   / /!QH[W
  `
  / /!QH[W
 `
 UHWXUQ/LVW
`
1=     [ / 89: T  Y6 RC %  ,$  / "  $ A!      
 -Q 
% ! 5
I$@ 9 s ! D6  ,6 .L ) 17 %D I$ M <7 %5
'p  / i&  lE " ; ' 1# 1C 5
E6 T m( s 6 2 % m 1=[ =[  . #
.; ' s  5
 <7 T mr 89: d/ ƒ#  =-
%  .   [ " 6 + T ! M$    %1= 1=  [ :Q!'7 %1= 1= [ T mr -„ 
89: d/ !< YU « 
C 1     ! 89: 9'?67 %56 1=  [ 6 S  b$6
T mr T   6  T ! 5 s ! M$  .PDLQ 5 #  T mr "    T mr
1=    [ 9LVXDO & V s ! 2 =-7 .9LHZB/LVW 7 6RUW T mr !<- YU "7 )RUPB/LVW
:56Z
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG

VWUXFW6WXGHQW^
FKDU1DPH>@
FKDU,GB1XPEHU>@
6WXGHQW QH[W
`
YRLGPDLQ ^
 LQWL
 6WXGHQW /LVWB6WXGHQW V
 /LVWB6WXGHQW V QHZ6WXGHQW
 IRU L L L ^
  FRXW1DPHFLQ!!V!1DPH

u 
  FRXW,GB1XPEHUFLQ!!V!,GB1XPEHU
  LI L ^
   V!QH[W QHZ6WXGHQW
   V V!QH[W
  `
 `
 V!QH[W 18//
`
.  "-$= N' T m( J- /6  H + s ! D >   !     #  1     @ " >$=- 4
:BD6 / s ! 5- 
7 .. -  . / >$ /-7 %6WXGHQW &  " . - m

LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG
VWUXFW6WXGHQW^
 FKDU1DPH>@
 FKDU,GB1XPEHU>@
 6WXGHQW QH[W
`
6WXGHQW 1HZ1RGH ^
 6WXGHQW V
 V QHZ6WXGHQW
 FRXW1DPHFLQ!!V!1DPH
 FRXW,GB1XPEHUFLQ!!V!,GB1XPEHU
 V!QH[W 18//
 UHWXUQV
`
YRLGPDLQ ^
 LQWL
 6WXGHQW /LVWB6WXGHQW V
 /LVWB6WXGHQW V 1HZ1RGH 
 IRU L L L ^
  V!QH[W 1HZ1RGH 
  V V!QH[W
 `
`
K
L   ---
 -  B  -Q  Y\  9: ]m$7 %  ,$ " 5< a$  >Z C  -Q 
,$ P6 . C7 86 -  ( - ! "   w /    ]- 3  . /  # . /
,$ 5
2 6XFFHVVRU C . / (      [- *7@ %.  1= " U "-      WX H$m$ &   K

y 
.u–e 1=[ 5
2 3UHGHFHVVRU # . / ( [- 5K7 %-H/
=( ( 
   b( % . /    # . / - 6 $   # &   U ,$ Y\  9: ,   #-
.":6+   w /

# . / ( WX . /  C . / WX


3RLQWHU1RGH 'DWD1RGH 3RLQWHU1RGH

5 U & 6 _ .  u–e 1=[

":6    # # G /6 .H ( "=- .N>


C'OOP% # CG" Q  Q !E3* ( .H$/
:56Z 1=[ # . / >$ ( [- 3UHGHFHVVRU 'p WX 
bc
VWUXFW6WXGHQW^
 FKDU1DPH>@
FKDU,GB1XPEHU>@
 6WXGHQW 6XFFHVVRU
 6WXGHQW 3UHGHFHVVRU
`
.  -  m .   
      b( T m( 1 K %   d/! 1 -  /6 ] - B      *7  6 S$6 ( .H$/ 7
$:7 Y:@ T mr7 6ZDS "6  * !  T m(7 % # . /  WX - 6 ]- L9 1HZB1RGH
89: 1- /6 (  : $  †Q7 .T ! .  "   w /      ( }- " L9 3UHGHFHVVRU
.Y$ 5 K &  M <  "- 2 S$
}6 &   U ,$ > $: "$   @ A
7 / *7 6 S$6 " ‡7
" B\C  Y: " >(
. 29 YC Q  HHD  .  12  YC > L % # . / (  [- 5
 b( - m 1C (
%  "-D< !2 . 2_ ]-  9:7 (x-  7 x- )      WX 4 "-D< n     )<
. / C$ &  I$@   < %l=/7 .a  / 89: *7 6 PQ$' ,!) 17
. / # . / " R!  0$)' *7  PQ$< T& 1 14 . 2_ ( ! }
. 5


 '   ---
. / 5
1H[W      WX >( L %7@ . / . '@ . / 
&!6 6 + 5: -   
.. / - ! &!6 - . '@

z 

You might also like