You are on page 1of 181

‫ﺗﻮﻃﺌﺔ ﺑﻘﻠﻢ‪ :‬ﺧﺎﻟﺪ ﺍﻟﺴﻌﺪﺍﱐ‬

‫ﻛﺎﻧﺖ اﻟﻌﺮب ﻗﺪﯾﻤﺎ ﺗﻘﻮل‪ :‬ﺧﯿﺮ اﻟﻔﻘﮫ ﻣﺎ ﺣﺎﺿﺮت ﺑﮫ‪ ،‬وإﺳﻘﺎطﺎ ﻟﮭﺬا اﻟﻘﻮل ﻋﻠﻰ واﻗﻌﻨﺎ‬
‫اﻟﺒﺮﻣﺠﻲ ﻧﺴﺘﻄﯿﻊ أن ﻧﻘﻮل‪ :‬ﺧﯿﺮ اﻟﺒﺮﻣﺠﺔ ﻣﺎ ﻛﺘﺒﺖ ﻋﻨﮫ‪ ،‬ﻣﺎ ﻋﻠﻤﺘﮫ ﻏﯿﺮك‪ ،‬ﻣﺎ ﺳﻌﯿﺖ ﺟﺎھﺪا‬
‫إﻟﻰ ﺗﻌﻤﯿﻤﮫ وﻧﺸﺮه‪ ،‬ﻓﻼ ﺧﯿﺮ ﻓﻲ زرع ﻻ ﯾﻨﺜﺮ‪ ،‬وﻻ ﻧﻔﻊ ﻓﻲ ﻋﻠﻢ ﻻ ﯾﻨﺸﺮ‪ ،‬وﻻ ﯾﺪرك اﻻﺑﺘﻜﺎر‬
‫ﺑﺎﻻﺣﺘﻜﺎر‪ ،‬وﻻ ﯾﺒﻠﻎ اﻟﻨﺼﺮ ﺑﺎﻟﺤﺼﺮ‪.‬‬
‫ﻗﺒﻞ ﺳﻨﺘﯿﻦ أو أﻛﺜﺮ ﻣﻦ ﺗﺎرﯾﺦ ﻛﺘﺎﺑﺔ ھﺬه اﻟﺴﻄﻮر‪ ،‬ﻛﻨﺎ ﻗﺪ دﻋﻮﻧﺎ ﻓﻲ إﺣﺪى ﻣﻘﺪﻣﺎت ﺳﻠﺴﻠﺔ ﻛﻦ‬
‫أﺳﺪا ﻟﻺﺑﺪاع‪ ،‬إﻟﻰ اﻹﺳﮭﺎم ﻓﻲ ﺗﻄﻮﯾﺮ اﻟﻤﺤﺘﻮى اﻟﻌﺮﺑﻲ اﻟﻤﻜﺘﻮب‪ ،‬ﺳﻌﯿﺎ ﻣﻨﺎ إﻟﻰ ﺳﺪ اﻟﺜﻐﺮ‬
‫وﺟﺒﺮ اﻟﻜﺴﺮ‪ ،‬ﻷن اﻟﻨﻘﺺ ﺑﺮز ﺑﺸﻜﻞ رھﯿﺐ‪ ،‬وﺻﺎر ﻣﻦ اﻟﻤﺴﺘﺒﻌﺪ ﺟﺪا أن ﺗﺒﺤﺚ ﻋﻦ ﻣﺸﻜﻠﺔ‬
‫ﺑﺮﻣﺠﯿﺔ ﻓﻲ ﻣﺤﺮﻛﺎت اﻟﺒﺤﺚ ﻓﺘﺠﺪ ﻟﮭﺎ ﺣﻼ ﻣﻜﺘﻮﺑﺎ ﺑﺎﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ اﻟﻔﺼﺤﻰ‪ ،‬ﻣﻤﺎ ﺣﺬا ﺑﺠﻤﯿﻊ‬
‫رواد اﻟﺒﺮﻣﺠﺔ إﻟﻰ اﺳﺘﻌﻤﺎل اﻟﻠﻐﺎت اﻷﺟﻨﺒﯿﺔ ﻛﻮﺳﯿﻠﺔ ﻟﻠﺒﺤﺚ واﻹﻓﺤﺎء واﻟﺘﻨﻘﯿﺐ‪ ،‬ﻓﺎﺳﺘﻮﺳﻌﺖ‬
‫اﻟﻔﺮج وﺗﻔﺎﻗﻢ اﻟﺼﺪع‪.‬‬
‫ﻟﻜﻦ اﻟﺪﻋﻮة اﻟﺘﻲ ﻛﻨﺎ ﻗﺪ أﺻﺪرﻧﺎھﺎ ﺟﺰاﻓﺎ أﺗﺖ أﻛﻠﮭﺎ ﺑﻌﺪ ﻣﺪة‪ ،‬ﺣﯿﻨﻤﺎ ﺑﻌﺚ إﻟﯿﻨﺎ اﻷﺳﺘﺎذ ﺑﺎﺳﻞ‬
‫ﻋﺒﺪ ﷲ ﻣﻦ اﻟﻌﺮاق ﺑﮭﺬا اﻟﻜﺘﺎب اﻟﻤﺎﺗﻊ اﻟﻨﺎﻓﻊ اﻟﺬي ﺳﻨﺘﺤﺪث ﻋﻨﮫ ﻓﯿﻤﺎ ﯾﻠﻲ‪ ،‬وﻗﺒﻠﮫ ﺑﻌﺚ إﻟﯿﻨﺎ‬
‫اﻹﺧﻮة اﺳﻤﺎﻋﯿﻞ اﻟﺸﮭﺎﻟﻲ و ھﺎﻧﻲ ﻋﺒﺪ اﻟﺮﺣﻤﻦ ﻣﻦ ﺑﻼد اﻟﯿﻤﻦ ﻛﺘﺎﺑﺎ ﺣﻮل ﻟﻐﺔ اﻟﺴﻲ ﺑﻠﺲ‬
‫ﺑﻠﺲ‪.‬‬
‫اﺳﻢ اﻟﻜﺘﺎب ﻛﻤﺎ ورد ﻣﻌﻨﺎ ﻓﻲ ﺻﻔﺤﺔ اﻟﻐﻼف ھﻮ‪ :‬اﻟﻨﻈﺮات اﻟﺪﻗﯿﻘﺔ ﻓﻲ ﻣﻔﺎھﯿﻢ اﻟﺒﺮﻣﺠﺔ‬
‫اﻟﻌﻤﯿﻘﺔ )أﺳﺲ اﻟﺘﻔﻜﯿﺮ اﻟﺒﺮﻣﺠﻲ – ﻟﻐﺔ ‪ C++‬ﻧﻤﻮذﺟﺎ( ﻛﺘﺒﮫ اﻷﺳﺘﺎذ ﺑﺎﺳﻞ ﻋﺒﺪ ﷲ ﻓﻲ‬
‫اﻟﺒﺪاءة ﻷﺑﻨﺎﺋﮫ اﻷﺑﺮار رﻏﺒﺔ ﻣﻨﮫ ﻓﻲ ﺗﺒﺴﯿﻂ ﻣﻔﮭﻮم اﻟﺒﺮﻣﺠﺔ واﻟﺘﻔﻜﯿﺮ اﻟﺮﯾﺎﺿﻲ واﻟﻤﻨﻄﻘﻲ ﻓﻲ‬
‫أذھﺎن اﻟﻨﺎﺷﺌﺔ‪ ،‬وﻗﺪ أﺻﺎب ﻓﻲ ذﻟﻚ وأﺟﺎد‪ ،‬ﺳﯿﻤﺎ وأﻧﮫ ﺳﻠﻚ ﻓﻲ ﻟﻐﺘﮫ اﻟﻜﺘﺎﺑﯿﺔ ﻣﺴﻠﻜﺎ ﺳﻠﺴﺎ‬
‫وﺟﻨﺢ ﻧﺤﻮ اﻟﺘﺒﺴﯿﻂ واﻟﺘﺴﮭﯿﻞ وﺗﻘﺪﯾﻢ أﻣﺜﻠﺔ ﻣﻦ اﻟﻮاﻗﻊ ﻟﻜﻲ ﯾﻜﻮن اﻟﻤﻔﮭﻮم اﻟﺒﺮﻣﺠﻲ اﻟﻤﺠﺮد‬
‫ﻗﺎﺑﻼ ﻟﻼﺳﺘﯿﻌﺎب واﻟﻔﮭﻢ‪.‬‬

‫‪2‬‬
‫ﻧﺎھﯿﻚ ﻋﻦ اﻷﺳﻠﻮب اﻟﻌﻠﻤﻲ اﻟﺬي ﯾﻘﺪم ﺑﮫ اﻷﺳﺘﺎذ ﺑﺎﺳﻞ ﻣﺎدﺗﮫ‪ ،‬ﻓﯿﺴﻮق ﻟﻚ اﻷﻣﺜﻠﺔ ﻣﻦ واﻗﻊ‬
‫ﻋﻠﻢ اﻟﻔﯿﺰﯾﺎء ﺳﻮﻗﺎ‪ ،‬ﻓﺘﺠﺪه ﯾﺸﺮح ﻟﻚ ﺗﻤﺜﯿﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺑﺎﻻﺳﺘﻨﺎد إﻟﻰ ﻣﺎ ﯾﻘﻊ‬
‫ﻓﻌﻠﯿﺎ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﺤﺎﺳﺒﺔ ﺑﺎﻋﺘﺒﺎرھﺎ ﺟﮭﺎزا اﻟﻜﺘﺮوﻧﯿﺎ‪ ،‬وﺑﺎﻋﺘﺒﺎر اﻟﻮﺣﺪات اﻟﺜﻨﺎﺋﯿﺔ ‪Bits‬‬
‫ﺗﺪﻓﻘﺎ ﻟﻠﺘﯿﺎر ) ﺗﯿﺎر ﯾﻤﺮ‪ ،‬ﺗﯿﺎر ﻻ ﯾﻤﺮ(‪.‬‬
‫وﻟﻜﻲ ﻻ ﯾﻨﻔﺮ اﻷدﺑﯿﻮن ﻣﻦ اﻟﻜﺘﺎب ﯾﻘﻮم ﻣﺆﻟﻔﮫ ﺑﺴﺮد أﻣﺜﻠﺔ ﺑﯿﻦ اﻟﻔﯿﻨﺔ واﻷﺧﺮى ﺑﻌﯿﺪا ﻋﻦ‬
‫ﻋﺎﻟﻢ اﻟﻔﯿﺰﯾﺎء واﻟﺮﯾﺎﺿﯿﺎت ‪ ،‬ﻓﯿﺘﺤﺪث ﻋﻦ أﻧﻈﻤﺔ اﻟﻌﺪ وﯾﻌﻄﻲ ﻟﮭﺎ ﻣﺜﺎﻻ ﺑﻠﻌﺒﺔ ﺗﺴﺠﯿﻞ اﻟﻨﻘﺎط‬
‫ﻋﻨﺪ ﻛﻞ ﺧﺴﺎرة أو ﻓﻮز‪ ،‬وھﻜﺬا دواﻟﯿﻚ‪.‬‬
‫ﻟﻜﻲ ﻻ ﯾﻄﻮل اﻟﺘﻤﮭﯿﺪ‪ ،‬ﻧﻜﺘﻔﻲ ﺑﮭﺬا اﻟﻘﺪر وﻧﺘﺮﻛﻜﻢ ﺗﺒﺪؤون رﺣﻠﺘﻜﻢ ﻣﻊ أﻋﻤﺎق ﻣﻔﺎھﯿﻢ اﻟﺒﺮﻣﺠﺔ‬
‫اﻟﺤﺪﯾﺜﺔ‪ ،‬راﺟﯿﻦ ﻣﻦ ﷲ اﻟﻌﻠﻲ اﻟﻘﺪﯾﺮ أن ﯾﺘﻘﺒﻞ ﻣﻨﺎ وﻣﻨﻜﻢ ﺻﺎﻟﺢ اﻷﻋﻤﺎل‪ ،‬وأن ﯾﺮزﻗﻨﺎ وإﯾﺎﻛﻢ‬
‫اﻹﺧﻼص واﻟﺼﺪق‪ ،‬وأن ﯾﺠﺰي اﻷﺳﺘﺎذ ﺑﺎﺳﻞ ﻋﺒﺪ ﷲ ﺧﯿﺮ اﻟﺠﺰاء ﻋﻠﻰ إﺳﮭﺎﻣﮫ اﻟﻤﺒﺎرك‬
‫وﻛﺘﺎﺑﮫ اﻟﻄﯿﺐ‪ ،‬وأن ﯾﺒﺎرك ﻓﯿﮫ وﻓﻲ ﺻﺤﺘﮫ وأھﻠﮫ ووﻗﺘﮫ‪ ،‬وأن ﯾﻘﺮ ﻋﯿﻨﯿﮫ ﺑﺄﺑﻨﺎﺋﮫ وأن ﯾﺤﻔﻈﮭﻢ‬
‫أﺟﻤﻌﯿﻦ ﺑﻤﺎ ﺣﻔﻆ ﺑﮫ اﻟﺬﻛﺮ اﻟﺤﻜﯿﻢ‪.‬‬
‫ﺣﺘﻰ ﻻ أﻏﻔﻞ ﻓﺈن دﻋﻮة اﻹﺳﮭﺎم واﻟﻤﺸﺎرﻛﺔ ﻓﻲ إﺛﺮاء اﻟﻤﺤﺘﻮى اﻟﻤﻜﺘﻮب دﻋﻮة ﻋﺎﻣﺔ‬
‫وﻣﻔﺘﻮﺣﺔ ﻣﺎ ﻗﺪر ﷲ ﻟﻨﺎ اﻟﺒﻘﺎء‪ ،‬ﻓﻼ ﺷﻲء ﯾﻀﺎھﻲ ﺧﺪﻣﺔ أﻣﺔ اﻹﺳﻼم‪ ،‬وﺗﻠﻚ أﺳﻤﻰ اﻟﻤﺮاﺗﺐ‪،‬‬
‫وأﻛﺮم ﻣﻦ ﻛﺮم اﻟﻤﻨﺎﺳﺐ‪ ،‬وأﺷﺮف ﻣﻦ ﺷﺮف اﻟﻤﻨﺎﺻﺐ‪ ،‬ﺑﺎﻟﺘﻮﻓﯿﻖ واﻟﺴﺪاد ودام ﻟﻜﻢ اﻟﺒﺸﺮ‬
‫واﻟﻔﺮح‪.‬‬

‫ﺧﺎﻟﺪ اﻟﺴﻌﺪاﻧﻲ ﺑﺘﺎرﯾﺦ ‪ 28‬أﺑﺮﯾﻞ ‪2014‬‬

‫‪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‬‬
‫ﻧﻈﺮﺓ ﺃﻭﱃ‬
‫ﻋﻨﺪ اﻻطﻼع ﻋﻠﻰ أي ﻛﺘﺎب ﻟﻠﺒﺮﻣﺠﺔ؛ ﺳﺘﺠﺪ ﻧﺼﻮﺻﺎ ﺑﻜﻠﻤﺎت وﺟﻤﻞ ﻗﺪ ﺗﻜﻮن ﻏﺮﯾﺒﺔ ﻋﻠﯿﻚ‬
‫ﻷول ﻣﺮة‪ .‬ﻻﺑﺄس أن ﺗﻨﻈﺮ ﺑﺸﻜﻞ ﺳﺮﯾﻊ إﻟﻰ اﺣﺪ ﺗﻠﻚ اﻟﻨﺼﻮص ﻣﻦ ﻏﯿﺮ ﻓﮭﻢ إﻻ ﻛﺼﻮرة‬
‫ﻛﻠﯿﺔ ﻻ أﻛﺜﺮ‪:‬‬

‫ﺑﺮﻧﺎﻣﺞ ﺟﻤﻊ ﻋﺪدﯾﻦ ‪//‬‬

‫‪// function main begins program execution‬‬


‫>‪#include <iostream‬‬

‫)(‪int main‬‬
‫{‬
‫;‪int integer1‬‬ ‫‪// first number‬‬
‫;‪int integer2‬‬ ‫‪// second number‬‬ ‫;‪int sum‬‬ ‫‪// variable in‬‬
‫; ‪int Sum‬‬

‫;‪sum = integer1 + integer2‬‬ ‫‪// assignment result to sum‬‬

‫‪std::cout << "Sum is " << sum << std::endl; // print sum‬‬

‫;‪return 0‬‬ ‫‪// indicate that program ended successfully‬‬

‫‪} // end function main‬‬

‫ﻓﻲ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ اﻟﺴﺎﺑﻖ ﻛﻠﻤﺎت اﻧﻜﻠﯿﺰﯾﺔ ﻣﻦ ﺣﺮوف ﺻﻐﯿﺮة وﻛﺒﯿﺮة وارﻗﺎم‪ .‬وﻟﻜﻦ ﺑﺪاﯾﺔ‬
‫ﺳﺘﻼﺣﻆ ﺟﻤﻞ ﻋﺪﯾﺪة ﺗﺒﺪأ ﺑﺸﺮطﺘﯿﻦ ‪ //‬ﻣﺎﺋﻠﺘﯿﻦ‪ .‬وﺳﺘﻔﺎﺟﺄ ﺣﯿﻦ أﺧﺒﺮك ﺑﺄن ﺣﺬﻓﻚ ﻟﻤﺜﻞ ﺗﻠﻚ‬
‫اﻟﺠﻤﻞ ﻟﻦ ﯾﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ وﺗﻨﻔﯿﺬه ﺷﯿﺌﺎ‪ .‬ﻓﻜﻞ ﺟﻤﻠﺔ ﺗﺒﺘﺪئ ﺑﺸﺮطﺘﯿﻦ ‪ ، //‬ﻟﻦ ﯾﻠﺘﻔﺖ‬
‫إﻟﯿﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ وﻟﻦ ﺗﺆﺛﺮ ﻋﻠﻰ أداء اﻟﺒﺮﻧﺎﻣﺞ ﻛﺘﺒﺖ أم ﻟﻢ ﺗﻜﺘﺐ‪ .‬ذﻟﻚ ﻷنّ ﻛﻞ ﺷﻲء ﯾﻜﺘﺐ ﺑﻌﺪ‬
‫ﺷﺎرطﺘﯿﻦ‪ ،‬ﯾﻌﺘﺒﺮ ﻛﻤﻼﺣﻈﺎت ﻟﻚ أو ﻟﻤﻦ ﯾﻄﻠﻊ ﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ ﻟﺘﻮﺿﯿﺢ ﻏﺎﯾﺎت ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ‬
‫او ﺑﯿﺎن ﻓﺎﺋﺪة اﯾﻌﺎز ﻣﺎ أو ﻏﯿﺮ ذﻟﻚ‪ .‬ﺗﺴﻤﻰ ھﺬ ﺑﺠﻤﻞ اﻟﺘﻌﻠﯿﻘﺎت واﻟﻤﻼﺣﻈﺎت‪ .‬ﻛﺬﻛﺮك ﻻﺳﻢ‬
‫اﻟﺒﺮﻧﺎﻣﺞ او ﻣﺆﻟﻔﮫ‪ ،‬او ﻛﺬرك ﻟﺘﺎرﯾﺦ اﻧﺸﺎء اﻟﺒﺮﻧﺎﻣﺞ وﻛﺘﺎﺑﺘﮫ‪ ،‬أو ﻓﺎﺋﺪة ﺟﻤﻠﺔ واﻣﺮ ﻣﺎ أو ﻏﯿﺮ‬

‫‪13‬‬
‫ذﻟﻚ‪ .‬ـ ﻓﮭﺬه اﻟﺠﻤﻞ ﺗﻮﺟﮫ ﻟﻚ او ﻻي ﺷﺨﺺ ـ‪ .‬وھﻨﺎ ﺗﻔﮭﻢ ﺑﺄن اﻟﺒﺮﻧﺎﻣﺞ ﯾﺘﻜﻮن ﻣﻦ ﻧﻮﻋﯿﻦ‬
‫اوﻟﯿﯿﻦ ﻣﻦ اﻟﺠﻤﻞ؛ ﺟﻤﻞ ﯾﻘﺮؤھﺎ اﻟﺒﺮﻧﺎﻣﺞ وﺟﻤﻞ ﯾﻘﺮؤھﺎ اﻻﻧﺴﺎن‪ .‬ھﻨﺎك ﺟﻤﻠﺔ ﺗﻌﻠﯿﻖ أﺧﺮى‬
‫ﺳﻨﺄﺗﻲ ﻋﻠﯿﮭﺎ ﻓﯿﻤﺎ ﺑﻌﺪ ﺑﺈذن ﷲ‪.‬‬
‫ﻧﺸﺎھﺪ اﯾﻀﺎ ﻓﻲ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ اﻟﻤﻌﺮوض أﻗﻮاس ﻋﺎدﯾﺔ )( ‪ ،‬وأﻗﻮاس ﻣﻌﻘﻮﻓﺔ } { ‪،‬‬
‫وﻟﻜﻞ ﻧﻮع ﻏﺮض ﻣﻌﯿﻦ ﯾﻌﻨﯿﮫ‪ .‬اﻟﺠﻤﻞ ﻣﺎﺑﯿﻦ اﻷﻗﻮاس اﻟﻤﻌﻘﻮﻓﺔ } { ‪ ،‬ﺗﺴﻤﻰ ﻛﺘﻠﺔ ﺑﺮﻣﺠﯿﺔ‬
‫‪ ،Blocs‬ﺗﺆدي ﻣﮭﻤﺔ ﺻﻐﯿﺮة ﻣﻌﯿﻨﺔ‪ .‬ﺗﺘﺎﺑﻊ اﻟﻤﮭﺎم اﻟﺼﻐﯿﺮة ﯾﺸﻜﻞ وظﯿﻔﺔ أﻛﺒﺮ‪.‬‬
‫وﻣﺎ ﺑﯿﻦ اﻷﻗﻮاس اﻟﻌﺎدﯾﺔ )( ‪ ،‬ﻗﺪ ﺗﺄﺗﻲ رﻣﻮز أو ﻗﯿﻢ‪ ،‬ﻋﺎدة ﻣﺎ ﺗﺴﻤﻰ وﺳﻄﺎء ‪Parameters‬‬
‫ﺗﺤﻤﻞ أو ﺗﺒﻠﱢﻎ ﻗﯿﻢ‪.‬‬
‫ھﻨﺎك أﯾﻀﺎ ﻓﻮاﺻﻞ ﻣﻨﻘﻮطﺔ ؛ ‪ .‬اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮطﺔ ﻓﻲ آﺧﺮ اﻟﺠﻤﻠﺔ‪ ،‬ﺗﻌﻨﻲ ﻧﮭﺎﯾﺔ ﺗﻌﻠﯿﻤﺔ ﻣﺎ‪،‬‬
‫أو ﻧﮭﺎﯾﺔ أﻣﺮ وإﯾﻌﺎز ﯾﺠﺐ ﺗﻨﻔﯿﺬه أو إﺧﺒﺎر اﻟﺒﺮﻧﺎﻣﺞ ﺑﮫ‪.‬‬
‫ﻛﺬﻟﻚ ھﻨﺎك ﻋﻼﻣﺎت ورﻣﻮز وﺗﺮﻗﯿﻤﺎت‪ ،‬ﺳﻨﺄﺗﻲ ﻋﻠﻰ ﻣﻌﺎﻧﯿﮭﺎ‪ .‬وﻛﻞ ذﻟﻚ ﻷﺟﻞ اﻟﺘﻨﻈﯿﻢ‬
‫ﻟﻠﻌﺒﺎرات اﻟﺘﻲ ﺗﻌﻄﻲ ﻟﻠﻐﺔ ﻗﻮﺗﮭﺎ وﺟﻤﺎﻟﮭﺎ وﺣﺴﻦ ﺗﻨﺴﯿﻘﮭﺎ‪.‬‬

‫ﻛﻴﻒ ﺗﻘﺮﺃ ﺍﳊﺎﺳﺒﺔ ﺍﻟﻨﺺ ﺍﻟﱪﳎﻲ؟‬


‫رﺑﻤﺎ ﺗﺘﺴﺎءل اﻵن‪ :‬ﻛﯿﻒ ﺗﻔﮭﻢ اﻟﺤﺎﺳﺒﺔ ذﻟﻚ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ وھﻮ ﻣﻜﺘﻮب ﺑﺤﺮوف ﻣﻦ وﺿﻊ‬
‫اﻻﻧﺴﺎن؟‪ .‬ﻋﻠﯿﻚ ان ﺗﻌﻠﻢ اﻵن ﺑﺄﻧﻚ ﺣﯿﻦ ﺗﻄﺒﻊ أي ﺣﺮف ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﯿﺢ ﻓﺈنّ ﻟﻮﺣﺔ‬
‫اﻟﻤﻔﺎﺗﯿﺢ ﺳﺘﻨﻘﻞ اﺷﺎرة ﻛﮭﺮﺑﺎﺋﯿﺔ اﻟﻰ ﺟﮭﺎز اﻟﺤﺎﺳﺐ وھﺬه اﻻﺷﺎرة اﻟﻜﮭﺮﺑﺎﺋﯿﺔ ﺳﺘﻄﺒﻊ ﻋﻠﻰ‬
‫اﻟﺸﺎﺷﺔ ﻋﻠﻰ ﺷﻜﻞ ﺣﺮف واﻧﺖ ﺗﻌﻠﻢ ﺑﺄنّ وظﯿﻔﺔ اﻟﺸﺎﺷﺔ ھﻲ ﺗﺤﻮﯾﻞ اﻻﺷﺎرة اﻟﻜﮭﺮﺑﺎﺋﯿﺔ اﻟﻰ‬
‫ﻧﻘﺎط ﺿﻮﺋﯿﺔ ﺗﺮﺗﺴﻢ ﻋﻠﻰ ﺳﻄﺤﮭﺎ‪.‬‬
‫ﻓﺎﻟﺤﺎﺳﺒﺔ اذن ﻻﺗﻘﺮأ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ ﻛﻤﺎ ھﻮ ظﺎھﺮ ﻋﻨﺪك وﻟﻜﻦ ﺗﻔﺴﺮه ﻛﺈﺷﺎرات ﻛﮭﺮﺑﺎﺋﯿﺔ‬
‫ﻣﻌﯿﻨﺔ‪ .‬ﻓﺎﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ اﻟﻤﻌﺮوض ﻋﻠﻰ اﻟﺸﺎﺷﺔ ﯾﺨﺎطﺐ ﻓﻲ وﻗﺖ واﺣﺪ ﺑﺸﻜﻠﯿﻦ ﻣﺨﺘﻠﻔﯿﻦ؛‬
‫ﯾﺨﺎطﺒﻚ ﺑﺼﻮرﺗﮫ اﻟﻀﻮﺋﯿﺔ وﯾﺨﺎطﺐ اﺟﺰاء اﻟﺤﺎﺳﺒﺔ ﺑﺼﻮرﺗﮫ اﻟﻜﮭﺮﺑﺎﺋﯿﺔ‪.‬‬

‫‪14‬‬
‫ﺍﻵﻟﺔ ﺗﺪﺭﻙ ﺃﻡ ﺗﻘﻴﺲ؟‪.‬‬
‫ﺗﺴﺘﻌﻤﻞ اﻟﻤﺴﻄﺮة‪ ،‬ﻟﻘﯿﺎس اﻷطﻮال؛ ﻓﺎﻟﻤﺴﻄﺮة ﯾﻤﻜﻦ أن ﺗﻘﯿﺲ اﻟﻤﺴﺎﻓﺔ؛ ﻓﺎﻟﻤﺴﻄﺮة إذن ﺗﻘﺮأ‬
‫اﻟﺒﻌﺪ‪ .‬اﻟﻤﯿﺰان؛ ﯾﺘﺤﺴﺲ ﺑﻜﻤﯿﺔ اﻷﺛﻘﺎل اﻟﺘﻲ ﻋﻠﯿﮫ‪ ،‬ﻓﻜﻠﻤﺎ وﺿﻊ ﺛﻘﻞ ﻓﻲ ﻛﻔﺔ؛ ارﺗﻔﻌﺖ اﻟﻜﻔﺔ‬
‫اﻷﺧﺮى‪.‬‬
‫ھﻨﺎك ﻣﯿﺰان آﺧﺮ ﯾﺴﻤﻰ اﻟﻘﺒﺎن؛ وھﻮ ﻋﺒﺎرة ﻋﻦ ﻧﺎﺑﺾ‪ ،‬ﻛﻠﻤﺎ وﺿﻊ ﻓﻲ طﺮﻓﮫ وزن ﺗﺪﻟﻰ‬
‫إﻟﻰ اﻷﺳﻔﻞ‪ ،‬وھﻨﺎك ﺗﺪرﺟﺎت ﺑﻤﻘﺪار ذﻟﻚ اﻟﺘﻤﺪد‪ .‬ﻓﺈذا وﺿﻊ وزن ﻛﯿﻠﻮﻏﺮام واﺣﺪ؛ وﻗﻒ‬
‫اﻟﻤﺆﺷﺮ ﻋﻠﻰ رﻗﻢ ‪ ،1‬ﻓﺈذا وﺿﻊ ﻛﯿﻠﻮﻏﺮام آﺧﺮ؛ وﻗﻒ اﻟﻤﺆﺷﺮ ﻋﻠﻰ رﻗﻢ ‪ .2‬اﻷوزان ﺗﺮﻏﻢ‬
‫اﻟﻨﺎﺑﺾ ﻋﻠﻰ اﻟﺘﻤﺪد‪ ،‬واﻟﻘﺒﺎن ﻻ ﯾﺪرك ﻣﻌﺎﻧﻲ اﻟﺘﺪرﺟﺎت اﻟﻤﺮﺳﻮﻣﺔ اﻟﺘﻲ ﻋﻠﯿﮭﺎ ارﻗﺎم‪.‬‬

‫‪15‬‬
‫ھﺬا ﺗﻘﺮﯾﺒﺎ‪ ،‬ﻣﺎ ﻛﺎن ﯾﺤﺪث ﻓﻲ اﻟﺤﺎﺳﺒﺎت اﻷوﻟﻰ‪ ،‬اﻟﺘﻲ ﻛﺎﻧﺖ ﺗﺴﻤﻰ‪ ،‬ﺑﺎﻷﺟﮭﺰة اﻟﺘﻨﺎظﺮﯾﺔ ‪.‬‬
‫ﻓﮭﻲ ﻻ ﺗﺪرك ﻣﻌﻨﻰ اﻟﻨﺘﺎﺋﺞ اﻟﺘﻲ ﻧﻘﺮأھﺎ ﻋﻠﯿﮭﺎ‪ ،‬وﻻ ﺗﺘﺤﺴﺲ ﻣﻌﺎﻧﯿﮭﺎ‪ .‬ﻛﺬﻟﻚ اﻟﺤﺎل ﻣﻊ‬
‫اﻟﺤﺎﺳﺒﺎت اﻟﺤﺪﯾﺜﺔ اﻟﯿﺪوﯾﺔ وﻏﯿﺮھﺎ‪.‬‬

‫ﻣﻢ ﺗﺘﻜﻮﻥ ﺍﳊﺎﺳﺒﺔ؟‬


‫أﻧﺖ ﺑﻀﻐﻄﺔ ﻣﻔﺘﺎح‪ ،‬ﺗﺸﻌﻞ ﻣﺼﺒﺎﺣﺎ وﺗﻨﯿﺮ ﻏﺮﻓﺔ‪ .‬ﻷﻧّﻚ ﺟﻌﻠﺖ اﻟﻤﻔﺘﺎح اﻟﻜﮭﺮﺑﺎﺋﻲ ﯾﻤﺮر‬
‫طﺎﻗﺔ ﻛﮭﺮﺑﺎﺋﯿﺔ ﻟﻠﻤﺼﺒﺎح أو ﻷي ﺷﻲء‪ ،‬ﻓﯿﻌﻤﻞ‪ .‬ورﺑﻤﺎ ﺗﺠﺪ ﻣﻔﺎﺗﯿﺢ ﺗﻌﻤﻞ ﻋﻠﻰ اﻟﻠﻤﺲ أو‬
‫اﻟﺼﻮت أو ﻏﯿﺮ ذﻟﻚ؛ إﻻ أنّ ھﻨﺎك ﻣﻔﺎﺗﯿﺢ أدق وأدق وﺻﻐﯿﺮة ﺟﺪا ﺟﺪا وﺣﺴﺎﺳﺔ إﻟﻰ درﺟﺔ‬
‫ﻛﺒﯿﺮة وھﻲ اﻟﻤﻔﺎﺗﯿﺢ اﻻﻟﻜﺘﺮوﻧﯿﺔ اﻟﺘﻲ ﺗﺒﻨﻰ ﻣﻦ ﻗﻄﻊ اﻟﻜﺘﺮوﻧﯿﺔ وﺑﻄﺮﯾﻘﺔ ﺧﺎﺻﺔ‪.‬‬
‫اﻟﺤﺎﺳﺒﺔ‪ :‬ھﻲ ﻋﺒﺎرة ﻋﻦ آﻻف ﻣﺆﻟﻔﺔ ﻣﻦ ھﺬه اﻟﻤﻔﺎﺗﯿﺢ‪ ،‬اﻟﺘﻲ ﺗﺴﺘﻄﯿﻊ أن ﺗﺘﺤﺴﺲ ﺑﻤﺎ ﺗﻜﺘﺒﮫ‬
‫وﺑﻤﺎ ﺗﺪﺧﻠﮫ ﻓﻲ ذاﻛﺮﺗﮭﺎ‪ .‬ﻓﺈذا ﻣﺎ أوﻣﻀﺖ ﻧﻘﻄﺔ ﻣﺎ ﻋﻠﻰ اﻟﺸﺎﺷﺔ أو ﻣﺠﻤﻮﻋﺔ ﻧﻘﺎط‪ ،‬أو إذا ﻣﺎ‬
‫ﺳﻤﻌﺖ ﺻﻮﺗﺎ ﻣﺎ؛ ﻓﺎﻋﻠﻢ ﺑﺄنّ ھﻨﺎك ﻣﻔﺘﺎح أو ﻣﺠﻤﻮﻋﺔ ﻣﻔﺎﺗﯿﺢ‪ ،‬ﻗﺪ أ ُﻏﻠِﻘﺖ ﻓﻜﻮﻧﺖ ذﻟﻚ اﻟﻀﻮء‬
‫ﻋﻠﻰ اﻟﺸﺎﺷﺔ أو ذﻟﻚ اﻟﺼﻮت ﻓﻲ اﻟﺤﺎﻛﯿﺔ‪ .‬وھﺬه ﺻﻮرة ﺗﻘﺮﯾﺒﯿﺔ ﻣﻦ ﺟﺎﻧﺐ ﻣﺎ ﻟﻤﺎ ﯾﻮﺟﺪ ﻓﻲ‬
‫اﻟﺤﺎﺳﺒﺔ‪.‬‬

‫‪16‬‬
‫ﻣﻦ ﻳﻔﻜﺮ؟‪.‬‬
‫اﻟﻜﺜﯿﺮ ﯾﻈﻦ ﺧﻄﺄ ً ﺑﺄنّ اﻟﺤﺎﺳﺒﺔ ﺗﻘﻮم ﺑﺪور اﻟﺘﻔﻜﯿﺮ!‪ .‬وذﻟﻚ ﻻ ﯾﻤﻜﻦ إطﻼﻗﺎ‪ ،‬ﻷنّ اﻟﺤﺎﺳﺒﺔ‪ ،‬ھﻲ‬
‫ﺟﻤﺎد‪ ،‬ﻣﺒﻨﯿﺔ ﻣﻦ ﻗﻄﻊ ﺟﺎﻣﺪة‪ .‬اﻵﻟﺔ ﯾﻤﻜﻦ أن ﺗﻌﻄﯿﻚ ﺣﺮﻛﺎت ﻣﯿﻜﺎﻧﯿﻜﯿﺔ إذا ﻣﺎ زودﺗﮭﺎ ﺑﻄﺎﻗﺔ‬
‫ﻣﺎ‪ ،‬وإذا ﻣﺎ ﺟﻌﻠﺖ ﺗﺼﻤﯿﻤﮭﺎ ﻣﻨﺎﺳﺐ ﻟﺬﻟﻚ‪ .‬ﻓﺎﻟﻤﺤﺮك اﻟﻜﮭﺮﺑﺎﺋﻲ‪ ،‬ﯾﺪور وﺗﺴﺘﻄﯿﻊ أن ﺗﻀﻊ‬
‫ﻋﻠﻰ ﻣﺤﻮره اﻟﺪاﺋﺮ ﺷﺮﯾﻂ ﻣﺪرج ﻋﻠﯿﮫ أرﻗﺎم‪ ،‬ﻓﺈذا دار اﻟﻤﺤﻮر‪ ،‬اﻧﺴﺤﺐ اﻟﺸﺮﯾﻂ وﺑﺪا ﺑﺄنّ‬
‫اﻷرﻗﺎم ﺗﺘﻮاﻟﻰ أﻣﺎﻣﻚ وﻛﺄنّ اﻟﻤﺤﺮك ھﻮ اﻟﺬي ﯾﻌﺪ‪ .‬ھﻜﺬا ھﻲ اﻟﺤﺎﺳﺒﺔ ﺑﺼﻮرة ﺗﻘﺮﯾﺒﯿﺔ‪.‬‬

‫‪17‬‬
‫ﻟﻨﻔﺮض أﻧّﻚ ﺗﺮﯾﺪ ﺣﺴﺎب ﻣﺴﺎﺣﺔ أرض ﻣﺎ ﻣﺴﺘﻄﯿﻠﺔ‪ ،‬وأﻧّﻚ ﺗﻌﺮف ﻣﻘﺪار اﻟﻌﺮض واﻟﻄﻮل‪،‬‬
‫وأﻧّﻚ ﻧﺎوﻟﺖ ﻟﺼﺒﻲ ﺻﻐﯿﺮ ﺣﺎﺳﺒﺔ ﯾﺪوﯾﺔ وﻗﻠﺖ ﻟﮫ‪ :‬اﺿﻐﻂ ھﺬا اﻟﺰر اﻟﺬي ﻋﻠﯿﮫ اﻟﺮﻗﻢ ﻛﺬا‪.‬‬
‫واﻵن اﺿﻐﻂ ھﺬا اﻟﺰر اﻟﺬي ﻋﻠﯿﮫ إﺷﺎرة اﻟﻀﺮب‪ .‬واﻵن اﺿﻐﻂ اﻟﺰر اﻟﺬي ﯾﺤﻤﻞ اﻟﺮﻗﻢ‬
‫ﻛﺬا‪ .‬واﻵن اﺿﻐﻂ اﻟﺰر اﻟﺬي ﯾﺤﻤﻞ رﻣﺰ اﻟﻤﺴﺎواة‪ .‬ﻋﻨﺪ ذﻟﻚ ﺳﺘﻈﮭﺮ اﻟﻨﺘﯿﺠﺔ‪ .‬ﻣﻦ ﻛﺎن‬
‫اﻟﻤﻔﻜﺮ اﻟﺤﻘﯿﻖ أﻧﺖ أم اﻟﺼﺒﻲ أم اﻟﺤﺎﺳﺒﺔ اﻟﯿﺪوﯾﺔ؟‪ .‬ﺑﺎﻟﺘﺄﻛﯿﺪ ھﻮ أﻧﺖ وﻣﺎ اﻟﺼﺒﻲ واﻟﺤﺎﺳﺒﺔ‬
‫اﻟﯿﺪوﯾﺔ إﻻ ﻣﻨﻔﺬات ﻷواﻣﺮك وﻣﺴﺘﺠﯿﺒﺎت ﻟﻚ‪ .‬ﻓﮭﻜﺬا أﻧﺖ ﺗﻌﻤﻞ ﺣﯿﻦ ﺗﻘﻮم ﺑﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻣﺎ‬
‫ﻋﻠﻰ اﻟﺤﺎﺳﺒﺔ‪ .‬اﻧﺖ ﺗﻔﻜﺮ واﻟﺤﺎﺳﺒﺔ ﺗﻨﻔﺬ اواﻣﺮ ﺗﻔﻜﯿﺮك‪.‬‬

‫ﺍﻷﻭﺍﻣﺮ ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﻋﻨﺪ إﺧﺒﺎرك ﺑﺴﻌﺮ ﻟﻌﺒﺔ ﻓﮭﺬه ﻣﻌﻠﻮﻣﺔ ﺻﺎرت ﻟﺪﯾﻚ‪ .‬وﻋﻨﺪﻣﺎ ﺗﻌﻠﻢ انّ ﻣﻌﺪل وزن ﺗﻔﺎﺣﺔ‬
‫ﯾﺴﺎوي ‪ 100‬ﻏﺮام ﻓﮭﺬه ﻣﻌﻠﻮﻣﺔ أﺧﺮى أﯾﻀﺎ‪ .‬ﻓﺎﻟﻤﻌﻠﻮﻣﺎت ـ ﺑﮭﺬا اﻟﻤﻌﻨﻰ ـ ھﻲ ﻗﯿﻢ أﺷﯿﺎء‪.‬‬
‫اﻵن ﺗﻘﻮل ﻷﺧﯿﻚ‪ :‬أﻏﺴﻞ اﻟﺘﻔﺎﺣﺔ واﻗﻄﻌﮭﺎ ﻧﺼﻔﯿﻦ ﺑﺎﻟﺴﻜﯿﻦ ﺛﻢ ﻛﻠﮭﺎ‪ .‬ﻓﮭﺬه أواﻣﺮ ﺗﻮﺟﮭﮭﺎ اﻟﻰ‬
‫أﺧﯿﻚ‪ .‬ﻣﺠﻤﻮﻋﺔ اﻻواﻣﺮ ﻣﻊ اﻟﻤﻌﻠﻮﻣﺎت ھﻲ ﺗﻌﻠﯿﻤﺎت ﺗﺴﯿﺮ وﻓﻘﺎ ﻟﮭﺎ ﻹﻧﺠﺎز ﻋﻤﻞ ﻣﺎ‪.‬‬

‫ﻋﻨﺪ ﺣﺴﺎﺑﻚ ﻟﻤﺴﺎﺣﺔ أرض‪ ،‬وﻛﺎن ﻟﺪﯾﻚ ﻣﻌﻠﻮﻣﺎت ﻋﻦ ﻣﻘﺪار طﻮﻟﮭﺎ وﻋﺮﺿﮭﺎ‪ .‬وﻛﺎن ﻟﺪﯾﻚ‬
‫ﻣﻌﺮﻓﺔ ﺑﺄنّ اﺳﺘﺨﺮاج ﺗﻠﻚ اﻟﻤﺴﺎﺣﺔ ﺳﯿﻜﻮن ﻧﺎﺗﺞ ﺿﺮب اﻟﻄﻮل ﻓﻲ اﻟﻌﺮض‪ .‬ﻓﺄﻧﺖ ﻓﻲ ﺻﻤﯿﻢ‬
‫ﻋﻘﻠﻚ ﺗﻔﻜﺮ وﺗﺤﺴﺐ وﻛﺄﻧﻚ ﺗﻘﻮل‪:‬‬
‫}‬
‫اﻟﻄﻮل ﯾﺴﺎوي ﻛﺬا؛‬
‫اﻟﻌﺮض ﯾﺴﺎوي ﻛﺬا؛‬

‫‪18‬‬
‫اﻟﻤﺴﺎﺣﺔ ﺗﺴﺎوي اﻟﻄﻮل ‪ X‬اﻟﻌﺮض؛‬
‫اظﮭﺮ اﻟﻨﺎﺗﺞ؛‬
‫{‬
‫أﻧﺖ ﺗﻜﻮن ھﻨﺎ ﻗﺪ ﻛﺘﺒﺖ ﺑﺮﻧﺎﻣﺞ ﻓﯿﮫ ﻣﻌﻠﻮﻣﺎت وأواﻣﺮ وھﻜﺬا ھﻲ اﻟﺒﺮﻣﺠﺔ ﺑﺼﻮرة ﺗﻘﺮﯾﺒﯿﺔ‪.‬‬
‫ﻟﻨﻔﺮض أن طﻮل اﻻرض ‪ 25‬ﻣﺘﺮ وﻋﺮﺿﮭﺎ ‪ 15‬ﻣﺘﺮ ﻋﻨﺪ ذﻟﻚ ﯾﻜﻮن اﻟﺤﻞ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫}‬
‫اﻟﻄﻮل = ‪25‬؛‬
‫اﻟﻌﺮض = ‪15‬؛‬
‫اﻟﻤﺴﺎﺣﺔ = اﻟﻄﻮل ‪ X‬اﻟﻌﺮض؛‬
‫اﻛﺘﺐ اﻟﻨﺎﺗﺞ؛‬
‫{‬

‫ھﺬا اﻟﻨﺺ اﻻﺧﯿﺮ ﻟﻠﺤﻞ ﯾﺸﺒﮫ ﺑﺈطﺎره اﻟﻌﺎم اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ اﻷول‪ .‬ﻓﻜﻞ ﻣﺎ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ‬
‫اﻟﻤﻌﻘﻮﻓﯿﻦ ھﻮ ﻛﺘﻠﺔ ﺗﻌﻠﯿﻤﺎت ﻧﺼﯿﺔ ﻓﮭﺎ ﻣﻌﻠﻮﻣﺎت وأواﻣﺮ‪ .‬وﻛﻞ ﺟﻤﻠﺔ ﻣﻔﯿﺪة ﺑﻤﻔﺮدھﺎ؛ ﻛﻞ‬
‫ﺟﻤﻠﺔ ﻣﻦ ھﺬه اﻟﺘﻌﻠﯿﻤﺎت اﻟﺘﻲ ﺗﻔﯿﺪ ﻣﻌﻨﻰ او اﻟﺘﻲ ﻟﮭﺎ ﻓﻜﺮة ﻣﺎ او ﺧﻄﻮة ﻓﻌﺎﻟﺔ ﺗﺠﺎه اﯾﺠﺎد اﻟﺤﻞ‬
‫اﻟﻜﻠﻲ؛ ﻓﻜﻞ ﺟﻤﻠﺔ ﺗﺘﺼﻒ ﺑﻤﺜﻞ ھﺬا ﻧﺮاھﺎ ﺗﻨﺘﮭﻲ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ‪.‬‬

‫ﺍﻷﲰﺎﺀ ﻭﺍﳌﺨﺘﺼﺮﺍﺕ‬
‫ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺳﻤﯿﺖ اﻷﺷﯿﺎء ﺑﺄﺳﻤﺎﺋﮭﺎ اﻟﺤﻘﯿﻘﺔ‪ .‬ﻓﺄﺳﻤﯿﺖ اﻟﻄﻮل ﺑﺎﻟﻄﻮل‪ ،‬واﻟﻌﺮض‬
‫ﺑﺎﻟﻌﺮض‪ ،‬واﻟﻤﺴﺎﺣﺔ ﺑﺎﻟﻤﺴﺎﺣﺔ‪.‬‬

‫‪19‬‬
‫ﺗﺴﺘﻄﯿﻊ أن ﺗﺴﺘﺨﺪم ﻣﺨﺘﺼﺮات ﻟﺬﻟﻚ؛ ﻓﺎﻟﻄﻮل ﻗﺪ ﺗﻀﻊ ﻟﮫ ﻛﻤﺨﺘﺼﺮ ) طﻞ (‪ .‬واﻟﻌﺮض )‬
‫ﻋﺾ (‪ ،‬واﻟﻤﺴﺎﺣﺔ ) ﻣﺲ (‪ .‬ﻓﯿﻜﻮن ﺑﺮﻧﺎﻣﺠﻚ اﻟﺴﺎﺑﻖ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬
‫‪ //‬ﺑﺮﻧﺎﻣﺞ ﻟﺤﺴﺎب ﻣﺴﺎﺣﺔ اﻟﻤﺴﺘﻄﯿﻞ‬
‫}‬
‫طﻞ = ‪ 25‬؛‬
‫ﻋﺾ = ‪ 15‬؛‬
‫ﻣﺲ = طﻞ * ﻋﺾ ؛‬
‫إطﺒﻊ اﻟﻨﺎﺗﺞ ؛‬
‫{‬

‫ﻟﻜﻦ ﯾﻜﻮن ﻣﻦ اﻻﻓﻀﻞ أن ﺗﺒﻘﻲ اﻻﺷﯿﺎء ﻋﻠﻰ ﻣﺴﻤﯿﺎﺗﮭﺎ ﻣﻦ دون أن ﺗﺮﻣﺰ ﻟﮭﺎ ﺑﺎﺧﺘﺼﺎر‬
‫ﻟﯿﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ وﻓﻜﺮﺗﮫ اﻛﺜﺮ وﺿﻮﺣﺎ‪.‬‬

‫ﻟﻐﺔ ﺍﳊﺴﺎﺏ ﺍﻟﻜﻬﺮﺑﺎﺋﻴﺔ‬


‫اﻵن ﻋﻨﺪﻣﺎ ﺗﺒﺪأ ﺑﻜﺘﺎﺑﺔ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ اﻟﺤﺎﺳﺒﺔ وﺳﯿﺪﺧﻞ ﻓﯿﮭﺎ ﻛﺈﺷﺎرات ﻛﮭﺮﺑﺎﺋﯿﺔ ﻣﺨﺘﻠﻔﺔ ﻣﻦ‬
‫وﻣﻀﺎت ﻣﺨﺘﻠﻔﺔ اﻻﺷﻜﺎل؛ ھﺬه اﻟﻮﻣﻀﺎت اﻟﻜﮭﺮﺑﺎﺋﯿﺔ ھﻲ اﻟﺘﻲ ﺳﺘﻘﺮأ ﻣﻦ ﻗﺒﻞ ﺑﻌﺾ اﻷﺟﺰاء‬
‫اﻻﻟﻜﺘﺮوﻧﯿﺔ اﻟﺘﻲ ﺻﻨﻌﺖ ﻣﻨﮭﺎ اﻟﺤﺎﺳﺒﺔ‪ ،‬ﻓﮭﺬه اﻟﻮﻣﻀﺎت ﺳﺘﺸﻜﻞ اﻟﻠﻐﺔ اﻟﻜﮭﺮﺑﺎﺋﯿﺔ اﻻوﻟﻰ اﻟﺘﻲ‬
‫ﺳﺘﺤﻮﻟﮭﺎ آﻻت اﻟﻜﺘﺮوﻧﯿﺔ أﺧﺮى ﻓﻲ اﻟﺤﺎﺳﺒﺔ اﻟﻰ إﺷﺎرات ﻛﮭﺮﺑﺎﺋﯿﺔ ﻣﻦ ﺷﻜﻞ آﺧﺮ؛ ھﺬا‬
‫اﻟﺸﻜﻞ اﻟﻜﮭﺮﺑﺎﺋﻲ اﻟﺜﺎﻧﻲ ﺳﯿﺪﺧﻞ اﻻﻗﺴﺎم اﻟﺤﺴﺎﺑﯿﺔ ﻓﻲ اﻟﺤﺎﺳﺒﺔ‪ ،‬وھﺬه اﻹﺷﺎرات اﻟﻜﮭﺮﺑﺎﺋﯿﺔ‬
‫اﻟﺘﻲ ﺗﺪﺧﻞ اﻻﻗﺴﺎم اﻟﺤﺴﺎﺑﯿﺔ ھﻲ ﻟﻐﺔ اﻟﺤﺴﺎب اﻟﻜﮭﺮﺑﺎﺋﯿﺔ وﺗﺴﻤﻰ ﻟﻐﺔ اﻵﻟﺔ‪.‬‬

‫‪20‬‬
‫ﻟﻐﺔ ﺍﻵﻟﺔ‬
‫ﺗﺪﺧﻞ إﻟﻰ ﻏﺮﻓﺘﻚ ﻓﺘﺠﺪ ﻋﻠﻰ أﺣﺪ اﻟﺠﺪران ﺻﻒ ﻣﻦ أزرار وﻣﻔﺎﺗﯿﺢ ﻛﮭﺮﺑﺎﺋﯿﺔ؛ ھﺬا ﻟﮭﺬا‬
‫اﻟﻤﺼﺒﺎح‪ ،‬وھﺬا ﻟﺬاك اﻟﻤﺼﺒﺎح‪ ،‬وھﺬا ﻟﻠﻤﺮوﺣﺔ وﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻣﻄﻔﺄة ﺟﻤﯿﻌﮭﺎ ﻓﺄﻧﺖ ﯾﻤﻜﻦ أن ﺗﻘﻮل‪ :‬ھﺬا ﻣﻄﻔﺄ‪ ،‬وھﺬا ﻣﻄﻔﺄ‪ ،‬وھﺬا ﻣﻄﻔﺄ‪ .‬ﺑﻌﺒﺎرة‬
‫أﺧﺮى ﻛﺄﻧﻚ ﺗﻘﺮأ ﺣﺎﻟﺘﮭﺎ ﻓﺘﻘﻮل‪ :‬ﻣﻄﻔﺄ ﻣﻄﻔﺄ ﻣﻄﻔﺄ‪.‬‬
‫ﻓﻲ ﻣﺮة أﺧﺮى ﻗﺪ ﺗﻜﻮن‪ :‬ﻣﻄﻔﺄ ﻣﺸﺘﻌﻞ ﻣﻄﻔﺄ‪ .‬أو ﻣﺸﺘﻌﻞ ﻣﺸﺘﻌﻞ ﻣﻄﻔﺄ‪ .‬أو ﻏﯿﺮ ذﻟﻚ ﻣﻦ‬
‫اﻟﺤﺎﻻت‪.‬‬

‫اﺻﻄﻠﺢ اﻟﻤﮭﻨﺪﺳﻮن ﻋﻠﻰ وﺿﻊ رﻣﺰ ﻟﻠﺤﺎﻟﺔ اﻟﺘﻲ ﺗﻌﻤﻞ واﻟﺤﺎﻟﺔ اﻟﺘﻲ ﻻ ﺗﻌﻤﻞ؛ أي ﺑﺪل ﻣﻄﻔﺄ‪،‬‬
‫ﻣﺸﺘﻌﻞ‪ .‬ﻓﻮﺿﻌﻮا اﻟﺮﻣﺰ ‪ 1‬ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﻤﻔﺘﺎح ﯾﻌﻤﻞ ﻓﯿﻮﺻﻞ ﻛﮭﺮﺑﺎء‪ ،‬ووﺿﻌﻮا اﻟﺮﻣﺰ ‪0‬‬
‫ﻟﺤﺎﻟﺔ اﻟﻤﻔﺘﺎح ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻻ ﯾﻌﻤﻞ‪.‬‬
‫إذن ﯾﻤﻜﻦ أن ﻧﻘﺮأ اﻟﺤﺎﻟﺔ ﻣﻄﻔﺄ ﻣﺸﺘﻌﻞ ﻣﺸﺘﻌﻞ ﺑﮭﺬا اﻟﺸﻜﻞ‪110 :‬‬
‫ھﺬه اﻟﺮﻣﻮز ﺗﺴﻤﻰ رﻣﻮز ﻟﻐﺔ اﻵﻟﺔ‪.‬‬

‫ﺍﻟﺮﻣﻮﺯ ﻭﺍﻷﺷﻜﺎﻝ ﻭﻣﺪﻟﻮﻻ‪‬ﺎ‬


‫ﺗﺼﻮر ﻟﻮ أﻧﻚ دﺧﻠﺖ اﻵن اﻟﺼﻒ اﻷول اﻻﺑﺘﺪاﺋﻲ ﻟﺘﺘﻌﻠﻢ اﻟﻘﺮاءة واﻟﻜﺘﺎﺑﺔ ﺛﻢ ﺟﺎء اﻟﻤﻌﻠﻢ‬
‫ﻓﺄﺷﺎر إﻟﻰ ھﺬا اﻟﺸﻜﻞ ‪ 2‬وﻗﺎل رددوا وراﺋﻲ‪ :‬ھﺬا رﻗﻢ واﺣﺪ‪.‬‬
‫ﺛﻢ أﺷﺎر إﻟﻰ ھﺬا اﻟﺸﻜﻞ ‪ 4‬وﻗﺎل ھﺬا رﻗﻢ اﺛﻨﯿﻦ‪.‬‬

‫‪21‬‬
‫ﺛﻢ أﺷﺎر إﻟﻰ ھﺬا اﻟﺸﻜﻞ ‪ a‬وﻗﺎل ھﺬا رﻗﻢ ﺛﻼﺛﺔ‪ .‬ﻓﻜﯿﻒ ﻛﺎن اﻟﻮﺿﻊ اﻟﺘﻌﻠﯿﻤﻲ ﺣﯿﻨﮭﺎ‪ ،‬ھﻞ ھﻮ‬
‫ﺻﺤﯿﺢ أم ﺧﺎطﺊ؟‪.‬‬

‫ﻓﻲ اﻟﺤﻘﯿﻘﺔ ھﺬه اﻷﺷﻜﺎل‪ 3 2 1 :‬ب ج ق؛ ھﻲ رﻣﻮز ﻻﻏﯿﺮ وﺿﻌﺖ واﺗﻔﻖ ﻋﻠﯿﮭﺎ ﻟﺘﺸﯿﺮ‬
‫إﻟﻰ ﺷﻲء‪ ،‬وإﻻ ﻓﻜﺎن ﯾﻤﻜﻦ أن ﺗﻘﺮأ ھﺬا اﻟﺤﺮف غ ﻓﺘﻘﻮل ھﻮ ﺣﺮف اﻟﺴﯿﻦ‪ .‬ﻓﺘﻠﻚ رﻣﻮز‬
‫وﺿﻌﺖ ﻷﺻﻮات وﺗﻠﻚ رﻣﻮز وﺿﻌﺖ ﻟﺘﺸﯿﺮ إﻟﻰ ﻋﺪد ﻣﻌﯿﻦ‪ .‬وﻛﺎن ﯾﻤﻜﻦ أن ﺗﺘﻌﻠﻢ ﺑﺄنّ ھﺬا‬
‫اﻟﺮﻣﺰ ‪ a‬ﯾﻌﻨﻲ اﻟﻌﺪد ﻋﺸﺮة‪ ،‬وھﺬا اﻟﺮﻣﺰ ‪ b‬ﯾﻌﻨﻲ اﻟﻌﺪد اﻟﺤﺎدي ﻋﺸﺮ وﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﺍﻟﻨﻈﺮ ﺃﻓﻘﻴﺎ ﻭﺍﻟﻨﻈﺮ ﻋﻤﻮﺩﻳﺎ‬


‫ﺗﺼﻮر ﻗﻄﻌﺔ ارض ﺗﺘﺴﻊ ﻟﺒﻨﺎء ﻋﺸﺮة ﺑﯿﻮت‪ .‬ﺛﻢ ﻣﺎذا ﺳﯿﻜﻮن ﻋﻨﺪﻣﺎ ﯾﻜﺒﺮ اﻻﺑﻨﺎء وﯾﺮﯾﺪ ﻛﻞ‬
‫اﺑﻦ زوج وﺑﯿﺖ؟‪ .‬ﻋﻨﺪھﺎ ﺳﯿﺒﻨﻲ اﻻﺑﻦ ﺑﯿﺘﮫ ﻓﻮق اﻟﺒﯿﺖ اﻻول ﻟﯿﺮﺗﻔﻊ ﻋﻦ اﻻرض‪.‬‬
‫ﻓﺎﻟﺬي ﺑﻨﻰ اﻟﻌﺸﺮة ﺑﯿﻮت اﻻوﻟﻰ ﻛﺎن ﯾﻨﻈﺮ ﻓﻘﻂ اﻟﻰ اﻟﻤﺴﺎﺣﺔ اﻻﻓﻘﯿﺔ ﻟﻼرض وأﻏﻔﻞ اﻟﺠﺎﻧﺐ‬
‫اﻟﻌﻤﻮدي ﻟﮭﺎ ﻓﺎﻏﻔﻞ ﺟﺎﻧﺐ اﻻرﺗﻔﺎع‪.‬‬
‫وﻟﻜﻲ ﺗﺮﺗﻔﻊ ﻋﻦ اﻻرض ﺗﺤﺘﺎج اﻟﻰ ﺑﻨﺎء درﺟﺔ‪ .‬اﻵن وﺿﻊ ﺷﻲء ﻋﻠﻰ اﻟﺪرﺟﺔ ﺳﺘﺨﺘﻠﻒ‬
‫ﻗﯿﻤﺘﮫ ﻋﻦ وﺿﻌﮫ ﻋﻠﻰ اﻻرض‪ .‬وﻟﻜﻲ ﻧﻀﺮب ﻣﺜﻼ أﺷﻌﻞ ﺷﻤﻌﺔ وﺿﻌﮭﺎ ﻋﻠﻰ اﻻض واﻧﻈﺮ‬
‫اﻟﻰ ﻣﺴﺎﺣﺔ اﻟﺒﻘﻌﺔ اﻟﺘﻲ ﺳﺘﻨﯿﺮھﺎ‪ .‬ﺿﻊ ﻧﻔﺲ اﻟﺸﻤﻌﺔ ﻋﻠﻰ ارﺗﻔﺎع أﻛﺒﺮ وﺳﺘﺮى أﻧﮭﺎ أﺿﺎءت‬
‫ﺑﻘﻌﺔ أﻛﺒﺮ‪ .‬ﻓﻠﻼرﺗﻔﺎع ﻗﯿﻤﺔ ﯾﺠﺐ ان ﺗﺴﺘﻐﻞ وﻗﺪ اﺳﺘﻐﻞ ذﻟﻚ واﺿﻌﻮا اﻟﺤﺴﺎب واﻻرﻗﺎم‪.‬‬

‫ﻛﺘﺎﺑﺔ ﺍﻻﻋﺪﺍﺩ‬
‫واﻧﺖ ﺗﻠﻌﺐ ﻣﻊ رﻓﺎﻗﻚ وﺗﺴﺠﻞ ﻟﻚ ﻧﻘﻄﺔ ﻓﻮز ﻓﺈﻧﻚ ﺳﺘﻜﺘﺐ ﻧﻘﻄﺘﻚ ﻋﻠﻰ ورﻗﺔ ﺑﮭﺬا اﻟﺸﻜﻞ‬
‫واﻟﺘﻲ ﺳﺘﻌﻨﻲ ﻧﻘﻄﺔ واﺣﺪة‪ .‬ﻛﺘﺎﺑﺔ اﻟﻨﻘﻄﺔ اﻟﺜﺎﻧﯿﺔ ﺳﯿﻜﻮن اﻟﺸﻜﻞ ھﻜﺬا‬

‫‪22‬‬
‫وھﻜﺬا ﺳﺘﻜﻮن اﻟﻨﻘﻄﺔ اﻟﺜﺎﻟﺜﺔ ھﻜﺬا‬
‫اﻻن إن ﻛﻨﺖ ﺳﺘﺴﺘﻤﺮ ﻋﻠﻰ ھﺬا اﻟﻤﻨﻮال ﻓﻜﯿﻒ ﺳﯿﻜﻮن اﻟﺸﻜﻞ ﻋﻨﺪ اﻟﻨﻘﻄﺔ اﻻﻟﻒ‬
‫وﻛﻢ ﺳﺘﺤﺘﺎج اﻟﻰ ورﻗﺔ طﻮﯾﻠﺔ ﻟﺘﺴﺘﻮﻋﺐ ھﺬا اﻟﻌﺪد وﻛﻢ ﺳﯿﻜﻮن ﻣﻦ اﻟﺸﺎق ﻋﻠﻰ اﺻﺤﺎﺑﻚ ان‬
‫ﯾﻌﺪوا وراءك؟‪ .‬ﻣﻦ اﻻﻓﻀﻞ اﯾﺠﺎد ﻧﻈﺎم ﻋﺪ ﻣﺨﺘﻠﻒ ﻻﯾﻨﻈﺮ ﻓﻘﻂ اﻟﻰ اﻟﺒﻌﺪ اﻻﻓﻘﻲ وﻟﻜﻦ‬
‫اﯾﻀﺎ اﻟﻰ اﻟﺒﻌﺪ اﻟﺮاﺳﻲ‪.‬‬

‫ﻧﻈﺎﻡ ﺍﻟﻌﺪ‬
‫ﺑﺪﻻ ﻣﻦ اﻟﻨﻈﺎم اﻟﺴﺎﺑﻖ ﺳﻨﺘﻔﻖ ﻋﻠﻰ رﻣﻮز ﻗﻠﯿﻠﺔ ﻟﺘﺪل ﻋﻠﻰ ﺑﻌﺾ اﻻﻋﺪاد اﻻوﻟﻰ ﺛﻢ ﻧﻀﻊ‬
‫رﻣﺰا آﺧﺮ ﻟﯿﺪل ﻋﻠﻰ ﻗﯿﻤﺔ ارﺗﻔﺎع ﻣﻌﯿﻨﺔ‪ .‬ﺳﻨﻀﻊ ﺗﺴﻌﺔ رﻣﻮز ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ اﻻﻋﺪاد ﻣﻦ واﺣﺪ‬
‫اﻟﻰ ﺗﺴﻌﺔ ) ‪ ( 9 ، 8 ، 7 ، 6 ، 5 ، 4 ، 3 ، 2 ، 1‬وﻧﻀﻊ رﻣﺰا آﺧﺮ ) ‪ ( 0‬ﺑﻤﺜﺎﺑﺔ‬
‫اﻻرﺗﻔﺎع درﺟﺔ ﻟﯿﻜﻮن ﻋﺪد اﻟﺮﻣﻮز ﻋﺸﺮة وﻟﯿﻌﻨﻲ ھﺬا اﻟﺮﻣﺰ اﻧﻨﺎ ﻧﺮﺗﻔﻊ ﺑﻤﻘﺪار ﻋﺸﺮة‪.‬‬
‫وﺿﻊ اﺣﺪ اﻟﺮﻣﻮز اﻻوﻟﻰ ﺑﺠﺎﻧﺐ ھﺬا اﻟﺮﻣﺰ ﺳﯿﻌﻨﻲ وﺿﻊ اﻟﺮﻣﺰ اﻻول ﻋﻠﻰ درﺟﺔ ﻓﮭﻮ‬
‫ﻣﺮﺗﻔﻊ ﻋﻦ أﻗﺮاﻧﮫ‪.‬‬

‫‪0‬‬ ‫‪987654321‬‬ ‫اﻟرﻣوز اﻟﻌﺷرة‬

‫اﻟف‬
‫‪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‬إﻟﻰ ﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﻣﺎذا ﻛﺎن ﺳﯿﻜﻮن إن وﺿﻌﻮا ﻓﻘﻂ ﺗﻠﻚ اﻟﺮﻣﻮز ‪ 8 7 6 5 4 3 2 1 0‬وﻟﻢ ﯾﻀﻌﻮا‬


‫اﻟﺮﻣﺰ ‪ 9‬ﺛﻢ أرادوا أن ﯾﻌﻠﻤﻮك ﻛﯿﻒ ﺗﻜﺘﺐ اﻟﻌﺪد ﺗﺴﻌﺔ؟‪.‬‬
‫ﻋﻨﺪھﺎ ﻛﺎن اﻟﻌﺪد ﺗﺴﻌﺔ ﺳﯿﻜﺘﺐ ھﻜﺬا ‪10‬‬
‫وﻋﻨﺪھﺎ ﻛﺎن اﻟﻌﺪد ﻋﺸﺮة ﺳﯿﻜﺘﺐ ھﻜﺬا‪11 :‬‬
‫ﻣﺎذا إن ﻛﺎﻧﺖ اﻟﺮﻣﻮز ھﺬه ﻓﻘﻂ‪ 7 6 5 4 3 2 1 0 :‬؟‪.‬‬
‫ﻣﺎذا إن ﻛﺎﻧﺖ اﻟﺮﻣﻮز ﻓﻘﻂ‪ 4 3 2 1 0 :‬؟‪.‬‬
‫؟‪.‬‬ ‫وﻣﺎذا إن ﻛﺎﻧﺖ اﻟﺮﻣﻮز ﻓﻘﻂ‪1 0 :‬‬
‫ھﻨﺎ اﻟﻌﺪد اﺛﻨﯿﻦ ﺳﯿﻜﺘﺐ ھﻜﺬا‪ 10 :‬واﻟﻌﺪد ﺛﻼﺛﺔ ﻛﺎن ﺳﯿﻜﺘﺐ ھﻜﺬا‪ 11 :‬واﻟﻌﺪد ارﺑﻌﺔ‬
‫ﺳﯿﻜﺘﺐ ھﻜﺬا‪110 :‬‬
‫ھﺬا اﻟﻨﻈﺎم‪ ،‬ﻧﻈﺎم اﻟﺮﻣﺰﯾﻦ ﯾﺴﻤﻰ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ وھﻮ ﻧﻔﺴﮫ ﻧﻈﺎم ﻟﻐﺔ اﻵﻟﺔ اﻟﺬي ﻣﺮ ﻣﻌﻨﺎ‬
‫ﺳﺎﺑﻘﺎ‪.‬‬

‫‪24‬‬
‫ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﻋﻠﻰ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺜﻨﺎﺋﻲ‬
‫ﻣﺜﻠﻤﺎ أنّ ھﻨﺎك ﻗﻮاﻋﺪ رﯾﺎﺿﯿﺔ ﻣﺨﺘﻠﻔﺔ ﺗﺴﺘﻌﻤﻞ ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي ﺗﺆدي إﻟﻰ ﻋﻤﻠﯿﺎت اﻟﺠﻤﻊ‬
‫واﻟﻄﺮح وﻏﯿﺮھﺎ؛ ﻛﺬﻟﻚ ھﻨﺎك ﻋﻤﻠﯿﺎت ﻣﺸﺎﺑﮭﺔ ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﺗﺆدي إﻟﻰ ﺟﻤﻊ وطﺮح‬
‫وﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﺗﺼﺎﻣﻴﻢ ﻛﻬﺮﺑﺎﺋﻴﺔ ﻟﻠﻌﻤﻠﻴﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ‬


‫ﺑﻤﺎ أنّ اﻟﻤﻔﺎﺗﯿﺢ اﻟﻜﮭﺮﺑﺎﺋﯿﺔ ﯾﻤﻜﻦ أن ﺗﻌﻤﻞ ﺑﺤﺎﻟﺘﻲ اﻟـ ‪ 0‬واﻟــ ‪ 1‬ﻓﻘﻂ؛ ﻟﺬﻟﻚ أﻣﻜﻦ اﻟﻮﺻﻮل‬
‫إ ﻟﻰ ﺗﺼﻤﯿﻢ دواﺋﺮ ﺗﺘﻜﻮن ﻣﻦ ﻣﻔﺎﺗﯿﺢ ﺧﺎﺻﺔ وﻣﺮﺗﺒﻄﺔ ﻓﯿﻤﺎ ﺑﯿﻨﮭﺎ ﺑﺸﻜﻞ ﻣﺎ ﯾﻤﻜﻦ أن ﺗﺆدي‬
‫ﺑﻨﺘﯿﺠﺔ رﺑﻄﮭﺎ إﻟﻰ ﻋﻤﻠﯿﺔ اﻟﺠﻤﻊ ﻣﺜﻼ أو إﻟﻰ ﻋﻤﻠﯿﺔ اﻟﻄﺮح أو إﻟﻰ ﻋﻤﻠﯿﺔ ﻋﻜﺲ ﺣﺎﻟﺔ اﻟـ ‪1‬‬
‫إﻟﻰ ‪ 0‬أو ﻋﻜﺲ ﺣﺎﻟﺔ اﻟـ ‪ 0‬إﻟﻰ ‪ 1‬أو ﻏﯿﺮ ذﻟﻚ‪.‬‬
‫وھﻨﺎك ﻓﻲ ﻛﻞ ﺣﺎﺳﺒﺔ اﻵﻻف ﻣﻦ ھﺬه اﻟﺪواﺋﺮ اﻟﻤﺨﺘﻠﻔﺔ واﻟﺘﻲ ﻗﺪ ﯾﺴﻤﻰ ﺟﺰء ﻣﻦ ﻛﻞ داﺋﺮة‬
‫ﻓﯿﮭﺎ‪ :‬ﺑﺎﻟﺪواﺋﺮ اﻟﻤﻨﻄﻘﯿﺔ‪.‬‬

‫ﺍﻟﺘﺤﻮﻳﻞ ﺑﲔ ﺍﻷﻧﻈﻤﺔ‬
‫ھﻨﺎك طﺮق رﯾﺎﺿﯿﺔ ﯾﻤﻜﻦ أن ﺗﺤﻮل ﺑﻮاﺳﻄﺘﮭﺎ اﻟﻨﻈﺎم اﻟﻌﺸﺮي إﻟﻰ ﺛﻨﺎﺋﻲ وﺑﺎﻟﻌﻜﺲ‪ .‬ﻛﺬﻟﻚ‬
‫ھﻨﺎك ﻧﻈﺎم ﯾﺘﻜﻮن ﻣﻦ ﺳﺘﺔ ﻋﺸﺮ رﻣﺰ ﯾﺴﻤﻰ ﺑﺎﻟﻨﻈﺎم اﻟﺴﺎدﺳﻲ ﻋﺸﺮ واﻟﺬي ﯾﻤﻜﻦ ﺗﺤﻮﯾﻠﮫ‬
‫ﻛﺬﻟﻚ إﻟﻰ ﻧﻈﺎم ﻋﺸﺮي أو ﺛﻨﺎﺋﻲ أو ﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﺍﻟﺘﺮﻣﻴﺰ ﻭﺍﻟﺘﺸﻔﲑ‬
‫ﯾﻤﻜﻦ أن ﻧﺘﻔﻖ ﻓﯿﻤﺎ ﺑﯿﻨﻨﺎ ﺑﻘﺎﺋﻤﺔ ﻣﻦ ﺣﻘﻠﯿﻦ‪ ،‬ﻓﻲ ﻛﻞ ﺣﻘﻞ ﻛﻠﻤﺎت ورﻣﻮز‪ ،‬وﻓﻲ اﻟﺤﻘﻞ اﻟﻤﻘﺎﺑﻞ‬
‫ﻣﻌﻨﻰ ﻛﻞ رﻣﺰ أو اﻟﻌﻤﻞ اﻟﻤﻄﻠﻮب ﺗﺄدﯾﺘﮫ ﺣﯿﻦ ﯾﺼﺎدﻓﻨﺎ ذﻟﻚ اﻟﺮﻣﺰ‪.‬‬

‫‪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‬‬
‫ﺍﻟﺪﺍﻟﺔ ﻭﺍﳌﻌﺎﻣﻞ‬
‫اﻟﺪاﻟﺔ ھﻲ وظﯿﻔﺔ ﯾﻤﻜﻦ أن ﯾﺆدﯾﮭﺎ ﺷﻲء ﻣﺎ‪ .‬وھﻲ ﺷﻲء ﯾﺪل إﻟﻰ ﺷﻲء آﺧﺮ أو ﯾﺆدي إﻟﯿﮫ‪.‬‬
‫ﻓﻀﻐﻂ ﻋﺘﻠﺔ اﻟﻮﻗﻮد ﺗﺆدي إﻟﻰ زﯾﺎدة ﺳﺮﻋﺔ اﻟﻤﺮﻛﺒﺔ‪ .‬وزﯾﺎدة ﺷﺪة اﻟﻜﮭﺮﺑﺎء ﺗﺆدي إﻟﻰ زﯾﺎدة‬
‫وھﺞ اﻟﻤﺼﺒﺎح؛ ﻓﻮھﺞ اﻟﻤﺼﺒﺎح ﯾﺪل ﻋﻠﻰ ﺷﺪة اﻟﻜﮭﺮﺑﺎء ﻓﻨﻘﻮل‪ :‬ﺷﺪة اﻟﻜﮭﺮﺑﺎء داﻟﺔ ﻟﻮھﺞ‬
‫اﻟﻤﺼﺒﺎح وﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء ھﻲ ﻣﻌﺎﻣﻞ او وﺳﯿﻂ أدى إﻟﻰ اﻟﺘﺤﻜﻢ ﺑﻘﯿﻤﺔ وھﺞ اﻟﻤﺼﺒﺎح‪.‬‬
‫أي أن‪:‬‬
‫إﺿﺎءة وھﺞ اﻟﻤﺼﺒﺎح‪ ،‬ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻣﻘﺪار ) ﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء (‬
‫ھﺬا ﯾﻤﻜﻦ اﻟﺘﻌﺒﯿﺮ ﻋﻨﮫ ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﺑﮭﺬا اﻟﺸﻜﻞ ﺗﻘﺮﯾﺒﺎ‪:‬‬

‫إﺿﺎءة وھﺞ اﻟﻤﺼﺒﺎح = ﻣﻘﺪار ) ﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء ( ﻣﻀﺮوﺑﺔ ﻓﻲ ﻋﺪد ﻣﺎ‪.‬‬

‫ﻓﻘﯿﻤﺔ إﺿﺎءة اﻟﻤﺼﺒﺎح ﺳﺘﻜﻮن ﻣﻌﺘﻤﺪة ﻋﻠﻰ وﺳﯿﻂ او ﻣﻌﺎﻣﻞ ھﻮ ﻗﯿﻤﺔ ﺷﺪة اﻟﻜﮭﺮﺑﺎء اﻟﻤﺎر‬
‫ﻓﻲ اﻟﻤﺼﺒﺎح‪.‬‬
‫ﻛﺬﻟﻚ‪ ،‬ﻣﻘﺪار درﺟﺔ اﻟﺤﺮارة ﻛﺎن ھﻮ اﻟﻮﺳﯿﻂ اﻟﺬي أدى إﻟﻰ اﻟﺘﺒﺨﺮ أو إﻟﻰ ارﺗﻔﺎع ﻋﻤﻮد‬
‫اﻟﺰﺋﺒﻖ ﻓﻲ اﻟﻤﺤﺮار‪ .‬وﻛﻤﯿﺔ اﻻﻣﻄﺎر اﻟﺴﺎﻗﻄﺔ ﻛﺎﻧﺖ وﺳﯿﻂ ﻻرﺗﻔﺎع ﻣﻨﺴﻮب اﻟﻤﯿﺎه وﻛﺎﻧﺖ‬
‫وﺳﯿﻂ ﻟﺰﯾﺎدة اﻟﻤﺤﺎﺻﯿﻞ وھﻜﺬا‪.‬‬

‫ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﻧﺠﺪ ﻣﺜﻼ‪:‬‬


‫ﺟﺬر )‪5 = (25‬‬
‫ﺟﺬر )‪6 = (36‬‬
‫ﺟﺬر )‪7 = (49‬‬
‫ﺟﺬر )س( = ص‬

‫‪41‬‬
‫ﻓﻤﺎ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ ﺗﺴﻤﻰ وﺳﻄﺎء و ص = ﺟﺬر )س( ﺗﺴﻤﻰ داﻟﺔ اﻟﺠﺬر و ) ص ( ھﻲ ﻗﯿﻤﺔ‬
‫داﻟﺔ اﻟﻮﺳﯿﻂ أو اﻟﻘﯿﻤﺔ ـ اﺧﺘﺼﺎرا ؛ أي اﻟﻨﺘﯿﺠﺔ ـ‪ .‬وﻣﺜﻞ ذﻟﻚ دوال أﺧﺮى ﻛﺜﯿﺮة‪.‬‬

‫ﺍﻟﺪﺍﻟﺔ‬
‫اﻟﺪاﻟﺔ ھﻲ أداء وظﯿﻔﺔ ﻣﺎ وھﻲ ﺧﻄﻮة أو ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات ﺗﺆدي ﺑﻤﺠﻤﻮﻋﮭﺎ اﻟﻰ ﺗﻠﻚ‬
‫اﻟﻮظﯿﻔﺔ وﺗﺆدي ﺑﻤﺠﻤﻮﻋﮭﺎ ﻋﻤﻠﯿﺔ ﻣﺎ‪ .‬ﻓﻠﺼﻨﺎﻋﺔ اﻟﺨﺒﺰ ﻣﻦ اﻟﻄﺤﯿﻦ ﯾﺠﺐ ﺧﻠﻄﮫ ﻣﻊ ﻛﻤﯿﺔ ﻣﻦ‬
‫اﻟﻤﺎء ﻟﯿﺼﺒﺢ ﻋﺠﯿﻨﺔ‪ ،‬ﺑﻌﺪ ذﻟﻚ ﺧﻄﻮة أﺧﺮى ھﻲ إﺿﺎﻓﺔ اﻟﺨﻤﯿﺮة أو أﯾﺔ ﻣﻮاد أﺧﺮى إﻟﻰ‬
‫اﻟﻌﺠﯿﻦ ﻟﻜﻲ ﯾﺨﺘﻤﺮ وﯾﺄﺧﺬ ﻧﻜﮭﺔ ﻣﺎ‪ ،‬ﺑﻌﺪ ذﻟﻚ ﯾﺘﺮك ﻟﻔﺘﺮة ﺣﺘﻰ ﯾﺨﺘﻤﺮ ﺑﻮاﺳﻄﺔ ﻣﻜﺮوﺑﺎت‬
‫ﺧﺎﺻﺔ ﻓﻲ اﻟﮭﻮاء‪ .‬وﺑﻌﺪھﺎ ﯾﻘﻄﻊ وﯾﺠﻌﻞ ﻋﻠﻰ ﺷﻜﻞ أﻗﺮاص‪ ،‬ﺛﻢ ﯾﺪھﻦ وﺟﮭﮫ وﯾﻮﺿﻊ ﻓﻲ‬
‫اﻟﺘﻨﻮر أو اﻟﻔﺮن‪.‬‬
‫ﻓﻤﺠﻤﻮﻋﺔ اﻟﺨﻄﻮات ﺗﻠﻚ أدت إﻟﻰ ﻋﻤﻠﯿﺔ اﻟﺨﺒﺰ واﻟﺤﺼﻮل ﻋﻠﻰ اﻟﺨﺒﺰ ﻣﻦ اﻟﻄﺤﯿﻦ وﺗﻠﻚ‬
‫اﻟﺨﻄﻮات ﻛﻠﮭﺎ ھﻲ وظﯿﻔﺔ اﻟﺨﺒﺎز اﻟﺬ ﻗﺎم ﺑﻜﻞ ﺗﻠﻚ اﻟﺨﻄﻮات‪ .‬رﺳﻢ وظﯿﻔﺔ ﻣﺎ وﺑﺮﻣﺠﺘﮭﺎ‬
‫واﻟﺘﺨﻄﯿﻂ ﻟﮭﺎ ﯾﺴﻤﻰ ﻓﻲ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ إﻧﺸﺎء داﻟﺔ‬
‫اﻟﺪاﻟﺔ اذن ﻓﻲ ﺣﻘﯿﻘﺘﮭﺎ ھﻲ ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات ﺑﺮﻣﺠﯿﺔ ﻣﺘﻜﺎﻣﻠﺔ اﻟﮭﺪف وﺗﺆدي إﻟﻰ ﻧﺘﯿﺠﺔ ﻣﺎ‬
‫أو ﺗﺤﻘﯿﻖ اﻣﺮ ﻧﺮﯾﺪه وﻗﺪ ﺗﺤﻤﻞ ﻣﻌﮭﺎ ﻗﯿﻤﺔ ﻛﻨﺘﯿﺠﺔ ﻟﺘﻠﻚ اﻟﺨﻄﻮات‪ .‬ﻓﺎﻟﺨﺒﺎز ﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ‬
‫ﯾﺴﺘﻄﯿﻊ ان ﯾﻌﺪ ﻋﺪد اﻻرﻏﻔﺔ اﻟﺘﻲ ﯾﻨﺘﺠﮭﺎ ﻓﻲ اﻟﺴﺎﻋﺔ اﻟﻮاﺣﺪة‪.‬‬

‫ﻓﻲ اﻟﻤﺼﺒﺎح اﻟﻜﮭﺮﺑﺎﺋﻲ ﻛﺎن اﻟﺘﯿﺎر اﻟﻜﮭﺮﺑﺎﺋﻲ ﯾﻌﺎﻟﺞ اﻟﺴﻠﻚ اﻟﻔﺘﯿﻠﺔ ﻟﻠﻤﺼﺒﺎح ﻓﯿﺠﻌﻠﮭﺎ ﺗﺼﻞ‬
‫إﻟﻰ ﻗﯿﻤﺔ ﻣﺎ ﻓﺘﺘﻮھﺞ؛ أي أنّ اﻟﺘﯿﺎر ﻛﺎن ﯾﻘﻮم ﺑﻌﻤﻠﯿﺔ ﻓﻲ اﻟﻤﺼﺒﺎح ﻓﯿﻨﺘﺞ اﻟﻀﻮء ﺑﺸﺪة ﺗﺘﻨﺎﺳﺐ‬
‫وﻗﯿﻤﺔاﻟﺘﯿﺎر‪.‬‬

‫‪42‬‬
‫ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ھﻨﺎك ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات ﻧﺠﺮﯾﮭﺎ ﻋﻠﻰ ﻋﺪد ﻟﻨﺴﺘﻨﺘﺞ ﺑﻌﺪھﺎ ﺟﺬر ذاك اﻟﻌﺪد أو‬
‫ﺷﻲء آﺧﺮ ﻛﻤﺮﺑﻌﮫ أو ﻣﻜﻌﺒﮫ أو ﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﻓﻲ اﻟﺒﺮﻣﺠﺔ ھﻨﺎك دوال ﻟﻐﺮض ﻓﻌﻞ ﺷﻲء ووظﯿﻔﺔ ﻧﺮﯾﺪ إﺟﺮاءھﺎ؛ وھﻨﺎك دوال ﯾﻤﻜﻦ‬
‫ﺑﻤﺠﻤﻮع ﺧﻄﻮاﺗﮭﺎ أن ﺗﺆدي ﻋﻤﻠﯿﺔ رﯾﺎﺿﯿﺔ ﻓﺘﺨﺮج ﻟﻨﺎ ﻧﺘﯿﺠﺔ ﻧﺤﺘﺎﺟﮭﺎ‪ .‬ﻓﺎﻟﺪاﻟﺔ ھﻨﺎ أدت‬
‫ﻣﺠﻤﻮﻋﺔ ﺧﻄﻮات وﺧﺮﺟﺖ ﺑﻨﺘﯿﺠﺔ ﻧﺮﯾﺪھﺎ؛ إﻻ أنّ ھﻨﺎك دوال ﻧﺮﯾﺪھﺎ أن ﺗُﺠﺮي ﺧﻄﻮات‬
‫وﻟﺴﻨﺎ ﻧﺮﯾﺪ ﻣﻨﮭﺎ ﻗﯿﻤﺔ ﻧﮭﺎﺋﯿﺔ؛ أي أﻧﻨﺎ ﻧﺮﯾﺪ ﻓﻌﻠﮭﺎ وﻓﻘﻂ‪ .‬ﻛﺈﺿﺎءة ﻧﻘﻄﺔ ﻣﺎ ﻋﻠﻰ اﻟﺸﺎﺷﺔ او‬
‫إﺣﺪاث ﺻﻮت ﻣﺎ‪.‬‬

‫ﻓﻲ ﻛﺘﺐ أﺧﺮى ﻗﺪ ﺗﺠﺪ ﻟﻠﺪاﻟﺔ أﺳﻤﺎء أﺧﺮى ﻣﺜﻞ اﻟﺘﺎﺑﻊ واﻟﻤﻨﮭﺞ واﻟﻄﺮﯾﻘﺔ وﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﺍﳌﻜﺘﺒﺔ ﺍﻟﱪﳎﻴﺔ ﻭﺍﻟﺪﻭﺍﻝ ﺍﳉﺎﻫﺰﺓ‬


‫ﻣﻊ ﻛﻞ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ھﻨﺎك ﻣﻜﺘﺒﺔ ﻣﻘﺘﺮﻧﺔ ﻣﻌﮭﺎ ﻓﯿﮭﺎ أﺷﯿﺎء وﺑﺮاﻣﺞ ﻣﺘﻨﻮﻋﺔ ﯾﺴﺘﻔﯿﺪ ﻣﻨﮭﺎ‬
‫اﻟﻤﺴﺘﺨﺪم‪.‬‬
‫ﺑﺮاﻣﺞ ھﺬه اﻟﻤﻜﺘﺒﺔ ﻗﺪ ﻛﺘﺒﮭﺎ ﺧﺒﺮاء ﻣﺒﺮﻣﺠﻮن ﺑﻨﻔﺲ اﻟﻠﻐﺔ اﻟﺘﻲ ﯾﻌﺪون اﻟﻤﻜﺘﺒﺔ ﻟﮭﺎ‪ .‬ﻓﻤﻜﺘﺒﺔ‬
‫ﻋﺎﺋﻠﺔ ‪ C‬ﻗﺪ ﻛﺘﺒﺖ ﺑﻠﻐﺔ ﻋﺎﺋﻠﺔ ‪. C‬‬

‫اﻟﻐﺮض ﻣﻦ ھﺬه اﻟﻤﻜﺘﺒﺔ أنّ ﻓﯿﮭﺎ ﺑﺮاﻣﺞ ﻋﺎﻣﺔ ﯾﺴﺘﺨﺪﻣﮭﺎ ﻣﻌﻈﻢ اﻟﻤﺒﺮﻣﺠﻮن ﻓﻲ أﻋﻤﺎﻟﮭﻢ‬
‫وﯾﺤﺘﺎﺟﻮن إﻟﯿﮭﺎ‪ .‬وﻛﺎن ﯾﻤﻜﻦ أن ﺗﺄﺗﻲ اﻟﻠﻐﺔ ﻣﻦ ﻏﯿﺮ ﻣﻜﺘﺒﺔ ﻣﺮاﻓﻘﺔ ﻟﮭﺎ؛ إﻻ أنّ ھﺬا ﻛﺎن‬
‫ﺳﯿﺘﻌﺒﻚ؛ ﻷﻧّﮫ ﻛﺎن ﯾﺠﺐ ﻋﻠﯿﻚ أن ﺗﻜﺘﺐ ﻛﻞ ﺷﻲء ﻣﻦ اﻟﺼﻔﺮ ﻟﯿﻜﺘﻤﻞ ﻟﺪﯾﻚ ﺑﺮﻧﺎﻣﺠﻚ؛ إﻻ أنّ‬

‫‪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‬واﻋﺪ ﻛﺘﺎﺑﺔ اﻟﺠﺪول ﻣﻦ ﺟﺪﯾﺪ‬

‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪0‬‬


‫‪80‬‬ ‫‪95‬‬ ‫‪78‬‬ ‫‪6‬‬
‫‪98‬‬ ‫‪90‬‬ ‫‪88‬‬ ‫‪7‬‬
‫‪77‬‬ ‫‪96‬‬ ‫‪82‬‬ ‫‪8‬‬

‫اﻟﺠﺪول اﻋﻼه أﻗﺮب إﻟﻰ ﻣﻌﻨﻰ اﻟﻤﺼﻔﻮﻓﺔ ـ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ـ ﻓﻜﻠﮫ ﻣﻦ ﻧﻮع اﻻرﻗﺎم‪ .‬وﻟﻜﻦ ﻣﻊ‬
‫ھﺬا؛ ﻓﺎﻟﻤﺼﻔﻮﻓﺔ ﺗﻌﻨﻲ ﺷﻲء ﻏﯿﺮ ذﻟﻚ وﺗﺸﯿﺮ إﻟﻰ أﺷﯿﺎء ﻻ ﯾﺸﯿﺮ إﻟﯿﮭﺎ اﻟﺠﺪول وﻛﻞ ذﻟﻚ ﻣﺮة‬
‫أﺧﺮى ﻓﻲ ﻣﻌﻨﻰ اﻟﻤﺼﻔﻮﻓﺔ وﻋﻤﻠﮭﺎ ﻓﻲ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪66‬‬
‫ﻓﻠﻠﻤﺼﻔﻮﻓﺔ ﻛﻜﻞ اﺳﻢ أﻧﺖ ﺗﺴﻤﯿﮫ وﻟﻜﻞ ﻣﻮﻗﻊ ﻓﯿﮭﺎ اﺳﻢ ﯾﺄﺧﺬ اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ وﺑﺠﺎﻧﺒﮫ رﻗﻢ آﺧﺮ‬
‫ﻏﯿﺮ اﻟﺮﻗﻢ اﻟﻈﺎھﺮ ﻓﯿﮭﺎ‪.‬‬

‫ﺍﻷﻋﻤﺪﺓ ﻭﺍﻟﺼﻔﻮﻑ‬
‫ﻻﺣﻈﺖ أنّ اﻟﺠﺪول ﯾﺘﻜﻮن ﻣﻦ ﺣﻘﻮل ﻋﻠﻰ ﺷﻜﻞ أﺳﻄﺮ وأﻋﻤﺪة‪ ،‬ﻓﺘﺮى اﻟﺴﻄﺮ اﻟﻌﻠﻮي اﻟﺬي‬
‫ﯾﻀﻢ ) اﻟﻄﺎﻟﺐ‪ ،‬اﻟﻔﯿﺰﯾﺎء‪ ،‬اﻟﺮﯾﺎﺿﯿﺎت‪ ،‬اﻟﻠﻐﺔ (؛ ھﺬا ﯾﺴﻤﻰ ﺻﻒ أو ﺳﻄﺮ‪ ،‬ﯾﻠﯿﻠﮫ ﺳﻄﺮ ﺛﺎن‬
‫ھﻮ ﺻﻒ آﺧﺮ وﺻﻒ ﺛﺎﻟﺚ وھﻜﺬا‪.‬‬

‫اﻧﻈﺮ اﻻن إﻟﻰ اﻟﻌﻤﻮد ) اﻟﻄﺎﻟﺐ‪ ،‬ﻣﺤﻤﺪ‪ ،‬ﻋﻠﻲ‪ ،‬ﻋﻤﺮ ( ﻓﮭﻮ ﯾﺴﻤﻰ ﻋﻤﻮد ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﯾﺘﺒﻌﮫ‬
‫أﻋﻤﺪة أﺧﺮى‪ .‬ﻓﺎﻟﻤﺼﻔﻮﻓﺔ اذن ﺗﺘﻜﻮن ﻣﻦ ﺻﻔﻮف وأﻋﻤﺪة‪.‬‬

‫اﻟﺘﻘﺎطﻌﺎت ﻣﺎﺑﯿﻦ اﻟﺼﻔﻮف واﻷﻋﻤﺪة ﺗﺸﻜﻞ ﺧﻼﯾﺎ ﯾﻤﻜﻦ ان ﯾﺘﻮاﺟﺪ ﻓﯿﮭﺎ ﻋﻨﺎﺻﺮ وأﺷﯿﺎء‬
‫وﻗﯿﻢ‪ .‬ﻓﺎﻟﻘﯿﻤﺔ ) ‪ ( 98‬ﻓﻲ ﻣﺜﺎﻟﻨﺎ ھﻲ ﻋﻨﺼﺮ اﺣﺘﻞ ﺧﻠﯿﺔ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ وھﻲ اﻟﻤﺮﺑﻊ أو‬
‫اﻟﻤﺴﺎﺣﺔ اﻟﺘﻲ ﯾﻈﮭﺮ ﻓﯿﮭﺎ‪.‬‬

‫اﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﺗﺴﺘﻐﻞ ھﺬا ﻟﻐﺮض اﻟﻮﺻﻮل اﻟﺴﮭﻞ إﻟﻰ أي ﻋﻨﺼﺮ ﻓﻲ‬
‫اﻟﻤﺼﻔﻮﻓﺔ وﻟﻐﺮض إﻋﻄﺎﺋﮫ اﺳﻢ داﺧﻠﻲ ﺑﺮﻣﺠﻲ اﯾﻀﺎ‪.‬‬

‫ﺍﻟﺮﻗﻢ ﺍﻟﺴﻔﻠﻲ ﻭﺍﻟﺪﻟﻴﻞ‬


‫رأﯾﺖ ﻛﯿﻒ أﻧﻨﺎ اﺗﺒﻌﻨﺎ ﻓﻲ اﻟﺘﺮﻣﯿﺰ ﻟﻸﺳﻤﺎء ﺑﺄرﻗﻢ ﻓﺠﻌﻠﻨﺎ ﻟﻜﻞ ﻣﺎدة دراﺳﯿﺔ رﻗﻢ ﺧﺎص ﺑﮭﺎ‬
‫وﻛﺬﻟﻚ ﺟﻌﻠﻨﺎ ﻟﻜﻞ طﺎﻟﺐ رﻗﻢ ﺧﺎص ﺑﮫ‪.‬‬

‫‪67‬‬
‫ھﻨﺎك طﺮﯾﻘﺔ أﻓﻀﻞ ﻣﻦ ذﻟﻚ؛ دﻋﻨﺎ ﻣﺜﻼ ﻧﺮﻣﺰ ﻟﻜﻞ ﻋﺎﻟﻢ أﺳﻤﺎء اﻟﻄﻠﺒﺔ ﺑﺎﻟﺮﻣﺰ ‪ R‬ﻋﻨﺪھﺎ‬
‫ﻧﻘﻮل ﻟﻼﺳﻢ اﻻول ـ اﻟﺬي ھﻮ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ) ﻣﺤﻤﺪ ( ـ إﻧﮫ ـ أو ﺗﺴﻠﺴﻠﮫ ـ ﺳﯿﺄﺧﺬ اﻟﺮﻣﺰ ‪R0‬‬
‫واﻻﺳﻢ اﻟﺜﺎﻧﻲ ت اﻟﺬي ھﻮ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ) ﻋﻠﻲ ( ـ ﺳﯿﺄﺧﺬ اﻟﺮﻣﺰ ‪ R1‬واﻟﺜﺎﻟﺚ ‪ R2‬وھﻜﺬا‪.‬‬
‫وﻟﻠﻤﻮاد اﻟﺪراﺳﯿﺔ ﺳﻨﺮﻣﺰ ﻣﺜﻼ ﺑﺎﻟﺮﻣﺰ ‪ B‬ﻓﺎﻟﻤﺎدة اﻻوﻟﻰ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ﺳﺘﻜﻮن ‪ B0‬واﻟﻤﺎدة‬
‫اﻟﺜﺎﻧﯿﺔ ﺳﯿﻜﻮن ﺗﺴﻠﺴﻠﮭﺎ اﻟﺮﻣﺰ ‪ B1‬وھﻜﺬا ‪ B2‬و ‪ B3‬وﻏﯿﺮ ذﻟﻚ ﻣﻦ اﻟﺮﻣﻮز‪.‬‬

‫اﻷرﻗﺎم اﻟﺼﻐﯿﺮة اﻟﺘﻲ ﺗﺮاھﺎ أﺳﻔﻞ اﻟﺮﻣﺰ ﺗﺴﻤﻰ ) اﻟﺪﻟﯿﻞ ( وھﻲ ﺗﺸﯿﺮ إﻟﻰ ﺗﺴﻠﺴﻞ أو ﻋﻨﻮان‬
‫ﻣﻌﯿﻦ ﻣﻘﺼﻮد‪.‬‬

‫ﻟﻐﺮض اﻟﺘﯿﺴﯿﯿﺮ اﻷﻛﺜﺮ‪ ،‬ﯾﻤﻜﻦ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ أن ﺗﺄﺧﺬ اﻟﻌﻨﺎﺻﺮ ﻛﻜﻞ رﻣﺰا اﺳﻤﯿﺎ واﺣﺪا‬
‫ﻓﻨﻌﻄﻲ ﻣﺜﻼ ﻟﻜﻼ اﺳﻢ اﻟﻄﺎﻟﺐ واﺳﻢ اﻟﻤﺎدة اﻟﺪراﺳﯿﺔ اﻟﺮﻣﺰ ‪ F‬ﻣﺜﻼ أو أي رﻣﺰ‪ .‬وﺑﻤﺎ أنّ‬
‫اﻟﻤﺼﻔﻮﻓﺔ ﺗﺘﻜﻮن ﻣﻦ ﺻﻔﻮف وأﻋﻤﺪة؛ ﻓﺈﻧﮫ ﯾﻤﻜﻦ أن ﯾﺄﺧﺬ ﻛﻞ ﻋﻨﺼﺮ ﺗﺴﻠﺴﻞ ﺻﻔﮫ وﺗﺴﻠﺴﻞ‬
‫ﻋﻤﻮده ﺑﺠﺎﻧﺐ اﻻﺳﻢ اﻟﻜﻠﻲ اﻟﻤﻮﺿﻮع ﻟﻠﻤﺼﻔﻮﻓﺔ‪.‬‬

‫ﻓﻤﺜﻼ أﺳﻤﯿﻨﺎ ﻣﺼﻔﻮﻓﺔ ﺑﺎﻻﺳﻢ ‪ masf‬ﻋﻨﺪھﺎ ﯾﻤﻜﻦ ان ﻧﺸﯿﺮ إﻟﻰ اﻟﻌﻨﺼﺮ اﻟﺬي ﯾﺴﻜﻦ ﻓﻲ‬
‫اﻟﺼﻒ اﻻول واﻟﻌﻤﻮد اﻻول ﺑﺎﻟﺮﻣﺰ ‪ masf0,0‬وان ﻧﺸﯿﺮ ﻟﻠﻌﻨﺼﺮ اﻟﺬي ﯾﺴﻜﻦ اﻟﺼﻒ‬
‫اﻷول ﻓﻲ اﻟﻌﻤﻮد اﻟﺜﺎﻧﻲ ﺑﺎﻟﺮﻣﺰ ‪ masf0,1‬وھﻜﺬا‪.‬‬

‫وﻓﯿﻤﺎ ﯾﻠﻲ اﻻﺳﻤﺎء اﻟﺒﺮﻣﺠﯿﺔ ﻟﻤﺼﻔﻮﻓﺔ ﻣﻌﯿﻨﺔ أﺳﻤﯿﻨﺎھﺎ ‪msf‬‬

‫‪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‬‬
‫ﲨﻞ ﺍﳌﻼﺣﻈﺎﺕ ﻭﺍﻟﺘﻌﻠﻴﻘﺎﺕ‬
‫ﻣﻦ اﻟﻤﻔﻀﻞ أن ﯾﻜﻮن ﺑﺮﻧﺎﻣﺠﻚ واﺿﺤﺎ ﺑﺨﻄﻮاﺗﮫ‪ ،‬ﻟﺬﻟﻚ ﯾﺴﺘﺤﺴﻦ ذﻛﺮ ﺑﻌﺾ اﻟﺸﺮوح‬
‫اﻟﺒﺴﯿﻄﺔ ﻣﻊ ﺑﻌﺾ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﯾﺮاد إﺟﺮاؤھﺎ ﻟﻐﺮض ﺗﻮﺿﯿﺤﮭﺎ ﻟﻠﻐﯿﺮ اﻟﺬي رﺑﻤﺎ ﯾﺮﯾﺪ أن‬
‫ﯾﻄﻮر ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ أو ﻟﻚ ﻣﺴﺘﻘﺒﻼ ﺣﺘﻰ ﺗﺘﺬﻛﺮ ﻟﻤﺎذا ﻓﻌﻠﺖ ﻛﺬا‪.‬‬

‫ﺟﻤﻞ اﻟﺘﻌﻠﯿﻘﺎت ﻻﺗﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺷﻲء وﻻﺗﺘﺮﺟﻢ وﯾﺘﺠﺎھﻠﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ وﻛﺄﻧﮭﺎ‬
‫ﻏﯿﺮ ﻣﻮﺟﻮدة‪.‬‬

‫ھﻨﺎك ﻋﺪة أﺳﺎﻟﯿﺐ ﻟﺠﻤﻞ اﻟﺘﻌﻠﯿﻘﺎت‪ ،‬ﻓﮭﻨﺎك اﺳﻠﻮب ﻟﺠﻤﻞ ﻣﻦ ﺳﻄﺮ واﺣﺪ وھﻨﺎك اﺳﻠﻮب ﻟﻌﺪة‬
‫اﺳﻄﺮ‪.‬‬

‫ﺗﻌﻠﻴﻖ ﺍﻟﺴﻄﺮ ﺍﻟﻮﺍﺣﺪ‬


‫ﯾﺒﺪأ ھﺬا ﺑﺸﺮطﺘﯿﻦ ﻣﺎﺋﻠﺘﯿﻦ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫‪// A first program in C++.‬‬

‫ﻓﻤﺎ أن ﯾﺠﺪ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺸﺮطﺘﯿﻦ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺠﻤﻠﺔ ﺣﺘﻰ ﯾﺘﺠﺎھﻠﮭﺎ وﯾﺘﺠﺎھﻞ ﻣﺎﺑﻌﺪھﺎ ﻋﻠﻰ ﻧﻔﺲ‬
‫اﻟﺴﻄﺮ‪.‬‬

‫ﺗﻌﻠﻴﻖ ﺍﻷﺳﻄﺮ ﺍﳌﺘﻌﺪﺩﺓ‬


‫واﻟﺬي ﯾﺒﺪأ ﺑﮭﺬه اﻻﺷﺎرة *‪ /‬وﯾﻨﺘﮭﻲ ﺑﮭﺬه اﻻﺷﺎرة ‪*/‬‬

‫‪74‬‬
‫*‪/‬‬

‫‪A first program in C++.‬‬


‫ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ھﻨﺎ‬

‫‪*/‬‬

‫ﻓﻜﻞ ﻣﺎﺑﯿﻦ اﻻﺷﺎرﺗﯿﻦ ﺳﯿﺘﻢ ﺗﺠﺎھﻠﮭﺎ ﻣﻦ ﻗﺒﻞ اﻟﻤﺘﺮﺟﻢ‪.‬‬


‫ﯾﻤﻜﻦ أن ﺗﺄﺗﻲ اﻟﺘﻌﻠﯿﻘﺎت ﻓﻲ أي ﻣﻜﺎن ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ‪ :‬ﻓﻲ ﺑﺪاﯾﺘﮫ‪ ،‬ﻓﻲ وﺳﻄﮫ‪ ،‬أو ﻓﻲ ﻧﮭﺎﯾﺘﮫ‪.‬‬

‫ﺍﳍﻴﻜﻞ ﺍﻟﻌﺎﻡ ﻟﱪﻧﺎﻣﺞ ﻟﻐﺔ ‪C++‬‬


‫اذا أﻓﺮﻏﻨﺎ ﻛﻞ ا ﻟﺒﺮاﻣﺞ ﻣﻦ ﻣﺤﺘﻮاھﺎ‪ ،‬ﻓﺴﻨﺠﺪ أنّ اﻟﻤﺘﺒﻘﻲ ھﻮ اﻟﮭﯿﻜﻞ اﻟﻌﺎم ﻟﻠﺒﺮﻧﺎﻣﺞ ﻛﻜﻞ‬
‫واﻟﺬي ﯾﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫)(‪int main‬‬
‫{‬

‫;‪return 0‬‬
‫}‬

‫أﻧﺖ ﺗﺘﺴﺎءل‪ :‬ﻣﺎ ﻣﻌﻨﻰ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺘﺒﻘﻲ‪ ،‬أو ﻣﺎ ﻣﻌﻨﻰ ھﺬا اﻟﺠﺰء اﻟﻤﺘﺒﻘﻲ ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ؟‪.‬‬
‫إﻧّﮫ اﻟﮭﯿﻜﻞ اﻟﻌﺎم اﻟﻔﺎﻋﻞ وﻛﺄنّ اﻟﻤﺘﺒﻘﻲ ھﻨﺎ ھﻮ اﻟﻤﺪﯾﺮ اﻟﺬي ﯾﺴﺘﻠﻢ زﻣﺎم إدارة ﻛﻞ ﻣﺎ ﺗﻀﻌﮫ‬
‫ﺑﯿﻦ ﯾﺪﯾﮫ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ اﻟﺬي ﺗﻜﺘﺒﮫ ﻓﻲ ﺣﻀﺮﺗﮫ وﺗﺤﺖ إﺷﺮاﻓﮫ‪.‬‬
‫ھﺬا اﻟﺠﺰء اﻟﻤﺘﺒﻘﻲ ھﻮ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ اﻟﺘﻲ ﺗﺪﯾﺮ ﻛﻞ ﺷﻲء ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ‪.‬‬

‫‪75‬‬
‫ﺍﻟﺪﺍﻟﺔ ﺍﻷﻡ‬
‫‪ C++‬ﺗﻘﻮم ﻋﻠﻰ داﻟﺔ رﺋﯿﺴﺔ ﺗﻜﺘﺐ ﻓﯿﮭﺎ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ‬ ‫ﻗﺪ ذﻛﺮﻧﺎ ﺳﺎﺑﻘﺎ ﺑﺄنّ ﻟﻐﺔ‬
‫ﻟﺒﺮﻧﺎﻣﺠﻚ‪ ،‬وأنّ ھﺬه اﻟﺪاﻟﺔ ﺑﻤﺜﺎﺑﺔ اﻷم اﻟﻤﻮﺟﮭﺔ ﻷﺑﻨﺎﺋﮭﺎ‪ ،‬اﻟﺘﻲ ﻣﺎ أن ﺗﺴﺘﺪﻋﻲ أﺣﺪ إﻻ وذھﺐ‬
‫ﯾﻘﻀﻲ اﻟﺸﺄن اﻟﻤﻜﻠﻒ ﺑﮫ ﺛﻢ ﯾﻌﻮد إﻟﯿﮭﺎ ﻛﺄﻧّﮫ ﯾﺨﺒﺮ ﺑﺎﻧﺠﺎز اﻟﻌﻤﻞ اﻟﺬي أُﺳﻨﺪ إﻟﯿﮫ‪.‬‬

‫)(‪int main‬‬ ‫اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﺗﺒﺘﺪئ ﺑﻤﺜﻞ ھﺬه‬

‫;‪return 0‬‬ ‫وﺗﻨﺘﮭﻲ ﺑﻤﺜﻞ ھﺬه‬

‫واﻟﺘﻲ ھﻲ ﺑﻤﺜﺎﺑﺔ ﻛﻠﻤﺔ ) اﻟﻌﻮدة (‪ ،‬ـ اذا ﻛﻨﺖ ﺗﺬﻛﺮ ﺷﺮﺣﻨﺎ ﺳﺎﺑﻘﺎ ـ‪.‬‬

‫)(‪int main‬‬ ‫ﻣﺎ ﺑﻌﺪ‬


‫{‬ ‫ﯾُﻔﺘﺘﺢ ﺑﻘﻮس ﻣﻌﻘﻮف‬

‫;‪return 0‬‬ ‫وﻣﺎ ﺑﻌﺪ‬


‫}‬ ‫ﯾُﻐﻠﻖ ﺑﻘﻮس ﻣﻌﻘﻮف‬

‫ﻣﺎ ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ اﻟﻤﻌﻘﻮﻓﯿﻦ ﯾﺸﻜﻞ ﻛﺘﻠﺔ‪.‬‬


‫ﻣﺎ ﺑﻌﺪ اﻟﻘﻮس اﻷول ﺣﺘﻰ ﻛﻠﻤﺔ ) اﻟﻌﻮدة ( ﺗﻜﺘﺐ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ ﻟﺒﺮﻧﺎﻣﺠﻚ‪.‬‬

‫‪return‬‬ ‫اﻧﺘﮭﺖ ﻛﻠﻤﺔ‬


‫;‬ ‫ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ‬
‫;‪return 0‬‬ ‫ﻷنّ‬
‫ﺗﻌﺘﺒﺮ ﻛﻠﮭﺎ ﺟﻤﻠﺔ اﯾﻌﺎز ﺗﺨﺒﺮ اﻟﻤﺘﺮﺟﻢ ﺑﻮﺻﻮل اﻷﻣﺮ ﻟﻨﮭﺎﯾﺘﮫ وأنّ ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ ﻗﺪ‬
‫اﻛﺘﻤﻞ‪.‬‬

‫‪76‬‬
‫ﺗﺠﺪ ﻛﺬﻟﻚ أنّ ﻛﻠﻤﺔ ) اﻟﻌﻮدة ( ﺗﺤﻤﻞ ﻣﻌﮭﺎ ﻗﯿﻤﺔ اﻟﺼﻔﺮ ) ‪( 0‬‬
‫;‪return 0‬‬

‫ھﺬا ﯾﻌﻨﻲ أنّ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ھﻨﺎ ﻻ ﺗﻌﯿﺪ ﻗﯿﻤﺔ ﻣﻦ ﺟﺮاء ﺗﻨﻔﯿﺬھﺎ‪ ،‬ذﻟﻚ ﻷنّ اﻟﺒﺮﻧﺎﻣﺞ ﻗﺪ وﺻﻞ‬
‫ﻧﮭﺎﯾﺘﮫ وﻟﯿﺲ ھﻮ ﺑﺎﻧﺘﻈﺎر ﻗﯿﻤﺔ ﻣﺤﺘﻤﻠﺔ ﺗﺨﺪﻣﮫ‪.‬‬

‫ﻟﻜﻦ ﻓﻲ دوال أﺧﺮى‪ ،‬أو ﻓﻲ دوال ﺗﻜﺘﺒﮭﺎ أﻧﺖ ﻗﺪ ﺗﻨﺘﮭﻲ ﻛﻠﻤﺔ‬


‫‪return‬‬
‫ﺑﻘﯿﻤﺔ أو ﺗﻌﺒﯿﺮ رﯾﺎﺿﻲ أو أي ﺷﻲء آﺧﺮ‪ .‬وھﺬا ﻗﺪ ﻣﺮ ﺷﺮﺣﮫ ﺳﺎﺑﻘﺎ ﻓﻲ ﻣﻮﺿﻮع اﻟﺪوال و‬
‫وظﯿﻔﺘﮭﺎ‪.‬‬

‫)(‪int main‬‬ ‫ﻧﻌﻮد اﻵن ﻣﺮة أﺧﺮى إﻟﻰ ﻋﺒﺎرة‬


‫ﻟﻨﻘﻮل ﺑﺄنّ اﺳﻢ اﻟﺪاﻟﺔ ھﻨﺎ ھﻮ ‪main‬‬

‫وﻟﻜﻦ اﻟﺪاﻟﺔ ﻋﺎدة ﻣﺎ ﯾﻜﻮن ﻟﮭﺎ وﺳﯿﻂ أو اﻛﺜﺮ ﻛﻤﺎ ﺗﺒﯿﻦ ﻟﻚ ﻣﻦ ﻗﺒﻞ‪ .‬أﻣﺎ ﻓﻲ ﺣﺎﻟﺘﻨﺎ ھﺬه ﻓﻼ‬
‫ﺣﺎﺟﺔ ﻟﻨﺎ ﺑﻮﺳﯿﻂ ﻓﺘﺒﻘﻰ اﻷﻗﻮاس ﺧﺎﻟﯿﺔ ﻣﻦ دون ﺷﻲء‪.‬‬
‫‪int‬‬ ‫أﯾﻀﺎ ﻧﺠﺪ ﻣﺎ ﻗﺒﻞ اﺳﻢ اﻟﺪاﻟﺔ اﻟﻜﻠﻤﺔ‬
‫ھﺬه اﻟﻜﻠﻤﺔ ﺗﺼﻒ وﺗﺒﯿﻦ ﻧﻮع اﻟﺪاﻟﺔ؛ أو ﺑﺘﻌﺒﯿﺮ أﺻﺢ‪ :‬ﻧﻮع اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺳﺘﺘﻘﺒﻠﮭﺎ اﻟﺪاﻟﺔ أو‬
‫ﺗﻌﻄﯿﮭﺎ أو ﺗﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ وﺳﻨﺄﺗﻲ إﻟﻰ ﺗﻮﺿﯿﺢ ذﻟﻚ ﻓﯿﻤﺎ ﺑﻌﺪ‪.‬‬

‫دﻋﻨﺎ اﻵن ﻧﻀﻊ ﻟﻠﮭﯿﻜﻞ اﻟﻌﺎم ﺟﻤﻠﺔ ﺗﻌﻠﯿﻖ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ اﻟﻔﻘﺮة اﻟﺴﺎﺑﻘﺔ ﻟﯿﻜﻮن اﻟﺸﻜﻞ ﻛﺎﻵﺗﻲ‪:‬‬

‫اﻟﮭﯿﻜﻞ اﻟﺮﺋﯿﺲ اﻟﻔﺎﻋﻞ‪//‬‬


‫)(‪int main‬‬
‫{‬

‫;‪return 0‬‬
‫}‬

‫‪77‬‬
‫ﻻﺗﻨﺲ ﺑﺄنّ ﺟﻤﻞ اﻟﺘﻌﻠﯿﻖ ﻻﺗﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ وﻋﻤﻠﮫ‪.‬‬
‫دﻋﻨﺎ ﻧﻀﯿﻒ ﺟﻤﻞ ﺗﻌﻠﯿﻖ أﺧﺮى ﻟﻜﻲ ﻧﺄﻟﻒ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻠﻐﺔ ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ وﻟﻨﺄﻟﻒ وﻧﻔﮭﻢ ﺷﻜﻞ‬
‫اﻟﺒﺮﻧﺎﻣﺞ وھﯿﺌﺘﮫ ﺑﺼﻮرة ﻋﺎﻣﺔ ﺑﺤﯿﺚ ﻻﺗﻌﻮد ﺻﻮرﺗﮭﺎ ﻋﻨﺪﻧﺎ ﻣﺴﺘﻐﺮﺑﺔ‪.‬‬

‫اول ﺑﺮﻧﺎﻣﺞ ﻣﻦ ﺻﻨﻌﻲ‪//‬‬


‫)(‪int main‬‬
‫{‬
‫ھﻨﺎ ﺿﻊ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ‪//‬‬

‫اﻧﺘﮭﺖ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ‪//‬‬


‫;‪return 0‬‬
‫}‬

‫ﻓﯿﻤﺎ ﺑﻌﺪ ﺳﻨﻘﻮم ﺑﺼﻨﺎﻋﺔ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﯾﺠﻤﻊ ﻋﺪدﯾﻦ‪ .‬ﻟﻜﻦ اﻟﺬي ﻧﺮﯾﺪ ﺗﺄﻛﯿﺪه ھﻨﺎ ھﻮ أنّ ھﺬه‬
‫اﻟﺪاﻟﺔ اﻷم ھﻲ أھﻢ داﻟﺔ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ وﻻ ﯾﻤﻜﻦ اﻻﺳﺘﻐﻨﺎء ﻋﻨﮭﺎ ﻣﻄﻠﻘﺎ‪ .‬أﻣﺎ ﻣﻮﻗﻌﮭﺎ؛ ﻓﻠﯿﺲ‬
‫ﺷﺮطﺎ أن ﯾﻜﻮن ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ؛ ﺑﻞ ﻗﺪ ﺗﺄﺗﻲ ﻓﻲ وﺳﻄﮫ أو ﻧﮭﺎﯾﺘﮫ‪ .‬وﻟﻜﻦ أﯾﻨﻤﺎ ﻛﺎﻧﺖ؛‬
‫ﻓﺎﻟﺘﻨﻔﯿﺬ ﺳﯿﺒﺪأ ﻣﻨﮭﺎ وﯾﻨﺘﮭﻲ إﻟﯿﮭﺎ‪.‬‬

‫ﺇﺩﺭﺍﺝ ﻣﻜﺘﺒﺎﺕ ﺍﻟﻠﻐﺔ ﰲ ﺍﻟﱪﻧﺎﻣﺞ‬


‫ﻋﻤﻞ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺠﻤﻊ ﻋﺪدﯾﻦ؛ ﯾﻌﻨﻲ أﻧﻨﺎ ﺑﺼﺪد ﻋﻤﻞ ﺑﺮﻧﺎﻣﺞ رﯾﺎﺿﻲ ورﺑﻤﺎ ﺳﻨﻘﻮم‬
‫ﺑﺘﻄﻮﯾﺮه ﻻﺣﻘﺎ ﻟﯿﺸﻤﻞ أﻋﻤﺎل أﺧﺮى ﻏﯿﺮ اﻟﻌﻤﻠﯿﺎت اﻟﺒﺴﯿﻄﺔ‪ .‬ﻓﻤﺎ دﻣﻨﺎ ﺑﺼﺪد ﺑﺮﻧﺎﻣﺞ رﯾﺎﺿﻲ‬
‫ﻓﻤﻦ اﻟﻤﺘﻮﻗﻊ أن ﻧﺤﺘﺎج إﻟﻰ دوال وأﺷﯿﺎء رﯾﺎﺿﯿﺔ أﺧﺮى وھﺬا ﯾﻌﻨﻲ أﻧﻨﺎ ﺑﺤﺎﺟﺔ إﻟﻰ ﺿﻢ‬
‫اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ إﻟﻰ ﺑﺮﻧﺎﻣﺠﻨﺎ‪.‬‬

‫‪78‬‬
‫ﻟﻌﻤﻞ ذﻟﻚ وﻟﻀﻢ وادراج أي ﻣﻜﺘﺒﺔ ﻣﻦ ﻟﻐﺔ ﺑﺮﻣﺠﺘﻨﺎ ﻧﺤﺘﺎج إﻟﻰ إﺧﺒﺎر اﻟﻤﺘﺮﺟﻢ ﺑﺬﻟﻚ ﻟﯿﻘﻮم‬
‫ھﻮ ﺑﺎﺳﺘﺪﻋﺎء وادراج ﺗﻠﻚ اﻟﻤﻜﺘﺒﺔ وھﺬا ﻣﺎ ﺗﻘﻮم ﺑﮫ ﺟﻤﻞ وأدوات اﻟﻤﻮﺟﮭﺎت‪.‬‬

‫ﺍﳌﻮﺟﻬﺎﺕ‬
‫‪include‬‬ ‫ﻻدراج ﻣﻜﺘﺒﺔ ﻧﺤﺘﺎج إﻟﻰ ﺟﻤﻠﺔ ﺗﻘﻮم ﺑﺬﻟﻚ‪ .‬ھﺬه اﻟﺠﻤﻠﺔ ﺗﺘﺄﻟﻒ ﻣﻦ ﻛﻠﻤﺔ‬
‫‪#‬‬ ‫اﻟﺘﻲ ﺗﻌﻨﻲ ) ﺗﻀﻤﯿﻦ ( واﻟﺘﻲ ﯾﺴﺒﻘﮭﺎ إﺷﺎرة ﻣﻌﯿﻨﺔ ھﻲ إﺷﺎرة‬
‫اﻟﺘﻲ ﻣﺎ أن ﯾﺮاھﺎ اﻟﻤﺘﺮﺟﻢ ﺣﺘﻰ ﯾﻌﻠﻢ ﺑﺄﻧﮫ ﺑﺼﺪد ﺗﻀﻤﯿﻦ ﻣﻜﺘﺒﺔ ﻣﻌﯿﻨﺔ‪.‬‬
‫‪#include‬‬ ‫أﺻﺒﺢ ﺷﻜﻞ اﻟﻜﻠﻤﺔ اﻵن ھﻜﺬا‪:‬‬
‫ﻟﻜﻦ ھﺬا ﻻ ﯾﻜﻔﻲ؛ ﻓﺎﻟﻜﻠﻤﺔ اﻟﺴﺎﺑﻘﺔ ﺗﺨﺒﺮ اﻟﻤﺘﺮﺟﻢ ﺑﻌﻤﻠﯿﺔ اﻟﺘﻀﻤﯿﻦ؛ وﻟﻜﻦ ﺗﻀﻤﯿﻦ ﻣﺎذا؟‪ .‬أي‬
‫ﻣﻜﺘﺒﺔ ﻣﻦ ﻣﻜﺘﺒﺎت اﻟﻠﻐﺔ ﯾﺮاد ﺗﻀﻤﯿﻨﮭﺎ؟‪.‬‬
‫<‬ ‫>‬ ‫وﻟﺘﻌﯿﯿﻦ ذﻟﻚ ﯾﺄﺗﻲ ﺑﻌﺪ اﻟﻜﻠﻤﺔ ھﺎﺗﯿﻦ اﻹﺷﺎرﺗﯿﻦ‬
‫اﻟﺘﻲ ﺳﯿﻜﺘﺐ ﺑﯿﻨﮭﻤﺎ اﺳﻢ اﻟﻤﻜﺘﺒﺔ اﻟﻤﺮادة‪.‬‬
‫ﻓﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻨﮭﺎﺋﻲ ﻛﮭﺬا ﻣﺜﻼ‪:‬‬
‫>‪#include <iostream‬‬
‫وﻟﯿﺲ ھﻨﺎك ﺑﻌﺪ ھﺬه اﻟﺠﻤﻠﺔ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻷنّ ﺟﻤﻠﺔ اﻟﺘﻮﺟﯿﮫ ﻟﯿﺴﺖ ﺟﻤﻠﺔ ﺗﻨﻔﯿﺬﯾﺔ ﯾﺮاد‬
‫ﻧﺘﯿﺠﺘﮭﺎ؛ ﻟﯿﺴﺖ ھﻲ ﻣﻦ ﺻﻠﺐ ﻗﻀﯿﺔ ﺑﺮﻧﺎﻣﺠﻨﺎ؛ إﻧﻤﺎ ھﻲ ﺑﺸﻜﻞ ﺗﻘﺮﯾﺒﻲ‪ ،‬إﺷﻌﺎر ﻟﻠﻤﺘﺮﺟﻢ ﺑﺄن‬
‫ﯾﻀﻢ ﻣﺤﺘﻮﯾﺎت ﻣﻠﻒ ﻣﺎ إﻟﻰ ﺟﺎﻧﺐ ﻋﻤﻠﻨﺎ‪.‬‬

‫ﺍﳌﻜﺘﺒﺔ ﺍﻟﺴﺎﺑﻘﺔ >‪<iostream‬‬


‫ﺗﻀﻢ أﻏﺮاﺿﺎ ودوال وظﯿﻔﺘﮭﺎ أن ﺗﺴﮭﻞ ﻟﻨﺎ وﺗﺴﻤﺢ ﺑﺈدﺧﺎل اﻷﻋﺪاد واﻟﺤﺮوف ﻣﻦ ﻟﻮﺣﺔ‬
‫اﻟﻤﻔﺎﺗﯿﺢ وﺑﻌﺮﺿﮭﺎ ﻛﺬﻟﻚ وإﺧﺮاﺟﮭﺎ ﻋﻠﻰ ﺷﺎﺷﺔ ﺣﺎﺳﺒﺘﻨﺎ‪.‬‬

‫‪79‬‬
‫ﻟﻜﻨﻨﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ اﻟﺮﯾﺎﺿﻲ ﻛﻤﺎ ﻗﻠﻨﺎ‪ ،‬ﻧﺤﻦ ﺑﺤﺎﺟﺔ إﻟﻰ ﺿﻢ اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ إﻟﯿﻨﺎ واﻟﺘﻲ‬
‫‪cmath‬‬ ‫اﺳﻤﮭﺎ‬
‫ﻓﻠﮭﺬا ﺳﺘﻜﻮن اﻟﺠﻤﻠﺔ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬
‫>‪#include <cmath‬‬
‫وﯾﻤﻜﻦ أن ﻧﻀﯿﻒ إﻟﻰ ھﺬه ﺗﻌﻠﯿﻖ ﻟﯿﻜﻮن ﺷﻜﻠﮭﺎ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫>‪#include <cmath‬‬ ‫ﺗﻀﻤﯿﻦ اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ ‪//‬‬


‫وﻣﺮة أﺧﺮى ﻻ ﺗﻨﺴﻰ ﺑﺄنّ ﺟﻤﻠﺔ اﻟﺘﻌﻠﯿﻖ ﯾﻤﻜﻦ أن ﺗﺄﺗﻲ ﻓﻲ أي ﻣﻜﺎن‪.‬‬

‫ﺳﯿﺼﺒﺢ ﺷﻜﻞ اﻟﺒﺮﻧﺎﻣﺞ اﻵن ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫ﺑﺮﻧﺎﻣﺞ ﺟﻤﻊ ﻋﺪدﯾﻦ‪//‬‬


‫ﺗﻀﻤﯿﻦ اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ ‪#include <cmath> //‬‬

‫)(‪int main‬‬
‫{‬
‫ھﻨﺎ ﺿﻊ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ‪//‬‬

‫اﻧﺘﮭﺖ اﻟﺨﻄﻮات اﻟﺮﺋﯿﺴﺔ‪//‬‬


‫;‪return 0‬‬
‫}‬

‫ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﻛﮭﺬا‪ ،‬ﻧﺤﻦ ﻻﻧﺤﺘﺎج ﺣﻘﯿﻘﺔ إﻟﻰ ﺟﻤﻠﺔ اﻟﺘﻮﺟﯿﮫ ﻷﻧﻨﺎ ﻻ ﻧﺤﺘﺎج ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ‬
‫ھﺬا إﻟﻰ ھﺬه اﻟﻤﻜﺘﺒﺔ اﻟﺮﯾﺎﺿﯿﺔ اﻟﻤﺨﺘﺼﺔ؛ وﻟﻜﻦ ﻛﻤﺎ ذﻛﺮﻧﺎ‪ ،‬ﻟﻌﻠﻨﺎ ﻧﻔﻜﺮ ﻣﺴﺘﻘﺒﻼ ﻓﻲ ﺗﻄﻮﯾﺮه‬
‫وﺟﻌﻠﮫ ﺑﺮﻧﺎﻣﺠﺎ رﯾﺎﺿﯿﺎ ﺑﺤﺘﺎ‪.‬‬

‫‪80‬‬
‫اﻟﻤﻮﺟﮭﺎت ـ ﻛﻤﺎ ﺗﺮى ـ ﯾﻜﻮن ﻣﻮﻗﻌﮭﺎ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ ﻗﺒﻞ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ‪ .‬وھﺬه ھﻲ ﻣﻦ‬
‫ﺿﻤﻦ اﻟﺠﻤﻞ اﻟﺘﻲ إن ﻛﺎن وﺟﻮدھﺎ ﺿﺮورﯾﺎ‪ ،‬ﻓﻼﺑﺪ أن ﺗﺬﻛﺮ ﻓﻲ أول اﻟﺒﺮﻣﺠﺔ ﻓﻲ اﻟﻘﺴﻢ‬
‫اﻷول ﻣﻨﮫ‪.‬‬
‫ﻓﻲ ‪. C#‬‬ ‫‪include‬‬ ‫ﻻﺗﻮﺟﺪ ﻋﺒﺎرة اﻟﺘﻀﻤﯿﻦ‬

‫ﺍﺳﺘﺪﻋﺎﺀ ﻣﻜﺘﺒﺔ ‪C++‬‬


‫ﻛﻤﺎ ذﻛﺮﻧﺎ‪ :‬اﻟﻤﻜﺘﺒﺔ ﺗﻀﻢ ﻋﺪة ﺧﺎﻧﺎت ﻟﻌﺪة ﻣﮭﺎم وأﻧﮭﺎ ﺗﺴﺘﺪﻋﻰ ﺑﺠﻤﻠﺔ اﻟﺘﻀﻤﯿﻦ اﻟﺘﻲ ﺑﯿﻨﺎھﺎ‪.‬‬
‫ﻋﻨﺪ دراﺳﺘﻚ ﻟﻤﻮﺿﻮع اﻟﺪوال‪ ،‬ﺳﺘﺮى أﻧّﻚ ﺣﯿﻦ ﺗﻨﺸﺊ داﻟﺔ ﻓﻌﻠﯿﻚ ﻗﺒﻞ ذﻟﻚ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ‬
‫ﺑﺘﻌﺎﺑﯿﺮ ﻣﻌﯿﻨﺔ ﺛﻢ ﻛﺘﺎﺑﺔ ﺟﺴﻢ اﻟﺪاﻟﺔ وﻣﻦ ﺛﻢ اﺳﺘﺪﻋﺎﺋﮭﺎ‪ .‬ھﺬا ﻓﻲ اﻟﺪوال اﻟﺘﻲ ﺗﻨﺸﺌﮭﺎ أﻧﺖ؛ أﻣﺎ‬
‫ﻣﻊ دوال اﻟﻤﻜﺘﺒﺔ ﻓﺘﻜﻮن ﻋﺒﺎرة اﻟﺘﻮﺟﯿﮫ ھﻲ ﺑﻤﺜﺎﺑﺔ اﻟﺘﺼﺮﯾﺢ أﯾﻀﺎ وﺑﮭﺬا ﻟﻦ ﺗﺤﺘﺎج إﻟﻰ‬
‫اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪوال اﻟﺠﺎھﺰة اﻟﺘﻲ ﺗﺴﺘﺨﺪﻣﮭﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ‪.‬‬

‫ﻣﻦ أھﻢ ﻣﺎ ﺗﻀﻤﮫ اﻟﻤﻜﺘﺒﺔ أﻏﺮاض ﺗﺨﺪم اﻟﺪﺧﻞ واﻟﺨﺮج‪.‬‬

‫ﻣﻜﺘﺒﺔ ﺍﻟﺪﺧﻞ ﻭﺍﳋﺮﺝ ‪iostream‬‬


‫ﻋﻨﺪﻣﺎ ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺤﺎﺳﺐ‪ ،‬ﻓﻌﻠﯿﻚ أن ﺗﺴﺘﺨﺪم ﻟﻮﺣﺔ ﻣﻔﺎﺗﯿﺤﮫ ﻣﺜﻼ ﻟﻐﺮض إدﺧﺎل اﻟﺤﺮوف‬
‫واﻻرﻗﺎم وﻏﯿﺮھﺎ‪ ،‬وﻛﺬﻟﻚ ﺗﺮﯾﺪ أن ﺗﺮى اﻟﻨﺘﺎﺋﺞ ﺟﺎھﺰة أﻣﺎﻣﻚ ﻋﻠﻰ ﺷﺎﺷﺔ ﺣﺎﺳﺒﺘﻚ أو ﻋﻠﻰ‬
‫أي ﺟﮭﺎز ﻋﺮض آﺧﺮ‪.‬‬

‫ﻋﻤﻠﯿﺔ اﻻدﺧﺎل ھﺬه أو ﻛﯿﻔﯿﺔ اﻹﺧﺮاج أو اﻟﺮﺑﻂ ﻣﺎﺑﯿﻨﮭﺎ وﻣﺎﺑﯿﻦ أﺟﮭﺰة اﻟﺤﺎﺳﺒﺔ اﻷﺧﺮى؛‬
‫ﻟﯿﺴﺖ ﺑﺎﻟﺴﮭﻮﻟﺔ اﻟﺘﻲ ﺗﺘﺼﻮرھﺎ؛ إﻧﻤﺎ ھﻲ ﻋﻤﻠﯿﺔ ﺗﺤﺘﺎج إﻟﻰ ﺗﺤﻮﯾﻼت وﺗﻔﺴﯿﺮات وﻏﯿﺮ ذﻟﻚ‪.‬‬

‫‪81‬‬
‫وﻛﻤﺎ ﺑﯿﻨﺎ ﻓﻲ اﻟﻤﺮﺣﻠﺔ اﻻوﻟﻰ‪ :‬ﻓﺄﻧﺖ ﻻ ﺗﺪﺧﻞ أرﻗﺎﻣﺎ أو ﺣﺮوﻓﺎ إﻧﻤﺎ ﺿﺮﺑﺎت ﻛﮭﺮﺑﺎﺋﯿﺔ ﻣﺨﺘﻠﻔﺔ‬
‫ﺗﺘﺮﺟﻢ إﻟﻰ ﺣﺮوف وأﻋﺪاد‪ .‬ﻗﺎم اﻟﻤﺒﺮﻣﺠﻮن اﻟﺨﺒﺮاء ﺑﮭﺬا اﻟﻌﻤﻞ ﻧﯿﺎﺑﺔ ﻋﻨﻚ ﺣﺘﻰ ﺗﺴﺘﻠﻢ ﻛﻞ‬
‫ﺷﻲ ء ﺟﺎھﺰ أﻣﺎﻣﻚ ﻛﻤﺎ ﺗﺮاه ﻓﻲ ﻋﺎﻟﻤﻚ اﻟﺬي ﺗﺤﯿﺎه وﻣﺎ ﻋﻠﯿﻚ إﻻ أن ﺗﻔﻜﺮ ﺑﻤﻌﺎﻟﺠﺔ ﻗﻀﺎﯾﺎك‬
‫ﻛﻤﺎ ﺗﺒﺪو ﻟﻚ ﻓﻲ ﻋﺎﻟﻤﻚ اﻟﺬي ﺗﺮاه‪ .‬أي اﻧﮭﻢ ﺟﻌﻠﻮا ﻛﻞ ﺷﻲء ﯾﺒﺪو ﻟﻚ ﻛﻤﺎ ﻛﻨﺖ أﻧﺖ ﺗﺘﻮﻗﻊ أن‬
‫ﺗﺮاه وﺑﺬﻟﻚ ﺳﺘﻜﻮن اﻷﻣﻮر ﯾﺴﯿﺮة ﻋﻠﯿﻚ‪.‬‬

‫اذن ﻣﻦ ﺿﻤﻦ ﻋﻤﻠﮭﻢ أﻧﮭﻢ ھﯿﺌﻮا ﻟﻚ ﺑﺮاﻣﺞ ﺗﺴﺎﻋﺪك ﻋﻠﻰ إدﺧﺎل وإﺧﺮاج اﻟﻤﻌﻠﻮﻣﺎت‪ .‬وﻣﻦ‬
‫أھﻤﮭﺎ اﻟﻜﺎﺋﻨﺎت ‪ cin‬و ‪cout‬‬
‫واﻟﺘﻲ ھﻲ أﻏﺮاض ﻣﺸﺘﻘﺔ ﻣﻦ أﺻﻨﺎف ﻛﻤﺎ ﻗﺮﺑﻨﺎ ﻟﺬﻟﻚ ﻓﻲ ﻣﻮﺿﻮع اﻟﻔﺼﺎﺋﻞ واﻟﻜﺎﺋﻨﺎت‪.‬‬

‫ﻏﺮﺽ ﺍﻹﺩﺧﺎﻝ ‪cin‬‬


‫وﯾﻠﻔﻆ ‪ . c in‬ﻓـ ‪ c‬إﺷﺎرة إﻟﻰ ﻟﻐﺎت ﻋﺎﺋﻠﺔ ‪ . c‬و ‪ in‬اﻟﺘﻲ ﺗﻔﯿﺪ ﻣﻌﻨﻰ اﻟﺪﺧﻞ‪ .‬وﻣﺜﻠﻤﺎ‬
‫أﻧﻚ ﺗﺤﻤﻞ اﺳﻢ ﯾﺠﺐ أن ﯾﺴﺒﻘﮫ اﺳﻢ اﺑﯿﻚ وﺟﺪك ﻟﻜﻲ ﺗُﻮَﺛﻖ ﻓﻲ إدارة اﻟﻤﺪرﺳﺔ؛ ﻛﺬﻟﻚ‬
‫‪ : cin‬ﺗﻨﺘﻤﻲ إﻟﻰ ﻋﺎﺋﻠﺔ ﻟﮭﺎ أﺳﻤﺎء ﺟﺪ أﻋﻠﻰ ﺗﺴﻤﻰ ﻓﻀﺎء اﻷﺳﻤﺎء‪ .‬وھﻜﺬا أﺧﺘﮭﺎ ‪. cout‬‬
‫ﻓﻀﺎء اﻷﺳﻤﺎء ھﺬا ـ أو ﻧﻄﺎﻗﮫ ـ اﻟﺬي ﺗﻨﺘﻤﻲ إﻟﯿﮫ ھﻮ ﺑﺎﺳﻢ ‪. std‬‬
‫ﻓﻠﺬﻛﺮ ‪ cin‬ﯾﺠﺐ أن ﻧﺴﺒﻘﮭﺎ ﺑﺬﻛﺮ ﻓﻀﺎء اﺳﻤﮭﺎ ‪. std‬‬
‫وﻟﻌﻤﻞ ذﻟﻚ ﯾﺠﺐ اﻟﻔﺼﻞ ﻣﺎ ﺑﯿﻦ اﻻﺳﻤﯿﻦ ﺑﺄداة ﻣﻌﯿﻨﺔ ھﻲ ھﺬه ‪::‬‬
‫‪std::cin‬‬ ‫ﻓﯿﻜﻮن اﻻﺳﻢ ھﻜﺬا‪:‬‬
‫ﺑﻤﻌﻨﻰ أنّ ‪ cin‬ﺗﻨﺘﻤﻲ إﻟﻰ ‪std‬‬
‫اﻟﺘﻌﺒﯿﺮ ﻟﻢ ﯾﻜﺘﻤﻞ ﺑﻌﺪ‪ ،‬وﻟﻜﻲ ﯾﻜﺘﻤﻞ ﻧﺤﺘﺎج إﻟﻰ أداة أﺧﺮى ﺗﺴﻤﻰ ھﻨﺎ أداة ﻣﺠﺮى اﻟﺪﺧﻞ وھﺬه‬
‫>>‬ ‫ھﻲ‬

‫‪82‬‬
‫>> ‪std::cin‬‬ ‫ﻓﯿﻜﻮن ﺷﻜﻞ اﻟﺘﻌﺒﯿﺮ ھﻜﺬا‬
‫وﻣﺎ ﺑﻌﺪ ھﺬه اﻷداة >> ﯾﺄﺗﻲ ﻣﺘﻐﯿﺮ أو ﺷﻲء ﻣﻤﺎ ﺳﻨﺸﺮﺣﮫ ﻻﺣﻘﺎ ﻓﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ‪.‬‬

‫ﻏﺮﺽ ﺍﻹﺧﺮﺍﺝ ‪cout‬‬


‫وﯾﻠﻔﻆ ‪ c out‬اﻟﺬي ﯾﻔﯿﺪ اﻟﺨﺮج وﻋﺮض اﻟﻤﻌﻠﻮﻣﺎت ﻋﻠﻰ اﻟﺸﺎﺷﺔ أو ﻏﯿﺮ ذﻟﻚ‪.‬‬
‫ﺷﻜﻞ اﻟﺘﻌﺒﯿﺮ ﺳﯿﻜﻮن ﺷﺒﯿﮭﺎ ﻛﻤﺎ ﻣﺮ ﻣﻊ ﻏﺮض اﻹدﺧﺎل‪ .‬ﻓﺴﺘﺮاه ھﻜﺬا ﻣﻊ ﻣﺜﺎل ﻟﺠﻤﻠﺔ ﻧﺮﯾﺪ‬
‫أن ﻧﺮاھﺎ ﻋﻠﻰ اﻟﺸﺎﺷﺔ‬
‫;"!‪std::cout << "Welcome to C++‬‬
‫اﻟﺠﻤﻠﺔ اﻟﺘﻲ ﻧﺮﯾﺪ أن ﺗﻈﮭﺮ ﻋﻠﻰ اﻟﺸﺎﺷﺔ ﺣﺼﺮت ﺑﻌﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ " "‬
‫وﺧﺘﻤﺖ اﻟﺘﻌﻠﯿﻤﺔ ﻛﻠﮭﺎ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ‪.‬‬

‫ﺑﺮﻧﺎﻣﺞ ﺑﺴﻴﻂ ﻟﻠﻌﺮﺽ‬

‫ﺑﻤﺎ أﻧﻨﺎ ﺑﺼﺪد ﺑﺮﻧﺎﻣﺞ ﺣﺴﺎﺑﻲ؛ ﻓﻼﺑﺪ إذن أن ﻧﺘﻮﻗﻊ ﻧﺘﯿﺠﺔ ﯾﺠﺐ أن ﻧﺮاھﺎ ﻋﻠﻰ اﻟﺸﺎﺷﺔ‪ .‬ﻟﺬﻟﻚ‬
‫دﻋﻨﺎ ﻣﻊ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ ﻛﺎﻣﻞ ﯾﻌﺮض ﺟﻤﻠﺔ ﺑﺴﯿﻄﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ ھﻲ !‪Welcome to C++‬‬
‫ﺳﻨﺤﺘﺎج إﻟﻰ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﻣﺴﺒﻮﻗﺔ ﺑﺠﻤﻠﺔ اﻟﺘﻮﺟﯿﮫ ﻟﻀﻢ ﻣﻜﺘﺒﺔ اﻟﺪﺧﻞ واﻟﻌﺮض وﻣﺎ ﺑﯿﻦ‬
‫أﺳﻄﺮ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ ﺳﻨﻜﺘﺐ ﺗﻌﻠﯿﻤﺘﻨﺎ اﻟﻮﺣﯿﺪة‬
‫;"!‪std::cout << "Welcome to C++‬‬

‫اﻟﺘﻲ ﺳﺘﻌﺮض ﻟﻨﺎ ﺗﻠﻚ اﻟﻜﻠﻤﺎت اﻟﻤﺮادة‪ .‬وﺑﺎﻟﺘﺎﻟﻲ ﺳﯿﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ ھﻮ ھﺬا‪:‬‬

‫‪83‬‬
‫‪.‬ﺑﺮﻧﺎﻣﺞ ﯾﻌﺮض ﺟﻤﻠﺔ ‪//‬‬
‫>‪#include <iostream‬‬

‫ھﻨﺎ ﺗﺒﺪأ اﻟﺪاﻟﺔ اﻷم ‪//‬‬


‫)(‪int main‬‬
‫{‬
‫;"!‪std::cout << "Welcome to C++‬‬

‫;‪return 0‬‬ ‫ھﺬه ﻧﮭﺎﯾﺔ اﻟﺒﺮﻧﺎﻣﺞ ‪//‬‬

‫ﻧﮭﺎﯾﺔ اﻟﺪاﻟﺔ اﻷم ‪} //‬‬

‫واﻟﺒﺮﻧﺎﻣﺞ ﺑﺪون ﺗﻌﻠﯿﻘﺎت ﺳﯿﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫>‪#include <iostream‬‬

‫)(‪int main‬‬
‫{‬
‫;"!‪std::cout << "Welcome to C++‬‬

‫;‪return 0‬‬

‫}‬

‫‪.................‬‬

‫ﻋﺒﺎﺭﺓ ‪ using‬ﻭ ‪namespace‬‬


‫ﻋﻠﻰ ﻓﺮض أﻧﻨﺎ ﻧﺴﺘﺨﺪم ھﺬه اﻟﻌﺒﺎرة ﻛﺜﯿﺮا ‪ std::cout‬وأﻧﮭﺎ ﺗﺘﻜﺮر ﻟﺪﯾﻨﺎ؛ ﻟﺬﻟﻚ ﻣﻦ اﻷﺳﮭﻞ‬
‫أن ﻧﺠﺪ طﺮﯾﻘﺔ ﺗﺄﺗﻲ ﺑﺎﻻﺳﻢ اﻟﻤﺮاد ﻓﻘﻂ دون ﻋﺎﺋﻠﺘﮫ‪ .‬ﻟﮭﺬا وﺿﻌﺖ ﻛﻠﻤﺔ ‪ . using‬اﻟﺘﻲ ﺗﺄﺗﻲ‬
‫;‪ using std::cout‬ﻟﻤﺮة واﺣﺪة‬ ‫ﻓﻲ ﺑﺪاﯾﺎت اﻟﺒﺮﻧﺎﻣﺞ ﻣﻊ ﻣﺮﺣﻠﺔ اﻟﺘﻮﺟﯿﮫ ﻓﻨﻜﺘﺐ ھﻨﺎك‪:‬‬

‫‪84‬‬
‫" << ‪ cout‬ﻓﻘﻂ ﻣﻊ ذﻛﺮ اﻟﻨﺺ اﻟﻤﺮاد ﺑﯿﻦ ﻋﻼﻣﺘﻲ‬ ‫ﺛﻢ ﻧﻜﺘﺐ ﻓﻲ ﺑﻘﯿﺔ اﻟﺒﺮﻧﺎﻣﺞ ;"‬
‫اﻻﻗﺘﺒﺎس‪.‬‬
‫ﻋﺒﺎرة ;‪ using std::cout‬ﻛﺄﻧﮭﺎ ﺗﺨﺒﺮ اﻟﻤﺘﺮﺟﻢ ﺑﺄﻧﻨﺎ ﺳﻨﺴﺘﻌﻤﻞ أﺳﻤﺎء ﺗﻠﻚ اﻟﻌﺎﺋﻠﺔ وأﺑﻨﺎؤھﺎ‬
‫ﺳﯿﺘﻮاﺟﺪون ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﻤﮭﻢ ﻓﻘﻂ‪ .‬ھﺬا ﯾﺸﺒﮫ ﺻﺪﯾﻖ ﻟﻚ ﯾﻌﺮف أﺳﻤﺎء ﻋﺎﺋﻠﺘﻚ ﻓﻤﺎ أن‬
‫ﯾﺨﺒﺮه أﺣﺪ ﺑﺄنّ ﻓﻼن ﻣﻦ اﻟﻌﺎﺋﻠﺔ ﻣﺘﻮاﺟﺪ أو أنّ أﻓﺮاد ﻋﺎﺋﻠﺘﻚ ﻣﺘﻮاﺟﺪون إﻻ وﺳﯿﻌﻠﻤﮭﻢ وﯾﻌﻠﻢ‬
‫اﻧﺘﻤﺎءاﺗﮭﻢ ﺑﻤﺠﺮد ﺣﻀﻮر أﺳﻤﺎﺋﮭﻢ اﻟﺸﺨﺼﯿﺔ‪.‬‬
‫ﻋﻠﻰ ھﺬا ﺳﯿﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ اﻟﺴﺎﺑﻖ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬

‫>‪#include <iostream‬‬

‫;‪using std::cout‬‬

‫)(‪int main‬‬
‫{‬
‫;"!‪cout << "Welcome to C++‬‬

‫;‪return 0‬‬

‫}‬

‫وﺑﺈﺿﺎﻓﺔ ﺗﻌﻠﯿﻖ ﻟﺘﻠﻚ اﻟﻌﺒﺎرة ﯾﻜﻮن ﺷﻜﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫>‪#include <iostream‬‬

‫;‪using std::cout‬‬ ‫‪// program uses cout‬‬

‫)(‪int main‬‬
‫{‬
‫;"!‪cout << "Welcome to C++‬‬

‫;‪return 0‬‬

‫}‬

‫‪85‬‬
using std::cin; ‫ﻓﻲ ﺑﺮﻧﺎﻣﺞ آﺧﺮ رﺑﻤﺎ ﻧﺤﺘﺎج اﻟﻰ‬
‫ اﻧﻘﻞ اﻟﻤﺆﺷﺮ‬:‫اﻟﺘﻲ ﺗﻌﻨﻲ‬ using std::endl; ‫وﻛﺬﻟﻚ رﺑﻤﺎ اﻟﻰ أﺷﯿﺎء أﺧﺮى ﻣﻦ ﻣﺜﻞ‬
.‫اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ‬
:‫وﻋﻠﻰ ھﺬا ﺳﯿﻜﻮن ﺷﻜﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻛﮭﺬا‬
#include <iostream>

using std::cout; // program uses cout

using std::cin; // program uses cin

using std::endl; // program uses endl

int main()
{
cout << "Welcome to C++!";

return 0;

‫ أﺑﻨﺎء إﺧﻮة؛ ﻟﺬﻟﻚ‬endl ‫ و‬cout ‫ و‬cin ‫ وﻟﻜﻮن‬،‫ ﻛﺜﯿﺮا‬using ‫ھﻨﺎ ﺳﯿﺼﺒﺢ اﺳﺘﺨﺪام‬
‫اﻟﺴﺎﺑﻘﺔ ﺑﺠﻤﻠﺔ واﺣﺪة ﺗﻐﻄﯿﮭﺎ وھﻲ ﺑﺎﺳﺘﻌﻤﺎل ﻛﻠﻤﺔ‬ using ‫ﯾﻤﻜﻦ اﺧﺘﺼﺎر ﻋﺒﺎرات‬
:‫ ﺑﮭﺬا اﻟﺸﻜﻞ‬.namespace

#include <iostream>

using namespace std; // std ‫ﺳﻨﺴﺘﺨﺪم ﻋﺎﺋﻠﺔ‬

int main()
{
cout << "Welcome to C++!";

return 0;

C# ‫ و‬C++ ‫ ﺑﯿﻦ‬namespace ‫ و‬using ‫ھﻨﺎك ﻓﺮق ﻓﻲ اﺳﺘﻌﻤﺎل اﻟﻜﻠﻤﺘﯿﻦ‬

86
‫ﻓﻲ ‪ C#‬ﻧﺴﺘﺨﺪم ‪ using‬ﻟﺘﻀﻤﯿﻦ ﻣﻜﺘﺒﺎت اﻟﻠﻐﺔ وﻛﺎﺋﻨﺎﺗﮭﺎ‪ .‬ﻓﻜﻞ ﻛﺎﺋﻨﺎت ﻋﺎﺋﻠﺔ ‪C.net‬‬
‫ﻓﻜﻞ اﻟﻜﺎﺋﻨﺎت ﻣﺸﺘﻘﺔ‬ ‫‪System‬‬ ‫ﺗﺮﺟﻊ اﻟﻰ اﻟﻜﺎﺋﻦ ‪ Object‬اﻟﺬي ﯾﻨﺘﻤﻲ اﻟﻰ اﻟﻔﺼﯿﻠﺔ‬
‫‪System.Object‬‬ ‫ﻣﻦ‬
‫;‪ using System‬أي أﻧﻨﺎ ﺳﻨﺴﺘﺨﺪم ﻣﻜﺘﺒﺔ اﻟـ‬ ‫ﻟﺬﻟﻚ ﻓﻲ ‪ C#‬ﻧﺄﺗﻲ أوﻻ ﺑﺎﻟﺠﻤﻠﺔ‬
‫‪System‬‬
‫ﺑﯿﻨﻤﺎ ﻛﻞ ﻓﺼﯿﻠﺔ ﻧﺒﻨﯿﮭﺎ ﻓﻲ ‪ C#‬ﺗﻜﻮن ﻣﺸﺘﻘﺔ وﺗﺎﺑﻌﺔ ﻟﻌﺎﺋﻠﺔ أﻛﺒﺮ ﯾﺼﺮح ﻋﻨﮭﺎ ﺑﻜﻠﻤﺔ‬
‫‪namespace‬‬
‫‪namespace First_Application‬‬ ‫ﻛﻤﺜﻞ‬

‫ﺗﻮﺯﻳﻊ ﲨﻞ ﺍﻟﻄﺒﺎﻋﺔ‬
‫اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﯾﻤﻜﻦ أن ﯾﻜﺘﺐ ﻋﻠﻰ ھﺬه اﻟﺼﻮرة‪:‬‬

‫>‪#include <iostream‬‬

‫ﺳﻨﺴﺘﺨﺪم ﻋﺎﺋﻠﺔ ‪using namespace std; // std‬‬

‫)(‪int main‬‬
‫{‬
‫;"‪cout << "Welcome‬‬
‫;"!‪cout << "to C++‬‬

‫;‪return 0‬‬

‫}‬

‫‪87‬‬
‫ﻓﻌﺒﺎرة اﻟﻄﺒﺎﻋﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ ﻛﺮرﻧﺎھﺎ ﻋﻠﻰ ﻣﺮاﺣﻞ‪ ،‬ﻛﻞ ﻣﺮﺣﻠﺔ ﺗﻄﺒﻊ ﺟﺰء ﻣﻦ اﻟﻌﺒﺎرة ﻷنّ‬
‫اﻟﻤﺆﺷﺮ ھﻨﺎ ﺳﯿﻘﻒ ﺣﯿﺚ ﯾﻨﺘﮭﻲ ﻣﻦ طﺒﺎﻋﺔ اﻟﻨﺺ اﻷﺳﺒﻖ‪ .‬ﻣﻦ أﺟﻞ ذﻟﻚ وﻟﻜﻲ ﻧﺘﺤﻜﻢ ﺑﺸﻜﻞ‬
‫ﺧﺮج اﻟﻤﻈﮭﺮ؛ ﻛﺎﻧﺖ ھﻨﺎك ﻣﺤﺎرف ﺧﺎﺻﺔ ﺗﺆدي ﺗﻨﺴﯿﻘﺎت ﻣﻌﯿﻨﺔ‪.‬‬

‫ﺗﻨﺴﻴﻖ ﺍﻟﻨﺺ‬
‫ﻓﻲ ﺑﺮاﻣﺞ أﻛﺒﺮ؛ ﻗﺪ ﺗﺘﺘﺎﺑﻊ ﺟﻤﻞ اﻟﻄﺒﺎﻋﺔ ;" " << ‪ cout‬ﻓﺄﺻﺒﺢ ﻣﻦ اﻟﻀﺮوري ﺗﺮﺗﯿﺐ‬
‫‪cout << "Welcome to‬‬ ‫اﻟﻨﺺ ﺑﺄﺳﻄﺮه‪ .‬ﻟﺬﻟﻚ ﻗﺪ ﺗﺠﺪ ﻓﻲ ﺑﺮاﻣﺞ ﻣﺜﻞ ﺗﻠﻚ اﻟﺠﻤﻞ‬
‫;"‪C++!\n‬‬
‫ﻓﻤﺜﻞ ھﺬه اﻟﻼﺣﻘﺔ ‪ \n‬ﺗﻌﻨﻲ‪ :‬ﺑﻌﺪ أن ﺗﻄﺒﻊ اﻟﻨﺺ‪ ،‬اﻧﺘﻘﻞ اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ‪.‬‬
‫ھﻨﺎك ﻟﻮاﺣﻖ أﺧﺮى ﺗﺄﺗﻲ ﺑﻌﺪ ھﺬه اﻟﺸﺮطﺔ اﻟﻤﺎﺋﻠﺔ \ ﻣﻨﮭﺎ ﻣﺎ ﯾﻈﮭﺮ ﻓﻲ ھﺬا اﻟﺠﺪول‪:‬‬

‫ﺳﻄﺮ ﺟﺪﯾﺪ‪ .‬وﺿﻊ اﻟﻤﺆﺷﺮ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ‬ ‫‪\n‬‬

‫ﺗﺤﺮﯾﻚ اﻟﻤﺆﺷﺮ ﻣﺴﺎﻓﺔ ﺣﻘﻞ‬ ‫‪\t‬‬

‫اﻋﺎدة اﻟﻤﺆﺷﺮ اﻟﻰ ﺑﺪاﯾﺔ اﻟﺴﻄﺮ دون اﻻﻧﺘﻘﺎل اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ‬ ‫‪\r‬‬

‫ﻟﻄﺒﺎﻋﺔ اﻟﺸﺮطﺔ اﻟﻤﺎﺋﻠﺔ ﻧﻔﺴﮭﺎ‬ ‫\\‬

‫"\‬
‫ﻟﻄﺒﺎﻋﺔ ﻋﻼﻣﺔ اﻻﻗﺘﺒﺎس‬

‫ﺍﻷﲰﺎﺀ ﰲ ‪C++‬‬
‫ﻻ ﺗﺴﺘﻄﯿﻊ أن ﺗﺘﻌﺎﻣﻞ ﻓﻲ اﻟﺤﯿﺎة ﻣﻦ دون ذﻛﺮ اﻷﺷﯿﺎء ﺑﺄﺳﻤﺎﺋﮭﺎ أو إﻋﻄﺎﺋﮭﺎ ﻣﺼﻄﻠﺤﺎت‬
‫ﺗﻨﺎﺳﺒﮭﺎ‪ .‬وﺑﺎﻟﺘﺎﻟﻲ ﺗﺴﺘﻄﯿﻊ أن ﺗﻀﻊ ﻛﻞ ﺷﻲء ﻓﻲ ﻣﻜﺎﻧﮫ وﺗﺘﺎﺑﻌﮫ ﻓﻲ ﺗﻄﻮراﺗﮫ او ﻣﺎ ﯾﻄﺮأ‬

‫‪88‬‬
‫ﻋﻠﯿﮫ‪ .‬ﺣﺘﻰ اﻟﻤﺠﮭﻮل ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﻧﺼﻄﻠﺢ ﻋﻠﻰ وﺿﻊ اﺳﻢ ) س ( ﻟﮫ‪ .‬وھﻜﺬا ﺗﺄﺗﻲ‬
‫اﻟﻤﺴﺎﺋﻞ ﻛﺄن ﺗﻘﻮل‪ :‬ﻣﺮﺑﻊ طﻮل ﺿﻠﻌﮫ ﯾﺴﺎوي ﻛﺬا ﻓﻤﺎ ﻣﺴﺎﺣﺘﮫ؛ ﻓﻠﺪﯾﻨﺎ ﻣﻦ اﻷﺳﻤﺎء‪ :‬طﻮل‬
‫اﻟﻀﻠﻊ و اﻟﻤﺴﺎﺣﺔ‪ .‬أو ﺗﺄﺗﻲ ﻣﺴﺄﻟﺔ أﺧﺮى ﺗﻘﻮل‪ :‬ﻧﺼﻒ ﻗﻄﺮ اﻟﺪاﺋﺮة ﯾﺴﺎوي ﻛﺬا‪ ،‬ﻓﻤﺎ ھﻮ‬
‫ﻣﺤﯿﻄﮭﺎ ﻋﻠﻤﺎ ﺑﺄنّ اﻟﻨﺴﺒﺔ اﻟﺜﺎﺑﺘﺔ ﺗﺴﺎوي ﻛﺬا‪.‬‬
‫اذن ﻓﻲ ﻣﺴﺎﺋﻞ اﻟﺒﺮﻣﺠﺔ ﯾﻜﻮن اﺳﻢ اﻟﺸﻲء ﺛﺎﺑﺘﺎ ﺑﯿﻨﻤﺎ ﻗﯿﻤﺘﮫ ﻗﺪ ﺗﺘﻐﯿﺮ ﻛﺄن ﯾﻄﻠﺐ ﻣﻨﻚ ﺣﺴﺎب‬
‫اﻟﻤﺴﺎﻓﺔ اﻟﺘﻲ ﺗﻘﻄﻌﮭﺎ ﻣﺮﻛﺒﺔ وﻓﻖ اﻟﺰﻣﻦ؛ ﻓﺎﻟـ ) ﻣﺴﺎﻓﺔ اﻟﻤﻘﻄﻮﻋﺔ ( اﺳﻢ ﻟﻘﯿﻤﺔ ﺗﺘﻐﯿﺮ ﻣﻊ‬
‫اﻟﺰﻣﻦ‪.‬‬
‫ﻛﺬﻟﻚ ﻋﻨﺪﻣﺎ ﺗﻜﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺤﺴﺎب ﻣﺴﺎﺣﺔ داﺋﺮة؛ أﻧﺖ ﻻ ﺗﺘﻌﺎﻣﻞ ﻣﻊ داﺋﺮة واﺣﺪة‪ ،‬وإﻧﻤﺎ‬
‫ﺗﻀﻊ ﻓﻲ ﺣﺴﺒﺎﻧﻚ أﻧّﻚ ﺳﺘﻌﺮض ﻋﻠﯿﻚ أﻧﺼﺎف أﻗﻄﺎر ﻣﺨﺘﻠﻔﺔ وﻛﻠﮭﺎ ﺳﺘﻔﺮض ﻟﮭﺎ اﺳﻢ واﺣﺪ‬
‫ھﻮ ﻧﺼﻒ اﻟﻘﻄﺮ‪ .‬ﻟﮭﺬا ﻓﻨﺼﻒ اﻟﻘﻄﺮ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ ﺳﯿﻜﻮن ﻣﺘﻐﯿﺮا ﻣﻦ داﺋﺮة ﻷﺧﺮى ﺑﯿﻨﻤﺎ‬
‫ﺳﺘﻜﻮن اﻟﻨﺴﺒﺔ اﻟﺜﺎﺑﺘﺔ ھﻲ واﺣﺪة ﻟﻠﻜﻞ‪ .‬وھﻜﺬا أﺻﺒﺤﺖ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺘﻐﯿﺮات ﻛﺜﯿﺮة وﺛﻮاﺑﺖ‬
‫ﻓﻮﺟﺐ أن ﻧﺨﺒﺮ اﻟﻤﺘﺮﺟﻢ ﺑﺄﺳﻤﺎء ھﺬه اﻟﻤﺘﻐﯿﺮات وﻏﯿﺮھﺎ‪.‬‬

‫ﺍﳌﺘﻐﲑﺍﺕ‬
‫اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ ﻻ ﯾﻜﺘﻔﻲ ﺑﻮﺿﻊ اﺳﻢ ﻟﮫ وﻛﻔﻰ؛ ﺑﻞ ﯾﺘﻄﻠﺐ أﯾﻀﺎ ﺗﺤﺪﯾﺪ ﻧﻮع‬
‫اﻟﻤﺘﻐﯿﺮ‪ .‬ﻓﻌﺪد اﻟﻄﻼب ﻓﻲ اﻟﺼﻒ ﯾﺄﺗﻲ ﻣﻦ اﻟﻨﻮع اﻟﺼﺤﯿﺢ اﻟﺬي ﻟﯿﺲ ﻓﯿﮫ ﻛﺴﻮر‪ ،‬ﺑﯿﻨﻤﺎ طﻮل‬
‫وﻋﺮض اﻟﺼﻒ ﺑﺎﻷﻣﺘﺎر ﯾﻤﻜﻦ أن ﯾﺄﺗﻲ ﺑﻌﺪد ﺻﺤﯿﺢ ﺑﻌﺪه ﻛﺴﺮ ﻋﺸﺮي وھﻜﺬا اﻟﻮزن‬
‫وﻏﯿﺮه‪.‬‬

‫‪89‬‬
‫ﻛﺬﻟﻚ ﻗﺪ ﻻ ﯾﻜﻮن اﻟﻤﺘﻐﯿﺮ ﻣﺘﻐﯿﺮ ﻋﺪدي ﯾﺘﻌﺎﻣﻞ ﺑﺎﻟﺮﻗﻢ وﻓﻘﻂ؛ ﺑﻞ ﻗﺪ ﯾﻜﻮن اﻟﻤﺘﻐﯿﺮ ﻟﺒﯿﺎن ﺣﺎﻟﺔ‬
‫ﻣﺎ او ظﺮف‪ .‬ﻓﺎﻟﻄﻘﺲ ﻗﺪ ﯾﻜﻮن ﺣﺎرا او ﺑﺎردا واﺳﻢ ﯾﻮم اﻻﺳﺒﻮع ﻗﺪ ﯾﻜﻮن اﻟﺠﻤﻌﺔ او ﻏﯿﺮ‬
‫ذﻟﻚ‪ .‬ﻓﻨﺤﻦ ھﻨﺎ ﻣﻊ ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع اﻟﻨﺺ‪.‬‬

‫ﺃﻧﻮﺍﻉ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﻟﻠﻐﺔ‬


‫ﺗﺄﺗﻲ اﻟﻤﺘﻐﯿﺮات ﻋﻠﻰ أﻧﻮاع ﻣﻨﮭﺎ‪:‬‬
‫ﻣﺘﻐﯿﺮات ﻋﺪدﯾﺔ‬
‫ﻣﺘﻐﯿﺮات ﻧﺼﯿﺔ‬
‫ﻣﺘﻐﯿﺮات ﻣﻨﻄﻘﯿﺔ‬
‫ﻣﺘﻐﯿﺮات ﻋﺎﻣﺔ او ﻣﺘﻐﯿﺮات ﻛﺎﺋﻦ‬
‫ﻣﺘﻐﯿﺮات وﺿﻌﯿﺔ‬
‫وﻣﺘﻐﯿﺮات ﺧﺎﺻﺔ أﺧﺮى‬

‫ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻌﺪﺩﻳﺔ‬
‫وھﻲ ﻋﻠﻰ أﻧﻮاع ﻣﻨﮭﺎ‪:‬‬
‫‪int‬‬ ‫ﻣﺘﻐﯿﺮ ﻋﺪدي ﺻﺤﯿﺢ‬
‫ﻣﺘﻐﯿﺮ ﻋﺪدي ﺑﻔﺎﺻﻠﺔ ‪double‬‬

‫ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻨﺼﻴﺔ‬
‫وھﻲ ﻣﺘﻐﯿﺮات ﺗﺤﻮي ﺣﺮﻓﺎ أو ﻛﻠﻤﺔ أو اﻛﺜﺮ؛ ﺑﺘﻌﺒﯿﺮ آﺧﺮ‪ :‬ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ ھﻮ ﺣﺮوف‬
‫وﻟﯿﺲ ارﻗﺎم‪ .‬وھﻲ ﻓﻲ ﺑﻌﺾ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﻧﻮﻋﯿﻦ‪:‬‬

‫‪90‬‬
‫ﻣﺘﻐﲑ ﻣﻦ ﺣﺮﻑ ﻭﺍﺣﺪ ﻓﻘﻂ ‪char‬‬
‫وﻗﯿﻤﺔ ھﺬا اﻟﻤﺘﻐﯿﺮ ﯾﺠﺐ ان ﺗﻜﻮن ﺑﯿﻦ ﻋﻼﻣﺘﻲ اﻗﺘﺒﺎس ﻣﻔﺮدة ' '‬

‫ﻣﺘﻐﲑ ﻣﻦ ﺍﻛﺜﺮ ﻣﻦ ﺣﺮﻑ ‪string‬‬


‫وﻗﯿﻤﺔ ھﺬا اﻟﻤﺘﻐﯿﺮ ﯾﺠﺐ ان ﺗﻜﻮن ﻣﺤﺼﻮرة ﺑﻌﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﻣﺰدوﺟﺘﯿﻦ " "‬
‫ﺗﺤﺘﻮي ﻣﺘﻐﯿﺮ‬ ‫ﻓﮭﺬه اﻟﺠﻤﻠﺔ اﻟﺘﻲ ﻣﺮت ﻋﻠﯿﻚ ;"!‪cout << "Welcome to C++‬‬
‫ﻧﺼﻲ‬
‫ھﻮ "!‪ "Welcome to C++‬ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ‪.‬‬

‫ﺍﳌﺘﻐﲑﺍﺕ ﺍﳌﻨﻄﻘﻴﺔ‬
‫وھﻲ ﻣﺘﻐﯿﺮات ﺗﻘﺒﻞ ﺻﺢ أو ﺧﻄﺄ ﻓﻘﻂ‪ .‬وھﻲ ﺗﻔﯿﺪ ﻓﻲ ﻋﻤﻠﯿﺔ اﻻﺧﺘﺒﺎرات‪.‬‬

‫ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻜﺎﺋﻨﻴﺔ‬
‫وھﻲ ﻣﺘﻐﯿﺮات ﺗﺤﻤﻞ ﻛﺎﺋﻨﺎت؛ وﺑﻤﺎ أنّ ﻛﻞ ﺷﻲء ﻓﻲ اﻟﺒﺮﻣﺠﺔ اﻟﺤﺪﯾﺜﺔ ھﻮ ﻛﺎﺋﻦ؛ ﻟﺬﻟﻚ ﻓﮭﻲ‬
‫ﻣﺘﻐﯿﺮات ﻋﺎﻣﺔ ﺗﻘﺒﻞ ﻛﻞ ﺷﻲء‪.‬‬

‫ﻣﺘﻐﲑﺍﺕ ﻭﺿﻌﻴﺔ‬
‫وھﻲ ﻣﺘﻐﯿﺮا ت ﺧﺎﺻﺔ ﻣﻦ ﺻﻨﻊ اﻟﻤﺒﺮﻣﺞ ﻧﻔﺴﮫ اذا أراد أن ﯾﺠﻌﻞ اﺷﯿﺎء ﻣﺎ ﻛﻤﺘﻐﯿﺮات ﺧﺎﺻﺔ‬
‫ﺑﮫ‪ .‬ﻛﺄن ﯾﺠﻌﻞ أﯾﺎم اﻷﺳﺒﻮع ﻓﻲ ﻣﺘﻐﯿﺮ وﺿﻌﻲ ﯾﻘﺒﻞ أﺳﻤﺎء اﯾﺎم اﻷﺳﺒﻮع‪ .‬ﻓﻜﺄﻧﮫ ﯾﻜﻮن ﻟﺪﯾﮫ‬
‫ﻣﺘﻐﯿﺮ ﺧﺎص ﺑﮫ ھﻮ ﻣﺘﻐﯿﺮ أﺳﺒﻮﻋﻲ ـ اذا ﺻﺢ اﻟﺘﻌﺒﯿﺮ ـ‪.‬‬

‫‪91‬‬
‫اﻟﻤﺘﻐﯿﺮات ھﻲ ﻣﻮاﺿﻊ ﻓﻲ اﻟﺬاﻛﺮة ﯾﻤﻜﻦ أن ﺗﺘﺼﻮرھﺎ ﻛﺼﻨﺎدﯾﻖ ﻋﻠﯿﮭﺎ أﺳﻤﺎء وﻟﮭﺎ ﻣﺤﺘﻮى‬
‫ﻓﻲ داﺧﻠﮭﺎ وﻟﮭﺎ ﻛﺬﻟﻚ ﻋﻨﻮان ﯾﻤﻜﻦ أن ﺗﺼﻞ إﻟﯿﮭﺎ ﻣﻦ ﺧﻼﻟﮫ‪.‬‬

‫ﻣﺘﻐﲑﺍﺕ ﺃﺧﺮﻯ‬
‫ھﻨﺎك أﻓﺮاد ﯾﺤﻔﻈﻮن اﻟﺘﻮارﯾﺦ‪ .‬وھﻨﺎك ﻣﻦ ﯾﺤﻔﻆ ﻋﻨﺎوﯾﻦ اﻷﺷﺨﺎص واﻟﻌﻮاﺋﻞ وﻏﯿﺮ ذﻟﻚ‪.‬‬
‫ﻣﺎ ﯾﮭﻤﻨﺎ ھﻨﺎ وﺟﻮد ﻣﺘﻐﯿﺮات ﺧﺎﺻﺔ ﻓﻲ ﻟﻐﺎت ‪ C‬ﺗﺘﻌﺎﻣﻞ وﺗﺤﻮي ﻋﻨﺎوﯾﻦ اﻟﻤﺘﻐﯿﺮات ﻓﻲ‬
‫اﻟﺬاﻛﺮة‪ .‬ھﺬا اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﯾﺨﺘﺺ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻌﻨﻮان ﯾُﺴﺒﻖ ﺑﺈﺷﺎرات ﻣﻌﯿﻨﺔ ﺣﺘﻰ ﯾﻜﻮن‬
‫ﻣﻌﺮوﻓﺎ ﻟﻠﻤﺘﺮﺟﻢ‪.‬‬

‫ﺍﻟﺬﺍﻛﺮﺓ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ‬
‫ﯾﻤﻜﻦ أن ﺗﺘﺼﻮر اﻟﺬاﻛﺮة ﻛﺤﻘﻞ ﻣﺠﺪول‪ ،‬أو ﻛﺠﺪول ﻓﯿﮫ ﺣﻘﻮل؛ ﻓﻜﻞ ﺣﻘﻞ ﯾﻤﻜﻦ أن ﺗﺼﻞ‬
‫اﻟﯿﮫ ﻣﻦ ﺧﻼل ﺗﺮﺗﯿﺒﮫ ﻓﻲ اﻟﺠﺪول ورﻗﻤﮫ ـ أي ﺗﺴﻠﺴﻠﮫ ـ‪ .‬ﻓﯿﻜﻮن ﻟﻜﻞ ﺣﻘﻞ ﻋﻨﻮان‪ .‬ھﺬا اﻟﺤﻘﻞ‬
‫ﻟﮫ ﻣﺴﺎﺣﺔ أو ﺣﺠﻢ ﯾﻤﻜﻦ أن ﺗﻀﻊ ﻓﯿﮫ أﺷﯿﺎء‪ .‬وھﻜﺬا اﻟﺤﺎل ﻣﻊ اﻟﺬاﻛﺮة؛ ﻓﮭﻲ ﻣﻦ ﻣﻮاﺿﻊ‪،‬‬
‫ﻛﻞ ﻣﻮﺿﻊ ﻟﮫ ﻋﻨﻮان وﺗﺴﻠﺴﻞ وﻛﻞ ﻣﻮﺿﻊ ﯾﻤﻜﻦ أن ﯾﺤﻮز ﻋﻠﯿﮫ ﻣﺘﻐﯿﺮ ﻟﮫ اﺳﻢ؛ وﺑﺎﻟﺘﺎﻟﻲ ھﺬا‬
‫اﻟﻤﻮﺿﻊ ﻣﻦ اﻟﺬاﻛﺮة ﺳﯿﻜﻮن ﺣﺎﻣﻼ ﻟﻘﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ وﺳﯿﺼﻄﺒﻎ ﺑﺎﺳﻢ اﻟﻤﺘﻐﯿﺮ ﺑﺎﻹﺿﺎﻓﺔ اﻟﻰ‬
‫ﺗﺴﻠﺴﻠﮫ اﻟﺜﺎﺑﺖ ﺑﯿﻦ ﺑﻘﯿﺔ ﻣﻮاﺿﻊ اﻟﺬاﻛﺮة واﻟﺬي ھﻮ ﻋﻨﻮاﻧﮫ واﻟﺬي ﺳﯿﻜﻮن ﻋﻨﻮاﻧﺎ ﻟﻠﻤﺘﻐﯿﺮ‪.‬‬

‫ﻣﺜﺎﻝ ﰲ ﺍﳊﻴﺎﺓ‬
‫ﻟﻀﺮورة ھﺬا اﻟﻤﻮﺿﻮع وأھﻤﯿﺘﮫ‪ ،‬دﻋﻨﺎ ﻧﻀﺮب ﻟﮫ ﻣﺜﻼ ﺗﻘﺮﯾﺒﯿﺎ ﻓﻲ اﻟﺤﯿﺎة‪.‬‬
‫ﺑﯿﺖ اﻟﺴﯿﺪ أﺣﻤﺪ ﻟﮫ ﻋﻨﻮان ﯾﺮﺳﻤﮫ وﯾﺤﻜﯿﮫ رﻗﻢ داره‪ .‬ﻛﺬﻟﻚ ﺑﯿﺖ أﺣﻤﺪ ﻟﮫ ﻋﺪد أﻓﺮاد‪.‬‬
‫ﻓﻲ ﻧﻈﺎم اﻟﺒﺮﻣﺠﺔ‪ ،‬ﯾﻨﻌﻜﺲ ھﺬا ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫‪92‬‬
‫اﺳﻢ اﻟﻤﺘﻐﯿﺮ‪ :‬دار أﺣﻤﺪ‬
‫ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ‪ :‬ﻋﺪد أﻓﺮاد اﻟﺪار‬
‫ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ‪ :‬رﻗﻢ اﻟﺪار‬
‫ﻟﻨﻔﺮض أنّ ﻋﺪد اﻷﻓﺮاد ھﻮ ) ‪( 5‬‬
‫ورﻗﻢ اﻟﺪار ھﻮ ] ‪[ 100‬‬
‫ﻧﺴﺘﻄﯿﻊ اﻵن أن ﻧﻘﻮل‪ُ :‬رزِق دار أﺣﻤﺪ ﺑﻄﻔﻞ ﻓﺄﺻﺒﺢ اﻟﻌﺪد ھﻮ ) ‪( 1 + 5‬‬
‫وﻧﺴﺘﻄﯿﻊ أن ﻧﻘﻮل‪ُ :‬رزِق اﻟﺪار اﻟﺬي ﻋﻨﻮاﻧﮫ ) ‪ ( 100‬ﺑﻄﻔﻞ ﻓﺄﺻﺒﺢ ﻋﺪد أﻓﺮاده ھﻮ‬
‫) ﻋﺪد أﻓﺮاد اﻟﻌﻨﻮان ] ‪( 1 + [ 100‬‬
‫ﻟﻜﻦ اﻷھﻢ ﻣﻦ ذﻟﻚ ﻓﻲ ﻣﻮﺿﻮع اﻟﻌﻨﺎوﯾﻦ؛ أنّ اﻟﺠﮭﺔ اﻟﻌﻠﯿﺎ ﻓﻲ اﻟﻤﺪﯾﻨﺔ ـ وﻛﺬﻟﻚ أﻧﺖ اﻟﺠﮭﺔ‬
‫اﻟﻌﻠﯿﺎ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ـ ﺗﺴﺘﻄﯿﻊ أن ﺗﻘﻮل‪:‬‬
‫ﻋﻠﻰ اﻟﻤﺨﺒﺮ اﻟﺬي ﯾﺮﻗﺐ اﻟﻌﻨﻮان ] ‪ [ 100‬ان ﯾﺘﻘﺪم ﺗﺴﻠﺴﻠﯿﻦ‪.‬‬
‫وﺑﮭﺬا ﺳﯿﺼﺒﺢ اﻟﻤﺨﺒﺮ اﻣﺎم ﻋﻨﻮان ﺟﺪﯾﺪ ھﻮ ] ‪[ 102‬‬
‫ﻣﺎذا ﻓﻲ اﻟﻌﻨﻮان اﻟﺘﺎﻟﻲ ﻟﺒﯿﺖ اﺣﻤﺪ؟‪ .‬ﻻﻧﻌﻠﻢ ذﻟﻚ إﻻ اذا ﻛﻨﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺼﻔﻮﻓﺔ اﻟﺘﻲ ﺳﻨﺄﺗﻲ‬
‫ﻋﻠﯿﮭﺎ ﺑﺎذن ﷲ‪.‬‬

‫ﳌﺎﺫﺍ ﺃﻧﻮﺍﻉ ﻣﺘﻐﲑﺍﺕ ﻛﺜﲑﺓ؟‪.‬‬


‫رﺑﻤﺎ ﺗﺘﺴﺎءل وﺗﻘﻮل‪ :‬ھﻨﺎك ﻣﺘﻐﯿﺮ ﻋﺎم ﯾﻘﺒﻞ ﻛﻞ ﺷﻲء؛ ﻓﻠﻤﺎذا ﻻ ﻧﻜﺘﻔﻲ ﺑﮫ وﻛﻔﻰ؟‪.‬‬
‫ھﺬا ﯾﻤﻜﻦ إن ﻛﻨﺖ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ذاﻛﺮة ﻻ ﻧﮭﺎﺋﯿﺔ اﻟﺴﻌﺔ ﻓﮭﻲ ﻣﻔﺘﻮﺣﺔ وأﻧﺖ ﻏﯿﺮ ﻣﻘﯿﺪ ﺑﺸﻲء‪.‬‬
‫ﻟﻜﻦ اﻟﺤﻘﯿﻘﺔ ھﻲ أﻧﻚ ﻣﺤﻜﻢ ﺑﺬاﻛﺮة ﺑﻘﯿﻤﺔ ﻣﻌﯿﻨﺔ وﯾﺠﺐ أن ﻻ ﯾﺸﻐﻞ ﺑﺮﻧﺎﻣﺠﻚ ﻣﻨﮭﺎ أﻛﺜﺮ ﻣﻤﺎ‬
‫ھﻮ ﻣﻄﻠﻮب ﻣﻨﮫ وإﻻ أﺻﺒﺢ ھﻨﺎك ﻋﺒﺊ ﻋﻠﻰ ذاﻛﺮﺗﻚ وﺛﻘﻞ ﻓﻲ اﻷداء‪ .‬ذﻟﻚ ﻷنّ ﻟﻜﻞ ﻣﺘﻐﯿﺮ‬

‫‪93‬‬
‫ﺣﺠﻢ ﻣﻌﯿﻦ ﯾﺸﻐﻠﮫ ﻣﻦ اﻟﺬاﻛﺮة واﻟﻤﺘﻐﯿﺮ اﻟﻌﺎم ﯾﺄﺧﺬ ﺣﯿﺰا ﻛﺒﯿﺮا ﻓﯿﮭﺎ ﻓﯿﺘﺤﺘﻢ أن ﻧﺮاﻋﻲ ﺳﻌﺔ‬
‫ذاﻛﺮة اﻟﺠﮭﺎز وﺳﺮﻋﺔ أداﺋﮫ ﻋﻨﺪ ﺗﺤﻤﯿﻠﮫ‪.‬‬

‫ﺃﲰﺎﺀ ﺍﳌﺘﻐﲑﺍﺕ‬
‫ﯾﻤﻜﻦ أن ﺗﻌﻄﻲ ﻟﻠﻤﺘﻐﯿﺮات أي اﺳﻢ ﻋﻠﻰ أن ﻻ ﯾﻜﻮن أﺣﺪ اﻷﺳﻤﺎء اﻟﻤﻔﺘﺎﺣﯿﺔ وﻋﻠﻰ أن ﻻ ﯾﺒﺪأ‬
‫ﺑﺄﺣﺪ اﻟﺤﺮوف اﻟﺨﺎﺻﺔ ﻛﺎﻟﻨﻘﻄﺔ واﻟﺸﺎرﺣﺔ أو اﻟﻔﺎﺻﻠﺔ‪ .‬ﯾﻤﻜﻦ أن ﯾﺘﻀﻤﻦ اﻻﺳﻢ رﻗﻤﺎ ﻛﺄن‬
‫ﺗﻜﺘﺐ ﻣﺘﻐﯿﺮ ﺑﺎﺳﻢ ‪ . a1‬وﯾﻤﻜﻦ أن ﯾﺄﺗﻲ ﺑﺤﺮوف ﺻﻐﯿﺮة أو ﻛﺒﯿﺮة ﻣﻊ اﻟﻌﻠﻢ أنّ ﻟﻐﺎت ‪c‬‬
‫ﺗﻤﯿﺰ ﻣﺎﺑﯿﻦ اﻻﺛﻨﯿﻦ‪ .‬ﻓﻤﺘﻐﯿﺮ ﺑﺎﺳﻢ ‪ a‬ھﻮ ﻏﯿﺮ آﺧﺮ ﺑﺎﺳﻢ ‪ . A‬ﻛﺬﻟﻚ ﯾﻤﻜﻦ ﻻﺳﻢ اﻟﻤﺘﻐﯿﺮ أن‬
‫ﯾﺒﺪأ ﺑﺨﻂ ﺳﻔﻠﻲ ‪ . -‬ﻟﻜﻦ ﻣﻦ اﻟﻤﻔﻀﻞ أن ﯾﻜﻮن اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻣﻌﺒﺮا ﻋﻨﮫ وﻋﻦ ﻣﮭﻤﺔ ﻗﯿﻤﺘﮫ ﻛـ‬
‫‪ heat‬ﻟﻤﺘﻐﯿﺮ ﯾﺤﻤﻞ ﻗﯿﻤﺔ درﺟﺔ اﻟﺤﺮارة‪.‬‬

‫ﺍﻟﺘﺼﺮﻳﺢ ﻭﺍﻹﺳﻨﺎﺩ‬
‫ﻟﻜﻲ ﺗﻀﻊ ﻣﺘﺤﻮﻻ ـ أي ﻣﺘﻐﯿﺮ ـ ﻓﻼﺑﺪ أن ﺗُ َﻌﺮِف اﻟﻤﺘﺮﺟﻢ ﺑﺬﻟﻚ ﻗﺒﻞ اﺳﺘﺨﺪاﻣﮫ‪ .‬وﯾﻜﻮن ذﻟﻚ‬
‫ﺑﻮاﺳﻄﺔ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮫ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺠﻤﻠﺔ ﻣﻌﯿﻨﺔ ﺗﺘﻜﻮن ﻣﻦ ﻧﻮﻋﮫ ﺛﻢ اﺳﻤﮫ ﺛﻢ ﻓﺎﺻﻠﺔ‬
‫ﻣﻨﻘﻮطﺔ‪.‬‬

‫;‪int cat‬‬ ‫ﻓﻠﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع اﻟﻌﺪد اﻟﺼﺤﯿﺢ وﺑﺎﺳﻢ ‪ cat‬ﻧﻜﺘﺐ‬


‫ﺑﻌﺪ ذﻟﻚ ﻣﺒﺎﺷﺮة او ﺑﻌﺪد ﻣﻦ اﻟﺨﻄﻮات ﻧﺴﺘﻄﯿﻊ ان ﻧﻀﻊ ﻓﯿﮫ او ﻟﮫ ﻗﯿﻤﺔ ﺑﻮاﺳﻄﺔ ﻋﻤﻠﯿﺔ‬
‫اﻻﺳﻨﺎد ﺑﻌﻼﻣﺔ اﻟﻤﺴﺎواة ﻓﻨﻜﺘﺐ ;‪cat = 1‬‬
‫;‪int cat‬‬ ‫ﻓﯿﻤﻜﻦ ان ﺗﻜﻮن اﻟﺠﻤﻠﺘﺎن ﺑﮭﺬا اﻟﺸﻜﻞ‬
‫;‪cat = 1‬‬

‫أو ان ﺗﺄﺗﻲ ﺟﻤﻠﺔ اﻹﺳﻨﺎد ﻣﺘﻰ ﻣﺎ اﺣﺘﺠﻨﺎ إﻟﻰ اﻟﻤﺘﻐﯿﺮ ﻓﻌﻼ‪.‬‬

‫‪94‬‬
‫= ‪int cat‬‬ ‫ﻛﺬﻟﻚ ﯾﻤﻜﻦ أن ﺗﺄﺗﻲ ﻋﻤﻠﯿﺘﺎ اﻟﺘﺼﺮﯾﺢ واﻻﺳﻨﺎد ﺑﺠﻤﻠﺔ واﺣﺪة ﻛﺄن ﻧﻜﺘﺐ‬
‫;‪5‬‬

‫اذا ﻛﺎن ﻟﺪﯾﻨﺎ اﻛﺜﺮ ﻣﻦ ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ﻓﯿﻤﻜﻦ ان ﻧﺼﺮح ﻋﻨﮭﻢ ﺗﺒﺎﻋﺎ‬
‫;‪int x‬‬
‫;‪int a‬‬
‫;‪int b‬‬
‫او ﺑﺠﻤﻠﺔ واﺣﺪة ﺗﻔﺼﻞ ﺑﯿﻨﮭﻢ ﻓﺎﺻﻠﺔ‪.‬‬
‫;‪int x, a, b‬‬
‫ھﻨﺎك طﺮﯾﻘﺔ أﺧﺮى ﺟﻤﯿﻠﺔ ﻟﻮﺿﻊ ﻗﯿﻤﺔ اﺑﺘﺪاﺋﯿﺔ ﻟﻠﻤﺘﻐﯿﺮ وھﻲ طﺮﯾﻘﺔ ﻛﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ وﻋﻠﻰ‬
‫اﻋﺘﺒﺎر أنّ اﻟﻤﺘﻐﯿﺮ ھﻮ ﻛﺎﺋﻦ ﻓﺘﺴﺘﻄﯿﻊ ﺑﺪﻻ ﻣﻦ ھﺬه اﻟﺼﯿﻐﺔ ;‪int cat = 5‬‬
‫;)‪int cat(5‬‬ ‫أن ﺗﻜﺘﺐ‬

‫ﺑﮭﺬا ﻧﺴﺘﻄﯿﻊ أن ﻧﻜﺘﺐ اﻵن ﺑﺮﻧﺎﻣﺠﺎ ﻟﺠﻤﻊ ﻗﯿﻤﺘﯿﻦ‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬


‫)(‪int main‬‬
‫{‬
‫;‪int integer1‬‬
‫;‪int integer2‬‬
‫;‪int sum‬‬

‫;"‪cout << "Enter first integer\n‬‬


‫;‪cin >> integer1‬‬

‫;"‪cout << "Enter second integer\n‬‬


‫;‪cin >> integer2‬‬

‫;‪sum = integer1 + integer2‬‬

‫;‪cout << "Sum is " << sum << endl‬‬

‫;‪return 0‬‬

‫}‬

‫وﻣﻊ اﻟﺘﻌﻠﯿﻘﺎت ﺳﯿﻜﻮن ﺷﻜﻠﮫ ھﻜﺬا‬

‫‪95‬‬
// Fig. 1.6: fig01_06.cpp
// Addition program.
#include <iostream>

// function main begins program execution


int main()
{
int integer1; // first number to be input by user
int integer2; // second number to be input by user
int sum; // variable in which sum will be stored

std::cout << "Enter first integer\n"; // prompt


std::cin >> integer1; // read an integer

std::cout << "Enter second integer\n"; // prompt


std::cin >> integer2; // read an integer

sum = integer1 + integer2; // assignment result to sum

std::cout << "Sum is " << sum << std::endl; // print sum

return 0; // indicate that program ended successfully

} // end function main

…………………………………………………………………………………………….
cin >> integer1; ‫ﺟﻤﻠﺔ‬
‫ ﻓﺘﺬھﺐ اﻟﻘﯿﻤﺔ‬Enter ‫ھﻲ ﺟﻤﻠﺔ إدﺧﺎل ﺗﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم أن ﯾﻜﺘﺐ ﻗﯿﻤﺔ وﯾﻀﻐﻂ‬
integer1 ‫اﻟﻤﺪﺧﻠﺔ اﻟﻰ اﻟﻤﺘﻐﯿﺮ‬
.‫وھﻜﺬا ﻣﻊ ﺟﻤﻞ اﻹدﺧﺎل اﻷﺧﺮى‬
‫اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺑﺪاﯾﺘﮫ ﯾﺼﺮح ﻋﻦ ﻣﺘﺤﻮﻻت ﺛﻼﺛﺔ ﺛﻢ ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ اﻹظﮭﺎر‬

cout << " ";

96
‫ﯾﻄﺒﻊ ﻧﺼﺎ ﻟﻠﻤﺴﺘﺨﺪم ﺑﺄن ﯾﻘﻮم ﺑﺈدﺧﺎل ﻗﯿﻤﺔ ﺗﺄﺧﺬھﺎ ﻓﻌﻠﯿﺎ ﺟﻤﻠﺔ اﻹدﺧﺎل‬
‫;‪cin >> integer1‬‬

‫ﻓﮭﻜﺬا ﯾﻜﻮن اﻟﺤﺎل ﻣﻊ اﻟﻤﺘﻐﯿﺮﯾﻦ‬


‫;"‪cout << "Enter first integer\n‬‬
‫;‪cin >> integer1‬‬

‫;"‪cout << "Enter second integer\n‬‬


‫;‪cin >> integer2‬‬

‫ﺑﻌﺪ ذﻟﻚ ﺗﺠﻤﻊ اﻟﻘﯿﻤﺘﯿﻦ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻟﺚ‬


‫;‪sum = integer1 + integer2‬‬

‫ﺛﻢ ﯾﻄﺒﻊ اﻟﻨﺎﺗﺞ ﻋﻠﻰ اﻟﺸﺎﺷﺔ‬


‫;‪cout << "Sum is " << sum << endl‬‬

‫ﻛﻤﺎ ذﻛﺮﻧﺎ ھﻲ ﻛﺎﺋﻦ ﯾﻔﯿﺪ ﻓﻲ اﻻﻧﺘﻘﺎل اﻟﻰ ﺳﻄﺮ ﺟﺪﯾﺪ‪.‬‬ ‫و ‪endl‬‬

‫‪......................................‬‬

‫ﺍﻟﺜﻮﺍﺑﺖ‬
‫اﻟﺜﺎﺑﺖ ھﻮ ﻛﺎﻟﻤﺘﻐﯿﺮ ﻟﻜﻦ ﺑﻘﯿﻤﺔ ﺛﺎﺑﺘﺔ ﻻ ﺗﺘﻐﯿﺮ ﺧﻼل اﻟﺒﺮﻧﺎﻣﺞ ﻛﺎﻟﻨﺴﺒﺔ اﻟﺜﺎﺑﺘﺔ وﻛﺜﺎﺑﺖ اﻟﺠﺎذﺑﯿﺔ‬
‫اﻻرﺿﯿﺔ وﻏﯿﺮ ذﻟﻚ‪ .‬ﺑﻌﺾ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﺗﺴﺘﺨﺪم ﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺜﺎﺑﺖ ﻛﻠﻤﺔ ‪ const‬ﯾﺘﺒﻊ‬
‫ذﻟﻚ ﻧﻮع اﻟﺜﺎﺑﺖ وﻗﯿﻤﺘﮫ‪.‬‬
‫‪..........................‬‬

‫‪97‬‬
‫ﻛﻴﻒ ﻧﻐﲑ ﻗﻴﻢ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﳊﺎﺳﺒﺔ؟‪.‬‬
‫ﻛﻤﺎ ذﻛﺮﻧﺎ؛ ﯾﺠﺐ ان ﯾﻌﻄﻰ اﻟﻤﺘﻐﯿﺮ ﻗﯿﻤﺔ ﻓﻲ اﺑﺘﺪاﺋﯿﺔ ﻋﻨﺪ اﺳﺘﺨﺪاﻣﮫ ﻓﻲ ﻣﻌﺎدﻟﺔ او ﺣﺴﺎب‪.‬‬
‫اﻟﻤﺘﻐﯿﺮ ﻋﻨﺪ ذﻟﻚ ﺳﯿﻜﻮن ﻟﮫ ﻣﻮﻗﻊ ﻓﻲ اﻟﺬاﻛﺮة وﻋﻨﻮان وﻗﯿﻤﺔ‪ .‬ﻓﺎذا اردﻧﺎ ان ﻧﺰﯾﺪ ﻣﻦ ﻗﯿﻤﺔ‬
‫;‪cat = cat + 1‬‬ ‫اﻟﻤﺘﻐﯿﺮ ‪ cat‬ﺑـ )‪ (1‬ﻣﺜﻼ؛ ﻓﺎﻧﻨﺎ ﻧﻜﺘﺐ ﺟﻤﻠﺔ ﻛﮭﺬه‬
‫ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت ﺗﻌﺪ ھﺬه اﻟﺠﻤﻠﺔ ﺧﺎطﺌﺔ‪ ،‬ﻟﻜﻦ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻟﮭﺎ ﻣﻌﻨﻰ ﻣﺨﺘﻠﻒ ﯾﻘﻮل‪:‬‬
‫اﻟﻘﯿﻤﺔ اﻟﺠﺪﯾﺪة ﻟﻠﻤﺘﻐﯿﺮ ‪ cat‬اﺟﻌﻠﮭﺎ ﺑﻘﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻟﺤﺎﻟﯿﺔ ﻓﻲ اﻟﺬاﻛﺮة وأﺿﻒ ﻋﻠﯿﮭﺎ )‪.(1‬‬
‫وھﻜﺬا ﺳﺘﺤﻞ اﻟﻘﯿﻤﺔ اﻟﺠﺪﯾﺪة ﻣﺤﻞ اﻟﻘﺪﯾﻤﺔ ﻓﻲ اﻟﺬاﻛﺮة‪.‬‬
‫ﺗﺴﺘﻄﯿﻊ أﻧﺖ أن ﺗﻔﻌﻞ ﻏﯿﺮ ذﻟﻚ اﻟﻜﺜﯿﺮ ﻛﺄن ﺗﻀﺮب اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﻋﺪد أو ﻓﻲ ﻧﻔﺴﮫ‪.‬‬
‫ﻛﺬﻟﻚ ﺗﺴﺘﻄﯿﻊ أن ﺗﺴﻨﺪ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ إﻟﻰ آﺧﺮ ﻓﺘﻘﻮل ﻣﺜﻼ ـ ﺑﻌﺪ أن ﺗﺼﺮح ﻋﻦ اﻟﻤﺘﻐﯿﺮات ـ‪:‬‬
‫;‪a = cat*2‬‬ ‫أو‬ ‫;‪Cat = aa‬‬
‫أو ﺑﺄي ﺷﻜﻞ ﺗﺤﺘﺎﺟﮫ‪.‬‬

‫ﰲ ﺃﻱ ﻣﻜﺎﻥ ﻳﻜﻮﻥ ﺍﻟﺘﺼﺮﻳﺢ؟‪.‬‬


‫اﻟﺘﺼﺮﯾﺢ ﯾﻤﻜﻦ أن ﯾﺄﺗﻲ ﺑﻌﺪ ﻛﻠﻤﺎت ‪ using‬ﻗﺒﻞ اﻟﺪاﻟﺔ اﻷم أو أن ﯾﺄﺗﻲ ﺑﻌﺪ ذﻟﻚ ﻓﻲ أي‬
‫ﻣﻜﺎن‪ .‬وﻟﻜﻦ أذا ﻣﺎ أﺗﻰ ﺑﻌﺪ ﻛﻠﻤﺎت ‪ using‬؛ أي ﻓﻲ ﺑﺪاﯾﺎت اﻟﺒﺮﻧﺎﻣﺞ؛ ﻓﮭﺬا ﯾﻌﻨﻲ ﺑﺄنّ ھﺬا‬
‫اﻟﻤﺘﻐﯿﺮ ﯾﻤﻜﻦ أن ﺗﺴﺘﺨﺪﻣﮫ وﯾﻜﻮن ﻣﻌﺮوﻓﺎ ﻣﻦ ﻗﺒﻞ ﻛﻞ ﻛﺘﻞ اﻟﺒﺮﻧﺎﻣﺞ‪ .‬ذﻟﻚ ﻷنّ اﻟﺘﺼﺮﯾﺢ ﻋﻦ‬
‫ﻣﺘﻐﯿﺮ ﻗﺒﻞ ﻛﺘﻠﺔ؛ ﯾﻌﻨﻲ ﺑﺄنّ ﻛﻞ اﻟﻜﺘﻞ اﻟﺘﻲ ﺑﻌﺪھﺎ ﯾﻤﻜﻦ أن ﺗﺘﻌﺮف اﻟﯿﮫ ﺑﯿﻨﻤﺎ اﻟﻜﺘﻞ اﻷﻋﻠﻰ‬
‫ﻻﺗﺮاه وھﺬا ھﻮ ﻣﻮﺿﻮع اﻟﻔﻘﺮة اﻟﺘﺎﻟﯿﺔ‪.‬‬

‫‪98‬‬
‫ﻣﺪﻯ ﺭﺅﻳﺔ ﺍﳌﺘﻐﲑ‬
‫ﻋﻨﺪﻣﺎ ﺗﮭﯿﺊ ﻟﻤﺘﻐﯿﺮ ﯾﻠﺰﻣﮫ ﺑﺮﻧﺎﻣﺠﻚ‪ ،‬ﯾﺠﺐ أن ﺗﻨﻈﺮ أي ﺟﺰء ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ ﯾﻤﻜﻨﮫ اﻟﺘﻌﺎﻣﻞ ﻣﻊ‬
‫ھﺬا اﻟﻤﺘﻐﯿﺮ‪ .‬ﺑﻤﻌﻨﻰ آﺧﺮ‪ :‬ﯾﻤﻜﻦ ﻟﺠﺰء ﻣﻦ ﺑﺮﻧﺎﻣﺠﻚ أن ﯾﺮى اﻟﻤﺘﻐﯿﺮ وﯾﺘﻌﺮف ﻋﻠﯿﮫ و ﻻ‬
‫ﯾﻤﻜﻦ ذﻟﻚ ﻟﺠﺰء آﺧﺮ‪ .‬ﯾﻤﻜﻨﻚ أن ﺗﺠﻌﻞ ﻣﺘﻐﯿﺮك ﻋﺎﻣﺎ ﻟﻜﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻓﺘﺮاه ﻛﻞ ﻛﺘﻞ اﻟﺒﺮﻧﺎﻣﺞ‪،‬‬
‫أو ﯾﻤﻜﻦ أن ﺗﺤﺼﺮ رؤﯾﺘﮫ ﻋﻨﺪ ﻛﺘﻠﺔ ﻣﻌﯿﻨﺔ ﻓﻘﻂ أو ﻣﺠﻤﻮﻋﺔ ﻛﺘﻞ‪.‬‬
‫اذا أردت ﻟﻤﺘﻐﯿﺮك أن ﯾﺮى ﻣﻦ ﻛﻞ أﺟﺰاء اﻟﺒﺮﻧﺎﻣﺞ ﻓﯿﺠﺐ أن ﺗﺼﺮح ﻋﻨﮫ ﻗﺒﻞ اﻟﺪاﻟﺔ‬
‫)(‪main‬‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫‪int a1‬‬

‫)(‪int main‬‬
‫{‬

‫{‬

‫}‬

‫;‪return 0‬‬

‫}‬

‫اﻣﺎ اذا أردت أن ﺗﺮاه ﻛﺘﻠﺔ ﻣﻌﯿﻨﺔ ـ اﻟﻜﺘﻠﺔ ﻣﺤﺼﻮرة ﺑﯿﻦ ﻗﻮﺳﯿﻦ } { ـ ﻓﯿﻤﻜﻨﻚ أن ﺗﻌﻠﻦ ﻋﻨﮫ‬
‫ﻗﺒﻞ اﻟﻘﻮس اﻻول ﻟﻜﺘﻠﺘﮫ او ﺗﺼﺮح ﻋﻨﮫ داﺧﻞ اﻟﻜﺘﻠﺔ ﻧﻔﺴﮭﺎ‪.‬‬

‫‪99‬‬
‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫)(‪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‬‬
‫ﯾ‬

‫ِﻢَ ھﻨﺎ ‪} // a2‬‬


‫ﺣُﻄ‬
‫ُﺮى ھﻨﺎ ‪// a1‬‬
‫ﯾ‬

‫‪} // a1‬‬ ‫ِﻢَ ھﻨﺎ‬


‫ﺣُﻄ‬

‫‪………………………………………………………………..‬‬
‫اﻟﻤﺘﻐﯿﺮات اﻟﻌﺎﻣﺔ واﻟﻤﺤﻠﯿﺔ‬
‫ﻣﺘﻐﯿﺮ ﻋﺎم ﺗﺮاه ﻛﻞ اﻟﻜﺘﻞ أي ﻛﻞ اﻟﺒﺮﻧﺎﻣﺞ ‪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‬‬
‫ﯾ‬

‫ِﻢَ ھﻨﺎﻓﮭﻮ ﻣﺤﻠﻲ ‪} // a2‬‬


‫ﺣُﻄ‬
‫ُﺮى ھﻨﺎﻓﮭﻮ ﻣﺤﻠﻲ ‪// a1‬‬
‫ﯾ‬

‫‪} // a1‬‬ ‫ِﻢَ ھﻨﺎﻓﮭﻮ ﻣﺤﻠﻲ‬


‫ﺣُﻄ‬
‫………………………………………………………………………‬

‫ﺍﻟﻌﻤﻠﻴﺎﺕ ﻭﺍﻟﻌﻮﺍﻣﻞ‬
‫اﻟﺒﺮﻧﺎﻣﺞ ﯾﻜﺘﺐ ﻟﯿﻘﻮم ﺑﺘﻨﻔﯿﺬ أواﻣﺮ وﻋﻤﻠﯿﺎت ﻣﻌﯿﻨﺔ ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮات وﻏﯿﺮھﺎ‪ .‬وﻟﻜﻦ ﻟﻜﻞ ﻧﻮع‬
‫ﻣﻦ اﻟﻤﺘﻐﯿﺮات ﻋﻮاﻣﻠﮫ وﻋﻤﻠﯿﺎﺗﮫ اﻟﺘﻲ ﺗﻨﺎﺳﺒﮫ‪ .‬ﻓﺎﻟﻤﺘﻐﯿﺮات اﻟﻌﺪدﯾﺔ ﯾﺼﺢ ﻋﻠﯿﮭﺎ ﻋﻤﻠﯿﺎت‬
‫رﯾﺎﺿﯿﺔ ﻣﺜﻞ اﻟﺠﻤﻊ واﻟﻄﺮح وﻏﯿﺮھﺎ‪ ،‬ﺑﻨﻤﺎ اﻟﻨﺼﯿﺔ ﯾﺠﺮى ﻋﻠﯿﮭﺎ ﻧﻮع آﺧﺮ ﻛﺎﺳﺘﺒﺪال ﺣﺮف‬
‫ﻣﺤﻞ ﺣﺮف أو إﻟﺤﺎق ﻛﻠﻤﺔ ﺑﺄﺧﺮى أو ﻏﯿﺮ ذﻟﻚ‪.‬‬

‫‪101‬‬
‫ﺍﻟﻌﻮﺍﻣﻞ‬
‫وھﻲ إﺷﺎرات وﻋﻼﻣﺎت ﺗﺮﺑﻂ ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ أو داﻟﺘﯿﻦ أو أﻛﺜﺮ أو ﺗﺠﺮي ﻋﻠﻰ ﻣﺘﻐﯿﺮ واﺣﺪ‬
‫أو داﻟﺔ‪.‬‬
‫ﻣﻦ أﻣﺜﻠﺔ ذﻟﻚ إﺷﺎرة اﻟﺠﻤﻊ ) ‪ ( +‬اﻟﺘﻲ ﺗﺄﺗﻲ ﻣﺜﻼ ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ ﻟﺘﺠﻤﻌﮭﻤﺎ‪ .‬أو إﺷﺎرة اﻟﺴﺎﻟﺐ‬
‫اﻟﺘﻲ ﺗﺴﺒﻖ ﻣﺘﻐﯿﺮ ﻟﺘﺠﻌﻞ ﻗﯿﻤﺘﮫ ﺳﺎﻟﺒﺔ ﺗﺤﺖ ﻗﯿﻤﺔ اﻟﺼﻔﺮ‪.‬‬
‫ھﻨﺎك ﻋﻮاﻣﻞ ﻏﯿﺮ اﻟﻌﻮاﻣﻞ اﻟﺮﯾﺎﺿﯿﺔ؛ ﻛﺎﻟﻤﻨﻄﻘﯿﺔ ﻣﺜﻼ اﻟﺘﻲ ﺗﻘﻮل ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل‪ :‬إﺧﺘﺮ‬
‫ھﺬا ) أو ( ذاك‪ .‬ﻓﻜﻠﻤﺔ ) أو ( ھﻨﺎ ھﻲ ﻋﺎﻣﻞ ﻣﻨﻄﻘﻲ ﻣﻦ ﻋﻮاﻣﻞ ﻣﻨﻄﻘﯿﺔ أﺧﺮى ﻣﺜﻞ ) و (‬
‫اﻟﺬي ﯾﻔﯿﺪ ﻣﺜﻼ ﺗﺤﻘﻖ ﺷﺮطﯿﻦ ﻹﺗﻤﺎم ﻋﻤﻠﯿﺔ ﻣﺎ ﻛﺄن ﺗﻘﻮل‪ :‬ﻻ ﺗﻔﻌﻞ ھﺬا اﻷﻣﺮ إﻻ إذا ﺣﺼﻞ‬
‫ﻛﺬا ) و ( ﻛﺎن ﻛﺬا‪.‬‬

‫ﺍﻟﺘﻌﺎﺑﲑ‬
‫اﻟﺘﻌﺒﯿﺮ ھﻮ ﻛﻞ ﺟﻤﻠﺔ ﺗﻌﺒﺮ ﻋﻦ ﻋﻤﻠﯿﺔ وﯾﻜﻮن ﻟﮭﺎ ﻧﺎﺗﺞ ﻣﻦ ﺟﺮاء اﺳﺘﺨﺪام ﻋﻮاﻣﻞ ﻋﻠﻰ ﻣﺘﻐﯿﺮ‬
‫أو ﺑﯿﻦ ﻣﺘﻐﯿﺮﯾﻦ أو أﻛﺜﺮ أو ﺑﯿﻦ دوال‪ .‬وھﺬه ﺑﻌﺾ أﻣﺜﻠﺔ‪:‬‬
‫;‪a = b + c‬‬
‫;‪x = x * x + 1‬‬
‫;‪a1 = (a2 + a3 ) - x‬‬
‫ﻣﺜﻞ ھﺬه اﻟﺘﻌﺎﺑﯿﺮ اﻟﺮﯾﺎﺿﯿﺔ ھﻲ ﺗﻌﻠﯿﻤﺎت ﻓﻲ ﺣﻘﯿﻘﺘﮭﺎ‪ ،‬إﻻ أنّ ھﻨﺎك ﻓﺮق ﺑﺴﯿﻂ ﺑﯿﻨﮭﻤﺎ وﻻ‬
‫ﯾﺆﺛﺮ ﻋﻠﻰ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ إن ﻟﻮﺣﻆ ھﺬا اﻟﻔﺮق أم ﻻ‪ .‬ﻓﺎﻟﺘﻌﺎﺑﯿﺮ اﻟﺮﯾﺎﺿﯿﺔ ﯾﻤﻜﻦ أن ﺗﺘﻘﺒﻠﮭﺎ‬
‫اﻟﻠﻐﺔ ﻣﻦ دون أن ﺗﺨﺘﻢ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ‪ .‬ﻓﺈذا ﻣﺎ وﺿﻌﺖ ﻟﮭﺎ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻛﺎﻧﺖ ﺗﻌﻠﯿﻤﺔ‬
‫ﻣﺜﻞ ﺑﻘﯿﺔ اﻟﺘﻌﻠﯿﻤﺎت اﻷﺧﺮى‪ .‬ذﻟﻚ ﻷنّ اﻟﻤﺘﺮﺟﻢ ﯾﻌﻠﻢ ﺑﺄﻧّﻚ ﺗﺮﯾﺪ ﻣﻦ ھﺬا اﻟﺘﻌﺒﯿﺮ ﺗﻨﻔﯿﺬ ﺗﻌﻠﯿﻤﺔ‬
‫وأﻧّﮫ ﻋﻤﻠﯿﺔ ﯾﺮاد إﺟﺮاؤھﺎ‪.‬‬

‫‪102‬‬
‫ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﺮﻳﺎﺿﻴﺔ‬
‫وھﻲ ﻋﺎﻣﻞ اﻟﺠﻤﻊ ) ‪ ( +‬واﻟﻄﺮح )‪ ( -‬واﻟﻀﺮب ) * ( واﻟﻘﺴﻤﺔ ) ‪ ( /‬وﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ ) ‪%‬‬
‫(‪.‬‬
‫ﻗﺪ ﯾﺒﺪو ﻣﻌﺎﻣﻞ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ ﻏﺮﯾﺒﺎ ـ وھﻮ ھﻨﺎ ﻻ ﯾﻌﻨﻲ اﻟﻨﺴﺒﺔ اﻟﻤﺌﻮﯾﺔ ـ‪ .‬ﻣﻌﺎﻣﻞ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ‬
‫ﯾﺴﺘﺨﺪم ﻻﺳﺘﺨﺮاج اﻟﻌﺪد اﻟﺼﺤﯿﺢ اﻟﻤﺘﺒﻘﻲ ﻣﻦ ﺟﺮاء اﺳﺘﺨﺪام ﻋﺪد ﻋﻠﻰ آﺧﺮ دون ﻛﺴﺮ‪.‬‬
‫ﻓﻌﻤﻠﯿﺔ ﻗﺴﻤﺔ ) ‪ ( 5‬ﻋﻠﻰ ) ‪ ( 3‬ھﻲ ) ‪ ( 1‬واﻟﻤﺘﺒﻘﻲ ) ‪ ( 2‬وھﻮ ﻋﺪد ﺻﺤﯿﺢ‪ .‬ھﺬه ﺗﻜﺘﺐ ﻓﻲ‬
‫ھﻜﺬا‪:‬‬
‫‪a=5%3‬‬
‫ﻓـ ) ‪ ( a‬ﺳﺘﺤﻤﻞ ﻗﯿﻤﺔ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ‪.‬‬

‫ﺃﺳﺒﻘﻴﺔ ﺍﻟﻌﻮﺍﻣﻞ‬
‫رﺑﻤﺎ ﺣﻮت اﻟﻤﻌﺎدﻟﺔ اﻟﺮﯾﺎﺿﯿﺔ ﻋﻠﻰ ﻋﻮاﻣﻞ ﻣﺨﺘﻠﻔﺔ او رﺑﻤﺎ ﻋﻠﻰ ﺣﺪود ﻣﺤﺼﻮرة ﺑﺄﻗﻮاس‪.‬‬
‫ﻓﻜﻞ ﻣﺎ ﺣﺼﺮ ﺑﻘﻮﺳﯿﻦ داﺧﻠﯿﯿﻦ ﻓﻠﮫ أﺳﺒﻘﺔ أوﻟﻰ ﺛﻢ ﻋﺎﻣﻼ اﻟﻀﺮب واﻟﻘﺴﻤﺔ ﺛﻢ ﻋﺎﻣﻼ اﻟﺠﻤﻊ‬
‫واﻟﻄﺮح‪.‬‬
‫ﻋﻮاﻣﻞ أﺧﺮى‬
‫ھﻨﺎك ﻋﻮاﻣﻞ أﺧﺮى ﻣﻨﮭﺎ ﻋﺎﻣﻞ اﻟﻤﺴﺎواة ) = ( اﻟﺬي ﯾﺴﻤﻰ ﺑﻌﺎﻣﻞ اﻻﺳﻨﺎد‪ .‬وﻋﻮاﻣﻞ أﺧﺮى‬
‫ﺧﺎﺻﺔ ﻣﻨﮭﺎ‪:‬‬

‫ﻋﺎﻣﻼ ﺍﻟﺰﻳﺎﺩﺓ ﻭﺍﻟﻨﻘﺼﺎﻥ‬


‫أﻛﺜﺮ اﻟﺒﺮاﻣﺞ ﺗﺤﺘﺎج اﻟﻰ ﻋﺪادات‪ .‬أي اﻟﻰ ﻣﺘﻐﯿﺮ ﺗﺰداد ﻗﯿﻤﺘﮫ ﺑﻤﻘﺪار ) ‪ .( 1‬ﻓﯿﺘﻐﯿﺮ ﻟﯿﻜﻮن‬
‫… ‪0, 1, 2, 3, 4, 5,‬‬
‫وھﻜﺬا‪ .‬ﻟﺘﺤﻘﯿﻖ ذﻟﻚ ﻧﻜﺘﺐ ﻣﺜﻼ اﻟﻤﺘﻐﯿﺮ ‪ a‬ﺑﻘﯿﻤﺔ اﺑﺘﺪاﺋﯿﺔ ) ﺻﻔﺮ (‪ .‬ﺛﻢ ﻧﻜﺘﺐ‪:‬‬

‫‪103‬‬
‫‪a=a+1‬‬
‫ﻛﻠﻤﺎ ﻋﺎد اﻟﺘﻨﻔﯿﺬ اﻟﻰ اﻟﻌﺒﺎرة اﻟﺴﺎﺑﻘﺔ ازدادت ﻗﯿﻤﺔ ‪a‬‬
‫ﻟﻜﺜﺮة اﺳﺘﻌﻤﺎل ﻣﺜﻞ ھﺬا؛ ﻋﻤﺪ واﺿﻌﻮا ‪ c++‬اﻟﻰ ﺻﯿﻐﺔ ﺟﺪﯾﺪة ﺧﺎﺻﺔ ﻓﺠﻌﻠﻮا ﻋﺎﻣﻼ ﺧﺎﺻﺎ‬
‫ﺑﮭﺬه اﻟﻌﻤﻠﯿﺔ ھﻮ اﻟﻌﺎﻣﻞ ‪ ++‬وﻣﻦ ھﻨﺎ ﺟﺎءت اﻟﺘﺴﻤﯿﺔ ‪C++‬‬
‫ﻓﻠﺘﺤﻘﯿﻖ اﻟﻌﻤﻠﯿﺔ اﻟﺴﺎﺑﻘﺔ ) ‪ ( a = a + 1‬ﻧﺴﺘﻄﯿﻊ أن ﻧﻜﺘﺐ ﺑﺪﻻ ﻋﻦ ذﻟﻚ ‪a++‬‬
‫ﻓﺎﻟﺘﻌﺒﯿﺮان ﯾﺆدﯾﺎن اﻟﻰ ﻧﺘﯿﺠﺔ واﺣﺪة إﻻ أنّ اﻟﻤﻌﺎﻣﻞ اﻟﺠﺪﯾﺪ أﺳﺮع ﻓﻲ اﻟﻤﻌﺎﻟﺠﺔ واﻟﺘﻨﻔﯿﺬ‪.‬‬
‫ﻛﺬﻟﻚ ھﻨﺎك اﻟﻌﺎﻣﻞ ‪ ++a‬ﺑﻮﺿﻊ اﻟﻌﺎﻣﻞ ﻗﺒﻞ اﻟﻤﺘﻐﯿﺮ‪ .‬واﻟﻔﺮق ﺑﯿﻦ اﻷول واﻟﺜﺎﻧﻲ؛ أنّ اﻷول‬
‫ﯾﺮﺳﻞ اﻟﻘﯿﻤﺔ اﻟﺤﺎﻟﯿﺔ ﻟﻠﻤﺘﻐﯿﺮ ﻋﻨﺪ وﺻﻮل اﻟﺘﻨﻔﯿﺬ اﻟﯿﮫ ﺛﻢ ﯾﻀﯿﻒ ﻋﻠﯿﮫ )‪ (1‬ﻋﻨﺪ اﻟﺪورة اﻟﺘﺎﻟﯿﺔ‪.‬‬
‫أﻣﺎ اﻟﺜﺎﻧﻲ ﻓﺈﻧﮫ ﯾﻀﯿﻒ اﻟﺰﯾﺎدة ﻓﻮر وﺻﻮل اﻟﺘﻨﻔﯿﺬ إﻟﯿﮫ‪ .‬ﻓﺈذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ اﻻﺑﺘﺪاﺋﯿﺔ ﻟﻠﻤﺘﻐﯿﺮ‬
‫)‪ (0‬ﻓﺈنّ اﻟﻌﺎﻣﻞ اﻷول ﯾﺮﺳﻞ )‪ (0‬ﺛﻢ ﯾﻜﻮن )‪ (1‬ﻓﻲ اﻟﺪورة اﻟﺘﺎﻟﯿﺔ‪ .‬أﻣﺎ اﻟﺜﺎﻧﻲ ﻓﺈﻧﮫ ﯾﺒﺪأ‬
‫ﺑﺎﻟﺰﯾﺎدة ﻓﻮرا ﻓﺘﻜﻮن ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ﻋﻨﺪ اﻟﺪورة اﻷوﻟﻰ )‪ (1‬وﻋﻨﺪ اﻟﺜﺎﻧﯿﺔ )‪ (2‬وھﻜﺬا‪.‬‬

‫ﻛﺬﻟﻚ ھﻨﺎك ﻣﻌﺎﻣﻞ اﻟﻨﻘﺼﺎن ﻋﻨﺪ اﻟﻌﺪ اﻟﺘﻨﺎزﻟﻲ ‪ a--‬و ‪ --a‬وﻋﻠﻰ ﻧﻔﺲ اﻟﻘﺎﻋﺪة اﻟﺴﺎﺑﻘﺔ‪.‬‬

‫ﻟﯿﺲ ھﺬا ﻓﻘﻂ ﻓﻘﺪ ﺗﺮﯾﺪ اﻟﺰﯾﺎدة او اﻟﻨﻘﺼﺎن ﺑﻘﯿﻤﺔ ﻏﯿﺮ اﻟﻮاﺣﺪ او أﻧﻚ ﺗﺮﯾﺪ ﻏﯿﺮ اﻟﺰﯾﺎدة‬
‫واﻟﻨﻘﺼﺎن ﻓﻠﺬﻟﻚ ﻛﺎﻧﺖ ﻣﺜﻞ ھﺬه اﻟﻤﻌﺎﻣﻼت اﻟﺨﺎﺻﺔ ـ ﻋﻠﻰ ﻓﺮض أنّ اﻟﻤﺘﻐﯿﺮ ﺑﺎﺳﻢ ‪ a‬و ‪b‬‬
‫ھﻮ أي ﻋﺪد‪:‬‬

‫وھﻲ ﺗﻜﺎﻓﺊ ‪a = a + b‬‬ ‫‪a += b‬‬


‫وھﻲ ﺗﻜﺎﻓﺊ ‪a = a - b‬‬ ‫‪a -= b‬‬
‫وھﻲ ﺗﻜﺎﻓﺊ ‪a = a * b‬‬ ‫‪a *= b‬‬
‫وھﻲ ﺗﻜﺎﻓﺊ ‪a = a / b‬‬ ‫‪a /= b‬‬

‫‪104‬‬
‫اﻟﺘﻌﺎﺑﯿﺮ اﻟﺘﻲ ﻋﻠﻰ اﻟﯿﻤﯿﻦ ھﻲ ذات اﻟﺘﻌﺎﺑﯿﺮ اﻟﻤﻘﺎﺑﻠﺔ إﻻ أﻧّﮭﺎ أﺳﺮع ﻓﻲ اﻟﻤﻌﺎﻟﺠﺔ ﺑﯿﻨﻤﺎ اﻷﺧﺮى‬
‫أﻛﺜﺮ وﺿﻮﺣﺎ‪.‬‬

‫ﻋﺎﻣﻞ ﺍﳌﺴﺎﻭﺍﺓ ﻭﻋﺎﻣﻞ ﺍﺧﺘﺒﺎﺭ ﺍﳌﺴﺎﻭﺍﺓ‬


‫ﻓﻲ ﻟﻐﺎت ﻛﺜﯿﺮة ﯾﺼﺢ أن ﺗﻘﻮل ﻣﺜﻼ‪:‬‬
‫طﻮل اﻟﻀﻠﻊ = ‪15‬‬
‫اذا ﻛﺎن طﻮل اﻟﻀﻠﻊ اﻻول = طﻮل اﻟﻀﻠﻊ اﻟﺜﺎﻧﻲ ﻓﺎﺟﻌﻞ ﻗﯿﻤﺔ ﻛﺬا = ﻛﺬا‬

‫أﻣﺎ ﻓﻲ ﻋﺎﺋﻠﺔ ‪ c‬ﻓﻘﺪ وﺿﻌﻮا ﻻﺧﺘﺒﺎر ﻣﺴﺎواة اﻟﺸﺮط ﻋﺎﻣﻼ آﺧﺮ ھﻮ ==‬
‫ﻓﺎﻟﻌﺒﺎرات اﻟﺴﺎﺑﻘﺔ ﻓﻲ ﻟﻐﺔ ‪ c‬ﺗﻜﻮن ﻋﻠﻰ اﻟﺸﻜﻞ‪:‬‬

‫طﻮل اﻟﻀﻠﻊ = ‪15‬‬


‫اذا ﻛﺎن طﻮل اﻟﻀﻠﻊ اﻻول == طﻮل اﻟﻀﻠﻊ اﻟﺜﺎﻧﻲ ﻓﺎﺟﻌﻞ ﻗﯿﻤﺔ ﻛﺬا = ﻛﺬا‬

‫ﻋﻮﺍﻣﻞ ﺍﻟﺸﺮﻁ ﺍﻷﺧﺮﻯ‬


‫وﺗﺴﻤﻰ ﻋﻮاﻣﻞ اﻟﻤﻘﺎرﻧﺔ وھﻲ‪:‬‬
‫ﻛﻤﺎ ﺑﯿﻨﺎ ﺳﺎﺑﻘﺎ‬ ‫ﻻﺧﺘﺒﺎر ﺷﺮط اﻟﻤﺴﺎواة‬ ‫==‬
‫ﻛﺄن ﺗﻘﻮل‪ :‬اذا ﻛﺎن ﻛﺬا ﻻﯾﺴﺎوي‬ ‫ﻻﺧﺘﺒﺎر ﻋﺪم اﻟﻤﺴﺎواة‬ ‫=!‬
‫ﻛﺬا‬
‫أﻛﺒﺮ ﻣﻦ‬ ‫>‬
‫اﺻﻐﺮ ﻣﻦ‬ ‫<‬

‫‪105‬‬
‫اﻛﺒﺮ ﻣﻦ او ﯾﺴﺎوي‬ ‫=>‬

‫اﺻﻐر ﻣن او ﯾﺳﺎوي‬ ‫=<‬

‫ﺍﻟﻌﻮﺍﻣﻞ ﺍﳌﻨﻄﻘﻴﺔ‬
‫اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ﺗﺄﺗﻲ ﻣﻊ اﻟﺘﻌﺎﺑﯿﺮ واﻟﺠﻤﻞ اﻟﺸﺮطﯿﺔ اﻟﺘﻲ ﺗﻠﺰم ﻣﻮاﻓﻘﺔ ﺷﻲء او ﻋﺪﻣﮫ‪.‬‬
‫وﺟﻤﻠﺔ اﻟﺸﺮط ﺗﺄﺗﻲ ﺑﺎﺧﺘﺒﺎر ﻧﺘﯿﺠﺘﮫ ﻧﻌﻢ او ﻻ‪ .‬او ﺻﺢ وﺧﻄﺄ‪ .‬ﻛﺄن ﺗﻘﻮل‪ :‬ھﻞ ﯾﺴﺎوي ﻛﺬا‬
‫ﻛﺬا؟‪.‬‬
‫ﻓﺄﺣﺪ اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ﻣﺜﻼ ﯾﻌﻄﻲ ﻧﻘﯿﺾ ﻧﺘﯿﺠﺔ ﺟﻮاب اﻟﺸﺮط ﻓﺘﻘﻮل ﻣﺜﻼ‪ :‬ھﻞ اﻟﻤﺎء ﺣﺎر؟‪.‬‬
‫ﻓﺎﻟﺠﻮاب ﻣﺜﻼ‪ :‬ﻧﻌﻢ‪ .‬ﺗﻘﻮل اﻻن ﺑﺎﺳﺘﺨﺪام ﻋﺎﻣﻞ اﻟﻨﻘﯿﺾ اﻟﻤﻨﻄﻘﻲ‪ :‬أﻋﻄﻨﻲ ھﻞ اﻟﻤﺎء ﺣﺎر؟‪.‬‬
‫أي اﻋﻄﻨﻲ ﻋﻜﺲ ﻧﺘﯿﺠﺔ اﻟﺠﻮاب‪ ،‬ﻓﺘﻜﻮن اﻟﻨﺘﯿﺠﺔ‪ :‬ﻻ‬

‫اﯾﻀﺎ اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ﺗﺮﺑﻂ ﺑﯿﻦ ﺷﺮطﯿﻦ او اﻛﺜﺮ ﻛﺄن ﺗﻘﻮل‪ :‬ھﻞ اﻟﻤﺎء ﺣﺎر و اﻟﺸﺎي‬
‫ﺑﺎرد؟‪ .‬او ﺗﻘﻮل‪ :‬ھﻞ اﻟﻤﺎء ﺣﺎر او اﻟﺸﺎي ﺣﺎر؟‪.‬‬

‫ﻓﻲ ﻟﻐﺎت ﺑﺮﻣﺠﯿﺔ ﺗﺴﺘﺨﺪم ﻋﺒﺎرات ‪ or‬و ‪ and‬ﻛﻌﻮاﻣﻞ ﻣﻨﻄﻘﯿﺔ‪ .‬أﻣﺎ ﻓﻲ ‪ c++‬ﻓﻨﺴﺘﺨﺪم‬
‫ھﺬه اﻟﺮﻣﻮز ﻛﻌﻮاﻣﻞ ﻣﻨﻄﻘﯿﺔ ﻛﻤﺎ ﻓﻲ اﻟﺠﺪول اﻟﺘﺎﻟﻲ‪:‬‬

‫اﻟﻮظﯿﻔﺔ‬ ‫ﻣﺎﯾﻘﺎﺑﻠﮫ ﻓﻲ ﻟﻐﺎت اﺧﺮى‬ ‫اﻟﻌﺎﻣﻞ‬


‫ﻟﻠﺮﺑﻂ واﻻزدواج )و(‬ ‫‪and‬‬ ‫&&‬
‫ﺟﻤﯿﻊ‬ ‫ﺗﺤﻘﻖ‬ ‫ووﺟﻮب‬
‫اﻟﺸﺮوط‬

‫‪106‬‬
‫ﻟﻼﺧﺘﯿﺎر او ﺗﺤﻘﻖ اﺣﺪ‬ ‫‪or‬‬ ‫||‬
‫ﺷﺮطﯿﻦ او اﻛﺜﺮ‬
‫ﻋﻜﺲ ﻧﺘﯿﺠﺔ اﻟﺸﺮط‬ ‫‪not‬‬ ‫!‬

‫وﺳﯿﺘﻮﺿﺢ اﺳﺘﺨﺪام ﺗﻠﻚ اﻟﻌﻮاﻣﻞ ﺣﯿﻦ ﻧﺼﻞ اﻟﻰ ﻣﻮﺿﻮع اﺗﺨﺎذ اﻟﻘﺮارات‪.‬‬

‫ﻋﺎﻣﻞ ﺍﻻﺧﺘﺒﺎﺭ ﺍﻟﺸﺮﻃﻲ ?‬


‫ﯾﺄﺗﻲ ھﺬا اﻟﻌﺎﻣﻞ ﻓﻲ ﺗﺮﻛﯿﺐ ﺟﻤﻠﺔ ﺷﺮط وﻛﺄن ﻣﻌﻨﺎه ھﻞ ﯾﺴﺎوي؟‪ .‬او اذا ﻛﺎن ﻛﺬا ﯾﺴﺎوي‬
‫ﻛﺬا‪.‬‬
‫ﻓﺈن ﻛﺎن اﻟﺸﺮط ﯾﻌﻄﻲ اﻟﻨﺘﯿﺠﺔ ﻧﻌﻢ او ﺻﺤﯿﺢ ﻓﯿﻤﻜﻦ أن ﻧﻨﻔﺬ ﺷﯿﺌﺎ وإن ﻛﺎﻧﺖ ﻧﺘﯿﺠﺔ اﻟﺸﺮط ﻻ‬
‫او ﺧﻄﺄ ﻓﯿﻤﻜﻦ أن ﻧﻨﻔﺬ ﺷﯿﺌﺎ آﺧﺮ‪ .‬ﺳﻨﺄﺧﺬ ﻣﺜﺎل ﺗﻘﺮﯾﺒﻲ ﺛﻢ ﻣﺜﺎل ﺑﺮﻣﺠﻲ‪:‬‬
‫اﻟﻣﺗﻐﯾر ‪ a‬ﯾﺳﺎوي ‪ ? b‬اظﻬر رﺳﺎﻟﺔ ﺗﻘول ﻛذا ‪ :‬اظﻬر رﺳﺎﻟﺔ ﺗﻘول ﻏﯾر ذاك‬

‫ﺟﻤﻠﺔ اﻟﺸﺮط اﻟﻣﺗﻐﯾر ‪ a‬ﯾﺳﺎوي ‪ ? b‬ﺗﻘﻮل‪ :‬اذا ﻛﺎن ‪ a‬ﯾﺴﺎوي ‪b‬‬


‫ﯾﺄﺗﻲ ﺑﻌﺪ ذﻟﻚ ﺷﻘﯿﻦ ﯾﻔﺼﻞ ﺑﯿﻨﮭﻤﺎ اﻟﻌﺎﻣﻞ ‪:‬‬
‫ﻓﺎذا ﻛﺎن اﻟﺠﻮاب ﻧﻌﻢ ﻓﻨﻔﺬ اﻟﺸﻖ اﻻول وإﻻ ﻓﻨﻔﺬ اﻟﺸﻖ اﻟﺜﺎﻧﻲ‪.‬‬

‫ﻣﺜﺎل ﺑﺮﻣﺠﻲ‪:‬‬
‫‪a == b ? x = 5 : x = 10‬‬

‫اﻟﻤﺜﺎل ﯾﻘﻮل‪ :‬اذا ﻛﺎﻧﺖ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ‪ a‬ﺗﺴﺎوي ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ‪ b‬ﻓﺎﺟﻌﻞ ﻗﯿﻤﺔ ‪ x‬ھﻲ )‪ (5‬وإﻻ‬
‫ﻓﺎﺟﻌﻠﮭﺎ )‪.(10‬‬

‫‪107‬‬
‫ﺍﳌﺆﺷﺮﺍﺕ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ ﻭﺍﻻﲰﺎﺀ ﺍﻟﻌﻨﻮﺍﻧﻴﺔ ﺍﻟﺒﺪﻳﻠﺔ‬
‫ﻧﺼﻞ اﻻن اﻟﻰ ﻣﻮﺿﻮع ذي أھﻤﯿﺔ ﻛﺒﯿﺮة ﻓﻲ ﻟﻐﺎت ‪ . c‬ذﻟﻚ ھﻮ ﻣﻮﺿﻮع اﻟﻌﻨﺎوﯾﻦ‪.‬‬
‫دﻋﻨﺎ أوﻻ ﻧﺘﻌﺮف ﻋﻠﻰ ﻋﺎﻣﻞ اﻟﻌﻨﻮان &‪.‬‬

‫ﻋﺎﻣﻞ ﺍﻟﻌﻨﻮﺍﻥ &‬


‫ﺑﻮاﺳﻄﺔ وﺿﻊ ھﺬا اﻟﻌﺎﻣﻞ ﻗﺒﻞ ﻣﺘﻐﯿﺮ ﻣﺎ ﻓﺈﻧﮫ ﯾﻌﻄﻲ ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ‪ .‬ﻓﻠﻤﻌﺮﻓﺔ ﻋﻨﻮان أي‬
‫ﻣﺘﻐﯿﺮ ﻓﻲ اﻟﺬاﻛﺮة ﯾﻜﻔﻲ أن ﻧﻀﻊ ﻗﺒﻠﮫ ذﻟﻚ اﻟﻌﺎﻣﻞ‪ .‬اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﯾﺼﺮح ﻋﻦ ﻣﺘﻐﯿﺮ وﻓﯿﮫ‬
‫ﺟﻤﻠﺔ إظﮭﺎر ﻟﺘﻄﺒﻊ ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ اﻟﺸﺎﺷﺔ‪.‬‬
‫"‪#include "stdafx.h‬‬
‫>‪#include <iostream‬‬
‫;‪using namespace std‬‬

‫)(‪int main‬‬
‫{‬

‫;‪int integer1‬‬

‫;‪cout << & integer1 << endl‬‬

‫;‪return 0‬‬
‫}‬

‫ﺍﻟﺘﺤﻮﻳﻞ ﻣﻦ ﻧﻮﻉ ﻵﺧﺮ‬


‫ﺻﺮِح ﻋﻨﮫ أﻧﮫ ‪int‬‬
‫رﺑﻤﺎ ﯾﺘﻄﻠﺐ ﻣﺜﺎل ﻣﺎ ﻋﺪد ﺻﺤﯿﺢ ﻣﻦ اﻟﻨﻮع اﻟﻄﻮﯾﻞ ‪ long‬وﻗﺪ ُ‬
‫‪1.‬ﻓﻠﺘﺤﻮﯾﻞ اﻟﻨﻮع اﻟﺼﺤﯿﺢ ‪ int‬اﻟﻰ ‪ long‬ﻧﺴﺘﻄﯿﻊ اﺳﺘﺨﺪام ﺗﻌﻠﯿﻤﺔ ﺗﻔﯿﺪ اﻟﺘﺤﻮﯾﻞ وﺗﺴﻤﻰ‬
‫ﺑﻌﻤﻠﯿﺔ اﻻﺳﻘﺎط وﺗﺘﻢ ھﻨﺎ ﻣﺜﻼ ﺑﻜﺘﺎﺑﺔ ھﺬه‬
‫‪a = (long) integer1‬‬
‫او ﯾﻜﻮن اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬
‫"‪#include "stdafx.h‬‬
‫>‪#include <iostream‬‬

‫‪108‬‬
‫;‪using namespace std‬‬

‫)(‪int main‬‬
‫{‬

‫;‪int integer1‬‬

‫;‪cout << (long) & integer1 << endl‬‬

‫;‪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‬‬

‫او ﻧﻜﺘﺐ ‪:‬‬


‫‪*p = *p + 1‬‬
‫ﻓﺘﺰداد ﻗﯿﻤﺔ ‪ a‬ﺑـ )‪.(1‬‬

‫؟‪.‬‬ ‫وﻟﻜﻦ ﻣﺎذا إن ﻛﺘﺒﻨﺎ ‪p = p + 1‬‬


‫اﻟﻤﻌﻨﻰ ھﻨﺎ ﻣﺨﺘﻠﻒ‪ .‬ﻓﺒﻌﺪ ان ﻋﺮﻓﻨﺎ ‪ p‬ﻋﻠﻰ اﻧﮭﺎ ﻋﻨﻮان‪ ،‬اﺻﺒﺢ اﺳﺘﻌﻤﺎل رﻣﺰھﺎ ﻓﯿﻤﺎ ﺑﻌﺪ‬
‫ﯾﻠﻌﺐ ﻓﻲ ﺳﺎﺣﺔ اﻟﻌﻨﺎوﯾﻦ ﻧﻔﺴﮭﺎ‪ .‬ﻓﺎﻟﺘﻌﺒﯿﺮ اﻻﺧﯿﺮ ﺳﯿﺠﻌﻞ ﻣﻦ ‪ p‬ﺗﺸﯿﺮ اﻟﻰ ﻋﻨﻮان اﺧﺮ ھﻮ‬
‫اﻟﺘﺎﻟﻲ ﻟﻤﺎ ﻛﺎﻧﺖ ﺗﺸﯿﺮ اﻟﯿﮫ‪ .‬أي اﻧﮭﺎ ﻟﻢ ﺗﻌﺪ ﺗﺸﯿﺮ اﻟﻰ ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ ‪ a‬وﻟﻜﻦ اﻟﻰ اﻟﻌﻨﻮان‬
‫اﻟﺬي ﯾﻠﯿﮭﺎ‪.‬‬
‫ﻻﻧﻌﻠﻢ طﺮﯾﻘﺔ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ اﻟﺬاﻛﺮة وﺗﻮزﯾﻊ ﻋﻨﺎﺻﺮھﺎ ﻻن ھﺬا ﯾﻌﺘﻤﺪ ﻋﻠﻰ ﻣﻮاﺻﻔﺎت‬
‫اﻟﺠﮭﺎز وﻣﺎ ﯾﻘﻮم اﻟﺠﮭﺎز ﺑﺘﺤﻤﯿﻠﮫ ﻣﻊ ﺑﺮﻧﺎﻣﺠﻨﺎ وﻏﯿﺮ ذﻟﻚ‪ .‬ﻟﺬﻟﻚ ﯾﺠﺐ اﻟﺤﺬر ﻣﻊ ﻋﻤﻠﯿﺔ ﻣﺜﻞ‬
‫ﺗﻠﻚ اﻻ اذا ﻛﻨﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺼﻔﻮﻓﺎت اﻟﺘﻲ ﺗﺘﺮﺗﺐ ﻋﻨﺎﺻﺮھﺎ ﺷﻲء ﺑﻌﺪ اﺧﺮ‪.‬‬

‫‪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‬‬ ‫;) ‪( a > b‬‬


‫; ‪x = 0‬‬
‫ﻟﯿﺲ ھﺬا ﻓﻘﻂ؛ ﺑﻞ ﻧﺴﺘﻄﯿﻊ ﺗﻨﻔﯿﺬ ﻣﺠﻤﻮع ﺗﻌﻠﯿﻤﺎت ﺿﻤﻦ ﻛﺘﻠﺔ‪ ،‬ﻛﻤﺜﻞ ھﺬه‪:‬‬

‫) ‪if ( r >= 5‬‬


‫{‬
‫;‪r = r+2‬‬
‫;‪r1 = 2*r‬‬
‫; ‪std::cout << r‬‬
‫}‬

‫اذا ﻟﻢ ﯾﻜﻦ اﻟﺸﺮط اﯾﺠﺎﺑﺎ؛ ﻓﺈنّ اﻟﺘﻨﻔﯿﺬ ﺳﯿﺘﺠﺎوز اﻟﺘﻌﻠﯿﻤﺔ ﻣﺎﺑﻌﺪ اﻟﺸﺮط او ﻛﺘﻠﺔ اﻟﺘﻌﻠﯿﻤﺎت‪.‬‬
‫او ﻧﺴﺘﻄﯿﻊ اﺗﺒﺎع اﺳﻠﻮب آﺧﺮ ﻓﻲ ﺟﻤﻠﺔ ‪ . 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 '1':‬‬ ‫‪//‬‬ ‫ھﻲ ‪a‬‬ ‫اذا ﻛﺎﻧﺖ ‪grade‬‬


‫;‪a1 = 5‬‬
‫;‪break‬‬ ‫اذا ﺗﺤﻘﻘﺖ اﻟﺤﺎﻟﺔ اﺧﺮج ﻣﻦ اﻟﺘﺤﻘﯿﻖ اﻟﻰ ﻣﺎﺑﻌﺪه ‪//‬‬

‫‪case '2':‬‬
‫;‪a1 = 10‬‬
‫;‪break‬‬

‫‪case '3':‬‬

‫‪114‬‬
‫;‪a1 = 15‬‬
‫;‪break‬‬

‫‪default:‬‬ ‫‪//‬‬ ‫اذا ﻟﻢ ﺗﺘﺤﻘﻖ اﺣﺪ اﻟﺤﺎﻻت ﻓﻨﻔﺬ اﻟﺘﻌﻠﯿﻤﺔ‬


‫اﻟﺘﺎﻟﯿﺔ‬
‫;"‪cout << "….‬‬
‫<<‬
‫;‪break‬‬

‫‪} // end switch‬‬

‫ﺍﳊﻠﻘﺎﺕ ﺍﻟﺘﻜﺮﺍﺭﻳﺔ ﻭﺍﻟﺪﻭﺭﺍﺕ ﺍﻟﺸﺮﻃﻴﺔ‬


‫ﻓﻲ اﻟﺤﯿﺎة ھﻨﺎك أﻣﺜﻠﺔ ﻛﺜﯿﺮة ﻋﻠﻰ ﻓﻮاﺋﺪ اﻟﻌﻮدة اﻟﻜﺜﯿﺮة اﻟﻰ ﻧﻔﺲ اﻻﻣﺮ ﺳﻮاءا ﻓﻲ ﺗﺤﻘﯿﻘﮫ او‬
‫اﺧﺘﺒﺎره او دراﺳﺘﮫ او ﻏﯿﺮ ذﻟﻚ‪ .‬ﻓﻘﺪ ﺗﻀﻊ ﺷﺮطﺎ او ﻓﺮﺿﺎ ﻣﺎ وﺗﻌﻤﻞ ﻋﻠﻰ ﺗﻐﯿﯿﺮه ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ‬
‫او ﺗﺒﺪﯾﻞ اﺣﺪ ﻋﻮاﻣﻠﮫ‪ ،‬وﻣﻊ ﻛﻞ ﺗﻐﯿﯿﺮ او ﺗﺒﺪﯾﻞ ﺗﺘﻔﺤﺼﮫ ﺑﺎﻟﻌﻮدة اﻟﯿﮫ ﻣﺮة أﺧﺮى‪ .‬ﻣﺴﺄﻟﺔ‬
‫اﻟﺘﻜﺮار اذن ﺗﻔﯿﺪ ﻓﻲ اﯾﺠﺎد ﺣﻞ او اﻻﻗﺘﺮاب ﻣﻨﮫ‪ .‬وﻟﮭﺬا ﻛﺎﻧﺖ ﻓﻜﺮة اﻟﺤﻠﻘﺎت ﻣﺘﻮاﺟﺪة ﻓﻲ‬
‫ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﺃﻧﻮﺍﻉ ﺍﳊﻠﻘﺎﺕ‬
‫ھﻨﺎك ﻧﻮﻋﯿﻦ ﻣﻦ اﻟﺤﻠﻘﺎت اﻟﺘﻜﺮارﯾﺔ‪ :‬أوﻟﻰ ھﺬه اﻟﺤﻠﻘﺎت ﻣﺎ ﺗﻌﯿﺪ ﻧﻔﺴﮭﺎ ﻣﺎدام ﺷﺮطﺎ ﻣﺎ ﻻزال‬
‫ﺻﺤﯿﺤﺎ ﻓﺈذا ﻣﺎ أﺻﺒﺢ ﺧﺎطﺌﺎ ﺗﻮﻗﻔﺖ‪ .‬واﻟﺜﺎﻧﯿﺔ ﻣﺎﺗﻘﻮم ﻋﻠﻰ اﻟﺘﻜﺮار ﺑﻨﺎءا ﻋﻠﻰ ﻋﺪد دورات ﻣﺎ‬
‫ﯾﺤﺪدھﺎ اﻟﻤﺒﺮﻣﺞ ﻟﻤﺴﺄﻟﺘﮫ‪ .‬ﺗﻌﺎل ﻧﺴﻤﻲ اﻻوﻟﻰ ﺣﻠﻘﺎت اﻟﺘﺤﻘﻖ‪ ،‬وﻧﺴﻤﻲ اﻟﺜﺎﻧﯿﺔ ﺣﻠﻘﺎت اﻟﻌﺪ‪.‬‬

‫‪115‬‬
‫ﺣﻠﻘﺎﺕ ﺍﻟﺘﺤﻘﻖ‬
‫اي أﻧﮭﺎ ﺗﺘﺤﻘﻖ ﻣﻦ ﺷﺮط ﻣﺎ ھﻞ ھﻮ ﺻﺤﯿﺢ أم ﺧﻄﺄ وھﻲ ﺗﺒﺪأ ﺑﺎﻟﻜﻠﻤﺔ اﻟﻤﻔﺘﺎﺣﯿﺔ ‪While‬‬
‫اﻟﺘﻲ ﯾﺘﺒﻌﮭﺎ اﻟﺸﺮط اﻟﻤﺨﺘﺒﺮ‪ .‬وﯾﻠﻲ ذﻟﻚ ﺟﻤﻠﺔ او ﻛﺘﻠﺔ ﺟﻤﻞ ﺗﻨﻔﺬ ﻣﺎداﻣﺖ اﻟﺤﻠﻘﺔ ﻣﺴﺘﻤﺮة‪ .‬ﻓﻲ‬
‫اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻧﺨﺘﺒﺮ اﻟﺸﺮط ) ‪ ( a1 <= 10‬ﻓﻤﺎدام اﻟﻤﺘﻐﯿﺮ ‪ a1‬أﺻﻐﺮ ﻣﻦ )‪ (10‬او ﯾﺴﺎوﯾﮭﺎ‬
‫ﻓﺎﻟﺤﻠﻘﺔ ﺳﺘﺴﺘﻤﺮ ﺑﺠﻤﻠﺘﮭﺎ اﻟﻮﺣﯿﺪة ھﻨﺎ ﻓﻲ ﻣﺜﺎﻟﻨﺎ وھﻲ اظﮭﺎر اﻟﻌﺒﺎرة ‪: . ok‬‬

‫) ‪while ( a1 <= 10‬‬


‫;"‪cout << "ok\n‬‬

‫ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﺗﻨﻔﺬ ﻛﺘﻠﺔ ﺗﻌﻠﯿﻤﺎت‪:‬‬

‫{ ) ‪while ( x <= 10‬‬


‫;‪sum += x‬‬ ‫‪// add x to sum‬‬
‫;‪++x‬‬ ‫‪// increment x‬‬

‫‪} // end while‬‬

‫ورﺑﻤﺎ ﺗﻜﻮن أﻛﺜﺮ وﺿﻮﺣﺎ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬

‫) ‪while ( x <= 10‬‬


‫{‬
‫;‪sum += x‬‬ ‫‪// add x to sum‬‬
‫;‪++x‬‬ ‫‪// increment x‬‬

‫‪} // end while‬‬

‫اذا ﻟﻢ ﯾﻜﻦ اﻟﺸﺮط ﻣﺘﺤﻘﻘﺎ ﻣﻦ أول ﻣﺮة ﻓﺈن اﻟﺤﻠﻘﺔ ﻟﻦ ﺗﻨﻔﺬ‪ .‬ﻓﺎذا ﻛﺎﻧﺖ ‪ 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‬‬

‫) ‪for ( int x = 1; x <= 10; x++‬‬


‫{‬

‫‪// if x is 10, continue with next iteration of loop‬‬


‫) ‪if ( x == 10‬‬

‫;" " << ‪cout << x‬‬ ‫‪// display value of x‬‬

‫‪} // end for structure‬‬

‫ﻋﻨﺪﻣﺎ ‪ 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‬ﻋﻨﺪھﺎ ﯾﻜﻮن ﺷﻜﻞ‬
‫اﻟﺘﺼﺮﯾﺢ ھﻜﺬا‪:‬‬

‫)‪int addition (int a1, int a2‬‬

‫‪122‬‬
‫ﻛﻤﺎ ﯾﺘﺒﯿﻦ؛ ﻧﺴﺒﻖ اﺳﻢ اﻟﺪاﻟﺔ واﺳﻢ ﻛﻞ وﺳﯿﻂ ﺑﻨﻮع اﻟﻘﯿﻤﺔ وﯾﺠﺐ أن ﯾﻜﻮن ﻧﻮع اﻟﺪاﻟﺔ وﻧﻮع‬
‫وﺳﻄﺎﺋﮭﺎ ﻣﺘﻮاﻓﻖ ﻏﯿﺮ ﻣﺨﺘﻠﻒ‪ ..‬ﻛﺬﻟﻚ ﻧﺮى ـ ھﻨﺎ ـ أنّ اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ ﻟﻢ ﯾﻨﺘﮭﻲ ﺑﻔﺎﺻﻠﺔ‬
‫ﻣﻨﻘﻮطﺔ‪.‬‬

‫ﺟﺴﻢ ﺍﻟﺪﺍﻟﺔ‬
‫ﺑﻌﺪ اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ ﯾﺄﺗﻲ ھﯿﻜﻞ اﻟﺪاﻟﺔ؛ أي ﺧﻄﻮاﺗﮭﺎ وﺗﻌﻠﯿﻤﺎت ﺟﻤﻠﮭﺎ اﻟﻤﺒﺮﻣﺠﺔ‪ .‬وھﻲ‬
‫ﺗﺄﺗﻲ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﻌﻘﻮﻓﯿﻦ‪ .‬ﻓﻲ ﻣﺜﺎل داﻟﺘﻨﺎ اﻟﺘﻲ ﺗﺠﻤﻊ ﻣﺘﻐﯿﺮﯾﻦ ﻧﻔﻜﺮ أن ﺗﻜﻮن ﺧﻄﻮاﺗﮭﺎ‬
‫ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬
‫ﺑﻤﺎ أﻧﻨﺎ أﻣﺎم وﺳﯿﻄﯿﻦ ﻓﻨﺤﻦ ﻧﺤﺘﺎج ﻟﻤﺘﻐﯿﺮ ﺛﺎﻟﺚ ﯾﻜﻮن ﻛﻨﺎﺗﺞ ﻟﺠﻤﻌﮭﻤﺎ‪ ،‬ﻟﺬﻟﻚ ﻧﺤﺘﺎج ﻟﺘﺼﺮﯾﺢ‬
‫ﻋﻦ ھﺬا اﻟﻤﺘﻐﯿﺮ ‪ r‬ﺛﻢ ﻣﻌﺎدﻟﺔ اﻟﺠﻤﻊ ﺑﯿﻦ اﻟﻤﺘﻐﯿﺮﯾﻦ ‪r=a1+a2‬‬

‫ﺑﻌﺪ ذﻟﻚ ﻧﺤﺘﺎج اﻟﻰ ﺟﻤﻠﺔ ﺗﺤﻤﻞ ﻟﻨﺎ اﻟﻨﺎﺗﺞ ﻟﺘﻌﯿﺪه اﻟﻰ اﻟﻤﻮﺿﻊ اﻟﺬي ﻧﺴﺘﺪﻋﯿﮭﺎ ﻓﯿﮫ‪ .‬ﻓﻨﺤﺘﺎج‬
‫اﻟﻰ ﻛﻠﻤﺔ اﻟﻌﻮدة ‪ return‬ﯾﻌﻘﺒﮭﺎ اﻟﻨﺘﯿﺠﺔ اﻟﺘﻲ ﯾﺮاد ﺣﻤﻠﮭﺎ )‪ return (r‬أو ‪return‬‬
‫)‪. (a1+a2‬‬
‫ﻋﻠﻰ ذﻟﻚ ﯾﻜﻮن ﺷﻜﻞ ﺗﻌﺮﯾﻒ اﻟﺪاﻟﺔ أو ﺟﺴﻤﮭﺎ ھﻜﺬا‪:‬‬

‫)‪int addition (int a1, int a2‬‬


‫;‪{int r‬‬
‫;‪r=a1+a2‬‬
‫;)‪return (r‬‬
‫}‬

‫واﻻن ﻣﻊ اﻟﻤﺜﺎل اﻟﻜﺎﻣﻞ ﻟﻠﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ واﺳﺘﺪﻋﺎﺋﮭﺎ ﻣﻦ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﺔ‪:‬‬

‫‪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‬‬
‫ﺳﺒﺐ ذﻟﻚ أنّ اﻟﺪوال اﻟﻤﺒﺮﻣﺠﺔ ﻣﻦ ﻗﺒﻠﻚ ﻋﺎدة ﻣﺎ ﺗﺆﺧﺮ اﻟﻰ ﻣﺎﺑﻌﺪ اﻟﺪاﻟﺔ اﻷم‪ ،‬ورﺑﻤﺎ ھﻨﺎك‬
‫داﻟﺔ ﺗﺴﺘﺪﻋﻲ داﻟﺔ ﺑﻌﺪھﺎ ﻓﯿﻜﻮن ﻣﻦ اﻷﻓﻀﻞ أنّ اﻟﻤﺘﺮﺟﻢ ﻗﺪ ﺣﺪد ﻧﻮع اﻟﺪوال ﻟﺪﯾﮫ ﻣﺴﺒﻘﺎ‪.‬‬
‫ﻧﻤﻮذج اﻟﺪاﻟﺔ ﯾﺸﺒﮫ ﻛﺜﯿﺮا اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ﻟﻜﻦ ﯾﻨﺘﮭﻲ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‪:‬‬

‫;)‪int addition (int, int‬‬


‫او ھﻜﺬا‪:‬‬
‫;)‪int addition (int a, int b‬‬

‫اذن ﻗﻢ ﺑﺬﻛﺮ ﺗﺮوﯾﺴﺔ اﻟﺪاﻟﺔ واذﻛﺮ أﻧﺖ أﺳﻤﺎء وﺳﺎﺋﻄﮭﺎ وﻛﺄﻧﻚ ﺗﻜﺘﺐ ﺗﺼﺮﯾﺤﺎ وإن ﻛﺎن‬
‫اﻟﻤﺘﺮﺟﻢ ھﻨﺎ ﺳﯿﺘﺠﺎھﻞ ﺗﻠﻚ اﻷﺳﻤﺎء‪.‬‬
‫واﻟﯿﻚ اﻟﻤﺜﺎل ﻛﺎﻣﻼ ﻣﻊ ﻧﻤﻮذج داﻟﺘﮫ‪:‬‬

‫‪// function example‬‬

‫"‪#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>

using namespace std;


int whatIsThis(int ); // function prototype

int main()

int integer1;
int result;

cin >> integer1;

int result = whatIsThis(integer1);

cout << "Result is " << result << endl;

return 0; // indicates successful termination

} // end main

// What does this function do?


int whatIsThis(int size )
{
// base case
if ( size == 1 )
return 0;

// recursive step
else

127
‫‪return‬‬ ‫;) ‪( size - 1 ) + whatIsThis(size - 1‬‬

‫‪} // end function whatIsThis‬‬

‫ﺩﻭﺍﻝ ﻻ ﺗﻌﻴﺪ ﻧﺘﻴﺠﺔ‬


‫ﯾﻤﻜﻦ ﻋﻤﻞ داﻟﺔ ﻟﺘﺆدي ﻋﻤﻠﯿﺔ أو ﺑﻀﻊ ﻋﻤﻠﯿﺎت ﻣﻦ دون أن ﺗﻌﯿﺪ أي ﻧﺘﯿﺠﺔ ﺣﺴﺎﺑﯿﺔ أو‬
‫ﻏﯿﺮھﺎ‪ .‬ﻓﻤﺜﻼ ﺗﻘﻮم ﺑﻜﺘﺎﺑﺔ داﻟﺔ اﻟﻐﺮض ﻣﻨﮭﺎ إظﮭﺎر ﻧﺺ‪ .‬ﯾﻤﻜﻦ ھﺬا ﺑﺘﺤﺪﯾﺪ ﻧﻮع اﻟﺪاﻟﺔ ﻣﻦ‬
‫اﻟﻨﻤﻂ ‪void‬‬
‫وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‪:‬‬

‫‪// void function example‬‬


‫>‪#include <iostream‬‬
‫)( ‪void afunction‬‬
‫{‬
‫;"‪cout <<"Im a function‬‬
‫}‬
‫)(‪int main‬‬
‫{‬
‫;)( ‪afunction‬‬
‫;‪return 0‬‬
‫}‬

‫ﺍﻟﺘﻤﺮﻳﺮ ﻟﻠﺪﺍﻟﺔ‬
‫ﻣﺎھﻲ اﻟﻄﺮق اﻟﺘﻲ ﯾﻤﻜﻦ أن ﻧﺨﺎطﺐ ﺑﮭﺎ اﻟﺪاﻟﺔ ﻟﻜﻲ ﺗﺪﺧﻞ ﻗﯿﻢ ﻣﺎ ﻓﻲ وﺳﻄﺎﺋﮭﺎ؟‪ .‬ﻟﻨﺮﺟﻊ اﻟﻰ‬
‫ﻣﺜﺎل اﻟﺪاﻟﺔ اﻟﺴﺎﺑﻘﺔ‪:‬‬
‫)‪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‬‬
‫ﺳﻨﺬﻛﺮ اﻵن ﺗﺮﺗﯿﺐ اﻟﻤﺘﻐﯿﺮات ﻣﻊ ﺗﺮﺗﯿﺐ اﻟﻘﯿﻢ ﺣﯿﻦ اﻻﺳﺘﺪﻋﺎء‪:‬‬

‫)‪addition (a,b‬‬ ‫اﻟﺘﺮﺗﯿﺐ ﻛﻤﺎ ھﻮ‪:‬‬


‫)‪addition (4,2‬‬ ‫اﻟﺘﺮﺗﯿﺐ اﻟﻤﺴﺘﺨﺪم‪:‬‬

‫اﻟﻤﺘﺮﺟﻢ ﺳﯿﺤﺎﻓﻆ ﻋﻠﻰ اﻟﺘﺮﺗﯿﺐ وﺳﯿﻀﻊ ‪ 4‬ﻣﺤﻞ ‪ a‬وﯾﻀﻊ ‪ 2‬ﻣﺤﻞ ‪ . b‬ﺑﺼﻮرة أدق‪:‬‬
‫ﺳﺘﻮﺿﻊ اﻟﻘﯿﻤﺔ ‪ 4‬ﻛﻘﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ ‪ a‬طﺎﻟﻤﺎ ﺗﻮاﺟﺪ ھﺬا اﻻﺳﺘﺪﻋﺎء‪ .‬وھﻨﺎ ﻧﻌﻮد ﻟﻨﺬﻛﺮ ﺑﺸﻲء‪:‬‬
‫اﻟﻤﺘﻐﯿﺮ ﻟﯿﺲ ﻓﻘﻂ ﻗﯿﻤﺔ؛ ﺑﻞ ھﻮ اﺳﻢ ﻟﮫ ﺣﺠﻢ وﻋﻨﻮان ﺑﺎﻹﺿﺎﻓﺔ اﻟﻰ ﻗﯿﻤﺘﮫ‪ .‬أي أنّ اﻟﻤﺘﻐﯿﺮ‬
‫ﯾﻤﻜﻦ أن ﯾﺄﺧﺬ ﻋﺪة ﻧﺴﺦ ﻣﻦ اﻟﻘﯿﻢ‪ .‬ﻓﻲ ھﺬه اﻟﻄﺮﯾﻘﺔ اﻟﻤﺎرة؛ ظﻞ اﻟﻤﺘﻐﯿﺮ ھﻮ ‪ a‬ﺑﻌﻨﻮاﻧﮫ وﻟﻜﻦ‬
‫اﻟﺪاﻟﺔ أﻋﻄﺖ ﻧﺴﺨﺔ ﻣﻨﮭﺎ وﺟﻌﻠﺖ ﻗﯿﻤﺔ ‪ a‬ﻟﺘﻠﻚ اﻟﻨﺴﺨﺔ ھﻲ ‪ . 4‬ﻓﻲ اﺳﺘﺪﻋﺎء آﺧﺮ ﺑﻘﯿﻢ ﻣﺨﺘﻠﻔﺔ‬
‫ﺳﺘﻌﻄﻲ اﻟﺪاﻟﺔ ﻧﺴﺦ أﺧﺮى ﻟﺘﻠﻚ اﻟﻘﯿﻢ‪.‬‬
‫ﯾﻤﻜﻦ أن ﯾﺄﺗﻲ ﻣﺤﻞ )‪ (4,2‬ﻣﺘﻐﯿﺮات ﻛـ )‪ (x,y‬أو ﺣﺘﻰ )‪ (a,b‬اذا ﻣﺎ أﻋﻠﻦ ﻋﻨﮭﻤﺎ داﺧﻞ‬
‫ﻛﺘﻠﺔ اﻟﺪاﻟﺔ واﻟﻤﺘﺮﺟﻢ ﻋﻨﺪھﺎ ﺳﯿﻤﯿﺰ ﺑﯿﻨﮭﻤﺎ وﺑﯿﻦ وﺳﯿﻄﻲ اﻟﺪاﻟﺔ‪.‬‬
‫اذن ﻟﻮﺳﯿﻄﻲ اﻟﺪاﻟﺔ ‪ addition‬ﻗﯿﻤﺔ أوﻟﻰ؛ أي ﻟﻠﻤﺘﻐﯿﺮﯾﻦ )‪ (a,b‬ﻗﯿﻤﺔ ﺳﺘﺒﻘﻰ ﻛﻤﺎ ھﻲ‬
‫ﻣﺤﺎﻓﻈﺎ ﻋﻠﯿﮭﺎ‪ .‬واي اﺳﺘﺪﻋﺎء ﻟﮭﻤﺎ ﻛﻤﺎ ﺳﺒﻖ ﺳﺘﻜﻮن ﻧﺴﺦ ﻗﯿﻢ ﻣﺆﻗﺘﺔ ﻟﺬﻟﻚ اﻻﺳﺘﺪﻋﺎء‪.‬‬

‫‪129‬‬
‫ﻛﻞ ﻣﺎﻣﺮ ﯾﺴﻤﻰ اﻟﺘﻤﺮﯾﺮ ﺑﺎﻟﻘﯿﻤﺔ وھﻲ طﺮﯾﻘﺔ ﺗﺴﺘﺪﻋﻲ ﻧﺴﺨﺎ ﻣﻦ اﻟﺪاﻟﺔ وﻟﯿﺲ اﻟﺪاﻟﺔ ﻧﻔﺴﮭﺎ‪.‬‬
‫ﻓﻤﺎذا إن أردﻧﺎ ﺗﻐﯿﯿﺮ وﺳﯿﻄﻲ اﻟﺪاﻟﺔ ﻓﻌﻼ ﻛﺘﻐﯿﯿﺮ ﺟﺬري ﻣﻦ أﺻﻞ ﻣﺤﻠﮭﻤﺎ؟‪ .‬ھﺬا ﻣﺎ ﯾﺘﻢ‬
‫ﺑﻮاﺳﻄﺔ طﺮﯾﻘﺔ أﺧﺮى ﺗﺴﻤﻰ‪ :‬اﻟﺘﻤﺮﯾﺮ ﺑﺎﻟﻌﻨﻮان‪.‬‬

‫ﺍﻟﺘﻤﺮﻳﺮ ﺑﺎﻟﻌﻨﻮﺍﻥ‬
‫أﻧﺖ ﻻزﻟﺖ ﺗﺬﻛﺮ ﻋﺎﻣﻞ اﻟﻌﻨﻮان & اﻟﺬي اذا ﻣﺎﺟﺎء ﻗﺒﻞ ﻣﺘﻐﯿﺮ ﻓﺈﻧﮫ ﯾﻌﻄﻲ ﻋﻨﻮان ذﻟﻚ‬
‫اﻟﻤﺘﻐﯿﺮ‪ .‬ﻓﺎذا وﺻﻠﻨﺎ اﻟﻰ ﻋﻨﻮان ﻣﺘﻐﯿﺮ اﺳﺘﻄﻌﻨﺎ اﻟﺘﺤﻜﻢ ﺑﮫ وﺑﻘﯿﻤﺘﮫ ﻣﻦ أﺻﻞ ﻣﻜﺎﻧﮫ‪ .‬ﺣﯿﻨﮭﺎ أي‬
‫اﺳﺘﺪﻋﺎء ﺑﺎﻟﻌﻨﻮان ﺳﯿﻜﻮن ﺑﺘﺤﻮﯾﻞ ﺟﺬري ﻟﻘﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ﻓﻲ اﻟﺪاﻟﺔ وﻟﯿﺲ ﻛﻨﺴﺨﺔ ﻟﻘﯿﻤﺘﮫ‪.‬‬
‫اذا أردﻧﺎ اﺳﺘﺪﻋﺎء داﻟﺔ ﺑﺎﻟﻌﻨﻮان ﻓﯿﺠﺐ أن ﯾﻜﻮن ﺗﺼﺮﯾﺤﮭﺎ ﺣﺎﻣﻼ ﻟﻌﺎﻣﻞ اﻟﻌﻨﻮان ﻗﺒﻞ أي‬
‫وﺳﯿﻂ ﻟﮭﺎ ﻧﺮﯾﺪ اﺳﺘﺪﻋﺎءه ﺑﺘﻠﻚ اﻟﻄﺮﯾﻘﺔ‪ .‬وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻋﻦ اﻟﺘﺼﺮﯾﺢ ﺑﺎﻟﻌﻨﻮان‪:‬‬

‫) ‪int functionByReference( int &numberRef‬‬

‫ﻟﻤﺰﯾﺪ ﻣﻦ اﻟﺘﻮﺿﯿﺢ إﻟﯿﻚ ھﺬا اﻟﻤﺜﺎل‪:‬‬

‫‪// passing parameters by reference‬‬


‫>‪#include <iostream‬‬
‫)‪void reffunction (int&a,int&b‬‬
‫{‬
‫;‪a = a + 2‬‬
‫;‪b = b + 2‬‬
‫}‬
‫)(‪int main‬‬
‫{‬
‫;‪int x=1,y=2‬‬
‫;)‪reffunction (x,y‬‬
‫; ‪cout<< "x=" << x << "y=" << y‬‬
‫;‪return 0‬‬
‫}‬

‫‪130‬‬
‫ﺗﻢ اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ ﺑﻌﻨﻮاﻧﮭﺎ ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ‪:‬‬
‫)‪void reffunction (int&a,int&b‬‬
‫وﺗﻢ اﺳﺘﺪﻋﺎءھﺎ ﻣﻦ ﻗﺒﻞ اﻟﺪاﻟﺔ ‪ main‬ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ‪:‬‬
‫;)‪reffunction (x,y‬‬
‫وھﻨﺎ ﺳﺘﺤﻞ ﻗﯿﻤﺔ ‪ x‬ﻣﺤﻞ ﻗﯿﻤﺔ ‪ a‬ﺗﻤﺎﻣﺎ وﺳﺘﺤﻤﻞ ‪ a‬اﻟﻘﯿﻤﺔ )‪ (1‬وھﻜﺬا ﺑﺎﻟﻨﺴﺒﺔ ﻟـ ‪. b‬‬

‫ﺍﻟﺪﺍﻻﺕ ﺍﻟﺴﻄﺮﻳﺔ‬
‫وھﻲ داﻻت ﺻﻐﯿﺮة ﺗﻜﺘﺐ ﻋﻠﻰ ﺳﻄﺮ واﺣﺪ وﯾﺼﺮح ﻋﻨﮭﺎ ﺑﮭﺬه اﻟﻌﻼﻣﺔ‪ inline :‬اﻟﺘﻲ‬
‫ﺗﺄﺗﻲ ﻓﻲ ﺑﺪاﺑﺔ ﺟﻤﻠﺔ اﻟﺘﺼﺮﯾﺢ ﻛﻤﺜﻞ ﺟﻤﻠﺔ اﻟﺘﺼﺮﯾﺢ ھﺬه‪:‬‬

‫) ‪inline double cube( const double side‬‬

‫وﯾﻜﻮن ﻛﺎﻣﻞ اﻟﺪاﻟﺔ ) ﺗﺼﺮﯾﺤﮭﺎ وﺟﺴﻤﮭﺎ ( ﻛﻤﺜﻞ اﻟﺪاﻟﺔ اﻟﺴﻄﺮﯾﺔ ھﺬه‪:‬‬

‫) ‪inline double cube( const double side‬‬


‫{‬
‫‪return side * side * side; // calculate cube‬‬

‫‪} // end function cube‬‬

‫وﻛﻤﺎ ﺗﺒﯿﻦ ﻣﻦ ﻗﺒﻞ‪ :‬اذا ﻛﺘﺒﺖ اﻟﺪاﻟﺔ ﻗﺒﻞ )(‪ main‬ﺗﻨﺘﻔﻲ اﻟﺤﺎﺟﺔ ﻟﺬﻛﺮ ﻧﻤﻮذج ﻟﮭﺎ‪ .‬وﻛﻤﺎ ﻓﻲ‬
‫ﻣﺜﺎل اﻟﺒﺮﻧﺎﻣﺞ اﻟﺘﺎﻟﻲ‪:‬‬

‫‪// Fig. 3.19: fig03_19.cpp‬‬


‫‪// Using an inline function to calculate.‬‬
‫‪// the volume of a cube.‬‬
‫>‪#include <iostream‬‬

‫;‪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

} // end function cube

int main()
{
cout << "Enter the side length of your cube: ";

double sideValue;

cin >> sideValue;

// calculate cube of sideValue and display result


cout << "Volume of cube with side "
<< sideValue << " is " << cube( sideValue ) << endl;

return 0; // indicates successful termination

} // end main

return side * side * :‫اذن ﻛﻤﺎ ﺗﺮى ﻓﺠﺴﻢ اﻟﺪاﻟﺔ ﻛﻠﮫ ﻋﺒﺎرة ﻋﻦ ﺟﻤﻠﺔ ﻓﻲ ﺳﻄﺮ واﺣﺪ‬
side;
‫اﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ ﻟﻠﻮﺳﻄﺎء‬
‫ وﯾﻜﻮن ذﻟﻚ ﺑﺘﺤﺪﯾﺪ وﺳﯿﻂ أو أﻛﺜﺮ ﻋﻠﻰ‬.‫ﯾﻤﻜﻦ ﺗﻤﺮﯾﺮ ﻗﯿﻢ اﻓﺘﺮاﺿﯿﺔ أوﻟﻰ ﻋﻨﺪ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ‬
‫ ﻓﺎذا ﻣﺎﺳﺘﺪﻋﯿﺖ اﻟﺪاﻟﺔ وﻟﻢ ﯾﺘﻢ ذﻛﺮ ھﺬا اﻟﻮﺳﯿﻂ ﺣﯿﻦ اﻻﺳﺘﺪﻋﺎء؛ ﻓﺈﻧﮫ ﺳﯿﺄﺧﺬ‬.‫أﻧﮭﺎ اﻓﺘﺮاﺿﯿﺔ‬
‫ ﻓﺄﻣﺎ اذا ذﻛﺮ ﺑﺄﺣﺪ اﻟﻄﺮﯾﻘﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ ﻓﻌﻨﺪھﺎ ﺗﻤﺮر ﻟﮫ اﻟﻘﯿﻤﺔ‬.‫ﺗﻠﻚ اﻟﻘﯿﻤﺔ اﻟﻤﻔﺘﺮﺿﺔ ﻟﮫ ﺑﺪاﯾﺔ‬
.‫ﺣﺴﺐ ﻣﺎ ﯾﺬﻛﺮ ﻓﻲ طﺮﻗﺔ اﻟﺘﻤﺮﯾﺮ‬

132
‫ﺗﻮﺿﻊ اﻟﻮﺳﻄﺎء اﻻﻓﺘﺮاﺿﯿﺔ ﻣﺰاﺣﺔ اﻟﻰ اﻗﺼﻰ ﯾﻤﯿﻦ ﻗﺎﺋﻤﺔ اﻟﻮﺳﻄﺎءوذﻟﻚ ﻋﻨﺪ ﺗﻌﺮﯾﻒ اﻟﺘﺎﺑﻊ‬
‫وﻣﻊ ا ول ذﻛﺮ ﻻﺳﻢ اﻟﺪاﻟﺔ ﻛﺬﻛﺮھﻢ ﻓﻲ ﻧﻤﻮذج اﻟﺪاﻟﺔ ﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺣﯿﺚ ﺗﻌﻄﻰ اﻟﻮﺳﻄﺎء‬
‫ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ ھﻲ ) (‪:‬‬
‫;) ‪int boxVolume( int length = 1, int width = 1, int height = 1‬‬
‫ﺣﯿﻦ ﯾﺤﺬف وﺳﯿﻂ اﻓﺘﺮاﺿﻲ ﺣﯿﻦ اﻻﺳﺘﺪﻋﺎء‪ ،‬ﻓﺈن ﻛﻞ ﻣﺎﻋﻠﻰ ﯾﻤﯿﻨﮫ ﻣﻦ اﻟﻮﺳﻄﺎء ﺳﺘﺤﺬف‬
‫اﯾﻀﺎ‪.‬‬
‫ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ أﻋﻄﻲ ﻟﻠﻮﺳﻄﺎء اﻟﺜﻼﺛﺔ ﻗﯿﻢ اﻓﺘﺮاﺿﯿﺔ ﻓﻲ ﻧﻤﻮذج اﻟﺘﺎﺑﻊ ﻣﻊ ذﻛﺮ اﺳﻤﺎء‬
‫اﻟﻤﺘﻐﯿﺮات ﻣﻊ اﻧﮫ ﻟﯿﺲ ﻣﻦ اﻟﻀﺮوري ذﻛﺮ اﻟﻤﺘﻐﯿﺮات ﻓﻲ اﻟﻨﻤﻮذج اﻻ ﻟﻠﺘﻮﺿﯿﺢ ﺣﯿﻦ‬
‫ﻣﺮاﺟﻌﺔ اﻟﻨﺺ اﻟﺒﺮﻣﺠﻲ‪.‬‬
‫ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻻول ﻟﮭﺬا اﻟﻤﺜﺎل ﻟﻢ ﻧﺴﺘﺨﺪم أي وﺳﯿﻂ ﻓﺘﻢ اﻟﺘﻌﻮﯾﺾ ﻋﻨﮭﺎ ﺑﺎﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ‪.‬‬
‫ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺜﺎﻧﻲ‪ ،‬ﻣﺮرت ﻗﯿﻤﺔ ﻟﻠﻮﺳﯿﻂ ‪ length‬ﺑﯿﻨﻤﺎ اﺳﺘﺨﺪﻣﺖ اﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ‬
‫ﻟﻠﻮﺳﯿﻄﯿﻦ ‪ width‬و ‪ . height‬ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺜﺎﻟﺚ‪ ،‬ﺗﻢ ﺗﻤﺮﯾﺮ ﻗﯿﻤﺘﯿﻦ ﻟﻠﻮﺳﯿﻄﯿﻦ ‪length‬‬
‫و ‪ width‬واﺳﺘﺨﺪﻣﺖ اﻟﻘﯿﻤﺔ اﻻﻓﺘﺮاﺿﯿﺔ ﻟﻠﻮﺳﯿﻂ ‪ . height‬ﺑﯿﻨﻤﺎ ﺗﻢ ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺮاﺑﻊ‬
‫ﺗﻤﺮﯾﺮ ﻗﯿﻢ ﻟﻠﻮﺳﻄﺎء اﻟﺜﻼﺛﺔ ﻓﻠﻢ ﺗﺴﺘﺨﺪم اﻟﻘﯿﻢ اﻻﻓﺘﺮاﺿﯿﺔ‪.‬‬

‫‪// Fig. 3.23: fig03_23.cpp‬‬


‫‪// Using default arguments.‬‬
‫>‪#include <iostream‬‬

‫;‪using std::cout‬‬
‫;‪using std::endl‬‬

‫‪// function prototype that specifies default arguments‬‬


‫;) ‪int boxVolume( int length = 1, int width = 1, int height = 1‬‬

‫)(‪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 );

// specify length and width; default height


cout << "\n\nThe volume of a box with length 10,\n"
<< "width 5 and height 1 is: " << boxVolume( 10, 5 );

// specify all arguments


cout << "\n\nThe volume of a box with length 10,\n"
<< "width 5 and height 2 is: " << boxVolume( 10, 5, 2 )
<< endl;

return 0; // indicates successful termination

} // end main

// function boxVolume calculates the volume of a box


int boxVolume( int length, int width, int height )
{
return length * width * height;

} // end function boxVolume

:‫وھﺬا ﻣﺜﺎل ﺑﺴﯿﻂ آﺧﺮ‬

// default values in functions


#include <iostream>
int divide (int a,int b = 2)
{
int r;
r = a/b
return (r);
}

int main()
{

cout << divide (12);


cout << endl;
cout << divide (20,4);

return 0;
}

134
‫ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻻول )‪ divide (12‬ﻣﺮر وﺳﯿﻂ واﺣﺪ ﻓﺄﻋﻄﻲ اﻟﻮﺳﯿﻂ اﻟﺜﺎﻧﻲ اﻟﻘﯿﻤﺔ‬
‫أھﻤﻠﺖ اﻟﻘﯿﻤﺘﺎن‬ ‫اﻻﻓﺘﺮاﺿﯿﺔ )‪ .(2‬ﺑﯿﻨﻤﺎ ﻓﻲ اﻻﺳﺘﺪﻋﺎء اﻟﺜﺎﻧﻲ )‪divide (20,4‬‬
‫اﻻﻓﺘﺮاﺿﯿﺘﺎن ﻟﻮﺟﻮد ﻗﯿﻢ ﻣﻤﺮرة‪.‬‬

‫ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺋﺪ ﻟﻠﺪﻭﺍﻝ‬


‫ﻋﺮﻓﻨﺎ أنّ ﻛﻞ داﻟﺔ ھﻲ ﻣﺠﻤﻮﻋﺔ ﺗﻌﻠﯿﻤﺎت ﻻﻧﺠﺎز ﻣﮭﻤﺔ ﻣﺎ وﻓﻖ ﻋﺪد وﻧﻮع وﺳﻄﺎء ﻣﻌﯿﻦ‪ .‬ﻣﺎ‬
‫ذا إن أردﻧﺎ ﻧﻔﺲ اﻟﻤﮭﻤﺔ وﻟﻜﻦ ﻋﻠﻰ ﻧﻮع وﺳﻄﺎء ﻣﺨﺘﻠﻒ أو ﻧﻔﺲ اﻟﻤﮭﻤﺔ وﻟﻜﻦ ﻋﻠﻰ ﻋﺪد ﻣﻦ‬
‫اﻟﻮﺳﻄﺎء ﻣﺨﺘﻠﻒ؟‪ .‬ﺛﻢ ﻣﺎذا إن أردﻧﺎ ﻣﻦ داﻟﺔ ﻣﮭﻤﺘﮭﺎ ﻛﺬا أن ﻧﺴﺘﺪﻋﻲ داﻟﺔ ﺑﻨﻔﺲ اﻻﺳﻢ وﻟﻜﻦ‬
‫ﺑﻤﮭﻤﺔ أﺧﺮى؟‪.‬‬
‫ﻓﻲ ﻟﻐﺎت ﻗﺪﯾﻤﺔ‪ ،‬ﻛﺎن ﯾﺘﻢ ـ ﻣﺜﻼ ـ ﺗﻌﺮﯾﻒ داﻟﺔ ﺑﺎﺳﻢ ﻣﺎ ﻟﺤﺴﺎب ﻣﺮﺑﻊ ﻋﺪد ﺻﺤﯿﺢ‪ .‬أي ﻣﻦ‬
‫اﻟﻨﻤﻂ ‪ . int‬ﻓﺈذا أرﯾﺪ ﺣﺴﺎب ﻣﺮﺑﻊ ﻋﺪد ﻣﻦ ﻧﻤﻂ آﺧﺮ وﺟﺐ ﻛﺘﺎﺑﺔ داﻟﺔ أﺧﺮى ﺑﺎﺳﻢ آﺧﺮ‬
‫ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﻤﻂ اﻟﻤﺮاد‪.‬‬

‫أﻣﺎ ﻓﻲ ‪ C++‬ﻓﻘﺪ ﺗﻢ ﺗﺠﺎوز ذﻟﻚ ﺑﻤﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻟﻠﺪوال‪ .‬وھﻮ ﻛﺘﺎﺑﺔ دوال ﻟﮭﺎ ﻧﻔﺲ‬
‫اﻻﺳﻢ وﻟﻜﻦ ﻛﻞ داﻟﺔ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻧﻤﻄﮭﺎ ﺑﺘﻮﺟﯿﮫ ﻣﻦ اﻟﻤﺘﺮﺟﻢ‪ .‬أي أنّ اﻟﻤﺘﺮﺟﻢ ﯾﺘﻔﺤﺺ اﻟﻘﯿﻢ‬
‫اﻟﻤﺪﺧﻠﺔ وأﻧﻮاﻋﮭﺎ وﯾﺤﺪد أي ﻣﻦ اﻟﺪوال ﯾﺠﺐ أن ﯾﺘﺠﮫ إﻟﯿﮭﺎ ﻓﯿﺴﺘﺪﻋﯿﮭﺎ ﻣﻊ أﻧﮭﺎ ﺗﺤﻤﻞ ﻧﻔﺲ‬
‫اﻻﺳﻢ اﻟﺬي ﻗﺪ ﺗﺤﻤﻠﮫ داﻟﺔ أﺧﺮى‪.‬‬
‫ھﺬا ﯾﻔﯿﺪ ـ ﻣﺜﻼ ـ ﻓﻲ ﻋﻤﻞ داﻟﺔ ﻟﺤﺴﺎب اﻟﻤﻜﻌﺐ اﻟﻌﺪدي ﻟﺮﻗﻢ أﯾﺎ ﻛﺎن ﻧﻮﻋﮫ‪ .‬ﻓﯿﺘﻢ ﻋﻤﻞ دوال‬
‫ﻟﮭﺎ اﻻﺳﻢ ﻣﻜﻌﺐ ‪ cup‬ﻓﯿﻜﻮن اﺳﺘﺪﻋﺎﺋﮭﺎ ﺑﮭﺬا اﻻﺳﻢ ﻣﮭﻤﺎ ﻛﺎن ﻧﻮع اﻟﻌﺪد ﺻﺤﯿﺢ أو ﻏﯿﺮ‬
‫ﺻﺤﯿﺢ‪ .‬واﻻ ﻓﻜﻤﺎ ذﻛﺮﻧﺎ‪ .‬ﻛﺎن ﯾﻨﺒﻐﻲ ﺳﺎﺑﻘﺎ ﻋﻤﻞ دوال ﺑﺄﺳﻤﺎء ﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻧﻮع‪.‬‬

‫‪135‬‬
‫أﯾﻀﺎ ﯾﺼﻠﺢ اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻓﻲ ﻛﺘﺎﺑﺔ دوال ﻟﮭﺎ ﻧﻔﺲ اﻻﺳﻢ اذا اﺧﺘﻠﻒ ﻋﺪد اﻟﻮﺳﻄﺎء ﺑﯿﻦ داﻟﺔ‬
‫وأﺧﺮى‪ ،‬ﻓﺎﻟﻤﺘﺮﺟﻢ ﯾﺘﻔﺤﺺ ﻋﺪد اﻟﻮﺳﻄﺎء وﯾﻘﻮم ﺑﺎﺧﺘﯿﺎر اﻟﺪاﻟﺔ اﻟﻤﻨﺎﺳﺒﺔ‪.‬‬

‫ﯾﻤﻜﻦ أﯾﻀﺎ ﻓﻲ اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻛﺘﺎﺑﺔ دوال ﻟﮭﺎ ﻧﻔﺲ اﻻﺳﻢ وﻟﻜﻦ ﺑﺸﺮط اﺧﺘﻼف اﻟﻮﺳﻄﺎء‬
‫ﺑﺎﻟﻨﻮع أو اﻟﻌﺪد؛ ﯾﻤﻜﻦ ﻛﺘﺎﺑﺔ دوال ﺗﺆدي ﻋﻤﻠﯿﺎت ﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻧﻤﻂ أو ﻟﻜﻞ ﻋﺪد ﻣﺨﺘﻠﻒ ﻣﻦ‬
‫اﻟﻮﺳﻄﺎء‪ .‬أي ﻟﯿﺲ ﻣﻦ اﻟﻀﺮوري أن ﺗﻜﻮن ﺗﻌﻠﯿﻤﺎت ﺟﺴﻢ اﻟﺪوال ﺗﺆدي ﻧﻔﺲ اﻟﻐﺮض وإﻧﻤﺎ‬
‫ﯾﺠﻮز أن ﺗﺆدي أﻏﺮاض ﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻧﻮع ﻣﻦ اﻟﻮﺳﻄﺎء أو ﻟﻜﻞ ﻋﺪد وﺳﻄﺎء‪ .‬ھﺬا ھﻮ‬
‫اﻟﺘﺤﻤﯿﻞ اﻟﺰاﺋﺪ ﻟﻠﺪوال‪.‬‬
‫ﻓﯿﻤﺎ ﯾﻠﻲ ﻣﺜﺎل ﻋﻦ ذﻟﻚ‪:‬‬

‫‪// overloaded function‬‬


‫>‪#include <iostream‬‬
‫{)‪int divide (int a,int b‬‬
‫)‪return (a/b‬‬
‫}‬

‫)‪float divide (float a,float b‬‬


‫{‬
‫)‪return (a/b‬‬
‫}‬
‫)(‪int main‬‬
‫{‬
‫;‪int x=5,y=2‬‬
‫;‪float n = 5.1, m = 2.3‬‬
‫;)‪cout<< divide (x,y‬‬
‫;"‪cout<< "/n‬‬
‫;)‪cout<< divide (n,m‬‬
‫;"‪cout<< "/n‬‬
‫;‪return 0‬‬
‫}‬

‫ﺑﮭﺬا ﻧﻜﻮن اﻧﺘﮭﯿﻨﺎ ﻣﻦ ﻣﻮﺿﻮع اﻟﺪوال واﻟﺬي ﺑﻮاﺳﻄﺘﮫ ﻧﺴﺘﻄﯿﻊ أن ﻧﻘﻮل أنّ اﻟﺪاﻟﺔ ھﻲ ﺑﻤﺜﺎﺑﺔ‬
‫ورﺷﺔ ﻋﻤﻞ ﻣﺘﺨﺼﺼﺔ ﻓﻲ ﻣﮭﻨﺔ أو ﺷﻲء ﻣﺎ‪ .‬وﻟﻨﻨﺘﻘﻞ اﻟﻰ ﻣﻮاﺿﯿﻊ أﺧﺮى ﻣﮭﻤﺔ‪.‬‬

‫‪136‬‬
‫‪....................‬‬

‫ﻋﻮﺩﺓ ﺍﱃ ﺍﳌﺆﺷﺮﺍﺕ ﻭﺍﻟﻌﻨﺎﻭﻳﻦ‬


‫ﻷھﻤﯿﺔ ھﺬا اﻟﻤﻮﺿﻮع دﻋﻨﺎ ﻧﺬﻛﺮ ﺑﮫ ﺛﺎﻧﯿﺔ‪ :‬ﻗﻠﻨﺎ ﺑﺄنّ اﻟﻌﺎﻣﻞ & ھﻮ ﻋﺎﻣﻞ اﻟﻌﻨﻮان اﻟﺬي اذا‬
‫وﺿﻊ ﻗﺒﻞ ﻣﺘﻐﯿﺮ ﻓﺎﻧﮫ ﯾﻌﻨﻲ ﻋﻨﻮان ھﺬا اﻟﻤﺘﻐﯿﺮ ﻓﻲ اﻟﺬاﻛﺮة‪ .‬ﻓﻤﺜﻼ ﻣﺘﻐﯿﺮ اﺳﻤﮫ ‪ a‬وﻗﯿﻤﺘﮫ‬
‫ﺗﺴﺎوي )‪ .(100‬ﻟﻠﻮﺻﻮل اﻟﻰ ﻋﻨﻮان اﻟﻤﺘﻐﯿﺮ ‪ a‬ﻓﻲ اﻟﺬاﻛﺮة ﻓﺈﻧﻨﺎ ﻧﻜﺘﺐ ‪ &a‬وﻟﻨﻘﺮأه‪ :‬ﻋﻨﻮان‬
‫‪ . a‬ھﺬا اﻟﻌﻨﻮان‪ ،‬ھﻮ ﻓﻲ ﻧﮭﺎﯾﺘﮫ رﻗﻢ ـ أي رﻗﻢ ﻋﻨﻮان ـ‪ .‬ﻓﺎذا أردﻧﺎ ﺗﺨﺰﯾﻨﮫ ﻓﻲ ﻣﺘﻐﯿﺮ‪ ،‬ﻓﺈﻧﻨﺎ‬
‫ﻧﺤﺘﺎج اﻟﻰ ﻣﺘﻐﯿﺮات ﺧﺎﺻﺔ ﺗﺴﻤﻰ‪ ،‬اﻟﻤﺆﺷﺮات‪ .‬وﻟﻜﺘﺎﺑﺔ ﻣﺆﺷﺮ ﻓﺎﻧﻨﺎ ﻧﺴﺘﺨﺪم ﻋﺎﻣﻞ ﺧﺎص‬
‫ھﻮ * واﻟﺬي ﯾﺄﺗﻲ ﺑﻌﺪ أن ﻧﺼﺮح ﻋﻦ ﻧﻮع اﻟﻨﻤﻂ وﻣﻦ ﺛﻢ ﻧﺨﺘﺎر اﺳﻢ ﻟﮭﺬا اﻟﻤﺆﺷﺮ ھﻮ اﻟﺬي‬
‫;‪int * p‬‬ ‫ﯾﺄﺗﻲ ﺑﻌﺪ ﻋﺎﻣﻞ اﻟﻤﺆﺷﺮ‪ .‬ﻓﻤﺜﻼ ﻧﺼﺮح ﻋﻦ ﻣﺆﺷﺮ ﺑﺄن ﻧﻜﺘﺐ‪:‬‬
‫ﻧﺴﺘﻄﯿﻊ اﻻن أن ﻧﺴﻨﺪ اﻟﻌﻨﻮان اﻟﺴﺎﺑﻖ اﻟﻰ ھﺬا اﻟﻤﺆﺷﺮ ﻛﺎﻟﺘﺎﻟﻲ‪p = &a; :‬‬
‫ﺑﻌﺪ أن وﺿﻌﻨﺎ ﻋﻨﻮان ‪ a‬ﻓﻲ ‪ p‬ﯾﻤﻜﻦ اﻻن أن ﻧﻐﯿﺮ ﻗﯿﻤﺔ ‪ a‬ﺑﻮاﺳﻄﺔ ﻋﻨﻮاﻧﮭﺎ ﺑﺄن ﻧﻜﺘﺐ‪:‬‬
‫;‪*p = 200‬‬
‫وﺑﻌﺪ ان أﺻﺒﺢ ‪ p‬ﯾﺤﻤﻞ ﻋﻨﻮان ‪ a‬ﻧﺴﺘﻄﯿﻊ أن ﻧﺠﻌﻞ ‪ p‬ﯾﺆﺷﺮ اﻟﻰ ﻋﻨﻮان آﺧﺮ ﻏﯿﺮ ﻋﻨﻮان ‪a‬‬
‫ﻛﺄن ﯾﺆﺷﺮ اﻟﻰ ﻣﺎﺑﻌﺪ ﻋﻨﻮان ‪ a‬ﻣﺒﺎﺷﺮة ﻓﻨﻜﺘﺐ‪p = p + 1; :‬‬
‫أﺻﺒﺢ ‪ p‬اﻻن ﯾﺤﻤﻞ ﻋﻨﻮان ﻣﻮﺿﻊ ﻣﺎ ﺑﻌﺪ ‪a‬‬
‫ﻛﺘﺒﻨﺎ ‪ p = p +1‬ﻟﻨﻨﺘﻘﻞ اﻟﻰ ﻋﻨﻮان آﺧﺮ ﺗﺎ ٍل؛ وﻟﻜﻦ ﻣﺎﻣﻘﺪار اﻟﺨﻄﻮة اﻟﺤﻘﯿﻘﺔ اﻟﺘﻲ اﻧﺘﻘﻞ ﺑﮭﺎ‬
‫اﻟﻤﺆﺷﺮ ‪ p‬؟‪ .‬ھﻞ ھﻲ )‪ (1‬داﺋﻤﺎ؟‪ .‬اﻟﺠﻮاب ﻋﻠﻰ ذﻟﻚ ﯾﻌﺘﻤﺪ ﻋﻠﻰ ﻧﻮع اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﯾﺆﺷﺮ‬
‫ﻋﻠﯿﮭﺎ اﻟﻤﺆﺷﺮ‪ .‬وﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺣﯿﺚ اﻟﻨﻮع ھﻮ ‪ int‬ﻓﺎﻧﻨﺎ اﻧﺘﻘﻠﻨﺎ ارﺑﻊ ﺧﺎﻧﺎت وﻟﯿﺲ ﺧﺎﻧﺔ‬
‫واﺣﺪة‪ ،‬ذﻟﻚ ﻷن اﻟﻨﻮع اﻟﺼﺤﯿﺢ ‪ int‬ﯾﺤﺘﻞ أرﺑﻌﺔ ﺧﺎﻧﺎت وارﺟﻊ اﻟﻰ ﻣﺜﺎل اﻟﻔﻨﺪق اﻟﺬي‬

‫‪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‬‬
‫ﻣﺜﻼ‪ .‬ﻛﺬﻟﻚ ﻛﻞ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ اﻟﻮاﺣﺪة ﯾﻜﻮن ﻟﮭﺎ اﺳﻤﺎ واﺣﺪا وﻟﻜﻦ ﯾﺘﻤﯿﺰ اﺳﻢ‬
‫ﻋﻦ اﺳﻢ ﺑﻤﺎ ﯾﺴﻤﻰ ﺑﺎﻟﻔﮭﺮس أو اﻟﺪﻟﯿﻞ‪ .‬وﻛﻤﺎ ﺳﻨﻀﺮب ﻟﺬﻟﻚ ﻣﺜﺎﻻ ﻓﻲ اﻟﻔﻘﺮة اﻟﺘﺎﻟﯿﺔ‪.‬‬

‫ﻣﺜﺎﻝ ﺃﲰﺎﺀ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﳌﺼﻔﻮﻓﺔ‬


‫اﻓﺮض أﻧﻚ ﺗﺮﯾﺪ أن ﺗﻜﺘﺐ ﺑﺮﻧﺎﻣﺞ ﻟﻌﺒﺔ ﻟﻠﺘﺴﺎﺑﻖ ﺑﺄن ﯾﺪﺧﻞ ﻓﻲ اﻟﻠﻌﺒﺔ أﻛﺜﺮ ﻣﻦ ﻻﻋﺐ‪ .‬ﻋﻨﺪھﺎ‬
‫ﯾﺠﺐ ﻋﻠﯿﻚ ﻋﻤﻞ ﻗﺎﺋﻤﺔ ﺗﻀﻢ اﻟﻼﻋﺐ اﻻول‪ .‬اﻟﻼﻋﺐ اﻟﺜﺎﻧﻲ‪ .‬اﻟﻼﻋﺐ اﻟﺜﺎﻟﺚ‪ .‬وھﻜﺬا‪ .‬ﻓﺎﻟﻜﻞ‬
‫ﻣﺸﺘﺮك ﺑﺎﺳﻢ واﺣﺪ ھﻮ‪ :‬ﻻﻋﺐ‪ .‬وﻟﻜﻦ ﻣﺎ ﯾﻤﯿﺰ اﺳﻢ ﻋﻦ آﺧﺮ ھﻮ اﻻﺳﻢ اﻟﺜﺎﻧﻲ اﻟﺬي ﯾﻌﻄﻲ‬
‫اﻟﺘﺴﻠﺴﻞ؛ اﻻول‪ ،‬اﻟﺜﺎﻧﻲ‪ ،‬اﻟﺜﺎﻟﺚ‪ .‬ھﺬا اﻻﺳﻢ اﻟﺜﺎﻧﻲ ھﻮ اﺳﻢ او رﻗﻢ اﻟﻔﮭﺮﺳﺔ وھﻮ اﻟﺪﻟﯿﻞ اﻟﺬي‬
‫ﯾﺪﻟﻨﺎ ﻋﻠﻰ اﻟﻼﻋﺐ اﻟﺬي ﻧﺮﯾﺪ‪ .‬وﻟﻜﻲ ﻧﻘﺘﺮب أﻛﺜﺮ اﻟﻰ اﻟﺘﻤﺜﯿﻞ اﻟﺤﻘﯿﻘﻲ ﻓﻲ اﻟﺒﺮﻣﺠﺔ؛ ﻓﺎﻧﻨﺎ ﺑﺪل‬
‫ان ﻧﻘﻮل اﻟﻼﻋﺐ اﻻول واﻟﻼﻋﺐ اﻟﺜﺎﻧﻲ‪ ،‬ﻧﻘﻮل‪ :‬ﻻﻋﺐ ‪ ،1‬ﻻﻋﺐ‪ ،2‬ﻻﻋﺐ‪ .3‬أي ﻻﻋﺐ رﻗﻢ‬
‫‪ ،1‬وﻻﻋﺐ رﻗﻢ ‪ 2‬وھﻜﺬا‪ .‬إﻻ أنّ ھﻨﺎك ﻣﻼﺣﻈﺔ ﻣﮭﻤﺔ ﻓﻲ ﻟﻐﺎت ‪ ، c‬وھﻲ أﻧّﮭﺎ ﻻﺗﺒﺪأ ﻓﻲ‬
‫ﻣﺜﺎﻟﻨﺎ ﻣﻦ ﻻﻋﺐ‪ 1‬ﻛﻼﻋﺐ أول‪ ،‬ﺑﻞ ﺗﺒﺪأ ﻣﻦ ﻻﻋﺐ‪ 0‬ﻓﺘﻘﻮل‪ :‬اﻟﻼﻋﺐ)ﺻﻔﺮ( ھﻮ اﻻول‬
‫واﻟﻼﻋﺐ)واﺣﺪ( ھﻮ اﻟﺜﺎﻧﻲ واﻟﻼﻋﺐ)‪ (2‬ھﻮ اﻟﺜﺎﻟﺚ وھﻜﺬا‪.‬‬

‫أﺳﻤﺎء اﻟﻤﺘﻐﯿﺮات ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ‬


‫ﻓﻲ اﻟﻔﻘﺮة اﻟﺴﺎﺑﻘﺔ ﺿﺮﺑﻨﺎ ﻣﺜﺎﻻ ﺗﻘﺮﯾﺒﯿﺎ‪ ،‬أﻣﺎ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﻓﺘﺴﺘﺨﺪم ﻓﻲ اﻟﻔﮭﺮﺳﺔ أرﻗﺎم ﺗﺴﻤﻰ‬
‫أرﻗﺎم ﺳﻔﻠﯿﺔ ﻟﺘﻤﯿﯿﺰ ﻣﺘﻐﯿﺮ ﻋﻦ آﺧﺮ‪ .‬واﻷرﻗﺎم اﻟﺴﻔﻠﯿﺔ ھﻲ أرﻗﺎم ﺻﻐﯿﺮة ﺣﺠﻢ اﻟﺨﻂ‪ ،‬ﺗﻜﺘﺐ‬
‫أﺳﻔﻞ اﻟﺸﻲء‪.‬‬
‫اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺴﻤﻰ؛ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ‪.‬‬

‫‪140‬‬
‫ﺍﻷﺭﻗﺎﻡ ﺍﻟﺴﻔﻠﻴﺔ‬
‫اﻧﻈﺮ اﻟﻰ اﻟﺮﻣﻮز اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫‪a0 a1 a2 a3 a4 a5‬‬

‫ﻓﻜﻠﮭﺎ ﺗﺤﻤﻞ اﻻﺳﻢ ‪ a‬ﻟﻜﻦ ﺗﺨﺘﻠﻒ ﻋﻨﮭﺎ‪ ،‬ﺑﺄنّ ﻛﻞ رﻣﺰ ﻣﻨﮭﺎ ﺗﺤﺘﮫ رﻗﻢ ﺳﻔﻠﻲ ﺻﻐﯿﺮ‪ .‬ھﺬه‬
‫اﻻرﻗﺎم اﻟﺴﻔﻠﯿﺔ‪ ،‬ھﻲ أرﻗﺎم اﻟﻔﮭﺮﺳﺔ واﻟﺘﻲ ﺗﺴﻤﻰ ﺑﺎﻟﺪﻟﯿﻞ‪.‬‬

‫ﻋﻮﺩﺓ ﺍﱃ ﺃﲰﺎﺀ ﺍﳌﺘﻐﲑﺍﺕ ﰲ ﺍﳌﺼﻔﻮﻓﺔ‬


‫ﻛﻤﺎ أنّ اﻟﻤﺘﻐﯿﺮات واﻟﺪوال ھﻲ ﻋﻨﺎﺻﺮ ﻓﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ؛ ﻓﻜﺬﻟﻚ اﻟﻤﺼﻔﻮﻓﺔ‪ .‬ﻟﮭﺬا ﯾﺠﺐ أن‬
‫ﻧﻌﻠﻦ ﻋﻨﮭﺎ ﺑﺘﺼﺮﯾﺢ وأن ﻧﻀﻊ ﻟﮭﺎ اﺳﻢ ﺑﻌﺪ أن ﻧﺤﺪد ﻟﮭﺎ ﻧﻤﻂ ﺑﯿﺎﻧﺎت‪.‬‬
‫إذا أﻋﻠﻨﺎ اﺳﻢ ﻟﻠﻤﺼﻔﻮﻓﺔ‪ ،‬ﻓﺈنّ ﻛﻞ ﻋﻨﺎﺻﺮھﺎ ﺳﺘﺄﺧﺬ ھﺬا اﻻﺳﻢ وﻟﻜﻦ ﯾﻘﺘﺮن ﻛﻞ اﺳﻢ ﺑﺮﻗﻢ‬
‫ﻓﮭﺮﺳﺔ ﺧﺎص ﺑﮫ‪.‬‬
‫ﻓﻤﺼﻔﻮﻓﺔ اﺳﻤﮭﺎ ‪ ray‬ﺳﺘﻜﻮن أﺳﻤﺎء ﻋﻨﺎﺻﺮھﺎ‪:‬‬
‫‪ray0, ray1, ray2, ray3‬‬

‫ھﺬا ھﻮ ﺗﺮﻗﯿﻢ اﻟﻔﮭﺮﺳﺔ ﺑﺼﻮرة ﻋﺎﻣﺔ‪ ،‬أﻣﺎ ﻓﻲ ﻋﺎﺋﻠﺔ ‪ c‬وﻓﻲ ﻣﻮﺿﻮع اﻟﻤﺼﻔﻮﻓﺔ‪ ،‬ﻓﺈﻧﮭﺎ ﺗﻀﻊ‬
‫رﻗﻢ اﻟﻔﮭﺮﺳﺔ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ ] [ ﻓﺘﻜﻮن أﺳﻤﺎء اﻟﻌﻨﺎﺻﺮ‪:‬‬
‫]‪ray[0], ray[1], ray[2], ray[3], ray[4‬‬

‫‪141‬‬
‫وﻣﺮة أﺧﺮى ﻧﺬﻛﺮ‪ :‬ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺒﺪأ ﺑﺄرﻗﺎم ﻓﮭﺮﺳﺔ ﻣﻦ اﻟﺼﻔﺮ وﻟﯿﺲ ﻣﻦ اﻟﻮاﺣﺪ‪ .‬ھﺬا‬
‫ﻓﻲ ﻟﻐﺎت ‪. c‬‬

‫ﺣﺠﻢ ﺍﳌﺼﻔﻮﻓﺔ‬
‫ﺣﺠﻢ اﻟﻤﺼﻔﻮﻓﺔ ھﻮ ﻋﺪد ﻋﻨﺎﺻﺮھﺎ‪ .‬ﻓﻜﻠﻤﺎ زاد ﻋﺪد اﻟﻌﻨﺎﺻﺮ ﻛﺒﺮ ﺣﺠﻤﮭﺎ وﺷﻐﻠﺖ ﻣﻜﺎﻧﺎ أﻛﺒﺮ‬
‫ﻓﻲ اﻟﺬاﻛﺮة‪ .‬ﻟﺬﻟﻚ ﯾﺠﺐ أن ﻧﺬﻛﺮ ﻋﺪد ﻋﻨﺎﺻﺮ ﺑﻘﺪر ﺣﺎﺟﺘﻨﺎ ﺣﺘﻰ ﻻ ﻧﺴﺘﮭﻠﻚ اﻟﻜﺜﯿﺮ ﻣﻦ‬
‫اﻟﺬاﻛﺮة‪.‬‬

‫ﺍﻹﻋﻼﻥ ﻋﻦ ﻣﺼﻔﻮﻓﺔ‬
‫اﻻﻋﻼن ﻋﻦ ﻣﺼﻔﻮﻓﺔ‪ ،‬ﯾﻌﻨﻲ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ﻹﻋﻼم اﻟﻤﺘﺮﺟﻢ ﺑﺬﻟﻚ‪ .‬وﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ‬
‫ﻣﺼﻔﻮﻓﺔ‪ ،‬ﯾﺠﺐ ذﻛﺮ ﻧﻮع ﺑﯿﺎﻧﺎﺗﮭﺎ ﺛﻢ اﺳﻤﮭﺎ وﻣﻦ ﺛﻢ ﻋﺪد ﻋﻨﺎﺻﺮھﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ‪.‬‬

‫ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺍﳌﺼﻔﻮﻓﺔ‬


‫ﺑﻤﺎ أنّ اﻟﻤﺼﻔﻮﻓﺔ ھﻲ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻐﯿﺮات؛ ﻟﺬﻟﻚ ﯾﺠﺐ ﺗﺤﺪﯾﺪ ﻧﻮع ھﺬه اﻟﻤﺘﻐﯿﺮات وذﻟﻚ‬
‫ﺑﺘﺤﺪﯾﺪﻧﺎ ﻟﻨﻮع اﻟﻤﺼﻔﻮﻓﺔ‪ .‬أي ﻋﻨﺪﻣﺎ ﻧﺤﺪد ﻧﻤﻂ ﻟﻠﻤﺼﻔﻮﻓﺔ‪ ،‬ﻓﺈنّ ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮھﺎ ﺳﺘﻜﻮن ﻣﻦ‬
‫ﻧﻤﻄﮭﺎ‪ .‬ﻓﺎﻟﻤﺼﻔﻮﻓﺔ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻐﯿﺮات ﻣﻦ ﻧﻤﻂ واﺣﺪ ھﻮ ﻧﻤﻂ اﻟﻤﺼﻔﻮﻓﺔ ﻋﻨﺪ اﻟﺘﺼﺮﯾﺢ‬
‫ﻋﻨﮭﺎ‪.‬‬

‫‪142‬‬
‫ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ‬
‫ﻟﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ‪ ،‬ﻧﺬﻛﺮ ﻧﻮﻋﮭﺎ ﺛﻢ اﺳﻤﮭﺎ‪ ،‬ﺛﻢ ﻗﻮﺳﯿﻦ ﻛﺒﯿﺮﯾﻦ ﺑﯿﻨﮭﻤﺎ ﻋﺪد اﻟﻌﺎﺻﺮ‪ ،‬وﺑﻌﺪ‬
‫ذﻟﻚ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮطﺔ‪ .‬وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ اﻟﺬي ﯾﺼﺮح ﻋﻦ ﻣﺼﻔﻮﻓﺔ ﻣﻦ اﻟﻨﻮع ‪ int‬وﺑﺎﺳﻢ‬
‫‪ masf‬وﻣﻦ ﺧﻤﺴﺔ ﻋﻨﺎﺻﺮ‪:‬‬
‫;] ‪int masf[ 5‬‬
‫ﺑﻌﺪ اﻟﺘﺼﺮﯾﺢ ﻋﻦ ﺗﻠﻚ اﻟﻤﺼﻔﻮﻓﺔ ﺳﺘﻜﻮن ﻟﺪﯾﻨﺎ ﺧﻤﺴﺔ ﻣﺘﻐﯿﺮات ـ ھﻲ ﻋﻨﺎﺻﺮھﺎ ـ وﺑﺎﻟﺸﻜﻞ‬
‫اﻟﺘﺎﻟﻲ‪:‬‬
‫‪Masf0‬‬ ‫‪Masf1‬‬ ‫‪Masf2‬‬ ‫‪Masf3‬‬ ‫‪Masf4‬‬

‫وﻟﻜﻦ ﻣﺎ ﻗﯿﻤﺔ ﻛﻞ ﻋﻨﺼﺮ ﻣﻦ ھﺬه اﻟﻌﻨﺎﺻﺮ اﻟﺨﻤﺴﺔ؟‪.‬‬


‫ﺑﺼﻮرة ﻋﺎﻣﺔ‪ ،‬إن ﻟﻢ ﻧﺬﻛﺮ ﻗﯿﻢ اﻟﻌﻨﺎﺻﺮ؛ ﻓﺈنّ اﻟﻤﺘﺮﺟﻢ ﺳﯿﻔﺘﺮﺿﮭﺎ ﻣﺴﺎوﯾﺔ ﻟﻠﺼﻔﺮ‪ .‬وﯾﻤﻜﻨﻨﺎ‬
‫ﺑﻌﺪ ذﻟﻚ ﺗﻌﯿﯿﻦ ﻗﯿﻤﺔ ﻛﻞ ﻋﻨﺼﺮ‪ .‬ھﺬا ﺑﺼﻮرة ﻋﺎﻣﺔ ﻣﺎﻟﻢ ﺗﻌﺮّف اﻟﻤﺼﻔﻮﻓﺔ داﺧﻞ داﻟﺔ‪.‬‬

‫ﺗﻌﻴﲔ ﻗﻴﻢ ﺍﻟﻌﻨﺎﺻﺮ ﳌﺼﻔﻮﻓﺔ‬


‫ﻧﺴﺘﻄﯿﻊ أن ﻧﺼﻞ اﻟﻰ أي ﻋﻨﺼﺮ ﻣﻦ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ـ ﺑﻌﺪ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ـ؛ وذﻟﻚ ﺑﺬﻛﺮ‬
‫اﺳﻢ اﻟﻤﺼﻔﻮﻓﺔ ـ ﻷﻧﮫ ھﻮ ﻧﻔﺴﮫ اﺳﻢ اﻟﻌﻨﺼﺮ ـ ﺛﻢ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ ﺑﯿﻨﮭﻤﺎ ﺗﺴﻠﺴﻞ اﻟﻌﻨﺼﺮ اﻟﺬي‬
‫ﻧﺮﯾﺪ اﻟﻮﺻﻮل اﻟﯿﮫ ـ أي رﻗﻢ ﻓﮭﺮﺳﺘﮫ‪.‬‬
‫ﻓﻠﻜﻲ ﻧﺼﻞ اﻟﻰ اﻟﻌﻨﺼﺮ اﻷول وﻧﻀﻊ ﻟﮫ ﻗﯿﻤﺔ ﻛـ ‪ 15‬ﻣﺜﻼ ﻧﻜﺘﺐ‪:‬‬
‫;‪Masf[0] = 15‬‬
‫وﻟﻜﻲ ﻧﻀﻊ ﻓﻲ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻧﻲ اﻟﻘﯿﻤﺔ ‪ ، 7‬ﻧﻜﺘﺐ‪:‬‬
‫;‪Masf[1] = 7‬‬

‫ﯾﻤﻜﻦ أن ﯾﻜﻮن رﻗﻢ اﻟﻔﮭﺮﺳﺔ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﯿﺮ ﻣﺜﻞ ‪ x‬أو ﻏﯿﺮ ذﻟﻚ؛ وﺑﺎﻟﺘﺎﻟﻲ اذا ﺟﻌﻠﻨﺎ ھﺬا‬
‫اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﺣﻠﻘﺔ؛ ﻋﻨﺪھﺎ ﯾﻤﻜﻨﻨﺎ اﻟﻮﺻﻮل اﻟﻰ ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ ﻟﻌﻤﻞ ﺷﻲء ﻣﺎ ﻓﯿﮭﺎ‪.‬‬

‫‪143‬‬
‫ﻃﺮﻳﻘﺔ ﺃﺧﺮﻯ ﻟﻠﺘﺼﺮﻳﺢ ﻋﻦ ﻣﺼﻔﻮﻓﺔ‬
‫ﻓﻲ ھﺬه اﻟﻄﺮﯾﻘﺔ ﯾﻤﻜﻦ أن ﻧﺤﺪد ﺟﻤﯿﻊ ﻗﯿﻢ اﻟﻌﻨﺎﺻﺮ ﺑﺪاﯾﺔ ﺑﺄن ﻧﺬﻛﺮھﺎ ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﻌﻘﻮﻓﯿﻦ‪،‬‬
‫وﻋﻠﻰ ذﻟﻚ‪ ،‬ﻓﻼ داﻋﻲ ھﻨﺎ ﻟﺬﻛﺮ اﻟﻌﺪد ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ اﻟﻤﺮﺑﻌﯿﻦ وﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل‪:‬‬

‫;} ‪int masf[] = { 10, 20, 30 15, 8‬‬

‫وﺳﻮاء ﻓﻲ ھﺬه اﻟﻄﺮﯾﻘﺔ أم ﺗﻠﻚ‪ ،‬ﯾﻤﻜﻨﻨﺎ ﺑﻌﺪ ذﻟﻚ أن ﻧﺴﻨﺪ أي ﻋﻨﺼﺮ اﻟﻰ ﻣﺘﻐﯿﺮ آﺧﺮ ﻛﻤﺎ ﻓﻲ‬
‫ھﺬا اﻟﻤﺜﺎل اﻟﺬي ﯾﺠﻌﻞ ﻣﺘﻐﯿﺮ اﺳﻤﮫ ‪ k‬ﯾﺄﺧﺬ ﻗﯿﻤﺔ اﻟﻌﻨﺼﺮ اﻟﺜﺎﻟﺚ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ‪:‬‬

‫;]‪k = Masf[2‬‬

‫وﯾﺠﻮز ﻓﻲ ھﺬه اﻟﻄﺮﯾﻘﺔ أن ﺗﺬﻛﺮ ﻋﺪد اﻟﻌﺎﺻﺮ أو ﻻ ﺗﺬﻛﺮھﺎ‪:‬‬


‫;} ‪int masf[5] = { 10, 20, 30 15, 8‬‬

‫ﻣﺜﺎل ﻟﻤﺼﻔﻮﻓﺔ‬
‫ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‪ ،‬ﺳﻨﺠﻌﻞ رﻗﻢ اﻟﻔﮭﺮﺳﺔ ﻓﻲ ﻣﺘﻐﯿﺮ ﺣﻠﻘﺔ ﻟﻜﻲ ﺗﺪور اﻟﺤﻠﻘﺔ ﻋﻠﻰ ﻛﻞ ﻋﻨﺎﺻﺮ‬
‫اﻟﻤﺼﻔﻮﻓﺔ‪:‬‬

‫>‪#include <iostream‬‬
‫;‪using namespace std‬‬

‫{ )(‪int main‬‬
‫;‪int i‬‬
‫;}‪double scores[5] = {0.5, 1.5, 2.5, 3.5, 4.5‬‬

‫{ )‪for(i = 0; i < 5; i++‬‬

‫‪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‬ﻓﻘﻠﮭﺎ‪ :‬أﻧﺎ ﺳﺄﺟﻌﻞ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ اﻟﻌﻨﻮان اﻟﺬي أﺣﻤﻠﮫ‪.‬‬

‫ﺍﳌﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺪﻭﺍﻝ‬
‫وﺟﻮد اﻟﻤﺼﻔﻮﻓﺎت واﻟﺪوال‪ ،‬ﯾﻐﻨﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻛﺜﯿﺮا‪ ،‬ﻷنّ اﻟﻤﺼﻔﻮﻓﺎت ﺗﻤﺪھﺎ ﺑﺬﺧﯿﺮة‬
‫ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة‪ ،‬واﻟﺪوال ﺗﻤﺪھﺎ ﺑﻌﻤﻠﯿﺎت ﺷﺘﻰ ﯾﻤﻜﻦ أن ﺗﺠﺮى ﻋﻠﻰ ﺗﻠﻚ اﻟﺒﯿﺎﻧﺎت‪.‬‬
‫ﻋﺮﻓﻨﺎ ﻛﯿﻒ ﻧﺠﻌﻞ وﺳﯿﻂ اﻟﺪاﻟﺔ ﯾﺄﺧﺬ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ آﺧﺮ؛ ﻓﮭﻞ ﯾﻤﻜﻦ ﻟﻠﻮﺳﯿﻂ أن ﯾﺄﺧﺬ ﻗﯿﻤﺘﮫ ﻣﻦ‬
‫ﻣﺼﻔﻮﻓﺔ؟‪ .‬ھﺬا ﻣﺎ ﺳﻨﺘﻨﺎوﻟﮫ ﻓﻲ اﻟﻔﻘﺮة اﻟﺘﺎﻟﯿﺔ‪.‬‬

‫ﲤﺮﻳﺮ ﺍﳌﺼﻔﻮﻓﺔ ﻛﻮﺳﻴﻂ ﻟﺪﺍﻟﺔ‬


‫ﯾﻤﻜﻦ ﺗﻤﺮﯾﺮ ﻣﺼﻔﻮﻓﺔ ﻣﻜﺎن وﺳﯿﻂ داﻟﺔ وذﻟﻚ ﻓﻲ وﻗﺖ اﻟﺘﺼﺮﯾﺢ ﻋﻦ اﻟﺪاﻟﺔ وﺑﺄن ﻧﺮﻓﻖ‬
‫ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ ﺑﻌﺪ اﺳﻢ اﻟﻮﺳﯿﻂ اﻟﻤﺮاد أن ﯾﺄﺧﺬ ﻣﻦ ﻣﺼﻔﻮﻓﺔ وﻛﻤﺎ ﺳﻨﺒﯿﻦ ﻓﯿﻤﺎ ﺑﻌﺪ‪ ،‬ﻣﻊ اﻟﻌﻠﻢ‬
‫أنّ اﻟﺘﻤﺮﯾﺮ اﻻﻓﺘﺮاﺿﻲ ﻟﻠﺪوال ھﻮ ﺗﻤﺮﯾﺮ ﺑﺎﻟﻌﻨﻮان‪.‬‬

‫طﺮﯾﻘﺔ ﺗﻤﺮﯾﺮ ﻣﺼﻔﻮﻓﺔ ﻛﻮﺳﯿﻂ داﻟﺔ‬


‫ﻋﺮﻓﻨﺎ ﻛﯿﻒ ﻧﺼﺮح ﻋﻦ داﻟﺔ وﻋﻦ وﺳﯿﻂ ﻟﮭﺎ ﻛﻤﺜﻞ ھﺬه‪:‬‬
‫) ‪int cube( int y‬‬

‫‪146‬‬
‫ﻓـ ‪ y‬ھﻨﺎ ھﻮ اﻟﻮﺳﯿﻂ‪ .‬ﻓﻠﺠﻌﻞ ‪ y‬وﺳﯿﻂ ﻛﻤﺼﻔﻮﻓﺔ‪ ،‬ﻣﺎ ﻋﻠﯿﻨﺎ إﻻ أن ﻧﻜﺘﺐ ﺑﺪل اﻟﺘﺼﺮﯾﺢ‬
‫اﻟﺴﺎﺑﻖ‪ ،‬ھﺬا اﻟﺘﺼﺮﯾﺢ‪:‬‬
‫) ][‪int cube( int y‬‬

‫اﻵن اﻟﻮﺳﯿﻂ ][‪ y‬ﯾﻘﺒﻞ ﻣﺼﻔﻮﻓﺔ‪.‬‬


‫ﻓﻲ ﺟﺴ ﻢ اﻟﺪاﻟﺔ‪ ،‬ﯾﻤﻜﻦ أن ﻧﺤﺪد أي رﻗﻢ أي دﻟﯿﻞ ﻟﻠﻮﺻﻮل اﻟﻰ ﻋﻨﺼﺮ ﻣﻦ ﻋﻨﺎﺻﺮ‬
‫اﻟﻤﺼﻔﻮﻓﺔ‪ ،‬ﻛﺄن ﯾﻜﻮن ﻣﺜﻼ‪ y[3]; :‬ﻓﯿﻤﺮر ﻋﻨﺪھﺎ اﻟﻌﻨﺼﺮ اﻟﺮاﺑﻊ ﻛﻮﺳﯿﻂ ﻟﻠﺪاﻟﺔ‪.‬‬
‫ﻋﻨﺪ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ‪ ،‬ﯾﻜﻔﻲ أن ﻧﻜﺘﺐ اﺳﻢ اﻟﺪاﻟﺔ واﺳﻢ وﺳﯿﻄﮭﺎ اﻟﻤﺼﻔﻮﻓﺔ ﻣﻦ ﻏﯿﺮ اﻟﻘﻮﺳﯿﻦ‬
‫اﻟﻤﺮﺑﻌﯿﻦ ﻛﮭﺬا ﻣﺜﻼ‪cube (y); :‬‬
‫اﯾﻀﺎ‪ ،‬اذا ﻛﺎن ھﻨﺎك ﺗﺮوﯾﺴﺔ ﻟﻠﺪاﻟﺔ‪ ،‬ﻓﯿﺠﺐ ذﻛﺮ اﻟﻘﻮﺳﯿﻦ اﻟﺪاﻟﯿﻦ ﻋﻠﻰ ﻣﺼﻔﻮﻓﺔ ﻣﻜﺎن اﻟﻮﺳﯿﻂ‬
‫اﻟﺬي ﻧﺮﯾﺪه ﻛﻤﺼﻔﻮﻓﺔ‪:‬‬
‫;) ][ ‪int cube( int‬‬
‫أو ‪:‬‬
‫;) ][‪int cube( int y‬‬

‫ﻓﯿﻤﺎ ﯾﻠﻲ ﻣﺜﺎل ﯾﻄﺒﻊ ﻋﻨﺎﺻﺮ ﻣﺼﻔﻮﻓﺔ‪:‬‬

‫>‪#include <iostream‬‬
‫;‪using namespace std‬‬

‫) ‪void cube ( int y [],a‬‬


‫)‪{ for ( int n=0, n<a,n++‬‬
‫;" " << ]‪cout << y[y‬‬
‫;"‪cout << "/n‬‬
‫}‬

‫{ )(‪int main‬‬
‫;}‪int i []= {2, 10, 5‬‬
‫;) ‪cube ( i,3‬‬
‫;‪return 0‬‬
‫}‬

‫‪147‬‬
‫وﻛﻤﺎ ذﻛﺮﻧﺎ‪ ،‬ﻓﺬﻛﺮ اﻟﺘﺮوﯾﺴﺔ أﻓﻀﻞ‪ ،‬ﻟﯿﻜﻮن اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫>‪#include <iostream‬‬
‫;‪using namespace std‬‬

‫;) ‪void cube ( int y [],a‬‬

‫{ )(‪int main‬‬
‫;}‪int i []= {2, 10, 5‬‬
‫;) ‪cube ( i,3‬‬
‫;‪return 0‬‬
‫}‬

‫) ‪void cube ( int y [],a‬‬


‫)‪{ for ( int n=0, n<a,n++‬‬
‫;" " << ]‪cout << y[y‬‬
‫;"‪cout << "/n‬‬
‫}‬

‫ﻣﺼﻔﻮﻓﺔ ﺫﺍﺕ ﺃﺑﻌﺎﺩ‬


‫اﻟﻤﺼﻔﻮﻓﺎت اﻟﺘﻲ ﺗﻌﺎﻣﻠﻨﺎ ﻣﻌﮭﺎ ﺣﺘﻰ اﻵن‪ ،‬ﻛﺎﻧﺖ ﺗﻤﺜﻞ ﺑﻌﺪا واﺣﺪا‪ ،‬إن أردﻧﺎ ﺗﻤﺜﯿﻠﮭﺎ ﻛﺠﺪول‬
‫ﻟﻜﺎﻧﺖ ﻛﻤﺜﻞ ھﺬا اﻟﺸﻜﻞ‪:‬‬

‫]‪msf[0‬‬ ‫]‪msf [1‬‬ ‫]‪msf [2‬‬ ‫]‪msf [3‬‬ ‫]‪msf [4‬‬

‫ﻓﺎﻟﻤﺼﻔﻮﻓﺔ ﺗﻠﻚ ﺗﺘﻜﻮن ﻣﻦ ﺧﻤﺴﺔ أﻋﻤﺪة ﻋﻠﻰ ﺳﻄﺮ واﺣﺪ؛ ﻓﻤﺎذا إن ﻛﺎﻧﺖ اﻟﻤﺼﻔﻮﻓﺔ ﺗﺮﺳﻢ‬
‫ﻛﮭﺬا اﻟﺠﺪول‪:‬‬

‫‪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‬‬
‫اﻟﻤﺮﺑﻊ اﻷول ﯾﻤﺜﻞ ﻋﺪد اﻟﺼﻔﻮف‪ ،‬واﻟﺜﺎﻧﻲ ﻟﻌﺪد اﻷﻋﻤﺪة‪.‬‬

‫ﻟﻠﻮﺻﻮل اﻟﻰ ﻋﻨﺼﺮ‪ ،‬ﻧﺬﻛﺮ أﻻ رﻗﻢ ﺻﻔﮫ ـ أي ﺳﻄﺮه ـ ﺛﻢ رﻗﻢ ﻋﻤﻮده ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫;]‪i [0] [2‬‬


‫ﻓﮭﻨﺎ ﻧﺼﻞ اﻟﻰ اﻟﻌﻨﺼﺮ اﻟﺬي ﯾﻘﻊ ﻓﻲ اﻟﺼﻒ اﻷول ﻓﻲ اﻟﻌﻤﻮد اﻟﺜﺎﻟﺚ ﻓﯿﮫ‪.‬‬

‫]‪i [0] [2‬‬

‫‪149‬‬
‫ﺍﳌﺘﻐﲑﺍﺕ ﺍﻟﻨﺼﻴﺔ‬
‫أﺟﻠﻨﺎ اﻟﺤﺪﯾﺚ ﻋﻦ اﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ﻟﻜﻮﻧﮭﺎ ﺗﺮﺗﺒﻂ ﺑﺎﻟﻤﺼﻔﻮﻓﺎت ﻣﻦ ﺟﮭﺔ‪ ،‬وﺑﺎﻟﻤﺆﺷﺮات ﻣﻦ‬
‫ﺟﮭﺔ أﺧﺮى‪.‬‬
‫ﻓﻠﻠﺘﺼﺮﯾﺢ ﻋﻦ ﻣﺘﻐﯿﺮ ﻧﺼﻲ ﻣﻦ ﻧﻮع ‪ char‬ﻓﮭﻮ ﯾﺘﻄﻠﺐ ﺗﺼﺮﯾﺤﺎ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬

‫;" ‪char *message = " what a good c++ am I‬‬


‫ﺑﻌﺪ ذﻟﻚ ﻧﺴﺘﻄﯿﻊ طﺒﺎﻋﺘﮫ‪:‬‬
‫;‪cout << message‬‬

‫ﻣﺼﻔﻮﻓﺎﺕ ‪char‬‬
‫وھﻲ ﻣﺼﻔﻮﻓﺎت ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﺼﻮص‪ ،‬وﯾﻜﻮن ﺷﻜﻠﮭﺎ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫;} "‪char *names [4] = { "momin", "aminah", "nor", "nada‬‬

‫وﻟﻜﻲ ﻧﺴﺘﺨﺪم أﺣﺪ ﻋﻨﺎﺻﺮ اﻟﻤﺼﻔﻮﻓﺔ‪ ،‬ﻧﺬﻛﺮ اﺳﻤﮭﺎ ﻣﻦ دون * ﺛﻢ رﻗﻢ اﻟﺪﻟﯿﻞ‪:‬‬

‫;]‪cout << names[0‬‬


‫وﻟﻄﺒﺎﻋﺔ ﺟﻤﯿﻊ ﻋﻨﺎﺻﺮھﺎ ﻧﺴﺘﺨﺪم اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‪:‬‬

‫)‪for ( int n=0, n<4,n++‬‬


‫;]‪cout << names[n‬‬

‫ا ذن ﻓﺎﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ھﻨﺎ‪ ،‬إﻣﺎ أن ﺗﻜﻮن ﺑﺼﯿﻐﺔ ﻣﺆﺷﺮ‪ ،‬وإﻣﺎ أن ﺗﻜﻮن ﺑﺼﯿﻐﺔ ﻣﺼﻔﻮﻓﺔ‪.‬‬

‫‪150‬‬
‫إﻟﯿﻚ ﺻﯿﻐﺘﺎن ﯾﻌﺒﺮان ﻋﻦ ﻣﺘﻐﯿﺮ ﻧﺼﻲ واﺣﺪ‪:‬‬

‫;" ‪char *p = " hello‬‬

‫;" ‪char s [] = " hello‬‬

‫اﻟﻌﺒﺎرﺗﺎن أﻋﻼه‪ ،‬ﻣﺘﻜﺎﻓﺌﺘﺎن‪ ،‬وﻟﻜﻦ ﯾﻤﻜﻦ ﻟـ ‪ p‬أن ﯾﺆﺷﺮ اﻟﻰ ﺷﻲء آﺧﺮ‪ ،‬ﺑﯿﻨﻤﺎ ﻻﯾﻤﻜﻦ ﻟـ ‪ s‬أن‬
‫ﯾﺸﯿﺮ اﻟﻰ ﺷﻲء آﺧﺮ ﻷﻧﮫ ﻣﺆﺷﺮ ﻣﺼﻔﻮﻓﺔ ﺛﺎﺑﺖ‪.‬‬

‫ﻓﻲ اﻟﺼﯿﻐﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ‪ ،‬ﺗﺤﺠﺰ ‪ c++‬ﻣﺎﯾﻜﻔﻲ ﻟﻄﻮل اﻟﻜﻠﻤﺔ إﺿﺎﻓﺔ اﻟﻰ ﺣﺮف آﺧﺮ ﯾﺪل‬
‫ﻋﻠﻰ ﻧﮭﺎﯾﺔ اﻟﻜﻠﻤﺔ‪ ،‬ﻓﻠﻌﻠﻚ ﺗﻔﻜﺮ ـ ﻣﺜﻼ ـ ﻓﻲ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺎﺳﺘﺒﺪال اﻟﻜﻠﻤﺎت‪ .‬ﻋﻠﯿﻚ اذن‬
‫أن ﺗﺤﺠﺰ اﻟﻄﻮل اﻟﻜﺎﻓﻲ ﻣﺎﺑﯿﻦ اﻟﻤﺮﺑﻌﯿﻦ ] [‪.‬‬

‫ﺩﻭﺍﻝ ﻧﺼﻴﺔ ﺟﺎﻫﺰﺓ‬


‫ﻣﺜﻠﻤﺎ ھﻨﺎك دوال ﻋﺪدﯾﺔ ﺟﺎھﺰة‪ ،‬ﻛﺬﻟﻚ ﯾﻮﺟﺪ دوال ﺗﻌﻤﻞ ﻋﻠﻰ اﻟﻨﺼﻮص‪.‬‬
‫)‪strcpy(s1,s2‬‬ ‫ﻓﺎﻟﺪاﻟﺔ‪:‬‬
‫ﺗﻘﻮم ﺑﻨﺴﺦ ﻣﺤﺘﻮﯾﺎت ‪ s2‬اﻟﻰ ‪. s1‬‬
‫واﻟﺪاﻟﺔ‪:‬‬
‫)‪Strcat(s1,s2‬‬
‫ﺗﻘﻮم ﺑﺈﺿﺎﻓﺔ ﻣﺤﺘﻮﯾﺎت ‪ s2‬اﻟﻰ ﻧﮭﺎﯾﺔ ‪ . s1‬ﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل اﻟﺬي ﺳﯿﻜﻮن ﺧﺮﺟﮫ‬
‫‪:OneTowThree‬‬

‫;]‪char s[80‬‬
‫;)"‪strcpy(s,"One‬‬

‫‪151‬‬
‫;)"‪strcpy(s,"Tow‬‬
‫;)"‪strcpy(s,"Three‬‬
‫;‪cout << s‬‬

‫وﻛﻤﺎ ﺗﺮى‪ ،‬ﻓﻘﺪ أﻋﻄﻲ اﻟﻤﺘﻐﯿﺮ ‪ s‬ﻣﺎ ﯾﻜﻔﻲ ﻟﯿﺘﺴﻊ ﻟﻠﻜﻠﻤﺎت اﻟﺜﻼث‪.‬‬

‫ﺍﳌﺘﻐﲑ ﺍﻟﻨﺼﻲ ‪string‬‬


‫وھﻮ ﻣﺘﻐﯿﺮ واﺿﺢ وﺳﮭﻞ اﻻﺳﺘﺨﺪام ﺗﺪﻋﻤﮫ اﻟﻤﺘﺮﺟﻤﺎت اﻟﺤﺪﯾﺜﺔ‪ .‬وﻟﻜﻲ ﻧﺴﺘﺨﺪﻣﮫ‪ ،‬ﻻﺑﺪ ﻣﻦ‬
‫ﺗﻀﻤﯿﻦ ﻣﻠﻔﮫ ﻓﻲ اﻟﻤﻠﻒ اﻟﻤﺼﺪري وذﻟﻚ ﺑﺄن ﺗﻜﺘﺐ‪#include <string> :‬‬
‫وﺑﻌﺪ ذﻟﻚ ﯾﻤﻜﻨﻨﺎ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮫ ﻓﻲ أي ﻣﻜﺎن‪ ،‬ﻛﮭﺬا اﻟﺘﺼﺮﯾﺢ اﻟﺬي ﯾﻌﻠﻢ اﻟﻤﺘﺮﺟﻢ ﺑﺈﻧﺸﺎء‬
‫ﺛﻼث ﻣﺘﻐﯿﺮات ﻧﺼﯿﺔ ﻣﻦ ﻧﻮع ‪: string‬‬

‫;‪string a, b, c‬‬

‫ﻣﻊ ھﺬا اﻟﻨﻮع‪ ،‬ﻻ ﺗﻔﻜﺮ ﺑﺎﻟﺤﺠﻢ اﻟﻼزم ﻟﻜﻞ ﻧﺺ‪ ،‬ﻷنّ اﻟﻤﺘﺮﺟﻢ ﺳﯿﺘﻮﻟﻰ ذﻟﻚ‪.‬‬
‫اﻟﻨﻮع ‪ string‬ھﻮ ﻓﺼﯿﻠﺔ ﺟﺪﯾﺪة ﻓﻲ ‪ C++‬واﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﺗﺼﺮح ﻣﻨﮫ‪ ،‬ھﻲ ﻛﺎﺋﻨﺎت ﻣﻦ‬
‫ﺗﻠﻚ اﻟﻔﺼﯿﻠﺔ‪ .‬وأﺑﺴﻂ ﺷﻲء ﻓﻲ ﺗﻌﺮﯾﻒ اﻟﻔﺼﯿﻠﺔ‪ ،‬ھﻲ أن ﻧﻘﻮل‪ :‬إﻧﮭﺎ ﻧﻤﻂ ﺑﯿﺎﻧﺎت‪ .‬أو أنّ‬
‫اﻟﻔﺼﯿﻠﺔ‪ ،‬ھﻲ ﻧﻮع ﻣﻦ أﻧﻮاع ﺑﻨﺎء اﻷﻧﻤﺎط‪ .‬أو ﺑﺸﻜﻞ آﺧﺮ‪ :‬ھﻲ طﺮﯾﻘﺔ ﻣﻦ طﺮق ﺑﻨﺎء‬
‫اﻷﻧﻤﺎط‪.‬‬

‫ﺇﻋﻄﺎﺀ ﻗﻴﻢ ﻟﻠﻤﺘﻐﲑ ﺍﻟﻨﺼﻲ‬


‫ﻛﺄي ﻧﻮع آﺧﺮ‪ ،‬ﯾﻤﻜﻦ أﻋﻄﺎء اﻟﻤﺘﻐﯿﺮ اﻟﻨﺼﻲ ﻗﯿﻤﺎ وﺑﻌﺪة طﺮق‪ ،‬ﻣﻨﮭﺎ‪:‬‬
‫ﻋﻨﺪ اﻟﺘﺼﺮﯾﺢ وﺑﻄﺮﯾﻘﺘﯿﻦ‪ ،‬ﺑﻄﺮﯾﻘﺔ اﻹﺳﻨﺎد‪:‬‬
‫;"‪string a = " Here is a string‬‬

‫‪152‬‬
‫أو ﺑﺎﻟﻄﺮﯾﻘﺔ اﻟﻜﺎﺋﻨﯿﺔ‪:‬‬
‫;)"‪string a("Here is a string"),( "Here is another‬‬

‫أو ﯾﻤﻜﻨﻚ ذﻟﻚ ﺑﻌﺪ اﻟﺘﺼﺮﯾﺢ‪:‬‬


‫;‪string a‬‬
‫;"‪a = "Here is a string‬‬
‫ﺑﻌﺪ أن ﺗﺼﺮح ﻋﻦ اﺳﻢ ﻣﺘﻐﯿﺮ ﻣﻦ ﻧﻮع ‪ ،string‬ﻓﺈﻧﮫ ﯾﻜﻮن ـ أي اﻟﻤﺘﻐﯿﺮ ـ ﻛﺎﺋﻨﺎ ﻣﻦ ﻛﺎﺋﻨﺎت‬
‫ﻓﺼﯿﻠﺘﮫ‪ .‬ﻓـ ‪ a‬ﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻋﻼه‪ ،‬ھﻲ ﻛﺎﺋﻦ ﻣﻦ ﻓﺼﯿﻠﺔ ‪ . string‬وﯾﻤﻜﻦ ﻟﮫ اﻟﻮﺻﻮل اﻟﻰ دوال‬
‫ﻣﻌﯿﻨﺔ‪ .‬ﺑﻞ ﺑﻄﺮﯾﻘﺔ أدق‪ :‬ﯾﻤﻜﻦ ﻟﮫ أن ﯾﻤﺘﻠﻚ دواﻻ ﻣﻌﯿﻨﺔ ﺗﻜﻮن ﺗﺎﺑﻌﺔ ﻟﮫ‪.‬‬

‫ﯾﻤﻜﻦ اﻟﻮﺻﻮل اﻟﻰ أي ﺣﺮف ﻣﻦ ﻧﺼﻮص اﻟﻨﻮع ‪ string‬ﺗﻤﺎﻣﺎ ﻛﻤﺎ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺼﻔﻮﻓﺔ‬
‫اﻟﺤﺮوف‪ .‬ﻓﯿﻤﻜﻦ أن ﺗﻄﺒﻊ اﻟﺤﺮف اﻟﺜﺎﻟﺚ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ‪:‬‬

‫;‪string a‬‬
‫;"‪a = "Here is a string‬‬
‫;]‪cout << a[2‬‬

‫ﻟﻠﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ‪ string‬دواﻟﮭﺎ اﻟﺨﺎﺻﺔ اﻟﺘﻲ ﺗﺄﺗﻲ ﺑﻌﺪ اﺳﻢ اﻟﻜﺎﺋﻦ ﻓﻨﻘﻄﺔ ﺑﯿﻨﮭﻤﺎ‪ .‬ﻓﻔﻲ‬
‫ﻣﺜﺎﻟﻨﺎ ﻋﻦ اﻟﻜﺎﺋﻦ ‪ ، a‬ﯾﻤﻜﻦ اﺳﺘﺪﻋﺎء أي داﻟﺔ ﺗﺎﺑﻌﺔ ﻟﮫ‪ ،‬ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬
‫‪a.function‬‬

‫ﺗﺴﻤﻰ اﻟﺪوال اﻟﺘﻲ ﺗﺴﺘﺪﻋﻰ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ‪ ،‬ﺑﺎﻟﺪوال اﻷﻋﻀﺎء‪ .‬أو اﻟﺪوال اﻟﺘﺎﺑﻌﺔ‪.‬‬

‫إذن ﺷﻜﻞ ﻟﻨﺎ اﻟﻨﻮع ‪ string‬ﻣﺪﺧﻼ ﺟﻤﯿﻼ وﻣﺒﺴﻄﺎ ﻟﻤﻮﺿﻮع اﻟﻔﺼﺎﺋﻞ واﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ‪،‬‬
‫وﺳﻘﻨﺎه ﻟﯿﻜﻮن ﻣﻘﺪﻣﺔ أوﻟﯿﺔ ﻟﻨﺎ ﻋﻦ ذﻟﻚ اﻟﻤﻮﺿﻮع‪.‬‬

‫‪153‬‬
‫‪.................‬‬
‫ﻣﺎ ﺳﻮى ﻣﺎ ذﻛﺮﻧﺎ أﻧﮫ ﯾﻨﺘﻤﻲ اﻟﻰ اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ‪ ،‬ﻓﻜﻞ اﻟﺬي ﺟﺌﻨﺎ إﻟﯿﮫ ﯾُﺼﻄﻠﺢ ﻋﻠﯿﮫ ﺑﻤﺎ‬
‫ﯾﺴﻤﻰ ﺑﺎﻟﺒﺮﻣﺠﺔ اﻟﻤﮭﯿﻜﻠﺔ‪ .‬ﺣﯿﺚ ﯾﻜﻮن ﻛﻞ ﺷﻲء ﻣﻌﻠﻮم ﻟﺪى اﻟﻤﺘﺮﺟﻢ‪ ،‬وﺣﯿﺚ ﯾﻜﻮن اﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻣﻘﺴﻤﺎ اﻟﻰ ﻋﺪة أﺟﺰاء وﻛﺘﻞ ﻟﯿﺆدي ﻛﻞ ﺟﺰء ﻋﻤﻠﯿﺔ ﻣﺎ‪ .‬ﺳﻨﻨﺘﻘﻞ ﺷﯿﺌﺎ ﻓﺸﯿﺌﺎ إﻟﻰ اﻟﺒﺮﻣﺠﺔ‬
‫اﻟﻜﺎﺋﻨﯿﺔ اﻟﺤﺪﯾﺜﺔ أو ﺑﺮﻣﺠﺔ اﻷﻏﺮاض‪.‬‬
‫‪.....................‬‬

‫ﺍﻟﺬﺍﻛﺮﺓ ﻭﻣﺘﻄﻠﺒﺎﺕ ﺍﻟﱪﺍﻣﺞ‬


‫ﻓﻲ ﻣﻌﻈﻢ دراﺳﺘﻨﺎ اﻟﺴﺎﺑﻘﺔ‪ ،‬ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ اﻟﻤﺘﻐﯿﺮات اﻟﺮﻗﻤﯿﺔ واﻟﻤﺼﻔﻮﻓﺎت وﻣﺼﻔﻮﻓﺎت‬
‫اﻟﺤﺮوف‪ .‬وﻛﻞ ﻧﻮع ﻣﻦ ذﻟﻚ ﺗﻄﻠﺐ ﻗﺪر أوﻟﻲ ﻣﻌﻠﻮم ﻣﻦ اﻟﺬاﻛﺮة ﯾﻘﻮم اﻟﻤﺘﺮﺟﻢ ﺑﺤﺠﺰھﺎ ﻟﮫ‬
‫ﻣﺴﺒﻘﺎ‪ .‬وﻟﻜﻦ‪ ،‬ﻗﺪ ﻧﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﺑﯿﺎﻧﺎت ﻣﺎ ﻻ ﻧﻌﻠﻢ ﺣﺠﻤﮭﺎ!‪ .‬ھﻨﺎ ﯾﻠﺰم اﻟﺘﻌﺎﻣﻞ ﻣﻊ‬
‫اﻟﺬاﻛﺮة ﺗﻌﺎﻣﻼ ﻓﻲ وﻗﺖ اﻟﺘﻨﻔﯿﺬ وﻟﯿﺲ ﺑﺸﻜﻞ ﻣﺴﺒﻖ‪ .‬وﻗﺪ ﺗﻨﻤﻮ إدﺧﺎﻻت اﻟﻤﺴﺘﺨﺪم أو ﻗﺪ‬
‫ﺗﺘﻘﻠﺺ وﺣﺴﺐ اﻟﻐﺮض ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻧﺤﺘﺎج إذن‪ ،‬اﻟﻰ أدوات ﺑﺮﻣﺠﯿﺔ وﻣﻔﺎﺗﯿﺢ ﺗﺴﮭﻞ ﻟﻨﺎ‬
‫ذﻟﻚ‪ .‬ﻓﻨﺤﻦ اﻵن ﻣﻊ اﻟﻜﻠﻤﺔ اﻟﻤﻔﺘﺎﺣﯿﺔ ‪ new‬اﻟﺘﻲ ﺗﺤﺠﺰ ﻟﻨﺎ ﻣﻨﻄﻘﺔ ﻣﻦ اﻟﺬاﻛﺮة‪ ،‬وﻣﻊ اﻟﻜﻠﻤﺔ‬
‫اﻟﻤﻔﺘﺎﺣﯿﺔ ‪ delete‬اﻟﺘﻲ ﺗﺤﺮر ﺗﻠﻚ اﻟﻤﻨﻄﻘﺔ اﻟﻤﺤﺠﻮزة ﺑﻌﺪ اﻧﺘﻔﺎء اﻟﺤﺎﺟﺔ إﻟﯿﮭﺎ‪.‬‬

‫ﺍﳌﺆﺷﺮ ‪new‬‬
‫ﻛﻤﺎ أنّ اﻟﻌﺎﻣﻞ * ﯾُﻌَﺪ ﻋﺎﻣﻞ ﻣﺆﺷﺮ اذا ﺟﺎء ﻓﻲ ﺳﯿﺎق ﻣﺎ ﻓﯿﺠﻌﻞ ﻣﺘﻐﯿﺮه اﻟﻤﻨﺘﻤﻲ إﻟﯿﮫ ﯾﺸﯿﺮ‬
‫اﻟﻰ ﺷﻲء ﻣﺎ‪ ،‬ﻛﺬﻟﻚ اﻟﻌﺎﻣﻞ ‪ new‬ﯾُﻌﺪ ﻣﺆﺷﺮ ﯾﮭﯿﺊ ﻣﺘﻐﯿﺮه اﻟﻤﻨﺘﻤﻲ إﻟﯿﮫ ﻟﯿﺸﯿﺮ إﻟﻰ ﺑﺪاﯾﺔ‬
‫اﻟﻤﻨﻄﻘﺔ اﻟﺘﻲ ﯾﺤﺠﺰھﺎ ﻣﻦ اﻟﺬاﻛﺮة‪ ،‬ﻓﮭﻮ ﯾﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻌﻨﺎوﯾﻦ وﻣﻦ أﻧﻤﺎط ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫‪154‬‬
‫ﯾﻤﻜﻦ أن ﯾﺤﺠﺰ اﻟﻌﺎﻣﻞ ‪ new‬ﻣﺎ ﯾﻜﻔﻲ ﻟﻌﻨﺼﺮا واﺣﺪ‪ ،‬اذا ﻟﻢ ﯾﺬﻛﺮ ﻣﻌﮫ ﻋﺪد‪ ،‬وإﻻ ﻓﯿﻤﻜﻦ ذﻟﻚ‬
‫ﺑﻮﺿﻊ اﻟﻌﺪد ﺑﯿﻦ ﻗﻮﺳﯿﻦ ﻣﺮﺑﻌﯿﻦ وﻛﻤﺎ ﺳﯿﺄﺗﻲ ﻣﻦ أﻣﺜﻠﺔ‪.‬‬

‫ﻣﺜﺎل ﺣﺠﺰ ﻣﺴﺎﺣﺔ ﻟﻌﻨﺼﺮ واﺣﺪ ﻣﻦ ﻧﻤﻂ ﻣﺎ‬


‫ﯾﺤﺠﺰ ھﺬا اﻟﻤﺜﺎل ﻣﺴﺎﺣﺔ ﻣﻦ اﻟﺬاﻛﺮة ﻟﻤﺘﻐﯿﺮ اﺳﻤﮫ ‪ bobby‬ﻣﻦ اﻟﻨﻤﻂ ‪: int‬‬
‫;‪Int * bobby‬‬
‫;‪bobby = new int‬‬

‫أو دﻣﺠﮭﺎ ﺑﺘﻌﻠﯿﻤﺔ واﺣﺪة‪:‬‬

‫;‪Int * bobby = new int‬‬

‫ﻣﺜﺎل ﺣﺠﺰ ﻣﺴﺎﺣﺔ ﻷﻛﺜﺮ ﻣﻦ ﻋﻨﺼﺮ‬


‫ﯾﺤﺠﺰ ھﺬا اﻟﻤﺜﺎل ﻟﺨﻤﺴﺔ ﻋﻨﺎﺻﺮ ﻣﻦ ‪: bobby‬‬
‫;‪Int * bobby‬‬
‫;]‪bobby = new int [5‬‬

‫وﻛﻤﺎ ﻧﺮى‪ ،‬ﻧﺤﺘﺎج ﻟﺬﻛﺮ اﻟﻨﻤﻂ ﻣﺎ ﺑﻌﺪ ﻣﻌﺎﻣﻞ اﻟﺤﺠﺰ ‪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‬‬


‫ﻓﻲ ﺑﺮاﻣﺞ ﺻﻐﯿﺮة‪ ،‬ﯾﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺞ أن ﯾﻌﺎﻟﺞ اﻻﺳﺘﺜﻨﺎءات ﺑﺠﻤﻞ اﻟﺸﺮط ‪ if‬وﻏﯿﺮھﺎ‪ .‬ﻓﯿﻤﻜﻦ‬
‫ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺣﺴﺎﺑﻲ ﯾﺘﻌﺎﻣﻞ ﺑﺎﻟﻜﺴﻮر‪ ،‬أن ﯾﺘﻔﺤﺺ اﻟﺒﺮﻧﺎﻣﺞ دﺧﻞ اﻟﻤﺴﺘﺨﺪم ﻓﯿﺘﺄﻛﺪ ﻣﻦ ﻋﺪم‬
‫ﺟﻮاز اﺳﺘﻌﻤﺎل اﻟﺼﻔﺮ ﻓﻲ اﻟﻤﻘﺎم ﺑﻤﺜﻞ ھﺬه اﻟﺠﻤﻠﺔ ـ ﻣﺜﻼ ـ وﻋﻠﻰ ﻓﺮض ﺑﺄنّ ﻣﺘﻐﯿﺮ اﻟﻜﺴﺮ‬
‫ھﻮ ‪: b‬‬
‫) ‪If ( b == 0‬‬
‫;" ‪Cout << " r‬‬

‫ﻓﺘﻜﻮن ‪ r‬ھﻲ أي رﺳﺎﻟﺔ ﺗﻨﺒﯿﮫ ﺗﺨﺮج ﻟﻠﻤﺴﺘﺨﺪم‪ ،‬أو ﻏﯿﺮ ذﻟﻚ‪.‬‬

‫ﻟﻜﻦ ﻣﻊ ﺑﺮاﻣﺞ أﻛﺒﺮ‪ ،‬ﻧﺮﯾﺪ ﻟﻠﺘﺴﻠﺴﻞ اﻟﻤﻨﻄﻘﻲ ﻟﻠﺒﺮﻧﺎﻣﺞ أن ﯾﺴﺘﻤﺮ دون ﻣﻘﺎطﻌﺘﮫ ﺑﺸﺮوط ﻣﺎ‪،‬‬
‫إﻧﻤﺎ ﻧﺮﯾﺪ أن ﻧﺴﺘﻤﺮ ﻓﻲ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺠﻨﺎ دون اﻻﻟﺘﻔﺎت ﺑﺼﻮرة ﻣﺮﻛﺰة اﻟﻰ ﻣﺎ ﯾﻤﻜﻦ أن ﯾﺤﺪث‬
‫ﻣﻦ أﺧﻄﺎء‪ .‬ﻧﺮﯾﺪ أن ﻧﻜﺘﺐ ﺑﺮﻧﺎﻣﺠﻨﺎ ﻓﻲ ﻣﻘﻄﻊ ﻣﻌﯿﻦ ﻣﻦ اﻟﺒﺮﻣﺠﺔ‪ ،‬ﺑﺤﯿﺚ أنّ ھﺬا اﻟﻤﻘﻄﻊ ھﻮ‬
‫اﻟﺬي ﯾﻠﺘﻔﺖ اﻟﻰ ﺗﻌﻘﺐ اﻷﺧﻄﺎء اذا ﺣﺪﺛﺖ‪ .‬ﻓﻠﺬﻟﻚ أُوﺟﺪت ﺟﻤﻠﺔ ‪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‬ﺗﺴﺎوي ﺻﻔﺮ‪ ،‬أو اذا أدﺧﻞ ﺣﺮﻓﺎ‪.‬‬

‫ﻋﻨﺪھﺎ‪ ،‬ﻛﻞ ھﺬا اﻟﻤﻘﻄﻊ ﺗﻜﺘﺒﮫ ﻓﻲ ﺟﻤﻠﺔ ‪: try‬‬

‫‪158‬‬
‫{ ‪try‬‬

‫‪Int‬‬ ‫;‪a, x, y‬‬


‫= ‪a‬‬ ‫;‪12‬‬
‫‪Cin‬‬ ‫;‪<< y‬‬
‫= ‪a‬‬ ‫;‪x/y‬‬

‫}‬

‫وﺑﻌﺪ أن ﺗﻨﺘﮭﻲ ﻣﻨﮫ ﺑﺘﺴﻠﺴﻠﮫ اﻟﻄﺒﯿﻌﻲ‪ ،‬ﺗﻠﺘﻔﺖ ﻋﻨﺪھﺎ إﻟﻰ ﻣﺎ ﯾﻤﻜﻦ أن ﯾﺤﺪث ﻣﻦ أﺧﻄﺎء‬
‫ﺗﻄﻠﻘﮭﺎ ﺟﻤﻠﺔ ‪ try‬ﻟﺘﺘﻠﻘﺎھﺎ ﺟﻤﻞ أﺧﺮى ﺗﻌﺎﻟﺠﮭﺎ‪ ،‬وھﻲ ﺟﻤﻞ ‪ catch‬ﻟﺘﻜﺘﺐ ھﻨﺎك ﺟﻤﻠﻚ‬
‫اﻟﻤﻌﺎﻟﺠﺔ أو رﺳﺎﺋﻞ ﺗﺸﯿﺮ إﻟﻰ اﻟﺨﻄﺄ‪.‬‬
‫اذن‪ ،‬اذا ﺣﺪث ﺧﻄﺄ‪ ،‬ﺳﯿﻨﻄﻠﻖ اﺳﺘﺜﻨﺎء ﻣﻦ ﺟﻤﻠﺔ ‪ try‬ﻟﯿﺒﺤﺚ ﻋﻦ ﺟﻤﻠﺔ ‪ catch‬ﻣﻨﺎﺳﺒﺔ ﻟﻨﻮع‬
‫اﻟﺨﻄﺄ وﻧﻤﻄﮫ‪.‬‬
‫اﻻﺳﺘﺜﻨﺎء ﺳﯿﻄﻠﻖ وﻣﻌﮫ رزﻣﺔ ﻣﻌﻄﯿﺎت ﯾﻤﻜﻦ أن ﺗﺤﺪد ﻧﻤﻄﮫ ﻓﯿﺒﺤﺚ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻦ ﺟﻤﻠﺔ‬
‫‪ catch‬ﺗﻌﺎﻟﺞ ھﺬا اﻟﻨﻤﻂ‪ .‬ﻟﺬﻟﻚ ﯾﺤﺪد ﺑﯿﻦ اﻟﻘﻮﺳﯿﻦ‪ ،‬ﻣﺎ ﺑﻌﺪ ﻛﻠﻤﺔ ‪ catch‬ﻧﻤﻂ‪ ،‬ﯾﺴﺘﺪل ﻋﻠﯿﮫ‬
‫اﻟﺸﻲء اﻟﻤﻄﻠﻖ ﻓﯿﺪﺧﻞ اﻟﺘﻨﻔﯿﺬ اﻟﻰ اﻟﺘﻌﻠﯿﻤﺎت اﻟﻤﻜﺘﻮﺑﺔ ﻟﯿﻨﻔﺬھﺎ‪.‬‬

‫ﻛﻤﺎ ﻓﻲ ھﺬا اﻟﻤﺜﺎل‪:‬‬

‫{ ‪try‬‬

‫‪Int‬‬ ‫;‪a, x, y‬‬


‫= ‪a‬‬ ‫;‪12‬‬
‫‪Cin‬‬ ‫;‪<< y‬‬
‫= ‪a‬‬ ‫;‪x/y‬‬

‫}‬

‫{ ) ‪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‬‬

‫‪// The one and only application object‬‬

‫;‪CWinApp theApp‬‬

‫;‪using namespace std‬‬

‫‪// 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‬وﻏﯿﺮھﺎ‪ .‬ﻟﻜﻦّ اﻟﻠﻐﺔ ﻣﻜﻨﺖ ﻟﻚ‬
‫أن ﺗﻘﻮم أﻧﺖ ﺑﺼﻨﺎﻋﺔ أﻧﻤﺎط ﻣﺨﺘﻠﻔﺔ ﺧﺎﺻﺔ ﺑﻚ‪ ،‬وﻗﺪ ﻟﻤﺤﻨﺎ ﻣﺴﺒﻘﺎ ﻋﻦ ﻣﺘﻐﯿﺮات وﺿﻌﯿﺔ ﻣﻦ‬
‫ﺻﻨﻊ اﻟﻤﺒﺮﻣﺞ‪ ،‬ﺳﻨﺄﺗﻲ اﻵن ﻋﻠﻰ طﺮﻗﮭﺎ‪.‬‬

‫ﻃﺮﻕ ﺻﻨﺎﻋﺔ ﺍﻷﳕﺎﻁ‬


‫ﺳﻨﺄﺗﻲ ﻋﻠﻰ ﺛﻼث طﺮق ﻟﺼﻨﺎﻋﺔ اﻷﻧﻤﺎط‪ .‬أول طﺮﯾﻘﺔ وأﯾﺴﺮھﺎ ﺗﺘﻢ ﺑﻮاﺳﻄﺔ ﺑﻨﯿﺔ ﺗﺪﻋﻰ‬
‫اﻟﺘﻌﺪاد ‪ Enumeration‬وأرﻗﻰ طﺮﯾﻘﺔ ھﻲ ﺑﻨﯿﺔ اﻟﻔﺼﺎﺋﻞ واﻟﺼﻔﻮف ‪ Classes‬اﻟﺘﻲ‬
‫ﺳﻨﺘﻨﺎوﻟﮭﺎ ﻓﯿﻤﺎ ﺑﻌﺪ‪ ،‬وطﺮﯾﻘﺔ ﺑﻨﯿﺔ اﻟﺴﺠﻼت ‪ Structures‬اﻟﺘﻲ ﺳﻨﻮاﺻﻞ ﻓﯿﮭﺎ اﻟﺤﺪﯾﺚ‪.‬‬
‫وﻟﻜﻦ ﻗﺒﻞ أن ﻧﺒﺪأ ﻓﻜﺮ ﻓﻲ طﺮﯾﻘﺔ ھﺬﯾﻦ اﻟﺸﺨﺼﯿﻦ‪ .‬أﺣﺪھﻤﺎ ﯾﻘﻮل‪ :‬اﻟﻔﺼﻮل؛ أرﺑﻌﺔ‪ :‬اﻟﺸﺘﺎء‪،‬‬
‫اﻟﺮﺑﯿﻊ‪ ،‬اﻟﺼﯿﻒ‪ ،‬اﻟﺨﺮﯾﻒ‪.‬‬
‫ﺑﯿﻨﻤﺎ اﻵﺧﺮ ﯾﻘﻮل‪ :‬اﻟﻔﺼﻞ‪ ،‬ﺑﺪرﺟﺔ ﺣﺮارﺗﮫ!‪.‬‬
‫اﻷول‪ ،‬ﺳﻤﻰ ﻟﻚ اﻷﺷﯿﺎء‪ ،‬ﺑﯿﻨﻤﺎ اﻟﺜﺎﻧﻲ‪ ،‬أﻋﻄﺎك ﻣﻌﯿﺎرا ﺗﻘﺎس ﺑﮫ اﻷﺷﯿﺎء‪ .‬ﻓﺒﺘﻐﯿﯿﺮ ﻗﯿﻤﺔ درﺟﺔ‬
‫اﻟﺤﺮارة‪ ،‬ﺗﺤﺼﻞ ﻋﻠﻰ ﻓﺼﻮل ﻣﺨﺘﻠﻔﺔ!‪.‬‬

‫‪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‬‬

‫وﻛﺎن ﯾﻤﻜﻦ أن ﻧﻜﺘﺐ ﻧﻤﻄﻨﺎ اﻟﺠﺪﯾﺪ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬


‫{ ‪enum Month‬‬
‫‪Jan,‬‬
‫‪Feb,‬‬
‫‪Mar,‬‬
‫‪Jun‬‬
‫;}‬

‫‪166‬‬
‫‪.........................‬‬
‫ﺗﺨﺘﻠﻒ ﻋﻦ‬ ‫وھﺬه ﻋﻮدة ﻟﻠﺒﻨﯿﺔ ‪ Struct‬وﻣﻮﺿﻮع اﻟﺴﺠﻼت‪ .‬اﻟﺴﺠﻼت ‪Structures‬‬
‫اﻟﺘﻌﺪاد ‪ ، Enumeration‬ﻓﻲ أنّ اﻟﺘﻌﺪاد ﯾُﻌَﺪ ﻧﻤﻂ‪ ،‬واﻟﺮﻣﻮز اﻷﻋﻀﺎء ھﻲ ﺗﻌﺪادات ﻟﮫ‪،‬‬
‫ﻛﺄن ﺗﻘﻮل‪ :‬ﻋﺪد ﻟﻲ أﯾﺎم اﻷﺳﺒﻮع‪ .‬ﻓﺄﻗﻮل ﻟﻚ‪ :‬ھﻲ اﻟﺠﻤﻌﺔ واﻟﺴﺒﺖ واﻷﺣﺪ واﻻﺛﻨﯿﻦ‪ ،‬وھﻜﺬا‪.‬‬
‫ﻓﺎﻟﻤﺘﻐﯿﺮ اﻟﻤﺼﺮح ﻣﻦ ﻧﻤﻂ اﻟﺘﻌﺪاد‪ ،‬ﯾﺴﻨﺪ إﻟﯿﮫ أﺣﺪ إﻋﺪادات ـ أي أﻋﻀﺎء ـ اﻟﻨﻤﻂ‪.‬‬
‫واﻟﻤﺬاق‪ ،‬ﺗﻌﺪاد‪ .‬ﻓﻤﻦ ﺗﻌﺪاداﺗﮫ‪ :‬ﺣﻠﻮ‪ ،‬ﻣﺮ‪ ،‬ﺣﺎﻣﺾ‪ ،‬ﻣﺎﻟﺢ‪ .‬وﻛﺬﻟﻚ اﻟﻔﺼﻞ ـ أو اﻟﻔﺼﻮل ـ ھﻲ‬
‫ﺗﻌﺪاد‪ ،‬ﻓﺎﻟﻔﺼﻮل ﺗﺘﻌﺪد إﻟﻰ‪ :‬اﻟﺸﺘﺎء‪ ،‬اﻟﺮﺑﯿﻊ‪ ،‬اﻟﺼﯿﻒ‪ ،‬اﻟﺨﺮﯾﻒ‪.‬‬

‫أﻣﺎ اﻟﺴﺠﻼت‪ ،‬ﻓﺄﻋﻀﺎؤھﺎ ﺗﻌﻨﻲ ﺷﯿﺌﺎ آﺧﺮ؛ ﻓﺎﻟﺴﺠﻞ‪ ،‬ﯾﻌﻠﻦ ﻋﻦ ﻧﻤﻂ ﺟﺪﯾﺪ‪ ،‬وأﻋﻀﺎؤه ﺗﻤﺜﻞ‬
‫ﻣﺰاﯾﺎ وﺧﺼﺎﺋﺺ ﻟﺬاك اﻟﻨﻤﻂ‪ .‬ﻓﺎﻟﻄﺎﻟﺐ؛ ﻧﻤﻂ‪ .‬ﯾﻤﻜﻦ أن ﺗﻀﻊ ﻛﺘﻌﺪاد ﻟﮫ‪ :‬ﻣﺠﺘﮭﺪ و ﻛﺴﻮل‪.‬‬
‫ھﺬا ﻣﻦ وﺟﮭﺔ ﻧﻈﺮ اﻟﺘﻌﺪاد‪ .‬أﻣﺎ ﻣﻦ وﺟﮭﺔ ﻧﻈﺮ اﻟﺴﺠﻼت‪ ،‬ﻓﺎﻟﻄﺎﻟﺐ؛ ﻧﻤﻂ‪ ،‬ﻣﻤﯿﺰاﺗﮫ واﻟﺤﻘﻮل‬
‫اﻟﺘﻲ ﯾﺤﺘﺎﺟﮭﺎ ﻟﺒﯿﺎﻧﮫ ووﺻﻔﮫ ھﻲ‪ :‬اﺳﻢ اﻟﻄﺎﻟﺐ‪ ،‬ﻋﻨﻮان اﻟﻄﺎﻟﺐ‪ ,‬ﺳﻠﻮك اﻟﻄﺎﻟﺐ‪ ،‬درﺟﺔ‬
‫اﻟﻄﺎﻟﺐ ﻓﻲ ﻛﻞ ﻣﺎدة‪ ،‬وﻏﯿﺮ ذﻟﻚ ﻣﻤﺎ ﯾﻤﻜﻦ أن ﯾﻮﺿﻊ ﻓﻲ ﺳﺠﻞ ﯾﺤﻮي ﺣﻘﻮﻻ‪ ،‬وﻓﻲ ﻛﻞ ﺣﻘﻞ‬
‫ﺗﺬﻛﺮ ﺻﻔﺔ أو ﻣﯿﺰة‪ ،‬أو ﺧﺎﺻﺔ ﻣﻦ ﺧﺼﺎﺋﺼﮫ‪.‬‬
‫ﺑﻌﺪ ذﻟﻚ‪ ،‬ﻧﺴﺘﻄﯿﻊ أن ﻧﺼﺮح ﻣﻦ ﻧﻤﻂ اﻟﺴﺠﻞ‪ ،‬ﻛﯿﺎﻧﺎت و )أﺷﯿﺎء( ﻟﮭﺎ درﺟﺎت ﻣﺨﺘﻠﻔﺔ‬
‫)ﻣﺘﻔﺎوﺗﺔ( ﻣﻦ اﻟﺨﺼﺎﺋﺺ اﻟﺘﻲ ذﻛﺮت ﻟﻠﺴﺠﻞ‪ .‬ﻓﺎﻟﻄﺎﻟﺐ‪ ،‬ﺳﺠﻞ‪ ،‬ﻟﮫ ﺧﺼﺎﺋﺺ ﻣﺨﺘﻠﻔﺔ ﻛﺎﻻﺳﻢ‬
‫وﻏﯿﺮه‪ .‬ﻓﯿﺄﺗﻲ أﺣﺪ اﻟﻄﻼب واﺳﻤﮫ ﺧﺎﻟﺪ‪ ،‬وﻣﺪرﺳﺘﮫ‪ ،‬اﻷوس اﻻﺑﺘﺪاﺋﯿﺔ‪ ،‬ودرﺟﺘﮫ ﻓﻲ‬
‫اﻟﺮﯾﺎﺿﯿﺎت )‪ .(90‬وﯾﺄﺗﻲ زﯾﺪ‪ :‬ﻣﺪرﺳﺘﮫ‪ ،‬اﻟﺨﺰرج‪ ،‬ودرﺟﺘﮫ ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت )‪.(95‬‬
‫ﺧﺎﻟﺪ وزﯾﺪ؛ ﻛﯿﺎﻧﺎن ﻣﻦ ﻧﻤﻂ )طﺎﻟﺐ(‪ ،‬أي ﻣﺘﻐﯿﺮان ﻣﻦ اﻟﻨﻮع )طﺎﻟﺐ(‪.‬‬

‫‪167‬‬
‫ﻛﺬﻟﻚ‪ ،‬ﻟﺪﯾﻨﺎ ﺳﺠﻞ اﻟﻔﺎﻛﮭﺔ‪ ،‬وﻟﮭﺎ ﺧﺼﺎﺋﺺ ﺗﻜﺘﺐ ﻛﻞ ﺧﺎﺻﺔ ﻓﻲ ﺣﻘﻞ‪ .‬ﻓﻔﻲ ﺣﻘﻞ ﺗﺠﺪ‬
‫)اﻟﻠﻮن(‪ ،‬وﻓﻲ ﺣﻘﻞ ﺗﺠﺪ )اﻟﺮاﺋﺤﺔ(‪ ،‬وﻓﻲ ﺣﻘﻞ ﺗﺠﺪ )اﻟﻤﺬاق(‪ ،‬وﻏﯿﺮ ذﻟﻚ‪ .‬ﻣﻦ ﺳﺠﻞ اﻟﻔﺎﻛﮭﺔ‪،‬‬
‫ﺗﺄﺗﻲ ﻣﺘﻐﯿﺮات ﻣﺜﻞ‪ :‬ﺗﻔﺎح‪ ،‬ﺧﻮخ‪ ،‬ﻣﻮز‪.‬‬
‫اذا أردﻧﺎ اﻟﺪﻗﺔ ﻓﻲ اﻟﻮﺻﻒ‪ ،‬ﻓﺎﻟﺘﻔﺎح ﻟﮫ درﺟﺔ ﻣﻌﯿﻨﺔ ﻣﻦ اﻟﻤﺬاق اﻟﺤﻠﻮ‪ ،‬وﻟﮫ درﺟﺔ ﻣﻌﯿﻨﺔ ﻣﻦ‬
‫اﻟﻤﺬاق اﻟﺤﺎﻣﺾ‪ .‬ﺑﯿﻨﻤﺎ اﻟﺨﻮخ‪ ،‬ﻟﮫ درﺟﺔ ﻣﺬاق ﺣﻠﻮ ﻏﯿﺮ درﺟﺔ ﻣﺬاق اﻟﺘﻔﺎح‪ ،‬وﻟﮫ درﺟﺔ‬
‫ﻣﺬاق ﺣﺎﻣﺾ ﻣﺨﺘﻠﻔﺔ أﯾﻀﺎ ﻋﻦ درﺟﺔ اﻟﺘﻔﺎح‪ ،‬وھﻜﺬا‪.‬‬
‫ﻓﺎﻟﺴﺠﻞ‪ ،‬ﯾﺘﻜﻮن ﺑﺪوره ﻣﻦ أﻧﻤﺎط ﻣﺨﺘﻠﻔﺔ‪ ،‬ﻟﻜﻦ ھﻮ ﺑﺤﺪ ذاﺗﮫ ـ وﺑﻜﻠﯿﺘﮫ ھﺬه ـ‪ ،‬أي ﺑﻜﻞ أﻧﻤﺎطﮫ‬
‫ھﺬه‪ ،‬ﯾﻌﺘﺒﺮ ﻧﻤﻂ ﺟﺪﯾﺪ ﻗﺎﺋﻢ ﺑﺬاﺗﮫ‪.‬‬
‫ﻓﻨﻤﻂ اﻟﺘﻌﺪاد‪ ،‬ﯾﺒﺤﺚ ﻓﻲ ﺗﻌﺪداﺗﮫ وأﻗﺴﺎﻣﮫ وھﯿﺌﺎﺗﮫ وﺗﻔﺮﻋﺎﺗﮫ‪ ،‬ﺑﯿﻨﻤﺎ ﻧﻤﻂ اﻟﺴﺠﻞ‪ ،‬ﯾﺒﺤﺚ ﻓﻲ‬
‫درﺟﺎت اﻟﺸﻲء‪ ،‬ﻓﻲ اﻟﺪرﺟﺔ اﻟﻔﻼﻧﯿﺔ ﻟﻜﺬا‪.‬‬

‫ھﺬا اﻟﺘﺒﯿﺎن ﻋﻦ اﻟﺴﺠﻞ وھﺬا اﻟﺸﺮح‪ ،‬ﯾﻨﻄﺒﻖ أﯾﻀﺎ ﻋﻠﻰ اﻟﻔﺼﺎﺋﻞ‪ ،‬إﻻ أنّ اﻟﻔﺼﺎﺋﻞ أوﺳﻊ وﻟﮭﺎ‬
‫أﻓﻌﺎل ﺗﻘﻮم ﺑﮭﺎ ﻛﺎﺋﻨﺎﺗﮭﺎ‪.‬‬
‫اﻟﺴﺠﻞ ﻣﺎ ﻟﻢ ﯾُﻨﺸﺄ ﻣﻨﮫ ﻛﯿﺎﻧﺎت‪ ،‬أي ﻣﺘﻐﯿﺮات؛ ﻓﻼ ﯾﺄﺧﺬ ﺷﻲء ﻣﻦ اﻟﺬاﻛﺮة‪ .‬ﻓﺈذا أﻋﻠﻨﺎ ﻋﻦ ﻛﯿﺎن‬
‫ﻣﻦ ﺳﺠﻞ‪ ،‬ﻋﻨﺪھﺎ أﺧﺬ ھﺬا اﻟﻜﯿﺎن ﺣﯿﺰا ﻓﻲ اﻟﺬاﻛﺮة‪ .‬ﻛﺬﻟﻚ اﻟﻔﺼﯿﻠﺔ‪ ،‬ﻣﺎ ﻟﻢ ﯾﻨﺸﺄ ﻣﻨﮭﺎ ﻛﺎﺋﻨﺎت‪،‬‬
‫ﻓﺈﻧﮭﺎ ﻻ ﺗﺸﻐﻞ ﺷﯿﺌﺎ ﻓﻲ اﻟﺬاﻛﺮة‪ .‬ﻓﺈذا ﻛﺎﻧﺖ ھﻨﺎك ﻛﺎﺋﻨﺎت ﻣﻦ اﻟﻔﺼﯿﻠﺔ‪ ،‬ﺷﻐﻠﺖ ﺗﻠﻚ اﻟﻜﺎﺋﻨﺎت‬
‫ﺣﯿﺰا ﻣﺎ ﻓﻲ اﻟﺬاﻛﺮة‪.‬‬

‫اﻵن ﺳﻨﻘﻮم ﺑﺼﻨﺎﻋﺔ ﻧﻤﻂ اﻟﻄﺎﻟﺐ ﻓﻲ ﺳﺠﻞ‪ .‬وﺳﻨﺪرج ﻓﯿﮫ ﺣﻘﻮل ﺑﺴﯿﻄﺔ ھﻲ‪ :‬اﺳﻢ اﻟﻄﺎﻟﺐ‬
‫‪ ،name‬ودرﺟﺔ ﻣﺎدة اﻟﻔﯿﺰﯾﺎء ‪ ،Physics‬ودرﺟﺔ ﻣﺎدة اﻟﺮﯾﺎﺿﯿﺎت ‪.Mathematic‬‬

‫‪168‬‬
‫{ ‪Struct student‬‬
‫;]‪Char name[30‬‬
‫;‪Int Physics‬‬
‫;‪Int Mathematic‬‬
‫;}‬

‫اﻵن ﻛﻮﻧﺎ ﻣﺜﻞ ھﺬه اﻟﺼﺤﯿﻔﺔ‪:‬‬

‫ﺳﺟل طﺎﻟب‬

‫درﺟﺔ اﻟرﯾﺎﺿﯾﺎت‬ ‫درﺟﺔ اﻟﻔﯾزﯾﺎء‬ ‫اﻻﺳم‬

‫اﻵن‪ ،‬ﺳﻨﻌﻠﻦ ﻋﻦ ﻛﯿﺎﻧﯿﻦ‪ ،‬أي ﻣﺘﻐﯿﺮﯾﻦ ﻣﻦ ﻧﻤﻂ اﻟﻄﺎﻟﺐ وھﻤﺎ‪ :‬ﺧﺎﻟﺪ ‪ ،kaled‬و زﯾﺪ ‪.zayd‬‬

‫;‪student kaled, zayd‬‬

‫ﻟﻨﻌﯿﺪ اﻟﻤﺜﺎل ﻣﻦ ﺑﺪاﯾﺘﮫ‪:‬‬

‫{ ‪struct student‬‬

‫‪169‬‬
‫;]‪char name[30‬‬
‫;‪int Physics‬‬
‫;‪int Mathematic‬‬
‫;}‬
‫;‪student kaled, zayd‬‬

‫اﻻن ﻛﻮﻧﺎ ﻣﺜﻞ ھﺬه اﻟﺼﺤﯿﻔﺔ‪:‬‬

‫ﺳﺟل اﻟطﺎﻟب‪ :‬ﺧﺎﻟد‬

‫درﺟﺔ اﻟرﯾﺎﺿﯾﺎت‬ ‫درﺟﺔ اﻟﻔﯾزﯾﺎء‬ ‫اﻻﺳم‬

‫ﺳﺟل اﻟطﺎﻟب‪ :‬زﯾد‬

‫درﺟﺔ اﻟرﯾﺎﺿﯾﺎت‬ ‫درﺟﺔ اﻟﻔﯾزﯾﺎء‬ ‫اﻻﺳم‬

‫أو أﻧﺎ ﻛﻮﻧﺎ ﻣﺜﻞ ھﺬه اﻟﺼﺤﯿﻔﺔ‪:‬‬

‫ﺳﺟل طﺎﻟب‬

‫‪170‬‬
‫اﻟرﯾﺎﺿﯾﺎت‬ ‫اﻟﻔﯾزﯾﺎء‬ ‫اﻻﺳم‬ ‫اﻟﻛﯾﺎن‬

‫اﻟطﺎﻟب ﺧﺎﻟد‬

‫اﻟطﺎﻟب زﯾد‬

‫اﻵن ﻧﺮﯾﺪ أن ﻧﻤﻸ ھﺬه اﻟﺤﻘﻮل‪ .‬وﺳﯿﻠﺘﻨﺎ ھﻲ اﻟﻄﺮﯾﻘﺔ اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫ﻧﻜﺘﺐ اﺳﻢ اﻟﻜﯿﺎن‪ ،‬ﺛﻢ ﻧﻘﻄﺔ‪ ،‬ﺛﻢ اﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺮاد ﻣﻠﺆه‪:‬‬

‫‪kaled.name‬‬

‫ﻧﺤﻦ اﻵن ﻓﻲ اﻟﺤﻘﻞ اﻟﻤﺮاد‪ ،‬وﻟﻜﻦ ﻟﻢ ﻧﻜﺘﺐ ﺷﯿﺌﺎ ﺑﻌﺪ‪ .‬ﻋﻠﯿﻨﺎ أن ﻧﻜﻤﻞ ﻓﻨﺴﻨﺪ ﻟﮫ اﺳﻢ ﺑﮭﺬه‬
‫اﻟﻄﺮﯾﻘﺔ‪:‬‬

‫;" ‪kaled.name = " kaled Mahmod‬‬

‫ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ ﻧﻀﻊ ﻟﮫ درﺟﺔ ﻓﻲ اﻟﻔﯿﺰﯾﺎء واﻟﺮﯾﺎﺿﯿﺎت‪:‬‬

‫;‪kaled.Physics = 95‬‬
‫;‪kaled.Mathematic = 90‬‬

‫أﺻﺒﺤﺖ ﺻﺤﯿﻔﺘﻨﺎ اﻵن ﻛﺎﻵﺗﻲ‪:‬‬

‫‪171‬‬
‫ﺳﺟل طﺎﻟب‬

‫اﻟرﯾﺎﺿﯾﺎت‬ ‫اﻟﻔﯾزﯾﺎء‬ ‫اﻻﺳم‬ ‫اﻟﻛﯾﺎن‬

‫‪90‬‬ ‫‪95‬‬ ‫ﺧﺎﻟد ﻣﺣﻣود‬ ‫اﻟطﺎﻟب ﺧﺎﻟد‬

‫اﻟطﺎﻟب زﯾد‬

‫ﻛﻨﺎ ﻧﺴﺘﻄﯿﻊ اﻟﺘﺼﺮﯾﺢ ﻋﻦ زﯾﺪ وﺧﺎﻟﺪ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ أﯾﻀﺎ‪:‬‬

‫{ ‪struct student‬‬
‫;]‪char name[30‬‬
‫;‪int Physics‬‬
‫;‪int Mathematic‬‬
‫;‪} kaled, zayd‬‬

‫ﻧﺴﺘﻄﯿﻊ أن ﻧﺴﺘﺨﺪم اﻟﻤﺆﺷﺮات ﻣﻊ اﻟﺒﻨﻰ‪ ،‬ﺗﻤﺎﻣﺎ ﻛﻤﺎ اﺳﺘﺨﺪﻣﻨﺎھﺎ ﻣﻊ اﻷﻧﻤﺎط اﻷﺧﺮى‪.‬‬


‫ﻓﺒﻌﺪ أن أﻋﻠﻨﺎ ﻋﻦ زﯾﺪ‪ ،‬ﯾﻤﻜﻦ أن ﻧﻀﻊ ﻣﺆﺷﺮ ﻋﻠﯿﮫ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬
‫أوﻻ‪ :‬ﻧﻌﻠﻦ ﻋﻦ ﻣﺆﺷﺮ ﻣﻦ ﻧﻮع طﺎﻟﺐ‬
‫ﺛﺎﻧﯿﺎ‪ :‬ﻧﺴﻨﺪ ھﺬا اﻟﻤﺆﺷﺮ اﻟﻰ ﻋﻨﻮان زﯾﺪ‬
‫;‪student *pz‬‬
‫;‪pz = &zayd‬‬

‫‪172‬‬
‫اذا ﻛﻨﺖ ﻟﻢ ﺗﻨﺲ ﻣﻮﺿﻮع اﻟﻤﺆﺷﺮات‪ ،‬ﻓﺈﻧﻚ ﺗﺴﺘﻄﯿﻊ أن ﺗﺼﻞ اﻵن إﻟﻰ ﺣﻘﻮل زﯾﺪ ﺑﻮﺳﺎطﺔ‬
‫ﻋﻨﻮاﻧﮫ ﻓﻨﻜﺘﺐ ﻣﺜﻼ‪:‬‬

‫;‪(*pz.Physics) = 88‬‬
‫وﺑﻤﺎ أنّ ھﺬه اﻟﻄﺮﯾﻘﺔ ﻣﺴﺘﺨﺪﻣﺔ ﺑﺸﻜﻞ ﻛﺒﯿﺮ‪ ،‬ﻓﻘﺪ وﺿﻊ ﺧﺒﺮاء ‪ C++‬طﺮﯾﻘﺔ أﯾﺴﺮ ﺗﻜﺎﻓﺊ ﻣﺎ‬
‫ﺳﺒﻖ وﺑﺎﺳﺘﺨﺪام ﻋﺎﻣﻞ ﺟﺪﯾﺪ ھﻮ >‪ -‬واﻟﻤﺘﻜﻮن ﻣﻦ إﺷﺎرة اﻟﻄﺮح )‪ (-‬وإﺷﺎرة أﻛﺒﺮ )>(‪.‬‬
‫ﻓﺒﺪﻻ ﻣﻦ أن ﺗﻜﺘﺐ ;‪ . (*pz.Physics) = 88‬ﯾﻤﻜﻨﻚ ﻛﺘﺎﺑﺘﮭﺎ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬

‫;‪pz -> Physics = 88‬‬

‫وﻛﺬﻟﻚ اﻛﺘﺐ‪:‬‬

‫;‪pz -> Mathematic = 99‬‬


‫;‪pz -> name = zayd Ali‬‬

‫أﺻﺒﺤﺖ اﻵن ﺻﺤﯿﻔﺘﻨﺎ ﺑﮭﺬا اﻟﺸﻜﻞ‪:‬‬

‫ﺳﺟل طﺎﻟب‬

‫اﻟرﯾﺎﺿﯾﺎت‬ ‫اﻟﻔﯾزﯾﺎء‬ ‫اﻻﺳم‬ ‫اﻟﻛﯾﺎن‬

‫‪90‬‬ ‫‪95‬‬ ‫ﺧﺎﻟد ﻣﺣﻣود‬ ‫اﻟطﺎﻟب ﺧﺎﻟد‬

‫‪99‬‬ ‫‪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‬‬
‫اﻵن اذا ﻣﺎ أﻧﺸﺄﻧﺎ ﻛﺎﺋﻨﺎ ﻣﻦ ھﺬه اﻟﻔﺼﯿﻠﺔ‪ ،‬ﻓﺈﻧّﻨﺎ ﺳﻨﺴﺘﻄﯿﻊ ﺗﺤﻤﯿﻠﮫ ﺑﺼﻔﺎت اﻟﻄﻮل وﺳﯿﻜﻮن‬
‫ﺑﺈﻣﻜﺎﻧﮫ إﺟﺮاء ﻋﻤﻠﯿﺔ إﯾﺠﺎد اﻟﻤﺴﺎﺣﺔ‪ .‬وﻓﯿﻤﺎ ﯾﻠﻲ اﻟﻤﺜﺎل اﻟﻜﺎﻣﻞ ﻟﺬﻟﻚ‪:‬‬

‫دﻋﻨﺎ ﻧﺄﺧﺬ ﻣﺜﺎﻻ أﺑﺴﻂ ﻟﻨﻔﮭﻢ ﺑﻨﯿﺔ اﻟﻔﺼﯿﻠﺔ‪ :‬ﻋﻨﺪﻣﺎ ﺳﺘﺒﻠﻎ ﻣﺮﺣﻠﺔ ﻣﺘﻘﺪﻣﺔ ﻓﻲ اﻟﺮﯾﺎﺿﯿﺎت؛‬
‫ﺳﺘﻌﻠﻢ أﻧّﮫ ﻟﺘﻌﯿﯿﻦ ﻧﻘﻄﺔ ﻋﻠﻰ ورﻗﺔ‪ ،‬ﻓﺈﻧﮫ ﯾﻠﺰﻣﻚ ﺧﻄﯿﻦ ﻣﺘﻘﺎطﻌﯿﻦ ـ أﻓﻘﻲ وﻋﻤﻮدي ـ‪.‬‬
‫أي‪ :‬ﻋﻨﺪﻣﺎ ﯾﻠﺘﻘﻲ اﻟﺨﻂ اﻷﻓﻘﻲ ﻣﻊ اﻟﻌﻤﻮدي؛ ﻓﺈنّ ذﻟﻚ ﯾﺸﻜﻞ ﻧﻘﻄﺔ‪ ،‬ھﻲ ﻧﻘﻄﺔ اﻟﺘﻘﺎطﻊ‪.‬‬

‫ﺧط ﻋﻣودي ‪y‬‬

‫ﻧﻘطﺔ ﻣن ﺗﻘﺎطﻊ ‪x,y‬‬


‫ﺧط أﻓﻘﻲ ‪x‬‬

‫اﻵن ﺳﻨﺒﻨﻲ ﻓﺼﯿﻠﺔ اﻟﻨﻘﻄﺔ ‪point‬‬


‫{ ‪class point‬‬
‫;‪int x, y‬‬
‫;}‬

‫‪179‬‬
‫ﺍﻷﺳﺲ ﺍﻟﺜﻼﺛﺔ ﻟﻠﱪﳎﺔ ﺍﻟﻜﺎﺋﻨﻴﺔ‬
‫اﻟﺘﻐﻠﯿﻒ‬
‫اﻟﻮراﺛﺔ‬
‫اﻟﺘﺸﺎﻛﻞ‬

‫ﺳﺄذﻛﺮ ﺷﺮﺣﺎ ﻓﻲ ﺗﻌﺪﯾﻞ ﻻﺣﻖ ﺑﺎذن ﷲ ﻣﻊ اﺻﺪار آﺧﺮ أﻛﻤﻞ ﻓﯿﮫ ﻧﻮاﻗﺺ اﻟﻤﻨﮭﺞ‬
‫وﻣﻼﺣﻈﺎت اﻻﺻﺪﻗﺎء‪.‬‬

‫ﻟﻐـﺔ ‪C#‬‬
‫اذا ﻛﻨﺖ ﻓﮭﻤﺖ وأﺗﻘﻨﺖ ‪ ، C++‬ﻓﺈنّ ﺗﻌﻠﻤﻚ ﻟـ ‪ C#‬ﺳﯿﻜﻮن ﯾﺴﯿﺮا ﺟﺪا‪ ،‬ﻟﻜﻮن اﻟﻠﻐﺘﯿﻦ‬
‫ﻣﺘﺸﺎﺑﮭﺘﯿﻦ إﻟﻰ درﺟﺔ ﻛﺒﯿﺮة‪.‬‬
‫أﺧﺬت ‪ c#‬ﻣﻦ ‪ c++‬ﺗﻌﺎﺑﯿﺮھﺎ ﻓﺎﻛﺘﺴﺒﺖ ﺑﺬﻟﻚ ﻗﻮة أداﺋﮭﺎ‪ ،‬وأﺧﺬت ﻣﻦ ﻣﻈﮭﺮ ﻓﯿﺠﻮال ﺑﯿﺰك‬
‫ﺳﮭﻮﻟﺘﮫ وروﻧﻘﮫ‪ ،‬ﻓﻜﺎﻧﺖ ﺑﺬﻟﻚ ﻟﻐﺔ ﺟﻤﯿﻠﺔ ﺟﺪا‪ ،‬وﺣﺎﻛﺖ ﺑﺄﺳﻠﻮﺑﮭﺎ وﺑﻨﺎﺋﮭﺎ ﻟﻐﺔ ﺟﺎﻓﺎ اﻟﻜﺎﺋﻨﯿﺔ‬
‫اﻟﺘﻮﺟﮫ ﺑﺸﻜﻞ ﻛﻠﻲ؛ ﻓﻜﺎﻧﺖ ﺑﺬﻟﻚ ﻟﻐﺔ ﻗﺪ أﺧﺬت ﻣﻦ ﻛﻞ ﺷﻲء ﻣﺤﺎﺳﻨﮫ‪ .‬ﻓﻜﺎﻧﺖ اﻟﻠﻐﺔ اﻟﻤﺜﻠﻰ‬
‫ﺣﺘﻰ اﻵن‪.‬‬

‫وﺑﻤﺎ أنّ ﺑﻨﺎء ﺟﻤﻠﮭﺎ ﻣﺸﺎﺑﮫ ﻟـ ‪ ، c++‬ﻟﺬﻟﻚ ﺳﯿﻜﻮن ﻣﺮورﻧﺎ ﻋﻠﯿﮭﺎ ﺳﺮﯾﻌﺎ‪ ،‬ﻛﻮن اﻟﺬي ﻓﮭﻢ‬
‫‪ ، c++‬ﻻﺑﺪ وأن ﯾﻜﻮن اﻵن ﻣﺒﺮﻣﺠﺎ ﯾﻤﺘﻠﻚ ذﺧﯿﺮة ﻓﻲ ﺗﻔﮭﻢ اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﯿﺔ‪.‬‬

‫‪180‬‬
‫رأﯾﻨﺎ أنّ اﻟﻮﺣﺪة اﻷﺳﺎس ﻓﻲ ‪ C++‬ھﻲ اﻟﺪاﻟﺔ‪ ،‬وأنّ ھﻨﺎك داﻟﺔ أوﻟﻰ ﻻﺑﺪ ﻣﻨﮭﺎ‪ ،‬ھﻲ اﻟﺪاﻟﺔ‬
‫‪ . main‬ﻣﻊ اﻣﻜﺎﻧﯿﺔ ﺑﻨﺎء ﻓﺼﯿﻠﺔ أو ﻓﺼﺎﺋﻞ ﻟﻠﻮﻟﻮج اﻟﻰ ﻋﺎﻟﻢ اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ‪.‬‬
‫ﻓﻲ ‪ ، C#‬اﻟﻮﺣﺪة اﻟﺮﺋﯿﺴﺔ‪ ،‬ھﻲ اﻟﻔﺼﯿﻠﺔ‪ .‬وھﻨﺎك ﻓﺼﯿﻠﺔ أوﻟﻰ ﻻﺑﺪ ﻣﻨﮭﺎ وھﻲ ﺗﺤﻮي اﻟﺪاﻟﺔ‬
‫‪ main‬ﻓﻲ ﺛﻨﺎﯾﺎ ھﺬه اﻟﻔﺼﯿﻠﺔ‪ .‬ﻓﻔﻲ ‪ ، C#‬ﯾﻜﻮن اﻻﺗﺠﺎه اﻟﺒﺮﻣﺠﻲ ﻛﺎﺋﻨﻲ اﻟﻮﺟﮭﺔ ﺑﺸﻜﻞ ﻛﻠﻲ‬
‫وﻣﻦ اﻟﻠﺤﻈﺔ اﻷوﻟﻰ‪.‬‬

‫وﺳﺄﻛﻤﻞ ﻓﻲ إﺻﺪار ﻻﺣﻖ ﺑﺎذن ﷲ‪.‬‬

‫‪181‬‬

You might also like