Professional Documents
Culture Documents
ﺗﻠﻌﺐ ﻫﻴﻜﻠﻴﺔ اﳌﻜﺪس واﻟﺮﺗﻞ دوراً ﻫﺎﻣﺎً ﰲ اﻟﱪﳎﺔ وﻟﻐﺎت اﻟﱪﳎﺔ .ﻓﻌﻠﻰ ﺳ ـ ــﺒﻴﻞ اﳌﺜﺎل ،ﻳﺘﻢ ﲣﺰﻳﻦ اﻟﻌﻨﺎﺻ ـ ــﺮ ﰲ
ذاﻛﺮة اﳊﺎﺳــﺐ ﺳــﺘﺨﺪام اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺣﻴﺚ ﻳﺘﻢ ﻋﺎدة ﲣﺰﻳﻦ اﻷﻋﺪاد اﻟﺼــﺤﻴﺤﺔ اﳌﻮﺟﺒﺔ ﺑﺸــﻜﻞ ﺧﺎص ﺳــﺘﻌﻤﺎل
ﻫﺬا اﻟﻨﻈﺎم .وﻫﺬا ﻳﻌﲏ أن اﻟﻨﻈﺎم اﻟﻌﺸـ ـ ـ ــﺮي ﻟﻠﻌﺪد اﻟﺼ ـ ـ ـ ـﺤﻴﺢ ،اﻟﺬي ﻳﻈﻬﺮ ﰲ ﻣﻌﻄﻴﺎت ﺑﺮ ﻣﺞ ﻣﺎ ،ﳚﺐ ﲢﻮﻳﻠﻪ إﱃ
ﻧﻈﺎم ﺛﻨﺎﺋﻲ ،وﻋﺎدة ﻣﺎ ﻳﺘﻢ ذﻟﻚ ﺳـ ـ ـ ـ ـ ـ ــﺘﺨﺪام اﳌﻜﺪس .ﻛﻤﺎ إن ﻣﻬﻤﺔ اﳌﱰﺟﻢ ﻫﻲ ﺗﻮﻟﻴﺪ ﺗﻌﻠﻴﻤﺎت ﻟﻐﺔ اﻵﻟﺔ اﳌﻄﻠﻮب
ﺗﻨﻔﻴﺬﻫﺎ ﻋﻮﺿـﺎً ﻋﻦ اﻟﱪ ﻣﺞ اﳌﺼــﺪر اﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺎت ﻋﺎﻟﻴﺔ اﳌﺴــﺘﻮى .وأﺣﺪ أﺟﺰاء ﻫﺬﻩ اﳌﻬﻤﺔ ﻫﻮ إﳚﺎد ﺗﻌﻠﻴﻤﺎت ﻟﻐﺔ
اﻵﻟﺔ ﻣﻦ أﺟﻞ ﺗﻘﻴﻴﻢ اﻟﺘﻌﺎﺑﲑ اﳊﺴﺎﺑﻴﺔ ﺳﺘﺨﺪام ﺻﻴﻎ اﻟﺘﺪوﻳﻦ اﻟﻌﻜﺴﻲ ﺑﻮﺳﺎﻃﺔ اﳌﻜﺪس.
-١-١ﺗﻌﺮﻳﻒ اﳌﻜﺪس
ﻳﻌﺮف اﳌﻜﺪس ﻋﻠﻰ أﻧﻪ ﳎﻤﻮﻋﺔ ﻣﺮﺗﺒﺔ ﻣﻦ اﻟﻌﻨﺎﺻــﺮ ﺣﺴــﺐ ﺗﺮﺗﻴﺐ إدﺧﺎﳍﺎ زﻣﻨﻴﺎً ،ﺣﻴﺚ ﳝﻜﻦ إدﺧﺎل ﻋﻨﺎﺻــﺮ
ﺟﺪﻳﺪة ﻣﻦ ﻣﺪﺧﻞ واﺣﺪ وﺳﺤﺐ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﳌﻜﺪس ﻣﻦ ﻧﻔﺲ اﳌﺪﺧﻞ ،ﻳﺪﻋﻰ ﻫﺬا اﳌﺪﺧﻞ ﺑﻘﻤﺔ اﳌﻜﺪس .ﺗﺘﻤﻴﺰ
ﺑﻨﻴﺔ اﳌﻜﺪس ن اﻟﻌﻨﺼ ــﺮ اﳌﺪﺧﻞ أﺧﲑاً إﱃ اﳌﻜﺪس ﻫﻮ اﻟﻌﻨﺼ ــﺮ اﳌﺴ ــﺤﻮب أوﻻً ﻣﻦ ،وﳍﺬا اﻟﺴ ــﺒﺐ ﻳﺪﻋﻰ اﳌﻜﺪس
أﺣﻴﺎ ً ﺑﻼﺋﺤﺔ .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
;}
٨-١
{
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 flow(stack *s)
{
if (s->top==s->maxstack)\
{
cout<<endl<<"overflow, ";
return true;
}
else return false;
};
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 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;
١٢-١
;while (!empty(S2)) cout<<pop(S2)<<endl
}
ﻣﺜﺎل ٣–١
ﻟﻴﻜﻦ ﻟﺪﻳﻨﺎ ﻋﺪد nﻣﻦ اﻷﻗﺮاص ﻗﻄﺎر ﻣﺘﻔﺎوﺗﺔ ﻣﺮﺗﺒﺔ ﺣﺴ ـ ـ ــﺐ ﻛﱪ أﻗﻄﺎرﻫﺎ داﺧﻞ ﻋﻤﻮد .اﳌﻄﻠﻮب ﻧﻘﻞ ﻫﺬﻩ
اﻷﻗﺮاص ،اﻟﻘﺮص ﺗﻠﻮ اﻵﺧﺮ إﱃ ﻋﻤﻮد آﺧﺮ ﲝﻴﺚ ﺗﺼ ـ ـ ـ ــﺒﺢ ﺑﻨﻔﺲ اﻟﱰﺗﻴﺐ ،ﳝﻜﻦ اﺳ ـ ـ ـ ــﺘﺨﺪام ﻋﻤﻮد ﻟﺚ ﻣﺴ ـ ـ ـ ــﺎﻋﺪ
ﺑﺸﺮط ﻋﺪم وﺿﻊ ﻗﺮص ﻛﺒﲑ ﻓﻮق ﻗﺮص أﺻﻐﺮ .إذا ﻓﺮﺿﻨﺎ أن ﺗﺮﺗﻴﺐ اﻷﻗﺮاص ﻳﺒﺪأ ﺻﻌﻮداً ﲝﺴﺐ اﳊﺠﻢ ﻣﻦ ،1أي
أن اﻟﻘﺮص اﻷﺻ ــﻐﺮ ﺧﺬ اﻟﺮﻗﻢ 1وﻣﻦ ﰒ اﻟﻘﺮص اﻷﻛﱪ ﺧﺬ اﻟﺮﻗﻢ 2وﻫﻜﺬا...وﻳﺒﲔ اﻟﺸ ــﻜﻞ ٣–١ﺑﻌﺾ ﻣﺮاﺣﻞ
ﻋﻤﻠﻴﺔ اﻟﻨﻘﻞ.
1
2
3
4
3
4 2 1
1
4 2 3
1
2
4 3
ﻟﺘﺤﻠﻴﻞ اﳌﺴ ـ ــﺄﻟﺔ ﺳ ـ ــﻨﺒﺪأ ﲝﺎﻟﺔ وﺟﻮد ﻗﺮص واﺣﺪ ﰲ اﻟﻌﻤﻮد ،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;
};
١٦-١
int pop(stack *s)
{
int x;
x=s->item[s->top];
s->top= s->top-1;
return x;
}
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<TUC 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'
1A &
% 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
ZKLOHLWHP>M@9M
-
:1.<C 1' =
/ M *2
+C *S2
=
/ 1)
ekC /2 Kd #
IRULQWQ 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
ZKLOHLWHP>M@9 M QXPQRGHVM
:
&%g
.I N]L
$'. V
C#
ZKLOHLWHP>M@9 M QXPQRGHVM
IRULQWQ QXPQRGHVQ! MQ
LWHP>Q@ LWHP>Q@
LWHP>M@ 9
QXPQRGHV
P*S2
*mS+ 7 9 1' /% 2I 1<TU
1
C *2
N]kC V0 $'.
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 V0 `/.:
@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) '2A 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
-
.S 1^/C D' !g
M . 02y QRGHS x
.M
?.
$/.
K0 02y GDWDS x
.*aO 7# PS M .
/2
K0 02y QH[WS 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
*H2C#
7 *S2I 1dUd 1FO 1<TU
+ t)U4 .1<TU
1 V'<
]
1AkC [*4# PD 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
|-
'DWD 'DWD 'DWD1H[W
D
'DWD1H[W
S
'DWD1H[W 'DWD1H[W
'DWD1H[W
E
'DWD1H[W 'DWD1H[W 'DWD1H[W 'DWD1H[W
S
OLVW QXOO
F
'DWD1H[W 'DWD1H[W 'DWD1H[W 'DWD1H[W
OLVW QXOO
(–
&N
QRGHS + C .M
?.
QH[W K0 ='A/ 9!#*X
QRGHS 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
QRGHS k 1<TU
#"
M
/2I
QH[WSmOLVW
' /7 5 QRGHS 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
GDWDSm
QH[WSmOLVW
OLVWmS
1 [ 1' 9+ 1 A &>+ (SXVKOLVW[ 1'.I I *
) 1'e!
/
i@7 K' %
) V'<S &%gC & 1'e!
/
+ 5f . GDWDSm[ C GDWDSm1'.
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 1FO 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[WS
.– &%g
F 1<
12' 1'.
i@7 1;'
4
E
'DWD1H[W
S
'DWD1H[W 'DWD1H[W
–
:1'
1'.
1^/C [ *'m
3< QRGHS M . GDWD K0 ='A/ x
[mGDWDS
i@D GDWD K 0 $/
< + C# .1<TU #"
M
7 X ' 345
M
S *' g
M*
K QRGHS M
) . M
i@7 b@) %LC V S+ ?@ P [ *'m
3< D2 K M
>/ : J4" 1<TU
MI *' gQH[WS + K[*
.I OLVW >!
* aO
$
o 1<TU
M 5
.OLVW >!
*aO
QRGHS 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 QRGHS & > &>+ 1'2 }U
J' `/[*
o
1^/C D2I * 4# P>
U 1<S D. ># M
**<
1'2 }27 J4+ _*
F2 ') .S *aO
:1'.
IUHHQRGHS
.– &%g
G 1<
*H4
S1' + C .1 K M
" PV'<S *'[ QRGHS l/>*
V 1'.
i@7 @'F2 C
&<4 $
/G
='> =A/C .V'<S *'[ V X+ 1'
?.
l/>! 9+ k $!*) y
M . *aO 7
.[mSRSOLVW 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<TUC
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 Q4 I 1I/; /%
-
/%
C +2 .OLVW 1<TU
:
M]IL M7> V R'<C DYDLO 1)
1<T: b X
:1'
$'.
C 1<TU
IRULQWM 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^
IRULQWM 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^
IRULQWM 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:
YRLG3XW1RGHLQW9DO^
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#
:
&%gC K'
i@7
LQWL /!OLVW
ZKLOHL ^
FRXW/!1RGH>L@'DWDHQGO
L /!1RGH>L@QH[W
`
– %
1<TU
i@7 ]
I +2# P 7I ]I //LVW Q4 / 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
OLVW ODYDLO
5–
:
/7 .%
Y4*
#
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG
VWUXFW1RGH7\SH^
LQW'DWD
LQWQH[W
`
VWUXFW//LVW^
1RGH7\SH1RGH>@
LQWDYDLOOLVW
`
LQWQXPQRGHV
//LVW
/ QHZ//LVW
YRLG1HZ/LVW^
IRULQWM MQXPQRGHVM/!1RGH>M@QH[W M
/!1RGH>QXPQRGHV@QH[W
-
/!DYDLO
/!OLVW
`
YRLG3XW1RGHLQW9DO^
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
ZKLOHL ^
FRXW/!1RGH>L@'DWDHQGO
L /!1RGH>L@QH[W
`
`
" ?o P Kd # Kd # 9+ PDN] '* \%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 J02# <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
67 -$
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# .$
*aO5 *'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^
IRULQWM 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 .
YRLG3XW1RGHLQW9DOLQW
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 '
% DD# – (
1<TU
/%
C V0 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^
IRULQWM MQXPQRGHVM/!1RGH>M@QH[W M
/!1RGH>QXPQRGHV@QH[W
`
YRLG3XW1RGHLQW9DOLQW
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
LIDYDLO 3XW1RGH OLVW DYDLO
LIDYDLO 3XW1RGH OLVW DYDLO
LIDYDLO 3XW1RGH OLVW DYDLO
LIOLVW 3XW1RGH DYDLO OLVW
LIOLVW 3XW1RGH DYDLO OLVW
|-
LQWL OLVW
ZKLOHL ^
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 :&% gC 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
IRULQWM 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
LQW1HZ1RGHLQW9DO^
LI/!DYDLO UHWXUQ
LQWQ /!DYDLO
/!DYDLO /!1RGH>Q@QH[W
/!1RGH>Q@QH[W
/!1RGH>Q@'DWD 9DO
UHWXUQQ
`
QRGH
Q
QRGH QRGH QRGHQXPQRGH
/!DYDLO ««««
=–
9DOP
QRGH QRGHP QRGHQXPQRGH
/!DYDLO Q QH[W «
>–
-
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
:
&%gC c
*>L
@7
%2 P1<TU
c *aO OLVW *
2# 3UHGHFHVVRU c
*>L
@7
LQW3UHGHFHVVRULQWQRGH^
LIQRGH OLVWUHWXUQOLVW
LQWQ OLVW
ZKLOH/!1RGH>Q@QH[W ^
LI/!1RGH>Q@QH[W QRGHUHWXUQQ
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 3UHGHFHVVRUQRGH 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!
QRGH
OLVW
A–
1<TUC 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
:&%gC QRGH M . )UHH1RGH 1AL
-
YRLG)UHH1RGHLQWQRGH^
/!1RGH>QRGH@'DWD
/!1RGH>QRGH@QH[W /!DYDLO
/!DYDLO QRGH
`
. K! M
< C DYDLO # OLVW '
<TU
1'2C – &%g
'#
B–
:
&%gC 1<TU
QRGH MI < c
*> j* %#
YRLG3RS1RGHLQWQRGH^
LQWS 3UHGHFHVVRUQRGH
LIS UHWXUQ
LIQRGH OLVWOLVW /!1RGH>QRGH@QH[W
HOVH
/!1RGH>S@QH[W /!1RGH>QRGH@QH[W
)UHH1RGHQRGH
`
(– %
@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$GGB9DOXHLQW9DO^
LQWQQ
Q Q OLVW
LI/!1RGH>OLVW@'DWD!9DOQ HOVH
GR^
LI/!1RGH>Q@QH[W ^Q QEUHDN`
Q Q
Q /!1RGH>Q@QH[W
` ZKLOH/!1RGH>Q@'DWD9DO
3XW1RGH9DOQ
`
:. 5 1<TU
'*
W# M
14
1'
# M
K! * 3ULQWB/LVW c
*> b* 2#
-
YRLG3ULQWB/LVWLQWOLVW^
LQWL OLVW
ZKLOHL ^
FRXWL/!1RGH>L@'DWDHQGO
L /!1RGH>L@QH[W
`
`
:$'.
C
/
.I P P P P K'
j'2 Kd # PQ *S2I 10N 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
IRULQWM MQXPQRGHVM
/!1RGH>M@QH[W M
/!1RGH>QXPQRGHV@QH[W
/!DYDLO
OLVW
`
YRLG)UHH1RGHLQWQRGH^
/!1RGH>QRGH@QH[W /!DYDLO
/!DYDLO QRGH
p-
`
LQW3UHGHFHVVRULQWQRGH^
LIQRGH OLVWUHWXUQOLVW
LQWQ OLVW
ZKLOH/!1RGH>Q@QH[W ^
LI/!1RGH>Q@QH[W QRGHUHWXUQQ
Q /!1RGH>Q@QH[W
`
UHWXUQ
`
YRLG3RS1RGHLQWQRGH^
LQWS 3UHGHFHVVRUQRGH
LIS UHWXUQ
LIQRGH OLVWOLVW /!1RGH>QRGH@QH[W
HOVH
/!1RGH>S@QH[W /!1RGH>QRGH@QH[W
)UHH1RGHQRGH
`
LQW1HZ1RGHLQW9DO^
LI/!DYDLO UHWXUQ
LQWQ /!DYDLO
/!DYDLO /!1RGH>Q@QH[W
/!1RGH>Q@QH[W
/!1RGH>Q@'DWD 9DO
UHWXUQQ
`
YRLG3XW1RGHLQW9DOLQWQRGH^
LQWQ 1HZ1RGH9DO
LIQ UHWXUQ
LIQRGH ^
/!1RGH>Q@QH[W OLVW
OLVW Q
`
HOVH^
/!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
/!1RGH>QRGH@QH[W Q
`
`
YRLG3ULQWB/LVWLQWOLVW^
p-
LQWL OLVW
ZKLOHL ^
FRXWL/!1RGH>L@'DWDHQGO
L /!1RGH>L@QH[W
`
`
YRLGPDLQ^
1HZ/LVW
3XW1RGH
3XW1RGH
3XW1RGH
3XW1RGH
3XW1RGH
3RS1RGH
3RS1RGH
3ULQWB/LVWOLVW
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<TUC 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
YRLG3RSB1RGHLQWQRGH^
LQWS 3UHGHFHVVRUQRGH
LIS UHWXUQ
LIQRGH OLVWOLVW /!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
YRLG3XWB1RGHLQWQLQWQRGH^
LIQRGH ^
/!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&KDB1RGHLQWQRGHLQWQ^
3RSB1RGHQRGH
3XWB1RGHQRGHQ
`
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&KDB1RGHQRGHQRGH 9+ PQRGH
:K C c
*>L
@ 7 02 PL 3UHGHFHVVRUQRGH R ') &KDB1RGHQRGHL 9+ PQRGH M
:. 5 c
*>L
@7 j* %# 6ZDSB1RGHQRGHQRGH
YRLG6ZDSB1RGHLQWQRGHLQWQRGH^
LQWL 3UHGHFHVVRUQRGH
LIQRGH OLVWL
&KDB1RGHQRGHQRGH
&KDB1RGHQRGHL
`
; J4+ 9+ P1<TU
1 QRGH = A# ; 1<TU
1
C QRGH M
345
o J4+ t):
.L 1'
]2
p-
G1$ 77 -]
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
ZKLOHL ^
M /!1RGH>L@QH[W
LIM /!1RGH>L@'DWD/!1RGH>M@'DWD
6ZDSB1RGHLM
L /!1RGH>L@QH[W
`
*'m
b* 2
@D P1<TU
I :
}27
] $'.
i@7 !
*% .I 5LSSOH 1'e!
/N /
*2I
!/# P'
p|-
ERRO&RQW
GR^
&RQW IDOVH
L OLVW
ZKLOHL ^
M /!1RGH>L@QH[W
LIM /!1RGH>L@'DWD/!1RGH>M@'DWD^
6ZDSB1RGHLM
&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
IRULQWM MQXPQRGHVM
/!1RGH>M@QH[W M
/!1RGH>QXPQRGHV@QH[W
/!DYDLO
/LVW
`
p~-
YRLG)UHH1RGHLQWQRGH^
/!1RGH>QRGH@'DWD
/!1RGH>QRGH@QH[W /!DYDLO
/!DYDLO QRGH
`
LQW3UHGHFHVVRULQWQRGH^
LIQRGH OLVWUHWXUQOLVW
LQWQ OLVW
ZKLOH/!1RGH>Q@QH[W ^
LI/!1RGH>Q@QH[W QRGHUHWXUQQ
Q /!1RGH>Q@QH[W
`
UHWXUQ
`
YRLG3RS1RGHLQWQRGH^
LQWS 3UHGHFHVVRUQRGH
LIS UHWXUQ
LIQRGH OLVWOLVW /!1RGH>QRGH@QH[W
HOVH
/!1RGH>S@QH[W /!1RGH>QRGH@QH[W
)UHH1RGHQRGH
`
YRLG3RSB1RGHLQWQRGH^
LQWS 3UHGHFHVVRUQRGH
LIS UHWXUQ
LIQRGH OLVWOLVW /!1RGH>QRGH@QH[W
HOVH
/!1RGH>S@QH[W /!1RGH>QRGH@QH[W
`
YRLG3XWB1RGHLQWQLQWQRGH^
LIQRGH ^
/!1RGH>Q@QH[W OLVW
OLVW Q
`HOVH^
/!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
/!1RGH>QRGH@QH[W Q
`
`
p-
YRLG&KDB1RGHLQWQRGHLQWQ^
3RSB1RGHQRGH
3XWB1RGHQRGHQ
`
YRLG6ZDSB1RGHLQWQRGHLQWQRGH^
LQWL 3UHGHFHVVRUQRGH
LIQRGH OLVWL
&KDB1RGHQRGHQRGH
&KDB1RGHQRGHL
`
LQW1HZ1RGHLQW9DO^
LI/!DYDLO UHWXUQ
LQWQ /!DYDLO
/!DYDLO /!1RGH>Q@QH[W
/!1RGH>Q@QH[W
/!1RGH>Q@'DWD 9DO
UHWXUQQ
`
YRLG3XW1RGHLQW9DOLQWQRGH^
LQWQ 1HZ1RGH9DOLIQ UHWXUQ
LIQRGH ^
/!1RGH>Q@QH[W OLVW
OLVW Q
`HOVH^
/!1RGH>Q@QH[W /!1RGH>QRGH@QH[W
/!1RGH>QRGH@QH[W Q
`
`
YRLG$GGB9DOXHLQW9DO^
LQWQQ
Q Q OLVW
LI/!1RGH>OLVW@'DWD!9DOQ HOVH
GR^
LI/!1RGH>Q@QH[W ^Q QEUHDN`
Q Q
Q /!1RGH>Q@QH[W
` ZKLOH/!1RGH>Q@'DWD9DO
3XW1RGH9DOQ
`
YRLG3ULQWB/LVWLQWOLVW^
LQWL OLVW
p-
ZKLOHL ^
FRXWL/!1RGH>L@'DWDHQGO
L /!1RGH>L@QH[W
`
FRXWHQGOHQGO
`
YRLG6RUWB/LVW^
LQWML OLVW
ERRO&RQW
GR^
&RQW IDOVH
L OLVW
ZKLOHL ^
M /!1RGH>L@QH[W
LIM /!1RGH>L@'DWD/!1RGH>M@'DWD^
6ZDSB1RGHLM
&RQW WUXH
`
L /!1RGH>L@QH[W
`
`ZKLOH&RQW
`
YRLGPDLQ^
1HZ/LVW
OLVW
$GGB9DOXH
$GGB9DOXH
$GGB9DOXH
$GGB9DOXH
$GGB9DOXH
3ULQWB/LVWOLVW
6RUWB/LVW
3ULQWB/LVWOLVW
`
!!!! 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 ZKLOHL 1.) @'F2 C# .7UXH &RQW 1' ]
PLIM « !
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
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
.
/ .
/ ( WX
'DWD1RGH 3RLQWHUWRQH[W1RGH
(
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 Tm( G/ %s! & #!7 .?< a$4$ 5
%T5 W
:5 1=[ Tmr 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 .
Tmr 9: >$=t -
/ ]= %Tmr 9: T
%.
-
m .
br .V .
/ >$
/- YU "7 %QH[W V
o
:
6W!QH[W 1HZ1RGH
6W 6W!QH[W
Tmr T
7@ / 1/ %/LVWB6WXGHQW 6W 1m " "-$=6 T
6W WX K / 1 YU "7 %T
! .
/ C+ .
/2 .
-
.
/ WX
#67 %1HZ1RGH
Y Tm( 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 Tmr 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 Tmr T
Y YU "7 %6W!QH[W 18// >c
57 6W V
.
-
.
/ >$ ( [ 6W 4 1 67 .6W!1H[W ( $
#-7 %1HZ1RGH Tmr .
-
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
Tmr 9E 6 Q=6 =- %*K 1! .
C7 /
H ( Iq . [
br
:5- 2 PDLQ 5# Tmr ,!)-7 %-Q=6 C 5
[ $GGB6WXGHQW
YRLGPDLQ^
6W /LVWB6WXGHQW
IRULQWL L L
$GGB6WXGHQW
`
# ! "
--
& #!7 .,$ @ / 7 " %.
b( 7 %+ "-$=6 !/6
.T4 Y6 .
#' " + "-$=6 wE < ,$ ;'@ @ / w
5m( J-/6 1-
/6
/ . W! Y .T4 Y 97 .B'H
/ x$U " s! 5
/ 89:
Tmr 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
1HZ1RGHLQWL^
6WXGHQW
V
V QHZ6WXGHQW
VWUFS\BVV!1DPH'DWD>L@1DPH
VWUFS\BVV!,GB1XPEHU'DWD>L@,GB1XPEHU
V!QH[W 18//
UHWXUQV
`
YRLG$GGB6WXGHQWLQWL^
6W!QH[W 1HZ1RGHL
6W 6W!QH[W
`
YRLGPDLQ^
6W /LVWB6WXGHQW
IRULQWL L L$GGB6WXGHQWL
`
% & '( )
" -$
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
ZKLOH6W!QH[W 18//^
6W 6W!QH[W
FRXW1DPH6W!1DPH,GB1XPEHU
6W!,GB1XPEHUHQGO
`
:1=[ 9LHZB/LVW Y
}'r Tm( 5
/ 89: " |) > =-
YRLG9LHZB/LVW6WXGHQW
/^
6W /
ZKLOH6W!QH[W 18// ^
6W 6W!QH[W
FRXW1DPH6W!1DPH,GB1XPEHU6W!,GB1XPEHUHQGO
`
`
:5 1=[ ,!) B2 5
-H$/ M
< "=- ^97 %B#E Q=- > "=- Tm( $:7
YRLG9LHZB/LVW6WXGHQW
/^
LI/ 18//UHWXUQ
FRXW1DPH/!1DPH ,GB1XPEHU/!,GB1XPEHUHQGO
9LHZB/LVW/!QH[W
`
'( '-*
/ Tm( "-$=6 =-
Q {( Tm( "-$= 4 5 - lE
:5- 2 1RGHB1XPEHU
LQW1RGHB1XPEHU6WXGHQW
/^
LQWQ
6W /
ZKLOH6W!QH[W 18//^
Q
6W 6W!QH[W
`
UHWXUQQ
`
:5- 2 LH$ 1=[ 1/ Tmr J-/6 .H( =- &# -7
LQW1RGHB1XPEHU6WXGHQW
/^
LI/!QH[W 18//UHWXUQ
HOVHUHWXUQ1RGHB1XPEHU/!QH[W
z
`
'( +,
.-
:5 LH$/ Tmr .'@ .
/ " T
(QHZ l=) GHOHWH /
TVc M$
YRLG'HOHWHB/LVW6WXGHQW
/^
LI/ 18//UHWXUQHOVH'HOHWHB/LVW/!QH[W
GHOHWH/
`
"
/ G9C 1/- YU "7 - ( -
"
/ w/ Tmr 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' Tm( "-$=6 1FE- 97 %## - ( .
-
m .
b( 5
# 5
.'@ .
/
# # 5
.
'p " R!- 5 Tmr .^_ "!- 5 *K .$ .H(7 .
/ 89: H-c
:.
/ 89: >$
/-7 I M4Q7 T " $=
6WXGHQW
/DVWB1RGH6WXGHQW
/^
ZKLOH/!QH[W 18//
/ /!QH[W
UHWXUQ/
`
:5 1=[ .H7/ I$? Tmr 9: 2 =- 2
6WXGHQW
/DVWB1RGH6WXGHQW
/^
LI/!QH[W 18//UHWXUQ/
HOVHUHWXUQ/DVWB1RGH/!QH[W
`
% & 01 2'( 78
-6
.
7 %.'@ .
/) /LVW + 5
&RQGLWLRQ / q W A6 3 .
" R!
VWUFPS Tmr M
< :Q!'7
2 w/ M$ 5/6 1=[ ( / qW 6 A6
$:7 %"-7# 2 _(
/-7 %"
C "# " >Q- VWUFPS RC %.
/ ( *$0$ C
> =- ! #
/ I + 5
Y + ]q " R! .VWULQJ != Tm( " Tm(
:5 Tmr 5
2 ZKLOH C M
<#
6WXGHQW
6HDUFKB1RGH6WXGHQW
/LVWFKDUQDPH>@^
6WXGHQW
6
6 /LVW
~
ZKLOH6 18//
LIVWUFPSBV6!1DPHQDPH UHWXUQ6
HOVH6 6!QH[W
UHWXUQ18//
`
:5 LH$/ Tmr ]= > "=- ;' .
Q!'+ B6_ Tmr M
< =( \C7
6WXGHQW
6HDUFKB1RGH6WXGHQW
/LVWFKDUQDPH>@^
LIVWUFPSBV/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 kW A6 .
" R! BE-/6 A! L9 Tm+ T
6WXGHQW
QH[W6WXGHQW
/LVWFKDUQDPH>@ ^
6WXGHQW
6
6 6HDUFKB1RGH/LVWQDPH>@
LI6 18//UHWXUQ18//
HOVHUHWXUQ6!QH[W
`
:5 1=[ :
-
6 A! 3 .
/ C .
/
-
6 =- M 1=[ 7
6WXGHQW
QH[W6WXGHQW
/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
3UHGHFHVVRU6WXGHQW
/LVWFKDUQDPH>@ ^
6WXGHQW
6
6 /LVW
ZKLOH6!QH[W 18//
LIVWUFPS6!QH[W!1DPHQDPH UHWXUQ6
HOVH6 6!QH[W
UHWXUQ18//
`
:5 1=[ /LVW # 5
3 .
/ # .
/ " R! =- M 1=[ 7
6WXGHQW
3UHGHFHVVRU6WXGHQW
/LVW6WXGHQW
3 ^
6WXGHQW
6
6 /LVW
ZKLOH6!QH[W 18//
LI6!QH[W 3UHWXUQ6
HOVH6 6!QH[W
UHWXUQ18//
`
:-H$/ ! M
< 7
6WXGHQW
3UHGHFHVVRU6WXGHQW
/LVW6WXGHQW
3 ^
LI/LVW!QH[W 3UHWXUQ/LVW
LI/LVW!QH[W 18//
UHWXUQ3UHGHFHVVRU/LVW!QH[W3
HOVHUHWXUQ18//
`
2''> 2'( 1?.-=
/DVWB1RGH Tmr T
- " +7 R! - ( 6 .
-
m .
br
- ( .
-
.
/ >$ A YU "7 6WXGHQW
& " .
-
m .
>$= YU "7
89:
br $GGB1RGH Tm( "-$=6 wE % 5
.'@ .
/ C .
/ >$ /2
:5 1=[ .
/
YRLG$GGB1RGH6WXGHQW
/LVW^
6WXGHQW
/
/ /DVWB1RGH
/LVW
/!QH[W 1HZ1RGH
`
:1=[ !# G/ 1HZ1RGH .
-
m .
"-$= N< Tmr 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 Tmr 7 5-
>$= . f–e 1 = [ 5
2 6 .
-
.
/ A-q
.3 .
/ 6 .
/2 ( .
-
m .
bc N< &RQGLWLRQ
3 /
( .
-
m .
b( f–e 1=[
YRLG$GGB1RGH36WXGHQW
/LVWFKDUQDPH^
6WXGHQW
/
6
3
3 6HUFKB1RGH/LVWQDPH
6 1HZB1RGH
3!QH[W 6
6!QH[W /
`
:5 Tmr !# .H
3 .
( .
-
m .
b( =- %Y 1=[ 7
YRLG$GGB1RGH36WXGHQW
/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 Tmr7 . o–e 1=[ 5
2 %3 .
/
YRLG'HOHWB1RGH36WXGHQW
/LVW6WXGHQW
6^
6WXGHQW
3
3 3UHGHFHVVRU/LVW6
3!QH[W 6!QH[W
`
3 6 /
D
3E 2'( 4 '8 -C
"6
/ " 1= C7 # .
/
-
6 ]- + 5
/ ;' .
/ 3 .
*
! +
.
/ >$ " 12 *
! ]- B L . e–e 1= [ 5
2 5
& Tm( YU "7
/ "-7 *
! ^927 ./!QH[W / .
/ C .
/ >$ / %3!QH[W 3 .
/ C
3/ / 7 33 3!3UHGHVHVVRU 5$ #6 wE 7 / 7 3 " 12 A! #6 5
/ C
:5: E< +C .
" D ,) B=[ Tmr = .!3UHGHVHVVRU
7 ,!) .14@ .
C7 .
1)E- L i"6
! "6
/ >$2 C 5: :#
F!
-
:5 1=[ *
!+
3 /
+ 5
"6
S4$ *
! e–e 1=[
6WXGHQW
6ZDSB1RGH6WXGHQW
/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
LI33 /^
/!QH[W 3!QH[W
3!QH[W /
LI3/ 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/-
LI3/ 3^
3!QH[W /!QH[W
/!QH[W 3
LI33 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
6ZDSB1RGH6WXGHQW
/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
LI33 18//33!QH[W /
HOVH/LVW /
LI3/ 18//3/!QH[W 3HOVH/LVW 3
UHWXUQ/LVW
`
:5- 2 5 B=[ Tmr ]= > =- d/! F/ S + 89: s
7
6WXGHQW
6ZDSB1RGH6WXGHQW
/LVW6WXGHQW
36WXGHQW
/^
6WXGHQW
6
33
3/
33 3UHGHFHVVRU/LVW3
3/ 3UHGHFHVVRU/LVW/
LI33 /^
/!QH[W 3!QH[W
3!QH[W /
LI3/ 18//3/!QH[W 3
HOVH/LVW 3
UHWXUQ/LVW
`
LI3/ 3^
3!QH[W /!QH[W
/!QH[W 3
LI33 18//33!QH[W /
HOVH/LVW /
UHWXUQ/LVW
`
6 3!QH[W
3!QH[W /!QH[W
/!QH[W 6
LI33 18//33!QH[W /HOVH/LVW /
LI3/ 18//3/!QH[W 3HOVH/LVW 3
UHWXUQ/LVW
`
&
I J
-H
.&
/ " &7 1-
! %H
Q/ A
7 %P 6 7 -
)6 !66 + 0 ]66 "=-
]66 -q "! 5-
. : -Q 5 PQ$< " - >$=6 > "=
]6 PQ$'
:%XEEOH E PQ$< .# -
]6 PQ$' A
7
6WXGHQW
6RUW6WXGHQW
/LVW^
6WXGHQW
/
/
6
/ /LVW
ZKLOH/!QH[W 18//^
e
/ /!QH[W
ZKLOH/ 18//^
LIVWUFPS/!,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 Tm( s 6 2 %
m 1=[ =[ .#
.;' s 5
<7 Tmr 89: d/ # =-
%
. [ " 6 + T ! M$ %1= 1= [ :Q!'7 %1= 1= [ Tmr -
89: d/ !< YU «
C 1 ! 89: 9'?67 %56 1= [ 6 S b$6
Tmr T
6 T ! 5 s! M$ .PDLQ 5 # Tmr "
Tmr
1= [ 9LVXDO & V s! 2 =-7 .9LHZB/LVW 7 6RUW Tmr !<- YU "7 )RUPB/LVW
:56Z
LQFOXGHLRVWUHDP!
XVLQJQDPHVSDFHVWG
VWUXFW6WXGHQW^
FKDU1DPH>@
FKDU,GB1XPEHU>@
6WXGHQW
QH[W
`
YRLGPDLQ^
LQWL
6WXGHQW
/LVWB6WXGHQW
V
/LVWB6WXGHQW V QHZ6WXGHQW
IRUL L L^
FRXW1DPHFLQ!!V!1DPH
u
FRXW,GB1XPEHUFLQ!!V!,GB1XPEHU
LIL^
V!QH[W QHZ6WXGHQW
V V!QH[W
`
`
V!QH[W 18//
`
.
"-$= N' Tm( 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
IRUL 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/
z