Professional Documents
Culture Documents
Algo 1
Algo 1
Algo 1
اﻟﺤﻤﺪ ﷲ ﻣﻌﺰ اﻟﺤﻖ وﻧﺎﺻﺮه ،وﻣﺬل اﻟﺒﺎﻃﻞ وﻗﺎﺻﺮه ،ﻋﻼم اﻟﻐﯿﻮب ،وﻣﻦ ﺑﯿﺪه أزﻣﺔ اﻟﻘﻠﻮب،
اﻟﺨﺒﯿﺮ ﺑﻤﺎ ﺗﺨﻔﻲ اﻟﻀﻤﺎﺋﺮ ،وﺗﻜﻦ اﻟﺴﺮاﺋﺮ ،اﻟﻌﺎﻟﻢ ﺑﻤﺎ ﺗﻔﻀﻲ إﻟﯿﮫ اﻷﻣﻮر ،وﺑﺨﺎﺋﻨﺔ اﻷﻋﯿﻦ وﻣﺎ
ﺗﺨﻔﻲ اﻟﺼﺪور ،واﻟﺼﻼة واﻟﺴﻼم ﻋﻠﻰ ﺣﺒﯿﺒﻨﺎ ﻣﺤﻤﺪ ﻛﺎﺷﻒ اﻟﻐﻤﺔ ﻋﻦ اﻷﻣﺔ ،اﻟﻨﺎﻃﻖ ﻓﯿﮭﻢ
ﻛﻞ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺗﺴﺘﺨﺪﻣﮭﺎ ﻋﻠﻰ ﺣﺎﺳﻮﺑﻚ ﻟﻢ ﺗﺄت ﻣﻦ ﻓﺮاغ ،ﺑﻞ ھﻲ ﻧﺘﺎج ﻟﻠﺘﺮﻛﯿﺒﺔ اﻟﺒﺸﺮﯾﺔ
اﻟﺘﻲ ﻓﻄﺮ اﷲ ﻋﺰ وﺟﻞ اﻟﻨﺎس ﻋﻠﯿﮭﺎ ،واﻟﺘﻲ ﺗﺪﻓﻌﮭﻢ ﺑﺎﺳﺘﻤﺮار إﻟﻰ إﯾﺠﺎد ﺣﻠﻮل ﻟﻮﺿﻌﯿﺎت
ﻣﻌﯿﻨﺔ أو اﺑﺘﻜﺎر وﺳﺎﺋﻞ ﻟﻠﻮﺻﻮل إﻟﻰ ﻏﺎﯾﺎت ﻣﻨﺸﻮدة ﻛﻠﻤﺎ أﻟﻤﺖ ﺑﮭﻢ ﺣﺎﺟﺔ ،وھﺬا دأب اﻹﻧﺴﺎن
وﺣﺎﻟﮫ ﻣﺬ أوﺟﺪه اﷲ ﺟﻞ وﻋﻼ ،ﻓﻜﻤﺎ أن اﻹﻧﺴﺎن ﻓﻲ أول ﻋﮭﺪه ﻋﺎﻧﻰ ﻣﻦ ﻗﺴﻮة اﻷﺟﻮاء
واﻟﻄﻘﻮس وﺗﻘﻠﺒﺎﺗﮭﺎ ﺑﯿﻦ ﻗﺮ وﺣﺮ ،ﻓﺪﻓﻌﺘﮫ اﻟﺤﺎﺟﺔ إﻟﻰ أن ﯾﺘﺨﺬ ﻣﻦ اﻟﻜﮭﻮف واﻟﻐﯿﺮان ﻣﺴﺎﻛﻨﺎ ﻟﮫ
ﻟﯿﺤﺘﻤﻲ ﺑﮭﺎ وﯾﻠﺠﺄ إﻟﯿﮭ ﺎ ،ودﻓﻌﺘﮫ ﺻﻌﻮﺑﺔ ﺻﯿﺪ اﻟﻮﺣﻮش ﺑﺎﻟﯿﺪ ﻓﺎﺗﺨﺬ ﻣﻦ ﺟﺬع اﻟﺸﺠﺮ ﺳﻼﺣﺎ ﻟﮫ
ﯾﮭﻮي ﺑﮫ ﻋﻠﻰ اﻟﻄﺮاﺋﺪ ،ودﻓﻌﮫ ﺣﯿﺎؤه ﻣﻦ اﻟﺠﻨﺲ اﻵﺧﺮ ﻓﺎﺗﺨﺬ ﻣﻦ ﺟﻠﺪ اﻷﻧﻌﺎم ﻟﺒﺎﺳﺎ ﻟﮫ ﯾﻮاري
ﺳﻮأﺗﮫ ،ودﻓﻌﺘﮫ اﻟﺤﺎﺟﺔ إﻟﻰ ﺻﻨﻊ ﻣﺮاﻛﺐ ﯾﻤﺸﻲ ﺑﮭﺎ ﻓﻲ اﻟﺒﺤﺮ ﻓﺼﻨﻊ اﻟﻤﻄﺮﻗﺔ وﺑﺎﻗﻲ اﻷدوات،
ﻓﻜﺬﻟﻚ ﺷﺄن اﻹﻧﺴﺎن اﻟﯿﻮم ،ﻓﺈﻧﮫ ﻛﻠﻤﺎ أﻟﻤﺖ ﺑﮫ ﺣﺎﺟﺔ أو أﺻﺎﺑﺘﮫ داھﯿﺔ ،ﻓﻜﺮ ﻣﻠﯿﺎ ﻛﯿﻒ ﯾﺴﻠﻢ ﻣﻨﮭﺎ
ﻓﻲ ﺑﺮﯾﻄﺎﻧﯿﺎ ،ﻓﻲ ﻋﺸﺮﯾﻨﯿﺎت اﻟﻘﺮن اﻟﺘﺎﺳﻊ ﻋﺸﺮ اﺣﺘﺎج اﻟﺘﺠﺎر إﻟﻰ وﺳﺎﺋﻞ ﻟﻨﻘﻞ اﻟﺒﻀﺎﻋﺔ
واﻟﺴﻠﻊ اﻟﻜﺜﯿﺮة ﺑﯿﻦ اﻟﻤﻨﺎﻃﻖ اﻟﻤﺘﺒﺎﻋﺪة ،ﻓﺪﻓﻌﺖ ھﺬه اﻟﺤﺎﺟﺔ إﻟﻰ اﺧﺘﺮاع أول ﺧﻂ ﻟﻠﺴﻜﻚ
اﻟﺤﺪﯾﺪﯾﺔ ﺑﻤﺤﺮﻛﺎت ﺑﺨﺎرﯾﺔ ،ﻓﺘﻄﻮرت اﻟﻔﻜﺮة ﻟﺘﺼﺒﺢ اﻟﻘﻄﺎرات ﺑﺎﻟﺸﻜﻞ اﻟﺬي ﻧﺮاھﺎ ﻋﻠﯿﮫ اﻟﯿﻮم.
2
وﺣﯿﻨﻤﺎ اﺣﺘﺎج اﻟﻨﺎس إﻟﻰ ﻧﻘﻞ اﻷﻧﺒﺎء واﻷﺧﺒﺎر ،ﻗﺎﻣﻮا ﺑﻨﺸﺮ اﻟﺼﺤﻒ ،ﺛﻢ اﺧﺘﺮاع اﻟﻤﺬﯾﺎع ،ﺛﻢ
وﺣﯿﻨﻤﺎ اﺣﺘﺎج اﻟﻨﺎس ﻟﻠﺘﻮاﺻﻞ ﻓﯿﻤﺎ ﺑﯿﻨﮭﻢ ،ﺑﺪؤوا ﺑﺎﺳﺘﻌﻤﺎل اﻟﺤﻤﺎم اﻟﺰاﺟﻞ ،ﺛﻢ اﺳﺘﺨﺪام اﻟﺒﺮﯾﺪ
ﻛﻠﻨﺎ ﺷﺎھﺪﻧﺎ ﻛﯿﻒ ﺗﺘﺎﻟﺖ اﻷﻣﻮاج اﻟﺒﺤﺮﯾﺔ اﻟﺰﻟﺰاﻟﯿﺔ "ﺗﺴﻮﻧﺎﻣﻲ" ﻋﻠﻰ ﺷﺮق آﺳﯿﺎ ،ﻓﺪﻓﻊ ذﻟﻚ
اﻟﯿﺎﺑﺎﻧﯿﯿﻦ إﻟﻰ إﻧﺸﺎء ﻣﺒﺎﻧﻲ ﻣﻀﺎدة ﻟﻠﺰﻻزل ،وﻛﻠﻨﺎ ﺷﺎھﺪ ﻛﯿﻒ ﻋﺎﻧﺖ اﻟﯿﺎﺑﺎن ﻣﻦ ﻣﺸﻜﻞ اﺳﺘﯿﺮاد
اﻟﻤﻨﺘﺠﺎت اﻟﺰراﻋﯿﺔ ﺑﺴﺒﺐ اﻧﻌﺪام اﻟﺴﮭﻮل ﻓﻲ أراﺿﯿﮭﺎ ،ﻓﺪﻓﻌﮭﺎ ذﻟﻚ إﻟﻰ إﻧﺸﺎء ﻣﺪرﺟﺎت
اﻟﺤﺎﺟﺔ أم اﻻﺧﺘﺮاع ،ﻓﻠﻮﻻ ﺣﺎﺟﺔ اﻹﻧﺴﺎن إﻟﻰ اﻟﺸﻲء ﻟﻤﺎ ﺷﻐﻞ ﺑﺎﻟﮫ ﺑﮫ ،وﺣﺎﺟﺎت اﻹﻧﺴﺎن
ﻣﺘﻐﯿﺮة وﺗﺘﺰاﯾﺪ ﺑﺎﺳﺘﻤﺮار ،واﻟﺤﺎﺟﺔ ھﻲ اﻟﺘﻲ ﺗﺪﻓﻊ اﻟﻨﺎس إﻟﻰ إﻧﺸﺎء ﺑﺮاﻣﺞ.
اﺳﺄل ﻧﻔﺴﻚ ﻋﻦ ﻛﻞ ﺑﺮﻧﺎﻣﺞ ﻧﺼﺒﺘﮫ ﻋﻠﻰ ﺣﺎﺳﻮﺑﻚ :ﻟﻤﺎذا ﻧﺼﺒﺘﮫ؟ وﺳﯿﻜﻮن ﺟﻮاﺑﻚ ﺣﺘﻤﺎ وﻣﻦ
ﻏﯿﺮ ﺷﻚ ھﻮ ﺣﺎﺟﺘﻚ ﻟﮫ ،ﻓﺄﻧﺖ ﻧﺼﺒﺖ ﻣﻜﺎﻓﺢ اﻟﻔﯿﺮوﺳﺎت anti-virusﻟﺤﻤﺎﯾﺔ ﺣﺎﺳﻮﺑﻚ ﻣﻦ
إﻟﻰ ﻛﺘﺎﺑﺔ وﻣﻌﺎﻟﺠﺔ اﻟﻨﺼﻮص وﺗﻨﺴﯿﻘﮭﺎ ،وﻧﺼﺒﺖ ﺑﺮﻧﺎﻣﺞ ﻗﺎرىء اﻟﻤﯿﺪﯾﺎ ،ﻷﻧﻚ ﺗﺤﺘﺎج إﻟﻰ
ﻣﺸﺎھﺪة ﺗﺴﺠﯿﻼت ﻣﺮﺋﯿﺔ ،وﻧﺼﺒﺖ ﻣﺘﺼﻔﺢ اﻟﻮﯾﺐ ﻷﻧﻚ ﺗﺤﺘﺎج إﻟﻰ اﻟﺪﺧﻮل إﻟﻰ اﻟﻤﻮاﻗﻊ.
ﻧﻔﺲ اﻟﺤﺎﺟﺔ اﻟﺘﻲ دﻓﻌﺘﻚ إﻟﻰ ﺗﺤﻤﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ وﺗﻨﺼﯿﺒﮫ دﻓﻌﺖ ﻏﯿﺮك ﻣﻦ ﻣﺴﺘﺨﺪﻣﯿﮫ ،ودﻓﻌﺖ
ﻗﺒﻠﻜﻢ ﺟﻤﯿﻌﺎ ﻓﺌﺔ ﻣﻦ اﻟﻨﺎس ،ﻓﻘﺎﻟﻮا :ﻧﺤﻦ ﻧﺤﺘﺎج إﻟﻰ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻜﺬا وﻛﺬا ،ﻓﻠﻤﺎ ﺑﺰﻏﺖ اﻟﺤﺎﺟﺔ
3
ﻟﻜﻦ ﻣﺎ ﯾﮭﻤﻨﺎ ﻧﺤﻦ ﻛﺄﻓﺮاد ﻧﺴﻌﻰ إﻟﻰ ﺗﻌﻠﻢ اﻟﺒﺮﻣﺠﺔ ،ھﻮ ﻣﻌﺮﻓﺔ اﻟﻄﺮﯾﻘﺔ اﻟﺼﺤﯿﺤﺔ اﻟﺘﻲ
ﺑﺎﻧﺘﮭﺎﺟﻨﺎ ﻟﮭﺎ ﺳﻨﻨﺸﻰء ﺑﺮاﻣﺞ ﻗﻮﯾﺔ وﺗﻄﺒﯿﻘﺎت ﺟﯿﺪة ﺑﺎﻟﺸﻜﻞ اﻟﺬي ﻧﻄﻤﺢ إﻟﯿﮫ أو ﺑﺎﻟﺸﻜﻞ
اﻟﻤﻄﻠﻮب ﻣﻨﺎ.
وھﺬا ﻣﺎ ﺳﻨﻌﺮض ﻟﮫ ﺧﻼل ﻛﺘﺎﺑﻨﺎ ھﺬا ،وﺳﻨﺤﺎول ﻗﺪر اﻟﻤﺴﺘﻄﺎع أن ﻧﺴﻠﻚ ﺳﺒﯿﻞ اﻟﺒﺴﺎﻃﺔ
واﻟﺘﻔﻜﯿﻚ ،ﺑﻌﯿﺪﯾﻦ ﻛﻞ اﻟﺒﻌﺪ ﻋﻦ اﻟﺼﻌﻮﺑﺔ واﻟﺘﻌﻘﯿﺪ ،ﻟﺬﻟﻚ ﻗﺪ أﻃﯿﻞ ﻓﻲ ﻓﺼﻞ ﻣﻌﯿﻦ وأﺳﮭﺐ ﻓﯿﮫ
ﻓﻼ ﺗﻠﻮﻣﻮﻧﻲ وﺗﻌﺬﻟﻮﻧﻲ ﻓﺈﻧﻲ ﻣﺎ أﺳﮭﺒﺖ ﻓﯿﮫ وأﻃﻠﺖ ﺣﺒﺎ ﻓﻲ ذﻟﻚ أو رﻏﺒﺔ ﻓﻲ اﺳﺘﻌﺮاض
اﻟﻤﻌﺎرف ،ﻛﻼ وأﻟﻒ ﻛﻼ ،وإﻧﻤﺎ ﻃﺒﯿﻌﺔ اﻟﻤﺪروس ﺗﺴﺘﻠﺰم ﻣﻨﺎ ﺷﺮﺣﮫ ﻣﻦ ﻛﻞ ﺟﻮاﻧﺒﮫ ﻟﻨﻔﮭﻤﮫ
ﻓﮭﻤﺎ ﺷﺎﻣﻼ ،وﻟﻮ ﻟﺨﺼﻨﺎه أو اﻗﺘﻀﺒﻨﺎه ﻟﺸﻮھﻨﺎه وأﺳﺄﻧﺎ ﺷﺮﺣﮫ ،ﻓﺘﺼﻞ إﻟﯿﻜﻢ اﻟﻤﻌﻠﻮﻣﺔ ﻣﻐﻠﻮﻃﺔ
ﯾﺘﻜﻮن ھﺬا اﻟﻜﺘﺎب ﻣﻦ ﺛﻼﺛﺔ أﺟﺰاء ﯾﻜﻤﻞ ﺑﻌﻀﮭﺎ اﻟﺒﻌﺾ ،ﻓﺎﻟﺠﺰء اﻷول ﯾﺘﻨﺎول ﻣﻔﮭﻮم أﻧﻈﻤﺔ
اﻟﺘﺮﻣﯿﺰ واﻟﻄﺮق اﻟﺘﻲ ﯾﻌﺎﻟﺞ ﺑﮭﺎ ﺟﮭﺎز اﻟﺤﺎﺳﻮب اﻟﺒﯿﺎﻧﺎت واﻟﻤﻜﻮﻧﺎت اﻟﻤﺎدﯾﺔ اﻟﻤﺘﺪﺧﻠﺔ ﻓﻲ
اﻟﻌﻤﻠﯿﺔ ﻟﻜﻲ ﯾﻜﻮن اﻟﻤﺘﻌﻠﻢ ﻋﻠﻰ دارﯾﺔ ﺑﻤﺎ ﯾﺤﺼﻞ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺠﮭﺎز ﺣﯿﻨﻤﺎ ﯾﺨﺎﻃﺒﮫ ﺑﺄواﻣﺮ
ﺑﺮﻣﺠﯿﺔ ،واﻟﺠﺰء اﻟﺜﺎﻧﻲ ﯾﻌﺮض ﺑﺎﺧﺘﺼﺎر ﻛﯿﻔﯿﺔ اﻟﻘﯿﺎم ﺑﺎﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ اﻷﺳﺎﺳﯿﺔ ﻋﻠﻰ
اﻟﺒﯿﺎﻧﺎت اﻟﺜﻨﺎﺋﯿﺔ ،أﻣﺎ اﻟﺠﺰء اﻟﺜﺎﻟﺚ ﻓﮭﻮ ﯾﺘﻨﺎول اﻟﺨﻮارزﻣﯿﺎت ﻣﻦ اﻟﺒﺪاﯾﺔ ﺑﺄﺳﻠﻮب ﻣﺘﺪرج
وﺑﺄﻣﺜﻠﺔ ﺗﻄﺒﯿﻘﯿﺔ.
4
ﻣﺎ اﻟﺬي ﺳﺄﺳﺘﻔﯿﺪه إن ﻗﺮأت ھﺬا اﻟﻜﺘﺎب؟
إذا ﻗﺮأت ھﺬا اﻟﻜﺘﺎب ﻛﺎﻣﻼ وﺑﺘﻤﻌﻦ ﻓﺈﻧﻲ أﺿﻤﻦ ﻟﻚ ﺑﻌﻮن اﷲ ﻣﺎ ﯾﻠﻲ:
.2اﻟﻘﺪرة ﻋﻠﻰ ﺗﻌﻠﻢ أﯾﺔ ﻟﻐﺔ ﺑﺮﻣﺠﯿﺔ ﻣﮭﻤﺎ ﺑﻠﻐﺖ ﺻﻌﻮﺑﺘﮭﺎ وﺗﻌﻘﯿﺪاﺗﮭﺎ
ﺳﺎﺑﻘﺔ ﻣﻊ ﻟﻐﺔ ﺑﺮﻣﺠﯿﺔ ﻣﻌﯿﻨﺔ ،ﻓﻼ ﻣﺎﻧﻊ ﻣﻦ أن ﺗﻜﺘﻔﻲ ﺑﻘﺮاءة ﺟﺰء دون ﺟﺰء.
ﻟﻜﻦ إن ﻛﺎن ھﺬا أول ﻋﮭﺪك ﺑﺎﻟﺒﺮﻣﺠﺔ ،ﻓﺄﻧﺖ ﻣﻄﺎﻟﺐ ﺑﻘﺮاءة اﻟﻜﺘﺎب ﻛﺎﻣﻼ ،وﺗﻄﺒﯿﻖ ﻣﺎ ﺟﺎء ﻓﯿﮫ
ﺑﯿﺪ أن ﻣﻌﻈﻢ اﻟﺘﻘﻨﯿﺎت واﻟﻤﻌﺎرف ﺑﺎﺗﺖ ﺗﻌﺮض ﺑﮭﺬه اﻟﻠﻐﺔ ،ﻟﻜﻦ دﻋﻨﻲ أﻛﻠﻤﻚ ﺑﺼﺪق ،ﻓﻲ ﻋﺎﻟﻢ
اﻟﺒﺮﻣﺠﺔ ﻟﺴﺖ ﻣﻄﺎﻟﺒﺎ أن ﺗﻜﻮن ﻣﺘﻘﻨﺎ وﻣﺘﻤﻜﻨﺎ ﻣﻦ اﻟﻠﻐﺔ اﻻﻧﺠﻠﯿﺰﯾﺔ ،ﻏﯿﺮ ﺻﺤﯿﺢ ﺑﺘﺎﺗﺎ ،وﻣﻦ ﻗﺎل
5
ﻟﻚ ذﻟﻚ ﻓﻘﺪ ﻛﺬﺑﻚ اﻟﻘﻮل أو ﺣﺪﺛﻚ ﻋﻦ ﺟﮭﻞ ﻣﻨﮫ ﺑﺎﻟﺒﺮﻣﺠﺔ ،أن ﺗﻜﻮن ﻣﺒﺮﻣﺠﺎ ﻻ ﯾﻌﻨﻲ أن ﺗﻜﻮن
أﻣﺮﯾﻜﯿﺎ أو ﺑﺮﯾﻄﺎﻧﯿﺎ ،ﺑﻞ ﯾﻠﺰﻣﻚ ﺷﻲء ﻣﻦ اﻟﺠﮭﺪ وﻛﺜﯿﺮ ﻣﻦ اﻟﺮﻏﺒﺔ واﻟﺤﺐ ﻟﻠﺒﺮﻣﺠﺔ ،واﻟﻠﻐﺔ ﻟﻢ
ﺗﻜﻦ ﻋﺎﺋﻘﺎ ﻓﻲ أﺧﺬ اﻟﻌﻠﻮم وﻟﻦ ﺗﻜﻮن ﻛﺬﻟﻚ ﺑﺈذن اﷲ ،ﻟﻜﻨﮭﺎ ﻗﺪ ﺗﻜﻮن ﻣﻔﯿﺪة ﻓﻲ ﺑﻌﺾ اﻟﺠﻮاﻧﺐ،
ﻟﺬﻟﻚ اﻧﺲ ﻣﻮﺿﻮع اﻟﻠﻐﺔ اﻻﻧﺠﻠﯿﺰﯾﺔ ﻓﻨﺤﻦ ﺳﻨﺘﻌﻠﻢ اﻟﺒﺮﻣﺠﺔ وﻟﯿﺲ ﻓﻨﻮن اﻟﺘﻮاﺻﻞ (:
ﻗﻮﯾﺎ ﺣﺘﻰ وإن ﻛﺎﻧﺖ ﻣﻌﺎرﻓﻚ ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﻣﺘﺪﻧﯿﺔ ،ﻟﺬﻟﻚ ﻻ ﺗﺮﺗﺒﻚ وﻻ ﺗﺸﻐﻞ ﺑﺎﻟﻚ ﺑﮭﺬا،
ﻷ ﻧﻚ ﻟﻦ ﺗﺤﺘﺎج اﻟﺮﯾﺎﺿﯿﺎت إﻻ ﻓﻲ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺗﺴﺘﻠﺰم ﻣﻨﻚ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺎت رﯾﺎﺿﯿﺔ وﻋﻤﻮﻣﺎ
ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻗﺪ ﺳﮭﻠﺖ ھﺬا اﻟﻤﺠﺎل ﺑﺸﻜﻞ راﺋﻊ ،ﻓﻜﻞ ﻣﺎ ﺳﺘﺤﺘﺎﺟﮫ ﻓﻲ ﺑﺮاﻣﺠﻚ ﻣﻦ دوال
ﺣﺴﺎﺑﯿﺔ )ﺳﯿﻨﯿﺲ ،ﻛﻮﺳﯿﻨﯿﺲ (...،ﻣﻮﺟﻮدة ﻣﺴﺒﻘﺎ وﺗﻢ ﺗﺠﮭﯿﺰھﺎ ﻣﻦ ﻗﺒﻞ اﻟﻔﺮﯾﻖ اﻟﻤﻄﻮر ﻟﻠﻐﺔ
اﻟﺒﺮﻣﺠﺔ.
6
7170
7
اﻟﻔﮭﺮس
15 ............................................................................ Devices
15 .................................. ................................
21 ........................................................................... Byte
21 ...............................................
23 ...............................................
8
23 ............................................... ................................
9
50 .............................................. ................................
50 .................................... ................................
52 ..................................... ................................
52 ....................................................................... Variables
54 ............................................................................
55 ...........................................................................
58 ................................................... ................................
59 ................................................... ................................
60 .............................................. ................................ /
60 ...........................Arithmetic operators
10
87 ............................................
88 .............................Copying Arrays
91 ............................................................. ................................
11
12
ﺗﻌﺮﯾﻒ وﺟﯿﺰ ﻟﺠﮭﺎزاﻟﺤﺎﺳﻮب /اﻟﺤﺎﺳﺐ
اﻟﺤﺎﺳﻮب ھﻮ ﺟﮭﺎز اﻟﻜﺘﺮوﻧﻲ ﻣﺜﻠﮫ ﻣﺜﻞ ﺑﺎﻗﻲ اﻷﺟﮭﺰة اﻻﻟﻜﺘﺮوﻧﯿﺔ )ﺗﻠﻔﺎز ،ھﺎﺗﻒ ،ﺟﮭﺎز
ﺗﺴﺠﯿﻞ (...،ﯾﺴﺘﺨﺪم ﻟﺘﺨﺰﯾﻦ وﻣﻌﺎﻟﺠﺔ اﻟﺒﯿﺎﻧﺎت ،وھﻮ ﯾﺘﻜﻮن ﻣﻦ ﺟﺰءﯾﻦ ﻻ ﺛﺎﻟﺚ ﻟﮭﻤﺎ ،أﺣﺪھﻤﺎ
آﻟﻲ Hardwareوھﻮ اﻟﺠﺎﻧﺐ اﻟﻤﺎدي اﻟﺬي ﯾﻀﻢ ﻣﻜﻮﻧﺎت اﻟﺤﺎﺳﻮب اﻟﺘﻲ ﻧﺮاھﺎ وﻧﻠﻤﺴﮭﺎ ،أﻣﺎ
اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻓﮭﻮ اﻟﺠﺰء اﻟﺒﺮﻣﺠﻲ Softwareوھﻮ اﻟﺠﺎﻧﺐ اﻟﺨﻔﻲ اﻟﻤﺴﺆول ﻋﻦ ﺗﺸﻐﯿﻞ
ﯾﻤﻜﻨﻨﺎ ﺗﻌﺮﯾﻒ اﻟﺬ اﻛﺮة ﺑﺄﻧﮭﺎ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺨﺎﻧﺎت اﻟﻤﺘﺘﺎﻟﯿﺔ واﻟﻤﺮﻗﻤﺔ ﻋﺒﺮ ﻋﻨﺎوﯾﻦ،
وﻛﻞ ﺧﺎﻧﺔ ﯾﻤﻜﻨﮭﺎ أن ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ،ﺗﺘﻢ ﻣﻌﺎﻟﺠﺘﮭﺎ ﻣﻦ ﻗﺒﻞ وﺣﺪة اﻟﻤﻌﺎﻟﺠﺔ ،ﻛﻤﺎ
اﻟﺘﻲ ﯾﺘﻢ ﺗﻨﻔﯿﺬھﺎ ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻧﺘﯿﺠﺔ ﻣﻌﯿﻨﺔ( ،وﯾﺘﻢ ﺗﻤﺜﯿﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺬاﻛﺮة ﻋﻠﻰ
ﺷﻜﻞ ﺛﻨﺎﺋﻲ ﻋﺒﺮ ﻣﺘﺘﺎﻟﯿﺎت ﻣﻦ اﻷﺻﻔﺎر واﻵﺣﺎد ﻛﻤﺎ ﺳﻨﺮى ﻓﯿﻤﺎ ﺑﻌﺪ.
ﻛﻞ ﺧﺎﻧﺔ ﻓﻲ اﻟﺬاﻛﺮة ﻣﺮﻗﻤﺔ ﻟﻜﻲ ﯾﺴﮭﻞ اﻟﻮﺻﻮل إﻟﻰ ﻣﺤﺘﻮاھﺎ ﻣﻦ ﻗﺒﻞ وﺣﺪة اﻟﻤﻌﺎﻟﺠﺔ،
وﯾﺴﻤﻰ ھﺬا اﻟﺘﺮﻗﯿﻢ ﺑﺎﻟﻌﻨﻮﻧﺔ ،أي أن ﻛﻞ ﺧﺎﻧﺔ ﻟﮭﺎ ﻋﻨﻮاﻧﮭﺎ اﻟﺨﺎص .Address
13
اﻟﺸﻜﻞ 1اﻟﺘﻤﺜﯿﻞ اﻻﺻﻄﻼﺣﻲ ﻟﻠﺬاﻛﺮة اﻟﺮﺋﯿﺴﯿﺔ
وھﻮ اﻟﺠﺰء اﻟﻤﮭﻢ ﻓﻲ اﻟﺤﺎﺳﻮب ،وﯾﻌﺪ ﺑﻤﺜﺎﺑﺔ اﻟﺪﻣﺎغ اﻟﻤﺴﺆول ﻋﻦ ﺗﻨﻔﯿﺬ ﻛﻞ ﻋﻤﻠﯿﺎت
وﯾﻘﻮم ﺑﻜﻞ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ )اﻟﺠﻤﻊ ،اﻟﻄﺮح ،اﻟﻀﺮب ،اﻟﻘﺴﻤﺔ( وﯾﻘﻮم أﯾﻀﺎ
ﺗﻘﻮم وﺣﺪة اﻟﻤﻌﺎﻟﺠﺔ ﺑﺄﺧﺬ اﻷواﻣﺮ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﺬاﻛﺮة ﻋﻠﻰ ﺷﻜﻞ ﺑﯿﺎﻧﺎت ،وﺗﺒﺪأ ﻓﻲ
ﺗﻨﻔﯿﺬھﺎ ﺑﺪء ﻣﻦ أول أﻣﺮ واﻧﺘﮭﺎء ﺑﺂﺧﺮ أﻣﺮ وﺗﻘﻮم ﺑﺈﺟﺮاء اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ واﻟﻤﻨﻄﻘﯿﺔ
اﻟﻮاردة ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺨﺰن ،وﻛﻠﻤﺎ اﻗﺘﻀﻰ اﻷﻣﺮ ﺗﻘﻮم ﺑﺘﺨﺰﯾﻦ اﻟﻨﺎﺗﺞ ﻓﻲ اﻟﺬاﻛﺮة
ﻟﺘﺴﺘﻌﻤﻠﮫ ﻣﻊ أواﻣﺮ أﺧﺮى ،وﻓﻲ ﺧﺘﺎم ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ ﺗﻘﻮم وﺣﺪة اﻟﻤﻌﺎﻟﺠﺔ ﺑﺈرﺳﺎل
اﻟﻨﺘﯿﺠﺔ إﻟﻰ اﻟﺠﮭﺎز اﻟﺨﺎص ﺑﻌﺮﺿﮭﺎ )ﻣﺜﻼ ﻃﺒﺎﻋﺔ ﻧﺘﯿﺠﺔ ﻋﻤﻠﯿﺔ ﺣﺴﺎﺑﯿﺔ ﻓﻲ ﻧﺎﻓﺬة
14
اﻷﺟﮭﺰة :Devices
اﻟﺪﯾﺴﻜﯿﺖ... ،إﻟﺦ.
رﻏﻢ ﻋﻈﻢ اﻟﻤﮭﺎم واﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﯾﻘﻮم ﺑﮭﺎ اﻟﺤﺎﺳﻮب ،إﻻ أﻧﮫ ﻟﯿﺲ ذو ذﻛﺎء ﺧﺎرق ﻗﯿﺎﺳﺎ ﻣﻊ
اﻟﻌﻘﻞ اﻟﺒﺸﺮي ،ﻓﮭﻮ ﻻ ﯾﻔﮭﻢ ﺳﻮى رﻗﻤﯿﻦ 0و ) 1وھﺬا ﺗﻘﺪﯾﺮ اﺻﻄﻼﺣﻲ ﻓﻘﻂ ﻻ ﻋﻼﻗﺔ ﻟﮫ ﺑﻤﺎ
ﯾﺘﻢ ﻓﯿﺰﯾﺎﺋﯿﺎ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺤﺎﺳﻮب( ،ﻛﻞ اﻟﺒﯿﺎﻧﺎت ﺳﻮاء ﻛﺎﻧﺖ ﻋﺒﺎرة ﻋﻦ ﻓﯿﺪﯾﻮ ،ﺻﻮرة،
ﺻﻮت ،أو أي ﻣﻠﻒ آﺧﺮ ،ﻓﺈن اﻟﺤﺎﺳﻮب ﻻ ﯾﺮاھﺎ ﺳﻮى ﻋﻠﻰ ﺷﻜﻞ ﺳﻼﺳﻞ ﻣﻦ اﻷﺻﻔﺎر
واﻵﺣﺎد اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﺬاﻛﺮة واﻟﺘﻲ ﺗﺘﻢ ﻣﻌﺎﻟﺠﺘﮭﺎ وﻗﺮاءﺗﮭﺎ ﺑﻮاﺳﻄﺔ وﺣﺪة اﻟﻤﻌﺎﻟﺠﺔ ،ﻟﻜﻲ
أﺻﻔﺎر وآﺣﺎد ھﻲ ﻟﻐﺔ اﻟﺤﺎﺳﻮب ،وﻷﻧﮭﻤﺎ إﺛﻨﺎن " "2ﺳﻤﯿﺖ ھﺬه اﻟﻠﻐﺔ ب "اﻟﻠﻐﺔ اﻟﺜﻨﺎﺋﯿﺔ
أن اﻟﺤﺎﺳﻮب ﯾﻔﮭﻢ ﻗﯿﻤﺘﯿﻦ ﻣﺘﻌﺎرﺿﺘﯿﻦ ﻓﻘﻂ ،وﺗﻢ اﺳﺘﺨﺪام اﻷرﻗﺎم 0و 1دﻻﻟﺔ ﻋﻠﻰ ذﻟﻚ،
واﻷﺻﻞ أن اﻟﻤﺴﺄﻟﺔ اﻟﻜﺘﺮوﻧﯿﺔ ،ﺗﻨﺒﻨﻲ ﻋﻠﻰ اﻟﺘﯿﺎر اﻟﻤﺘﺪﻓﻖ ،واﻟﻤﻌﻠﻮﻣﺎت ھﻲ ﺗﺴﻠﺴﻞ ﻟﺤﺎﻟﺔ
اﻟﺘﯿﺎر ،ﻟﺬﻟﻚ ﺗﺠﺪ اﻟﺒﻌﺾ ﯾﻤﺜﻞ اﻟﻠﻐﺔ اﻟﺜﻨﺎﺋﯿﺔ ﺑﺎﻟﻌﺒﺎرة اﻟﺘﺎﻟﯿﺔ "ﺗﯿﺎر ﯾﻤﺮ ،ﺗﯿﺎر ﻻ ﯾﻤﺮ" ﻛﻨﺎﯾﺔ ﻋﻠﻰ
ﻃﺒﯿﻌﺔ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﯾﻔﮭﻤﮭﺎ اﻟﺤﺎﺳﻮب .ھﺬا ﻣﺎ ﯾﻘﻊ ﻓﯿﺰﯾﺎﺋﯿﺎ ،ﻟﻜﻦ ﻟﻔﮭﻢ ھﺬه اﻟﻤﺴﺎﺋﻞ ﺗﻘﻨﯿﺎ ،ﯾﺘﻢ
15
ﺗﺠﺮﻳﺪي ﻫﻮ اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﻳﻔﻬﻤﻬﺎ اﻟﺤﺎﺳﻮب ﻋﱪ اﻟﱰﻣﻴﺰ
اﻟﺘﻲ ﻳﻔﻬﻤﻬﺎ اﻟﺤﺎﺳﻮب ﺑﺼﻔﺘﻪ ﺟﻬﺎزا واﺻﻄﻼﺣﻲ ﻳﺪل ﻋﲆ
اﺳﺘﻨﺎدا ﻋﲆ اﻟﻜﱰوﻧﻴﺎ )دارة ﻣﻔﺘﻮﺣﺔ ،دارة ﻣﻐﻠﻘﺔ( ،وﻧﺴﺘﺨﺪم اﻟﺘﻤﺜﻴﻞ
،Binary encodingﻋﲆ ﻏﺮار اﻟﱰﻣﻴﺰ 0و 1وﻳﺴﻤﻰ ﺑﺎﻟﱰﻣﻴﺰ
اﻟﻌﴩي Decimal encodingاﻟﺬي ﻳﺴﺘﺨﺪﻣﻪ اﻹﻧﺴﺎن )اﻷﻋﺪاد اﻟﻌﴩة
اﻟﻘﻮل :ﺑﺄن اﳌﻌﺮوﻓﺔ ﻣﻦ 0إﱃ (9ﻟﺘﻤﺜﻴﻞ اﳌﻌﻠﻮﻣﺎت ،وﺑﻌﻴﺪا ﻋﻦ اﻟﻔﻴﺰﻳﺎء
اﻟﺤﺎﺳﻮب ﻻ ﻳﻔﻬﻢ ﺳﻮى اﻷﺻﻔﺎر واﻵﺣﺎد ﻟﺘﻤﺜﻴﻞ اﻟﺒﻴﺎﻧﺎت.
16
وھﻮ اﻟﺘﺮﻣﯿﺰ اﻟﻤﺘﻌﺎرف ﻋﻠﯿﮫ ﻋﻨﺪﻧﺎ ﻧﺤﻦ اﻟﺒﺸﺮ ،واﻟﺬي ﯾﻘﻮم ﻋﻠﻰ اﻷﻋﺪاد اﻟﻌﺸﺮة اﻟﻤﻌﺮوﻓﺔ،
اﻷﻋﺪاد ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﻟﮭﺎ دﻻﻟﺘﮭﺎ ،وھﻮ أﯾﻀﺎ ﺗﺮﻣﯿﺰ اﺻﻄﻼﺣﻲ وﺗﺠﺮﯾﺪي ،اﺗﻔﻖ
ﻋﻠﯿﮫ اﻟﺒﺸﺮ ﻟﺘﻤﺜﯿﻞ اﻷﺷﯿﺎء ﻋﺪدﯾﺎ ،ﻓﻠﻮ أﺗﯿﻨﺎ ﺑﺮﺟﻞ ﻣﻦ ﻋﺼﻮر ﻣﺎ ﻗﺒﻞ اﺧﺘﺮاع اﻷﻋﺪاد ،وﻗﻠﻨﺎ
ﻟﮫ ،3 :ﻓﻠﻦ ﯾﻌﻲ ﻣﺎﻟﺬي ﻧﻘﺼﺪه ﺑﻘﻮﻟﻨﺎ ھﺬا ،ﻟﻜﻦ إن ﻗﺪﻣﻨﺎ إﻟﯿﮫ ﺛﻼث ﺗﻔﺎﺣﺎت ،ﺳﯿﻌﺮف أن ﻋﺪدھﺎ
وﯾﺴﻤﻰ ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺘﺮﻣﯿﺰ ﺑﺎﻟﺘﺮﻣﯿﺰ اﻟﻌﺸﺮي أو اﻟﺘﻤﺜﯿﻞ اﻟﻌﺸﺮي أو اﻟﻨﻈﺎم اﻟﻌﺸﺮي ،ﻷﻧﮫ
ﯾﺴﺘﺨﺪم اﻟﺮﻗﻢ 10ﻟﺘﺒﺴﯿﻂ وﺗﻔﻜﯿﻚ اﻷﻋﺪاد ،ﻓﻤﺜﻼ ﻟﻮ أﺧﺬﻧﺎ اﻟﺮﻗﻢ اﻟﺘﺎﻟﻲ ،2897 :ﻓﮭﻮ ﯾﺘﻜﻮن ﻣﻦ
اﻷﺟﺰاء اﻟﺘﺎﻟﯿﺔ:
اﻟﺮﻗﻢ 2ﯾﻤﺜﻞ اﻟﺠﺰء اﻟﺨﺎص ﺑﺎﻵﻻف ،وﻛﻤﺎ ھﻮ ﻣﻌﻠﻮم ﻓﺎﻷﻟﻒ اﻟﻮاﺣﺪ ﯾﻀﻢ ﻋﺸﺮ ﻣﺌﺎت ،أي
أن:
1000 = 10 * 100
2 * 1000 = 2 * 10 * 100
2000 = 2 * 1000
اﻟﺮﻗﻢ 8ﯾﻤﺜﻞ اﻟﺠﺰء اﻟﺨﺎص ﺑﺎﻟﻤﺌﺎت ،واﻟﻤﺌﺔ اﻟﻮاﺣﺪة ﺗﺤﺘﻮي ﻋﻠﻰ ﻋﺸﺮ ﻋﺸﺮات ،أي أن:
17
100 = 10 * 10
800 = 8 * 100
اﻟﺮﻗﻢ 9ﯾﻤﺜﻞ اﻟﺠﺰء اﻟﺨﺎص ﺑﺎﻟﻌﺸﺮات ،واﻟﻌﺸﺮة اﻟﻮاﺣﺪة ﺗﻀﻢ ﻋﺸﺮ وﺣﺪات ،أي أن:
10 = 10 * 1
9 * 10 = 9 * 10 * 1
90 = 9 * 10
اﻟﺮﻗﻢ 7ﯾﻤﺜﻞ اﻟﻮﺣﺪات ،واﻟﻮﺣﺪة ھﻲ أﺻﻐﺮ ﺟﺰء ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﻌﺸﺮي ،وﻻ ﺗﺤﺘﻮي إﻻ ﻋﻠﻰ
1=1*1
7*1=7*1*1
7=7*1
18
وﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﯾﺘﻢ ﺗﻠﺨﯿﺺ اﻟﺴﻄﺮ أﻋﻼه ﻋﺒﺮ اﺳﺘﻌﻤﺎل اﻟﻘﻮى ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
103 10*10*10=1000
102 10*10=100
101 10
100 1
19
ﻣﻔﮭﻮم اﻟﻮﺣﺪة Bit
اﻟﻮﺣﺪة Bitھﻲ أﺻﻐﺮ وﺣﺪة ﻟﻘﯿﺎس اﻟﺒﯿﺎﻧﺎت اﻟﻤﻤﻤﺜﻠﺔ ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﺜﻨﺎﺋﻲ اﻟﻤﻔﮭﻮم ﻣﻦ ﻃﺮف
.1وﺣﺪة واﺣﺪة ﺗﻄﺮح أﻣﺎﻣﻨﺎ اﺣﺘﻤﺎﻟﯿﻦ وھﻤﺎ :ﺻﻔﺮ أو واﺣﺪ )(0 or 1
.2وﺣﺪﺗﺎن ﺗﻄﺮﺣﺎن أﻣﺎﻣﻨﺎ أرﺑﻊ اﺣﺘﻤﺎﻻت 22وھﻢ :ﺻﻔﺮ و ﺻﻔﺮ ) ،(0 and 0ﺻﻔﺮ
وواﺣﺪ ) ،(0 and 1واﺣﺪ وﺻﻔﺮ ) ،(1 and 0واﺣﺪ وواﺣﺪ )(1 and 1
.3أرﺑﻊ وﺣﺪات ﺗﻄﺮح أﻣﺎﻣﻨﺎ اﺣﺘﻤﺎل ﺑﺎﻟﻌﺪد اﻟﺘﺎﻟﻲ (2*2*2*2) 24 :أي 16اﺣﺘﻤﺎل:
ﺛﻤﺎﻧﻲ وﺣﺪات ﺗﺸﻜﻞ ﻣﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺒﺎﯾﺖ ،Byteأي أن ،1 Byte = 8 Bitsوھﺬا اﻟﻌﺪد ﻣﻦ
20
ﻣﻔﮭﻮم اﻟﺒﺎﯾﺖ Byte
اﻟﺒﺎﯾﺖ ﻛﻤﺎ رأﯾﻨﺎ ﻗﺒﻞ ﻗﻠﯿﻞ ،ھﻮ وﺣﺪة ﻟﻘﯿﺎس اﻟﺒﯿﺎﻧﺎت وھﻮ ﯾﺘﻜﻮن ﻣﻦ ﺛﻤﺎﻧﻲ وﺣﺪات ،ﻟﺬﻟﻚ ﻗﺪ
ﺗﺴﻤﻊ ﺑﺎﻟﻜﯿﻠﻮ ﺑﺎﯾﺖ ﻓﻲ ﻗﯿﺎس ﺣﺠﻢ اﻟﻤﻠﻔﺎت واﻟﻤﯿﻐﺎ ﺑﺎﯾﺖ ،واﻟﺠﯿﻐﺎ ﺑﺎﯾﺖ ،وﺑﺎﺳﺘﺨﺪام اﻟﻌﻼﻗﺔ
اﻟﺘﻲ ﻛﺘﺒﻨﺎھﺎ أﻋﻼه ﻓﺈﻧﻚ ﺗﺴﺘﻄﯿﻊ اﻟﺘﺤﻮﯾﻞ ﺑﯿﻦ اﻟﻮﺣﺪات ﺑﻜﻞ ﺳﮭﻮﻟﺔ ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ اﻟﺠﺪول
اﻟﺘﺎﻟﻲ:
إذن ﻓﺎﻟﺘﺮﻣﯿﺰ اﻟﺜﻨﺎﺋﻲ ﯾﻘﻮم ﻋﻠﻰ اﻟﻘﺎﻋﺪة ،2وﯾﺘﻢ ﺗﻤﺜﯿﻠﮫ داﺋﻤﺎ ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ اﻟﻘﻮى اﻟﻤﺘﻌﻠﻘﺔ
إذا أردﻧﺎ ﻛﺘﺎﺑﺔ ھﺬا اﻟﺒﺎﯾﺖ ﺑﺎﻟﺘﺮﻣﯿﺰ اﻟﻌﺸﺮي ﻓﺈﻧﮫ ﻋﻠﯿﻨﺎ اﻟﻨﻈﺮ إﻟﻰ ﻋﺪد اﻟﻮﺣﺪات اﻟﻤﻜﻮﻧﺔ ﻟﻠﺒﺎﯾﺖ
وﻧﻨﻘﺺ ﻣﻨﮫ واﺣﺪا ،وﻧﺠﻌﻠﮫ أﺳﺎ ﻟﻸﺳﺎس 2وﻧﻀﺮﺑﮫ ﻓﻲ أول وﺣﺪة اﺑﺘﺪاء ﻣﻦ اﻟﺸﻤﺎل ،وﻛﻠﻤﺎ
اﻧﺘﻘﻠﻨﺎ إﻟﻰ وﺣﺪة أﺧﺮى ﻧﻘﺼﻨﺎ ﻗﯿﻤﺔ اﻷس ﺑﻮاﺣﺪ ،أي أن اﻟﺒﺎﯾﺖ أﻋﻼه ﯾﺘﻢ ﺗﺤﻮﯾﻠﮫ إﻟﻰ اﻟﺘﺮﻣﯿﺰ
21
)10110010 = (1 * 27)+(0 * 26)+(1 * 25)+(1 * 24)+(0 * 23)+(0 * 22)+(1 * 21)+(0 * 20
أي أن:
)10110010 = (1 * 128)+(0 * 64)+(1 * 32)+(1 * 16)+(0 * 8)+(0 * 4)+(1 * 2)+(0 * 1
أي أن:
)10110010 = (128)+(0)+( 32)+( 16)+(0)+(0)+( 2)+(0
أي أن:
10110010 = 178
وﻟﺘﺪﻋﯿﻢ اﻟﺸﺮح ﺑﻤﺜﺎل آﺧﺮ ،ﺳﻨﺄﺧﺬ اﻟﻤﺘﺘﺎﻟﯿﺔ اﻟﺜﻨﺎﺋﯿﺔ اﻟﺘﺎﻟﯿﺔ اﻟﻤﺘﻜﻮﻧﺔ ﻣﻦ ﺳﺖ وﺣﺪات ﻓﻘﻂ
22
اﻟﻄﺮﯾﻘﺔ اﻷوﻟﻰ:
ﻟﺘﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻌﺸﺮﯾﺔ إﻟﻰ ﺑﯿﺎﻧﺎت ﺛﻨﺎﺋﯿﺔ ﺗﻮﺟﺪ ﻃﺮق ﻛﺜﯿﺮة ،أﺑﺮزھﺎ ﻋﻤﻠﯿﺔ ﻗﺴﻤﺔ اﻟﻌﺪد ﻓﻲ
ﺑﻌﺪ أن ﻧﻨﺘﮭﻲ ﻣﻦ ﻋﻤﻠﯿﺔ اﻟﻘﺴﻤﺔ وﯾﻜﻮن اﻟﺤﺎﺻﻞ ھﻮ ﺻﻔﺮ ،ﻧﻘﻮم ﺑﺘﺠﻤﯿﻊ اﻟﻮﺣﺪات اﻟﻤﺤﺼﻮل
ﻋﻠﯿﮭﺎ وﻧﻘﺮأھﺎ ﻣﻦ اﻷﺧﯿﺮ ﻛﻤﺎ ﯾﻌﺮض اﻟﺴﮭﻢ أﻋﻼه ﻟﻜﻲ ﻧﺤﺼﻞ ﻋﻠﻰ اﻟﻘﯿﻤﺔ اﻟﺜﻨﺎﺋﯿﺔ اﻟﻤﺮادﻓﺔ
23
وھﺬا ﻣﺜﺎل آﺧﺮ ﻟﻜﻲ ﻧﻔﮭﻢ ﻛﯿﻔﯿﺔ ﺗﺤﻮﯾﻞ اﻟﻌﺪد ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﻌﺸﺮي إﻟﻰ ﻋﺪد ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﺜﻨﺎﺋﻲ
57 2
1 28 2
0 14 2
0 7 2
1 3 2
1 1 2
1 0
(57)10 = (111001)2
اﻟﻄﺮﯾﻘﺔ اﻟﺜﺎﻧﯿﺔ:
أﻣﺎ إن ﻛﺎﻧﺖ ﻋﻨﺪك دراﯾﺔ ﺑﺎﻟﺤﺴﺎب ،ﻓﮭﻨﺎﻟﻚ ﻃﺮﯾﻘﺔ أﺧﺮى أﺳﮭﻞ ﻣﻦ اﻟﻘﺴﻤﺔ ،وﺗﻜﻮن ﻋﺒﺮ أﺧﺬ
أﻛﺒﺮ ﻗﯿﻤﺔ ﻣﻦ اﻟﻌﺪد ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﻌﺸﺮي ﺷﺮﯾﻄﺔ أن ﯾﻜﻮن أﺳﮭﺎ ھﻮ ،2وﻧﻄﺮﺣﮭﺎ ﻣﻦ اﻟﻌﺪد،
وﻧﺄﺧﺬ اﻟﺒﺎﻗﻲ وﻧﻄﺒﻖ ﻋﻠﯿﮫ ﻧﻔﺲ اﻷﻣﺮ ،ﻗﺪ ﺗﺤﺘﺎج إﻟﻰ اﻟﺠﺪول اﻟﺘﺎﻟﻲ ﻟﻤﺴﺎﻋﺪﺗﻚ ﻓﻲ ﺣﺴﺎب ﻗﯿﻤﺔ
ﻛﻞ أس:
20 1
21 2
22 4
23 8
24 16
25 32
24
26 64
27 128
28 256
29 512
210 1024
ﻟﻮ أﺧﺬﻧﺎ ﻧﻔﺲ اﻟﻤﺜﺎل اﻷول اﻟﺬي اﺳﺘﻌﺮﺿﻨﺎ ﻓﯿﮫ ﻛﯿﻔﯿﺔ ﺗﺤﻮﯾﻞ اﻟﻌﺪد 423إﻟﻰ اﻟﺘﺮﻣﯿﺰ اﻟﺜﻨﺎﺋﻲ
28 * 1 = 423
167 = 256 – 423
27 *1 = 167
39 = 128 – 167
26 * 0 = 39
25 * 1 = 39
7 = 32 – 39
24 * 0 = 7
23 * 0 = 7
22 * 1 = 7
3=4–7
21 * 1 = 3
1 = 2 - 3ﻣﺴﺎر ﻗﺮاءة اﻟﻮﺣﺪات
2 0 * 1 =1
ﺑﻌﺪ ﺗﺠﻤﯿﻊ اﻟﻮﺣﺪات وﻓﻖ ﻣﺴﺎر اﻟﻘﺮاءة اﻟﺬي ﯾﺪل ﻋﻠﯿﮫ اﻟﺴﮭﻢ ،ﺳﻨﺤﺼﻞ ﻋﻠﻰ ﻧﻔﺲ اﻟﻨﺘﯿﺠﺔ
اﻟﺴﺎﺑﻘﺔ وھﻲ:
25
اﻵن ﺳﻨﺠﺮب ﻧﻔﺲ اﻟﻄﺮﯾﻘﺔ ﻋﻠﻰ اﻟﻌﺪد 26ﻟﻨﺤﺼﻞ ﻋﻠﻰ ﻣﻘﺎﺑﻠﮫ ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﺜﻨﺎﺋﻲ:
24 * 1 = 26
10 = 16 - 26
23 *1 = 10
2 = 8 – 10
22 * 0 = 2
21 * 1 = 2
0=2–2
2 0 * 0 =0
إذا ﺟﻤﻌﻨﺎ اﻟﻮﺣﺪات ﻓﺴﻮف ﻧﺤﺼﻞ ﻋﻠﻰ ﻣﺎ ﯾﻠﻲ:
(26)10 = (11010)2
26
ﻗﻠﻨﺎ ﻓﯿﻤﺎ ﺳﺒﻖ أن اﻟﺤﺎﺳﻮب ﯾﻘﻮم ﺑﻤﻌﺎﻟﺠﺔ اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ ﺷﻜﻞ وﺣﺪات ،Bitsﻋﻠﻤﺎ أن اﻟﻮﺣﺪة ﻻ
ﺗﺨﺰن ﻟﻮﺣﺪھﺎ ﻓﻲ اﻟﺬاﻛﺮة وإﻧﻤﺎ ﺗﺨﺰن ﻋﻠﻰ ﺷﻜﻞ ﻣﺠﻤﻮﻋﺔ ﻣﺆﻟﻔﺔ ﻣﻦ ﺛﻤﺎﻧﻲ وﺣﺪات ﯾﺼﻄﻠﺢ
ﻋﻠﯿﮭﺎ ﺑﺎﻟﺒﺎﯾﺖ ،Byteأي أن اﻟﺒﺎﯾﺖ اﻟﻮاﺣﺪ ﯾﺴﺎوي ﺛﻤﺎﻧﻲ وﺣﺪات .1 Byte=8 Bits
وﯾﺴﻤﺢ ﻟﻨﺎ اﻟﺒﺎﯾﺖ اﻟﻮاﺣﺪ ﺑﺘﺨﺰﯾﻦ ﺣﺮف أو رﻗﻢ ،وﯾﺼﻄﻠﺢ ﻋﻠﻰ اﻟﺴﻠﺴﻠﺔ اﻟﻤﻜﻮﻧﺔ ﻣﻦ 16
وﺣﺪة )أي 2ﺑﺎﯾﺖ( ب"اﻟﻜﻠﻤﺔ" وﻓﻲ اﻟﻠﻐﺔ اﻻﻧﺠﻠﯿﺰﯾﺔ ،Wordوﻋﻠﻰ ھﺬا اﻟﻤﻨﻮال ﺗﺄﺗﻲ اﻟﻜﻠﻤﺔ
DWordاﻟﺘﻲ ﺗﺴﺘﻌﻤﻞ ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ ﺳﻠﺴﻠﺔ ﻣﻜﻮﻧﺔ ﻣﻦ ﻛﻠﻤﺘﯿﻦ Double Wordأي أرﺑﻊ
اﻟﺘﺮﻣﯿﺰ اﻟﺜﻤﺎﻧﻲ ھﻮ ﺗﺮﻣﯿﺰ ﯾﻘﻮم ﻋﻠﻰ ﺗﻤﺜﯿﻞ اﻟﺒﯿﺎﻧﺎت ﻋﺒﺮ أﻋﺪاد ﻗﺎﻋﺪﺗﮭﺎ ﺛﻤﺎﻧﯿﺔ ،وﯾﺴﻤﺢ ﻟﻨﺎ
ﻟﺘﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺘﻤﺜﯿﻞ اﻟﻌﺸﺮي إﻟﻰ ﺑﯿﺎﻧﺎت ﻣﻤﺜﻠﺔ ﺛﻤﺎﻧﯿﺎ ،ﻓﺎﻟﻄﺮﯾﻘﺔ ﻛﻤﺎ ﻗﻠﻨﺎ ﻗﺒﻞ ﻗﻠﯿﻞ،
ﻧﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﺗﻔﻜﯿﻚ اﻷﻋﺪاد ﻟﻠﺤﺼﻮل ﻋﻠﻰ أﻋﺪاد أﺳﺎﺳﮭﺎ اﻟﺮﻗﻢ ،8وھﺬا ﻣﺜﺎل ﯾﻮﺿﺢ ﻛﯿﻔﯿﺔ
ﻋﻤﻞ ذﻟﻚ:
(15)10 = 8 + 7
(15)10 = (17)8
27
ﻟﺪﻋﻢ اﻟﻔﮭﻢ رﻛﺰ ﻓﻲ اﻟﻤﺜﺎل اﻟﺜﺎﻧﻲ:
(153)10 = (231)8
وﯾﻤﻜﻨﻨﺎ ﺗﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻻﺗﺠﺎه اﻟﻌﻜﺴﻲ ،أي ﻣﻦ اﻟﺘﻤﺜﯿﻞ اﻟﺜﻤﺎﻧﻲ إﻟﻰ اﻟﺘﻤﺜﯿﻞ اﻟﻌﺸﺮي ﻋﺒﺮ
ﻃﺮﯾﻘﺔ ﺳﮭﻠﺔ ﺟﺪا ﺗﻘﻮم ﻋﻠﻰ ﺗﻔﻜﯿﻚ اﻟﻘﯿﻤﺔ إﻟﻰ أﻋﺪاد ﻗﺎﻋﺪﺗﮭﺎ ﺛﻤﺎﻧﯿﺔ ،ﻓﻠﻮ أﺧﺬﻧﺎ اﻟﻘﯿﻤﺔ اﻟﺜﻤﺎﻧﯿﺔ
(340)8 = (224)10
28
ﺗﻌﺘﺒﺮ ﻋﻤﻠﯿﺔ ﺗﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺻﯿﻐﺘﮭﺎ اﻟﺜﻨﺎﺋﯿﺔ إﻟﻰ اﻟﺼﯿﻐﺔ اﻟﺜﻤﺎﻧﯿﺔ ﻣﻦ أﺳﮭﻞ اﻟﻌﻤﻠﯿﺎت ،ﺑﯿﺪ
أن ﻋﻠﯿﻨﺎ ﺗﻘﺴﯿﻢ اﻟﻘﯿﻤﺔ اﻟﺜﻨﺎﺋﯿﺔ إﻟﻰ أﺟﺰاء ﻣﻜﻮﻧﺔ ﻣﻦ ﺛﻼث وﺣﺪات ﺑﺪء ﻣﻦ اﻟﯿﻤﯿﻦ ،وﻧﻘﻮم ﺑﺘﺄوﯾﻞ
ﻛﻞ ﺟﺰء ﺛﻼﺛﻲ ﻓﻲ اﻟﺼﯿﻐﺔ اﻟﺜﻨﺎﺋﯿﺔ ﺑﻤﺮادﻓﮫ اﻟﺜﻤﺎﻧﻲ ﻋﺒﺮ اﺳﺘﺨﺪام اﻟﺠﺪول اﻟﺘﺎﻟﻲ:
أي ﻟﻮ أﻧﻨﺎ أﺧﺬﻧﺎ اﻟﺴﻠﺴﻠﺔ اﻟﺜﻨﺎﺋﯿﺔ اﻟﺘﺎﻟﯿﺔ 1001110:ﻓﺈن ﻋﻤﻠﯿﺔ ﺗﺤﻮﯾﻠﮭﺎ إﻟﻰ اﻟﺘﻤﺜﯿﻞ اﻟﺜﻤﺎﻧﻲ
: ﻧﻘﻮم أوﻻ ﺑﺘﺠﺰيء اﻟﻘﻴﻤﺔ اﻟﺜﻨﺎﺋﻴﺔ إﱃ وﺣﺪات ﺛﻼﺛﻴﺔ ﺑﺪء ﻣﻦ
1001110 = 1 001 110
(1001110)2 = (116)8
29
وھﺬا ﻣﺜﺎل آﺧﺮ ﻟﺪﻋﻢ اﻟﻔﮭﻢ:
(100111001110)2 = (4716)8
أﻣﺎ ﺗﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺜﻤﺎﻧﯿﺔ إﻟﻰ ﺑﯿﺎﻧﺎت ﺛﻨﺎﺋﯿﺔ ﻓﯿﻜﻮن ﻋﺒﺮ إﻋﻄﺎء اﻟﻘﯿﻤﺔ اﻟﺜﻨﺎﺋﯿﺔ ﻟﻜﻞ ﺟﺰء ﻣﻦ
ﯾﻌﺘﺒﺮ اﻟﺘﺮﻣﯿﺰ اﻟﺴﺖ ﻋﺸﺮي ﻣﻦ أﺑﺮز أﻧﻮاع اﻟﺘﺮﻣﯿﺰ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻤﻌﻠﻮﻣﯿﺎت ﻷﻧﮫ ﯾﺴﻤﺢ
ﺑﻘﺮاءة اﻟﺴﻼﺳﻞ اﻟﺜﻨﺎﺋﯿﺔ اﻟﻄﻮﯾﻠﺔ ﺑﺸﻜﻞ ﻣﺨﺘﺼﺮ ،ﻋﺒﺮ اﻋﺘﻤﺎد اﻟﺘﻤﺜﯿﻞ اﻟﺮﻗﻤﻲ اﻟﻤﺴﺘﻨﺪ ﻋﻠﻰ 16
ﺑﺎﻹﺿﺎﻓﺔ إﻟﻰ اﻟﺤﺮوف اﻟﺴﺘﺔ اﻷوﻟﻰ ﻣﻦ اﻟﺤﺮوف اﻟﮭﺠﺎﺋﯿﺔ اﻟﻼﺗﯿﻨﯿﺔ )( f ،e ،d ،c ،b ،aاﻟﺘﻲ
30
ھﺬا اﻟﺘﻤﺜﯿﻞ اﻟﺬي ﯾﻤﻜﻨﻨﺎ ﻣﻦ اﺳﺘﺨﺪام 16ﺣﺮﻓﺎ ،ﯾﺠﻌﻞ اﻟﺒﯿﺎﻧﺎت ﺳﮭﻠﺔ اﻟﻘﺮاءة ﻷﻧﮭﺎ ﺗﻜﺘﺐ ﺑﺸﻜﻞ
ﻣﺨﺘﺼﺮ ،وﻟﻚ أن ﺗﻘﺎرن ﺑﯿﻦ اﻟﻘﯿﻢ اﻟﺘﺎﻟﯿﺔ وأﯾﮭﺎ أﺷﺪ اﺳﺘﯿﻌﺎﺑﺎ ﻋﻨﺪ اﻟﻌﻘﻞ اﻟﺒﺸﺮي:
(10011100)2 = (9C)16
(11110100011001011)2 = (1E8CB)16
(1100000101011111001110110)2 = (182BE76)16
ﻣﻦ ﻏﯿﺮ ﺷﻚ ﻓﺎﻟﺘﻤﺜﯿﻞ اﻟﺴﺖ ﻋﺸﺮي أﺳﮭﻞ ﻗﺮاءة وأﻛﺜﺮ اﺳﺘﯿﻌﺎﺑﺎ ﻣﻦ اﻟﺘﻤﺜﯿﻞ اﻟﺜﻨﺎﺋﻲ ،ﻷﻧﮫ
ﯾﻌﺮض اﻟﻤﻌﻠﻮﻣﺔ ﻋﺒﺮ ﺣﺮوف ﻗﻠﯿﻠﺔ وﻣﺤﺪودة ﻓﻲ اﻟﻮﻗﺖ اﻟﺬي ﺗﻜﺘﺐ ﻓﯿﮫ ھﺬه اﻟﻤﻌﻠﻮﻣﺔ ﻋﺒﺮ
ﺳﻼﺳﻞ ﻃﻮﯾﻠﺔ ﻣﻦ اﻷﺻﻔﺎر واﻵﺣﺎد اﻟﺘﻲ ﻣﻦ اﻟﺼﻌﺐ ﻗﺮاءﺗﮭﺎ ﺗﺮﺗﯿﺒﯿﺎ ﻓﻀﻼ ﻋﻦ ﺗﺬﻛﺮھﺎ أو
31
ﺗﻘﺮﯾﺒﺎ ﻧﻔﺲ اﻟﻜﻼم ﺳﯿﺘﻜﺮر ،ﻓﻜﻞ ﻃﺮق اﻟﺘﺤﻮﯾﻞ اﻟﺘﻲ رأﯾﻨﺎھﺎ ﻣﺘﻤﺎﺛﻠﺔ ﻓﻲ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﻞ ﻣﻊ
اﻷﺧﺬ ﺑﻌﯿﻦ اﻻﻋﺘﺒﺎر اﻟﻘﺎﻋﺪة اﻟﺘﻲ ﯾﺴﺘﻨﺪ إﻟﯿﮭﺎ ﻛﻞ ﻧﻈﺎم ،ﻓﺎﻟﺘﺮﻣﯿﺰ اﻟﺜﻨﺎﺋﻲ ﯾﺴﺘﻨﺪ إﻟﻰ اﻟﻘﺎﻋﺪة ،2
واﻟﺘﺮﻣﯿﺰ اﻟﺜﻤﺎﻧﻲ ﯾﺴﺘﻨﺪ إﻟﻰ اﻟﻘﺎﻋﺪة ،8واﻟﺘﺮﻣﯿﺰ اﻟﻌﺸﺮي ﯾﺴﺘﻨﺪ إﻟﻰ اﻟﻘﺎﻋﺪة اﻟﻌﺸﺮﯾﺔ ،وﺑﺎﻟﻤﺜﻞ
ﯾﺴﺘﻨﺪ اﻟﻨﻈﺎم اﻟﺴﺖ ﻋﺸﺮي إﻟﻰ اﻟﻘﺎﻋﺪة ،16وھﺬا ﻣﺜﺎل ﯾﺒﯿﻦ ﻟﻨﺎ ﻛﯿﻒ ﻧﻘﻮم ﺑﺘﺤﻮﯾﻞ ﺑﯿﺎﻧﺎت
(23)10 = (17)16
__________________________________
(145)10 = (91)16
32
اﻟﻄﺮﯾﻘﺔ ﺑﺴﯿﻄﺔ ﺟﺪا وﺗﻜﻮن ﻋﺒﺮ ﺗﻔﻜﯿﻚ اﻟﻌﺪد اﻟﺴﺖ ﻋﺸﺮي إﻟﻰ أﻋﺪاد ﻣﻨﻔﺼﻠﺔ ،ﺛﻢ ﻧﻌﻄﻲ ﻛﻞ
ﻋﺪد ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﺴﺖ ﻋﺸﺮي ﻗﯿﻤﺘﮫ ﻓﻲ اﻟﺘﺮﻣﯿﺰ اﻟﻌﺸﺮي ﺑﺎﻻﺳﺘﻨﺎد إﻟﻰ ﺟﺪول اﻷﻋﺪاد اﻟﺴﺖ
ﺗﺠﺪر اﻹﺷﺎرة إﻟﻰ أن ﻋﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﻞ ﻣﻦ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ إﻟﻰ اﻟﻨﻈﺎم اﻟﺴﺖ ﻋﺸﺮي ﺗﺘﻢ ﻋﺒﺮ
ﺗﺠﻤﯿﻊ ﻛﻞ أرﺑﻊ وﺣﺪات ﻋﻠﻰ ﺣﺪة ،ﺛﻢ ﺗﺴﺘﺒﺪل ھﺬه اﻟﺮﺑﺎﻋﯿﺔ ﺑﻤﻘﺎﺑﻠﮭﺎ ﻓﻲ اﻟﻨﻈﺎم اﻟﺴﺖ ﻋﺸﺮي
33
6 0110 E 1110
7 0111 F 1111
(100110111101)2 = (9BD)16
_________________________________________________________
(11101111000111000101001)2 = (778E29)16
34
أﻣﺎ ﻃﺮﯾﻘﺔ ﺗﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺴﺖ ﻋﺸﺮﯾﺔ إﻟﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺜﻨﺎﺋﯿﺔ ﻓﯿﻜﻮن ﻋﺒﺮ ﻗﻠﺐ اﻟﻄﺮﯾﻘﺔ
اﻟﺴﺎﺑﻘﺔ ،ﺑﺤﯿﺚ ﻧﻘﻮم ﺑﺘﻔﻜﯿﻚ اﻟﻌﺪد اﻟﺴﺖ ﻋﺸﺮي إﻟﻰ أﺟﺰاء وﻧﺄﺧﺬ ﻛﻞ ﺟﺰء ﻋﻠﻰ ﺣﺪة وﻧﺴﺘﺒﺪﻟﮫ
ﺑﻤﻘﺎﺑﻠﮫ ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ اﻟﺠﺪول اﻟﺴﺎﺑﻖ ،وھﺬه اﻷﻣﺜﻠﺔ ﺗﺒﯿﻦ ﻟﻨﺎ ﻛﯿﻔﯿﺔ اﻟﻘﯿﺎم ﺑﮭﺬا
اﻟﻨﻮع ﻣﻦ اﻟﺘﺤﻮﯾﻞ:
(458ECB)16 = (10001011000111011001011)2
(12CFE8B74B)16 = (1001011001111111010001011011101001011)2
35
ﯾﻤﻜﻨﻚ ﺗﺤﻮﯾﻞ اﻟﻘﯿﻤﺔ اﻟﺜﻤﺎﻧﯿﺔ إﻟﻰ اﻟﻨﻈﺎم اﻟﺴﺖ ﻋﺸﺮي ﻋﺒﺮ ﺗﺤﻮﯾﻠﮭﺎ أوﻻ إﻟﻰ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺛﻢ
ﺗﺤﻮﯾﻞ اﻟﻨﺎﺗﺞ إﻟﻰ اﻟﻨﻈﺎم اﻟﺴﺖ ﻋﺸﺮي ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ رأﯾﻨﺎھﺎ ﻓﻲ اﻟﻔﻘﺮة اﻟﺴﺎﺑﻘﺔ:
(345)8 = (11100101)2
(11100101)2 = (E5)16
(345)8 = (E5)16
_____________________________________
(2431)8 = (10100011001)2
(10100011001)2 = (519)16
(2431)8 = (519)16
ﻧﺴﺘﻄﯿﻊ ﺗﺤﻮﯾﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻤﺜﻠﺔ ﻓﻲ اﻟﻨﻈﺎم اﻟﺴﺖ ﻋﺸﺮي إﻟﻰ ﺑﯿﺎﻧﺎت أﺧﺮى ﻣﻤﺜﻠﺔ ﻓﻲ اﻟﻨﻈﺎم
اﻟﺜﻤﺎﻧﻲ ﻣﻦ ﺧﻼل اﺳﺘﺨﺪام اﻟﺘﺤﻮﯾﻞ اﻟﺜﻨﺎﺋﻲ ﻛﻮﺳﯿﻂ ﺑﯿﻦ اﻟﻨﻈﺎﻣﯿﻦ ،ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟﺴﺎﺑﻘﺔ ،ﻟﻜﻦ
36
ھﺬه اﻟﻤﺮة ﻋﺒﺮ ﺗﺤﻮﯾﻞ اﻟﻘﯿﻤﺔ اﻟﺴﺖ ﻋﺸﺮﯾﺔ إﻟﻰ ﻗﯿﻤﺔ ﺛﻨﺎﺋﯿﺔ ،ﺛﻢ ﺗﺤﻮﯾﻞ اﻟﻨﺎﺗﺞ إﻟﻰ ﻗﯿﻤﺔ ﺛﻤﺎﻧﯿﺔ،
(6EB)16 = (11011101011)2
راﺟﻊ ﻃﺮﻳﻘﺔ ﺗﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت اﻟﺴﺖ ﻋﴩﻳﺔ إﱃ
ﺑﻴﺎﻧﺎت ﺛﻨﺎﺋﻴﺔ ﰲ اﻟﺼﻔﺤﺔ 25
(11011101011)2 = (3353)8
(6EB)16 = (3353)8
____________________________________________________
(EE56FD)16 = (111011100101011011111101)2
(111011100101011011111101)2 = (73453375)8
(EE56FD)16 = (73453375)8
37
اﻟﺘﻤﺮﯾﻦ :1
اﻟﺘﻤﺮﯾﻦ :2
38
اﻟﺘﻤﺮﯾﻦ :3
: ﺣﻮل اﻷرﻗﺎم اﻟﺘﺎﻟﻴﺔ ﻣﻦ اﻟﻨﻈﺎم اﻟﻌﴩي إﱃ اﻟﻨﻈﺎم
7
162
943
5872
761452
اﻟﺘﻤﺮﯾﻦ :4
اﻟﺘﻤﺮﯾﻦ :5
اﻟﺘﻤﺮﯾﻦ :8
ﺣﻮل اﻷرﻗﺎم اﻟﺘﺎﻟﻴﺔ ﻣﻦ اﻟﻨﻈﺎم اﻟﺴﺖ ﻋﴩي إﱃ اﻷﻧﻈﻤﺔ اﻟﻌﴩﻳﺔ واﻟﺜﻨﺎﺋﻴﺔ
:
99
12D
AAABBC
54F
11FFEE11D456
980FD
40
41
ﻧﺴﺘﻄﯿﻊ اﻟﻘﯿﺎم ﺑﺎﻟﻌﻤﻠﯿﺎت اﻟﺮﯾﺎﺿﯿﺔ اﻟﻤﺄﻟﻮﻓﺔ ﻣﻦ ﻗﺒﯿﻞ اﻟﺠﻤﻊ واﻟﻄﺮح واﻟﻀﺮب واﻟﻘﺴﻤﺔ ﻋﻠﻰ
اﻷﻋﺪاد اﻟﺜﻨﺎﺋﯿﺔ ،ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟﻌﺎدﯾﺔ اﻟﺘﻲ ﻧﺴﺘﺨﺪﻣﮭﺎ ﻓﻲ ﻧﻈﺎﻣﻨﺎ اﻟﻌﺸﺮي ،ﻟﻜﻦ ﻗﺪ ﯾﺘﺴﺎءل
اﻟﺒﻌﺾ ﻟﻤﺎذا ﺳﻨﺤﺘﺎج إﻟﻰ ﺣﺴﺎب اﻷﻋﺪاد اﻟﺜﻨﺎﺋﯿﺔ ،وھﻞ ﻋﻠﻲ أن أﻗﻮم ﺑﮭﺬه اﻟﻌﻤﻠﯿﺎت ﻛﻠﻤﺎ
أردت أن أﺑﺮﻣﺞ ﺷﯿﺌﺎ ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ ،أﺑﺸﺮك ﺑﺄﻧﻚ ﻟﺴﺖ ﻣﻠﺰﻣﺎ ﺑﺈﺗﻘﺎن ھﺬه اﻟﻌﻤﻠﯿﺎت وﻻ ﺣﺘﻰ
ﻋﻤﻠﯿﺎت اﻟﺘﺤﻮﯾﻞ اﻟﺘﻲ رأﯾﻨﺎھﺎ ﻓﻲ اﻟﻔﺼﻞ اﻟﺴﺎﺑﻖ ،ﻷن ذﻟﻚ ﻛﻠﮫ ﻣﻦ اﺧﺘﺼﺎﺻﺎت اﻷﺟﮭﺰة
اﻟﻤﺸﻐﻠﺔ ﻟﻠﺒﺮاﻣﺞ ،ﻓﺎﻟﺤﺎﺳﻮب ھﻮ اﻟﻤﻮﻛﻞ ﺑﺎﻟﻘﯿﺎم ﺑﻜﻞ ھﺬه اﻟﻌﻤﻠﯿﺎت وﻟﯿﺲ اﻟﻤﺒﺮﻣﺞ ﻷن اﻟﻠﻐﺔ
اﻟﺜﻨﺎﺋﯿﺔ ﻛﻤﺎ ذﻛﺮﻧﺎ ﻓﻲ ﺑﺪاﯾﺔ اﻟﻜﺘﺎب ھﻲ اﻟﻠﻐﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺤﺎﺳﻮب وﺑﺎﻟﺘﺎﻟﻲ ﻛﻞ ﻣﺎ ﯾﺘﺮﺗﺐ ﻋﻨﮭﺎ
ھﻮ ﻣﺮﺗﺒﻂ ﺑﺎﻟﺤﺎﺳﻮب ،ﻟﻜﻦ ﻣﻦ ﺑﺎب ﻓﮭﻢ ﺣﻘﯿﻘﺔ ﻣﺎ ﯾﺠﺮي ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺤﺎﺳﻮب ﻋﻨﺪ ﻣﻌﺎﻟﺠﺘﮫ
ﻟﻠﺒﯿﺎﻧﺎت ﻓﺈﻧﻨﺎ ﻧﺘﻌﻠﻢ ھﺬه اﻷﻣﻮر ﻟﻜﻲ ﻧﻔﮭﻢ ﻛﯿﻒ ﺗﻔﻜﺮ ھﺬه اﻵﻟﺔ اﻟﺘﻲ ﻧﺨﺎﻃﺒﮭﺎ ،وأﻋﺘﻘﺪ وﷲ اﻟﺤﻤﺪ
أن اﻟﺮؤﯾﺔ وﺿﺤﺖ أﻛﺜﺮ وﺻﺮﻧﺎ ﻋﻠﻰ دراﯾﺔ ﺑﺎﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﺗﺠﺮي ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺤﺎﺳﻮب
ﻃﯿﺐ ﺗﻌﺎﻟﻮا ﺑﻨﺎ اﻵن ﻧﻄﺮح اﻟﺴﺆال اﻟﺘﺎﻟﻲ :ﺣﯿﻨﻤﺎ ﻧﻮﺟﮫ إﻟﻰ اﻟﺤﺎﺳﻮب أﻣﺮ إﺿﺎﻓﺔ ﻋﺪدﯾﻦ
أوﻻ ﯾﺘﻢ ﺗﺤﻮﯾﻞ ھﺬﯾﻦ اﻟﻌﺪدﯾﻦ اﻟﻌﺸﺮﯾﯿﻦ إﻟﻰ ﻋﺪدﯾﻦ ﺛﻨﺎﺋﯿﯿﻦ ،ﺛﻢ ﯾﺘﻢ اﻟﺠﻤﻊ ﺑﯿﻨﮭﻤﺎ ،وﺗﺤﻮﯾﻞ
42
ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي اﻟﺬي ﻧﺴﺘﺨﺪﻣﮫ ﻧﺤﻦ اﻟﺒﺸﺮ ﯾﻜﻮن ﻣﺠﻤﻮع واﺣﺪ زاﺋﺪ واﺣﺪ ھﻮ اﺛﻨﺎن
2=1+1
ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻧﺘﯿﺠﺔ واﺣﺪ زاﺋﺪ واﺣﺪ ھﻲ ﻋﺸﺮة وﻟﯿﺴﺖ إﺛﻨﺎن ،أي أن ،10=1+1وﺑﺎﻗﻲ
اﻟﺤﺴﺎﺑﺎت ﺗﺘﻢ ﺑﺎﻟﺸﻜﻞ اﻟﻌﺎدي ،وﯾﻤﻜﻨﻨﺎ ﺗﻠﺨﯿﺺ ﺣﺴﺎب اﻟﺠﻤﻊ ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻓﻲ اﻟﺠﺪول
اﻟﺘﺎﻟﻲ:
ﺑﻨﺎء ﻋﻠﻰ اﻟﺠﺪول أﻋﻼه ﻓﺈن ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ ﻟﻸﻋﺪاد اﻟﺜﻨﺎﺋﯿﺔ اﻟﺘﺎﻟﯿﺔ ﺗﺘﻢ ﺑﮭﺬا اﻟﺸﻜﻞ:
11000101110101
+10100100101001
_______________
101101010011110
43
ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ،ﺗﺘﻢ ﻋﻤﻠﯿﺔ اﻟﻄﺮح ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟﻤﺄﻟﻮﻓﺔ واﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي،
ﺑﺤﯿﺚ ﯾﺘﻢ ﻃﺮح اﻟﺮﻗﻢ اﻟﻌﻠﻮي ﻣﻦ اﻟﺮﻗﻢ اﻟﺴﻔﻠﻲ ،وإذا ﻛﺎن اﻟﺮﻗﻢ اﻟﺴﻔﻠﻲ أﻛﺒﺮ ﻣﻦ اﻟﺮﻗﻢ اﻟﻌﻠﻮي
ﯾﺘﻢ إﺿﺎﻓﺔ ﻋﺸﺮة إﻟﻰ ھﺬا اﻷﺧﯿﺮ ﻣﻊ ﻧﻘﺼﺎن واﺣﺪ ﻣﻦ اﻟﺮﻗﻢ اﻟﻤﻮاﻟﻲ ﻛﻤﺎ ﺟﺮت اﻟﻌﺎدة ﻣﻊ
ﻋﻤﻠﯿﺔ اﻟﻄﺮح ،وﻟﻨﻔﺘﺮض أﻧﻨﺎ ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي ﻧﻮد ﻃﺮح 127ﻣﻦ اﻟﺮﻗﻢ ،352اﻟﻌﻤﻠﯿﺔ
ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ،إذا أردﻧﺎ ﻃﺮح 0ﻣﻦ واﺣﺪ ﻓﺈن اﻟﻨﺘﯿﺠﺔ ھﻲ ،1وإذا أردﻧﺎ ﻃﺮح 1ﻣﻦ 1
ﻓﺈن اﻟﻨﺘﯿﺠﺔ ھﻲ ﺻﻔﺮ ،وإذا أردﻧﺎ ﻃﺮح 0ﻣﻦ 0ﻓﺈن اﻟﻨﺘﯿﺠﺔ ھﻲ ﺻﻔﺮ ،أﻣﺎ إذا أردﻧﺎ أن
ﻧﻄﺮح 1ﻣﻦ 0ﻓﺈﻧﻨﺎ ھﻨﺎ ﻧﺤﺘﺎج إﻟﻰ إﺿﺎﻓﺔ 1إﻟﻰ 0ﻟﯿﺼﺒﺢ ﻟﺪﯾﻨﺎ وﺣﺪﺗﺎن ﻣﻘﺎﺑﻞ وﺣﺪة واﺣﺪة
44
ﻓﻲ ﻋﻤﻠﯿﺔ اﻟﻄﺮح أﻋﻼه ،ﻗﻤﻨﺎ ﺑﻄﺮح اﻟﻘﯿﻤﺔ 1001ﻣﻦ اﻟﻘﯿﻤﺔ ،1010ﻓﺄول ﻣﺎ ﻛﺎن ﻟﺪﯾﻨﺎ ھﻮ
ﻃﺮح واﺣﺪ ﻣﻦ ﺻﻔﺮ ،وﺑﺎﻟﻌﻮدة إﻟﻰ اﻟﻘﺎﻋﺪة اﻟﺴﺎﺑﻘﺔ ﻓﺈﻧﻨﺎ ﺳﻨﺤﺘﺎج إﻟﻰ إﺿﺎﻓﺔ واﺣﺪ إﻟﻰ ﺻﻔﺮ،
ﻓﯿﺼﺒﺢ ﻟﺪﯾﻨﺎ ) 0+1أي ﺻﺎر ﻟﺪﯾﻨﺎ وﺣﺪﺗﺎن (Bits 2 :وﺑﻄﺮح وﺣﺪة واﺣﺪة ﻣﻦ وﺣﺪﺗﯿﻦ ﻓﺈن
اﻟﻨﺎﺗﺞ ﺳﯿﻜﻮن ھﻮ وﺣﺪة واﺣﺪة ﻟﺬﻟﻚ ﺣﺼﻠﻨﺎ ﻋﻠﻰ ،1وﻟﺘﻌﻤﯿﻖ اﻟﺸﺮح ﺗﺬﻛﺮ أﻧﻨﺎ ﻓﻲ اﻟﻨﻈﺎم
اﻟﻌﺸﺮي إذا أردﻧﺎ ﻃﺮح رﻗﻢ ﺻﻐﯿﺮ ﻣﻦ رﻗﻢ ﻛﺒﯿﺮ ﻧﻀﯿﻒ 1وھﻮ ﯾﻤﺜﻞ ،10ﻓﻜﺬﻟﻚ ﻓﻲ اﻟﻨﻈﺎم
ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﻧﻘﺼﻨﺎ 1ﻣﻦ ) 1ﻷن اﻟﺼﻔﺮ اﻟﺴﻔﻠﻲ اﻧﻀﺎف إﻟﯿﮫ 1اﻟﺬي اﺳﺘﻠﻔﻨﺎه ﻓﻲ أول وﺣﺪة(
وﺑﺎﻟﺘﺎﻟﻲ ﺣﺼﻠﻨﺎ ﻋﻠﻰ ﺻﻔﺮ ،ﺑﻌﺪ ذﻟﻚ ﻃﺮﺣﻨﺎ ﺻﻔﺮ ﻣﻦ ﺻﻔﺮ ﻓﺤﺼﻠﻨﺎ ﻋﻠﻰ ﺻﻔﺮ ،ﺛﻢ ﻃﺮﺣﻨﺎ
ﻋﻤﻠﯿﺔ اﻟﻀﺮب ﻓﻲ اﻟﻨﻈﺎم اﺛﻨﺎﺋﻲ ھﻲ ﻧﻔﺴﮭﺎ ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي ،ﻧﻘﻮم ﺑﻀﺮب ﻛﻞ رﻗﻢ ﻣﻦ
اﻟﻌﺪد اﻟﺴﻔﻠﻲ ﻓﻲ ﺟﻤﯿﻊ أرﻗﺎم اﻟﻌﺪد اﻟﻌﻠﻮي ،ﺛﻢ ﻧﻘﻮم ﺑﺠﻤﻊ ﻧﺘﺎﺋﺞ ﻛﻞ ﺟﺪاء ﻟﻨﺤﺼﻞ ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ
45
وھﺬا اﻟﺠﺪول ﯾﻠﺨﺺ ﻧﺘﯿﺠﺔ اﻟﻀﺮب ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ:
46
47
48
ﻣﻼﺣﻈﺎت ﻣﮭﻤﺔ ﻗﺒﻞ اﻟﺒﺪء
ﻗﺒﻞ أن ﻧﺒﺪأ دراﺳﺔ اﻟﺨﻮارزﻣﯿﺔ أﺣﺐ أن أﻧﺒﮫ إﻟﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷﻣﻮر اﻟﻤﮭﻤﺔ:
اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﺗﻜﺘﺐ ﺑﮭﺎ اﻟﺨﻮارزﻣﯿﺔ ﻟﯿﺴﺖ ﺛﺎﺑﺘﺔ وﻗﺪ ﺗﺘﻌﺪد ﺻﯿﻐﺔ ﻛﺘﺎﺑﺘﮭﺎ ﻟﻜﻦ اﻟﻤﮭﻢ
واﻷﺳﺎﺳﻲ أن ﺗﻜﻮن اﻟﺨﻄﻮات ﻣﻨﻄﻘﯿﺔ وﻣﺘﺮاﺑﻄﺔ وﻗﺎﺑﻠﺔ ﻟﻠﺘﺤﻮﯾﻞ إﻟﻰ ﻟﻐﺔ ﺑﺮﻣﺠﯿﺔ.
اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﺳﻨﺴﺘﻌﻤﻠﮭﺎ ﻓﻲ ھﺬا اﻟﻜﺘﺎب ﻃﺮﯾﻘﺔ ﺷﺨﺼﯿﺔ ﺗﺨﻠﻂ ﺑﯿﻦ اﻟﺼﯿﻐﺔ اﻟﻜﻼﺳﯿﻜﯿﺔ
ﻟﻜﺘﺎﺑﺔ اﻟﺨﻮارزﻣﯿﺎت وﺑﯿﻦ اﻟﺒﻨﯿﺔ اﻟﺮﺋﯿﺴﯿﺔ اﻟﻤﺸﺘﺮﻛﺔ ﺑﯿﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ اﻟﻤﺸﮭﻮرة
)ﺟﺎﻓﺎ ،ﺳﻲ ﺷﺎرب ،ﺳﻲ ،ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ،ﺑﻲ إﺗﺶ ﺑﻲ (... ،ﻟﻜﻲ ﻻ ﯾﺠﺪ اﻟﻤﺘﻌﻠﻢ ﺻﻌﻮﺑﺔ
ﻣﺠﺮد ﻛﺘﺎﺑﺔ ﻣﻨﻄﻘﯿﺔ وﻟﯿﺴﺖ ﻛﻮد ﺣﻘﯿﻘﻲ ،وﻣﻌﻈﻢ اﻷﻛﻮاد اﻟﺰاﺋﻔﺔ اﻟﻮاردة ﻓﻲ اﻷﻣﺜﻠﺔ
ﻻ ﯾﺘﻢ ﺗﻨﻔﯿﺬھﺎ وﯾﻜﻮن دورھﺎ ھﻮ ﺗﻨﻈﯿﻢ اﻟﻜﻮد وﻋﻨﻮﻧﺘﮫ ﻟﯿﻜﻮن ﺳﮭﻞ اﻟﻘﺮاءة وﻣﺴﺘﺴﺎغ
*/
*/
49
اﻟﺨﻮارزﻣﯿﺎت ھﻲ ﻃﺮﯾﻘﺔ ﻣﻨﻄﻘﯿﺔ ﻓﻲ اﻟﺘﻔﻜﯿﺮ ﻧﺴﺘﺨﺪﻣﮭﺎ ﻣﻦ أﺟﻞ اﻟﻮﺻﻮل إﻟﻰ ﺣﻞ وﺿﻌﯿﺔ
ﻣﻌﯿﻨﺔ ﻋﺒﺮ ﻋﺪد ﻣﺤﺪد ﻣﻦ اﻟﺨﻄﻮات اﻟﻤﻨﻄﻘﯿﺔ اﻟﻤﺘﺮاﺑﻄﺔ ﻓﯿﻤﺎ ﺑﯿﻨﮭﺎ ،وﺳﻤﯿﺖ ﺑﮭﺬا اﻹﺳﻢ ﻧﺴﺒﺔ
إﻟﻰ ﺻﺎﺣﺒﮭﺎ أﺑﻲ ﺟﻌﻔﺮ اﻟﺨﻮارزﻣﻲ رﺣﻤﮫ اﷲ ،اﻟﺬي ﻋﺎﺻﺮ ﻓﺘﺮة اﻟﺤﻜﻢ اﻟﻌﺒﺎﺳﻲ وﺗﺤﺪﯾﺪا
ﻋﺼﺮ اﻟﺨﻠﯿﻔﺔ اﻟﻤﺄﻣﻮن ،وﻛﺎن اﻟﺨﻮارزﻣﻲ رﺣﻤﮫ اﷲ ﻧﺎﺑﻐﺎ ﻓﻲ ﻋﻠﻮم اﻟﺤﺴﺎب واﻟﻔﻠﻚ
واﻟﺠﻐﺮاﻓﯿﺎ وھﻮ ﻣﺆﺳﺲ ﻋﻠﻢ اﻟﺠﺒﺮ وﻣﺆﺳﺲ اﻟﺨﻮارزﻣﯿﺎت ،وﻟﮫ اﻟﻌﺪﯾﺪ ﻣﻦ اﻹﻧﺠﺎزات اﻟﻌﻠﻤﯿﺔ
اﻟﻌﻈﯿﻤﺔ.
ﻟﻮ أردﻧﺎ ﺗﺒﺴﯿﻂ اﻟﺨﻮارزﻣﯿﺎت ،ﻓﮭﻲ ﺧﻄﻮات ﻧﻘﻮم ﺑﮭﺎ ﻟﺤﻞ ﻣﺸﻜﻞ ﻣﻌﯿﻦ ،ﻣﺜﻼ ﻋﻨﺪﻧﺎ ﺑﺮﻧﺎﻣﺞ
ﻣﻌﯿﻦ ﻟﻜﻲ ﻧﺸﻐﻠﮫ ﻋﻠﻰ ﺣﺎﺳﻮﺑﻨﺎ ﻓﻌﻠﯿﻨﺎ ﺗﻨﺼﯿﺒﮫ ،أي اﺗﺒﺎع ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺨﻄﻮات اﻟﺘﻲ ﺗﺆدي ﻟﻨﺎ
ﻣﺜﻼ إذا ﻃﻠﺒﺖ ﻣﻨﻚ أن ﺗﺤﺴﺐ ﻟﻲ ﻣﺠﻤﻮع ﻋﺪدﯾﻦ ،ﻓﺄﻧﺖ ﺗﻠﻘﺎﺋﯿﺎ ﺗﻄﺒﻖ ﺧﻮارزﻣﯿﺔ ﺗﻘﻮم ﺑﺄﺧﺬ
اﻟﻌﺪدﯾﻦ وإﺟﺮاء ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ ﻋﻠﯿﮭﻤﺎ ﺛﻢ إﻋﺎدة اﻟﻨﺘﯿﺠﺔ ،ھﺬا ﺑﺎﺧﺘﺼﺎر ھﻮ ﻣﻔﮭﻮم
اﻟﺨﻮارزﻣﯿﺎت.
ﻓﻲ اﻟﺒﺮﻣﺠﺔ ،ﺗﻌﺘﺒﺮ ﺧﻮارزﻣﯿﺔً ﻛﻞ ﻣﺠﻤﻮﻋﺔ أواﻣﺮ ﻗﺎﺑﻠﺔ ﻟﻠﺘﺤﻮﯾﻞ إﻟﻰ ﻟﻐﺔ ﺑﺮﻣﺠﯿﺔ ،واﻟﺘﻲ
ﺗﺆدي دورا ﻣﻌﯿﻨﺎ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ،وﺗﺄﺗﻲ ﻣﺮﺣﻠﺔ إﻋﺪاد اﻟﺨﻮارزﻣﯿﺔ ﻣﺒﺎﺷﺮة ﺑﻌﺪ ﻣﺸﻜﻞ أو ﺣﺎﺟﺔ،
ﻓﺤﯿﻨﻤﺎ ﯾﻄﻠﺐ ﻣﻨﻚ ﻋﻤﯿﻞ إﻧﺠﺎز ﺑﺮﻧﺎﻣﺞ ﯾﻌﻤﻞ ﺷﻐﻼ ﻣﻌﯿﻨﺎ ،ﻓﮭﻮ ﯾﻀﻊ أﻣﺎﻣﻚ ﻣﺸﻜﻠﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻚ،
وﺣﺎﺟﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﮫ ،وأﻧﺖ ﺑﺼﻔﺘﻚ ﻣﺒﺮﻣﺠﺎ ،ﻋﻠﯿﻚ ﺗﺤﻮﯾﻞ ﺣﺎﺟﺔ اﻟﻌﻤﯿﻞ ﻣﻦ ﻛﻼم ﺑﺸﺮي إﻟﻰ
50
أواﻣﺮ ﻣﻨﻄﻘﯿﺔ وﻣﺘﺴﻠﺴﻠﺔ )أي إﻧﺸﺎء اﻟﺨﻮارزﻣﯿﺔ اﻟﻤﻨﺎﺳﺒﺔ( ﺛﻢ ﺗﺤﻮل ھﺬه اﻟﺨﻮارزﻣﯿﺔ إﻟﻰ
ﺑﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ إﺣﺪى ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ،اﻟﺸﻲء اﻟﺬي ﯾﻤﻜﻦ ﺗﻠﺨﯿﺼﮫ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
51
ﻹﻧﺸﺎء أﯾﺔ ﺧﻮارزﻣﯿﺔ ،ﻓﺈﻧﻚ ﻣﻠﺰم ﺑﺎﻟﺘﻌﺮف ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻔﺎھﯿﻢ واﻟﺘﻘﻨﯿﺎت اﻟﺘﻲ ﻋﻠﯿﻚ
اﺳﺘﺨﺪاﻣﮭﺎ ﻣﻦ أﺟﻞ وﺿﻊ ﺧﻮارزﻣﯿﺔ ﻗﺎﺑﻠﺔ ﻟﻠﺘﺤﻮﯾﻞ إﻟﻰ ﺑﺮﻧﺎﻣﺞ ﺑﺸﻜﻞ ﺻﺤﯿﺢ ،وأوﻟﻰ ھﺬه
اﻟﻤﻔﺎھﯿﻢ أن ﻛﻞ ﺧﻮارزﻣﯿﺔ ﻟﮭﺎ ﺑﺪاﯾﺔ وﻟﮭﺎ ﻧﮭﺎﯾﺔ ،وﺑﯿﻦ ھﺬﯾﻦ اﻟﻄﺮﻓﯿﻦ ﻧﻜﺘﺐ ﻣﺤﺘﻮى
اﻟﺨﻮارزﻣﯿﺔ اﻟﺬي ﯾﺆدي إﻟﻰ اﻟﺤﺼﻮل ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ اﻟﻤﺘﻮﺧﺎة ،ﻟﺬﻟﻚ وﺟﺐ وﺿﻊ ﺧﻄﻮات أﯾﺔ
اﻟﺒﺪاﯾﺔ
اﻟﻨﮭﺎﯾﺔ
BEGIN
//Program Instructions
END
Variables
ﻟﻨﻔﺘﺮض أن اﻟﻌﻤﯿﻞ ﻃﻠﺐ ﻣﻨﻚ ﺑﺮﻧﺎﻣﺠﺎ ﯾﻘﺮأ رﻗﻤﯿﻦ ،ﺛﻢ ﯾﻄﺒﻊ أﻛﺒﺮھﻤﺎ )ﺑﻤﻌﻨﻰ أﻧﮫ ﯾﺮﯾﺪ ﻣﻨﻚ أن
ﺗﻨﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم أن ﯾﺪﺧﻞ رﻗﻤﯿﻦ ﻛﺘﺎﺑﺔً ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ أو ﻣﻦ أي وﺳﯿﻠﺔ
إدﺧﺎل أﺧﺮى ،ﻓﯿﺴﺘﻘﺒﻞ اﻟﺒﺮﻧﺎﻣﺞ ھﺬﯾﻦ اﻟﺮﻗﻤﯿﻦ وﯾﻘﺎرﻧﮭﻤﺎ داﺧﻠﯿﺎ وﯾﻄﺒﻊ ﻋﻠﻰ اﻟﺸﺎﺷﺔ Screen
52
أول ﺷﻲء ﯾﻨﺒﻐﻲ أن ﺗﻔﻜﺮ ﻓﯿﮫ ،ھﻮ أﻧﻚ ﺳﺘﺤﺘﺎج إﻟﻰ ﻋﺪدﯾﻦ ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ اﻟﻤﻘﺎرﻧﺔ ،وھﺬان
اﻟﻌﺪدان ﻏﯿﺮ ﺛﺎﺑﺘﯿﻦ و ﻏﯿﺮ ﻣﻌﺮوﻓﯿﻦ ﻣﺴﺒﻘﺎ ،ﻷن اﻟﻤﺴﺘﺨﺪم ھﻮ اﻟﺬي ﺳﯿﺪﺧﻠﮭﻤﺎ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ،
وأﻧﺖ ﻻ ﯾﻤﻜﻨﻚ اﻟﺘﻜﮭﻦ ﺑﮭﻤﺎ ،ﻟﺬا ﻓﺈﻧﻚ ﺳﺘﺤﺘﺎج إﻟﻰ ﺣﺎوﯾﺎت ﻓﻲ اﻟﺬاﻛﺮة ﺗﻀﻊ ﻓﯿﮭﺎ اﻟﻘﯿﻢ اﻟﻤﺪﺧﻠﺔ
ﻟﻜﻲ ﺗﻘﺎرﻧﮭﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ ،وﻟﻠﻮﻟﻮج إﻟﻰ ھﺬه اﻟﺤﺎوﯾﺎت ﻓﺄﻧﺖ ﺗﺤﺘﺎج إﻟﻰ إﻋﻄﺎﺋﮭﺎ أﺳﻤﺎء ﻣﻤﯿﺰة
وﻏﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ ،وﻛﺬﻟﻚ ﺗﺤﺘﺎج إﻟﻰ ﺗﺤﺪﯾﺪ ﻧﻮع اﻟﻘﯿﻤﺔ اﻟﻤﺮاد ﺗﺨﺰﯾﻨﮭﺎ ﻓﻲ ﻛﻞ ﺣﺎوﯾﺔ.
اﻟﻘﯿﻢ اﻟﺘﻲ ﻧﺠﮭﻠﮭﺎ وﻻ ﻧﺪري ﻗﯿﻤﺘﮭﺎ ﻣﺴﺒﻘﺎ ،وﻧﺤﺘﺎج إﻟﻰ ﺗﺤﺪﯾﺪ ﻧﻮع ﻟﮭﺎ وﺗﺨﺰﯾﻨﮭﺎ ﻓﻲ اﻟﺬاﻛﺮة
ﺗﺴﻤﻰ ﻣﺘﻐﯿﺮات أو ﻣﺘﺤﻮﻻت ،أي أن ﻗﯿﻤﺘﮭﺎ ﻟﯿﺴﺖ ﺛﺎﺑﺘﺔ ،وأﻧﮭﺎ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻐﯿﯿﺮ اﻟﻤﺴﺘﻤﺮ أﺛﻨﺎء
ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ.
إذن ،ﻓﺎﻟﻤﺘﻐﯿﺮات ھﻲ ﻗﯿﻢ ﯾﺤﺘﺎﺟﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﻧﻨﺸﺆه ﻣﻦ أﺟﻞ إﻧﺠﺎز ﻋﻤﻠﯿﺎت ﻣﻌﯿﻨﺔ ﻋﻠﯿﮭﺎ،
واﻟﻤﺴﺘﺨﺪم ھﻮ ﻣﻦ ﯾﻘﻮم ﺑﺈدﺧﺎل ھﺬه اﻟﻘﯿﻢ إﻟﻰ اﻟﺒﺮﻧﺎﻣﺞ )ﻋﺒﺮ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ ﻣﺜﻼ( ،وﯾﻤﻜﻦ ﻟﻠﻘﯿﻢ
اﻟﻤﺪﺧﻠﺔ أن ﺗﻜﻮن ﻣﻦ أﻧﻮاع ﺷﺘﻰ ،إﻣﺎ رﻗﻤﯿﺔ ،أو ﻧﺼﯿﺔ ،أو ﻋﺒﺎرة ﻋﻦ ﺗﺎرﯾﺦ...،
53
اﻹﻋﻼن ﻋﻦ ﻣﺘﻐﯿﺮ ﯾﻌﻨﻲ ﺣﺠﺰ ﻣﻜﺎن ﻓﻲ اﻟﺬاﻛﺮة ﻣﻦ أﺟﻞ ﺗﺨﺰﯾﻦ ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻐﯿﺮ ﻓﻲ
زﻣﻦ اﻟﺘﻨﻔﯿﺬ ) Runtimeاﻟﻤﻘﺼﻮد ﺑﺰﻣﻦ اﻟﺘﻨﻔﯿﺬ اﻟﻮﻗﺖ اﻟﺬي ﯾﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺷﻐﺎﻻ(،
; [DATA_TYPE] VariableName
ﻓﻲ اﻟﺠﺰء اﻟﺨﺎص ﺑﺎﻟﻜﻠﻤﺔ ]ﻧﻮع اﻟﺒﯿﺎﻧﺎت[ ﻧﻀﻊ ﻧﻮع اﻟﻘﯿﻤﺔ اﻟﻤﺮاد ﺗﺨﺰﯾﻨﮭﺎ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ﻣﺜﻼ :
أرﻗﺎم ،ﺣﺮوف ،ﻧﺼﻮص )اﻟﻨﺺ ھﻮ ﻣﺠﻤﻮﻋﺔ ﺣﺮوف وأرﻗﺎم( ،ﻧﻮع ﺗﺎرﯾﺨﻲ )وﻗﺖ أو ﺗﺎرﯾﺦ
أو ھﻤﺎ ﻣﻌﺎ( ،ﻧﻮع ﻣﻨﻄﻘﻲ )ﯾﻘﺒﻞ ﻗﯿﻤﺘﯿﻦ ﻣﺘﻌﺎرﺿﺘﯿﻦ وھﻤﺎ :ﺻﺤﯿﺢ أو ﺧﻄﺄ( ،وﻏﯿﺮھﺎ...
واﻟﺠﺰء اﻟﺨﺎص ﺑﺎﻟﻜﻠﻤﺔ اﺳﻢ_اﻟﻤﺘﻐﯿﺮ ﻧﻀﻊ اﻻﺳﻢ اﻟﺬي ﻧﺮﯾﺪ إﻋﻄﺎءه ﻟﻠﻤﺘﻐﯿﺮ ﻟﻜﻲ ﻧﺘﻤﻜﻦ ﻣﻦ
اﺳﺘﻌﻤﺎﻟﮫ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ ،واﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮﻃﺔ ﻓﻲ آﺧﺮ اﻟﺴﻄﺮ ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ أن اﻷﻣﺮ اﻧﺘﮭﻰ وأن
54
; Int Number1 //Declare Integer Variable
ﻓﻲ اﻟﻤﺜﺎل أﻋﻼه ﻗﻤﻨﺎ ﺑﺎﻹﻋﻼن ﻋﻦ ﻋﺪة ﻣﺘﻐﯿﺮات ،ﻟﻜﻨﻨﺎ ﻟﻢ ﻧﻌﻄﮭﺎ ﻗﯿﻤﺎ ﺑﺪﺋﯿﺔ ،ﺑﻤﻌﻨﻰ أن أﻣﺎﻛﻦ
ھﺬه اﻟﻤﺘﻐﯿﺮات ﻓﻲ اﻟﺬاﻛﺮة ﻣﺎ ﺗﺰال ﻓﺎرﻏﺔ ،nullوﯾﻠﺰﻣﻨﺎ إﻋﻄﺎؤھﺎ ﻗﯿﻤﺎ ﻟﻜﻲ ﻧﺴﺘﺨﺪﻣﮭﺎ ،وھﺬه
اﻟﻘﯿﻢ إﻣﺎ أن ﺗﻜﻮن ﺑﺪﺋﯿﺔ ﯾﺤﺪدھﺎ اﻟﻤﺒﺮﻣﺞ ﻓﻲ ﺑﺪاﯾﺔ اﻹﻋﻼن ﻋﻦ اﻟﻤﺘﻐﯿﺮات ،أو ﺗﻜﻮن ﺧﻼل
ﻣﺮﺣﻠﺔ ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺤﯿﺚ ﺗﺤﺼﻞ اﻟﻤﺘﻐﯿﺮات ﻋﻠﻰ ﻗﯿﻤﮭﺎ ﻣﻦ ﺧﻼل ﻣﺪﺧﻼت اﻟﻤﺴﺘﺨﺪﻣﯿﻦ.
أﯾﻀﺎ ﯾﻤﻜﻨﻨﺎ اﻻﻋﻼن ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﺘﻐﯿﺮات ذات ﻧﻔﺲ ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺳﻄﺮ واﺣﺪ ،ﻛﻤﺎ
ﻹﺳﻨﺎد ﻗﯿﻤﺔ ﺑﺪﺋﯿﺔ ﻷي ﻣﺘﻐﯿﺮ ،ﻓﺈن اﻟﻄﺮﯾﻘﺔ ﺗﻜﻮن ﻋﺒﺮ اﺳﺘﺨﺪام رﻣﺰ اﻟﺴﮭﻢ ) → ( ﺛﻢ ﺑﻌﺪه
اﻟﻘﯿﻤﺔ اﻟﻤﺮاد إﻋﻄﺎؤھﺎ ﻟﻠﻤﺘﻐﯿﺮ ،وﯾﻤﻜﻦ ﻋﻤﻞ ذﻟﻚ ﻓﻲ زﻣﻦ اﻹﻋﻼن ،وﻛﺬﻟﻚ ﺑﻌﺪ اﻹﻋﻼن،
55
//إﺳﻨﺎد ﻗﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ ﻋﻨﺪ اﻹﻋﻼن ﻋﻨﮫ رﻗﻤﻲ اﻟﺮﻗﻢ_اﻷول → 156؛
رﻗﻤﻲ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
//اﻹﻋﻼن ﻋﻦ اﻟﻤﺘﻐﯿﺮ أوﻻ ﺛﻢ إﺳﻨﺎد ﻗﯿﻤﺔ ﻟﮫ ﺑﻌﺪ ذﻟﻚ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ → 48؛
ﻓﻲ اﻟﺴﻄﺮ اﻷول أﻋﻄﯿﻨﺎ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻷول اﻟﻘﯿﻤﺔ 156ﻓﻲ ﻧﻔﺲ وﻗﺖ اﻹﻋﻼن ،وﻓﻲ
اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﻗﻤﻨﺎ ﺑﺈﻋﻄﺎء ﻗﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ ﺑﻌﺪ اﻹﻋﻼن ﻋﻨﮫ ،ﻻﺣﻆ أن اﻟﻤﺘﻐﯿﺮات
اﻟﺮﻗﻤﯿﺔ ﺗﺴﺘﻘﺒﻞ اﻟﻘﯿﻢ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ،ﺑﯿﻨﻤﺎ اﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ﻓﯿﻠﺰﻣﻨﺎ اﺳﺘﺨﺪام ﻋﻼﻣﺎت
اﻟﺘﻨﺼﯿﺺ )" "( ووﺿﻊ اﻟﻨﺺ داﺧﻠﮭﻤﺎ ،ﻛﻤﺎ ﺗﻮﺿﺢ اﻷﻣﺜﻠﺔ اﻵﺗﯿﺔ:
ﻧﺼﻲ اﻻﺳﻢ_اﻟﻜﺎﻣﻞ → "ﺧﺎﻟﺪ اﻟﺴﻌﺪاﻧﻲ"؛ //إﺳﻨﺎد ﻗﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ ﻋﻨﺪ اﻹﻋﻼن ﻋﻨﮫ
ﻧﺼﻲ اﻟﺠﻨﺴﯿﺔ؛
//اﻹﻋﻼن ﻋﻦ اﻟﻤﺘﻐﯿﺮ أوﻻ ﺛﻢ إﺳﻨﺎد ﻗﯿﻤﺔ ﻟﮫ ﺑﻌﺪ ذﻟﻚ اﻟﺠﻨﺴﯿﺔ → "ﻣﻐﺮﺑﻲ"؛
;"ﺧﺎﻟﺪ اﻟﺴﻌﺪاﻧﻲ" ← String FullName //إﺳﻨﺎد ﻗﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ ﻋﻨﺪ اﻹﻋﻼن ﻋﻨﮫ
; String Nationality
;"ﻣﻐﺮﺑﻲ" ← Nationality //اﻹﻋﻼن ﻋﻦ اﻟﻤﺘﻐﯿﺮ أوﻻ ﺛﻢ إﺳﻨﺎد ﻗﯿﻤﺔ ﻟﮫ ﺑﻌﺪ ذﻟﻚ
ﻣﻠﺤﻮﻇﺔ:
56
رﻗﻤﻲ اﻟﺮﻗﻢ_اﻷول → 156؛
رﻗﻤﻲ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ → اﻟﺮﻗﻢ_اﻷول؛
وﻟﻜﻲ ﯾﺴﮭﻞ ﻋﻠﯿﻚ ﻣﻌﺮﻓﺔ ﻣﻦ أﯾﻦ ﺗﻨﻘﻞ اﻟﻘﯿﻤﺔ إﻟﻰ أﯾﻦ اﺗﺒﻊ داﺋﻤﺎ ﻣﺴﺎر اﻟﺴﮭﻢ:
اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ → اﻟﺮﻗﻢ_اﻷول؛ اﻟﺴﮭﻢ ﯾﺸﯿﺮ إﻟﻰ أن ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻷول ﺳﺘﻨﺘﻘﻞ إﻟﻰ
اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ.
57
وﯾﻘﺼﺪ ﺑﺈﺧﺮاج اﻟﺒﯿﺎﻧﺎت ﻋﻤﻠﯿﺔ ﻃﺒﺎﻋﺔ ﻧﺺ ﻣﻌﯿﻦ أو ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ ﻋﻠﻰ ﺷﺎﺷﺔ اﻟﻤﺴﺘﺨﺪم ،وﻓﻲ
اﻟﺨﻮارزﻣﯿﺎت ﻧﺴﺘﺨﺪم اﻷﻣﺮ :اﻛﺘﺐ وﻧﻔﺘﺢ اﻟﻘﻮﺳﯿﻦ ،ﺛﻢ ﻧﻀﻊ اﻟﻨﺺ اﻟﻤﺮاد إﻇﮭﺎره ﻟﻠﻤﺴﺘﺨﺪم
//إﻇﮭﺎر ﻧﺺ ﻋﺎدي
اﻛﺘﺐ)رﺳﺎﻟﺔ(؛
إﻇﮭﺎر ﻧﺺ ﻋﺎدي//
; )WRITE(FullName
58
اﻟﻤﻘﺼﻮد ﺑﻘﺮاءة اﻟﻤﺪﺧﻼت ھﻮ ﻛﯿﻔﯿﺔ إدﺧﺎل اﻟﻘﯿﻢ اﻟﻤﻜﺘﻮﺑﺔ ﻣﻦ ﻃﺮف اﻟﻤﺴﺘﺨﺪم إﻟﻰ اﻟﺒﺮﻧﺎﻣﺞ
ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ،ﻛﺄن ﻧﻜﻮن ﺑﺼﺪد اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ اﻟﺠﻤﻊ وﻧﻄﻠﺐ ﻣﻨﮫ أن ﯾﺪﺧﻞ رﻗﻤﯿﻦ ،ﻓﻌﻤﻠﯿﺔ
اﻹدﺧﺎل ھﺬه ﺗﺤﺘﺎج ﻣﻨﺎ إﻟﻰ ﻗﺮاءة اﻟﻘﯿﻢ داﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻟﻨﻌﯿﺪ ﺻﯿﺎﻏﺘﮭﺎ وﻓﻖ ﻣﺎ ﯾﺤﺘﺎﺟﮫ
اﻟﺒﺮﻧﺎﻣﺞ ﻣﻨﮭﺎ ،وﺗﻜﻮن ﻋﻤﻠﯿﺔ ﻗﺮاءة اﻟﻤﺪﺧﻼت ﻓﻲ اﻟﺨﻮارزﻣﯿﺎت ﻋﺒﺮ اﻟﻜﻠﻤﺔ اﻗﺮأ وﯾﺘﻢ ﻛﺘﺎﺑﺔ
اﻟﻘﯿﻤﺔ أو اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﺳﯿﺴﺘﻘﺒﻞ اﻟﻘﯿﻤﺔ ﻣﺒﺎﺷﺮة ﺑﻌﺪھﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ،ﻛﻤﺎ ﺗﻌﺮض اﻟﻨﻤﺎذج اﻟﺘﺎﻟﯿﺔ:
اﻟﺒﺪاﯾﺔ
ﻧﺼﻲ اﻻﺳﻢ_اﻟﺸﺨﺼﻲ؛
اﻛﺘﺐ)اﻻﺳﻢ_اﻟﺸﺨﺼﻲ(؛
اﻟﻨﮭﺎﯾﺔ
BEGIN
; String FullName
; )WRITE(FullName
END
59
ﻓﻲ اﻟﻤﺜﺎل أﻋﻼه ﯾﻈﮭﺮ اﻟﺒﺮﻧﺎﻣﺞ رﺳﺎﻟﺔ ﯾﻄﻠﺐ ﻓﯿﮭﺎ ﻣﻦ اﻟﻤﺴﺘﺨﺪم إدﺧﺎل اﺳﻤﮫ اﻟﺸﺨﺼﻲ،
وﺣﯿﻨﻤﺎ ﯾﺘﻢ ﻛﺘﺎﺑﺔ اﻻﺳﻢ ،ﯾﺘﻢ ﻗﺮاءﺗﮫ وﺗﺨﺰﯾﻨﮫ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻟﻤﺴﻤﻰ اﻻﺳﻢ_اﻟﺸﺨﺼﻲ ،وﺑﻌﺪ ذﻟﻚ
/
اﻟﺮواﺑﻂ أو اﻟﻤﻌﺎﻣﻼت ھﻲ رﻣﻮز ﻧﺴﺘﺨﺪﻣﮭﺎ ﻹﺟﺮاء ﺑﻌﺾ اﻟﻌﻤﻠﯿﺎت ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮات أو ﻋﻠﻰ
اﻟﻘﯿﻢ ﺑﺼﻔﺔ ﻋﺎﻣﺔ ﻣﺜﻞ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ ،أو ﻋﻤﻠﯿﺎت ﻣﻘﺎرﻧﺔ اﻟﻘﯿﻢ )ﺗﺤﺪﯾﺪ اﻟﻘﯿﻤﺔ اﻟﻜﺒﺮى
دوره اﻟﺮاﺑﻂ
اﻟﺠﻤﻊ +
اﻟﻄﺮح -
اﻟﺠﺪاء *
اﻟﻘﺴﻤﺔ /
اﻟﻘﺴﻤﺔ اﻟﺼﺤﻴﺤﺔ اﻟﻄﺒﻴﻌﻴﺔ \
ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ %
اﻟﻘﻮة ^
اﻟﺮواﺑﻂ اﻟﻈﺎھﺮة أﻋﻼه ھﻲ رﻣﻮز ﻧﺴﺘﺨﺪﻣﮭﺎ ﺣﯿﻨﻤﺎ ﻧﻮد اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺣﺴﺎﺑﯿﺔ ﻋﻠﻰ ﻗﯿﻤﺘﯿﻦ أو
60
اﻟﺒﺪاﯾﺔ
رﻗﻤﻲ اﻟﺮﻗﻢ_اﻷول ،اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
اﻟﺮﻗﻢ_اﻷول → 25؛
اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ → 5؛
//اﻟﺠﻤﻊ
رﻗﻤﻲ اﻟﺠﻤﻊ → اﻟﺮﻗﻢ_اﻷول +اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
//اﻟﻄﺮح
رﻗﻤﻲ اﻟﻄﺮح → اﻟﺮﻗﻢ_اﻷول -اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
//اﻟﻀﺮب
رﻗﻤﻲ اﻟﻀﺮب → اﻟﺮﻗﻢ_اﻷول * اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
//اﻟﻘﺴﻤﺔ
رﻗﻤﻲ اﻟﻘﺴﻤﺔ → اﻟﺮﻗﻢ_اﻷول /اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
//اﻟﻘﻮة Power
رﻗﻤﻲ اﻟﻘﻮة → اﻟﺮﻗﻢ_اﻷول ^ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ؛
61
BEGIN
Int First_Number, Second_Number ;
First_Number ← 25 ;
Second_Number ← 5 ;
//اﻟﺠﻤﻊ
Int Sum ← First_Number + Second_Number ;
//اﻟﻄﺮح
Int Substract ← First_Number - Second_Number ;
//اﻟﻀﺮب
Int Multiplication ← First_Number * Second_Number ;
//اﻟﻘﺴﻤﺔ
Int Division ← First_Number / Second_Number ;
// اﻟﻘﻮةPower
Int Power ← First_Number ^ Second_Number ;
// ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔModulo
Int Modulo ← First_Number % Second_Number ;
END
اﻟﻤﺘﻐﯿﺮ اﻟﺠﻤﻊ ﯾﻘﻮم ﺑﺠﻤﻊ ﻗﯿﻤﺘﻲ اﻟﻤﺘﻐﯿﺮﯾﻦ اﻟﺮﻗﻢ_اﻷول و اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ ﻣﻦ ﺧﻼل اﺳﺘﺨﺪام
اﻟﻤﺘﻐﯿﺮ اﻟﻄﺮح ﯾﻘﻮم ﺑﻄﺮح ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻷول ﻣﻦ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ ﻋﺒﺮ
62
اﻟﻤﺘﻐﯿﺮ اﻟﻀﺮب ﯾﻘﻮم ﺑﻀﺮب ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻷول ﻓﻲ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ ﻋﺒﺮ
اﻟﻤﺘﻐﯿﺮ اﻟﻘﺴﻤﺔ ﯾﻘﻮم ﺑﻘﺴﻤﺔ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻷول ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ ﻋﺒﺮ اﺳﺘﺨﺪام
اﻟﻤﺘﻐﯿﺮ اﻟﻘﻮة ﯾﻘﻮم ﺑﺤﺴﺎب اﻷﺳﺎس اﻟﺮﻗﻢ_اﻷول ذي اﻷس اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ أي أن اﻟﻨﺘﯿﺠﺔ ﺳﺘﻜﻮن
اﻟﻤﺘﻐﯿﺮ اﻟﺒﺎﻗﻲ ﯾﻘﻮم ﺑﺤﺴﺎب ﺑﺎﻗﻲ ﻗﺴﻤﺔ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺮﻗﻢ_اﻷول ﻋﻠﻰ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ
اﻟﺮﻗﻢ_اﻟﺜﺎﻧﻲ ،وﻛﻤﺎ ھﻮ ﻣﻌﻠﻮم ﻓﺒﺎﻗﻲ ﻗﺴﻤﺔ 25ﻋﻠﻰ 5ھﻮ ﺻﻔﺮ ﻷﻧﮫ ﻻ ﯾﺘﺒﻘﻰ ﺷﻲء.
وﯾﻤﻜﻨﻨﺎ ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺮواﺑﻂ ﻣﻦ دﻣﺞ ﻧﺼﯿﻦ أو أﻛﺜﺮ ﻣﻊ ﺑﻌﻀﮭﻢ اﻟﺒﻌﺾ ،وﯾﻜﻮن ﻣﻦ ﺧﻼل
اﻟﺒﺪاﯾﺔ
ﻧﺼﻲ اﻟﻨﺺ_اﻷول ،اﻟﻨﺺ_اﻟﺜﺎﻧﻲ؛
اﻟﻨﺺ_اﻷول → "ﻻ ﯾﺠﺘﻤﻊ ﺳﯿﻔﺎن"؛
اﻟﻨﺺ_اﻟﺜﺎﻧﻲ → "ﻓﻲ ﻏِﻤْﺪٍ واﺣﺪ"؛
ﻧﺼﻲ اﻟﺪﻣﺞ → اﻟﻨﺺ_اﻷول +اﻟﻨﺺ_اﻟﺜﺎﻧﻲ؛
اﻛﺘﺐ)اﻟﺪﻣﺞ(؛
اﻟﻨﮭﺎﯾﺔ
63
BEGIN
; String Text1, Text2
)WRITE(Concat
END
اﻵن ﺻﺎرت اﻟﻘﯿﻤﺔ ﻻ ﯾﺠﺘﻤﻊ ﺳﯿﻔﺎن ﻓﻲ ﻏﻤﺪ واﺣﺪ ھﻲ اﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻟﺪﻣﺞ ﺑﻌﺪ
وھﻲ رواﺑﻂ ﻧﺴﺘﺨﺪﻣﮭﺎ ﻣﻊ اﻟﻤﺘﻐﯿﺮات اﻟﺮﻗﻤﯿﺔ ﻣﻦ أﺟﻞ زﯾﺎدة ﻗﯿﻤﺘﮭﺎ ﺑﻮاﺣﺪ أو إﻧﻘﺎص ﻗﯿﻤﺘﮭﺎ
اﻟﺒﺪاﯾﺔ
//زﯾﺎدة ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ب 1
64
BEGIN
زﯾﺎدة ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ب //1
وھﻲ رواﺑﻂ ﻧﺴﺘﺨﺪﻣﮭﺎ ﻣﻦ أﺟﻞ ﻣﻘﺎرﻧﺔ ﻗﯿﻤﺘﯿﻦ وﺗﺤﺪﯾﺪ ﻧﻮع اﻟﻌﻼﻗﺔ ﺑﯿﻨﮭﻤﺎ )أﻛﺒﺮ ﻣﻦ ،أﺻﻐﺮ
ﻣﻦ ،ﺗﺴﺎوي (... ،وﻧﺘﯿﺠﺔ اﻟﻤﻘﺎرﻧﺔ ﺗﻜﻮن ﻣﻨﻄﻘﯿﺔ ،booleanأي ﻻ ﺗﻘﺒﻞ إﻻ ﻗﯿﻤﺘﯿﻦ :إﻣﺎ
ﺻﺤﯿﺢ trueوإﻣﺎ ﺧﻄﺄ ،falseﻓﯿﻤﺎ ﯾﻠﻲ ﺟﺪول ﯾﻌﺮض رﻣﻮز اﻟﺮواﺑﻂ اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ
ﻋﻤﻠﯿﺎت اﻟﻤﻘﺎرﻧﺔ:
دوره اﻟﺮاﺑﻂ
أﻛﱪ ﻣﻦ >
أﺻﻐﺮ ﻣﻦ <
ﻳﺴﺎوي =
ﻳﺨﺎﻟﻒ ><
أﻛﱪ ﻣﻦ أو ﻳﺴﺎوي =>
أﺻﻐﺮ ﻣﻦ أو ﻳﺴﺎوي =<
65
وھﺬه أﻣﺜﻠﺔ ﻋﻠﻰ اﺳﺘﺨﺪام ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺮواﺑﻂ:
اﻟﺒﺪاﯾﺔ
//اﻟﻌﺒﺎرة اﻷوﻟﻰ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺻﺤﯿﺢ Trueﻷن 4أﻛﺒﺮ ﻣﻦ 2
//اﻟﻌﺒﺎرة اﻟﺜﺎﻧﯿﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺧﻄﺄ Falseﻷن 5ﻟﯿﺴﺖ أﺻﻐﺮ ﻣﻦ 1
//اﻟﻌﺒﺎرة اﻟﺮاﺑﻌﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻘﯿﻤﺔ ﺻﺤﯿﺢ Trueﻷن 20ﺗﺴﺎوي ﻣﺠﻤﻮع 6و .14
اﻟﻨﮭﺎﯾﺔ
BEGIN
ﻷن 4أﻛﺒﺮ ﻣﻦ True2اﻟﻌﺒﺎرة اﻷوﻟﻰ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺻﺤﯿﺢ //
ﻷن 5ﻟﯿﺴﺖ أﺻﻐﺮ ﻣﻦ False1اﻟﻌﺒﺎرة اﻟﺜﺎﻧﯿﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺧﻄﺄ //
ﻷن 20ﺗﺴﺎوي ﻣﺠﻤﻮع 6و True.14اﻟﻌﺒﺎرة اﻟﺮاﺑﻌﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻘﯿﻤﺔ ﺻﺤﯿﺢ //
66
اﻟﺮواﺑﻂ اﻟﻤﻨﻄﻘﯿﺔ :Logical operators
ھﻲ رواﺑﻂ ﻧﺴﺘﺨﺪﻣﮭﺎ ﻣﻦ أﺟﻞ اﻟﺤﺼﻮل ﻋﻠﻰ ﻧﺘﯿﺠﺔ ﺷﺮﻃﯿﻦ أو أﻛﺜﺮ ،واﻟﻨﺘﯿﺠﺔ ﺗﻜﻮن ﻣﻨﻄﻘﯿﺔ
،booleanأي ﻻ ﺗﻘﺒﻞ إﻻ ﻗﯿﻤﺘﯿﻦ :إﻣﺎ ﺻﺤﯿﺢ trueوإﻣﺎ ﺧﻄﺄ ،falseھﺬه اﻟﺮواﺑﻂ ھﻲ
ANDواﻟﺬي ﯾﻌﻨﻲ )و( وﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ ﺻﺤﯿﺤﺔ إذا ﻛﺎﻧﺖ ﻛﻞ أﻃﺮاف اﻟﺸﺮط ﺻﺤﯿﺤﺔ،
واﻟﺮاﺑﻂ ORواﻟﺬي ﯾﻌﻨﻲ )أو( وﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ ﺻﺤﯿﺤﺔ إذا ﻛﺎن ھﻨﺎﻟﻚ ﻃﺮف واﺣﺪ ﻓﻘﻂ أو
ﺣﺘﻰ ﻧﺒﺴﻂ ﻣﻔﮭﻮم اﻟﺮواﺑﻂ اﻟﻤﻨﻄﻘﯿﺔ ،دﻋﻨﺎ ﻧﺴﺘﺤﻀﺮ ﻣﺜﺎﻻ ﺳﮭﻼ ،ﻟﻮ ﻗﻠﺖ ﻟﻚ :ﺳﯿﺰورﻧﻲ أﺣﻤﺪ
و ﻛﻤﺎل ،ﻓﺬﻟﻚ ﯾﻌﻨﻲ أن ﻛﻼﻣﻲ ﺳﯿﻜﻮن ﺻﺤﯿﺤﺎ ﺣﯿﻨﻤﺎ ﺳﯿﺄﺗﯿﺎن ﻣﻌﺎ ،ﻟﻜﻦ ﻟﻮ ﻗﻠﺖ ﻟﻚ :ﻗﺪ
ﯾﺰورﻧﻲ أﺣﻤﺪ أو ﻛﻤﺎل ،ﻓﺎﻟﻤﻌﻨﻰ ﻣﺨﺘﻠﻒ وﻛﻼﻣﻲ ﺳﯿﻜﻮن ﺻﺤﯿﺤﺎ ﺳﻮاء ﺣﻀﺮ أﺣﻤﺪ أو
ﻛﻤﺎل.
اﻵن ﻻﺣﻆ ﻣﻌﻲ ھﺬا اﻟﻤﺜﺎل ﻟﺘﺘﻌﺮف ﻋﻠﻰ ﻛﯿﻔﯿﺔ اﺳﺘﺨﺪام اﻟﺮواﺑﻂ اﻟﻤﻨﻄﻘﯿﺔ:
67
اﻟﺒﺪاﯾﺔ
//اﻟﻌﺒﺎرة اﻷوﻟﻰ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺻﺤﯿﺢ Trueﻷن 2أﺻﻐﺮ ﻣﻦ ،4و 7أﻛﺒﺮ ﻣﻦ 5
//اﻟﻌﺒﺎرة اﻟﺜﺎﻧﯿﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺧﻄﺄ Falseﻷن أﺣﺪ ﻃﺮﻓﻲ اﻟﻤﻌﺎدﻟﺔ ﻏﯿﺮ ﺻﺤﯿﺢ ﻷن 3ﻻ ﺗﺴﺎوي 5
*/اﻟﻌﺒﺎرة اﻟﺜﺎﻟﺜﺔ
ﻷﻧﮫ ﯾﻮﺟﺪ ﺷﺮط واﺣﺪ ﻋﻠﻰ اﻷﻗﻞ ﺻﺤﯿﺢ وھﻮ 2 < 4
*/
//اﻟﻌﺒﺎرة اﻟﺮاﺑﻌﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺧﻄﺄ ﻷن ﻃﺮﻓﻲ اﻟﻤﻌﺎدﻟﺔ ﻏﯿﺮ ﺻﺤﯿﺤﯿﻦ ﻣﻌﺎ
اﻟﻨﮭﺎﯾﺔ
68
BEGIN
ﻷن 2أﺻﻐﺮ ﻣﻦ ،4و 7أﻛﺒﺮ ﻣﻦ True5اﻟﻌﺒﺎرة اﻷوﻟﻰ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺻﺤﯿﺢ //
ﻷن أﺣﺪ ﻃﺮﻓﻲ اﻟﻤﻌﺎدﻟﺔ ﻏﯿﺮ ﺻﺤﯿﺢ ﻷن 3ﻻ ﺗﺴﺎوي False5اﻟﻌﺒﺎرة اﻟﺜﺎﻧﯿﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺧﻄﺄ //
اﻟﻌﺒﺎرة اﻟﺜﺎﻟﺜﺔ*/
2 < 4ﻷﻧﮫ ﯾﻮﺟﺪ ﺷﺮط واﺣﺪ ﻋﻠﻰ اﻷﻗﻞ ﺻﺤﯿﺢ وھﻮ
*/
اﻟﻌﺒﺎرة اﻟﺮاﺑﻌﺔ ﺳﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻨﺘﯿﺠﺔ ﺧﻄﺄ ﻷن ﻃﺮﻓﻲ اﻟﻤﻌﺎدﻟﺔ ﻏﯿﺮ ﺻﺤﯿﺤﯿﻦ ﻣﻌﺎ//
END
69
أﺣﯿﺎﻧﺎ ﻧﺤﺘﺎج إﻟﻰ إﺟﺮاء ﺗﺤﻘﻖ ﻣﻦ ﻋﺒﺎرة ﻣﻌﯿﻨﺔ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ ،ﻓﺈن ﻛﺎﻧﺖ ﻧﺘﯿﺠﺔ اﻟﺘﺤﻘﻖ ﺗﺴﺎوي
ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻧﻨﻔﺬ ﺷﻔﺮة ﻣﻌﯿﻨﺔ ،وإن ﻛﺎن اﻟﻌﻜﺲ أو ﻛﺎﻧﺖ ﺗﺴﺎوي ﻗﯿﻤﺔ أﺧﺮى ﻧﻨﻔﺬ ﺷﻔﺮات
أﺧﺮى ،ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ،ﻧﺮﯾﺪ إﻧﺸﺎء ﺑﺮﻧﺎﻣﺞ ﯾﺘﻜﻮن ﻣﻦ ﺷﺎﺷﺔ ﻟﺘﺴﺠﯿﻞ اﻟﺪﺧﻮل ﻣﺜﻞ ﺗﻠﻚ اﻟﺘﻲ
وﻛﻠﻤﺔ اﻟﺴﺮ اﻟﻤﺪﺧﻠﯿﻦ ،إن ﻛﺎﻧﺎ ﺻﺤﯿﺤﯿﻦ ﺳﻤﺤﻨﺎ ﺑﻌﻤﻠﯿﺔ اﻟﺪﺧﻮل ،وإن ﻛﺎن أﺣﺪھﻤﺎ ﺧﺎﻃﺌﺎ
ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺗﺴﻤﻰ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻘﻖ ﻣﻦ ﻋﺒﺎرة ﻣﻌﯿﻨﺔ ﺷﺮﻃﺎ Conditionأو ﺑﻨﯿﺔ ﺷﺮﻃﯿﺔ Flow
اﻟﺒﺪاﯾﺔ
وإﻻ
*/ﻓﻲ ﺣﺎل ﻋﺪم ﺗﺤﻘﻖ أي ﺷﺮط
*/ ﻣﻦ اﻟﺸﺮوط اﻟﺴﺎﺑﻘﺔ ﻓﺴﯿﺘﻢ ﺗﻨﻔﯿﺬ ھﺬ اﻟﺠﺰء اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﺠﺰء " وإﻻ"
70
BEGIN
END
اﻵن ﻟﻨﻌﻄﻲ ﻣﺜﺎﻻ ﻧﺘﻌﻠﻢ ﻣﻦ ﺧﻼﻟﮫ ﻃﺮﯾﻘﺔ اﺳﺘﺨﺪام اﻟﺒﻨﯿﺔ اﻟﺸﺮﻃﯿﺔ ﻓﻲ ﺑﺮاﻣﺠﻨﺎ ﻟﻨﻔﺘﺮض أﻧﻨﺎ
ﺑﺼﺪد إﻧﺸﺎء ﺷﺎﺷﺔ ﻟﺘﺴﺠﯿﻞ اﻟﺪﺧﻮل ،ﻣﺜﻞ اﻟﺸﺎﺷﺔ اﻟﻈﺎھﺮة ﻓﻲ اﻟﺼﻮرة اﻟﺘﺎﻟﯿﺔ:
ﻓﻲ ﺷﺎﺷﺔ اﻟﺪﺧﻮل أﻋﻼه ،ﺳﯿﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﻜﺘﺎﺑﺔ اﺳﻤﮫ ،وﺑﻜﺘﺎﺑﺔ ﻛﻠﻤﺔ اﻟﻤﺮور ،وﻧﺤﻦ ﺳﻨﺴﺘﻘﺒﻞ
ھﺬﯾﻦ اﻟﻘﯿﻤﺘﯿﻦ ،وﺳﻨﻘﻮم ﺑﺘﺨﺰﯾﻨﮭﻤﺎ ﻓﻲ ﻣﺘﻐﯿﺮﯾﻦ ﻧﺼﯿﯿﻦ ،ﺛﻢ ﻧﻘﺎرﻧﮭﻤﺎ ﻣﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺴﺠﻠﺔ
71
ﻋﻨﺪﻧﺎ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ أو اﻟﻤﺨ ﺰﻧﺔ ﻓﻲ ﻣﻠﻒ أو ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ،ﻓﺈن ﻛﺎن ھﻨﺎك ﺗﻮاﻓﻖ ﺑﯿﻦ اﻟﺒﯿﺎﻧﺎت
اﻟﻤﺪﺧﻠﺔ وﺑﯿﻦ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ،ﻧﺴﻤﺢ ﺑﻌﻤﻠﯿﺔ اﻟﺪﺧﻮل ،وإﻻ ﻧﻈﮭﺮ رﺳﺎﻟﺔ ﺧﻄﺄ ﺗﻌﻠﻢ اﻟﻤﺴﺘﺨﺪم
وھﺬه ھﻲ اﻟﺨﻮارزﻣﯿﺔ اﻟﺘﻲ ﻋﻠﯿﻨﺎ وﺿﻌﮭﺎ ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ اﻟﺒﻨﯿﺔ اﻟﺸﺮﻃﯿﺔ ﻹﻧﺠﺎز ﻣﺤﺎﻛﺎة ﻟﮭﺬا
اﻟﺒﺮﻧﺎﻣﺞ:
اﻟﺒﺪاﯾﺔ
ﻧﺼﻲ اﺳﻢ_اﻟﻤﺴﺘﺨﺪم_اﻟﻤﺨﺰن → ""myUserName؛
ﻧﺼﻲ ﻛﻠﻤﺔ_اﻟﻤﺮور_اﻟﻤﺨﺰﻧﺔ → ""MyPassword123؛
ﻧﺼﻲ اﺳﻢ_اﻟﻤﺴﺘﺨﺪم؛
ﻧﺼﻲ ﻛﻠﻤﺔ_اﻟﻤﺮور؛
اﻗﺮأ )اﺳﻢ_اﻟﻤﺴﺘﺨﺪم(؛
اﻗﺮأ )ﻛﻠﻤﺔ_اﻟﻤﺮور(؛
وإﻻ
اﻛﺘﺐ)"ﻋﻔﻮا ،اﻟﺒﯿﺎﻧﺎت اﻟﻤﺪﺧﻠﺔ ﻏﯿﺮ ﺻﺤﯿﺤﺔ"(؛
72
BEGIN
String SavedID ← " myUserName";
String SavedPWD ← " MyPassword123";
String ID ;
String Password ;
READ(UserName);
READ(UserName);
END IF
END
73
اﻟﺘﻤﺮﯾﻦ اﻷول :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم إدﺧﺎل ﻗﯿﻤﺘﯿﻦ رﻗﻤﯿﺘﯿﻦ ،ﺛﻢ ﯾﻘﺎرﻧﮭﻤﺎ
وﯾﻄﺒﻊ أﻛﺒﺮھﻤﺎ.
اﻟﺘﻤﺮﯾﻦ اﻟﺜﺎﻧﻲ :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم إدﺧﺎل ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﺛﻢ ﯾﻌﯿﺪ ﻟﮫ ھﻞ اﻟﻘﯿﻤﺔ
اﻟﺘﻤﺮﯾﻦ اﻟﺜﺎﻟﺚ :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﺴﺘﻘﺒﻞ ﺛﻼﺛﺔ ﻗﯿﻢ ﺛﻢ ﯾﻘﻮم ﺑﻄﺒﺎﻋﺔ أﻛﺒﺮھﺎ.
اﻟﺘﻤﺮﯾﻦ اﻟﺮاﺑﻊ :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﺴﺘﻘﺒﻞ رﻗﻤﯿﻦ ﺛﻢ ﯾﻌﯿﺪ ﻟﻨﺎ ھﻞ ﻧﺘﯿﺠﺔ ﻋﻤﻠﯿﺔ ﺿﺮﺑﮭﻤﺎ ﻣﻮﺟﺒﺔ أم
ﺳﺎﻟﺒﺔ.
اﻟﺘﻤﺮﯾﻦ اﻟﺨﺎﻣﺲ :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم إدﺧﺎل ﻗﯿﻤﺔ ﻧﺼﯿﺔ ،ﻓﺈن ﻛﺎﻧﺖ ﻣﺴﺎوﯾﺔ
ﻟﻠﻜﻠﻤﺔ " "JAVAأو اﻟﻜﻠﻤﺔ " "PERLﯾﻈﮭﺮ ﻟﮫ رﺳﺎﻟﺔ ﻣﻔﺎدھﺎ أن اﻟﺠﻮاب ﺻﺤﯿﺢ وإن ﻛﺎﻧﺖ
اﻟﺘﻤﺮﯾﻦ اﻟﺴﺎدس :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﺤﺴﺐ اﻟﻤﺒﻠﻎ اﻟﻌﺎم ﻟﻤﻨﺘﻮج ﻣﻌﯿﻦ )ﻋﻠﻤﺎ أن اﻟﻤﺒﻠﻎ اﻟﻌﺎم =
ﺛﻤﻦ اﻟﻮﺣﺪة اﻟﻮاﺣﺪة ﻣﻦ اﻟﻤﻨﺘﻮج * اﻟﻜﻤﯿﺔ اﻟﻤﺮاد ﺑﯿﻌﮭﺎ( ﻟﻜﻦ ﻗﺒﻞ ذﻟﻚ ﯾﺘﻢ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﻜﻤﯿﺔ إن
ﻛﺎﻧﺖ أﺻﻐﺮ ﻣﻦ أو ﺗﺴﺎوي ﺻﻔﺮ ﯾﺘﻢ إﻇﮭﺎر رﺳﺎﻟﺔ ﺧﻄﺄ ،وإن ﻛﺎﻧﺖ أﻛﺒﺮ ﻗﻄﻌﺎ ﻣﻦ ﺻﻔﺮ ﯾﺘﻢ
اﻟﺘﻤﺮﯾﻦ اﻟﺴﺎﺑﻊ :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﻘﻮم ﺑﺤﺴﺎب اﻟﻤﺒﻠﻎ اﻟﻌﺎم ﻟﻤﻨﺘﻮج ﻣﻌﯿﻦ ﺑﺎﻷﺧﺬ ﺑﻌﯿﻦ اﻻﻋﺘﺒﺎر
ﻧﺴﺒﺔ اﻟﺨﺼﻢ:
74
.1إن ﻛﺎن اﻟﻤﺒﻠﻎ اﻟﻌﺎم أﺻﻐﺮ ﻣﻦ 500درھﻢ ﻓﺈن ﻧﺴﺒﺔ اﻟﺨﺼﻢ ﺻﻔﺮ.
.2إن ﻛﺎن اﻟﻤﺒﻠﻎ اﻟﻌﺎم أﻛﺒﺮ ﻣﻦ 500وأﺻﻐﺮ ﻣﻦ 1000ﻓﺈن ﻧﺴﺒﺔ اﻟﺨﺼﻢ ھﻲ 1ﻓﻲ اﻟﻤﺌﺔ.
.3إن ﻛﺎن اﻟﻤﺒﻠﻎ اﻟﻌﺎم أﻛﺒﺮ ﻗﻄﻌﺎ ﻣﻦ 1000درھﻢ ﻓﺈن ﻧﺴﺒﺔ اﻟﺨﺼﻢ ھﻲ 5ﻓﻲ اﻟﻤﺌﺔ.
اﻟﺘﻤﺮﯾﻦ اﻟﺜﺎﻣﻦ :أﻧﺸﻰء ﺑﺮﻧﺎﻣﺠﺎ ﯾﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم إدﺧﺎل اﻟﻜﻤﯿﺔ اﻟﻤﺮاد ﺑﯿﻌﮭﺎ واﻟﻜﻤﯿﺔ
اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﺨﺰن ،ﺛﻢ ﯾﺘﺤﻘﻖ ﻣﻦ أن اﻟﻜﻤﯿﺔ اﻟﻤﺮاد ﺑﯿﻌﮭﺎ أﺻﻐﺮ ﻣﻦ اﻟﻜﻤﯿﺔ اﻟﻤﺨﺰﻧﺔ ﻟﻜﻲ
ﯾﺴﻤﺢ ﺑﻌﻤﻠﯿﺔ اﻟﺒﯿﻊ ،وإﻻ ﻓﺈﻧﮫ ﯾﻈﮭﺮ رﺳﺎﻟﺔ ﺧﻄﺄ ﻣﻔﺎدھﺎ أن اﻟﻜﻤﯿﺔ اﻟﻤﺮاد ﺑﯿﻌﮭﺎ ﻏﯿﺮ ﻣﺘﻮﻓﺮة
ﻛﺎﻣﻠﺔ ﻓﻲ اﻟﻤﺨﺰن.
75
Loops
أﺣﯿﺎﻧﺎ ﻧﺤﺘﺎج إﻟﻰ ﺗﻜﺮار أﻣﺮ ﺑﺮﻣﺠﻲ ﻣﻌﯿﻦ أﻛﺜﺮ ﻣﻦ ﻣﺮة داﺧﻞ ﺗﻄﺒﯿﻘﺎﺗﻨﺎ ،ﻓﻠﻮ اﻓﺘﺮﺿﻨﺎ أﻧﻨﺎ
ﺑﺼﺪد ﺑﺮﻣﺠﺔ ﺗﻄﺒﯿﻖ ﺻﻐﯿﺮ ﯾﺨﺰن ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﻓﻲ ﻣﺘﻐﯿﺮ ﻣﻌﯿﻦ وﯾﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﺗﺨﻤﯿﻦ
ھﺬه اﻟﻘﯿﻤﺔ ،ﺣﺘﻤﺎ ﻧﺤﻦ ﻻ ﻧﻌﺮف ﻋﺪد اﻻﺣﺘﻤﺎﻻت اﻟﺘﻲ ﺳﯿﻘﻮم ﺑﮭﺎ اﻟﻤﺴﺘﺨﺪم ﻟﻜﻲ ﯾﺼﻞ إﻟﻰ
ﻧﻔﺲ اﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻋﻨﺪﻧﺎ ،ﻟﺬﻟﻚ ﯾﺘﻮﺟﺐ ﻃﺮح ﻧﻔﺲ اﻟﺴﺆال ﻓﻲ ﻛﻞ ﻣﺮة ﯾﺪﺧﻞ اﻟﻤﺴﺘﺨﺪم ﻓﯿﮭﺎ
أو ﻟﻨﻔﺘﺮض أﻧﻨﺎ ﺑﺼﺪد إﻧﺘﺎج ﺑﺮﻧﺎﻣﺞ ﯾﺴﺄل اﻟﻤﺴﺘﺨﺪم ﻋﻦ اﺳﻢ أول ﺧﻠﻔﺎء اﻟﺪوﻟﺔ اﻟﻌﺒﺎﺳﯿﺔ ،ﻓﺈن
ﻛﺎن اﻟﺠﻮاب ﺻﺎﺋﺒﺎ ﯾﺘﻮﻗﻒ اﻟﺒﺮﻧﺎﻣﺞ وإن ﻛﺎن اﻟﺠﻮاب ﺧﺎﻃﺌﺎ ﯾﻌﯿﺪ ﻃﺮح اﻟﺴﺆال ﻋﻠﻰ
اﻟﻤﺴﺘﺨﺪم إﻟﻰ ﺣﯿﻦ ﯾﺤﺼﻞ ﻋﻠﻰ اﻟﺠﻮاب اﻟﺼﺤﯿﺢ ،ﻓﻲ ﺣﺎﻟﺘﻨﺎ ھﺬه ﻧﺤﻦ ﻻ ﻧﻌﻠﻢ ﻋﺪد اﻟﻤﺮات
اﻟﻼزﻣﺔ ﻟﻜﻲ ﯾﺠﯿﺐ اﻟﻤﺴﺘﺨﺪم ﺑﺎﻟﺠﻮاب اﻟﺼﺎﺋﺐ ،ﻟﺬﻟﻚ ﻓﻨﺤﻦ ﺑﺤﺎﺟﺔ إﻟﻰ إﺟﺮاء ﺗﻜﺮار ﻟﻸﻣﺮ
ﻹﺟﺮاء ﺗﻜﺮار أﻣﺮ ﻣﻌﯿﻦ ﻓﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﺗﻮﺟﺪ أﻛﺜﺮ ﻣﻦ ﺻﯿﻐﺔ ،ﺳﻨﺘﻨﺎول ﻧﺤﻦ ﻓﻲ ھﺬا
اﻟﺠﺰء أﺷﮭﺮ ﺻﯿﻐﺘﯿﻦ وھﻤﺎ اﻟﺼﯿﻐﺔ اﻟﺘﻜﺮارﯾﺔ اﻟﺸﺮﻃﯿﺔ ﻣﺎ دام whileواﻟﺼﯿﻐﺔ اﻟﺘﻜﺮارﯾﺔ
اﻟﺤﺴﺎﺑﯿﺔ ﻷﺟﻞ ،forوﻟﺒﺪأ ﺑﺎﻟﺼﯿﻐﺔ اﻷوﻟﻰ وﻟﻨﻄﺒﻘﮭﺎ ﻋﻠﻰ ﻧﻔﺲ اﻟﻤﺜﺎل اﻷﺧﯿﺮ اﻟﻤﺘﻌﻠﻖ ﺑﺄول
وھﻲ ﺻﯿﻐﺔ ﺗﺒﺪأ ﺑﺸﺮط ﻣﺴﺒﻮق ﺑﺎﻟﻜﻠﻤﺔ ﻣﺎ دام ،وﺗﻌﻨﻲ أﻧﮫ ﻣﺎدام ھﺪا اﻟﺸﺮط ﻣﺘﺤﻘﻘﺎ ﻓﻘﻢ ﺑﺘﻜﺮار
اﻷواﻣﺮ اﻟﺘﻲ ﺗﺄﺗﻲ ﺑﻌﺪه ،وﺣﯿﻨﻤﺎ ﻻ ﯾﺘﺤﻘﻖ اﻟﺸﺮط ﯾﺘﻢ اﻟﺨﺮوج ﻣﻦ اﻟﺒﻨﯿﺔ اﻟﺘﻜﺮارﯾﺔ واﻻﻧﺘﻘﺎل
إﻟﻰ ﻣﺎ ﺑﻌﺪھﺎ.
76
وھﺬه ھﻲ ﺻﯿﻐﺔ اﻟﺒﻨﯿﺔ اﻟﺘﻜﺮارﯾﺔ ﺑﺎﺳﺘﺨﺪام اﻟﻜﻠﻤﺔ ﻣﺎ دام:
اﻟﺒﺪاﯾﺔ
ﻣﺎ دام ) */اﻟﺸﺮط *(/
//ﻧﻔﺬ ﻣﺎ ﯾﻠﻲ
ﻧﮭﺎﯾﺔ ﻣﺎ دام
اﻟﻨﮭﺎﯾﺔ
BEGIN
)WHILE (Expression
//Statements
END WHILE
END
ﺧﻮارزﻣﯿﺔ ﺗﺨﻤﯿﻦ أول ﺧﻠﻔﺎء اﻟﺪوﻟﺔ اﻟﻌﺒﺎﺳﯿﺔ ﺳﺘﻜﺘﺐ ﺑﮭﺬا اﻟﺸﻜﻞ إذن:
اﻟﺒﺪاﯾﺔ
ﻧﺼﻲ اﺳﻢ_اﻟﺨﻠﯿﻔﺔ_اﻷول ؛
اﻗﺮأ )اﺳﻢ_اﻟﺨﻠﯿﻔﺔ_اﻷول(؛
ﻧﮭﺎﯾﺔ ﻣﺎ دام
اﻛﺘﺐ)"ﻣﻤﺘﺎز ! ﻟﻘﺪ أدﺧﻠﺖ اﻟﺠﻮاب اﻟﺼﺎﺋﺐ(".؛
اﻟﻨﮭﺎﯾﺔ
77
BEGIN
; String First_Khalifa
; )READ(First_Khalifa
END WHILE
END
ﻣﻠﺤﻮﻇﺔ:
ﻗﺪ ﺗﺘﺴﺎءل :وﻟﻤﺎذا ﻻ ﻧﺴﺘﺨﺪم اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﯿﺔ إذا ﻛﺎن ﻣﺒﺎﺷﺮة ،ﺳﺄﺟﯿﺒﻚ :ﺑﺄن اﻟﻜﻠﻤﺔ إذا ﻛﺎن
ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻘﯿﻤﺔ اﻟﻤﺪﺧﻠﺔ ﻟﻤﺮة واﺣﺪة ﺛﻢ ﺗﻨﺘﻘﻞ إﻟﻰ ﻣﺎ ﺑﻌﺪھﺎ ،ﺑﯿﻨﻤﺎ اﻟﺒﻨﯿﺔ اﻟﺘﻜﺮارﯾﺔ ﺳﺘﻌﯿﺪ ﻧﻔﺲ
اﻟﺼﯿﻐﺔ اﻟﺘﻜﺮارﯾﺔ اﻟﺤﺴﺎﺑﯿﺔ ﻣﮭﻤﺔ ﺟﺪا ﻓﻲ اﻟﺒﺮﻣﺠﺔ ،وﻧﺤﺘﺎﺟﮭﺎ ﻛﺜﯿﺮا ﻓﻲ ﺗﻄﺒﯿﻘﺎﺗﻨﺎ ﻷﻧﮭﺎ ﺗﺴﺎﻋﺪ
ﻋﻠﻰ ﺗﻜﺮار أﻣﺮ ﻣﻌﯿﻦ ﺑﺎﻟﻌﺪد اﻟﺬي ﻧﺸﺎء ،ﻓﺘﺨﯿﻞ ﻟﻮ أﻧﻨﺎ ﻧﺮﯾﺪ ﻃﺒﺎﻋﺔ ﺟﻤﻠﺔ اﻟﺼﺪق ﻋﺰ واﻟﻜﺬب ذل
وﺧﻀﻮع أﻟﻒ ﻣﺮة ﻛﻢ ﺳﯿﻠﺰﻣﻨﺎ ﻣﻦ ﺳﻄﺮ ﻣﻦ اﻟﺠﻤﻠﺔ اﻟﺼﺪق ﻋﺰ واﻟﻜﺬب ذل وﺧﻀﻮع ،أﻛﯿﺪ
ﺳﻨﺤﺘﺎج إﻟﻰ أﻟﻒ ﺳﻄﺮ ،وھﺬا ﺷﻲء ﻣﺘﻌﺐ وﻣﺮھﻖ ﺟﺪا ﻟﻠﻤﺒﺮﻣﺞ ،ﻟﺬﻟﻚ ﻓﺎﻟﺒﻨﯿﺔ اﻟﺘﻜﺮارﯾﺔ
78
اﻟﺤﺴﺎﺑﯿﺔ ﺗﺴﮭﻞ ﻋﻠﯿﻨﺎ ھﺬا اﻷﻣﺮ ﺑﺸﻜﻞ راﺋﻊ ﺟﺪا ،ﺑﺤﯿﺚ ﯾﻜﻔﻲ أن ﻧﺤﺪد ﺑﺪاﯾﺔ اﻟﺘﻜﺮار وﻧﮭﺎﯾﺘﮫ ﺛﻢ
ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﻤﺮاد ﺗﻜﺮاره ﻣﺮة واﺣﺪة وﯾﺘﻢ إﻋﺎدﺗﮫ ﺣﺴﺐ اﻟﻤﺠﺎل اﻟﺮﻗﻤﻲ اﻟﺬي ﺣﺪدﻧﺎه.
اﻟﺒﺪاﯾﺔ
رﻗﻤﻲ اﻟﻌﺪاد؛
ﻷﺟﻞ اﻟﻌﺪاد → 1إﻟﻰ 1000
اﻛﺘﺐ )" اﻟﺼﺪق ﻋﺰ واﻟﻜﺬب ذل وﺧﻀﻮع "(
ﻧﮭﺎﯾﺔ ﻷﺟﻞ
اﻟﻨﮭﺎﯾﺔ
BEGIN
; Int Count
FOR Count ← 1 TO 1000
; )" اﻟﺼﺪق ﻋﺰ واﻟﻜﺬب ذل وﺧﻀﻮع "( WRITE
END FOR
END
ﺑﻌﺪ ﺗﻨﻔﯿﺬ اﻟﺨﻮارزﻣﯿﺔ أﻋﻼه ﺳﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ اﻟﻤﺬﻛﻮرة أﻟﻒ ﻣﺮة ﻷن اﻟﺘﻜﺮار اﻟﺤﺴﺎﺑﻲ ﯾﺒﺪأ
وھﺬا ﻣﺜﺎل آﺧﺮ ﯾﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم أن ﯾﺪﺧﻞ رﻗﻤﺎ ،ﺛﻢ ﯾﻘﻮم ﺑﺠﻤﻊ ھﺬا اﻟﺮﻗﻢ ﻣﻊ ﺟﻤﯿﻊ اﻷرﻗﺎم
اﻟﺘﻲ ﺗﺴﺒﻘﮫ ،وﯾﻄﺒﻊ اﻟﻨﺘﯿﺠﺔ ،ﻣﺜﻼ ﻟﻮ أدﺧﻞ اﻟﻤﺴﺘﺨﺪم اﻟﺮﻗﻢ 6ﻓﺴﻮف ﯾﻘﻮم اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﻟﻌﻤﻠﯿﺔ
اﻟﺘﺎﻟﯿﺔ:
21 = 6 + 5 + 4 + 3 + 2 + 1
79
اﻟﺒﺪاﯾﺔ
رﻗﻤﻲ اﻟﺮﻗﻢ ،اﻟﻌﺪاد؛
رﻗﻤﻲ اﻟﻤﺠﻤﻮع → 0؛
اﻛﺘﺐ )"ﻣﻦ ﻓﻀﻠﻚ أدﺧﻞ رﻗﻤﺎ "(
اﻗﺮأ )اﻟﺮﻗﻢ(
ﻷﺟﻞ اﻟﻌﺪاد → 1إﻟﻰ اﻟﺮﻗﻢ
اﻟﻤﺠﻤﻮع → اﻟﻤﺠﻤﻮع +اﻟﺮﻗﻢ ؛
ﻧﮭﺎﯾﺔ ﻷﺟﻞ
اﻛﺘﺐ )"اﻟﻤﺠﻤﻮع ﯾﺴﺎوي +" :اﻟﻤﺠﻤﻮع(
اﻟﻨﮭﺎﯾﺔ
BEGIN
; Int Number, Count
; Int Sum ← 0
; )"ﻣﻦ ﻓﻀﻠﻚ أدﺧﻞ رﻗﻤﺎ "( WRITE
; )READ(Number
FOR Count ← 1 TO Number
; Sum ← Sum + Number
END FOR
; )" + Sumاﻟﻤﺠﻤﻮع ﯾﺴﺎويWRITE(" :
END
ﻗﻤﻨﺎ ﺑﺎﻹﻋﻼن ﻋﻦ ﻣﺘﻐﯿﺮﯾﻦ رﻗﻤﯿﯿﻦ اﺳﻤﮭﻤﺎ :اﻟﺮﻗﻢ وھﻮ اﻟﻘﯿﻤﺔ اﻟﺮﻗﻤﯿﺔ اﻟﺘﻲ ﺳﯿﺪﺧﻠﮭﺎ اﻟﻤﺴﺘﺨﺪم،
واﻟﻤﺘﻐﯿﺮ :اﻟﻌﺪاد وھﻮ اﻟﺬي ﺳﻨﺴﺘﺨﺪﻣﮫ ﻓﻲ اﻟﺘﻜﺮار ﺑﺤﯿﺚ ﺳﯿﺒﺪأ ﻣﻦ اﻟﺮﻗﻢ 1وﯾﻨﺘﮭﻲ ﺑﺎﻟﺮﻗﻢ
اﻟﻤﺪﺧﻞ ﻣﻦ ﻃﺮف اﻟﻤﺴﺘﺨﺪم ،وﻓﻲ ﻛﻞ ﺗﻜﺮار ﯾﻀﯿﻒ ﻗﯿﻤﺔ اﻟﺮﻗﻢ اﻟﺬي ﯾﺼﻞ إﻟﯿﮫ إﻟﻰ ﻗﯿﻤﺔ
ﻟﻨﻔﺘﺮض أن اﻟﻤﺴﺘﺨﺪم ﻗﺎم ﺑﺈدﺧﺎل اﻟﺮﻗﻢ ،7ﺑﻨﺎء ﻋﻠﻰ ذﻟﻚ ﻓﻌﻤﻠﯿﺔ اﻟﺘﻜﺮار ﺳﺘﻮزع اﻟﻘﯿﻢ ﻋﻠﻰ
80
3=2+1 2 7
6=3+3 3 7
10=4+6 4 7
15=5+10 5 7
21=6+15 6 7
28=7+21 7 7
Arrays
ﺧﻼل اﻟﻔﻘﺮات اﻟﺴﺎﺑﻘﺔ ﻛﻨﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﻐﯿﺮات ،ورأﯾﻨﺎ ﻛﯿﻒ ﺗﺴﻤﺢ ﻟﻨﺎ ﺑﺘﺨﺰﯾﻦ اﻟﻘﯿﻢ ﻓﻲ
اﻟﺬاﻛﺮة ،ورأﯾﻨﺎ ﻛﺬﻟﻚ أن ﻛﻞ ﻣﺘﻐﯿﺮ ﻣﺨﺼﺺ ﻻﺣﺘﻮاء ﻗﯿﻤﺔ واﺣﺪة ،وﻻ ﯾﻤﻜﻦ ﻟﻠﻤﺘﻐﯿﺮ اﻟﻮاﺣﺪ
ﻟﺬﻟﻚ ﻟﻮ اﻓﺘﺮﺿﻨﺎ أﻧﻨﺎ ﻧﺮﯾﺪ إﻧﺸﺎء ﺑﺮﻧﺎﻣﺞ ﻟﺤﺴﺎب ﻣﻌﺪﻻت اﻟﻄﻠﺒﺔ ،ﺑﺤﯿﺚ ﯾﺴﺘﻘﺒﻞ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ
ﻧﻘﻄﺔ اﻟﻄﺎﻟﺐ ﻓﻲ ﻛﻞ ﻣﺎدة ﻣﻦ اﻟﻤﻮاد اﻟﺘﻲ ﯾﺪرﺳﮭﺎ ،ﺛﻢ ﯾﻘﻮم ﺑﺤﺴﺎب اﻟﻤﻌﺪل اﻟﻌﺎم ،ﻗﺪ ﺗﻘﻮل ﻟﻲ:
ﺑﺈﻣﻜﺎﻧﻨﺎ ﻋﻤﻞ ذﻟﻚ ﻣﻦ ﺧﻼل اﻹﻋﻼن ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﺘﻐﯿﺮات ﺣﺴﺐ ﻋﺪد اﻟﻤﻮاد ﻟﺪﯾﻨﺎ ﺛﻢ
ﻧﺠﺮي ﻋﻠﯿﮭﺎ ﻋﻤﻠﯿﺔ ﺣﺴﺎب اﻟﻤﻌﺪل اﻟﻌﺎم ،ﺳﺄﻗﻮل ﻟﻚ ﺑﺄن ﺟﻮاﺑﻚ ﺻﺎﺋﺐ ،ﻷﻧﮫ ﻟﻮ أردﻧﺎ ﻣﺜﻼ
ﺣﺴﺎب ﻣﻌﺪل ﻃﺎﻟﺐ ﻣﻌﯿﻦ ﻓﻲ ﻋﺸﺮة ﻣﻮاد ﯾﺪرﺳﮭﺎ ،ﺳﻮف ﻧﻌﻠﻦ ﻋﻦ ﻋﺸﺮ ﻣﺘﻐﯿﺮات رﻗﻤﯿﺔ
رﻗﻤﻲ اﻟﺮﻗﻢ ،1اﻟﺮﻗﻢ ،2اﻟﺮﻗﻢ ،3اﻟﺮﻗﻢ ،4اﻟﺮﻗﻢ ،5اﻟﺮﻗﻢ ،6اﻟﺮﻗﻢ ،7اﻟﺮﻗﻢ ،8اﻟﺮﻗﻢ ،9اﻟﺮﻗﻢ10؛
;Int Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9, Num10
81
ﻟﻜﻦ ھﺬه اﻟﻄﺮﯾﻘﺔ ﻟﯿﺴﺖ ﻣﺠﺪﯾﺔ إذا ﻛﻨﺎ ﺳﻨﺤﺘﺎج إﻟﻰ ﺗﺨﺰﯾﻦ ﻗﯿﻢ ﻛﺜﯿﺮة ،ﻷﻧﻨﺎ ﺳﻨﺠﺪ ﺻﻌﻮﺑﺔ ﻓﻲ
ﻟﺤﻞ ھﺬه اﻟﻤﺸﺎﻛﻞ وﻏﯿﺮھﺎ وﺟﺪ ﻣﻔﮭﻮم اﻟﻤﺼﻔﻮﻓﺎت ،Arraysﺑﺤﯿﺚ ﻧﺴﺘﺨﺪﻣﮭﺎ ﺣﯿﻨﻤﺎ ﻧﻮد
ﺗﺨﺰﯾﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﻤﻨﺘﻤﯿﺔ ﻟﻨﻔﺲ ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻣﺘﻐﯿﺮ واﺣﺪ ،وﯾﺮﺗﻜﺰ ﻣﻔﮭﻮم
اﻟﻘﯿﻤﺔ :Valueوھﻲ اﻟﻘﯿﻢ اﻟﻤﺮاد ﺗﺨﺰﯾﻨﮭﺎ ﻓﻲ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ،ﻟﻮ أﺧﺬﻧﺎ ﻣﺜﻼ ﻣﺼﻔﻮﻓﺔ
ﻟﺘﺨﺰﯾﻦ درﺟﺎت اﻟﻄﻼب ﻓﻲ اﻟﻤﻮاد ﻓﺈن اﻟﺪرﺟﺎت ھﻲ اﻟﻘﯿﻢ ،ﻛﻞ درﺟﺔ ﻋﺒﺎرة ﻋﻦ ﻗﯿﻤﺔ ﺳﯿﺘﻢ
اﻟﺮﺗﺒﺔ :Indexوھﻲ رﺗﺒﺔ اﻟﻌﻨﺼﺮ داﺧﻞ اﻟﻤﺼﻔﻮﻓﺔ ،وﺗﺒﺪأ ﺑﺼﻔﺮ وﺗﻨﺘﮭﻲ ﺑﺮﺗﺒﺔ آﺧﺮ ﻋﻨﺼﺮ
ﻧﺎﻗﺺ واﺣﺪ ،ﻣﺜﻼ ﻟﻮ أردﻧﺎ ﺗﺨﺰﯾﻦ اﻟﺪرﺟﺎت ﻓﻲ ﻣﺼﻔﻮﻓﺔ اﻟﻤﻮاد ﻓﺈن اﻟﺘﻤﺜﯿﻞ اﻟﻔﻌﻠﻲ ﺳﯿﻜﻮن
ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
82
ﻧﺴﺘﻄﯿﻊ اﻟﻮﺻﻮل إﻟﻰ أي ﻋﻨﺼﺮ ﻣﻦ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﻣﻦ ﺧﻼل رﺗﺒﺘﮫ ،Indexھﺬا اﻟﻨﻮع
ﻣﻦ اﻟﻤﺼﻔﻮﻓﺎت اﻟﺬي ﻧﺘﺤﺪث ﻋﻨﮫ ﯾﺴﻤﻰ اﻟﻤﺼﻔﻮﻓﺎت اﻷﺣﺎدﯾﺔ اﻟﺒﻌﺪ one-dimensional
arrayﻷﻧﮭﺎ ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﻌﺪ واﺣﺪ ﯾﻀﻢ اﻟﻌﻨﺎﺻﺮ ﺑﺸﻜﻞ ﺧﻄﻲ ﻛﻤﺎ ﯾﻌﺮض اﻟﺸﻜﻞ أﻋﻼه.
اﻟﺒﺪاﯾﺔ
//ﻣﺼﻔﻮﻓﺔ ﻣﻦ دون ﺗﺤﺪﯾﺪ ﻋﺪد اﻟﻌﻨﺎﺻﺮ
ﻧﻮع_اﻟﻤﺼﻔﻮﻓﺔ اﺳﻢ_اﻟﻤﺼﻔﻮﻓﺔ_اﻷوﻟﻰ ][ ؛
BEGIN
ﻣﺼﻔﻮﻓﺔ ﻣﻦ دون ﺗﺤﺪﯾﺪ ﻋﺪد اﻟﻌﻨﺎﺻﺮ//
; ][Data_Type ArrayName
اﻟﺒﺪاﯾﺔ
//ﻣﺼﻔﻮﻓﺔ ﻣﻦ دون ﺗﺤﺪﯾﺪ ﻋﺪد اﻟﻌﻨﺎﺻﺮ
رﻗﻤﻲ ﻣﺼﻔﻮﻓﺔ_درﺟﺎت_اﻟﻄﻼب ][ ؛
83
BEGIN
ﻣﺼﻔﻮﻓﺔ ﻣﻦ دون ﺗﺤﺪﯾﺪ ﻋﺪد اﻟﻌﻨﺎﺻﺮ//
; ][Int MarksArray
اﻟﺒﺪاﯾﺔ
//ﻣﺼﻔﻮﻓﺔ ﻣﻜﻮﻧﺔ ﻣﻦ 7ﻋﻨﺎﺻﺮ ﻟﺘﺨﺰﯾﻦ أﯾﺎم اﻷﺳﺒﻮع
ﻧﺼﻲ ﻣﺼﻔﻮﻓﺔ_أﯾﺎم_اﻷﺳﺒﻮع ] [7؛
//ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع رﻗﻤﻲ ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺗﻜﺮار ﺗﺬھﺐ ﻣﻦ أول ﻋﻨﺼﺮ إﻟﻰ آﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ
رﻗﻤﻲ اﻟﻌﺪاد ؛
84
BEGIN
ﻣﺼﻔﻮﻓﺔ ﻣﻜﻮﻧﺔ ﻣﻦ 7ﻋﻨﺎﺻﺮ ﻟﺘﺨﺰﯾﻦ أﯾﺎم اﻷﺳﺒﻮع//
; ]String WeekArray[7
ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع رﻗﻤﻲ ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺗﻜﺮار ﺗﺬھﺐ ﻣﻦ أول ﻋﻨﺼﺮ إﻟﻰ آﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ//
; Int Count
ﺗﺨﺰﯾﻦ اﻟﻘﯿﻢ ﻓﻲ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﺣﺴﺐ اﻟﺮﺗﺒﺔ //
;"WeekArray[0] ← " Sunday
;"WeekArray[1] ← " Monday
;"WeekArray[2] ← " Tuesday
;"WeekArray[3] ← " Wednesday
;"WeekArray[4] ← " Thursday
;"WeekArray[5] ← " Friday
;"WeekArray[6] ← " Saturday
ﻋﺮض ﻛﻞ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ//
For Count ← 0 TO 6
;)]WRITE("The Day Name Is: "+ WeekArray[Count
END FOR
END
اﻟﻤﺼﻔﻮﻓﺎت ﻣﺘﻌﺪدة اﻷﺑﻌﺎد ھﻲ ﻣﺼﻔﻮﻓﺎت ﺗﺘﻜﻮن ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺑﻌﺪ ،ﻗﺪ ﺗﻜﻮن ﺛﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ
)ﻋﺒﺎرة ﻋﻦ أﻋﻤﺪة وأﺳﻄﺮ( أو ﺛﻼﺛﯿﺔ اﻟﺒﻌﺪ أو أﻛﺜﺮ ﻣﻦ ذﻟﻚ ﺣﺴﺐ اﻟﺤﺎﺟﺔ ،ﻋﻠﻤﺎ أن ھﺬا اﻟﻨﻮع
ﻣﻦ اﻟﻤﺼﻔﻮﻓﺎت ﻧﺎدر اﻻﺳﺘﺨﺪام ﺟﺪا وﻻ ﻧﺤﺘﺎﺟﮫ إﻻ ﻓﻲ ﺣﺎﻟﺔ رﻏﺒﺘﻨﺎ ﻓﻲ اﻟﺘﻌﻤﻖ ﻓﻲ ﺑﺮﻣﺠﺔ
85
ﻓﯿﻤﺎ ﯾﻠﻲ ﻣﺜﺎل ﻋﻦ اﻹﻋﻼن ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﺛﻨﺎﺋﯿﺔ two-dimensional arrayﻣﻦ ﻧﻮع رﻗﻤﻲ
;]Int Two_Dimensional_Array[4,5
اﻟﻤﺼﻔﻮ ﻓﺔ أﻋﻼه ﻋﺒﺎرة ﻋﻦ ﻣﺼﻔﻮﻓﺔ رﻗﻤﯿﺔ ﺛﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ ﺗﺘﻜﻮن ﻣﻦ أرﺑﻌﺔ أﺳﻄﺮ وﺧﻤﺴﺔ
أﻋﻤﺪة ،إذا أردﻧﺎ ﺗﻤﺜﯿﻠﮭﺎ رﯾﺎﺿﯿﺎ ﻓﮭﻲ ﺑﻤﺜﺎﺑﺔ ﺟﺪول ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
ﻣﻠﺤﻮﻇﺔ :اﻧﺘﺒﮫ إﻟﻰ أن ﺗﺮﺗﯿﺐ اﻟﻌﻨﺎﺻﺮ Indexﯾﺒﺪأ ﻣﻦ ﺻﻔﺮ ﺳﻮاء ﺑﺎﻟﻨﺴﺒﺔ ﻟﻸﻋﻤﺪة أو
اﻷﺳﻄﺮ ،وﯾﻨﺘﮭﻲ داﺋﻤﺎ ﺑﺮﺗﺒﺔ آﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﻧﺎﻗﺺ واﺣﺪ ،وﻋﺪد ﻋﻨﺎﺻﺮ
اﻟﻤﺼﻔﻮﻓﺔ اﻟﺜﻨﺎﺋﯿﺔ اﻟﺒﻌﮫ ﯾﺴﺎوي ﻋﺪد اﻷﻋﻤﺪة ﻓﻲ ﻋﺪد اﻷﺳﻄﺮ ،ﻓﻲ ﺣﺎﻟﺘﻨﺎ أﻋﻼه ﻓﻌﺪد ﻋﻨﺎﺻﺮ
ﻣﺼﻔﻮﻓﺔ ﻣﻜﻮﻧﺔ ﻣﻦ ﺧﻤﺴﺔ أﻋﻤﺪة وأرﺑﻌﺔ أﺳﻄﺮ ھﻮ ﻋﺸﺮون ﺧﺎﻧﺔ ﻻﺣﺘﻮاء ﻗﯿﻢ اﻟﻌﻨﺎﺻﺮ.
86
ﻓﯿﻤﺎ ﯾﻠﻲ ﻣﺜﺎل ﺑﺮﻣﺠﻲ ﯾﻮﺿﺢ ﻛﯿﻔﯿﺔ اﻹﻋﻼن ﻋﻦ اﻟﻤﺼﻔﻮﻓﺎت اﻟﺜﻨﺎﺋﯿﺔ اﻟﺒﻌﺪ وﺗﻌﺒﺌﺔ ﻋﻨﺎﺻﺮھﺎ
ﺑﺎﻟﻘﯿﻢ:
اﻟﺒﺪاﯾﺔ
//ﻣﺼﻔﻮﻓﺔ ﻣﻜﻮﻧﺔ ﻣﻦ ﻋﻤﻮدﯾﻦ وﺛﻼﺛﺔ أﺳﻄﺮ
رﻗﻤﻲ ﻣﺼﻔﻮﻓﺔ_ﺛﻨﺎﺋﯿﺔ ] [2,3؛
//ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع رﻗﻤﻲ ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺗﻜﺮار ﺗﺬھﺐ ﻣﻦ أول ﻋﻨﺼﺮ إﻟﻰ آﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ
رﻗﻤﻲ ﻋﺪاد_اﻷﻋﻤﺪة ،ﻋﺪاد_اﻷﺳﻄﺮ ؛
اﻟﻨﮭﺎﯾﺔ
87
BEGIN
ﻣﺼﻔﻮﻓﺔ ﻣﻜﻮﻧﺔ ﻣﻦ ﻋﻤﻮدﯾﻦ وﺛﻼﺛﺔ أﺳﻄﺮ//
;]Int Two_Dimensional_Array[3,2
ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع رﻗﻤﻲ ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺗﻜﺮار ﺗﺬھﺐ ﻣﻦ أول ﻋﻨﺼﺮ إﻟﻰ آﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ//
; Int Count_Rows, Count_Columns
; Two_Dimensional_Array[1,0] ← 11
; Two_Dimensional_Array[1,1] ← 19
; Two_Dimensional_Array[1,2] ← 20
Copying Arrays
ﺗﻮﻓﺮ ﺑﻌﺾ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ وﻇﺎﺋﻒ Methodsﺧﺎﺻﺔ ﺑﻨﺴﺦ ﻣﺤﺘﻮى ﻋﻨﺎﺻﺮ ﻣﻦ ﻣﺼﻔﻮﻓﺔ
إﻟﻰ ﻣﺼﻔﻮﻓﺔ أﺧﺮى ،ﻓﻤﺜﻼ ﻧﺠﺪ ﻓﻲ ﻟﻐﺎت اﻟﺪوت ﻧﯿﺖ )اﻟﻔﯿﺠﻮال ﺑﺴﯿﻚ دوت ﻧﯿﺖ ،وﺳﻲ
ﺷﺎرب( وﻇﯿﻔﺔ ﺗﺴﻤﻰ ،Cloneﺗﻘﻮم ﺑﻨﺴﺦ ﻣﺤﺘﻮى ﻣﺼﻔﻮﻓﺔ إﻟﻰ ﻣﺼﻔﻮﻓﺔ أﺧﺮى ،ﻛﺬﻟﻚ ﻓﻲ
88
ﺑﺈﻣﻜﺎﻧﻨﺎ اﻻﺳﺘﻐﻨﺎء ﻋﻦ ھﺬه اﻟﺪاﻟﺔ واﻟﻘﯿﺎم ﺑﻨﺴﺦ ﻣﺤﺘﻮى اﻟﻤﺼﻔﻮﻓﺔ ﺑﻮاﺳﻄﺔ ﺗﻜﺮار ﺑﺴﯿﻂ ﯾﻨﻘﻞ
ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ اﻷﺻﻠﯿﺔ إﻟﻰ اﻟﻤﺼﻔﻮﻓﺔ اﻟﻤﺴﺘﮭﺪﻓﺔ ﻛﻤﺎ ﺗﻌﺮض ﻟﻨﺎ اﻟﺨﻮارزﻣﯿﺔ اﻟﺘﺎﻟﯿﺔ:
اﻟﺒﺪاﯾﺔ
//اﻹﻋﻼن ﻋﻦ اﻟﻤﺼﻔﻮﻓﺘﯿﻦ اﻷﺻﻠﯿﺔ واﻟﮭﺪف
رﻗﻤﻲ ﻣﺼﻔﻮﻓﺔ_رﻗﻤﯿﺔ_اﻟﻤﺼﺪر ] [5؛
رﻗﻤﻲ ﻣﺼﻔﻮﻓﺔ_رﻗﻤﯿﺔ_اﻟﮭﺪف ] [5؛
رﻗﻤﻲ ﻋﺪاد ؛
اﻟﻨﮭﺎﯾﺔ
89
BEGIN
//اﻹﻋﻼن ﻋﻦ اﻟﻤﺼﻔﻮﻓﺘﯿﻦ اﻷﺻﻠﯿﺔ واﻟﮭﺪف
Int SourceNumericArray[5];
Int TargetNumericArray[5];
//ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع رﻗﻤﻲ ﻟﻠﻘﯿﺎم ﺑﻌﻤﻠﯿﺔ ﺗﻜﺮار ﺗﺬھﺐ ﻣﻦ أول ﻋﻨﺼﺮ إﻟﻰ آﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ
Int Count;
90
اﻟﺨﺎﺗﻤﺔ
ﺗﻢ ﺑﻔﻀﻞ اﷲ وﻋﻮﻧﮫ اﻻﻧﺘﮭﺎء ﻣﻦ ﻛﺘﺎب "اﻟﺒﺤﺮ اﻟﺸﺎﺳﻊ ﻟﺪﺧﻮل اﻟﺨﻮارزﻣﯿﺎت ﻣﻦ ﺑﺎﺑﮭﺎ
اﻟﻮاﺳﻊ" ﻋﻠﻰ أﻣﻞ أن أﻛﻮن ﻗﺪ وﻓﻘﺖ ﻓﻲ ﺷﺮح وﺗﺒﺴﯿﻂ أﺳﺲ اﻟﺘﻔﻜﯿﺮ اﻟﺒﺮﻣﺠﻲ ،وﺗﺠﺪر
اﻹﺷﺎرة إﻟﻰ أن ھﺬا اﻟﻜﺘﺎب ﻣﺎھﻮ إﻻ ﺑﺎب ﻟﺪﺧﻮل ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ وﺗﻠﯿﮫ ﺧﻄﻮات ﻋﻤﻠﯿﺔ أﺧﺮى.
ﯾﻤﻜﻨﻚ ﺗﺤﻤﯿﻞ ﺑﺎﻗﻲ ﻛﺘﺐ اﻟﺴﻠﺴﻠﺔ وﻏﯿﺮھﺎ ﻟﻜﻲ ﺗﺘﻀﻠﻊ أﻛﺜﺮ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ،ﻛﻤﺎ ﯾﻤﻜﻨﻚ أﯾﻀﺎ أن
ﻟﻜﻞ ﺷﻲء إذا ﻣﺎ ﺗﻢ ﻧﻘﺼﺎن ،ﻓﺈن وﺟﺪﺗﻢ ﻓﻲ ﻃﯿﺎت ھﺬا اﻟﻜﺘﺎب أﺧﻄﺎء ﻟﻐﻮﯾﺔ أو ﺗﻘﻨﯿﺔ أو ﻟﺪﯾﻜﻢ
اﻟﺘﺎﻟﯿﺔ:
mobarmijoun@gmail.com
how2progspace@gmail.com
www.mobarmjoun.com
www.youtube.com/EssaadaniTV
www.facebook.com/EssaadaniPage
91