Professional Documents
Culture Documents
ﻛﺎﻧﺖ اﻟﻌﺮب ﻗﺪﯾﻤﺎ ﺗﻘﻮل :ﺧﯿﺮ اﻟﻔﻘﮫ ﻣﺎ ﺣﺎﺿﺮت ﺑﮫ ،وإﺳﻘﺎطﺎ ﻟﮭﺬا اﻟﻘﻮل ﻋﻠﻰ واﻗﻌﻨﺎ
اﻟﺒﺮﻣﺠﻲ ﻧﺴﺘﻄﯿﻊ أن ﻧﻘﻮل :ﺧﯿﺮ اﻟﺒﺮﻣﺠﺔ ﻣﺎ ﻛﺘﺒﺖ ﻋﻨﮫ ،ﻣﺎ ﻋﻠﻤﺘﮫ ﻏﯿﺮك ،ﻣﺎ ﺳﻌﯿﺖ ﺟﺎھﺪا
إﻟﻰ ﺗﻌﻤﯿﻤﮫ وﻧﺸﺮه ،ﻓﻼ ﺧﯿﺮ ﻓﻲ زرع ﻻ ﯾﻨﺜﺮ ،وﻻ ﻧﻔﻊ ﻓﻲ ﻋﻠﻢ ﻻ ﯾﻨﺸﺮ ،وﻻ ﯾﺪرك اﻻﺑﺘﻜﺎر
ﺑﺎﻻﺣﺘﻜﺎر ،وﻻ ﯾﺒﻠﻎ اﻟﻨﺼﺮ ﺑﺎﻟﺤﺼﺮ.
ﻗﺒﻞ ﺳﻨﺘﯿﻦ أو أﻛﺜﺮ ﻣﻦ ﺗﺎرﯾﺦ ﻛﺘﺎﺑﺔ ھﺬه اﻟﺴﻄﻮر ،ﻛﻨﺎ ﻗﺪ دﻋﻮﻧﺎ ﻓﻲ إﺣﺪى ﻣﻘﺪﻣﺎت ﺳﻠﺴﻠﺔ ﻛﻦ
أﺳﺪا ﻟﻺﺑﺪاع ،إﻟﻰ اﻹﺳﮭﺎم ﻓﻲ ﺗﻄﻮﯾﺮ اﻟﻤﺤﺘﻮى اﻟﻌﺮﺑﻲ اﻟﻤﻜﺘﻮب ،ﺳﻌﯿﺎ ﻣﻨﺎ إﻟﻰ ﺳﺪ اﻟﺜﻐﺮ
وﺟﺒﺮ اﻟﻜﺴﺮ ،ﻷن اﻟﻨﻘﺺ ﺑﺮز ﺑﺸﻜﻞ رھﯿﺐ ،وﺻﺎر ﻣﻦ اﻟﻤﺴﺘﺒﻌﺪ ﺟﺪا أن ﺗﺒﺤﺚ ﻋﻦ ﻣﺸﻜﻠﺔ
ﺑﺮﻣﺠﯿﺔ ﻓﻲ ﻣﺤﺮﻛﺎت اﻟﺒﺤﺚ ﻓﺘﺠﺪ ﻟﮭﺎ ﺣﻼ ﻣﻜﺘﻮﺑﺎ ﺑﺎﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ اﻟﻔﺼﺤﻰ ،ﻣﻤﺎ ﺣﺬا ﺑﺠﻤﯿﻊ
رواد اﻟﺒﺮﻣﺠﺔ إﻟﻰ اﺳﺘﻌﻤﺎل اﻟﻠﻐﺎت اﻷﺟﻨﺒﯿﺔ ﻛﻮﺳﯿﻠﺔ ﻟﻠﺒﺤﺚ واﻹﻓﺤﺎء واﻟﺘﻨﻘﯿﺐ ،ﻓﺎﺳﺘﻮﺳﻌﺖ
اﻟﻔﺮج وﺗﻔﺎﻗﻢ اﻟﺼﺪع.
ﻟﻜﻦ اﻟﺪﻋﻮة اﻟﺘﻲ ﻛﻨﺎ ﻗﺪ أﺻﺪرﻧﺎھﺎ ﺟﺰاﻓﺎ أﺗﺖ أﻛﻠﮭﺎ ﺑﻌﺪ ﻣﺪة ،ﺣﯿﻨﻤﺎ ﺑﻌﺚ إﻟﯿﻨﺎ اﻷﺳﺘﺎذ ﺑﺎﺳﻞ
ﻋﺒﺪ ﷲ ﻣﻦ اﻟﻌﺮاق ﺑﮭﺬا اﻟﻜﺘﺎب اﻟﻤﺎﺗﻊ اﻟﻨﺎﻓﻊ اﻟﺬي ﺳﻨﺘﺤﺪث ﻋﻨﮫ ﻓﯿﻤﺎ ﯾﻠﻲ ،وﻗﺒﻠﮫ ﺑﻌﺚ إﻟﯿﻨﺎ
اﻹﺧﻮة اﺳﻤﺎﻋﯿﻞ اﻟﺸﮭﺎﻟﻲ و ھﺎﻧﻲ ﻋﺒﺪ اﻟﺮﺣﻤﻦ ﻣﻦ ﺑﻼد اﻟﯿﻤﻦ ﻛﺘﺎﺑﺎ ﺣﻮل ﻟﻐﺔ اﻟﺴﻲ ﺑﻠﺲ
ﺑﻠﺲ.
اﺳﻢ اﻟﻜﺘﺎب ﻛﻤﺎ ورد ﻣﻌﻨﺎ ﻓﻲ ﺻﻔﺤﺔ اﻟﻐﻼف ھﻮ :اﻟﻨﻈﺮات اﻟﺪﻗﯿﻘﺔ ﻓﻲ ﻣﻔﺎھﯿﻢ اﻟﺒﺮﻣﺠﺔ
اﻟﻌﻤﯿﻘﺔ )أﺳﺲ اﻟﺘﻔﻜﯿﺮ اﻟﺒﺮﻣﺠﻲ – ﻟﻐﺔ C++ﻧﻤﻮذﺟﺎ( ﻛﺘﺒﮫ اﻷﺳﺘﺎذ ﺑﺎﺳﻞ ﻋﺒﺪ ﷲ ﻓﻲ
اﻟﺒﺪاءة ﻷﺑﻨﺎﺋﮫ اﻷﺑﺮار رﻏﺒﺔ ﻣﻨﮫ ﻓﻲ ﺗﺒﺴﯿﻂ ﻣﻔﮭﻮم اﻟﺒﺮﻣﺠﺔ واﻟﺘﻔﻜﯿﺮ اﻟﺮﯾﺎﺿﻲ واﻟﻤﻨﻄﻘﻲ ﻓﻲ
أذھﺎن اﻟﻨﺎﺷﺌﺔ ،وﻗﺪ أﺻﺎب ﻓﻲ ذﻟﻚ وأﺟﺎد ،ﺳﯿﻤﺎ وأﻧﮫ ﺳﻠﻚ ﻓﻲ ﻟﻐﺘﮫ اﻟﻜﺘﺎﺑﯿﺔ ﻣﺴﻠﻜﺎ ﺳﻠﺴﺎ
وﺟﻨﺢ ﻧﺤﻮ اﻟﺘﺒﺴﯿﻂ واﻟﺘﺴﮭﯿﻞ وﺗﻘﺪﯾﻢ أﻣﺜﻠﺔ ﻣﻦ اﻟﻮاﻗﻊ ﻟﻜﻲ ﯾﻜﻮن اﻟﻤﻔﮭﻮم اﻟﺒﺮﻣﺠﻲ اﻟﻤﺠﺮد
ﻗﺎﺑﻼ ﻟﻼﺳﺘﯿﻌﺎب واﻟﻔﮭﻢ.
2
ﻧﺎھﯿﻚ ﻋﻦ اﻷﺳﻠﻮب اﻟﻌﻠﻤﻲ اﻟﺬي ﯾﻘﺪم ﺑﮫ اﻷﺳﺘﺎذ ﺑﺎﺳﻞ ﻣﺎدﺗﮫ ،ﻓﯿﺴﻮق ﻟﻚ اﻷﻣﺜﻠﺔ ﻣﻦ واﻗﻊ
ﻋﻠﻢ اﻟﻔﯿﺰﯾﺎء ﺳﻮﻗﺎ ،ﻓﺘﺠﺪه ﯾﺸﺮح ﻟﻚ ﺗﻤﺜﯿﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺑﺎﻻﺳﺘﻨﺎد إﻟﻰ ﻣﺎ ﯾﻘﻊ
ﻓﻌﻠﯿﺎ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺤﺎﺳﺒﺔ ﺑﺎﻋﺘﺒﺎرھﺎ ﺟﮭﺎزا اﻟﻜﺘﺮوﻧﯿﺎ ،وﺑﺎﻋﺘﺒﺎر اﻟﻮﺣﺪات اﻟﺜﻨﺎﺋﯿﺔ Bits
ﺗﺪﻓﻘﺎ ﻟﻠﺘﯿﺎر ) ﺗﯿﺎر ﯾﻤﺮ ،ﺗﯿﺎر ﻻ ﯾﻤﺮ(.
وﻟﻜﻲ ﻻ ﯾﻨﻔﺮ اﻷدﺑﯿﻮن ﻣﻦ اﻟﻜﺘﺎب ﯾﻘﻮم ﻣﺆﻟﻔﮫ ﺑﺴﺮد أﻣﺜﻠﺔ ﺑﯿﻦ اﻟﻔﯿﻨﺔ واﻷﺧﺮى ﺑﻌﯿﺪا ﻋﻦ
ﻋﺎﻟﻢ اﻟﻔﯿﺰﯾﺎء واﻟﺮﯾﺎﺿﯿﺎت ،ﻓﯿﺘﺤﺪث ﻋﻦ أﻧﻈﻤﺔ اﻟﻌﺪ وﯾﻌﻄﻲ ﻟﮭﺎ ﻣﺜﺎﻻ ﺑﻠﻌﺒﺔ ﺗﺴﺠﯿﻞ اﻟﻨﻘﺎط
ﻋﻨﺪ ﻛﻞ ﺧﺴﺎرة أو ﻓﻮز ،وھﻜﺬا دواﻟﯿﻚ.
ﻟﻜﻲ ﻻ ﯾﻄﻮل اﻟﺘﻤﮭﯿﺪ ،ﻧﻜﺘﻔﻲ ﺑﮭﺬا اﻟﻘﺪر وﻧﺘﺮﻛﻜﻢ ﺗﺒﺪؤون رﺣﻠﺘﻜﻢ ﻣﻊ أﻋﻤﺎق ﻣﻔﺎھﯿﻢ اﻟﺒﺮﻣﺠﺔ
اﻟﺤﺪﯾﺜﺔ ،راﺟﯿﻦ ﻣﻦ ﷲ اﻟﻌﻠﻲ اﻟﻘﺪﯾﺮ أن ﯾﺘﻘﺒﻞ ﻣﻨﺎ وﻣﻨﻜﻢ ﺻﺎﻟﺢ اﻷﻋﻤﺎل ،وأن ﯾﺮزﻗﻨﺎ وإﯾﺎﻛﻢ
اﻹﺧﻼص واﻟﺼﺪق ،وأن ﯾﺠﺰي اﻷﺳﺘﺎذ ﺑﺎﺳﻞ ﻋﺒﺪ ﷲ ﺧﯿﺮ اﻟﺠﺰاء ﻋﻠﻰ إﺳﮭﺎﻣﮫ اﻟﻤﺒﺎرك
وﻛﺘﺎﺑﮫ اﻟﻄﯿﺐ ،وأن ﯾﺒﺎرك ﻓﯿﮫ وﻓﻲ ﺻﺤﺘﮫ وأھﻠﮫ ووﻗﺘﮫ ،وأن ﯾﻘﺮ ﻋﯿﻨﯿﮫ ﺑﺄﺑﻨﺎﺋﮫ وأن ﯾﺤﻔﻈﮭﻢ
أﺟﻤﻌﯿﻦ ﺑﻤﺎ ﺣﻔﻆ ﺑﮫ اﻟﺬﻛﺮ اﻟﺤﻜﯿﻢ.
ﺣﺘﻰ ﻻ أﻏﻔﻞ ﻓﺈن دﻋﻮة اﻹﺳﮭﺎم واﻟﻤﺸﺎرﻛﺔ ﻓﻲ إﺛﺮاء اﻟﻤﺤﺘﻮى اﻟﻤﻜﺘﻮب دﻋﻮة ﻋﺎﻣﺔ
وﻣﻔﺘﻮﺣﺔ ﻣﺎ ﻗﺪر ﷲ ﻟﻨﺎ اﻟﺒﻘﺎء ،ﻓﻼ ﺷﻲء ﯾﻀﺎھﻲ ﺧﺪﻣﺔ أﻣﺔ اﻹﺳﻼم ،وﺗﻠﻚ أﺳﻤﻰ اﻟﻤﺮاﺗﺐ،
وأﻛﺮم ﻣﻦ ﻛﺮم اﻟﻤﻨﺎﺳﺐ ،وأﺷﺮف ﻣﻦ ﺷﺮف اﻟﻤﻨﺎﺻﺐ ،ﺑﺎﻟﺘﻮﻓﯿﻖ واﻟﺴﺪاد ودام ﻟﻜﻢ اﻟﺒﺸﺮ
واﻟﻔﺮح.
3
ﻣﻘﺪﻣﺔ
ﺣﻴﻢ
ھﺬا اﻟﻜﺘﺎب أﻋﺪدﺗﮫ ﺧﺼﯿﺼﺎ ﻟﻮﻟﺪي ﻣﺆﻣﻦ ،وﻟﺒﻘﯿﺔ أوﻻدي آﻣﻨﺔ وﻧﻮر وﻧﺪى .ﻟﯿﺘﻌﻠﻤﻮا أﺻﻮل
اﻟﺒﺮﻣﺠﺔ ،ﺑﻄﺮﯾﻘﺔ ﺳﮭﻠﺔ ،وﻟﯿﺘﻌﻠﻤﻮا ﺑﺬﻟﻚ أﺳﻠﻮب اﻟﺘﻔﻜﯿﺮ اﻟﺼﺤﯿﺢ.
ﻟﮭﺬا راﻋﯿﺖ ﻓﯿﮫ اﻟﺒﺴﺎطﺔ ،واﻟﺨﻄﺎب اﻟﺬي ﯾﺘﻨﺎﺳﺐ ﻣﻊ ﻣﺴﺘﻮى أﺑﻨﺎء اﻻﺑﺘﺪاﺋﯿﺔ واﻟﻤﺘﻮﺳﻄﺔ
واﻹﻋﺪادﯾﺔ .ﻓﺘﺠﺪ ﻓﯿﮫ أﻣﺜﻠﺔ ﺣﯿﺎﺗﯿﺔ ﺑﺴﯿﻄﺔ ،أﻧﻘﻠﮭﻢ ﺑﻮاﺳﻄﺘﮭﺎ إﻟﻰ ﻣﯿﺪان ﻣﺸﺎﺑﮫ ،ﻓﻲ ﻋﺎﻟﻢ
اﻟﺒﺮﻣﺠﺔ ،وﺻﯿﺎﻏﺔ اﻷﻓﻜﺎر.
وﺑﻤﺎ أﻧّﻨﻲ أﺧﺎطﺐ ﻓﯿﮫ ﻣﺜﻞ ذﻟﻚ اﻟﻌﻤﺮ؛ وﺟﺐ أن أﻓﺘﺮض ،أنّ اﻟﻤﻘﺎﺑﻞ ،ﻻ ﯾﻤﻠﻚ ﺷﯿﺌﺎ اﻟﺒﺘﺔ
ﻋﻦ اﻟﻤﻮﺿﻮع .ﻓﺎﺑﺘﺪأت ﻓﯿﮫ ﻣﻦ اﻟﺼﻔﺮ ،ﻷﻋﻠﻮا ﻣﻌﮭﻢ ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ .ﻟﺬﻟﻚ؛ أﺑﺚ اﻷﻓﻜﺎر
واﻟﻤﺼﻄﻠﺤﺎت وأﻧﺜﺮھﺎ ﻧﺜﺮا ھﻨﺎ وھﻨﺎك ،ﻗﺒﻞ أن أﺷﺤﺬھﺎ ﺟﻤﯿﻌﺎ ﻓﻲ ﺳﻠﺴﻠﺔ ﺑﺮﻣﺠﯿﺔ ،ﻟﯿﻜﻮن
اﻟﺬھﻦ ﺑﺬﻟﻚ ﻋﻠﻰ اﺳﺘﻌﺪاد ﻏﯿﺮ ﻗﺴﺮي ﻟﺘﻘﺒﻞ اﻟﻤﺎدة اﻟﻌﻠﻤﯿﺔ اﻟﺘﻲ ﻓﯿﮫ.
4
اﻟﻤﺮﺣﻠﺔ اﻷوﻟﻰ ،ھﻲ ﺗﻌﺮﯾﻒ ﺑﺴﯿﻂ ﻟﻜﯿﻔﯿﺔ اﺷﺘﻐﺎل اﻟﺤﺎﺳﺒﺎت وﻛﯿﻒ ﺗﻌﻤﻞ .ﺛﻢ ﯾﺪﺧﻞ ﻗﺒﻞ
ذﻟﻚ وﺑﻌﺪھﺎ ،إﻟﻰ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ وﻛﯿﻒ ﺟﺎءت ﻣﺮاﺣﻞ ﺗﻄﻮرھﺎ ،ﻋﺒﺮ أﻣﺜﻠﺔ ﺣﯿﺎﺗﯿﺔ
ﺑﺴﯿﻄﺔ ﻓﻲ اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻧﯿﺔ ،ﻟﻨﺪﺧﻞ ﻣﻐﻤﺎر اﻟﺒﺮﻣﺠﺔ ﺑﺼﻮرة ﻣﺘﻘﺪﻣﺔ ،ﻋﺒﺮ ﺻﻔﺤﺎت ﻋﺪﯾﺪة
ﺑﻌﺪھﺎ وﻗﺪ ﺗﮭﯿﺄ اﻟﻔﻜﺮ ﻟﺬﻟﻚ ﻓﻲ ﻣﺮﺣﻠﺔ ﺛﺎﻟﺜﺔ.
ھﺬا ھﻮ اﺻﺪار أوﻟﻲ ﻗﺪ ﯾﺤﺘﻮي ﻋﻠﻰ أﺧﻄﺎء ﻟﺬﻟﻚ ارﺟﻮ ﺗﺼﻮﯾﺒﻲ ﻋﻠﻰ ﻋﻨﻮاﻧﻲ اﻻﻟﻜﺘﺮوﻧﻲ
bascel@gmail.com
07703853510
وﺑﻤﺎ أﻧﻲ أرﺟﻮ اﻟﺨﯿﺮ ﻟﺠﻤﯿﻊ أﺑﻨﺎء اﻟﻤﺴﻠﻤﯿﻦ وأﺑﻨﺎء أﻣﺘﻨﺎ ﺑﺼﻮرة ﻋﺎﻣﺔ؛ ﻓﺈﻧﻲ أﻗﺪم ﻟﮭﻢ ﻋﻤﻠﻲ
ھﺬا ،راﺟﯿﺎ ﻣﻨﮭﻢ اﻟﺪﻋﺎء ﻟﻲ ﺑﺎﻟﺘﻮﻓﯿﻖ ،ﻓﻲ اﻟﺤﯿﺎة اﻟﺪﻧﯿﺎ وﻓﻲ اﻵﺧﺮة ،وﺳﺎﺋﻼ اﻟﻤﻮﻟﻰ ﻋ ّﺰ وﺟﻞ
أن ﯾﺠﻌﻠﮫ ﻓﻲ ﻣﯿﺰان ﺣﺴﻨﺎﺗﻲ وأھﻠﻲ أﺟﻤﻌﯿﻦ وأن ﯾﻐﻔﺮ ﻟﻨﺎ ﺟﻤﯿﻊ ﺧﻄﺎﯾﺎﻧﺎ وﯾﻌﻔﻮ وﯾﺼﻔﺢ إﻧّﮫ
ھﻮ اﻟﻐﻔﻮر اﻟﺮﺣﯿﻢ.
ﻣﺮة اﺧﺮى :ھﺬا اﺻﺪار اوﻟﻲ وﺳﺄﻗﻮم ﺑﺘﻌﺪﯾﻠﮫ وﻓﻘﺎ ﻟﻠﻤﻘﺘﺮﺣﺎت اﻟﻘﺎدﻣﺔ ﻟﻲ وﺳﺄﺑﺜﮫ ﻣﻦ ﺟﺪﯾﺪ.
واﺧﯿﺮا وﻗﺒﻞ ان أذھﺐ أود ﻋﺮض طﻠﺒﻲ اﻟﺪاﺋﻢ واﻟﺬي ھﻮ ھﺪﻓﻲ ﻓﻲ اﻟﺤﯿﺎة اﻟﺪﻧﯿﺎ اﻟﺬي ارﯾﺪ
أن أﻧﺠﺰه وﻟﯿﻜﻮن دﻟﯿﻞ اﻻﺧﻼص ﻟﻲ ﻋﻨﺪ ﷲ .أطﻠﺐ ﻣﻦ أي ﺷﺨﺺ ﺧﺒﯿﺮ ﻓﻲ اﻟﻔﯿﺰﯾﺎء
وﻣﺴﺘﻌﺪ ﻻﺳﺘﻘﺒﺎل أﻓﻜﺎري وﯾﺴﺘﻄﯿﻊ اﺳﺘﻘﺒﺎﻟﻲ رﺳﻤﯿﺎ ﻻﺛﺒﺎﺗﮭﺎ ﻓﻲ ﻧﻈﺮﯾﺔ ﺟﺪﯾﺪة؛ ﻓﺄطﻠﺐ ﻣﻨﮫ
أن ﯾﺘﺼﻞ ﺑﻲ وﯾﻌﻠﻤﻨﻲ ﺑﺬﻟﻚ ﻓﻠﺪي اﻓﻜﺎر ﺟﺪﯾﺪة ﻓﻲ اﻟﻔﯿﺰﯾﺎء وﺛﻮرﯾﺔ أرﯾﺪ اﻟﺨﺮوج ﻣﻨﮭﺎ
ﺑﻨﻈﺮﯾﺔ ﺟﺪﯾﺪة.
5
ﺗﻮﻃﺌﺔ ﺑﻘﻠﻢ :ﺧﺎﻟﺪ ﺍﻟﺴﻌﺪﺍﱐ2 ......................................................................................
ﻣﻘﺪﻣﺔ 4 .................................................. ................................................................
12 .......................................................................... ................................
ﻛﻴﻒ ﺗﻌﻤﻞ ﺍﳊﺎﺳﺒﺔ ؟ 12 .............................................................................................
ﻧﻈﺮﺓ ﺃﻭﱃ 13 ....................................................................... ................................
ﻛﻴﻒ ﺗﻘﺮﺃ ﺍﳊﺎﺳﺒﺔ ﺍﻟﻨﺺ ﺍﻟﱪﳎﻲ؟14 .......................................................................
ﺍﻵﻟﺔ ﺗﺪﺭﻙ ﺃﻡ ﺗﻘﻴﺲ؟15 ....................................................................................... .
ﻣﻢ ﺗﺘﻜﻮﻥ ﺍﳊﺎﺳﺒﺔ؟ 16 ...........................................................................................
ﻣﻦ ﻳﻔﻜﺮ؟17 ....................................................................... ................................ .
ﺍﻷﻭﺍﻣﺮ ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ 18 .............................................................................................
ﺍﻷﲰﺎﺀ ﻭﺍﳌﺨﺘﺼﺮﺍﺕ19 ...........................................................................................
ﻟﻐﺔ ﺍﳊﺴﺎﺏ ﺍﻟﻜﻬﺮﺑﺎﺋﻴﺔ20 .......................................................................................
ﻟﻐﺔ ﺍﻵﻟﺔ21 ......................................................................... ................................
ﺍﻟﺮﻣﻮﺯ ﻭﺍﻷﺷﻜﺎﻝ ﻭﻣﺪﻟﻮﻻﺎ21 .................................................. ................................
ﺍﻟﻨﻈﺮ ﺃﻓﻘﻴﺎ ﻭﺍﻟﻨﻈﺮ ﻋﻤﻮﺩﻳﺎ 22 .................................................. ................................
ﻛﺘﺎﺑﺔ ﺍﻻﻋﺪﺍﺩ22 ... ................................................................................................
ﻧﻈﺎﻡ ﺍﻟﻌﺪ 23 ........................................................................ ................................
ﻧﻈﺎﻡ ﺍﻟﻌﺪ ﻭﺍﻟﻌﺪ ﺍﻟﺜﻨﺎﺋﻲ 24 ......................................................................................
ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﻋﻠﻰ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺜﻨﺎﺋﻲ 25 ... ................................................................
ﺗﺼﺎﻣﻴﻢ ﻛﻬﺮﺑﺎﺋﻴﺔ ﻟﻠﻌﻤﻠﻴﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ 25 .....................................................................
ﺍﻟﺘﺤﻮﻳﻞ ﺑﲔ ﺍﻷﻧﻈﻤﺔ25 ..........................................................................................
ﺍﻟﺘﺮﻣﻴﺰ ﻭﺍﻟﺘﺸﻔﲑ 25 ...............................................................................................
ﺗﺮﲨﺔ ﺍﻻﻭﺍﻣﺮ 26 .................................................................................................
ﺧﺪﻣﺎﺕ ﺍﻟﱪﺍﻣﺞ 27 .................................................................................................
ﺍﳌﺘﺮﲨﺎﺕ 27 ........................................................................ ................................
ﺁﻻﺕ ﺗﺘﻮﺍﱃ 29 ..................................................................... ................................
6
ﺍﻟﺬﺍﻛﺮﺓ 29 ........................................................................... ................................
ﺍﳊﺮﻭﻑ ﻭﺍﻻﺭﻗﺎﻡ 30 ...............................................................................................
ﺍﻟﻠﺒﻨﺔ ﻭﺍﳋﺎﻧﺎﺕ 30 .................................................................................................
ﺣﺠﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ 31 ... ................................................................................................
ﺍﻟﻌﻨﺎﻭﻳﻦ 31 .......................................................................... ................................
ﻏﺮﻑ ﺍﻟﻔﻨﺪﻕ 32 ....................................................................................................
33 .......................................................................... ................................
ﺃﺳﺲ ﺍﻟﱪﳎﺔ ..ﻭﺍﻟﺘﻔﻜﲑ ﺍﻟﱪﳎﻲ 33 ............................................ ................................
ﺃﻧﻈﻤﺔ ﺍﳊﺎﺳﺒﺔ 34 .................................................................................................
ﺍﻟﺘﻨﻈﻴﻢ ﻭﺗﻄﻮﺭ ﺍﻟﱪﳎﺔ 35 .....................................................................................
ﺍﻟﻔﺼﺎﺋﻞ ﻭﺍﻟﻜﺎﺋﻨﺎﺕ 37 .............................................................................................
ﺻﻨﺎﺩﻳﻖ ﻣﻐﻠﻘﺔ 39 ..................................................................................................
ﺍﻟﺪﺍﻟﺔ ﻭﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ 40 .....................................................................................
ﺍﻟﺪﺍﻟﺔ ﻭﺍﳌﻌﺎﻣﻞ 41 ..................................................................................................
ﺍﻟﺪﺍﻟﺔ42 ............................................. ................................................................
ﺍﳌﻜﺘﺒﺔ ﺍﻟﱪﳎﻴﺔ ﻭﺍﻟﺪﻭﺍﻝ ﺍﳉﺎﻫﺰﺓ 43 .........................................................................
ﺍﻹﺟﺮﺍﺀ 45 .......................................................................... ................................
ﻃﺮﻕ ﺍﻟﺘﻤﻴﻴﺰ 45 ....................................................................................................
ﺍﻟﺘﺨﻄﻴﻂ ﻭﺍﻟﱪﳎﺔ 46 ...........................................................................................
ﺍﳋﻄﻮﺍﺕ ﺍﻟﻌﺎﻣﺔ ﳊﻞ ﺃﻱ ﻣﺴﺎﻟﺔ 46 ............................................. ................................
ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ 49 ....................................................................................................
ﺍﻟﻮﺭﺍﺛﺔ 50 ........................................................................... ................................
ﺍﻟﺘﺠﺮﻳﺪ 51 .......................................................................... ................................
ﺍﳌﺘﺮﺍﺩﻓﺎﺕ ﻭﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺋﺪ 52 .................................................. ................................
ﺍﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﻭﺍﻝ 53 ................................................................................................
ﺍﻟﺪﻭﺍﻝ ﻭﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺋﺪ 53 ......................................................................................
ﺍﻻﲰﺎﺀ ﻭﺍﳌﺘﻐﲑﺍﺕ 54 .............................................................................................
ﻣﻌﻠﻮﻣﻴﺔ ﺍﻷﲰﺎﺀ55 ................................................................................................
ﺍﻟﻘﻴﻤﺔ ﻭﺍﻟﻌﻨﻮﺍﻥ 56 ................................................................................................
ﺍﻟﻜﻠﻤﺎﺕ ﺍﳌﻔﺘﺎﺣﻴﺔ 56 ..............................................................................................
ﻋﺎﺋﻠﺔ ﺍﻷﲰﺎﺀ 56 ..................................................................................................
7
ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﺘﻔﺮﻉ ﻭﺍﻟﺪﺍﻟﺔ ﺍﻟﺮﺋﻴﺴﺔ 57 ...........................................................................
ﺍﻟﱪﳎﺔ ﺍﻟﺒﻨﻴﻮﻳﺔ 58 ..............................................................................................
ﺍﻟﺪﺍﻟﺔ ﺍﻟﺮﺋﻴﺴﺔ ﻭﺍﻟﱪﳎﺔ ﺍﳊﺪﻳﺜﺔ 59 ........................................................................
ﺍﳋﺮﻭﺝ ﻭﺍﻟﻌﻮﺩﺓ 60 .................................................................................................
ﺳﺮﻳﺔ ﺍﻻﺩﺍﺀ63 ..................................................................... ................................
ﻣﻌﺎﳉﺔ ﺍﻷﺧﻄﺎﺀ64 ................................................................................................
ﺍﳌﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺘﺠﻤﻌﺎﺕ 65 .........................................................................................
ﺍﻷﻋﻤﺪﺓ ﻭﺍﻟﺼﻔﻮﻑ 67 .............................................................................................
ﺍﻟﺮﻗﻢ ﺍﻟﺴﻔﻠﻲ ﻭﺍﻟﺪﻟﻴﻞ 67 .........................................................................................
ﻣﺼﻔﻮﻓﺎﺕ ﻣﺘﻐﲑﺓ ﺍﻟﺴﻌﺔ69 .......................................................................................
ﺍﻟﱪﳎﺔ ..ﻋﺎﱂ ﻳﺸﺒﻪ ﻋﺎﳌﻨﺎ 69 ................................................. ................................
71 ......................................................................... ................................
ﻣﺪﺧﻞ ﺇﱃ ﻟﻐﺔ 71 ............................................................................................. C++
ﻣﻘﺪﻣﺔ ﻋﺎﻣﺔ72 ..................................................................... ................................
ﲨﻞ ﺍﳌﻼﺣﻈﺎﺕ ﻭﺍﻟﺘﻌﻠﻴﻘﺎﺕ 74 .................................................. ................................
ﺗﻌﻠﻴﻖ ﺍﻟﺴﻄﺮ ﺍﻟﻮﺍﺣﺪ 74 ......................................................................................
ﺗﻌﻠﻴﻖ ﺍﻷﺳﻄﺮ ﺍﳌﺘﻌﺪﺩﺓ 74 ....................................................................................
ﺍﳍﻴﻜﻞ ﺍﻟﻌﺎﻡ ﻟﱪﻧﺎﻣﺞ ﻟﻐﺔ 75 ............................................. ................................ C++
ﺍﻟﺪﺍﻟﺔ ﺍﻷﻡ76 ....................................................................... ................................
ﺇﺩﺭﺍﺝ ﻣﻜﺘﺒﺎﺕ ﺍﻟﻠﻐﺔ ﰲ ﺍﻟﱪﻧﺎﻣﺞ78 .............................................. ................................
ﺍﳌﻮﺟﻬﺎﺕ 79 .......................................................................... ................................
ﺍﳌﻜﺘﺒﺔ ﺍﻟﺴﺎﺑﻘﺔ >79 ............................................ ................................<iostream
ﺍﺳﺘﺪﻋﺎﺀ ﻣﻜﺘﺒﺔ 81 ........................................................................................ C++
ﻣﻜﺘﺒﺔ ﺍﻟﺪﺧﻞ ﻭﺍﳋﺮﺝ 81 ......................................................................... iostream
ﻏﺮﺽ ﺍﻹﺩﺧﺎﻝ 82 ........................................................................................... cin
ﻏﺮﺽ ﺍﻹﺧﺮﺍﺝ 83 ......................................................................................... cout
ﺑﺮﻧﺎﻣﺞ ﺑﺴﻴﻂ ﻟﻠﻌﺮﺽ 83 .........................................................................................
ﻋﺒﺎﺭﺓ usingﻭ 84 .......................................................................... namespace
ﺗﻮﺯﻳﻊ ﲨﻞ ﺍﻟﻄﺒﺎﻋﺔ87 ...........................................................................................
ﺗﻨﺴﻴﻖ ﺍﻟﻨﺺ 88 ....................................................................................................
ﺍﻷﲰﺎﺀ ﰲ 88 .............................................................................................. C++
8
ﺍﳌﺘﻐﲑﺍﺕ 89 .......................................................................... ................................
ﺃﻧﻮﺍﻉ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﻟﻠﻐﺔ 90 ........................................................................................
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻌﺪﺩﻳﺔ90 ...........................................................................................
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻨﺼﻴﺔ 90 ...........................................................................................
ﻣﺘﻐﲑ ﻣﻦ ﺣﺮﻑ ﻭﺍﺣﺪ ﻓﻘﻂ 91 ... ................................................................ char
ﻣﺘﻐﲑ ﻣﻦ ﺍﻛﺜﺮ ﻣﻦ ﺣﺮﻑ 91 ..................................................................... string
ﺍﳌﺘﻐﲑﺍﺕ ﺍﳌﻨﻄﻘﻴﺔ 91 ..........................................................................................
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻜﺎﺋﻨﻴﺔ 91 ..........................................................................................
ﻣﺘﻐﲑﺍﺕ ﻭﺿﻌﻴﺔ 91 ............................................................................................
ﻣﺘﻐﲑﺍﺕ ﺃﺧﺮﻯ 92 ..............................................................................................
ﺍﻟﺬﺍﻛﺮﺓ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ 92 ..............................................................................................
ﻣﺜﺎﻝ ﰲ ﺍﳊﻴﺎﺓ 92 ..................................................................................................
ﳌﺎﺫﺍ ﺃﻧﻮﺍﻉ ﻣﺘﻐﲑﺍﺕ ﻛﺜﲑﺓ؟93 ................................................................................... .
ﺃﲰﺎﺀ ﺍﳌﺘﻐﲑﺍﺕ 94 .................................................................................................
ﺍﻟﺘﺼﺮﻳﺢ ﻭﺍﻹﺳﻨﺎﺩ 94 ..............................................................................................
ﺍﻟﺜﻮﺍﺑﺖ 97 ........................................................................... ................................
ﻛﻴﻒ ﻧﻐﲑ ﻗﻴﻢ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﳊﺎﺳﺒﺔ؟98 ..................................................................... .
ﰲ ﺃﻱ ﻣﻜﺎﻥ ﻳﻜﻮﻥ ﺍﻟﺘﺼﺮﻳﺢ؟98 ................................................. .................................
ﻣﺪﻯ ﺭﺅﻳﺔ ﺍﳌﺘﻐﲑ 99 ................................................................................................
ﺍﻟﻌﻤﻠﻴﺎﺕ ﻭﺍﻟﻌﻮﺍﻣﻞ 101 ............................................................................................
ﺍﻟﻌﻮﺍﻣﻞ 102 ......................................................................... ................................
ﺍﻟﺘﻌﺎﺑﲑ 102 ......................................................................... ................................
ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﺮﻳﺎﺿﻴﺔ 103 ............................................................................................
ﺃﺳﺒﻘﻴﺔ ﺍﻟﻌﻮﺍﻣﻞ 103 ...............................................................................................
ﻋﺎﻣﻼ ﺍﻟﺰﻳﺎﺩﺓ ﻭﺍﻟﻨﻘﺼﺎﻥ 103 ....................................................................................
ﻋﺎﻣﻞ ﺍﳌﺴﺎﻭﺍﺓ ﻭﻋﺎﻣﻞ ﺍﺧﺘﺒﺎﺭ ﺍﳌﺴﺎﻭﺍﺓ 105 .....................................................................
ﻋﻮﺍﻣﻞ ﺍﻟﺸﺮﻁ ﺍﻷﺧﺮﻯ105 ......................................................................................
ﺍﻟﻌﻮﺍﻣﻞ ﺍﳌﻨﻄﻘﻴﺔ106 ..............................................................................................
ﻋﺎﻣﻞ ﺍﻻﺧﺘﺒﺎﺭ ﺍﻟﺸﺮﻃﻲ ? 107 ..................................................................................
ﺍﳌﺆﺷﺮﺍﺕ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ ﻭﺍﻻﲰﺎﺀ ﺍﻟﻌﻨﻮﺍﻧﻴﺔ ﺍﻟﺒﺪﻳﻠﺔ 108 .......................................................
ﻋﺎﻣﻞ ﺍﻟﻌﻨﻮﺍﻥ &108 ..............................................................................................
ﺍﻟﺘﺤﻮﻳﻞ ﻣﻦ ﻧﻮﻉ ﻵﺧﺮ 108 .......................................................................................
9
ﺍﳌﺆﺷﺮﺍﺕ109 ........................................................................ ................................
ﺍﻻﺳﻢ ﺍﻟﻌﻨﻮﺍﱐ111 ................................................................................................
ﲨﻞ ﺍﻟﺸﺮﻁ ﻭﺍﲣﺎﺫ ﺍﻟﻘﺮﺍﺭ 111 ................................................ ................................
ﲨﻠﺔ ﺍﻻﺧﺘﻴﺎﺭ 114 ............................................ ................................switch-case
ﺍﳊﻠﻘﺎﺕ ﺍﻟﺘﻜﺮﺍﺭﻳﺔ ﻭﺍﻟﺪﻭﺭﺍﺕ ﺍﻟﺸﺮﻃﻴﺔ 115 ..................................................................
ﺃﻧﻮﺍﻉ ﺍﳊﻠﻘﺎﺕ 115 ..................................................................................................
ﺣﻠﻘﺎﺕ ﺍﻟﺘﺤﻘﻖ 116 ................................................................................................
ﺣﻠﻘﺔ ﺍﻟﻌﺪ 117 ..................................................................... ................................
ﺣﻠﻘﺔ 118 ...................................................................... ................................for
ﺍﻟﺪﻭﺍﻝ 120 .......................................... ................................................................
ﺍﻟﺪﻭﺍﻝ ﺍﳌﻜﺘﺒﻴﺔ 121 ................................................................................................
ﺍﻟﺪﻭﺍﻝ ﺍﳌﱪﳎﺔ 121 ..............................................................................................
ﺗﺼﻤﻴﻢ ﺍﻟﺪﺍﻟﺔ 121 .................................................................................................
ﻋﻨﺎﺻﺮ ﻛﺘﺎﺑﺔ ﺍﻟﺪﺍﻟﺔ 122 ........................................................................................
ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺩﺍﻟﺔ 122 ............................................................................................
ﺟﺴﻢ ﺍﻟﺪﺍﻟﺔ 123 ................................................................... ................................
ﺗﺮﻭﻳﺴﺔ ﺍﻟﺪﺍﻟﺔ 124 ...............................................................................................
ﺇﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﺍﻟﺔ126 ...............................................................................................
ﺍﻟﻌﻮﺩﻳﺔ126 ......................................................................... ................................
ﺩﻭﺍﻝ ﻻ ﺗﻌﻴﺪ ﻧﺘﻴﺠﺔ 128 .........................................................................................
ﺍﻟﺘﻤﺮﻳﺮ ﻟﻠﺪﺍﻟﺔ 128 ................................................................................................
ﺍﻟﺘﻤﺮﻳﺮ ﺑﺎﻟﻌﻨﻮﺍﻥ 130 .............................................................................................
ﺍﻟﺪﺍﻻﺕ ﺍﻟﺴﻄﺮﻳﺔ 131 ............................................................................................
ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺋﺪ ﻟﻠﺪﻭﺍﻝ 135 ......................................................................................
ﻋﻮﺩﺓ ﺍﱃ ﺍﳌﺆﺷﺮﺍﺕ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ137 .............................................. ................................
ﻣﺆﺷﺮ ﺍﱃ ﻣﺆﺷﺮ 138 ..............................................................................................
ﺍﳌﺼﻔﻮﻓﺎﺕ 139 ...................................................................... ................................
ﻣﺜﺎﻝ ﺃﲰﺎﺀ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﳌﺼﻔﻮﻓﺔ 140 ........................................................................
ﺍﻷﺭﻗﺎﻡ ﺍﻟﺴﻔﻠﻴﺔ 141 ...............................................................................................
ﻋﻮﺩﺓ ﺍﱃ ﺃﲰﺎﺀ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﳌﺼﻔﻮﻓﺔ 141 ..................................................................
ﺣﺠﻢ ﺍﳌﺼﻔﻮﻓﺔ 142 ...............................................................................................
ﺍﻹﻋﻼﻥ ﻋﻦ ﻣﺼﻔﻮﻓﺔ 142 ........................................................................................
10
ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺍﳌﺼﻔﻮﻓﺔ 142 .........................................................................................
ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ 143 .......................................................................................
ﺗﻌﻴﲔ ﻗﻴﻢ ﺍﻟﻌﻨﺎﺻﺮ ﳌﺼﻔﻮﻓﺔ 143 ............................................... ................................
ﻃﺮﻳﻘﺔ ﺃﺧﺮﻯ ﻟﻠﺘﺼﺮﻳﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ 144 .....................................................................
ﺍﳌﺼﻔﻮﻓﺔ ﻫﻲ ﻣﺆﺷﺮ! 145 .........................................................................................
ﺍﳌﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺪﻭﺍﻝ 146 ...........................................................................................
ﲤﺮﻳﺮ ﺍﳌﺼﻔﻮﻓﺔ ﻛﻮﺳﻴﻂ ﻟﺪﺍﻟﺔ 146 ............................................ ................................
ﻣﺼﻔﻮﻓﺔ ﺫﺍﺕ ﺃﺑﻌﺎﺩ 148 ...........................................................................................
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻨﺼﻴﺔ150 ..............................................................................................
ﻣﺼﻔﻮﻓﺎﺕ 150 .............................................................................................. char
ﺩﻭﺍﻝ ﻧﺼﻴﺔ ﺟﺎﻫﺰﺓ 151 ...........................................................................................
ﺍﳌﺘﻐﲑ ﺍﻟﻨﺼﻲ 152 ....................................................................................... string
ﺇﻋﻄﺎﺀ ﻗﻴﻢ ﻟﻠﻤﺘﻐﲑ ﺍﻟﻨﺼﻲ152 ..................................................................................
ﺍﻟﺬﺍﻛﺮﺓ ﻭﻣﺘﻄﻠﺒﺎﺕ ﺍﻟﱪﺍﻣﺞ 154 .................................................................................
ﺍﳌﺆﺷﺮ 154 ................................................................... ................................ new
ﲨﻞ ﺍﻻﺳﺘﺜﻨﺎﺀﺍﺕ ﻭﺍﻷﺧﻄﺎﺀ156 ............................................... ................................
ﲨﻞ 157 ......................................................................................... try – catch
ﺍﻟﻄﺮﻳﻖ ﺇﱃ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﻪ ﺍﻟﺘﻮﺟﻪ161 ...................................................................
ﺍﻟﺴــﺠﻼﺕ 161 ............................................. ................................ Structures
ﺍﻟﻜﻴﺎﻧﺎﺕ 161 .................................................................... ................................
ﺻﻨﺎﻋﺔ ﺍﻷﳕﺎﻁ 164 ..............................................................................................
ﻃﺮﻕ ﺻﻨﺎﻋﺔ ﺍﻷﳕﺎﻁ 164 .......................................................................................
ﺑﻨﻴﺔ ﺍﻟﺘﻌﺪﺍﺩ 165 ....................................................................................... enum
ﺍﻟﱪﳎـﺔ ﺍﻟﺸـﻴﺌﻴـﺔ174 ..........................................................................................
ﺍﻟﻔﺼﻴﻠﺔ؛ ﺻﻨﺎﻋﺔ ﳕﻂ 177 ......................................................................................
ﺍﻷﺳﺲ ﺍﻟﺜﻼﺛﺔ ﻟﻠﱪﳎﺔ ﺍﻟﻜﺎﺋﻨﻴﺔ 180 ........................................................................
ﻟﻐـﺔ 180 ....................................................................... ................................ C#
11
ﻛﻴﻒ ﺗﻌﻤﻞ ﺍﳊﺎﺳﺒﺔ
؟
12
ﻧﻈﺮﺓ ﺃﻭﱃ
ﻋﻨﺪ اﻻطﻼع ﻋﻠﻰ أي ﻛﺘﺎب ﻟﻠﺒﺮﻣﺠﺔ؛ ﺳﺘﺠﺪ ﻧﺼﻮﺻﺎ ﺑﻜﻠﻤﺎت وﺟﻤﻞ ﻗﺪ ﺗﻜﻮن ﻏﺮﯾﺒﺔ ﻋﻠﯿﻚ
ﻷول ﻣﺮة .ﻻﺑﺄس أن ﺗﻨﻈﺮ ﺑﺸﻜﻞ ﺳﺮﯾﻊ إﻟﻰ اﺣﺪ ﺗﻠﻚ اﻟﻨﺼﻮص ﻣﻦ ﻏﯿﺮ ﻓﮭﻢ إﻻ ﻛﺼﻮرة
ﻛﻠﯿﺔ ﻻ أﻛﺜﺮ:
)(int main
{
;int integer1 // first number
;int integer2 // second number ;int sum // variable in
; int Sum
std::cout << "Sum is " << sum << std::endl; // print sum
ﻓﻲ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ اﻟﺴﺎﺑﻖ ﻛﻠﻤﺎت اﻧﻜﻠﯿﺰﯾﺔ ﻣﻦ ﺣﺮوف ﺻﻐﯿﺮة وﻛﺒﯿﺮة وارﻗﺎم .وﻟﻜﻦ ﺑﺪاﯾﺔ
ﺳﺘﻼﺣﻆ ﺟﻤﻞ ﻋﺪﯾﺪة ﺗﺒﺪأ ﺑﺸﺮطﺘﯿﻦ //ﻣﺎﺋﻠﺘﯿﻦ .وﺳﺘﻔﺎﺟﺄ ﺣﯿﻦ أﺧﺒﺮك ﺑﺄن ﺣﺬﻓﻚ ﻟﻤﺜﻞ ﺗﻠﻚ
اﻟﺠﻤﻞ ﻟﻦ ﯾﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ وﺗﻨﻔﯿﺬه ﺷﯿﺌﺎ .ﻓﻜﻞ ﺟﻤﻠﺔ ﺗﺒﺘﺪئ ﺑﺸﺮطﺘﯿﻦ ، //ﻟﻦ ﯾﻠﺘﻔﺖ
إﻟﯿﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ وﻟﻦ ﺗﺆﺛﺮ ﻋﻠﻰ أداء اﻟﺒﺮﻧﺎﻣﺞ ﻛﺘﺒﺖ أم ﻟﻢ ﺗﻜﺘﺐ .ذﻟﻚ ﻷنّ ﻛﻞ ﺷﻲء ﯾﻜﺘﺐ ﺑﻌﺪ
ﺷﺎرطﺘﯿﻦ ،ﯾﻌﺘﺒﺮ ﻛﻤﻼﺣﻈﺎت ﻟﻚ أو ﻟﻤﻦ ﯾﻄﻠﻊ ﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ ﻟﺘﻮﺿﯿﺢ ﻏﺎﯾﺎت ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ
او ﺑﯿﺎن ﻓﺎﺋﺪة اﯾﻌﺎز ﻣﺎ أو ﻏﯿﺮ ذﻟﻚ .ﺗﺴﻤﻰ ھﺬ ﺑﺠﻤﻞ اﻟﺘﻌﻠﯿﻘﺎت واﻟﻤﻼﺣﻈﺎت .ﻛﺬﻛﺮك ﻻﺳﻢ
اﻟﺒﺮﻧﺎﻣﺞ او ﻣﺆﻟﻔﮫ ،او ﻛﺬرك ﻟﺘﺎرﯾﺦ اﻧﺸﺎء اﻟﺒﺮﻧﺎﻣﺞ وﻛﺘﺎﺑﺘﮫ ،أو ﻓﺎﺋﺪة ﺟﻤﻠﺔ واﻣﺮ ﻣﺎ أو ﻏﯿﺮ
13
ذﻟﻚ .ـ ﻓﮭﺬه اﻟﺠﻤﻞ ﺗﻮﺟﮫ ﻟﻚ او ﻻي ﺷﺨﺺ ـ .وھﻨﺎ ﺗﻔﮭﻢ ﺑﺄن اﻟﺒﺮﻧﺎﻣﺞ ﯾﺘﻜﻮن ﻣﻦ ﻧﻮﻋﯿﻦ
اوﻟﯿﯿﻦ ﻣﻦ اﻟﺠﻤﻞ؛ ﺟﻤﻞ ﯾﻘﺮؤھﺎ اﻟﺒﺮﻧﺎﻣﺞ وﺟﻤﻞ ﯾﻘﺮؤھﺎ اﻻﻧﺴﺎن .ھﻨﺎك ﺟﻤﻠﺔ ﺗﻌﻠﯿﻖ أﺧﺮى
ﺳﻨﺄﺗﻲ ﻋﻠﯿﮭﺎ ﻓﯿﻤﺎ ﺑﻌﺪ ﺑﺈذن ﷲ.
ﻧﺸﺎھﺪ اﯾﻀﺎ ﻓﻲ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ اﻟﻤﻌﺮوض أﻗﻮاس ﻋﺎدﯾﺔ )( ،وأﻗﻮاس ﻣﻌﻘﻮﻓﺔ } { ،
وﻟﻜﻞ ﻧﻮع ﻏﺮض ﻣﻌﯿﻦ ﯾﻌﻨﯿﮫ .اﻟﺠﻤﻞ ﻣﺎﺑﯿﻦ اﻷﻗﻮاس اﻟﻤﻌﻘﻮﻓﺔ } { ،ﺗﺴﻤﻰ ﻛﺘﻠﺔ ﺑﺮﻣﺠﯿﺔ
،Blocsﺗﺆدي ﻣﮭﻤﺔ ﺻﻐﯿﺮة ﻣﻌﯿﻨﺔ .ﺗﺘﺎﺑﻊ اﻟﻤﮭﺎم اﻟﺼﻐﯿﺮة ﯾﺸﻜﻞ وظﯿﻔﺔ أﻛﺒﺮ.
وﻣﺎ ﺑﯿﻦ اﻷﻗﻮاس اﻟﻌﺎدﯾﺔ )( ،ﻗﺪ ﺗﺄﺗﻲ رﻣﻮز أو ﻗﯿﻢ ،ﻋﺎدة ﻣﺎ ﺗﺴﻤﻰ وﺳﻄﺎء Parameters
ﺗﺤﻤﻞ أو ﺗﺒﻠﱢﻎ ﻗﯿﻢ.
ھﻨﺎك أﯾﻀﺎ ﻓﻮاﺻﻞ ﻣﻨﻘﻮطﺔ ؛ .اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮطﺔ ﻓﻲ آﺧﺮ اﻟﺠﻤﻠﺔ ،ﺗﻌﻨﻲ ﻧﮭﺎﯾﺔ ﺗﻌﻠﯿﻤﺔ ﻣﺎ،
أو ﻧﮭﺎﯾﺔ أﻣﺮ وإﯾﻌﺎز ﯾﺠﺐ ﺗﻨﻔﯿﺬه أو إﺧﺒﺎر اﻟﺒﺮﻧﺎﻣﺞ ﺑﮫ.
ﻛﺬﻟﻚ ھﻨﺎك ﻋﻼﻣﺎت ورﻣﻮز وﺗﺮﻗﯿﻤﺎت ،ﺳﻨﺄﺗﻲ ﻋﻠﻰ ﻣﻌﺎﻧﯿﮭﺎ .وﻛﻞ ذﻟﻚ ﻷﺟﻞ اﻟﺘﻨﻈﯿﻢ
ﻟﻠﻌﺒﺎرات اﻟﺘﻲ ﺗﻌﻄﻲ ﻟﻠﻐﺔ ﻗﻮﺗﮭﺎ وﺟﻤﺎﻟﮭﺎ وﺣﺴﻦ ﺗﻨﺴﯿﻘﮭﺎ.
14
ﺍﻵﻟﺔ ﺗﺪﺭﻙ ﺃﻡ ﺗﻘﻴﺲ؟.
ﺗﺴﺘﻌﻤﻞ اﻟﻤﺴﻄﺮة ،ﻟﻘﯿﺎس اﻷطﻮال؛ ﻓﺎﻟﻤﺴﻄﺮة ﯾﻤﻜﻦ أن ﺗﻘﯿﺲ اﻟﻤﺴﺎﻓﺔ؛ ﻓﺎﻟﻤﺴﻄﺮة إذن ﺗﻘﺮأ
اﻟﺒﻌﺪ .اﻟﻤﯿﺰان؛ ﯾﺘﺤﺴﺲ ﺑﻜﻤﯿﺔ اﻷﺛﻘﺎل اﻟﺘﻲ ﻋﻠﯿﮫ ،ﻓﻜﻠﻤﺎ وﺿﻊ ﺛﻘﻞ ﻓﻲ ﻛﻔﺔ؛ ارﺗﻔﻌﺖ اﻟﻜﻔﺔ
اﻷﺧﺮى.
ھﻨﺎك ﻣﯿﺰان آﺧﺮ ﯾﺴﻤﻰ اﻟﻘﺒﺎن؛ وھﻮ ﻋﺒﺎرة ﻋﻦ ﻧﺎﺑﺾ ،ﻛﻠﻤﺎ وﺿﻊ ﻓﻲ طﺮﻓﮫ وزن ﺗﺪﻟﻰ
إﻟﻰ اﻷﺳﻔﻞ ،وھﻨﺎك ﺗﺪرﺟﺎت ﺑﻤﻘﺪار ذﻟﻚ اﻟﺘﻤﺪد .ﻓﺈذا وﺿﻊ وزن ﻛﯿﻠﻮﻏﺮام واﺣﺪ؛ وﻗﻒ
اﻟﻤﺆﺷﺮ ﻋﻠﻰ رﻗﻢ ،1ﻓﺈذا وﺿﻊ ﻛﯿﻠﻮﻏﺮام آﺧﺮ؛ وﻗﻒ اﻟﻤﺆﺷﺮ ﻋﻠﻰ رﻗﻢ .2اﻷوزان ﺗﺮﻏﻢ
اﻟﻨﺎﺑﺾ ﻋﻠﻰ اﻟﺘﻤﺪد ،واﻟﻘﺒﺎن ﻻ ﯾﺪرك ﻣﻌﺎﻧﻲ اﻟﺘﺪرﺟﺎت اﻟﻤﺮﺳﻮﻣﺔ اﻟﺘﻲ ﻋﻠﯿﮭﺎ ارﻗﺎم.
15
ھﺬا ﺗﻘﺮﯾﺒﺎ ،ﻣﺎ ﻛﺎن ﯾﺤﺪث ﻓﻲ اﻟﺤﺎﺳﺒﺎت اﻷوﻟﻰ ،اﻟﺘﻲ ﻛﺎﻧﺖ ﺗﺴﻤﻰ ،ﺑﺎﻷﺟﮭﺰة اﻟﺘﻨﺎظﺮﯾﺔ .
ﻓﮭﻲ ﻻ ﺗﺪرك ﻣﻌﻨﻰ اﻟﻨﺘﺎﺋﺞ اﻟﺘﻲ ﻧﻘﺮأھﺎ ﻋﻠﯿﮭﺎ ،وﻻ ﺗﺘﺤﺴﺲ ﻣﻌﺎﻧﯿﮭﺎ .ﻛﺬﻟﻚ اﻟﺤﺎل ﻣﻊ
اﻟﺤﺎﺳﺒﺎت اﻟﺤﺪﯾﺜﺔ اﻟﯿﺪوﯾﺔ وﻏﯿﺮھﺎ.
16
ﻣﻦ ﻳﻔﻜﺮ؟.
اﻟﻜﺜﯿﺮ ﯾﻈﻦ ﺧﻄﺄ ً ﺑﺄنّ اﻟﺤﺎﺳﺒﺔ ﺗﻘﻮم ﺑﺪور اﻟﺘﻔﻜﯿﺮ! .وذﻟﻚ ﻻ ﯾﻤﻜﻦ إطﻼﻗﺎ ،ﻷنّ اﻟﺤﺎﺳﺒﺔ ،ھﻲ
ﺟﻤﺎد ،ﻣﺒﻨﯿﺔ ﻣﻦ ﻗﻄﻊ ﺟﺎﻣﺪة .اﻵﻟﺔ ﯾﻤﻜﻦ أن ﺗﻌﻄﯿﻚ ﺣﺮﻛﺎت ﻣﯿﻜﺎﻧﯿﻜﯿﺔ إذا ﻣﺎ زودﺗﮭﺎ ﺑﻄﺎﻗﺔ
ﻣﺎ ،وإذا ﻣﺎ ﺟﻌﻠﺖ ﺗﺼﻤﯿﻤﮭﺎ ﻣﻨﺎﺳﺐ ﻟﺬﻟﻚ .ﻓﺎﻟﻤﺤﺮك اﻟﻜﮭﺮﺑﺎﺋﻲ ،ﯾﺪور وﺗﺴﺘﻄﯿﻊ أن ﺗﻀﻊ
ﻋﻠﻰ ﻣﺤﻮره اﻟﺪاﺋﺮ ﺷﺮﯾﻂ ﻣﺪرج ﻋﻠﯿﮫ أرﻗﺎم ،ﻓﺈذا دار اﻟﻤﺤﻮر ،اﻧﺴﺤﺐ اﻟﺸﺮﯾﻂ وﺑﺪا ﺑﺄنّ
اﻷرﻗﺎم ﺗﺘﻮاﻟﻰ أﻣﺎﻣﻚ وﻛﺄنّ اﻟﻤﺤﺮك ھﻮ اﻟﺬي ﯾﻌﺪ .ھﻜﺬا ھﻲ اﻟﺤﺎﺳﺒﺔ ﺑﺼﻮرة ﺗﻘﺮﯾﺒﯿﺔ.
17
ﻟﻨﻔﺮض أﻧّﻚ ﺗﺮﯾﺪ ﺣﺴﺎب ﻣﺴﺎﺣﺔ أرض ﻣﺎ ﻣﺴﺘﻄﯿﻠﺔ ،وأﻧّﻚ ﺗﻌﺮف ﻣﻘﺪار اﻟﻌﺮض واﻟﻄﻮل،
وأﻧّﻚ ﻧﺎوﻟﺖ ﻟﺼﺒﻲ ﺻﻐﯿﺮ ﺣﺎﺳﺒﺔ ﯾﺪوﯾﺔ وﻗﻠﺖ ﻟﮫ :اﺿﻐﻂ ھﺬا اﻟﺰر اﻟﺬي ﻋﻠﯿﮫ اﻟﺮﻗﻢ ﻛﺬا.
واﻵن اﺿﻐﻂ ھﺬا اﻟﺰر اﻟﺬي ﻋﻠﯿﮫ إﺷﺎرة اﻟﻀﺮب .واﻵن اﺿﻐﻂ اﻟﺰر اﻟﺬي ﯾﺤﻤﻞ اﻟﺮﻗﻢ
ﻛﺬا .واﻵن اﺿﻐﻂ اﻟﺰر اﻟﺬي ﯾﺤﻤﻞ رﻣﺰ اﻟﻤﺴﺎواة .ﻋﻨﺪ ذﻟﻚ ﺳﺘﻈﮭﺮ اﻟﻨﺘﯿﺠﺔ .ﻣﻦ ﻛﺎن
اﻟﻤﻔﻜﺮ اﻟﺤﻘﯿﻖ أﻧﺖ أم اﻟﺼﺒﻲ أم اﻟﺤﺎﺳﺒﺔ اﻟﯿﺪوﯾﺔ؟ .ﺑﺎﻟﺘﺄﻛﯿﺪ ھﻮ أﻧﺖ وﻣﺎ اﻟﺼﺒﻲ واﻟﺤﺎﺳﺒﺔ
اﻟﯿﺪوﯾﺔ إﻻ ﻣﻨﻔﺬات ﻷواﻣﺮك وﻣﺴﺘﺠﯿﺒﺎت ﻟﻚ .ﻓﮭﻜﺬا أﻧﺖ ﺗﻌﻤﻞ ﺣﯿﻦ ﺗﻘﻮم ﺑﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻣﺎ
ﻋﻠﻰ اﻟﺤﺎﺳﺒﺔ .اﻧﺖ ﺗﻔﻜﺮ واﻟﺤﺎﺳﺒﺔ ﺗﻨﻔﺬ اواﻣﺮ ﺗﻔﻜﯿﺮك.
ﺍﻷﻭﺍﻣﺮ ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ
ﻋﻨﺪ إﺧﺒﺎرك ﺑﺴﻌﺮ ﻟﻌﺒﺔ ﻓﮭﺬه ﻣﻌﻠﻮﻣﺔ ﺻﺎرت ﻟﺪﯾﻚ .وﻋﻨﺪﻣﺎ ﺗﻌﻠﻢ انّ ﻣﻌﺪل وزن ﺗﻔﺎﺣﺔ
ﯾﺴﺎوي 100ﻏﺮام ﻓﮭﺬه ﻣﻌﻠﻮﻣﺔ أﺧﺮى أﯾﻀﺎ .ﻓﺎﻟﻤﻌﻠﻮﻣﺎت ـ ﺑﮭﺬا اﻟﻤﻌﻨﻰ ـ ھﻲ ﻗﯿﻢ أﺷﯿﺎء.
اﻵن ﺗﻘﻮل ﻷﺧﯿﻚ :أﻏﺴﻞ اﻟﺘﻔﺎﺣﺔ واﻗﻄﻌﮭﺎ ﻧﺼﻔﯿﻦ ﺑﺎﻟﺴﻜﯿﻦ ﺛﻢ ﻛﻠﮭﺎ .ﻓﮭﺬه أواﻣﺮ ﺗﻮﺟﮭﮭﺎ اﻟﻰ
أﺧﯿﻚ .ﻣﺠﻤﻮﻋﺔ اﻻواﻣﺮ ﻣﻊ اﻟﻤﻌﻠﻮﻣﺎت ھﻲ ﺗﻌﻠﯿﻤﺎت ﺗﺴﯿﺮ وﻓﻘﺎ ﻟﮭﺎ ﻹﻧﺠﺎز ﻋﻤﻞ ﻣﺎ.
ﻋﻨﺪ ﺣﺴﺎﺑﻚ ﻟﻤﺴﺎﺣﺔ أرض ،وﻛﺎن ﻟﺪﯾﻚ ﻣﻌﻠﻮﻣﺎت ﻋﻦ ﻣﻘﺪار طﻮﻟﮭﺎ وﻋﺮﺿﮭﺎ .وﻛﺎن ﻟﺪﯾﻚ
ﻣﻌﺮﻓﺔ ﺑﺄنّ اﺳﺘﺨﺮاج ﺗﻠﻚ اﻟﻤﺴﺎﺣﺔ ﺳﯿﻜﻮن ﻧﺎﺗﺞ ﺿﺮب اﻟﻄﻮل ﻓﻲ اﻟﻌﺮض .ﻓﺄﻧﺖ ﻓﻲ ﺻﻤﯿﻢ
ﻋﻘﻠﻚ ﺗﻔﻜﺮ وﺗﺤﺴﺐ وﻛﺄﻧﻚ ﺗﻘﻮل:
}
اﻟﻄﻮل ﯾﺴﺎوي ﻛﺬا؛
اﻟﻌﺮض ﯾﺴﺎوي ﻛﺬا؛
18
اﻟﻤﺴﺎﺣﺔ ﺗﺴﺎوي اﻟﻄﻮل Xاﻟﻌﺮض؛
اظﮭﺮ اﻟﻨﺎﺗﺞ؛
{
أﻧﺖ ﺗﻜﻮن ھﻨﺎ ﻗﺪ ﻛﺘﺒﺖ ﺑﺮﻧﺎﻣﺞ ﻓﯿﮫ ﻣﻌﻠﻮﻣﺎت وأواﻣﺮ وھﻜﺬا ھﻲ اﻟﺒﺮﻣﺠﺔ ﺑﺼﻮرة ﺗﻘﺮﯾﺒﯿﺔ.
ﻟﻨﻔﺮض أن طﻮل اﻻرض 25ﻣﺘﺮ وﻋﺮﺿﮭﺎ 15ﻣﺘﺮ ﻋﻨﺪ ذﻟﻚ ﯾﻜﻮن اﻟﺤﻞ ﻛﺎﻟﺘﺎﻟﻲ:
}
اﻟﻄﻮل = 25؛
اﻟﻌﺮض = 15؛
اﻟﻤﺴﺎﺣﺔ = اﻟﻄﻮل Xاﻟﻌﺮض؛
اﻛﺘﺐ اﻟﻨﺎﺗﺞ؛
{
ھﺬا اﻟﻨﺺ اﻻﺧﯿﺮ ﻟﻠﺤﻞ ﯾﺸﺒﮫ ﺑﺈطﺎره اﻟﻌﺎم اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ اﻷول .ﻓﻜﻞ ﻣﺎ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ
اﻟﻤﻌﻘﻮﻓﯿﻦ ھﻮ ﻛﺘﻠﺔ ﺗﻌﻠﯿﻤﺎت ﻧﺼﯿﺔ ﻓﮭﺎ ﻣﻌﻠﻮﻣﺎت وأواﻣﺮ .وﻛﻞ ﺟﻤﻠﺔ ﻣﻔﯿﺪة ﺑﻤﻔﺮدھﺎ؛ ﻛﻞ
ﺟﻤﻠﺔ ﻣﻦ ھﺬه اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﻲ ﺗﻔﯿﺪ ﻣﻌﻨﻰ او اﻟﺘﻲ ﻟﮭﺎ ﻓﻜﺮة ﻣﺎ او ﺧﻄﻮة ﻓﻌﺎﻟﺔ ﺗﺠﺎه اﯾﺠﺎد اﻟﺤﻞ
اﻟﻜﻠﻲ؛ ﻓﻜﻞ ﺟﻤﻠﺔ ﺗﺘﺼﻒ ﺑﻤﺜﻞ ھﺬا ﻧﺮاھﺎ ﺗﻨﺘﮭﻲ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ.
ﺍﻷﲰﺎﺀ ﻭﺍﳌﺨﺘﺼﺮﺍﺕ
ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺳﻤﯿﺖ اﻷﺷﯿﺎء ﺑﺄﺳﻤﺎﺋﮭﺎ اﻟﺤﻘﯿﻘﺔ .ﻓﺄﺳﻤﯿﺖ اﻟﻄﻮل ﺑﺎﻟﻄﻮل ،واﻟﻌﺮض
ﺑﺎﻟﻌﺮض ،واﻟﻤﺴﺎﺣﺔ ﺑﺎﻟﻤﺴﺎﺣﺔ.
19
ﺗﺴﺘﻄﯿﻊ أن ﺗﺴﺘﺨﺪم ﻣﺨﺘﺼﺮات ﻟﺬﻟﻚ؛ ﻓﺎﻟﻄﻮل ﻗﺪ ﺗﻀﻊ ﻟﮫ ﻛﻤﺨﺘﺼﺮ ) طﻞ ( .واﻟﻌﺮض )
ﻋﺾ ( ،واﻟﻤﺴﺎﺣﺔ ) ﻣﺲ ( .ﻓﯿﻜﻮن ﺑﺮﻧﺎﻣﺠﻚ اﻟﺴﺎﺑﻖ ﺑﮭﺬا اﻟﺸﻜﻞ:
//ﺑﺮﻧﺎﻣﺞ ﻟﺤﺴﺎب ﻣﺴﺎﺣﺔ اﻟﻤﺴﺘﻄﯿﻞ
}
طﻞ = 25؛
ﻋﺾ = 15؛
ﻣﺲ = طﻞ * ﻋﺾ ؛
إطﺒﻊ اﻟﻨﺎﺗﺞ ؛
{
ﻟﻜﻦ ﯾﻜﻮن ﻣﻦ اﻻﻓﻀﻞ أن ﺗﺒﻘﻲ اﻻﺷﯿﺎء ﻋﻠﻰ ﻣﺴﻤﯿﺎﺗﮭﺎ ﻣﻦ دون أن ﺗﺮﻣﺰ ﻟﮭﺎ ﺑﺎﺧﺘﺼﺎر
ﻟﯿﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ وﻓﻜﺮﺗﮫ اﻛﺜﺮ وﺿﻮﺣﺎ.
20
ﻟﻐﺔ ﺍﻵﻟﺔ
ﺗﺪﺧﻞ إﻟﻰ ﻏﺮﻓﺘﻚ ﻓﺘﺠﺪ ﻋﻠﻰ أﺣﺪ اﻟﺠﺪران ﺻﻒ ﻣﻦ أزرار وﻣﻔﺎﺗﯿﺢ ﻛﮭﺮﺑﺎﺋﯿﺔ؛ ھﺬا ﻟﮭﺬا
اﻟﻤﺼﺒﺎح ،وھﺬا ﻟﺬاك اﻟﻤﺼﺒﺎح ،وھﺬا ﻟﻠﻤﺮوﺣﺔ وﻏﯿﺮ ذﻟﻚ.
ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻣﻄﻔﺄة ﺟﻤﯿﻌﮭﺎ ﻓﺄﻧﺖ ﯾﻤﻜﻦ أن ﺗﻘﻮل :ھﺬا ﻣﻄﻔﺄ ،وھﺬا ﻣﻄﻔﺄ ،وھﺬا ﻣﻄﻔﺄ .ﺑﻌﺒﺎرة
أﺧﺮى ﻛﺄﻧﻚ ﺗﻘﺮأ ﺣﺎﻟﺘﮭﺎ ﻓﺘﻘﻮل :ﻣﻄﻔﺄ ﻣﻄﻔﺄ ﻣﻄﻔﺄ.
ﻓﻲ ﻣﺮة أﺧﺮى ﻗﺪ ﺗﻜﻮن :ﻣﻄﻔﺄ ﻣﺸﺘﻌﻞ ﻣﻄﻔﺄ .أو ﻣﺸﺘﻌﻞ ﻣﺸﺘﻌﻞ ﻣﻄﻔﺄ .أو ﻏﯿﺮ ذﻟﻚ ﻣﻦ
اﻟﺤﺎﻻت.
اﺻﻄﻠﺢ اﻟﻤﮭﻨﺪﺳﻮن ﻋﻠﻰ وﺿﻊ رﻣﺰ ﻟﻠﺤﺎﻟﺔ اﻟﺘﻲ ﺗﻌﻤﻞ واﻟﺤﺎﻟﺔ اﻟﺘﻲ ﻻ ﺗﻌﻤﻞ؛ أي ﺑﺪل ﻣﻄﻔﺄ،
ﻣﺸﺘﻌﻞ .ﻓﻮﺿﻌﻮا اﻟﺮﻣﺰ 1ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﻤﻔﺘﺎح ﯾﻌﻤﻞ ﻓﯿﻮﺻﻞ ﻛﮭﺮﺑﺎء ،ووﺿﻌﻮا اﻟﺮﻣﺰ 0
ﻟﺤﺎﻟﺔ اﻟﻤﻔﺘﺎح ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻻ ﯾﻌﻤﻞ.
إذن ﯾﻤﻜﻦ أن ﻧﻘﺮأ اﻟﺤﺎﻟﺔ ﻣﻄﻔﺄ ﻣﺸﺘﻌﻞ ﻣﺸﺘﻌﻞ ﺑﮭﺬا اﻟﺸﻜﻞ110 :
ھﺬه اﻟﺮﻣﻮز ﺗﺴﻤﻰ رﻣﻮز ﻟﻐﺔ اﻵﻟﺔ.
21
ﺛﻢ أﺷﺎر إﻟﻰ ھﺬا اﻟﺸﻜﻞ aوﻗﺎل ھﺬا رﻗﻢ ﺛﻼﺛﺔ .ﻓﻜﯿﻒ ﻛﺎن اﻟﻮﺿﻊ اﻟﺘﻌﻠﯿﻤﻲ ﺣﯿﻨﮭﺎ ،ھﻞ ھﻮ
ﺻﺤﯿﺢ أم ﺧﺎطﺊ؟.
ﻓﻲ اﻟﺤﻘﯿﻘﺔ ھﺬه اﻷﺷﻜﺎل 3 2 1 :ب ج ق؛ ھﻲ رﻣﻮز ﻻﻏﯿﺮ وﺿﻌﺖ واﺗﻔﻖ ﻋﻠﯿﮭﺎ ﻟﺘﺸﯿﺮ
إﻟﻰ ﺷﻲء ،وإﻻ ﻓﻜﺎن ﯾﻤﻜﻦ أن ﺗﻘﺮأ ھﺬا اﻟﺤﺮف غ ﻓﺘﻘﻮل ھﻮ ﺣﺮف اﻟﺴﯿﻦ .ﻓﺘﻠﻚ رﻣﻮز
وﺿﻌﺖ ﻷﺻﻮات وﺗﻠﻚ رﻣﻮز وﺿﻌﺖ ﻟﺘﺸﯿﺮ إﻟﻰ ﻋﺪد ﻣﻌﯿﻦ .وﻛﺎن ﯾﻤﻜﻦ أن ﺗﺘﻌﻠﻢ ﺑﺄنّ ھﺬا
اﻟﺮﻣﺰ aﯾﻌﻨﻲ اﻟﻌﺪد ﻋﺸﺮة ،وھﺬا اﻟﺮﻣﺰ bﯾﻌﻨﻲ اﻟﻌﺪد اﻟﺤﺎدي ﻋﺸﺮ وﻏﯿﺮ ذﻟﻚ.
ﻛﺘﺎﺑﺔ ﺍﻻﻋﺪﺍﺩ
واﻧﺖ ﺗﻠﻌﺐ ﻣﻊ رﻓﺎﻗﻚ وﺗﺴﺠﻞ ﻟﻚ ﻧﻘﻄﺔ ﻓﻮز ﻓﺈﻧﻚ ﺳﺘﻜﺘﺐ ﻧﻘﻄﺘﻚ ﻋﻠﻰ ورﻗﺔ ﺑﮭﺬا اﻟﺸﻜﻞ
واﻟﺘﻲ ﺳﺘﻌﻨﻲ ﻧﻘﻄﺔ واﺣﺪة .ﻛﺘﺎﺑﺔ اﻟﻨﻘﻄﺔ اﻟﺜﺎﻧﯿﺔ ﺳﯿﻜﻮن اﻟﺸﻜﻞ ھﻜﺬا
22
وھﻜﺬا ﺳﺘﻜﻮن اﻟﻨﻘﻄﺔ اﻟﺜﺎﻟﺜﺔ ھﻜﺬا
اﻻن إن ﻛﻨﺖ ﺳﺘﺴﺘﻤﺮ ﻋﻠﻰ ھﺬا اﻟﻤﻨﻮال ﻓﻜﯿﻒ ﺳﯿﻜﻮن اﻟﺸﻜﻞ ﻋﻨﺪ اﻟﻨﻘﻄﺔ اﻻﻟﻒ
وﻛﻢ ﺳﺘﺤﺘﺎج اﻟﻰ ورﻗﺔ طﻮﯾﻠﺔ ﻟﺘﺴﺘﻮﻋﺐ ھﺬا اﻟﻌﺪد وﻛﻢ ﺳﯿﻜﻮن ﻣﻦ اﻟﺸﺎق ﻋﻠﻰ اﺻﺤﺎﺑﻚ ان
ﯾﻌﺪوا وراءك؟ .ﻣﻦ اﻻﻓﻀﻞ اﯾﺠﺎد ﻧﻈﺎم ﻋﺪ ﻣﺨﺘﻠﻒ ﻻﯾﻨﻈﺮ ﻓﻘﻂ اﻟﻰ اﻟﺒﻌﺪ اﻻﻓﻘﻲ وﻟﻜﻦ
اﯾﻀﺎ اﻟﻰ اﻟﺒﻌﺪ اﻟﺮاﺳﻲ.
ﻧﻈﺎﻡ ﺍﻟﻌﺪ
ﺑﺪﻻ ﻣﻦ اﻟﻨﻈﺎم اﻟﺴﺎﺑﻖ ﺳﻨﺘﻔﻖ ﻋﻠﻰ رﻣﻮز ﻗﻠﯿﻠﺔ ﻟﺘﺪل ﻋﻠﻰ ﺑﻌﺾ اﻻﻋﺪاد اﻻوﻟﻰ ﺛﻢ ﻧﻀﻊ
رﻣﺰا آﺧﺮ ﻟﯿﺪل ﻋﻠﻰ ﻗﯿﻤﺔ ارﺗﻔﺎع ﻣﻌﯿﻨﺔ .ﺳﻨﻀﻊ ﺗﺴﻌﺔ رﻣﻮز ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ اﻻﻋﺪاد ﻣﻦ واﺣﺪ
اﻟﻰ ﺗﺴﻌﺔ ) ( 9 ، 8 ، 7 ، 6 ، 5 ، 4 ، 3 ، 2 ، 1وﻧﻀﻊ رﻣﺰا آﺧﺮ ) ( 0ﺑﻤﺜﺎﺑﺔ
اﻻرﺗﻔﺎع درﺟﺔ ﻟﯿﻜﻮن ﻋﺪد اﻟﺮﻣﻮز ﻋﺸﺮة وﻟﯿﻌﻨﻲ ھﺬا اﻟﺮﻣﺰ اﻧﻨﺎ ﻧﺮﺗﻔﻊ ﺑﻤﻘﺪار ﻋﺸﺮة.
وﺿﻊ اﺣﺪ اﻟﺮﻣﻮز اﻻوﻟﻰ ﺑﺠﺎﻧﺐ ھﺬا اﻟﺮﻣﺰ ﺳﯿﻌﻨﻲ وﺿﻊ اﻟﺮﻣﺰ اﻻول ﻋﻠﻰ درﺟﺔ ﻓﮭﻮ
ﻣﺮﺗﻔﻊ ﻋﻦ أﻗﺮاﻧﮫ.
اﻟف
1 1
0 0 ﻋﺷرة واﺣد
1
0
0
23
ﻧﻈﺎﻡ ﺍﻟﻌﺪ ﻭﺍﻟﻌﺪ ﺍﻟﺜﻨﺎﺋﻲ
9 8 7 6 5 4 3 2 1 0ھﻲ اﻟﺮﻣﻮز اﻟﻌﺸﺮة اﻟﺘﻲ ﺗﻌﻠﻤﺘﮭﺎ ﻟﻜﺘﺎﺑﺔ أي ﻋﺪد .وﺑﻤﺎ أﻧﮭﺎ ﻋﺸﺮة
رﻣﻮز؛ ﻓﻠﺬﻟﻚ ﺗﺴﻤﻰ ﺑﺎﻟﻨﻈﺎم اﻟﻌﺸﺮي.
ﺛﻢ ﻗﺎﻟﻮا ﻟﻚ وھﻢ ﯾﻮاﺻﻠﻮن ﺗﻌﻠﯿﻤﻚ :ﻟﻜﺘﺎﺑﺔ اﻟﻌﺪد ﻋﺸﺮة ﻓﻌﻠﯿﻚ أن ﺗﺄﺧﺬ اﻟﺮﻣﺰ اﻷول وﺗﺘﺒﻌﮫ
ﺑﺎﻟﺮﻣﺰ اﻟﺜﺎﻧﻲ ﻟﺘﻜﻮن ﻣﺮﺗﺒﺘﯿﻦ ھﻜﺬا 10وھﻲ ﺳﺘﻤﺜﻞ اﻟﻌﺪد ﻋﺸﺮة .ﺛﻢ ﻋﻠﯿﻚ أن ﺗﺒﺪأ
ﺑﺎﺳﺘﺒﺪال اﻟﺮﻣﺰ اﻷول 0ﻓﺘﻀﻊ ﻣﻜﺎﻧﮫ اﻟﺮﻣﺰ 1ﻓﯿﻜﻮن ﻟﺪﯾﻚ اﻟﺘﻤﺜﯿﻞ 11وھﻮ ﺳﯿﻌﻨﻲ ﻟﻚ
اﻟﺮﻗﻢ اﻟﺤﺎدي ﻋﺸﺮ وھﻜﺬا ﺗﺘﺴﻠﺴﻞ ﺑﺎﻷﻋﺪاد اﻷﺧﺮى ﻓﺘﻜﻮن 14 13 12إﻟﻰ ﻏﯿﺮ ذﻟﻚ.
24
ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﻋﻠﻰ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺜﻨﺎﺋﻲ
ﻣﺜﻠﻤﺎ أنّ ھﻨﺎك ﻗﻮاﻋﺪ رﯾﺎﺿﯿﺔ ﻣﺨﺘﻠﻔﺔ ﺗﺴﺘﻌﻤﻞ ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي ﺗﺆدي إﻟﻰ ﻋﻤﻠﯿﺎت اﻟﺠﻤﻊ
واﻟﻄﺮح وﻏﯿﺮھﺎ؛ ﻛﺬﻟﻚ ھﻨﺎك ﻋﻤﻠﯿﺎت ﻣﺸﺎﺑﮭﺔ ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺗﺆدي إﻟﻰ ﺟﻤﻊ وطﺮح
وﻏﯿﺮ ذﻟﻚ.
ﺍﻟﺘﺤﻮﻳﻞ ﺑﲔ ﺍﻷﻧﻈﻤﺔ
ھﻨﺎك طﺮق رﯾﺎﺿﯿﺔ ﯾﻤﻜﻦ أن ﺗﺤﻮل ﺑﻮاﺳﻄﺘﮭﺎ اﻟﻨﻈﺎم اﻟﻌﺸﺮي إﻟﻰ ﺛﻨﺎﺋﻲ وﺑﺎﻟﻌﻜﺲ .ﻛﺬﻟﻚ
ھﻨﺎك ﻧﻈﺎم ﯾﺘﻜﻮن ﻣﻦ ﺳﺘﺔ ﻋﺸﺮ رﻣﺰ ﯾﺴﻤﻰ ﺑﺎﻟﻨﻈﺎم اﻟﺴﺎدﺳﻲ ﻋﺸﺮ واﻟﺬي ﯾﻤﻜﻦ ﺗﺤﻮﯾﻠﮫ
ﻛﺬﻟﻚ إﻟﻰ ﻧﻈﺎم ﻋﺸﺮي أو ﺛﻨﺎﺋﻲ أو ﻏﯿﺮ ذﻟﻚ.
ﺍﻟﺘﺮﻣﻴﺰ ﻭﺍﻟﺘﺸﻔﲑ
ﯾﻤﻜﻦ أن ﻧﺘﻔﻖ ﻓﯿﻤﺎ ﺑﯿﻨﻨﺎ ﺑﻘﺎﺋﻤﺔ ﻣﻦ ﺣﻘﻠﯿﻦ ،ﻓﻲ ﻛﻞ ﺣﻘﻞ ﻛﻠﻤﺎت ورﻣﻮز ،وﻓﻲ اﻟﺤﻘﻞ اﻟﻤﻘﺎﺑﻞ
ﻣﻌﻨﻰ ﻛﻞ رﻣﺰ أو اﻟﻌﻤﻞ اﻟﻤﻄﻠﻮب ﺗﺄدﯾﺘﮫ ﺣﯿﻦ ﯾﺼﺎدﻓﻨﺎ ذﻟﻚ اﻟﺮﻣﺰ.
25
ﻓﻨﺘﻔﻖ ﻣﺜﻼ ﻋﻠﻰ أنّ رﻗﻢ 4ﯾﻌﻨﻲ :اﻓﺘﺢ اﻟﺒﺎب اﻟﻔﻼﻧﻲ .وأنّ ﻛﻠﻤﺔ ﻋﺒﻖ ﺳﺘﻌﻨﻲ ﻟﻚ اﻟﺮﻗﻢ 8
وھﻜﺬا ﺳﯿﻜﻮن اﻟﻜﻼم ﺑﯿﻨﻨﺎ ﻣﺸﻔﺮ ﻻﯾﻔﮭﻤﮫ ﻏﯿﺮﻧﺎ اﻻ اذا اطﻠﻊ ﻋﻠﻰ اﻟﺠﺪول اﻟﻤﺘﻔﻖ ﺑﯿﻨﻲ
وﺑﯿﻨﻚ.
ﻣﺜﻞ ھﺬا اﻟﺘﺸﻔﯿﺮ ﯾﻮﺟﺪ ﻓﻲ ﺑﺮاﻣﺞ اﻟﺤﺎﺳﺒﺔ ﻷنّ اﻟﻜﻠﻤﺎت اﻟﺘﻲ ﺳﺘﻜﺘﺒﮭﺎ ﻛﺄواﻣﺮ ﻟﻠﺤﺎﺳﺒﺔ
ﺳﺘﺘﺤﻮل وﻓﻖ ﺟﺪول ﻣﻌﯿﻦ إﻟﻰ أﺷﯿﺎء وﻋﻤﻠﯿﺎت ﺗﺠﺮي ﻓﻲ اﻟﺤﺎﺳﺒﺔ واﻟﺘﻲ ﺗﻘﻮم ﺑﮭﺎ ﺑﺮاﻣﺞ
ﻣﺨﻔﯿﺔ ﻋﻨﻚ ﺗﺴﻤﻰ ﺑﺎﻟﻤﺘﺮﺟﻤﺎت.
ﺗﺮﲨﺔ ﺍﻻﻭﺍﻣﺮ
ﻋﻨﺪﻣﺎ ﺗﻮﺟﮫ اﻣﺮاً ﻣﺎ ﻟﺸﺨﺺ ﻣﺎ ﻓﺘﻘﻮل ﻟﮫ ﻣﺜﻼً :اﻓﺘﺢ اﻟﺒﺎب؛
ﺳﺘﺪﺧﻞ اﻟﻜﻠﻤﺎت اذﻧﯿﮫ وﯾﻘﻮم ﻋﻘﻠﮫ ﺑﺘﺮﺟﻤﺘﮭﺎ وﺗﻔﺴﯿﺮھﺎ ﻟﻐﺮض ﻓﮭﻤﮭﺎ وﺗﺤﻘﯿﻘﮭﺎ .ﻓﺎذا ﻛﺎن
ﺟﺎﻟﺴﺎ ً ﺳﯿﻨﮭﺾ ،وﯾﻘﻮم ﻣﺎﺷﯿﺎ ً ،وﯾﺴﺘﺪﯾﺮ ﻣﺘﺠﮭﺎ ﻧﺤﻮ اﻟﺒﺎب ،وﯾﻤﺪ ﯾﺪه ،وﯾﻤﺴﻚ ﻣﻘﺒﺾ اﻟﺒﺎب،
وﯾﺴﺤﺒﮫ أو ﯾﺪﻓﻌﮫ .وھﻜﺬا ﺳﯿُﻔﺘﺢ اﻟﺒﺎب .ﻓﺎﻧﻈﺮ إﻟﻰ اﻣﺮك )اﻓﺘﺢ اﻟﺒﺎب( ﻛﯿﻒ ﺗﺮﺟﻢ إﻟﻰ ﻋﺪة
ﻋﻤﻠﯿﺎت ﻗﺎم ﺑﮭﺎ اﻟﺸﺨﺺ ﻟﺘﻨﻔﯿﺬ ذﻟﻚ اﻻﻣﺮ.
اﻟﻤﺘﺮﺟﻤﺎت ﺗﻘﻮم ﺑﺘﺤﻮﯾﻞ اواﻣﺮك إﻟﻰ ﺳﻠﺴﻠﺔ ﻋﻤﻠﯿﺎت ﻋﻠﻰ اﺟﺰاء اﻟﺤﺎﺳﺒﺔ .ﻓﮭﻲ ﺗﻘﻮم
ﺑﺘﺤﻮﯾﻞ اﻻﺷﻜﺎل اﻟﻜﮭﺮﺑﺎﺋﯿﺔ اﻻوﻟﻰ اﻟﻰ أﺷﻜﺎل ﻛﮭﺮﺑﺎﺋﯿﺔ أﺧﺮى ﻟﺘﺨﺎطﺐ اﺟﺰاء اﻟﺤﺎﺳﺒﺔ
وآﻻﺗﮭﺎ.
26
ﺧﺪﻣﺎﺕ ﺍﻟﱪﺍﻣﺞ
ﻛﻤﺎ ﺗﻌﻠﻢ ﻓﺎن ھﻨﺎك اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺗﻘﻮم اﻟﺤﺎﺳﺒﺔ ﺑﺘﺸﻐﯿﻠﮭﺎ .ﻓﮭﻨﺎك ﺑﺮﻧﺎﻣﺞ ﻟﻠﺤﺴﺎﺑﺎت
وھﻨﺎك ﺑﺮﻧﺎﻣﺞ ﻟﻠﻄﺒﺎﻋﺔ ﻋﻨﺪﻣﺎ ﺗﺮﯾﺪ ان ﺗﻜﺘﺐ ﻧﺼﺎ ً أو رﺳﺎﻟﺔ إﻟﻰ اﺣﺪ اﺻﺪﻗﺎﺋﻚ .وھﻨﺎك
ﺑﺮﻧﺎﻣﺞ ﺗﻜﺘﺐ ﻓﯿﮫ ﺟﻤﻞ واواﻣﺮ ﻟﻠﺤﺎﺳﺒﺔ ﻋﻨﺪﻣﺎ ﺗﺮﯾﺪ أن ﺗﻜﺘﺐ ﺑﺮﻧﺎﻣﺞ ﻟﯿﺆدي ﺷﻲء ﻣﺎ.
ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻄﺒﺎﻋﻲ؛ أﻧﺖ ﻛﻨﺖ ﺗﺨﺎطﺐ ﺻﺪﯾﻖ أو أي إﻧﺴﺎن ﺑﺮﺳﺎﻟﺔ ﻓﯿﻘﻮم ﺑﺘﻨﻔﯿﺬھﺎ ﻟﻚ؛ أﻣﺎ
ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻓﺄﻧﺖ ﺗﺨﺎطﺐ اﻟﺤﺎﺳﺒﺔ ﻧﻔﺴﮭﺎ وﻟﺘﻘﻮم اﻟﺤﺎﺳﺒﺔ ﻧﻔﺴﮭﺎ ﺑﺘﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺎﺗﻚ .ﻓﻔﻲ
اﻟﺒﺮﻧﺎﻣﺞ اﻟﻄﺒﺎﻋﻲ اﻻول ﯾﻘﻮم اﻻﻧﺴﺎن ﺑﺎﻟﻤﮭﺎم؛ أﻣﺎ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻓﺈنّ اﻟﻤﺘﺮﺟﻢ ھﻮ ﻣﻦ ﯾﺘﻮﻟﻰ
إﺧﺒﺎر أﺟﺰاء اﻟﺤﺎﺳﺒﺔ ﻟﺘﺤﻘﯿﻖ اﻷﻣﺮ.
ﺍﳌﺘﺮﲨﺎﺕ
ﻛﻤﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘﺎ؛ اﻟﺤﺎﺳﺒﺔ ﯾﻤﻜﻦ ﺗﻘﺮﯾﺒﮭﺎ إﻟﻰ آﻻف اﻟﻤﻔﺎﺗﯿﺢ اﻷﻟﻜﺘﺮوﻧﯿﺔ اﻟﺤﺴﺎﺳﺔ واﻟﺪﻗﯿﻘﺔ؛
ﺑﻞ ھﻲ ﻛﺬﻟﻚ .أي ﻓﻲ اﻟﺤﺎﺳﺒﺔ ﻣﻔﺎﺗﯿﺢ ﻛﮭﺮﺑﺎﺋﯿﺔ ﯾﻤﻜﻦ أن ﺗﻜﻮن ﻓﻲ ﺣﺎﻟﺔ 0وﯾﻤﻜﻦ أن ﺗﻜﻮن
ﻓﻲ ﺣﺎﻟﺔ 1
ﺑﺮص ﻣﺠﻤﻮﻋﺔ ﻣﻔﺎﺗﯿﺢ ﯾﻤﻜﻦ أن ﻧﺼﻞ إﻟﻰ ﺣﺎﻻت ﻣﻌﯿﻨﺔ ﻛﮭﺬه ﻣﺜﻼ 011010 :أو:
10010111أو ﻏﯿﺮ ذﻟﻚ.
أﻧﺖ ﺣﯿﻦ ﺗﻄﺒﻊ ﻛﻠﻤﺎت ﺑﻮاﺳﻄﺔ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ وﺗﺮاھﺎ ﻋﻠﻰ اﻟﺸﺎﺷﺔ؛ ﻓﺈنّ اﻟﺤﺎﺳﺒﺔ ﺗﺘﺤﺴﺲ
ﺣﺎﻟﺔ اﻟﻤﻔﺎﺗﯿﺢ اﻟﺘﻲ ﺗﻀﻐﻄﮭﺎ وﺗﺮﺳﻢ ﺣﺎﻟﺔ ﻛﮭﺮﺑﺎﺋﯿﺔ ﻣﻌﯿﻨﺔ .ﻓﺄﻧﺖ ﺗﻘﺮأ ﻛﻠﻤﺎت؛ ﺑﯿﻨﻤﺎ اﻟﺤﺎﺳﺒﺔ
ﺗﺘﺤﺴﺲ ﺣﺎﻻت ﻛﮭﺮﺑﺎﺋﯿﺔ.
27
ﻋﻨﺪﻣﺎ ﺗﻜﺘﺐ ﺑﺮﻧﺎﻣﺞ وﺗﻜﺘﺐ ﻣﺜﻼ ﻛﻠﻤﺔ :اطﺒﻊ .ﻓﺄﻧﺖ ھﻨﺎ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﻻ ﺗﻘﺼﺪ ﻣﻦ ﻛﻠﻤﺔ
اطﺒﻊ ﻣﻮﺿﻮع اﻧﺸﺎﺋﻲ ﻛﻜﻠﻤﺔ ﻓﻲ ﺑﯿﺖ ﺷﻌﺮي أو ﻓﻲ ﺣﻜﺎﯾﺔ ﻗﺼﺔ ،أي أﻧّﻚ ﺣﯿﻦ ﺗﺮﯾﺪ أن
ﺗﻜﺘﺐ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻛﻠﻤﺔ اطﺒﻊ؛ ﻓﺄﻧﺖ ﻻﺗﺮﯾﺪ ﺣﺮوﻓﮭﺎ أو اﺳﻤﮭﺎ ﺑﻞ ﺗﺮﯾﺪ ﻓﻌﻠﮭﺎ وﻣﻌﻨﺎھﺎ ﺗﻤﺎﻣﺎ.
أي ﻗﻢ ﯾﺎﺣﺎﺳﺐ ﺑﻌﻤﻠﯿﺔ اﻟﻄﺒﺎﻋﺔ ﻋﻠﻰ اﻟﻄﺎﺑﻌﺔ اﻟﻤﺮﺑﻮطﺔ ﺑﻚ .ﻓﯿﺠﺐ أن ﺗﺘﺤﺮك أﺟﺰاء
اﻟﺤﺎﺳﺐ ﻟﺘﺠﺴﯿﺪ ﻛﻠﻤﺔ اطﺒﻊ ﻓﺘﺘﻢ اﻟﻄﺒﺎﻋﺔ ﻓﻌﻼ.
ھﻨﺎ إذن ﯾﻠﺰم ﺑﺮﻧﺎﻣﺞ وﺳﯿﻂ ﯾﺤﻮل ﻛﻠﻤﺔ اطﺒﻊ إﻟﻰ ﻋﻤﻠﯿﺔ اﻟﻄﺒﺎﻋﺔ ﻓﻌﻼ .ھﺬا اﻟﺒﺮﻧﺎﻣﺞ
اﻟﻮﺳﯿﻂ ﯾﺴﻤﻰ ﺑﺎﻟﻤﺘﺮﺟﻢ .وھﻮ ﺑﺮﻧﺎﻣﺞ ﻣﺮﻓﻖ ﻣﻊ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﺗﻜﺘﺐ ﻓﯿﮫ ﺟﻤﻞ ﺑﺮﻧﺎﻣﺠﻚ
وﯾﻘﻮم ﺑﻌﻤﻠﮫ ﺣﯿﻦ ﺗﻀﻐﻂ زر اﻟﺘﻨﻔﯿﺬ.
ﻛﻠﻤﺎت اﻟﺒﺮﻧﺎﻣﺞ ﻛﻤﺎ ذﻛﺮﻧﺎ ھﻲ ﺣﺎﻻت ﻛﮭﺮﺑﺎﺋﯿﺔ ﻟﻜﻨﮭﺎ ﺗﻜﻮن ﻷﺟﺰاء اﻟﺤﺎﺳﺒﺔ ﻏﯿﺮ ذات
ﻣﻌﻨﻰ ﻓﻌﻠﻲ ،أي ھﻲ ﻛﻠﻤﺎت ﻣﺸﻔﺮة ﺑﺎﻟﻨﺴﺒﺔ ﻷﺟﺰاء اﻟﺤﺎﺳﺒﺔ .اﻟﻤﺘﺮﺟﻢ ﯾﻘﻮم ﺑﺘﺤﻮﯾﻞ ھﺬه
اﻟﺤﺎﻻت إﻟﻰ ﺣﺎﻻت ﻛﮭﺮﺑﺎﺋﯿﺔ أﺧﺮى ﺗﺆدي ﻋﻤﻠﯿﺎت ﻣﻌﯿﻨﺔ ﻧﺮاھﺎ أﻣﺎﻣﻨﺎ .ﻓﺎﻟﻤﺘﺮﺟﻢ ﻗﺎم
ﺑﺘﺤﻮﯾﻞ اﻟﻜﻠﻤﺎت اﻟﺘﻲ ھﻲ ﻣﻔﮭﻮﻣﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻚ؛ ﻗﺎم ﺑﺘﺤﻮﯾﻠﮭﺎ إﻟﻰ ﺣﺎﻻت ﺗﺠﻌﻞ أﺟﺰاء
اﻟﺤﺎﺳﺒﺔ ﺗﻘﻮم ﺑﻤﺎ ﺗﻌﻨﯿﮫ أﻧﺖ .ﻛﻠﻤﺎﺗﻚ ﻟﻠﻤﺘﺮﺟﻢ ھﻲ ﺣﺎﻻت ﻛﮭﺮﺑﺎﺋﯿﺔ ﺳﯿﻘﻮم ﺑﺘﺤﻮﯾﻠﮭﺎ إﻟﻰ
ﺳﻠﺴﻠﺔ ﺣﺎﻻت ﻛﮭﺮﺑﺎﺋﯿﺔ أﺧﺮى ﺗﺸﻐﻞ أﺟﺰاء ﻣﺨﺘﻠﻔﺔ ﻓﻲ اﻟﺤﺎﺳﺒﺔ ﺗﺆدي إﻟﻰ ﺗﺤﻘﯿﻖ ﻋﻤﻠﯿﺔ
ﻓﻌﻠﯿﺔ أﻣﺎﻣﻚ؛ ﺳﻠﺴﻠﺔ اﻟﺤﺎﻻت اﻟﻨﮭﺎﺋﯿﺔ ھﺬه اﻟﺘﻲ ﻗﺎم اﻟﻤﺘﺮﺟﻢ ﺑﺘﺤﻮﯾﻠﮭﺎ ﺗﺴﻤﻰ :ﻟﻐﺔ اﻵﻟﺔ.
ﻓﻲ داﺧﻞ ﺟﮭﺎزك ھﻜﺬا ﻣﺜﻼ: ﻓﺈن ﻛﺎﻧﺖ ﻛﻠﻤﺔ اطﺒﻊ
101101001
ﻓﺮﺑﻤﺎ ﺗﺮﺟﻤﮭﺎ اﻟﻤﺘﺮﺟﻢ إﻟﻰ ھﺬه اﻟﺴﻠﺴﻠﺔ:
010100110 00110001 1110011 10010111
أو إﻟﻰ ﻏﯿﺮ ذﻟﻚ ﻣﻦ اﻟﺴﻼﺳﻞ ﺗﺒﻊ ﺑﻨﯿﺔ اﻟﺤﺎﺳﺐ وﺑﻨﺎء اﻟﻤﺘﺮﺟﻢ.
28
ﺁﻻﺕ ﺗﺘﻮﺍﱃ
اذن ﻓﻲ ﻧﮭﺎﯾﺔ اﻷﻣﺮ وﻋﻨﺪﻣﺎ ﺗﺮى أنّ ﺷﯿﺌﺎ ﻣﺎ ﻓﻲ اﻟﺤﺎﺳﺒﺔ ﻗﺪ أ ُﻧﺠﺰ ،ﻓﺈﻧﮭﺎ ﻓﻲ ﻧﮭﺎﯾﺔ اﻷﻣﺮ
ﻣﺠﻤﻮﻋﺔ آﻻت دﻗﯿﻘﺔ ﺗﻮاﻟﺖ وﺗﺴﻠﺴﻠﺖ ﻻﻧﺠﺎز ﻋﻤﻠﯿﺔ ﻣﺎ.
ﺗﺼﻮر أنّ ﻟﺪﯾﻚ ﻣﺠﻤﻮﻋﺔ أﺟﮭﺰة ﻛﮭﺮﺑﺎﺋﯿﺔ ﻛﻤﺼﺒﺎح وﻣﺮوﺣﺔ وﺳﺨﺎن وﻏﯿﺮ ذﻟﻚ .ﯾﻤﻜﻨﻚ
اﻵن أن ﺗﺮﺑﻂ أطﺮاف أﻗﻄﺎﺑﮭﺎ اﻟﻰ ﻋﺠﻠﺔ ﺗﺪور ﺑﻮاﺳﻄﺔ ﻣﺤﺮك ﻛﮭﺮﺑﺎﺋﻲ ،وھﻨﺎك طﺮف
ﺛﺎﺑﺖ آﺧﺮ ﯾﻠﻤﺲ اﻟﻌﺠﻠﺔ ھﻮ اﻟﺬي ﯾﻐﺬي ﺑﺎﻟﻄﺎﻗﺔ اﻟﻜﮭﺮﺑﺎﺋﯿﺔ .اﻵن ﻋﻨﺪﻣﺎ ﺗﺪور اﻟﻌﺠﻠﺔ ﻓﺈنّ
أﻗﻄﺎب اﻷﺟﮭﺰة اﻟﻤﺜﺒﺘﺔ ﻋﻠﯿﮭﺎ ﺳﺘﺪور ﻣﻌﮭﺎ ،وﻛﻠﻤﺎ ﻻﻣﺲ اﻟﻘﻄﺐ اﻟﻤﻐﺬي أﺣﺪ أﻗﻄﺎب ﺟﮭﺎز
إﺷﺘﻐﻞ ذﻟﻚ اﻟﺠﮭﺎز ،وﺑﮭﺬا ﺳﺘﺮى اﻷﺟﮭﺰة ﺗﻌﻤﻞ ﻋﻨﺪك ﺑﺼﻮرة ﻣﺘﺴﻠﺴﻠﺔ ﺟﮭﺎز ﺑﻌﺪ آﺧﺮ.
وﺑﺘﻐﯿﯿﺮك ﻟﺘﻮزﯾﻊ اﻷﻗﻄﺎب ﻋﻠﻰ اﻟﻌﺠﻠﺔ؛ ﺳﺘﺤﺼﻞ ﻋﻠﻰ ﺗﺮﺗﯿﺐ آﺧﺮ ﻹﺷﺘﻐﺎﻟﮭﺎ .وأﻧﺖ ﺗﻘﻮم
ﺑﺮص اﻷﻗﻄﺎب ﻗﻄﺐ ﺑﻌﺪ آﺧﺮ ،ﻓﺈﻧﻚ ﺗﻜﺘﺐ ﺑﺮﻧﺎﻣﺠﺎ ﻟﻜﯿﻔﯿﺔ ﻋﻤﻞ واﺷﺘﻐﺎل ﺗﻠﻚ اﻷﺟﮭﺰة.
ﻓﺄﻧﺖ ﺗﺒﺮﻣﺞ ﻋﻠﻰ ﻣﺴﺘﻮى اﻵﻟﺔ.
ﺍﻟﺬﺍﻛﺮﺓ
اﻟﺬاﻛﺮة ھﻲ ﻣﺨﺰن ﯾﺤﻔﻆ ﺣﺎﻻت ﻣﻌﯿﻨﺔ .وﺑﻤﺎ أﻧﻨﺎ أﻣﺎم آﻟﺔ؛ ﻓﺎﻵﻟﺔ اﻟﻜﮭﺮﺑﺎﺋﯿﺔ ھﻨﺎ إﻣﺎ أن ﺗﻜﻮن
ﻓﻲ ﺣﺎﻟﺔ ﻋﻤﻞ ) ،(1وإﻣﺎ أن ﺗﻜﻮن ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﻋﻤﻞ ).(0
اﻟﺬاﻛﺮة ﻓﻲ ﻧﮭﺎﯾﺔ اﻷﻣﺮ ھﻲ ﻣﺠﻤﻮﻋﺔ ﻋﻨﺎﺻﺮ اﻟﻜﺘﺮوﻧﯿﺔ ﻣﺮﺗﺒﺔ ﺑﻌﻀﮭﺎ اﻟﻰ ﺟﺎﻧﺐ ﺑﻌﺾ.
واﻟﻌﻨﺼﺮ ﻣﻨﮭﺎ ﯾﻤﻜﻨﮫ أن ﯾﻜﻮن ﻓﻲ ﺣﺎﻟﺔ ﻋﻤﻞ أو ﺗﻮﻗﻒ .أي ) (1أو ) .(0اﻟﻤﺤﺎﻓﻈﺔ اﻟﻤﺆﻗﺘﺔ
ﻋﻠﻰ ﺣﺎﻟﺔ ﻣﺎ؛ ﺗﺠﻌﻞ ﻣﻦ ھﺬه اﻟﻌﻨﺎﺻﺮ وﻛﺄﻧﮭﺎ ﺗﺤﻔﻆ وﺗﺘﺬﻛﺮ.
ﻓﻲ اﻟﺬاﻛﺮات اﻟﺤﺪﯾﺜﺔ ھﻨﺎك ﻟﯿﺲ آﻻف اﻟﻌﻨﺎﺻﺮ اﻻﻟﻜﺘﺮوﻧﯿﺔ ،ﺑﻞ اﻟﻤﻼﯾﯿﻦ ﻣﻦ اﻟﺒﻨﯿﺔ اﻟﺪﻗﯿﻘﺔ
اﻟﻤﺘﺮاﺻﺔ اﻟﻰ ﺑﻌﻀﮭﺎ ﻣﻤﺎ ﯾﻌﻄﯿﻨﺎ ذاﻛﺮة ﻛﺒﯿﺮة اﻟﺤﺠﻢ.
29
ﺍﳊﺮﻭﻑ ﻭﺍﻻﺭﻗﺎﻡ
ﻛﻤﺎ ذﻛﺮﻧﺎ ،أﺟﺰاء اﻵﻟﺔ ﺗﻌﻤﻞ ﺑﺤﺎﻻت ) (0و ) .(1ﻓﻠﺘﻤﺜﯿﻞ رﻗﻢ ﻣﻌﯿﻦ ،ﯾﺠﺐ اﻻﺗﻔﺎق ﻋﻠﯿﮫ
ﺑﺘﺸﻜﯿﻠﺔ ﻣﻦ ﺳﻠﺴﻠﺔ ﺣﺎﻻت ﻣﻌﯿﻨﺔ ﻣﻦ ) (0و ) .(1وﻛﺬﻟﻚ اﻟﺤﺎل ﻋﻨﺪ ﺗﻤﺜﯿﻞ ﺣﺮف ﻣﻦ
اﻟﺤﺮوف اﻟﮭﺠﺎﺋﯿﺔ.
ﻣﻦ اﻟﺠﺪاول اﻟﻤﺘﻔﻖ ﻋﻠﯿﮭﺎ ﻟﺘﻤﺜﯿﻞ اﻟﺤﺮوف واﻻرﻗﺎم ،ﺟﺪول ﯾﺴﻤﻰ )اﺳﻜﻲ( .ﻓﻠﻜﻞ رﻗﻢ أو
ﺣﺮف ﺣﺎﻟﺔ ﻣﻌﯿﻨﺔ ﻓﻲ ذﻟﻚ اﻟﺠﺪول.
اﻟﺤﺮف أو اﻟﺮﻗﻢ ﻓﻲ اﻟﺤﺎﺳﺒﺔ ﯾﺴﻤﻰ ) ﻣﺤﺮف (.
ﺍﻟﻠﺒﻨﺔ ﻭﺍﳋﺎﻧﺎﺕ
اﻟﻌﻨﺼﺮ اﻻﻟﻜﺘﺮوﻧﻲ اﻟﻮاﺣﺪ ﻓﻲ اﻟﺬاﻛﺮة اﻟﺬي ﯾﺴﺘﻄﯿﻊ أن ﯾﻜﻮن ) (0أو ) .(1ﺳﯿﺸﻜﻞ ﻛﺄﻧﮫ
ﺣﻘﻞ ﯾﻤﻜﻦ أن ﺗﻜﺘﺐ ﻓﯿﮫ ﺻﻔﺮ أو واﺣﺪ .ھﺬا اﻟﺼﻔﺮ أو اﻟﻮاﺣﺪ؛ أي ھﺬا اﻟﺤﻘﻞ ،ﺳﯿﻜﻮن ﻟﺒﻨﺔ
أوﻟﻰ ﺗﺒﻨﻲ ﻣﻨﮭﺎ ﻣﺎ ﺗﺸﺎء ﻟﻠﻮﺻﻮل اﻟﻰ ﺣﺠﻢ ﻣﻌﯿﻦ ﻟﺬاﻛﺮة ﺗﺮﯾﺪھﺎ.
وﻟﻜﻦ اﻓﺮض أﻧّﻚ ﺗﺮﯾﺪ أن ﺗﻜﺘﺐ رﻗﻢ ﯾﻤﺜﻞ اﻟﻌﺪد ) .(1ﻓﮭﺬا اﻟﻌﺪد اﻟﺬي ﺗﺮﯾﺪ ﺗﻤﺜﯿﻠﮫ ،ھﻞ ھﻮ
ﺳﺎﻟﺐ أم ﻣﻮﺟﺐ؟ .أي أنّ ﻟﮫ إﺷﺎرة ﻣﺎ ) +أو .( -ﻓﮭﻨﺎ ﻧﺤﺘﺎج اﻟﻰ ﻟﺒﻨﺘﯿﻦ اﺛﻨﺘﯿﻦ ،إﺣﺪاھﻤﺎ
ﻟﻠﻌﺪد ﻧﻔﺴﮫ واﻷﺧﺮى ﻻﺷﺎرﺗﮫ .ﯾﻤﻜﻦ أن ﻧﺘﻔﻖ ﻣﺜﻼ ﻋﻠﻰ أنّ ﻟﺒﻨﺔ اﻻﺷﺎرة ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻓﻲ
ﺣﺎﻟﺔ ) (0ﻓﮭﻲ ﻣﻮﺟﺒﺔ وﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻓﻲ ﺣﺎﻟﺔ ) (1ﻓﮭﻲ ﺳﺎﻟﺒﺔ ،أو ﻧﺘﻔﻖ ﻋﻠﻰ ﻋﻜﺲ ذﻟﻚ ـ
ﺷﺮﯾﻄﺔ أن ﯾﺒﻘﻰ ھﺬا اﻻﺗﻔﺎق ﺳﺎرﯾﺎ ﻣﻦ اﻟﻠﺤﻈﺔ اﻷوﻟﻰ ﻟﻼﺗﻔﺎق وﺣﺘﻰ ﻧﻨﺘﮭﻲ ـ.
ھﺬا ﺑﺎﻟﻨﺴﺒﺔ اﻟﻰ رﻗﻢ ﻣﺜﻞ ) (1أو ﻏﯿﺮه .ﻓﻤﺎذا إن اردﻧﺎ ﺗﻤﺜﯿﻞ اﻟﺮﻗﻢ )(1.3؟ .ھﻨﺎ ظﮭﺮ ﻟﻨﺎ
ﺷﻲء ﺟﺪﯾﺪ ھﻮ اﻟﻔﺎرزة .ﻓﯿﺠﺐ ﺗﺨﺼﯿﺺ ﻟﺒﻨﺔ أﺧﺮى ﻟﺘﻤﺜﯿﻞ ﺗﻠﻚ اﻟﻔﺎرزة وﻧﺘﻔﻖ ﻣﺜﻼ :اذا
ﻛﺎﻧﺖ ﻟﺒﻨﺔ اﻟﻔﺮزة ﺗﻤﺜﻞ ) (1ﻓﯿﻌﻨﻲ أنّ اﻟﺮﻗﻢ ﯾﺤﻤﻞ ﻓﺎرزة .ﻓﺎذا ﻛﺎﻧﺖ ﻟﺒﻨﺔ اﻟﻔﺎرزة ﻓﻲ ﺣﺎﻟﺔ
30
)(0؛ ﻓﯿﻌﻨﻲ أنّ اﻟﺮﻗﻢ ﻻ ﯾﺤﻤﻞ ﻓﺎرزة .وھﻜﺬا ﺻﺎر ﺗﻤﺜﯿﻞ رﻗﻢ ) (1ﻣﺜﻼ ﯾﺘﻄﻠﺐ ﺛﻼث ﻟﺒﻨﺎت؛
ﻟﺒﻨﺔ ﻟﮫ ﻛﺮﻗﻢ ،وﻟﺒﻨﺔ ﻹﺷﺎرﺗﮫ ،وﻟﺒﻨﺔ ﻟﻔﺎرزﺗﮫ.
اﻧﺘﮭﻰ اﻟﺨﺒﺮاء أﻧّﮭﻢ ﯾﺤﺘﺎﺟﻮن اﻟﻰ ﺛﻤﺎﻧﯿﺔ ﻟﺒﻨﺎت ﻟﺘﻤﺜﯿﻞ ﻛﻞ ﺷﻲء ـ رﻗﻢ أو ﺣﺮف ـ .ھﺬه
اﻟﻠﺒﻨﺎت اﻟﺜﻤﺎﻧﯿﺔ دﻋﻨﺎ ﻧﺘﻔﻖ ﻋﻠﻰ ﺗﺴﻤﯿﺘﮭﺎ ﺑﺎﻟﺨﺎﻧﺔ .ﻓﻨﺤﺘﺎج اﻟﻰ ﺧﺎﻧﺔ ﻟﺘﻤﺜﯿﻞ ﻛﻞ ﻣﺤﺮف ،أي
ﻧﺤﺘﺎج إﻟﻰ ﺛﻤﺎﻧﯿﺔ ﻟﺒﻨﺎت ﻟﺘﻤﺜﯿﻠﮫ.
ﺣﺠﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻗﺪ ذﻛﺮﻧﺎ أﻧﮫ ﺗﻮﺟﺪ أﻧﻮاع ﻛﺜﯿﺮة ﻣﻦ اﻟﺒﯿﺎﻧﺎت .ﻛﻞ ﻧﻮع ﯾﺸﻐﻞ ﺣﺠﻤﺎ ﻣﻌﯿﻨﺎ ﻣﻦ اﻟﺬاﻛﺮة .أي ﻟﻜﻞ
ﻧﻮع ﻣﻦ اﻟﺒﯿﺎﻧﺎت ،ﻋﺪد ﺧﺎﻧﺎت ﺗﺴﺘﻐﺮﻗﮫ ﺑﯿﺎﻧﺎﺗﮫ ،ﻟﺬﻟﻚ ﻣﻦ ﻛﻤﺎل ﻧﺠﺎح اﻟﺒﺮﻧﺎﻣﺞ؛ ﺣﺴﻦ اﺧﺘﯿﺎر
اﻟﻤﺒﺮﻣﺞ ﻟﻨﻮع ﺑﯿﺎﻧﺎﺗﮫ اﻟﺘﻲ ﺗﻨﺎﺳﺐ ﻣﺎﯾﻘﺼﺪ وﺗﺄﺧﺬ أﻗﻞ ﻗﺪر ﻣﻤﻜﻦ ﻣﻦ اﻟﺬاﻛﺮة ﺣﺘﻰ ﻻ ﯾﻜﻮن
ﺑﻂء ﻓﻲ ﺳﺮﻋﺔ اﺳﺘﺠﺎﺑﺔ ﻣﻌﺎﻟﺞ اﻟﺤﺎﺳﺒﺔ.
ﺍﻟﻌﻨﺎﻭﻳﻦ
اﻟﺬاﻛﺮة ﻛﻤﺎ ﻋﺮﻓﻨﺎ؛ ﺗﻘﺴﻢ اﻟﻰ ﺧﺎﻧﺎت .ﻛﻞ ﺧﺎﻧﺔ ﻟﮭﺎ ﻋﻨﻮان ﯾﻤﯿﺰھﺎ ﻋﻦ ﻏﯿﺮھﺎ ،واﻟﺨﺎﻧﺔ اﻟﺘﻲ
ﺗﻠﻲ ﻟﮭﺎ رﻗﻢ ﻋﻨﻮان ﺗﺎ ٍل .ﻓﻠﻨﻔﺮض ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﺘﻘﺮﯾﺐ أنّ ﺧﺎﻧﺔ ﯾﻜﻮن رﻗﻢ ﻋﻨﻮاﻧﮭﺎ ھﻮ )،(30
ﻓﺎﻟﺨﺎﻧﺔ اﻟﺘﻲ ﺑﻌﺪھﺎ ﺳﯿﻜﻮن رﻗﻢ ﻋﻨﻮاﻧﮭﺎ ) (31واﻟﺨﺎﻧﺔ اﻟﺘﻲ ﻗﺒﻠﮭﺎ ﻟﮭﺎ رﻗﻢ ﻋﻨﻮان ھﻮ )،(29
وھﻜﺬا.
وﻟﻜﻦ؛ ﻛﯿﻒ ﻧﻨﺘﻘﻞ ﻣﻦ ﻋﻨﻮان اﻟﻰ آﺧﺮ وﻓﻖ اﻟﺒﯿﺎﻧﺎت .أو ﻛﯿﻒ ﻧﻘﺮأ اﻟﻌﻨﺎوﯾﻦ وھﻨﺎك أﻧﻮاع
ﻣﺨﺘﻠﻔﺔ ﻣﻦ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺬاﻛﺮة؟ .ھﺬا ﯾﺘﻄﻠﺐ ﺗﻘﺮﯾﺐ ﻣﺜﻞ ﻟﺬﻟﻚ ،ﻓﺎﻟﻰ ﻣﺜﺎل ﺑﺴﯿﻂ ھﻮ ﻏﺮف
اﻟﻔﻨﺪق.
31
ﻏﺮﻑ ﺍﻟﻔﻨﺪﻕ
ﺗﺼﻮر أﻧﻚ ﺻﺎﺣﺐ ﻓﻨﺪق ﻛﺒﯿﺮ .ﺳﺘﻘﻮم ﺑﺘﺮﻗﯿﻢ اﻟﻐﺮف ﺑﺘﺴﻠﺴﻞ ﻣﺎ .رﻗﻢ اﻟﻐﺮﻓﺔ ﺳﯿﻜﻮن
ﻋﻨﻮاﻧﮭﺎ .وﻋﻨﺪھﺎ ﺳﺘﻘﻮل ﻟﻌﺎﻣﻠﻚ :اذھﺐ اﻟﻰ ﻏﺮﻓﺔ رﻗﻢ ﻛﺬا ،أو اذھﺐ اﻟﻰ اﻟﻌﻨﻮان ﻛﺬا.
ض ﻣﺎ .ﺳﯿﺎﺗﯿﻚ اﻵن ﻋﻮاﺋﻞ ﻣﺨﺘﻠﻔﺔ ،ﻛﻞ ﻋﺎﺋﻠﺔ ﻟﮭﺎ ﻣﺠﻤﻮﻋﺔ أﻓﺮاد .ﻋﻨﺪھﺎ رﺑﻤﺎ ﺗﻌﻤﺪ اﻟﻰ
ﻟﻐﺮ ٍ
ﺗﻘﺴﯿﻢ ﺗﻠﻚ اﻟﻌﻮاﺋﻞ اﻟﻰ ﺛﻼث ﻓﺌﺎت .ـ اﻟﻰ ﺛﻼث أﻧﻮاع ـ .ﻋﺎﺋﻠﺔ ﺻﻐﯿﺮة ﺗﺸﻐﻞ ﻏﺮﻓﺔ واﺣﺪة،
وﻋﺎﺋﻠﺔ ﻣﺘﻮﺳﻄﺔ ﺗﺸﻐﻞ ﻏﺮﻓﺘﯿﻦ ،وﻋﺎﺋﻠﺔ ﻛﺒﯿﺮة ﺗﺸﻐﻞ ﺛﻼث ﻏﺮف.
ﻋﻨﺪﻣﺎ ﯾﻜﻮن ھﻨﺎك ﻋﻮاﺋﻞ ﺻﻐﯿﺮة ،ﻛﻞ ﻋﺎﺋﻠﺔ ﺗﺸﻐﻞ ﻏﺮﻓﺔ واﺣﺪة؛ ﻓﺴﺘﻨﺘﻘﻞ ﻣﻦ ﻋﻨﻮان اﻟﻰ
آﺧﺮ ﺑﻤﻘﺪار ) (1ﻷنّ ﻛﻞ ﻋﺎﺋﻠﺔ ﺗﺸﻐﻞ ﻏﺮﻓﺔ .ﻓﻌﺎﺋﻠﺔ ﺗﺸﻐﻞ ﻏﺮﻓﺔ رﻗﻢ ) (10واﻟﻌﺎﺋﻠﺔ اﻟﺘﻲ
ﺗﻠﯿﮭﺎ ﺗﺸﻐﻞ اﻟﻐﺮﻓﺔ رﻗﻢ ) (11واﻟﺘﻲ ﺑﻌﺪھﺎ رﻗﻢ ) (12وھﻜﺬا ،وھﺬا واﺿﺢ.
أﻣﺎ إن ﻛﺎﻧﺖ ھﻨﺎك ﻋﻮاﺋﻞ ﻣﺘﻮﺳﻄﺔ ،ﻓﺴﺘﻨﺘﻘﻞ ﻣﻦ ﻋﻨﻮان اﻟﻰ آﺧﺮ ﺑﻌﺪد ﻏﺮﻓﺘﯿﻦ ﻏﺮﻓﺘﯿﻦ.
ﻓﻌﺎﺋﻠﺔ ﻣﺘﻮﺳﻄﺔ أوﻟﻰ ﺳﺘﺸﻐﻞ اﻟﻐﺮﻓﺘﯿﻦ ) 14و ( 15وﻋﺎﺋﻠﺔ ﻣﺘﻮﺳﻄﺔ ﺛﺎﻧﯿﺔ ﺳﺘﺸﻐﻞ
اﻟﻐﺮﻓﺘﯿﻦ اﻟﺘﺎﻟﯿﺘﯿﻦ ) 16و .( 17ﻓﺎذا ﻛﻨﺖ ﻋﻨﺪ اﻟﻐﺮﻓﺔ ) (14وأردت اﻻﻧﺘﻘﺎل اﻟﻰ اﻟﻌﻨﻮان
اﻟﺘﺎﻟﻲ ﺣﯿﺚ اﻟﻌﺎﺋﻠﺔ اﻟﺜﺎﻧﯿﺔ ،ﻓﻮﺟﺐ أن ﺗﻨﺘﻘﻞ اﻟﻰ اﻟﻐﺮﻓﺔ ) (16ﻷن اﻟﻐﺮﻓﺔ ) (15ھﻲ ﺷﺎﻏﻠﺔ
ﻟﻨﻔﺲ اﻟﻌﺎﺋﻠﺔ اﻷوﻟﻰ ﻓﺘﻘﻔﺰ ﺑﻤﻘﺪار ) (2ﻏﺮﻓﺔ.
ﻓﻲ ﺣﺎﻟﺔ اﻟﻌﻮاﺋﻞ اﻟﻜﺒﯿﺮة ﺳﺘﻨﺘﻘﻞ ﺑﻤﻘﺪار ) (3ﻏﺮﻓﺔ ﻟﺘﺒﻠﻎ ﻋﻨﻮان ﺗﺎ ٍل وھﻜﺬا.
ھﺬا اﻟﻔﮭﻢ ﺳﺘﺠﺪه ﻣﺘﻮاﺟﺪ ﻓﻲ ﻣﻮﺿﻮع اﻟﺒﯿﺎﻧﺎت واﻟﻌﻨﺎوﯾﻦ ﻋﻨﺪﻣﺎ ﺗﺒﻠﻎ ذﻟﻚ ،ﻓﺘَ َﺬﻛّﺮ.
ﺑﮭﺬا اﻟﻘﺪر ﻣﻦ اﻟﻔﮭﻢ ﺳﺘﺠﺪ أنّ اﻟﻤﻮﺿﻮﻋﺎت اﻟﻤﻄﺮوﺣﺔ ﺳﺘﻜﻮن ﯾﺴﯿﺮة ﻋﻠﯿﻚ ،ﻓﺎﺣﻤﺪ ﷲ.
32
ﺃﺳﺲ ﺍﻟﱪﳎﺔ..
ﻭﺍﻟﺘﻔﻜﲑ ﺍﻟﱪﳎﻲ
ھﺬا اﻟﻔﺼﻞ ﯾﻤﮭﺪ ﻟﻠﻤﻔﺎھﯿﻢ اﻟﺤﺪﯾﺜﺔ واﻟﻤﺨﺘﻠﻔﺔ ﻟﻠﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ؛ ﻓﻤﺎ ھﻲ اﻟﺒﺮﻣﺠﺔ وﻣﺎ ھﻲ
ﻣﺘﻄﻠﺒﺎﺗﮭﺎ وﻣﺎ ھﻲ اﻟﺪوال وﻣﺎ ھﻮ اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ وﻟﻤﺎذا ﻛﺎﻧﺖ اﻻﺳﻤﺎء واﻟﻤﺘﻐﯿﺮات وﻣﺎذا
ﻧﻌﻨﻲ ﺑﺎﻟﺒﯿﺎﻧﺎت وﻟﻤﺎذا ھﻨﺎك اﻧﻮاع ﺑﯿﺎﻧﺎت.
ﻣﺎھﻲ اﻟﺠﻤﻠﺔ اﻟﺸﺮطﯿﺔ وﻟﻤﺎذا ﻛﺎﻧﺖ ﻓﻲ اﻟﺒﺮﻣﺠﺔ وﻣﺎھﻲ اﻟﺤﻠﻘﺎت وﻣﺎﻓﺎﺋﺪﺗﮭﺎ وﻏﯿﺮ ذﻟﻚ
اﻟﻜﺜﯿﺮ اﻟﻜﺜﯿﺮ ﻣﻤﺎ ﯾﺤﺘﺎﺟﮫ اﻟﻘﺎرئ ﻷول ﻣﺮة ﻓﻲ ﻓﮭﻤﮫ واﺑﺤﺎره ﻓﻲ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ .ﻛﻞ ذﻟﻚ
ﺑﺘﻤﺜﯿﻞ واﻗﻌﻲ ﺑﺄﻣﺜﻠﺔ ﺣﯿﺎﺗﯿﺔ ﺑﺴﯿﻄﺔ.
33
ﺃﻧﻈﻤﺔ ﺍﳊﺎﺳﺒﺔ
ﺗﺼﻮر اﻧﻚ ﻧﺰﻟﺖ وﺣﺪك اﻟﻰ اﻻرض .ﻋﻨﺪھﺎ ﺳﺘﺒﺪأ ﺑﺒﻨﺎء ﺳﻜﻦ ﻟﻚ .ﺳﺘﻘﻮم ﺑﻨﻘﻞ اﻟﺤﺠﺎرة ،ﺛﻢ
ﺳﺘﺮى أﻧﻚ ﯾﺠﺐ أن ﺗﻔﻜﺮ ﺑﺼﻨﺎﻋﺔ ﺷﻲء ﺑﺴﯿﻂ ﺗﻨﻘﻞ ﺑﮫ اﻟﺤﺠﺎرة وﻏﯿﺮھﺎ وﺳﺘﻔﻜﺮ ﺑﺄوﻟﻮﯾﺎت
اﻟﻌﺮﺑﺔ اﻟﺒﺴﯿﻄﺔ وﺳﺘﻨﻘﻞ ﺑﮭﺎ ﻣﻮاد اﻟﺒﻨﺎء وﺳﺘﻘﻮم ﺑﻌﺪ ذﻟﻚ ﺑﺘﻌﺒﯿﺪ طﺮﯾﻖ ﺳﮭﻞ ﻟﻌﺮﺑﺘﻚ .ﺛﻢ
ﺳﺘﺮى اﻧﻚ ﻟﻮ ﺟﻤّﻌﺖ اﻟﺤﺠﺎرة ﻓﻲ ﻣﻜﺎن واﺣﺪ اوﻟﻲ واﻟﺮﻣﻞ ﻓﻲ ﻣﻜﺎن آﺧﺮ اوﻟﻲ وھﻜﺬا
وﻋﻨﺪھﺎ ﺳﺘﺸﺮع ﻓﻲ إﻛﻤﺎل ﺑﻨﺎء اﻟﺒﯿﺖ
ھﺬه اﻟﻌﺮﺑﺔ وﺗﻠﻚ اﻟﻤﺨﺎزن وﻏﯿﺮ ذﻟﻚ ،ﻟﯿﺲ ھﻮ ﻣﺎ ﻛﻨﺖ ﺗﻘﺼﺪه ﻓﻲ ﺑﺪاﯾﺔ ﻣﺸﺮوﻋﻚ وﻟﻜﻦ
ﻣﺘﻄﻠﺒﺎت ﻓﺮﺿﮭﺎ ﻋﻠﯿﻚ ﻣﺸﺮوﻋﻚ ﺣﯿﻦ ﺷﺮﻋﺖ ﺑﮫ.
ﺳﯿﻨﺰل وراءك إﻧﺴﺎن آﺧﺮ وﺳﯿﻘﻮم ﺑﺒﻨﺎء ﺑﯿﺖ ﻟﮫ وﺳﯿﺸﺮع ﺑﻤﺎ ﺷﺮﻋﺖ ﺑﮫ ﻣﻦ ﺧﻄﻮات ﺛﻢ
ﺳﺘﺮﻛﻦ اﻧﺖ اﻟﻌﺮﺑﺔ وھﻮ و َﺳﺘُﮭ َﻤﻞ اﻟﻤﺨﺎزن اﻻوﻟﻰ وھﻜﺬا وﺳﯿﺴﺘﻘﺮ ﻛﻼ ﻓﻲ ﺑﯿﺘﮫ اﻟﺬي اراد.
ﻣﺎذا إن ﻛﺎن ھﻨﺎك ﻋﺒﻘﺮﯾﺎ ﯾﺮﺻﺪﻛﻤﺎ ﻗﺪ ﻧﺰل ﻗﺒﻠﻜﻤﺎ وﺳﺠﻞ ﻣﺎ ﻗﻤﺘﻤﺎ ﺑﮫ! .ﺳﯿﺮى ھﺬا أﻧﻜﻤﺎ ﻗﺪ
اﻧﺸﻐﻠﺘﻢ ﻋﻦ ﻓﻜﺮﺗﻜﻤﺎ اﻻﺳﺎس ﺑﺄﺷﯿﺎء ﺛﺎﻧﻮﯾﺔ ﻛﻼﻛﻤﺎ وﻏﯿﺮﻛﻤﺎ ﺳﯿﺤﺘﺎج اﻟﯿﮭﺎ .ﻋﻨﺪھﺎ ﺳﯿﺸﺮع
ھﺬا ﺑﺘﺼﻨﯿﻊ ﻋﺮﺑﺎت ﺟﺎھﺰة ﯾﻀﻌﮭﺎ ﺗﺤﺖ ﺗﺼﺮﻓﻚ وﺳﯿﻌﺒﺪ ﻟﻚ طﺮﯾﻘﺎ ﻟﺘﺴﻠﻜﮫ وﺳﯿﺒﻨﻲ ﻟﻚ
ﻣﺨﺎزن ﯾﺠﻤﻊ ﻓﯿﮭﺎ ﻣﻮاد اﻟﺒﻨﺎء وﻣﺎ ﻋﻠﯿﻚ ﻋﻨﺪھﺎ اﻻ اﻟﺘﻔﻜﯿﺮ ﺑﺼﻮرة ﺟﺎدة ﺑﻜﯿﻔﯿﺔ ﺑﻨﺎء اﻟﺒﯿﺖ
وﻋﺪم اﻻﻧﺸﻐﺎل ﺑﻤﺘﻄﻠﺒﺎت ﺑﻨﺎء ذﻟﻚ اﻟﺒﯿﺖ.
ھﺬا اﻟﺸﺨﺺ اﻟﻌﺒﻘﺮي ﺳﯿﺒﻨﻲ اﺣﺘﯿﺎﺟﺎت ﻣﺪﯾﻨﺔ وﺳﯿﺒﻨﻲ اﻟﻤﺪﯾﻨﺔ وﻣﺎ ﻋﻠﻰ ﺳﻜﺎﻧﮭﺎ اﻻ اﻟﺘﻔﻜﯿﺮ
ﺑﺒﻨﺎء ﻛﻞ ﺷﺨﺺ ﻟﺒﯿﺘﮫ دون اﻻﻛﺘﺮاث ﻟﻤﺘﺎﻋﺐ ﺛﺎﻧﻮﯾﺔ ﻗﺪ ﯾﺼﺎدﻓﮭﺎ ﺑﻨﺎء اﻟﺒﯿﺖ.
ھﻜﺬا ھﻮ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ﻟﺪﯾﻚ ﻗﺪ ھﯿﺄ ﻟﻚ اﻟﻤﺴﺘﻠﺰﻣﺎت اﻻوﻟﻰ اﻻﺳﺎس ﻟﺘﻘﻮم اﻧﺖ ﻓﯿﻤﺎ ﺑﻌﺪ
ﺑﺒﺮﻣﺠﺔ اﻟﺸﻲء اﻟﺨﺎص ﺑﻚ وﻟﯿﻨﺼﺐ اﻟﺘﻔﻜﯿﺮ ﻓﻘﻂ ﻋﻠﻰ ھﺬا اﻟﺸﻲء اﻟﺬي ﺗﺮﯾﺪ أن ﺗﻔﻌﻠﮫ.
34
ﺍﻟﺘﻨﻈﻴﻢ ﻭﺗﻄﻮﺭ ﺍﻟﱪﳎﺔ
ﺗﺼﻮر أنّ ﻟﺪﯾﻚ ﻋﺎﺋﻠﺔ ﻋﻤﻞ ﻛﺒﯿﺮة وأﻧّﻚ ﺗﺮﯾﺪ ﺑﻨﺎء ﺑﯿﺖ ﺑﺘﻮﺟﯿﮫ أﻓﺮاد ﺗﻠﻚ اﻟﻌﺎﺋﻠﺔ وﺗﺨﻄﯿﻄﻚ
وادارﺗﻚ .ﺳﯿﻜﻮن ﺳﯿﺮ ﻋﻤﻠﻚ ﺑﻌﺒﺎراﺗﻚ ﻛﮭﺬا اﻟﺘﻘﺮﯾﺐ:
اﺣﻤﺪ ،اﺣﻔﺮ اﻻرض ھﻨﺎ؛
زﯾﺪ ،رص اﻟﻠﺒﻨﺎت ھﻜﺬا ھﻨﺎ؛
ﻋﻤﺮو ،ھﺎت ھﺬه اﻻﻋﻤﺪة اﻟﺨﺸﺒﯿﺔ ﺿﻌﮭﺎ ھﻨﺎ؛
اﺣﻤﺪ ،اﻻﺳﻼك اﻟﺤﺪﯾﺪﯾﺔ ﺿﻌﮭﺎ ھﻨﺎ ﺑﮭﺬا اﻟﺸﻜﻞ؛
زﯾﺪ ،اﺟﻌﻞ ھﺬا اﻟﻠﻮح اﻟﺨﺸﺒﻲ ﻛﮭﺬا اﻟﺸﻜﻞ؛
وھﻜﺬا ﺣﺘﻰ ﯾﻜﺘﻤﻞ اﻟﺒﻨﺎء.
ﺑﻌﺪ ﻣﻤﺎرﺳﺎت ﻋﺪﯾﺪة ﺳﺘﺠﺪ ﺑﺄنّ ﺗﺠﻤﯿﻊ اﻟﻤﻮاد وﻓﺮزھﺎ ﻛﻞ ﻓﻲ ﻣﻜﺎن وﺗﮭﯿﺌﺔ آﻻت ﻛﻞ ﻣﺎدة
وﺟﻌﻠﮭﺎ ﻗﺮﯾﺒﺔ ﻣﻦ ﻣﻮادھﺎ ﺳﯿﺠﻌﻞ اﻻﻣﺮ أﯾﺴﺮ ﻓﻲ اﻟﺒﺤﺚ ﻋﻦ اﻟﻤﻮاد ﻟﻤﻌﺮﻓﺔ ﻣﻜﺎﻧﮭﺎ وﺗﺤﺪﯾﺪه
وأﺳﺮع ﻓﻲ ﺗﺸﻜﯿﻠﮭﺎ ﻷنّ آﻻت ﻛﻞ ﻣﺎدة ﺑﺠﺎﻧﺐ ﺗﻠﻚ اﻟﻤﺎدة ﻓﺘﻜﻮن ﺑﺬﻟﻚ ﻗﺪ ﺷﻜﻠﺖ ورﺷﺎ
ﻣﺨﺘﻠﻔﺔ ﺟﺎھﺰة اﻟﻌﻤﻞ؛ ﻓﮭﻨﺎ ورﺷﺔ ﻟﻠﻨﺠﺎرة .وھﻨﺎ ورﺷﺔ ﻟﻠﺤﺪادة .وھﻨﺎ ورﺷﺔ ﻟﻜﺬا.
ﻋﻨﺪ ھﺬا ﺳﺘﻘﻮم ﺑﺎﻟﺒﻨﺎء اﻋﺘﻤﺎدا ﻋﻠﻰ ورﺷﻚ ھﺬه ﺑﻌﺪ ﺗﺤﺪﯾﺪ اﺧﺘﺼﺎﺻﺎﺗﮭﺎ ،ﻓﯿﻤﻜﻦ ﻟﺰﯾﺪ أو
ﻋﻤﺮو أو اﺣﻤﺪ ان ﯾﺪﺧﻠﻮا ورﺷﺔ اﻟﻨﺠﺎرة ﻟﺼﻨﻊ ﻣﻨﻀﺪة وﯾﻤﻜﻦ ﻟﻤﺤﻤﺪ ان ﯾﻌﻤﻞ ﻓﯿﮭﺎ ﻛﺮﺳﻲ
أو ﯾﻤﻜﻦ ﻟﮫ ان ﯾﺪﺧﻞ ورﺷﺔ اﻟﺤﺪادة ﻟﻌﻤﻞ ﻛﺬا.
ﻓﻲ اﻟﻤﺮﺣﻠﺔ اﻷوﻟﻰ ﻛﺎن اﻟﻌﻤﻞ ﻣﺒﻌﺜﺮ ھﻨﺎ وھﻨﺎك .أﻣﺎ اﻵن ﻓﮭﻨﺎك ورش ﺧﺎﺻﺔ ﺗﻘﻮم ﺑﺄداء
ﻣﮭﺎم ﻣﻌﯿﻨﺔ.
35
ﺑﻌﺪ ﻣﻤﺎرﺳﺎت أﺧﺮى ﺳﺘﺠﺪ أنّ ﺗﺨﺼﯿﺺ ﺷﺨﺺ ﻣﻌﯿﻦ ﻻﺳﺘﻼم ورﺷﺔ ﻣﺎ واﺗﻘﺎن ﻛﺎﻓﺔ
أﻋﻤﺎﻟﮭﺎ ﺳﯿﻜﻮن أﻓﻀﻞ وأﻧﮫ ھﻮ اﻟﻤﺴﺆول اﻷول واﻷﺧﯿﺮ ﻋﻦ ﻋﻤﻞ وإﺗﻘﺎن ﺗﻠﻚ اﻟﻤﮭﻨﺔ ﻓﻲ
ﺗﻠﻚ اﻟﻮرﺷﺔ .ﻓﺴﯿﻜﻮن ﻟﺪﯾﻚ ﻧﺠﺎر ﻣﺘﺨﺼﺺ وﺳﯿﻜﻮن ﻟﻚ ﺣﺪاد ﻟﮫ ورﺷﺔ وﺳﯿﻜﻮن ﻟﻚ ﺑﻨﺎء
ﯾﺘﻘﻦ رص اﻟﻠﺒﻨﺎت وھﻜﺬا ﻓﻘﺪ أﺻﺒﺢ ﻛﻞ ﺷﺨﺺ ﯾﻌﺮف ﻋﻤﻠﮫ وﯾﺘﻘﻨﮫ وﻻﺣﺎﺟﺔ ﻟﮫ ﺑﻜﯿﻔﯿﺔ أداء
ﻋﻤﻠﮫ ﻣﻨﻚ اﻻ ﺑﻤﻌﺮﻓﺔ ﻣﺎذا ﺗﺮﯾﺪ ان ﺗﺠﻌﻞ ﻓﻲ ﺗﻠﻚ اﻟﻤﻜﺎن.
ﻋﻨﺪھﺎ ﺳﺘﻘﻮل :اﺣﻤﺪ ،أرﯾﺪ ﻛﺮﺳﻲ ھﻨﺎ .وأﺣﻤﺪ ھﻮ اﻟﻨﺠﺎر اﻟﺬي ﯾﻌﺮف ﻛﯿﻒ ﺗﺼﻨﻊ اﻟﻜﺮﺳﻲ.
وﺗﻘﻮل ﻟﻠﺤﺪاد زﯾﺪ :أرﯾﺪ ھﻨﺎ ﺳﯿﺎﺟﺎ ﺣﺪﯾﺪﯾﺎ .وھﻜﺬا ﻓﻘﺪ أﺻﺒﺤﺖ ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﺧﺘﺼﺎﺻﺎت
ﻣﺎھﺮة ﺗﻌﺮف دﻗﺎﺋﻖ ﻋﻤﻠﮭﺎ.
ھﻜﺬا ﺗﻄﻮرت اﻟﺒﺮﻣﺠﺔ ﻣﻦ ﻣﺠﺮد أواﻣﺮ ﺗﻠﺰﻣﮭﺎ ﻛﻞ ﺧﻄﻮة إﻟﻰ ﺑﺮﻣﺠﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻣﮭﺎم
وﻋﻤﻠﯿﺎت إﻟﻰ ﺑﺮﻣﺠﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻛﺎﺋﻨﺎت ﻟﮭﺎ ﻋﺎﻟﻢ ﺑﺨﺼﺎﺋﺺ واﺧﺘﺼﺎﺻﺎت.
ھﻜﺬا ﺗﻄﻮرت اﻟﺒﺮﻣﺠﺔ ﻣﻦ أﻣﺮ ﺗﻠﻮ أﻣﺮ إﻟﻰ ﺑﺮﻣﺠﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ دوال ،ﻛﻞ داﻟﺔ ﻣﻨﮭﺎ ﺗﻘﻮم
ﺑﻮظﯿﻔﺔ ،إﻟﻰ ﺑﺮﻣﺠﺔ ﺗﻘﻮم ﻋﻠﻰ اﻟﻔﺼﺎﺋﻞ واﻟﻜﺎﺋﻨﺎت ،ﻛﻞ ﻓﺼﯿﻠﺔ ﻟﮭﺎ ﻋﺎﻟﻢ ﻣﻤﯿﺰ ﺑﺪرﺟﺎت وﻗﯿﻢ
ووظﺎﺋﻒ ،ﯾﻤﻜﻦ أن ﯾُﻘﺮن ﺑﮭﺎ ﻛﺎﺋﻦ ﯾﻘﻮم ﻋﻠﻰ ﻣﮭﻤﺔ ﻣﺎ ﻟﻤﻘﺪرﺗﮫ اﻟﻘﯿﺎم ﺑﺎﺳﺘﺪﻋﺎء داﻟﺔ ﻣﺎ
وﺑﺪرﺟﺔ ﻣﺎ.
اذن ﻓﻲ اﻟﻤﻤﺎرﺳﺔ اﻷوﻟﻰ ﻛﺎﻧﺖ أواﻣﺮ ﻣﺒﻌﺜﺮة ﻟﻌﺪم وﺟﻮد اﺧﺘﺼﺎص وﺗﻨﻈﯿﻢ وﺗﺮﺷﯿﺪ .وﻓﻲ
ﻣﺮﺣﻠﺔ ﺑﻌﺪھﺎ ﺳﯿﻜﻮن ھﻨﺎك ورش ﻣﺨﺘﺼﺔ ﺗﻨﺠﺰ ﻣﺠﺘﻤﻌﺔ اﻟﻤﮭﺎم .ﻛﻮرﺷﺔ اﻟﻨﺠﺎرة وورﺷﺔ
اﻟﺤﺪادة وﻏﯿﺮھﺎ .وﻓﻲ ﻣﺮﺣﻠﺔ ﻣﺘﻘﺪﻣﺔ اﻛﺜﺮ ﺳﯿﻜﻮن ﻋﻮاﻟﻢ ﻟﻼﺧﺘﺼﺎﺻﺎت .ﻛﻌﺎﻟﻢ اﻟﻨﺠﺎرة
اﻟﺬي ﻓﯿﮫ ﻟﯿﺲ ورﺷﺔ ﻟﻠﻨﺠﺎرة؛ ﺑﻞ ﻣﺼﻨﻊ وﺷﺮﻛﺔ ﻛﺒﯿﺮة ﻣﺘﻘﺪﻣﺔ وﺗﺠﺪ ﻓﯿﮭﺎ ﻣﻮاد ﻣﺘﻘﻨﺔ
36
وﯾﺴﺘﻄﯿﻊ أو ﺗﺴﺘﻄﯿﻊ اﻧﺖ ان ﺗﺴﺘﻤﺪ ﻣﻨﮫ ﻛﺎﺋﻨﺎت ﻣﺨﺘﺼﺔ ﻓﻲ ھﺬا اﻟﻌﺎﻟﻢ ﻟﯿﺲ ﻛﻨﺠﺎر ﻣﺄﻟﻮف؛
ﺑﻞ ﻛﻤﮭﻨﺪس ﻓﻲ اﻟﻨﺠﺎرة ﻓﮭﻮ ﻗﺪ أﺗﻘﻨﮭﺎ ﻏﺎﯾﺔ اﻻﺗﻘﺎن وﯾﻌﺮف ﻣﺎذا ﯾﻔﻌﻞ ﺑﻤﺠﺮد اﺳﺘﺪﻋﺎﺋﮫ.
ﺍﻟﻔﺼﺎﺋﻞ ﻭﺍﻟﻜﺎﺋﻨﺎﺕ
ﻻﺑﺪ أﻧّﻚ ﻗﺪ رأﯾﺖ ﻋﺎﻟﻢ اﻟﺒﺤﺎر .ورأﯾﺖ ﻋﺎﻟﻢ اﻟﻨﺒﺎت .وﻛﺬﻟﻚ ﻋﺎﻟﻢ اﻟﺤﯿﻮان و و و...
ﻛﻞ ﻋﺎﻟﻢ ھﻮ ﻓﺼﯿﻠﺔ ﺑﺬاﺗﮫ أو ﻓﺼﺎﺋﻞ ﻋﺪﯾﺪة .ﻓﻌﺎﻟﻢ اﻟﺤﯿﻮان ﻓﯿﮫ ﻓﺼﯿﻠﺔ اﻟﺜﺪﯾﺎت وﻓﺼﯿﻠﺔ
اﻟﻼﺛﺪﯾﺎت .أو ﻛﺘﻘﺴﯿﻢ آﺧﺮ ﻧﺠﺪ ﻓﺼﯿﻠﺔ اﻟﺰواﺣﻒ واﻟﻘﻮارض أو آﻛﻼت اﻟﻠﺤﻢ أو ﻏﯿﺮ ذﻟﻚ.
ﻟﻨﻘﻞ ھﻨﺎك ﻓﺼﯿﻠﺔ اﻟﻤﻔﺘﺮﺳﺔ وﻓﺼﯿﻠﺔ اﻟﻤﺄﻟﻮﻓﺔ .اﻟﻤﻔﺘﺮﺳﺔ ﺗﺸﺘﺮك ﺑﺨﺼﺎﺋﺺ ﻋﺎﻣﺔ وﻛﺬﻟﻚ
اﻟﻤﺄﻟﻮﻓﺔ ﻟﮭﺎ ﺧﺼﺎﺋﺼﮭﺎ اﻟﻌﺎﻣﺔ .ﻓﻤﻦ اﻟﻤﻔﺘﺮس ﯾﻤﻜﻦ أن ﻧﺸﺘﻖ اﻻﺳﺪ ﻛﻜﺎﺋﻦ ﻓﻲ ھﺬه اﻟﻔﺼﯿﻠﺔ
أو اﻟﺬﺋﺐ أو اﻟﻨﻤﺮ أو ﻏﯿﺮ ذﻟﻚ.
ﻓﻲ ﻋﺎﻟﻢ ﻛﮭﺬا ﯾﻤﻜﻦ أن ﻧﺠﺪ اﻟﻮراﺛﺔ واﻟﺘﻮرﯾﺚ ﺑﯿﻦ ﺣﯿﻮان وﺣﯿﻮان أو ﺑﯿﻦ ﻓﺼﯿﻠﺔ وأﺧﺮى.
ﺑﻞ ھﻨﺎك ﺣﯿﻮاﻧﺎت ھﺠﯿﻨﺔ ﺗﺄﺧﺬ ﻣﻦ ﻓﺼﯿﻠﺘﯿﻦ .وﻣﺜﻞ ھﺬا ﻓﻲ اﻟﻨﺒﺎت .ﻓﺎﻟﺘﻄﻌﯿﻢ ﻣﺜﻼ ﯾﻌﻄﯿﻚ
ﺛﻤﺮة ﺑﺮﺗﻘﺎل ﻗﺪ أُطﻌﻤﺖ ﻣﻦ ﺷﺠﺮة ﻧﻮم .أو أﺗﺮﻧﺞ أو ﻏﯿﺮ ذﻟﻚ.
ﻣﺜﻞ ھﺬا أﻣﻜﻦ ﻣﺤﺎﻛﺎﺗﮫ ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ .ﻓﮭﻨﺎك ﻓﺼﯿﻠﺔ ﺗﺮﺳﻢ ﻓﯿﮭﺎ ﺧﺼﺎﺋﺺ وﺗﺤﺪد ﻓﯿﮭﺎ
ﻣﮭﺎم وﻋﻤﻠﯿﺎت وﯾﻤﻜﻦ أن ﯾﺸﺘﻖ ﻣﻨﮭﺎ ﻛﺎﺋﻦ ﯾﻤﻜﻨﮫ اﻟﻘﯿﺎم ﺑﺘﻠﻚ اﻟﻌﻤﻠﯿﺎت وﯾﺤﻤﻞ ﺗﻠﻚ
اﻟﺨﺼﺎﺋﺺ.
37
اﻟﻔﺼﯿﻠﺔ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻓﯿﮭﺎ رﺳﻢ اﻟﺸﻲء وﺷﻜﻠﮫ وﺧﺼﺎﺋﺼﮫ وﺗﺤﺪﯾﺪ ﻋﻤﻠﮫ .ﻓﮭﻲ ﻛﺄﻧﮭﺎ ﻛﻠﻤﺎت
ﺗﺮﺳﻢ ﺷﻲء وﺗﺼﻔﮫ وﺗﻌﺒﺮ ﻋﻨﮫ ﺣﻜﺎﯾﺔ ﺑﺘﻔﺼﯿﻞ دﻗﯿﻖ .أﻣﺎ اﻟﻜﺎﺋﻦ ﻓﮭﻮ ﺗﺠﺴﯿﺪ ﻓﻌﻠﻲ ﻟﺬﻟﻚ.
ﻓﻔﺼ ﯿﻠﺔ اﻟﻠﺒﻨﺔ ﻓﯿﮭﺎ ﺗﺤﺪﯾﺪ دﻗﯿﻖ ﻟﺨﻮاص اﻟﻄﯿﻦ أو اﻻﺳﻤﻨﺖ أو ﻣﺎدة اﻟﻠﺒﻨﺔ اﻟﺘﻲ ﺗﺘﻜﻮن ﻣﻨﮭﺎ
ﻛﺎﻟﻘﻮة واﻟﻤﺘﺎﻧﺔ واﻟﻠﻮن وﻏﯿﺮ ذﻟﻚ وﻓﯿﮭﺎ ﺷﻜﻞ اﻟﻠﺒﻨﺔ وﺣﺠﻤﮭﺎ .وﻓﺼﯿﻠﺔ اﻟﺒﺎب ﻓﯿﮭﺎ ﺗﺤﺪﯾﺪ
ﻟﺨﺼﺎﺋﺺ اﻟﺨﺸﺐ وﻓﯿﮭﺎ ﺷﻜﻞ اﻟﺒﺎب وﺣﺠﻤﮫ وﻓﯿﮭﺎ ﻋﻤﻞ اﻟﺒﺎب ﻛﯿﻒ ﯾﺘﺤﺮك ﻟﯿﻜﻮن ﻣﻔﺘﻮﺣﺎ
أو ﻣﻐﻠﻘﺎ .وﻓﺼﯿﻠﺔ اﻟﺸﺒﺎك ﻓﯿﮭﺎ ﺗﺤﺪﯾﺪ ﻟﺨﻮاص ﻣﺎدة اﻟﺤﺪﯾﺪ واﻟﺸﻜﻞ واﻟﺘﻘﺴﯿﻤﺎت واﻟﻌﻤﻞ اﻟﺬي
ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﮫ .وﻏﯿﺮ ذﻟﻚ ﻣﻦ اﻟﻔﺼﺎﺋﻞ.
ﯾﻤﻜﻦ اﻵن أن ﻧﺮﺳﻢ ﻓﺼﯿﻠﺔ اﻟﺒِﻨﺎء اﻟﺘﻲ ﺳﺘﺮث ﻣﻦ ﻓﺼﯿﻠﺔ اﻟﻠﺒﻨﺔ وﻓﺼﯿﻠﺔ اﻟﺒﺎب وﻓﺼﯿﻠﺔ
اﻟﺸﺒﺎك وﻏﯿﺮ ذﻟﻚ .ﺑﻌﺪ ذﻟﻚ ﯾﻤﻜﻦ اﺷﺘﻘﺎق ﺑﻨّﺎء ﻛﻜﺎﺋﻦ ﻣﻦ ﻓﺼﯿﻠﺔ اﻟﺒﻨﺎء .اﻟﺒﻨّﺎء أﺻﺒﺢ ھﻨﺎ
ﺗﺠﺴﯿﺪ ﻓﻌﻠﻲ ﻻ ﻣﺠﺮد ﺣﻜﺎﯾﺔ ورﺳﻢ ﻛﻤﺎ ﻓﻲ إﻧﺸﺎء اﻟﻔﺼﯿﻠﺔ .ﻛﺬﻟﻚ ﯾﻤﻜﻦ اﺷﺘﻘﺎق ﻟﺒﻨﺔ ﻛﺘﺠﺴﯿﺪ
ﻓﻌﻠﻲ ﻟﻔﺼﯿﻠﺔ اﻟﻠﺒﻨﺔ .أو ﯾﻤﻜﻦ اﺷﺘﻘﺎق ﺷﺒﺎك ﻛﻜﺎﺋﻦ ﻣﻦ ﻓﺼﯿﻠﺔ اﻟﺸﺒﺎﺑﯿﻚ وھﻜﺬا.
ﻣﺨﻄﻄﺎت اﻟﺪور اﻟﻤﺨﺘﻠﻔﺔ اﻟﺘﻲ ﯾﺮﺳﻤﮭﺎ اﻟﻤﮭﻨﺪﺳﻮن ﻋﻠﻰ اﻟﻮرق؛ ھﻲ ﺑﻤﺜﺎﺑﺔ اﻟﻔﺼﯿﻠﺔ .أﻣﺎ
اﻟﺒﯿﺖ ﻧﻔﺴﮫ اﻟﺬي ﺑﻨﻲ ﻋﻠﻰ أﺳﺎس ذاك اﻟﻤﺨﻄﻂ ﻓﮭﻮ اﻟﻜﺎﺋﻦ اﻟﻔﻌﻠﻲ اﻟﺬي ﺳﯿﺸﻐﻞ ﻣﻜﺎن ﻓﻌﻠﻲ
ﻋﻠﻰ اﻷرض أو ﻓﻲ اﻟﻔﻀﺎء.
اﻟﻘﺼﺔ ھﻲ وﺻﻒ ﻣﻦ ﻛﻠﻤﺎت ﻟﺸﺨﺼﯿﺎت ﺗﺘﻔﺎﻋﻞ ﻓﯿﻤﺎ ﺑﯿﻨﮭﺎ؛ ﻓﮭﻲ ﺑﻤﺜﺎﺑﺔ اﻧﺸﺎء ﻓﺼﯿﻠﺔ واﻟﻔﯿﻠﻢ
اﻟﺘﻤﺜﯿﻠﻲ وﺷﺨﺼﯿﺎﺗﮫ ﺗﻤﺜﯿﻞ ﺣﻘﯿﻘﻲ ﻟﮭﺎ .ﻓﺎﻟﻘﺼﺔ ﻛﻠﻤﺎت ﻋﻠﻰ ورق ﻟﻢ ﺗﺄﺧﺬ ﻣﻦ اﻷرض ﺷﯿﺌﺎ
ﻓﻌﻠﯿﺎ ﻟﻜﻦ اﻟﻤﻤﺜﻠﯿﻦ ﻋﻠﻰ اﻟﻤﺴﺮح ﺷﻐﻠﻮا ذﻟﻚ اﻟﻤﺴﺮح وأﺧﺬوا ﻣﻦ اﻷرض واﻟﻮاﻗﻊ ﺷﯿﺌﺎ ﻓﻌﻠﯿﺎ
وﻣﻠﻤﻮﺳﺎ وﺷﻐﻠﻮا ﺣﯿﺰا ﻓﯿﺰﯾﺎﺋﯿﺎ ﻣﻠﻤﻮﺳﺎ.
38
ﻓﻲ ﻛﺘﺐ أﺧﺮى ﻗﺪ ﺗﺮى أﻧّﮫ ﯾﺴﻤﻲ اﻟﻔﺼﯿﻠﺔ ﺑﺎﻟﺼﻨﻒ أو اﻟﺼﻒ أو اﻟﻔﺌﺔ أو ﻣﺎﯾﺮادف ذﻟﻚ.
وﺗﺠﺪ اﺳﻢ اﻟﻜﺎﺋﻦ اﻟﺸﻲء أو اﻟﻐﺮض .ذﻟﻚ ﻷن اﻟﻜﺎﺋﻦ ھﻮ ﺷﻲء ﻣﻠﻤﻮس وﺳﯿﻘﻮم ﺑﻤﮭﻤﺔ ﻓﮭﻮ
ﻏﺮض ﻟﺘﻠﻚ اﻟﻤﮭﻤﺔ.
وﺑﻤﺎ أنّ اﻟﻜﺎﺋﻦ ﺷﻲء؛ ﻟﺬﻟﻚ ﯾﻤﻜﻦ ﻟﺸﻲء أن ﯾﺘﻀﻤﻦ ﺷﯿﺌﺎ اﺧﺮ؛ ﻓﺎﻟﻘﻄﺔ ﺷﻲء وﻟﮭﺎ ﻋﯿﻮن
واﻟﻌﯿﻦ ھﻲ ﺷﻲء .وھﻜﺬا أﺻﺒﺤﺖ اﻟﺤﯿﺎة ﻓﻲ اﻟﺒﺮﻣﺠﺔ.
ﺻﻨﺎﺩﻳﻖ ﻣﻐﻠﻘﺔ
أﻧﺖ ﻧﺠﺎر وﻟﺪﯾﻚ ﺧﺒﺮة ﻓﯿﮭﺎ وﯾﻤﻜﻦ أن ﺗﻨﺸﺊ ﻧﺠﺎرﯾﻦ ﻣﮭﺮة ﻣﺜﻠﻚ ﺑﺘﻌﻠﯿﻤﮭﻢ ﻷﻧﻚ ﺧﺒﯿﺮ ﺑﮭﺎ.
ﻟﻜﻦ رﺑﻤﺎ ﻓﻲ ﻣﻜﺎن ﻣﺎ ﺗﺤﺘﺎج إﻟﻰ ﺣﺪاد .اﻟﺤﺪاد اﻟﺬي ﺳﺘﺴﺘﺄﺟﺮه ﻟﯿﺲ ﻣﻦ ﺻﻨﻌﻚ أو ﻟﯿﺲ
أﺣﺪا ﻣﻦ ﺗﻼﻣﺬﺗﻚ؛ ﻓﺎﻟﺤﺪاد ھﻨﺎ ھﻮ ﻣﻦ ﺧﺒﺮات ﻣﺠﮭﻮﻟﺔ ﺑﺎﻟﻨﺴﺒﺔ إﻟﯿﻚ ﻟﻜﻦ ھﺬا ﻟﻦ ﯾﻀﺮك
ﺑﺸﻲء ﻷنّ ﻣﺎ ﺳﯿﺆدﯾﮫ ﻟﻚ ﻟﯿﺲ ﺷﺮطﺎ أن ﺗﻜﻮن ﻋﺎرﻓﺎ ﻷﺳﺮاره وﻛﯿﻒ ﯾﺼﻨﻊ.
ﻣﺜﻞ ذﻟﻚ ﻣﺤﺮك اﻟﺴﯿﺎرة ﻟﯿﺲ ﺷﺮطﺎ أن ﯾﻜﻮن اﻟﺴﺎﺋﻖ ﻋﺎﻟﻤﺎ ﺑﻤﺎ ﯾﺤﺪث ﻓﯿﮫ ﻟﻜﻲ ﯾﻌﺮف ﻛﯿﻒ
ﯾﻘﻮد ﺳﯿﺎرﺗﮫ .وﺳﻮاءا ﻋﺮﻓﺖ ﻛﯿﻒ ﯾﺼﻨﻊ اﻟﻄﻌﺎم أو ﻟﻢ ﺗﻌﺮف ﻓﺎﻟﻨﺘﯿﺠﺔ ﻋﻨﺪ أﻛﻠﮫ ﺳﻮاء.
ﻣﺜﻞ ذﻟﻚ ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ :ﯾﻤﻜﻦ أن ﺗﻨﺸﺊ ﻓﺼﯿﻠﺔ وﯾﺴﺘﻔﯿﺪ ﻣﻨﮭﺎ ﻏﯿﺮك دون أن ﯾﻌﺮف
ﻛﯿﻒ ﻛﺎﻧﺖ ﺧﻄﻮاﺗﻚ وأواﻣﺮك اﻟﺒﺮﻣﺠﯿﺔ ﻓﯿﮭﺎ .وھﺬا ﻣﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺘﻐﻠﯿﻒ أو اﻟﻜﺒﺴﻠﺔ .ـ أي
ﻛﻜﺒﺴﻮﻟﺔ اﻟﺪواء ﺣﯿﻦ ﺗﺸﺮﺑﮭﺎ وأﻧﺖ ﻻﺗﻌﺮف ﻣﻜﻮﻧﺎﺗﮭﺎ ـ.
39
ﺍﻟﺪﺍﻟﺔ ﻭﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ
ﺗﺼﻮر أنّ ﻟﺪﯾﻚ ﺧﻄﻮات ﻣﺤﺪدة ﺗﺆدي إﻟﻰ ﻋﻤﻠﯿﺔ ﻣﺎ أو ﺗﻘﻮم ﺑﻮظﯿﻔﺔ .وأنّ ھﺬه اﻟﺨﻄﻮات
ﻧﻔﺴﮭﺎ ﺗﺘﻜﺮر ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ ھﻨﺎ وھﻨﺎك .ﻋﻨﺪ ذﻟﻚ ﺳﯿﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ طﻮﯾﻼ وﺳﯿﺄﺧﺬ ﺣﯿﺰا
ﻛﺒﯿﺮا.
ھﻨﺎك طﺮﯾﻘﺔ أﺧﺮى ،ھﻲ أن ﺗﺠﻌﻞ ﺗﻠﻚ اﻟﻮظﯿﻔﺔ اﻟﺘﻲ ﺗﺘﻜﺮر ﻛﺒﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﺻﻐﯿﺮ ﺗﻜﺘﺒﮫ
ﻟﻤﺮة واﺣﺪة ﻓﻲ ﻣﻜﺎن ﻣﺎ وﺗﺠﻌﻞ ﻓﻲ ﻧﮭﺎﯾﺘﮫ ﻛﻠﻤﺔ ﻣﺘﻔﻖ ﻋﻠﯿﮭﺎ ﻛﻜﻠﻤﺔ ـ ﻋﻮدة ـ .ﺛﻢ ﻛﻠﻤﺎ دﻋﺖ
اﻟﺤﺎﺟﺔ ﻻﺳﺘﺪﻋﺎﺋﮫ ﻓﺈنّ اﻟﺘﻨﻔﯿﺬ ﯾﻌﻮد إﻟﯿﮫ ﺣﺘﻰ اذا وﺻﻞ ﺗﻠﻚ اﻟﻜﻠﻤﺔ اﻟﻤﺘﻔﻖ ﻋﻠﯿﮭﺎ ﺧﺮج ﻣﻦ
ھﺬا اﻟﺒﺮﻧﺎﻣﺞ اﻟﻔﺮﻋﻲ وﻋﺎد اﻟﺘﻨﻔﯿﺬ إﻟﻰ اﻟﻨﻘﻄﺔ اﻟﺘﻲ ﻛﺎن ﯾﺠﺐ أن ﯾﺼﻞ إﻟﯿﮭﺎ اﻟﺘﻨﻔﯿﺬ ﻗﺒﻞ
اﻧﺘﻘﺎﻟﮫ ﻟﮭﺬا اﻟﺒﺮﻧﺎﻣﺞ اﻟﻔﺮﻋﻲ.
ﻟﻨﻔﺮض أنّ اﻟﺒﺮﻧﺎﻣﺞ وﺻﻞ اﻟﻰ اﻟﺴﻄﺮ اﻟﺴﺎدس اﻟﺬي ﯾﺴﺘﺪﻋﻲ ذﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻔﺮﻋﻲ.
ﺳﯿﻨﺘﻘﻞ اﻟﺘﻨﻔﯿﺬ إﻟﻰ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻔﺮﻋﻲ ﺣﺘﻰ اذا وﺟﺪ ﻛﻠﻤﺔ ) ﻋﻮدة ( ـ ﻣﺜﻼ ـ ﻋﺎد إﻟﻰ اﻟﺒﺮﻧﺎﻣﺞ
اﻷﺻﻞ ﻋﻨﺪ اﻟﺴﻄﺮ اﻟﺴﺎﺑﻊ اﻟﺬي ﻛﺎن ﯾﺠﺐ أن ﯾﺒﻠﻐﮫ ﻗﺒﻞ اﺳﺘﺪﻋﺎﺋﮫ ﻟﻠﺒﺮﻧﺎﻣﺞ اﻟﻔﺮﻋﻲ.
ﻛﻠﻤﺔ ـ ﻋﻮدة ـ ﯾﻤﻜﻦ أن ﯾﻜﻮن ﺑﺠﺎﻧﺒﮭﺎ ﻗﻮﺳﯿﻦ ﺗﺤﻤﻞ ﺑﯿﻨﮭﻤﺎ ﻗﯿﻤﺔ ﻣﺎ أو ﺷﻲء ﻟﺘﻨﻘﻠﮫ إﻟﻰ
اﻟﺒﺮﻧﺎﻣﺞ اﻷﺻﻞ ﻻﺳﺘﺨﺪام ﺗﻠﻚ اﻟﻘﯿﻤﺔ ﻟﺸﻲء ﻣﺎ .ﻓﯿﻤﻜﻦ أن ﺗﺠﺪ ﻛﻠﻤﺔ ـ ﻋﻮدة ـ ھﻜﺬا ـ
ﻋﻮدة)( ـ.
ھﺬا اﻟﺒﺮﻧﺎﻣﺞ اﻟﻔﺮﻋﻲ ﯾﺴﻤﻰ اﻟﺪاﻟﺔ وﻣﺎ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ ﯾﺴﻤﻰ اﻟﻤُﻌﺎﻣَﻞ أو اﻟﻮﺳﯿﻂ أو اﻟﻘﯿﻤﺔ.
40
ﺍﻟﺪﺍﻟﺔ ﻭﺍﳌﻌﺎﻣﻞ
اﻟﺪاﻟﺔ ھﻲ وظﯿﻔﺔ ﯾﻤﻜﻦ أن ﯾﺆدﯾﮭﺎ ﺷﻲء ﻣﺎ .وھﻲ ﺷﻲء ﯾﺪل إﻟﻰ ﺷﻲء آﺧﺮ أو ﯾﺆدي إﻟﯿﮫ.
ﻓﻀﻐﻂ ﻋﺘﻠﺔ اﻟﻮﻗﻮد ﺗﺆدي إﻟﻰ زﯾﺎدة ﺳﺮﻋﺔ اﻟﻤﺮﻛﺒﺔ .وزﯾﺎدة ﺷﺪة اﻟﻜﮭﺮﺑﺎء ﺗﺆدي إﻟﻰ زﯾﺎدة
وھﺞ اﻟﻤﺼﺒﺎح؛ ﻓﻮھﺞ اﻟﻤﺼﺒﺎح ﯾﺪل ﻋﻠﻰ ﺷﺪة اﻟﻜﮭﺮﺑﺎء ﻓﻨﻘﻮل :ﺷﺪة اﻟﻜﮭﺮﺑﺎء داﻟﺔ ﻟﻮھﺞ
اﻟﻤﺼﺒﺎح وﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء ھﻲ ﻣﻌﺎﻣﻞ او وﺳﯿﻂ أدى إﻟﻰ اﻟﺘﺤﻜﻢ ﺑﻘﯿﻤﺔ وھﺞ اﻟﻤﺼﺒﺎح.
أي أن:
إﺿﺎءة وھﺞ اﻟﻤﺼﺒﺎح ،ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻣﻘﺪار ) ﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء (
ھﺬا ﯾﻤﻜﻦ اﻟﺘﻌﺒﯿﺮ ﻋﻨﮫ ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﺑﮭﺬا اﻟﺸﻜﻞ ﺗﻘﺮﯾﺒﺎ:
إﺿﺎءة وھﺞ اﻟﻤﺼﺒﺎح = ﻣﻘﺪار ) ﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء ( ﻣﻀﺮوﺑﺔ ﻓﻲ ﻋﺪد ﻣﺎ.
ﻓﻘﯿﻤﺔ إﺿﺎءة اﻟﻤﺼﺒﺎح ﺳﺘﻜﻮن ﻣﻌﺘﻤﺪة ﻋﻠﻰ وﺳﯿﻂ او ﻣﻌﺎﻣﻞ ھﻮ ﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء اﻟﻤﺎر
ﻓﻲ اﻟﻤﺼﺒﺎح.
ﻛﺬﻟﻚ ،ﻣﻘﺪار درﺟﺔ اﻟﺤﺮارة ﻛﺎن ھﻮ اﻟﻮﺳﯿﻂ اﻟﺬي أدى إﻟﻰ اﻟﺘﺒﺨﺮ أو إﻟﻰ ارﺗﻔﺎع ﻋﻤﻮد
اﻟﺰﺋﺒﻖ ﻓﻲ اﻟﻤﺤﺮار .وﻛﻤﯿﺔ اﻻﻣﻄﺎر اﻟﺴﺎﻗﻄﺔ ﻛﺎﻧﺖ وﺳﯿﻂ ﻻرﺗﻔﺎع ﻣﻨﺴﻮب اﻟﻤﯿﺎه وﻛﺎﻧﺖ
وﺳﯿﻂ ﻟﺰﯾﺎدة اﻟﻤﺤﺎﺻﯿﻞ وھﻜﺬا.
41
ﻓﻤﺎ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ ﺗﺴﻤﻰ وﺳﻄﺎء و ص = ﺟﺬر )س( ﺗﺴﻤﻰ داﻟﺔ اﻟﺠﺬر و ) ص ( ھﻲ ﻗﯿﻤﺔ
داﻟﺔ اﻟﻮﺳﯿﻂ أو اﻟﻘﯿﻤﺔ ـ اﺧﺘﺼﺎرا ؛ أي اﻟﻨﺘﯿﺠﺔ ـ .وﻣﺜﻞ ذﻟﻚ دوال أﺧﺮى ﻛﺜﯿﺮة.
ﺍﻟﺪﺍﻟﺔ
اﻟﺪاﻟﺔ ھﻲ أداء وظﯿﻔﺔ ﻣﺎ وھﻲ ﺧﻄﻮة أو ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات ﺗﺆدي ﺑﻤﺠﻤﻮﻋﮭﺎ اﻟﻰ ﺗﻠﻚ
اﻟﻮظﯿﻔﺔ وﺗﺆدي ﺑﻤﺠﻤﻮﻋﮭﺎ ﻋﻤﻠﯿﺔ ﻣﺎ .ﻓﻠﺼﻨﺎﻋﺔ اﻟﺨﺒﺰ ﻣﻦ اﻟﻄﺤﯿﻦ ﯾﺠﺐ ﺧﻠﻄﮫ ﻣﻊ ﻛﻤﯿﺔ ﻣﻦ
اﻟﻤﺎء ﻟﯿﺼﺒﺢ ﻋﺠﯿﻨﺔ ،ﺑﻌﺪ ذﻟﻚ ﺧﻄﻮة أﺧﺮى ھﻲ إﺿﺎﻓﺔ اﻟﺨﻤﯿﺮة أو أﯾﺔ ﻣﻮاد أﺧﺮى إﻟﻰ
اﻟﻌﺠﯿﻦ ﻟﻜﻲ ﯾﺨﺘﻤﺮ وﯾﺄﺧﺬ ﻧﻜﮭﺔ ﻣﺎ ،ﺑﻌﺪ ذﻟﻚ ﯾﺘﺮك ﻟﻔﺘﺮة ﺣﺘﻰ ﯾﺨﺘﻤﺮ ﺑﻮاﺳﻄﺔ ﻣﻜﺮوﺑﺎت
ﺧﺎﺻﺔ ﻓﻲ اﻟﮭﻮاء .وﺑﻌﺪھﺎ ﯾﻘﻄﻊ وﯾﺠﻌﻞ ﻋﻠﻰ ﺷﻜﻞ أﻗﺮاص ،ﺛﻢ ﯾﺪھﻦ وﺟﮭﮫ وﯾﻮﺿﻊ ﻓﻲ
اﻟﺘﻨﻮر أو اﻟﻔﺮن.
ﻓﻤﺠﻤﻮﻋﺔ اﻟﺨﻄﻮات ﺗﻠﻚ أدت إﻟﻰ ﻋﻤﻠﯿﺔ اﻟﺨﺒﺰ واﻟﺤﺼﻮل ﻋﻠﻰ اﻟﺨﺒﺰ ﻣﻦ اﻟﻄﺤﯿﻦ وﺗﻠﻚ
اﻟﺨﻄﻮات ﻛﻠﮭﺎ ھﻲ وظﯿﻔﺔ اﻟﺨﺒﺎز اﻟﺬ ﻗﺎم ﺑﻜﻞ ﺗﻠﻚ اﻟﺨﻄﻮات .رﺳﻢ وظﯿﻔﺔ ﻣﺎ وﺑﺮﻣﺠﺘﮭﺎ
واﻟﺘﺨﻄﯿﻂ ﻟﮭﺎ ﯾﺴﻤﻰ ﻓﻲ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ إﻧﺸﺎء داﻟﺔ
اﻟﺪاﻟﺔ اذن ﻓﻲ ﺣﻘﯿﻘﺘﮭﺎ ھﻲ ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات ﺑﺮﻣﺠﯿﺔ ﻣﺘﻜﺎﻣﻠﺔ اﻟﮭﺪف وﺗﺆدي إﻟﻰ ﻧﺘﯿﺠﺔ ﻣﺎ
أو ﺗﺤﻘﯿﻖ اﻣﺮ ﻧﺮﯾﺪه وﻗﺪ ﺗﺤﻤﻞ ﻣﻌﮭﺎ ﻗﯿﻤﺔ ﻛﻨﺘﯿﺠﺔ ﻟﺘﻠﻚ اﻟﺨﻄﻮات .ﻓﺎﻟﺨﺒﺎز ﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ
ﯾﺴﺘﻄﯿﻊ ان ﯾﻌﺪ ﻋﺪد اﻻرﻏﻔﺔ اﻟﺘﻲ ﯾﻨﺘﺠﮭﺎ ﻓﻲ اﻟﺴﺎﻋﺔ اﻟﻮاﺣﺪة.
ﻓﻲ اﻟﻤﺼﺒﺎح اﻟﻜﮭﺮﺑﺎﺋﻲ ﻛﺎن اﻟﺘﯿﺎر اﻟﻜﮭﺮﺑﺎﺋﻲ ﯾﻌﺎﻟﺞ اﻟﺴﻠﻚ اﻟﻔﺘﯿﻠﺔ ﻟﻠﻤﺼﺒﺎح ﻓﯿﺠﻌﻠﮭﺎ ﺗﺼﻞ
إﻟﻰ ﻗﯿﻤﺔ ﻣﺎ ﻓﺘﺘﻮھﺞ؛ أي أنّ اﻟﺘﯿﺎر ﻛﺎن ﯾﻘﻮم ﺑﻌﻤﻠﯿﺔ ﻓﻲ اﻟﻤﺼﺒﺎح ﻓﯿﻨﺘﺞ اﻟﻀﻮء ﺑﺸﺪة ﺗﺘﻨﺎﺳﺐ
وﻗﯿﻤﺔاﻟﺘﯿﺎر.
42
ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ھﻨﺎك ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات ﻧﺠﺮﯾﮭﺎ ﻋﻠﻰ ﻋﺪد ﻟﻨﺴﺘﻨﺘﺞ ﺑﻌﺪھﺎ ﺟﺬر ذاك اﻟﻌﺪد أو
ﺷﻲء آﺧﺮ ﻛﻤﺮﺑﻌﮫ أو ﻣﻜﻌﺒﮫ أو ﻏﯿﺮ ذﻟﻚ.
ﻓﻲ اﻟﺒﺮﻣﺠﺔ ھﻨﺎك دوال ﻟﻐﺮض ﻓﻌﻞ ﺷﻲء ووظﯿﻔﺔ ﻧﺮﯾﺪ إﺟﺮاءھﺎ؛ وھﻨﺎك دوال ﯾﻤﻜﻦ
ﺑﻤﺠﻤﻮع ﺧﻄﻮاﺗﮭﺎ أن ﺗﺆدي ﻋﻤﻠﯿﺔ رﯾﺎﺿﯿﺔ ﻓﺘﺨﺮج ﻟﻨﺎ ﻧﺘﯿﺠﺔ ﻧﺤﺘﺎﺟﮭﺎ .ﻓﺎﻟﺪاﻟﺔ ھﻨﺎ أدت
ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات وﺧﺮﺟﺖ ﺑﻨﺘﯿﺠﺔ ﻧﺮﯾﺪھﺎ؛ إﻻ أنّ ھﻨﺎك دوال ﻧﺮﯾﺪھﺎ أن ﺗُﺠﺮي ﺧﻄﻮات
وﻟﺴﻨﺎ ﻧﺮﯾﺪ ﻣﻨﮭﺎ ﻗﯿﻤﺔ ﻧﮭﺎﺋﯿﺔ؛ أي أﻧﻨﺎ ﻧﺮﯾﺪ ﻓﻌﻠﮭﺎ وﻓﻘﻂ .ﻛﺈﺿﺎءة ﻧﻘﻄﺔ ﻣﺎ ﻋﻠﻰ اﻟﺸﺎﺷﺔ او
إﺣﺪاث ﺻﻮت ﻣﺎ.
ﻓﻲ ﻛﺘﺐ أﺧﺮى ﻗﺪ ﺗﺠﺪ ﻟﻠﺪاﻟﺔ أﺳﻤﺎء أﺧﺮى ﻣﺜﻞ اﻟﺘﺎﺑﻊ واﻟﻤﻨﮭﺞ واﻟﻄﺮﯾﻘﺔ وﻏﯿﺮ ذﻟﻚ.
اﻟﻐﺮض ﻣﻦ ھﺬه اﻟﻤﻜﺘﺒﺔ أنّ ﻓﯿﮭﺎ ﺑﺮاﻣﺞ ﻋﺎﻣﺔ ﯾﺴﺘﺨﺪﻣﮭﺎ ﻣﻌﻈﻢ اﻟﻤﺒﺮﻣﺠﻮن ﻓﻲ أﻋﻤﺎﻟﮭﻢ
وﯾﺤﺘﺎﺟﻮن إﻟﯿﮭﺎ .وﻛﺎن ﯾﻤﻜﻦ أن ﺗﺄﺗﻲ اﻟﻠﻐﺔ ﻣﻦ ﻏﯿﺮ ﻣﻜﺘﺒﺔ ﻣﺮاﻓﻘﺔ ﻟﮭﺎ؛ إﻻ أنّ ھﺬا ﻛﺎن
ﺳﯿﺘﻌﺒﻚ؛ ﻷﻧّﮫ ﻛﺎن ﯾﺠﺐ ﻋﻠﯿﻚ أن ﺗﻜﺘﺐ ﻛﻞ ﺷﻲء ﻣﻦ اﻟﺼﻔﺮ ﻟﯿﻜﺘﻤﻞ ﻟﺪﯾﻚ ﺑﺮﻧﺎﻣﺠﻚ؛ إﻻ أنّ
43
اﻟﻤﻜﺘﺒﺔ ﺟﺎءت ﺧﺪﻣﺔ ﻟﻚ وﻣﻦ أﺟﻞ ﻣﺴﺎﻋﺪﺗﻚ وﻷﺟﻞ أن ﺗﮭﺘﻢ أﻧﺖ ﻓﻘﻂ ﺑﺄﺷﯿﺎﺋﻚ اﻟﺨﺎﺻﺔ اﻟﺘﻲ
ﺗﺮﯾﺪ ﺑﺮﻣﺠﺘﮭﺎ ﻣﺴﺘﻔﯿﺪا ﻣﻦ أدوات ﻛﺜﯿﺮة ﻗﺪﻣﮭﺎ ﻟﻚ ﻏﯿﺮك.
داﻟﺔ اﻟﺠﺬر ﻣﺜﻼ اﻟﺘﻲ ﺗﻌﻄﯿﻚ ﺟﺬر أي ﻋﺪد ﺗﺪﺧﻠﮫ؛ ھﺬه اﻟﺪاﻟﺔ ﻗﺪ ﻛﺘﺒﮭﺎ ﻋﻨﻚ ﺧﺒﺮاء وﻛﺘﺒﻮا ﻟﻚ
ﺑﺮاﻣﺞ أﺧﺮى ﻏﯿﺮھﺎ .ﻓﻸﻧﻨﺎ ﻛﻠﻨﺎ ﻧﺤﺘﺎج ﻓﻲ أوﻗﺎت ﻣﺎ إﻟﻰ ﺑﺮﻧﺎﻣﺞ ﯾﻮﺟﺪ ﻟﻨﺎ اﻟﺠﺬر اﻟﺘﺮﺑﯿﻌﻲ
ﻟﻌﺪد ﻣﺎ؛ ﻓﻘﺪ ﻗﺪﻣﻮھﺎ ﻟﻨﺎ ﺟﺎھﺰة ﻓﻲ أﺣﺪ ﺧﺎﻧﺎت اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ.
ﻟﯿﺲ ﻓﻘﻂ داﻟﺔ اﻟﺠﺬر ھﻲ ﻣﺎ ﺗﺤﺘﺎج إﻟﯿﮫ؛ ﺑﻞ ھﻨﺎك اﻟﻜﺜﯿﺮ اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﺪوال واﻷﺻﻨﺎف
واﻷﻏﺮاض وﻏﯿﺮ ذﻟﻚ ،ﻗﺪ ﻗﺪﻣﺖ ﻟﻚ ﺟﺎھﺰة وﻣﺎ ﻋﻠﯿﻚ إﻻ اﺳﺘﺪﻋﺎﺋﮭﺎ ﺑﻄﺮﯾﻘﺔ ﻣﺎ.
اﻟﻤﻜﺘﺒﺔ ﻣﻘﺴﻤﺔ وﻣﻨﻈﻤﺔ ﺑﺸﻜﻞ ﺟﻤﯿﻞ؛ ﻓﮭﻨﺎك ﺧﺎﻧﺔ ﺗﻤﺜﻞ اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ ،وھﻨﺎك ﺧﺎﻧﺔ ﺗﻤﺜﻞ
ﻣﻜﺘﺒﺔ اﻟﻮﻗﺖ واﻟﺘﺎرﯾﺦ وﻣﺎ إﻟﻰ ذﻟﻚ ﻣﻦ ﺧﺎﻧﺎت.
ﺑﻌﺾ اﻟﻠﻐﺎت ﻗﺪ ﺟﻌﻠﺖ اﻟﻮﺻﻮل إﻟﻰ ﻣﻜﺘﺒﺘﮭﺎ ﺑﺸﻜﻞ ﺳﮭﻞ وﻣﺒﺎﺷﺮ وﺑﻤﺠﺮد ﻛﺘﺎﺑﺔ اﺳﻢ اﻟﺪاﻟﺔ
اﻟﺘﻲ ﯾﺮﯾﺪھﺎ ﻣﺜﻼ .أﻣﺎ ﻓﻲ ﻟﻐﺎت أﺧﺮى ﻓﻠﻠﻮﺻﻮل إﻟﻰ ﻣﻜﺘﺒﺔ ﻣﺎ ﻓﯿﺠﺐ اﺳﺘﺨﺪام أدوات ﺗﺴﻤﻰ
اﻟﻤﻮﺟﮭﺎت ﻟﻐﺮض ﺗﻀﻤﯿﻦ وإدراج ﻣﻜﺘﺒﺔ ﻧﺮﯾﺪھﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ.
اﻟﻤﻮﺟﮭﺎت ھﻲ إﺷﺎرات وﻛﻠﻤﺎت ﻣﻌﯿﻨﺔ ﻣﺎ أن ﺗﻜﺘﺐ ﺑﺼﻮرة ﺻﺤﯿﺤﺔ وﯾﻜﺘﺐ ﺑﻌﺪھﺎ ﻧﻮع
اﻟﻤﻜﺘﺒﺔ اﻟﻤﺮادة؛ إﻻ وأ ُﻟﺤﻘﺖ ھﺬه اﻟﻤﻜﺘﺒﺔ ﺑﻤﺎ ﺗﻀﻢ ﺑﺒﺮﻧﺎﻣﺠﻚ وﺻﺎرت ﺗﺎﺑﻌﺔ ﻟﮫ ﻣﺪرﺟﺔ ﻓﯿﮫ.
44
ﺍﻹﺟﺮﺍﺀ
اﻟﺪاﻟﺔ ﻛﻤﺎ ذﻛﺮﻧﺎ ھﻲ ﺧﻄﻮات ﻣﺘﻌﺎﻗﺒﺔ وﻣﺠﻤﻮﻋﺔ ﻋﻤﻠﯿﺎت ﻣﺘﺘﺎﺑﻌﺔ وھﻲ ﻋﺎدة ﺗﺤﻤﻞ ﻗﯿﻤﺔ
ﻧﮭﺎﺋﯿﺔ .ﯾﻤﻜﻦ اﯾﻀﺎ وﺿﻊ ﺧﻄﻮات ﻣﻌﯿﻨﺔ ﻹﻧﺠﺎز ﻋﻤﻞ ﻣﺎ ﻣﻦ دون أن ﻧﺠﻌﻞ ھﺬه اﻟﺨﻄﻮات
ﻓﻲ داﻟﺔ؛ ﻓﮭﻲ ﻣﺠﺮد ﺧﻄﻮات ﻣﺘﺘﺎﺑﻌﺔ ﻧﻀﻌﮭﺎ ﻓﻲ ﻗﺴﻢ ﻣﺎ ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ وﯾﻤﻜﻦ ﻟﻨﺎ اﺳﺘﺪﻋﺎءھﺎ
ﺑﺎﺳﻢ ﻣﺎ ﻣﺘﻰ اردﻧﺎھﺎ.
ﯾﻔﯿﺪ ھﺬا ﻋﻨﺪﻣﺎ ﻧﺤﺘﺎج إﻟﻰ ﻋﻤﻠﯿﺔ ﻣﻌﯿﻨﺔ ﺗﺘﻜﺮر داﺋﻤﺎ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ،ﻓﺒﺪﻻ ﻣﻦ ﻛﺘﺎﺑﺘﮭﺎ ﻓﻲ ﻛﻞ
ﻣﺮة؛ ﺗﻜﺘﺐ ﻓﻘﻂ ﻣﺮة واﺣﺪة وﺗﺴﺘﺪﻋﻰ ﻓﯿﻤﺎ ﺑﻌﺪ ﻓﻲ اﻟﻤﻜﺎن اﻟﻤﻄﻠﻮب ﺑﺎﺳﻤﮭﺎ وﻛﺄنّ ھﺬه
اﻟﺨﻄﻮات ﻗﺪ ﻛﺘﺒﺖ ﻓﻌﻼ ﻓﻲ ﺗﻠﻚ اﻟﻤﻜﺎن اﻟﻤﺮادة ﻓﯿﮭﺎ.
اﻹﺟﺮاء ﺧﻄﻮات ﻻﺗﻌﻮد ﺑﻘﯿﻤﺔ؛ ﻓﻘﻂ ﺗﻨﺠﺰ ﻋﻤﻼ ﻣﻌﯿﻨﺎ وﻛﻔﻰ .ﻓﮭﻲ اﻗﺮب إﻟﻰ اﻟﺪاﻟﺔ اﻟﺘﻲ ﻻ
ﺗﻌﻮد ﺑﻘﯿﻤﺔ .ﻟﻜﻦ ﻟﻢ ﯾﺼﺮح ﻋﻨﮭﺎ ﻛﺪاﻟﺔ وإﻧﻤﺎ ﻛﺨﻄﻮات ﻋﺎدﯾﺔ ﺗﺘﻌﺎﻗﺐ وﺗﺴﺘﺪﻋﻰ ﺑﺎﺳﻢ ﯾﻮﺿﻊ
ﻟﮭﺎ.
ﻃﺮﻕ ﺍﻟﺘﻤﻴﻴﺰ
ﺗﺴﺘﻄﯿﻊ أﻧﺖ ﻛﺈﻧﺴﺎن أن ﺗﻤﯿﺰ ﺑﺄﺣﺪ ﺷﯿﺌﯿﻦ؛ إﻣﺎ ﺑﻨﻮع اﻷﺷﯿﺎء أو ﺑﺤﺠﻤﮭﺎ وﺑﻜﻤﯿﺘﮭﺎ وﻋﺪدھﺎ.
ﻓﺘﺴﺘﻄﯿﻊ أن ﺗﻤﯿﺰ ﻣﺪرﺳﺔ اﻟﺒﻨﺎت ﻋﻦ ﻣﺪرﺳﺔ اﻟﺒﻨﯿﻦ ﺑﺎﻟﻨﻈﺮ اﻟﻰ ﻧﻮع اﻟﺠﻨﺲ اﻟﺬي ﺗﺤﻮﯾﮫ
اﻟﻤﺪرﺳﺔ .ﻓﺎﻹﻧﺎث ﻓﻲ ﻣﺪرﺳﺔ اﻟﺒﻨﺎت واﻟﺬﻛﻮر ﻓﻲ ﻣﺪرﺳﺔ اﻟﺒﻨﯿﻦ.
وﺗﺴﺘﻄﯿﻊ أن ﺗﻤﯿﺰ ﻋﻮاﺋﻞ ﻛﻞ ﺑﯿﺖ ﺑﻌﺪد أﻓﺮاد ﻛﻞ ﻋﺎﺋﻠﺔ .ﻓﮭﺬه ﻋﺎﺋﻠﺔ ﻣﻦ ارﺑﻌﺔ أﻓﺮاد وﺗﻠﻚ
ﻋﺎﺋﻠﺔ ﻣﻦ ﺳﺒﻌﺔ.
ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺳﯿﻤﯿﺰ اﻟﻤﺘﺮﺟﻢ دواﻟﻚ إﻣﺎ ﺑﻨﻮع ﺑﯿﺎﻧﺎﺗﮭﺎ او ﺑﻌﺪد ﻣﻌﺎﻣﻼﺗﮭﺎ ووﺳﺎﺋﻄﮭﺎ.
45
ﺍﻟﺘﺨﻄﻴﻂ ﻭﺍﻟﱪﳎﺔ
ھﻨﺎك ﻋﻼﻗﺔ وﺛﯿﻘﺔ ﺑﯿﻦ اﻟﺘﻔﻜﯿﺮ وﺑﯿﻦ اﻟﺒﺮﻣﺠﺔ اﻻﻟﯿﺔ ﻓﻲ اﻟﺤﺎﺳﺒﺔ .ﻓﺎﻟﺘﻔﻜﯿﺮ ﯾﺮﺟﻊ إﻟﻰ ﺧﻄﻮات
ﻣﻨﻄﻘﯿﺔ ﺗﺆدي إﻟﻰ ﻧﺘﯿﺠﺔ ،واﻟﺒﺮﻣﺠﺔ ھﻲ اﻟﺘﻔﻜﯿﺮ ﺑﺨﻄﻮات ﺗﺆدي إﻟﻰ ﺣﻞ .ﻓﻜﻼھﻤﺎ ﯾﻜﺎد
ﯾﻜﻮن ﺗﻌﺮﯾﻔﮭﻤﺎ واﺣﺪ.
ﻓﻲ ھﺬا اﻟﻜﺘﺎب ﻧﺘﻌﺮض ﻟﻸﺳﺲ اﻷوﻟﻰ واﻟﻤﻔﺎھﯿﻢ اﻷوﻟﯿﺔ ﻟﺤﻞ أي ﻣﺸﻜﻠﺔ ورﺑﻂ ذﻟﻚ ﺑﻘﻮاﻋﺪ
وإﻣﻜﺎﻧﯿﺎت ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ وﺳﻨﺨﺘﺎر ﻟﺬﻟﻚ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ اﻟﺸﮭﯿﺮة C++واﻟﺠﺪﯾﺪة . C#
46
ﻓﻔﻲ ﻣﺸﻜﻠﺔ اﻟﻤﺴﺘﻄﯿﻞ ھﻨﺎل ﻣﻌﻄﯿﺎت اﻟﻄﻮل واﻟﻌﺮض وﻹﯾﺠﺎد اﻟﻤﺴﺎﺣﺔ ﻓﻌﻤﻠﯿﺔ اﻻﻗﺮان
اﻟﺮﯾﺎﺿﯿﺔ ھﻨﺎ ھﻲ اﻟﻀﺮب.
وھﻜﺬا ﻓﻠﻜﻞ داء دواء؛ ﻓﺎﻻﻧﺴﺎن ﻓﻲ ھﺬه اﻻرض ﯾﺘﻌﺮض ﻻﻣﺮاض ﻋﺪﯾﺪة ،ﻛﻞ ﻣﺮض ﯾﻤﻜﻦ
ان ﯾﻮﺟﺪ ﻟﮫ ﻋﻼج ﻣﻦ ﻋﺸﺐ أو ﻧﺒﺘﺔ ﻣﻌﯿﻨﺔ او ﺑﺨﻼﺻﺔ ﻧﺒﺘﺔ ﻣﻦ ھﻨﺎ وﻧﺒﺘﺔ ﻣﻦ ھﻨﺎك.
ﻓﻜﻞ ﻣﺴﺄﻟﺔ إذن ﯾﺎﺗﻲ ﻣﻌﮭﺎ اﻣﻜﺎﻧﯿﺎت ﺣﻠﻮل ﻟﮭﺎ .ﻓﻌﻠﻰ اﻻﻧﺴﺎن اﻟﺬي ﯾﺒﺤﺚ ﻋﻦ ﺣﻞ ان
ﯾﺴﺘﻘﺼﻲ ﺗﻠﻚ اﻻﺷﯿﺎء واﻻﻣﻜﺎﻧﯿﺎت وﯾﺨﺘﺒﺮھﺎ ﺟﯿﺪاً.
اﻟﺨﻠﻂ ﺑﯿﻦ ﻣﺎدة واﺧﺮى ﯾﺆدي إﻟﻰ ﺷﻲء آﺧﺮ ھﻮ ﻏﯿﺮ اﻟﺨﻠﻂ ﺑﯿﻦ اﺣﺪ ﺗﻠﻚ اﻟﻤﺎدﺗﯿﻦ وﻣﺎدة
ﺛﺎﻟﺜﺔ ﻏﯿﺮھﻤﺎ .واﺳﺘﻌﻤﺎل اﻟﺤﺮارة ﺑﯿﻦ ﻣﺎدﺗﯿﻦ ﻗﺪ ﯾﻌﻄﻲ ﻧﺎﺗﺠﺎ ً ﻣﺨﺘﻠﻔﺎ ً إذا ﻣﺎﺳﺘﻌﻤﻠﺖ اﻟﻜﮭﺮﺑﺎء
ﻣﺜﻼً ﺑﯿﻨﮭﻤﺎ.
ﻓﺎﻹﻧﺴﺎن إذن ﯾﺠﺮب وﯾﺨﺘﺒﺮ وﻗﺪ ﯾﻌﻮد ﻻﺧﺘﺒﺎر ﺟﺪﯾﺪ آﺧﺮ ﻓﻲ ﺣﺎل ﻟﻢ ﯾﺼﻠﺢ اﻻﺧﺘﺒﺎر اﻷول
ﻓﯿﻜﻮن ھﻨﺎ ﻗﺪ اﺗﺨﺬ ﻗﺮارا.
ﻣﻦ ﻛﻞ ھﺬا ﻧﺠﺪ ان اﻻﻧﺴﺎن ﯾﻨﻈﺮ إﻟﻰ اﻟﻤﺴﺄﻟﺔ وﯾﺘﻔﮭﻤﮭﺎ وﯾﺤﺪد اﻟﻤﺸﻜﻞ ﻓﯿﮭﺎ وﯾﻨﻈﺮ إﻟﻰ
اﻻﺷﯿﺎء واﻻﻣﻜﺎﻧﯿﺎت اﻟﻤﺘﻮﻓﺮة وﯾﺨﺘﺒﺮھﺎ اﺧﺘﺒﺎرات ﻋﺪﯾﺪة وﯾﺮى ﻧﺘﯿﺠﺔ ﻛﻞ اﺧﺘﺒﺎر وھﻞ اﻓﺎد
اﻟﺤﻞ ام ان ﻋﻠﯿﮫ ان ﯾﻌﻮد ﻓﯿﺠﺮي اﺧﺘﺒﺎر اﺧﺮ وھﻜﺬا.
ﻣﻦ ھﻨﺎ ﯾﻤﻜﻦ ان ﻧﺤﺪد اﻟﺨﻄﻮات اﻟﻮاﺟﺒﺔ ﺣﯿﻦ اﻟﺸﺮوع ﻓﻲ إﯾﺠﺎد ﺣﻞ ﻟﻤﺴﺄﻟﺔ ﻣﺎ .ھﺬه
اﻟﺨﻄﻮات ھﻲ:
اﻟﻔﮭﻢ اﻟﺸﺎﻣﻞ ﻟﻠﻤﺴﺄﻟﺔ
ﻣﻌﺮﻓﺔ اﻟﻤﻄﻠﻮب ﻣﻨﮭﺎ
47
ﻣﻌﺮﻓﺔ ودراﺳﺔ اﻻﻣﻜﺎﻧﯿﺎت واﻻﺷﯿﺎء اﻟﻤﺘﻮﻓﺮة ﻣﻌﮭﺎ واﻟﻤﻌﻠﻮﻣﺎت واﻟﻤﻌﻄﯿﺎت.
ﻓﺤﺺ اﻟﻤﻌﻄﯿﺎت واﺧﺘﺒﺎرھﺎ وﻣﻌﺮﻓﺔ اﻗﺘﺮاﻧﺎﺗﮭﺎ وطﺒﯿﻌﺔ ﻛﻞ ﺣﻞ ﻧﺎﺗﺞ
ﺗﻄﺒﯿﻖ اﻟﺤﻞ ﻓﺎن ﻟﻢ ﯾﻔﺪ ﯾﺘﻢ اﻟﻌﻮدة ﻻﺧﺘﺒﺎر آﺧﺮ وھﻜﺬا.
ـ ﻗﺪ ﯾﻌﺮف اﻟﻤﺠﺮب ﺣﻞ ﺳﺎﺑﻖ ﻓﯿﻌﻮد إﻟﯿﮫ ـ
ﻧﺠﺪ ﻓﻲ اﻟﺨﻄﻮات اﻟﺴﺎﺑﻘﺔ ﺗﻜﺮار واﺧﺘﺒﺎر أو اﻟﻌﻮدة اﻟﻰ ﺷﻲء ﺳﺎﺑﻖ؛ وﻣﻦ ھﻨﺎ ﻛﺎن ﻓﻲ ﻟﻐﺎت
اﻟﺒﺮﻣﺠﺔ أدوات اﺗﺨﺎذ اﻟﻘﺮار اﻟﺸﺮطﯿﺔ وﺟﻤﻞ اﻟﺘﻜﺮار واﻟﺪوران وﺟﻤﻠﺔ اﻟﺬھﺎب إﻟﻰ.
48
ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ
اﻟﻨﺎظﺮ ﻓﻲ اﻟﺤﯿﺎة ﺳﯿﺠﺪ ھﻨﺎك ﻣﻌﻠﻮﻣﺎت ﻣﺘﻨﻮﻋﺔ ﻛﺜﯿﺮة .ﻓﮭﻨﺎك اﻻﻟﻮان .وھﻨﺎك اﻷﺻﻮات.
وھﻨﺎك اﻷرﻗﺎم .وھﻨﺎك اﻟﺤﺮوف .وھﻨﺎك أﺷﯿﺎء أﺧﺮى ﻛﺜﯿﺮة.
إذا ﻣﺎﺟﺌﻨﺎ إﻟﻰ اﻻﻧﺴﺎن ﻟﺮأﯾﻨﺎ أنّ اﺳﻤﮫ ﺑﺤﺎﺟﺔ إﻟﻰ ﺑﯿﺎﻧﺎت ﻣﻦ ﻧﻮع اﻟﺤﺮوف ﻻ ﻣﻦ ﻧﻮع
اﻷرﻗﺎم .وإذا ﻣﺎﺟﺌﻨﺎ إﻟﻰ ﻣﻘﺎﯾﯿﺲ اﻟﻄﻮل ﻟﺮأﯾﻨﺎ أﻧّﮭﺎ ﺑﺤﺎﺟﺔ إﻟﻰ ﺑﯿﺎﻧﺎت ﻣﻦ ﻧﻮع اﻻرﻗﺎم ﻻ ﻣﻦ
ﻧﻮع اﻟﺤﺮوف.
أذا ﻣﺎ ﺟﺌﻨﺎ إﻟﻰ اﻷﻋﺪاد ﻟﺮأﯾﻨﺎ أنّ ھﻨﺎك ﻣﺎ ﯾﺤﺘﺎج إﻟﻰ أﻋﺪاد ﺻﺤﯿﺤﺔ ﻟﯿﺲ ﻓﯿﮭﺎ ﻋﺸﺮ أو رﺑﻊ
أو ﻧﺼﻒ أو ﻣﺜﻞ ذﻟﻚ .ﻓﺎﻻﻧﺴﺎن ﯾﺄﻛﻞ ﺛﻼث وﺟﺒﺎت ﻓﻲ اﻟﯿﻮم وﻻ ﯾﻤﻜﻦ ان ﻧﻘﻮل ﯾﺄﻛﻞ
وﺟﺒﺘﯿﻦ وﻧﺼﻒ ﻣﮭﻤﺎ ﻛﺎن ﻣﻘﺪار اﻟﻄﻌﺎم اﻟﻤﻘﺪم ﻓﻲ اﻟﻮﺟﺒﺔ ﻷنّ ﻛﻞ ﻣﻘﺪار ﻣﻦ اﻟﻄﻌﺎم ﯾﺴﻤﻰ
وﺟﺒﺔ ﺻﻐﯿﺮة ﻛﺎﻧﺖ أو ﻛﺒﯿﺮة .ﻛﺬﻟﻚ ﻋﺪد اﻟﻄﻼب ﻓﻲ ﺻﻒ ﻣﺎ ﻧﻘﻮل 30طﺎﻟﺐ أو 40أو
41أو 42أو .43وﻻ ﯾﻤﻜﻦ ان ﻧﻘﻮل . 43.5ﻓﻤﺜﻞ ذﻟﻚ اﺣﺘﺎج إﻟﻰ أﻋﺪاد ﺻﺤﯿﺤﺔ ﻟﯿﺲ ﻓﯿﮭﺎ
ﻛﺴﺮ.
إﻻ أنّ ھﻨﺎك أﺷﯿﺎء ﻗﺪ ﺗﺘﻄﻠﺐ ﻗﯿﻤﮭﺎ أن ﻧﻘﻮل :ﻛﺬا وﻧﺼﻒ .أو ﻛﺬا وﻋﺸﺮ .وھﻜﺬا .ﻓﮭﺬه ﺗﺴﻤﻰ
أﻋﺪاد ﻋﺸﺮﯾﺔ أو ﻛﺴﺮﯾﺔ ﻛﻄﻮل ﺿﻠﻊ ﺷﻜﻞ ﻣﺎ ﻗﺪ ﯾﻜﻮن ﻣﺜﻼ 5.2أو 10.25أو ﻏﯿﺮ ذﻟﻚ.
اﻷﻋﺪاد اﻟﻌﺸﺮﯾﺔ ھﻨﺎ ﺗﻀﻤﻨﺖ اﻷﻋﺪاد اﻟﺼﺤﯿﺤﺔ وﺟﺰء آﺧﺮ أﺻﻐﺮ ھﻮ اﻟﻜﺴﺮ اﻟﻌﺸﺮي.
ھﻨﺎك ﻣﺴﺎﺋﻞ ﻻ ﺗﺘﻄﻠﺐ ارﻗﺎﻣﺎ أو ﻛﻠﻤﺎت ﺑﻞ ﺗﺘﻄﻠﺐ إﺟﺎﺑﺔ ﻣﻦ ﻧﻮع ﺧﺎص ﻛﺄن ﺗﻘﻮل :ھﺬا
ﺻﺤﯿﺢ أو ﺧﻄﺄ.
وھﻜﺬا ﻓﮭﻨﺎك اﻧﻮاع أﺧﺮى ﻣﺨﺘﻠﻔﺔ ﻣﻦ اﻟﺒﯿﺎﻧﺎت وﻟﻜﻞ ﺷﻲء ﺑﯿﺎﻧﺎت ﺧﺎﺻﺔ ﺑﮫ ﯾﺤﺘﺎﺟﮭﺎ ﻓﻲ
ﺟﺎﻧﺐ ﻣﺎ.
49
ﺍﻟﻮﺭﺍﺛﺔ
ﯾﻨﻈﺮ اﻟﻤﺘﻔﺤﺺ إﻟﻰ اﻟﺤﯿﺎة ﺑﺎﺷﯿﺎﺋﮭﺎ وﻣﻌﻄﯿﺎﺗﮭﺎ ﻓﯿﺠﺪ أنّ ھﻨﺎك ﻋﻼﻗﺔ ﻣﺎﺑﯿﻦ ﺗﻠﻚ اﻻﺷﯿﺎء.
ﻓﻌﺎﻟﻢ اﻟﻨﺒﺎت ﻓﯿﮫ اﻻﺷﺠﺎر واﻟﺤﺸﺎﺋﺶ إﻻ أﻧﮭﺎ ﺗﺘﺸﺎﺑﮫ ﻓﻲ أﻣﻮر ﻛﺜﯿﺮة ﻛﺎﻟﺨﻀﺮة وأنّ ﻟﮭﺎ ﺟﺬر
ﯾﻤﺘﺪ ﺗﺤﺖ اﻷرض وأﻧﮭﺎ ﺗﺨﺘﻠﻒ ﻓﻲ ﺟﻮاﻧﺐ أﺧﺮى ﻛﺎﻟﺤﺠﻢ وﻧﻮع اﻟﺜﻤﺮ وﻏﯿﺮ ذﻟﻚ.
أﻧﺖ ﻓﯿﻚ ﺷﺒﮫ ﻣﻦ أﺑﻮﯾﻚ وأﻗﺎرﺑﻚ؛ ﻓﻘﺪ ورﺛﺖ ﻣﻨﮭﻢ وأﺧﺬت ﻋﻨﮭﻢ .اﻟﻄﯿﻮر ﺗﻜﺎد ﺗﻜﻮن
ﻣﺘﺸﺎﺑﮭﺔ ﯾﻔﺮﻗﮭﺎ وﯾﻤﯿﺰھﺎ أﺷﯿﺎء وﺧﺼﺎﺋﺺ ﻣﺎ .ﻓﺎﻟﻌﺼﻔﻮر واﻟﻠﻘﻠﻖ واﻟﻨﺴﺮ واﻟﺼﻘﺮ واﻟﻐﺮاب
وﻏﯿﺮ ذﻟﻚ؛ اﻟﻜﻞ ﯾﻄﯿﺮ ﺑﺠﻨﺎﺣﯿﻦ؛ إﻻ أنّ اﻟﺼﻘﺮ ﻣﻔﺘﺮس ﯾﺘﻐﺬى ﻋﻠﻰ اﻟﻠﺤﻮم واﻟﻌﺼﻔﻮر
ﺻﻐﯿﺮ وﯾﺘﻐﺬى ﻋﻠﻰ اﻟﺤﺒﯿﺒﺎت وﻣﺜﻠﮫ اﻟﻠﻘﻠﻖ ﻟﻜﻨﮫ ﻛﺒﯿﺮ.
اﻟﻄﺎﺋﺮة :ﺗﻄﯿﺮ أﯾﻀﺎ ﺑﺠﻨﺎﺣﯿﻦ إﻻ أﻧّﮭﺎ اﺳﺮع وﺗﺘﻐﺬى ﻋﻠﻰ اﻟﻨﻔﻂ.
ھﻨﺎك اذن أﻣﻮر ﻣﺸﺘﺮﻛﺔ ﻛﺎﻧﺖ ﺑﺎﻟﻮراﺛﺔ واﻟﺘﻌﻠﻢ واﻻﻛﺘﺴﺎب .وھﺬا ﻣﺎ ﻟﻤﺤﮫ اﻟﻤﺒﺮﻣﺠﻮن
اﻟﺨﺒﺮاء ﻓﺠﻌﻠﻮا ﻟﻐﺎﺗﮭﻢ اﻟﺒﺮﻣﺠﯿﺔ ﯾﻤﻜﻦ ﻟﮭﺎ أن ﺗﺤﺎﻛﻲ ﻣﺜﻞ ﻣﺎ ﻓﻲ اﻟﺤﯿﺎة ﻣﻦ ﺗﻮرﯾﺚ وﻏﯿﺮھﺎ.
أرﺳﻢ ﻧﻘﻄﺔ .وارﺳﻢ ﺧﻂ .ﺛﻢ اﻧﻈﺮ :اﻟﺨﻂ ھﻮ ﻣﺠﻤﻮﻋﺔ ﻧﻘﺎط ،وﻛﺬﻟﻚ اﻟﺪاﺋﺮة ھﻲ ﻣﺠﻤﻮﻋﺔ
ﻧﻘﺎط ﻟﻜﻨﮭﺎ ﺑﺘﺮﺗﯿﺐ ﻣﺨﺘﻠﻒ.
اﻟﻨﻈﺮ ﻓﻲ اﻟﻤﻌﻄﯿﺎت واﻟﻌﻼﻗﺔ ﺑﯿﻨﮭﺎ ﯾﻤﻜﻦ ان ﯾﺆدي إﻟﻰ ﺧﻠﻖ ﻣﻌﻄﯿﺎت ﺟﺪﯾﺪة ﺗﻘﻮد إﻟﻰ اﻟﺤﻞ
ﺑﻄﺮﯾﻘﺔ أﺧﺮى ﻣﺒﺘﻜﺮة.
50
ﺍﻟﺘﺠﺮﻳﺪ
ﻧﻈﺮﺗﻲ اﻟﺴﺎﺑﻘﺔ اﻟﺘﻲ ﺟﻌﻠﺘﻨﻲ أﺟﺪ أنّ ھﻨﺎك ﺻﻔﺎت وﺧﺼﺎﺋﺺ ﻣﺘﺸﺎﺑﮭﺔ ﺑﯿﻦ اﻻﺷﯿﺎء ﺟﻌﻠﺘﻨﻲ
أﻓﻜﺮ ﺑﺄنّ ﻛﻞ اﻷﺷﯿﺎء ﯾﻤﻜﻦ أن ﺗﻌﻮد ﻷﺻ ٍﻞ واﺣﺪ ﺛﻢ ﺗﻐﯿﺮت اﻟﺼﻔﺎت واﻟﺨﺼﺎﺋﺺ ﺷﯿﺌﺎ
ﻓﺸﯿﺌﺎ إﻻ أنّ اﻷﺻﻞ ﻛﺎن ﻣﻦ ھﯿﻜﻞ واﺣﺪ وﺑﺎطﺎر ﻋﺎم واﺣﺪ ﺗﻐﯿﺮ ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ.
ھﻜﺬا ﺣﺎول أن ﺗﻔﻜﺮ واﻧﺖ ﺗﺼﻨﻊ ﺑﺮﻧﺎﻣﺞ ﺗﺮﯾﺪ ﻟﻐﯿﺮك ان ﯾﺴﺘﻔﯿﺪ ﻣﻨﮫ.
ﻓﻠﺮﺑﻤﺎ ﻓﻜﺮت أن ﺗﺼﻨﻊ ﺑﺮﻧﺎﻣﺞ ﻣﮭﻤﺘﮫ أن ﯾﺮﺳﻢ اﻟﻌﯿﻮن ﻣﮭﻤﺎ ﻛﺎﻧﺖ وﺑﻄﺮق ﻋﺪﯾﺪة واﺷﻜﺎل
ﻣﺨﺘﻠﻔﺔ .ﻋﻠﯿﻚ اذن ان ﻻﺗﺠﻌﻞ ﻟﻠﻌﯿﻦ اﻟﺘﻲ ﯾﺮﯾﺪ اﻟﻤﻘﺎﺑﻞ ﺗﻐﯿﯿﺮھﺎ؛ ﻋﻠﯿﻚ ان ﻻ ﺗﺠﻌﻠﮭﺎ ﺑﻠﻮن
ﻣﻌﯿﻦ ﻻ ﯾﺘﻐﯿﺮ .ﻋﻠﯿﻚ أن ﻻ ﺗﺠﻌﻠﮭﺎ ﺑﺤﺠﻢ واﺣﺪ ﺛﺎﺑﺖ .ﻋﻠﯿﻚ أن ﻻ ﺗﺠﻌﻠﮭﺎ ﺑﺸﻜﻞ ﺑﯿﻀﻮي أو
ﻣﺪور أو ﻏﯿﺮ ذﻟﻚ .ﻋﻠﯿﻚ اذن أن ﺗﺠﺮدھﺎ ﻣﻦ ذﻟﻚ وﻻ ﺗﻀﻊ اﻻ اﻻطﺎر اﻟﻌﺎم واﻟﮭﯿﻜﻞ
اﻟﺘﺨﻄﯿﻄﻲ اﻟﺬي ﯾﻤﻜﻦ أن ﯾﻘﺒﻞ أي ﺻﻔﺎت أﺧﺮى وﯾﺘﻐﯿﺮ ﺑﺤﺠﻤﮫ وﻟﻮﻧﮫ وﻛﻞ ﺧﺼﺎﺋﺼﮫ.
وھﻜﺬا ﯾﻤﻜﻦ ﻟﮭﺬه اﻟﻌﯿﻦ ان ﺗﻜﻮن اﻟﻒ ﻋﯿﻦ ﺑﺄﻟﻒ ﺷﻜﻞ ﻣﺘﻐﯿﺮ أو ﻏﯿﺮ ذﻟﻚ.
ﻟﻌﻠﻚ ﻛﺬﻟﻚ ﺗﻔﻜﺮ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﯾﻘﺪم ﻣﺨﺘﻠﻒ اﻧﻮاع اﻟﺴﯿﺎرات؛ ﻣﻦ اﻷﻓﻀﻞ أن ﻻ ﺗﻔﻜﺮ ﺑﮭﺬا؛
ﻓﻠﻌﻠﻚ ﺑﻌﺪ ﻗﻠﯿﻞ ﺗﻔﻜﺮ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﯾﻘﺪم اﻧﻮاع اﻟﻄﺎﺋﺮات .ﻣﻦ اﻷﻓﻀﻞ اذن أن ﺗﻔﻜﺮ ﺑﺸﻲء
ﯾﻤﻜﻦ أن ﺗﻀﻊ ﻟﮫ ﻋﺠﻠﺔ ﻓﯿﻜﻮن ﺳﯿﺎرة أو ﺗﻀﻌﮫ ﺷﻲء ﺑﺠﺎﻧﺐ ﺷﻲء ﻓﯿﻜﻮن ﻗﻄﺎرا أو ﺗﻀﻊ ﻟﮫ
ﺟﻨﺎﺣﯿﻦ ﻓﯿﻜﻮن طﺎﺋﺮة أو ﺗﺠﻌﻠﮫ ﯾﺮﺗﻔﻊ وﯾﻨﺨﻔﺾ ﻓﯿﻜﻮن ﻛﺎﻟﻤﺼﻌﺪ .ﻣﻦ اﻷﻓﻀﻞ اذن أن ﻻ
ﺗﻔﻜﺮ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﯾﺼﻨﻊ ﺳﯿﺎرة وآﺧﺮ ﯾﻘﺪم طﺎﺋﺮة وآﺧﺮ ﯾﻘﺪم ﺳﻔﯿﻨﺔ و و و؛ ﻓﺄﻓﻀﻞ ﻣﻦ ﻛﻞ
ذﻟﻚ أن ﺗﻔﻜﺮ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﯾﻘﺪم آﻟﺔ ﯾﻤﻜﻨﮭﺎ أن ﺗﺘﺤﺮك ﻓﺘﻜﻮن ﺑﻮﺿﻊ ﺷﻲء ﺑﺴﯿﻂ ﺳﯿﺎرة ،أو
ﺑﻮﺿﻊ ﺷﻲء ﺑ ﺴﯿﻂ طﺎﺋﺮة ،أو ﺑﻔﻌﻞ ﺷﻲء ﻣﺎ ﯾﺠﻌﻠﮭﺎ ﺑﺎﺧﺮة وھﻜﺬا ﻓﺄﻧﺖ ﺗﻔﻜﺮ ﻓﻲ اﻷﺻﻞ
وﻛﯿﻒ ﯾﻤﻜﻦ أن ﯾﺘﻄﻮر.
51
ﺍﳌﺘﺮﺍﺩﻓﺎﺕ ﻭﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺋﺪ
اﻟﻤﺘﺮادﻓﺎت ﻛﻠﻤﺎت ﺗﻜﺎد ﺗﻜﻮن ﺑﻤﻌﺎﻧﻲ ﻣﺘﺸﺎﺑﮭﺔ ﻛﻘﻮﻟﻚ :ﺗﻜﻠﻢ ﺣﺴﻦ أو :ﺗﺤﺪث ﺣﺴﻦ .أو ﺗﻘﻮل
ﻓﻼن ﺳﻌﯿﺪ أو ﺗﻘﻮل ﻓﻼن ﻣﺴﺮور أو ﺗﻘﻮل ﻓﻼن ﻓﺮح .ﻓـ ) ﺳﻌﯿﺪ ،ﻣﺴﺮور ،ﻓﺮح ( ﻛﻠﻤﺎت
ﺗﻘﺮﯾﺒﺎ ﺑﻨﻔﺲ اﻟﻤﻌﻨﻰ ﻧﺴﻤﯿﮭﺎ ﻣﺘﺮادﻓﺔ اﻟﻤﻌﻨﻰ.
ﻛﺎن اﻟﺮﻣﺰ ) ( +ﯾﺴﺘﺨﺪم أوﻻ ﻓﻲ ﻣﺠﺎل اﻟﺮﯾﺎﺿﯿﺎت ﻟﻠﺘﻌﺒﯿﺮ ﻋﻦ ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ ﻓﺘﻘﻮل ) + 7
( 8أي ﺳﺒﻌﺔ ﻣﻀﺎﻓﺎ ﻟﮭﺎ ﺛﻤﺎﻧﯿﺔ أي ﺳﺒﻌﺔ ) و ( ﺛﻤﺎﻧﯿﺔ .ﻣﺜﻞ ذﻟﻚ ﻛﺎن ﺣﺮف اﻟﻌﻄﻒ )و(
ﯾﺴﺘﺨﺪم ﺑﯿﻦ اﻷﺷﯿﺎء ﻟﻀﻤﮭﺎ وﺟﻌﻠﮭﺎ ﺟﻨﺒﺎ ﺑﺠﻨﺐ ﻓﺘﻘﻮل :ﺟﺎء أﺣﻤﺪ و زﯾﺪ.
اﻵن إﻓﺮض ﻧﻔﺴﻚ ﺑﺄﻧﻚ أول ﺷﺨﺺ ھﻮ اﻟﺬي أﺳﺲ ﺻﻨﺎﻋﺔ اﻟﺒﺮﻣﺠﺔ وﻗﺪ ﺟﻌﻠﺖ ﻣﻦ
اﻟﻤﻌﺎﻣﻞ ) ( +أﻧّﮫ ﯾﺼﻠﺢ ﻟﻠﻤﻌﺎدﻻت اﻟﺮﯾﺎﺿﯿﺔ .ﺑﻌﺪ ذﻟﻚ ﺳﺘﺘﻄﻮر ﻓﻲ ﺻﻨﺎﻋﺔ اﻟﺒﺮﻣﺠﺔ
وﺳﺘﺠﺪ أنّ ھﻨﺎك دواعٍ ﻣﺎ ﺗﺠﻌﻠﻚ ﺗﻔﻜﺮ ﺑﺄن ﺗﺠﻌﻞ اﻟﻤﻌﺎﻣﻞ ) ( +ﯾﺼﻠﺢ ﻟﻸﺳﻤﺎء أﯾﻀﺎ وﻟﯿﺲ
ﻓﻘﻂ ﻟﻸرﻗﺎم ﻓﺈذا ﻛﺘﺒﺖ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ :اطﺒﻊ اﺳﻢ أﺣﻤﺪ +اﺳﻢ زﯾﺪ واﻟﻨﺘﯿﺠﺔ ﯾﺠﺐ أن ﺗﻜﻮن:
اﺣﻤﺪ زﯾﺪ .وھﺬا ﯾﺤﺘﻢ ﻋﻠﯿﻚ أن ﺗﻔﻜﺮ ﺑﻄﺮﯾﻘﺔ ﺗﺠﻌﻞ اﻟﺒﺮﻧﺎﻣﺞ ﯾﻤﯿﺰ ﺑﺄﻧﻚ ھﻨﺎ ﻻ ﺗﺮﯾﺪ ﻣﻦ
اﻟﻤﻌﺎﻣﻞ ) ( +أن ﯾﺠﻤﻊ ﺟﻤﻌﺎ ﺟﺒﺮﯾﺎ ،ﺑﻞ أن ﯾﻜﻮن ﻣﻌﻨﺎه ﻛﺤﺮف اﻟﻌﻄﻒ ) و (.
اذا اﺳﺘﻄﻌﺖ ان ﺗﺨﺒﺮ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺄن ﯾﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻌﺎﻣﻞ ) ( +ﺗﺎرة ﻋﻠﻰ أﻧﮫ ﺟﻤﻊ ﺟﺒﺮي
وﺗﺎرة ﻋﻠﻰ أﻧﮫ ﻛﺤﺮف ﻋﻄﻒ؛ ﻓﮭﺬا ﯾﺴﻤﻰ ﺗﺤﻤﯿﻞ زاﺋﺪ ﻟﻠﻤﻌﺎﻣﻞ ) .( +
ﻓﺎﻟﺒﺮﻧﺎﻣﺞ ھﻨﺎ ﯾﺘﺤﻘﻖ ﻣﻦ ﻧﻮع اﻟﺒﯿﺎﻧﺎت وﯾﺠﺐ ان ﯾﺬھﺐ إﻟﻰ اﻟﺸﻔﺮة اﻟﺒﺮﻣﺠﯿﺔ اﻟﺘﻲ ﺗﻨﺎﺳﺒﮫ.
52
ﺍﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﻭﺍﻝ
اﻟﺪوال اﻟﺒﺮﻣﺠﯿﺔ ﺗﺴﺘﺪﻋﻰ ﺑﻮاﺳﻄﺔ ﺟﻤﻞ ﺗﺤﻤﻞ اﺳﻢ اﻟﺪاﻟﺔ اﻟﻤﺮاد اﺳﺘﺪﻋﺎؤھﺎ .ﻓﺎﺳﺘﺪﻋﺎء
ع طﺒﯿﺐ اﻟﻘﻠﺐ .واﺳﺘﺪﻋﺎء اﻟﻄﺒﯿﺐ
اﻟﻄﺒﯿﺐ اﻟﻤﺨﺘﺺ ﺑﺄﻣﺮاض اﻟﻘﻠﺐ ﯾﻜﻮن ﺑﺎﻟﻌﺒﺎرة :اﺳﺘﺪ ِ
ع طﺒﯿﺐ اﻟﻌﯿﻮن.
اﻟﻤﺨﺘﺺ ﺑﺄﻣﺮاض اﻟﻌﯿﻦ ﯾﻜﻮن ﺑﻮاﺳﻄﺔ اﻟﻌﺒﺎرة :اﺳﺘﺪ ِ
رﺳﻢ دوال ﻣﺘﻌﺪدة ﻣﺘﺸﺎﺑﮭﺔ اﻟﻤﮭﺎم وﻣﺨﺘﻠﻔﺔ ﺑﺎﻟﻨﻮع ﻓﻘﻂ او ﺑﻌﺪد اﻟﻮﺳﻄﺎء؛ رﺳﻢ ھﺬه اﻟﺪوال
وإﻋﻄﺎء ﻛﻞ داﻟﺔ ﻧﻔﺲ اﺳﻢ ﺻﺎﺣﺒﺘﮭﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻟﻠﺪاﻟﺔ.
53
ﺍﻻﲰﺎﺀ ﻭﺍﳌﺘﻐﲑﺍﺕ
ﻛﻞ ﺷﻲء ﺗﺮﯾﺪ أن ﺗﻌﺎﻟﺠﮫ ﻓﻼﺑﺪ ﻟﻚ أن ﺗﻌﺮف اﺳﻤﮫ أو أن ﺗﻀﻊ ﻟﮫ أﻧﺖ اﺳﻢ ﻟﺘﻤﯿﺰه ﻋﻦ ﻏﯿﺮه
وﻟﯿﺴﮭﻞ ﻋﻠﯿﻚ ﺗﺘﺒﻌﮫ ﻓﯿﻤﺎ ﺑﻌﺪ .ﺗﺼﻮر أﻧّﻚ ﻣﺤﻘﻖ وﻗﺪ أﺣﯿﻠﺖ إﻟﯿﻚ ﻗﻀﯿﺔ ﻣﺘﺎﺑﻌﺔ ﻟﺺ .أﻻ
ﯾﺠﺐ أوﻻ أن ﺗﻌﺮف اﺳﻤﮫ ﻟﻜﻲ ﺗﺒﺤﺚ ﻋﻨﮫ؟ .ﻓﺈذا ﻟﻢ ﯾﻜﻦ اﺳﻤﮫ ﻣﻌﺮوﻓﺎ ﻓﺴﺘﺒﺤﺚ ﻋﻦ أھﻢ
ﺻﻔﺔ ﻣﺘﻤﯿﺰة ﻓﯿﮫ ﻓﺘﺪﻋﻮه ﺑﮭﺎ أو ﺗﺴﻤﯿﮫ ﺑﺎﺳﻢ ﻗﻀﯿﺔ ﻓﻌﻠﮭﺎ أو ﺑﺎﺳﻢ ﺷﻲء ﻻﺗﺤﺒﮫ أﻧﺖ ﻟﺘﻤﯿﺰه
ﺑﮫ .ﺣﺘﻰ اﻟﻤﺠﮭﻮل ﻓﻲ اﻟﻤﺴﺎﺋﻞ اﻟﺮﯾﺎﺿﯿﺔ ﯾﻌﻄﻰ ﻟﮫ اﺳﻢ ﻓﯿﻘﺎل :ﻧﻔﺮض أنّ اﺳﻢ اﻟﻤﺠﮭﻮل ھﻮ
) س (.
وﺑﻤﺎ أﻧّﻚ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺗﻌﺎﻟﺞ ﻣﺴﺎﺋﻞ؛ ﻓﻠﺬﻟﻚ ﯾﺠﺐ أن ﺗﻀﻊ ﻟﻜﻞ ﺷﻲء ﻓﻲ اﻟﻤﺴﺄﻟﺔ اﺳﻢ ﺣﺘﻰ
ﺗﺴﺘﻄﯿﻊ أن ﺗﻨﺴﺐ إﻟﯿﮫ ﺷﻲء أو ﺗﻔﻌﻞ ﻋﻠﯿﮫ ﻋﻤﻞ ﻣﺎ أو ﺑﮫ.
ﻓﻲ ﻣﺴﺄﻟﺔ ﻣﺴﺎﺣﺔ اﻟﻤﺴﺘﻄﯿﻞ؛ وﺿﻌﺖ ﻟﻠﻤﺴﺎﺣﺔ اﺳﻢ أو رﻣﺰ ﻻﺳﻤﮭﺎ ) ﻣﺲ ( وﻛﺬﻟﻚ ذﻛﺮت
ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ اﺳﻤﺎء اﻟﻌﺮض واﻟﻄﻮل.
ﻟﻨﻔﺮض اﻧﻚ ﻗﻤﺖ ﺑﻌﻤﻞ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﯾﺪﺧﻞ اﻟﻤﺴﺘﺨﺪم ﻗﯿﻢ اﻟﻄﻮل واﻟﻌﺮض ﻓﯿﺤﺴﺐ ﻟﮫ
اﻟﻤﺴﺎﺣﺔ.
ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻛﮭﺬا ﺳﺘﺪﺧﻞ ﻗﯿﻢ ﻣﺨﺘﻠﻔﺔ ﺣﺴﺐ ﻗﯿﺎﺳﺎت اﻟﻤﺴﺘﻄﯿﻞ .ﻓﺎﻟﻄﻮل ﯾﺪﺧﻞ ﺗﺎرة ﺑﻘﯿﻤﺔ
وﯾﺪﺧﻞ ﺑﻘﯿﻤﺔ أﺧﺮى ﻟﻤﺴﺘﻄﯿﻞ آﺧﺮ ﻓﺘﺘﻐﯿﺮ ﺗﺒﻌﺎ ﻟﺬﻟﻚ اﻟﻤﺴﺎﺣﺔ.
اﻟﻄﻮل ھﻨﺎ أو اﻟﻤﺴﺎﺣﺔ ﺳﺘﺘﻐﯿﺮ ﻗﯿﻤﮭﺎ ﻣﻦ ﻣﺴﺘﻄﯿﻞ ﻵﺧﺮ؛ إﻻ أنّ أﺳﻤﺎءھﺎ ﻻﺗﺘﻐﯿﺮ ﻓﺎﻟﻄﻮل ھﻮ
اﻟﻄﻮل واﻟﻌﺮض ھﻮ اﻟﻌﺮض واﻟﻤﺴﺎﺣﺔ ھﻲ اﻟﻤﺴﺎﺣﺔ .ﻣﻦ ھﻨﺎ ﻧﺴﻤﻲ ھﺬه اﻻﺳﻤﺎء
ﺑﺎﻟﻤﺘﻐﯿﺮات؛ أي أنّ ﻗﯿﻤﮭﺎ وﺑﯿﺎﻧﺎﺗﮭﺎ اﻟﺘﻲ ﺗﺪل ﻋﻠﯿﮭﺎ أو اﻟﺘﻲ ﺗﺤﻤﻠﮭﺎ ھﻲ اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺘﻐﯿﺮ.
54
ھﻨﺎك ﻗﯿﻢ ﻻﺗﺘﺒﺪل ﻣﻦ ﺷﻲء ﻵﺧﺮ ﻓﮭﻲ ﺛﺎﺑﺘﺔ ﻛﺎﻟﻨﺴﺒﺔ اﻟﺜﺎﺑﺘﺔ اﻟﺘﻲ ﻧﺤﺴﺐ ﺑﻮاﺳﻄﺘﮭﺎ ﻣﺴﺎﺣﺔ
اﻟﺪاﺋﺮة ﺑﻀﺮﺑﮭﺎ ﺑﻤﺮﺑﻊ ﻧﺼﻒ ﻗﻄﺮ اﻟﺪاﺋﺮة .ﻣﺜﻞ ھﺬه ﺗﺴﻤﻰ اﻟﺜﻮاﺑﺖ ﻓﮭﻲ أﺳﻤﺎء ﻻﺗﺘﻐﯿﺮ
ﻗﯿﻤﮭﺎ.
ھﻨﺎك ﻣﻦ ﯾﺴﻤﻲ اﻟﻤﺘﻐﯿﺮ ﺑﺎﻟﻤﺘﺤﻮل أو ﺑﺎﺳﻢ آﺧﺮ ﯾﺪل ﻋﻠﻰ اﻣﻜﺎﻧﯿﺔ اﻟﺘﻐﯿﯿﺮ.
ﻣﻌﻠﻮﻣﻴﺔ ﺍﻷﲰﺎﺀ
إذن أﻧﺖ ﺗﻀﻊ اﻷﺳﻤﺎء ﻟﺘﺴﺘﻄﯿﻊ ﻣﺘﺎﺑﻌﺘﮭﺎ وﻟﻜﻲ ﯾﺘﺎﺑﻌﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ داﺧﻠﯿﺎ ﻛﺬﻟﻚ.
ﻓﻲ اﻟﺒﯿﺖ اﻟﻮاﺣﺪ ﻟﻜﻞ ﻓﺮد ﻓﯿﮫ اﺳﻢ ﺧﺎص ﺑﮫ ﯾﻤﯿﺰه ﻋﻦ ﻏﯿﺮه؛ إﻻ اﻧّﮫ ﻗﺪ ﯾﻜﻮن ﻓﻲ ﺑﯿﺘﻚ اﺳﻢ
ﻣﺤﻤﺪ وﻓﻲ ﺑﯿﺖ ﺟﯿﺮاﻧﻚ اﺳﻢ ﻣﺤﻤﺪ أﯾﻀﺎ وﻟﺪﯾﻚ ﺻﺪﯾﻖ اﺳﻤﮫ ﻣﺤﻤﺪ .ﻣﻊ ذﻟﻚ ھﻨﺎك ﻣﺤﻤﺪ
واﺣﺪ ﻣﺎ أن ﯾﺬﻛﺮ ﺣﺘﻰ ﯾﻜﻮن ﻣﻌﺮوﻓﺎ ﻟﺪى اﻟﺠﻤﯿﻊ وھﻮ اﻟﻨﺒﻲ ﺻﻠﻰ ﷲ ﻋﻠﯿﮫ وﺳﻠﻢ .ﻛﺬﻟﻚ
ھﻨﺎك ﻣﺤﻤﺪ ﻣﺎ ان ﯾﺬﻛﺮ ﻓﻌﻠﮫ أو ﺻﻔﺘﮫ ﺣﺘﻰ ﯾﻌﺮف وﻋﻠﻰ ﻧﻄﺎق واﺳﻊ اﯾﻀﺎ وھﻮ ﻣﺤﻤﺪ
اﻟﻔﺎﺗﺢ اﻟﺬي ﺗﻌﺮﻓﮫ ﻓﺌﺔ أﻗﻞ ﻣﻦ اﻟﻔﺌﺔ اﻟﺴﺎﺑﻘﺔ.
ﺷﺒﯿﮫ ﺑﮭﺬا ﯾﻮﺟﺪ ﻓﻲ ﻋﺎﻟﻢ اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﯿﺔ اﻟﺤﺪﯾﺜﺔ .ﻓﮭﻨﺎك ﻣﺘﻐﯿﺮ ﯾﻤﻜﻦ أن ﯾﻜﻮن ﻣﻌﺮوﻓﺎ ﻣﻦ
ﻗﺒﻞ ﻣﻌﻈﻢ أﺟﺰاء اﻟﺒﺮﻧﺎﻣﺞ ،ﺑﯿﻨﻤﺎ ھﻨﺎك أﺳﻤﺎء ﻻ ﺗﻜﻮن ﻣﻌﺮوﻓﺔ إﻻ ﺿﻤﻦ ﻛﺘﻠﺘﮭﺎ .وھﻨﺎك اﺳﻢ
ﻣﺘﻐﯿﺮ ﻓﻲ ﻛﺘﻠﺔ ﯾﻤﻜﻦ ان ﯾﺘﻮاﺟﺪ ﻧﻔﺲ ھﺬا اﻻﺳﻢ ﻓﻲ ﻛﺘﻠﺔ أﺧﺮى إﻻ أﻧﮫ ﻻﯾﻌﻨﻲ ﻧﻔﺲ اﻟﻤﺘﻐﯿﺮ
ﻓﻲ ﺗﻠﻚ اﻟﻜﺘﻠﺔ اﻷﺧﺮى .ﻓﻜﺄنّ اﻟﻜﺘﻠﺔ ﺑﯿﺖ ﻣﻐﻠﻖ وﻋﺎﺋﻠﺔ ﺗﻀﻢ أﻓﺮادا وﯾﻤﻜﻦ أن ﺗﺘﺼﻞ ﺑﻜﺘﻞ
أﺧﺮى ﺗﻌﻄﯿﮭﻢ وﺗﺄﺧﺬ ﻋﻨﮭﻢ وﺑﻨﻔﺲ اﻟﻮﻗﺖ ﻻﯾﺴﻤﺢ ﻟﮭﺎ اﻻﺗﺼﺎل ﺑﻜﺘﻞ أﺧﺮى ﻓﻲ ﻣﻜﺎن آﺧﺮ.
55
ﺍﻟﻘﻴﻤﺔ ﻭﺍﻟﻌﻨﻮﺍﻥ
اﺣﻤﺪ رﺟﻞ ﻣﺘﺰوج وﻟﮫ ﻋﺎﺋﻠﺔ ﺗﺴﻜﻦ ﻓﻲ ﺑﯿﺖ .اﻟﺒﯿﺖ ﻟﮫ ﻋﻨﻮان .وﻓﻲ اﻟﺒﯿﺖ ﻋﺪد ﻣﻦ اﻷﻓﺮاد.
ﯾﻤﻜﻦ ﻟﻚ أن ﺗﻘﻮل :ﻓﻲ ﺑﯿﺖ أﺣﻤﺪ ﺧﻤﺴﺔ أﻓﺮاد .أو أن ﺗﻘﻮل :ﻓﻲ اﻟﺒﯿﺖ اﻟﺬي ﻋﻨﻮاﻧﮫ ﻛﺬا،
ﺧﻤﺴﺔ أﻓﺮاد.
ھﻨﺎ ﻛﺎﻧﺖ ﻟﻚ طﺮﯾﻘﺘﺎن أدﺗﺎ إﻟﻰ ﻧﻔﺲ اﻟﻨﺘﯿﺠﺔ .ﻓﺈﻣﺎ أن ﺗﺬﻛﺮ اﻟﺒﯿﺖ ﺑﺎﺳﻤﮫ؛ أو أن ﺗﺬﻛﺮه
ﺑﻌﻨﻮاﻧﮫ.
ﺍﻟﻜﻠﻤﺎﺕ ﺍﳌﻔﺘﺎﺣﻴﺔ
ھﻨﺎك ﻓﻲ ﻛﻞ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻛﻠﻤﺎت ﺗﺒﯿﻦ ﺑﻌﺾ اﻷواﻣﺮ أو ﺗﻜﻮن اﺳﻢ ﻟﻌﻤﻠﯿﺔ ﻣﺎ أو ﻏﯿﺮ ذﻟﻚ.
ھﺬه اﻟﻜﻠﻤﺎت ﺗﺴﻤﻰ ﻛﻠﻤﺎت ﻣﻔﺘﺎﺣﯿﺔ ﻻﯾﺠﻮز اﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ ﺗﺴﻤﯿﺔ اﻟﻤﺘﻐﯿﺮات اﻟﻤﻮﺿﻮﻋﺔ ﻣﻦ
ﻗﺒﻠﻨﺎ.
ﻋﺎﺋﻠﺔ ﺍﻷﲰﺎﺀ
ﺗﺼﻮر أنّ أﺑﻨﺎء ﻋﺎﺋﻠﺔ اﻟﺤﺎج ﻋﺒﺪﷲ ذھﺒﻮا ﻟﯿﺴﺘﻘﻠﻮا ﻣﺮﻛﺒﺔ أﻧﺖ ﺻﺎﺣﺒﮭﺎ ،واﻧّﻚ ﺗﺴﺄل ﻛﻞ
ﺷﺨﺺ ﻋﻦ اﺳﻤﮫ ﻗﺒﻞ ﺻﻌﻮده؛ ﻋﻨﺪھﺎ ﺳﯿﺨﺒﺮك ﻛﻞ ﺷﺨﺺ ﻣﻦ ھﺬه اﻟﻌﺎﺋﻠﺔ ﺑﺎﺳﻤﮫ وﺳﯿﻘﻮل:
أﻧﺎ ﻣﺤﻤﺪ ﺑﻦ اﻟﺤﺎج ﻋﺒﺪﷲ .أﺣﻤﺪ ﺑﻦ اﻟﺤﺎج ﻋﺒﺪﷲ .ﺳﻠﻤﻰ ﺑﻨﺖ اﻟﺤﺎج ﻋﺒﺪﷲ .وھﻜﺬا .أﻣﺎ إن
أﺧﺒﺮك ﺷﺨﺺ ﻗﺒﻞ ذﻟﻚ ﺑﺄنّ أوﻻد اﻟﺤﺎج ﻋﺒﺪﷲ ﺳﯿﻜﻮﻧﻮن ﻣﻌﻚ اﻵن ،ﻋﻨﺪھﺎ ﺳﺘﻜﺘﻔﻲ ﺑﺘﻠﻚ
اﻻﺟﺎﺑﺎت :ﻣﺤﻤﺪ .اﺣﻤﺪ .ﺳﻠﻤﻰ.
56
ﻣﺜﻞ ھﺬا ﺳﺘﺠﺪه ﻓﻲ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ اﻟﯿﻮم .ﻓﺎﻟﻔﺌﺔ ﻣﺜﻼ؛ ـ أي اﻟﻔﺼﯿﻠﺔ ـ ﺳﯿﻜﻮن ﻟﮭﺎ اﺳﻢ؛ ﻓﻜﻞ
ﺗﻮاﺑﻌﮭﺎ ﺳﯿﻨﺘﻤﻮن إﻟﻰ ھﺬا اﻻﺳﻢ ﺑﻤﺎ ﯾﺴﻤﻰ ﻧﻄﺎق اﻷﺳﻤﺎء أو ﻓﻀﺎء اﻷﺳﻤﺎء .ﻓﺈذا ذﻛﺮت ﻛﻞ
ﺗﺎﺑﻊ ﺑﺎﺳﻤﮫ اﻟﻜﺎﻣﻞ ﻓﺴﯿﻄﻮل اﻟﺘﻌﺒﯿﺮ ﻟﺪﯾﻚ وﺳﯿﺮھﻘﻚ ھﺬا؛ ﻟﺬا أوﺟﺪوا ﻟﻚ ﻣﺎ ﯾﺴﮭﻞ ﻋﻠﯿﻚ
اﻷﻣﺮ ﺑﺄن ﺗﺬﻛﺮ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ وأوﻟﮫ ﺑﺄﻧّﻚ ﺳﺘﻀﻤﻦ ﺑﺮﻧﺎﻣﺠﻚ ﺗﻮاﺑﻊ وأﺷﯿﺎء ﺗﻨﺘﻤﻲ إﻟﻰ
ﻓﻀﺎء أو ﻧﻄﺎق أﺳﻤﺎء ﻛﺬا .وﺳﺘﻜﺘﻔﻲ ﻓﯿﻤﺎ ﺑﻌﺪ ﺑﺬﻛﺮ اﺳﻢ اﻟﺸﻲء ﻓﻘﻂ دون ارﺗﺒﺎطﺎﺗﮫ وﻋﺎﺋﻠﺘﮫ
واﻧﺘﻤﺎءاﺗﮫ.
ھﺬا ﺟﻌﻞ اﻟﻤﺒﺮﻣﺠﻮن ﯾﻔﻜﺮون ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﯾُﺆَدى ﺑﺪاﻟﺔ رﺋﯿﺴﺔ ﺗﺤﻜﻢ ﻛﻞ اﻟﺪوال اﻻﺧﺮى
وﺗﻜﻮن ﻛﻤﺪﯾﺮ ﻋﻤﻠﯿﺎت ﻟﻜﻞ اﻟﺒﺮﻧﺎﻣﺞ .ﺑﺘﻌﺒﯿﺮ آﺧﺮ :ﺳﺘﻜﺘﺐ ﺧﻄﻮات ﺑﺮﻧﺎﻣﺠﻚ اﻟﺮﺋﯿﺲ ﺿﻤﻦ
ﺗﻠﻚ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ،وﺗﻜﺘﺐ اﻹﺟﺮاءات اﻷﺧﺮى اﻟﺘﻲ ﺗﺘﻄﻠﺒﮭﺎ ﺧﻄﻮاﺗﻚ اﻟﺮﺋﯿﺴﺔ ،ﺗﻜﺘﺒﮭﺎ
ﺧﺎرج اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﻓﻲ دوال أو ﻓﺼﺎﺋﻞ ﻓﺮﻋﯿﺔ.
57
ﺍﻟﱪﳎﺔ ﺍﻟﺒﻨﻴﻮﻳﺔ
إن ﻓﻜﺮﻧﺎ ﻓﻲ أﺳﺎﻟﯿﺐ اﻟﺤﯿﺎة اﻟﯿﻮﻣﯿﺔ اﻟﺘﻲ ﻧﺆدﯾﮭﺎ ﻟﻮﺟﺪﻧﺎ أﻓﻌﺎﻟﻨﺎ ﻓﯿﮭﺎ زﯾﺎدة وﻧﻘﺼﺎن ﻋﻨﺪ أداء
أﻣﺮ ﻣﺎ .ﻓﺄﻧﺖ ﻓﻲ اﻻﻣﺘﺤﺎن ﻻﺗﺄﺧﺬ داﺋﻤﺎ ﻓﻲ ﻛﻞ اﻟﻤﻮاد درﺟﺔ ﺗﺎﻣﺔ وﻛﺬﻟﻚ ﻟﺴﺖ دوﻣﺎ ﺗﺄﺧﺬ
درﺟﺎت دوﻧﯿﺔ.
ﻋﻨﺪ ﯾﻄﻠﺐ ﺷﺨﺺ ﻣﻨﻚ أن ﺗﺤﻀﺮ ﻟﮫ ﻗﻠﯿﻞ ﻣﻦ اﻟﻤﺎء ﻓﺴﺘﺬھﺐ وﺗﺴﺎل ﻋﻦ ﻣﻜﺎن اﻟﻤﺎء وﻋﻦ
ﻣﻜﺎن اﻟﻜﺄس ورﺑﻤﺎ ﺗﺬھﺐ ﻗﺒﻞ ھﺬا وﺑﻌﺪه ﻓﻲ ﻗﻀﯿﺔ أﺧﺮى وﺣﺪﯾﺚ ﻣﻊ زﻣﯿﻞ ﻟﻚ ﺛﻢ ﺗﻌﻮد
وﺑﯿﺪك اﻟﻜﺎس اﻟﻤﻤﺘﻠﺊ ﺑﺎﻟﻤﺎء ﻓﺘﻨﺎوﻟﮫ ﻟﻠﺸﺨﺺ اﻟﺬي طﻠﺒﮫ ﻣﻨﻚ.
أﻣﺎ إن ﻛﻨﺖ ﺗﻌﯿﺶ ﻓﻲ ﺑﯿﺖ ﻣﻨﻈﻢ ﻓﯿﮫ ﻣﻜﺎن ﻣﻌﺮوﻓﺔ ﻟﻜﻞ ﺷﻲء ﻓﻌﻨﺪھﺎ ﺳﺘﺬھﺐ ﻓﻮرا ﻓﻲ ھﺬا
اﻻﺗﺠﺎه وﻓﻲ ھﺬا اﻻﺗﺠﺎه ﻟﺘﺤﻀﺮ اﻟﻤﺎء ﻣﻦ دون ﺳﺆال .ﻓﺴﺆاﻟﻚ ﻗﺒﻞ ﻗﻠﯿﻞ ﻋﻦ ﻣﻜﺎن اﻟﻤﺎء أو
اﻟﻜﺄس أو ﻏﯿﺮ ذﻟﻚ ھﻮﻟﯿﺲ ﻣﻦ ﺻﻠﺐ اﻟﻤﻮﺿﻮع اﻟﺬي طﻠﺒﮫ ﻣﻨﻚ اﻟﺮﺟﻞ وھﻮ إﺣﻀﺎر اﻟﻤﺎء.
أﻣﺎ ﻓﻲ اﻟﺒﯿﺖ اﻟﻤﻨﻈﻢ ﻓﻘﻀﯿﺖ ﻟﮫ ﺣﺎﺟﺘﮫ ﺑﻤﺎ ﯾﺘﻄﻠﺒﮫ اﻻﻣﺮ ﻓﻌﻼ ﻣﻦ دون زﯾﺎدة أو ﻧﻘﺼﺎن.
ھﻜﺬا ھﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺒﻨﯿﻮﯾﺔ ﻓﻲ أن ﺗﻔﻜﺮ ﺑﺨﻄﻮات ﻋﻤﻠﯿﺔ ﻣﺎ ،ﺑﺤﯿﺚ انّ ﺗﻠﻚ اﻟﺨﻄﻮات ھﻲ ھﻲ
ﻓﻌﻼ اﻟﺘﻲ ﺗﺆدي اﻟﻌﻤﻠﯿﺔ اﻟﻤﻄﻠﻮﺑﺔ ﻣﻦ دون زﯾﺎدة أو ﻧﻘﺼﺎن.
اذا ﺗﻮﺻﻠﺖ إﻟﻰ اﻟﺨﻄﻮات اﻟﺼﺤﯿﺤﺔ ،إﻟﻰ اﻟﺨﻄﻮات اﻟﺘﻲ ﯾﻨﺒﻐﻲ ﺗﺄدﯾﺘﮭﺎ ﻷداء ﻋﻤﻠﯿﺔ ﻣﺎ ـ
وﺑﺄﺻﻐﺮ ﻣﺎ ﯾﻤﻜﻦ ـ ،وﺟﻌﻠﺘﮭﺎ ﺿﻤﻦ ﻛﺘﻠﺔ ﺑﺮﻣﺠﯿﺔ ﻣﻨﻔﺮدة ،ﺛﻢ ﺟﻌﻠﺖ ﻛﻞ اﻟﻌﻤﻠﯿﺎت ﺗﺆدى
ھﻜﺬا ﻓﻲ ﻛﺘﻞ ﺑﺮﻣﺠﯿﺔ ﻣﺴﺘﻘﻠﺔ؛ ﻋﻨﺪھﺎ ﺗﻜﻮن ﻣﺒﺮﻣﺞ ﺑﻨﯿﻮي ﯾﻌﺮف ﻛﻞ ھﺪف ﻣﻦ ﻛﺘﻞ ﺑﺮﻧﺎﻣﺠﮫ
وﯾﻌﺮف ﻏﺮض ﻛﻞ ﻛﺘﻠﺔ واﻟﻌﻤﻞ اﻟﺬي ﺗﺆدﯾﮫ.
58
ﺍﻟﺪﺍﻟﺔ ﺍﻟﺮﺋﻴﺴﺔ ﻭﺍﻟﱪﳎﺔ ﺍﳊﺪﻳﺜﺔ
ﻋﻨﺪﻣﺎ ﯾﺄﺗﻲ ﺿﯿﻒ إﻟﻰ ﺑﯿﺖ ﻣﺒﻌﺜﺮ ﻓﺈنّ أﺻﺤﺎب اﻟﺒﯿﺖ ﺳﯿﻜﻮﻧﻮن ﻓﻲ ﺣﺎﻟﺔ ﻓﻮﺿﻮﯾﺔ ﻋﺎرﻣﺔ.
ﻓﮭﺬا ﯾﺬھﺐ ﻷداء ﺟﺰء ﻣﻦ ﻣﺘﻄﻠﺐ ﻓﯿﺠﺪ اﺧﺎه ﻗﺪ آﺗﻰ ﻟﯿﺆدﯾﮫ ﻓﯿﻨﮭﺮ أﺣﺪھﻤﺎ اﻵﺧﺮ وﯾﺮﯾﺪ دﻓﻌﮫ
ﻟﯿﻌﻤﻞ ﺟﺰء آﺧﺮ أو ﻣﮭﻤﺔ أﺧﺮى.
اﻣﺎ ﻓﻲ اﻟﺒﯿﺖ اﻟﻤﻨﻈﻢ ﻓﻜﻞ ﯾﻌﺮف واﺟﺒﮫ وھﻨﺎك اﻻم واﻻب ﯾﻘﻮﻣﺎن ﺑﺪور اﻻدارة واﻟﺘﻮﺟﯿﮫ
ﻓﺘﺠﺪ ﻣﻨﻈﺮا ﺟﻤﯿﻼ ﯾﻘﻮم ﺑﺨﺪﻣﺔ اﻟﻀﯿﻒ.
ھﺐ أﻧﻜﻢ ﻗﺮرﺗﻢ إﻛﺮام اﻟﻀﯿﻒ ﺑﻮﺟﺒﺔ طﻌﺎم ﻣﻦ ﻟﺤﻢ ﻣﺸﻮي أو ﻛﺒﺎب .ھﺬا ﺳﯿﺘﻄﻠﺐ طﺒﻌﺎ إﻟﻰ
اﻟﺨﺒﺰ واﻟﺨﻀﺮة واﻟﻤﻘﺒﻼت وﻏﯿﺮ ذﻟﻚ.
اﻟﻜﺒﺎب أو اﻟﻠﺤﻢ اﻟﻤﺸﻮي ﻟﮫ ﺧﻄﻮات وطﺮﯾﻘﺔ ﻋﻤﻞ ﻗﺪ اﺧﺘﺺ ﺑﮭﺎ ﻓﻼن ﻣﻦ اﻟﺒﯿﺖ .واﻟﺨﺒﺰ
ﺗﻘﻮم ﺑﮫ ﻓﻼﻧﺔ ﻣﻦ اﻟﺒﯿﺖ واﻟﺨﻀﺮة ﺗﻘﻮم ﺑﮭﺎ ﻓﻼﻧﺔ.
59
ھﺬه اﻷواﻣﺮ اﻟﺼﺎدرة ﻣﻦ اﻻم ھﻲ اﻻواﻣﺮ اﻟﺮﺋﯿﺴﺔ اﻟﺘﻲ ﺗﺘﻄﻠﺒﮭﺎ ﻋﻤﻠﯿﺔ ﺗﺤﻀﯿﺮ اﻟﻐﺪاء .أﻣﺎ
ﻋﻤﻞ اﻟﻠﺤﻢ وﻋﻤﻞ اﻟﺨﺒﺰ وﻏﯿﺮه ﻓﻠﻜﻞ ﻣﻨﮭﺎ ﺧﻄﻮاﺗﮭﺎ واواﻣﺮھﺎ اﻟﺨﺎﺻﺔ وھﻲ ﺗﻌﺘﺒﺮ أواﻣﺮ
ﺛﺎﻧﻮﯾﺔ ﻻﯾﺮاھﺎ اﻟﻀﯿﻒ أو ﻻﺗﺮاھﺎ اﻷم.
ھﻜﺬا ھﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ؛ ﻓﺎﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﺗﻀﻊ ﻓﯿﮭﺎ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ اﻻﺻﻞ اﻟﺘﻲ
ﺗﺘﻄﻠﺒﮭﺎ ﻗﻀﯿﺔ ﻣﺎ .وﺗﺠﻌﻞ ﺑﺎﻗﻲ اﻟﺨﻄﻮات اﻟﺘﻲ ﺗﺤﺘﺎﺟﮭﺎ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ ،ﺗﺠﻌﻠﮭﺎ ﺧﺎرج
اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﻓﻲ ﻛﺘﻞ ﻣﺴﺘﻘﻠﺔ.
ﺍﳋﺮﻭﺝ ﻭﺍﻟﻌﻮﺩﺓ
ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻷوﻟﻰ ﻛﺎن اﻟﺒﺮﻧﺎﻣﺞ ﯾﻜﺘﺐ ﻣﻦ أوﻟﮫ إﻟﻰ آﺧﺮه ﻛﺄواﻣﺮ وﺧﻄﻮات ﺷﻲء ﺧﻠﻒ
ﺷﻲء ﺗﺒﺎﻋﺎ .أﻣﺎ ﻓﯿﻤﺎ ﺑﻌﺪ ﻓﺘﻢ ﺗﻨﻈﯿﻢ اﻟﺒﺮﻣﺠﺔ وﺟﻌﻠﮭﺎ ﻓﻲ ھﯿﺎﻛﻞ وﻛﺘﻞ ،ﺑﺤﯿﺚ ﻛﻞ ھﯿﻜﻞ ،ﻛﻞ
ﻛﺘﻠﺔ ﺗﺆدي ﻋﻤﻼ ﻣﺨﺼﺼﺎ ﺛﻢ ﺗﻌﻮد اﻟﻘﯿﺎدة ﻣﻦ ﺟﺪﯾﺪ ﻟﻠﺪاﻟﺔ اﻷم.
ﻛﺎﻧﺖ اﻟﺒﺮﻣﺠﺔ ﻛﺎﻟﺒﯿﺖ اﻟﻤﺒﻌﺜﺮ ﺣﯿﻦ ﯾﺄﺗﯿﮫ اﻟﻀﯿﻒ ﻓﺘﺮى ﻣﺜﻞ ھﺬا:
ﯾﺠﺐ إﺣﻀﺎر اﻟﻠﺤﻢ؛
ﯾﺠﺐ ﺗﻘﻄﯿﻊ اﻟﻠﺤﻢ؛
ﯾﺠﺐ وﺿﻊ اﻟﻤﻠﺢ ﻋﻠﯿﮫ ووﺿﻌﮫ ﻋﻠﻰ اﻟﻨﺎر؛
ﯾﺠﺐ ﺧﻠﻂ اﻟﻄﺤﯿﻦ ﺑﺎﻟﻤﺎء؛
ﯾﺠﺐ إﺿﺎﻓﺔ اﻟﺨﻤﯿﺮة ﻟﮫ؛
ﻗﻄﻌﮫ واﺟﻌﻠﮫ ﻛﺄﻗﺮاص؛
ﯾﺠﺐ إدﺧﺎﻟﮫ اﻟﺘﻨﻮر؛
60
ﯾﺠﺐ ﺟﻠﺐ اﻟﺨﻀﺮة ﻣﻦ اﻟﻤﺰرﻋﺔ؛
اﻏﺴﻠﮭﺎ؛
ﯾﺠﺐ ﻓﺮزھﺎ وﺗﻨﺴﯿﻘﮭﺎ؛
ﺿﻌﮭﺎ ﻓﻲ أواﻧﻲ؛
61
ﻟﯿﻠﻰ ﻟﺼﻨﺎﻋﺔ اﻟﺨﺒﺰ
}
ﺧﻠﻂ اﻟﻄﺤﯿﻦ ﺑﺎﻟﻤﺎء؛
اﺿﺎﻓﺔ اﻟﺨﻤﯿﺮة؛
اﻟﺘﻘﻄﯿﻊ واﻟﺘﺸﻜﯿﻞ؛
أﺿﻌﮫ ﻓﻲ اﻟﺘﻨﻮر؛
ﻋﻮدة؛
{
ﻓﻲ اﻟﺤﯿﺎة اﻟﻌﺎﻣﺔ ﻗﺪ ﯾﻜﻮﻧﻮن اﺣﻤﺪ وﻟﯿﻠﻰ وﺳﻌﺎد ﻣﺘﻮاﺟﺪﯾﻦ ﻓﯿﺘﻠﻘﻮن اﻻﻣﺮ ﺗﺒﺎﻋﺎ؛ أﻣﺎ ﻓﻲ
اﻟﺒﺮﻣﺠﺔ ﻓﺈنّ اﻟﺪاﻟﺔ اﻷم ﺗﺴﺘﺪﻋﻲ أﺣﻤﺪ ـ أي ﺗﺴﺘﺪﻋﻲ داﻟﺔ أﺣﻤﺪ ﻟﺼﻨﺎﻋﺔ اﻟﻜﺒﺎب ـ ﻓﯿﺬھﺐ
اﻟﺘﻨﻔﯿﺬ اﻟﺤﺎﻟﻲ إﻟﻰ أﺣﻤﺪ وﯾﺨﺮج ﻣﻦ داﻟﺔ اﻷم .ﺗﻘﻮم داﻟﺔ أﺣﻤﺪ ﺑﺘﻨﻔﯿﺬ اواﻣﺮ وﺧﻄﻮات ﺻﻨﺎﻋﺔ
اﻟﻜﺒﺎب ﺛﻢ ﻋﻨﺪﻣﺎ ﺗﺼﻞ إﻟﻰ ﻛﻠﻤﺔ ) ﻋﻮدة (؛ ﯾﻌﻮد اﻟﺘﻨﻔﯿﺬ ﻣﺮة أﺧﺮى ﻟﺪاﻟﺔ اﻷم وﻛﺄنّ أﺣﻤﺪ ﻗﺪ
62
ﺣﻀﺮ إﻟﻰ أﻣﮫ وﻗﺎل ﻟﮭﺎ ) أﻛﻤﻠﺖ ﻋﻤﻠﻲ ( .ﻋﻨﺪھﺎ ﺗﺴﺘﺪﻋﻲ اﻟﺪاﻟﺔ اﻷم داﻟﺔ ﺳﻌﺎد ﻟﺼﻨﺎﻋﺔ
اﻟﺨﺒﺰ ﻓﯿﺨﺮج ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ إﻟﻰ داﻟﺔ ﺳﻌﺎد ﺣﺘﻰ ﯾﺠﺪ ﻛﻠﻤﺔ ) ﻋﻮدة (
ﻓﯿﻌﻮد إﻟﻰ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﻟﺘﻨﻔﯿﺬ اﻟﺨﻄﻮات اﻷﺧﺮى وھﻜﺬا ﺣﺘﻰ ﯾﻜﺘﻤﻞ اﻟﺒﺮﻧﺎﻣﺞ.
ﺳﺮﻳﺔ ﺍﻻﺩﺍﺀ
ﻓﻲ اﻟﺤﯿﺎة اﻟﻌﺎدﯾﺔ ﻛﺜﯿﺮا ﻣﺎﻻﺗﻌﺮف اﻻم ﺗﻔﺎﺻﯿﻞ ﻋﻤﻞ زوﺟﮭﺎ ،وﻛﺬﻟﻚ ﻻ ﯾﻌﺮف اﻷب
ﺗﻔﺎﺻﯿﻞ طﺒﺦ أﻛﻠﺔ ﻣﻌﯿﻨﺔ .ﻛﺬﻟﻚ ﻻ ﺗﻌﺮف اﻷم اﻟﺘﻔﺎﺻﯿﻞ اﻟﺪﻗﯿﻘﺔ ﻟﺤﯿﺎة ﺳﯿﺮ اﺑﻨﺎﺋﮭﺎ ﻓﻲ
اﻟﻤﺪرﺳﺔ وﻻ ﻛﯿﻒ ﯾﺘﻠﻘﻮن اﻟﺪرس ،وﻛﺬﻟﻚ ﻻ ﯾﻌﺮف أخ ﻓﻲ ﻣﺪرﺳﺔ ﻛﯿﻒ ﯾﺘﻠﻘﻰ أﺧﻮه
اﻟﺪروس ﻓﻲ ﻣﺪرﺳﺔ أﺧﺮى أو ﺻﻒ آﺧﺮ.
ﻗﺪ ﺗﻌﺮف أﻧﺖ ﺑﻌﺾ اﻟﺘﻔﺎﺻﯿﻞ ﻟﻜﯿﻒ ﺗﺼﻨﻊ اﻟﻜﯿﻜﺔ وﻟﻜﻦ ﻻﺗﻌﺮف ﻛﻞ ﺗﻔﺎﺻﯿﻠﮭﺎ ،وﻗﺪ
ﻻﺗﻌﺮف ﻧﮭﺎﺋﯿﺎ ﻛﯿﻒ ﺗﺼﻨﻊ اﻟﺤﻠﻮى ﻟﻜﻨﮭﺎ ﺗﺼﻞ إﻟﯿﻚ ﺟﺎھﺰة وﻟﯿﺲ ﻟﻚ ﺣﺎﺟﺔ ﻓﻲ ﻣﻌﺮﻓﺔ
ﻛﯿﻔﯿﺔ ﺻﻨﺎﻋﺘﮭﺎ.
ھﻜﺬا اﻟﺤﺎل ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ؛ ﻓﺄﺟﺰاء اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺨﺘﻠﻔﺔ ﻗﺪ ﺗﺴﺘﻄﯿﻊ اﻟﻮﺻﻮل إﻟﻰ داﻟﺔ ﻣﺎ
أو ﻗﯿﻤﺔ وﻗﺪ ﺗﺄﺗﯿﮭﺎ اﻟﻨﺘﯿﺠﺔ اﻟﻨﮭﺎﺋﯿﺔ ﻟﮭﺬه اﻟﺪاﻟﺔ ﻣﻦ ﻏﯿﺮ اﻟﺴﻤﺎح ﻟﮭﺎ ﺑﺎﻟﻮﺻﻮل ﻓﻌﻠﯿﺎ إﻟﻰ أﺟﺰاء
اﻟﺪاﻟﺔ وﺧﻄﻮاﺗﮭﺎ.
ھﺬا ﯾﻌﻨﻲ أنّ ھﻨﺎك درﺟﺔ ﺣﻤﺎﯾﺔ ﺗﺘﻤﺘﻊ ﺑﮭﺎ ھﯿﺎﻛﻞ اﻟﺒﺮﻧﺎﻣﺞ وﻓﺼﺎﺋﻠﮫ ودواﻟﮫ وﻗﯿﻤﮫ وﻗﺪ ﯾﺴﻤﺢ
ﻟﺠﺰء ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻘﻂ اﻻطﻼع ﻋﻠﻰ ﺗﻔﺎﺻﯿﻞ ذﻟﻚ أو ﻻ وﺣﺴﺐ اﻟﻐﺎﯾﺔ اﻟﻨﮭﺎﺋﯿﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ
وﻋﻤﻠﮫ.
63
ﻣﻌﺎﳉﺔ ﺍﻷﺧﻄﺎﺀ
ﻓﻲ اﻟﺤﯿﺎة ھﻨﺎك أﺧﻄﺎء ﻛﺜﯿﺮة ﻓﻲ ﺗﺄدﯾﺔ اﻷﻋﻤﺎل ،ﻓﺘﺠﺪ ﻣﻦ ﯾﻘﻮل :اذا أﺧﻄﺄت ﻓﻲ ﻛﺬا
ﻓﺄﻋﻠﻤﻨﻲ واذا ﻛﺎن ﺧﻄﺄك ﻓﻲ ﻛﺬا ﻓﺄﻋﻠﻢ ﻛﺬا وإﻻ ﻓﻘﻞ ﻻ أﻋﺮف ﻛﯿﻒ أوأدي ﻋﻤﻠﻲ.
ﻣﺜﻞ ھﺬا ﯾﻮﺟﺪ اﯾﻀﺎ ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ .ﻓﺒﺪﻻ ﻣﻦ اﻟﻮﺻﻮل إﻟﻰ ﻧﺘﺎﺋﺞ ﺧﺎطﺌﺔ أو ﺑﺪﻻ ﻣﻦ
ﺗﻠﻘﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﯿﺎﻧﺎت ﺧﺎطﺌﺔ ﻓﻲ ﻣﻜﺎن ﻻ ﯾﺠﺐ أن ﺗﺄﺗﻲ ﻓﯿﮫ ﻣﺜﻞ ھﺬه اﻟﺒﯿﺎﻧﺎت ﻓﯿﺼﺪر إﻧﺬارا؛
ﺑﺪﻻ ﻣﻦ ذﻟﻚ ﻋﻠﯿﻚ أن ﺗﺘﻮﻗﻊ اﻷﺧﻄﺎء اﻟﻤﻤﻜﻦ اﻟﻮﻗﻮع ﻓﯿﮭﺎ ﺣﯿﻦ اﻟﺘﻨﻔﯿﺬ وﺣﯿﻦ ﯾﺴﺘﺨﺪم
ﺑﺮﻧﺎﻣﺠﻚ ﺷﺨﺺ ﻏﯿﺮك وأن ﺗﻌﻤﻞ وﺗﺮﺷﺪ اﻟﻤﺴﺘﺨﺪم ﺑﺮﺳﺎﺋﻞ ﺗﻮﺿﺢ ﻟﮫ ﻧﻮع اﻟﺨﻄﺄ وﻣﺎ
ﯾﺠﺐ أن ﯾﻔﻌﻠﮫ ﻓﺘﻜﺘﺸﻒ ﺷﻔﺮﺗﻚ اﻟﺨﻄﺄ ﻗﺒﻞ أن ﯾﺬھﺐ اﻟﺨﻄﺄ إﻟﻰ ﻣﻮﻗﻊ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﯾﺠﺐ أن
ﻻﯾﺬھﺐ إﻟﯿﮫ.
أﻧﺖ ﺗﻌﺮف ﻣﺜﻼ أنّ ﻧﺎﺗﺞ ﻗﺴﻤﺔ 12ﻋﻠﻰ 6ﯾﺴﺎوي 2وأنّ ﻗﺴﻤﺔ 12ﻋﻠﻰ 3ﯾﺴﺎوي 4ﻓﻤﺎ
ﻗﯿﻤﺔ ﻗﺴﻤﺔ 12ﻋﻠﻰ ﺻﻔﺮ ؟ .إنّ ﻗﺴﻤﺔ أي ﻋﺪد ﻋﻠﻰ ﺻﻔﺮ ﻋﻤﻠﯿﺔ ﻏﯿﺮ ﻣﻘﺒﻮﻟﺔ رﯾﺎﺿﯿﺎ
وﺗﺴﻤﻰ ﻗﯿﻤﺔ ﻏﯿﺮ ﻣﻌﺮﻓﺔ .ﻓﺈذا ﻗﻤﺖ ﺑﻌﻤﻞ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﯾﻌﻠﻢ اﻷطﻔﺎل اﻟﻘﺴﻤﺔ وأدﺧﻞ اﻟﻄﻔﻞ
ﻋﺪد وأدﺧﻞ اﻟﺼﻔﺮ ﺑﻌﺪه ﻟﯿﻘﺴﻢ ﻋﻠﯿﮫ ﻓﺈنّ اﻟﺤﺎﺳﺒﺔ ﺳﺘﻌﻄﻲ ﺻﻔﯿﺮا أو رﺳﺎﻟﺔ ﺗﺸﯿﺮ إﻟﻰ ﺣﺪوث
ﺷﻲء ﻏﯿﺮ ﻣﻘﺒﻮل وﺳﯿﺘﻮﻗﻒ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻦ اﻟﻌﻤﻞ ورﺑﻤﺎ ﻋﻠﯿﮫ اﻋﺎدة ﺗﺸﻐﯿﻞ اﻟﺤﺎﺳﺒﺔ ﻣﻦ
ﺟﺪﯾﺪ؛ ﻟﺘﻼﻓﻲ ذﻟﻚ :ﯾﺠﺐ ﻋﻠﯿﻚ أن ﺗﺘﻮﻗﻊ ﻣﻦ اﻟﻄﻔﻞ ﻣﺜﻞ ﺗﻠﻚ اﻷﺧﻄﺎء وأن ﺗﺄﺧﺬ ﻗﯿﻤﮫ اﻟﺘﻲ
أدﺧﻠﮭﺎ إﻟﻰ ﺷﻔﺮة ﻓﺎﺣﺼﺔ ﺗﻌﺮﻓﮭﺎ ﺑﺎﻟﻘﯿﻢ اﻟﻐﯿﺮ ﻣﺴﻤﻮﺣﺔ اﻟﺘﻲ اذا ﻣﺎ وﺻﻠﺖ اﻟﺸﻔﺮة أﺧﺮﺟﺖ
ﻟﮫ رﺳﺎﻟﺔ ارﺷﺎد ﺗﺨﺒﺮه ﺑﺄن اﻟﻘﯿﻤﺔ ﻏﯿﺮ ﺻﺤﯿﺤﺔ وأن ﻋﻠﯿﮫ اﻋﺎدة اﻟﻤﺤﺎوﻟﺔ أو ﻏﯿﺮ ذﻟﻚ ﻣﻤﺎ
ﺗﺮاه أﻧﺖ واﺟﺒﺎ.
64
ﺍﳌﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺘﺠﻤﻌﺎﺕ
ﻓﻲ ﺻﻔﻚ اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﻄﻠﺒﺔ ،ﻟﻜﻞ ﻣﻨﮭﻢ اﺳﻢ ﺛﻼﺛﻲ وﻟﻜﻞ ﻣﻨﮭﻢ درﺟﺔ ﻣﻌﯿﻨﺔ ﻓﻲ ﻣﺎدة ﻣﺎ وﻟﻜﻞ
ﻣﻨﮭﻢ ﻛﺬا وﻛﺬا وﻛﺬا .ﻓﺒﺪﻻ ﻣﻦ ﻛﺘﺎﺑﺔ اﺳﻢ ﻛﻞ ﺗﻠﻤﯿﺬ ودرﺟﺘﮫ ﻓﻲ اﻟﻤﺎدة اﻟﻔﻼﻧﯿﺔ وﻣﮭﻨﺔ واﻟﺪه
وﻏﯿﺮ ذﻟﻚ .ﺑﺪﻻ ﻣﻦ ﻛﺘﺎﺑﺔ ﻛﻞ ذﻟﻚ ﻟﻜﻞ ﺗﻠﻤﯿﺬ ﺑﻤﻔﺮده؛ ﺗﻮﺟﺪ ھﻨﺎك طﺮﯾﻘﺔ أﻓﻀﻞ ﺗﺴﻤﻰ
اﻟﻤﺼﻔﻮﻓﺔ.
اﻟﻤﺼﻔﻮﻓﺔ ﻣﺠﻤﻮﻋﺔ ﺑﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺑﺸﻜﻞ ﻣﺎ وﻟﮭﺎ ﻛﻤﯿﺔ ﺑﯿﺎﻧﺎت ﻣﺤﺪدة وﯾﻤﻜﻦ اﻟﻮﺻﻮل إﻟﻰ
أي ﻗﯿﻤﺔ ﺑﻄﺮﯾﻘﺔ ﺳﮭﻠﺔ واﺿﺤﺔ.
ﻟﻨﺄﺧﺬ ﻣﺜﻼ ﻣﺠﻤﻮﻋﺔ اﻟﻄﻠﺒﺔ اﻟﺘﺎﻟﯿﺔ ودرﺟﺎﺗﮭﻢ ﻓﻲ اﻟﻔﯿﺰﯾﺎء واﻟﺮﯾﺎﺿﯿﺎت واﻟﻠﻐﺔ ﻓﻨﻘﻮل:
اﻟﻠﻐﺔ اﻟﺮﯾﺎﺿﯿﺎت اﻟﻔﯿﺰﯾﺎء اﻟﻄﺎﻟﺐ
80 95 78 ﻣﺤﻤﺪ
98 90 88 ﻋﻠﻲ
77 96 82 ﻋﻤﺮ
ھﺬا اﻟﺠﺪول اﻟﺬي ﯾﺘﻜﻮن ﻣﻦ ) أﻋﻤﺪة وﺻﻔﻮف ( ﯾﺸﺎﺑﮫ ـ ﺗﻘﺮﯾﺒﺎ ـ ﺷﻜﻞ اﻟﻤﺼﻔﻮﻓﺔ؛ ﻟﻜﻦ
اﻟﻤﺼﻔﻮﻓﺔ ﺗﻜﻮن ﺑﯿﺎﻧﺎﺗﮭﺎ ـ أي ﻗﯿﻤﮭﺎ ـ ﻣﻦ ﻧﻮع واﺣﺪ .ﻓﺎﻟﺠﺪول أﻋﻼه ﻓﯿﮫ أﺳﻤﺎء وارﻗﺎم ،ﺑﯿﻨﻤﺎ
ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻣﺜﻼ ﺗﺠﺪ أﻣﺎ ﻛﻠﮭﺎ اﺳﻤﺎءا ـ أي ﻛﻠﻤﺎت ـ أو ﻛﻠﮭﺎ ارﻗﺎم أو ﻛﻠﮭﺎ ﻏﯿﺮ ذﻟﻚ.
ﻓﻠﺠﻌﻞ اﻟﺠﺪول اﻋﻼه ﻛﻠﮫ ﻛﻠﻤﺎت ﻋﻠﯿﻨﺎ أن ﻧﺠﻌﻠﮫ ﻛﺎﻟﺘﺎﻟﻲ:
65
اﻟﻠﻐﺔ اﻟﺮﯾﺎﺿﯿﺎت اﻟﻔﯿﺰﯾﺎء اﻟﻄﺎﻟﺐ
ﺛﻤﺎﻧﻮن ﺧﻤﺴﺔ وﺗﺴﻌﻮن ﺛﻤﺎﻧﯿﺔ وﺳﺒﻌﻮن ﻣﺤﻤﺪ
ﺛﻤﺎﻧﯿﺔ وﺗﺴﻌﻮن ﺗﺴﻌﻮن ﺛﻤﺎﻧﯿﺔ وﺛﻤﺎﻧﻮن ﻋﻠﻲ
ﺳﺒﻌﺔ وﺳﺒﻌﻮن ﺳﺘﺔ وﺗﺴﻌﻮن اﺛﻨﺎن وﺛﻤﺎﻧﻮن ﻋﻤﺮ
ھﺬا اﻟﺠﺪول اﻻن ﺻﺎر أﻗﺮب إﻟﻰ ﻣﻌﻨﻰ اﻟﻤﺼﻔﻮﻓﺔ ﻷﻧﮫ ﻛﻠﮫ ﯾﺤﻤﻞ ﺑﯿﺎﻧﺎت ﻣﻦ ﻧﻮع واﺣﺪ ھﻲ
اﻟﻜﻠﻤﺎت.
ارﻣﺰ ﻟﻠﻄﻠﺒﺔ ﺑﺄرﻗﻢ وﻛﺬﻟﻚ ﻟﻠﻤﻮاد اﻟﺪراﺳﯿﺔ وأﻋﺪ ﻛﺘﺎﺑﺔ اﻟﺠﺪول ﻣﻦ ﺟﺪﯾﺪ ﺑﺼﯿﻐﺔ اﻷﻋﺪاد.
ارﻣﺰ ﻟﻤﺤﻤﺪ ﻣﺜﻼ ﺑﺎﻟﺮﻣﺰ 6وﻟﻌﻠﻲ ﺑﺎﻟﺮﻗﻢ 7وﻟﻌﻤﺮ ﺑﺎﻟﺮﻗﻢ 8وارﻣﺰ ﻟﻠﻔﯿﺰﯾﺎء ﺑﺎﻟﺮﻗﻢ 1
واﻟﺮﯾﺎﺿﯿﺎت ﺑﺎﻟﺮﻗﻢ 2واﻟﻠﻐﺔ ﺑﺎﻟﺮﻗﻢ 3وﻟﻠﻄﺎﻟﺐ ﺑﺎﻟﺮﻣﺰ 0واﻋﺪ ﻛﺘﺎﺑﺔ اﻟﺠﺪول ﻣﻦ ﺟﺪﯾﺪ
اﻟﺠﺪول اﻋﻼه أﻗﺮب إﻟﻰ ﻣﻌﻨﻰ اﻟﻤﺼﻔﻮﻓﺔ ـ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ـ ﻓﻜﻠﮫ ﻣﻦ ﻧﻮع اﻻرﻗﺎم .وﻟﻜﻦ ﻣﻊ
ھﺬا؛ ﻓﺎﻟﻤﺼﻔﻮﻓﺔ ﺗﻌﻨﻲ ﺷﻲء ﻏﯿﺮ ذﻟﻚ وﺗﺸﯿﺮ إﻟﻰ أﺷﯿﺎء ﻻ ﯾﺸﯿﺮ إﻟﯿﮭﺎ اﻟﺠﺪول وﻛﻞ ذﻟﻚ ﻣﺮة
أﺧﺮى ﻓﻲ ﻣﻌﻨﻰ اﻟﻤﺼﻔﻮﻓﺔ وﻋﻤﻠﮭﺎ ﻓﻲ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ.
66
ﻓﻠﻠﻤﺼﻔﻮﻓﺔ ﻛﻜﻞ اﺳﻢ أﻧﺖ ﺗﺴﻤﯿﮫ وﻟﻜﻞ ﻣﻮﻗﻊ ﻓﯿﮭﺎ اﺳﻢ ﯾﺄﺧﺬ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ وﺑﺠﺎﻧﺒﮫ رﻗﻢ آﺧﺮ
ﻏﯿﺮ اﻟﺮﻗﻢ اﻟﻈﺎھﺮ ﻓﯿﮭﺎ.
ﺍﻷﻋﻤﺪﺓ ﻭﺍﻟﺼﻔﻮﻑ
ﻻﺣﻈﺖ أنّ اﻟﺠﺪول ﯾﺘﻜﻮن ﻣﻦ ﺣﻘﻮل ﻋﻠﻰ ﺷﻜﻞ أﺳﻄﺮ وأﻋﻤﺪة ،ﻓﺘﺮى اﻟﺴﻄﺮ اﻟﻌﻠﻮي اﻟﺬي
ﯾﻀﻢ ) اﻟﻄﺎﻟﺐ ،اﻟﻔﯿﺰﯾﺎء ،اﻟﺮﯾﺎﺿﯿﺎت ،اﻟﻠﻐﺔ (؛ ھﺬا ﯾﺴﻤﻰ ﺻﻒ أو ﺳﻄﺮ ،ﯾﻠﯿﻠﮫ ﺳﻄﺮ ﺛﺎن
ھﻮ ﺻﻒ آﺧﺮ وﺻﻒ ﺛﺎﻟﺚ وھﻜﺬا.
اﻧﻈﺮ اﻻن إﻟﻰ اﻟﻌﻤﻮد ) اﻟﻄﺎﻟﺐ ،ﻣﺤﻤﺪ ،ﻋﻠﻲ ،ﻋﻤﺮ ( ﻓﮭﻮ ﯾﺴﻤﻰ ﻋﻤﻮد ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﯾﺘﺒﻌﮫ
أﻋﻤﺪة أﺧﺮى .ﻓﺎﻟﻤﺼﻔﻮﻓﺔ اذن ﺗﺘﻜﻮن ﻣﻦ ﺻﻔﻮف وأﻋﻤﺪة.
اﻟﺘﻘﺎطﻌﺎت ﻣﺎﺑﯿﻦ اﻟﺼﻔﻮف واﻷﻋﻤﺪة ﺗﺸﻜﻞ ﺧﻼﯾﺎ ﯾﻤﻜﻦ ان ﯾﺘﻮاﺟﺪ ﻓﯿﮭﺎ ﻋﻨﺎﺻﺮ وأﺷﯿﺎء
وﻗﯿﻢ .ﻓﺎﻟﻘﯿﻤﺔ ) ( 98ﻓﻲ ﻣﺜﺎﻟﻨﺎ ھﻲ ﻋﻨﺼﺮ اﺣﺘﻞ ﺧﻠﯿﺔ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وھﻲ اﻟﻤﺮﺑﻊ أو
اﻟﻤﺴﺎﺣﺔ اﻟﺘﻲ ﯾﻈﮭﺮ ﻓﯿﮭﺎ.
اﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﺗﺴﺘﻐﻞ ھﺬا ﻟﻐﺮض اﻟﻮﺻﻮل اﻟﺴﮭﻞ إﻟﻰ أي ﻋﻨﺼﺮ ﻓﻲ
اﻟﻤﺼﻔﻮﻓﺔ وﻟﻐﺮض إﻋﻄﺎﺋﮫ اﺳﻢ داﺧﻠﻲ ﺑﺮﻣﺠﻲ اﯾﻀﺎ.
67
ھﻨﺎك طﺮﯾﻘﺔ أﻓﻀﻞ ﻣﻦ ذﻟﻚ؛ دﻋﻨﺎ ﻣﺜﻼ ﻧﺮﻣﺰ ﻟﻜﻞ ﻋﺎﻟﻢ أﺳﻤﺎء اﻟﻄﻠﺒﺔ ﺑﺎﻟﺮﻣﺰ Rﻋﻨﺪھﺎ
ﻧﻘﻮل ﻟﻼﺳﻢ اﻻول ـ اﻟﺬي ھﻮ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ) ﻣﺤﻤﺪ ( ـ إﻧﮫ ـ أو ﺗﺴﻠﺴﻠﮫ ـ ﺳﯿﺄﺧﺬ اﻟﺮﻣﺰ R0
واﻻﺳﻢ اﻟﺜﺎﻧﻲ ت اﻟﺬي ھﻮ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ) ﻋﻠﻲ ( ـ ﺳﯿﺄﺧﺬ اﻟﺮﻣﺰ R1واﻟﺜﺎﻟﺚ R2وھﻜﺬا.
وﻟﻠﻤﻮاد اﻟﺪراﺳﯿﺔ ﺳﻨﺮﻣﺰ ﻣﺜﻼ ﺑﺎﻟﺮﻣﺰ Bﻓﺎﻟﻤﺎدة اﻻوﻟﻰ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ﺳﺘﻜﻮن B0واﻟﻤﺎدة
اﻟﺜﺎﻧﯿﺔ ﺳﯿﻜﻮن ﺗﺴﻠﺴﻠﮭﺎ اﻟﺮﻣﺰ B1وھﻜﺬا B2و B3وﻏﯿﺮ ذﻟﻚ ﻣﻦ اﻟﺮﻣﻮز.
اﻷرﻗﺎم اﻟﺼﻐﯿﺮة اﻟﺘﻲ ﺗﺮاھﺎ أﺳﻔﻞ اﻟﺮﻣﺰ ﺗﺴﻤﻰ ) اﻟﺪﻟﯿﻞ ( وھﻲ ﺗﺸﯿﺮ إﻟﻰ ﺗﺴﻠﺴﻞ أو ﻋﻨﻮان
ﻣﻌﯿﻦ ﻣﻘﺼﻮد.
ﻟﻐﺮض اﻟﺘﯿﺴﯿﯿﺮ اﻷﻛﺜﺮ ،ﯾﻤﻜﻦ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ أن ﺗﺄﺧﺬ اﻟﻌﻨﺎﺻﺮ ﻛﻜﻞ رﻣﺰا اﺳﻤﯿﺎ واﺣﺪا
ﻓﻨﻌﻄﻲ ﻣﺜﻼ ﻟﻜﻼ اﺳﻢ اﻟﻄﺎﻟﺐ واﺳﻢ اﻟﻤﺎدة اﻟﺪراﺳﯿﺔ اﻟﺮﻣﺰ Fﻣﺜﻼ أو أي رﻣﺰ .وﺑﻤﺎ أنّ
اﻟﻤﺼﻔﻮﻓﺔ ﺗﺘﻜﻮن ﻣﻦ ﺻﻔﻮف وأﻋﻤﺪة؛ ﻓﺈﻧﮫ ﯾﻤﻜﻦ أن ﯾﺄﺧﺬ ﻛﻞ ﻋﻨﺼﺮ ﺗﺴﻠﺴﻞ ﺻﻔﮫ وﺗﺴﻠﺴﻞ
ﻋﻤﻮده ﺑﺠﺎﻧﺐ اﻻﺳﻢ اﻟﻜﻠﻲ اﻟﻤﻮﺿﻮع ﻟﻠﻤﺼﻔﻮﻓﺔ.
ﻓﻤﺜﻼ أﺳﻤﯿﻨﺎ ﻣﺼﻔﻮﻓﺔ ﺑﺎﻻﺳﻢ masfﻋﻨﺪھﺎ ﯾﻤﻜﻦ ان ﻧﺸﯿﺮ إﻟﻰ اﻟﻌﻨﺼﺮ اﻟﺬي ﯾﺴﻜﻦ ﻓﻲ
اﻟﺼﻒ اﻻول واﻟﻌﻤﻮد اﻻول ﺑﺎﻟﺮﻣﺰ masf0,0وان ﻧﺸﯿﺮ ﻟﻠﻌﻨﺼﺮ اﻟﺬي ﯾﺴﻜﻦ اﻟﺼﻒ
اﻷول ﻓﻲ اﻟﻌﻤﻮد اﻟﺜﺎﻧﻲ ﺑﺎﻟﺮﻣﺰ masf0,1وھﻜﺬا.
msf
68
msf0,0 msf0,1 msf0,2 msf0,3
msf1,0 msf1,1 msf1,2 msf1,3
msf2,0 msf2,1 msf2,2 msf2,3
راﯾﺖ أنّ اﻟﺮﻣﺰ اﻻول ﯾﺒﺪأ ﺑﺎﻟﺘﺴﻠﺴﻞ 0وﻟﯿﺲ 1؛ ﻓﺎﻟﻌﻨﺼﺮ اﻻول ﻛﺎن msf0,0وﻟﻢ ﯾﻜﻦ
.msf1,1ھﻨﺎك ﻟﻐﺎت ﺗﺒﺪأ ﺑﺎﻟﺪﻟﯿﻞ اﻟﺴﻔﻠﻲ 1وﻟﻜﻨﮭﺎ أﺑﻄﺄ ﻧﺴﺒﯿﺎ ﻓﻲ اﻷداء ﺣﯿﻦ اﻟﻮﺻﻮل إﻟﻰ
اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ.
69
....................
. C# C++و ﺑﻌﺪ ھﺬه اﻟﻤﺮﺣﻠﺔ ﺳﻨﻨﺘﻘﻞ ﻓﻌﻠﯿﺎ إﻟﻰ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ وﻛﯿﻒ ﯾﺤﻘﻖ ﺑﻠﻐﺔ
وﺳﻨﻔﺘﺘﺤﮫ ﺑﻤﻘﺪﻣﺔ ﻋﺎﻣﺔ ﻟﻠﻐﺘﯿﻦ.
70
ﻣﺪﺧﻞ ﺇﱃ ﻟﻐﺔ
C++
71
ﻣﻘﺪﻣﺔ ﻋﺎﻣﺔ
ﻋﺎﺋﻠﺔ ﻟﻐﺔ Cﻋﺎﺋﻠﺔ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺘﻨﺎﺳﻘﺔ ﺟﻤﯿﻠﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻛﻠﻤﺎت اﻧﻜﻠﯿﺰﯾﺔ ﺑﺴﯿﻄﺔ وھﻲ
ﺣﺴﺎﺳﺔ ﻟﺤﺎﻟﺔ اﻷﺣﺮف اﻟﺼﻐﯿﺮة واﻟﻜﺒﯿﺮة وﺗﻤﯿﺰ ﺑﯿﻨﮭﺎ وﺗﻘﻮم ﻋﻠﻰ ﻛﻠﻤﺎت ﻣﻔﺘﺎﺣﯿﺔ ﻟﯿﺴﺖ
ﺑﺎﻟﻜﺜﯿﺮة وﻻ اﻟﺼﻌﺒﺔ وھﻲ ﻋﺎﺋﻠﺔ أﺧﺬت ﺗﺨﺪم اﻻﺳﺎﻟﯿﺐ اﻟﺤﺪﯾﺜﺔ ﻟﻠﺒﺮﻣﺠﺔ ﻣﻊ اﻣﻜﺎﻧﯿﺔ ﺧﺪﻣﺘﮭﺎ
ﻟﻼﺳﺎﻟﯿﺐ اﻻﻗﺪم وھﻲ ﺗﻘﻮم ﻋﻠﻰ اﻟﻔﺼﺎﺋﻞ واﻟﺪوال وھﻲ ﻣﻦ اﺷﮭﺮ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ اﻟﺤﺎﻟﯿﺔ.
ﺗﺴﺘﺨﺪم ﻋﺎﺋﻠﺔ Cاﻷﻗﻮاس اﻟﻤﻌﻘﻮﻓﺔ ﻟﺘﻜﺘﺐ ﺑﯿﻨﮭﺎ ﺷﻔﺮة اﻟﺒﺮﻧﺎﻣﺞ وﺧﻄﻮاﺗﮫ .ھﺬا ﯾﻌﻄﻲ
ﻟﻠﺒﺮﻧﺎﻣﺞ ﺷﻜﻞ ﺟﻤﯿﻞ وﯾﻌﻤﻞ ﻋﻠﻰ ﺗﻨﺴﯿﻘﮫ وﺗﻨﻈﯿﻤﮫ.
ﺗﻨﺘﮭﻲ أواﻣﺮ اﻟﻠﻐﺔ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻟﺘﻌﻠﻢ اﻟﻤﺘﺮﺟﻢ ﺑﺎﻛﺘﻤﺎل ھﺬا اﻻﯾﻌﺎز .ـ أي أﯾﻌﺎز ﻛﺎن ـ.
اﻟﮭﯿﻜﻞ اﻟﻌﺎم ﻟﻠﻐﺔ ﻋﺎﺋﻠﺔ Cﯾﻜﻮن ﻋﻠﻰ ﻗﺴﻤﯿﻦ :اﻟﻘﺴﻢ اﻷول وﯾﺨﺺ ﻣﺎﻗﺒﻞ اﻟﺘﺮﺟﻤﺔ ﻣﻦ
ﺗﺒﻠﯿﻐﺎت ﻣﻌﯿﻨﺔ ﻟﻀﻢ ﻣﻠﻔﺎت ﻣﻌﯿﻨﺔ إﻟﻰ ﻋﻤﻠﻨﺎ أو ﻟﺘﺬﻛﯿﺮه ﺑﻤﺠﻤﻮﻋﺔ أﺳﻤﺎء ﺳﺘﺮد ﻣﻦ دون
اﻧﺘﻤﺎءات ﻓﺘﺬﻛﺮ اﻻﻧﺘﻤﺎءات ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ ﻟﯿﻘﻮم اﻟﻤﺘﺮﺟﻢ ﺑﻤﺘﺎﺑﻌﺘﮭﺎ وﺿﻢ ﻛﻞ اﺳﻢ إﻟﻰ
ﻋﺎﺋﻠﺘﮫ وﻣﻦ ﺛﻢ ﯾﻘﻮم ﺑﺎﻟﺘﺮﺟﻤﺔ.
ھﺬا اﻟﻘﺴﻢ اﻷول ﻣﻦ اﻟﮭﯿﻜﻞ اﻟﻜﻠﻲ اﻟﺬي ﻻﺗﻨﺘﮭﻲ ﺟﻤﻠﮫ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻷﻧﮭﺎ ﻟﯿﺴﺖ ﻣﻦ
ﺗﻌﻠﯿﻤﺎﺗﻨﺎ اﻟﺨﺎﺻﺔ ﺑﻨﺎ ،إﻧﻤﺎ ھﻲ ﺗﻌﻠﯿﻤﺎت ﻋﺎﻣﺔ ﻣﺮﺷﺪة ﻟﻠﻤﺘﺮﺟﻢ .ھﺬه اﻟﺘﻌﻠﯿﻤﺎت ـ اﻟﺨﺎﺻﺔ
ﺑﺎﻟﻤﺘﺮﺟﻢ ـ ﻻﺑﺪ أن ﺗﺄﺗﻲ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻜﻠﻲ ﻟﻨﺎ.
أﻣﺎ اﻟﻘﺴﻢ اﻟﺜﺎﻧﻲ ﻓﮭﻮ ﻋﺎﻟﻤﻨﺎ ﻧﺤﻦ وﻣﺎ ﯾﺨﺼﻨﺎ ﻓﻌﻼ ﻣﻦ أواﻣﺮ وﺗﻌﺎﺑﯿﺮ وﺟﻤﻞ ﻧﺤﺘﺎﺟﮭﺎ ﻓﻲ
ﺗﺮﺗﯿﺐ ﻣﺎ ﻟﻨﺼﻞ إﻟﻰ ﺣﻞ ﻗﻀﯿﺔ ﻣﺎ.
72
اﻟﻘﺴﻢ اﻟﺜﺎﻧﻲ ﺑﺪوره ﯾﺄﺗﻲ ﻋﻠﻰ ﻗﺴﻤﯿﻦ :ﻗﺴﻢ رﺋﯿﺲ وﻗﺴﻢ ﻓﺮﻋﻲ ـ أو ﻣﺘﻔﺮع ـ وﻻ ﯾﻠﺰم ھﻨﺎ أن
ﯾﺄﺗﻲ ا ﻟﻘﺴﻢ اﻟﺮﺋﯿﺲ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ؛ ﺑﻞ ﻗﺪ ﯾﺄﺗﻲ ﻓﻲ أي ﻣﻜﺎن ﻣﻨﮫ ،أو ﻓﻲ ﻧﮭﺎﯾﺘﮫ.
اﻟﻘﺴﻢ اﻟﺮﺋﯿﺲ ھﻮ اﻟﺪاﻟﺔ اﻻم اﻟﺘﻲ ﺗﻮﺿﻊ ﻓﯿﮭﺎ اﻟﺨﻄﻮط اﻟﻌﺮﯾﻀﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ وﺗﻮﺿﻊ اﻟﺘﻔﺎﺻﯿﻞ
ﻓﻲ اﻷﻗﺴﺎم اﻟﻔﺮﻋﯿﺔ.
ﯾﺒﺪأ اﻟﺘﻨﻔﯿﺬ اﻟﻔﻌﻠﻲ ﻣﻦ اﻟﺪاﻟﺔ اﻷم ﺧﻄﻮة ﺑﻌﺪ أﺧﺮى ﻓﺈذا ﺻﺎدف ﯾﻘﺘﻀﻲ اﺟﺮاءا ﺧﺎرﺟﯿﺎ أو
داﻟﺔ ﻓﺮﻋﯿﺔ ،ﺧﺮج اﻟﺘﻨﻔﯿﺬ ﻣﻦ اﻟﺪاﻟﺔ اﻻم ﻟﯿﺬھﺐ إﻟﻰ ﺗﻠﻚ اﻟﺘﻔﺎﺻﯿﻞ ﺣﺘﻰ اذا اﻧﺘﮭﻰ ﻋﺎد اﻟﺘﻨﻔﯿﺬ
ﻣﺮة أﺧﺮى إﻟﻰ اﻟﺪاﻟﺔ اﻻم واﻟﻰ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ ﻟﮭﺎ .وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﻘﺮﯾﺒﻲ اﻟﺘﺎﻟﻲ:
ﯾﺒﺪأ اﻟﺘﻨﻔﯿﺬ ﻋﻨﺪ رﻗﻢ 1ﺛﻢ 2ﺛﻢ 3ﺛﻢ ﻋﻨﺪ رﻗﻢ 4ﯾﺨﺮج اﻟﺘﻨﻔﯿﺬ ﻟﯿﺬھﺐ إﻟﻰ اﻟﺪاﻟﺔ aﻓﯿﻨﺘﮭﻲ ﻣﻨﮭﺎ
ﻟﯿﻌﻮد ﻋﻨﺪ رﻗﻢ 5ﺛﻢ ﻋﻨﺪ رﻗﻢ 6ﯾﺨﺮج ﻟﯿﺬھﺐ ﻋﻨﺪ اﻻﺟﺮاء bﻓﯿﻨﺘﮭﻲ ﻣﻨﮫ ﻟﯿﻌﻮد ﻋﻨﺪ رﻗﻢ 7
.
اﻟﺪاﻟﺔ اﻻم
}
1ﺑﺪاﯾﺔ اﻟﺪاﻟﺔ اﻻم
2أﻣﺮ وإﯾﻌﺎز ﻣﻌﯿﻦ
3أﻣﺮ وإﯾﻌﺎز ﻣﻌﯿﻦ
4ﻧﻔﺬ داﻟﺔ ﺧﺎرﺟﯿﺔ ) aھﻨﺎ ﯾﺨﺮج اﻟﺘﻨﻔﯿﺬ ﻟﯿﺒﺤﺚ ﻋﻦ اﻟﺪاﻟﺔ ( a
5أﻣﺮ وإﯾﻌﺎز ﻣﻌﯿﻦ
6اﺳﺘﺪﻋﻲ اﺟﺮاء ﺧﺎرﺟﻲ ) bھﻨﺎ ﯾﺨﺮج اﻟﺘﻨﻔﯿﺬ ﻟﯿﺒﺤﺚ ﻋﻦ اﻻﺟﺮاء ( b
7أﻣﺮ وإﯾﻌﺎز ﻣﻌﯿﻦ
ﻧﮭﺎﯾﺔ اﻟﺪاﻟﺔ اﻻم ـ وھﻮ ﻧﮭﺎﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ
{
73
ﲨﻞ ﺍﳌﻼﺣﻈﺎﺕ ﻭﺍﻟﺘﻌﻠﻴﻘﺎﺕ
ﻣﻦ اﻟﻤﻔﻀﻞ أن ﯾﻜﻮن ﺑﺮﻧﺎﻣﺠﻚ واﺿﺤﺎ ﺑﺨﻄﻮاﺗﮫ ،ﻟﺬﻟﻚ ﯾﺴﺘﺤﺴﻦ ذﻛﺮ ﺑﻌﺾ اﻟﺸﺮوح
اﻟﺒﺴﯿﻄﺔ ﻣﻊ ﺑﻌﺾ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﯾﺮاد إﺟﺮاؤھﺎ ﻟﻐﺮض ﺗﻮﺿﯿﺤﮭﺎ ﻟﻠﻐﯿﺮ اﻟﺬي رﺑﻤﺎ ﯾﺮﯾﺪ أن
ﯾﻄﻮر ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ أو ﻟﻚ ﻣﺴﺘﻘﺒﻼ ﺣﺘﻰ ﺗﺘﺬﻛﺮ ﻟﻤﺎذا ﻓﻌﻠﺖ ﻛﺬا.
ﺟﻤﻞ اﻟﺘﻌﻠﯿﻘﺎت ﻻﺗﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺷﻲء وﻻﺗﺘﺮﺟﻢ وﯾﺘﺠﺎھﻠﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ وﻛﺄﻧﮭﺎ
ﻏﯿﺮ ﻣﻮﺟﻮدة.
ھﻨﺎك ﻋﺪة أﺳﺎﻟﯿﺐ ﻟﺠﻤﻞ اﻟﺘﻌﻠﯿﻘﺎت ،ﻓﮭﻨﺎك اﺳﻠﻮب ﻟﺠﻤﻞ ﻣﻦ ﺳﻄﺮ واﺣﺪ وھﻨﺎك اﺳﻠﻮب ﻟﻌﺪة
اﺳﻄﺮ.
ﻓﻤﺎ أن ﯾﺠﺪ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺸﺮطﺘﯿﻦ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺠﻤﻠﺔ ﺣﺘﻰ ﯾﺘﺠﺎھﻠﮭﺎ وﯾﺘﺠﺎھﻞ ﻣﺎﺑﻌﺪھﺎ ﻋﻠﻰ ﻧﻔﺲ
اﻟﺴﻄﺮ.
74
*/
*/
)(int main
{
;return 0
}
أﻧﺖ ﺗﺘﺴﺎءل :ﻣﺎ ﻣﻌﻨﻰ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺘﺒﻘﻲ ،أو ﻣﺎ ﻣﻌﻨﻰ ھﺬا اﻟﺠﺰء اﻟﻤﺘﺒﻘﻲ ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ؟.
إﻧّﮫ اﻟﮭﯿﻜﻞ اﻟﻌﺎم اﻟﻔﺎﻋﻞ وﻛﺄنّ اﻟﻤﺘﺒﻘﻲ ھﻨﺎ ھﻮ اﻟﻤﺪﯾﺮ اﻟﺬي ﯾﺴﺘﻠﻢ زﻣﺎم إدارة ﻛﻞ ﻣﺎ ﺗﻀﻌﮫ
ﺑﯿﻦ ﯾﺪﯾﮫ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ اﻟﺬي ﺗﻜﺘﺒﮫ ﻓﻲ ﺣﻀﺮﺗﮫ وﺗﺤﺖ إﺷﺮاﻓﮫ.
ھﺬا اﻟﺠﺰء اﻟﻤﺘﺒﻘﻲ ھﻮ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ اﻟﺘﻲ ﺗﺪﯾﺮ ﻛﻞ ﺷﻲء ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ.
75
ﺍﻟﺪﺍﻟﺔ ﺍﻷﻡ
C++ﺗﻘﻮم ﻋﻠﻰ داﻟﺔ رﺋﯿﺴﺔ ﺗﻜﺘﺐ ﻓﯿﮭﺎ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ ﻗﺪ ذﻛﺮﻧﺎ ﺳﺎﺑﻘﺎ ﺑﺄنّ ﻟﻐﺔ
ﻟﺒﺮﻧﺎﻣﺠﻚ ،وأنّ ھﺬه اﻟﺪاﻟﺔ ﺑﻤﺜﺎﺑﺔ اﻷم اﻟﻤﻮﺟﮭﺔ ﻷﺑﻨﺎﺋﮭﺎ ،اﻟﺘﻲ ﻣﺎ أن ﺗﺴﺘﺪﻋﻲ أﺣﺪ إﻻ وذھﺐ
ﯾﻘﻀﻲ اﻟﺸﺄن اﻟﻤﻜﻠﻒ ﺑﮫ ﺛﻢ ﯾﻌﻮد إﻟﯿﮭﺎ ﻛﺄﻧّﮫ ﯾﺨﺒﺮ ﺑﺎﻧﺠﺎز اﻟﻌﻤﻞ اﻟﺬي أُﺳﻨﺪ إﻟﯿﮫ.
واﻟﺘﻲ ھﻲ ﺑﻤﺜﺎﺑﺔ ﻛﻠﻤﺔ ) اﻟﻌﻮدة ( ،ـ اذا ﻛﻨﺖ ﺗﺬﻛﺮ ﺷﺮﺣﻨﺎ ﺳﺎﺑﻘﺎ ـ.
76
ﺗﺠﺪ ﻛﺬﻟﻚ أنّ ﻛﻠﻤﺔ ) اﻟﻌﻮدة ( ﺗﺤﻤﻞ ﻣﻌﮭﺎ ﻗﯿﻤﺔ اﻟﺼﻔﺮ ) ( 0
;return 0
ھﺬا ﯾﻌﻨﻲ أنّ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ھﻨﺎ ﻻ ﺗﻌﯿﺪ ﻗﯿﻤﺔ ﻣﻦ ﺟﺮاء ﺗﻨﻔﯿﺬھﺎ ،ذﻟﻚ ﻷنّ اﻟﺒﺮﻧﺎﻣﺞ ﻗﺪ وﺻﻞ
ﻧﮭﺎﯾﺘﮫ وﻟﯿﺲ ھﻮ ﺑﺎﻧﺘﻈﺎر ﻗﯿﻤﺔ ﻣﺤﺘﻤﻠﺔ ﺗﺨﺪﻣﮫ.
وﻟﻜﻦ اﻟﺪاﻟﺔ ﻋﺎدة ﻣﺎ ﯾﻜﻮن ﻟﮭﺎ وﺳﯿﻂ أو اﻛﺜﺮ ﻛﻤﺎ ﺗﺒﯿﻦ ﻟﻚ ﻣﻦ ﻗﺒﻞ .أﻣﺎ ﻓﻲ ﺣﺎﻟﺘﻨﺎ ھﺬه ﻓﻼ
ﺣﺎﺟﺔ ﻟﻨﺎ ﺑﻮﺳﯿﻂ ﻓﺘﺒﻘﻰ اﻷﻗﻮاس ﺧﺎﻟﯿﺔ ﻣﻦ دون ﺷﻲء.
int أﯾﻀﺎ ﻧﺠﺪ ﻣﺎ ﻗﺒﻞ اﺳﻢ اﻟﺪاﻟﺔ اﻟﻜﻠﻤﺔ
ھﺬه اﻟﻜﻠﻤﺔ ﺗﺼﻒ وﺗﺒﯿﻦ ﻧﻮع اﻟﺪاﻟﺔ؛ أو ﺑﺘﻌﺒﯿﺮ أﺻﺢ :ﻧﻮع اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺳﺘﺘﻘﺒﻠﮭﺎ اﻟﺪاﻟﺔ أو
ﺗﻌﻄﯿﮭﺎ أو ﺗﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ وﺳﻨﺄﺗﻲ إﻟﻰ ﺗﻮﺿﯿﺢ ذﻟﻚ ﻓﯿﻤﺎ ﺑﻌﺪ.
دﻋﻨﺎ اﻵن ﻧﻀﻊ ﻟﻠﮭﯿﻜﻞ اﻟﻌﺎم ﺟﻤﻠﺔ ﺗﻌﻠﯿﻖ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ اﻟﻔﻘﺮة اﻟﺴﺎﺑﻘﺔ ﻟﯿﻜﻮن اﻟﺸﻜﻞ ﻛﺎﻵﺗﻲ:
;return 0
}
77
ﻻﺗﻨﺲ ﺑﺄنّ ﺟﻤﻞ اﻟﺘﻌﻠﯿﻖ ﻻﺗﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ وﻋﻤﻠﮫ.
دﻋﻨﺎ ﻧﻀﯿﻒ ﺟﻤﻞ ﺗﻌﻠﯿﻖ أﺧﺮى ﻟﻜﻲ ﻧﺄﻟﻒ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻠﻐﺔ ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ وﻟﻨﺄﻟﻒ وﻧﻔﮭﻢ ﺷﻜﻞ
اﻟﺒﺮﻧﺎﻣﺞ وھﯿﺌﺘﮫ ﺑﺼﻮرة ﻋﺎﻣﺔ ﺑﺤﯿﺚ ﻻﺗﻌﻮد ﺻﻮرﺗﮭﺎ ﻋﻨﺪﻧﺎ ﻣﺴﺘﻐﺮﺑﺔ.
ﻓﯿﻤﺎ ﺑﻌﺪ ﺳﻨﻘﻮم ﺑﺼﻨﺎﻋﺔ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﯾﺠﻤﻊ ﻋﺪدﯾﻦ .ﻟﻜﻦ اﻟﺬي ﻧﺮﯾﺪ ﺗﺄﻛﯿﺪه ھﻨﺎ ھﻮ أنّ ھﺬه
اﻟﺪاﻟﺔ اﻷم ھﻲ أھﻢ داﻟﺔ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ وﻻ ﯾﻤﻜﻦ اﻻﺳﺘﻐﻨﺎء ﻋﻨﮭﺎ ﻣﻄﻠﻘﺎ .أﻣﺎ ﻣﻮﻗﻌﮭﺎ؛ ﻓﻠﯿﺲ
ﺷﺮطﺎ أن ﯾﻜﻮن ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ؛ ﺑﻞ ﻗﺪ ﺗﺄﺗﻲ ﻓﻲ وﺳﻄﮫ أو ﻧﮭﺎﯾﺘﮫ .وﻟﻜﻦ أﯾﻨﻤﺎ ﻛﺎﻧﺖ؛
ﻓﺎﻟﺘﻨﻔﯿﺬ ﺳﯿﺒﺪأ ﻣﻨﮭﺎ وﯾﻨﺘﮭﻲ إﻟﯿﮭﺎ.
78
ﻟﻌﻤﻞ ذﻟﻚ وﻟﻀﻢ وادراج أي ﻣﻜﺘﺒﺔ ﻣﻦ ﻟﻐﺔ ﺑﺮﻣﺠﺘﻨﺎ ﻧﺤﺘﺎج إﻟﻰ إﺧﺒﺎر اﻟﻤﺘﺮﺟﻢ ﺑﺬﻟﻚ ﻟﯿﻘﻮم
ھﻮ ﺑﺎﺳﺘﺪﻋﺎء وادراج ﺗﻠﻚ اﻟﻤﻜﺘﺒﺔ وھﺬا ﻣﺎ ﺗﻘﻮم ﺑﮫ ﺟﻤﻞ وأدوات اﻟﻤﻮﺟﮭﺎت.
ﺍﳌﻮﺟﻬﺎﺕ
include ﻻدراج ﻣﻜﺘﺒﺔ ﻧﺤﺘﺎج إﻟﻰ ﺟﻤﻠﺔ ﺗﻘﻮم ﺑﺬﻟﻚ .ھﺬه اﻟﺠﻤﻠﺔ ﺗﺘﺄﻟﻒ ﻣﻦ ﻛﻠﻤﺔ
# اﻟﺘﻲ ﺗﻌﻨﻲ ) ﺗﻀﻤﯿﻦ ( واﻟﺘﻲ ﯾﺴﺒﻘﮭﺎ إﺷﺎرة ﻣﻌﯿﻨﺔ ھﻲ إﺷﺎرة
اﻟﺘﻲ ﻣﺎ أن ﯾﺮاھﺎ اﻟﻤﺘﺮﺟﻢ ﺣﺘﻰ ﯾﻌﻠﻢ ﺑﺄﻧﮫ ﺑﺼﺪد ﺗﻀﻤﯿﻦ ﻣﻜﺘﺒﺔ ﻣﻌﯿﻨﺔ.
#include أﺻﺒﺢ ﺷﻜﻞ اﻟﻜﻠﻤﺔ اﻵن ھﻜﺬا:
ﻟﻜﻦ ھﺬا ﻻ ﯾﻜﻔﻲ؛ ﻓﺎﻟﻜﻠﻤﺔ اﻟﺴﺎﺑﻘﺔ ﺗﺨﺒﺮ اﻟﻤﺘﺮﺟﻢ ﺑﻌﻤﻠﯿﺔ اﻟﺘﻀﻤﯿﻦ؛ وﻟﻜﻦ ﺗﻀﻤﯿﻦ ﻣﺎذا؟ .أي
ﻣﻜﺘﺒﺔ ﻣﻦ ﻣﻜﺘﺒﺎت اﻟﻠﻐﺔ ﯾﺮاد ﺗﻀﻤﯿﻨﮭﺎ؟.
< > وﻟﺘﻌﯿﯿﻦ ذﻟﻚ ﯾﺄﺗﻲ ﺑﻌﺪ اﻟﻜﻠﻤﺔ ھﺎﺗﯿﻦ اﻹﺷﺎرﺗﯿﻦ
اﻟﺘﻲ ﺳﯿﻜﺘﺐ ﺑﯿﻨﮭﻤﺎ اﺳﻢ اﻟﻤﻜﺘﺒﺔ اﻟﻤﺮادة.
ﻓﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻨﮭﺎﺋﻲ ﻛﮭﺬا ﻣﺜﻼ:
>#include <iostream
وﻟﯿﺲ ھﻨﺎك ﺑﻌﺪ ھﺬه اﻟﺠﻤﻠﺔ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻷنّ ﺟﻤﻠﺔ اﻟﺘﻮﺟﯿﮫ ﻟﯿﺴﺖ ﺟﻤﻠﺔ ﺗﻨﻔﯿﺬﯾﺔ ﯾﺮاد
ﻧﺘﯿﺠﺘﮭﺎ؛ ﻟﯿﺴﺖ ھﻲ ﻣﻦ ﺻﻠﺐ ﻗﻀﯿﺔ ﺑﺮﻧﺎﻣﺠﻨﺎ؛ إﻧﻤﺎ ھﻲ ﺑﺸﻜﻞ ﺗﻘﺮﯾﺒﻲ ،إﺷﻌﺎر ﻟﻠﻤﺘﺮﺟﻢ ﺑﺄن
ﯾﻀﻢ ﻣﺤﺘﻮﯾﺎت ﻣﻠﻒ ﻣﺎ إﻟﻰ ﺟﺎﻧﺐ ﻋﻤﻠﻨﺎ.
79
ﻟﻜﻨﻨﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ اﻟﺮﯾﺎﺿﻲ ﻛﻤﺎ ﻗﻠﻨﺎ ،ﻧﺤﻦ ﺑﺤﺎﺟﺔ إﻟﻰ ﺿﻢ اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ إﻟﯿﻨﺎ واﻟﺘﻲ
cmath اﺳﻤﮭﺎ
ﻓﻠﮭﺬا ﺳﺘﻜﻮن اﻟﺠﻤﻠﺔ ﺑﮭﺬا اﻟﺸﻜﻞ:
>#include <cmath
وﯾﻤﻜﻦ أن ﻧﻀﯿﻒ إﻟﻰ ھﺬه ﺗﻌﻠﯿﻖ ﻟﯿﻜﻮن ﺷﻜﻠﮭﺎ ﻛﺎﻟﺘﺎﻟﻲ:
)(int main
{
ھﻨﺎ ﺿﻊ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ//
ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﻛﮭﺬا ،ﻧﺤﻦ ﻻﻧﺤﺘﺎج ﺣﻘﯿﻘﺔ إﻟﻰ ﺟﻤﻠﺔ اﻟﺘﻮﺟﯿﮫ ﻷﻧﻨﺎ ﻻ ﻧﺤﺘﺎج ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ
ھﺬا إﻟﻰ ھﺬه اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ اﻟﻤﺨﺘﺼﺔ؛ وﻟﻜﻦ ﻛﻤﺎ ذﻛﺮﻧﺎ ،ﻟﻌﻠﻨﺎ ﻧﻔﻜﺮ ﻣﺴﺘﻘﺒﻼ ﻓﻲ ﺗﻄﻮﯾﺮه
وﺟﻌﻠﮫ ﺑﺮﻧﺎﻣﺠﺎ رﯾﺎﺿﯿﺎ ﺑﺤﺘﺎ.
80
اﻟﻤﻮﺟﮭﺎت ـ ﻛﻤﺎ ﺗﺮى ـ ﯾﻜﻮن ﻣﻮﻗﻌﮭﺎ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ ﻗﺒﻞ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ .وھﺬه ھﻲ ﻣﻦ
ﺿﻤﻦ اﻟﺠﻤﻞ اﻟﺘﻲ إن ﻛﺎن وﺟﻮدھﺎ ﺿﺮورﯾﺎ ،ﻓﻼﺑﺪ أن ﺗﺬﻛﺮ ﻓﻲ أول اﻟﺒﺮﻣﺠﺔ ﻓﻲ اﻟﻘﺴﻢ
اﻷول ﻣﻨﮫ.
ﻓﻲ . C# include ﻻﺗﻮﺟﺪ ﻋﺒﺎرة اﻟﺘﻀﻤﯿﻦ
ﻋﻤﻠﯿﺔ اﻻدﺧﺎل ھﺬه أو ﻛﯿﻔﯿﺔ اﻹﺧﺮاج أو اﻟﺮﺑﻂ ﻣﺎﺑﯿﻨﮭﺎ وﻣﺎﺑﯿﻦ أﺟﮭﺰة اﻟﺤﺎﺳﺒﺔ اﻷﺧﺮى؛
ﻟﯿﺴﺖ ﺑﺎﻟﺴﮭﻮﻟﺔ اﻟﺘﻲ ﺗﺘﺼﻮرھﺎ؛ إﻧﻤﺎ ھﻲ ﻋﻤﻠﯿﺔ ﺗﺤﺘﺎج إﻟﻰ ﺗﺤﻮﯾﻼت وﺗﻔﺴﯿﺮات وﻏﯿﺮ ذﻟﻚ.
81
وﻛﻤﺎ ﺑﯿﻨﺎ ﻓﻲ اﻟﻤﺮﺣﻠﺔ اﻻوﻟﻰ :ﻓﺄﻧﺖ ﻻ ﺗﺪﺧﻞ أرﻗﺎﻣﺎ أو ﺣﺮوﻓﺎ إﻧﻤﺎ ﺿﺮﺑﺎت ﻛﮭﺮﺑﺎﺋﯿﺔ ﻣﺨﺘﻠﻔﺔ
ﺗﺘﺮﺟﻢ إﻟﻰ ﺣﺮوف وأﻋﺪاد .ﻗﺎم اﻟﻤﺒﺮﻣﺠﻮن اﻟﺨﺒﺮاء ﺑﮭﺬا اﻟﻌﻤﻞ ﻧﯿﺎﺑﺔ ﻋﻨﻚ ﺣﺘﻰ ﺗﺴﺘﻠﻢ ﻛﻞ
ﺷﻲ ء ﺟﺎھﺰ أﻣﺎﻣﻚ ﻛﻤﺎ ﺗﺮاه ﻓﻲ ﻋﺎﻟﻤﻚ اﻟﺬي ﺗﺤﯿﺎه وﻣﺎ ﻋﻠﯿﻚ إﻻ أن ﺗﻔﻜﺮ ﺑﻤﻌﺎﻟﺠﺔ ﻗﻀﺎﯾﺎك
ﻛﻤﺎ ﺗﺒﺪو ﻟﻚ ﻓﻲ ﻋﺎﻟﻤﻚ اﻟﺬي ﺗﺮاه .أي اﻧﮭﻢ ﺟﻌﻠﻮا ﻛﻞ ﺷﻲء ﯾﺒﺪو ﻟﻚ ﻛﻤﺎ ﻛﻨﺖ أﻧﺖ ﺗﺘﻮﻗﻊ أن
ﺗﺮاه وﺑﺬﻟﻚ ﺳﺘﻜﻮن اﻷﻣﻮر ﯾﺴﯿﺮة ﻋﻠﯿﻚ.
اذن ﻣﻦ ﺿﻤﻦ ﻋﻤﻠﮭﻢ أﻧﮭﻢ ھﯿﺌﻮا ﻟﻚ ﺑﺮاﻣﺞ ﺗﺴﺎﻋﺪك ﻋﻠﻰ إدﺧﺎل وإﺧﺮاج اﻟﻤﻌﻠﻮﻣﺎت .وﻣﻦ
أھﻤﮭﺎ اﻟﻜﺎﺋﻨﺎت cinو cout
واﻟﺘﻲ ھﻲ أﻏﺮاض ﻣﺸﺘﻘﺔ ﻣﻦ أﺻﻨﺎف ﻛﻤﺎ ﻗﺮﺑﻨﺎ ﻟﺬﻟﻚ ﻓﻲ ﻣﻮﺿﻮع اﻟﻔﺼﺎﺋﻞ واﻟﻜﺎﺋﻨﺎت.
82
>> std::cin ﻓﯿﻜﻮن ﺷﻜﻞ اﻟﺘﻌﺒﯿﺮ ھﻜﺬا
وﻣﺎ ﺑﻌﺪ ھﺬه اﻷداة >> ﯾﺄﺗﻲ ﻣﺘﻐﯿﺮ أو ﺷﻲء ﻣﻤﺎ ﺳﻨﺸﺮﺣﮫ ﻻﺣﻘﺎ ﻓﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ.
ﺑﻤﺎ أﻧﻨﺎ ﺑﺼﺪد ﺑﺮﻧﺎﻣﺞ ﺣﺴﺎﺑﻲ؛ ﻓﻼﺑﺪ إذن أن ﻧﺘﻮﻗﻊ ﻧﺘﯿﺠﺔ ﯾﺠﺐ أن ﻧﺮاھﺎ ﻋﻠﻰ اﻟﺸﺎﺷﺔ .ﻟﺬﻟﻚ
دﻋﻨﺎ ﻣﻊ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﻛﺎﻣﻞ ﯾﻌﺮض ﺟﻤﻠﺔ ﺑﺴﯿﻄﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ ھﻲ !Welcome to C++
ﺳﻨﺤﺘﺎج إﻟﻰ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﻣﺴﺒﻮﻗﺔ ﺑﺠﻤﻠﺔ اﻟﺘﻮﺟﯿﮫ ﻟﻀﻢ ﻣﻜﺘﺒﺔ اﻟﺪﺧﻞ واﻟﻌﺮض وﻣﺎ ﺑﯿﻦ
أﺳﻄﺮ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﺳﻨﻜﺘﺐ ﺗﻌﻠﯿﻤﺘﻨﺎ اﻟﻮﺣﯿﺪة
;"!std::cout << "Welcome to C++
اﻟﺘﻲ ﺳﺘﻌﺮض ﻟﻨﺎ ﺗﻠﻚ اﻟﻜﻠﻤﺎت اﻟﻤﺮادة .وﺑﺎﻟﺘﺎﻟﻲ ﺳﯿﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ ھﻮ ھﺬا:
83
.ﺑﺮﻧﺎﻣﺞ ﯾﻌﺮض ﺟﻤﻠﺔ //
>#include <iostream
>#include <iostream
)(int main
{
;"!std::cout << "Welcome to C++
;return 0
}
.................
84
" << coutﻓﻘﻂ ﻣﻊ ذﻛﺮ اﻟﻨﺺ اﻟﻤﺮاد ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺛﻢ ﻧﻜﺘﺐ ﻓﻲ ﺑﻘﯿﺔ اﻟﺒﺮﻧﺎﻣﺞ ;"
اﻻﻗﺘﺒﺎس.
ﻋﺒﺎرة ; using std::coutﻛﺄﻧﮭﺎ ﺗﺨﺒﺮ اﻟﻤﺘﺮﺟﻢ ﺑﺄﻧﻨﺎ ﺳﻨﺴﺘﻌﻤﻞ أﺳﻤﺎء ﺗﻠﻚ اﻟﻌﺎﺋﻠﺔ وأﺑﻨﺎؤھﺎ
ﺳﯿﺘﻮاﺟﺪون ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﻤﮭﻢ ﻓﻘﻂ .ھﺬا ﯾﺸﺒﮫ ﺻﺪﯾﻖ ﻟﻚ ﯾﻌﺮف أﺳﻤﺎء ﻋﺎﺋﻠﺘﻚ ﻓﻤﺎ أن
ﯾﺨﺒﺮه أﺣﺪ ﺑﺄنّ ﻓﻼن ﻣﻦ اﻟﻌﺎﺋﻠﺔ ﻣﺘﻮاﺟﺪ أو أنّ أﻓﺮاد ﻋﺎﺋﻠﺘﻚ ﻣﺘﻮاﺟﺪون إﻻ وﺳﯿﻌﻠﻤﮭﻢ وﯾﻌﻠﻢ
اﻧﺘﻤﺎءاﺗﮭﻢ ﺑﻤﺠﺮد ﺣﻀﻮر أﺳﻤﺎﺋﮭﻢ اﻟﺸﺨﺼﯿﺔ.
ﻋﻠﻰ ھﺬا ﺳﯿﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ اﻟﺴﺎﺑﻖ ﺑﮭﺬا اﻟﺸﻜﻞ:
>#include <iostream
;using std::cout
)(int main
{
;"!cout << "Welcome to C++
;return 0
}
>#include <iostream
)(int main
{
;"!cout << "Welcome to C++
;return 0
}
85
using std::cin; ﻓﻲ ﺑﺮﻧﺎﻣﺞ آﺧﺮ رﺑﻤﺎ ﻧﺤﺘﺎج اﻟﻰ
اﻧﻘﻞ اﻟﻤﺆﺷﺮ:اﻟﺘﻲ ﺗﻌﻨﻲ using std::endl; وﻛﺬﻟﻚ رﺑﻤﺎ اﻟﻰ أﺷﯿﺎء أﺧﺮى ﻣﻦ ﻣﺜﻞ
.اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ
:وﻋﻠﻰ ھﺬا ﺳﯿﻜﻮن ﺷﻜﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻛﮭﺬا
#include <iostream>
int main()
{
cout << "Welcome to C++!";
return 0;
أﺑﻨﺎء إﺧﻮة؛ ﻟﺬﻟﻚendl وcout وcin وﻟﻜﻮن، ﻛﺜﯿﺮاusing ھﻨﺎ ﺳﯿﺼﺒﺢ اﺳﺘﺨﺪام
اﻟﺴﺎﺑﻘﺔ ﺑﺠﻤﻠﺔ واﺣﺪة ﺗﻐﻄﯿﮭﺎ وھﻲ ﺑﺎﺳﺘﻌﻤﺎل ﻛﻠﻤﺔ using ﯾﻤﻜﻦ اﺧﺘﺼﺎر ﻋﺒﺎرات
: ﺑﮭﺬا اﻟﺸﻜﻞ.namespace
#include <iostream>
int main()
{
cout << "Welcome to C++!";
return 0;
86
ﻓﻲ C#ﻧﺴﺘﺨﺪم usingﻟﺘﻀﻤﯿﻦ ﻣﻜﺘﺒﺎت اﻟﻠﻐﺔ وﻛﺎﺋﻨﺎﺗﮭﺎ .ﻓﻜﻞ ﻛﺎﺋﻨﺎت ﻋﺎﺋﻠﺔ C.net
ﻓﻜﻞ اﻟﻜﺎﺋﻨﺎت ﻣﺸﺘﻘﺔ System ﺗﺮﺟﻊ اﻟﻰ اﻟﻜﺎﺋﻦ Objectاﻟﺬي ﯾﻨﺘﻤﻲ اﻟﻰ اﻟﻔﺼﯿﻠﺔ
System.Object ﻣﻦ
; using Systemأي أﻧﻨﺎ ﺳﻨﺴﺘﺨﺪم ﻣﻜﺘﺒﺔ اﻟـ ﻟﺬﻟﻚ ﻓﻲ C#ﻧﺄﺗﻲ أوﻻ ﺑﺎﻟﺠﻤﻠﺔ
System
ﺑﯿﻨﻤﺎ ﻛﻞ ﻓﺼﯿﻠﺔ ﻧﺒﻨﯿﮭﺎ ﻓﻲ C#ﺗﻜﻮن ﻣﺸﺘﻘﺔ وﺗﺎﺑﻌﺔ ﻟﻌﺎﺋﻠﺔ أﻛﺒﺮ ﯾﺼﺮح ﻋﻨﮭﺎ ﺑﻜﻠﻤﺔ
namespace
namespace First_Application ﻛﻤﺜﻞ
ﺗﻮﺯﻳﻊ ﲨﻞ ﺍﻟﻄﺒﺎﻋﺔ
اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﯾﻤﻜﻦ أن ﯾﻜﺘﺐ ﻋﻠﻰ ھﺬه اﻟﺼﻮرة:
>#include <iostream
)(int main
{
;"cout << "Welcome
;"!cout << "to C++
;return 0
}
87
ﻓﻌﺒﺎرة اﻟﻄﺒﺎﻋﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ ﻛﺮرﻧﺎھﺎ ﻋﻠﻰ ﻣﺮاﺣﻞ ،ﻛﻞ ﻣﺮﺣﻠﺔ ﺗﻄﺒﻊ ﺟﺰء ﻣﻦ اﻟﻌﺒﺎرة ﻷنّ
اﻟﻤﺆﺷﺮ ھﻨﺎ ﺳﯿﻘﻒ ﺣﯿﺚ ﯾﻨﺘﮭﻲ ﻣﻦ طﺒﺎﻋﺔ اﻟﻨﺺ اﻷﺳﺒﻖ .ﻣﻦ أﺟﻞ ذﻟﻚ وﻟﻜﻲ ﻧﺘﺤﻜﻢ ﺑﺸﻜﻞ
ﺧﺮج اﻟﻤﻈﮭﺮ؛ ﻛﺎﻧﺖ ھﻨﺎك ﻣﺤﺎرف ﺧﺎﺻﺔ ﺗﺆدي ﺗﻨﺴﯿﻘﺎت ﻣﻌﯿﻨﺔ.
ﺗﻨﺴﻴﻖ ﺍﻟﻨﺺ
ﻓﻲ ﺑﺮاﻣﺞ أﻛﺒﺮ؛ ﻗﺪ ﺗﺘﺘﺎﺑﻊ ﺟﻤﻞ اﻟﻄﺒﺎﻋﺔ ;" " << coutﻓﺄﺻﺒﺢ ﻣﻦ اﻟﻀﺮوري ﺗﺮﺗﯿﺐ
cout << "Welcome to اﻟﻨﺺ ﺑﺄﺳﻄﺮه .ﻟﺬﻟﻚ ﻗﺪ ﺗﺠﺪ ﻓﻲ ﺑﺮاﻣﺞ ﻣﺜﻞ ﺗﻠﻚ اﻟﺠﻤﻞ
;"C++!\n
ﻓﻤﺜﻞ ھﺬه اﻟﻼﺣﻘﺔ \nﺗﻌﻨﻲ :ﺑﻌﺪ أن ﺗﻄﺒﻊ اﻟﻨﺺ ،اﻧﺘﻘﻞ اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ.
ھﻨﺎك ﻟﻮاﺣﻖ أﺧﺮى ﺗﺄﺗﻲ ﺑﻌﺪ ھﺬه اﻟﺸﺮطﺔ اﻟﻤﺎﺋﻠﺔ \ ﻣﻨﮭﺎ ﻣﺎ ﯾﻈﮭﺮ ﻓﻲ ھﺬا اﻟﺠﺪول:
اﻋﺎدة اﻟﻤﺆﺷﺮ اﻟﻰ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ دون اﻻﻧﺘﻘﺎل اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ \r
"\
ﻟﻄﺒﺎﻋﺔ ﻋﻼﻣﺔ اﻻﻗﺘﺒﺎس
ﺍﻷﲰﺎﺀ ﰲ C++
ﻻ ﺗﺴﺘﻄﯿﻊ أن ﺗﺘﻌﺎﻣﻞ ﻓﻲ اﻟﺤﯿﺎة ﻣﻦ دون ذﻛﺮ اﻷﺷﯿﺎء ﺑﺄﺳﻤﺎﺋﮭﺎ أو إﻋﻄﺎﺋﮭﺎ ﻣﺼﻄﻠﺤﺎت
ﺗﻨﺎﺳﺒﮭﺎ .وﺑﺎﻟﺘﺎﻟﻲ ﺗﺴﺘﻄﯿﻊ أن ﺗﻀﻊ ﻛﻞ ﺷﻲء ﻓﻲ ﻣﻜﺎﻧﮫ وﺗﺘﺎﺑﻌﮫ ﻓﻲ ﺗﻄﻮراﺗﮫ او ﻣﺎ ﯾﻄﺮأ
88
ﻋﻠﯿﮫ .ﺣﺘﻰ اﻟﻤﺠﮭﻮل ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﻧﺼﻄﻠﺢ ﻋﻠﻰ وﺿﻊ اﺳﻢ ) س ( ﻟﮫ .وھﻜﺬا ﺗﺄﺗﻲ
اﻟﻤﺴﺎﺋﻞ ﻛﺄن ﺗﻘﻮل :ﻣﺮﺑﻊ طﻮل ﺿﻠﻌﮫ ﯾﺴﺎوي ﻛﺬا ﻓﻤﺎ ﻣﺴﺎﺣﺘﮫ؛ ﻓﻠﺪﯾﻨﺎ ﻣﻦ اﻷﺳﻤﺎء :طﻮل
اﻟﻀﻠﻊ و اﻟﻤﺴﺎﺣﺔ .أو ﺗﺄﺗﻲ ﻣﺴﺄﻟﺔ أﺧﺮى ﺗﻘﻮل :ﻧﺼﻒ ﻗﻄﺮ اﻟﺪاﺋﺮة ﯾﺴﺎوي ﻛﺬا ،ﻓﻤﺎ ھﻮ
ﻣﺤﯿﻄﮭﺎ ﻋﻠﻤﺎ ﺑﺄنّ اﻟﻨﺴﺒﺔ اﻟﺜﺎﺑﺘﺔ ﺗﺴﺎوي ﻛﺬا.
اذن ﻓﻲ ﻣﺴﺎﺋﻞ اﻟﺒﺮﻣﺠﺔ ﯾﻜﻮن اﺳﻢ اﻟﺸﻲء ﺛﺎﺑﺘﺎ ﺑﯿﻨﻤﺎ ﻗﯿﻤﺘﮫ ﻗﺪ ﺗﺘﻐﯿﺮ ﻛﺄن ﯾﻄﻠﺐ ﻣﻨﻚ ﺣﺴﺎب
اﻟﻤﺴﺎﻓﺔ اﻟﺘﻲ ﺗﻘﻄﻌﮭﺎ ﻣﺮﻛﺒﺔ وﻓﻖ اﻟﺰﻣﻦ؛ ﻓﺎﻟـ ) ﻣﺴﺎﻓﺔ اﻟﻤﻘﻄﻮﻋﺔ ( اﺳﻢ ﻟﻘﯿﻤﺔ ﺗﺘﻐﯿﺮ ﻣﻊ
اﻟﺰﻣﻦ.
ﻛﺬﻟﻚ ﻋﻨﺪﻣﺎ ﺗﻜﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺤﺴﺎب ﻣﺴﺎﺣﺔ داﺋﺮة؛ أﻧﺖ ﻻ ﺗﺘﻌﺎﻣﻞ ﻣﻊ داﺋﺮة واﺣﺪة ،وإﻧﻤﺎ
ﺗﻀﻊ ﻓﻲ ﺣﺴﺒﺎﻧﻚ أﻧّﻚ ﺳﺘﻌﺮض ﻋﻠﯿﻚ أﻧﺼﺎف أﻗﻄﺎر ﻣﺨﺘﻠﻔﺔ وﻛﻠﮭﺎ ﺳﺘﻔﺮض ﻟﮭﺎ اﺳﻢ واﺣﺪ
ھﻮ ﻧﺼﻒ اﻟﻘﻄﺮ .ﻟﮭﺬا ﻓﻨﺼﻒ اﻟﻘﻄﺮ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ ﺳﯿﻜﻮن ﻣﺘﻐﯿﺮا ﻣﻦ داﺋﺮة ﻷﺧﺮى ﺑﯿﻨﻤﺎ
ﺳﺘﻜﻮن اﻟﻨﺴﺒﺔ اﻟﺜﺎﺑﺘﺔ ھﻲ واﺣﺪة ﻟﻠﻜﻞ .وھﻜﺬا أﺻﺒﺤﺖ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺘﻐﯿﺮات ﻛﺜﯿﺮة وﺛﻮاﺑﺖ
ﻓﻮﺟﺐ أن ﻧﺨﺒﺮ اﻟﻤﺘﺮﺟﻢ ﺑﺄﺳﻤﺎء ھﺬه اﻟﻤﺘﻐﯿﺮات وﻏﯿﺮھﺎ.
ﺍﳌﺘﻐﲑﺍﺕ
اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ ﻻ ﯾﻜﺘﻔﻲ ﺑﻮﺿﻊ اﺳﻢ ﻟﮫ وﻛﻔﻰ؛ ﺑﻞ ﯾﺘﻄﻠﺐ أﯾﻀﺎ ﺗﺤﺪﯾﺪ ﻧﻮع
اﻟﻤﺘﻐﯿﺮ .ﻓﻌﺪد اﻟﻄﻼب ﻓﻲ اﻟﺼﻒ ﯾﺄﺗﻲ ﻣﻦ اﻟﻨﻮع اﻟﺼﺤﯿﺢ اﻟﺬي ﻟﯿﺲ ﻓﯿﮫ ﻛﺴﻮر ،ﺑﯿﻨﻤﺎ طﻮل
وﻋﺮض اﻟﺼﻒ ﺑﺎﻷﻣﺘﺎر ﯾﻤﻜﻦ أن ﯾﺄﺗﻲ ﺑﻌﺪد ﺻﺤﯿﺢ ﺑﻌﺪه ﻛﺴﺮ ﻋﺸﺮي وھﻜﺬا اﻟﻮزن
وﻏﯿﺮه.
89
ﻛﺬﻟﻚ ﻗﺪ ﻻ ﯾﻜﻮن اﻟﻤﺘﻐﯿﺮ ﻣﺘﻐﯿﺮ ﻋﺪدي ﯾﺘﻌﺎﻣﻞ ﺑﺎﻟﺮﻗﻢ وﻓﻘﻂ؛ ﺑﻞ ﻗﺪ ﯾﻜﻮن اﻟﻤﺘﻐﯿﺮ ﻟﺒﯿﺎن ﺣﺎﻟﺔ
ﻣﺎ او ظﺮف .ﻓﺎﻟﻄﻘﺲ ﻗﺪ ﯾﻜﻮن ﺣﺎرا او ﺑﺎردا واﺳﻢ ﯾﻮم اﻻﺳﺒﻮع ﻗﺪ ﯾﻜﻮن اﻟﺠﻤﻌﺔ او ﻏﯿﺮ
ذﻟﻚ .ﻓﻨﺤﻦ ھﻨﺎ ﻣﻊ ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع اﻟﻨﺺ.
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻌﺪﺩﻳﺔ
وھﻲ ﻋﻠﻰ أﻧﻮاع ﻣﻨﮭﺎ:
int ﻣﺘﻐﯿﺮ ﻋﺪدي ﺻﺤﯿﺢ
ﻣﺘﻐﯿﺮ ﻋﺪدي ﺑﻔﺎﺻﻠﺔ double
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻨﺼﻴﺔ
وھﻲ ﻣﺘﻐﯿﺮات ﺗﺤﻮي ﺣﺮﻓﺎ أو ﻛﻠﻤﺔ أو اﻛﺜﺮ؛ ﺑﺘﻌﺒﯿﺮ آﺧﺮ :ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ ھﻮ ﺣﺮوف
وﻟﯿﺲ ارﻗﺎم .وھﻲ ﻓﻲ ﺑﻌﺾ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﻧﻮﻋﯿﻦ:
90
ﻣﺘﻐﲑ ﻣﻦ ﺣﺮﻑ ﻭﺍﺣﺪ ﻓﻘﻂ char
وﻗﯿﻤﺔ ھﺬا اﻟﻤﺘﻐﯿﺮ ﯾﺠﺐ ان ﺗﻜﻮن ﺑﯿﻦ ﻋﻼﻣﺘﻲ اﻗﺘﺒﺎس ﻣﻔﺮدة ' '
ﺍﳌﺘﻐﲑﺍﺕ ﺍﳌﻨﻄﻘﻴﺔ
وھﻲ ﻣﺘﻐﯿﺮات ﺗﻘﺒﻞ ﺻﺢ أو ﺧﻄﺄ ﻓﻘﻂ .وھﻲ ﺗﻔﯿﺪ ﻓﻲ ﻋﻤﻠﯿﺔ اﻻﺧﺘﺒﺎرات.
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻜﺎﺋﻨﻴﺔ
وھﻲ ﻣﺘﻐﯿﺮات ﺗﺤﻤﻞ ﻛﺎﺋﻨﺎت؛ وﺑﻤﺎ أنّ ﻛﻞ ﺷﻲء ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ ھﻮ ﻛﺎﺋﻦ؛ ﻟﺬﻟﻚ ﻓﮭﻲ
ﻣﺘﻐﯿﺮات ﻋﺎﻣﺔ ﺗﻘﺒﻞ ﻛﻞ ﺷﻲء.
ﻣﺘﻐﲑﺍﺕ ﻭﺿﻌﻴﺔ
وھﻲ ﻣﺘﻐﯿﺮا ت ﺧﺎﺻﺔ ﻣﻦ ﺻﻨﻊ اﻟﻤﺒﺮﻣﺞ ﻧﻔﺴﮫ اذا أراد أن ﯾﺠﻌﻞ اﺷﯿﺎء ﻣﺎ ﻛﻤﺘﻐﯿﺮات ﺧﺎﺻﺔ
ﺑﮫ .ﻛﺄن ﯾﺠﻌﻞ أﯾﺎم اﻷﺳﺒﻮع ﻓﻲ ﻣﺘﻐﯿﺮ وﺿﻌﻲ ﯾﻘﺒﻞ أﺳﻤﺎء اﯾﺎم اﻷﺳﺒﻮع .ﻓﻜﺄﻧﮫ ﯾﻜﻮن ﻟﺪﯾﮫ
ﻣﺘﻐﯿﺮ ﺧﺎص ﺑﮫ ھﻮ ﻣﺘﻐﯿﺮ أﺳﺒﻮﻋﻲ ـ اذا ﺻﺢ اﻟﺘﻌﺒﯿﺮ ـ.
91
اﻟﻤﺘﻐﯿﺮات ھﻲ ﻣﻮاﺿﻊ ﻓﻲ اﻟﺬاﻛﺮة ﯾﻤﻜﻦ أن ﺗﺘﺼﻮرھﺎ ﻛﺼﻨﺎدﯾﻖ ﻋﻠﯿﮭﺎ أﺳﻤﺎء وﻟﮭﺎ ﻣﺤﺘﻮى
ﻓﻲ داﺧﻠﮭﺎ وﻟﮭﺎ ﻛﺬﻟﻚ ﻋﻨﻮان ﯾﻤﻜﻦ أن ﺗﺼﻞ إﻟﯿﮭﺎ ﻣﻦ ﺧﻼﻟﮫ.
ﻣﺘﻐﲑﺍﺕ ﺃﺧﺮﻯ
ھﻨﺎك أﻓﺮاد ﯾﺤﻔﻈﻮن اﻟﺘﻮارﯾﺦ .وھﻨﺎك ﻣﻦ ﯾﺤﻔﻆ ﻋﻨﺎوﯾﻦ اﻷﺷﺨﺎص واﻟﻌﻮاﺋﻞ وﻏﯿﺮ ذﻟﻚ.
ﻣﺎ ﯾﮭﻤﻨﺎ ھﻨﺎ وﺟﻮد ﻣﺘﻐﯿﺮات ﺧﺎﺻﺔ ﻓﻲ ﻟﻐﺎت Cﺗﺘﻌﺎﻣﻞ وﺗﺤﻮي ﻋﻨﺎوﯾﻦ اﻟﻤﺘﻐﯿﺮات ﻓﻲ
اﻟﺬاﻛﺮة .ھﺬا اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﯾﺨﺘﺺ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻌﻨﻮان ﯾُﺴﺒﻖ ﺑﺈﺷﺎرات ﻣﻌﯿﻨﺔ ﺣﺘﻰ ﯾﻜﻮن
ﻣﻌﺮوﻓﺎ ﻟﻠﻤﺘﺮﺟﻢ.
ﺍﻟﺬﺍﻛﺮﺓ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ
ﯾﻤﻜﻦ أن ﺗﺘﺼﻮر اﻟﺬاﻛﺮة ﻛﺤﻘﻞ ﻣﺠﺪول ،أو ﻛﺠﺪول ﻓﯿﮫ ﺣﻘﻮل؛ ﻓﻜﻞ ﺣﻘﻞ ﯾﻤﻜﻦ أن ﺗﺼﻞ
اﻟﯿﮫ ﻣﻦ ﺧﻼل ﺗﺮﺗﯿﺒﮫ ﻓﻲ اﻟﺠﺪول ورﻗﻤﮫ ـ أي ﺗﺴﻠﺴﻠﮫ ـ .ﻓﯿﻜﻮن ﻟﻜﻞ ﺣﻘﻞ ﻋﻨﻮان .ھﺬا اﻟﺤﻘﻞ
ﻟﮫ ﻣﺴﺎﺣﺔ أو ﺣﺠﻢ ﯾﻤﻜﻦ أن ﺗﻀﻊ ﻓﯿﮫ أﺷﯿﺎء .وھﻜﺬا اﻟﺤﺎل ﻣﻊ اﻟﺬاﻛﺮة؛ ﻓﮭﻲ ﻣﻦ ﻣﻮاﺿﻊ،
ﻛﻞ ﻣﻮﺿﻊ ﻟﮫ ﻋﻨﻮان وﺗﺴﻠﺴﻞ وﻛﻞ ﻣﻮﺿﻊ ﯾﻤﻜﻦ أن ﯾﺤﻮز ﻋﻠﯿﮫ ﻣﺘﻐﯿﺮ ﻟﮫ اﺳﻢ؛ وﺑﺎﻟﺘﺎﻟﻲ ھﺬا
اﻟﻤﻮﺿﻊ ﻣﻦ اﻟﺬاﻛﺮة ﺳﯿﻜﻮن ﺣﺎﻣﻼ ﻟﻘﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ وﺳﯿﺼﻄﺒﻎ ﺑﺎﺳﻢ اﻟﻤﺘﻐﯿﺮ ﺑﺎﻹﺿﺎﻓﺔ اﻟﻰ
ﺗﺴﻠﺴﻠﮫ اﻟﺜﺎﺑﺖ ﺑﯿﻦ ﺑﻘﯿﺔ ﻣﻮاﺿﻊ اﻟﺬاﻛﺮة واﻟﺬي ھﻮ ﻋﻨﻮاﻧﮫ واﻟﺬي ﺳﯿﻜﻮن ﻋﻨﻮاﻧﺎ ﻟﻠﻤﺘﻐﯿﺮ.
ﻣﺜﺎﻝ ﰲ ﺍﳊﻴﺎﺓ
ﻟﻀﺮورة ھﺬا اﻟﻤﻮﺿﻮع وأھﻤﯿﺘﮫ ،دﻋﻨﺎ ﻧﻀﺮب ﻟﮫ ﻣﺜﻼ ﺗﻘﺮﯾﺒﯿﺎ ﻓﻲ اﻟﺤﯿﺎة.
ﺑﯿﺖ اﻟﺴﯿﺪ أﺣﻤﺪ ﻟﮫ ﻋﻨﻮان ﯾﺮﺳﻤﮫ وﯾﺤﻜﯿﮫ رﻗﻢ داره .ﻛﺬﻟﻚ ﺑﯿﺖ أﺣﻤﺪ ﻟﮫ ﻋﺪد أﻓﺮاد.
ﻓﻲ ﻧﻈﺎم اﻟﺒﺮﻣﺠﺔ ،ﯾﻨﻌﻜﺲ ھﺬا ﻛﺎﻟﺘﺎﻟﻲ:
92
اﺳﻢ اﻟﻤﺘﻐﯿﺮ :دار أﺣﻤﺪ
ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ :ﻋﺪد أﻓﺮاد اﻟﺪار
ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ :رﻗﻢ اﻟﺪار
ﻟﻨﻔﺮض أنّ ﻋﺪد اﻷﻓﺮاد ھﻮ ) ( 5
ورﻗﻢ اﻟﺪار ھﻮ ] [ 100
ﻧﺴﺘﻄﯿﻊ اﻵن أن ﻧﻘﻮلُ :رزِق دار أﺣﻤﺪ ﺑﻄﻔﻞ ﻓﺄﺻﺒﺢ اﻟﻌﺪد ھﻮ ) ( 1 + 5
وﻧﺴﺘﻄﯿﻊ أن ﻧﻘﻮلُ :رزِق اﻟﺪار اﻟﺬي ﻋﻨﻮاﻧﮫ ) ( 100ﺑﻄﻔﻞ ﻓﺄﺻﺒﺢ ﻋﺪد أﻓﺮاده ھﻮ
) ﻋﺪد أﻓﺮاد اﻟﻌﻨﻮان ] ( 1 + [ 100
ﻟﻜﻦ اﻷھﻢ ﻣﻦ ذﻟﻚ ﻓﻲ ﻣﻮﺿﻮع اﻟﻌﻨﺎوﯾﻦ؛ أنّ اﻟﺠﮭﺔ اﻟﻌﻠﯿﺎ ﻓﻲ اﻟﻤﺪﯾﻨﺔ ـ وﻛﺬﻟﻚ أﻧﺖ اﻟﺠﮭﺔ
اﻟﻌﻠﯿﺎ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ـ ﺗﺴﺘﻄﯿﻊ أن ﺗﻘﻮل:
ﻋﻠﻰ اﻟﻤﺨﺒﺮ اﻟﺬي ﯾﺮﻗﺐ اﻟﻌﻨﻮان ] [ 100ان ﯾﺘﻘﺪم ﺗﺴﻠﺴﻠﯿﻦ.
وﺑﮭﺬا ﺳﯿﺼﺒﺢ اﻟﻤﺨﺒﺮ اﻣﺎم ﻋﻨﻮان ﺟﺪﯾﺪ ھﻮ ] [ 102
ﻣﺎذا ﻓﻲ اﻟﻌﻨﻮان اﻟﺘﺎﻟﻲ ﻟﺒﯿﺖ اﺣﻤﺪ؟ .ﻻﻧﻌﻠﻢ ذﻟﻚ إﻻ اذا ﻛﻨﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺼﻔﻮﻓﺔ اﻟﺘﻲ ﺳﻨﺄﺗﻲ
ﻋﻠﯿﮭﺎ ﺑﺎذن ﷲ.
93
ﺣﺠﻢ ﻣﻌﯿﻦ ﯾﺸﻐﻠﮫ ﻣﻦ اﻟﺬاﻛﺮة واﻟﻤﺘﻐﯿﺮ اﻟﻌﺎم ﯾﺄﺧﺬ ﺣﯿﺰا ﻛﺒﯿﺮا ﻓﯿﮭﺎ ﻓﯿﺘﺤﺘﻢ أن ﻧﺮاﻋﻲ ﺳﻌﺔ
ذاﻛﺮة اﻟﺠﮭﺎز وﺳﺮﻋﺔ أداﺋﮫ ﻋﻨﺪ ﺗﺤﻤﯿﻠﮫ.
ﺃﲰﺎﺀ ﺍﳌﺘﻐﲑﺍﺕ
ﯾﻤﻜﻦ أن ﺗﻌﻄﻲ ﻟﻠﻤﺘﻐﯿﺮات أي اﺳﻢ ﻋﻠﻰ أن ﻻ ﯾﻜﻮن أﺣﺪ اﻷﺳﻤﺎء اﻟﻤﻔﺘﺎﺣﯿﺔ وﻋﻠﻰ أن ﻻ ﯾﺒﺪأ
ﺑﺄﺣﺪ اﻟﺤﺮوف اﻟﺨﺎﺻﺔ ﻛﺎﻟﻨﻘﻄﺔ واﻟﺸﺎرﺣﺔ أو اﻟﻔﺎﺻﻠﺔ .ﯾﻤﻜﻦ أن ﯾﺘﻀﻤﻦ اﻻﺳﻢ رﻗﻤﺎ ﻛﺄن
ﺗﻜﺘﺐ ﻣﺘﻐﯿﺮ ﺑﺎﺳﻢ . a1وﯾﻤﻜﻦ أن ﯾﺄﺗﻲ ﺑﺤﺮوف ﺻﻐﯿﺮة أو ﻛﺒﯿﺮة ﻣﻊ اﻟﻌﻠﻢ أنّ ﻟﻐﺎت c
ﺗﻤﯿﺰ ﻣﺎﺑﯿﻦ اﻻﺛﻨﯿﻦ .ﻓﻤﺘﻐﯿﺮ ﺑﺎﺳﻢ aھﻮ ﻏﯿﺮ آﺧﺮ ﺑﺎﺳﻢ . Aﻛﺬﻟﻚ ﯾﻤﻜﻦ ﻻﺳﻢ اﻟﻤﺘﻐﯿﺮ أن
ﯾﺒﺪأ ﺑﺨﻂ ﺳﻔﻠﻲ . -ﻟﻜﻦ ﻣﻦ اﻟﻤﻔﻀﻞ أن ﯾﻜﻮن اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻣﻌﺒﺮا ﻋﻨﮫ وﻋﻦ ﻣﮭﻤﺔ ﻗﯿﻤﺘﮫ ﻛـ
heatﻟﻤﺘﻐﯿﺮ ﯾﺤﻤﻞ ﻗﯿﻤﺔ درﺟﺔ اﻟﺤﺮارة.
ﺍﻟﺘﺼﺮﻳﺢ ﻭﺍﻹﺳﻨﺎﺩ
ﻟﻜﻲ ﺗﻀﻊ ﻣﺘﺤﻮﻻ ـ أي ﻣﺘﻐﯿﺮ ـ ﻓﻼﺑﺪ أن ﺗُ َﻌﺮِف اﻟﻤﺘﺮﺟﻢ ﺑﺬﻟﻚ ﻗﺒﻞ اﺳﺘﺨﺪاﻣﮫ .وﯾﻜﻮن ذﻟﻚ
ﺑﻮاﺳﻄﺔ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮫ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺠﻤﻠﺔ ﻣﻌﯿﻨﺔ ﺗﺘﻜﻮن ﻣﻦ ﻧﻮﻋﮫ ﺛﻢ اﺳﻤﮫ ﺛﻢ ﻓﺎﺻﻠﺔ
ﻣﻨﻘﻮطﺔ.
94
= int cat ﻛﺬﻟﻚ ﯾﻤﻜﻦ أن ﺗﺄﺗﻲ ﻋﻤﻠﯿﺘﺎ اﻟﺘﺼﺮﯾﺢ واﻻﺳﻨﺎد ﺑﺠﻤﻠﺔ واﺣﺪة ﻛﺄن ﻧﻜﺘﺐ
;5
اذا ﻛﺎن ﻟﺪﯾﻨﺎ اﻛﺜﺮ ﻣﻦ ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ﻓﯿﻤﻜﻦ ان ﻧﺼﺮح ﻋﻨﮭﻢ ﺗﺒﺎﻋﺎ
;int x
;int a
;int b
او ﺑﺠﻤﻠﺔ واﺣﺪة ﺗﻔﺼﻞ ﺑﯿﻨﮭﻢ ﻓﺎﺻﻠﺔ.
;int x, a, b
ھﻨﺎك طﺮﯾﻘﺔ أﺧﺮى ﺟﻤﯿﻠﺔ ﻟﻮﺿﻊ ﻗﯿﻤﺔ اﺑﺘﺪاﺋﯿﺔ ﻟﻠﻤﺘﻐﯿﺮ وھﻲ طﺮﯾﻘﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ وﻋﻠﻰ
اﻋﺘﺒﺎر أنّ اﻟﻤﺘﻐﯿﺮ ھﻮ ﻛﺎﺋﻦ ﻓﺘﺴﺘﻄﯿﻊ ﺑﺪﻻ ﻣﻦ ھﺬه اﻟﺼﯿﻐﺔ ;int cat = 5
;)int cat(5 أن ﺗﻜﺘﺐ
>#include <iostream
;return 0
}
95
// Fig. 1.6: fig01_06.cpp
// Addition program.
#include <iostream>
std::cout << "Sum is " << sum << std::endl; // print sum
…………………………………………………………………………………………….
cin >> integer1; ﺟﻤﻠﺔ
ﻓﺘﺬھﺐ اﻟﻘﯿﻤﺔEnter ھﻲ ﺟﻤﻠﺔ إدﺧﺎل ﺗﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم أن ﯾﻜﺘﺐ ﻗﯿﻤﺔ وﯾﻀﻐﻂ
integer1 اﻟﻤﺪﺧﻠﺔ اﻟﻰ اﻟﻤﺘﻐﯿﺮ
.وھﻜﺬا ﻣﻊ ﺟﻤﻞ اﻹدﺧﺎل اﻷﺧﺮى
اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺑﺪاﯾﺘﮫ ﯾﺼﺮح ﻋﻦ ﻣﺘﺤﻮﻻت ﺛﻼﺛﺔ ﺛﻢ ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ اﻹظﮭﺎر
96
ﯾﻄﺒﻊ ﻧﺼﺎ ﻟﻠﻤﺴﺘﺨﺪم ﺑﺄن ﯾﻘﻮم ﺑﺈدﺧﺎل ﻗﯿﻤﺔ ﺗﺄﺧﺬھﺎ ﻓﻌﻠﯿﺎ ﺟﻤﻠﺔ اﻹدﺧﺎل
;cin >> integer1
......................................
ﺍﻟﺜﻮﺍﺑﺖ
اﻟﺜﺎﺑﺖ ھﻮ ﻛﺎﻟﻤﺘﻐﯿﺮ ﻟﻜﻦ ﺑﻘﯿﻤﺔ ﺛﺎﺑﺘﺔ ﻻ ﺗﺘﻐﯿﺮ ﺧﻼل اﻟﺒﺮﻧﺎﻣﺞ ﻛﺎﻟﻨﺴﺒﺔ اﻟﺜﺎﺑﺘﺔ وﻛﺜﺎﺑﺖ اﻟﺠﺎذﺑﯿﺔ
اﻻرﺿﯿﺔ وﻏﯿﺮ ذﻟﻚ .ﺑﻌﺾ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﺗﺴﺘﺨﺪم ﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺜﺎﺑﺖ ﻛﻠﻤﺔ constﯾﺘﺒﻊ
ذﻟﻚ ﻧﻮع اﻟﺜﺎﺑﺖ وﻗﯿﻤﺘﮫ.
..........................
97
ﻛﻴﻒ ﻧﻐﲑ ﻗﻴﻢ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﳊﺎﺳﺒﺔ؟.
ﻛﻤﺎ ذﻛﺮﻧﺎ؛ ﯾﺠﺐ ان ﯾﻌﻄﻰ اﻟﻤﺘﻐﯿﺮ ﻗﯿﻤﺔ ﻓﻲ اﺑﺘﺪاﺋﯿﺔ ﻋﻨﺪ اﺳﺘﺨﺪاﻣﮫ ﻓﻲ ﻣﻌﺎدﻟﺔ او ﺣﺴﺎب.
اﻟﻤﺘﻐﯿﺮ ﻋﻨﺪ ذﻟﻚ ﺳﯿﻜﻮن ﻟﮫ ﻣﻮﻗﻊ ﻓﻲ اﻟﺬاﻛﺮة وﻋﻨﻮان وﻗﯿﻤﺔ .ﻓﺎذا اردﻧﺎ ان ﻧﺰﯾﺪ ﻣﻦ ﻗﯿﻤﺔ
;cat = cat + 1 اﻟﻤﺘﻐﯿﺮ catﺑـ ) (1ﻣﺜﻼ؛ ﻓﺎﻧﻨﺎ ﻧﻜﺘﺐ ﺟﻤﻠﺔ ﻛﮭﺬه
ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﺗﻌﺪ ھﺬه اﻟﺠﻤﻠﺔ ﺧﺎطﺌﺔ ،ﻟﻜﻦ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻟﮭﺎ ﻣﻌﻨﻰ ﻣﺨﺘﻠﻒ ﯾﻘﻮل:
اﻟﻘﯿﻤﺔ اﻟﺠﺪﯾﺪة ﻟﻠﻤﺘﻐﯿﺮ catاﺟﻌﻠﮭﺎ ﺑﻘﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺤﺎﻟﯿﺔ ﻓﻲ اﻟﺬاﻛﺮة وأﺿﻒ ﻋﻠﯿﮭﺎ ).(1
وھﻜﺬا ﺳﺘﺤﻞ اﻟﻘﯿﻤﺔ اﻟﺠﺪﯾﺪة ﻣﺤﻞ اﻟﻘﺪﯾﻤﺔ ﻓﻲ اﻟﺬاﻛﺮة.
ﺗﺴﺘﻄﯿﻊ أﻧﺖ أن ﺗﻔﻌﻞ ﻏﯿﺮ ذﻟﻚ اﻟﻜﺜﯿﺮ ﻛﺄن ﺗﻀﺮب اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﻋﺪد أو ﻓﻲ ﻧﻔﺴﮫ.
ﻛﺬﻟﻚ ﺗﺴﺘﻄﯿﻊ أن ﺗﺴﻨﺪ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ إﻟﻰ آﺧﺮ ﻓﺘﻘﻮل ﻣﺜﻼ ـ ﺑﻌﺪ أن ﺗﺼﺮح ﻋﻦ اﻟﻤﺘﻐﯿﺮات ـ:
;a = cat*2 أو ;Cat = aa
أو ﺑﺄي ﺷﻜﻞ ﺗﺤﺘﺎﺟﮫ.
98
ﻣﺪﻯ ﺭﺅﻳﺔ ﺍﳌﺘﻐﲑ
ﻋﻨﺪﻣﺎ ﺗﮭﯿﺊ ﻟﻤﺘﻐﯿﺮ ﯾﻠﺰﻣﮫ ﺑﺮﻧﺎﻣﺠﻚ ،ﯾﺠﺐ أن ﺗﻨﻈﺮ أي ﺟﺰء ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ ﯾﻤﻜﻨﮫ اﻟﺘﻌﺎﻣﻞ ﻣﻊ
ھﺬا اﻟﻤﺘﻐﯿﺮ .ﺑﻤﻌﻨﻰ آﺧﺮ :ﯾﻤﻜﻦ ﻟﺠﺰء ﻣﻦ ﺑﺮﻧﺎﻣﺠﻚ أن ﯾﺮى اﻟﻤﺘﻐﯿﺮ وﯾﺘﻌﺮف ﻋﻠﯿﮫ و ﻻ
ﯾﻤﻜﻦ ذﻟﻚ ﻟﺠﺰء آﺧﺮ .ﯾﻤﻜﻨﻚ أن ﺗﺠﻌﻞ ﻣﺘﻐﯿﺮك ﻋﺎﻣﺎ ﻟﻜﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻓﺘﺮاه ﻛﻞ ﻛﺘﻞ اﻟﺒﺮﻧﺎﻣﺞ،
أو ﯾﻤﻜﻦ أن ﺗﺤﺼﺮ رؤﯾﺘﮫ ﻋﻨﺪ ﻛﺘﻠﺔ ﻣﻌﯿﻨﺔ ﻓﻘﻂ أو ﻣﺠﻤﻮﻋﺔ ﻛﺘﻞ.
اذا أردت ﻟﻤﺘﻐﯿﺮك أن ﯾﺮى ﻣﻦ ﻛﻞ أﺟﺰاء اﻟﺒﺮﻧﺎﻣﺞ ﻓﯿﺠﺐ أن ﺗﺼﺮح ﻋﻨﮫ ﻗﺒﻞ اﻟﺪاﻟﺔ
)(main
>#include <iostream
int a1
)(int main
{
{
}
;return 0
}
اﻣﺎ اذا أردت أن ﺗﺮاه ﻛﺘﻠﺔ ﻣﻌﯿﻨﺔ ـ اﻟﻜﺘﻠﺔ ﻣﺤﺼﻮرة ﺑﯿﻦ ﻗﻮﺳﯿﻦ } { ـ ﻓﯿﻤﻜﻨﻚ أن ﺗﻌﻠﻦ ﻋﻨﮫ
ﻗﺒﻞ اﻟﻘﻮس اﻻول ﻟﻜﺘﻠﺘﮫ او ﺗﺼﺮح ﻋﻨﮫ داﺧﻞ اﻟﻜﺘﻠﺔ ﻧﻔﺴﮭﺎ.
99
>#include <iostream
)(int main
{
int a1
{
}
;return 0
}
اذا ﻛﺎﻧﺖ ھﻨﺎك ﻛﺘﻞ ﻣﺘﺪاﺧﻠﺔ ﻓﺎﻻﺟﺰاء اﻟﺘﻲ ﺿﻤﻦ اول ﻗﻮس ﺑﻌﺪ اﻟﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺘﻐﯿﺮ ھﻲ
ﯾﻤﻜﻨﮭﺎ أن ﺗﺮى ذﻟﻚ اﻟﻤﺘﻐﯿﺮ.
وﻓﯿﻤﺎ ﯾﻠﻲ ﺗﻮﺿﯿﺢ ﻟﺬﻟﻚ:
………………………………………………………………..
ﻣﺠﺎل رؤﯾﺔ اﻟﻤﺘﻐﯿﺮ
)(int main
{
int a1
// a1 ُﺮى ھﻨﺎ
ﯾ
{
ُﺮى ھﻨﺎ // a1
ﯾ
int a2
ُﺮى ھﻨﺎ a1و // a2
ﯾ
{
ُﺮى ھﻨﺎ a1و // a2
ﯾ
int a3
ُﺮى ھﻨﺎ a1و a2و // a3
ﯾ
100
ِﻢَ ھﻨﺎ } // a3
ﺣُﻄ
ُﺮى ھﻨﺎ a1و // a2
ﯾ
………………………………………………………………..
اﻟﻤﺘﻐﯿﺮات اﻟﻌﺎﻣﺔ واﻟﻤﺤﻠﯿﺔ
ﻣﺘﻐﯿﺮ ﻋﺎم ﺗﺮاه ﻛﻞ اﻟﻜﺘﻞ أي ﻛﻞ اﻟﺒﺮﻧﺎﻣﺞ int a0 // a0
ﻣﺘﻐﯿﺮ ﻋﺎم ﺗﺮاه ﻛﻞ اﻟﻜﺘﻞ أي ﻛﻞ اﻟﺒﺮﻧﺎﻣﺞ int a00 // a00
)(int main
{
int a1
// a1 ُﺮى ھﻨﺎﻓﮭﻮ ﻣﺤﻠﻲ
ﯾ
{
ُﺮى ھﻨﺎﻓﮭﻮ ﻣﺤﻠﻲ // a1
ﯾ
int a2
ُﺮى ھﻨﺎﻓﮭﻤﺎ ﻣﺤﻠﯿﺎن a1و // a2
ﯾ
{
ُﺮى ھﻨﺎﻓﮭﻤﺎﻣﺤﻠﯿﺎن a1و // a2
ﯾ
int a3
ُﺮى ھﻨﺎﻓﮭﻢ ﻣﺤﻠﯿﻮن a1و a2و // a3
ﯾ
ِﻢَ ھﻨﺎﻓﮭﻮ ﻣﺤﻠﻲ } // a3
ﺣُﻄ
ُﺮى ھﻨﺎﻓﮭﻤﺎﻣﺤﻠﯿﺎن a1و // a2
ﯾ
ﺍﻟﻌﻤﻠﻴﺎﺕ ﻭﺍﻟﻌﻮﺍﻣﻞ
اﻟﺒﺮﻧﺎﻣﺞ ﯾﻜﺘﺐ ﻟﯿﻘﻮم ﺑﺘﻨﻔﯿﺬ أواﻣﺮ وﻋﻤﻠﯿﺎت ﻣﻌﯿﻨﺔ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮات وﻏﯿﺮھﺎ .وﻟﻜﻦ ﻟﻜﻞ ﻧﻮع
ﻣﻦ اﻟﻤﺘﻐﯿﺮات ﻋﻮاﻣﻠﮫ وﻋﻤﻠﯿﺎﺗﮫ اﻟﺘﻲ ﺗﻨﺎﺳﺒﮫ .ﻓﺎﻟﻤﺘﻐﯿﺮات اﻟﻌﺪدﯾﺔ ﯾﺼﺢ ﻋﻠﯿﮭﺎ ﻋﻤﻠﯿﺎت
رﯾﺎﺿﯿﺔ ﻣﺜﻞ اﻟﺠﻤﻊ واﻟﻄﺮح وﻏﯿﺮھﺎ ،ﺑﻨﻤﺎ اﻟﻨﺼﯿﺔ ﯾﺠﺮى ﻋﻠﯿﮭﺎ ﻧﻮع آﺧﺮ ﻛﺎﺳﺘﺒﺪال ﺣﺮف
ﻣﺤﻞ ﺣﺮف أو إﻟﺤﺎق ﻛﻠﻤﺔ ﺑﺄﺧﺮى أو ﻏﯿﺮ ذﻟﻚ.
101
ﺍﻟﻌﻮﺍﻣﻞ
وھﻲ إﺷﺎرات وﻋﻼﻣﺎت ﺗﺮﺑﻂ ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ أو داﻟﺘﯿﻦ أو أﻛﺜﺮ أو ﺗﺠﺮي ﻋﻠﻰ ﻣﺘﻐﯿﺮ واﺣﺪ
أو داﻟﺔ.
ﻣﻦ أﻣﺜﻠﺔ ذﻟﻚ إﺷﺎرة اﻟﺠﻤﻊ ) ( +اﻟﺘﻲ ﺗﺄﺗﻲ ﻣﺜﻼ ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ ﻟﺘﺠﻤﻌﮭﻤﺎ .أو إﺷﺎرة اﻟﺴﺎﻟﺐ
اﻟﺘﻲ ﺗﺴﺒﻖ ﻣﺘﻐﯿﺮ ﻟﺘﺠﻌﻞ ﻗﯿﻤﺘﮫ ﺳﺎﻟﺒﺔ ﺗﺤﺖ ﻗﯿﻤﺔ اﻟﺼﻔﺮ.
ھﻨﺎك ﻋﻮاﻣﻞ ﻏﯿﺮ اﻟﻌﻮاﻣﻞ اﻟﺮﯾﺎﺿﯿﺔ؛ ﻛﺎﻟﻤﻨﻄﻘﯿﺔ ﻣﺜﻼ اﻟﺘﻲ ﺗﻘﻮل ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل :إﺧﺘﺮ
ھﺬا ) أو ( ذاك .ﻓﻜﻠﻤﺔ ) أو ( ھﻨﺎ ھﻲ ﻋﺎﻣﻞ ﻣﻨﻄﻘﻲ ﻣﻦ ﻋﻮاﻣﻞ ﻣﻨﻄﻘﯿﺔ أﺧﺮى ﻣﺜﻞ ) و (
اﻟﺬي ﯾﻔﯿﺪ ﻣﺜﻼ ﺗﺤﻘﻖ ﺷﺮطﯿﻦ ﻹﺗﻤﺎم ﻋﻤﻠﯿﺔ ﻣﺎ ﻛﺄن ﺗﻘﻮل :ﻻ ﺗﻔﻌﻞ ھﺬا اﻷﻣﺮ إﻻ إذا ﺣﺼﻞ
ﻛﺬا ) و ( ﻛﺎن ﻛﺬا.
ﺍﻟﺘﻌﺎﺑﲑ
اﻟﺘﻌﺒﯿﺮ ھﻮ ﻛﻞ ﺟﻤﻠﺔ ﺗﻌﺒﺮ ﻋﻦ ﻋﻤﻠﯿﺔ وﯾﻜﻮن ﻟﮭﺎ ﻧﺎﺗﺞ ﻣﻦ ﺟﺮاء اﺳﺘﺨﺪام ﻋﻮاﻣﻞ ﻋﻠﻰ ﻣﺘﻐﯿﺮ
أو ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ أو أﻛﺜﺮ أو ﺑﯿﻦ دوال .وھﺬه ﺑﻌﺾ أﻣﺜﻠﺔ:
;a = b + c
;x = x * x + 1
;a1 = (a2 + a3 ) - x
ﻣﺜﻞ ھﺬه اﻟﺘﻌﺎﺑﯿﺮ اﻟﺮﯾﺎﺿﯿﺔ ھﻲ ﺗﻌﻠﯿﻤﺎت ﻓﻲ ﺣﻘﯿﻘﺘﮭﺎ ،إﻻ أنّ ھﻨﺎك ﻓﺮق ﺑﺴﯿﻂ ﺑﯿﻨﮭﻤﺎ وﻻ
ﯾﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ إن ﻟﻮﺣﻆ ھﺬا اﻟﻔﺮق أم ﻻ .ﻓﺎﻟﺘﻌﺎﺑﯿﺮ اﻟﺮﯾﺎﺿﯿﺔ ﯾﻤﻜﻦ أن ﺗﺘﻘﺒﻠﮭﺎ
اﻟﻠﻐﺔ ﻣﻦ دون أن ﺗﺨﺘﻢ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ .ﻓﺈذا ﻣﺎ وﺿﻌﺖ ﻟﮭﺎ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻛﺎﻧﺖ ﺗﻌﻠﯿﻤﺔ
ﻣﺜﻞ ﺑﻘﯿﺔ اﻟﺘﻌﻠﯿﻤﺎت اﻷﺧﺮى .ذﻟﻚ ﻷنّ اﻟﻤﺘﺮﺟﻢ ﯾﻌﻠﻢ ﺑﺄﻧّﻚ ﺗﺮﯾﺪ ﻣﻦ ھﺬا اﻟﺘﻌﺒﯿﺮ ﺗﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺔ
وأﻧّﮫ ﻋﻤﻠﯿﺔ ﯾﺮاد إﺟﺮاؤھﺎ.
102
ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﺮﻳﺎﺿﻴﺔ
وھﻲ ﻋﺎﻣﻞ اﻟﺠﻤﻊ ) ( +واﻟﻄﺮح ) ( -واﻟﻀﺮب ) * ( واﻟﻘﺴﻤﺔ ) ( /وﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ ) %
(.
ﻗﺪ ﯾﺒﺪو ﻣﻌﺎﻣﻞ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ ﻏﺮﯾﺒﺎ ـ وھﻮ ھﻨﺎ ﻻ ﯾﻌﻨﻲ اﻟﻨﺴﺒﺔ اﻟﻤﺌﻮﯾﺔ ـ .ﻣﻌﺎﻣﻞ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ
ﯾﺴﺘﺨﺪم ﻻﺳﺘﺨﺮاج اﻟﻌﺪد اﻟﺼﺤﯿﺢ اﻟﻤﺘﺒﻘﻲ ﻣﻦ ﺟﺮاء اﺳﺘﺨﺪام ﻋﺪد ﻋﻠﻰ آﺧﺮ دون ﻛﺴﺮ.
ﻓﻌﻤﻠﯿﺔ ﻗﺴﻤﺔ ) ( 5ﻋﻠﻰ ) ( 3ھﻲ ) ( 1واﻟﻤﺘﺒﻘﻲ ) ( 2وھﻮ ﻋﺪد ﺻﺤﯿﺢ .ھﺬه ﺗﻜﺘﺐ ﻓﻲ
ھﻜﺬا:
a=5%3
ﻓـ ) ( aﺳﺘﺤﻤﻞ ﻗﯿﻤﺔ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ.
ﺃﺳﺒﻘﻴﺔ ﺍﻟﻌﻮﺍﻣﻞ
رﺑﻤﺎ ﺣﻮت اﻟﻤﻌﺎدﻟﺔ اﻟﺮﯾﺎﺿﯿﺔ ﻋﻠﻰ ﻋﻮاﻣﻞ ﻣﺨﺘﻠﻔﺔ او رﺑﻤﺎ ﻋﻠﻰ ﺣﺪود ﻣﺤﺼﻮرة ﺑﺄﻗﻮاس.
ﻓﻜﻞ ﻣﺎ ﺣﺼﺮ ﺑﻘﻮﺳﯿﻦ داﺧﻠﯿﯿﻦ ﻓﻠﮫ أﺳﺒﻘﺔ أوﻟﻰ ﺛﻢ ﻋﺎﻣﻼ اﻟﻀﺮب واﻟﻘﺴﻤﺔ ﺛﻢ ﻋﺎﻣﻼ اﻟﺠﻤﻊ
واﻟﻄﺮح.
ﻋﻮاﻣﻞ أﺧﺮى
ھﻨﺎك ﻋﻮاﻣﻞ أﺧﺮى ﻣﻨﮭﺎ ﻋﺎﻣﻞ اﻟﻤﺴﺎواة ) = ( اﻟﺬي ﯾﺴﻤﻰ ﺑﻌﺎﻣﻞ اﻻﺳﻨﺎد .وﻋﻮاﻣﻞ أﺧﺮى
ﺧﺎﺻﺔ ﻣﻨﮭﺎ:
103
a=a+1
ﻛﻠﻤﺎ ﻋﺎد اﻟﺘﻨﻔﯿﺬ اﻟﻰ اﻟﻌﺒﺎرة اﻟﺴﺎﺑﻘﺔ ازدادت ﻗﯿﻤﺔ a
ﻟﻜﺜﺮة اﺳﺘﻌﻤﺎل ﻣﺜﻞ ھﺬا؛ ﻋﻤﺪ واﺿﻌﻮا c++اﻟﻰ ﺻﯿﻐﺔ ﺟﺪﯾﺪة ﺧﺎﺻﺔ ﻓﺠﻌﻠﻮا ﻋﺎﻣﻼ ﺧﺎﺻﺎ
ﺑﮭﺬه اﻟﻌﻤﻠﯿﺔ ھﻮ اﻟﻌﺎﻣﻞ ++وﻣﻦ ھﻨﺎ ﺟﺎءت اﻟﺘﺴﻤﯿﺔ C++
ﻓﻠﺘﺤﻘﯿﻖ اﻟﻌﻤﻠﯿﺔ اﻟﺴﺎﺑﻘﺔ ) ( a = a + 1ﻧﺴﺘﻄﯿﻊ أن ﻧﻜﺘﺐ ﺑﺪﻻ ﻋﻦ ذﻟﻚ a++
ﻓﺎﻟﺘﻌﺒﯿﺮان ﯾﺆدﯾﺎن اﻟﻰ ﻧﺘﯿﺠﺔ واﺣﺪة إﻻ أنّ اﻟﻤﻌﺎﻣﻞ اﻟﺠﺪﯾﺪ أﺳﺮع ﻓﻲ اﻟﻤﻌﺎﻟﺠﺔ واﻟﺘﻨﻔﯿﺬ.
ﻛﺬﻟﻚ ھﻨﺎك اﻟﻌﺎﻣﻞ ++aﺑﻮﺿﻊ اﻟﻌﺎﻣﻞ ﻗﺒﻞ اﻟﻤﺘﻐﯿﺮ .واﻟﻔﺮق ﺑﯿﻦ اﻷول واﻟﺜﺎﻧﻲ؛ أنّ اﻷول
ﯾﺮﺳﻞ اﻟﻘﯿﻤﺔ اﻟﺤﺎﻟﯿﺔ ﻟﻠﻤﺘﻐﯿﺮ ﻋﻨﺪ وﺻﻮل اﻟﺘﻨﻔﯿﺬ اﻟﯿﮫ ﺛﻢ ﯾﻀﯿﻒ ﻋﻠﯿﮫ ) (1ﻋﻨﺪ اﻟﺪورة اﻟﺘﺎﻟﯿﺔ.
أﻣﺎ اﻟﺜﺎﻧﻲ ﻓﺈﻧﮫ ﯾﻀﯿﻒ اﻟﺰﯾﺎدة ﻓﻮر وﺻﻮل اﻟﺘﻨﻔﯿﺬ إﻟﯿﮫ .ﻓﺈذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ اﻻﺑﺘﺪاﺋﯿﺔ ﻟﻠﻤﺘﻐﯿﺮ
) (0ﻓﺈنّ اﻟﻌﺎﻣﻞ اﻷول ﯾﺮﺳﻞ ) (0ﺛﻢ ﯾﻜﻮن ) (1ﻓﻲ اﻟﺪورة اﻟﺘﺎﻟﯿﺔ .أﻣﺎ اﻟﺜﺎﻧﻲ ﻓﺈﻧﮫ ﯾﺒﺪأ
ﺑﺎﻟﺰﯾﺎدة ﻓﻮرا ﻓﺘﻜﻮن ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ﻋﻨﺪ اﻟﺪورة اﻷوﻟﻰ ) (1وﻋﻨﺪ اﻟﺜﺎﻧﯿﺔ ) (2وھﻜﺬا.
ﻛﺬﻟﻚ ھﻨﺎك ﻣﻌﺎﻣﻞ اﻟﻨﻘﺼﺎن ﻋﻨﺪ اﻟﻌﺪ اﻟﺘﻨﺎزﻟﻲ a--و --aوﻋﻠﻰ ﻧﻔﺲ اﻟﻘﺎﻋﺪة اﻟﺴﺎﺑﻘﺔ.
ﻟﯿﺲ ھﺬا ﻓﻘﻂ ﻓﻘﺪ ﺗﺮﯾﺪ اﻟﺰﯾﺎدة او اﻟﻨﻘﺼﺎن ﺑﻘﯿﻤﺔ ﻏﯿﺮ اﻟﻮاﺣﺪ او أﻧﻚ ﺗﺮﯾﺪ ﻏﯿﺮ اﻟﺰﯾﺎدة
واﻟﻨﻘﺼﺎن ﻓﻠﺬﻟﻚ ﻛﺎﻧﺖ ﻣﺜﻞ ھﺬه اﻟﻤﻌﺎﻣﻼت اﻟﺨﺎﺻﺔ ـ ﻋﻠﻰ ﻓﺮض أنّ اﻟﻤﺘﻐﯿﺮ ﺑﺎﺳﻢ aو b
ھﻮ أي ﻋﺪد:
104
اﻟﺘﻌﺎﺑﯿﺮ اﻟﺘﻲ ﻋﻠﻰ اﻟﯿﻤﯿﻦ ھﻲ ذات اﻟﺘﻌﺎﺑﯿﺮ اﻟﻤﻘﺎﺑﻠﺔ إﻻ أﻧّﮭﺎ أﺳﺮع ﻓﻲ اﻟﻤﻌﺎﻟﺠﺔ ﺑﯿﻨﻤﺎ اﻷﺧﺮى
أﻛﺜﺮ وﺿﻮﺣﺎ.
أﻣﺎ ﻓﻲ ﻋﺎﺋﻠﺔ cﻓﻘﺪ وﺿﻌﻮا ﻻﺧﺘﺒﺎر ﻣﺴﺎواة اﻟﺸﺮط ﻋﺎﻣﻼ آﺧﺮ ھﻮ ==
ﻓﺎﻟﻌﺒﺎرات اﻟﺴﺎﺑﻘﺔ ﻓﻲ ﻟﻐﺔ cﺗﻜﻮن ﻋﻠﻰ اﻟﺸﻜﻞ:
105
اﻛﺒﺮ ﻣﻦ او ﯾﺴﺎوي =>
ﺍﻟﻌﻮﺍﻣﻞ ﺍﳌﻨﻄﻘﻴﺔ
اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ﺗﺄﺗﻲ ﻣﻊ اﻟﺘﻌﺎﺑﯿﺮ واﻟﺠﻤﻞ اﻟﺸﺮطﯿﺔ اﻟﺘﻲ ﺗﻠﺰم ﻣﻮاﻓﻘﺔ ﺷﻲء او ﻋﺪﻣﮫ.
وﺟﻤﻠﺔ اﻟﺸﺮط ﺗﺄﺗﻲ ﺑﺎﺧﺘﺒﺎر ﻧﺘﯿﺠﺘﮫ ﻧﻌﻢ او ﻻ .او ﺻﺢ وﺧﻄﺄ .ﻛﺄن ﺗﻘﻮل :ھﻞ ﯾﺴﺎوي ﻛﺬا
ﻛﺬا؟.
ﻓﺄﺣﺪ اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ﻣﺜﻼ ﯾﻌﻄﻲ ﻧﻘﯿﺾ ﻧﺘﯿﺠﺔ ﺟﻮاب اﻟﺸﺮط ﻓﺘﻘﻮل ﻣﺜﻼ :ھﻞ اﻟﻤﺎء ﺣﺎر؟.
ﻓﺎﻟﺠﻮاب ﻣﺜﻼ :ﻧﻌﻢ .ﺗﻘﻮل اﻻن ﺑﺎﺳﺘﺨﺪام ﻋﺎﻣﻞ اﻟﻨﻘﯿﺾ اﻟﻤﻨﻄﻘﻲ :أﻋﻄﻨﻲ ھﻞ اﻟﻤﺎء ﺣﺎر؟.
أي اﻋﻄﻨﻲ ﻋﻜﺲ ﻧﺘﯿﺠﺔ اﻟﺠﻮاب ،ﻓﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ :ﻻ
اﯾﻀﺎ اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ﺗﺮﺑﻂ ﺑﯿﻦ ﺷﺮطﯿﻦ او اﻛﺜﺮ ﻛﺄن ﺗﻘﻮل :ھﻞ اﻟﻤﺎء ﺣﺎر و اﻟﺸﺎي
ﺑﺎرد؟ .او ﺗﻘﻮل :ھﻞ اﻟﻤﺎء ﺣﺎر او اﻟﺸﺎي ﺣﺎر؟.
ﻓﻲ ﻟﻐﺎت ﺑﺮﻣﺠﯿﺔ ﺗﺴﺘﺨﺪم ﻋﺒﺎرات orو andﻛﻌﻮاﻣﻞ ﻣﻨﻄﻘﯿﺔ .أﻣﺎ ﻓﻲ c++ﻓﻨﺴﺘﺨﺪم
ھﺬه اﻟﺮﻣﻮز ﻛﻌﻮاﻣﻞ ﻣﻨﻄﻘﯿﺔ ﻛﻤﺎ ﻓﻲ اﻟﺠﺪول اﻟﺘﺎﻟﻲ:
106
ﻟﻼﺧﺘﯿﺎر او ﺗﺤﻘﻖ اﺣﺪ or ||
ﺷﺮطﯿﻦ او اﻛﺜﺮ
ﻋﻜﺲ ﻧﺘﯿﺠﺔ اﻟﺸﺮط not !
وﺳﯿﺘﻮﺿﺢ اﺳﺘﺨﺪام ﺗﻠﻚ اﻟﻌﻮاﻣﻞ ﺣﯿﻦ ﻧﺼﻞ اﻟﻰ ﻣﻮﺿﻮع اﺗﺨﺎذ اﻟﻘﺮارات.
ﻣﺜﺎل ﺑﺮﻣﺠﻲ:
a == b ? x = 5 : x = 10
اﻟﻤﺜﺎل ﯾﻘﻮل :اذا ﻛﺎﻧﺖ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ aﺗﺴﺎوي ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ bﻓﺎﺟﻌﻞ ﻗﯿﻤﺔ xھﻲ ) (5وإﻻ
ﻓﺎﺟﻌﻠﮭﺎ ).(10
107
ﺍﳌﺆﺷﺮﺍﺕ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ ﻭﺍﻻﲰﺎﺀ ﺍﻟﻌﻨﻮﺍﻧﻴﺔ ﺍﻟﺒﺪﻳﻠﺔ
ﻧﺼﻞ اﻻن اﻟﻰ ﻣﻮﺿﻮع ذي أھﻤﯿﺔ ﻛﺒﯿﺮة ﻓﻲ ﻟﻐﺎت . cذﻟﻚ ھﻮ ﻣﻮﺿﻮع اﻟﻌﻨﺎوﯾﻦ.
دﻋﻨﺎ أوﻻ ﻧﺘﻌﺮف ﻋﻠﻰ ﻋﺎﻣﻞ اﻟﻌﻨﻮان &.
)(int main
{
;int integer1
;return 0
}
108
;using namespace std
)(int main
{
;int integer1
;return 0
}
اذن ﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ a1ﻧﻜﺘﺐ &a1وﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ b
وھﻜﺬا .وﻟﻜﻦ رﺑﻤﺎ ﻧﺤﺘﺎج اﻟﻰ ﺗﺨﺰﯾﻦ ﺗﻠﻚ اﻟﻌﻨﺎوﯾﻦ ﻓﻲ ﻣﺘﻐﯿﺮات .ﻋﻨﺪھﺎ &b ﻧﻜﺘﺐ
ﻧﺤﺘﺎج اﻟﻰ ﻣﺘﻐﯿﺮات ﻣﻦ ﻧﻮع ﺧﺎص ﺗﺨﺘﺺ ﺑﺤﻤﻞ اﻟﻌﻨﺎوﯾﻦ .ﻣﺜﻞ ھﺬه اﻟﻤﺘﻐﯿﺮات ﺗﺴﻤﻰ ...
اﻟﻤﺆﺷﺮات.
ﺍﳌﺆﺷﺮﺍﺕ
اذن اﻟﻤﺆﺷﺮ ھﻮ ﻣﺘﻐﯿﺮ ﯾﺤﻤﻞ ﻋﻨﻮان .ﺑﻤﻌﻨﻰ آﺧﺮ :اﻟﻤﺆﺷﺮ ﯾﺨﺰن ﻗﯿﻤﺔ ھﻲ اﻟﻌﻨﻮان.
ﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺆﺷﺮ ﯾﺠﺐ ﺳﺒﻘﮫ ﺑﮭﺬه اﻻﺷﺎرة * ﻟﻜﻲ ﯾﻌﻠﻢ اﻟﻤﺘﺮﺟﻢ أﻧﮫ ﺑﺼﺪد اﻧﺸﺎء ﻣﺆﺷﺮ
ﻋﻨﻮان .طﺒﻌﺎ اﻟﻤﺘﺮﺟﻢ ﯾﻔﺮق ﺑﯿﻦ ﻛﻮن ھﺬه اﻻﺷﺎرة ﺗﻌﻨﻲ ﻋﻤﻠﯿﺔ اﻟﻀﺮب أو إن ﻛﺎﻧﺖ ﺗﻌﻨﻲ
اﻧﺸﺎء ﻣﺆﺷﺮ وذﻟﻚ ﻷن ﺳﯿﺎق ﻛﻞ ﻣﻨﮭﻤﺎ ﻣﺨﺘﻠﻒ ﻋﻦ اﻻﺧﺮ .ﻓﻌﻼﻣﺔ اﻟﻀﺮب ﺗﺄﺗﻲ ﻓﻲ اﻟﺠﮭﺔ
اﻟﺜﺎﻧﯿﺔ ﻣﻦ اﻟﻤﻌﺎدﻟﺔ ـ ﻣﺎ ﺑﻌﺪ اﻟﻤﺴﺎواة وﺗﺄﺗﻲ ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ او ﻣﺎ ﯾﺸﺒﮫ ذﻟﻚ.
اذن اﻟﻤﺆﺷﺮ ھﻮ ﻧﻮع ﺧﺎص ﻣﻦ اﻟﻤﺘﻐﯿﺮات ﯾﺤﻤﻞ ﻋﻨﻮاﻧﺎ وﯾﻜﻮن ﻣﻦ اﻟﻨﻮع اﻟﺼﺤﯿﺢ ﻓﻘﻂ
intوﯾﺼﺮح ﻋﻨﮫ ﻛﺎﻵﺗﻲ:
;int*p
أﺻﺒﺢ اﻟﻤﺘﻐﯿﺮ pﻣﺆﺷﺮا ﯾﻤﻜﻦ أن ﯾﺸﯿﺮ اﻟﻰ ﻋﻨﻮان .ﻓﻨﺴﺘﻄﯿﻊ ان ﻧﻜﺘﺐ اﻻن:
109
;int a = 15
;int * p
;p = &a
Pأﻻن ﯾﺤﻤﻞ ﻋﻨﻮان a
ﻧﺮﯾﺪ اﻻن ان ﻧﻐﯿﺮ ﻗﻤﺔ aﻣﻦ ﺧﻼل ﻋﻨﻮاﻧﮭﺎ ﻓﯿﺠﺐ ان ﻧﻌﻠﻢ اﻟﻤﺘﺮﺟﻢ ﺑﺄﻧﻨﺎ ﺳﻨﺘﻌﺎﻣﻞ ﻣﻊ
اﻟﻌﻨﻮان ﻓﻨﻀﻊ اﻟﻌﺎﻣﻞ * ﻗﺒﻞ pوﻧﻜﺘﺐ:
;*p = 100
اﺻﺒﺤﺖ ﻗﯿﻤﺔ aﺑﻌﺪ ﺗﻠﻚ اﻟﺨﻄﻮة ﺗﺴﺎوي ) (100وﻛﺄﻧﻨﺎ ﻗﺪ ﻗﻠﻨﺎ:
;a = 100
110
ﺍﻻﺳﻢ ﺍﻟﻌﻨﻮﺍﱐ
او ﻣﺎ ﯾﺴﻤﻰ ﻓﻲ ﻛﺘﺐ اﺧﺮى اﻟﻤﺮﺟﻊ او اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر .وھﻮ اﺳﻢ اﺧﺮ ﻟﻤﺘﻐﯿﺮ ﻣﺎ ﺑﻮاﺳﻄﺔ
ﻋﺎﻣﻞ اﻟﻌﻨﻮان ﻓﻜﺄﻧﮫ اﺳﻢ ﻟﻌﻨﻮان اﻟﻤﺘﻐﯿﺮ.
ﯾﺼﺮح ﻋﻦ اﻻﺳﻢ اﻟﻌﻨﻮاﻧﻲ ﺑﺬﻛﺮ اﻟﻨﻮع ﺛﻢ ﻋﺎﻣﻞ اﻟﻌﻨﻮان ﺛﻢ اﻻﺳﻢ اﻟﻤﺮاد .وﯾﺠﺐ ﺗﮭﯿﺌﺔ
اﻟﻤﺘﻐﯿﺮ اﻟﻌﻨﻮاﻧﻲ ﻟﺤﻈﺔ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮫ .وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ:
;int val = 15
;int &refval = val
اﻻن أي ﻋﻤﻠﯿﺔ ﺗﺠﺮى ﻋﻠﻰ refvalﺳﺘﻨﻌﻜﺲ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ اﻻﺻﻞ valوﻛﺄﻧﮭﺎ أﺟﺮﯾﺖ
ﻋﻠﯿﮫ.
Refval = refval + 1
ﺳﯿﺼﺒﺢ valﺑﻌﺪ ﺗﻠﻚ اﻟﺨﻄﻮة ﺑﻘﯿﻤﺔ ).(16
;int *pp = &refval
وﺑﻌﺪ ﺗﻠﻚ اﻟﺨﻄﻮة ﺳﯿﺤﻤﻞ اﻟﻤﺆﺷﺮ ppﻋﻨﻮان fval
اذن ﻣﺎﻟﻔﺮق ﺑﯿﻦ اﻻﺳﻢ اﻟﻌﻨﻮاﻧﻲ واﻟﻤﺆﺷﺮ؟.
اﻟﻤﺆﺷﺮ ﯾﻤﻜﻦ أن ﻧﺠﻌﻠﮫ ﯾﺸﯿﺮ اﻟﻰ ﻋﻨﻮان آﺧﺮ ﻛﻤﺎ ﺑﯿﻨﺎ .أﻣﺎ اﻻﺳﻢ اﻟﻌﻨﻮاﻧﻲ ﻓﻼ ﯾﻤﻜﻦ اﻋﺎدة
اﺳﺘﺨﺪاﻣﮫ ﻟﯿﺸﯿﺮ اﻟﻰ ﻏﯿﺮ ﻣﺎ رﺑﻂ ﺑﮫ اوﻻ.
ﯾﻤﻜﻦ اﻟﺘﺼﺮﯾﺢ ﻋﻦ أﻛﺜﺮ ﻣﻦ ﻣﺮﺟﻊ ﻓﻲ ﻧﻔﺲ اﻟﺴﻄﺮ ﻛﻤﺎ ﯾﻠﻲ:
;int &r1 = a, &r2 = b
111
اذن ﻧﺤﻦ ﻧﺤﺘﺎج اﻟﻰ ﻛﻠﻤﺔ اﻟﺸﺮط ) اذا ( if ،وأﺷﯿﺎء ﯾﺠﺮى ﻋﻠﯿﮭﺎ اﻟﻔﺤﺺ ﻛﺎﻟﻤﻘﺎرﻧﺔ ﺑﯿﻦ
ﻛﺎﺋﻨﺎت ﻣﺎ وﻣﻦ ﺛﻢ ﺗﻘﺮﯾﺮ ﺗﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺔ ﻣﺎ.
ﻧﺴﺘﻄﯿﻊ أن ﻧﺤﻘﻖ ذﻟﻚ ﻓﻲ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ ﺑﻜﺘﺎﺑﺔ ﻣﺜﻞ ھﺬا اﻟﻤﺜﺎل ﺣﯿﺚ ﻧﺨﺘﺒﺮ:
ھﻞ ) اﻟﻤﺘﻐﯿﺮ aﻣﺴﺎ ٍو ﻟﻠﻤﺘﻐﯿﺮ .( bﻓﺎذا ﻛﺎﻧﺖ اﻟﻨﺘﯿﺠﺔ اﯾﺠﺎﺑﺎ ﻓﻨﻔﺬ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ ﻟﺠﻤﻠﺔ
اﻟﺸﺮط:
if ; ) ( a == b
; x = x + 1
ﻧﺴﺘﻄﯿﻊ اﺳﺘﻌﻤﺎل أي ﺷﺮط ﺻﺎﻟﺢ ﻧﺮﯾﺪه؛ ﻣﺜﻼ ﻧﻘﻮل:
اذا ) ﻛﺎن اﻟﻤﺘﻐﯿﺮ aأﻛﺒﺮ ﻣﻦ اﻟﻤﺘﻐﯿﺮ ( b
اﺟﻌﻞ xﺗﺴﺎوي ﺻﻔﺮا.
اذا ﻟﻢ ﯾﻜﻦ اﻟﺸﺮط اﯾﺠﺎﺑﺎ؛ ﻓﺈنّ اﻟﺘﻨﻔﯿﺬ ﺳﯿﺘﺠﺎوز اﻟﺘﻌﻠﯿﻤﺔ ﻣﺎﺑﻌﺪ اﻟﺸﺮط او ﻛﺘﻠﺔ اﻟﺘﻌﻠﯿﻤﺎت.
او ﻧﺴﺘﻄﯿﻊ اﺗﺒﺎع اﺳﻠﻮب آﺧﺮ ﻓﻲ ﺟﻤﻠﺔ . ifوھﻲ اﺗﺒﺎع ﺟﻤﻠﺔ اﻟﺸﺮط ﺑﻜﻠﻤﺔ ) وإﻻ else ،
(.
أي اذا ﻛﺎن اﻟﺸﺮط ﺻﺤﯿﺤﺎ ﻓﺎﻓﻌﻞ ﻛﺬا وإﻻ ﻓﺎﻓﻌﻞ ﻛﺬا .ﻛﻤﺎ ﻓﻲ ھﺬﯾﻦ اﻟﻤﺜﺎﻟﯿﻦ.
112
if ( r >= 5 )
r = r+2;
Else
r1 = r;
…………………………….
if ( r >= 5 )
{ r = r+2;
r1 = 2*r;
std::cout << r ;
}
else
{
r1 = r;
std::cout << r ;
}
ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎﻟﯿﻦ. ﻗﺒﻠﮭﺎ ﻟﻠﻮﺻﻮل اﻟﻰ ﺗﺤﻘﯿﻖ ﻣﻌﯿﻦif داﺧﻞ ﺟﻤﻠﺔif ﻧﺴﺘﻄﯿﻊ اﺳﺘﻌﻤﺎل ﺟﻤﻠﺔ
:اﻟﺘﺎﻟﯿﯿﻦ
if ( num1 == num2 )
cout << num1 << " is equal to " << num2 << endl;
if ( num1 != num2 )
cout << num1 << " is not equal to " << num2 << endl;
......................
if ( r >= 5 )
{ r = r+2;
r1 = 2*r;
std::cout << r ;
}
else
{
if ( r < 5 )
r1 = 0;
std::cout << r ;
}
113
ﲨﻠﺔ ﺍﻻﺧﺘﻴﺎﺭ switch-case
ﻓﻲ ﻣﺴﺎﺋﻞ ﻣﻌﻘﺪة رﺑﻤﺎ ﻧﺤﺘﺎج اﻟﻰ ﻋﺪة ﺟﻤﻞ اﺧﺘﺒﺎر ﻣﺘﺪاﺧﻠﺔ وﺑﺎﻟﺘﺎﻟﻲ ﺳﺘﺼﻌﺐ ﻣﺘﺎﺑﻌﺔ
اﻟﻤﻨﻄﻖ وﻛﺘﺎﺑﺘﮫ ،ﻟﺬﻟﻚ ﻛﺎن ھﻨﺎك ﺟﻤﻠﺔ اﺧﺘﺒﺎر أﺧﺮى؛ وھﻲ ﺟﻤﻠﺔ اﻻﺧﺘﯿﺎر ،أي اﺧﺘﯿﺎر ﺣﺎﻟﺔ
ﻣﻦ ﺑﯿﻦ ﻋﺪة ﺣﺎﻻت اذا ﺣﻘﻘﺖ اﻟﻄﻠﺐ.
ﻟﻨﻔﺮض أﻧﻨﺎ ﻧﺨﺘﺒﺮ ﻣﺘﻐﯿﺮ .ﻓﻔﻲ ﺣﺎل ﻛﻮﻧﮫ ) (1ﻓﻨﻔﺬ ﻛﺬا ،وﻓﻲ ﺣﺎل ﻛﻮﻧﮫ ) (2ﻓﻨﻔﺬ ﻛﺬا .ھﺬا
ﯾﺘﻄﻠﺐ اﺳﺘﺨﺪام ﺟﻤﻞ ﻋﺪﯾﺪة ﻣﻦ . ifأﻣﺎ ﺟﻤﻠﺔ اﻻﺧﺘﯿﺎر switch-caseﻓﺘﺴﮭﻞ اﻻﻣﺮ .وھﻲ
ﺗﺒﺪأ ﺑﮭﺬه اﻟﺠﻤﻞ ) switch ( aاﻟﺘﻲ ﺗﻌﻠﻢ اﻟﻤﺘﺮﺟﻢ ﺑﺄنّ اﻟﻤﺘﻐﯿﺮ aﺳﯿﺨﻀﻊ ﻟﺤﺎﻟﺔ اﺧﺘﺒﺎر
وﻓﺤﺺ.
ﺑﻌﺪھﺎ ﺗﺄﺗﻲ ﺟﻤﻠﺔ case '1':أي اذا ﻛﺎﻧﺖ aﺗﺴﺎوي ) (1ﻓﻨﻔﺬ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ وھﻲ ﻓﻲ ﻣﺜﺎﻟﻨﺎ
; . a1 = 5ﺛﻢ ﺗﺄﺗﻲ ﺣﺎﻻت caseأﺧﺮى اذا ﻟﻢ ﺗﺘﺤﻘﻖ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺴﺎﺑﻘﺔ.
ھﻨﺎك ﻛﻠﻤﺎت ﻟﯿﺴﺖ ﺟﺒﺮﯾﺔ ﺑﻞ ﯾﻤﻜﻦ ﻋﺪم ذﻛﺮھﺎ ﻟﻜﻦ ﻟﮭﺎ ﻣﻌﺎ ٍن ﻣﮭﻤﺔ .ﻓﻜﻠﻤﺔ breakاﻟﺘﻲ
ﺗﺄﺗﻲ ﺑﻌﺪ ﺟﻤﻞ caseﻣﻌﻨﺎھﺎ :أنّ اﻟﺤﺎﻟﺔ اﻟﺤﺎﻟﯿﺔ اذا ﺗﺤﻘﻘﺖ ﻓﺎﺟﺘﺎز ﻛﻞ ﺟﻤﻞ اﻟﺤﺎﻻت
ع ﻟﻠﻤﺮور ﺑﮭﺎ .أي أﺧﺮج ﻣﻦ ﺟﻤﻠﺔ switch-caseاﻟﻰ ﻣﺎ ﺑﻌﺪھﺎ.
اﻻﺧﺮى وﻟﯿﺲ ھﻨﺎك دا ٍ
ﻓﻤﻌﻨﺎھﺎ :اذا ﻟﻢ ﺗﺘﺤﻘﻖ أي ﻣﻦ اﻟﺤﺎﻻت اﻟﺴﺎﺑﻘﺔ؛ ﻓﻨﻔﺬ اﻟﺘﻌﻠﯿﻤﺔ اﻟﺘﺎﻟﯿﺔ أﻣﺎ ﻛﻠﻤﺔ default:
) ﻛﺬا ( أي ﻛﺄﻧﮭﺎ ﺗﺸﺒﮫ ﻛﻠﻤﺔ . elseواﻵن ﻣﻊ اﻟﻤﺜﺎل:
{ ) switch ( a
case '2':
;a1 = 10
;break
case '3':
114
;a1 = 15
;break
ﺃﻧﻮﺍﻉ ﺍﳊﻠﻘﺎﺕ
ھﻨﺎك ﻧﻮﻋﯿﻦ ﻣﻦ اﻟﺤﻠﻘﺎت اﻟﺘﻜﺮارﯾﺔ :أوﻟﻰ ھﺬه اﻟﺤﻠﻘﺎت ﻣﺎ ﺗﻌﯿﺪ ﻧﻔﺴﮭﺎ ﻣﺎدام ﺷﺮطﺎ ﻣﺎ ﻻزال
ﺻﺤﯿﺤﺎ ﻓﺈذا ﻣﺎ أﺻﺒﺢ ﺧﺎطﺌﺎ ﺗﻮﻗﻔﺖ .واﻟﺜﺎﻧﯿﺔ ﻣﺎﺗﻘﻮم ﻋﻠﻰ اﻟﺘﻜﺮار ﺑﻨﺎءا ﻋﻠﻰ ﻋﺪد دورات ﻣﺎ
ﯾﺤﺪدھﺎ اﻟﻤﺒﺮﻣﺞ ﻟﻤﺴﺄﻟﺘﮫ .ﺗﻌﺎل ﻧﺴﻤﻲ اﻻوﻟﻰ ﺣﻠﻘﺎت اﻟﺘﺤﻘﻖ ،وﻧﺴﻤﻲ اﻟﺜﺎﻧﯿﺔ ﺣﻠﻘﺎت اﻟﻌﺪ.
115
ﺣﻠﻘﺎﺕ ﺍﻟﺘﺤﻘﻖ
اي أﻧﮭﺎ ﺗﺘﺤﻘﻖ ﻣﻦ ﺷﺮط ﻣﺎ ھﻞ ھﻮ ﺻﺤﯿﺢ أم ﺧﻄﺄ وھﻲ ﺗﺒﺪأ ﺑﺎﻟﻜﻠﻤﺔ اﻟﻤﻔﺘﺎﺣﯿﺔ While
اﻟﺘﻲ ﯾﺘﺒﻌﮭﺎ اﻟﺸﺮط اﻟﻤﺨﺘﺒﺮ .وﯾﻠﻲ ذﻟﻚ ﺟﻤﻠﺔ او ﻛﺘﻠﺔ ﺟﻤﻞ ﺗﻨﻔﺬ ﻣﺎداﻣﺖ اﻟﺤﻠﻘﺔ ﻣﺴﺘﻤﺮة .ﻓﻲ
اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻧﺨﺘﺒﺮ اﻟﺸﺮط ) ( a1 <= 10ﻓﻤﺎدام اﻟﻤﺘﻐﯿﺮ a1أﺻﻐﺮ ﻣﻦ ) (10او ﯾﺴﺎوﯾﮭﺎ
ﻓﺎﻟﺤﻠﻘﺔ ﺳﺘﺴﺘﻤﺮ ﺑﺠﻤﻠﺘﮭﺎ اﻟﻮﺣﯿﺪة ھﻨﺎ ﻓﻲ ﻣﺜﺎﻟﻨﺎ وھﻲ اظﮭﺎر اﻟﻌﺒﺎرة : . ok
اذا ﻟﻢ ﯾﻜﻦ اﻟﺸﺮط ﻣﺘﺤﻘﻘﺎ ﻣﻦ أول ﻣﺮة ﻓﺈن اﻟﺤﻠﻘﺔ ﻟﻦ ﺗﻨﻔﺬ .ﻓﺎذا ﻛﺎﻧﺖ xﻓﻲ ﻣﺜﺎﻟﻨﺎ ھﻲ أﻛﺒﺮ
ﻣﻦ ) (10ﻓﺠﻤﻠﺔ اﻟﺘﻜﺮار ﺳﺘﺘﺠﺎوز اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﻲ ﻓﯿﮭﺎ اﻟﻰ ﻣﺎ ﺑﻌﺪھﺎ ﻣﻦ أواﻣﺮ .ﻟﻜﻦ ﻗﺪ
ﻧﺮﻏﺐ ﺑﺄنّ اﻟﺤﻠﻘﺔ ﯾﺠﺐ أن ﺗﻨﻔﺬ ﻣﺮة ﻋﻠﻰ اﻷﻗﻞ؛ ﻣﺜﻞ ھﺬا ﯾﺴﺘﺪﻋﻲ أن ﯾﻜﻮن اﻟﺘﺤﻘﻖ ﻣﻦ
اﻟﺸﺮط ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺤﻠﻘﺔ ﻻ ﻓﻲ ﺑﺪاﯾﺘﮭﺎ وﻷﺟﻞ ذﻟﻚ ﻛﺎﻧﺖ ﺣﻠﻘﺔ do ... while
116
وﻛﻤﺎ ﯾﺒﯿﻨﮭﺎ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ:
{ do
;sum += x // add x to sum
;++x
;) } while ( x <= 10
ﻓﺎﻟﺤﻠﻘﺔ ھﻨﺎ ﺗﺒﺪأ ﺑﻜﻠﻤﺔ doﺑﻌﺪ ذﻟﻚ ﻣﺎ ﯾﺮاد ﻣﻦ ﺗﻌﻠﯿﻤﺎت وﺑﻌﺪھﺎ اﻟﺸﺮط ﺗﺴﺒﻘﮫ ﻛﻠﻤﺔ while
.
ﺣﻠﻘﺔ ﺍﻟﻌﺪ
ﺣﻠﻘﺔ اﻟﻌﺪ ﻣﻮﺟﻮدة ﻓﻲ ﻟﻐﺎت أﺧﺮى ﻏﯿﺮ . c++وھﻲ ﺣﻠﻘﺔ forاﻟﺠﻤﯿﻠﺔ واﻟﺘﻲ ﯾﻤﻜﻦ
ﺿﺒﻄﮭﺎ اﻟﻰ أي ﻋﺪد ﯾﺮاد .أﻣﺎ ﻓﻲ c++ﻓﻼزال اﻟﺸﺮط ﻣﺘﻤﺴﻜﺎ ﻣﻌﮭﺎ ﻣﻊ وﺟﻮد اﻟﻌﺪ .ﻓﮭﻲ
ﻟﯿﺴﺖ ﻛﺤﻠﻘﺔ forﻓﻲ ﻟﻐﺔ ﺑﯿﺰك .ﻓﻔﻲ ﺗﻠﻚ اﻟﻠﻐﺔ ﻛﻨﺎ ﻧﻜﺘﺐ ﻛﻠﻤﺔ forﯾﻠﯿﮭﺎ ﻣﺘﻐﯿﺮ ﯾﺒﺪأ ﻣﻦ ﻗﯿﻤﺔ
ﻟﯿﻨﺘﮭﻲ اﻟﻰ ﻗﯿﻤﺔ وﻓﻖ زﯾﺎدة ﻋﺪدﯾﺔ ﻧﺤﺪدھﺎ .ﻓﻔﻲ ﻛﻞ دورة ﯾﺰداد اﻟﻤﺘﻐﯿﺮ ﻟﯿﺼﻞ اﻟﻰ ﻗﯿﻤﺔ
أﻛﺒﺮ ﺣﺘﻰ اذا وﺻﻞ اﻟﻰ اﻟﺮﻗﻢ اﻟﻤﻌﻄﻰ ﻟﮫ ﺗﻮﻗﻔﺖ اﻟﺤﻠﻘﺔ ﻋﻦ اﻟﺘﻜﺮار .ھﺬا اذا ﻛﺎﻧﺖ اﻟﺤﻠﻘﺔ
ﺗﺼﺎﻋﺪﯾﺔ .وإﻻ ﻓﮭﻨﺎك ﻋﺪ ﺗﻨﺎزﻟﻲ ﻣﻤﻜﻦ اذا ﻣﺎ أﻋﻄﻲ اﻟﻤﺘﻐﯿﺮ ﻗﯿﻤﺔ ﺑﺪاﺋﯿﺔ ﻛﺒﯿﺮة وﻗﯿﻤﺔ ﻧﮭﺎﺋﯿﺔ
أﺻﻐﺮ.
ﺣﻠﻘﺔ forﻓﻲ c++ﻓﯿﮭﺎ ﺷﺮط ﯾﺤﺪد اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﯾﺠﺐ أن ﯾﺼﻞ اﻟﯿﮭﺎ اﻟﻌﺪ اذا ﻟﻢ ﯾﺘﺤﻘﻖ ﺷﺮط
اوﻟﻲ آﺧﺮ .ﻓﮭﻲ ﺑﺎﻟﺘﺎﻟﻲ أﯾﻀﺎ ﯾﻤﻜﻦ ان ﺗﻜﻮن ﺣﻠﻘﺔ ﻣﻦ أﺟﻞ اﻟﻌﺪ .وﻛﺬﻟﻚ ﯾﻤﻜﻦ ﺟﻌﻞ اﻟﺤﻠﻘﺎت
اﻻﺧﺮى ﻛﺤﻠﻘﺎت ﻋﺪ.
117
اذن ﻧﺨﺮج ﻣﻦ ھﺬه اﻟﻔﻘﺮة ﻟﻐﺮض ﺗﺒﯿﺎن أﻧﻮاع اﻟﺤﻠﻘﺎت اﻟﻤﺘﻮاﺟﺪ ﻓﻲ اﻟﻠﻐﺎت ﻋﺎﻣﺔ وﻧﺮﺟﻊ
اﻟﻰ اﻟﻨﻮع اﻵﺧﺮ ﻣﻦ ﺣﻠﻘﺎت اﻟﺸﺮط واﻟﻌﺪ ﻓﻲ c++وھﻲ ﺣﻠﻘﺔ . for
ﺣﻠﻘﺔ for
ﺟﺴﺪ ھﺬه اﻟﺤﻠﻘﺔ ﯾﺒﺪأ ﺑﺎﻟﻜﻠﻤﺔ اﻟﻤﻔﺘﺎﺣﯿﺔ . forﯾﻠﯿﮭﺎ ﻗﻮس ﻣﻦ ﺛﻼﺛﺔ أﺷﯿﺎء :ﻗﯿﻤﺔ ﺑﺪاﺋﯿﺔ ﯾﺒﺪأ
ﻣﻨﮭﺎ اﻟﻌﺪ ،ﻓﺎﻟﺸﺮط اﻟﻤﺨﺘﺒﺮ ،وأﺧﯿﺮا ﻗﯿﻤﺔ اﻟﺰﯾﺎدة اﻟﻤﻄﻠﻮﺑﺔ ﻟﻠﻌﺪ .ﯾﻠﻲ ذﻟﻚ ﺗﻌﻠﯿﻤﺔ او ﻛﺘﻠﺔ
ﺗﻌﻠﯿﻤﺎت.
ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ اﻟﺸﺮط ھﻮ :ﻣﺎ دام اﻟﻤﺘﻐﯿﺮ xأﺻﻐﺮ ﻣﻦ أو ﻣﺴﺎ ٍو ﻟﻠـ ) (10ﻓﻨﻔﺬ اﻟﺘﻜﺮار
وﻓﻖ اﻟﻌﺪ.
ﯾﺒﺪأ اﻟﻌﺪ ﺑﻘﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ واﻟﺘﻲ ﺗﻌﻄﻰ ھﻨﺎ ﻣﻦ اﻟـ ) . x = 1 (1ﻟﺘﺰداد ﺑﻘﯿﻤﺔ ). x++ (1
;" " << cout << x // display value of x
ﻋﻨﺪﻣﺎ xﺗﺴﺎوي ) (1ﻓـ xأﺻﻐﺮ ﻣﻦ ) (10ﻓﺎﻟﺸﺮط ﺻﺤﯿﺢ ﻓﺘﻜﺮر اﻟﺤﻠﺔ وھﻜﺬا ﺣﺘﻰ ﺗﺼﺒﺢ
ﻗﯿﻤﺔ xاﻛﺒﺮ ﻣﻦ ) (10ﻋﻨﺪھﺎ ﻻﺗﻨﻔﺬ اﻟﺤﻠﻘﺔ.
........................
118
ﺑﺈﺗﻘﺎﻧﻚ ﻟﻤﻔﮭﻮم اﻟﻤﺘﻐﯿﺮات وﺟﻤﻞ اﻟﺸﺮط واﻟﻘﺮار واﻟﺤﻠﻘﺎت؛ ﺗﻜﻮن ﻗﺪ أﺗﻘﻨﺖ ﻟﻸدوات
اﻟﺮﺋﯿﺴﺔ ﻓﻲ اﻟﻠﻐﺔ .ﺗﻠﻚ اﻻدوات اﻟﺜﻼﺛﺔ ھﻲ ﻛﺎﻟﻌُﺪد اﻟﺮﺋﯿﺴﺔ ﻟﻔﻨﻲ ﻓﻲ ﻣﮭﻨﺔ ﻣﺎ .ﻓﮭﻲ ﻛﺎﻟﻤﻄﺮﻗﺔ
واﻟﻤﻔﻚ واﻟﻤﺎﺳﻜﺔ وأﻣﺜﺎل ذﻟﻚ ﻣﻤﺎ ﻻﻏﻨﻰ ﻷي ﻓﻨﻲ ﻣﺎھﺮ ﻋﻨﮭﺎ.
ھﻨﺎك أداة ﺷﮭﯿﺮة أﺧﺮى وإن ﻛﺎن ﻣﺨﻀﺮﻣﻲ اﻟﺒﺮﻣﺠﺔ ﻻﯾﺆﯾﺪون ﺗﻮاﺟﺪھﺎ ﺑﺼﻮرة ﻛﺜﯿﺮة
ﻷﻧﮭﻢ ﯾﺮون أﻧﮭﺎ ﺗﻘﻄﻊ اﻟﺘﺴﻠﺴﻞ اﻟﻤﻨﻄﻘﻲ ﻟﻠﺘﻔﻜﯿﺮ أو ﻟﻠﺒﺮﻧﺎﻣﺞ .ھﺬه اﻷداة ھﻲ أداة اﻟﻘﻔﺰ
واﻻﻧﺘﻘﺎل . gotoاﻟﺘﻲ ﺗﻨﻘﻞ اﻟﺘﺤﻜﻢ ﻣﻦ ﺳﻄﺮ اﻟﻰ ﺳﻄﺮ آﺧﺮ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ .وﯾﻜﻮن ﺷﻜﻠﮭﺎ
ﻛﺎﻟﺘﺎﻟﻲ:
;goto label
و labelھﻨﺎ ،ھﻲ أي ﻛﻠﻤﺔ أو ﻋﻼﻣﺔ ﻧﺪرﺟﮭﺎ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ اﻟﺬي ﻧﺮﯾﺪ اﻻﻧﺘﻘﺎل اﻟﯿﮫ .ﻛﻤﺎ
ﻓﻲ ھﺬا اﻟﻤﺜﺎل:
)(int main
{
;int sum = 0
;loop1
;sum ++
;if ( sum = 1000) goto loop1
;return 0
}
وﻛﻤﺎ ﺗﺮى :ﻓﺎﻟﻜﻠﻤﺔ اﻟﻤﻨﺘﻘﻞ إﻟﯿﮭﺎ ﺗﻨﺘﮭﻲ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻛﻤﺎ ﺗﻨﺘﮭﻲ ﺟﻤﻠﺔ gotoھﻲ اﯾﻀﺎ
ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ.
ﯾﻤﻜﻦ اﺳﺘﻌﻤﺎل ﺟﻤﻠﺔ gotoﻟﻠﺨﺮوج ﻣﻦ ﺣﻠﻘﺔ وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ:
)(int main
119
{
;int i = 0
)for (i=1, i<=10, ++i
;if (i == 8) goto stop
{
;Stop
}
;return 0
}
....................
ﺟﻤﻞ اﻟﺸﺮط واﻟﺤﻠﻘﺎت واﻻﻧﺘﻘﺎل؛ ﺗﺴﻤﻰ ﻋﺒﺎرات اﻟﺘﺤﻜﻢ .أي ﺑﻮاﺳﻄﺘﮭﺎ ﺗﺴﺘﻄﯿﻊ اﻟﺘﺤﻜﻢ
ﺑﺴﯿﺮ ﺑﺮﻧﺎﻣﺠﻚ اﻟﻤﻨﻄﻘﻲ وﻛﺎن ھﺬا ﻛﺎﻓﯿﺎ ﻣﻊ اﻟﻤﺘﻐﯿﺮات ﻟﺒﻨﺎء ﺑﺮاﻣﺞ ﻓﻲ اﻟﻠﻐﺎت اﻷوﻟﻰ
ﻟﻠﺒﺮﻣﺠﺔ .وﻟﻜﻦ؛ اﻟﻤﺘﻄﻠﺒﺎت ﺗﺰداد واﻟﺘﻄﻮر ﻣﺴﺘﻤﺮ واﻟﺴﺮﻋﺔ ﻻزﻣﺔ ،ﻓﻜﺎﻧﺖ أﺷﯿﺎء ﻣﺘﻘﺪﻣﺔ
أﺧﺮى ﻓﻲ اﻟﻠﻐﺎت اﻟﺤﺪﯾﺜﺔ.
اﻟﺨﻄﻮة اﻟﺘﻲ ﺗﻠﺖ ﻓﻲ ﺗﻄﻮر ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ھﻲ ﻣﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺒﺮﻣﺠﺔ اﻟﻤﺘﻔﺮﻋﺔ .وﻛﺎﻧﺖ ﺗﺘﻢ
ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ﺗﺸﺒﮫ ﺟﻤﻠﺔ اﻻﻧﺘﻘﺎل وﻟﻜﻦ ﺗﺨﺘﻠﻒ ﻋﻨﮭﺎ ﻓﻲ ﺷﻲء .ﺟﻤﻠﺔ اﻻﻧﺘﻘﺎل اﻟﻤﺘﻄﻮرة
ﻛﺎﻧﺖ ﺗﺬھﺐ اﻟﻰ ﺗﻨﻔﯿﺬ ﺟﺰء ﺑﺮﻣﺠﻲ آﺧﺮ ﺣﺘﻰ ﻧﮭﺎﯾﺘﮫ ﺛﻢ ﺗﻌﻮد ﺑﻌﺪ أن ﻧﻔﺬت ذﻟﻚ اﻟﺠﺰء اﻟﻰ
ﻣﺎﺑﻌﺪ اﻟﺴﻄﺮ اﻟﺬي اﻧﻄﻠﻘﺖ ﻣﻨﮫ .ﯾﻔﯿﺪ ھﺬا ﻓﻲ ﺣﺎل ﻛﻮﻧﻚ ﺗﺤﺘﺎج اﻟﻰ ﺟﺰء ﺑﺮﻣﺠﻲ ﯾﺠﺐ أن
ﯾﺘﻜﺮر ﻓﻲ أﻛﺜﺮ ﻣﻦ ﻣﻜﺎن ،ﻓﺒﺪﻻ ﻣﻦ ﻛﺘﺎﺑﺘﮫ ﻋﺪة ﻣﺮات ،ﺳﺘﻜﺘﺒﮫ ﻓﻲ ﻣﻜﺎن ﻣﺎ ﻣﺮة واﺣﺪة
وﺗﻌﻮد اﻟﯿﮫ ﻣﺮارا ﻗﺪر ﻣﺎ ﯾﻠﺰم .ﺗﻄﻮرت ھﺬه ﻓﻲ اﻟﻠﻐﺎت اﻟﺤﺪﯾﺜﺔ اﻟﻰ آﻟﯿﺔ ﺗﺴﻤﻰ اﻟﺪاﻟﺔ.
ﺍﻟﺪﻭﺍﻝ
اﻟﺪوال ھﻲ ﻣﮭﺎم ﯾﻘﻮم ﺑﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ وﯾﻤﻜﻦ أن ﺗﺄﺗﻲ ﺑﯿﻦ ﺗﻌﺎﺑﯿﺮ رﯾﺎﺿﯿﺔ أﺧﺮى .اﻟﺪاﻟﺔ ﻟﮭﺎ اﺳﻢ
ﯾﺘﺒﻌﮭﺎ ﻗﻮﺳﯿﻦ ﻗﺪ ﯾﻜﻮن ﺑﯿﻨﮭﻤﺎ ﻗﯿﻢ .ﻓﺪاﻟﺔ ﺣﺴﺎب ﺟﯿﺐ اﻟﺰاوﯾﺔ ﻣﺜﻼ ﺗﺄﺗﻲ ﻋﻠﻰ ھﺬه اﻟﺼﻮرة:
) SIN(Xﻓﻜﻠﻤﺔ SINھﻮ اﺳﻤﮭﺎ او اﺳﻢ اﻟﻌﻤﻞ اﻟﺬي ﺗﻘﻮم ﺑﮫ .و Xھﻮ ﻣﺘﻐﯿﺮ اﻟﺰاوﯾﺔ
وﯾﺴﻤﻰ وﺳﯿﻂ اﻟﺪاﻟﺔ.
120
داﻟﺔ أﺧﺮى اﺳﻤﮭﺎ sumأي ﺟﻤﻊ .ﻓﮭﻲ ھﻜﺬا sum(x1,x2) :ﻓﮭﻲ ﺗﺠﻤﻊ x1و x2
وھﻤﺎ وﺳﯿﻄﻲ اﻟﺪاﻟﺔ ھﻨﺎ.
ﺗﻘﺴﻢ اﻟﺪوال اﻟﻰ دوال ﻣﻜﺘﺒﯿﺔ ﺟﺎھﺰة ودوال ُﻣﺒَﺮﻣَﺠﺔ ،أي ﯾﻘﻮم اﻟﻤﺒﺮﻣﺞ ﻧﻔﺴﮫ ﺑﻜﺘﺎﺑﺘﮭﺎ.
ﺍﻟﺪﻭﺍﻝ ﺍﳌﻜﺘﺒﻴﺔ
وھﻲ دوال أﺳﺎﺳﯿﺔ ﺟﺎھﺰة ﻗﺎﻣﺖ ﻣﺎﯾﻜﺮوﺳﻔﺖ ﺑﻜﺘﺎﺑﺘﮭﺎ ﻟﺘﻜﻮن ﺗﺤﺖ ﯾﺪ أي ﻣﺒﺮﻣﺞ .ﻣﻨﮭﺎ دوال
رﯾﺎﺿﯿﺔ ﻛﻤﺮﺑﻊ اﻟﻌﺪد وﻣﻜﻌﺒﮫ أو ﺟﺬره او ﺟﯿﺐ زاوﯾﺘﮫ وﻏﯿﺮ ذﻟﻚ .وﻣﻨﮭﺎ دوال ﻏﯿﺮ
رﯾﺎﺿﯿﺔ ﻧﺼﯿﺔ وﻏﯿﺮھﺎ ﻛﺪوال اﻟﺒﺤﺚ واﻟﻔﺮز واﻻﺳﺘﺒﺪال واﻟﻜﺜﯿﺮ اﻟﻜﺜﯿﺮ.
ﻛﻤﺎ ﺗﺬﻛﺮ ﯾﺠﺐ اوﻻ اﻟﺘﺼﺮﯾﺢ اﻟﺮأﺳﻲ ﻋﻦ اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ ﻣﺜﻼ ﻟﺘﺘﻤﻜﻦ ﻣﻦ اﺳﺘﻌﻤﺎل ﺗﻠﻚ
اﻟﺪوال اﻟﺮﯾﺎﺿﯿﺔ .ﺑﻌﺪ ذﻟﻚ ﯾﻤﻜﻦ أن ﺗﺴﺘﺨﺪﻣﮭﺎ ﻓﻲ ﺑﺮﻣﺠﺘﻚ ﻛﺄن ﺗﻜﺘﺐ:
)a1 = SIN(X) + COS(Y
اﺳﺘﺨﺪام اﻟﺪوال ھﻮ اﺳﺘﺪﻋﺎء ﻟﮭﺎ ﻟﺘﻨﻔﺬ وﺗﻄﺒﻖ.
ﺍﻟﺪﻭﺍﻝ ﺍﳌﱪﳎﺔ
وھﻲ دوال ﺧﺎﺻﺔ ﺗﻘﺘﻀﻲ ﻣﺴﺄﻟﺔ ﺑﺮﻧﺎﻣﺠﻚ أن ﺗﻜﺘﺒﮭﺎ .ﻛﺘﺎﺑﺔ داﻟﺔ ﺗﻌﻨﻲ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ﻟﮭﺎ.
ﺗﺼﻤﻴﻢ ﺍﻟﺪﺍﻟﺔ
ﻟﺘﺼﻤﯿﻢ داﻟﺔ ﯾﺠﺐ ﻓﮭﻢ اﻟﻐﺮض ﻣﻨﮭﺎ وﻣﺎ ﯾﺠﺐ أن ﺗﺆدﯾﮫ ﻣﻦ ﻣﮭﻤﺔ .ﻓﯿﺠﺐ أن ﺗﻔﻜﺮ ﻓﻲ وﺿﻊ
ﺧﻄﻮاﺗﮭﺎ اﻟﺘﻲ ﺳﺘﺆدي اﻟﻰ ﻧﺘﯿﺠﺔ ﻣﻌﯿﻨﺔ .ﺗﺨﯿﻞ ﻣﮭﻤﺔ اﻟﺪاﻟﺔ ﻛﺸﺨﺺ ﯾﺴﺄﻟﻚ :ﻣﺎذا ﺗﻔﻌﻞ ﻟﻜﻲ
ﺗﺆدي ﻛﺬا؟ .ﻋﻨﺪھﺎ ﯾﺠﺐ أن ﺗﻜﺘﺐ ﺗﻠﻚ اﻟﺨﻄﻮات وﺗﺤﻮﻟﮭﺎ اﻟﻰ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ .وھﺬا ھﻮ ﻧﻔﺲ
121
اﻟﺸﻲء اﻟﺬي ﯾﺠﺐ أن ﺗﺘﺒﻌﮫ وأﻧﺖ ﺗﺼﻤﻢ ﻷي ﺑﺮﻧﺎﻣﺞ .وھﺬا ﻣﺎ ﻋﺮﺿﻨﺎه ﻓﻲ اﻟﻤﺮﺣﻠﺔ اﻷوﻟﻰ
ﻣﻦ دراﺳﺘﻨﺎ.
اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ
{
ﺟﺴﻢ اﻟﺪاﻟﺔ
;)( return
}
ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺩﺍﻟﺔ
وﯾﺘﻢ ﺑﺬﻛﺮ ﻧﻮع اﻟﺪاﻟﺔ وﻣﺎذا ﺗﺘﻘﺒﻞ ﻣﻦ ﻗﯿﻢ وﻣﻦ أي ﻗﯿﻢ ﺳﺘﻌﯿﺪ ﻧﺘﺎﺋﺠﮭﺎ .ﻓﮭﻞ ھﻲ داﻟﺔ ﻋﺪدﯾﺔ
وﻣﻦ أي أﻷﻋﺪاد ،ﺻﺤﯿﺤﺔ أم ﻛﺴﺮﯾﺔ أم ﻏﯿﺮھﺎ .أم ھﻲ داﻟﺔ ﻧﺼﯿﺔ أم ﻏﯿﺮ ذﻟﻚ.
ﺑﻌﺪ ذﻛﺮ اﻟﻨﻮع ﯾﺬﻛﺮ اﺳﻤﮭﺎ ﺛﻢ ﻗﻮﺳﯿﻦ .ﻓﺈن ﻛﺎن ﻟﮭﺎ وﺳﺎﺋﻂ ﻓﯿﺠﺐ ذﻛﺮھﺎ داﺧﻞ اﻟﻘﻮﺳﯿﻦ
وﺑﯿﻦ ﻛﻞ وﺳﯿﻂ ﻓﺎﺻﻠﺔ .ھﺬا ھﻮ اﻟﺘﺼﺮﯾﺢ وھﻮ أول ﺷﺮط ﯾﺠﺐ ﻓﻲ ﻛﺘﺎﺑﺔ اﻟﺪاﻟﺔ.
ﻣﺜﺎل ﺗﺼﺮﯾﺢ ﻋﻦ داﻟﺔ :ﻟﻨﻔﺮض أﻧﻚ ﺗﺮﯾﺪ ﻋﻤﻞ داﻟﺔ ﺗﺠﻤﻊ ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ a1و a2
وﺗﺮﻏﺐ أن ﺗﺴﻤﯿﮭﺎ additionوأﻧﮭﺎ ﺗﺠﻤﻊ اﻷﻋﺪاد اﻟﺼﺤﯿﺤﺔ . intﻋﻨﺪھﺎ ﯾﻜﻮن ﺷﻜﻞ
اﻟﺘﺼﺮﯾﺢ ھﻜﺬا:
122
ﻛﻤﺎ ﯾﺘﺒﯿﻦ؛ ﻧﺴﺒﻖ اﺳﻢ اﻟﺪاﻟﺔ واﺳﻢ ﻛﻞ وﺳﯿﻂ ﺑﻨﻮع اﻟﻘﯿﻤﺔ وﯾﺠﺐ أن ﯾﻜﻮن ﻧﻮع اﻟﺪاﻟﺔ وﻧﻮع
وﺳﻄﺎﺋﮭﺎ ﻣﺘﻮاﻓﻖ ﻏﯿﺮ ﻣﺨﺘﻠﻒ ..ﻛﺬﻟﻚ ﻧﺮى ـ ھﻨﺎ ـ أنّ اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ ﻟﻢ ﯾﻨﺘﮭﻲ ﺑﻔﺎﺻﻠﺔ
ﻣﻨﻘﻮطﺔ.
ﺟﺴﻢ ﺍﻟﺪﺍﻟﺔ
ﺑﻌﺪ اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ ﯾﺄﺗﻲ ھﯿﻜﻞ اﻟﺪاﻟﺔ؛ أي ﺧﻄﻮاﺗﮭﺎ وﺗﻌﻠﯿﻤﺎت ﺟﻤﻠﮭﺎ اﻟﻤﺒﺮﻣﺠﺔ .وھﻲ
ﺗﺄﺗﻲ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﻌﻘﻮﻓﯿﻦ .ﻓﻲ ﻣﺜﺎل داﻟﺘﻨﺎ اﻟﺘﻲ ﺗﺠﻤﻊ ﻣﺘﻐﯿﺮﯾﻦ ﻧﻔﻜﺮ أن ﺗﻜﻮن ﺧﻄﻮاﺗﮭﺎ
ﻛﺎﻟﺘﺎﻟﻲ:
ﺑﻤﺎ أﻧﻨﺎ أﻣﺎم وﺳﯿﻄﯿﻦ ﻓﻨﺤﻦ ﻧﺤﺘﺎج ﻟﻤﺘﻐﯿﺮ ﺛﺎﻟﺚ ﯾﻜﻮن ﻛﻨﺎﺗﺞ ﻟﺠﻤﻌﮭﻤﺎ ،ﻟﺬﻟﻚ ﻧﺤﺘﺎج ﻟﺘﺼﺮﯾﺢ
ﻋﻦ ھﺬا اﻟﻤﺘﻐﯿﺮ rﺛﻢ ﻣﻌﺎدﻟﺔ اﻟﺠﻤﻊ ﺑﯿﻦ اﻟﻤﺘﻐﯿﺮﯾﻦ r=a1+a2
ﺑﻌﺪ ذﻟﻚ ﻧﺤﺘﺎج اﻟﻰ ﺟﻤﻠﺔ ﺗﺤﻤﻞ ﻟﻨﺎ اﻟﻨﺎﺗﺞ ﻟﺘﻌﯿﺪه اﻟﻰ اﻟﻤﻮﺿﻊ اﻟﺬي ﻧﺴﺘﺪﻋﯿﮭﺎ ﻓﯿﮫ .ﻓﻨﺤﺘﺎج
اﻟﻰ ﻛﻠﻤﺔ اﻟﻌﻮدة returnﯾﻌﻘﺒﮭﺎ اﻟﻨﺘﯿﺠﺔ اﻟﺘﻲ ﯾﺮاد ﺣﻤﻠﮭﺎ ) return (rأو return
). (a1+a2
ﻋﻠﻰ ذﻟﻚ ﯾﻜﻮن ﺷﻜﻞ ﺗﻌﺮﯾﻒ اﻟﺪاﻟﺔ أو ﺟﺴﻤﮭﺎ ھﻜﺬا:
123
// function example
"#include "stdafx.h
>#include <iostream
;using namespace std
)(int main
{
;int sum
;)sum = addition (4,2
;cout << " sum is " << sum
;return 0
}
)int addition (int a, int b
;{int r
;r=a+b
;)return (r
}
ﻛﺘﺒﺖ داﻟﺘﻨﺎ ﺑﻌﺪ اﻟﺪاﻟﺔ اﻷم وھﻮ اﻟﻤﻔﻀﻞ وﻛﺎن ﯾﻤﻜﻨﺎ ﻛﺘﺎﺑﺘﮭﺎ ﻗﺒﻞ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ .ﻟﻜﻦ ﻻﯾﻨﺼﺢ
ﺑﺬﻟﻚ ﻋﺎدة ﺑﺴﺒﺐ ﻋﻨﺼﺮ آﺧﺮ إن أﺗﻰ ﻓﻲ اﻟﺪاﻟﺔ ﻟﻜﺎﻧﺖ أﻓﻀﻞ ﻣﻦ اﻟﻨﺎﺣﯿﺔ اﻟﺒﺮﻣﺠﯿﺔ .أﻻ وھﻮ
ﺗﺮوﯾﺴﺔ اﻟﺪاﻟﺔ.
ﺗﺮﻭﻳﺴﺔ ﺍﻟﺪﺍﻟﺔ
ﻟﻜﺘﺎﺑﺔ داﻟﺔ ﺗﺘﻮاﻓﻖ ﺗﻤﺎﻣﺎ ﻣﻊ ﻣﺘﻄﻠﺒﺎت اﻟﻤﺘﺮﺟﻢ؛ ﻧﺤﺘﺎج اﻟﻰ ﻋﻨﺼﺮ ﯾﺴﺒﻖ اﻟﺘﺼﺮﯾﺢ وﯾﺠﺐ أن
ﯾﺄﺗﻲ ﻓﻲ ﺑﺪاﯾﺎت اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ اﻟﻤﻠﻒ اﻟﻤﺼﺪري ﺑﻌﺪ ﺗﻌﻠﯿﻤﺎت اﻟﻤﻮﺟﮭﺎت واﻟﻤﻜﺘﺒﺎت وﻋﺒﺎرات
ﻋﺎﺋﻠﺔ اﻷﺳﻤﺎء .وھﻮ ﻣﺎﯾﺼﺢ ﺗﺴﻤﯿﺘﮫ ﺗﺮوﯾﺴﺔ اﻟﻨﻮﻋﯿﺎت .أي ﻧﻤﻮذج ﻧﻮع اﻟﺒﯿﺎﻧﺎت .ﻓﻤﻦ
اﻟﻤﻔﻀﻞ إﻋﻼم اﻟﻤﺘﺮﺟﻢ ﻣﺴﺒﻘﺎ ﺑﻨﻮع اﻟﺪاﻟﺔ وﻧﻮع وﺳﺎﺋﻄﮭﺎ ﺛﻢ ﯾﻤﻜﻦ ﺑﻌﺪ ذﻟﻚ ﺗﺄﺧﯿﺮ اﻟﺘﺼﺮﯾﺢ
وﺟﺴﻢ اﻟﺪاﻟﺔ اﻟﻰ ﻣﺎﺑﻌﺪ اﻟﺪاﻟﺔ اﻷم .اذن ﻣﺎﻓﺎﺋﺪة اﻟﺘﺼﺮﯾﺢ؟ .اﻟﺘﺼﺮﯾﺢ ﯾﻌﺮف اﻟﻤﺘﺮﺟﻢ ﺑﺄﺳﻤﺎء
وأﻧﻮاع اﻟﻮﺳﺎﺋﻂ وﻛﺬﻟﻚ ﻣﺎﺗﻌﯿﺪه اﻟﺪاﻟﺔ .أﻣﺎ اﻟﺘﺮوﯾﺴﺔ ـ أو اﻟﻨﻤﻮذج ـ ﻓﺘﺄﺗﻲ ﻣﻦ دون ذﻛﺮ
أﺳﻤﺎء اﻟﻮﺳﺎﺋﻂ واذا ﻣﺎ ذﻛﺮت ﻓﺴﯿﺘﻢ ﺗﺠﺎھﻠﮭﺎ .ﻓﺪوره ﻓﻘﻂ ﺗﺄﻛﯿﺪ أﻧﻮاع اﻟﻘﯿﻢ ﻟﻠﺪاﻟﺔ ووﺳﺎﺋﻄﮭﺎ.
124
ﺳﺒﺐ ذﻟﻚ أنّ اﻟﺪوال اﻟﻤﺒﺮﻣﺠﺔ ﻣﻦ ﻗﺒﻠﻚ ﻋﺎدة ﻣﺎ ﺗﺆﺧﺮ اﻟﻰ ﻣﺎﺑﻌﺪ اﻟﺪاﻟﺔ اﻷم ،ورﺑﻤﺎ ھﻨﺎك
داﻟﺔ ﺗﺴﺘﺪﻋﻲ داﻟﺔ ﺑﻌﺪھﺎ ﻓﯿﻜﻮن ﻣﻦ اﻷﻓﻀﻞ أنّ اﻟﻤﺘﺮﺟﻢ ﻗﺪ ﺣﺪد ﻧﻮع اﻟﺪوال ﻟﺪﯾﮫ ﻣﺴﺒﻘﺎ.
ﻧﻤﻮذج اﻟﺪاﻟﺔ ﯾﺸﺒﮫ ﻛﺜﯿﺮا اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ﻟﻜﻦ ﯾﻨﺘﮭﻲ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ:
اذن ﻗﻢ ﺑﺬﻛﺮ ﺗﺮوﯾﺴﺔ اﻟﺪاﻟﺔ واذﻛﺮ أﻧﺖ أﺳﻤﺎء وﺳﺎﺋﻄﮭﺎ وﻛﺄﻧﻚ ﺗﻜﺘﺐ ﺗﺼﺮﯾﺤﺎ وإن ﻛﺎن
اﻟﻤﺘﺮﺟﻢ ھﻨﺎ ﺳﯿﺘﺠﺎھﻞ ﺗﻠﻚ اﻷﺳﻤﺎء.
واﻟﯿﻚ اﻟﻤﺜﺎل ﻛﺎﻣﻼ ﻣﻊ ﻧﻤﻮذج داﻟﺘﮫ:
"#include "stdafx.h
>#include <iostream
;)int addition (int a, int b
;using namespace std
)(int main
{
;int sum
;)sum = addition (4,2
;cout << " sum is " << sum
;return 0
}
)int addition (int a, int b
;{int r
;r=a+b
;)return (r
}
125
اذن ﻟﻜﺘﺎﺑﺔ داﻟﺔ ﻗﻢ ﺑﺬﻛﺮ ﻧﻤﻮذﺟﮭﺎ ﻓﻲ اﻟﻤﻠﻒ اﻟﻤﺼﺪري ﻛﮭﺬا اﻟﻨﻤﻮذج:
;)int addition (int a, int b
ﺛﻢ ﺑﻌﺪ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ mainاﻛﺘﺐ ﺗﺼﺮﯾﺤﮭﺎ وﺟﺴﻤﮭﺎ.
...................
ﺇﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﺍﻟﺔ
اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ ﯾﻌﻨﻲ اﺳﺘﺨﺪاﻣﮭﺎ ﺳﻮاءا ﻣﻦ ﻗﺒﻞ اﻟﺪاﻟﺔ mainاو ﻣﻦ ﻗﺒﻞ دوال أﺧﺮى.
اﺳﺘﺨﺪام اﻟﺪاﻟﺔ ﯾﻜﻮن ﺑﺬﻛﺮ اﺳﻤﮭﺎ ﻣﻊ ﻗﻮﺳﯿﮭﺎ ووﺳﻄﺎﺋﮭﺎ إن وﺟﺪوا ،ﻛﺬﻟﻚ ﯾﻤﻜﻦ أن ﯾﻜﻮن
ذﻛﺮھﺎ ﻓﻲ ﺧﻼل ﺗﻌﺒﯿﺮ .ﻓﻔﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ اﺳﺘﺨﺪﻣﻨﺎ اﻟﺪاﻟﺔ additionﺑﺬﻛﺮھﺎ ﻓﻲ ﺧﻼل
ﺗﻌﺒﯿﺮ ﺑﮭﺬه اﻟﺠﻤﻠﺔ:
;)sum = addition (4,2
اﻟﻘﯿﻤﺘﯿﻦ ) (4,2ﺣﻠﺖ ﻣﺤﻞ اﻟﻤﺘﻐﯿﺮﯾﻦ ) (int a, int bﻋﻠﻰ اﻟﺘﺮﺗﯿﺐ .وﺳﻨﻌﻮد ﻟﻨﺪرس ذﻟﻚ
ﻣﻦ ﺟﺪﯾﺪ ﺑﻌﺪ أﺳﻄﺮ ﻓﻲ ﻓﻘﺮة اﻟﺘﻤﺮﯾﺮ ﻟﻠﺪاﻟﺔ.
ﻛﺎن ﯾﻤﻜﻦ ﻟﻠﺘﻌﺒﯿﺮ أن ﯾﺘﻀﻤﻦ أﺷﯿﺎء أﺧﺮى ﻛﻤﺜﻞ:
;)sum = (5* addition) + addition (4,2
ﻟﻜﻦ ھﻨﺎك اﺳﺘﺪﻋﺎء ﻣﺜﯿﺮ آﺧﺮ ﯾﺴﻤﻰ اﻟﻌﻮدﯾﺔ ﻋﻨﺪﻣﺎ ﺗﺴﺘﺪﻋﻲ اﻟﺪاﻟﺔ ﻧﻔﺴﮭﺎ!.
ﺍﻟﻌﻮﺩﻳﺔ
ﻓﻲ ﻧﮭﺎﯾﺔ ﺟﺴﻢ اﻟﺪاﻟﺔ ھﻨﺎك ﺟﻤﻠﺔ اﻟﻌﻮدة returnواﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺤﻤﻞ ﺗﻌﺒﯿﺮا ھﻮ ﻧﺘﯿﺠﺔ ﻟﻤﺎ
ﺗﻌﯿﺪه اﻟﺪاﻟﺔ .اذا ﺿﻤّﻨﺎ ﺟﻤﻠﺔ returnاﺳﻢ اﻟﺪاﻟﺔ ﻣﺮة أﺧﺮى أو ﺟﻌﻠﻨﺎه ﻣﻦ ﺿﻤﻦ اﻟﺘﺮﻛﯿﺐ
اﻟﺬي ﺳﺘﻌﻮد ﺑﮫ؛ ﻋﻨﺪھﺎ ﺳﺘﺴﺘﺪﻋﻲ اﻟﺪاﻟﺔ ﻧﻔﺴﮭﺎ وﺗﺴﺘﺨﺪم ﺗﻌﻠﯿﻤﺎت ﺟﺴﻤﮭﺎ ﻣﺮة أﺧﺮى.
126
رﺑﻤﺎ أدت ھﺬه اﻟﻌﻤﻠﯿﺔ اﻟﻰ اﻟﺪﺧﻮل ﻓﻲ ﺣﻠﻘﺔ ﻏﯿﺮ ﻣﻨﺘﮭﯿﺔ وﺑﺎﻟﺘﺎﻟﻲ ﯾﺠﺐ أن ﯾﻮﺿﻊ ﺷﺮوطﺎ
ﺗﺼﻮر أﻧّﻚ ﻗﻤﺖ ﺑﻜﺘﺎﺑﺔ داﻟﺔ ﺗﻌﻄﯿﻚ اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ اﻷدﻧﻰ ﻟﻌﺪد.ﻣﺪروﺳﺔ ﺗﻤﻨﻊ ﻣﺜﻞ ذﻟﻚ
اذا ﺟﻌﻠﺖ اﻟﺪاﻟﺔ ﺑﻌﺪ ذﻟﻚ ﺗﺴﺘﺪﻋﻲ.(8) ( وھﻮ9) ﻣﺜﻼ ﺗﻌﻄﯿﻚ اﻟﻌﺪد اﻟﺬي ﻗﺒﻞ اﻟـ.ﻣﻌﯿﻦ
ﻟﺬﻟﻚ ﻋﻠﯿﻚ أن ﺗﻘﻮم،( وھﻜﺬا دون ﺗﻮﻗﻒ4) (5) (6) (7) ﻧﻔﺴﮭﺎ ﻓﺈﻧﮭﺎ ﺳﺘﻌﻄﯿﻚ اﻟﻨﺘﺎﺋﺞ
.ﺑﻜﺘﺎﺑﺔ ﺟﻤﻠﺔ ﺷﺮطﯿﺔ أﻧّﮫ اذا ﺑﻠﻎ اﻟﻌﺪد )ﻛﺬا ( ﻓﺘﻮﻗﻒ
:ﻣﺜﺎل ﻋﻦ اﻟﻌﻮدﯾﺔ
// Ex. 4.18: ex04_18.cpp
// What does this program do?
#include <iostream>
int main()
int integer1;
int result;
} // end main
// recursive step
else
127
return ;) ( size - 1 ) + whatIsThis(size - 1
ﺍﻟﺘﻤﺮﻳﺮ ﻟﻠﺪﺍﻟﺔ
ﻣﺎھﻲ اﻟﻄﺮق اﻟﺘﻲ ﯾﻤﻜﻦ أن ﻧﺨﺎطﺐ ﺑﮭﺎ اﻟﺪاﻟﺔ ﻟﻜﻲ ﺗﺪﺧﻞ ﻗﯿﻢ ﻣﺎ ﻓﻲ وﺳﻄﺎﺋﮭﺎ؟ .ﻟﻨﺮﺟﻊ اﻟﻰ
ﻣﺜﺎل اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ:
)int addition (int a, int b
;{int r
;r=a+b
;)return (r
}
128
ﻣﮭﻤﺔ اﻟﺪاﻟﺔ ﻛﻤﺎ ھﻮ ﺑﯿﻦ؛ ﺟﻤﻊ ﻗﯿﻢ اﻟﻤﺘﻐﯿﺮﯾﻦ ) . (a+bاذا ﻧﻈﺮﻧﺎ اﻟﻰ اﻟﺘﺼﺮﯾﺢ ﻟﺮأﯾﻨﺎ ﺗﺮﺗﯿﺐ
اﻟﻤﺘﻐﯿﺮﯾﻦ ﺑﮭﺬا اﻟﺸﻜﻞ . (int a, int b) :اﻵن ﻟﻨﻨﻈﺮ اﻟﻰ اﻻﺳﺘﺪﻋﺎء ﻣﻦ ﻗﺒﻞ اﻟﺪاﻟﺔ main
ﻓﻘﺪ ﻛﺎن ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔsum = addition (4,2); :
ﻓﺎﺳﺘﺨﺪﻣﻨﺎ ﻣﮭﻤﺔ اﻟﺪاﻟﺔ وﻟﻜﻦ ﺑﺎﻟﻘﯿﻢ اﻟﺘﻲ ﻧﺮﯾﺪھﺎ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ وﺑﮭﺬا اﻟﺘﺮﺗﯿﺐaddition :
)(4,2
ﺳﻨﺬﻛﺮ اﻵن ﺗﺮﺗﯿﺐ اﻟﻤﺘﻐﯿﺮات ﻣﻊ ﺗﺮﺗﯿﺐ اﻟﻘﯿﻢ ﺣﯿﻦ اﻻﺳﺘﺪﻋﺎء:
اﻟﻤﺘﺮﺟﻢ ﺳﯿﺤﺎﻓﻆ ﻋﻠﻰ اﻟﺘﺮﺗﯿﺐ وﺳﯿﻀﻊ 4ﻣﺤﻞ aوﯾﻀﻊ 2ﻣﺤﻞ . bﺑﺼﻮرة أدق:
ﺳﺘﻮﺿﻊ اﻟﻘﯿﻤﺔ 4ﻛﻘﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ aطﺎﻟﻤﺎ ﺗﻮاﺟﺪ ھﺬا اﻻﺳﺘﺪﻋﺎء .وھﻨﺎ ﻧﻌﻮد ﻟﻨﺬﻛﺮ ﺑﺸﻲء:
اﻟﻤﺘﻐﯿﺮ ﻟﯿﺲ ﻓﻘﻂ ﻗﯿﻤﺔ؛ ﺑﻞ ھﻮ اﺳﻢ ﻟﮫ ﺣﺠﻢ وﻋﻨﻮان ﺑﺎﻹﺿﺎﻓﺔ اﻟﻰ ﻗﯿﻤﺘﮫ .أي أنّ اﻟﻤﺘﻐﯿﺮ
ﯾﻤﻜﻦ أن ﯾﺄﺧﺬ ﻋﺪة ﻧﺴﺦ ﻣﻦ اﻟﻘﯿﻢ .ﻓﻲ ھﺬه اﻟﻄﺮﯾﻘﺔ اﻟﻤﺎرة؛ ظﻞ اﻟﻤﺘﻐﯿﺮ ھﻮ aﺑﻌﻨﻮاﻧﮫ وﻟﻜﻦ
اﻟﺪاﻟﺔ أﻋﻄﺖ ﻧﺴﺨﺔ ﻣﻨﮭﺎ وﺟﻌﻠﺖ ﻗﯿﻤﺔ aﻟﺘﻠﻚ اﻟﻨﺴﺨﺔ ھﻲ . 4ﻓﻲ اﺳﺘﺪﻋﺎء آﺧﺮ ﺑﻘﯿﻢ ﻣﺨﺘﻠﻔﺔ
ﺳﺘﻌﻄﻲ اﻟﺪاﻟﺔ ﻧﺴﺦ أﺧﺮى ﻟﺘﻠﻚ اﻟﻘﯿﻢ.
ﯾﻤﻜﻦ أن ﯾﺄﺗﻲ ﻣﺤﻞ ) (4,2ﻣﺘﻐﯿﺮات ﻛـ ) (x,yأو ﺣﺘﻰ ) (a,bاذا ﻣﺎ أﻋﻠﻦ ﻋﻨﮭﻤﺎ داﺧﻞ
ﻛﺘﻠﺔ اﻟﺪاﻟﺔ واﻟﻤﺘﺮﺟﻢ ﻋﻨﺪھﺎ ﺳﯿﻤﯿﺰ ﺑﯿﻨﮭﻤﺎ وﺑﯿﻦ وﺳﯿﻄﻲ اﻟﺪاﻟﺔ.
اذن ﻟﻮﺳﯿﻄﻲ اﻟﺪاﻟﺔ additionﻗﯿﻤﺔ أوﻟﻰ؛ أي ﻟﻠﻤﺘﻐﯿﺮﯾﻦ ) (a,bﻗﯿﻤﺔ ﺳﺘﺒﻘﻰ ﻛﻤﺎ ھﻲ
ﻣﺤﺎﻓﻈﺎ ﻋﻠﯿﮭﺎ .واي اﺳﺘﺪﻋﺎء ﻟﮭﻤﺎ ﻛﻤﺎ ﺳﺒﻖ ﺳﺘﻜﻮن ﻧﺴﺦ ﻗﯿﻢ ﻣﺆﻗﺘﺔ ﻟﺬﻟﻚ اﻻﺳﺘﺪﻋﺎء.
129
ﻛﻞ ﻣﺎﻣﺮ ﯾﺴﻤﻰ اﻟﺘﻤﺮﯾﺮ ﺑﺎﻟﻘﯿﻤﺔ وھﻲ طﺮﯾﻘﺔ ﺗﺴﺘﺪﻋﻲ ﻧﺴﺨﺎ ﻣﻦ اﻟﺪاﻟﺔ وﻟﯿﺲ اﻟﺪاﻟﺔ ﻧﻔﺴﮭﺎ.
ﻓﻤﺎذا إن أردﻧﺎ ﺗﻐﯿﯿﺮ وﺳﯿﻄﻲ اﻟﺪاﻟﺔ ﻓﻌﻼ ﻛﺘﻐﯿﯿﺮ ﺟﺬري ﻣﻦ أﺻﻞ ﻣﺤﻠﮭﻤﺎ؟ .ھﺬا ﻣﺎ ﯾﺘﻢ
ﺑﻮاﺳﻄﺔ طﺮﯾﻘﺔ أﺧﺮى ﺗﺴﻤﻰ :اﻟﺘﻤﺮﯾﺮ ﺑﺎﻟﻌﻨﻮان.
ﺍﻟﺘﻤﺮﻳﺮ ﺑﺎﻟﻌﻨﻮﺍﻥ
أﻧﺖ ﻻزﻟﺖ ﺗﺬﻛﺮ ﻋﺎﻣﻞ اﻟﻌﻨﻮان & اﻟﺬي اذا ﻣﺎﺟﺎء ﻗﺒﻞ ﻣﺘﻐﯿﺮ ﻓﺈﻧﮫ ﯾﻌﻄﻲ ﻋﻨﻮان ذﻟﻚ
اﻟﻤﺘﻐﯿﺮ .ﻓﺎذا وﺻﻠﻨﺎ اﻟﻰ ﻋﻨﻮان ﻣﺘﻐﯿﺮ اﺳﺘﻄﻌﻨﺎ اﻟﺘﺤﻜﻢ ﺑﮫ وﺑﻘﯿﻤﺘﮫ ﻣﻦ أﺻﻞ ﻣﻜﺎﻧﮫ .ﺣﯿﻨﮭﺎ أي
اﺳﺘﺪﻋﺎء ﺑﺎﻟﻌﻨﻮان ﺳﯿﻜﻮن ﺑﺘﺤﻮﯾﻞ ﺟﺬري ﻟﻘﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ﻓﻲ اﻟﺪاﻟﺔ وﻟﯿﺲ ﻛﻨﺴﺨﺔ ﻟﻘﯿﻤﺘﮫ.
اذا أردﻧﺎ اﺳﺘﺪﻋﺎء داﻟﺔ ﺑﺎﻟﻌﻨﻮان ﻓﯿﺠﺐ أن ﯾﻜﻮن ﺗﺼﺮﯾﺤﮭﺎ ﺣﺎﻣﻼ ﻟﻌﺎﻣﻞ اﻟﻌﻨﻮان ﻗﺒﻞ أي
وﺳﯿﻂ ﻟﮭﺎ ﻧﺮﯾﺪ اﺳﺘﺪﻋﺎءه ﺑﺘﻠﻚ اﻟﻄﺮﯾﻘﺔ .وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻋﻦ اﻟﺘﺼﺮﯾﺢ ﺑﺎﻟﻌﻨﻮان:
130
ﺗﻢ اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ ﺑﻌﻨﻮاﻧﮭﺎ ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ:
)void reffunction (int&a,int&b
وﺗﻢ اﺳﺘﺪﻋﺎءھﺎ ﻣﻦ ﻗﺒﻞ اﻟﺪاﻟﺔ mainﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ:
;)reffunction (x,y
وھﻨﺎ ﺳﺘﺤﻞ ﻗﯿﻤﺔ xﻣﺤﻞ ﻗﯿﻤﺔ aﺗﻤﺎﻣﺎ وﺳﺘﺤﻤﻞ aاﻟﻘﯿﻤﺔ ) (1وھﻜﺬا ﺑﺎﻟﻨﺴﺒﺔ ﻟـ . b
ﺍﻟﺪﺍﻻﺕ ﺍﻟﺴﻄﺮﻳﺔ
وھﻲ داﻻت ﺻﻐﯿﺮة ﺗﻜﺘﺐ ﻋﻠﻰ ﺳﻄﺮ واﺣﺪ وﯾﺼﺮح ﻋﻨﮭﺎ ﺑﮭﺬه اﻟﻌﻼﻣﺔ inline :اﻟﺘﻲ
ﺗﺄﺗﻲ ﻓﻲ ﺑﺪاﺑﺔ ﺟﻤﻠﺔ اﻟﺘﺼﺮﯾﺢ ﻛﻤﺜﻞ ﺟﻤﻠﺔ اﻟﺘﺼﺮﯾﺢ ھﺬه:
وﻛﻤﺎ ﺗﺒﯿﻦ ﻣﻦ ﻗﺒﻞ :اذا ﻛﺘﺒﺖ اﻟﺪاﻟﺔ ﻗﺒﻞ )( mainﺗﻨﺘﻔﻲ اﻟﺤﺎﺟﺔ ﻟﺬﻛﺮ ﻧﻤﻮذج ﻟﮭﺎ .وﻛﻤﺎ ﻓﻲ
ﻣﺜﺎل اﻟﺒﺮﻧﺎﻣﺞ اﻟﺘﺎﻟﻲ:
;using std::cout
;using std::cin
;using std::endl
131
// Definition of inline function cube. Definition of function
// appears before function is called, so a function prototype
// is not required. First line of function definition acts as
// the prototype.
inline double cube( const double side )
{
return side * side * side; // calculate cube
int main()
{
cout << "Enter the side length of your cube: ";
double sideValue;
} // end main
return side * side * :اذن ﻛﻤﺎ ﺗﺮى ﻓﺠﺴﻢ اﻟﺪاﻟﺔ ﻛﻠﮫ ﻋﺒﺎرة ﻋﻦ ﺟﻤﻠﺔ ﻓﻲ ﺳﻄﺮ واﺣﺪ
side;
اﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ ﻟﻠﻮﺳﻄﺎء
وﯾﻜﻮن ذﻟﻚ ﺑﺘﺤﺪﯾﺪ وﺳﯿﻂ أو أﻛﺜﺮ ﻋﻠﻰ.ﯾﻤﻜﻦ ﺗﻤﺮﯾﺮ ﻗﯿﻢ اﻓﺘﺮاﺿﯿﺔ أوﻟﻰ ﻋﻨﺪ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ
ﻓﺎذا ﻣﺎﺳﺘﺪﻋﯿﺖ اﻟﺪاﻟﺔ وﻟﻢ ﯾﺘﻢ ذﻛﺮ ھﺬا اﻟﻮﺳﯿﻂ ﺣﯿﻦ اﻻﺳﺘﺪﻋﺎء؛ ﻓﺈﻧﮫ ﺳﯿﺄﺧﺬ.أﻧﮭﺎ اﻓﺘﺮاﺿﯿﺔ
ﻓﺄﻣﺎ اذا ذﻛﺮ ﺑﺄﺣﺪ اﻟﻄﺮﯾﻘﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ ﻓﻌﻨﺪھﺎ ﺗﻤﺮر ﻟﮫ اﻟﻘﯿﻤﺔ.ﺗﻠﻚ اﻟﻘﯿﻤﺔ اﻟﻤﻔﺘﺮﺿﺔ ﻟﮫ ﺑﺪاﯾﺔ
.ﺣﺴﺐ ﻣﺎ ﯾﺬﻛﺮ ﻓﻲ طﺮﻗﺔ اﻟﺘﻤﺮﯾﺮ
132
ﺗﻮﺿﻊ اﻟﻮﺳﻄﺎء اﻻﻓﺘﺮاﺿﯿﺔ ﻣﺰاﺣﺔ اﻟﻰ اﻗﺼﻰ ﯾﻤﯿﻦ ﻗﺎﺋﻤﺔ اﻟﻮﺳﻄﺎءوذﻟﻚ ﻋﻨﺪ ﺗﻌﺮﯾﻒ اﻟﺘﺎﺑﻊ
وﻣﻊ ا ول ذﻛﺮ ﻻﺳﻢ اﻟﺪاﻟﺔ ﻛﺬﻛﺮھﻢ ﻓﻲ ﻧﻤﻮذج اﻟﺪاﻟﺔ ﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺣﯿﺚ ﺗﻌﻄﻰ اﻟﻮﺳﻄﺎء
ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ ھﻲ ) (:
;) int boxVolume( int length = 1, int width = 1, int height = 1
ﺣﯿﻦ ﯾﺤﺬف وﺳﯿﻂ اﻓﺘﺮاﺿﻲ ﺣﯿﻦ اﻻﺳﺘﺪﻋﺎء ،ﻓﺈن ﻛﻞ ﻣﺎﻋﻠﻰ ﯾﻤﯿﻨﮫ ﻣﻦ اﻟﻮﺳﻄﺎء ﺳﺘﺤﺬف
اﯾﻀﺎ.
ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ أﻋﻄﻲ ﻟﻠﻮﺳﻄﺎء اﻟﺜﻼﺛﺔ ﻗﯿﻢ اﻓﺘﺮاﺿﯿﺔ ﻓﻲ ﻧﻤﻮذج اﻟﺘﺎﺑﻊ ﻣﻊ ذﻛﺮ اﺳﻤﺎء
اﻟﻤﺘﻐﯿﺮات ﻣﻊ اﻧﮫ ﻟﯿﺲ ﻣﻦ اﻟﻀﺮوري ذﻛﺮ اﻟﻤﺘﻐﯿﺮات ﻓﻲ اﻟﻨﻤﻮذج اﻻ ﻟﻠﺘﻮﺿﯿﺢ ﺣﯿﻦ
ﻣﺮاﺟﻌﺔ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ.
ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻻول ﻟﮭﺬا اﻟﻤﺜﺎل ﻟﻢ ﻧﺴﺘﺨﺪم أي وﺳﯿﻂ ﻓﺘﻢ اﻟﺘﻌﻮﯾﺾ ﻋﻨﮭﺎ ﺑﺎﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ.
ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺜﺎﻧﻲ ،ﻣﺮرت ﻗﯿﻤﺔ ﻟﻠﻮﺳﯿﻂ lengthﺑﯿﻨﻤﺎ اﺳﺘﺨﺪﻣﺖ اﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ
ﻟﻠﻮﺳﯿﻄﯿﻦ widthو . heightﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺜﺎﻟﺚ ،ﺗﻢ ﺗﻤﺮﯾﺮ ﻗﯿﻤﺘﯿﻦ ﻟﻠﻮﺳﯿﻄﯿﻦ length
و widthواﺳﺘﺨﺪﻣﺖ اﻟﻘﯿﻤﺔ اﻻﻓﺘﺮاﺿﯿﺔ ﻟﻠﻮﺳﯿﻂ . heightﺑﯿﻨﻤﺎ ﺗﻢ ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺮاﺑﻊ
ﺗﻤﺮﯾﺮ ﻗﯿﻢ ﻟﻠﻮﺳﻄﺎء اﻟﺜﻼﺛﺔ ﻓﻠﻢ ﺗﺴﺘﺨﺪم اﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ.
;using std::cout
;using std::endl
)(int main
{
// no arguments--use default values for all dimensions
;)(cout << "The default box volume is: " << boxVolume
133
// specify length; default width and height
cout << "\n\nThe volume of a box with length 10,\n"
<< "width 1 and height 1 is: " << boxVolume( 10 );
} // end main
int main()
{
return 0;
}
134
ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻻول ) divide (12ﻣﺮر وﺳﯿﻂ واﺣﺪ ﻓﺄﻋﻄﻲ اﻟﻮﺳﯿﻂ اﻟﺜﺎﻧﻲ اﻟﻘﯿﻤﺔ
أھﻤﻠﺖ اﻟﻘﯿﻤﺘﺎن اﻻﻓﺘﺮاﺿﯿﺔ ) .(2ﺑﯿﻨﻤﺎ ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺜﺎﻧﻲ )divide (20,4
اﻻﻓﺘﺮاﺿﯿﺘﺎن ﻟﻮﺟﻮد ﻗﯿﻢ ﻣﻤﺮرة.
أﻣﺎ ﻓﻲ C++ﻓﻘﺪ ﺗﻢ ﺗﺠﺎوز ذﻟﻚ ﺑﻤﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻟﻠﺪوال .وھﻮ ﻛﺘﺎﺑﺔ دوال ﻟﮭﺎ ﻧﻔﺲ
اﻻﺳﻢ وﻟﻜﻦ ﻛﻞ داﻟﺔ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻧﻤﻄﮭﺎ ﺑﺘﻮﺟﯿﮫ ﻣﻦ اﻟﻤﺘﺮﺟﻢ .أي أنّ اﻟﻤﺘﺮﺟﻢ ﯾﺘﻔﺤﺺ اﻟﻘﯿﻢ
اﻟﻤﺪﺧﻠﺔ وأﻧﻮاﻋﮭﺎ وﯾﺤﺪد أي ﻣﻦ اﻟﺪوال ﯾﺠﺐ أن ﯾﺘﺠﮫ إﻟﯿﮭﺎ ﻓﯿﺴﺘﺪﻋﯿﮭﺎ ﻣﻊ أﻧﮭﺎ ﺗﺤﻤﻞ ﻧﻔﺲ
اﻻﺳﻢ اﻟﺬي ﻗﺪ ﺗﺤﻤﻠﮫ داﻟﺔ أﺧﺮى.
ھﺬا ﯾﻔﯿﺪ ـ ﻣﺜﻼ ـ ﻓﻲ ﻋﻤﻞ داﻟﺔ ﻟﺤﺴﺎب اﻟﻤﻜﻌﺐ اﻟﻌﺪدي ﻟﺮﻗﻢ أﯾﺎ ﻛﺎن ﻧﻮﻋﮫ .ﻓﯿﺘﻢ ﻋﻤﻞ دوال
ﻟﮭﺎ اﻻﺳﻢ ﻣﻜﻌﺐ cupﻓﯿﻜﻮن اﺳﺘﺪﻋﺎﺋﮭﺎ ﺑﮭﺬا اﻻﺳﻢ ﻣﮭﻤﺎ ﻛﺎن ﻧﻮع اﻟﻌﺪد ﺻﺤﯿﺢ أو ﻏﯿﺮ
ﺻﺤﯿﺢ .واﻻ ﻓﻜﻤﺎ ذﻛﺮﻧﺎ .ﻛﺎن ﯾﻨﺒﻐﻲ ﺳﺎﺑﻘﺎ ﻋﻤﻞ دوال ﺑﺄﺳﻤﺎء ﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻧﻮع.
135
أﯾﻀﺎ ﯾﺼﻠﺢ اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻓﻲ ﻛﺘﺎﺑﺔ دوال ﻟﮭﺎ ﻧﻔﺲ اﻻﺳﻢ اذا اﺧﺘﻠﻒ ﻋﺪد اﻟﻮﺳﻄﺎء ﺑﯿﻦ داﻟﺔ
وأﺧﺮى ،ﻓﺎﻟﻤﺘﺮﺟﻢ ﯾﺘﻔﺤﺺ ﻋﺪد اﻟﻮﺳﻄﺎء وﯾﻘﻮم ﺑﺎﺧﺘﯿﺎر اﻟﺪاﻟﺔ اﻟﻤﻨﺎﺳﺒﺔ.
ﯾﻤﻜﻦ أﯾﻀﺎ ﻓﻲ اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻛﺘﺎﺑﺔ دوال ﻟﮭﺎ ﻧﻔﺲ اﻻﺳﻢ وﻟﻜﻦ ﺑﺸﺮط اﺧﺘﻼف اﻟﻮﺳﻄﺎء
ﺑﺎﻟﻨﻮع أو اﻟﻌﺪد؛ ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ دوال ﺗﺆدي ﻋﻤﻠﯿﺎت ﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻧﻤﻂ أو ﻟﻜﻞ ﻋﺪد ﻣﺨﺘﻠﻒ ﻣﻦ
اﻟﻮﺳﻄﺎء .أي ﻟﯿﺲ ﻣﻦ اﻟﻀﺮوري أن ﺗﻜﻮن ﺗﻌﻠﯿﻤﺎت ﺟﺴﻢ اﻟﺪوال ﺗﺆدي ﻧﻔﺲ اﻟﻐﺮض وإﻧﻤﺎ
ﯾﺠﻮز أن ﺗﺆدي أﻏﺮاض ﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻧﻮع ﻣﻦ اﻟﻮﺳﻄﺎء أو ﻟﻜﻞ ﻋﺪد وﺳﻄﺎء .ھﺬا ھﻮ
اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻟﻠﺪوال.
ﻓﯿﻤﺎ ﯾﻠﻲ ﻣﺜﺎل ﻋﻦ ذﻟﻚ:
ﺑﮭﺬا ﻧﻜﻮن اﻧﺘﮭﯿﻨﺎ ﻣﻦ ﻣﻮﺿﻮع اﻟﺪوال واﻟﺬي ﺑﻮاﺳﻄﺘﮫ ﻧﺴﺘﻄﯿﻊ أن ﻧﻘﻮل أنّ اﻟﺪاﻟﺔ ھﻲ ﺑﻤﺜﺎﺑﺔ
ورﺷﺔ ﻋﻤﻞ ﻣﺘﺨﺼﺼﺔ ﻓﻲ ﻣﮭﻨﺔ أو ﺷﻲء ﻣﺎ .وﻟﻨﻨﺘﻘﻞ اﻟﻰ ﻣﻮاﺿﯿﻊ أﺧﺮى ﻣﮭﻤﺔ.
136
....................
137
ﺿﺮﺑﻨﺎه ﺳﺎﺑﻘﺎ ﻓﻲ ﺑﺪاﯾﺎت اﻟﻜﺘﺎب .أﻣﺎ اﻟﻨﻮع charﻓﮭﻮ ﯾﺤﺘﻞ ﺧﺎﻧﺔ واﺣﺪة ،ﻟﺬﻟﻚ ﺗﻜﻮن ﺧﻄﻮة
اﻻﻧﺘﻘﺎل ) (1ﺑﯿﻨﻤﺎ اﻟﻨﻮع shortﯾﺤﺘﻞ ﺧﺎﻧﺘﯿﻦ ﻓﺘﻜﻮن ﺧﻄﻮة اﻧﺘﻘﺎل اﻟﻤﺆﺷﺮ ).(2
ﻣﺆﺷﺮ ﺍﱃ ﻣﺆﺷﺮ
ﯾﻤﻜﻦ ان ﻧﺸﯿﺮ اﻟﻰ ﻣﺆﺷﺮ ﺑﻮاﺳﻄﺔ ﻣﺆﺷﺮ آﺧﺮ ،وذﻟﻚ ﺑﺄن ﻧﻜﺮر اﻟﻌﺎﻣﻞ *
ﻓﻤﺜﻼ ﻟﺪﯾﻨﺎ اﻟﻤﺆﺷﺮ ; char * bاﻟﺬي ﯾﺸﯿﺮ اﻟﻰ ﻋﻨﻮان ﻣﻌﯿﻦ ﻛﺄن ﯾﻜﻮن:
ﻧﺴﺘﻄﯿﻊ اﻻن ان ﻧﻜﺘﺐ ﻣﺆﺷﺮ اﺧﺮ اﻟﻰ اﻟﻤﺆﺷﺮ bﻛﺎﻟﺘﺎﻟﻲ: ;b = &a
; Char **cﺛﻢ ﻧﻜﺘﺐc = & b; :
ﻓـ cﯾﺤﻤﻞ ﻋﻨﻮان اﻟﻤﺆﺷﺮ bاﻟﺬي ھﻮ ﺑﺪوره ﯾﺸﯿﺮ اﻟﻰ ﻋﻨﻮان اﺧﺮ.
ﻟﻨﺘﺪﺑﺮ ھﺬا اﻻن:
;Char a
;Char *b
;Char **c
;'a = 'z
;b = &a
;c = &b
اﻻن **cﺳﺘﺤﻮي " "zو *cﺳﺘﺸﯿﺮ اﻟﻰ ﻗﯿﻤﺔ ﻋﻨﻮان aو cﺳﺘﺤﻤﻞ ﻗﯿﻤﺔ ھﻲ ﻋﻨﻮان b
138
ﻛﯿﻒ ذﻟﻚ؟ .ﯾﺠﺐ أن ﻧﻌﯿﺪ ﻓﮭﻤﻨﺎ ﻣﻦ ﺟﺪﯾﺪ.
ﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺆﺷﺮ ﻧﺤﺘﺎج اﻟﻰ ﻣﺜﻞ ھﺬه اﻟﮭﯿﺌﺔint * pi; :
ﺑﻌﺪ ذﻟﻚ ،واذا ﺗﺮﻛﻨﺎ اﻟﻜﻼم ﻟﻸﺷﯿﺎء ذاﺗﮭﺎ! ﻓﺈنّ piﺳﺘﻘﻮل :أﻧﺎ أﺗﻌﺎﻣﻞ ﻣﻊ اﻟﻌﻨﻮان .ﺑﯿﻨﻤﺎ ﺗﻘﻮل
: *piأﻣﺎ أﻧﺎ ﻓﺄﺗﻌﺎﻣﻞ ﻣﻊ ﻗﯿﻤﺔ اﻟﻌﻨﻮان ﻓﺄذھﺐ اﻟﻰ ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ وأرى ﻛﻢ ھﻲ ﻗﯿﻤﺔ ھﺬا
اﻟﻤﺘﻐﯿﺮ ﻓﺒﺈﻣﻜﺎﻧﻲ ﺗﻐﯿﯿﺮھﺎ.
أي اذا اﺳﺘﺨﺪﻣﻨﺎ اﻟﮭﯿﺌﺔ *piﻓﻲ اﻟﻄﺮف اﻷﯾﺴﺮ ﻣﻦ اﻟﺘﻌﺒﯿﺮ ﻓﺈن ذﻟﻚ ﯾﻌﻨﻲ اﻧﻨﺎ ﻧﺮﯾﺪ أن
ﻧﺸﯿﺮ اﻟﻰ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﯾﺤﻮﯾﮭﺎ اﻟﻌﻨﻮان ﻓﻨﻐﯿﺮھﺎ ﺑﺄن ﻧﻀﻊ ﻗﯿﻤﺔ ﺟﺪﯾﺪة ﻣﻜﺎﻧﮭﺎ ھﻲ ﻧﺘﯿﺠﺔ ﻣﺎ
ﯾﻜﻮن ﻣﻦ اﻟﻄﺮف اﻻﯾﻤﻦ ﻟﻠﺘﻌﺒﯿﺮ .أﻣﺎ اذا اﺳﺘﺨﺪﻣﻨﺎ اﻻﺳﻢ piﻓﻲ اﻟﻄﺮف اﻷﯾﺴﺮ ﻣﻦ اﻟﺘﻌﺒﯿﺮ
ﻣﺠﺮدا ﻣﻦ اﻟﻌﺎﻣﻞ * ﻓﺈنّ ذﻟﻚ ﯾﻌﻨﻲ أﻧﻨﺎ ﻧﺮﯾﺪ أن ﻧﺸﯿﺮ اﻟﻰ اﻟﻌﻨﻮان اﻟﺬي ﯾﺪل ﻋﻠﯿﮫ وﻧﻐﯿﺮه
ﻷن ﯾﺸﯿﺮ اﻟﻰ ﻋﻨﻮان ﺟﺪﯾﺪ ھﻮ ﻣﺎ ﯾﻜﻮن ﻣﻦ ﻧﺎﺗﺞ اﻟﺘﻌﺒﯿﺮ ﻓﻲ اﻟﻄﺮف اﻻﯾﻤﻦ.
ﻟﺬﻟﻚ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ b ،ﺳﺘﺤﻤﻞ ﻋﻨﻮان aﺑﯿﻨﻤﺎ *bﻗﯿﻤﺔ a
ﻛﺬﻟﻚ c ،ﺗﻌﻨﻲ ﻋﻨﻮان اﻟﻤﺆﺷﺮ bأي ﺗﻌﻨﻲ ﻣﻮﻗﻊ اﻟﻤﺆﺷﺮ bﻣﻦ اﻟﺬاﻛﺮة .ﺑﯿﻨﻤﺎ ﺗﻌﻨﻲ *c
اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﯾﺤﻮﯾﮭﺎ اﻟﻤﺆﺷﺮ bوھﻲ ﻋﻨﻮان aوﺗﻌﻨﻲ **cﻗﯿﻤﺔ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﯾﺤﻮﯾﮭﺎ bوھﻲ
" . "zﻷن bھﻲ ﻋﻨﻮان aﺑﯿﻨﻤﺎ *bھﻲ ﻗﯿﻤﺔ ﻣﺎ ﯾﺤﻮﯾﮫ bوھﻮ ﯾﺪل ﻋﻠﻰ ﻗﯿﻤﺔ . a
اﻻن ﻧﺴﺘﻄﯿﻊ ان ﻧﻨﺘﻘﻞ اﻟﻰ ﻣﻮﺿﻮع آﺧﺮ ﯾﺴﺘﺨﺪم ﻓﻲ ﺛﻨﺎﯾﺎه ﻣﻮﺿﻮع اﻟﻤﺆﺷﺮات ،أﻻ وھﻮ
اﻟﻤﺼﻔﻮﻓﺎت.
ﺍﳌﺼﻔﻮﻓﺎﺕ
اﻟﻤﺼﻔﻮﻓﺔ ﺗﺴﺘﺨﺪم ﻟﺘﺨﺰﯾﻦ ﻛﻤﯿﺔ ﻛﺒﯿﺮة ﻣﻦ اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺷﻲء ﺑﻌﺪ آﺧﺮ .أي أنّ اﻟﺒﯿﺎﻧﺎت
اﻟﺘﻲ ﺗﺨﺰﻧﮭﺎ ﺗﺘﻮزع ﻋﻠﻰ اﻟﺬاﻛﺮة ﺑﺸﻜﻞ ﻣﺘﺴﻠﺴﻞ ،ﻋﻨﻮاﻧﺎ ﺑﻌﺪ ﻋﻨﻮان.
139
اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺤﻤﻠﮭﺎ اﻟﻤﺼﻔﻮﻓﺔ ھﻲ ﻣﺘﻐﯿﺮات وﻟﻜﻦ ﯾﺠﺐ أن ﺗﻜﻮن ﻣﻦ ﻧﻮع واﺣﺪ ﻛـ int
ﻣﺜﻼ .ﻛﺬﻟﻚ ﻛﻞ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﻮاﺣﺪة ﯾﻜﻮن ﻟﮭﺎ اﺳﻤﺎ واﺣﺪا وﻟﻜﻦ ﯾﺘﻤﯿﺰ اﺳﻢ
ﻋﻦ اﺳﻢ ﺑﻤﺎ ﯾﺴﻤﻰ ﺑﺎﻟﻔﮭﺮس أو اﻟﺪﻟﯿﻞ .وﻛﻤﺎ ﺳﻨﻀﺮب ﻟﺬﻟﻚ ﻣﺜﺎﻻ ﻓﻲ اﻟﻔﻘﺮة اﻟﺘﺎﻟﯿﺔ.
140
ﺍﻷﺭﻗﺎﻡ ﺍﻟﺴﻔﻠﻴﺔ
اﻧﻈﺮ اﻟﻰ اﻟﺮﻣﻮز اﻟﺘﺎﻟﯿﺔ:
a0 a1 a2 a3 a4 a5
ﻓﻜﻠﮭﺎ ﺗﺤﻤﻞ اﻻﺳﻢ aﻟﻜﻦ ﺗﺨﺘﻠﻒ ﻋﻨﮭﺎ ،ﺑﺄنّ ﻛﻞ رﻣﺰ ﻣﻨﮭﺎ ﺗﺤﺘﮫ رﻗﻢ ﺳﻔﻠﻲ ﺻﻐﯿﺮ .ھﺬه
اﻻرﻗﺎم اﻟﺴﻔﻠﯿﺔ ،ھﻲ أرﻗﺎم اﻟﻔﮭﺮﺳﺔ واﻟﺘﻲ ﺗﺴﻤﻰ ﺑﺎﻟﺪﻟﯿﻞ.
ھﺬا ھﻮ ﺗﺮﻗﯿﻢ اﻟﻔﮭﺮﺳﺔ ﺑﺼﻮرة ﻋﺎﻣﺔ ،أﻣﺎ ﻓﻲ ﻋﺎﺋﻠﺔ cوﻓﻲ ﻣﻮﺿﻮع اﻟﻤﺼﻔﻮﻓﺔ ،ﻓﺈﻧﮭﺎ ﺗﻀﻊ
رﻗﻢ اﻟﻔﮭﺮﺳﺔ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ ] [ ﻓﺘﻜﻮن أﺳﻤﺎء اﻟﻌﻨﺎﺻﺮ:
]ray[0], ray[1], ray[2], ray[3], ray[4
141
وﻣﺮة أﺧﺮى ﻧﺬﻛﺮ :ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺒﺪأ ﺑﺄرﻗﺎم ﻓﮭﺮﺳﺔ ﻣﻦ اﻟﺼﻔﺮ وﻟﯿﺲ ﻣﻦ اﻟﻮاﺣﺪ .ھﺬا
ﻓﻲ ﻟﻐﺎت . c
ﺣﺠﻢ ﺍﳌﺼﻔﻮﻓﺔ
ﺣﺠﻢ اﻟﻤﺼﻔﻮﻓﺔ ھﻮ ﻋﺪد ﻋﻨﺎﺻﺮھﺎ .ﻓﻜﻠﻤﺎ زاد ﻋﺪد اﻟﻌﻨﺎﺻﺮ ﻛﺒﺮ ﺣﺠﻤﮭﺎ وﺷﻐﻠﺖ ﻣﻜﺎﻧﺎ أﻛﺒﺮ
ﻓﻲ اﻟﺬاﻛﺮة .ﻟﺬﻟﻚ ﯾﺠﺐ أن ﻧﺬﻛﺮ ﻋﺪد ﻋﻨﺎﺻﺮ ﺑﻘﺪر ﺣﺎﺟﺘﻨﺎ ﺣﺘﻰ ﻻ ﻧﺴﺘﮭﻠﻚ اﻟﻜﺜﯿﺮ ﻣﻦ
اﻟﺬاﻛﺮة.
ﺍﻹﻋﻼﻥ ﻋﻦ ﻣﺼﻔﻮﻓﺔ
اﻻﻋﻼن ﻋﻦ ﻣﺼﻔﻮﻓﺔ ،ﯾﻌﻨﻲ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ﻹﻋﻼم اﻟﻤﺘﺮﺟﻢ ﺑﺬﻟﻚ .وﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ
ﻣﺼﻔﻮﻓﺔ ،ﯾﺠﺐ ذﻛﺮ ﻧﻮع ﺑﯿﺎﻧﺎﺗﮭﺎ ﺛﻢ اﺳﻤﮭﺎ وﻣﻦ ﺛﻢ ﻋﺪد ﻋﻨﺎﺻﺮھﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ.
142
ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ
ﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ ،ﻧﺬﻛﺮ ﻧﻮﻋﮭﺎ ﺛﻢ اﺳﻤﮭﺎ ،ﺛﻢ ﻗﻮﺳﯿﻦ ﻛﺒﯿﺮﯾﻦ ﺑﯿﻨﮭﻤﺎ ﻋﺪد اﻟﻌﺎﺻﺮ ،وﺑﻌﺪ
ذﻟﻚ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ .وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ اﻟﺬي ﯾﺼﺮح ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﻣﻦ اﻟﻨﻮع intوﺑﺎﺳﻢ
masfوﻣﻦ ﺧﻤﺴﺔ ﻋﻨﺎﺻﺮ:
;] int masf[ 5
ﺑﻌﺪ اﻟﺘﺼﺮﯾﺢ ﻋﻦ ﺗﻠﻚ اﻟﻤﺼﻔﻮﻓﺔ ﺳﺘﻜﻮن ﻟﺪﯾﻨﺎ ﺧﻤﺴﺔ ﻣﺘﻐﯿﺮات ـ ھﻲ ﻋﻨﺎﺻﺮھﺎ ـ وﺑﺎﻟﺸﻜﻞ
اﻟﺘﺎﻟﻲ:
Masf0 Masf1 Masf2 Masf3 Masf4
ﯾﻤﻜﻦ أن ﯾﻜﻮن رﻗﻢ اﻟﻔﮭﺮﺳﺔ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﯿﺮ ﻣﺜﻞ xأو ﻏﯿﺮ ذﻟﻚ؛ وﺑﺎﻟﺘﺎﻟﻲ اذا ﺟﻌﻠﻨﺎ ھﺬا
اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﺣﻠﻘﺔ؛ ﻋﻨﺪھﺎ ﯾﻤﻜﻨﻨﺎ اﻟﻮﺻﻮل اﻟﻰ ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﻟﻌﻤﻞ ﺷﻲء ﻣﺎ ﻓﯿﮭﺎ.
143
ﻃﺮﻳﻘﺔ ﺃﺧﺮﻯ ﻟﻠﺘﺼﺮﻳﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ
ﻓﻲ ھﺬه اﻟﻄﺮﯾﻘﺔ ﯾﻤﻜﻦ أن ﻧﺤﺪد ﺟﻤﯿﻊ ﻗﯿﻢ اﻟﻌﻨﺎﺻﺮ ﺑﺪاﯾﺔ ﺑﺄن ﻧﺬﻛﺮھﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﻌﻘﻮﻓﯿﻦ،
وﻋﻠﻰ ذﻟﻚ ،ﻓﻼ داﻋﻲ ھﻨﺎ ﻟﺬﻛﺮ اﻟﻌﺪد ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ اﻟﻤﺮﺑﻌﯿﻦ وﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل:
وﺳﻮاء ﻓﻲ ھﺬه اﻟﻄﺮﯾﻘﺔ أم ﺗﻠﻚ ،ﯾﻤﻜﻨﻨﺎ ﺑﻌﺪ ذﻟﻚ أن ﻧﺴﻨﺪ أي ﻋﻨﺼﺮ اﻟﻰ ﻣﺘﻐﯿﺮ آﺧﺮ ﻛﻤﺎ ﻓﻲ
ھﺬا اﻟﻤﺜﺎل اﻟﺬي ﯾﺠﻌﻞ ﻣﺘﻐﯿﺮ اﺳﻤﮫ kﯾﺄﺧﺬ ﻗﯿﻤﺔ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻟﺚ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ:
;]k = Masf[2
ﻣﺜﺎل ﻟﻤﺼﻔﻮﻓﺔ
ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ،ﺳﻨﺠﻌﻞ رﻗﻢ اﻟﻔﮭﺮﺳﺔ ﻓﻲ ﻣﺘﻐﯿﺮ ﺣﻠﻘﺔ ﻟﻜﻲ ﺗﺪور اﻟﺤﻠﻘﺔ ﻋﻠﻰ ﻛﻞ ﻋﻨﺎﺻﺮ
اﻟﻤﺼﻔﻮﻓﺔ:
>#include <iostream
;using namespace std
{ )(int main
;int i
;}double scores[5] = {0.5, 1.5, 2.5, 3.5, 4.5
144
" << ]cout << scores[i ;"
}
;return 0
}
ﺍﳌﺼﻔﻮﻓﺔ ﻫﻲ ﻣﺆﺷﺮ!
ﻋﺮﻓﺖ ﻛﯿﻒ ﺗﺼﺮح ﻋﻦ ﻣﺆﺷﺮ .وﻋﺮﻓﺖ أنّ اﻟﻤﺆﺷﺮ ھﻮ ﻣﺘﻐﯿﺮ ﯾﺨﺰن ﻋﻨﻮان .ﻟﻜﻦ ﻟﯿﺲ
اﻟﻤﺆﺷﺮ وﺣﺪه ﯾﺸﯿﺮ اﻟﻰ ﻋﻨﻮان؛ ﺑﻞ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺘﻲ ﺗﻌﻠﻦ ﻋﻨﮭﺎ ،ھﻲ ﻛﺬﻟﻚ وﻓﻲ ﻧﻔﺲ
اﻟﻮﻗﺖ ﺳﺘﺸﯿﺮ اﻟﻰ ﻋﻨﻮان أول ﻋﻨﺼﺮ ﻓﯿﮭﺎ.
ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ،اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ Masfھﻮ ﻣﺆﺷﺮ إﻟﻰ اﻟﻌﻨﺼﺮ ]Masf[0
ﻏﯿﺮ أنّ اﻟﻔﺮق ﺑﯿﻦ اﻟﻤﺆﺷﺮات اﻟﺘﻲ درﺳﺘﮭﺎ ﺳﺎﺑﻘﺎ وﺑﯿﻦ ﻣﺆﺷﺮ اﻟﻤﺼﻔﻮﻓﺔ ،ھﻮ أنّ اﻟﻤﺆﺷﺮات
ﯾﻤﻜﻦ ﺑﻌﺪ إﺳﻨﺎد ﻋﻨﻮان ﻟﮭﺎ ،أن ﻧﻘﻮم ﺑﺘﻐﯿﯿﺮھﺎ ﻟﺘﺸﯿﺮ اﻟﻰ ﻋﻨﻮان آﺧﺮ .أﻣﺎ اﻟﻤﺼﻔﻮﻓﺔ ،ﻓﮭﻲ
ﻣﺆﺷﺮ ﺛﺎﺑﺖ ﻻ ﯾﻤﻜﻦ ﺗﻐﯿﯿﺮه ﻟﯿﺸﯿﺮ اﻟﻰ ﻋﻨﻮان آﺧﺮ ،ﺑﻞ ھﻮ ﺛﺎﺑﺖ دوﻣﺎ ﯾﺸﯿﺮ اﻟﻰ أول ﻋﻨﺼﺮ
ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ.
ﻓﻤﻊ ﻣﺘﻐﻲ اﺳﻤﮫ pﯾﻤﻜﻦ أن ﺗﻜﺘﺐ p = p + 1ﻟﯿﺸﯿﺮ اﻟﻰ ﻋﻨﻮان ﺗﺎ ٍل .ﻟﻜﻨﻚ ﻻ ﺗﺴﺘﻄﯿﻊ
وﻣﻦ اﻟﺨﻄﺄ أن ﺗﻜﺘﺐ Masf = masf + 1 ذﻟﻚ ﻣﺜﻼ ﻣﻊ Masf
ﻋﻠﻰ ذﻟﻚ وﺑﻌﺪ أن ﺗﺼﺮح ﻋﻠﻰ أنّ pھﻮ ﻣﺆﺷﺮ ،ﺗﺴﺘﻄﯿﻊ أن ﺗﻜﺘﺐp = masf; :
ﺑﻌﺪ ذﻟﻚ ﺗﻀﻊ ﻓﻲ اﻟﻌﻨﺼﺮ اﻷول ﻗﯿﻤﺔ ﻛـ 5ﻣﺜﻼ ،وذﻟﻚ ﺑﺄن ﺗﻜﺘﺐ*p = 5; :
ﺑﻌﺪھﺎ ﺗﻨﺘﻘﻞ اﻟﻰ ﻋﻨﻮان اﻟﻌﻨﺼﺮ اﻟﺘﺎﻟﻲ ھﻜﺬاp = p + 1; :
وﻋﻨﺪھﺎ ﺗﺴﺘﻄﯿﻊ أن ﺗﻀﻊ ﻓﯿﮫ ﻗﯿﻤﺔ ﻛـ 7ﻣﺜﻼ*p = 7; :
ﯾﻤﻜﻦ ﻛﺬﻟﻚ أن ﺗﻨﺘﻘﻞ اﻟﻰ ﻋﻨﻮان ﻋﻨﺼﺮ آﺧﺮ ﺑﻄﺮﯾﻘﺔ ﻋﺎﻣﻞ اﻟﻌﻨﻮان ـ اﻟﺘﻲ ﺗﺘﺬﻛﺮھﺎ ـ:
;]p = & masf[2
145
;*p = 10 ﺛﻢ ﺗﺴﻨﺪ ﻗﯿﻤﺔ 10ﻟﮫ:
ﯾﻤﻜﻦ أن ﺗﻨﺘﻘﻞ اﻟﻰ اﻟﻌﻨﻮان اﻟﺘﺎﻟﻲ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ أﯾﻀﺎp = masf + 3; :
;*p = 2 ﺛﻢ ﺗﻀﻊ ﻗﯿﻤﺔ 2ﻓﯿﮫ:
وﻧﺬﻛﺮ ﻓﻨﻘﻮل :ﯾﻤﻜﻦ أن ﺗﻔﮭﻢ اﻟﻤﺆﺷﺮ pﻛﻤﺎ ﯾﻠﻲ:
اﻗﺮأ pﻓﻘﻠﮭﺎ :أﻧﺎ أﺣﻤﻞ ﻋﻨﻮان ﻛﺬا.
اﻗﺮأ *pﻓﻘﻠﮭﺎ :أﻧﺎ ﺳﺄﺟﻌﻞ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ اﻟﻌﻨﻮان اﻟﺬي أﺣﻤﻠﮫ.
ﺍﳌﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺪﻭﺍﻝ
وﺟﻮد اﻟﻤﺼﻔﻮﻓﺎت واﻟﺪوال ،ﯾﻐﻨﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻛﺜﯿﺮا ،ﻷنّ اﻟﻤﺼﻔﻮﻓﺎت ﺗﻤﺪھﺎ ﺑﺬﺧﯿﺮة
ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة ،واﻟﺪوال ﺗﻤﺪھﺎ ﺑﻌﻤﻠﯿﺎت ﺷﺘﻰ ﯾﻤﻜﻦ أن ﺗﺠﺮى ﻋﻠﻰ ﺗﻠﻚ اﻟﺒﯿﺎﻧﺎت.
ﻋﺮﻓﻨﺎ ﻛﯿﻒ ﻧﺠﻌﻞ وﺳﯿﻂ اﻟﺪاﻟﺔ ﯾﺄﺧﺬ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ آﺧﺮ؛ ﻓﮭﻞ ﯾﻤﻜﻦ ﻟﻠﻮﺳﯿﻂ أن ﯾﺄﺧﺬ ﻗﯿﻤﺘﮫ ﻣﻦ
ﻣﺼﻔﻮﻓﺔ؟ .ھﺬا ﻣﺎ ﺳﻨﺘﻨﺎوﻟﮫ ﻓﻲ اﻟﻔﻘﺮة اﻟﺘﺎﻟﯿﺔ.
146
ﻓـ yھﻨﺎ ھﻮ اﻟﻮﺳﯿﻂ .ﻓﻠﺠﻌﻞ yوﺳﯿﻂ ﻛﻤﺼﻔﻮﻓﺔ ،ﻣﺎ ﻋﻠﯿﻨﺎ إﻻ أن ﻧﻜﺘﺐ ﺑﺪل اﻟﺘﺼﺮﯾﺢ
اﻟﺴﺎﺑﻖ ،ھﺬا اﻟﺘﺼﺮﯾﺢ:
) ][int cube( int y
>#include <iostream
;using namespace std
{ )(int main
;}int i []= {2, 10, 5
;) cube ( i,3
;return 0
}
147
وﻛﻤﺎ ذﻛﺮﻧﺎ ،ﻓﺬﻛﺮ اﻟﺘﺮوﯾﺴﺔ أﻓﻀﻞ ،ﻟﯿﻜﻮن اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻛﺎﻟﺘﺎﻟﻲ:
>#include <iostream
;using namespace std
{ )(int main
;}int i []= {2, 10, 5
;) cube ( i,3
;return 0
}
ﻓﺎﻟﻤﺼﻔﻮﻓﺔ ﺗﻠﻚ ﺗﺘﻜﻮن ﻣﻦ ﺧﻤﺴﺔ أﻋﻤﺪة ﻋﻠﻰ ﺳﻄﺮ واﺣﺪ؛ ﻓﻤﺎذا إن ﻛﺎﻧﺖ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺮﺳﻢ
ﻛﮭﺬا اﻟﺠﺪول:
148
msf0,0 msf0,1 msf0,2 msf0,3
msf1,0 msf1,1 msf1,2 msf1,3
msf2,0 msf2,1 msf2,2 msf2,3
اﻟﻤﺼﻔﻮﻓﺔ ھﻨﺎ ﺗﺘﻜﻮن ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺑﻌﺪ .ھﺬه اﻟﻤﺼﻔﻮﻓﺔ ،ﻣﻦ أرﺑﻌﺔ أﻋﻤﺪة ﺑﺜﻼﺛﺔ ﺻﻔﻮف،
ﺑﯿﻨﻤﺎ ﻛﺎﻧﺖ اﻷوﻟﻰ ﺑﺼﻒ واﺣﺪ.
ﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﺑﺄﻛﺜﺮ ﻣﻦ ﺑﻌﺪ ،ﻧﺤﺘﺎج اﻟﻰ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ ﺑﻌﺪ اﻻﺳﻢ ،ﻟﯿﺤﻤﻞ ﻛﻞ
ﻣﺮﺑﻊ ﻋﺪد ﻋﻨﺎﺻﺮه وﻛﻤﺎ ﻓﻲ اﻟﺘﺼﺮﯾﺢ اﻟﺘﺎﻟﻲ ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﺑﺒﻌﺪﯾﻦ:
;]int i [3][5
اﻟﻤﺮﺑﻊ اﻷول ﯾﻤﺜﻞ ﻋﺪد اﻟﺼﻔﻮف ،واﻟﺜﺎﻧﻲ ﻟﻌﺪد اﻷﻋﻤﺪة.
ﻟﻠﻮﺻﻮل اﻟﻰ ﻋﻨﺼﺮ ،ﻧﺬﻛﺮ أﻻ رﻗﻢ ﺻﻔﮫ ـ أي ﺳﻄﺮه ـ ﺛﻢ رﻗﻢ ﻋﻤﻮده ﻛﺎﻟﺘﺎﻟﻲ:
149
ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻨﺼﻴﺔ
أﺟﻠﻨﺎ اﻟﺤﺪﯾﺚ ﻋﻦ اﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ﻟﻜﻮﻧﮭﺎ ﺗﺮﺗﺒﻂ ﺑﺎﻟﻤﺼﻔﻮﻓﺎت ﻣﻦ ﺟﮭﺔ ،وﺑﺎﻟﻤﺆﺷﺮات ﻣﻦ
ﺟﮭﺔ أﺧﺮى.
ﻓﻠﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺘﻐﯿﺮ ﻧﺼﻲ ﻣﻦ ﻧﻮع charﻓﮭﻮ ﯾﺘﻄﻠﺐ ﺗﺼﺮﯾﺤﺎ ﺑﮭﺬا اﻟﺸﻜﻞ:
ﻣﺼﻔﻮﻓﺎﺕ char
وھﻲ ﻣﺼﻔﻮﻓﺎت ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﺼﻮص ،وﯾﻜﻮن ﺷﻜﻠﮭﺎ ﻛﺎﻟﺘﺎﻟﻲ:
وﻟﻜﻲ ﻧﺴﺘﺨﺪم أﺣﺪ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ،ﻧﺬﻛﺮ اﺳﻤﮭﺎ ﻣﻦ دون * ﺛﻢ رﻗﻢ اﻟﺪﻟﯿﻞ:
ا ذن ﻓﺎﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ھﻨﺎ ،إﻣﺎ أن ﺗﻜﻮن ﺑﺼﯿﻐﺔ ﻣﺆﺷﺮ ،وإﻣﺎ أن ﺗﻜﻮن ﺑﺼﯿﻐﺔ ﻣﺼﻔﻮﻓﺔ.
150
إﻟﯿﻚ ﺻﯿﻐﺘﺎن ﯾﻌﺒﺮان ﻋﻦ ﻣﺘﻐﯿﺮ ﻧﺼﻲ واﺣﺪ:
اﻟﻌﺒﺎرﺗﺎن أﻋﻼه ،ﻣﺘﻜﺎﻓﺌﺘﺎن ،وﻟﻜﻦ ﯾﻤﻜﻦ ﻟـ pأن ﯾﺆﺷﺮ اﻟﻰ ﺷﻲء آﺧﺮ ،ﺑﯿﻨﻤﺎ ﻻﯾﻤﻜﻦ ﻟـ sأن
ﯾﺸﯿﺮ اﻟﻰ ﺷﻲء آﺧﺮ ﻷﻧﮫ ﻣﺆﺷﺮ ﻣﺼﻔﻮﻓﺔ ﺛﺎﺑﺖ.
ﻓﻲ اﻟﺼﯿﻐﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ ،ﺗﺤﺠﺰ c++ﻣﺎﯾﻜﻔﻲ ﻟﻄﻮل اﻟﻜﻠﻤﺔ إﺿﺎﻓﺔ اﻟﻰ ﺣﺮف آﺧﺮ ﯾﺪل
ﻋﻠﻰ ﻧﮭﺎﯾﺔ اﻟﻜﻠﻤﺔ ،ﻓﻠﻌﻠﻚ ﺗﻔﻜﺮ ـ ﻣﺜﻼ ـ ﻓﻲ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺎﺳﺘﺒﺪال اﻟﻜﻠﻤﺎت .ﻋﻠﯿﻚ اذن
أن ﺗﺤﺠﺰ اﻟﻄﻮل اﻟﻜﺎﻓﻲ ﻣﺎﺑﯿﻦ اﻟﻤﺮﺑﻌﯿﻦ ] [.
;]char s[80
;)"strcpy(s,"One
151
;)"strcpy(s,"Tow
;)"strcpy(s,"Three
;cout << s
وﻛﻤﺎ ﺗﺮى ،ﻓﻘﺪ أﻋﻄﻲ اﻟﻤﺘﻐﯿﺮ sﻣﺎ ﯾﻜﻔﻲ ﻟﯿﺘﺴﻊ ﻟﻠﻜﻠﻤﺎت اﻟﺜﻼث.
;string a, b, c
ﻣﻊ ھﺬا اﻟﻨﻮع ،ﻻ ﺗﻔﻜﺮ ﺑﺎﻟﺤﺠﻢ اﻟﻼزم ﻟﻜﻞ ﻧﺺ ،ﻷنّ اﻟﻤﺘﺮﺟﻢ ﺳﯿﺘﻮﻟﻰ ذﻟﻚ.
اﻟﻨﻮع stringھﻮ ﻓﺼﯿﻠﺔ ﺟﺪﯾﺪة ﻓﻲ C++واﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﺗﺼﺮح ﻣﻨﮫ ،ھﻲ ﻛﺎﺋﻨﺎت ﻣﻦ
ﺗﻠﻚ اﻟﻔﺼﯿﻠﺔ .وأﺑﺴﻂ ﺷﻲء ﻓﻲ ﺗﻌﺮﯾﻒ اﻟﻔﺼﯿﻠﺔ ،ھﻲ أن ﻧﻘﻮل :إﻧﮭﺎ ﻧﻤﻂ ﺑﯿﺎﻧﺎت .أو أنّ
اﻟﻔﺼﯿﻠﺔ ،ھﻲ ﻧﻮع ﻣﻦ أﻧﻮاع ﺑﻨﺎء اﻷﻧﻤﺎط .أو ﺑﺸﻜﻞ آﺧﺮ :ھﻲ طﺮﯾﻘﺔ ﻣﻦ طﺮق ﺑﻨﺎء
اﻷﻧﻤﺎط.
152
أو ﺑﺎﻟﻄﺮﯾﻘﺔ اﻟﻜﺎﺋﻨﯿﺔ:
;)"string a("Here is a string"),( "Here is another
ﯾﻤﻜﻦ اﻟﻮﺻﻮل اﻟﻰ أي ﺣﺮف ﻣﻦ ﻧﺼﻮص اﻟﻨﻮع stringﺗﻤﺎﻣﺎ ﻛﻤﺎ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺼﻔﻮﻓﺔ
اﻟﺤﺮوف .ﻓﯿﻤﻜﻦ أن ﺗﻄﺒﻊ اﻟﺤﺮف اﻟﺜﺎﻟﺚ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ:
;string a
;"a = "Here is a string
;]cout << a[2
ﻟﻠﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ stringدواﻟﮭﺎ اﻟﺨﺎﺻﺔ اﻟﺘﻲ ﺗﺄﺗﻲ ﺑﻌﺪ اﺳﻢ اﻟﻜﺎﺋﻦ ﻓﻨﻘﻄﺔ ﺑﯿﻨﮭﻤﺎ .ﻓﻔﻲ
ﻣﺜﺎﻟﻨﺎ ﻋﻦ اﻟﻜﺎﺋﻦ ، aﯾﻤﻜﻦ اﺳﺘﺪﻋﺎء أي داﻟﺔ ﺗﺎﺑﻌﺔ ﻟﮫ ،ﺑﮭﺬا اﻟﺸﻜﻞ:
a.function
ﺗﺴﻤﻰ اﻟﺪوال اﻟﺘﻲ ﺗﺴﺘﺪﻋﻰ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ ،ﺑﺎﻟﺪوال اﻷﻋﻀﺎء .أو اﻟﺪوال اﻟﺘﺎﺑﻌﺔ.
إذن ﺷﻜﻞ ﻟﻨﺎ اﻟﻨﻮع stringﻣﺪﺧﻼ ﺟﻤﯿﻼ وﻣﺒﺴﻄﺎ ﻟﻤﻮﺿﻮع اﻟﻔﺼﺎﺋﻞ واﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ،
وﺳﻘﻨﺎه ﻟﯿﻜﻮن ﻣﻘﺪﻣﺔ أوﻟﯿﺔ ﻟﻨﺎ ﻋﻦ ذﻟﻚ اﻟﻤﻮﺿﻮع.
153
.................
ﻣﺎ ﺳﻮى ﻣﺎ ذﻛﺮﻧﺎ أﻧﮫ ﯾﻨﺘﻤﻲ اﻟﻰ اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ ،ﻓﻜﻞ اﻟﺬي ﺟﺌﻨﺎ إﻟﯿﮫ ﯾُﺼﻄﻠﺢ ﻋﻠﯿﮫ ﺑﻤﺎ
ﯾﺴﻤﻰ ﺑﺎﻟﺒﺮﻣﺠﺔ اﻟﻤﮭﯿﻜﻠﺔ .ﺣﯿﺚ ﯾﻜﻮن ﻛﻞ ﺷﻲء ﻣﻌﻠﻮم ﻟﺪى اﻟﻤﺘﺮﺟﻢ ،وﺣﯿﺚ ﯾﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ
ﻣﻘﺴﻤﺎ اﻟﻰ ﻋﺪة أﺟﺰاء وﻛﺘﻞ ﻟﯿﺆدي ﻛﻞ ﺟﺰء ﻋﻤﻠﯿﺔ ﻣﺎ .ﺳﻨﻨﺘﻘﻞ ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ إﻟﻰ اﻟﺒﺮﻣﺠﺔ
اﻟﻜﺎﺋﻨﯿﺔ اﻟﺤﺪﯾﺜﺔ أو ﺑﺮﻣﺠﺔ اﻷﻏﺮاض.
.....................
ﺍﳌﺆﺷﺮ new
ﻛﻤﺎ أنّ اﻟﻌﺎﻣﻞ * ﯾُﻌَﺪ ﻋﺎﻣﻞ ﻣﺆﺷﺮ اذا ﺟﺎء ﻓﻲ ﺳﯿﺎق ﻣﺎ ﻓﯿﺠﻌﻞ ﻣﺘﻐﯿﺮه اﻟﻤﻨﺘﻤﻲ إﻟﯿﮫ ﯾﺸﯿﺮ
اﻟﻰ ﺷﻲء ﻣﺎ ،ﻛﺬﻟﻚ اﻟﻌﺎﻣﻞ newﯾُﻌﺪ ﻣﺆﺷﺮ ﯾﮭﯿﺊ ﻣﺘﻐﯿﺮه اﻟﻤﻨﺘﻤﻲ إﻟﯿﮫ ﻟﯿﺸﯿﺮ إﻟﻰ ﺑﺪاﯾﺔ
اﻟﻤﻨﻄﻘﺔ اﻟﺘﻲ ﯾﺤﺠﺰھﺎ ﻣﻦ اﻟﺬاﻛﺮة ،ﻓﮭﻮ ﯾﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻌﻨﺎوﯾﻦ وﻣﻦ أﻧﻤﺎط ﻣﺨﺘﻠﻔﺔ.
154
ﯾﻤﻜﻦ أن ﯾﺤﺠﺰ اﻟﻌﺎﻣﻞ newﻣﺎ ﯾﻜﻔﻲ ﻟﻌﻨﺼﺮا واﺣﺪ ،اذا ﻟﻢ ﯾﺬﻛﺮ ﻣﻌﮫ ﻋﺪد ،وإﻻ ﻓﯿﻤﻜﻦ ذﻟﻚ
ﺑﻮﺿﻊ اﻟﻌﺪد ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ وﻛﻤﺎ ﺳﯿﺄﺗﻲ ﻣﻦ أﻣﺜﻠﺔ.
اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﯾﻨﺸﺊ وﯾﺤﺠﺰ ﻟﻌﺪد ﺻﺤﯿﺢ ،ﺛﻢ ﻣﻌﺎﻟﺠﺔ اﻟﻌﺪد ﺑﻮاﺳﻄﺔ اﻟﻤﺆﺷﺮ اﻟﻤﻨﺸﺄ ،ﺛﻢ
ﺗﺤﺮﯾﺮ اﻟﺬاﻛﺮة اﻟﺘﻲ ﻛﺎن ﯾﺸﻐﻠﮭﺎ ذﻟﻚ اﻟﻌﺪد:
155
;int *p = new int
;*p = 5
;*p = *p + 3
;cout << "The value of the integer is" << *p
;delete p
ھﻨﺎك أﯾﻀﺎ أﺧﻄﺎء ﺗﻘﻊ ﻓﻲ وﻗﺖ اﻟﺘﻨﻔﯿﺬ وﯾﻌﺠﺰ ﻣﻌﺎﻟﺞ اﻟﺤﺎﺳﺐ ﻋﻦ ﻋﻼﺟﮭﺎ ﻓﯿﺘﻮﻗﻒ أو
ﯾﺮﺳﻞ إﺷﺎرة ﺧﻄﺄ .ھﻲ ﻟﯿﺴﺖ أﺧﻄﺎء اﻣﻼﺋﯿﺔ ،وﻻ أﺧﻄﺎء ﻓﻲ ﺻﯿﻐﺔ ﺣﺴﺎﺑﯿﺔ أو ﺗﻌﺒﯿﺮﯾﺔ ﻣﻦ
اﻟﻨﻮع اﻟﺜﺎﻧﻲ اﻟﺬي ﺿﺮﺑﻨﺎ ﻣﺜﻼ ﻋﻨﮫ .ﺑﻞ ھﻲ أﺧﻄﺎء ﺗﻌﺠﺰ اﻵﻟﺔ اﻻﻟﻜﺘﺮوﻧﯿﺔ اﻟﻤﻨﻄﻘﯿﺔ ﻋﻦ
ﺗﺤﻘﯿﻘﮭﺎ.
ﻣﻦ ذﻟﻚ ﻣﺜﻼ ،أﻧﻚ ﺗﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﻋﺪدا ﻟﯿﻀﯿﻔﮫ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻰ ﻋﺪد آﺧﺮ .ﻓﺘﺬھﺐ ﯾﺪ
اﻟﻤﺴﺘﺨﺪم اﻟﻰ ﺣﺮف ھﺠﺎﺋﻲ ﺑﺪل اﻟﺮﻗﻢ .ھﺬه ﻋﻤﻠﯿﺔ ﻏﯿﺮ ﺻﺤﯿﺤﺔ ﻋﻠﻰ ﻣﺴﺘﻮى اﻵﻟﺔ ﻓﺘﺘﻮﻗﻒ
أو ﺗﺮﺳﻞ إﺷﺎرة ﺗﻨﺒﯿﮫ أو ﻏﯿﺮ ذﻟﻚ .ھﺬا اﻟﻨﻮع اﻟﺜﺎﻟﺚ ﻣﻦ اﻷﺧﻄﺎء ،ﯾﺴﻤﻰ ﺑﺎﻻﺳﺘﺜﻨﺎءات .ﻓﻔﻲ
156
ﻣﺜﻠﻨﺎ ھﺬا ﯾﺠﺐ أن ﺗﺴﺘﺜﻨﻰ اﻟﺤﺮوف ﻣﻦ اﻻﺳﺘﻌﻤﺎل .ﻓﻲ ﺑﺮﻧﺎﻣﺞ آﺧﺮ ﯾﺴﺘﺜﻨﻰ اﻟﺼﻔﺮ ـ ﻣﺜﻼ ـ
أذا ﺟﺎء ﻓﻲ ﻣﻘﺎم ﻛﺴﺮ ،ﻷﻧﮫ ﻻﯾﺠﻮز اﻟﻘﺴﻤﺔ ﻋﻠﻰ ﺻﻔﺮ.
ھﺬا اﻟﻨﻮع اﻟﺜﺎﻟﺚ ﻣﻦ اﻷﺧﻄﺎء ﺗﻌﺎﻟﺠﮫ ﺟﻤﻞ ﺗﺴﻤﻰ ،ﺟﻤﻞ اﻻﺳﺘﺜﻨﺎءات وھﻲ ﺗﺘﻜﻮن ﻣﻦ
ﻛﻠﻤﺘﯿﻦ ﻣﻔﺘﺎﺣﯿﺘﯿﻦ ﺟﺪﯾﺪﺗﯿﻦtry – catch ،
ﻟﻜﻦ ﻣﻊ ﺑﺮاﻣﺞ أﻛﺒﺮ ،ﻧﺮﯾﺪ ﻟﻠﺘﺴﻠﺴﻞ اﻟﻤﻨﻄﻘﻲ ﻟﻠﺒﺮﻧﺎﻣﺞ أن ﯾﺴﺘﻤﺮ دون ﻣﻘﺎطﻌﺘﮫ ﺑﺸﺮوط ﻣﺎ،
إﻧﻤﺎ ﻧﺮﯾﺪ أن ﻧﺴﺘﻤﺮ ﻓﻲ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺠﻨﺎ دون اﻻﻟﺘﻔﺎت ﺑﺼﻮرة ﻣﺮﻛﺰة اﻟﻰ ﻣﺎ ﯾﻤﻜﻦ أن ﯾﺤﺪث
ﻣﻦ أﺧﻄﺎء .ﻧﺮﯾﺪ أن ﻧﻜﺘﺐ ﺑﺮﻧﺎﻣﺠﻨﺎ ﻓﻲ ﻣﻘﻄﻊ ﻣﻌﯿﻦ ﻣﻦ اﻟﺒﺮﻣﺠﺔ ،ﺑﺤﯿﺚ أنّ ھﺬا اﻟﻤﻘﻄﻊ ھﻮ
اﻟﺬي ﯾﻠﺘﻔﺖ اﻟﻰ ﺗﻌﻘﺐ اﻷﺧﻄﺎء اذا ﺣﺪﺛﺖ .ﻓﻠﺬﻟﻚ أُوﺟﺪت ﺟﻤﻠﺔ try – catch
ھﺬه اﻟﺠﻤﻠﺔ ﯾﻜﻮن ھﯿﻜﻠﮭﺎ ﻛﺎﻟﺘﺎﻟﻲ:
{ try
;statement
157
;statement
;statement
}
) catch ( type1 err
{
;statement
}
) catch ( type2 err
{
;statement
}
) catch ( type3 err
{
;statement
}
ﻓﯿﻜﻮن ھﻨﺎك ﺟﻤﻠﺔ tryواﺣﺪة ،وﻗﺪ ﯾﻜﻮن ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﺟﻤﻠﺔ catchﻟﺘﻌﺎﻟﺞ ﻛﻞ ﺟﻤﻠﺔ ﻣﻨﮭﺎ
ﻧﻮع ﻣﻌﯿﻦ ﻣﻦ اﻟﺨﻄﺄ.
ﻓﻲ ﺟﻤﻠﺔ ،tryﯾﻜﺘﺐ اﻟﻤﻘﻄﻊ اﻟﺬي ﯾﺘﻮﻗﻊ ﻓﯿﮫ ﺣﺪوث ﺧﻄﺄ .وﻓﻲ ﺟﻤﻠﺔ ،catchﺗﻜﺘﺐ ﺳﺒﻞ
ﻣﻌﺎﻟﺠﺔ ھﺬا اﻟﺨﻄﺄ أو إظﮭﺎر رﺳﺎﻟﺔ ﺗﺒﯿﻦ ﻧﻮع اﻟﺨﻄﺄ.
ﻓﺄﻧﺖ ﻟﺪﯾﻚ اﻟﻤﻘﻄﻊ اﻟﺘﺎﻟﻲ ﻣﺜﻼ:
;Int a, x, y
;a = 12
;Cin << y
;a = x/y
ﻓﺤﺪوث اﻟﺨﻄﺄ وارد ھﻨﺎ ،اذا أدﺧﻞ اﻟﻤﺴﺘﺨﺪم ﻗﯿﻤﺔ ﻟـ yﺗﺴﺎوي ﺻﻔﺮ ،أو اذا أدﺧﻞ ﺣﺮﻓﺎ.
158
{ try
}
وﺑﻌﺪ أن ﺗﻨﺘﮭﻲ ﻣﻨﮫ ﺑﺘﺴﻠﺴﻠﮫ اﻟﻄﺒﯿﻌﻲ ،ﺗﻠﺘﻔﺖ ﻋﻨﺪھﺎ إﻟﻰ ﻣﺎ ﯾﻤﻜﻦ أن ﯾﺤﺪث ﻣﻦ أﺧﻄﺎء
ﺗﻄﻠﻘﮭﺎ ﺟﻤﻠﺔ tryﻟﺘﺘﻠﻘﺎھﺎ ﺟﻤﻞ أﺧﺮى ﺗﻌﺎﻟﺠﮭﺎ ،وھﻲ ﺟﻤﻞ catchﻟﺘﻜﺘﺐ ھﻨﺎك ﺟﻤﻠﻚ
اﻟﻤﻌﺎﻟﺠﺔ أو رﺳﺎﺋﻞ ﺗﺸﯿﺮ إﻟﻰ اﻟﺨﻄﺄ.
اذن ،اذا ﺣﺪث ﺧﻄﺄ ،ﺳﯿﻨﻄﻠﻖ اﺳﺘﺜﻨﺎء ﻣﻦ ﺟﻤﻠﺔ tryﻟﯿﺒﺤﺚ ﻋﻦ ﺟﻤﻠﺔ catchﻣﻨﺎﺳﺒﺔ ﻟﻨﻮع
اﻟﺨﻄﺄ وﻧﻤﻄﮫ.
اﻻﺳﺘﺜﻨﺎء ﺳﯿﻄﻠﻖ وﻣﻌﮫ رزﻣﺔ ﻣﻌﻄﯿﺎت ﯾﻤﻜﻦ أن ﺗﺤﺪد ﻧﻤﻄﮫ ﻓﯿﺒﺤﺚ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻦ ﺟﻤﻠﺔ
catchﺗﻌﺎﻟﺞ ھﺬا اﻟﻨﻤﻂ .ﻟﺬﻟﻚ ﯾﺤﺪد ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ ،ﻣﺎ ﺑﻌﺪ ﻛﻠﻤﺔ catchﻧﻤﻂ ،ﯾﺴﺘﺪل ﻋﻠﯿﮫ
اﻟﺸﻲء اﻟﻤﻄﻠﻖ ﻓﯿﺪﺧﻞ اﻟﺘﻨﻔﯿﺬ اﻟﻰ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻜﺘﻮﺑﺔ ﻟﯿﻨﻔﺬھﺎ.
{ try
}
{ ) catch (string
;cout << "EXCEPTION RAISED! " << endl
;cout << err << endl
159
;return -1
}
{ ) catch (int
;cout << "EXCEPTION RAISED! " << endl
;cout << err << endl
;return -1
}
ھﻨﺎك ﻛﻠﻤﺔ ﻣﻔﺘﺎﺣﯿﺔ أﺧﺮى ـ اﺧﺘﯿﺎرﯾﺔ ـ ﻣﻊ ﺟﻤﻠﺔ try – catchوھﻲ ﻛﻠﻤﺔ throwواﻟﺘﻲ
ﻧﺴﺘﻄﯿﻊ ﺑﻮاﺳﻄﺘﮭﺎ أن ﻧﻄﻠﻖ اﺳﺘﺜﻨﺎءا ﺑﺄﻧﻔﺴﻨﺎ ﻋﻨﺪ اﻟﺘﺄﻛﺪ ﻣﻦ اﻟﻮﻗﻮع ﻓﻲ ﺧﻄﺊ ﻣﻌﯿﻦ.
ﻣﻌﻘﺒﯿﻦ إﯾﺎھﺎ ﺑﻮﺳﯿﻂ ﯾﺪل ﻋﻠﻰ ﻧﻤﻂ اﻟﺨﻄﺄ ﻟﺘﻠﺘﻘﻄﮫ ﺟﻤﻠﺔ catchﻣﻨﺎﺳﺒﺔ.
ﻓﻔﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ ،وارد ﺟﺪا أن ﯾﻜﻮن دﺧﻞ اﻟﻤﺴﺘﺨﺪم رﻗﻢ ) ،(0ﻓﻨﻜﺘﺐ ﻋﻨﺪھﺎ:
) if ( y == 0
;throw 1
) catch (intﻓـ ) (1ھﻮ ﻋﺪد ﻣﻦ اﻟﻨﻮع اﻟﺼﺤﯿﺢ ،ﻓﯿﺬھﺐ اﻟﺘﻨﻔﯿﺬ اﻟﻰ ﺟﻤﻠﺔ
ھﻨﺎك ﻛﻠﻤﺔ أﺧﺮى اﺧﺘﯿﺎرﯾﺔ أﯾﻀﺎ ،وھﻲ ﻛﻠﻤﺔ finallyاﻟﺘﻲ ﺗﺴﺘﻌﻤﻞ ﻓﻲ ﺣﺎل وﻗﻊ اﻟﺨﻄﺄ
وﻟﻜﻦ ﻻﺑﺪ ﻣﻦ ﺗﻨﻔﯿﺬ ﺟﻤﻠﺔ ﺗﻌﻠﯿﻤﺎت أﺧﯿﺮة ،أو ﻛﺮﺳﺎﻟﺔ اﻋﺘﺬار.
ﻻ ﻧﺮﯾﺪ أن ﻧﻄﯿﻞ ﻓﻲ ھﺬا ﻷﻧﮫ ﻣﻮﺿﻮع ﻣﺘﻘﺪم ،وﻷنّ اﻟﻤﺒﺘﺪئ واﻟﻤﺘﻮﺳﻂ ﻓﻲ ﻣﻀﻤﺎر
اﻟﺒﺮﻣﺠﺔ ،ﻗﻠﻤﺎ ﯾﺴﺘﺨﺪﻣﺎﻧﮫ وﺗﻜﻔﯿﮭﻤﺎ ﺟﻤﻞ اﻟﺸﺮط ﻟﻤﻌﺎﻟﺠﺔ ﻣﺜﻞ ﺗﻠﻚ اﻷﺧﻄﺎء ﻓﻲ ﺑﺮاﻣﺠﮭﻤﺎ
اﻟﺼﻐﯿﺮة .ﻟﻜﻦ ﻛﻜﻠﻤﺔ أﺧﯿﺮة ﻟﻤﻦ ﯾﺮﯾﺪ أن ﯾﻄﻠﻊ ﻓﻲ ﻛﺘﺐ ﻣﺘﻘﺪﻣﺔ ﻋﻦ ھﺬا اﻟﻤﻮﺿﻮع :ﻟﻘﺪ
وﺿﻌﺖ c++ﻛﺎﺋﻨﺎ ﻋﺎﻣﺎ ﻟﻼﺳﺘﺜﻨﺎء ھﻮ . exception :أي ﻛﺎﺋﻦ اﻻﺳﺘﺜﻨﺎء .واﺷﺘﻘﻮا ﻣﻨﮫ
ﻛﺎﺋﻨﺎت أﺧﺮى ،ﻛﻜﺎﺋﻦ )اﺳﺘﺜﻨﺎء اﻟﻘﺴﻤﺔ ﻋﻠﻰ ﺻﻔﺮ( وﻏﯿﺮه ﻟﯿﻮﺿﻊ ﻛﺎﺋﻦ ﻣﺎ ﻣﻨﺎﺳﺐ ﻓﻲ ﺟﻤﻠﺔ
catchوإﻻ ﻓﯿﻮﺿﻊ exceptionﻧﻔﺴﮫ ﻛﺎﺳﺘﺜﻨﺎء ﻋﺎم.
160
...........................
..................
Structures ﺍﻟﺴــﺠﻼﺕ
ﺍﻟﻜﻴﺎﻧﺎﺕ
ﺗﻘﺘﺮب ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ،ﻟﺘﺤﺎﻛﻲ اﻟﺤﯿﺎة اﻟﻄﺒﯿﻌﯿﺔ وﺗﺘﻨﺎﻏﻢ ﻣﻌﮭﺎ .ﺣﺘﻰ وﺻﻠﺖ اﻟﻰ اﻟﺒﺮﻣﺠﺔ
اﻟﺸﯿﺌﯿﺔ ـ اﻟﻜﺎﺋﻨﯿﺔ ـ ،ﺣﯿﺚ ﻛﻞ ﺷﻲء ﯾﺒﺪو ﻛﻜﺎﺋﻦ ﻟﮫ ﻋﺎﻟﻤﮫ اﻟﺨﺎص.
اﻟﻜﯿﺎن ـ أو اﻟﺴﺠﻞ ـ :ﺷﻲء وﻟﮫ ﻣﺠﻤﻮﻋﺔ ﺧﺼﺎﺋﺺ وﻣﻤﯿﺰات .ﻓﺎﻟﺸﺨﺺ ﻛﯿﺎن ﻟﮫ اﺳﻢ ،وﻟﮫ
ﻋﻨﻮان ،وﻟﮫ ﻋﻤﺮ وﻏﯿﺮ ذﻟﻚ .واﻟﻄﺎﻟﺐ ،ﻛﯿﺎن ﻟﮫ اﺳﻢ وﻟﮫ درﺟﺔ ﻓﻲ ﻣﻮﺿﻮع ﻣﻌﯿﻦ.
واﻟﻤﺪرﺳﺔ ،ﻛﯿﺎن ﻟﮫ ﻣﺪﯾﺮ وﻟﮫ أﺳﺘﺎذ ﺗﺪرﯾﺴﻲ ﻟﻜﻞ ﻣﺎدة .ھﺬا ،ﺑﺸﻜﻞ ﺣﯿﺎﺗﻲ ﻋﺎم .أﻣﺎ ﻓﻲ
161
اﻟﺒﺮﻣﺠﺔ ،ﻓﺎﻟﺴﺠﻞ ـ أو اﻟﻜﯿﺎن ـ ،ھﻮ ﺷﻲء ﻟﮫ ﻣﺠﻤﻮﻋﺔ ﻣﻌﻄﯿﺎت ﻣﺨﺘﻠﻔﺔ .ﻓﺴﺠﻞ أو ﻛﯿﺎن
اﻟﻄﺎﻟﺐ ،ﺳﯿﺤﻮي ،اﺳﻢ اﻟﻄﺎﻟﺐ وﻋﻨﻮاﻧﮫ ودرﺟﺎﺗﮫ ﻓﻲ ﻛﻞ ﻣﺎدة ،وﻏﯿﺮ ذﻟﻚ.
اﺳﻢ اﻟﻄﺎﻟﺐ ،ﯾﺤﺘﺎج اﻟﻰ ﺑﯿﺎﻧﺎت ﻣﻦ ﻧﻮع ﻧﺼﻲ ،ﺑﯿﻨﻤﺎ درﺟﺎﺗﮫ ﺗﺤﺘﺎج اﻟﻰ اﻟﻨﻮع أو اﻟﻨﻤﻂ
اﻟﻌﺪدي .ﻓﺎﻟﺴﺠﻞ ﯾﺤﻮي ﺑﯿﺎﻧﺎت ﻣﺨﺘﻠﻔﺔ ﻟﺸﻲء واﺣﺪ.
وﻓﯿﻤﺎ ﯾﻠﻲ ،ﻣﺜﺎل ﻋﻦ ﺳﺠﻞ طﺎﻟﺐ studentواﻟﺬي ﺳﯿﻀﻢ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ،اﻻﺳﻢ name
واﻟﺪرﺟﺔ : grade
{ Struct student
;Char name
;Int grade
;}
ﻓﻲ ھﺬا اﻟﻤﺜﺎل ،أﻧﺸﺄﻧﺎ ﺳﺠﻼ ﻋﺎﻣﺎ ﻟﯿﺲ ﻓﯿﮫ ﺷﻲء ،ﻟﯿﺲ ﻓﯿﮫ ﻣﺪﺧﻼت وﻛﺄﻧﻚ ﺧﻄﻄﺖ ﻋﻠﻰ
ﺻﺤﯿﻔﺔ ﻣﺜﻞ ھﺬا اﻟﺘﺨﻄﯿﻂ:
ﺳﺟل طﺎﻟب
اﻟدرﺟﺔ اﻻﺳم
162
ﻓﻲ اﻟﺼﺤﯿﻔﺔ أﻋﻼه ،ﺣﻘﻠﯿﻦ ،ﺣﻘﻞ ﻟﻼﺳﻢ ،وﺣﻘﻞ ﻟﻠﺪرﺟﺔ .وﻛﻼ اﻟﺤﻘﻠﯿﻦ ،ﺿﻤﻦ ﺳﺠﻞ طﺎﻟﺐ.
ﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺒﺮﻣﺠﻲ ،أﻋﻠﻨﺎ ﻋﻦ ﺳﺠﻞ ﺑﺎﻟﻜﻠﻤﺔ Struct :ﺛﻢ أﺗﺒﻌﻨﺎھﺎ ﺑﺎﻻﺳﻢ اﻟﻤﺮاد ﻟﯿﻜﻮن
ﻛﺴﺠﻞ ،وھﻮ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ،طﺎﻟﺐ . studentﺑﻌﺪ ذﻟﻚ ﻗﻮس ﻣﻌﻘﻮف ﯾﺤﻮي اﻟﺤﻘﻮل اﻟﻤﺮادة،
وھﻲ أﺳﻤﺎء ﺑﺎﻷﻧﻤﺎط اﻟﻤﺮادة ،ﺛﻢ ﻧﻐﻠﻖ اﻟﻘﻮس وﻓﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ .ﻓﺄﺻﺒﺢ ﻟﺪﯾﻨﺎ اﻵن ﺳﺠﻼ .ﺑﻞ
أﺻﺒﺢ ﻟﺪﯾﻨﺎ اﻵن ﻧﻤﻄﺎ ﺟﺪﯾﺪا ﻗﻤﻨﺎ ﺑﺼﻨﺎﻋﺘﮫ ﻧﺤﻦ .وﻧﺴﺘﻄﯿﻊ اﻵن اﻟﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺘﻐﯿﺮات ﻣﻦ
ﻧﻤﻄﻨﺎ ھﺬا.
ﺳﻨﻌﻄﻲ اﻻن ﻣﺜﺎﻻ ﻋﻦ ﻧﻤﻂ )ﺷﺨﺺ .(PERSON ،ﯾﻤﺘﻠﻚ ﺧﺼﺎﺋﺺ ﻣﺜﻞ :اﻟﻌﻤﺮ ،age
اﻟﻮزن ،weightوﻏﯿﺮ ذﻟﻚ .ﺛﻢ ﻧﻨﺸﺊ ﻣﻦ ھﺬا اﻟﻨﻤﻂ أﺷﺨﺎﺻﺎ .رﺑﻤﺎ ﻟﻦ ﺗﻔﮭﻢ اﻟﻤﺜﺎل ﺑﺸﻜﻞ
ﻛﺎﻣﻞ ﻷﻧﻨﺎ ﻟﻢ ﻧﻨﮭﻲ اﻟﺤﺪﯾﺚ ﻋﻦ ﻧﻤﻂ اﻟﺴﺠﻞ؛ ﻟﺬﻟﻚ ﻋﺪ إﻟﯿﮫ ﺛﺎﻧﯿﺔ ﺑﻌﺪ أن ﻧﻨﺘﮭﻲ ﻣﻦ ﺣﺪﯾﺜﻨﺎ
ﻋﻨﮫ ﺛﺎﻧﯿﺔ:
"#include "stdafx.h
"#include "aaa.h
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
;CWinApp theApp
// struct1.cpp
{ struct PERSON // Declare PERSON struct type
;int age // Declare member types
;long ss
;float weight
163
;]char name[25
;} family_member // Define object of type PERSON
{ )(int main
;PERSON sister
;PERSON brother
;sister.age = 13 // assign values to members
;brother.age = 7
}
ﺻﻨﺎﻋﺔ ﺍﻷﳕﺎﻁ
ﺗﻌﺎﻣﻠﺖ ﻣﻊ أﻧﻤﺎط ﻣﻮﺿﻮﻋﺔ ﻣﺴﺒﻘﺎ ،ﻣﺜﻞ اﻟﻨﻤﻂ intو charوﻏﯿﺮھﺎ .ﻟﻜﻦّ اﻟﻠﻐﺔ ﻣﻜﻨﺖ ﻟﻚ
أن ﺗﻘﻮم أﻧﺖ ﺑﺼﻨﺎﻋﺔ أﻧﻤﺎط ﻣﺨﺘﻠﻔﺔ ﺧﺎﺻﺔ ﺑﻚ ،وﻗﺪ ﻟﻤﺤﻨﺎ ﻣﺴﺒﻘﺎ ﻋﻦ ﻣﺘﻐﯿﺮات وﺿﻌﯿﺔ ﻣﻦ
ﺻﻨﻊ اﻟﻤﺒﺮﻣﺞ ،ﺳﻨﺄﺗﻲ اﻵن ﻋﻠﻰ طﺮﻗﮭﺎ.
164
ﺑﻨﻴﺔ ﺍﻟﺘﻌﺪﺍﺩ enum
اﻓﺮض أﻧّﻚ ﺗﺮﯾﺪ ﺑﻨﺎء ﺑﺮﻧﺎﻣﺞ ﻟﻌﺒﺔ وﺗﻈﮭﺮ ﻓﻲ ﻧﮭﺎﯾﺘﮭﺎ ﺣﺎﻟﺔ اﻟﻼﻋﺐ ﻣﻦ رﺑﺢ وﺧﺴﺎرة.
ﺗﺴﺘﻄﯿﻊ ﻣﺜﻼ ،أن ﺗﻈﮭﺮ ﻟﮫ ﻓﻲ اﻟﺨﺘﺎم اﻷرﻗﺎم ) (1ﻟﯿﺪل ﻋﻠﻰ أﻧﮫ راﺑﺢ ،أو ﺗﻈﮭﺮ ﻟﮫ اﻟﺮﻗﻢ
) (0ﻟﺘﺨﺒﺮه ﺑﺄﻧﮫ ﻗﺪ ﺧﺴﺮ ،وﺗﻀﻊ ﻓﻲ ﺗﻌﻠﯿﻤﺎﺗﻚ ھﺬه اﻟﻤﺼﻄﻠﺤﺎت ﻟﯿﻘﺮأھﺎ اﻟﻤﺴﺘﺨﺪم .ﺗﺴﺘﻄﯿﻊ
أﯾﻀﺎ ،أن ﺗﻈﮭﺮ ﻟﮫ ﻛﻠﻤﺘﯿﻦ ﻣﻦ ﻧﻮع ﻧﺼﻲ ، stringإﺣﺪاھﻤﺎ ﺗﻘﻮل :راﺑﺢ ،واﻷﺧﺮى ﺗﻘﻮل:
ﺧﺎﺳﺮ.
ﻟﻜﻦ ﺗﺴﺘﻄﯿﻊ أﻧﺖ ﻓﻲ وﺿﻊ أﻣﺜﻞ ،أن ﺗﻜﻮﱢن ﻧﻤﻄﺎ ﺧﺎﺻﺎ ﻟﺬﻟﻚ ،ھﻮ ﻧﻤﻂ اﻟﺤﺎﻟﺔ ،أي ﺣﺎﻟﺔ
اﻟﻨﺘﯿﺠﺔ .ﺛﻢ ﺗﺒﻨﻲ ﻓﻲ ﻧﻤﻂ اﻟﺤﺎﻟﺔ ذﻟﻚ ،رﻣﺰﯾﻦ ـ أو ﻋﻀﻮﯾﻦ ـ ،ﺗﺴﻤﻲ أﺣﺪھﻤﺎ :راﺑﺢ ،و
ﺗﺴﻤﻲ اﻵﺧﺮ :ﺧﺎﺳﺮ.
ﻓﺎﻟﺮﻣﺰ ) راﺑﺢ ( ﻋﻀﻮ ﯾﻨﺘﻤﻲ إﻟﻰ ﻧﻤﻂ )ﺣﺎﻟﺔ ( ،أي ﻧﻤﻄﮫ ﻣﻦ ﻧﻮع )ﺣﺎﻟﺔ( ،وﻛﺬﻟﻚ اﻟﺮﻣﺰ
)ﺧﺎﺳﺮ( ھﻮ ﻋﻀﻮ ﻓﻲ ﻧﻤﻂ )ﺣﺎﻟﺔ( اﻟﺨﺎص ﺑﻚ.
ﻣﺜﺎل آﺧﺮ :ﺗﺒﻨﻲ ﻧﻤﻄﺎ ﺗﺴﻤﯿﮫ )أﺳﺒﻮع( .ﺛﻢ ﺗﺠﻌﻞ ﺳﺒﻌﺔ أﻋﻀﺎء ﺗﻨﺘﻤﻲ إﻟﯿﮫ ھﻲ:
اﻟﺠﻤﻌﺔ ،ﻋﻀﻮ ﯾﻨﺘﻤﻲ إﻟﻰ ﻧﻤﻂ )أﺳﺒﻮع(.
اﻟﺴﺒﺖ ،ﻋﻀﻮ ﻧﻤﻄﮫ )أﺳﺒﻮع(.
اﻷﺣﺪ ،ﻋﻀﻮ ﺛﺎﻟﺚ ﻓﻲ اﻟﻨﻤﻂ أﺳﺒﻮع .وھﻜﺬا.
ﻣﺜﺎل ﺑﺮﻣﺠﻲ
ﻓﯿﻤﺎ ﯾﻠﻲ ،ﺳﻨﻘﻮم ﺑﺼﻨﺎﻋﺔ ﻧﻤﻂ ﻷﺳﻤﺎء اﻷﺷﮭﺮ وﻧﺴﻤﯿﮫ Monthأي ﺷﮭﺮ.
;} enum Month { Jan, Feb, Mar, Jun, Jul, Aug, Sep, Oct, Nov, Dec
165
ﻛﻤﺎ ﻧﺮى ،ﻧﺒﺪأ ﺑﺎﻟﻜﻠﻤﺔ اﻟﻤﻔﺘﺎﺣﯿﺔ enumﺛﻢ ﯾﻌﻘﺒﮭﺎ اﻻﺳﻢ اﻟﺬي ﻧﺮﯾﺪه ﻟﻠﻨﻤﻂ ،وﺑﻌﺪ ذﻟﻚ ﻗﻮﺳﯿﻦ
ﻣﻌﻘﻮﻓﯿﻦ ﺑﯿﻨﮭﻤﺎ اﻟﺮﻣﻮز اﻟﺘﻲ ﻧﺮﯾﺪ ﻟﮭﺎ أن ﺗﻨﺘﻤﻲ ﻟﮭﺬا اﻟﻨﻤﻂ ،وﯾﻔﺼﻞ رﻣﺰ ﻋﻦ آﺧﺮ ﻓﺎﺻﻠﺔ.
وﺗﻨﺘﮭﻲ اﻟﺘﻌﻠﯿﻤﺔ ﻛﻠﮭﺎ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ.
ﻓﺄﺳﻤﺎء اﻷﺷﮭﺮ ) ،( Jan, Feb, Mar, Jun, Jul, Aug, Sep, Oct, Nov, Dec
ھﻲ أﻋﻀﺎء ﻓﻲ اﻟﻨﻤﻂ )ﺷﮭﺮ(.
وﺑﻤﺎ أنّ Monthﻗﺪ أﺻﺒﺢ ﻧﻤﻂ؛ ﻟﺬﻟﻚ ﯾﻤﻜﻨﻨﺎ اﻟﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺘﻐﯿﺮات ﻣﻦ ﻧﻮﻋﮫ ،ﺗﻤﺎﻣﺎ ﻛﻤﺎ
ﻧﺼﺮح ﻋﻦ ﻣﺘﻐﯿﺮات ﻣﻦ ﻧﻮع intوﻏﯿﺮه.
ﺳﻨﺼﺮح اﻵن ﻋﻦ ﻣﺘﻐﯿﺮ ﻧﺴﻤﯿﮫ MyMonthﻣﻦ ﻧﻮع اﻟﻨﻤﻂ : Month
;Month MyMonth
وﺑﻤﺎ أﻧﻨﺎ ﻧﺴﻨﺪ ﻟﻠﻤﺘﻐﯿﺮ intﻋﺪدا ،ﻷنّ اﻷﻋﺪاد ھﻲ ﻣﺎ ﯾﻨﺎﺳﺐ . intوأﯾﻀﺎ ،ﺑﻤﺎ أﻧﻨﺎ ﻧﺴﻨﺪ
ﻣﺎ ﻟﻠﻤﺘﻐﯿﺮ stringﺣﺮوﻓﺎ ﻷﻧﮭﺎ ﺗﻨﺎﺳﺒﮫ؛ ﻛﺬﻟﻚ ﻧﺴﺘﻄﯿﻊ أن ﻧﺴﻨﺪ ﻟﻠﻤﺘﻐﯿﺮ MyMonth
ﯾﻨﺎﺳﺒﮫ ،وھﻲ أﺣﺪ أﯾﺎم اﻷﺷﮭﺮ )اﻷﻋﻀﺎء( .ﻟﺬﻟﻚ ﻧﺴﺘﻄﯿﻊ أن ﻧﻜﺘﺐ:
;MyMonth = Jan
166
.........................
ﺗﺨﺘﻠﻒ ﻋﻦ وھﺬه ﻋﻮدة ﻟﻠﺒﻨﯿﺔ Structوﻣﻮﺿﻮع اﻟﺴﺠﻼت .اﻟﺴﺠﻼت Structures
اﻟﺘﻌﺪاد ، Enumerationﻓﻲ أنّ اﻟﺘﻌﺪاد ﯾُﻌَﺪ ﻧﻤﻂ ،واﻟﺮﻣﻮز اﻷﻋﻀﺎء ھﻲ ﺗﻌﺪادات ﻟﮫ،
ﻛﺄن ﺗﻘﻮل :ﻋﺪد ﻟﻲ أﯾﺎم اﻷﺳﺒﻮع .ﻓﺄﻗﻮل ﻟﻚ :ھﻲ اﻟﺠﻤﻌﺔ واﻟﺴﺒﺖ واﻷﺣﺪ واﻻﺛﻨﯿﻦ ،وھﻜﺬا.
ﻓﺎﻟﻤﺘﻐﯿﺮ اﻟﻤﺼﺮح ﻣﻦ ﻧﻤﻂ اﻟﺘﻌﺪاد ،ﯾﺴﻨﺪ إﻟﯿﮫ أﺣﺪ إﻋﺪادات ـ أي أﻋﻀﺎء ـ اﻟﻨﻤﻂ.
واﻟﻤﺬاق ،ﺗﻌﺪاد .ﻓﻤﻦ ﺗﻌﺪاداﺗﮫ :ﺣﻠﻮ ،ﻣﺮ ،ﺣﺎﻣﺾ ،ﻣﺎﻟﺢ .وﻛﺬﻟﻚ اﻟﻔﺼﻞ ـ أو اﻟﻔﺼﻮل ـ ھﻲ
ﺗﻌﺪاد ،ﻓﺎﻟﻔﺼﻮل ﺗﺘﻌﺪد إﻟﻰ :اﻟﺸﺘﺎء ،اﻟﺮﺑﯿﻊ ،اﻟﺼﯿﻒ ،اﻟﺨﺮﯾﻒ.
أﻣﺎ اﻟﺴﺠﻼت ،ﻓﺄﻋﻀﺎؤھﺎ ﺗﻌﻨﻲ ﺷﯿﺌﺎ آﺧﺮ؛ ﻓﺎﻟﺴﺠﻞ ،ﯾﻌﻠﻦ ﻋﻦ ﻧﻤﻂ ﺟﺪﯾﺪ ،وأﻋﻀﺎؤه ﺗﻤﺜﻞ
ﻣﺰاﯾﺎ وﺧﺼﺎﺋﺺ ﻟﺬاك اﻟﻨﻤﻂ .ﻓﺎﻟﻄﺎﻟﺐ؛ ﻧﻤﻂ .ﯾﻤﻜﻦ أن ﺗﻀﻊ ﻛﺘﻌﺪاد ﻟﮫ :ﻣﺠﺘﮭﺪ و ﻛﺴﻮل.
ھﺬا ﻣﻦ وﺟﮭﺔ ﻧﻈﺮ اﻟﺘﻌﺪاد .أﻣﺎ ﻣﻦ وﺟﮭﺔ ﻧﻈﺮ اﻟﺴﺠﻼت ،ﻓﺎﻟﻄﺎﻟﺐ؛ ﻧﻤﻂ ،ﻣﻤﯿﺰاﺗﮫ واﻟﺤﻘﻮل
اﻟﺘﻲ ﯾﺤﺘﺎﺟﮭﺎ ﻟﺒﯿﺎﻧﮫ ووﺻﻔﮫ ھﻲ :اﺳﻢ اﻟﻄﺎﻟﺐ ،ﻋﻨﻮان اﻟﻄﺎﻟﺐ ,ﺳﻠﻮك اﻟﻄﺎﻟﺐ ،درﺟﺔ
اﻟﻄﺎﻟﺐ ﻓﻲ ﻛﻞ ﻣﺎدة ،وﻏﯿﺮ ذﻟﻚ ﻣﻤﺎ ﯾﻤﻜﻦ أن ﯾﻮﺿﻊ ﻓﻲ ﺳﺠﻞ ﯾﺤﻮي ﺣﻘﻮﻻ ،وﻓﻲ ﻛﻞ ﺣﻘﻞ
ﺗﺬﻛﺮ ﺻﻔﺔ أو ﻣﯿﺰة ،أو ﺧﺎﺻﺔ ﻣﻦ ﺧﺼﺎﺋﺼﮫ.
ﺑﻌﺪ ذﻟﻚ ،ﻧﺴﺘﻄﯿﻊ أن ﻧﺼﺮح ﻣﻦ ﻧﻤﻂ اﻟﺴﺠﻞ ،ﻛﯿﺎﻧﺎت و )أﺷﯿﺎء( ﻟﮭﺎ درﺟﺎت ﻣﺨﺘﻠﻔﺔ
)ﻣﺘﻔﺎوﺗﺔ( ﻣﻦ اﻟﺨﺼﺎﺋﺺ اﻟﺘﻲ ذﻛﺮت ﻟﻠﺴﺠﻞ .ﻓﺎﻟﻄﺎﻟﺐ ،ﺳﺠﻞ ،ﻟﮫ ﺧﺼﺎﺋﺺ ﻣﺨﺘﻠﻔﺔ ﻛﺎﻻﺳﻢ
وﻏﯿﺮه .ﻓﯿﺄﺗﻲ أﺣﺪ اﻟﻄﻼب واﺳﻤﮫ ﺧﺎﻟﺪ ،وﻣﺪرﺳﺘﮫ ،اﻷوس اﻻﺑﺘﺪاﺋﯿﺔ ،ودرﺟﺘﮫ ﻓﻲ
اﻟﺮﯾﺎﺿﯿﺎت ) .(90وﯾﺄﺗﻲ زﯾﺪ :ﻣﺪرﺳﺘﮫ ،اﻟﺨﺰرج ،ودرﺟﺘﮫ ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ).(95
ﺧﺎﻟﺪ وزﯾﺪ؛ ﻛﯿﺎﻧﺎن ﻣﻦ ﻧﻤﻂ )طﺎﻟﺐ( ،أي ﻣﺘﻐﯿﺮان ﻣﻦ اﻟﻨﻮع )طﺎﻟﺐ(.
167
ﻛﺬﻟﻚ ،ﻟﺪﯾﻨﺎ ﺳﺠﻞ اﻟﻔﺎﻛﮭﺔ ،وﻟﮭﺎ ﺧﺼﺎﺋﺺ ﺗﻜﺘﺐ ﻛﻞ ﺧﺎﺻﺔ ﻓﻲ ﺣﻘﻞ .ﻓﻔﻲ ﺣﻘﻞ ﺗﺠﺪ
)اﻟﻠﻮن( ،وﻓﻲ ﺣﻘﻞ ﺗﺠﺪ )اﻟﺮاﺋﺤﺔ( ،وﻓﻲ ﺣﻘﻞ ﺗﺠﺪ )اﻟﻤﺬاق( ،وﻏﯿﺮ ذﻟﻚ .ﻣﻦ ﺳﺠﻞ اﻟﻔﺎﻛﮭﺔ،
ﺗﺄﺗﻲ ﻣﺘﻐﯿﺮات ﻣﺜﻞ :ﺗﻔﺎح ،ﺧﻮخ ،ﻣﻮز.
اذا أردﻧﺎ اﻟﺪﻗﺔ ﻓﻲ اﻟﻮﺻﻒ ،ﻓﺎﻟﺘﻔﺎح ﻟﮫ درﺟﺔ ﻣﻌﯿﻨﺔ ﻣﻦ اﻟﻤﺬاق اﻟﺤﻠﻮ ،وﻟﮫ درﺟﺔ ﻣﻌﯿﻨﺔ ﻣﻦ
اﻟﻤﺬاق اﻟﺤﺎﻣﺾ .ﺑﯿﻨﻤﺎ اﻟﺨﻮخ ،ﻟﮫ درﺟﺔ ﻣﺬاق ﺣﻠﻮ ﻏﯿﺮ درﺟﺔ ﻣﺬاق اﻟﺘﻔﺎح ،وﻟﮫ درﺟﺔ
ﻣﺬاق ﺣﺎﻣﺾ ﻣﺨﺘﻠﻔﺔ أﯾﻀﺎ ﻋﻦ درﺟﺔ اﻟﺘﻔﺎح ،وھﻜﺬا.
ﻓﺎﻟﺴﺠﻞ ،ﯾﺘﻜﻮن ﺑﺪوره ﻣﻦ أﻧﻤﺎط ﻣﺨﺘﻠﻔﺔ ،ﻟﻜﻦ ھﻮ ﺑﺤﺪ ذاﺗﮫ ـ وﺑﻜﻠﯿﺘﮫ ھﺬه ـ ،أي ﺑﻜﻞ أﻧﻤﺎطﮫ
ھﺬه ،ﯾﻌﺘﺒﺮ ﻧﻤﻂ ﺟﺪﯾﺪ ﻗﺎﺋﻢ ﺑﺬاﺗﮫ.
ﻓﻨﻤﻂ اﻟﺘﻌﺪاد ،ﯾﺒﺤﺚ ﻓﻲ ﺗﻌﺪداﺗﮫ وأﻗﺴﺎﻣﮫ وھﯿﺌﺎﺗﮫ وﺗﻔﺮﻋﺎﺗﮫ ،ﺑﯿﻨﻤﺎ ﻧﻤﻂ اﻟﺴﺠﻞ ،ﯾﺒﺤﺚ ﻓﻲ
درﺟﺎت اﻟﺸﻲء ،ﻓﻲ اﻟﺪرﺟﺔ اﻟﻔﻼﻧﯿﺔ ﻟﻜﺬا.
ھﺬا اﻟﺘﺒﯿﺎن ﻋﻦ اﻟﺴﺠﻞ وھﺬا اﻟﺸﺮح ،ﯾﻨﻄﺒﻖ أﯾﻀﺎ ﻋﻠﻰ اﻟﻔﺼﺎﺋﻞ ،إﻻ أنّ اﻟﻔﺼﺎﺋﻞ أوﺳﻊ وﻟﮭﺎ
أﻓﻌﺎل ﺗﻘﻮم ﺑﮭﺎ ﻛﺎﺋﻨﺎﺗﮭﺎ.
اﻟﺴﺠﻞ ﻣﺎ ﻟﻢ ﯾُﻨﺸﺄ ﻣﻨﮫ ﻛﯿﺎﻧﺎت ،أي ﻣﺘﻐﯿﺮات؛ ﻓﻼ ﯾﺄﺧﺬ ﺷﻲء ﻣﻦ اﻟﺬاﻛﺮة .ﻓﺈذا أﻋﻠﻨﺎ ﻋﻦ ﻛﯿﺎن
ﻣﻦ ﺳﺠﻞ ،ﻋﻨﺪھﺎ أﺧﺬ ھﺬا اﻟﻜﯿﺎن ﺣﯿﺰا ﻓﻲ اﻟﺬاﻛﺮة .ﻛﺬﻟﻚ اﻟﻔﺼﯿﻠﺔ ،ﻣﺎ ﻟﻢ ﯾﻨﺸﺄ ﻣﻨﮭﺎ ﻛﺎﺋﻨﺎت،
ﻓﺈﻧﮭﺎ ﻻ ﺗﺸﻐﻞ ﺷﯿﺌﺎ ﻓﻲ اﻟﺬاﻛﺮة .ﻓﺈذا ﻛﺎﻧﺖ ھﻨﺎك ﻛﺎﺋﻨﺎت ﻣﻦ اﻟﻔﺼﯿﻠﺔ ،ﺷﻐﻠﺖ ﺗﻠﻚ اﻟﻜﺎﺋﻨﺎت
ﺣﯿﺰا ﻣﺎ ﻓﻲ اﻟﺬاﻛﺮة.
اﻵن ﺳﻨﻘﻮم ﺑﺼﻨﺎﻋﺔ ﻧﻤﻂ اﻟﻄﺎﻟﺐ ﻓﻲ ﺳﺠﻞ .وﺳﻨﺪرج ﻓﯿﮫ ﺣﻘﻮل ﺑﺴﯿﻄﺔ ھﻲ :اﺳﻢ اﻟﻄﺎﻟﺐ
،nameودرﺟﺔ ﻣﺎدة اﻟﻔﯿﺰﯾﺎء ،Physicsودرﺟﺔ ﻣﺎدة اﻟﺮﯾﺎﺿﯿﺎت .Mathematic
168
{ Struct student
;]Char name[30
;Int Physics
;Int Mathematic
;}
ﺳﺟل طﺎﻟب
اﻵن ،ﺳﻨﻌﻠﻦ ﻋﻦ ﻛﯿﺎﻧﯿﻦ ،أي ﻣﺘﻐﯿﺮﯾﻦ ﻣﻦ ﻧﻤﻂ اﻟﻄﺎﻟﺐ وھﻤﺎ :ﺧﺎﻟﺪ ،kaledو زﯾﺪ .zayd
{ struct student
169
;]char name[30
;int Physics
;int Mathematic
;}
;student kaled, zayd
ﺳﺟل طﺎﻟب
170
اﻟرﯾﺎﺿﯾﺎت اﻟﻔﯾزﯾﺎء اﻻﺳم اﻟﻛﯾﺎن
اﻟطﺎﻟب ﺧﺎﻟد
اﻟطﺎﻟب زﯾد
ﻧﻜﺘﺐ اﺳﻢ اﻟﻜﯿﺎن ،ﺛﻢ ﻧﻘﻄﺔ ،ﺛﻢ اﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺮاد ﻣﻠﺆه:
kaled.name
ﻧﺤﻦ اﻵن ﻓﻲ اﻟﺤﻘﻞ اﻟﻤﺮاد ،وﻟﻜﻦ ﻟﻢ ﻧﻜﺘﺐ ﺷﯿﺌﺎ ﺑﻌﺪ .ﻋﻠﯿﻨﺎ أن ﻧﻜﻤﻞ ﻓﻨﺴﻨﺪ ﻟﮫ اﺳﻢ ﺑﮭﺬه
اﻟﻄﺮﯾﻘﺔ:
;kaled.Physics = 95
;kaled.Mathematic = 90
171
ﺳﺟل طﺎﻟب
اﻟطﺎﻟب زﯾد
{ struct student
;]char name[30
;int Physics
;int Mathematic
;} kaled, zayd
172
اذا ﻛﻨﺖ ﻟﻢ ﺗﻨﺲ ﻣﻮﺿﻮع اﻟﻤﺆﺷﺮات ،ﻓﺈﻧﻚ ﺗﺴﺘﻄﯿﻊ أن ﺗﺼﻞ اﻵن إﻟﻰ ﺣﻘﻮل زﯾﺪ ﺑﻮﺳﺎطﺔ
ﻋﻨﻮاﻧﮫ ﻓﻨﻜﺘﺐ ﻣﺜﻼ:
;(*pz.Physics) = 88
وﺑﻤﺎ أنّ ھﺬه اﻟﻄﺮﯾﻘﺔ ﻣﺴﺘﺨﺪﻣﺔ ﺑﺸﻜﻞ ﻛﺒﯿﺮ ،ﻓﻘﺪ وﺿﻊ ﺧﺒﺮاء C++طﺮﯾﻘﺔ أﯾﺴﺮ ﺗﻜﺎﻓﺊ ﻣﺎ
ﺳﺒﻖ وﺑﺎﺳﺘﺨﺪام ﻋﺎﻣﻞ ﺟﺪﯾﺪ ھﻮ > -واﻟﻤﺘﻜﻮن ﻣﻦ إﺷﺎرة اﻟﻄﺮح ) (-وإﺷﺎرة أﻛﺒﺮ )>(.
ﻓﺒﺪﻻ ﻣﻦ أن ﺗﻜﺘﺐ ; . (*pz.Physics) = 88ﯾﻤﻜﻨﻚ ﻛﺘﺎﺑﺘﮭﺎ ﺑﮭﺬا اﻟﺸﻜﻞ:
وﻛﺬﻟﻚ اﻛﺘﺐ:
ﺳﺟل طﺎﻟب
ﺧﺎﻟﺪ وزﯾﺪ اﻵن ،ﻟﮭﻤﺎ ﺻﻔﺎت طﺎﻟﺐ .ﺑﻌﺪ ﻗﻠﯿﻞ ،ﺳﻨﺪﺧﻞ اﻟﻰ ﻋﺎﻟﻢ اﻟﻔﺼﯿﻠﺔ اﻟﺘﻲ ﺗﺒﻨﻲ وﺗﮭﯿﺊ
أﺷﯿﺎء وﻛﺎﺋﻨﺎت .وﺳﻨﺮى اﻟﻜﺎﺋﻦ ﺧﺎﻟﺪ وﻛﺬﻟﻚ اﻟﻜﺎﺋﻦ زﯾﺪ ،طﺎﻟﺒﯿﻦ ،ﻟﯿﺲ ﻓﻘﻂ ﯾﻤﺘﻠﻜﺎن ﺻﻔﺎت
173
طﺎﻟﺐ؛ ﺑﻞ أﯾﻀﺎ ،ﯾﻤﺘﻠﻜﺎن دوال ﻛﺄدوات ﯾﻘﺮءان ﺑﮭﺎ وﯾﻜﺘﺒﺎن وﻏﯿﺮ ذﻟﻚ .ﻟﯿﺲ ھﺬا ﻓﻘﻂ؛ ﺑﻞ
ھﻤﺎ ﯾﺴﻤﺤﺎن ﺑﻜﺸﻒ ﺧﺼﺎﺋﺼﮭﻤﺎ وﺻﻔﺎﺗﮭﻤﺎ ﻟﻜﺎﺋﻦ ،وﯾﻤﻨﻌﺎن ذﻟﻚ ﻋﻦ ﻛﺎﺋﻦ آﺧﺮ .إذن ﺗﻌﺎل
ﻣﻌﻨﺎ ﻧﺪﺧﻞ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ اﻟﺸﯿﺌﯿﺔ .ﺣﯿﺚ ﺗﺼﻨﻊ اﻷﺷﯿﺎء واﻷﻏﺮاض واﻟﻜﺎﺋﻨﺎت وﺑﺘﺨﻄﯿﻂ
ﻣﺴﺒﻖ ﻓﻲ اﻟﻔﺼﯿﻠﺔ واﻟﺼﻨﻒ.
.............................
ﺍﻟﱪﳎـﺔ ﺍﻟﺸـﻴﺌﻴـﺔ
ﺑﺪأت اﻟﺒﺮﻣﺠﺔ ﺑﻤﺎ ﯾﺴﻤﻰ اﻟﺒﺮﻣﺠﺔ اﻹﺟﺮاﺋﯿﺔ؛ وھﻲ ﻋﺒﺎرة ﻋﻦ ﺧﻄﻮات ﺗﻨﻔﺬ ﺧﻄﻮة ﺗﻠﻮ
أﺧﺮى .ﻓﺈذا اﺣﺘﺠﺖ إﻟﻰ ﺧﻄﻮات ﯾﺠﺐ أن ﺗﻨﻔﺬ ﻓﻲ ﻋﺪة ﻣﻮاﺿﻊ ،ﻓﻌﻠﯿﻚ أن ﺗﺬﻛﺮھﺎ ﺻﺮاﺣﺔ
ﻓﻲ ﺗﻠﻚ اﻟﻤﻮاﺿﻊ اﻟﺘﻲ ﯾﺠﺐ ،ﻟﺘﻨﻔﺬ ھﻨﺎك.
ﺗﻄﻮرت ﺑﻌﺪ ذﻟﻚ إﻟﻰ ﻣﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺒﺮﻣﺠﺔ اﻟﺘﻔﺮﻋﯿﺔ ،ﺣﯿﺚ ﯾﻤﻜﻦ ﻟﻠﺒﺮﻧﺎﻣﺞ أن ﯾﺘﻔﺮع ﻣﻦ
ﻣﻮﺿﻌﮫ اﻟﺤﺎﻟﻲ ﻟﯿﺬھﺐ إﻟﻰ ﺗﻔﺮع آﺧﺮ ﯾﻨﻔﺬه .ھﻨﺎ أﺻﺒﺢ ﺑﺎﻹﻣﻜﺎن ﻛﺘﺎﺑﺔ اﻟﺨﻄﻮات اﻟﺘﻲ
ﺗﺴﺘﺪﻋﻰ ﻷﻛﺜﺮ ﻣﻦ ﻣﺮة؛ أﻣﻜﻦ ﻛﺘﺎﺑﺘﮭﺎ ﻟﻤﺮة واﺣﺪة واﻟﺬھﺎب إﻟﯿﮭﺎ ﺑﮭﺬه اﻟﺒﺮﻣﺠﺔ اﻟﺘﻲ ﺗﻤﻜﻦ
اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ اﻟﺘﻔﺮع .ﻋﻨﺪ ھﺎ أﺻﺒﺢ اﻟﺒﺮﻧﺎﻣﺞ ﯾﻤﻜﻦ أن ﯾﻜﺘﺐ ﻋﻠﻰ أﻗﺴﺎم ﯾﻤﻜﻦ ﻟﻠﻤﺘﺮﺟﻢ أن
ﯾﺘﻔﺮع إﻟﻰ أي ﻗﺴﻢ ﯾﺮاد ﺗﻨﻔﯿﺬه .ﻟﻨﻘﺘﺮب ﻣﻦ ﻓﻜﺮة ﺟﻌﻞ اﻟﻘﺴﻢ اﻟﺬي ﯾﺘﻜﺮر ﻓﻲ ﻛﯿﺎن وظﯿﻔﻲ
ﯾﺴﺘﺪﻋﻰ ﺑﻮﺳﯿﻠﺔ ﻓﺄﺻﺒﺤﻨﺎ أﻣﺎم ﻣﻔﮭﻮم اﻟﺒﺮﻣﺠﺔ اﻟﻤﮭﯿﻜﻠﺔ وﺗﻔﺮع اﻟﺒﺮﻧﺎﻣﺞ ﻟﯿﺬھﺐ إﻟﻰ ﺗﻨﻔﯿﺬ
دوال ﯾﺆدﯾﮭﺎ ﺑﻮاﺳﻄﺔ اﺳﻢ ﺗﺤﻤﻠﮫ اﻟﺪاﻟﺔ.
ﻛﺎ ن ﯾﺮاﻓﻖ ھﺬا اﻟﺘﻄﻮر أﯾﻀﺎ؛ اﻟﺤﺰن اﻟﻜﻤﻲ ﻟﻠﻤﻌﻄﯿﺎت ﻟﻨﺼﻞ اﻟﻰ ﻣﻔﮭﻮم اﻟﻤﺼﻔﻮﻓﺎت وﺑﻨﻰ
اﻟﻤﻌﻄﯿﺎت وﺟﻌﻠﮭﺎ ﻛﺠﺪاول وﺣﻘﻮل .ھﻨﺎ أﺻﺒﺤﻨﺎ أﻣﺎم أﺳﻤﺎء ﺗﻤﻠﻚ ﻣﻌﻄﯿﺎت ﻛﺄﻧﮭﺎ ﺧﺼﺎﺋﺺ
ﻟﮭﺎ ،ﻓﺈذا ﻣﺎ أﻋﻄﯿﺖ ﺗﻠﻚ اﻷﺳﻤﺎء إﻣﻜﺎﻧﯿﺔ ﺗﻨﻔﯿﺬ دوال ﺗﻜﻮن ﺗﺎﺑﻌﺔ ﻟﮭﺎ ،ﻋﻨﺪھﺎ ﻧﻜﻮن ﻗﺪ اﻗﺘﺮﺑﻨﺎ
174
ﻣﻦ ﻣﻔﮭﻮم اﻟﻜﺎﺋﻦ أو اﻟﺸﻲء أو اﻟﻐﺮض .ﻓﺎﻟﻜﺎﺋﻦ؛ ﺷﻲء ﯾﺤﻤﻞ ﺧﺼﺎﺋﺺ ﯾﻤﻜﻦ أن ﯾﺆدي
ﻣﮭﻤﺔ ووظﯿﻔﺔ .ﻟﻨﺼﺒﺢ أﻣﺎم ﻣﻔﮭﻮم اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ.
ھﻨﺎك ﺗﻘﻨﯿﺎت ﺑﺮﻣﺠﯿﺔ ﻋﺎﺻﺮت ﻣﻔﮭﻮم اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ ﻓﺼﺎرت ﻛﺄﻧﮭﺎ ﺗﺎﺑﻌﺔ ﻟﮭﺎ وھﻲ ﻟﯿﺴﺖ
ﻛﺬﻟﻚ .ﻛﺘﻘﻨﯿﺔ ﻣﻌﺎﻟﺠﺔ اﻻﺳﺘﺜﻨﺎءات وﺣﺘﻰ ﺗﻘﻨﯿﺔ اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻟﻠﺪوال واﻟﻌﻮاﻣﻞ ،ھﻲ ﻓﻲ
ﺣﻘﯿﻘﺘﮭﺎ ﺗﻘﻨﯿﺔ ﺑﺮﻣﺠﯿﺔ ﺧﺎﻟﺼﺔ ﻻ ﻋﻼﻗﺔ ﻟﮭﺎ ﺑﻤﻔﮭﻮم اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ وإن ﺳﺎﻋﺪت ﻓﻲ ﺗﻮﺛﯿﻖ
وﺗﺄﺻﯿﻞ ﻣﻔﮭﻮﻣﮭﺎ وﺧﺪﻣﺘﮫ.
ﺗﻘﻮم اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ ﻋﻠﻰ ﺛﻼﺛﺔ أﺳﺲ رﺋﯿﺴﺔ ھﻲ :إﺧﻔﺎء وﺗﻐﻠﯿﻒ اﻟﻤﻌﻄﯿﺎت ﻓﻲ ﺑﻮﺗﻘﺔ
ﻟﺘﺼﺒﺢ ﻓﻲ ﻣﻜﺎن أﻣﯿﻨﺔ ﺑﻌﯿﺪة ﻋﻦ إﻣﻜﺎﻧﯿﺔ اﻟﺘﻼﻋﺐ ﻓﯿﮭﺎ ﻣﻦ ﻗﺒﻞ اﻵﺧﺮﯾﻦ .وإﻣﻜﺎﻧﯿﺔ ﺗﻮرﯾﺚ
اﻟﻤﺰاﯾﺎ واﻟﺨﺼﺎﺋﺺ واﻟﺼﻔﺎت اﻟﺒﺮﻣﺠﯿﺔ ﻟﻌﻨﺎﺻﺮ أﺧﺮى .وإﻣﻜﺎﻧﯿﺔ اﺳﺘﺠﺎﺑﺔ اﻟﻜﺎﺋﻦ أو
اﻟﻐﺮض ﻟﺮﺳﺎﻟﺔ ﻣﺎ وﻓﻖ ﻣﻌﻄﯿﺎﺗﮫ ھﻮ وﺧﺼﺎﺋﺼﮫ ووظﯿﻔﺘﮫ ،أو ﺑﻌﺒﺎرة أﺧﺮى :إﻣﻜﺎﻧﯿﺔ
ﺗﺼﺪﯾﺮ أﻣﺮ واﺣﺪ ﯾﻨﻔﺬ ﻣﻦ ﻗﺒﻞ ﻛﻞ ﻛﺎﺋﻦ ﺑﻄﺮﯾﻘﺘﮫ ھﻮ وﺑﺸﻜﻞ ﯾﻨﺎﺳﺐ وظﯿﻔﺘﮫ.
إذا ﻧﻈﺮﻧﺎ إﻟﻰ اﻟﺤﯿﺎة؛ ﻓﻜﻞ ﻣﺎ ﻓﯿﮭﺎ ھﻮ ﺷﻲء أو ﻏﺮض أو ﻛﺎﺋﻦ .ھﺬا اﻟﺸﻲء ﯾﺤﻤﻞ ﺧﺼﺎﺋﺺ
ﺗﻤﯿﺰه ﻋﻦ ﻏﯿﺮه وﻟﮫ ﻣﮭﻤﺔ ووظﯿﻔﺔ ﯾﺆدﯾﮭﺎ ﻓﻲ اﻟﺤﯿﺎة .ﻓﺎﻟﺤﺠﺮة ﺷﻲء ،واﻟﺸﺠﺮة ﺷﻲء،
واﻹﻧﺴﺎن ﺷﻲء .اﻟﺤﺠﺮة؛ ﻟﮭﺎ ﺧﺼﺎﺋﺺ ،واﻟﺸﺠﺮة؛ ﻟﮭﺎ ﺧﺼﺎﺋﺺ أﺧﺮى ،وﻛﺬﻟﻚ ﻟﻺﻧﺴﺎن
ﺧﺼﺎﺋﺼﮫ وﺻﻔﺎﺗﮫ اﻟﺘﻲ ﯾﺘﻔﺮد ﺑﮭﺎ ﻋﻦ ﻏﯿﺮه ﻣﻦ اﻷﺷﯿﺎء أو اﻷﻏﺮاض أو اﻟﻜﺎﺋﻨﺎت .إﻻ أﻧﻨﺎ
ﻗﺪ ﻧﺠﺪ ﺧﺼﺎﺋﺺ ﻣﺸﺘﺮﻛﺔ ﺑﯿﻦ أﺷﯿﺎء ﻣﺨﺘﻠﻔﺔ وﻟﻜﻦ ﺗﺘﻔﺎوت درﺟﺔ ھﺬه اﻟﺼﻔﺔ ﺑﯿﻦ ﺷﻲء
وآﺧﺮ.
ﻓﺎﻟﺤﺠﺮة؛ ﻟﮭﺎ درﺟﺔ ﺻﻼﺑﺔ ﻛﺒﯿﺮة ،ﺑﯿﻨﻤﺎ ﺗﻜﻮن ﻟﻤﺎدة اﻟﺸﺠﺮة ﺻﻼﺑﺔ أدﻧﻰ ﻣﻦ اﻷوﻟﻰ.
175
ﻛﺬﻟﻚ؛ ﻗﺪ ﯾﺘﻜﻮن ﺷﻲء ﻣﻦ أﺷﯿﺎء أﺧﺮى؛ ﻓﺎﻟﺸﺠﺮة ﺷﻲء ﻟﮭﺎ ﺳﺎق وھﻮ ﺷﻲء ،وﺗﺤﻤﻞ
أوراق ،واﻟﻮرﻗﺔ ﺷﻲء ،وھﻜﺬا.
إذا ﻧﻈﺮﻧﺎ ﺑﺼﻮرة أﻛﺜﺮ ﺷﻤﻮﻟﯿﺔ ﻟﻠﺤﯿﺎة ،ﻓﺴﻨﺠﺪ؛ أنّ ھﻨﺎك أﻧﻮاع ﻣﻦ اﻷﺷﺠﺎر .ﺷﺠﺮة اﻟﺘﻔﺎح،
ﺷﺠﺮة ،اﻟﻠﯿﻤﻮن ،ﺷﺠﺮة اﻟﺮﻣﺎن ،واﻟﻜﺜﯿﺮ اﻟﻜﺜﯿﺮ .ھﻨﺎك إذن ،ﻓﺼﯿﻠﺔ أم ﻟﮭﺬه اﻷﺷﺠﺎر وﻛﻞ
اﻟﺸﺠﺮ ﯾﺘﻔﺮع ﻣﻨﮭﺎ .وھﻲ ﻓﺼﯿﻠﺔ اﻟﻨﺒﺎت اﻟﺘﻲ ﯾﺘﻔﺮع ﻣﻨﮭﺎ اﻟﺰھﺮ واﻟﺤﺸﺎﺋﺶ واﻟﺸﺠﺮ.
أﯾﻀﺎ؛ ﻓﺼﯿﻠﺔ اﻟﺤﯿﻮان ،ﯾﺘﻔﺮع ﻣﻨﮭﺎ اﻟﺬﺋﺐ واﻟﻨﻤﺮ واﻷﺳﺪ ،وﯾﺘﻔﺮع ﻣﻨﮭﺎ اﻷرﻧﺐ واﻟﻐﺰال،
وﻛﺬﻟﻚ اﻟﻨﺴﺮ واﻟﻌﺼﻔﻮر .ﻓﻤﻦ اﻟﻔﺼﯿﻠﺔ ﺗُﺸﺘﻖ اﻷﺷﯿﺎء واﻟﻜﺎﺋﻨﺎت .أو ﻧﺸﺘﻖ ﻣﻦ اﻟﻔﺼﯿﻠﺔ،
ﺻﻨﻔﺎ آﺧﺮ ﯾﺸﻜﻞ ﻓﺼﯿﻠﺔ أﺧﺮى ﺛﻢ ﻧﺸﺘﻖ ﻣﻦ ھﺬه اﻟﻔﺼﯿﻠﺔ اﻟﻨﮭﺎﺋﯿﺔ ﻛﺎﺋﻨﺎ.
ﻓﻔﺼﯿﻠﺔ اﻟﺤﯿﻮان؛ ﻧﺸﺘﻖ ﻣﻨﮭﺎ ﻓﺼﯿﻠﺔ أو ﺻﻨﻒ اﻟﺰواﺣﻒ .ﻛﺬﻟﻚ ﻧﺸﺘﻖ ﻣﻨﮭﺎ ﻓﺼﯿﻠﺔ اﻟﺼﻨﻒ
اﻟﻄﺎﺋﺮ وھﻲ اﻟﻄﯿﻮر .وﻧﺸﺘﻖ ﻣﻦ ﻓﺼﯿﻠﺔ اﻟﺤﯿﻮان ﻛﺬﻟﻚ ﺻﻨﻒ اﻟﺴﺎﺑﺤﺎت ،وھﻲ ﻓﺼﯿﻠﺔ
اﻷﺳﻤﺎك.
اﻟﻤﺒﺮﻣﺞ اﻟﻘﺪﯾﻢ؛ ﻛﺎن ﺣﯿﻦ ﯾﺨﻄﻂ ﻟﺒﺮﻧﺎﻣﺠﮫ ،ﯾﺬھﺐ ﻓﻲ ﻓﻜﺮه ﻟﯿﺮى ﻣﺎ ھﻲ اﻷﻓﻌﺎل اﻟﺘﻲ ﯾﺠﺐ
أن ﺗﺘﻮاﻓﺮ ﻟﺘﺄدﯾﺔ ﻣﮭﻤﺔ ﻣﺎ .أﻣﺎ اﻟﻤﺒﺮﻣﺞ اﻟﻐﺮﺿﻲ اﻟﺘﻮﺟﮫ؛ ﻓﺈﻧﮫ ﯾﺬھﺐ ﻓﻲ ﻓﻜﺮه ﻟﯿﺮى ﻣﺎ ھﻲ
اﻷﻏﺮاض واﻷﺷﯿﺎء واﻟﻜﺎﺋﻨﺎت اﻟﺘﻲ ﺗﺤﻘﻖ ﻟﮫ اﻟﻮظﯿﻔﺔ اﻟﺘﻲ ﯾﺒﻐﯿﮭﺎ .ﻓﺬاك؛ ﯾﻔﻜﺮ ﺑﺎﻷﻓﻌﺎل،
وھﺬا؛ ﯾﻔﻜﺮ ﺑﺎﻷﺷﯿﺎء.
إذن؛ أﺻﺒﺤﺖ اﻟﻨﻈﺮة أﺷﻤﻞ ،ﻷنّ اﻟﺸﻲء ﯾﺘﻀﻤﻦ اﻟﺨﺼﺎﺋﺺ واﻷﻓﻌﺎل.
176
ﺍﻟﻔﺼﻴﻠﺔ؛ ﺻﻨﺎﻋﺔ ﳕﻂ
ﻛﻤﺎ ﻗﻠﻨﺎ؛ ﯾﻤﻜﻨﻨﺎ ﻓﻲ c++أن ﻧﺼﻨﻊ أﻧﻤﺎطﺎ ﻛﻤﺎ ﯾﺤﻠﻮ ﻟﻨﺎ .وﻟﻜﻦ ﺻﻨﺎﻋﺔ اﻟﻨﻤﻂ ﻓﻲ اﻟﻔﺼﯿﻠﺔ أو
ﻓﻲ اﻟﺴﺠﻞ أو ﻓﻲ ﻏﯿﺮ ذﻟﻚ؛ إﻧﻤﺎ ﺗﻌﺘﻤﺪ أﺻﻼ ﻋﻠﻰ أﻧﻤﺎط أﺳﺎس ﻣﺘﻮاﺟﺪة ﻓﻲ ﻛﯿﺎن اﻟﻠﻐﺔ
ﻛﺎﻟﺼﺤﯿﺢ ،intواﻟﻨﺺ ، stringوﻏﯿﺮ ذﻟﻚ .ﻓﻨﻤﻂ اﻟﻄﺎﻟﺐ ﻛﻤﺎ ﺗﺬﻛﺮ؛ ﻗﺪ ﻛﺎن ﻣﻦ ﻧﻤﻂ
ﻧﺼﻲ ﻟﻼﺳﻢ ،وﻧﻤﻂ ﻋﺪدي ﻟﻠﺪرﺟﺔ .ﻓﺄﻧﺖ ﺗﺮﻛﺐ ﻣﻦ أﻧﻤﺎط أﺳﺎس ﻟﺘﺤﺼﻞ ﻋﻠﻰ ﻧﻤﻂ ﻣﺮاد.
ھﺬا ﯾﺸﺒﮫ اﻟﻌﻨﺎﺻﺮ اﻷﺳﺎس وﻛﯿﻒ ﺗﺄﺗﻲ ﻣﻨﮭﺎ ﻣﺮﻛﺒﺎت أﺧﺮى.
ﻟﺼﻨﺎﻋﺔ ﻧﻤﻂ ﻓﺼﯿﻠﺔ ﻧﺤﺘﺎج اﻟﻰ ﻛﻠﻤﺔ ﻣﻔﺘﺎﺣﯿﺔ ﻟﺬﻟﻚ وھﻲ classﺛﻢ ﻗﻮﺳﯿﻦ ﻣﻌﻘﻮﻓﯿﻦ ﺑﯿﻨﮭﻤﺎ
ﻛﺘﻠﺔ ﺑﯿﺎﻧﺎت ﻟﺘﺤﺪد اﻟﺨﺼﺎﺋﺺ واﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻜﺎﺋﻨﺎت اﻟﻔﺼﯿﻠﺔ اﻻﺗﺼﺎف ﺑﮭﺎ واﻟﻘﯿﺎم
ﺑﻮظﺎﺋﻔﮭﺎ ،ﺛﻢ ﯾﻨﺘﮭﻲ اﻟﺒﻨﺎء ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ.
{ struct student
;]char name[30
;int Physics
;int Mathematic
;}
{ Class student
;]char name[30
;int Physics
;int Mathematic
;}
177
ھﻨﺎ ﺑﻨﯿﻨﺎ ﻧﻤﻄﺎ ﺟﺪﯾﺪا ،ھﻮ ﻧﻤﻂ اﻟﻄﺎﻟﺐ وأﻋﻄﯿﻨﺎه ﺧﺼﺎﺋﺺ وﺻﻔﺎت ،ﻟﻜﻦ ـ ﻛﻤﺎ ﺗﺬﻛﺮـ ﻓﺒﻨﯿﺔ
اﻟﻔﺼﯿﻠﺔ ﺗﻨﺸﺊ أﻓﻌﺎﻻ وﻋﻤﻠﯿﺎت أﯾﻀﺎ؛ ﻟﺬﻟﻚ دﻋﻨﺎ ﻧﺄﺧﺬ ﻣﺜﺎﻻ أﺑﺴﻂ ﻟﻨﺠﻌﻞ ﻓﯿﮫ ذﻟﻚ وﻟﻨﻔﮭﻢ
أﻛﺜﺮ ﺑﻨﯿﺔ اﻟﻔﺼﯿﻠﺔ :ﻣﺜﻠﻤﺎ ﺗﻌﻠﻢ ،ﻓﻠﺸﻜﻞ اﻟﻤﺴﺘﻄﯿﻞ طﻮل وﻋﺮض ﺳﻨﺮﻣﺰ ﻟﮭﻤﺎ ﺑـ x,yوﺑﮭﺬا
ﻓﺈنّ ﻣﺴﺎﺣﺔ اﻟﻤﺴﺘﻄﯿﻞ areaﺗﻜﻮن ﺑﻀﺮب ﻗﯿﻢ ﺿﻠﻌﯿﮫ .إذن ﻟﻨﺒﻨﻲ ﻓﺼﯿﻠﺔ اﻟﻤﺴﺘﻄﯿﻞ
: rectangle
{ class rectangle
;int x, y
;}
ﻛﻤﺎ ﺗﺮى؛ ﻓﺈنّ ﺟﻤﻠﺔ اﻟﺘﻌﻠﯿﻤﺎت ﻟﺪﯾﻨﺎ ھﻨﺎ ،ھﻲ ﻓﻘﻂ ﺗﺼﺮﯾﺢ ﻋﻦ ﻣﺘﻐﯿﺮﯾﻦ ﻋﺪدﯾﯿﻦ ﺻﺤﯿﺤﯿﻦ.
ﻓﯿﻤﺎ ﺑﻌﺪ ،اذا أﻋﻄﯿﻨﺎ ﻟـ xﻗﯿﻤﺔ؛ ﻓﺈنّ ھﺬا ﺳﯿﻌﻨﻲ طﻮل اﻟﻀﻠﻊ ،xوﻛﺬﻟﻚ ﺑﺎﻟﻨﺴﺒﺔ ﻟـ . y
اﻧﻈﺮ اﻟﻰ ﺑﺴﺎطﺔ ﺑﻨﯿﺔ اﻟﻔﺼﯿﻠﺔ ،إﻧّﮭﺎ ھﻨﺎ ﺗﺮﺳﻢ إﻟﻰ إﻣﻜﺎﻧﯿﺔ إﻋﻄﺎء ﺧﺎﺻﯿﺔ اﻟﻄﻮل ﻟﻜﻞ ﻣﻦ
، x,yأي اﻟﻰ إﻣﻜﺎﻧﯿﺔ وﺿﻊ ﺻﻔﺎت ﺑﺪرﺟﺔ ﻣﺎ .وﻣﺮة أﺧﺮى ﺗﺬﻛﺮ ﺑﺄنّ اﻟﻔﺼﯿﻠﺔ ﯾﻤﻜﻦ أن
ﺗﺮﺳﻢ أﯾﻀﺎ ﻹﺟﺮاء ﻓﻌﻞ وﻋﻤﻠﯿﺔ ﯾﻘﻮم ﺑﮭﺎ ﻛﺎﺋﻦ ﻣﺸﺘﻖ ﻣﻨﮭﺎ ،أي ﻣﻦ اﻟﻔﺼﯿﻠﺔ .وﻟﻌﻤﻞ ذﻟﻚ
ﯾﻠﺰﻣﻨﺎ اﻟﺘﺼﺮﯾﺢ ﻋﻦ داﻟﺔ ،ﻷنّ اﻟﺪاﻟﺔ ـ ﻛﻤﺎ ﻋﺮﻓﺖ ـ ھﻲ ﻋﺒﺎرة ﻋﻦ إﺟﺮاء وﺗﻨﻔﯿﺬ ﻋﻤﻠﯿﺔ.
ﻓﯿﻤﺎ ﯾﻠﻲ ﺳﻨﻌﻠﻦ ﻋﻦ داﻟﺔ ﺑﺎﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ وﺑﻜﺘﺎﺑﺔ ﻋﻤﻠﮭﺎ أﯾﻀﺎ داﺧﻞ ﺑﻨﯿﺔ اﻟﻔﺼﯿﻠﺔ:
{ class rectangle
;int x, y
} ;)int area () { return (x*y
;}
178
اﻵن اذا ﻣﺎ أﻧﺸﺄﻧﺎ ﻛﺎﺋﻨﺎ ﻣﻦ ھﺬه اﻟﻔﺼﯿﻠﺔ ،ﻓﺈﻧّﻨﺎ ﺳﻨﺴﺘﻄﯿﻊ ﺗﺤﻤﯿﻠﮫ ﺑﺼﻔﺎت اﻟﻄﻮل وﺳﯿﻜﻮن
ﺑﺈﻣﻜﺎﻧﮫ إﺟﺮاء ﻋﻤﻠﯿﺔ إﯾﺠﺎد اﻟﻤﺴﺎﺣﺔ .وﻓﯿﻤﺎ ﯾﻠﻲ اﻟﻤﺜﺎل اﻟﻜﺎﻣﻞ ﻟﺬﻟﻚ:
دﻋﻨﺎ ﻧﺄﺧﺬ ﻣﺜﺎﻻ أﺑﺴﻂ ﻟﻨﻔﮭﻢ ﺑﻨﯿﺔ اﻟﻔﺼﯿﻠﺔ :ﻋﻨﺪﻣﺎ ﺳﺘﺒﻠﻎ ﻣﺮﺣﻠﺔ ﻣﺘﻘﺪﻣﺔ ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت؛
ﺳﺘﻌﻠﻢ أﻧّﮫ ﻟﺘﻌﯿﯿﻦ ﻧﻘﻄﺔ ﻋﻠﻰ ورﻗﺔ ،ﻓﺈﻧﮫ ﯾﻠﺰﻣﻚ ﺧﻄﯿﻦ ﻣﺘﻘﺎطﻌﯿﻦ ـ أﻓﻘﻲ وﻋﻤﻮدي ـ.
أي :ﻋﻨﺪﻣﺎ ﯾﻠﺘﻘﻲ اﻟﺨﻂ اﻷﻓﻘﻲ ﻣﻊ اﻟﻌﻤﻮدي؛ ﻓﺈنّ ذﻟﻚ ﯾﺸﻜﻞ ﻧﻘﻄﺔ ،ھﻲ ﻧﻘﻄﺔ اﻟﺘﻘﺎطﻊ.
179
ﺍﻷﺳﺲ ﺍﻟﺜﻼﺛﺔ ﻟﻠﱪﳎﺔ ﺍﻟﻜﺎﺋﻨﻴﺔ
اﻟﺘﻐﻠﯿﻒ
اﻟﻮراﺛﺔ
اﻟﺘﺸﺎﻛﻞ
ﺳﺄذﻛﺮ ﺷﺮﺣﺎ ﻓﻲ ﺗﻌﺪﯾﻞ ﻻﺣﻖ ﺑﺎذن ﷲ ﻣﻊ اﺻﺪار آﺧﺮ أﻛﻤﻞ ﻓﯿﮫ ﻧﻮاﻗﺺ اﻟﻤﻨﮭﺞ
وﻣﻼﺣﻈﺎت اﻻﺻﺪﻗﺎء.
ﻟﻐـﺔ C#
اذا ﻛﻨﺖ ﻓﮭﻤﺖ وأﺗﻘﻨﺖ ، C++ﻓﺈنّ ﺗﻌﻠﻤﻚ ﻟـ C#ﺳﯿﻜﻮن ﯾﺴﯿﺮا ﺟﺪا ،ﻟﻜﻮن اﻟﻠﻐﺘﯿﻦ
ﻣﺘﺸﺎﺑﮭﺘﯿﻦ إﻟﻰ درﺟﺔ ﻛﺒﯿﺮة.
أﺧﺬت c#ﻣﻦ c++ﺗﻌﺎﺑﯿﺮھﺎ ﻓﺎﻛﺘﺴﺒﺖ ﺑﺬﻟﻚ ﻗﻮة أداﺋﮭﺎ ،وأﺧﺬت ﻣﻦ ﻣﻈﮭﺮ ﻓﯿﺠﻮال ﺑﯿﺰك
ﺳﮭﻮﻟﺘﮫ وروﻧﻘﮫ ،ﻓﻜﺎﻧﺖ ﺑﺬﻟﻚ ﻟﻐﺔ ﺟﻤﯿﻠﺔ ﺟﺪا ،وﺣﺎﻛﺖ ﺑﺄﺳﻠﻮﺑﮭﺎ وﺑﻨﺎﺋﮭﺎ ﻟﻐﺔ ﺟﺎﻓﺎ اﻟﻜﺎﺋﻨﯿﺔ
اﻟﺘﻮﺟﮫ ﺑﺸﻜﻞ ﻛﻠﻲ؛ ﻓﻜﺎﻧﺖ ﺑﺬﻟﻚ ﻟﻐﺔ ﻗﺪ أﺧﺬت ﻣﻦ ﻛﻞ ﺷﻲء ﻣﺤﺎﺳﻨﮫ .ﻓﻜﺎﻧﺖ اﻟﻠﻐﺔ اﻟﻤﺜﻠﻰ
ﺣﺘﻰ اﻵن.
وﺑﻤﺎ أنّ ﺑﻨﺎء ﺟﻤﻠﮭﺎ ﻣﺸﺎﺑﮫ ﻟـ ، c++ﻟﺬﻟﻚ ﺳﯿﻜﻮن ﻣﺮورﻧﺎ ﻋﻠﯿﮭﺎ ﺳﺮﯾﻌﺎ ،ﻛﻮن اﻟﺬي ﻓﮭﻢ
، c++ﻻﺑﺪ وأن ﯾﻜﻮن اﻵن ﻣﺒﺮﻣﺠﺎ ﯾﻤﺘﻠﻚ ذﺧﯿﺮة ﻓﻲ ﺗﻔﮭﻢ اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﯿﺔ.
180
رأﯾﻨﺎ أنّ اﻟﻮﺣﺪة اﻷﺳﺎس ﻓﻲ C++ھﻲ اﻟﺪاﻟﺔ ،وأنّ ھﻨﺎك داﻟﺔ أوﻟﻰ ﻻﺑﺪ ﻣﻨﮭﺎ ،ھﻲ اﻟﺪاﻟﺔ
. mainﻣﻊ اﻣﻜﺎﻧﯿﺔ ﺑﻨﺎء ﻓﺼﯿﻠﺔ أو ﻓﺼﺎﺋﻞ ﻟﻠﻮﻟﻮج اﻟﻰ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ.
ﻓﻲ ، C#اﻟﻮﺣﺪة اﻟﺮﺋﯿﺴﺔ ،ھﻲ اﻟﻔﺼﯿﻠﺔ .وھﻨﺎك ﻓﺼﯿﻠﺔ أوﻟﻰ ﻻﺑﺪ ﻣﻨﮭﺎ وھﻲ ﺗﺤﻮي اﻟﺪاﻟﺔ
mainﻓﻲ ﺛﻨﺎﯾﺎ ھﺬه اﻟﻔﺼﯿﻠﺔ .ﻓﻔﻲ ، C#ﯾﻜﻮن اﻻﺗﺠﺎه اﻟﺒﺮﻣﺠﻲ ﻛﺎﺋﻨﻲ اﻟﻮﺟﮭﺔ ﺑﺸﻜﻞ ﻛﻠﻲ
وﻣﻦ اﻟﻠﺤﻈﺔ اﻷوﻟﻰ.
181