You are on page 1of 86

‫‪Aldopaee@hotmail.

co m‬‬ ‫‪460‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫اﻟﺴﯿﺮة اﻟﺬاﺗﯿﺔ )‪(cv‬‬
‫اﻟﻤﻌﻠﻮﻣﺎت اﻟﺸﺨﺼﯿﺔ )‪:(Personal Information‬‬
‫اﻻﺳﻢ ‪ /‬ﻋﻤﺎر ﺑﻦ ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬
‫اﻟﺠﻨﺴﯿﺔ ‪ /‬ﯾﻤﻨﻲ‬
‫اﻟﺤﺎﻟﺔ اﻻﺟﺘﻤﺎﻋﯿﺔ ‪ /‬ﻣﺘﺰوج‬
‫ﻣﺤﻞ و ﺗﺎرﯾﺦ اﻟﻤﯿﻼد ‪ /‬اﻟﺤﺪﯾﺪة ‪1986‬م‬
‫اﻟﻌﻨﻮان اﻟﺪاﺋﻢ وﺑﯿﺎﻧﺎت اﻻﺗﺼﺎل )‪:(Connection & Address‬‬
‫) ‪ , (00967736777307-00966538558880‬أﯾﻤﯿﻞ‬ ‫ﺟﺪة ‪ ,‬ﺷﺎرع اﻟﻤﯿﻨﺎء ‪ ,‬ﻣﻮﺑﺎﯾﻞ‬
‫) ‪ (xpres@xpres -it.net , Aldopaee@hotmail.com‬ﻣﻮﻗﻊ اﻟﺒﺮﻣﺠﯿﺎت ‪.www.xpres-it.net‬‬

‫اﻟﻤﺆھﻼت اﻟﻌﻠﻤﯿﺔ )‪:(Education‬‬

‫اﻟﺠﮭﺔ اﻟﻤﺎﻧﺤﺔ‬ ‫ﺳﻨﺔ اﻟﺘﺨﺮج‬ ‫اﻟﻤﺆھﻞ واﻟﺘﺨﺼﺺ‬


‫ﻛﻠﯿﺔ ﻋﻠﻮم وھﻨﺪﺳﺔ اﻟﺤﺎﺳﻮب – ﺟﺎﻣﻌﺔ‬ ‫ﺑﻚ ﻋﻠﻮم وھﻨﺪﺳﺔ اﻟﺤﺎﺳﻮب ﻗﺴﻢ ‪/‬‬
‫‪2008-2004‬م‬
‫اﻟﺤﺪﯾﺪة‬ ‫ﻋﻠﻮم اﻟﺤﺎﺳﺐ ﺗﻘﺪﯾﺮ ﻋﺎم ‪ :‬ﺟـ‪//‬‬
‫اﻟﻤﻌﮭﺪ اﻟﺒﺮﯾﻄﺎﻧﻲ‬ ‫‪2004-2002‬م‬ ‫دﺑﻠﻮم ﺳﻜﺮﺗﺎرﯾﺔ ﺗﻘﺪﯾﺮ اﻣﺘﯿﺎز‬
‫ﺛﺎﻧﻮﯾﺔ ﻋﺎﻣﺔ ﻗﺴﻢ ﻋﻠﻤﻲ ﻣﻌﺪل‬
‫ﻣﺪرﺳﺔ اﻟﺜﻮرة – اﻟﺤﺪﯾﺪة‬ ‫‪2001‬م‬
‫‪80,50‬‬

‫اﻟﻤﺆﻟﻔﺎت اﻟﻌﻠﻤﯿﺔ اﻟﻤﻨﺸﻮرة )‪:(Researches‬‬


‫§ ﺗﻢ ﺗﺄﻟﯿﻒ اﻟﻜﺘﺐ اﻟﺘﺎﻟﯿﺔ‪:‬‬
‫* أﺻﻮل اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ‪. c++‬‬
‫* ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت ﺑﻠﻐﺔ ‪. c++‬‬
‫* اﻟﺒﺮﻣﺠﺔ اﻟﻤﻮﺟﮭﺔ ﺑﻠﻐﺔ ‪. Java‬‬
‫* ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت ﺑﻠﻐﺔ ‪. Java‬‬
‫* ‪ 101‬ﻹﺗﻘﺎن اﻟﺒﺮﻣﺠﺔ‪.‬‬
‫وﺗﻢ ﻧﺸﺮھﺎ ﻋﻠﻰ ﺷﺒﻜﺔ اﻹﻧﺘﺮﻧﺖ ‪. www.cb4a.com‬‬
‫اﻟﻮﻇﯿﻔﺔ اﻟﺤﺎﻟﯿﺔ‪:‬‬
‫§ ﻣﺒﺮﻣﺞ ﺑﻤﺠﻤﻮﻋﺔ ﻣﺼﺎﻧﻊ ﻣﺤﻤﻮد ﺳﻌﯿﺪ ‪ -‬اﻟﺴﻌﻮدﯾﺔ‪.‬‬
‫§ ﻣﺤﺎﺳﺐ ﺑﻤﺆﺳﺴﺔ ﻧﺠﻤﺔ اﻟﮭﺪف اﻟﺘﺠﺎرﯾﺔ‪ -‬اﻟﺴﻌﻮدﯾﺔ‪.‬‬
‫§ ﻣﺪﯾﺮ ﻣﻜﺘﺐ ﺑﺮﻣﺠﯿﺎت ‪ XPres‬ﻓﻲ اﻟﯿﻤﻦ ‪.www.xpres-it.net‬‬
‫اﻟﻮﻇﺎﺋﻒ اﻟﺴﺎﺑﻘﺔ ‪:‬‬
‫§ أﺳﺘﺎذ ﺟﺎﻣﻌﻲ ﻓﻲ ﺟﺎﻣﻌﺔ اﻟﺤﺪﯾﺪة – ﻗﺴﻢ ﻣﻌﻠﻢ ﺣﺎﺳﻮب‪.‬‬
‫§ ﺿﺎﺑﻂ ﺣﺠﺰ وﻣﺒﯿﻌﺎت )اﻟﺠﺰﯾﺮة اﻟﻌﺮﺑﯿﺔ ﻟﻠﺴﻔﺮﯾﺎت واﻟﺴﯿﺎﺣﺔ‪.(2002/2000-‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪461‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺷﮭﺎدات اﻟﺸﻜﺮ واﻟﺘﻘﺪﯾﺮ‪:‬‬
‫ﺷﮭﺎدة ﻣﻦ ﺷﺮﻛﺔ اﻟﺴﺤﺎب ﻟﺨﺪﻣﺎت ﺷﺮﻛﺔ ﻣﺎﯾﻜﺮﺳﻮﻓﺖ‪.‬‬ ‫‪‬‬
‫ﺷﮭﺎدة ﺷﻜﺮ وﺗﻘﺪﯾﺮ ﻣﻦ ﺟﺎﻣﻌﺔ اﻟﺒﺘﺮا ‪ -‬ﻋﻤﺎن اﻷردن ‪.2008‬‬ ‫‪‬‬
‫ﺷﮭﺎدة ﺷﻜﺮ وﺗﻘﺪﯾﺮ ﻣﻦ ﻋﻤﯿﺪ ﻣﺮﻛﺰ وأﻧﻈﻤﺔ اﻟﻤﻌﻠﻮﻣﺎت –ﺟﺎﻣﻌﺔ اﻟﺤﺪﯾﺪة ‪.2008‬‬ ‫‪‬‬
‫ﺷﮭﺎدة ﺷﻜﺮ وﺗﻘﺪﯾﺮ ﻣﻦ ﻣﺪﯾﺮ ﻣﻜﺘﺐ اﻟﯿﻤﻨﯿﺔ ﻟﻠﺨﻄﻮط اﻟﺠﻮﯾﺔ –اﻟﺤﺪﯾﺪة ‪.2007‬‬ ‫‪‬‬
‫ﺷﮭﺎدة ﺷﻜﺮ وﺗﻘﺪﯾﺮ ﻣﻦ ﻣﺆﺳﺴﺔ ﻣﻮاﻧﺊ اﻟﺒﺤﺮ اﻷﺣﻤﺮ اﻟﯿﻤﻨﯿﺔ ‪.2009‬‬ ‫‪‬‬
‫ﺷﮭﺎدة ﺷﻜﺮ وﺗﻘﺪﯾﺮ ﻣﻦ رﺋﯿﺲ ﺟﺎﻣﻌﺔ اﻟﺤﺪﯾﺪة ‪.2010‬‬ ‫‪‬‬
‫ﺷﮭﺎدة ﺷﻜﺮ وﺗﻘﺪﯾﺮ ﻣﻦ دﻓﻌﺔ اﻟﯿﻤﻦ أوﻻً ﻗﺴﻢ ﻣﻌﻠﻢ ﺣﺎﺳﻮب –ﻛﻠﯿﺔ اﻟﺘﺮﺑﯿﺔ زﺑﯿﺪ ‪.2010-2009‬‬ ‫‪‬‬
‫ﺷﮭﺎدة ﺷﻜﺮ وﺗﻘﺪﯾﺮ ﻣﻦ دﻓﻌﺔ ﺳﻔﺮاء اﻟﺒﺮﻣﺠﺔ –ﻛﻠﯿﺔ ﻋﻠﻮم وھﻨﺪﺳﺔ اﻟﺤﺎﺳﻮب –اﻟﺤﺪﯾﺪة‬ ‫‪‬‬
‫‪.2010-2009‬‬

‫اﻷﻋﻤﺎل اﻟﺘﻲ ﻗﻤﺖ ﺑﮭﺎ ‪:‬‬


‫‪ ‬ﺗﻢ اﻟﻤﺸﺎرﻛﺔ ﻓﻲ ﺗﺎرﯾﺦ ‪ 2008/7/23‬ﺑﻤﻌﺮض ﺗﻜﻨﻮﻟﻮﺟﯿﺎ اﻟﻤﻌﻠﻮﻣﺎت ‪ ITSAF2008‬ﺑﺒﺮﻧﺎﻣﺞ إدارة‬
‫اﻟﻤﺨﺘﺒﺮات اﻟﺤﺎﺻﻞ ﻋﻠﻰ اﻟﻤﺮﺗﺒﺔ اﻟﺴﺎﺑﻌﺔ ﻋﻠﻰ ﻣﺴﺘﻮى اﻟﻮﻃﻦ اﻟﻌﺮﺑﻲ اﻟﻤﻘﺎم ﻓﻲ ﻋﻤﺎن – اﻷردن‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ اﻟﻤﻮاﻗﻊ اﻹﻟﻜﺘﺮوﻧﯿﺔ)ﻟﻤﺆﺳﺴﺔ ﻣﻮاﻧﺊ اﻟﺒﺤﺮ اﻷﺣﻤﺮ اﻟﯿﻤﻨﯿﺔ ﻟﯿﻀﻢ ﻣﯿﻨﺎء ) اﻟﺤﺪﯾﺪة –‬
‫اﻟﻤﺨﺎء – اﻟﺼﻠﯿﻒ ‪ -‬ﻣﯿﺪي( ‪,‬ﻣﻨﻈﻤﺔ اﻟﯿﻤﻦ أوﻻُ‪,‬ﺟﺎﻣﻌﺔ اﻟﺤﺪﯾﺪة‪ ,‬ﻣﻠﺘﻘﻰﻛﻠﯿﺔ اﻟﺘﺮﺑﯿﺔ زﺑﯿﺪ ‪,‬اﻟﻤﻌﮭﺪ‬
‫اﻟﻌﺎﻟﻲ ﻟﻠﻌﻠﻮم اﻟﺼﺤﯿﺔ ‪ ,‬اﻟﺠﺰﯾﺮة اﻟﻌﺮﺑﯿﺔ ﻟﻠﺴﻔﺮﯾﺎت واﻟﺴﯿﺎﺣﺔ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ اﻟﻤﺤﺎﺳﺒﻲ ﻟﻤﺒﺮوك أﺧﻮان ﻟﻠﺼﻨﺎﻋﺎت ودﺑﺎﻏﺔ اﻟﺠﻠﻮد ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ﺿﺒﻂ اﻟﺤﻈﻮر واﻷﻧﺼﺮاف ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ‪ Gantt Chart Machine‬وﺗﻢ ﺗﺮﻛﯿﺒﺔ ﺑﻤﺠﻤﻮﻋﺔ ﻣﺼﺎﻧﻊ ﻣﺤﻤﻮد ﺳﻌﯿﺪ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ‪ Present Tracing, Pallets‬وﺗﻢ ﺗﺮﻛﯿﺒﺔ ﺑﻤﺠﻤﻮﻋﺔ ﻣﺼﺎﻧﻊ ﻣﺤﻤﻮد ﺳﻌﯿﺪ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ‪ .Received Voucher‬وﺗﻢ ﺗﺮﻛﯿﺒﺔ ﺑﻤﺠﻤﻮﻋﺔ ﻣﺼﺎﻧﻊ ﻣﺤﻤﻮد ﺳﻌﯿﺪ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ اﻟﻤﺨﺎزن ﻟﻠﻤﻌﮭﺪ اﻟﻌﺎﻟﻲ ﻟﻠﻌﻠﻮم اﻟﺼﺤﯿﺔ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ اﻟﻜﻨﺘﺮول ﻟﻠﻤﻌﮭﺪ اﻟﻌﺎﻟﻲ ﻟﻠﻌﻠﻮم اﻟﺼﺤﯿﺔ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ﻹﺻﺪار ﺑﻄﺎﺋﻖ دﺧﻮل اﻟﻤﯿﻨﺎء وﺗﻢ ﺗﺮﻛﯿﺒﺔ ﻟﻤﺆﺳﺴﺔ ﻣﻮاﻧﺊ اﻟﺒﺤﺮ اﻷﺣﻤﺮ اﻟﯿﻤﻨﯿﺔ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ﻟﻠﺘﺬاﻛﺮ اﻟﻤﺠﺎﻧﯿﺔ ﻟﻠﺨﻄﻮط اﻟﺠﻮﯾﺔ اﻟﯿﻤﻨﯿﺔ ﻓﺮع اﻟﺤﺪﯾﺪة‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ إدارة ﻣﻘﺎھﻲ اﻹﻧﺘﺮﻧﺖ وﺗﻢ ﺗﺴﻮﯾﻘﮫ ﻋﻠﻰ أﻛﺜﺮ ﻣﻦ ﻋﺸﺮة ﻣﻘﺎھﻲ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺮﻛﯿﺐ ﺷﺒﻜﺎت ﻷﻛﺜﺮ ﻣﻦ ﻋﺸﺮة أﻣﺎﻛﻦ ﻣﺨﺘﻠﻔﺔ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ﻹدارة اﻟﻌﯿﺎدات وﺗﻢ ﺗﺮﻛﯿﺒﺔ ﻋﻠﻰ )ﻋﯿﺎدة اﻟﻌﻤﺎل ﻟﻤﺆﺳﺴﺔ ﻣﻮاﻧﺊ اﻟﺒﺤﺮ اﻷﺣﻤﺮ‬
‫اﻟﯿﻤﻨﯿﺔ‪-‬ﻋﯿﺎدة اﻟﺪﻛﺘﻮر ﻋﺒﺪ اﻟﻘﺎدر اﻟﻌﺒﺴﻲ(‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ إدارة اﻟﻤﺨﺘﺒﺮات ﻟﻠﻤﺴﺘﺸﻔﻰ اﻟﻌﺴﻜﺮي ﻓﺮع اﻟﺤﺪﯾﺪة‪ .‬ﺑﺸﺒﻜﺔ ﻻﺳﻠﻜﯿﺔ‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ إدارة اﻟﻤﺨﺘﺒﺮات وﺗﻢ ﺗﺮﻛﯿﺐ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﻋﺪة ﻣﺴﺘﺸﻔﯿﺎت )ﻣﺴﺘﺸﻔﻰ اﻟﻜﻮﯾﺖ‬
‫اﻟﺘﻌﺎوﻧﻲ ‪-‬ﻣﺴﺘﺸﻔﻰ اﻟﺤﺪﯾﺪة اﻟﺘﺨﺼﺼﻲ ‪ -‬ﻣﺴﺘﺸﻔﻰ اﻟﺜﻮرة اﻟﻌﺎم‪ --‬ﻣﺴﺘﺸﻔﻰ اﻷﻣﻞ اﻟﺘﺨﺼﺼﻲ –‬
‫اﻟﻤﺴﺘﺸﻔﻰ اﻟﻌﺴﻜﺮي ﺑﺎﻟﺤﺪﯾﺪة ‪ -‬ﻣﺴﺘﺸﻔﻰ اﻟﻤﺨﺘﺎر‪ -‬ﻣﺨﺘﺒﺮ اﻟﻐﺎﻧﻢ – ﻣﺴﺘﻮﺻﻒ ﻧﺠﺎه ﺣﺠﺮ‪ -‬ﻣﺨﺘﺒﺮ‬
‫اﻟﻔﺎ اﻟﺪوﻟﻲ ﺑﺬﻣﺎر‪ -‬اﻟﮭﺎﺷﻢ ﺑﺼﻨﻌﺎء –واﻟﻌﺪﯾﺪ(‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ﻹدارة اﻟﺼﯿﺪﻟﯿﺔ وﺗﻢ ﺗﺮﻛﯿﺒﺔ ﺻﯿﺪﻟﯿﺔ )ﺳﮭﺎم – اﻟﺠﻤﯿﻞ – ﻣﺴﺘﺸﻔﻰ اﻟﺸﻔﺎء –‬
‫ﻣﺴﺘﻮﺻﻒ ﻧﺠﺎة ﺣﺠﺮ ‪ -‬واﻟﻌﺪﯾﺪ(‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺤﺎﺳﺒﻲ وﺗﻢ ﺗﺮﻛﯿﺒﺔ )ﻣﺆﺳﺴﺔ اﻟﺼﺎدق اﻟﻄﺒﯿﺔ – اﻟﻤﺤﯿﻂ ﻟﻠﻤﺴﺘﻠﺰﻣﺎت اﻟﻄﺒﯿﺔ –‬
‫ﻣﺜﻠﺚ ﻋﺎھﻢ ﻟﻠﻤﺴﺘﻠﺰﻣﺎت اﻟﻄﺒﯿﺔ ﺑﺤﺮض – ﻣﻄﻌﻢ اﻟﺸﺮق اﻷوﺳﻂ – ﻣﺤﻼت اﻷزرق ﻟﻠﺘﺠﺎرة و‬
‫اﻻﺳﺘﯿﺮاد ‪ -‬واﻟﻌﺪﯾﺪ(‪.‬‬
‫‪ ‬ﺗﻢ ﺗﺼﻤﯿﻢ ﺑﺮﻧﺎﻣﺞ ﻹدارة ﻣﺴﺘﻮﺻﻒ وﺗﻢ ﺗﺮﻛﯿﺒﺔ ﻟﻤﺴﺘﻮﺻﻒ )د‪ .‬ﻧﺠﺎه ﺣﺠﺮ – ﻣﺴﺘﻮﺻﻒ ﺗﮭﺎﻣﺔ‬
‫اﻟﻄﺒﻲ ﺑﺤﺮض(‪.‬‬
‫واﻟﻌﺪﯾﺪ‪...‬‬ ‫‪‬‬
‫اﻟﺒﺮﻣﺠﺔ وﺗﺤﻠﯿﻞ اﻟﻨﻈﻢ‪:‬‬
‫‪ ‬اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ‪ ).ORACEL‬ﺟﯿﺪ ﺟﺪاً(‬
‫‪ ‬اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ﻓﯿﺠﯿﻮال ﺑﯿﺴﻚ ‪ 6‬و ‪) .NET‬ﻣﻤﺘﺎز(‪.‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﺎﺳﺘﺨﺪام دوال ‪.API‬‬ ‫‪-‬‬
‫ﺑﺮﻣﺠﺔ اﻟﻤﻠﺘﻤﯿﺪﯾﺎ‪.‬‬ ‫‪-‬‬
‫ﺑﺮﻣﺠﺔ اﻟﺸﺒﻜﺎت‪.‬‬ ‫‪-‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪462‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺑﺮﻣﺠﺔ اﻟﺪوال واﻟﺨﻮارزﻣﯿﺎت‪.‬‬ ‫‪-‬‬
‫ﺑﺮﻣﺠﺔ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ) ‪(ADO‬‬ ‫‪-‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ‪) ASP .NET‬ﻣﻤﺘﺎز(‬ ‫‪-‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ‪ SQL‬وﺗﺼﻤﯿﻢ وﺗﻨﻔﯿﺬ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت )ﻣﻤﺘﺎز( ‪.‬‬ ‫‪-‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ‪) HTML, PHP, JAVA SCRIPT‬ﻣﻤﺘﺎز(‪.‬‬ ‫‪-‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ )ﺟﯿﺪ(‪.‬‬ ‫‪-‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ﺟﺎﻓﺎ‪ ,‬ﺑﯿﺴﻚ )اﻣﺘﯿﺎز(‪.‬‬ ‫‪-‬‬
‫اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ﺳﻲ و ﺳﻲ ‪) ++‬اﻣﺘﯿﺎز(‪.‬‬ ‫‪-‬‬
‫رﺗﺤﻠﯿﻞ وﺗﺼﻤﯿﻢ اﻟﻨﻈﻢ )ﺟﯿﺪ ﺟﯿﺪاً(‪.‬‬ ‫‪-‬‬
‫ﺳﺮﻋﺔ ﺗﻌﻠﻢ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ وﺳﺮﻋﺔ ﻓﻲ اﻛﺘﺴﺎب اﻟﺨﺒﺮة ﻓﯿﮭﺎ‪.‬‬
‫اﻟﻤﮭﺎرات )‪:(Skills‬‬
‫§ ﺳﺮﻋﮫ ﻓﻲ اﻹدراك وﺗﻨﻮﯾﻊ ﻣﺼﺎدر اﻟﺘﻌﻠﻢ واﻟﺘﻜﯿﻒ ﻣﻊ اﻟﺘﻄﻮﯾﺮ‪.‬‬
‫§ اﻹﺧﻼص ﻓﻲ اﻟﻌﻤﻞ واﻷﻣﺎﻧﺔ ﻓﻲ اﻷداء‪.‬‬
‫§ اﻟﻮﻻء ﻟﻠﻤﺆﺳﺴﺔ اﻟﺘﻲ أﻋﻤﻞ ﻓﯿﮭﺎ ﻣﻊ ﻋﺪم ﻧﺸﺮ أﺳﺮارھﺎ‪.‬‬
‫§ ﺳﺮﯾﻊ اﻻﻧﺪﻣﺎج ﻣﻊ ﻓﺮﯾﻖ اﻟﻌﻤﻞ‪.‬‬
‫§ أﺳﺘﻄﯿﻊ اﻟﻌﻤﻞ ﻓﻲ اﻟﻈﺮوف اﻟﻀﺎﻏﻄﺔ‪.‬‬
‫§ أﺣﺐ اﻟﺘﻄﻮر ‪ ,‬دﻗﯿﻖ ﻓﻲ اﻟﻮﻗﺖ ‪ ,‬ھﺎدئ اﻟﻤﺰاج ‪ ,‬ﺻﺒﻮر ‪ ,‬ﻣﺘﻌﺎون ‪ ,‬ﻣﺒﺘﮭﺞ ‪ ,‬ﺣﺴﻦ اﻟﺨﻠﻖ ‪,‬‬
‫ﻣﻌﺘﻤﺪ ﻋﻠﻰ اﻟﺬات‪.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪463‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪INTRODUCTION‬‬ ‫اﻟﻤﻘﺪﻣﺔ‬
‫اﻟﺤﻤﺪ ﷲ رب اﻟﻌﺎﻟﻤﯿﻦ ﺣﻤﺪاً ﯾﻮاﻓﻲ ﻧﻌﻤﺔ وﯾﻜﺎﻓﺊ ﻣﺰﯾﺪة اﻟﺤﻤﺪ ﷲ اﻟﺬي ﺧﻠﻖ اﻟﻈﻠﻤﺎت واﻟﻨﻮر وﺻﻠﻰ‬
‫اﷲ ﻋﻠﻰ ﺳﯿﺪ اﻟﺨﻠﻖ ﻣﻌﻠﻢ اﻟﻨﺎس اﻟﺨﯿﺮ ﺣﺒﯿﺒﻨﺎ وﺷﻔﯿﻌﻨﺎ ﻣﺤﻤﺪ ﺑﻦ ﻋﺒﺪ اﷲ اﻟﻨﺒﻲ اﻷﻣﻲ اﻟﺬي ﺑﺬا ﺑﺮﺳﺎﻟﺘﮫ‬
‫ب)اﻗﺮأ ﺑﺎﺳﻢ رﺑﻚ اﻟﺬي ﺧﻠﻖ اﻹﻧﺴﺎن ﻣﻦ ﻋﻠﻖ إﻗﺮاء ورﺑﻚ اﻷﻛﺮم اﻟﺬي ﻋﻠﻢ ﺑﺎﻟﻘﻠﻢ ( وﺧﺘﻤﮭﺎ ب)اﻟﯿﻮم‬
‫أﻛﻤﻠﺖ ﻟﻜﻢ دﯾﻨﻜﻢ وأﺗﻤﻤﺖ ﻋﻠﯿﻜﻢ ﻧﻌﻤﺘﻲ ورﺿﯿﺖ ﻟﻜﻢ اﻹﺳﻼم دﯾﻨﺎ( ﺻﺪق اﷲ اﻟﻌﻈﯿﻢ وﺑﻠﻎ رﺳﻮﻟﮫ‬
‫اﻟﻜﺮﯾﻢ وﻧﺤﻦ ﻋﻠﻰ ذﻟﻚ ﺷﺎھﺪﯾﻦ ﻣﻦ اﻟﯿﻮم إﻟﻰ ﯾﻮم اﻟﺪﯾﻦ‪ ,‬أﻣﺎ ﺑﻌﺪ‬

‫ﻧﻌﯿﺶ اﻟﯿﻮم ﻗﻲ ﻋﺼﺮ ﺗﺘﺴﺎرع ﺑﮫ اﻟﻌﻠﻮم واﻟﺘﻜﻨﻮﻟﻮﺟﯿﺎ ‪ ,‬وﺗﺘﺴﺎرع ﻣﻌﮭﺎ اﻟﻌﻠﻮم واﻟﻤﻌﺮﻓﺔ اﻹﻧﺴﺎﻧﯿﺔ‬
‫ﺑﺸﻜﻞ ﻟﻢ ﯾﺴﺒﻖ ﻟﮫ ﻣﺜﯿﻞ ﻓﻲ ﺗﺎرﯾﺦ اﻹﻧﺴﺎﻧﯿﺔ وﺗﺘﻀﺎﻋﻒ اﻟﻤﻌﺮﻓﺔ ﺣﺎﻟﯿﺎ ﺑﺸﻜﻞ ﻟﻮﻏﺎرﺗﻤﻲ ﻣﻊ ﻣﺮور ﻛﻞ‬
‫ﻋﻘﺪ ﻣﻦ اﻟﺰﻣﻦ وأﺻﺒﺤﺖ اﻟﻤﻌﻠﻮﻣﺎت ﺗﺘﺴﻊ واﻟﺒﺤﻮث واﻟﺪراﺳﺎت ﺗﺘﻌﻤﻖ وﺗﺼﺒﺢ أﻛﺜﺮ ﺗﻌﻘﯿﺪاً ﻓﻲ ﻋﺼﺮ‬
‫ﺗﻮﺻﻞ اﻟﻌﻘﻞ اﻟﺒﺸﺮي ﻓﯿﮫ إﻟﻰ ﺗﺴﺨﯿﺮ إﻣﻜﺎﻧﺎت اﻵﻟﺔ ﺿﻤﻦ ﻧﻈﺎم ﻣﺤﻜﻢ وﺑﺮﻣﺠﺔ ﻓﺎﻋﻠﺔ ﻟﺘﺄﻣﯿﻦ ﺧﺪﻣﺎت‬
‫ﻧﻤﻮه وﺗﻄﻮر ﺣﯿﺎﺗﮫ ﻧﺤﻮ اﻷﻓﻀﻞ‪.‬‬
‫وﻣﻊ ھﺬا اﻟﺘﻄﻮر واﻟﻨﻤﻮ ﻓﻲ ﺣﯿﺎة اﻹﻧﺴﺎن ﺑﻜﻞ أوﺟﮭﮭﺎ ﺑﺮز اﻟﺤﺎﺳﺐ ﻛﺄھﻢ ﻣﺆﺷﺮ ﻟﮭﺎ اﻟﻨﻤﻮ‪ ,‬ﺑﻞ أﺻﺒﺢ‬
‫اﻟﺤﺎﺳﺐ ﻣﻘﯿﺎﺳﺎً ﻟﺴﻤﺔ ﻋﺼﺮ اﻟﻌﻠﻮم واﻟﺘﻜﻨﻮﻟﻮﺟﯿﺎ وﻣﻮﺟﮭﺎ ﻟﺘﻘﺪم وﺣﻀﺎرة اﻷﻣﺔ‪ ,‬وﻻ ﯾﻤﻜﻦ ﻷﻣﺔ ﻣﻦ‬
‫اﻷﻣﻢ ﻓﻲ ﻋﺼﺮﻧﺎ اﻟﺤﺎﻟﻲ اﻟﻠﺤﺎق ﺑﺮﻛﺐ اﻟﺤﻀﺎرة اﻟﺘﻜﻨﻮﻟﻮﺟﯿﺔ وﺗﺄﻣﯿﻦ ﺣﯿﺎة أﻓﻀﻞ ﻟﺸﻌﻮﺑﮭﺎ دون‬
‫اﻟﺴﯿﻄﺮة واﻟﺘﺤﻜﻢ ﻓﻲ ھﻨﺪﺳﺔ اﻟﺤﺎﺳﺐ وﻋﻠﻮم اﻟﺤﺎﺳﺐ اﻻﻟﻜﺘﺮوﻧﻲ‪.‬‬

‫ﻟﻤﻮاﺟﮭﺔ ذﻟﻚ رأﯾﻨﺎ ﺿﺮورة ﺗﺄﻟﯿﻒ ھﺬا اﻟﻜﺘﺎب ﻓﻠﻘﺪ أﻧﺸﺄﻧﺎ ﺑﺴﺒﺐ ﻗﻠﺔ ﻛﺘﺐ ھﺬه اﻟﻤﺎدة ﺑﺎﻟﻐﺔ اﻟﻌﺮﺑﯿﺔ و‬
‫ﺗﯿﺴﯿﺮاُ ﻹﺧﻮاﻧﻨﺎ اﻟﺬﯾﻦ ﺻﻌﺒﺖ ﻋﻠﯿﮭﻢ ﻓﮭﻢ ھﺬه اﻟﻤﺎدة وﺗﺒﺴﯿﻂ ﻟﮭﻢ ﻣﻌﻨﻰ ھﺬه اﻟﻤﺎدة واﻻﺳﺘﻔﺎدة اﻟﻜﺎﻣﻠﺔ‬
‫ﻣﻦ اﻹﻣﻜﺎﻧﺎت اﻟﺘﻲ ﺗﻮﻓﺮھﺎ ﻟﻐﺔ ‪ Java‬واﻋﻠﻤﻮا أن ﻛﻞ ﻣﺎ ﻛﺘﺐ ھﻮ ﺧﻼﺻﺔ وﻟﺐ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ‪Java‬‬
‫وﻗﺪ ﺗﻤﯿﺰ ھﺬا اﻟﻜﺘﺎب‬
‫‪ .1‬ﺳﮭﻮﻟﺔ اﻟﺘﻌﺒﯿﺮ ﺑﺎﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ‪.‬‬
‫‪ .2‬إﺛﺒﺎت اﻟﻤﺼﻄﻠﺤﺎت اﻻﻧﺠﻠﯿﺰﯾﺔ ﺣﯿﺜﻤﺎ ﻟﺰم ﻟﺘﻜﻮن ﻋﻮﻧﺎ ﻟﻠﻘﺎرئ ﻋﻨﺪ اﻟﺤﺎﺟﺔ ﻟﻺﻃﻼع ﻋﻠﻰ‬
‫ﻛﺘﺐ أﺟﻨﺒﯿﺔ ﻓﻲ ﻣﺠﺎل اﻟﻜﺘﺎب‪.‬‬
‫‪ .3‬أﺗﺒﺎع اﻟﺸﻤﻮﻟﯿﺔ ﻓﻲ أﻋﺪاد ﻣﺤﺘﻮى اﻟﻜﺘﺎب واﻟﺘﻮﺿﯿﺢ اﻟﻼزم‬
‫‪ .4‬اﻹﻛﺜﺎر ﻣﻦ اﻷﻣﺜﻠﺔ اﻟﻤﺘﻨﻮﻋﺔ اﻟﻤﺤﻠﻮﻟﺔ ﻟﻤﺎ ﻟﮭﺎ ﻣﻦ أھﻤﯿﺔ ﻓﻲ ﺗﻮﺿﯿﺢ ﻣﻌﺎﻧﻲ اﻟﻤﻔﺎھﯿﻢ اﻟﺘﻲ‬
‫ﺗﻀﻤﻨﮭﺎ اﻟﻜﺘﺎب اﻷﻣﺮ اﻟﺬي ﯾﺆدي اﺳﺘﯿﻌﺎب اﻟﻤﻮﺿﻮع اﺳﺘﯿﻌﺎب ﺷﺎﻣﻼً‪.‬‬

‫ﻓﯿﺘﻨﺎول ھﺬا اﻟﻜﺘﺎب ﻣﻮﺿﻮﻋﺎت ﻣﺘﻌﺪدة ﻟﻮﺻﻒ‬


‫‪ .1‬أﺳﺎﺳﯿﺎت اﻟﻠﻐﺔ‪.‬‬
‫‪ .2‬اﻟﺒﺮﻣﺠﺔ اﻟﻤﻮﺟﮭﺔ ﺑﻠﻐﺔ ‪. OOP In Java‬‬
‫‪ .3‬ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت‪.‬‬

‫وﻟﻘﺪ وﺛﻘﺖ ھﺬه اﻟﻤﻮاﺿﯿﻊ ﺑﺒﺮاﻣﺞ ﻋﻠﻤﯿﺔ ﻃﺒﻘﺖ ﺟﻤﯿﻌﮭﺎ ﻟﻠﺘﺄﻛﺪ ﻣﻦ ﺻﺤﺘﮭﺎ وأﯾﻀﺎً وﺗﻘﺖ ﺑﺎﻟﺮﺳﻮم اﻟﺒﯿﺎﻧﯿﺔ‬
‫ﻟﺘﺮﺳﯿﺦ اﻟﻔﻜﺮ ﻓﻲ ذھﻦ اﻟﻘﺎرئ‪.‬‬

‫وأﺧﯿﺮاُ ﻧﺴﺄل اﷲ أن ﯾﺤﻘﻖ ھﺬا اﻟﻜﺘﺎب اﻟﮭﺪف اﻟﺬي ﻛﺘﺐ ﻷﺟﻠﮫ وﯾﻌﻠﻢ اﷲ أن ﻏﺎﯾﺘﻨﺎ ﻓﻲ ھﺬا أن ﯾﻌﻢ‬
‫اﻟﻔﺎﺋﺪة ﻓﻲ أرض اﻟﻤﺴﻠﻤﯿﻦ وﻛﻞ ﻣﺴﻠﻢ وﻣﺴﻠﻤﺔ ﻃﺎﻟﺒﺎُ ﻣﻨﻜﻢ دﻋﻮه ﺻﺎﻟﺤﺔ ﻓﻲ ﻇﮭﺮ اﻟﻐﯿﺐ وان ﺗﺼﻠﻮا‬
‫وﺗﺴﻠﻤﻮا ﻋﻠﻰ ﻣﻦ ﻋﻠﻤﻨﺎ وأﻧﺒﺎﻧﺎ ﻧﺒﯿﻨﺎ ﻣﺤﻤﺪ ﺣﺒﯿﺐ ﻗﻠﺒﻨﺎ أﻟﻒ ﻣﻠﯿﻮن ﺻﻼة وﺳﻼم ﻣﻦ رب اﻟﻌﺒﺎد ﻋﺪد‬
‫ﺗﺤﺮﯾﺮ اﻟﺴﻄﻮر وﻋﺪد اﻟﻤﺨﻠﻮﻗﺎت واﻟﻤﺨﻠﻮق ﺻﻼه داﺋﻤﺔ ﻣﻦ اﻟﯿﻮم إﻟﻰ ﯾﻮم اﻟﻨﺸﻮر ‪.‬‬
‫واﺳﺄل اﷲ أن ﯾﺒﺎرك ﻟﻨﺎ وﻟﻜﻢ ﻓﻲ ﻛﻞ ﻣﺎ ﻛﺘﺒﻨﺎه و ﺗﻌﻠﻤﻨﺎه وﺗﻌﻠﻤﺘﻤﻮه ‪.‬‬
‫واﻟﺤﻤﺪ ﷲ ‪.....‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪464‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﻟﻤﺎذا ھﺬا اﻟﻜﺘﺎب ؟‬
‫ﯾﺘﻤﯿﺰ ھﺬا اﻟﻜﺘﺎب ﻋﻦ ﻏﯿﺮة ﻣﻦ اﻟﻜﺘﺐ اﻟﺘﻲ ﺗﺘﺨﺬ ﻣﻦ ﻟﻐﺔ ‪ Java‬أﺳﺎﺳﺎَ ﻟﮭﺎ ﻓﻲ أﻧﺔ ﯾﺘﻤﺘﻊ ﺑﺎﻟﺸﻤﻮﻟﯿﺔ‬
‫واﻟﺘﻜﺎﻣﻠﯿﺔ ‪ ,‬إذ ﯾﻨﺬر أن ﺗﺠﺪ ﻛﺘﺎﺑﺎً ﯾﻐﻄﻲ ﻣﻌﻈﻢ ﻣﻮاﺿﯿﻊ اﻟﻠﻐﺔ ‪ ,‬أﺿﻒ إﻟﻰ ذﻟﻚ أﻧﺔ ﯾﺘﺒﻊ اﻟﻄﺮﯾﻘﺔ‬
‫اﻟﻌﻠﻤﯿﺔ ﻓﻲ ﻃﺮح ﻟﻠﻤﻮاﺿﯿﻊ وﺑﺸﻜﻞ ﻣﺘﻜﺎﻣﻞ ‪ ,‬ﻓﮭﻮ ﻻ ﯾﻌﺘﻤﺪ اﻋﺘﻤﺎداً ﻛﺒﯿﺮاً ﻋﻠﻰ اﻟﺸﺮوح اﻟﻨﻈﺮﯾﺔ وإﻧﻤﺎ‬
‫ﯾﺮﻛﺰ ﻛﺜﯿﺮا ﻋﻠﻰ ﺷﺮح ﻣﻤﯿﺰات اﻟﻠﻐﺔ ﻣﻦ ﺧﻼل اﻟﺒﺮاﻣﺞ اﻟﻌﻤﻠﯿﺔ ﺑﺤﯿﺚ ﯾﺨﺮج اﻟﻘﺎرئ ﺑﻔﺎﺋﺪﺗﯿﻦ ‪:‬‬
‫اﻷوﻟﻰ اﻧﮫ ﺗﻌﻠﻢ اﻟﻔﻜﺮة وﻣﺎرس ﺗﻄﺒﯿﻘﮭﺎ اﻟﻌﻤﻠﻲ ﻣﺒﺎﺷﺮة ‪ ,‬واﻟﺜﺎﻧﯿﺔ اﻧﮫ اﺳﺘﻔﺎد ﻣﻦ اﻟﺘﻘﻨﯿﺔ اﻟﺒﺮﻣﺠﯿﺔ‬
‫اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ اﻟﻤﺜﺎل‪.‬‬

‫ﯾﺤﺘﻮي ھﺬا اﻟﻜﺘﺎب ﻋﻠﻰ ___ ﺑﺮﻧﺎﻣﺠﺎً ‪ ,‬وﺳﻮف ﺗﺠﺪ ھﺬه اﻷﻣﺜﻠﺔ ﻗﯿﻤﺔ ﺟﺪاً ﻋﻨﺪﻣﺎ ﺗﺪرس ﻣﻜﻮﻧﺎﺗﮭﺎ‬
‫ﺑﺸﻜﻞ ﺟﯿﺪ‪ ,‬ﻓﻘﺪ ﺷﺮﺣﺖ ﻣﻌﻈﻢ اﻹﺟﺮاءات واﻟﺘﻮاﺑﻊ و اﻟﻌﺒﺎرات اﻟﻤﻜﻮﻧﺔ ﻟﻠﺒﺮاﻣﺞ ﺑﺎﻟﺘﻔﺼﯿﻞ ‪ ,‬إﺿﺎﻓﺔ‬
‫إﻟﻰ ذﻟﻚ أ‪ ،‬اﻟﻜﺘﺎب ﯾﻄﺮح اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﻤﻘﺘﺮﺣﺎت واﻷﻓﻜﺎر واﻷﺧﻄﺎء اﻟﺸﺎﺋﻌﺔ واﻟﻌﺎدات اﻟﺒﺮﻣﺠﯿﺔ اﻟﺠﯿﺪة‬
‫اﻟﺘﻲ ﯾﻤﻜﻦ ﻣﻦ ﺧﻼﻟﮭﺎ زﯾﺎدة ﻣﺪى اﻻﺳﺘﻔﺎدة ﻣﻦ اﻷﻣﺜﻠﺔ ‪.‬‬
‫وﺑﻌﺪ أن ﺗﻨﺘﮭﻲ ﻣﻦ ﻗﺮاءة اﻟﻜﺘﺎب ﺳﻮف ﺗﻜﻮن ﻗﺪ ﺗﻌﻠﻤﺖ ﺟﻤﯿﻊ اﻟﺼﯿﻎ اﻟﻜﺘﺎﺑﯿﺔ ﻟﮭﺬت اﻟﻠﻐﺔ وﻛﺬﻟﻚ ﻗﺪ‬
‫اﻣﺘﻠﻜﺖ اﻟﺨﺒﺮة اﻟﻜﺎﻓﯿﺔ ودرﺳﺖ اﻟﻄﺮاﺋﻖ اﻟﺼﺤﯿﺤﺔ ﻟﻜﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺗﺮﯾﺪ‪.‬‬

‫ﻛﯿﻒ ﻧﻈﻢ ھﺬا اﻟﻜﺘﺎب‬

‫ﻟﻘﺪ ﻧﻈﻢ ھﺬا اﻟﻜﺘﺎب وﻓﻖ ﻃﺮﯾﻘﺔ ﺳﮭﻠﮫ اﻟﻤﺘﺎﺑﻌﺔ‪ ,‬ﻓﮭﻮ ﻻ ﯾﻔﺘﺮض وﺟﻮد ﺧﺒﺮة ﺑﺮﻣﺠﯿﺔ ﻣﺴﺒﻘﺔ ﻟﺪى‬
‫اﻟﻘﺎرئ وﻣﻊ ذﻟﻚ ﻓﮭﻮ ﯾﻄﺮح ﻣﻮاﺿﯿﻊ ﻣﺘﻘﺪﻣﺔ ﺗﺠﻌﻞ ﻣﻦ اﻟﻜﺘﺎب ﺣﺎﺟﺔ ﻟﻠﻤﺒﺘﺪﺋﯿﻦ واﻟﻤﺘﻘﺪﻣﯿﻦ‪.‬‬
‫وﻟﻘﺪ رﺗﺒﺖ ﻣﻮاﺿﯿﻊ وﻓﺼﻮل اﻟﻜﺘﺎب ﻟﻜﻲ ﺗﺴﯿﺮ ﺑﺎﻟﻘﺎرئ ﺑﺨﻄﻰ ﺛﺎﺑﺘﺔ ﺑﺎﺗﺠﺎه ﺗﻌﻠﻢ ﻟﻐﺔ ‪ Java‬وﺑﻨﺎ‬
‫ﺧﺒﺮات ﺑﺮﻣﺠﯿﺔ ﺗﻌﯿﻨﮫ ﻋﻠﻰ ﻛﺘﺎﺑﺔ ﺑﺮاﻣﺠﮫ ﻻﺣﻘﺎً‪.‬‬

‫اﻷھﺪاف‬
‫ﯾﺒﺪأ ﻛﻞ ﻓﺼﻞ ﺑﻤﺠﻤﻮﻋﺔ ﻣﻦ اﻷھﺪاف اﻟﺘﻲ ﺗﺨﺒﺮ اﻟﻘﺎرئ ﻋﻤﺎ ﯾﺠﺐ أن ﯾﻌﺮﻓﮫ ﻓﻲ ھﺬا اﻟﻔﺼﻞ ﻛﻤﺎ إﻧﮭﺎ‬
‫ﺗﻌﻄﯿﮫ اﻟﻔﺮﺻﺔ ﺑﻌﺪ ﻗﺮاءة اﻟﻔﺼﻞ ﺑﺄن ﯾﺤﺪد ﺑﻨﻔﺴﮫ ﻓﯿﻤﺎ إذا ﻛﺎن ﻗﺪ ﺗﻮﺻﻞ ﻓﻌﻠﯿﺎ ﻋﻦ ھﺬه اﻷھﺪاف أم ﻻ‪.‬‬
‫ﯾﺴﺎﻋﺪ ﺗﺤﺪﯾﺪ ھﺬه اﻷھﺪاف ﻋﻠﻰ ﺑﻨﺎء اﻟﺜﻘﺔ اﻟﺬاﺗﯿﺔ ﻟﻠﻘﺎرئ وﺗﺸﻜﻞ ﻟﮫ ﻣﺼﺪرا إﯾﺠﺎﺑﯿﺎ ﻟﻠﺘﻘﻮﯾﺔ ‪.‬‬

‫ﻟﻤﻦ ھﺬا اﻟﻜﺘﺎب‬

‫ﻟﻘﺪ اﻋﺪ ھﺬا اﻟﻜﺘﺎب ﻟﯿﻠﺒﻲ ﺣﺎﺟﺎت ﻓﺌﺎت اﻟﻘﺮاء اﻟﺜﻼث وﻣﻌﻠﻰ ﻛﺎﻓﺔ ﻣﺴﺘﻮﯾﺎﺗﮭﻢ ‪:‬‬
‫ﻓﺎﻟﻤﺒﺘﺪﺋﻮن اﻟﺬﯾﻦ ﻟﯿﺲ ﻟﮭﻢ ﺳﺎﺑﻖ ﻋﮭﺪ ﻓﻲ اﻟﺒﺮﻣﺠﺔ ‪ ,‬واﻟﺬﯾﻦ ﯾﺮﻏﺒﻮن ﺑﺎﻟﺒﺪء ﺑﺘﻌﻠﻢ ھﺬه اﻟﻠﻐﺔ ‪,‬‬ ‫‪-1‬‬
‫ﻓﯿﺘﯿﺢ ﻟﮭﻢ ھﺬا اﻟﻜﺘﺎب ﻓﺮﺻﺔ ﺗﻌﻠﻢ ﻗﻮاﻋﺪ اﻟﺒﺮﻣﺠﺔ اﻟﺼﺤﯿﺤﺔ ‪ ,‬وﺗﻌﻠﻢ ھﺬه اﻟﻠﻐﺔ ﺑﺎﻟﺸﻜﻞ‬
‫اﻷﻣﺜﻞ ‪.‬‬
‫أﻣﺎ ﻣﻦ ﻟﮭﻢ ﺳﺎﺑﻖ ﻓﻲ ﻋﮭﺪ اﻟﺒﺮﻣﺠﺔ وﻟﻜﻦ ﻟﯿﺲ ﻟﮭﻢ اﻃﻼع ﻋﻠﻰ ھﺬه اﻟﻠﻐﺔ ﻓﯿﺄﺗﻲ ھﺬا اﻟﻜﺘﺎب‬ ‫‪-2‬‬
‫دﻟﯿﻼً ﻣﺘﻜﺎﻣﻼً ﯾﺴﺘﻄﯿﻌﻮن اﻟﻤﺘﺎﺑﻌﺔ ﻣﻦ ﺧﻼﻟﮫ ﺑﺨﻄﻮات ﺳﺮﯾﻌﺔ ‪ ,‬ﻓﺘﺘﺸﻜﻞ ﻟﺪﯾﮭﻢ أرﺿﯿﺔ‬
‫ﺑﺮﻣﺠﯿﺔ ﺟﯿﺪة ﻣﻦ ﺧﻼل ھﺬا اﻟﻜﺘﺎب‪.‬‬
‫وﻟﻤﻦ ﻟﮭﻢ ﺳﺎﺑﻖ ﻋﮭﺪ ﺑﻠﻐﺔ ‪ Java‬ﯾﻘﺪم ھﺬا اﻟﻜﺘﺎب ﻟﮭﻢ ﻣﻦ اﻷﻓﻜﺎر واﻟﻤﻮاﺿﯿﻊ اﻟﻤﺘﻘﺪﻣﺔ ﻣﺎ‬ ‫‪-3‬‬
‫ﯾﻨﺬر أن ﯾﺠﺪوه ﻓﻲ أي ﻛﺘﺎب ‪ ,‬وﺳﯿﺸﻌﺮون ﺑﺎﻟﺤﺎﺟﺔ إﻟﻰ اﻻﺣﺘﻔﺎظ ﺑﻨﺴﺨﺔ اﻟﻜﺘﺎب ﻗﺮﯾﺒﺔ ﻣﻨﮭﻢ‬
‫ﻋﻨﺪ ﻛﺘﺎﺑﺔ ﺑﺮاﻣﺠﮭﻢ‪.‬‬

‫اﻟﻄﺮﯾﻘﺔ اﻟﻤﺜﻠﻰ ﻓﻲ ﻗﺮاءة اﻟﻜﺘﺎب‬

‫ﯾﻌﺘﻤﺪ اﻟﻜﺘﺎب ﻓﻲ ﻃﺮﺣﮫ ﻟﻠﻤﻮاﺿﯿﻊ ﻋﻠﻰ ﻋﺪة اﻋﺘﺒﺎرات ﯾﻨﺒﻐﻲ ﺗﻮﻓﺮھﺎ ﻋﻨﺪ اﻟﻘﺎرئ ﻟﻜﻲ ﯾﺴﺘﻔﯿﺪ اﺳﺘﻔﺎدة‬
‫ﻣُﺜﻠﻰ ﻣﻦ اﻟﻜﺘﺎب‪ .‬إذ ﯾﻨﺒﻐﻲ أوﻻً ﻗﺮاءة اﻟﻤﻘﺪﻣﺔ اﻟﻨﻈﺮﯾﺔ ﻋﻦ اﻟﻤﻮﺿﻮع ‪ ,‬وﻣﻦ ﺛﻢ ﺗﺠﺮﯾﺐ اﻟﻤﺜﺎل ﻋﻠﻰ‬
‫اﻟﺤﺎﺳﺐ ﺿﻤﻦ ﺑﯿﺌﺔ ال‪ , Java‬وذﻟﻚ ﻣﻦ ﺧﻼل ﻗﯿﻢ اﻟﺪﺧﻞ اﻟﻤﻘﺘﺮﺣﺔ وﻣﺮاﻗﺒﺔ اﻟﺨﺮج اﻟﻨﺎﺗﺞ وﻣﻦ ﺗﻢ‬
‫ﺗﺘﺒﻊ ﺷﺮح اﻟﺒﺮﻧﺎﻣﺞ ﺿﻤﻦ اﻟﻜﺘﺎب ‪.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪465‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺛﺎﻧﯿﺎَ ﯾﻨﺒﻐﻲ اﻻﺳﺘﺠﺎﺑﺔ ﻟﻠﺘﻮﺻﯿﺎت اﻟﻤﻄﺮوﺣﺔ وإﺟﺮاء اﻟﺘﻌﺪﯾﻼت اﻟﻤﻘﺘﺮﺣﺔ وﺗﺠﻨﺐ اﻷﺧﻄﺎء اﻟﺸﺎﺋﻌﺔ ‪.‬‬

‫اﻟﻘﺮص اﻟﻤﺮﻓﻖ‬
‫ﻟﻘﺪ أرﻓﻘﻨﺎ اﻟﻜﺘﺎب ﺑﻘﺮص ﯾﺤﻮي ﻣﺎ ﯾﻠﻲ‪:‬‬
‫‪ -1‬ﺑﺮاﻣﺞ اﻷﻣﺜﻠﺔ اﻟﻤﺬﻛﻮرة ﻓﻲ اﻟﻜﺘﺎب ﻛﺎﻣﻠﺔ‪ ,‬ووﺿﻌﺖ اﻟﺒﺮاﻣﺞ ﻓﻲ أدﻟﺔ ﺗﺸﯿﺮ إﻟﻰ رﻗﻢ اﻟﻔﺼﻞ‬
‫اﻟﺤﺎوي ﻟﻠﻤﺜﺎل ‪ +‬رﻗﻢ اﻟﻤﺜﺎل ﻓﻲ ذﻟﻚ اﻟﻔﺼﻞ ‪ ,‬ﻓﺎﻟﻤﻠﻒ ‪ chp1_1‬ﯾﺸﯿﺮ إﻟﻰ اﻟﻔﺼﻞ اﻷول اﻟﻤﺜﺎل‬
‫اﻷول ‪.‬‬

‫ﺧﺘﺎﻣ ًﺎ‬
‫ﻧﺮﺟﻮ ﻣﻦ اﻟﻘﺎرئ اﻟﻜﺮﯾﻢ أن ﻻ ﯾﺒﺨﻞ ﻋﻠﯿﻨﺎ ﺑﺪﻋﻮة ﺻﺎﻟﺤﺔ ﻓﻲ ﻇﮭﺮ اﻟﻐﯿﺐ وﻧﺼﺎﺋﺤﮫ وﻣﻘﺘﺮﺣﺎﺗﮫ ‪,‬‬
‫ﻓﻨﺤﻦ ﻧﺮﺣﺐ ﺑﻜﻞ ﻣﻘﺘﺮح وﺗﺴﺎؤل ﺳﻌﯿﺎً إﻟﻰ ﺗﺤﻘﯿﻖ اﻟﺘﻮاﺻﻞ اﻷﻣﺜﻞ ‪.‬‬
‫وﺑﻌﺪ أﺗﻤﻨﻰ ﻣﻦ اﷲ ﻧﻜﻮن ﻗﺪ وﻓﻘﻨﺎ ﻓﻲ ﻣﺎ ﻗﻤﻨﺎ ﺑﮫ ﻣﻦ ﻋﻤﻞ ‪ ,‬وأن ﯾﺘﻘﺒﻠﮫ ﻣﻨﺎ إﻧﮫ ﺳﻤﯿﻊ ﻋﻠﯿﻢ وﺻﻠﻰ اﷲ‬
‫ﻋﻠﻰ ﺳﯿﺪﻧﺎ ﻣﺤﻤﺪ وﻋﻠﻰ اﻟﮫ وﺻﺤﺒﺔ أﺟﻤﻌﯿﻦ‪.‬‬

‫اﻟﻤﺆﻟﻒ‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪466‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 1‬ﺍﻟﻔﺼل ﺍﻷﻭل ﻤﻘﺩﻤﺔ ﺤﻭل ﺍﻟﺤﺎﺴﺏ ﺍﻵﻟﻲ ﻭﺍﻟﺒﺭﻤﺠﺔ ‪43---------------------------------------------------------------‬‬

‫‪ 1.1‬ﻤﻘﺩﻤﺔ ‪44----------------------------------------------------------------------------------------------------‬‬
‫‪ 1.2‬ﺨﺼﺎﺌﺹ ﺍﻟﺤﺎﺴﻭﺏ ‪44-----------------------------------------------------------------------------------------‬‬
‫‪ 1.3‬ﺘﺼﻨﻴﻑ ﺍﻟﺤﺎﺴﺒﺎﺕ ﺍﻻﻟﻜﺘﺭﻭﻨﻴﺔ ‪45------------------------------------------------------------------------------‬‬
‫‪ 1.3.1‬ﻤﻥ ﺤﻴﺙ ﻗﺩﺭﺘﻬﺎ ﻋﻠﻰ ﺍﻟﺘﺨﺯﻴﻥ ﻭ ﻜﻔﺎﺀﺘﻬﺎ ﻓﻲ ﺇﻨﺠﺎﺯ ﺍﻟﻤﻬﺎﻡ ‪45 ---------------------------------------‬‬
‫‪ 1.3.2‬ﻤﻥ ﺤﻴﺙ ﻁﺭﻴﻘﺔ ﺍﻟﻌﻤل ‪48 ------------------------------------------------------------------------‬‬
‫‪ 1.3.3‬ﻤﻥ ﺤﻴﺙ ﻁﺒﻴﻌﺔ ﺃﻏﺭﺍﺽ ﺍﻻﺴﺘﻌﻤﺎل ‪49 -----------------------------------------------------------‬‬
‫‪ 1.4‬ﺘﻁﻭﺭ ﺍﻟﺤﺎﺴﻭﺏ‪49---------------------------------------------------------------------------------------------‬‬
‫‪ 1.5‬ﺃﺠﻴﺎل ﺍﻟﺤﺎﺴﺏ ‪50----------------------------------------------------------------------------------------------‬‬
‫‪ 1.5.1‬ﺍﻟﺠﻴل ﺍﻷﻭل )‪50 ------------------------------------------------- (FIRST GENERATION‬‬
‫‪ 1.5.2‬ﺍﻟﺠﻴل ﺍﻟﺜﺎﻨﻲ )‪51 --------------------------------------------- (SECOND GENERATION‬‬
‫‪ 1.5.3‬ﺍﻟﺠﻴل ﺍﻟﺜﺎﻟﺙ )‪51 ----------------------------------------------- (THIRD GENERATION‬‬
‫‪ 1.5.4‬ﺍﻟﺠﻴل ﺍﻟﺭﺍﺒﻊ )‪52 -------------------------------------------- (FOURTH GENERATION‬‬
‫‪ 1.5.5‬ﺍﻟﺠﻴل ﺍﻟﺨﺎﻤﺱ )‪53 ----------------------------------------------- (GENERATION FIFTY‬‬
‫‪ 1.6‬ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﻴﺤﺎﻜﻲ ﺍﻹﻨﺴﺎﻥ ‪..‬ﻜﻴﻑ ؟ ‪54-------------------------------------------------------------------------‬‬
‫‪ 1.7‬ﻤﻜﻭﻨﺎﺕ ﻨﻅﺎﻡ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺭﻗﻤﻲ ‪56-----------------------------------------------------------------------------‬‬
‫‪ 1.7.1‬ﻭﺤﺩﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺭﻜﺯﻴﺔ ‪58 ------------------------------- -------------------------------- CPU‬‬
‫‪ 1.7.2‬ﻭﺤﺩﺓ ﺍﻟﺤﺴﺎﺏ ﻭ ﺍﻟﻤﻨﻁﻕ ‪60 ------------------------------- -------------------------------- ALU‬‬
‫‪ 1.7.3‬ﻭﺤﺩﺓ ﺍﻟﺘﺤﻜﻡ )‪65 ------------------------------------------------------- (CONTROL UNIT‬‬
‫‪ 1.7.4‬ﺘﺭﻜﻴﺏ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ ‪72 ----------------------------------------------------------------------‬‬
‫‪ 1.7.5‬ﻭﺤﺩﺍﺕ ﺍﻹﺩﺨﺎل ‪90 ---------------------------------------------------------- INPUT UNITE‬‬
‫‪ 1.7.6‬ﺍﻟﻜﺘﺎﺒﺔ ﺒﺎﻟﻘﻠﻡ ﺍﻟﻌﺭﺒﻲ ﺍﻹﻟﻜﺘﺭﻭﻨﻲ ‪102 ----------------------------- --------------------------------‬‬
‫‪ 1.8‬ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﻭﻤﺘﺎﻋﺏ ﺍﻟﻤﻬﻨﺔ ‪103 --------------------------------------------------------------------------------‬‬
‫‪ 1.9‬ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﻴﺎﺕ ‪104 ----------------------------------------------------------------- PROGRAMMING‬‬
‫‪ 1.9.1‬ﻨﺒﺫﺓ ﺘﺎﺭﻴﺨﻴﺔ ﻋﻥ ‪C‬ﻭ ‪107 --------------------------------------------------------------- C++‬‬
‫‪ 1.9.2‬ﻨﺒﺫﺓ ﺘﺎﺭﻴﺨﻴﺔ ﻋﻥ ‪110 ------------------ FORTRAN , COBOL , PASCAL AND ADA‬‬
‫‪ 1.9.3‬ﻟﻐﺎﺕ ‪VISUAL BASIC‬ﻭ ‪VISUAL C++‬ﻭ‪ C#‬ﻭ ‪112 ------------------------- BASIC‬‬
‫‪ 1.10‬ﻨﻅﻡ ﺍﻟﺘﺸﻐﻴل ‪115 ------------------------------------------------------------OPERATING SYSTEMS‬‬
‫‪ 1.10.1‬ﺃﻨﻭﺍﻉ ﻨﻅﻡ ﺍﻟﺘﺸﻐﻴل ‪115 -----------------------------------------------------------------------‬‬
‫ﻤﻬﺎﻡ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ‪117 -----------------------------------------------------------------------‬‬ ‫‪1.10.2‬‬
‫‪ 1.10.3‬ﻤﻭﻗﻊ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻓﻲ ﺍﻟﺤﺎﺴﺏ ‪118 -----------------------------------------------------------‬‬
‫‪ 1.11‬ﺨﻁﻭﺍﺕ ﺤل ﻤﺴﺄﻟﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺤﺎﺴﺏ ‪119 -----------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪125 --------------------------------------------------------------------------------------------------‬‬

‫‪ 2‬اﻟﻔﺼﻞ اﻟﺜﺎﻧﻲ‪ :‬اﻟﺨﻮارزﻣﯿﺎت ‪127 ------------------------------------------------------------------------------------‬‬

‫‪ 2.1‬ﻤﻘﺩﻤﺔ ‪127 ---------------------------------------------------------------------------------------------------‬‬


‫‪ 2.2‬ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ‪127 ---------------------------------------------------------------------------------------------‬‬
‫‪ 2.2.1‬ﺨﺼﺎﺌﺹ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ‪129 --------------------------------------------------------------------‬‬
‫‪ 2.3‬ﻤﻔﻬﻭﻡ ﺨﺭﺍﺌﻁ ﺴﻴﺭ ﺍﻟﻌﻤﻠﻴﺎﺕ ‪129 ------------------------------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪467‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 2.3.1‬ﻓﻭﺍﺌﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺨﺭﺍﺌﻁ ﺴﻴﺭ ﺍﻟﻌﻤﻠﻴﺎﺕ ‪130 ---------------------------------------------------------‬‬
‫‪ 2.4‬ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﺍﻟﻤﻌﺎﻟﺠﺔ ﻭﺃﻨﻭﺍﻋﻬﺎ ‪131 -----------------------------------------------------------------------------‬‬
‫‪ 2.5‬ﺍﻟﺒﺭﺍﻤﺞ ﻭ ﺃﻨﻭﺍﻋﻬﺎ ‪133 ----------------------------------------------------------------------------------------‬‬
‫‪ 2.6‬ﺘﺼﻨﻴﻑ ﺨﺭﺍﺌﻁ ﺴﻴﺭ ﺍﻟﻌﻤﻠﻴﺎﺕ ‪134 -----------------------------------------------------------------------------‬‬
‫‪ 2.6.1‬ﺨﺭﺍﺌﻁ ﺍﻟﺩﻭﺭﺍﻨﺎﺕ ﺍﻟﻤﺘﺩﺍﺨﻠﺔ )‪134 -------------------------------------------------- .(NESTED‬‬
‫‪ 2.6.2‬ﺨﺭﺍﺌﻁ ﺍﻟﺘﺘﺎﺒﻊ ﺍﻟﺒﺴﻴﻁ ‪134 -----------------------------------------------------------------------‬‬
‫‪ 2.6.3‬ﺨﺭﺍﺌﻁ ﺍﻟﺘﻔﺭﻉ ‪137 ------------------------------------------------------------------------------‬‬
‫‪ 2.6.4‬ﺨﺭﺍﺌﻁ ﺍﻟﺩﻭﺭﺍﻥ )ﺍﻟﺘﻜﺭﺍﺭ( ﺍﻟﺒﺴﻴﻁ ‪141 ---------------------------- --------------------------------‬‬
‫‪ 2.6.5‬ﺍﻟﻌﺩﺍﺩ )‪142 -------------------------------------------------------------------- (COUNTER‬‬
‫‪ 2.6.6‬ﺨﺭﺍﺌﻁ ﺍﻟﺩﻭﺭﺍﻥ ﺍﻟﻤﺘﺩﺍﺨﻠﺔ ‪146 ----------------------------------- --------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪152‬‬

‫ﺍﻟﻔﺼل ﺍﻟﺜﺎﻟﺙ ﺃﺴﺎﺴﻴﺎﺕ ﻟﻐﺔ ‪156 ------------------------------------------------------------------------ JAVA‬‬ ‫‪3‬‬

‫‪ 3.1‬ﻤﻘﺩﻤﺔ ‪157 -------------------------------------------------------------------------------------------------‬‬


‫‪ 3.2‬ﺍﻵﻟﺔ ﺍﻟﺘﺨﻴﻠﻴﺔ ﻟﻠـ)‪159 ------------------------------------------------------------------- (JVM JAVA‬‬
‫‪ 3.3‬ﻤﻤﻴﺯﺍﺕ ‪160 ---------------------------------------------------------------------------------------JAVA‬‬
‫‪ 3.4‬ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﻟﻐﺔ ‪JAVA‬ﻭﻟﻐﺔ ‪164 ------------------------------------------------------------------- C++‬‬
‫‪ 3.5‬ﺸﺒﻜﺔ ﺍﻟﻭﻴﺏ ﺍﻟﻌﺎﻟﻤﻴﺔ ﻭﻤﺎ ﻭﺭﺍﺀ ﻟﻐﺔ ‪166 ---------------------------------------------------------- JAVA‬‬
‫‪ 3.5.1‬ﺘﺎﺭﻴﺦ ﺍﻻﻨﺘﺭﻨﺕ ‪166 --------------------------------------------------------------------------‬‬
‫‪ 3.5.2‬ﻭﺼﻑ ﺍﻻﻨﺘﺭﻨﺕ ‪167 ----------------------------------------- --------------------------------‬‬
‫‪ 3.5.3‬ﺍﻟﺸﺒﻜﺔ ﻭﻤﻜﻭﻨﺎﺘﻬﺎ ‪167 ------------------------------------------------------------------------‬‬
‫‪ 3.6‬ﺍﻟﻔﺭﻕ ﺒﻴﻥ ‪ JAVA‬ﻭ ‪169 ------------------------------------------------------------ JAVA SCRIPT‬‬
‫‪ 3.7‬ﻤﺘﺭﺠﻡ ‪170 ---------------------------------------------------------------------------------------- JAVA‬‬
‫‪ 3.8‬ﺘﻨﺼﻴﺏ ﺒﺭﻨﺎﻤﺞ ‪171 ------------------------------------------------------------------------------- JAVA‬‬
‫‪ 3.9‬ﺇﻨﺸﺎﺀ ﺒﺭﻨﺎﻤﺞ ﺒﺴﻴﻁ ‪176 -----------------------------------------------------------------------------------‬‬
‫‪ 3.10‬ﺒﻨﻴﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺒﻠﻐﺔ ‪183 -------------------------------------------------------------------------- JAVA‬‬
‫‪ 3.10.1‬ﺍﻟﺘﻌﻠﻴﻘﺎﺕ )‪184 ----------------------- -------------------------------- .(COMMENTS‬‬
‫‪ 3.10.2‬ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﻤﺤﺠﻭﺯﺓ )‪188 --------------------------------------- (RESERVED WORD‬‬
‫‪ 3.10.3‬ﺍﻟﻤﻨﺎﻫﺞ – ﺍﻟﺩﻭﺍل‪188 ----------------------------------------------------- ( (METHOD‬‬
‫‪ 3.10.4‬ﻋﺒﺎﺭﺍﺕ )‪189 ----------------------- -------------------------------- (STATEMENTS‬‬
‫‪ 3.10.5‬ﻜﺘل )‪189 ------------------------------------------------------------------ (BLOCKS‬‬
‫ﺃﺼﻨﺎﻑ )‪189 ----------------------------- -------------------------------- ( CLASSES‬‬ ‫‪3.10.6‬‬
‫ﻤﻌﺩﻻﺕ ﺍﻟﻭﺼﻭل )‪190 ----------------- -------------------------------- (MODIFIERS‬‬ ‫‪3.10.7‬‬
‫‪ 3.10.8‬ﺍﻟﺩﺍﻟﺔ ﺍﻟﺭﺌﻴﺴﻴﺔ ‪190 --------------------------------------------------------------- MAIN‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪191‬‬

‫‪ 4‬ﺍﻟﻔﺼل ﺍﻟﺭﺍﺒﻊ ﺃﻨﻭﺍﻉ ﺍﻟﻤﻌﻁﻴﺎﺕ ‪193 ----------------------------------------------------------------------------------‬‬

‫‪ 4.1‬ﻤﻘﺩﻤﺔ ‪194 ---------------------------------------------------------------------------------------------------‬‬


‫‪ 4.2‬ﺍﻟﻤﺘﺤﻭﻻﺕ ‪194 ------------------------------------------------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪468‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 4.2.1‬ﺃﺴﻤﺎﺀ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ‪194 ------------------------------------------------------------------------------‬‬
‫‪ 4.2.2‬ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﺍﻟﻤﺘﺤﻭﻻﺕ ‪196 ----------------------------------------------------------------------‬‬
‫‪ 4.2.3‬ﺃﻨﻭﺍﻉ ﺍﻟﻤﺘﺤﻭﻻﺕ ‪196 ------------------------------------------------------------------------------‬‬
‫‪ 4.3‬ﺍﻟﺜﻭﺍﺒﺕ ‪205 ---------------------------------------------------------------------------------------------------‬‬
‫‪ 4.3.1‬ﺜﻭﺍﺒﺕ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ‪205 -----------------------------------------------------------------------‬‬
‫‪ 4.3.2‬ﺜﻭﺍﺒﺕ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺤﻘﻴﻘﻴﺔ ‪206 ------------------------------------------------------------------------‬‬
‫‪ 4.4‬ﺃﻨﻭﺍﻉ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻤﻥ ﻨﺎﺤﻴﺔ ﺍﻟﻭﺼﻭل ‪207 ----------------------------------------------------------------------‬‬
‫‪ 4.5‬ﻤﺠﺎل ﺘﻐﻁﻴﺔ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ‪208 -----------------------------------------------------------------------------------‬‬
‫‪ 4.6‬ﺍﻟﻤﺅﺜﺭﺍﺕ ‪208 -------------------------------------------------------------------------------------------------‬‬
‫‪ 4.6.1‬ﺍﻟﻤﺅﺜﺭﺍﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ‪209 ----------------------------------------------------------------------------‬‬
‫‪ 4.6.2‬ﻤﺅﺜﺭﺍﺕ ﺍﻟﻤﻘﺎﺭﻨﺔ ‪209 ------------------------------------------------------------------------------‬‬
‫‪ 4.6.3‬ﺍﻟﻤﺅﺜﺭﺍﺕ ﺍﻟﻤﻨﻁﻘﻴﺔ ‪210 ----------------------------------------------------------------------------‬‬
‫‪ 4.6.4‬ﻤﺅﺜﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺹ ‪213 ---------------------------------------------------------------------------‬‬
‫‪ 4.6.5‬ﻤﺅﺜﺭﺍﺕ ﺍﻟﺯﻴﺎﺩﺓ ﻭﺍﻟﻨﻘﺼﺎﻥ ‪214 ---------------------------------------------------------------------‬‬
‫‪ 4.6.6‬ﻤﺅﺜﺭ ﺒﺎﻗﻲ ﺨﺎﺭﺝ ﺍﻟﻘﺴﻤﺔ ‪214 ----------------------------------- -------------------------------- %‬‬
‫‪ 4.7‬ﺃﺴﺒﻘﻴﺔ ﺍﻟﻌﻭﺍﻤل ﻭﺘﺭﺘﻴﺏ ﺍﻟﺤﺩﻭﺩ ‪215 ---------------------------------------------------------------------------‬‬
‫‪ 4.8‬ﺍﻟﺘﻌﺒﻴﺭ) ‪218 ----------------------------------------------------------------------------- (EXPRESSION‬‬
‫‪ 4.8.1‬ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺘﻌﺒﻴﺭ ‪218 ---------------------------------------------------------------------‬‬
‫‪ 4.9‬ﺍﻟﺘﺤﻭﻴﻼﺕ ﻓﻲ ﺍﻷﻨﻤﺎﻁ ﺍﻟﻌﺩﺩﻴﺔ‪218 -----------------------------------------------------------------------------‬‬
‫‪ 4.10‬ﺇﻅﻬﺎﺭ ﻨﺹ ﻓﻲ ﺼﻨﺩﻭﻕ ﺍﻟﺤﻭﺍﺭ ‪223 ---------------------------------------------------------------------------‬‬
‫‪ 4.11‬ﺍﻟﺩﺨل ﺒﻭﺍﺴﻁﺔ ﺼﻨﺎﺩﻴﻕ ﺍﻟﺤﻭﺍﺭ ‪225 ---------------------------------------------------------------------------‬‬
‫‪ 4.12‬ﺍﻷﺨﻁﺎﺀ ﺍﻟﺒﺭﻤﺠﻴﺔ‪227 -----------------------------------------------------------------------------------------‬‬
‫ﺃﻨﻭﺍﻉ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺒﺭﻤﺠﻴﺔ ‪227 ------------------------------------------------------------------‬‬ ‫‪4.12.1‬‬
‫‪ .1‬ﺃﺨﻁﺎﺀ ﻗﻭﺍﻋﺩﻴﺔ ‪227 -----------------------------------------------------------------------‬‬
‫ﺃﺨﻁﺎﺀ ﻭﻗﺕ ﺍﻟﺘﺸﻐﻴل ‪228 ------------------------------------------------------------------‬‬ ‫‪2.‬‬
‫‪ .3‬ﺃﺨﻁﺎﺀ ﻤﻨﻁﻘﻴﺔ ‪229 ------------------------------------------------------------------------‬‬
‫ﻁﺭﻕ ﺘﺼﺤﻴﺢ ﺍﻷﺨﻁﺎﺀ – ﺍﻟﺘﻨﻘﻴﺢ ‪230 ---------------------------------------------------------‬‬ ‫‪4.12.2‬‬
‫‪ .1‬ﺍﻟﺘﺼﺤﻴﺢ ﻋﻨﺩ ﺍﻟﺤﺎﺠﺔ )‪230 ---------------------------------------------------------- (JIT‬‬
‫‪ .2‬ﺍﻟﺘﺼﺤﻴﺢ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻨﻘﻁﺔ ﺍﻹﻴﻘﺎﻑ ‪230 ---------------------- --------------------------------‬‬
‫‪ 4.12.3‬ﺘﻠﻤﻴﺤﺎﺕ ﻋﻥ ﺘﺼﺤﻴﺢ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻨﺼﻴﺔ ‪231 -----------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪232 --------------------------------------------------------------------------------------------------‬‬

‫‪ 5‬ﺍﻟﻔﺼل ﺍﻟﺨﺎﻤﺱ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻡ ‪235 ---------------------------------------------------------------------------------‬‬

‫‪ 5.1‬ﻤﻘﺩﻤﺔ ‪235 --------------------------------------------------------------------------------------------------‬‬


‫‪ 5.2‬ﺒﻨﻲ ﺍﻟﺘﺤﻜﻡ ‪235 -----------------------------------------------------------------------------------------------‬‬
‫‪ 5.2.1‬ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺸﺭﻁﻴﺔ )‪235 -------------------------------------------------- (IF STATEMENT‬‬
‫‪ 5.2.2‬ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻟﻤﺘﺩﺍﺨﻠﺔ )‪240 -------------------------------------------------- (IF/ELSE‬‬
‫‪ 5.2.3‬ﺒﻨﻴﺔ ﺍﻻﺨﺘﻴﺎﺭ ﺍﻟﻤﺘﻌﺩﺩﺓ )‪242 ------------------------------------ (SWITCH STATEMENT‬‬
‫‪ 5.2.4‬ﺠﻤل ‪ SWITCH‬ﺍﻟﻤﺘﺩﺍﺨﻠﺔ ‪247 ---------------------------------------------------------------‬‬
‫‪ 5.3‬ﺍﻟﺘﻜﺭ ﺍﺭ)‪247 ---------------------------------------------------------------------------------------- (LOOP‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪469‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 5.3.1‬ﺘﻜﺭﺍﺭ )‪248 ---------------------------------------------------------------------------- (FOR‬‬
‫‪ 5.3.2‬ﺒﻨﻴﺔ ﺍﻟﺘﻜﺭﺍﺭ ﺍﻟﺤﺫﺭ )‪252 ----------------------------------------------------------- (WHILE‬‬
‫‪ 5.3.3‬ﺤﻠﻘﺎﺕ ﺍﻟﺘﻜﺭﺍﺭ ‪255 ---------------------------------------------------------- DO…WHILE‬‬
‫‪ 5.4‬ﺘﺠﺎﻭﺯ ﻗﻭﺍﻨﻴﻥ ﺍﻟﺤﻠﻘﺎﺕ ‪258 ------------------------------------------------------------------------------------‬‬
‫‪ 5.4.1‬ﺠﻤﻠﺔ )‪258 ------------------------------------------------------------------------ (BREAK‬‬
‫‪ 5.4.2‬ﺠﻤﻠﺔ )‪259 -------------------------------------------------------------------------- (GOTO‬‬
‫‪ 5.4.3‬ﺠﻤﻠﺔ ) ‪260 ------------------------------------------------------------------ (CONTINUE‬‬
‫‪ 5.4.4‬ﺠﻤﻠﺔ )‪262 ----------------------------------------------------------------------- (RETURN‬‬
‫‪ 5.5‬ﻜﻴﻔﻴﺔ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﻨﺎﺴﺒﺔ ‪263 -----------------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪265 --------------------------------------------------------------------------------------------------‬‬

‫‪ 6‬ﺍﻟﻔﺼل ﺍﻟﺴﺎﺩﺱ ﺍﻟﻤﺼﻔﻭﻓﺎﺕ )‪270 --------------------------------------------------------------------- (ARRAY‬‬

‫‪ 6.1‬ﻤﻘﺩﻤﺔ ‪270 ---------------------------------------------------------------------------------------------------‬‬


‫‪ 6.2‬ﺍﻟﺘﺼﺭﻴﺢ ﻋﻥ ﺍﻟﻤﺼﻔﻭﻓﺎﺕ‪271 ---------------------------------------------------------------------------------‬‬
‫‪ 6.3‬ﺃﻨﻭﺍﻉ ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ‪273 ----------------------------------------------------------------------------------------‬‬
‫‪ 6.3.1‬ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ﺃﺤﺎﺩﻴﺔ ﺍﻟﺒﻌﺩ ‪273 -----------------------------------------------------------------------‬‬
‫‪ 6.3.2‬ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ﺜﻨﺎﺌﻴﺔ ﺍﻟﺒﻌﺩ ‪275 ------------------------------------------------------------------------‬‬
‫‪ 6.3.3‬ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ﺫﺍﺕ ﺍﻟﺒﻌﺩ ﺍﻟﺜﻼﺜﻲ ‪277 ------------------------------------------------------------------‬‬
‫‪ 6.3.4‬ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ﻏﻴﺭ ﺍﻟﻤﻨﺘﻅﻤﺔ ‪278 ---------------------------------------------------------------------‬‬
‫‪ 6.4‬ﻨﺴﺦ ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ‪281 -----------------------------------------------------------------------------------------‬‬
‫‪ 6.5‬ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﺘﺭﺘﻴﺏ ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ‪283 ---------------------------------------------------------------------------‬‬
‫‪ 6.5.1‬ﺨﻭﺍﺭﺯﻡ ﻟﻠﺘﺭﺘﻴﺏ ﺍﻟﻔﻘﺎﻋﻲ ‪284 ----------------------------------------------------------------------‬‬
‫‪ 6.5.2‬ﺨﻭﺍﺭﺯﻡ ﺍﻟﺤﺸﺭ ‪288 ----------------------------------------------- --------------------------------‬‬
‫‪ 6.5.3‬ﺨﻭﺍﺭﺯﻡ ﺍﻟﺘﺤﺩﻴﺩ ﺃﻭ ﺍﻻﺨﺘﻴﺎﺭ ‪293 ----------------------------------- --------------------------------‬‬
‫‪ 6.5.4‬ﺨﻭﺍﺭﺯﻡ ﺍﻟﺘﻜﻭﻴﻡ ‪297 ----------------------------------------------- --------------------------------‬‬
‫‪ 6.6‬ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﺍﻟﺒﺤﺙ ‪300 ----------------------------------------------------------------------------------------‬‬
‫‪ 6.6.1‬ﺍﻟﺒﺤﺙ ﺍﻟﺨﻁﻲ )‪300 ----------------------------------------------------- (LINEAR SEARCH‬‬
‫‪ 6.6.2‬ﻁﺭﻴﻘﺔ ﺍﻟﺒﺤﺙ ﺍﻟﺜﻨﺎﺌﻲ‪302 ------------------------------------------------ BINARY SEARCH‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪308 --------------------------------------------------------------------------------------------------‬‬

‫‪ 7‬اﻟﻔﺼﻞ اﻟﺴﺎﺑﻊ اﻟﻤﻨﺎھﺞ ‪311 -----------------------------------------------------------------------------------------‬‬

‫‪ 7.1‬ﻤﻘﺩﻤﺔ ‪311 ----------------------------------------------------------------------------------------------------‬‬


‫‪ 7.2‬ﺍﻟﻤﻨﺎﻫﺞ ‪311 ---------------------------------------------------------------------------------------------------‬‬
‫‪ 7.3‬ﻤﺯﺍﻴﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻨﺎﻫﺞ ‪312 -----------------------------------------------------------------------------------‬‬
‫‪ 7.4‬ﺍﻟﺸﻜل ﺍﻟﻌﺎﻡ ﻟﻠﻤﻨﻬﺞ ‪312 ---------------------------------------------------------------------------------------‬‬
‫‪ 7.5‬ﺃﻨﻭﺍﻉ ﺍﻟﻤﻨﺎﻫﺞ ‪314 --------------------------------------------------------------------------------------------‬‬
‫‪ 7.6‬ﺘﻤﺭﻴﺭ ﺍﻟﻘﻴﻡ ﺇﻟﻰ ﺍﻟﻤﻨﺎﻫﺞ ‪316 ----------------------------------------------------------------------------------‬‬
‫‪ 7.7‬ﻓﺘﺭﺓ ﺤﻴﺎﺓ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ )‪ (VARIABLE LIFE TIME‬ﺩﺍﺨل ﺍﻟﻤﻨﻬﺞ ‪317 ------------------------------------‬‬
‫‪ 7.8‬ﺃﻨﻭﺍﻉ ﺘﻤﺭﻴﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪321 -------------------------------------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪470‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 7.8.1‬ﺍﻟﺘﻤﺭﻴﺭ ﺒﺎﻟﻘﻴﻤﺔ ‪321 -----------------------------------------------------------------------------‬‬
‫‪ 7.8.2‬ﺍﻟﺘﻤﺭﻴﺭ ﺒﺎﻟﻤﺭﺠﻌﻴﺔ )‪322 --------------------------------------- (PASS-BY-REFERENCE‬‬
‫‪ 7.9‬ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﺫﺍﺘﻲ – ﺍﻟﻌﻭﺩﻴﺔ ‪325 ------------------------------------------------------------------------------‬‬
‫‪ 7.9.1‬ﺍﻨﺴﻴﺎﺏ ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﺘﻌﺎﻭﺩﻱ ‪327 -----------------------------------------------------------------‬‬
‫‪ 7.9.2‬ﻤﻘﺎﺭﻨﺔ ﺒﻴﻥ ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﺫﺍﺘﻲ ﻭﺍﻟﺘﻜﺭﺍﺭ ‪331 ----------------------- --------------------------------‬‬
‫‪ 7.10‬ﺍﻟﺘﺤﻤﻴل ﺍﻟﺯﺍﺌﺩ ﻟﻠﻤﻨﺎﻫﺞ‪332 ---------------------------------------------------------------------------------‬‬
‫‪ 7.11‬ﻤﻜﺘﺒﺔ ﺍﻟﺘﻭﺍﺒﻊ ﺍﻟﺭﻴﺎﻀﻴﺔ ‪335 --------------------------------------------------------------------------------‬‬
‫‪ 7.11.1‬ﺍﻟﺼﻨﻑ ‪335 ----------------------------------------------------------------------- MATH‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪338 --------------------------------------------------------------------------------------------------‬‬

‫‪ 8‬ﺍﻟﻔﺼل ﺍﻟﺜﺎﻤﻥ ﺍﻟﻨﺼﻭﺹ ‪342 ----------------------------------------------------------------------------------------‬‬

‫‪ 8.1‬ﻤﻘﺩﻤﺔ ‪342 --------------------------------------------------------------------------------------------------‬‬


‫‪ 8.2‬ﺃﺴﺎﺴﻴﺎﺕ ﺍﻟﺤﺭﻭﻑ ﻭﺍﻟﺴﻼﺴل ‪342 -----------------------------------------------------------------------------‬‬
‫‪ 8.3‬ﺍﻟﺨﻭﺍﺹ ﺍﻟﺒﻨﻴﻭﻴﺔ ﻟﻠﺴﻼﺴل ﺍﻟﺭﻤﺯﻴﺔ ﻓﻲ ﻟﻐﺔ ‪343 ----------------------------------------------------- JAVA‬‬
‫‪ 8.4‬ﺍﻟﺼﻨﻑ ﻤﻥ ﻨﻭﻉ ‪344 ----------------------------------------------------------------------------- STRING‬‬
‫‪ 8.5‬ﺍﻟﻤﻨﺎﻫﺞ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﺴﻼﺴل‪345 --------------------------------------------------------------------------------‬‬
‫‪ 8.6‬ﺨﺯﻥ ﺍﻟﺴﻼﺴل ‪349 --------------------------------------------------------------------------------------------‬‬
‫‪ 8.7‬ﺍﻟﺘﺤﻭﻴل ﺍﻟﺘﻠﻘﺎﺌﻲ ‪352 ------------------------------------------------------------------------------------------‬‬
‫‪ 8.8‬ﻟﺼﻕ ﺍﻟﺴﻼﺴل ‪355 --------------------------------------------------------------------------------------------‬‬
‫‪ 8.9‬ﺍﻟﺼﻨﻑ ﻤﻥ ﻨﻭﻉ ‪356 ----------------------------------------------------------------------CHARACTER‬‬
‫‪ 8.10‬ﺍﻟﺼﻨﻑ ﻤﻥ ﻨﻭﻉ ‪357 -------------------------------------------------------------- STRINGBUFFER‬‬
‫‪ 8.10.1‬ﺍﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺴﻠﺴﻠﺔ )‪361 ----------------------- -------------------------------- (INSERT‬‬
‫‪ 8.10.2‬ﻋﻜﺱ ﺍﻟﺴﻠﺴﻠﺔ )‪362 ---------------------------------------------------------- (REVERSE‬‬
‫‪ 8.10.3‬ﺍﻟﺤﺫﻑ ﻤﻥ ﺍﻟﺴﻠﺴﻠﺔ )‪363 ----------------------- -------------------------------- (DELETE‬‬
‫‪ 8.10.4‬ﺍﺴﺘﺒﺩﺍل ﻤﻥ ﺍﻟﺴﻠﺴﻠﺔ )‪363 ----------------------------------------------------- (REPLACE‬‬
‫‪ 8.11‬ﺍﻟﺼﻨﻑ ﻤﻥ ﻨﻭﻉ ‪364 ---------------------------------------------------------STRINGTOKENIZER‬‬
‫‪ 8.12‬ﺇﻗﺤﺎﻡ ﺍﻟﺭﻤﻭﺯ ﻏﻴﺭ ﺍﻟﻘﺎﺒﻠﺔ ﻟﻠﻁﺒﺎﻋﺔ ﻀﻤﻥ ﺍﻟﺴﻼﺴل ﺍﻟﺭﻤﺯﻴﺔ ‪368 --------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪370 --------------------------------------------------------------------------------------------------‬‬

‫‪ 9‬ﺍﻟﻔﺼل ﺍﻟﺘﺎﺴﻊ ﺍﻟﻜﺎﺌﻨﺎﺕ ﻭﺍﻷﺼﻨﺎﻑ ‪372 ------------------------------------------------------------------------------‬‬

‫‪ 9.1‬ﻤﻘﺩﻤﺔ ‪373 --------------------------------------------------------------------------------------------------‬‬


‫‪ 9.1.1‬ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ ‪374 ---------------------------------------------------------------------------‬‬
‫‪ 9.1.2‬ﺍﻟﻌﻼﻗﺔ ﺒﻴﻥ ﻜﺎﺌﻨﺎﺕ ﺍﻟﻌﺎﻟﻡ ﺍﻟﺤﻘﻴﻘﻲ ﻭﻜﺎﺌﻨﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ‪378 -------------------------------------------‬‬
‫‪ 9.1.3‬ﺨﻭﺍﺹ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻭﺠﻬﺔ ‪383 ----------------------------------- --------------------------------‬‬
‫‪ 9.1.4‬ﺇﺴﺘﺭﺍﺘﺠﻴﺔ ﺍﻟﻤﻨﺤﻨﻰ ﺃﻟﻜﺎﺌﻨﻲ ‪384 ------------------------------------------------------------------‬‬
‫‪ 9.2‬ﺃﻨﻭﺍﻉ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﺠﺭﻴﺩﻴﺔ )‪385 ------------------------------------------------------------------------ (ADT‬‬
‫‪ 9.3‬ﺍﻷﺸﻴﺎﺀ )‪386 ---------------------------------------------------------------------------------- (OBJECTS‬‬
‫‪ 9.4‬ﺍﻟﺼﻨﻑ ‪388 ---------------------------------------------------------------------------------------- CLASS‬‬
‫‪ 9.4.1‬ﺇﻨﺸﺎﺀ ﺍﻷﻫﺩﺍﻑ ‪389 -----------------------------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪471‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 9.4.2‬ﺇﻨﺸﺎﺀ ﺍﻷﺼﻨﺎﻑ ﻭﺍﻟﻭﺼﻭل ﻟﻤﻜﻭﻨﺎﺘﻪ ‪391 ----------------------------------------------------------‬‬
‫‪ 9.4.3‬ﺩﻭﺍل ﺍﻟﺒﻨﺎﺀ ‪393 ------------------------ -------------------------------- CONSTRUCTOR‬‬
‫‪ 9.4.4‬ﺘﻤﺭﻴﺭ ﺍﻟﺒﺎﺭﺍﻤﺘﺭﺍﺕ ﺇﻟﻰ ﺍﻟﻜﺎﺌﻨﺎﺕ ‪398 ----------------------------- --------------------------------‬‬
‫‪ 9.4.5‬ﻤﻘﺎﺭﻨﺔ ﺍﻷﻫﺩﺍﻑ ‪399 ----------------------------------------------------------------------------‬‬
‫‪ 9.4.6‬ﺘﻤﺭﻴﺭ ﺍﻟﻜﺎﺌﻨﺎﺕ ﺇﻟﻰ ﺍﻟﻤﻨﺎﻫﺞ ‪402 -----------------------------------------------------------------‬‬
‫‪ 9.4.7‬ﻤﺼﻔﻭﻓﺔ ﻤﻥ ﺍﻟﻜﺎﺌﻨﺎﺕ ‪403 -----------------------------------------------------------------------‬‬
‫‪ 9.4.8‬ﺍﻟﻜﻠﻤﺔ ﺃﻟﻤﻔﺘﺎﺤﻴﻪ ) ‪405 ------------------------------------------------------------------ (THIS‬‬
‫‪ 9.4.9‬ﺍﻟﻜﻠﻤﺔ ) ‪407 ----------------------------------------------------------------------- ( FINAL‬‬
‫‪ 9.5‬ﺍﻟﻜﺒﺴﻠﺔ ‪413 ----------------------------------------------------------------------- ENCAPSULATION‬‬
‫‪ 9.6‬ﻤﺠﺎل ﺘﻐﻁﻴﺔ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺒﺸﻜل ﺃﻭﺴﻊ ‪419 ----------------------------------------------------------------------‬‬
‫‪ 9.7‬ﺍﻷﺼﻨﺎﻑ ﺍﻟﺩﺍﺨﻠﻴﺔ ‪422 -----------------------------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪427 --------------------------------------------------------------------------------------------------‬‬

‫‪ 10‬ﺍﻟﻔﺼل ﺍﻟﻌﺎﺸﺭ ﺍﻟﻭﺭﺍﺜﺔ ﻭﺘﻌﺩﺩﻴﺔ ﺍﻷﺸﻜﺎل‪430 ----------------------------------------------------------------------‬‬

‫‪ 10.1‬ﻤﻘﺩﻤﺔ ‪431 -------------------------------------------------------------------------------------------------‬‬


‫‪ 10.2‬ﺍﻟﻭﺭﺍﺜﺔ ‪431 ------------------------------------------------------------------------------------------------‬‬
‫‪ 10.3‬ﺍﻟﻜﻠﻤﺔ ﺃﻟﻤﻔﺘﺎﺤﻴﻪ ) ‪434 -------------------------------------------------------------------- ( EXTENDS‬‬
‫‪ 10.4‬ﺍﻟﻜﻠﻤﺔ ﺃﻟﻤﻔﺘﺎﺤﻴﻪ )‪436 ------------------------------------------------------------------------- ( SUPER‬‬
‫ﺘﺴﺘﺩﻋﻲ ﺒﺎﻨﻲ ﺍﻟﺼﻨﻑ ﺍﻷﺏ ‪436 ----------------------------- -------------------------------- .‬‬ ‫‪10.4.1‬‬
‫ﺘﺴﺘﺩﻋﻲ ﺩﻭﺍل ﻭﻤﺘﻐﻴﺭﺍﺕ ﺍﻷﺏ ‪437 ---------------------------------------------------------- .‬‬ ‫‪10.4.2‬‬
‫‪ 10.5‬ﺃﺴﺒﻘﻴﺔ ﺍﺴﺘﺩﻋﺎﺀ ﺩﻭﺍل ﺍﻟﺒﻨﺎﺀ ﻟﻠﺼﻨﻑ ﺍﻟﻤﻭﺭﻭﺙ‪439 ---------------------------------------------------------‬‬
‫‪ 10.6‬ﻭﺭﺍﺜﺔ ﺍﻟﺼﻨﻑ ﺍﻟﺩﺍﺨﻠﻲ ‪442 ---------------------------------------------------------------------------------‬‬
‫‪ 10.7‬ﺘﺠﺎﻫل ﺩﻭﺍل ﺼﻨﻑ ﺍﻷﺏ ﻭﻋﻤل ﻋﻤﻠﻴﺔ ‪445 ------------------------------ METHOD OVERRIDING‬‬
‫‪ 10.8‬ﺍﻷﺼﻨﺎﻑ ﺍﻟﻨﻬﺎﺌﻴﺔ ‪447 --------------------------------------------------------------------------------------‬‬
‫‪ 10.9‬ﺍﻻﺴﺘﺒﺩﺍل ﺃﻭ ﺍﻟﺘﻌﻁﻴل ‪447 -------------------------------------------------------------------- OVERRIDE‬‬
‫‪ 10.10‬ﺇﺭﺴﺎل ﺍﻟﻁﺭﻕ ﺩﻴﻨﺎﻤﻴﻜﻴﺎﹶ ‪451 --------------------------------------------------------------------------------‬‬
‫‪ 10.11‬ﺘﻌﺩﺩﻴﺔ ﺍﻟﺘﺸﻜل ‪452 -------------------------------------------------------------- POLYMORPHISM‬‬
‫‪ 10.12‬ﺍﻟﺭﺒﻁ ﺍﻟﻤﺘﻐﻴﺭ )ﺍﻟﺭﺒﻁ ﺍﻟﻤﺘﺄﺨﺭ( ‪454 -------------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪455‬‬

‫‪ 11‬ﺍﻟﻔﺼل ﺍﻟﺤﺎﺩﻱ ﻋﺸﺭ ﺍﻟﺤﺯﻡ )‪458 -------------------------------------------------------------- (PACKAGES‬‬

‫‪ 11.1‬ﻤﻘﺩﻤﺔ ‪458 -------------------------------------------------------------------------------------------------‬‬


‫‪ 11.2‬ﺘﻌﺭﻴﻑ ﺍﻟﺤﺯﻡ ‪458 ---------------------------------------------------------------------------------------------‬‬
‫‪ 11.3‬ﻤﻜﻭﻨﺎﺕ ﺍﻟﺤﺯﻤﺔ‪458 -------------------------------------------------------------------------------------------‬‬
‫ﺤﺯﻡ ﻓﺭﻋﻴﺔ ﺘﺤﺕ ﺍﻟﺤﺯﻤﺔ ﺍﻷﺏ ‪458 ---------------------------------------------------------- .‬‬ ‫‪11.3.1‬‬
‫ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﻔﺌﺎﺕ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺒﺎﻟﺤﺯﻤﺔ ﺍﻷﺏ‪458 ------------------------------------------------ .‬‬ ‫‪11.3.2‬‬
‫‪ 11.4‬ﺴﺒﺏ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺤﺯﻡ‪459 -------------------------------------------------------------------------------------‬‬
‫‪ 11.5‬ﻤﺴﻤﻴﺎﺕ ﺍﻟﺤﺯﻡ ﻭ ﺍﻟﺤﺯﻡ ﺍﻟﻔﺭﻋﻴﺔ ﻭ ﺍﻟﻔﺌﺎﺕ ‪459 -------------------------------------------------------------‬‬
‫‪ 11.6‬ﺇﻨﺸﺎﺀ ﺍﻟﺤﺯﻡ ‪459 -------------------------------------------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪472‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 11.7‬ﺍﺴﺘﺩﻋﺎﺀ ﻓﺌﺘﻴﻥ ﺒﻨﻔﺱ ﺍﻷﺴﻡ ‪462 ----------------------------------------------------------------------------‬‬
‫‪ 11.8‬ﺍﺴﺘﺩﻋﺎﺀ ﻓﺌﺔ ﻤﻌﻴﻨﺔ ﻤﻥ ﺍﻟﺤﺯﻤﺔ ‪463 ------------------------------------------------------------------------‬‬
‫‪ 11.9‬ﻤﺤﺩﺩﺍﺕ ﺍﻟﻭﺼﻭل ﻟﻠﺤﺯﻡ‪463 --------------------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪465 --------------------------------------------------------------------------------------------------‬‬

‫‪ 12‬ﺍﻟﻔﺼل ﺍﻟﺜﺎﻨﻲ ﻋﺸﺭ ﺍﻷﺼﻨﺎﻑ ﺍﻟﻤﺠﺭﺩﺓ ﻭﺍﻟﻭﺍﺠﻬﺎﺕ ‪467 -----------------------------------------------------------‬‬

‫‪ 12.1‬ﻤﻘﺩﻤﺔ ‪467 -------------------------------------------------------------------------------------------------‬‬


‫‪ 12.2‬ﺍﻷﺼﻨﺎﻑ ﺍﻟﻤﺠﺭﺩﺓ ‪467 ----------------------------------------------------- ABSTRACT CLASSES‬‬
‫‪ 12.2.1‬ﻗﻭﺍﻋﺩ ﺤﻭل ﺍﻟﺘﺠﺭﻴﺩ ‪471 ----------------------------------------------------------------------‬‬
‫‪ 12.3‬ﺍﻟﻭﺍﺠﻬﺎﺕ ‪473 --------------------------------------------------------------------------INTERFACES‬‬
‫‪ 12.4‬ﻤﺎ ﺘﺤﺘﻭﻴﻪ ﺍﻟﻭﺍﺠﻬﺎﺕ ‪474 -----------------------------------------------------------------------------------‬‬
‫‪ 12.4.1‬ﻗﻭﺍﻋﺩ ﺤﻭل ﺍﻟﻭﺍﺠﻬﺎﺕ ‪475 --------------------------------------------------------------------‬‬
‫‪ 12.5‬ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪477 -----------------------------------------------------------------------------------------‬‬

‫‪ 13‬ﺍﻟﻔﺼل ﺍﻟﺜﺎﻟﺙ ﻋﺸﺭ ﺍﻻﺴﺘﺜﻨﺎﺀﺍﺕ )‪479 ------------------------------------------------------ (EXCEPTIONS‬‬

‫‪ 13.1‬ﻤﻘﺩﻤﺔ ‪479 -------------------------------------------------------------------------------------------------‬‬


‫‪ 13.2‬ﻤﻌﻨﻰ ﺍﻻﺴﺘﺜﻨﺎﺀﺍﺕ‪479 --------------------------------------------------------------------------------------‬‬
‫‪ 13.3‬ﺃﺴﺎﺴﻴﺎﺕ ﻤﻌﺎﻟﺠﺔ ﺍﻻﺴﺘﺜﻨﺎﺀ ﻓﻲ ﻟﻐﺔ ‪480 ----------------------------------------------------------- JAVA‬‬
‫‪ 13.4‬ﻤﺼﻁﻠﺤﺎﺕ ﻻﺒﺩ ﻤﻨﻬﺎ ‪481 -----------------------------------------------------------------------------------‬‬
‫‪ 13.5‬ﺃﻨﻭﺍﻉ ﺍﻻﺴﺘﺜﻨﺎﺀﺍﺕ ‪482 -------------------------------------------------------------------------------------‬‬
‫‪ 13.5.1‬ﺍﺴﺘﺜﻨﺎﺀﺍﺕ ﺍﻟﺤﺯﻤﺔ ‪482 ----------------------------------------------------- JAVA.LANG‬‬
‫‪ 13.5.2‬ﺍﺴﺘﺜﻨﺎﺀﺍﺕ ﺍﻟﺤﺯﻤﺔ ‪484 ---------------------------------------------------------- JAVA.IO‬‬
‫‪ 13.5.3‬ﺍﺴﺘﺜﻨﺎﺀﺍﺕ ﺍﻟﺤﺯﻤﺔ ‪485 ----------------------- -------------------------------- JAVA.NET‬‬
‫‪ 13.5.4‬ﺍﺴﺘﺜﻨﺎﺀﺍﺕ ﺍﻟﺤﺯﻤﺔ ‪486 ---------------------- -------------------------------- JAVA.AWT‬‬
‫‪ 13.5.5‬ﺍﺴﺘﺜﻨﺎﺀﺍﺕ ﺍﻟﺤﺯﻤﺔ ‪486 ---------------------- -------------------------------- JAVA.UTIL‬‬
‫‪ 13.5.6‬ﺍﻟﻔﺼﻴﻠﺔ ) ‪486 ---------------------------------------------------------- ( EXCEPTION‬‬
‫‪ 13.6‬ﺨﻁﻭﺍﺕ ﺇﻨﺸﺎﺀ ﺍﻻﺴﺘﺜﻨﺎﺀﺍﺕ ‪487 ----------------------------------------------------------------------------‬‬
‫‪ 13.7‬ﺇﻴﻌﺎﺯﺍﺕ ﺍﻻﺴﺘﺜﻨﺎﺀ ‪488 --------------------------------------------------------------------------------------‬‬
‫‪ 13.8‬ﺍﻟﻬﻴﻜل ﺍﻟﻌﺎﻡ ﻟﻼﺴﺘﺜﻨﺎﺀﺍﺕ‪488 -------------------------------------------------------------------------------‬‬
‫‪ 13.9‬ﻤﻌﺎﻟﺠﺔ ﺍﻻﺴﺘﺜﻨﺎﺀﺍﺕ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻭﺯﺓ ) ‪489 ------------------------------------(THROWS‬‬
‫‪ 13.10‬ﺇﻁﻼﻕ ﺍﻻﺴﺘﺜﻨﺎﺀ ‪491 ---------------------------------------------------------------------------------------‬‬
‫‪ 13.11‬ﺇﻋﺎﺩﺓ ﺇﻁﻼﻕ ﺍﻻﺴﺘﺜﻨﺎﺀ ‪492 ---------------------------------------------------------------------------------‬‬
‫‪ 13.12‬ﻤﺘﻰ ﻨﺴﺘﺨﺩﻡ ﺍﻻﺴﺘﺜﻨﺎﺀﺍﺕ ‪499 ------------------------------------------------------------------------------‬‬
‫‪ 13.13‬ﺇﻨﺸﺎﺀ ﺍﺴﺘﺜﻨﺎﺀ ﺨﺎﺹ ﺒﻙ ‪499 -------------------------------------------------------------------------------‬‬
‫‪ 13.14‬ﺍﻟﺨﻼﺼﺔ ‪502 -----------------------------------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪504 --------------------------------------------------------------------------------------------------‬‬

‫‪ 14‬ﺍﻟﻔﺼل ﺍﻟﺭﺍﺒﻊ ﻋﺸﺭ ﺍﻟﺩﺨل ﻭﺍﻟﺨﺭﺝ ‪506 --------------------------------------------------------------------- I/O‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪473‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 14.1‬ﻤﻘﺩﻤﺔ ‪507 -------------------------------------------------------------------------------------------------‬‬
‫‪ 14.2‬ﺍﻟﻤﻠﻔﺎﺕ ﻭﻤﺠﺎﺭﻱ ﺍﻟﺩﺨل ﻭﺍﻟﺨﺭﺝ ‪507 ------------------------------------------------------- I/O STREAM‬‬
‫‪ 14.2.1‬ﺍﻟﻤﺠﺭﻯ )‪508 ----------------------------------------------------------------- (STREAM‬‬
‫‪ 14.3‬ﺃﺼﻨﺎﻑ ﺍﻟﻤﺠﺎﺭﻱ ﻭ ﺍﻷﺼﻨﺎﻑ ﺍﻟﻘﺎﺭﺌﺔ ‪/‬ﺍﻟﻜﺎﺘﺒﺔ ‪509 ----------------------------------------------------------‬‬
‫‪ 14.4‬ﺍﻟﺩﺨل ‪512 --------------------------------------------------------------------------------------- INPUT‬‬
‫‪ 14.4.1‬ﻗﺭﺍﺀﺓ ﺴﻠﺴﻠﺔ ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ‪515 -----------------------------------------------------------‬‬
‫‪ 14.5‬ﺍﻟﻤﻠﻔﺎﺕ ‪516 ------------------------------------------------------------------------------------------------‬‬
‫‪ 14.5.1‬ﺃﻨﻭﺍﻉ ﺍﻟﻤﻠﻔﺎﺕ ‪516 ---------------------------------------------------------------------------‬‬
‫‪ 14.6‬ﺍﻟﺒﻨﻴﺔ ﺍﻟﻬﺭﻤﻴﺔ ﻟﻠﻤﻠﻔﺎﺕ ‪518 ---------------------------------------------------------------------------------‬‬
‫‪ 14.6.1‬ﺃﻨﻭﺍﻉ ﺍﻟﻤﻠﻔﺎﺕ ﺤﺴﺏ ﻁﺭﻴﻘﺔ ﺍﻟﻭﺼﻭل ‪519 ---------------------- --------------------------------‬‬
‫‪ 14.6.2‬ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﻠﻔﺎﺕ ‪519 ----------------------------------------- --------------------------------‬‬
‫‪ 14.6.3‬ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪526 --------------------------------------------------------------------------‬‬
‫‪ 14.6.4‬ﺇﻨﺸﺎﺀ ﻨﺴﺨﺔ ﻤﻤﺎﺜﻠﺔ ﻟﻤﻌﻁﻴﺎﺕ ﻤﺠﺭﻯ ﺃﺜﻨﺎﺀ ﻜﺘﺎﺒﺘﻬﺎ ‪528 -------------------------------------------‬‬
‫‪ 14.6.5‬ﺍﻟﺼﻨﻑ ﻤﻥ ﻨﻭﻉ ‪531 ----------------------------------------- STREAMTOKENIZER‬‬
‫‪ 14.6.6‬ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻌﺸﻭﺍﺌﻴﺔ ‪534 -------------------------------------- RANDOMACCESSFILE‬‬
‫‪ 14.6.7‬ﺘﺨﺯﻴﻥ ﻭﺍﺴﺘﻌﺎﺩﺓ ﺍﻟﻜﺎﺌﻨﺎﺕ ﺒﺸﻜل ﺘﺴﻠﺴﻠﻲ ‪538 ---------------------------------------------------‬‬
‫‪ 14.6.8‬ﺘﺤﻭﻴل ﺍﻟﻨﺹ ﺇﻟﻰ ﺍﻟﻨﻤﻭﺫﺝ ‪542 -------------------------------------------- POSTSCRIPT‬‬
‫‪ 14.6.9‬ﺼﻨﺎﺩﻴﻕ ﺤﻭﺍﺭ ﺍﻟﻤﻠﻔﺎﺕ ‪547 ----------------------------------- --------------------------------‬‬
‫‪ 14.7‬ﻤﺯﺍﻴﺎ ﻨﻅﺎﻡ ﺍﻟﻤﻠﻔﺎﺕ‪554 -------------------------------------------------------------------------------------‬‬
‫‪ 14.8‬ﻋﻴﻭﺏ ﻨﻅﻡ ﺍﻟﻤﻠﻔﺎﺕ ‪554 ------------------------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪557 --------------------------------------------------------------------------------------------------‬‬

‫‪ 15‬ﺍﻟﻔﺼل ﺍﻟﺨﺎﻤﺱ ﻋﺸﺭ ﻫﻴﺎﻜل ﺍﻟﺒﻴﺎﻨﺎﺕ ‪559 ------------------------------------------------------------------------‬‬

‫‪ 15.1‬ﻤﻘﺩﻤﺔ ‪559 -------------------------------------------------------------------------------------------------‬‬


‫‪ 15.2‬ﻓﻭﺍﺌﺩ ﻫﻴﺎﻜل ﺍﻟﺒﻴﺎﻨﺎﺕ ‪561 --------------------------------------------------------------------------------------‬‬
‫‪ 15.3‬ﺃﻨﻭﺍﻉ ﻫﻴﺎﻜل ﺍﻟﺒﻴﺎﻨﺎﺕ‪561 --------------------------------------------------------------------------------------‬‬
‫‪ 15.4‬ﺍﻟﻤﻜﺩﺱ )‪562 ---------------------------------------------------------------------------------- (STACK‬‬
‫ﻓﻭﺍﺌﺩ ﺍﻟﻤﻜﺩﺱ ‪563 ---------------------------------------------------------------------------‬‬ ‫‪15.4.1‬‬
‫ﻁﺭﻕ ﺘﻤﺜﻴل ﺍﻟﻤﻜﺩﺱ ﻭﺘﺨﺯﻴﻥ ﻋﻨﺎﺼﺭﻩ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻭﺘﺎﻤﻴﻥ ﻋﻤﻠﻴﺔ ﺒﻠﻭﻏﻬﺎ ‪564 ---------------------‬‬ ‫‪15.4.2‬‬
‫‪ 15.4.3‬ﺍﻟﺼﻨﻑ ﻤﻥ ﻨﻭﻉ ‪572 ----------------------------- -------------------------------- STACK‬‬
‫‪ 15.5‬ﺍﻟﻁﻭﺍﺒﻴﺭ )‪ (QUEUES‬ﺃﻭ ﺴﺠﻼﺕ ﺍﻵﻨﺘﻅﺎﺭ ‪575 --------------------------------------------------------------‬‬
‫ﺃﻨﻭﺍﻉ ﺍﻟﻁﻭﺍﺒﻴﺭ ‪576 --------------------------------------------------------------------------‬‬ ‫‪15.5.1‬‬
‫‪ 15.5.2‬ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﻟﻁﺎﺒﻭﺭ ‪581 ----------------------------------- --------------------------------‬‬
‫‪ 15.6‬ﺍﻟﻘﻭﺍﺌﻡ )‪585 ------------------------------------------------------------------------------------------ (LIST‬‬
‫‪ 15.6.1‬ﺍﻟﻘﻭﺍﺌﻡ ﺍﻷﺤﺎﺩﻴﺔ ‪585 --------------------------------------------------------------------------‬‬
‫‪ 15.6.2‬ﺼﻨﻊ ﺍﻟﻤﻜﺩﺴﺎﺕ ﻭ ﺍﻟﻁﻭﺍﺒﻴﺭ ﺩﻴﻨﺎﻤﻴﻜﻴﺎﹰ ‪593 ---------------------- --------------------------------‬‬
‫ﺍﻟﻘﻭﺍﺌﻡ ﺍﻷﺤﺎﺩﻴﺔ ﺍﻟﻤﺘﺼﻠﺔ ‪599 -----------------------------------------------------------------‬‬ ‫‪15.6.3‬‬
‫ﺍﻟﻘﻭﺍﺌﻡ ﺍﻟﻤﺫﺒﻠﺔ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪601 --------------------------------------------------------------------‬‬ ‫‪15.6.4‬‬
‫‪ 15.6.5‬ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﻟﻘﻭﺍﺌﻡ ﺍﻟﻤﺫﺒﻠﺔ ‪602 ------------------------------ --------------------------------‬‬
‫‪ 15.7‬ﺍﻷﺸﺠﺎﺭ )‪614 ------------------------------------------------------------------------------------- (TREES‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪474‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 15.7.1‬ﻤﺼﻁﻠﺤﺎﺕ ﺍﻷﺸﺠﺎﺭ ‪615 ---------------------------------------------------------------------‬‬
‫‪ 15.7.2‬ﺍﻷﺸﺠﺎﺭ ﺍﻟﺜﻨﺎﺌﻴﺔ )‪616 ------------------------------------------------ (BINARY TREES‬‬
‫‪ 15.7.3‬ﺘﻁﺒﻴﻘﺎﺕ ﺍﻷﺸﺠﺎﺭ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪618 -----------------------------------------------------------------‬‬
‫‪ 15.7.4‬ﺨﻭﺍﺭﺯﻤﻴﺔ ﺒﻨﺎﺀ ﺍﻟﺸﺠﺭﺓ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪623 ---------------------------- --------------------------------‬‬
‫ﺨﻭﺍﺭﺯﻡ ﺇﺴﺘﺭﺠﺎﻉ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﺍﻷﺸﺠﺎﺭ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪626 ------------------------------------------‬‬ ‫‪15.7.5‬‬
‫‪ 15.7.6‬ﺨﻭﺍﺭﺯﻤﻴﺔ ﻋﺩ ﻋﻘﺩ ﺍﻷﺸﺠﺎﺭ ‪630 ------------------------------ --------------------------------‬‬
‫‪ 15.7.7‬ﺨﻭﺍﺭﺯﻤﻴﺔ ﺤﺴﺎﺏ ﻋﺩﺩ ﺃﻭﺭﺍﻕ ﺍﻟﺸﺠﺭﺓ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪633 ----------------------------------------------‬‬
‫‪ 15.7.8‬ﺨﻭﺍﺭﺯﻤﻴﺔ ﺤﺫﻑ ﻋﻘﺩ ﺃﻭﺭﺍﻕ ﺍﻟﺸﺠﺭﺓ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪634 -----------------------------------------------‬‬
‫‪ 15.8‬ﻫﻴﺎﻜل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺸﺒﻜﻴﺔ ) ﺍﻟﻤﺘﺭﺍﺒﻁﺔ( ‪639 --------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪643 --------------------------------------------------------------------------------------------------‬‬

‫‪ 16‬ﺍﻟﻔﺼل ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ﺍﻟﺭﺴﻡ ﺒﺎﻟﺤﺎﺴﻭﺏ ‪648 ---------------------------------------------------------------------‬‬

‫‪ 16.1‬ﻤﻘﺩﻤﺔ ‪648 -------------------------------------------------------------------------------------------------‬‬


‫‪ 16.2‬ﻤﺠﺎﻻﺕ ﺍﻟﺭﺴﻡ ﺒﺎﻟﺤﺎﺴﻭﺏ ‪649 ------------------------------------------------------------------------------‬‬
‫‪ 16.3‬ﺍﻟﺭﺴﻭﻡ ﺜﻨﺎﺌﻴﺔ ﺍﻷﺒﻌﺎﺩ ﻭﺍﻟﺭﺴﻭﻡ ﺜﻼﺜﻴﺔ ﺍﻷﺒﻌﺎﺩ ‪650 -----------------------------------------------------------‬‬
‫‪ 16.4‬ﻤﻘﺩﻤﺔ ﻟﻠﺭﺴﻡ ﺒﺎﻟﺤﺎﺴﻭﺏ ﻓﻲ ﺍﻟﺠﺎﻓﺎ‪650 --------------------------------------------------------------------‬‬
‫‪ 16.5‬ﻤﻘﺩﻤﺔ ﻟﻠﺭﺴﻡ ﺒﺎﻟﺤﺎﺴﻭﺏ ﻓﻲ ‪651 ------------------------------------------------------------------------------‬‬
‫‪ 16.6‬ﻤﻜﻭﻨﺎﺕ ﺍﻟﺠﺭﺍﻓﻴﻜﺱ ﻭﻜﺎﺌﻨﺎﺘﻪ ‪654 ---------------------------------------------------------------------------‬‬
‫‪ 16.7‬ﻨﻅﻡ ﺍﻷﻟﻭﺍﻥ‪ ،‬ﺩﻗﺔ ﺍﻟﻠﻭﻥ‪ ،‬ﻭﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﻠﻭﻥ ﻭﺩﻭﺍل ﺍﻟﺘﻌﺎﻤل ﻓﻲ ‪656 -------------------------------------- JAVA‬‬
‫‪ 16.7.1‬ﺃﻫﻡ ﻨﻅﻡ ﺍﻷﻟﻭﺍﻥ ‪656 ----------------------------------------- --------------------------------‬‬
‫‪ 16.7.2‬ﻨﻅﻡ ﺍﻷﻟﻭﺍﻥ ﻭﺍﻷﺠﻬﺯﺓ ﺍﻟﻁﺭﻓﻴﺔ ‪656 ---------------- DEVICE-DEPENDENT COLOR‬‬
‫‪ 16.7.3‬ﺠﻤﻌﻴﺔ ﺍﻟﻠﻭﻥ ﺍﻟﻌﺎﻟﻤﻴﺔ ‪657 ---------------------------------------------------------------------‬‬
‫‪ 16.7.4‬ﻨﻅﺎﻡ ﺍﻷﻟﻭﺍﻥ ‪ RGB‬ﻭﺍﻷﻟﻭﺍﻥ ﻓﻲ‪658 ------------------------------------------------ - JAVA‬‬
‫‪ 16.7.5‬ﺩﻭﺍل ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻷﻟﻭﺍﻥ ﻓﻲ ‪661 ----------------------------------------------------- JAVA‬‬
‫‪ 16.7.6‬ﺭﺴﻡ ﺍﻟﺨﻁﻭﻁ‪ ،‬ﺍﻟﻤﺴﺘﻁﻴﻼﺕ‪ ،‬ﻭﺍﻟﺩﻭﺍﺌﺭ ‪662 -----------------------------------------------------‬‬
‫‪ 16.7.7‬ﺍﻟﺼﻨﻑ ﻤﻥ ﻨﻭﻉ ‪663 ------------------------ -------------------------------- GRAPHICS‬‬
‫‪ 16.7.8‬ﺭﺴﻡ ﺍﻷﻗﻭﺍﺱ ‪669 ----------------------------------------------------------------------------‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪674 --------------------------------------------------------------------------------------------------‬‬

‫‪ 17‬ﺍﻟﻔﺼل ﺍﻟﺴﺎﺒﻊ ﻋﺸﺭ ﺒﺭﻤﺠﺔ ﺍﻟﻭﺴﺎﺌﻁ ﺍﻟﻤﺘﻌﺩﺩﺓ ‪676 ---------------------------------------------------------------‬‬

‫‪ 17.1‬ﻗﯿﺪ اﻹﻧﺸﺎء ‪677 --------------------------------------------------------------------------------------------‬‬

‫‪ 18‬ﺍﻟﻔﺼل ﺍﻟﺜﺎﻤﻥ ﻋﺸﺭ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪678 --------------------------------------------------------------------------‬‬

‫‪ 18.1‬ﻤﻘﺩﻤﺔ ‪679 -------------------------------------------------------------------------------------------------‬‬


‫‪ 18.2‬ﻤﻌﻨﻰ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪679 -----------------------------------------------------------------------------------‬‬
‫‪ 18.3‬ﻤﻤﻴﺯﺍﺕ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪680 ----------------------------------------------------------------------------- -‬‬
‫‪ 18.4‬ﻤﻜﻭﻨﺎﺕ ﻨﻅﺎﻡ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪681 ------------------------------------------------------------------------------‬‬
‫‪ 18.4.1‬ﺍﻟﺒﻴﺎﻨﺎﺕ ‪681 ----------------- ----------------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪475‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 18.4.2‬ﺍﻟﻤﻌﺩﺍﺕ ‪681 --------------------------------------------------------------------------------‬‬
‫‪ 18.4.3‬ﺍﻟﺒﺭﺍﻤﺞ ‪681 ----------------- ----------------------------------------------------------------‬‬
‫‪ 18.5‬ﻤﺴﺘﺨﺩﻤﻭﺍ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‪682 ------------------------------------------------------------------------------‬‬
‫‪ 18.6‬ﺘﺭﻜﻴﺏ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‪682 ----------------------------------------------------------------------------------‬‬
‫‪ 18.7‬ﺃﻨﻭﺍﻉ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪684 ----------------------------------------------------------------------------------‬‬
‫‪ 18.7.1‬ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻌﻼﻗﻴﺔ ‪685 ----------------------------------- --------------------------------‬‬
‫‪ 18.7.2‬ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻬﺭﻤﻴﺔ ‪687 ----------------------------------- --------------------------------‬‬
‫‪ 18.7.3‬ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺸﺒﻜﻴﺔ ‪689 -------------------------------------------------- NET WORK‬‬
‫‪ 18.8‬ﺩﻭﺭ ‪ DBMS‬ﻋﻨﺩ ﻁﻠﺏ ﺍﻻﺴﺘﺭﺠﺎﻉ‪689 ---------------------------------------------------------------------‬‬
‫‪ 18.9‬ﻟﻐﺔ ﺍﻻﺴﺘﻌﻼﻡ ﺍﻟﻤﺭﻜﹼﺒﺔ)‪690 ------------------------------------------------------------------------- (SQL‬‬
‫‪ 18.9.1‬ﺃﻗﺴﺎﻡ ﺠﻤﻠﺔ ‪691 ----------------------------------------------------------------------- SQL‬‬
‫‪ 18.9.2‬ﺍﺴﺘﻌﻼﻤﺎﺕ ﺍﻟﺘﺤﺩﻴﺩ ‪692 -------------------------------------- SELECTION QUERIES‬‬
‫ﺇﺠﺭﺍﺀ ﺍﻟﻌﻤﻠ ﻴ‪‬ﺎﺕ ﻋﻠﻰ ﺨﺎﻨﺎﺕ ﺍﻟﺤﻘﻭل ‪706 ----------------------- --------------------------------‬‬ ‫‪18.9.3‬‬
‫‪ 18.10‬ﻋﻴﻭﺏ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪717 ----------------------------------------------------------------------------------‬‬
‫‪ 18.11‬ﺍﻻﺘﺼﺎل ﺒﻘﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ‪719 ------------------------------------------------------------ JDBC‬‬
‫‪ 18.11.1‬ﻤﻔﻬﻭﻡ ﻤﺸﻐﻼﺕ ‪719 ------------------------------ -------------------------------- JDBC‬‬
‫‪ 18.11.2‬ﻨﻤﺎﺫﺝ ﻤﺸﻐﻼﺕ ‪723 ------------------------------ -------------------------------- JDBC‬‬
‫‪ 18.11.3‬ﺍﺨﺘﻴﺎﺭ ﻨﻤﻭﺫﺝ ﺍﻟﻤﺸﻐل ﺍﻟﻤﻨﺎﺴﺏ ‪731 ------------------------ --------------------------------‬‬
‫‪ 18.11.4‬ﻤﺯﻭﺩﻱ ﻤﺸﻐﻼﺕ ‪732 ----------------------------- -------------------------------- JDBC‬‬
‫‪ 18.11.5‬ﺍﺴﺘﺨﺩﺍﻡ ﻤﺸﻐل ‪732 --------------------------------------------------------------- JDBC‬‬
‫‪ 18.11.6‬ﺍﻟﺼﻨﻔﻴﻥ ﻤﻥ ﻨﻭﻉ ‪733 --------------------------- DRIVERMANAGER ,DRIVER‬‬
‫‪ 18.11.7‬ﺘﺴﺠﻴل ﻤﺸﻐﻼﺕ ‪733 ----------------------------- -------------------------------- JDBC‬‬
‫‪ 18.11.8‬ﺘﺤﺩﻴﺩ ﻭﺇﻟﻐﺎﺀ ﻤﺴﺠﻼﺕ ‪738 ------------------------ -------------------------------- JDBC‬‬
‫‪ 18.11.9‬ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻜﺎﺌﻨﺎﺕ ‪740 --------------------------------------------- CONNECTION‬‬
‫ﻤﻔﻬﻭﻡ ‪741 ----------------------------------------------------------- JDBC URL‬‬ ‫‪18.11.10‬‬
‫ﺘﺄﺴﻴﺱ ﺍﻻﺘﺼﺎل ﻤﻊ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪743 ------------------------------------------------‬‬ ‫‪18.11.11‬‬
‫ﺇﻨﺸﺎﺀ ﺃﻭل ﺘﻁﺒﻴﻕ ‪JDBC‬ﺒﻭﺍﺴﻁﺔ ﻤﺸﻐل ‪746 ------------------------------- ODBC‬‬ ‫‪18.11.12‬‬
‫ﺇﻏﻼﻕ ﺍﺘﺼﺎﻻﺕ‪762 ------------------------ -------------------------------- JDBC‬‬ ‫‪18.11.13‬‬
‫ﺒﻨﺎﺀ ﻋﺒﺎﺭﺍﺕ ‪764 ---------------------------- -------------------------------- JDBC‬‬ ‫‪18.11.14‬‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﻋﺒﺎﺭﺍﺕ ‪JDBC‬ﻭﻜﺎﺌﻨﺎﺘﺔ ‪765 ------------------------------------------------‬‬ ‫‪18.11.15‬‬
‫ﺍﻻﺴﺘﻌﻼﻤﺎﺕ ﺍﻟﻤﺭﺴﻠﺔ ﺇﻟﻰ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻭﺍﺴﻁﺔ ﺍﻟﻜﺎﺌﻥ ‪769 ---------- RESULTSET‬‬ ‫‪18.11.16‬‬
‫ﺍﺴﺘﺨﺩﺍﻡ ‪ JDBC‬ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﻭﺍﺼﻔﺔ ‪809 --------------------------------‬‬ ‫‪18.11.17‬‬
‫ﺇﺒﺩﺍﻉ ﺍﻟﻠﻤﺴﺎﺕ ﺍﻟﻔﻨﻴﺔ ﻓﻲ ﺍﻟﺠﺩﺍﻭل ﺒﻭﺍﺴﻁﺔ ﺍﻟﺼﻨﻑ ‪832 --------------------- JTABLE‬‬ ‫‪18.11.18‬‬
‫ﺤﻠﻭل ﻟﻤﺸﺎﻜل ﺘﻁﺒﻴﻕ ‪JDBC‬ﺍﻟﻤ ﺘﻭﻗﻌﺔ ‪853 -------------------------------------------‬‬ ‫‪18.11.19‬‬
‫ﺘﻤﺎﺭﻴﻥ ﺍﻟﻔﺼل ‪856 --------------------------------------------------------------------------------------------------‬‬

‫‪ 19‬ﺍﻟﻔﺼل ﺍﻟﺘﺎﺴﻊ ﻋﺸﺭ‪ :‬اﻟﺸﺒﻜﺎت ‪676 -------------------------------------------------------------------------------‬‬

‫‪ 17.1‬ﻗﯿﺪ اﻹﻧﺸﺎء ‪677 --------------------------------------------------------------------------------------------‬‬

‫‪ 17‬ﺍﻟﻔﺼل ﺍﻟﻌﺸﺭﻭﻥ‪ :‬ﺒﺭﻤﺠﺔ ﺍﻷﺠﻬﺯﺓ ﺍﻟﻜﻔﻴﺔ )ﺍﻟﺠﻭﺍل(‪676 -----------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪476‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 17.1‬ﻗﯿﺪ اﻹﻧﺸﺎء ‪677 --------------------------------------------------------------------------------------------‬‬

‫‪857‬‬ ‫اﻟﻤﻼﺣﻖ‬

‫‪ A‬ﺃﺴﺒﻘﻴﺔ ﺍﻟﻌﻭﺍﻤل ‪858 ----------------------------------------------------- OPERATOR PRECEDENCE‬‬


‫‪ B‬ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﻤﻔﺘﺎﺤﻴﺔ ‪861 ------------------------------------ KEYWORDS AND RESERVED WORD‬‬
‫‪ C‬ﺸﻔﺭﺓ ﺍﻟﻤﺴﺢ ‪862 ----------------------------------------------------------- ASCII CHARACTER SET‬‬
‫‪ 19.1.1‬ﺭﻤﻭﺯ ﺍﻟﺸﻔﺭﺓ ﺍﻷﻤﺭﻴﻜﻴﺔ ﺍﻟﻤﻌﻴﺎﺭﻴﺔ ﻟﺘﺒﺎﺩل ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ‪862 ------------------- ASCII CODE‬‬
‫‪ 19.1.2‬ﺭﻤﻭﺯ ﺍﻟﺸﻔﺭﻩ ﺍﻷﻤﺭﻴﻜﻴﺔ ﺍﻟﻤﻭﺴﻌﺔ ‪864 ---------------------- --------------------------------‬‬
‫‪ 19.1.3‬ﺭﻤﻭﺯ ﺸﻔﺭﺓ ‪865 ------------------------------ -------------------------------- EBCDIC‬‬
‫‪ D‬ﻤﻌﺩﻻﺕ ﺍﻟﻭﺼﻭل ‪867 --------------------------------------------------------------------------------------------‬‬
‫‪ E‬ﺃﻨﻭﺍﻉ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪869 ------------------------------------------------------------------ PRIMITIVE TYPES‬‬
‫‪ F‬ﺍﻟﻨﻅﺎﻡ ﺍﻟﻌﺩﺩﻱ‪870 ------------------------------------------------------------------------------------------------‬‬
‫‪ 19.2‬ﺍﻟﻨﻅﺎﻡ ﺍﻟﻌﺸﺭﻱ ‪870 ---------------------------------------------------------DECIMAL SYSTEM‬‬
‫‪ 19.3‬ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻨﺎﺌﻲ ‪871 ------------------------------------------------------------ BINARY SYSTEM‬‬
‫‪ 19.3.1‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻨﺎﺌﻲ ﺇﻟﻰ ﺍﻟﻨﻅﺎﻡ ﺍﻟﻌﺸﺭﻱ ‪871 -------------------------------------------‬‬
‫‪ 19.3.2‬ﺘﺤﻭﻴل ﺍﻷﻋﺩﺍﺩ ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﻌﺸﺭﻱ ﺇﻟﻰ ﺍﻟﺜﻨﺎﺌﻲ ‪872 -------------------------------------------‬‬
‫‪ 19.3.3‬ﺇﺠﺭﺍﺀ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﻋﻠﻰ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺜﻨﺎﺌﻴﺔ ﺍﻟﻤﻭﺠﺒﺔ ‪875 -----------------------------------‬‬
‫‪ 19.4‬ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻤﺎﻨﻲ ‪878 ------------------------------------------------------------- OCTAL SYSTEM‬‬
‫‪ 19.4.1‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻤﺎﻨﻲ ﺇﻟﻰ ﺍﻟﻌﺸﺭﻱ ‪878 ----------------- --------------------------------‬‬
‫‪ 19.4.2‬ﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﻌﺸﺭﻱ ﺇﻟﻰ ﺍﻟﺜﻤﺎﻨﻲ ‪879 --------------------------------------------------‬‬
‫‪ 19.4.3‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻤﺎﻨﻲ ﺇﻟﻰ ﺍﻟﺜﻨﺎﺌﻲ ‪881 --------------------------------------------------‬‬
‫‪ 19.4.4‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻨﺎﺌﻲ ﺇﻟﻰ ﺍﻟﺜﻤﺎﻨﻲ ‪882 --------------------------------------------------‬‬
‫‪ 19.4.5‬ﺠﻤﻊ ﻭﻁﺭﺡ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺜﻤﺎﻨﻴﺔ ‪883 -----------------------------------------------------------‬‬
‫‪ 19.4.6‬ﻀﺭﺏ ﻭﻗﺴﻤﺔ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺜﻤﺎﻨﻴﺔ ‪884 ---------------------------------------------------------‬‬
‫‪ 19.5‬ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ‪885 ------------------------------------------HEXADECIMAL SYSTEM‬‬
‫‪ 19.5.1‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ﺇﻟﻰ ﺍﻟﻌﺸﺭﻱ ‪886 ------------------------------------------‬‬
‫‪ 19.5.2‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﻌﺸﺭﻱ ﺇﻟﻰ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ‪886 ------------------------------------------‬‬
‫‪ 19.5.3‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ﺇﻟﻰ ﺍﻟﺜﻨﺎﺌﻲ ‪888 --------------------------------------------‬‬
‫‪ 19.5.4‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻨﺎﺌﻲ ﺇﻟﻰ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ‪889 --------------------------------------------‬‬
‫‪ 19.5.5‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ﺇﻟﻰ ﺍﻟﺜﻤﺎﻨﻲ ‪890 -------------------------------------------‬‬
‫‪ 19.5.6‬ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺜﻤﺎﻨﻲ ﺇﻟﻰ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ‪891 -------------------------------------------‬‬
‫‪ 19.5.7‬ﺠﻤﻊ ﻭ ﻁﺭﺡ ﺍﻷﻋﺩﺍﺩ ﻓﻲ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ‪891 ------------------------------------------‬‬
‫‪ 19.5.8‬ﻀﺭﺏ ﻭﻗﺴﻤﺔ ﺍﻷﻋﺩﺍﺩ ﻓﻲ ﺍﻟﻨﻅﺎﻡ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺭ ‪892 ------------------------------------------‬‬
‫‪ 19.6‬ﺘﻤﺜﻴل ﺍﻷﻋﺩﺍﺩ ﺍﻟﺴﺎﻟﺒﺔ ‪894 -------------------------------------------------- SIGNED NUMBERS‬‬
‫‪ 19.6.1‬ﺍﻟﺘﻤﺜﻴل ﺒﻭﺍﺴﻁﺔ ﺍﻹﺸﺎﺭﺓ ﻭ ﺍﻟﻤﻘﺩﺍﺭ ‪894 ---------------------- --------------------------------‬‬
‫‪ 19.6.2‬ﺍﻟﺘﻤﺜﻴل ﺒﻭﺍﺴﻁﺔ ﺍﻟﻤﻜﻤل ﻟﻸﺴﺎﺱ ‪895 ------------------------ --------------------------------‬‬
‫‪ 19.6.3‬ﺍﻟﺘﻤﺜﻴل ﺒﻭﺍﺴﻁﺔ ﺍﻟﻤﻜﻤل "ﻟﻸﺴﺎﺱ ﺍﻷﺼﻐﺭ ‪896 ------------------------------------------------‬‬
‫ﺠﻤﻊ ﻭﻁﺭﺡ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺜﻨﺎﺌﻴﺔ ﺒﺈﺴﺘﻌﻤﺎل ﺍﻟﻤﻜﻤل ﻟﻭﺍﺤﺩ ‪898 --------------------------------- S'1‬‬ ‫‪19.6.4‬‬
‫ﺠﻤﻊ ﻭ ﻁﺭﺡ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺜﻨﺎﺌﻴﺔ ﺒﺈﺴﺘﻌﻤﺎل ﺍﻟﻤﻜﻤل ﻹﺜﻨﻴﻥ ‪903 ------------------------------- 2'S‬‬ ‫‪19.6.5‬‬
‫ﻁﺭﻕ ﻀﺭﺏ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪906 -----------------------------------------------------------‬‬ ‫‪19.6.6‬‬
‫‪ 19.6.7‬ﻁﺭﻕ ﻗﺴﻤﺔ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪908 ---------------------------- --------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪477‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 19.7‬ﺘﻤﺜﻴل ﺍﻷﻋﺩﺍﺩ ﺒﻭﺍﺴﻁﺔ ﺍﻟﻨﻘﻁﺔ ﺍﻟﻌﺎﺌﻤﺔ ‪909 ------------------------------------------------------------------‬‬
‫‪ G‬ﻤﺼﻁﻠﺤﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ‪912 -----------------------------------------------------------------------------------------‬‬

‫ﻓﻬﺭﺱ ﺒﺎﻷﻟﻔﺎﻅ ‪913 ----------------------------------------------------------------------------------------------------‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪478‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪Chp15‬‬

‫ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت‬

‫ﻓﻲ ﻨﻬﺎﻴﺔ ﻫﺫﺍ ﺍﻟﻔﺼل ﺴﻭﻑ ﺘﺘﻌﻠﻡ ‪:‬‬


‫ﻣﻘﺪﻣﺔ إﻟﻰ ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت‬ ‫•‬
‫أﻧﻮاع ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت‪.‬‬ ‫•‬
‫اﻟﺘﻌﺮف ﻋﻠﻰ اﻟﻤﻜﺪس ‪ ,‬اﻟﻄﺎﺑﻮر ‪ ,‬اﻟﻘﻮاﺋﻢ ‪ ,‬اﻷﺷﺠﺎر‪.‬‬ ‫•‬
‫ﺗﻤﺜﯿﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺪﯾﻨﺎﻣﯿﻜﯿﺔ‪.‬‬ ‫•‬

‫اﻟﻒ‬ ‫‪1‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪479‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪INTRODUCTION‬‬ ‫‪ 1.1‬ﻣﻘﺪﻣﺔ‬

‫ﻣﻦ اﻟﻤﺄﻟﻮف ﻗﺒﻞ اﻟﺸﺮوع إﻟﻰ ﻓﮭﻢ ﺷﻲء ﯾﺠﺐ ﻣﻌﺮﻓﺔ ﺗﻮاﺑﻌﮫ وﺗﻔﺎﻋﻞ ھﺬه اﻟﻌﻨﺎﺻﺮ ﻣﻊ ﺑﯿﺌﺘﮭﺎ‬
‫اﻟﻤﺘﻮاﻓﺮة ﻓﯿﮭﺎ واﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﯾﻤﻜﻦ أن ﺗﺤﺪث ﻋﻠﻰ ھﺬه اﻟﻌﻨﺎﺻﺮ اﻟﺘﻲ ﺗﺆﻟﻒ ﻓﯿﻤﺎ ﺑﯿﻨﮭﺎ وﺣﺪة‬
‫ﻣﺘﻨﺎﻏﻤﺔ ﻣﺘﺮاﺑﻄﺔ ﻟﻜﻲ ﺗﻮﺻﻞ اﻟﻔﻜﺮة إﻟﻰ اﻟﻌﻘﻞ ﺑﺸﻜﻞ ﺟﯿﺪ وﺳﺮﯾﻊ‪.‬‬
‫وﻣﻦ اﻷﺷﯿﺎء اﻟﺘﻲ ﯾﺠﺐ ﺗﺤﺪﯾﺪھﺎ ﻛﻤﺘﺨﺼﺼﯿﻦ ﻓﻲ ﻋﻠﻢ اﻟﺤﺎﺳﺐ اﻵﻟﻲ ھﻲ اﻟﺒﯿﺎﻧﺎت ‪DATA‬‬
‫و اﻟﻤﻌﻠﻮﻣﺎت ‪ INFORMATION‬ﻹﻧﮭﺎ ھﻲ أﺳﺎس ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ اﻟﺤﺎﺳﺐ‪.‬‬
‫ﻓﻤﺎ ھﻲ اﻟﺒﯿﺎﻧﺎت وﻣﺎ ھﻲ اﻟﻤﻌﻠﻮﻣﺎت وﻛﯿﻒ ﯾﻤﻜﻦ ﻟﻨﺎ أن ﻧﺤﺪدھﺎ ؟‬
‫ﻓﺎﻟﺒﯿﺎﻧﺎت ‪/‬ھﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺤﻘﺎﺋﻖ أو اﻷﻓﻜﺎر ﻗﺪ ﺗﻜﻮن ﺣﺮوف أو أرﻗﺎم أو ﺻﻮراُ أو ﺧﻠﯿﻄﺎُ ﻣﻤﺎ‬
‫ﺳﺒﻖ‪.‬‬
‫واﻟﻤﻌﻠﻮﻣﺎت ‪/‬ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺤﻘﺎﺋﻖ واﻷﻓﻜﺎر ﻋﻦ ﺷﻲء ﻣﺎ ﺗﻤﺖ ﻣﻌﺎﻟﺠﺘﮭﺎ ‪.‬‬
‫إذن ﻓﺎﻟﺒﯿﺎﻧﺎت ھﻲ اﻟﻤﺎدة اﻟﺨﺎم ﻟﻠﻤﻌﻠﻮﻣﺎت أو أن اﻟﻤﻌﻠﻮﻣﺎت ھﻲ اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ ﻣﻌﺎﻟﺠﺘﮭﺎ وﻣﻦ اﻟﻮاﺿﺢ‬
‫آن اﻟﻔﺮق اﻷﺳﺎﺳﻲ ﺑﯿﻨﮭﻢ ھﻲ اﻟﻤﻌﺎﻟﺠﺔ ‪.‬‬
‫أﻧﻮاع اﻟﻤﻌﺎﻟﺠﺔ ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت‬ ‫•‬
‫‪ .1‬اﻹﺿﺎﻓﺔ‪.‬‬
‫‪ .2‬اﻟﺤﺬف أو اﻹﻟﻐﺎء ‪.‬‬
‫‪ .3‬اﻟﺪﻣﺞ ‪.‬‬
‫‪ .4‬اﻟﻔﺮز ‪.‬‬
‫‪ .5‬اﻟﺘﺤﻠﯿﻞ واﻟﺘﺮﻛﯿﺐ ﺑﺎﺳﺘﺨﺪام اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ )‪(/, -,*, +‬واﻟﻌﻤﻠﯿﺎت اﻟﻤﻨﻄﻘﯿﺔ‬
‫)= ‪. (< ,>, <= ,>=, !=,‬‬
‫‪ .6‬اﻟﻨﺴﺦ اﻻﻟﻜﺘﺮوﻧﻲ )‪.(SAVE‬‬
‫‪ .7‬اﻟﺤﻤﺎﯾﺔ واﻟﻔﻚ ‪.‬‬
‫‪ .8‬اﻻﺳﺘﺮﺟﺎع واﻟﺘﻌﺪﯾﻞ واﻟﺘﺨﺰﯾﻦ ‪.‬‬

‫إذن ﻟﻜﻲ ﻧﺤﺼﻞ ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﻻﺑﺪ ﻣﻦ اﻟﺤﺼﻮل ﻋﻠﻰ ﺑﯿﺎﻧﺎت أوﻻُ ﺛﻢ اﻟﻘﯿﺎم ﺑﻤﻌﺎﻟﺠﺔ ھﺬه اﻟﺒﯿﺎﻧﺎت‬
‫ﻣﻌﺎﻟﺠﺔ ﺻﺤﯿﺤﺔ‪.‬‬
‫• اﻟﺘﺮﻛﯿﺐ اﻟﻔﯿﺰﯾﺎﺋﻲ واﻟﺘﺮﻛﯿﺐ اﻟﻤﻨﻄﻘﻲ ﻟﻠﺒﯿﺎﻧﺎت‬
‫ﻧﺠﺪ أن ﺳﺮﻋﺔ ﻣﻌﺎﻟﺠﺔ اﻟﺒﯿﺎﻧﺎت ﺗﻌﺘﻤﺪ ﻛﺜﯿﺮاً ﻋﻠﻰ ﻋﺪة ﻋﻮاﻣﻞ أﺿﺎﻓﮫ إﻟﻰ اﻟﻌﺎﻣﻞ اﻟﺰﻣﻨﻲ اﻟﻼزم‬
‫ﻟﻠﻤﻌﺎﻟﺠﺔ وﻣﻦ أھﻤﯿﺘﮭﺎ‬
‫‪ ü‬ﻋﻮاﻣﻞ ﺗﺤﺪد ﻣﻦ اﻟﺬاﻛﺮة اﻟﺮﺋﯿﺴﯿﺔ‪.‬‬
‫‪ ü‬ﻋﻮاﻣﻞ ﺗﺤﺪد ﻣﻦ وﺣﺪات اﻹدﺧﺎل واﻹﺧﺮاج‪.‬‬
‫‪ ü‬ﻋﻮاﻣﻞ ﺗﺤﺪد ﻣﻦ ﺗﻔﺎﻋﻞ اﻹدﺧﺎل واﻹﺧﺮاج ﻣﻊ اﻟﺬاﻛﺮة اﻟﺮﺋﯿﺴﯿﺔ)ﺗﺒﺎدل اﻟﻤﻌﻠﻮﻣﺎت ﺑﯿﻦ ھﺬه‬
‫اﻟﻮﺣﺪات أي ﻋﻤﻠﻲ ﻣﻘﺎﯾﻀﺔ‪.‬‬
‫ﻧﺠﺪ أن اﻟﻌﺎﻣﻞ اﻷول ﯾﺘﻄﻠﺐ وﺟﻮد ﺑﺮﻧﺎﻣﺞ ﻟﻠﻤﻌﺎﻟﺠﺔ واﻟﻨﺴﺒﺔ ﻟﻠﻌﺎﻣﻞ اﻟﺘﺄﻧﻲ ﻓﺄﻧﺔ ﯾﺘﻄﻠﺐ ﺳﺮﻋﺔ‬
‫ﻟﻠﻮﺻﻮل إﻟﻰ اﻟﻤﻌﻠﻮﻣﺎت ﻹﺣﻀﺎرھﺎ ﻣﻦ اﻟﻮﺣﺪات اﻹدﺧﺎل ‪ ,‬واﻟﺬي ﯾﮭﻤﻨﺎ ھﻮ اﻹﻗﻼل ﻣﻦ ﻋﻤﻠﯿﺔ‬
‫اﻟﻤﻘﺎﯾﻀﺔ ﺑﯿﻦ اﻟﺬاﻛﺮة اﻟﺮﺋﯿﺴﯿﺔ ووﺣﺪات اﻹدﺧﺎل واﻹﺧﺮاج وﻟﮭﺬا ﻻﺑﺪ ﻣﻦ اﻹﺷﺎرة إﻟﻰ اﻟﺘﺮﻛﯿﺐ‬
‫اﻟﻔﯿﺰﯾﺎﺋﻲ واﻟﻤﻨﻄﻘﻲ ﻟﻠﺒﯿﺎﻧﺎت ﺣﯿﺖ ﻧﺠﺪ ﺗﻌﺮﯾﻒ اﻻﺛﻨﯿﻦ ﺑﺎﺧﺘﺼﺎر‬
‫اﻟﺘﺮﻛﯿﺐ اﻟﻤﻨﻄﻘﻲ ‪ /‬ھﻮ وﺟﮫ ﻧﻈﺮ اﻟﻤﺒﺮﻣﺞ ﻓﻲ ﺳﯿﺮ اﻟﺒﺮﻧﺎﻣﺞ أي آن ھﺬا ﺗﺮﺗﯿﺐ ﻣﻌﻠﻮﻣﺎت اﻟﺒﺮﻧﺎﻣﺞ‬
‫ﺑﺸﻜﻞ ﻣﻌﯿﻦ ﺣﺘﻰ ﯾﺘﻢ ﺗﻨﻔﯿﺬ ھﺬا اﻟﺒﺮﻧﺎﻣﺞ ﺑﻄﺮﯾﻘﺔ ﺻﺤﯿﺤﺔ ‪.‬‬
‫اﻟﺘﺮﻛﯿﺐ اﻟﻔﯿﺰﯾﺎﺋﻲ ‪ /‬وھﻮ ﯾﻌﻨﻲ ﻛﯿﻔﯿﺔ ﺗﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ أوﺳﺎط اﻟﺘﺨﺰﯾﻦ ﻣﺜﻞ اﻟﺸﺮﯾﻂ اﻟﻤﻐﻨﺎﻃﯿﺴﻲ‬
‫واﻟﻘﺮص اﻟﻤﻐﻨﺎﻃﯿﺴﻲ ﺣﯿﺖ ﺗﺨﺰن اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ اﻟﻘﺮص اﻟﻤﻐﻨﺎﻃﯿﺴﻲ ﺑﻄﺮﯾﻘﺔ ﻣﺒﺎﺷﺮة أو ﺗﺘﺎﺑﻌﯿﮫ أي‬
‫ﺗﺴﻠﺴﻠﯿﺔ ﻣﻔﮭﺮﺳﺔ‪.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪480‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت وﺗﺮاﻛﯿﺐ اﻟﺒﯿﺎﻧﺎت وﺑﻨﻲ اﻟﻤﻌﻄﯿﺎت ﻟﮭﻤﺎ ﻧﻔﺲ اﻟﻤﻌﻨﻰ ‪/‬ﻋﺒﺎرة ﻋﻦ آﻟﯿﺎت وﺧﻮارزﻣﯿﺎت‬
‫ﻣﻌﯿﻨﺔ ﺗﻮﺿﻊ ﻟﺒﺮاﻣﺞ ﺑﺤﯿﺚ ﺗﻄﺒﻖ ﺑﺸﻜﻞ ﺟﯿﺪ ﻓﮭﻲ ﻣﻔﯿﺪ ﺟﺪا ﻓﻲ ﺑﺮﻣﺠﮫ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت و ﺗﺴﺎﻋﺪ‬
‫ﻋﻠﻰ ﺗﻨﻔﯿﺬ ﻣﮭﺎم وﺗﺴﮭﯿﻞ ﻣﮭﺎم ﻣﻦ ﻣﮭﺎم اﻟﻜﻤﺒﯿﻮﺗﺮ وﻣﻦ اﺳﺘﻐﻼل ﻣﻮاﻗﻊ اﻟﺬاﻛﺮة ﺑﺸﻜﻞ ﺟﯿﺪ وﻣﻨﻈﻢ‬
‫وﯾﺠﺐ ﻋﻠﻰ اﻟﻤﺒﺮﻣﺞ ﺗﻄﯿﻖ ھﺬه اﻵﻟﯿﺎت ﺑﺸﻜﻞ ﺟﯿﺪ وإﻻ ﺧﻠﺖ ﻣﻦ ﻣﻌﻨﻰ اﻟﺨﻮارزﻣﯿﺔ ‪.‬‬
‫وﺑﺘﻌﺮﯾﻒ ﻣﻨﻄﻘﻲ ﻟﮫ ‪/‬ھﻲ ﻃﺮﯾﻘﮫ ﺗﺮاﺑﻂ و ﺗﺮص اﻟﺒﯿﺎﻧﺎت ﻣﻊ ﺑﻌﻀﮭﺎ اﻟﺒﻌﺾ ﻓﻲ اﻟﺬاﻛﺮة ﺑﺤﯿﺚ ھﺬه‬
‫اﻟﺒﯿﺎﻧﺎت ﺗﺘﺨﺬ ﺷﻜﻼ وھﯿﻜﻼً ﻣﻌﯿﻨﺎً ﻓﻲ اﻟﺬاﻛﺮة ﻓﺘﻌﺘﺒﺮ ﺑﻨﯿﺔ ﻋﻀﻮﯾﺔ ﻟﻤﺠﻤﻮﻋﺔ ﻣﻦ ﻋﻨﺎﺻﺮ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﻤﺘﻄﺎﺑﻘﺔ ﻧﻮﻋﺎً‬
‫وﺷﻜﻼً واﻟﺘﻲ ﺗﻨﻈﻢ ﻓﻲ ﻧﺴﻖ واﺣﺪ ﻟﺘﺆدي ﻏﺮﺿﺎَ ﻣﺤﺪداُ‪.‬‬

‫ﻓﻮاﺋﺪ ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت‬ ‫‪1.2‬‬


‫‪ ü‬اﻟﺘﺤﻜﻢ ﻓﻲ ﺗﻮزﯾﻊ اﻟﺒﯿﺎﻧﺎت و اﻟﺘﻌﺮف إﻟﻰ ﻃﺒﯿﻌﺘﮭﺎ وﺑﻨﺎﺋﮭﺎ اﻷﺳﺎﺳﻲ ﺑﻨﺴﻖ ﻣﻌﯿﻦ ﻓﻲ اﻟﺬاﻛﺮة‪.‬‬
‫‪ ü‬ﺑﻨﺎء ﺑﺮاﻣﺞ ﻗﻮﯾﺔ وﻣﺘﻤﺎﺳﻜﺔ ﻣﻦ ﺣﯿﺖ اﻟﺒﻨﺎء واﻟﻤﻨﻄﻖ‪.‬‬
‫‪ ü‬ﺗﻤﻜﯿﻦ اﻟﻤﺒﺮﻣﺞ ﻣﻦ أﺑﺪاع ﻃﺮق ﻣﺒﺘﻜﺮة ﻓﻲ ﻛﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ اﻟﻤﺨﺘﻠﻔﺔ‪.‬‬
‫‪ ü‬اﺧﺘﺼﺎر زﻣﻦ اﻟﺘﺨﺰﯾﻦ واﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺬاﻛﺮة ‪.‬‬

‫أﻧﻮاع ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت‬ ‫‪1.3‬‬


‫ھﯿﺎﻛﻞ ﺑﯿﺎﻧﺎت ﺛﺎﺑﺘﺔ ﺳﺎﻛﻨﺔ )‪.(STATIC INFORMATION‬‬
‫ﻛﺎﻟﻤﺘﺠﮭﺎت واﻟﺠﺪاول واﻟﺴﺠﻼت وﻋﻨﺪ اﻟﺘﺼﺮﯾﺢ ﻋﻨﮭﺎ ﻓﯿﺠﺐ ﺗﺤﺪي ﺣﺠﻢ ھﺬه اﻟﺒﯿﺎﻧﺎت ﻓﻼ ﺗﻘﺒﻞ‬
‫اﻹﺿﺎﻓﺔ ﻓﻮق ﺣﺠﻤﮭﺎ اﻟﻤﺤﺪد ‪.....‬‬
‫ھﯿﺎﻛﻞ ﺑﯿﺎﻧﺎت ﺷﺒﻜﯿﺔ‪.‬‬
‫ھﯿﺎﻛﻞ ﺑﯿﺎﻧﺎت دﯾﻨﺎﻣﯿﻜﯿﺔ إي ﻣﺘﺤﺮﻛﺔ ﻣﺘﻐﯿﺮة‬
‫وﯾﻨﻘﺴﻢ ھﺬا اﻟﻨﻮع إﻟﻰ ﻧﻮﻋﯿﻦ‬
‫‪(1‬ھﯿﺎﻛﻞ ﺑﯿﺎﻧﺎت ﺧﻄﯿﺔ ﻣﺘﻐﯿﺮة ‪ /‬وھﻲ اﻟﺘﻲ ﺗﻨﻈﻢ ﻓﻲ ﺧﻂ ﻣﺘﺘﺎﻟﻲ‬
‫‪ v‬اﻟﻤﻠﻔﺎت ‪.‬‬
‫‪ v‬اﻟﻘﻮاﺋﻢ ‪.‬‬
‫‪ v‬اﻟﻄﻮاﺑﯿﺮ ‪.‬‬
‫‪ v‬اﻟﻤﻜﺪﺳﺎت ‪.‬‬
‫‪ v‬اﻷﺑﺠﺪﯾﺎت ‪.‬‬
‫‪ v‬اﻟﻤﺠﻤﻮﻋﺎت ‪.‬‬
‫‪(2‬ھﯿﺎﻛﻞ ﺑﯿﺎﻧﺎت ﻣﺘﺸﻌﺒﺔ إي ﺑﺸﻜﻞ ﻋﺸﻮاﺋﻲ ﻣﺨﺰﻧﺔ ﻓﻲ اﻟﺬاﻛﺮة ‪ /‬ﻣﺜﻞ اﻷﺷﺠﺎر ‪ ,‬اﻟﺨﺮاﺋﻂ‬
‫وﺳﻨﺘﻜﻠﻢ ﻋﻦ ھﺬه اﻟﻤﻮاﺿﯿﻊ ﻣﺒﺪﺋﯿﺎً ﺑﺎﻟﮭﯿﺎﻛﻞ اﻻﺳﺘﺎﺗﯿﻜﯿﺔ ﺑﻮاﺳﻄﺔ اﻟﻤﺘﺠﮭﺎت ‪.....‬‬

‫‪ 1.4‬اﻟﻤﻜﺪس )‪(Stack‬‬
‫وھﻮ ﻋﺒﺎرة ﻋﻦ ﻧﻤﻮذج ﺧﺎص ﻟﺘﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﯿﺔ ﺛﺎﺑﺘﺔ وإﺧﺮاﺟﮭﺎ ﺑﺎﻟﯿﮫ ﺛﺎﺑﺘﺔ ﺑﺸﻜﻞ ﻣﺆﻗﺖ وھﻮ‬
‫ﻋﺒﺎرة ﻋﻦ ﺻﻨﺪوق ﺗﻮﺿﻊ ﺑﮫ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﯿﺔ اﻟﺪاﺧﻞ أوﻻ اﻟﺨﺎرج أﺧﺮا واﻟﺪاﺧﻞ أﺧﺮا اﻟﺨﺎرج أوﻻ‬
‫)‪LIFO (LAST INPUT FIRST OUTPUT‬‬
‫وﻛﻤﺜﺎل ﺑﺴﯿﻂ أﯾﻀﺎ ﻧﺸﺒﮫ ﻋﻤﻠﺔ ﺑﻘﺸﻄﮫ اﻟﻤﺴﺪس اﻟﺮﺻﺎﺻﺔ اﻷوﻟﻰ ﺗﺨﺮج أﺧﺮ ﺷﻲء واﻟﺮﺻﺎﺻﺔ‬
‫اﻷﺧﯿﺮة ﺗﺨﺮج أوﻻً وﻟﮭﺬا ﻓﺎن اﻹﺿﺎﻓﺔ ﺗﺘﻢ ﻣﻦ اﻷﻋﻠﻰ واﻟﺤﺬف و ﯾﻮﺟﺪ ﻣﺆﺷﺮ واﺣﺪ ﯾﺴﻤﻰ ‪. top‬‬
‫واﻟﻘﺮاءة أﯾﻀﺎ ﯾﺘﻢ ﻣﻦ اﻷﻋﻠﻰ إي ﻣﻦ ﻃﺮف واﺣﺪ ﻋﻦ ﻃﺮﯾﻖ ‪ top‬ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪.15-1‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪481‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺷﻜﻞ ‪15-1‬‬

‫‪ 1.4.1‬ﻓﻮاﺋﺪ اﻟﻤﻜﺪس‬
‫‪ ü‬إﯾﺠﺎد ﻗﯿﻢ اﻟﺘﻌﺎﺑﯿﺮ اﻟﺤﺴﺎﺑﯿﺔ‬
‫‪ ü‬ﯾﺴﺘﺨﺪم ﻟﻐﺎﯾﺎت اﻻﺳﺘﺪﻋﺎء اﻟﺬاﺗﻲ‬
‫‪ ü‬ﻓﻲ ﻋﻤﻠﯿﺎت اﻻﻋﺘﺮاض واﻟﻤﻘﺎﻃﻌﺔ اﻟﻤﺴﺘﺨﺪﻣﺔ ﺑﺎﻟﻮﯾﻨﺪوز‬
‫‪ ü‬اﺳﺘﺪﻋﺎء اﻟﺒﺮاﻣﺞ اﻟﻔﺮﻋﯿﺔ‬

‫وﻣﻦ اﻹﺷﻜﺎل اﻟﺴﺎﺑﻘﺔ ﻧﺠﺪ أن اﻟﻤﻜﺪس ﻻ ﯾﺤﺘﻮي إﻻ ﻋﻠﻰ ﻣﺆﺷﺮ واﺣﺪ ﻓﻘﻂ ‪TOP‬‬

‫ﻓﻌﻨﺪﻣﺎ ﯾﻜﻮن اﻟﻤﻜﺪس ﻓﺎرﻏﺎُ ﻓﺄن ‪ TOP=-1‬وﻋﻨﺪ إدﺧﺎل أول ﻗﯿﻤﺔ ﻓﺈﻧﻨﺎ ﻧﺰﯾﺪ ﻣﻦ‬
‫ﻗﯿﻤﺔ ‪ ++ TOP‬وﻛﻞ ﻣﺎ أدﺧﻠﻨﺎ ﻗﯿﻤﺔ ﻓﺎن اﻟﻤﺆﺷﺮ ﯾﺰﯾﺪ ﺑﻤﻘﺪار واﺣﺪ إﻟﻰ أن ﯾﻤﺘﻠﺊ اﻟﻤﻜﺪس‬
‫واﻟﺸﻜﻞ ‪ 15-2‬ﯾﺒﯿﻦ ذﻟﻚ‪.‬‬

‫ﺷﻜﻞ ‪15-2‬‬

‫وﻋﻤﻠﯿﺔ أﺧﺮاج اﻟﻘﯿﻢ ﻣﻦ اﻟﻤﻜﺪس ﻓﺈﻧﻨﺎ ﻧﻨﻘﺺ اﻟﻤﺆﺷﺮ ﺑﻤﻘﺪار واﺣﺪ أﯾﻀﺎ إﻟﻰ أن ﯾﺼﻞ ﻗﯿﻤﺔ اﻟﻤﺆﺷﺮ‬
‫= ‪ 1-‬أو ‪ NULL‬ﻓﺒﮭﺎﻛﺪا ﯾﻜﻮن اﻟﻤﻜﺪس ﻓﺎرﻏﺎُ‪.‬‬

‫‪ 1.4.2‬ﻃﺮق ﺗﻤﺜﯿﻞ اﻟﻤﻜﺪس وﺗﺨﺰﯾﻦ ﻋﻨﺎﺻﺮه ﻓﻲ اﻟﺬاﻛﺮة وﺗﺎﻣﯿﻦ ﻋﻤﻠﯿﺔ ﺑﻠﻮﻏﮭﺎ‬


‫‪ ü‬اﻟﺘﻤﺜﯿﻞ اﻟﻤﺘﺮاﺑﻂ اﻟﺤﻠﻘﻲ ﻟﻌﻨﺎﺻﺮ اﻟﻤﻜﺪس ﻋﻠﻰ ﺷﻜﻞ ﻻﺋﺤﺔ إي ﻋﻠﻰ ﺷﻜﻞ ﻗﺎﺋﻤﺔ ‪.‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪482‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


. ‫( ﻟﻠﻌﻨﺎﺻﺮ ﻓﻲ اﻟﺬاﻛﺮة إي ﻋﻠﻰ ﺷﻜﻞ ﻣﺼﻔﻮﻓﺔ أﺣﺎدﯾﺔ‬COMPACT) ‫ اﻟﺘﻤﺜﯿﻞ اﻟﻤﺘﺮاص‬ü
15-3 ‫وﻛﻤﺜﺎل ﻋﻠﻰ ﺗﻤﺜﯿﻞ اﻟﻤﻜﺪس ﺑﺎﻟﻤﺘﺠﮭﺎت ﻟﻨﻨﻈﺮ إﻟﻰ اﻟﺸﻜﻞ‬

15-3 ‫ﺷﻜﻞ‬

‫( وإذا أردﻧﺎ إﺧﺮاج ﻗﯿﻤﺔ ﻓﺎن اﻟﻤﻜﺪس‬X) ‫( وأدﺧﻠﻨﺎ أﺧﺮ ﻗﯿﻤﺔ‬4 ) ‫وﻟﻨﻔﺘﺮض أن ﻟﺪﯾﻨﺎ ﻣﺼﻔﻮﻓﺔ ﺣﺠﻢ‬
15-3 ‫( ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ‬x) ‫ﺳﯿﻌﻄﻲ ﻟﻨﺎ أﺧﺮ ﻗﯿﻤﺔ دﺧﻠﺖ وھﻲ‬
‫وھﺬا أول ﺑﺮﻧﺎﻣﺞ ﻟﮫ ﯾﻌﻤﻞ ﻋﻠﻰ إدﺧﺎل ﻗﯿﻢ داﺧﻞ اﻟﻤﻜﺪس ﺛﻢ ﯾﻘﻮم ﺑﻄﺒﺎﻋﺘﮫ‬

1. //ArrayStack
2. import java.io.*;
3. class Chp15_1 {
4. static final int CAPACITY = 5;
5. static int[] Stack1 = new int[CAPACITY];
6. static int top = -1;
7.
8. static boolean isEmpty(){return (top < 0);}
9.
10. static boolean isFull() {return (top+1== CAPACITY);}
11.
12. static void push(int element){
13. if (isFull())
14. System.out.println("Stack is full.");
15. else
16. Stack1[++top] = element;
17. }
18.
19. static int pop() {
20.
21. if (isEmpty()){
22. System.out.println("Stack is
empty.");
23. System.exit( 0 );
24. }
25. return Stack1[top--];
26. }
Aldopaee@ho tmail.co m 483 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬
‫‪27.‬‬
‫{ ‪28. public static void main(String args[])throws IOException‬‬
‫;‪29. String num‬‬
‫= ‪30. BufferedReader br‬‬ ‫‪new‬‬ ‫‪BufferedReader(new‬‬
‫;))‪InputStreamReader(System.in‬‬
‫;) "‪31. System.out.println( "Enter first integer‬‬
‫))(‪32. while(!isFull‬‬
‫‪33.‬‬ ‫;)(‪{num=br.readLine‬‬
‫‪34.‬‬ ‫;))‪push(Integer.parseInt(num‬‬
‫‪35.‬‬ ‫}‬
‫‪36.‬‬
‫;)" "‪37. while(!isEmpty())System.out.println(pop()+‬‬
‫‪38.‬‬
‫} ‪39.‬‬
‫} ‪40.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬
‫ﻓﻲ اﻟﺴﻄﺮ ‪ 6‬ﺗﻢ ﺗﻌﺮﯾﻒ ‪ Top‬وﯾﺴﻤﻰ ذﯾﻞ اﻟﻤﻜﺪس وھﻮ ﻣﺘﻐﯿﺮ ﻋﺎم ﺗﺴﺘﻄﯿﻊ اﻟﺪوال اﻟﻮﺻﻮل إﻟﯿﺔ‬
‫وﺗﻐﯿﺮ ﻗﯿﻤﺘﮫ ‪.‬‬
‫اﻟﺴﻄﺮ ‪ 19‬داﻟﺔ أﺧﺮاج اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻤﻜﺪس‬
‫اﻟﺴﻄﺮ ‪ 12‬داﻟﺔ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻤﻜﺪس وھﻲ ﺗﺄﺧﺬ ﺑﺎ را ﻣﺘﺮ ﻣﻦ ﻧﻮع ﻣﺼﻔﻮﻓﺔ وﻣﻦ ﻧﻮع أﻧﺘﺠﺮ‬

‫ﻧﻌﻠﻢ أن اﻟﻤﻜﺪس ﻣﻤﺘﻠﺊ ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻣﺆﺷﺮ اﻟﺬﯾﻞ أي ‪ = top‬ﺣﺠﻢ اﻟﻤﺼﻔﻮﻓﺔ ‪1-‬‬
‫وإﻻ ﺳﻨﺰﯾﺪ ﻣﻦ اﻟﻤﺆﺷﺮ ﺑﻮاﺣﺪ وﺳﻨﻀﻊ اﻟﻘﯿﻤﺔ ﺑﺪاﺧﻞ اﻟﻤﺼﻔﻮﻓﺔ ﺑﺪاﺧﻞ اﻟﻤﻮﻗﻊ اﻟﺬي ﺗﻜﻮن ﻗﯿﻤﺘﮫ ‪top‬‬

‫‪ STACK TOP ,PUSH,POP‬ﻛﻞ ھﺬه اﻟﺘﻌﺎﺑﯿﺮ ﻋﺒﺎرة ﻋﻦ أﺳﻤﺎء ﻣﺘﻐﯿﺮات وﻟﯿﺲ ﻣﻦ اﻟﻀﺮوري‬
‫اﻟﺘﻘﯿﺪ ﺑﮭﺬه اﻷﺳﻤﺎء ﻓﮭﻲ ﻟﯿﺴﺖ دوال ‪.‬‬

‫ﻧﻌﻠﻢ أن اﻟﻤﻜﺪس أﺻﺒﺢ ﻓﺎرﻏﺎً ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﻗﯿﻤﺔ اﻟﻤﺆﺷﺮ ‪ 1- = top‬أي اﻗﻞ ﻣﻦ اﻟﺼﻔﺮ‬
‫وإﻻ ﺳﻨﺨﺮج اﻟﻘﯿﻤﺔ ﻣﻦ داﺧﻞ اﻟﻤﺼﻔﻮﻓﺔ اﻟﺘﻲ ﺗﺤﻤﻞ ﻋﻨﻮان ﻗﯿﻤﺔ ‪ top‬وﺳﻨﻄﺮح ﻗﯿﻤﺔ اﻟﻤﺆﺷﺮ ﺑﻮاﺣﺪ ‪.‬‬

‫ﻓﯿﻜﻮن ﻧﺎﺗﺞ ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪484‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


15-4 ‫ﺷﻜﻞ‬

‫ ﯾﺘﺒﯿﻦ ﻟﻨﺎ إﻟﯿﮫ ﻋﻤﻞ اﻟﻤﻜﺪس ﻓﯿﺎ أﺣﺒﺎﺑﻲ ﻻ ﯾﺨﯿﻔﻜﻢ ھﺬا اﻟﻤﺼﻄﻠﺢ‬15-4 ‫وﻣﻦ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ واﻟﺸﻜﻞ‬
.ً‫ ﻣﺼﻔﻮﻓﺔ وﻻ ﯾﺨﺘﻠﻒ ﻋﻨﮭﺎ إﻟﻰ ﺑﺸﻲء واﺣﺪ أﻻ وھﻲ إﻟﯿﮫ ﻋﻤﻠﺔ اﻟﺘﻲ ذﻛﺮﻧﺎھﺎ ﺳﺎﺑﻘﺎ‬STACK ‫اﻟﻐﺮﯾﺐ‬

pop ‫وﻛﻤﺜﺎل أﺧﺮ ﺳﻨﻘﻮم ﺑﺎﺳﺘﺨﺮاج اﻛﺒﺮ ﻗﯿﻤﺔ ﺑﺎﻟﻤﻜﺪس ﻓﻘﻂ ﺳﯿﻜﻮن اﻟﺘﻐﯿﺮ ﻓﻲ داﻟﺔ أﻹﺧﺮاج‬

1. //‫اﺳﺘﺨﺮاج اﻛﺒﺮ ﻋﺪد ﻣﻦ اﻟﻤﻜﺪس‬


2. import java.io.*;
3. class Chp15_2 {
4. static final int CAPACITY = 5;
5. static int[] Stack1 = new int[CAPACITY];
6. static int top = -1;
7.
8. static boolean isEmpty(){return (top < 0);}
9.
10. static boolean isFull() {return (top+1== CAPACITY);}
11.
12. static void push(int element){
13. if (isFull())
14. System.out.println("Stack is full.");
15. else
16. Stack1[++top] = element;
17. }
18.
19. static int pop() {
20.
21. if (isEmpty()){
22. System.out.println("Stack is
empty.");
23. System.exit( 0 );
24. }

Aldopaee@ho tmail.co m 485 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


25. return Stack1[top--];
26. }
27. static int max(){ int temp=pop(),temp2;
28. while(!isEmpty()){
29. temp2=pop();
30.
if(temp<temp2)temp=temp2;
31. }
32. return temp;
33. }
34.
35. public static void main(String args[])throws IOException {
36. String num;
37. BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
38. System.out.println( "Enter first integer" );
39. while(!isFull())
40. {num=br.readLine();
41. push(Integer.parseInt(num));
42. }
43.
44. System.out.println(max());
45.
46. }
47. }

:‫ﺷﺮح اﻟﻤﺜﺎل‬
‫اﻋﺘﻘﺪ أن اﻟﻤﺜﺎل واﺿﺢ وﺑﺴﯿﻂ وﻻ ﯾﻮﺟﺪ ﺑﺔ إي ﺗﻌﻘﯿﺪ ﻓﻘﻂ اﻻﺧﺘﻼف ﺑﯿﻨﺔ وﺑﯿﻦ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺴﺎﺑﻖ ھﻮ‬
.‫ اﻟﺘﻲ ﺗﻌﯿﺪ ﻟﻨﺎ أﻛﺒﺮ ﻗﯿﻤﺔ ﺑﺪاﺧﻞ اﻟﻤﻜﺪس‬max ‫إﺿﺎﻓﺔ ﻣﻨﮭﺎج‬

‫ اﻵن إذا ﻃﻠﺐ ﻣﻨﻚ إن ﺗﺪﺧﻞ ﺑﯿﺎﻧﺎت إﻟﻰ‬, ‫إﻻ اﻵن اﻋﺘﻘﺪ ﻗﺪ ﺗﺒﺜﺚ ﻓﻜﺮة اﻟﻤﻜﺪس واﻟﯿﺔ ﻋﻤﻠﺔ ﻓﻲ ذھﻨﻚ‬
‫اﻟﻤﻜﺪس وﺗﻌﻜﺲ اﻟﻤﻜﺪس ﻓﻜﯿﻒ ذﻟﻚ ﺳﯿﻜﻮن ﻓﻜﺮ ﻗﻠﯿﻼُ وﺗﺬﻛﺮ إﻟﯿﺔ ﻋﻤﻞ اﻟﻤﻜﺪس وﻻ ﺗﻘﻮل ﻧﻘﻮم ﺑﻄﺒﺎﻋﺔ‬
..... ‫اﻟﻤﺼﻔﻮﻓﺔ ﻣﻦ اﻟﺒﺪاﯾﺔ ﻓﮭﺬا ﻟﯿﺲ ﺻﺤﯿﺤﺎُ ﻓﻘﺪ ﺧﻠﯿﺖ ﻣﻦ ﻋﻤﻠﺔ‬
.......‫ھﺎ ھﻞ أﺗﺖ اﻟﻔﻜﺮة ﺑﻌﻘﻠﻚ ﺣﺎول وﻻ ﺗﺴﺘﻌﺠﻞ‬
‫ﯾﺒﺪو ﻟﻲ أن اﻟﻔﻜﺮة ﻟﻢ ﺗﺄﺗﻲ إﻟﯿﻚ إذن ﺻﻠﻲ ﻋﻠﻰ ﻧﺒﯿﻚ وﺗﺘﺒﻊ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺘﺎﻟﻲ ﺑﮭﺪوء‬

1. // ‫ﺑﺮﻧﺎﻣﺞ ﯾﻌﻤﻞ ﻋﻠﻰ ﻋﻜﺲ ﻣﻜﺪس‬


2. import java.io.*;
3. class Chp15_3 {
4. static final int CAPACITY = 5;
5. static int[] Stack1 = new int[CAPACITY];
6. static int top = -1;
7.
8. static boolean isEmpty(){return (top < 0);}
9.
10. static boolean isFull() {return (top+1== CAPACITY);}

Aldopaee@hotmail.co m 486 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


11.
12. static void push(int element){
13. if (isFull())
14. System.out.println("Stack is full.");
15. else
16. Stack1[++top] = element;
17. }
18. static int pop() {
19.
20. if (isEmpty()){
21. System.out.println("Stack is
empty.");
22. System.exit( 0 );
23. }
24. return Stack1[top--];
25. }
26. static void rev(){
27. int[] Stack2 = new
int[CAPACITY];
28. int[] Stack3 = new
int[CAPACITY];
29. int top2=-1,top3=-1;
30.
31.
while(top>=0)Stack2[++top2]=Stack1[top--];
32.
while(top2>=0)Stack3[++top3]=Stack2[top2--];
33.
while(top3>=0)Stack1[++top]=Stack3[top3--];
34. }
35.
36. public static void main(String args[])throws IOException {
37. String num;
38. BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
39. System.out.println( "Enter first integer" );
40. while(!isFull())
41. {num=br.readLine();
42. push(Integer.parseInt(num));
43. }
44. rev();
45. while(!isEmpty())System.out.println(pop());
46. }
47. }

:‫ﺷﺮح اﻟﻤﺜﺎل‬

Aldopaee@hotmail.co m 487 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫ﻓﻜﺮة اﻟﺒﺮﻧﺎﻣﺞ ھﻮ اﺳﺘﺨﺪام ﻣﻜﺪﺳﯿﻦ آﺧﺮﯾﻦ ﻟﻌﻤﻠﯿﺔ ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻌﻨﺪﻣﺎ ﻧﻘﻠﻨﺎ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻤﻜﺪس‬
‫اﻷول إﻟﻰ اﻟﻤﻜﺪس اﻟﺜﺎﻧﻲ ﻓﺎن اﻟﺒﯿﺎﻧﺎت ﻗﺪ اﻧﻌﻜﺴﺖ وﻟﻜﻨﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ ﻣﻜﺪس ﺛﺎﻟﺚ ﻟﻜﻲ ﻧﻌﯿﺪ اﻟﺒﯿﺎﻧﺎت‬
. ‫إﻟﻰ اﻟﻤﻜﺪس اﻷﺻﻠﻲ ﺑﺎﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﻃﻠﺒﺖ ﻣﻨﺎ وﺑﺎﻟﯿﺔ ﻋﻤﻞ اﻟﻤﻜﺪس‬

‫وھﺬا اﻟﻜﻮد ﯾﻌﻤﻞ ﻋﻠﻰ ﺣﺬف إي ﻗﯿﻤﺔ ﻣﻦ اﻟﻤﻜﺪس ؟‬

1. // ‫ﺣﺬف أي ﻋﺪد ﻣﻦ دﺗﺨﻞ اﻟﻤﻜﺪس‬


2. import java.io.*;
3. class Chp15_4 {
4. static final int CAPACITY = 5;
5. static int[] Stack1 = new int[CAPACITY];
6. static int top = -1;
7.
8. static boolean isEmpty(){return (top < 0);}
9.
10. static boolean isFull() {return (top+1== CAPACITY);}
11.
12. static void push(int element){
13. if (isFull())
14. System.out.println("Stack is full.");
15. else
16. Stack1[++top] = element;
17. }
18.
19. static int pop() {
20.
21. if (isEmpty()){
22. System.out.println("Stack is
empty.");
23. System.exit( 0 );
24. }
25. return Stack1[top--];
26. }
27. static void delete(int number){ int top2=-1,temp;
28. int[] Stack2 = new int[CAPACITY];
29. while(!isEmpty()){
30. temp=pop();
31.
if(number!=temp)Stack2[++top2]=temp;

Aldopaee@ho tmail.co m 488 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫‪32.‬‬ ‫}‬
‫‪33.‬‬ ‫‪while(top2>=0)push(Stack2[top2-‬‬
‫;)]‪-‬‬
‫‪34.‬‬ ‫}‬
‫‪35.‬‬
‫{ ‪36. public static void main(String args[])throws IOException‬‬
‫;‪37. String num‬‬
‫‪38. BufferedReader br = new BufferedReader(new‬‬
‫;))‪InputStreamReader(System.in‬‬
‫;) "‪39. System.out.println( "Enter first integer‬‬
‫))(‪40. while(!isFull‬‬
‫‪41.‬‬ ‫;)(‪{num=br.readLine‬‬
‫‪42.‬‬ ‫;))‪push(Integer.parseInt(num‬‬
‫‪43.‬‬ ‫}‬
‫‪44.‬‬
‫;)"‪45. System.out.println("Enter number delete‬‬
‫;)(‪46. num=br.readLine‬‬
‫;))‪47. delete(Integer.parseInt(num‬‬
‫;)(‪48. System.out.println‬‬
‫;))(‪49. while(!isEmpty())System.out.println(pop‬‬
‫‪50.‬‬
‫} ‪51.‬‬
‫} ‪52.‬‬

‫‪ 1.4.3‬اﻟﺼﻨﻒ ﻣﻦ ﻧﻮع ‪Stack‬‬


‫ﻟﻘﺪ ﺑﯿﻨﺎ ﻓﻲ اﻟﺴﺎﺑﻖ ﻃﺮق اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻜﺪس ‪ ,‬ﺣﯿﺚ ﻗﻤﻨﺎ ﺑﺈﻧﺸﺎء ﺟﻤﯿﻊ اﻟﻤﻨﺎھﺞ اﻟﻤﺘﻌﻠﻘﺔ ﺑﻌﻤﻠﯿﺎت اﻟﻤﻜﺪس‬
‫ﯾﺪوﯾﺎً‪.‬‬
‫ﻟﻐﮫ ‪ Java‬ﺗﻮﻓﺮ ﻟﻚ اﻟﺼﻨﻒ ‪ java.util.Stack‬اﻟﺬي ﯾﻤﻜﻨﻚ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺣﻤﯿﻊ ﻋﻤﻠﯿﺎت اﻟﻤﻜﺪس‬
‫ﻣﻦ ﺣﺬف‪,‬اﺳﺘﻌﺎدة‪,‬ﺣﺸﺮ إي ﻋﻨﺼﺮ ﻣﻦ ﻗﻤﺔ اﻟﻤﻜﺪس‪ .‬وﯾﻘﺪم اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﻤﻨﺎھﺞ ﻣﻦ أﺟﻞ ﺗﻘﺪﯾﻢ ﺑﻨﯿﺔ‬
‫ﻣﻌﻄﯿﺎت ﺗﺤﻘﻖ اﻟﻘﺎﻋﺪة اﻟﺘﺎﻟﯿﺔ ‪ :‬اﻟﺪاﺧﻞ أوﻻً اﻟﺨﺎرج أﺧﺮاً ‪ . LIFI‬واﻟﺠﺪول ‪ 15-1‬ﯾﺒﯿﻦ ﻣﻨﺎھﺞ ھﺬا‬
‫اﻟﺼﻨﻒ‪:‬‬
‫ﺟﺪول ‪15-1‬‬
‫)(‪empty‬‬ ‫ﯾﻌﯿﺪ اﻟﻘﯿﻤﺔ ‪ true‬إذا ﻛﺎن اﻟﻤﻜﺪس ﻓﺎرﻏﺎً‬
‫)(‪peek‬‬ ‫ﯾﻌﯿﺪ اﻟﻌﻨﺼﺮ اﻟﻤﻮﺟﻮد ﻓﻲ ﻗﻤﺔ اﻟﻤﻜﺪس دون أن ﯾﺤﺬﻓﮫ‬
‫)(‪push‬‬ ‫ﯾﻀﯿﻒ ﻋﻨﺼﺮ إﻟﻰ ﻗﻤﮫ اﻟﻤﻜﺪس‬
‫)(‪search‬‬ ‫ﯾﻌﯿﺪ ﻣﻜﺎن اﻟﻌﻨﺼﺮ اﻟﻤﺤﺪد ﺿﻤﻦ اﻟﻤﻜﺪس‬
‫)(‪remove‬‬ ‫ﺗﺤﺬف ﻣﻮﻗﻊ ﻋﻨﺼﺮ ﻣﺎ‬

‫وﻧﻌﺮض اﻵن ﻣﺜﺎل ﯾﺴﺘﺨﺪم ﺟﻤﯿﻊ اﻟﻤﻨﺎھﺞ اﻟﺘﻲ ذﻛﺮت ﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ‪:‬‬

‫اﺳﺘﺨﺪام اﻟﻤﻜﺘﺒﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﻜﺪس ‪1. //‬‬


‫;*‪2. import java.io.‬‬
‫{ ‪3. class Chp15_5‬‬
‫{ ‪4. public static void main(String args[])throws IOException‬‬
‫‪5.‬‬ ‫;‪String num‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪489‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


6. int i;
7. BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
8. java.util.Stack stack= new java.util.Stack();
9. System.out.println( "Enter first integer" );
10.
11. for(i=0;i<5;i++)
12. {num=br.readLine();
13. stack.push(new
Integer(Integer.parseInt(num)));
14. }
15.
16. System.out.println("Enter number Select");
17. System.out.println("1- Search");
18. System.out.println("2- Remove");
19. System.out.println("3- Desply");
20. num=br.readLine();
21.
22. switch(Integer.parseInt(num)){
23. case 1:
24. System.out.println("Enter number
Search");
25. num=br.readLine();
26. System.out.println("The Pos In "+
27. stack.search(new
Integer(Integer.parseInt(num))));
28. if(stack.search(new
Integer(Integer.parseInt(num)))<0)
29. System.out.println("Not Found
");
30. break;
31. case 2:
32. System.out.println("Enter Pos number
delete");
33. num=br.readLine();
34. stack.remove(Integer.parseInt(num));
35.
while(!stack.empty())System.out.print(stack.pop()+" ");
36. break;
37. case 3:
38.
while(!stack.empty())System.out.print(stack.pop()+" ");
39. break;
40. }
41.
42. }

Aldopaee@hotmail.co m 490 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫} ‪43.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬
‫ﻓﻲ اﻟﺴﻄﺮ ‪ 8‬ﺗﻢ اﺷﺘﻘﺎق ﺻﻨﻒ ﺟﺪﯾﺪ ﺑﺎﺳﻢ ‪ stack‬ﻣﻦ اﻟﻤﻜﺘﺒﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻜﺪس‪ .‬وﻓﻲ‬
‫اﻟﺴﻄﺮ ‪ 13‬ﺗﻢ إدﺧﺎل إﻟﻰ اﻟﻤﻜﺪس اﻟﻌﻨﺎﺻﺮ ﺑﻮاﺳﻄﺔ اﻟﺘﻌﻠﯿﻤﺔ ‪ , push‬وﺗﻼﺣﻆ أﻧﻨﺎ ﻗﻤﻨﺎ ﺑﻌﻤﻠﯿﺔ اﻟﺘﺤﻮﯾﺮ‬
‫‪ new Integer‬ﻟﻨﺤﺪد ﻧﻮع اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﯿﺨﺰﻧﮭﺎ اﻟﻤﻜﺪس‪.‬‬
‫ﻓﻲ اﻟﺴﻄﺮ ‪ 27‬ﻧﻔﺲ ﻗﻤﻨﺎ ﺑﺎﻟﺒﺤﺚ ﻋﻦ ﻋﻨﺼﺮ ‪ .‬وﻧﻼﺣﻆ أن اﻟﺘﻌﻠﯿﻤﺔ ‪ search‬ﺗﻌﻄﻲ ﻟﻨﺎ ﻣﻮﻗﻊ اﻟﻌﻨﺼﺮ‬
‫إن وﺟﺪ وإﻻ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ ‪ 1-‬ﻓﻲ ﺣﺎﻟﺔ إﻧﮭﺎ ﻟﻢ ﺗﺠﺪه‪.‬‬
‫ﻓﻲ اﻟﺴﻄﺮ ‪ 34‬ﻗﻤﻨﺎ ﺑﺤﺬف ﻗﯿﻤﺔ ﻋﻨﺼﺮ ﺑﻮاﺳﻄﺔ ﻗﯿﻤﺔ اﻟﻤﻮﻗﻊ‪.‬‬

‫ﻣﻦ اﻷﺧﻄﺎء اﻟﺸﺎﺋﻌﺔ إﻓﺮاغ اﻟﻤﻜﺪس ﺑﻮاﺳﻄﺔ ا ﻟﺘﻌﻠﯿﻤﺔ ‪ pop‬وﻣﻦ ﺛﻢ ﻧﻘﻮم اﻟﺒﺤﺚ ﻋﻦ ﻋﻨﺼﺮ أو‬
‫ﺣﺬف ﻋﻨﺼﺮ‪ .‬ﻣﻤﺎ ﯾﺴﺒﺐ ﻟﻨﺎ ﺧﻄﺎء ﻓﻲ زﻣﻦ اﻟﺘﻨﻔﯿﺬ‪.‬‬

‫ﻋﺪم اﺳﺘﺨﺪام ﻋﻤﻠﯿﺔ ﺗﺤﺪﯾﺪ اﻟﻤﻌﻄﯿﺎت أﺛﻨﺎء إدﺧﺎل اﻟﻘﯿﻢ ﻟﻠﻤﻜﺪس أو ﺑﺤﺚ ﻋﻦ ﻗﯿﻢ ‪ ,‬ﻣﻤﺎ ﯾﺴﺒﺐ‬
‫ﻟﻨﺎ ﺧﻄﺎء ﻗﻮاﻋﺪي‪.‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪491‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 1.5‬اﻟﻄﻮاﺑﯿﺮ )‪ (Queues‬أو ﺳﺠﻼت اﻵﻧﺘﻈﺎر‬
‫وھﻲ ﻋﺒﺎرة ﻧﻮع ﻣﻦ ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺨﻄﯿﺔ وﯾﺸﺒﮫ اﻟﻤﻜﺪس ﻟﺘﺨﺰﯾﻦ اﻟﻤﻌﻠﻮﻣﺎت ﺑﺸﻜﻞ ﻣﺆﻗﺖ ﻣﻊ‬
‫ﻓﺎرق ﯾﻜﻤﻦ ﻓﻲ أن اﻟﺘﻨﻈﯿﻢ اﻟﻤﺘﺒﻊ ﻹدﺧﺎل اﻟﻤﻌﻠﻮﻣﺎت وإﺧﺮاﺟﮭﺎ ھﻮ ‪FIFO (First Input First‬‬
‫)‪ Output‬إي اﻟﺪاﺧﻞ أوﻻ اﻟﺨﺎرج أوﻻ إي ﺗﻜﻮن ﻋﻤﻠﯿﺔ اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﻨﮭﺎﯾﺔ واﻟﺤﺬف ﻣﻦ اﻷﻣﺎم إي‬
‫ﯾﻮﺟﺪ ﻟﻠﻄﺎﺑﻮر ﻣﺆﺷﺮﯾﻦ ﻣﺆﺷﺮ اﻟﺮأس وﯾﺴﻤﻰ ‪ head or front‬وﻣﺆﺷﺮ اﻟﺬﯾﻞ وﯾﺴﻤﻰ ‪tail or‬‬
‫‪ rear‬وﻋﻨﺪ اﻹﺿﺎﻓﺔ ﻓﺈﻧﻨﺎ ﻧﺰﯾﺪ ﻣﻦ ﻗﯿﻤﺔ اﻟﺬﯾﻞ ﺑﻮاﺣﺪ وﻋﻨﺪ اﻟﺤﺬف ﻓﺈﻧﻨﺎ ﻧﺰﯾﺪ ﻗﯿﻤﺔ اﻟﺮأس ﺑﻮاﺣﺪ‬
‫أﯾﻀﺎ ﻓﺘﻜﻮن اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺼﺔ ﺑﺸﻜﻞ ﻧﺘﺘ ﺈﻟﻰ وﻣﺘﻘﺎرﺑﺔ ﻋﻠﻰ ﺷﻜﻞ ﺧﻂ وﻟﯿﺴﺖ ﻋﻠﻰ ﻣﻮاﻗﻊ ﻣﺘﻔﺮﻗﺔ‬
‫ﺑﺎﻟﺬاﻛﺮة إي أﺷﺒﺔ ﺑﺎﻟﻄﺎﺑﻮر اﻟﻤﺪرﺳﻲ ﻓﺄول ﻃﺎﻟﺐ ﺣﺎﺿﺮ ھﻮ أول ﻃﺎﻟﺐ داﺧﻞ ﻟﻠﻔﺼﻞ ‪.‬‬
‫ﻓﮭﻮ ﯾﺸﺒﮫ ﻃﺎﺑﻮر اﻵﻧﺘﻈﺎر ﻟﻺﻓﺮاد ﻋﻨﺪ اﻟﻤﺆﺳﺴﺔ أو اﻟﻤﺴﺘﺸﻔﻰ ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪.15-5‬‬

‫‪ 1.5.1‬أﻧﻮاع اﻟﻄﻮاﺑﯿﺮ‬

‫ﻃﺎﺑﻮر ﺧﻄﻲ‬

‫وھﻮ ﻟﮫ ﺣﺠﻢ ﻣﺤﺪود وﺷﺮط اﻣﺘﻼﺋﮫ أن ﺗﻜﻮن ﻗﯿﻤﺔ اﻟﺬﯾﻞ ﺗﺴﺎوي ﺣﺠﻢ اﻟﻤﺼﻔﻮﻓﺔ ‪.‬‬

‫ﺷﻜﻞ ‪15-5‬‬

‫‪ (2‬ﻃﺎﺑﻮر داﺋﺮي ‪ /‬ﻧﻔﺲ ﺗﻌﺮﯾﻒ اﻟﺴﺎﺑﻖ إﻟﻰ أن ﺷﺮط اﻻﻣﺘﻼء ﯾﺨﺘﻠﻒ ﻋﻦ اﻟﺴﺎﺑﻖ اﻟﺮأس =‪ 1‬و اﻟﺬﯾﻞ‬
‫= ﺣﺠﻢ اﻟﻤﺘﺠﮫ أو اﻟﺮأس=اﻟﺬﯾﻞ‪ 1 +‬ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪.15-6‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪492‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺷﻜﻞ ‪15-6‬‬

‫وﺳﻨﺒﺪأ ﺑﺎﻟﺘﺤﺪث إﻟﻰ اﻟﻄﺎﺑﻮر اﻟﺨﻄﻲ‬

‫ﻧﺠﺪ ﻓﻲ اﻟﺒﺪاﯾﺔ ﯾﻜﻮن اﻟﺮأس واﻟﺬﯾﻞ ﻻ ﯾﺆﺷﺮان ﻷي ﻣﻮﻗﻊ وﻟﻤﻌﺮﻓﺔ أن اﻟﻄﺎﺑﻮر ﻟﻢ ﺗﺪﺧﻞ إﻟﯿﺔ إي ﻗﯿﻤﺔ‬
‫ﻋﻨﺪﻣﺎ ﯾﻜﻮن )‪ if(tail==-1||head==-1‬واﻟﺸﻜﻞ ‪ 15-7‬ﯾﻮﺿﺢ ذﻟﻚ‪.‬‬

‫ﺷﻜﻞ ‪15-7‬‬

‫وﻋﻨﺪ إدﺧﺎل أول ﻗﯿﻤﺔ ﯾﺼﺒﺢ ﻗﯿﻤﺔ اﻟﺮأس واﻟﺬﯾﻞ = ‪ 0‬ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪.15-8‬‬

‫ﺷﻜﻞ ‪15-8‬‬

‫وﻋﻨﺪ إدﺧﺎل ﺛﺎﻧﻲ ﻗﯿﻤﺔ ﻧﺰﯾﺪ ﻣﻦ ﻗﯿﻤﺔ اﻟﺬﯾﻞ ﺑﻮاﺣﺪ ﻓﻘﻂ أم اﻟﺮأس ﯾﺒﻘﻰ ﻛﻤﺎ ھﻮ ‪ ,‬ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪.15-9‬‬

‫ﺷﻜﻞ ‪15-9‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪493‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫وﻋﻤﻠﯿﺔ اﻟﺤﺬف ﻋﻜﺲ اﻟﺴﺎﺑﻖ إي ﯾﻜﻮن اﻟﺬﯾﻞ ﺗﺎﺑﺖ واﻟﺮأس ﯾﺰﯾﺪ ﻓﻲ ﻛﻞ ﻋﻤﻠﯿﺔ ﺣﺬف ﺑﻤﻘﺪار واﺣﺪ‬
‫ﻣﻊ ﻋﻤﻞ إزاﺣﺔ ﻟﻠﻤﺘﺠﮫ ﻟﻠﯿﺴﺎر ﻓﻲ ﻛﻞ ﻋﻤﻠﯿﺔ ﺣﺬف إن أردت ‪.‬واﻷ ﺷﻜﺎل ‪ 15-11,15-10‬ﺗﺒﯿﻦ ﻋﻤﻠﯿﺔ‬
‫اﻹدﺧﺎل و اﻹﺧﺮاج ﻣﻦ داﺧﻞ اﻟﻄﺎﺑﻮر‪.‬‬

‫ﺷﻜﻞ ‪15-10‬‬

‫ﺷﻜﻞ ‪15-11‬‬

‫وﻣﻦ ﺧﻼل اﻹﺷﻜﺎل اﻟﺴﺎﺑﻘﺔ ﺳﻨﻮرد أول ﺑﺮﻧﺎﻣﺞ ﻟﻠﻄﺎﺑﻮر‬

‫ﺑﺮﻧﺎﻣﺞ اﻟﻄﺎﺑﻮر ‪1. //‬‬


‫;*‪2. import java.io.‬‬
‫{ ‪3. class Chp15_6‬‬
‫;‪4. static final int CAPACITY = 5‬‬
‫;]‪5. static int[] Queue = new int[CAPACITY‬‬
‫;;‪6. static int tail=-1,head=-1‬‬
‫‪7.‬‬
‫};)‪8. static boolean isEmpty(){return (tail < 0||head>tail‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪494‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


9.
10. static boolean isFull() {return (tail== CAPACITY-1);}
11.
12. static void add_Queue(int element){
13. if (isFull())
14. System.out.println("Is FULL Queue");
15. else
16. {
17. if(tail==-
1){head=tail=0;Queue[tail]=element;}
18. else
19. Queue[++tail]=element;
20. }
21. }
22.
23. static int De_Queue() {
24.
25. if (isEmpty()){
26. System.out.println("Queue is
empty.");
27. System.exit( 0 );
28. }
29. return Queue[head++];
30. }
31.
32. public static void main(String args[])throws IOException {
33. String num;
34. BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
35. System.out.println( "Enter first integer" );
36. while(!isFull())
37. {num=br.readLine();
38.
add_Queue(Integer.parseInt(num));
39. }
40.
41. System.out.println();
42. while(!isEmpty())System.out.print(De_Queue()+" ");
43.
44.
}
45. }

‫ اﻟﻌﻤﻠﯿﺎت ﻋﻠﻰ اﻟﻄﺎﺑﻮر‬1.5.2


ADD ‫*(اﻹﺿﺎﻓﺔ‬
‫واﻟﻜﻮد اﻟﺘﺎﺑﻊ ﻟﮭﺬه اﻟﻌﻤﻠﯿﺔ ھﻮ ﻧﻔﺲ اﻟﻜﻮد اﻟﺴﺎﺑﻖ‬

Aldopaee@hotmail.co m 495 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫*(اﻟﺤﺬف ‪DEL‬‬
‫وھﺬا اﻟﻜﻮد ﻟﮭﺬه اﻟﻌﻤﻠﯿﺔ‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪496‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


:‫ﺷﺮح اﻟﻤﺜﺎل‬
‫اﻟﻔﻜﺮة اﻟﻤﺴﺘﺨﺪﻣﺔ ﺑﺎﻟﺒﺮﻧﺎﻣﺞ ھﻮ ﺧﻠﻖ ﻃﺎﺑﻮر ﺟﺪﯾﺪ وإدﺧﺎل ﺟﻤﯿﻊ اﻟﻘﯿﻢ ﻣﺎﻋﺪا اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺗﺴﺎوي اﻟﻘﯿﻤﺔ‬
.53 ‫ إﻟﻰ‬40 ‫اﻟﻤﺮاد ﺣﺬﻓﮭﺎ ﺗﻢ ﻧﻘﻞ اﻟﻄﺎﺑﻮر اﻟﺠﺪﯾﺪ ﻟﻠﻘﺪﯾﻢ ﻛﻤﺎ ﻓﻲ اﻷﺳﻄﺮ ﻣﻦ‬

‫*( اﻟﺒﺤﺚ‬
‫ﻧﻔﺲ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺴﺎﺑﻖ إﻟﻰ إﻧﻨﺎ ﻻ ﻧﻘﻮم ﺑﺨﻠﻖ ﻃﺎﺑﻮر وﻧﻘﻞ ﺑﻞ إﻧﻨﺎ ﻧﺒﺤﺚ ﻋﻠﯿﺔ إن وﺟﺪ ﻧﻄﺒﻌﮫ وإﻻ ﻧﻄﺒﻊ‬
:‫ ﻛﻤﺎ ﯾﻠﻲ‬. ‫إﻧﻨﺎ ﻟﻢ ﻧﺤﺼﻞ ﻋﻠﯿﺔ‬

1. // ‫ﺑﺮﻧﺎﻣﺞ اﻟﺒﺤﺚ ﻋﻦ ﻋﻨﺼﺮ ﺑﺪاﺧﻞ اﻟﻄﺎﺑﻮر‬


2. import java.io.*;
3. class Chp15_8 {
4. static final int CAPACITY = 5;
5. static int[] Queue = new int[CAPACITY];
6. static int tail=-1,head=-1;
7.
8. static boolean isEmpty(){return (tail < 0||head>tail);}
9.
10. static boolean isFull() {return (tail== CAPACITY-1);}
11.
12. static void add_Queue(int element){
13. if (isFull())
14. System.out.println("Is FULL Queue");
15. else
16. {
17. if(tail==-
1){head=tail=0;Queue[tail]=element;}
18. else
19. Queue[++tail]=element;
20. }
21. }
22.
23. static int De_Queue() {
24.
25. if (isEmpty()){
26. System.out.println("Queue is empty.");
27. System.exit( 0 );
28. }
29. return Queue[head++];
30. }
31.
32. static void F_Queue(int element)
33. {int y=0,temp;
34. if (isEmpty()){
35. System.out.println("Queue is
empty.");
36. System.exit( 0 );

Aldopaee@hotmail.co m 497 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


37. }
38. else
39. while(!isEmpty()){temp=De_Queue();
40. if(temp==element)
41. {y=1;
42.
System.out.println("FOUND "+temp);
43. break;
44. }
45. }
46. if(y==0)System.out.println("NOT FOUND
"+element);
47. }
48.
49.
50. public static void main(String args[])throws IOException {
51. String num;
52. BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
53. System.out.println( "Enter first integer" );
54. while(!isFull())
55. {num=br.readLine();
56.
add_Queue(Integer.parseInt(num));
57. }
58. System.out.println("Enter number Search");
59. num=br.readLine();
60. F_Queue(Integer.parseInt(num));
61.
}
62. }

‫*( دﻣﺞ ﻃﺎﺑﻮرﯾﻦ‬


‫ﺳﺄذﻛﺮ ﻓﻜﺮة اﻟﺒﺮﻧﺎﻣﺞ وﻋﻠﻰ اﻟﻘﺎرئ أن ﯾﺤﻞ اﻟﻜﻮد‬
‫أوﻻ ﯾﺠﺐ اﻟﺘﺄﻛﺪ ﻣﻦ أن اﻟﻄﺎﺑﻮر اﻟﺜﺎﻧﻲ ﺑﻮﺟﺪ ﻓﯿﮫ ﻣﺴﺎﺣﺔ ﻛﺎﻓﯿﺔ ﻻﺳﺘﯿﻌﺎب ﻗﯿﻢ اﻟﻄﺎﺑﻮر اﻷول‬
‫وﻣﻦ اﻟﻌﻼﻗﺔ اﻵﺗﯿﺔ‬
‫ ﺣﺠﻢ اﻟﻄﺎﺑﻮر‬- ‫ﻋﺪد اﻟﻘﯿﻢ (=>)ﻋﺪد اﻟﻌﻨﺎﺻﺮ ﺑﺪاﺧﻠﺔ‬-‫)ﻋﺪد اﻟﻌﻨﺎﺻﺮ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻷﺳﺎﺳﻲ‬
. ‫اﻟﻤﺴﺘﻀﯿﻒ( ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﻧﻀﯿﻒ اﻟﻄﺎﺑﻮر اﻟﺜﺎﻧﻲ ﻓﻲ اﻷول‬

‫اﻟﻄﺎﺑﻮر اﻟﺪاﺋﺮي‬
‫ﻧﻔﺲ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ذﻛﺮﻧﺎھﺎ ﺳﺎﺑﻘﺎُ واﻻﺧﺘﻼف ﺳﯿﻜﻮن ﻓﻲ أواﻣﺮ اﻟﺸﺮط‬
. if(head==tail+1) ُ‫ﯾﻜﻮن اﻟﻄﺎﺑﻮر ﻓﺎرﻏﺎ‬
. if(tail!=size&&head=1) ‫ﯾﻜﻮن اﻟﻄﺎﺑﻮر ﻏﯿﺮ ﻣﻤﺘﻠﺊ‬
.if(head==1&&tail==size) ‫ﯾﻜﻮن اﻟﻄﺎﺑﻮر ﻣﻤﺘﻠﺌﺎ‬
.‫وﻧﻔﺲ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ذﻛﺮﺗﮭﺎ ﺑﺎﻟﻤﻜﺪس ﺗﻄﺒﻖ ﻋﻠﻰ اﻟﻄﻮاﺑﯿﺮ ﺑﺎﻟﯿﺔ اﻟﻄﺎﺑﻮر‬

Aldopaee@hotmail.co m 498 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫وإﻟﻰ ھﻨﺎ ﯾﺠﺐ ﻋﻠﻰ اﻟﻘﺎرئ أن ﯾﻜﻮن ﻗﺪ اﺗﻀﺤﺖ ﻓﻜﺮة اﻟﻄﺎﺑﻮر ‪.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪499‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 1.6‬اﻟﻘﻮاﺋﻢ )‪(List‬‬
‫وھﻲ ﻧﻮع ﻣﻦ ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺨﻄﯿﺔ ﺗﺘﺄﻟﻒ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺨﻼﯾﺎ اﻟﻤﺮاﺑﻄﺔ ﻓﯿﻤﺎ ﺑﯿﻨﮭﺎ وﻛﻞ ﻋﻨﺼﺮ‬
‫ﻓﯿﮭﺎ ﯾﺴﻤﻰ ﻋﻘﺪة وھﺬه اﻟﻌﻘﺪة ﻓﯿﮭﺎ ﺣﻘﻠﯿﻦ ﺣﻘﻞ ﻟﻠﻘﯿﻢ وﺣﻘﻞ ﯾﺆﺷﺮ ﻟﻌﻨﻮان ﻟﻠﻌﻘﺪة اﻟﺬي ﺑﻌﺪھﺎ أو ﻗﺒﻠﮭﺎ أو‬
‫‪ NULL‬وﺗﺴﺘﻌﻤﻞ ھﺬه اﻟﻜﻠﻤﺔ ﻟﻠﺪﻻﻟﺔ إﻟﻰ ﻧﮭﺎﯾﺔ اﻟﻼﺋﺤﺔ ‪ ,‬وﻣﻦ اﻟﻤﻤﻜﻦ أن ﺗﺘﺄﻟﻒ اﻟﻌﻘﺪة ﻋﻠﻰ أﻛﺜﺮ ﻣﻦ‬
‫ﻣﺆﺷﺮ وﻣﻌﻠﻮﻣﺎت إي ﻗﯿﻢ ‪ ,‬ﻓﺘﻜﻮن ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ )‪ (block‬أو ﻛﺘﻠﺔ ‪ ,‬وﻻ ﺑﺪ ﻣﻦ ﻣﺆﺷﺮ ﯾﺆﺷﺮ إﻟﻰ أول‬
‫ﻋﻘﺪة وﻣﺆﺷﺮ ﯾﺆﺷﺮ إﻟﻰ أﺧﺮ ﻋﻘﺪة إي ﻣﺜﻞ اﻟﻄﺎﺑﻮر ‪.‬‬

‫أﻧﻮاع اﻟﻘﻮاﺋﻢ‬
‫‪ ü‬اﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ‪.‬‬
‫‪ ü‬اﻟﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ أي اﻟﺜﻨﺎﺋﯿﺔ‪.‬‬
‫‪ ü‬اﻟﻘﻮاﺋﻢ اﻟﺪاﺋﺮﯾﺔ‪.‬‬

‫‪ 1.6.1‬اﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ‬
‫ﺗﺸﺒﮫ ﺣﺒﻞ اﻟﻐﺴﯿﻞ ﺗﻌﻠﻖ ﻋﻠﯿﺔ اﻟﺒﯿﺎﻧﺎت ﺗﺘﺎﻟﯿﺎُ إذا ﻛﺎن اﻹدﺧﺎل ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ وﯾﻮﺟﺪ ﻋﻨﻮان راﺳﻲ‬
‫ﯾﺆﺷﺮ إﻟﻰ أول ﻋﻨﺼﺮ ﻣﻦ اﻟﻼﺋﺤﺔ وﯾﺴﻤﻰ ‪ head‬وﯾﻮﺟﺪ ﻋﻨﻮان ﻧﮭﺎﺋﻲ ﯾﺆﺷﺮ إﻟﻰ أﺧﺮ ﻋﻨﺼﺮ‬
‫ﻣﻦ اﻟﻼﺋﺤﺔ وﯾﺴﻤﻰ ‪ tail‬وﻛﻞ ﻋﻘﺪة ﺗﺆﺷﺮ إﻟﻰ اﻟﻌﻘﺪة اﻟﺘﺎﻟﯿﺔ وأﺧﺮ ﻋﻘﺪة ﺗﻜﻮن ﻗﯿﻤﺔ اﻟﻤﺆﺷﺮ ﻟﮭﺎ‬
‫‪ NULL‬و ﺗﻜﻮن ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪15-12‬‬

‫ﺷﻜﻞ ‪15-12‬‬

‫وﻟﯿﺲ ﻣﻦ اﻟﻀﺮوري أن ﺗﻜﻮن اﻟﻌﻘﺪ ﻣﺮﺗﺒﺔ ﺑﺸﻜﻞ ﻣﺘﺘﺎﻟﻲ ﻓﻲ اﻟﺬاﻛﺮة ﻓﮭﻲ ﺗﻜﻮن ﻣﺒﻌﺜﺮة ﻓﻲ اﻟﺬاﻛﺮة‬
‫ﻻن اﻟﺠﮭﺎز اﻟﺬي ﯾﺤﺠﺰھﺎ ﻓﻲ اﻟﺬاﻛﺮة وﻟﯿﺲ اﻟﯿﻮزر ﻟﻜﻨﮭﺎ ﻣﺘﺼﻠﺔ ﻓﯿﻤﺎ ﺑﯿﻨﮭﺎ ﺑﻮاﺳﻄﺔ اﻟﻤﺆﺷﺮات و‬
‫اﻟﺸﻜﻞ ‪ 15-13‬ﯾﺒﯿﻦ ﻛﯿﻒ ﺗـﻜﻮن ﺷﻜﻠﮭﺎ ‪.‬‬

‫ﺷﻜﻞ ‪15-13‬‬

‫• ﻛﯿﻔﯿﺔ ﺗﻌﺮﯾﻒ اﻟﮭﯿﻜﻞ اﻟﻌﺎم ﻟﻠﻌﻘﺪ‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪500‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺷﻜﻞ ‪15-14‬‬

‫ﻣﺎ ﻣﻌﻨﻰ ھﺬا اﻟﺤﻘﻞ ‪ next‬؟‬


‫ﻣﻌﻨﺎه ﻣﺆﺷﺮ ﻣﻦ ﻧﻮع اﻟﺼﻨﻒ ‪ Node‬ﻧﻔﺴﮫ ‪ ,‬أي ﯾﺆﺷﺮ إﻟﻰ ﺻﻨﻒ ‪ Node‬أﺧﺮ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ‪ ,‬أي‬
‫ﻧﺴﺘﻄﯿﻊ اﻟﻮﺻﻮل إﻟﻰ ‪ Node‬أﺧﺮ وأﺧﺮ وھﻜﺪا إﻟﻰ ﻣﺎﻻ ﻧﮭﺎﯾﺔ‪ .‬وﯾﻜﻮن ﺑﺪاﺧﻞ اﻟﻌﻘﺪة ﻣﻮﻗﻊ اﻟﻌﻘﺪة اﻟﺘﻲ‬
‫ﺑﻌﺪھﺎ أو ﻗﺒﻠﮭﺎ‪.‬‬
‫أي ﻟﻨﺘﺬﻛﺮ أﺣﺒﺎﺋﻲ ﻋﻠﺒﺔ اﻟﺤﻠﯿﺐ ﺣﯿﺚ أن ﺑﺪاﺧﻠﮭﺎ ﻧﻔﺲ ﺻﻮرة اﻟﻌﻠﺒﺔ ﻧﻔﺴﮭﺎ و ﺑﺪاﺧﻞ اﻟﺼﻮرة ﻧﻔﺲ‬
‫اﻟﺼﻮرة اﻟﻌﻠﺒﺔ وووو إﻻ ﻣﺎﻻ ﻧﮭﺎﯾﺔ ‪ .‬واﻟﻌﻘﺪة ھﻨﺎ ﻧﻔﺲ اﻟﺸﻲء ﺣﯿﺚ أن داﺧﻠﺔ ﻋﻘﺪة وﺑﺪاﺧﻞ اﻟﻌﻘﺪة ﻋﻘﺪة‬
‫وھﻜﺬا ‪.‬‬
‫اﻟﻤﻨﮭﺞ )(‪: getElement‬‬
‫ﺗﻌﻄﻲ ﻟﻨﺎ ﻗﯿﻤﺔ اﻟﻌﻘﺪة‪.‬‬
‫اﻟﻤﻨﮭﺞ )( ‪: setElement‬‬
‫ﻧﺨﺰن ﻗﯿﻤﺔ ﻣﺮﺳﻠﺔ ﻟﻠﻌﻘﺪة‪.‬‬

‫وﻟﻺﺿﺎﻓﺔ ﻋﺪة أﻧﻮاع‬


‫• اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ‬
‫• اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﺴﺎر‬
‫• اﻹﺿﺎﻓﺔ ﻣﻦ أي ﻣﻜﺎن‬

‫وھﺬا أول ﻣﺜﺎل ﻟﮭﺬه اﻟﻘﻮاﺋﻢ وھﻮ اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ ﻟﻠﻘﺎﺋﻤﺔ‪:‬‬

‫ﺑﺮﻧﺎﻣﺞ اﻷﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ ﻟﻠﻘﺎﺋﻤﺔ اﻷﺣﺎدﯾﺔ ‪1. //‬‬


‫{‪2. class Chp15_9‬‬
‫{)][‪3. public static void main(String args‬‬
‫;‪4. Node head=null‬‬ ‫‪// head node of the list‬‬
‫;‪5. Node tail=null‬‬ ‫‪// tail node of the list‬‬
‫;‪6. Node node=null‬‬
‫;‪7. int size=5‬‬
‫‪8.‬‬
‫;)‪9. tail=head=node=new Node(0‬‬
‫)‪10. for (int i=1;i<size;i++‬‬
‫{ ‪11.‬‬
‫;)‪12. node=new Node(i‬‬
‫;)‪13. tail.setNext(node‬‬
‫;‪14. tail=node‬‬
‫} ‪15.‬‬
‫‪16.‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪501‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


17. node=head;
18.
19. while(node!=null)
20. {
21. System.out.print(node.getElement()+" ");
22. node=node.getNext();
23. }
24. System.out.println();
25. }
26. }
27.
28. /** Node of a singly linked list of ints. */
29. class Node {
30. private int element; // we assume elements are character ints
31. private Node next;
32. /** Creates a node with the given element and next node. */
33. public Node(int s) {
34. element = s;
35. next = null;
36. }
37. /** Returns the element of this node. */
38. public int getElement() { return element; }
39. /** Returns the next node of this node. */
40. public Node getNext() { return next; }
41. // Modifier methods:
42. /** Sets the element of this node. */
43. public void setElement(int newElem) { element = newElem; }
44. /** Sets the next node of this node. */
45. public void setNext(Node newNext) { next = newNext; }
46. }

:‫ﺷﺮح اﻟﻤﺜﺎل‬
: Node ‫ﺳﻨﺒﺪأ ﺑﺸﺮح اﻟﻤﻨﺎھﺞ اﻟﻤﻀﺎﻓﺔ ﻟﻠﺼﻨﻒ‬
.‫ ﻣﻨﮭﺞ ﯾﻌﯿﺪ ﻟﻨﺎ ﻗﯿﻤﺔ اﻟﻌﻘﺪة‬38 ‫اﻟﺴﻄﺮ‬
.‫ ﻣﻨﮭﺞ ﯾﻌﯿﺪ ﻟﻨﺎ ﻣﻮﻗﻊ اﻟﻌﻘﺪة اﻟﺘﺎﻟﯿﺔ‬40 ‫اﻟﺴﻄﺮ‬
.element ‫ ﻣﻨﮭﺞ ﯾﺨﺰن ﻗﯿﻤﺔ ﻣﺮﺳﻠﺔ ﻟﻠﻌﻘﺪة ﻓﻲ اﻟﻤﺘﺤﻮل‬43 ‫اﻟﺴﻄﺮ‬
.next ‫ ﻣﻨﮭﺞ ﯾﺨﺰن ﻣﻮﻗﻊ ﻋﻘﺪة ﻣﺮﺳﻠﺔ ﻟﻠﻌﻘﺪة ﻓﻲ اﻟﻤﺘﺤﻮل‬45 ‫اﻟﺴﻄﺮ‬

‫ ﻣﻦ ﻧﻮع‬tail ‫ ﻣﺆﺷﺮ ﻟﻌﻘﺪة وھﻮ اﻟﺮأس و‬Node ‫ ﻣﻦ ﻧﻮع‬head ‫( ھﻨﺎ ﻋﺮﻓﻨﺎ‬6 - 4 ) ‫اﻷﺳﻄﺮ‬
. ‫ ﺳﻨﺴﺘﺨﺪﻣﮫ ﻛﻤﺘﻐﯿﺮ ﻹدﺧﺎل ﺑﯿﺎﻧﺎت اﻟﻌﻘﺪ‬node ‫ ﻣﺆﺷﺮ ﻟﻌﻘﺪة وھﻮ اﻟﺬﯾﻞ و‬Node

‫ إﻟﻰ اﻟﺘﻮاﺑﻊ اﻟﺨﺎﺻﺔ ﺑﺎﻟﻌﻘﺪة ﻷﻧﺔ ﯾﺠﺐ إﻋﻄﺎء ﻗﯿﻢ اﺑﺘﺪاﺋﯿﺔ ﻟﮭﺎ ﻗﺒﻞ اﻟﺘﻌﺎﻣﻞ‬null ‫ﻗﻢ ﺑﺈﺳﻨﺎد اﻟﻘﯿﻤﺔ‬
.‫ﻣﻌﮭﺎ‬

Aldopaee@ho tmail.co m 502 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫اﻟﺴﻄﺮ ‪ 9‬ﺗﻢ إﻧﺸﺎء أول ﻋﻘﺪة وإرﺳﺎل إﻟﯿﮭﺎ اﻟﻘﯿﻤﺔ ‪ , 0‬وﺟﻌﻞ اﻟﻌﻘﺪة ﺗﺴﺎوي ‪head , tail , node‬‬
‫ﺣﯿﺚ ﺗﻌﺘﺒﺮ ھﺬه أھﻢ ﻣﺮﺣﻠﺔ ﻋﻨﺪ إﻧﺸﺎء اﻟﻌﻘﺪ‪.‬‬

‫ﻋﻨﺪ إﻧﺸﺎء اﻟﻌﻘﺪ ﯾﺠﺐ أن ﺗﻨﺸﺊ أول ﻋﻘﺪة ﺑﻤﻔﺮدھﺎ ﺣﺘﻰ ﯾﺘﻢ ﻣﺴﺎواة اﻟﺮأس واﻟﺬﯾﻞ ﺑﮭﺎ‪.‬‬
‫اﻷﺳﻄﺮ ) ‪ (15 - 10‬ھﻨﺎ ﺳﻨﻜﻮٌن ‪ 4‬ﻋﻘﺪ أﺿﺎﻓﯿﺔ ﺑﺠﺎﻧﺐ اﻷوﻟﻰ ﻓﯿﻜﻮن ﻟﺪﯾﻨﺎ ‪ 5‬ﻋﻘﺪ ‪.‬‬
‫اﻟﺴﻄﺮ ‪ 13‬ﯾﺒﯿﻦ أن ﺣﻘﻞ اﻟﻌﻘﺪة اﻷوﻟﻰ ﯾﺴﺎوي اﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة ‪.‬ﻓﺒﮭﺬه اﻟﺤﺎﻟﺔ ﺗﻤﺖ ﻋﻤﻠﯿﺔ اﻟﺮﺑﻂ ﺑﯿﻦ‬
‫اﻟﻌﻘﺪﺗﯿﻦ ﺑﻘﻲ ﻋﻠﯿﻨﺎ ﻧﻘﻞ اﻟﺬﯾﻞ إﻟﻰ اﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة ‪ tail=node‬ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ ‪. 14‬‬
‫وھﻜﺬا ﺑﺒﺎﻗﻲ اﻟﻌﻘﺪ إﻟﻰ أن ﯾﻨﺘﮭﻲ ﻋﻤﻞ اﻟﻠﻮب وﯾﻤﻜﻨﻚ ﺗﻜﻮﯾﻦ ﻣﺌﺎت اﻟﻌﻘﺪ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ واﻟﺸﻜﻞ ‪15-15‬‬
‫ﯾﺒﻦ اﻟﺸﺮح ‪.‬‬
‫اﻷﺳﻄﺮ ) ‪ (23 - 17‬ﻓﻲ ﻋﻤﻠﻲ ﻃﺒﺎﻋﺔ اﻟﻌﻘﺪ أول ﺷﻲ ﯾﺠﺐ أن ﺗﻌﻤﻠﮫ ھﻮ اﻟﻮﺻﻮل ﻷول ﻋﻘﺪة ﻓﻜﯿﻒ‬
‫ﺳﺘﻌﻤﻞ ﻟﻮ ﺗﺘﺬﻛﺮ ﻗﻠﯿﻞ أن أول ﻣﺎ أﻧﺸﺎﻧﺎ أول ﻋﻘﺪة ﺳﺎوﯾﻨﺎ اﻟﺮأس واﻟﺬﯾﻞ ﺑﮭﺎ وﺑﻌﺪ ذﻟﻚ ﻛﺎن ﻛﻞ ﻣﺎ أﺿﻔﻨﺎ‬
‫ﻋﻘﺪة ﺟﺪﯾﺪة ﺗﺤﺮك ﻣﻌﺎﻧﺎ اﻟﺬﯾﻞ وأﺻﺒﺢ اﻟﺬﯾﻞ ﺑﻤﺆﺧﺮة اﻟﻌﻘﺪ واﻟﺮأس ﻓﻲ ﺑﺪاﯾﺔ اﻟﻌﻘﺪ ‪.‬إذن =‪node‬‬
‫‪ head‬ﻓﻨﻜﻮن وﺻﻠﻨﺎ إﻟﻰ أول ﻋﻘﺪة ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ‪. 17‬‬
‫ﺑﻘﻲ ﻋﻠﯿﻨﺎ ﻃﺒﺎﻋﺔ اﻟﻌﻘﺪ واﻟﺘﻨﻘﻞ إﻟﻰ اﻟﻌﻘﺪة اﻟﺘﺎﻟﯿﺔ ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ ‪ .22‬ﺑﻤﻌﻨﻰ أن اﻟﻌﻘﺪة اﻟﺘﻲ واﻗﻔﯿﻦ ﻋﻠﯿﮭﺎ‬
‫ﺗﺴﺎوي ﺣﻘﻞ اﻟﻌﻘﺪة ﻧﻔﺴﮭﺎ اﻟﺘﻲ داﺧﻠﺔ ﻣﻮﻗﻊ اﻟﻌﻘﺪة اﻟﺘﺎﻟﯿﺔ ﻓﺒﺬﻟﻚ ﻧﻜﻮن ﻗﺪ اﻧﺘﻘﻠﻨﺎ إﻟﻰ اﻟﻌﻘﺪة اﻟﺘﺎﻟﯿﺔ وﺗﺴﺘﻤﺮ‬
‫ھﺬه اﻟﻌﻤﻠﯿﺔ إﻟﻰ أن ﺗﺴﺎوي اﻟﻌﻘﺪة ‪ NULL‬ﻓﯿﻨﺘﮭﻲ ﻋﻤﻞ اﻟﻠﻮب ‪.‬‬

‫ﻟﺸﻜﻞ ‪15-15‬‬

‫أم اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﺴﺎر ﻧﻔﺲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ إﻻ أن اﻻﺧﺘﻼف ﻓﻘﻂ ﺑﻌﻤﻠﯿﺔ إدﺧﺎل اﻟﻌﻘﺪ اﻟﺜﺎﻧﯿﺔ وﻣﺎ ﺑﻌﺪھﺎ‬
‫)‪for (int i=1;i<size;i++‬‬
‫{‬
‫;)‪node=new Node(i‬‬
‫;)‪node.setNext(head‬‬
‫;‪head=node‬‬
‫}‬

‫اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ ﯾﻜﻮن اﻟﺮأس ﻣﺘﺤﺮك واﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﻦ ﯾﻜﻮن اﻟﺬﯾﻞ ھﻮ اﻟﻤﺘﺤﺮك ‪.‬‬

‫وھﺬا ﻣﺜﺎل ﻋﻠﻰ إﺿﺎﻓﺔ ﻋﻘﺪة ﺑﻌﺪ ﻗﯿﻤﺔ ﻋﻘﺪة ﯾﺮﯾﺪھﺎ اﻟﻤﺴﺘﺨﺪم ‪:‬‬

‫ﺑﺮﻧﺎﻣﺞ اﻷﺿﺎﻓﺔ ﺑﻌﺪ ﻗﯿﻤﺔ ﻋﻘﺪة ﻣﻌﯿﻨﺔ ‪1. //‬‬


‫;‪2. import javax.swing.JOptionPane‬‬
‫{‪3. class Chp15_10 extends Node‬‬
‫{)][‪4. public static void main(String args‬‬
‫;‪5. Node head=null‬‬ ‫‪// head node of the list‬‬
‫;‪6. Node tail=null‬‬ ‫‪// tail node of the list‬‬
‫;‪7. Node node=null‬‬
‫;‪8. int size=5‬‬
‫‪9.‬‬
‫‪Aldopaee@ho tmail.co m‬‬ ‫‪503‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬
10. tail=head=node=new Node(0);
11. for (int i=1;i<size;i++)
12. {
13. node=new Node(i);
14. node.setNext(head);
15. head=node;
16. }
17.
18. node=head;
19.
20. while(node!=null)
21. {
22. System.out.print(node.getElement()+" ");
23. node=node.getNext();
24. }
25. System.out.println();
26.
27. String snum1;
28. int num1;
29. snum1 = JOptionPane.showInputDialog("Enter num1:") ;
30. num1 = Integer.parseInt(snum1);
31.
32. node=head;
33. while(node!=null)
34. {
35. if(node.getElement()==num1)
36. {
37. Node temp;
38. snum1=JOptionPane.showInputDialog

("Enter Value node:") ;


39. num1 =
Integer.parseInt(snum1);
40. temp=new Node(num1);
41. temp.setNext(node.getNext());
42. node.setNext(temp);
43. break;
44. }
45. node=node.getNext();
46. }
47. node=head;
48. while(node!=null)
49. {
50. System.out.print(node.getElement()+" ");
51. node=node.getNext();
52. }

Aldopaee@hotmail.co m 504 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫;)(‪53. System.out.println‬‬
‫;)‪54. System.exit(0‬‬
‫} ‪55.‬‬
‫} ‪56.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬
‫ﺑﻌﺪ إدﺧﺎل اﻟﻌﻘﺪ ﻃﻠﺒﻨﺎ ﻣﻦ اﻟﻤﺴﺘﺨﺪم إدﺧﺎل ﻗﯿﻤﺔ ﻓﺈذا وﺟﺪت ھﺬه اﻟﻘﯿﻤﺔ ﺑﺎﻟﻘﺎﺋﻤﺔ ﺳﻨﻀﻊ اﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة‬
‫ﺑﻌﺪھﺎ ﻣﺒﺎﺷﺮة ‪.‬‬
‫ﻓﻌﻤﻠﻨﺎ ﻋﻤﻠﯿﺔ ﺑﺤﺖ ﻋﻦ اﻟﻌﻨﺼﺮ إذا وﺟﺪ ﻓﺈﻧﻨﺎ ﺳﻨﻌﻤﻞ ﻋﻠﻰ إﻧﺸﺎء ﻋﻘﺪة ﺟﺪﯾﺪة وﺳﻨﺪﺧﻞ ﻗﯿﻤﺔ اﻟﻌﻘﺪة‬
‫وﺳﻨﺮﺑﻂ ﺣﻘﻞ ﻣﺆﺷﺮ اﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة ﺑﺎﻟﻌﻘﺪة اﻟﺘﻲ ﺑﻌﺪ اﻟﻌﻨﺼﺮ واﻟﻌﻘﺪة اﻟﺘﻲ ﻣﺎزﻟﻨﺎ واﻗﻔﯿﻦ ﻋﻠﯿﮭﺎ ﺗﻢ رﺑﻂ‬
‫ﻣﺆﺷﺮھﺎ ﺑﺎﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة ﻛﻤﺎ ﻓﻲ اﻷﺳﻄﺮ )‪ (44 - 35‬واﻟﺸﻜﻞ ‪ 15-16‬ﯾﺒﯿﻦ ھﺬه اﻟﻌﻤﻠﯿﺔ ‪.‬‬

‫ﺷﻜﻞ ‪15-16‬‬

‫‪ 1.6.2‬ﺻﻨﻊ اﻟﻤﻜﺪﺳﺎت و اﻟﻄﻮاﺑﯿﺮ دﯾﻨﺎﻣﯿﻜﯿﺎً‬

‫ﺗﺤﺪﺛﻨﺎ ﻋﻦ اﻟﮭﯿﺎﻛﻞ اﻹﺳﺘﺎﺗﯿﻜﯿﮫ أي اﻟﺜﺎﺑﺘﺔ وﺗﻜﻠﻤﻨﺎ ﻋﻦ اﻟﻤﻜﺪﺳﺎت واﻟﻄﻮاﺑﯿﺮ ﻟﻨﻌﻤﻞ ﻋﻠﻰ ﺗﻄﺒﯿﻖ ﺗﻠﻚ‬
‫اﻟﺨﻮارزﻣﯿﺎت ﺑﺎﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ وﻧﺠﻌﻠﮭﺎ ﻣﺘﻐﯿﺮة أي دﯾﻨﺎﻣﯿﻜﯿﺔ وﻧﺘﺨﻠﺺ ﻣﻦ ﺷﻲء أﺳﻤﺔ اﻟﻤﻜﺪس ﻗﺪ اﻣﺘﻠﺊ‬
‫أو اﻟﻄﺎﺑﻮر ﻗﺪ اﻣﺘﻠﺊ واﻵن ﺳﻨﻮرد ﻣﺜﺎل ﻋﻦ اﻟﻤﻜﺪس ﺑﺎﺳﺘﺨﺪام اﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ واﻟﯿﺔ اﻹدﺧﺎل واﻹﺧﺮاج‬
‫ﻗﺪ ﺗﻜﻠﻤﻨﺎ ﻋﻨﮭﺎ ﻓﻲ اﻟﺴﺎﺑﻖ ‪.‬‬
‫واﻟﯿﻜﻢ اﻟﻜﻮد ‪:‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪505‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


1. // ‫ﺑﺮﻧﺎﻣﺞ ﻣﻜﺪس ﺑﻮاﺳﻄﺔ اﻟﻘﻮاﺋﻢ‬
2. class Chp15_11 extends Node{
3. public static void main(String args[]){
4. int size=5;
5. stack stack1=new stack();
6. for (int i=1;i<size;i++)
7. stack1.push(i);
8.
9. while(!stack1.isEmpty())
10. System.out.print(stack1.pop()+" ");
11.
12. System.out.println();
13. }
14. }
15.
16. /** A linked Stack. */
17. class stack extends Node{
18.
19. public Node Stack1=null,top =null ;
20. //* Return whether the stack is empty.
21. public boolean isEmpty(){return (top == null);}
22. //*Insert an element at the top of the stack.
23. public void push(int element){
24. if(top==null)
25. {
26. top=Stack1=new Node(element);
27. }
28. else
29. {
30. Stack1=new Node(element);
31. Stack1.setNext(top);
32. top=Stack1;
33. }
34. }
35. /**
36. * Remove the top element from the stack.
37. * @return element removed.
38. * @exception EmptyStackException if the stack is empty.
39. */
40. public int pop() {
41.
42. if (isEmpty()){
43. System.out.println("Stack is empty.");
44. System.exit( 0 );
45. }
46. int temp=top.getElement();

Aldopaee@hotmail.co m 506 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫;)(‪47. top = top.getNext‬‬
‫;‪48. return temp‬‬
‫‪49.‬‬ ‫}‬
‫} ‪50.‬‬

‫اﻟﺸﻜﻞ ‪ 15-17‬ﯾﺒﯿﻦ ﺷﻜﻞ اﻟﻌﻘﺪ ﻟﻠﻤﻜﺪس‬


‫وﺟﻤﯿﻊ ﻣﺎ ذﻛﺮﻧﺎه ﻣﻦ ﺗﻄﺒﯿﻘﺎت اﻟﻤﻜﺪس واﻟﻄﻮاﺑﯿﺮ ﻋﻠﻰ اﻟﻘﺎرئ أن ﯾﻄﺒﻖ ﺗﻠﻚ اﻷﻣﺜﻠﺔ ﺑﺎﻟﻘﺎﺋﻤﺔ اﻷﺣﺎدﯾﺔ‪.‬‬
‫وﺑﻌﺪ أن ﺗﻜﻠﻤﺖ ﻋﻠﻰ ﻋﻤﻠﯿﺔ اﻹﺿﺎﻓﺔ ﺑﺠﻤﯿﻊ أﻧﻮاﻋﮭﺎ‬
‫ﺑﺎﻟﻘﺎﺋﻤﺔ اﻷﺣﺎدﯾﺔ ﯾﺒﻘﻰ ﻟﻨﺎ اﻵن أن ﻧﺘﻜﻠﻢ ﻋﻦ ﻋﻤﻠﯿﺔ اﻟﺤﺬف‬
‫وﻣﺎ ﯾﺪور ﻣﻦ ﺗﻄﺒﯿﻘﺎت ﺣﻮﻟﮭﺎ‪.‬‬

‫• اﻟﺤﺬف )‪(DELETE‬‬
‫ھﻮ ﻋﻤﻠﯿﺔ ﺑﺴﯿﻄﺔ ﻓﻲ ﻻﺋﺤﺔ اﻟﻮﺻﻞ اﻟﺨﻄﯿﺔ ‪ ,‬ﻓﺘﻮﺻﻞ‬
‫وﺻﻠﺔ اﻟﻌﻨﺼﺮ اﻟﺬي ﯾﺄﺗﻲ ﻗﺒﻞ اﻟﻌﻨﺼﺮ اﻟﻤﺮاد ﺣﺬﻓﮫ‬
‫ﺑﻌﻨﻮان اﻟﻌﻨﺼﺮ اﻟﺬي ﯾﺮاد ﺣﺬﻓﮫ ﻓﺘﻌﺘﺒﺮ ﻋﻤﻠﯿﺔ ﻋﻜﺴﯿﺔ‬
‫ﻟﻌﻤﻠﯿﺔ اﻹﺿﺎﻓﺔ ‪.‬‬

‫وﻟﻠﺤﺬف ﻋﺪة أﻧﻮاع‬


‫• اﻟﺤﺬف ﻣﻦ اﻟﺮأس‬
‫• اﻟﺤﺬف ﻣﻦ اﻟﺬﯾﻞ‬
‫ﺷﻜﻞ ‪15-17‬‬
‫• اﻟﺤﺬف ﻣﻦ أي ﻣﻜﺎن‬
‫وﺳﻨﺮى أول ﻣﺜﺎل ﻟﮭﺬه اﻟﻘﻮاﺋﻢ وھﻮ اﻟﺤﺬف ﻣﻦ اﻟﻨﮭﺎﯾﺔ ﻟﻠﻘﺎﺋﻤﺔ أي أﺧﺮ ﻋﻘﺪة‪.‬‬
‫وﯾﺘﻢ ذﻟﻚ ﺟﻌﻞ اﻟﻌﻘﺪة ﻗﺒﻞ اﻷﺧﯿﺮة ﻓﻲ اﻟﻘﺎﺋﻤﺔ ﻣﺴﺎوﯾﺔ ‪ NULL‬ﺗﻢ ﻧﻨﻘﻞ اﻟﺬﯾﻞ إﻟﻰ وراءه ﺑﻤﻘﺪار واﺣﺪ أي‬
‫اﻟﻌﻘﺪة اﻟﺘﻲ ﻗﺒﻞ اﻷﺧﯿﺮ ﺛﻢ ﻧﺤﺬف اﻟﻌﻘﺪة اﻷﺧﯿﺮة ‪ .‬ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪.15-18‬‬

‫وھﺬا اﻟﻤﺜﺎل ﻟﮭﺬه اﻟﻌﻤﻠﯿﺔ‪:‬‬


‫ﺑﺮﻧﺎﻣﺞ ﻟﺤﺬف ﻋﻘﺪة ﻣﻦ ﻧﮭﺎﯾﺔ اﻟﻘﺎﺋﻤﺔ اﻷﺣﺎدﯾﺔ ‪1. //‬‬
‫{‪2. class Chp15_12 extends Node‬‬
‫{)][‪3. public static void main(String args‬‬
‫;‪4. Node head=null‬‬ ‫‪// head node of the list‬‬
‫;‪5. Node tail=null‬‬ ‫‪// tail node of the list‬‬
‫;‪6. Node node=null‬‬
‫;‪7. int size=5‬‬
‫‪8.‬‬
‫;)‪9. tail=head=node=new Node(0‬‬
‫)‪10. for (int i=1;i<size;i++‬‬
‫{ ‪11.‬‬
‫;)‪12. node=new Node(i‬‬
‫;)‪13. tail.setNext(node‬‬
‫;‪14. tail=node‬‬
‫} ‪15.‬‬
‫‪16.‬‬
‫;‪17. node=head‬‬
‫‪18.‬‬
‫)‪19. while(node!=null‬‬
‫{ ‪20.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪507‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


21. System.out.print(node.getElement()+" ");
22. node=node.getNext();
23. }
24. System.out.println();
25.
26. node=head;
27. while(node!=null)
28. {
29. if(node.getNext()==tail)
30. {
31. tail=null;
32. node.setNext(null);
33. tail=node;
34. break;
35. }
36. node=node.getNext();
37. }
38. node=head;
39. while(node!=null)
40. {
41. System.out.print(node.getElement()+" ");
42. node=node.getNext();
43. }
44. System.out.println();
45. }
46. }

Aldopaee@hotmail.co m 508 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


15-18 ‫ﺷﻜﻞ‬
‫واﻟﯿﻜﻢ ھﺬا اﻟﻜﻮد ﻟﻌﻤﻠﯿﺔ اﻟﺤﺬف ﻣﻦ‬
. ‫اﻹﻣﺎم أي أول ﻋﻘﺪة‬
. ‫ﺳﻨﻨﻘﻞ اﻟﺮأس إﻟﻰ اﻹﻣﺎم ﺑﻤﻘﺪار واﺣﺪ أي ﻟﻠﻌﻘﺪة اﻟﺘﻲ ﺑﻌﺪھﺎ ﺛﻢ ﻧﺤﺬف أول ﻋﻘﺪة‬
.15-19 ‫ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ‬

:‫وھﺬا اﻟﻤﺜﺎل ﻟﮭﺬه اﻟﻌﻤﻠﯿﺔ‬

1. // ‫ﺑﺮﻧﺎﻣﺞ ﻟﺤﺬف أول ﻋﻘﺪو ﻣﻦ داﺧﻞ اﻟﻘﺎﺋﻢ اﻷﺣﺎدﯾﺔ‬


2. class Chp15_13 extends Node{
3. public static void main(String args[]){
4. Node head=null; // head node of the list
5. Node tail=null; // tail node of the list
6. Node node=null;
7. int size=5;
8.
9. tail=head=node=new Node(0);
10. for (int i=1;i<size;i++)
11. {
12. node=new Node(i);
13. tail.setNext(node);
14. tail=node;
15. }
16.
17. node=head;
18.
19. while(node!=null)
20. {
21. System.out.print(node.getElement()+" ");
22. node=node.getNext();
23. }
24. System.out.println();
25.

Aldopaee@ho tmail.co m 509 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫;‪26. node=head‬‬
‫;)(‪27. head=node.getNext‬‬
‫;‪28. node=null‬‬
‫‪29.‬‬
‫;‪30. node=head‬‬
‫)‪31. while(node!=null‬‬
‫{ ‪32.‬‬
‫;)" "‪33. System.out.print(node.getElement()+‬‬
‫;)(‪34. node=node.getNext‬‬
‫} ‪35.‬‬
‫;)(‪36. System.out.println‬‬
‫} ‪37.‬‬
‫} ‪38.‬‬

‫وﻋﻤﻠﯿﮫ اﻟﺤﺬف ﻣﻦ اﻟﻮﺳﻂ ﯾﺘﻢ اﻟﺒﺤﺖ‬


‫ﻋﻦ اﻟﻌﻘﺪة اﻟﻤﺮاد ﺣﺬﻓﮭﺎ ﺗﻢ ﻧﻐﯿﺮ ﺣﻘﻞ‬
‫اﻟﻤﺆﺷﺮ ﻟﻠﻌﻘﺪة اﻟﺬي ﻗﺒﻠﮭﺎ ﺑﺎﻟﻌﻘﺪة اﻟﺘﻲ‬
‫ﺑﻌﺪھﺎ وﯾﺘﻢ ذﻟﻚ ﺑﺠﻌﻞ ﻣﺆﺷﺮ ﯾﻤﺸﻲ‬
‫ورآﻧﺎ ﺑﻤﻘﺪار واﺣﺪ ﺑﻌﻤﻠﯿﺔ ﺟﻌﻞ ﻣﺘﻐﯿﺮ‬
‫وھﺬا اﻟﻤﺘﻐﯿﺮ ﯾﺎﺧﺪ ﻗﯿﻤﮫ اﻟﻌﻘﺪة ﺗﻢ ﻧﻨﺘﻘﻞ‬
‫ﻟﻠﻌﻘﺪة اﻟﺘﻲ ﺑﻌﺪھﺎ ‪.‬‬

‫ﺷﻜﻞ ‪15-19‬‬ ‫‪ 1.6.3‬اﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ اﻟﻤﺘﺼﻠﺔ‬


‫ﺣﯿﺚ ﯾﺸﯿﺮ ﻣﺆﺷﺮ اﻟﻌﻘﺪة اﻷﺧﯿﺮة إﻟﻰ اﻟﻌﻘﺪة اﻷوﻟﻰ أي ﻣﺆﺷﺮ اﻟﺬﯾﻞ ﺳﯿﺆﺷﺮ إﻟﻰ اﻟﺮأس واﻟﺸﻜﻞ‬
‫‪ 15-20‬ﯾﻮﺿﺢ ذﻟﻚ‪.‬‬
‫وﺗﺴﺘﻌﻤﻞ ھﺪه اﻟﻘﻮاﺋﻢ اﻟﻤﺘﺼﻠﺔ ﻛﺜﯿﺮاً ﻓﻲ أﻧﻈﻤﺔ إدارة ﺑﻨﻮك اﻟﻤﻌﻄﯿﺎت وﻓﻲ اﻟﺒﺮﻣﺠﺔ إذ ﺗﺴﻤﺢ‬
‫ﺑﺮﺑﻂ اﻟﻌﻨﺎﺻﺮ اﻟﺘﻲ ﺗﺘﻤﺘﻊ ﺑﻨﻔﺲ اﻟﺨﺼﺎﺋﺺ ﻓﯿﻤﺎ ﺑﯿﻨﮭﺎ ‪.‬‬

‫ﺷﻜﻞ ‪15-20‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪510‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫وﻋﻨﺪﻣﺎ ﺗﺮﯾﺪ ﺗﺤﻮﯾﻞ اﻟﻘﺎﺋﻤﺔ اﻟﺪاﺋﺮﯾﺔ إﻟﻰ ﻗﺎﺋﻤﺔ اﻟﺨﻄﯿﺔ ﻧﺠﻌﻞ ﻣﺆﺷﺮ أي ﻋﻘﺪة ﻓﻲ اﻟﻘﺎﺋﻤﺔ‬
‫ﻣﺴﺎوﯾﺎً إﻟﻰ )‪ (NULL‬ﻓﺘﺘﺤﻮل إﻟﻰ ﻗﺎﺋﻤﺔ ﻣﺘﺼﻠﺔ ‪.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪511‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 1.6.4‬اﻟﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ اﻟﺜﻨﺎﺋﯿﺔ‬
‫ﺗﻌﺘﺒﺮ اﻟﻘﻮاﺋﻢ اﻟﺜﻨﺎﺋﯿﺔ ﻗﻮاﺋﻢ أﺣﺎدﯾﮫ وﻟﻜﻦ ﻟﯿﺲ اﻟﻌﻜﺲ ﺣﯿﺚ أن اﻟﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ ﻟﮭﺎ ﻣﺆﺷﺮﯾﻦ ﻣﺆﺷﺮ‬
‫ﯾﺆﺷﺮ إﻟﻰ اﻟﻌﻘﺪة اﻟﺘﺎﻟﯿﺔ وﯾﺴﻤﻰ ‪ next‬وﻣﺆﺷﺮ ﯾﺸﯿﺮ إﻟﻰ اﻟﻌﻘﺪة اﻟﺴﺎﺑﻘﺔ ﯾﺴﻤﻰ ‪. last‬‬
‫وﺗﺴﺘﻌﻤﻞ ھﺬه اﻟﻘﻮاﺋﻢ ﻋﻨﺪﻣﺎ ﻧﺤﺘﺎج ﻟﻠﺮﺟﻮع إﻟﻰ وراء ﻟﺠﻠﺐ ﻣﻌﻠﻮﻣﺎت ﻣﻌﯿﻨﺔ وﻟﻨﺘﺬﻛﺮ ﺑﺮﻧﺎﻣﺞ ﻣﻌﺎﻟﺠﺔ‬
‫اﻟﻨﺼﻮص ﺣﯿﺚ أﻧﺔ ﯾﺴﺘﻄﯿﻊ اﻟﻌﻮدة إﻟﻰ اﻟﻮرى ﻟﺘﻌﺪﯾﻞ ﺣﺮف ﻣﺜﻼً‪.‬‬
‫وﯾﻜﻮن اﻟﮭﯿﻜﻞ اﻟﻌﺎم ﻟﮭﺎ ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪ 15-21‬واﻟﺸﻜﻞ ‪ 15-22‬ﯾﺒﯿﻦ اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ‪.‬‬

‫ﺷﻜﻞ ‪15-21‬‬

‫ﺷﻜﻞ ‪15-22‬‬

‫وﻣﻦ اﻟﺸﻜﻞ ‪ 15-22‬ﯾﺘﻀﺢ ﻟﻨﺎ ﺷﻜﻞ ھﺬه اﻟﻘﻮاﺋﻢ ‪ .‬وﺳﻨﻘﻮم اﻵن ﺑﺈﻧﺸﺎء ﺻﻨﻒ ﯾﻤﺜﻞ اﻟﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ‪:‬‬
‫**‪1. /‬‬
‫‪2. * Class binary tree by storing references to‬‬
‫‪3. * an element, a parent node, a left node, and a right node.‬‬
‫‪4. */‬‬
‫{‪5. public class BTNode‬‬
‫;‪6. private int element‬‬ ‫‪// element stored at this‬‬
‫‪node‬‬
‫‪7. private BTNode left, right; // adjacent nodes‬‬
‫‪8. /** Main constructor */‬‬
‫}{)(‪9. public BTNode‬‬
‫‪10.‬‬
‫{ )‪11. public BTNode(int element‬‬
‫;)‪12. setElement(element‬‬
‫;)‪13. setLeft(null‬‬
‫;)‪14. setRight(null‬‬
‫‪15.‬‬ ‫}‬
‫‪16. /** Returns the element stored at this position */‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪512‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


17. public int element() { return element; }
18. /** Sets the element stored at this position */
19. public void setElement(int o) { element=o; }
20. /** Returns the left child of this position */
21. public BTNode getLeft() { return left; }
22. /** Sets the left child of this position */
23. public void setLeft(BTNode v) { left=v; }
24. /** Returns the right child of this position */
25. public BTNode getRight() { return right; }
26. /** Sets the right child of this position */
27. public void setRight(BTNode v) { right=v; }
28. }
:‫ﺷﺮح اﻟﻤﺜﺎل‬
‫ اﻻﺧﺘﻼف‬.‫ ﻓﻲ اﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ‬NODE ‫ ھﻲ ﻧﻔﺴﮭﺎ ﻓﻲ ﺻﻨﻒ‬DNODE ‫ﺟﻤﯿﻊ اﻟﻤﻨﺎھﺞ ﻓﻲ اﻟﺼﻨﻒ‬
.‫ اﻟﺬي ﯾﺆﺷﺮ إﻟﻰ اﻟﻌﻘﺪة اﻟﺴﺎﺑﻘﺔ‬next ‫ وھﻮ ﻧﻔﺲ اﻟﻤﺘﺤﻮل‬last ‫ﻓﻘﻂ ھﻮ اﻟﻤﺘﺤﻮل‬

.‫ﻧﻔﺲ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﻃﺒﻘﺖ ﻋﻠﻰ اﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ ﺳﺘﻄﺒﻖ ﻋﻠﻰ اﻟﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ‬

‫ اﻟﻌﻤﻠﯿﺎت ﻋﻠﻰ اﻟﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ‬1.6.5

.‫وﻧﺒﺪأ ﺑﺄول ﻋﻤﻠﯿﮫ أﻻ وھﻲ ﻋﻤﻠﯿﺔ اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ‬


: ‫وھﺬا اﻟﻤﺜﺎل ﻟﮭﺬه اﻟﻌﻤﻠﯿﺔ‬

1. // ‫ﺑﺮﻧﺎﻣﺞ اﻷﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ ﻟﻠﻘﺎﺋﻤﺔ اﻟﺜﻨﺎﺋﯿﺔ‬


2. class Chp15_14 extends DNODE {
3. public static void main(String args[]){
4. DNODE head=null; // head DNODE of the list
5. DNODE tail=null; // tail DNODE of the list
6. DNODE node=null;
7. int size=5;
8.
9. tail=head=node=new DNODE(0);
10. for (int i=1;i<size;i++)
11. {
12. node=new DNODE(i);
13. tail.setNext(node);
14. node.setPrev(tail);
15. tail=node;
16. }
17.
18. node=head;
19.
20. while(node!=null)
21. {
22. System.out.print(node.getElement()+" ");

Aldopaee@hotmail.co m 513 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫;)(‪23. node=node.getNext‬‬
‫} ‪24.‬‬
‫;)(‪25. System.out.println‬‬
‫‪26.‬‬
‫;‪27. node=tail‬‬
‫)‪28. while(node!=null‬‬
‫{ ‪29.‬‬
‫;)" "‪30. System.out.print(node.getElement()+‬‬
‫;)(‪31. node=node.getPrev‬‬
‫} ‪32.‬‬
‫;)(‪33. System.out.println‬‬
‫} ‪34.‬‬
‫} ‪35.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬
‫اﻷﺳﻄﺮ ) ‪ (5-4‬ﻋﺮﻓﻨﺎ ‪ head‬ﻣﻦ ﻧﻮع ‪ DNODE‬ﻣﺆﺷﺮ ﻟﺴﺠﻞ وھﻮ اﻟﺮأس و ‪ tail‬ﻣﻦ ﻧﻮع‬
‫‪ DNODE‬ﻣﺆﺷﺮ ﻟﺴﺠﻞ وھﻮ اﻟﺬﯾﻞ و ‪ node‬ﺳﻨﺴﺘﺨﺪﻣﮫ ﻛﻤﺘﻐﯿﺮ ﻹدﺧﺎل ﺑﯿﺎﻧﺎت اﻟﻌﻘﺪ ‪.‬‬
‫اﻟﺴﻄﺮ ‪ 9‬ﺧﻄﻮة ﺿﺮورﯾﺔ وﻻﺑﺪ أن ﺗﻜﻮن ﻣﻨﻔﺮدة ﻋﻦ أﺧﻮاﺗﮭﺎ ﻟﻜﻲ ﻧﺴﺎوي اﻟﺮأس واﻟﺬﯾﻞ ﺑﺄول ﻋﻘﺪة ‪.‬‬
‫اﻷﺳﻄﺮ ) ‪ (10 - 16‬ﺳﻨﻜﻮن ‪ 4‬ﻋﻘﺪ أﺿﺎﻓﯿﺔ ﺑﺠﺎﻧﺐ اﻷوﻟﻰ ﻓﯿﻜﻮن ﻟﺪﯾﻨﺎ ‪ 5‬ﻋﻘﺪ ‪.‬‬
‫اﻟﺴﻄﺮ ‪ 13‬ﺗﺤﻮﯾﻞ ﺣﻘﻞ اﻟﺬﯾﻞ ﻣﻦ ‪ null‬إﻟﻰ ﻋﻨﻮان اﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة‪.‬‬
‫اﻟﺴﻄﺮ ‪ 14‬ﺣﻘﻞ اﻟﻌﻘﺪة اﻟﺜﺎﻧﯿﺔ ﯾﺴﺎوي اﻟﻌﻘﺪة اﻟﻘﺪﯾﻤﺔ إي اﻟﺬﯾﻞ‪.‬‬
‫ﻓﺒﮭﺬه اﻟﺤﺎﻟﺔ ﺗﻤﺖ ﻋﻤﻠﯿﺔ اﻟﺮﺑﻂ ﺑﯿﻦ اﻟﻌﻘﺪﺗﯿﻦ ﺑﻘﻲ ﻋﻠﯿﻨﺎ ﻧﻘﻞ اﻟﺬﯾﻞ إﻟﻰ اﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة ‪ tail=node‬ﻛﻤﺎ‬
‫ﻓﻲ اﻟﺴﻄﺮ ‪ 15‬وھﻜﺬا ﺑﺒﺎﻗﻲ اﻟﻌﻘﺪ إﻟﻰ أن ﯾﻨﺘﮭﻲ ﻋﻤﻞ اﻟﻠﻮب وﯾﻤﻜﻨﻚ ﺗﻜﻮﯾﻦ ﻣﺌﺎت اﻟﻌﻘﺪ ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ‬
‫واﻟﺸﻜﻞ ‪ 15-23‬ﯾﺒﻦ اﻟﺸﺮح ‪.‬‬

‫ﺷﻜﻞ ‪15-23‬‬

‫أم اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﺴﺎر ﻧﻔﺲ اﻟﺴﺎﺑﻖ إﻻ أن اﻻﺧﺘﻼف ﻓﻘﻂ ﺑﻌﻤﻠﯿﺔ إدﺧﺎل اﻟﻌﻘﺪ اﻟﺜﺎﻧﯿﺔ وﻣﺎ ﺑﻌﺪھﺎ ﻛﮭﺬه‬
‫اﻟﺸﻔﺮة ‪:‬‬

‫)‪for (int i=1;i<size;i++‬‬


‫{‬
‫;)‪node=new DNODE(i‬‬
‫;)‪node.setNext(head‬‬
‫;)‪head.setPrev(node‬‬
‫;‪head=node‬‬
‫}‬

‫اﻹ ﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ ﯾﻜﻮن اﻟﺮأس ﻣﺘﺤﺮﻛﺎ واﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﻦ ﯾﻜﻮن اﻟﺬﯾﻞ ھﻮ اﻟﻤﺘﺤﺮك‪.‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪514‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫وﻧﻔﺲ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ذﻛﺮﻧﺎھﺎ ﻓﻲ اﻟﻘﻮاﺋﻢ اﻷﺣﺎدﯾﺔ ﺗﻄﺒﻖ ﻋﻠﻰ اﻟﻘﻮاﺋﻢ اﻟﺜﻨﺎﺋﯿﺔ ﻓﻼﺧﺘﻼف ﻓﻘﻂ ھﻮ زﯾﺎدة‬
.‫اﻟﻤﺆﺷﺮ اﻟﺨﻠﻔﻲ ورﺑﻄﺔ ﺑﺎﻟﻌﻘﺪة اﻟﺠﺪﯾﺪة‬

‫وھﺬا اﻟﻤﺜﺎل ﻟﻌﻤﻠﯿﺔ ﺗﺮﺗﯿﺐ ﻗﺎﺋﻤﺔ ﺛﻨﺎﺋﯿﺔ‬


1. // ‫ﺑﺮﻧﺎﻣﺞ ﺗﺮﺗﯿﺐ ﻟﻘﺎﺋﻤﺔ اﻟﺜﻨﺎﺋﯿﺔ‬
2. class Chp15_15 extends DNODE {
3. public static void main(String args[]){
4. DNODE head=null; // head DNODE of the list
5. DNODE tail=null; // tail DNODE of the list
6. DNODE node=null;
7. int size=5;
8.
9. tail=head=node=new DNODE(0);
10. for (int i=1;i<size;i++)
11. {
12. node=new DNODE(i);
13. tail.setNext(node);
14. node.setPrev(tail);
15. tail=node;
16. }
17.
18. node=head;
19.
20. while(node!=null)
21. {
22. System.out.print(node.getElement()+" ");
23. node=node.getNext();
24. }
25. System.out.println();
26.
27. DNODE temp,temp2;
28.
29. for(temp=head;temp!=null;temp=temp.getNext())
30. for(temp2=head;temp2!=null;temp2=temp2.getNext())
31. if(temp.getElement()>temp2.getElement())
32. {
33. int j;
34. j=temp2.getElement();
35. temp2.setElement(temp.getElement());
36. temp.setElement(j);
37. }
38.
39. node=head;
40.
41. while(node!=null)
42. {

Aldopaee@hotmail.co m 515 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫;)" "‪43. System.out.print(node.getElement()+‬‬
‫;)(‪44. node=node.getNext‬‬
‫} ‪45.‬‬
‫;)(‪46. System.out.println‬‬
‫} ‪47.‬‬
‫} ‪48.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬
‫اﻟﺴﻄﺮ ‪ 27‬ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮﯾﻦ ﻣﻦ ﻧﻮع ‪ DNODE‬وﺗﻌﺎﻣﻠﻨﺎ ﺑﻌﻤﻠﯿﺔ اﻟﺘﺮﺗﯿﺐ ﻛﺘﺮﺗﯿﺐ ﻣﺼﻔﻮﻓﺔ وھﺬه‬
‫اﻟﺨﻮارزﻣﯿﺔ ﻣﻌﺮوﻓﺔ وﻻ ﺟﺪﯾﺪ ﻓﯿﮭﺎ‪.‬‬

‫ﯾﻨﺒﻐﻲ ﻋﻠﻰ اﻟﻘﺎرئ ﺣﻞ ھﺬا اﻟﻤﺜﺎل ﺑﺪون أن ﯾﻨﻀﺮ ﻟﻠﻜﻮد اﻟﻤﻜﺘﻮب‬


‫• اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻌﻤﻞ ﻋﻠﻰ إدﺧﺎل اﻷﻋﺪاد اﻟﻔﺮدﯾﺔ ﻣﻦ اﻟﯿﺴﺎر و اﻟﺰوﺟﯿﺔ ﻣﻦ اﻟﯿﻤﯿﻦ؟‬

‫ھﻞ اﻛﺘﺸﻔﺖ ﻓﻜﺮة اﻟﺒﺮﻧﺎﻣﺞ ﻓﮭﻲ ﺳﮭﻠﺔ ﺟﺪاً وﻻ ﺗﺤﺘﺎج إﻟﻰ ﺟﮭﺪ وﺿﯿﺎع ﻟﻠﻮﻗﺖ !‬
‫إن ﻟﻢ ﺗﺘﻀﺢ ﻟﻚ اﻟﻔﻜﺮة ﯾﺎ ﻋﺰﯾﺰي ﻓﺼﻠﻲ ﻋﻠﻰ ﻣﻌﺪن اﻷﺳﺮار وﻣﻨﺒﻊ اﻵﻧﻮار ﺳﯿﺪﻧﺎ ﻣﺤﻤﺪ وﻋﻠﻰ آﻟﮫ‬
‫وﺻﺤﺒﺔ اﻷﻃﮭﺎر وﺗﺘﺒﻊ ھﺬا اﻟﻜﻮد‪.‬‬
‫ﺑﺮﻧﺎﻣﺞ اﻷﺿﺎﻓﺔ ﻣﻦ اﻟﯿﻤﯿﻦ ﻟﻠﻘﺎﺋﻤﺔ اﻟﺜﻨﺎﺋﯿﺔ*‪1. /‬‬
‫اﻷﻋﺪاد اﻟﺰوﺟﯿﺔ وﻣﻦ اﻟﯿﺴﺎر اﻷﻋﺪاد اﻟﻔﺮدﯾﺔ ‪2.‬‬
‫‪3. */‬‬
‫{ ‪4. class Chp15_16 extends DNODE‬‬
‫{)][‪5. public static void main(String args‬‬
‫;‪6. DNODE head=null‬‬ ‫‪// head DNODE of the list‬‬
‫;‪7. DNODE tail=null‬‬ ‫‪// tail DNODE of the list‬‬
‫;‪8. DNODE node=null‬‬
‫;‪9. int size=5‬‬
‫‪10.‬‬
‫;)‪11. tail=head=node=new DNODE(0‬‬
‫)‪12. for (int i=1;i<size;i++‬‬
‫{ ‪13.‬‬
‫‪14. if(i%2==0){//if number evn‬‬
‫‪15.‬‬ ‫;)‪node=new DNODE(i‬‬
‫‪16.‬‬ ‫;)‪tail.setNext(node‬‬
‫‪17.‬‬ ‫;)‪node.setPrev(tail‬‬
‫‪18.‬‬ ‫;‪tail=node‬‬
‫‪19.‬‬ ‫}‬
‫‪20.‬‬ ‫‪else‬‬
‫‪21.‬‬ ‫‪{//if number add‬‬
‫‪22.‬‬ ‫;)‪node=new DNODE(i‬‬
‫‪23.‬‬ ‫;)‪node.setNext(head‬‬
‫‪24.‬‬ ‫;)‪head.setPrev(node‬‬
‫‪25.‬‬ ‫;‪head=node‬‬
‫‪26.‬‬ ‫}‬
‫} ‪27.‬‬
‫‪28. //print DNODE‬‬
‫;‪29. node=head‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪516‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


30. while(node!=null)
31. {
32. System.out.print(node.getElement()+" ");
33. node=node.getNext();
34. }
35. System.out.println();
36.
37. }
38. }

:‫ﺷﺮح اﻟﻤﺜﺎل‬
‫ﻓﻜﺮة اﻟﺒﺮﻧﺎﻣﺞ ھﻲ ﺑﻌﺪ إﻧﺸﺎء أول ﻋﻘﺪة ﯾﺘﻢ إﻧﺸﺎء ﺛﺎﻧﻲ ﻋﻘﺪة وﯾﺘﻢ ﺗﻔﺤﺺ اﻟﻘﯿﻤﺔ ﻓﺈذا ﻛﺎﻧﺖ زوﺟﯿﮫ ﻓﺎن‬
.(26 - 14) ‫ ﻛﻤﺎ ﻓﻲ اﻷﺳﻄﺮ‬.‫اﻹﺿﺎﻓﺔ ﺳﺘﻜﻮن ﻣﻦ اﻟﯿﻤﯿﻦ وإﻻ ﺳﺘﻜﻮن اﻹﺿﺎﻓﺔ ﻣﻦ اﻟﯿﺴﺎر‬

‫ﻋﻤﻠﯿﺎت اﻟﺤﺬف‬
. ‫ ھﻲ ﻧﻔﺴﮭﺎ ﺗﻨﻔﺬ ﻓﻲ اﻟﻠﻮاﺋﺢ اﻟﺜﻨﺎﺋﯿﺔ‬,‫ﻛﻤﺎ ﻧﻔﺬت ﻋﻤﻠﯿﺔ اﻟﺤﺬف ﻓﻲ اﻟﻠﻮاﺋﺢ اﻷﺣﺎدﯾﺔ‬
‫اﻟﺸﻲء اﻟﺬي ﻧﺮﯾﺪ ﺗﻮﺿﯿﺤﮫ ھﻮ ﻋﻨﺪﻣﺎ ﯾﺮاد ﻣﻨﻚ ﺣﺬف ﻋﻘﺪة ﻣﻦ أي ﻣﻜﺎن ﻣﻊ اﻻﺣﺘﻔﺎظ ﺑﺮأس اﻟﻼﺋﺤﺔ‬
. ‫وذﯾﻞ اﻟﻼﺋﺤﺔ‬

‫ھﺬا ﻣﺜﺎل ﯾﻌﻤﻞ ﻋﻠﻰ ﺣﺬف إي ﻋﻘﺪة ﺑﺎﻟﻘﺎﺋﻤﺔ‬

1. // ‫ﺑﺮﻧﺎﻣﺞ ﺣﺬف ﻋﻘﺪة ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﺜﻨﺎﺋﯿﺔ‬


2. import javax.swing.JOptionPane;
3. class Chp15_17 extends DNODE {
4. public static void main(String args[]){
5. DNODE head=null; // head DNODE of the list
6. DNODE tail=null; // tail DNODE of the list
7. DNODE node=null;
8. int size=5;
9.
10. tail=head=node=new DNODE(0);
11. for (int i=1;i<size;i++)
12. {
13. node=new DNODE(i);
14. tail.setNext(node);
15. node.setPrev(tail);
16. tail=node;
17. }
18.
19. //print DNODE
20. node=head;
21. while(node!=null)
22. {
23. System.out.print(node.getElement()+" ");
24. node=node.getNext();
25. }

Aldopaee@hotmail.co m 517 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


26. System.out.println();
27.
28. String snum1;
29. int num1;boolean flag=false;
30. snum1 = JOptionPane.showInputDialog("Enter Number
Delete:") ;
31. num1 = Integer.parseInt(snum1);
32. node=head;
33. while(node!=null)
34. {
35. if(node.getElement()==num1)
36. {
37. if(node==head)
38. {
39.
node.getNext().setPrev(null);
40. head=node.getNext();
41. node = null;
42. }
43. else
44. if(node==tail)
45. {
46.
node.getPrev().setNext(null);
47. tail=node.getPrev();
48. node = null;
49. }
50. else
51. {
52. node.getPrev().setNext(node.getNext());
53.
node.getNext().getNext().setPrev(node.getPrev());
54. node= null;
55. }
56. flag=true;
57. System.out.println("The Found Nuber And
Deleted");
58. break;
59. }
60. node=node.getNext();
61. }
62.
63. if(!flag)System.out.println("Not Found Nuber");
64.
65. //print DNODE
66. node=head;

Aldopaee@hotmail.co m 518 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫)‪67. while(node!=null‬‬
‫{ ‪68.‬‬
‫;)" "‪69. System.out.print(node.getElement()+‬‬
‫;)(‪70. node=node.getNext‬‬
‫} ‪71.‬‬
‫;)(‪72. System.out.println‬‬
‫;)‪73. System.exit(0‬‬
‫} ‪74.‬‬
‫} ‪75.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬

‫ﻓﻲ اﻟﺴﻄﺮ ‪ 37‬ﻧﺴﺘﻔﺴﺮ إذا ﻛﺎﻧﺖ اﻟﻌﻘﺪة ھﻲ اﻟﺮأس ﻓﺈﻧﮭﺎ ﺣﺎﻟﺔ ﺧﺎﺻﺔ إي اﻟﺤﺬف ﻣﻦ اﻟﺒﺪاﯾﺔ وﺳﺒﻖ وان‬
‫ﺗﻜﻠﻤﻨﺎ ﻋﻦ ھﺬه اﻟﺤﺎﻟﺔ وﻓﺎﺋﺪة ھﺬا اﻟﺸﺮط ھﻮ اﻟﺤﻔﺎظ ﻋﻠﻰ ﻣﻜﺎن اﻟﺮأس وھﻮ ﻧﻘﻠﺔ ﺑﻤﻘﺪار واﺣﺪ ﻟﻺﻣﺎم و‬
‫ﺑﻌﺪ ذﻟﻚ ﺣﺬف اﻟﻌﻘﺪة‪.‬‬
‫وﻓﻲ اﻟﺴﻄﺮ‪ 44‬ﻧﺴﺘﻔﺴﺮ إذا ﻛﺎﻧﺖ اﻟﻌﻘﺪة ھﻲ اﻟﺬﯾﻞ ﻓﺈﻧﮭﺎ ﺣﺎﻟﺔ ﺧﺎﺻﺔ أﯾﻀﺎً إي اﻟﺤﺬف ﻣﻦ اﻟﻨﮭﺎﯾﺔ وﺳﺒﻖ‬
‫وان ﺗﻜﻠﻤﻨﺎ ﻋﻦ ھﺬه اﻟﺤﺎﻟﺔ وﻓﺎﺋﺪة ھﺬا اﻟﺸﺮط ھﻮ اﻟﺤﻔﺎظ ﻋﻠﻰ ﻣﻜﺎن اﻟﺬﯾﻞ وھﻮ ﻧﻘﻠﺔ ﺑﻤﻘﺪار واﺣﺪ ﻟﻠﺨﻠﻒ‬
‫و ﺑﻌﺪ ذﻟﻚ ﺣﺬف اﻟﻌﻘﺪة‪.‬‬
‫وإﻻ ﺳﺘﻜﻮن اﻟﻌﻘﺪة ﺑﯿﻦ اﻟﺮأس واﻟﺬﯾﻞ ﻓﺈﻧﮭﺎ ﺣﺎﻟﺔ ﺧﺎﺻﺔ أﯾﻀﺎً ‪ ,‬ﻓﯿﺘﻢ رﺑﻂ ﻣﺆﺷﺮ اﻟﻌﻘﺪة اﻟﺴﺎﺑﻘﺔ ﻣﻊ اﻟﻌﻘﺪة‬
‫اﻟﺘﺎﻟﯿﺔ ورﺑﻂ ﻣﺆﺷﺮ اﻟﻌﻘﺪة اﻟﺘﺎﻟﯿﺔ ﻣﻊ اﻟﻌﻘﺪة اﻟﺴﺎﺑﻘﺔ ﻛﻤﺎ ﻓﻲ اﻷﺳﻄﺮ ) ‪ (55 - 51‬واﻟﺸﻜﻞ ‪ 15-24‬ﯾﺒﻦ‬
‫ذﻟﻚ ‪.‬‬

‫دﻣﺞ‬
‫اﻟﻘﻮا‬
‫ﺋﻢ‬
‫اﻟﺜﻨﺎ‬
‫ﺋﯿﺔ‪:‬‬
‫ﺑﻌﻤﻞ‬
‫ھﺬا‬
‫اﻟﻤﺜﺎ‬
‫ل‬
‫ﻋﻠﻰ‬
‫دﻣﺞ‬
‫ﻗﺎﺋﻤ‬
‫ﺗﯿﻦ‬
‫ﺛﻨﺎﺋﯿﺘ‬
‫ﻟﺸﻜﻞ ‪15-24‬‬ ‫ﯾﻦ‪:‬‬

‫ﺑﺮﻧﺎﻣﺞ دﻣﺞ ﻗﺎﺋﻤﺘﯿﻦ ﺛﻨﺎﺋﯿﺘﯿﻦ‪1. //‬‬


‫{ ‪2. class Chp15_18 extends DNODE‬‬
‫{)][‪3. public static void main(String args‬‬
‫;‪4. DNODE head=null‬‬ ‫‪// head DNODE of the list‬‬
‫;‪5. DNODE tail=null‬‬ ‫‪// tail DNODE of the list‬‬
‫;‪6. DNODE node=null‬‬
‫‪7.‬‬
‫‪8. DNODE head2=null; // head2 DNODE of the list‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪519‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


9. DNODE tail2=null; // tail2 DNODE of the list
10. DNODE node2=null;
11. int size=5;
12. //insert DList1
13. tail=head=node=new DNODE(0);
14. for (int i=1;i<size;i++)
15. {
16. node=new DNODE(i);
17. tail.setNext(node);
18. node.setPrev(tail);
19. tail=node;
20. }
21. //insert DList2
22. tail2=head2=node2=new DNODE(10);
23. for (int i=11;i<size+10;i++)
24. {
25. node2=new DNODE(i);
26. tail2.setNext(node2);
27. node2.setPrev(tail2);
28. tail2=node2;
29. }
30.
31. //Print DList1
32. node=head;
33. while(node!=null)
34. {
35. System.out.print(node.getElement()+" ");
36. node=node.getNext();
37. }
38. System.out.println("\nDList1");
39.
40. //Print DList2
41. node2=head2;
42. while(node2!=null)
43. {
44. System.out.print(node2.getElement()+" ");
45. node2=node2.getNext();
46. }
47. System.out.println("\nDList2");
48.
49. //node+node2
50. tail.setNext(head2);
51. head2.setPrev(tail);
52. tail=tail2;
53. tail2=head2=node2=null;
54.

Aldopaee@hotmail.co m 520 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫‪55. //Print DList1 + DList2‬‬
‫;‪56. node=head‬‬
‫)‪57. while(node!=null‬‬
‫{ ‪58.‬‬
‫;)" "‪59. System.out.print(node.getElement()+‬‬
‫;)(‪60. node=node.getNext‬‬
‫} ‪61.‬‬
‫;)"‪62. System.out.println("\nDList1 + DList2‬‬
‫‪63.‬‬
‫} ‪64.‬‬
‫} ‪65.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬
‫اﻷﺳﻄﺮ )‪ (50 - 53‬ﺗﻤﺖ دﻣﺞ اﻟﻼﺋﺤﺘﯿﻦ ﻣﻊ ﺑﻌﻀﮭﺎ اﻟﺒﻌﺾ ﻋﻦ ﻃﺮﯾﻖ ﺟﻌﻞ ذﯾﻞ اﻟﻼﺋﺤﺔ اﻷوﻟﻰ ﯾﺆﺷﺮ‬
‫إﻟﻰ رأس اﻟﻼﺋﺤﺔ اﻟﺜﺎﻧﯿﺔ ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ ‪ .50‬و ﺟﻌﻞ رأس اﻟﻼﺋﺤﺔ اﻟﺜﺎﻧﯿﺔ ﯾﺆﺷﺮ إﻟﻰ ذﯾﻞ اﻟﻼﺋﺤﺔ اﻷوﻟﻰ‬
‫ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ ‪ . 51‬وأﺧﺮ ﻋﻤﻠﯿﺔ ھﻲ ﻣﺴﺎواة ﻣﺆﺷﺮ اﻟﻼﺋﺤﺔ اﻷوﻟﻰ ﺑﻤﺆﺷﺮ اﻟﻼﺋﺤﺔ اﻟﺜﺎﻧﯿﺔ ﻛﻤﺎ ﻓﻲ‬
‫اﻟﺴﻄﺮ ‪.52‬‬
‫اﻟﺴﻄﺮ ‪ 53‬ﯾﻌﻤﻞ ﻋﻠﻰ ﺣﺬف اﻟﻤﺆﺷﺮات اﻟﺰاﺋﺪة ﻣﻦ ﻋﻤﻠﯿﺔ اﻟﺪﻣﺞ‪.‬‬

‫إﻟﻰ ھﻨﺎ ﻗﺪ اﺗﻀﺤﺖ ﻋﻤﻞ اﻟﻘﻮاﺋﻢ اﻟﻤﺬﺑﻠﺔ وھﺬه اﻷﻣﺜﻠﺔ اﻟﺘﻲ ﻛﺘﺒﺖ إذا ﻓﮭﻤﮭﺎ اﻟﻘﺎرئ ﻓﺄﻧﻨﺎ ﻧﻀﻤﻦ ﻟﮫ أن إي‬
‫ﺳﺆال ﺳﯿﻮاﺟﮫ ﺳﯿﻌﺮف إﺟﺎﺑﺘﮫ ﺑﻼ ﺗﻌﺐ أو ﻣﺠﮭﻮد‪.‬‬

‫ﻣﺜﺎل ﻣﮭﻢ ‪:‬‬

‫ﻟﻨﻔﺘﺮض أن ﻟﺪﯾﻨﺎ ﻻﺋﺤﺔ ﺛﻨﺎﺋﯿﺔ داﺋﺮﯾﺔ ﺑﺪاﺧﻠﮭﺎ ھﺬه ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪15-25‬‬

‫ﺷﻜﻞ ‪15-25‬‬

‫وﻟﺪﯾﻨﺎ ﺛﻼﺛﺔ ﻣﺆﺷﺮات ‪node , tail , head‬‬


‫وﻛﺎن أﻣﺮ اﻟﻄﺒﺎﻋﺔ‬
‫;))(‪System.out.println(node.getElement‬‬

‫;))(‪System.out.println(node.getNext().getNext().getElement‬‬

‫;))(‪System.out.println(node.getNext().getPrev().getElement‬‬

‫‪System.out.println(node.getNext().getNext().getNext().getNext().getNext‬‬
‫;))(‪().getNext().getElement‬‬
‫;))(‪System.out.println(head.getElement‬‬

‫;))(‪System.out.println(head.getNext().getElement‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪521‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


System.out.println(head.getPrev().getPrev().getElement());

System.out.println(tail.getPrev().getPrev().getNext().getElement());

System.out.println(tail.getNext().getPrev().getElement());

‫ﻓﻤﺎ ھﻮ ﻧﺎﺗﺞ ﺗﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ؟‬

: ‫ﺑﺈﻣﻜﺎﻧﻨﺎ أن ﻧﻘﺪر ﺛﻤﻦ ﺧﻮارزم ﻣﻌﺎﻟﺠﺔ اﻟﻠﻮاﺋﺢ ﺑﻮاﺳﻄﺔ‬


. ‫اﻟﺤﺠﻢ اﻟﻤﺸﻐﻮل ﻓﻲ اﻟﺬاﻛﺮة‬ §
.‫ﻋﺪد اﻟﻤﺆﺷﺮات اﻟﺘﻲ ﻣﻦ اﻟﻮاﺟﺐ ﻋﺒﻮرھﺎ أو اﺳﺘﻌﻤﺎﻟﮭﺎ‬ §

Aldopaee@ho tmail.co m 522 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫‪ 1.7‬اﻷﺷﺠﺎر )‪(Trees‬‬
‫اﻟﺸﺠﺮة ھﻲ ﻣﻜﺎن ﻏﯿﺮ ﺧﻄﻲ ﻟﺘﺨﺰﯾﻦ اﻟﻤﻌﻠﻮﻣﺎت ‪ ،‬وﺗﺴﺘﺨﺪم اﻷﺷﺠﺎر‬
‫ﻟﺘﻤﺜﯿﻞ اﻟﻤﻌﻠﻮﻣﺎت اﻟﺘﻲ ﻟﮭﺎ ﻋﻼﻗﺎت ﺗﺸﻌﺒﯿﮫ ﺑﺤﯿﺚ أن ﻛﻞ ﻋﻨﺼﺮ‬
‫"ﻣﻌﻠﻮﻣﺔ" ﻓﻲ اﻟﺸﺠﺮة ﻟﮫ أب واﺣﺪ وﻗﺪ ﯾﻜﻮن ﻟﮫ ﺻﻔﺮ أو أﻛﺜﺮ ﻣﻦ‬
‫اﻷﺑﻨﺎء‪.‬‬
‫اﻟﺠﺬر ‪ Root‬ھﻮ اﻟﻌﻨﺼﺮ اﻟﻮﺣﯿﺪ اﻟﺬي ﻻ ﯾﻮﺟﺪ ﻟﮫ أب ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ‬
‫‪.15-26‬‬

‫ﺷﻜﻞ ‪15-26‬‬

‫‪ 1.7.1‬ﻣﺼﻄﻠﺤﺎت اﻷﺷﺠﺎر‬
‫ﻋﻨﺎﺻﺮ اﻷﺷﺠﺎر ﺗﺴﻤﻰ ﺧﻼﯾﺎ ‪ ، Nodes‬وﻛﻞ ﺧﻠﯿﺔ ﻟﮭﺎ ﻣﺴﺎر ‪ Path‬واﺣﺪ ﻓﻘﻂ ﯾﻮﺻﻠﮭﺎ‬
‫ﺑﺎﻟﺠﺬر ‪.Root‬‬
‫واﻟﻤﺴﺎر ھﻮ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﺧﻼﯾﺎ ﻣﺘﺘﺎﺑﻌﺔ ﻟﻠﻮﺻﻮل إﻟﻰ ﺧﻠﯿﺔ ﻣﻌﯿﻨﺔ‪ .‬ﻃﻮل اﻟﻤﺴﺎر ‪Path‬‬
‫‪ Length‬ھﻮ ﻋﺒﺎرة ﻋﻦ ﻋﺪد اﻟﻮﺻﻼت ﻣﻦ اﻟﺠﺬر إﻟﻰ اﻟﺨﻠﯿﺔ اﻟﻤﺮاد ﻣﻌﺮﻓﺔ ﻃﻮل ﻣﺴﺎرھﺎ‬
‫واﻟﺬي ﯾﺴﺎوي ﻋﺪد اﻟﺨﻼﯾﺎ ﻧﺎﻗﺺ واﺣﺪ‪.‬‬
‫ﻓﻲ اﻟﺸﺠﺮة اﻟﺘﺎﻟﯿﺔ اﻟﻤﺴﺎر )‪ (M,H,C,A‬ﯾﻮﺻﻞ اﻟﺨﻠﯿﺔ ‪ M‬ﺑﺎﻟﺠﺬر ‪ A‬ﻃﻮﻟﮫ ‪.3‬‬

‫ﻋﻤﻖ ‪ Depth‬اﻟﺨﻠﯿﺔ ھﻮ ﻃﻮل ﻣﺴﺎرھﺎ إﻟﻰ اﻟﺠﺬر ‪ ،‬ﻣﺜ ﻼً اﻟﺨﻠﯿﺔ ‪ E‬ﻋﻤﻘﮭﺎ ‪ .2‬اﻟﺠﺬر ‪ A‬ﻋﻤﻘﮫ‬
‫‪.0‬‬
‫اﻟﻤﺴﺘﻮى ‪ Level‬ھﻮ ﻛﻞ اﻟﺨﻼﯾﺎ اﻟﺘﻲ ﻟﮭﺎ ﻧﻔﺲ اﻟﻌﻤﻖ‪ .‬اﻟﻤﺴﺘﻮى اﻟﺜﺎﻧﻲ ﻋﺒﺎرة ﻋﻦ‬
‫}‪.{E,F,G,H‬‬
‫إرﺗﻔﺎع ‪ Height‬اﻟﺸﺠﺮة ھﻮ أﻛﺒﺮ ﻋﻤﻖ ﻣﻮﺟﻮد ﻟﻠﺸﺠﺮة‪ ،‬وﻓﻲ اﻟﺸﺠﺮة اﻟﺴﺎﺑﻘﺔ ﯾﺴﺎوي ‪.3‬‬
‫اﻟﺸﺠﺮة اﻟﺘﻲ ﯾﻮﺟﺪ ﺑﮭﺎ ﺧﻠﯿﺔ واﺣﺪة ﻓﻘﻂ إرﺗﻔﺎﻋﮭﺎ ﯾﺴﺎوي ‪ .0‬واﻟﺸﺠﺮة اﻟﺘﻲ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ أي‬
‫ﺧﻠﯿﺔ ﯾﻌﺮف إرﺗﻔﺎﻋﮭﺎ )‪.(-1‬‬
‫درﺟﺔ اﻟﺨﻠﯿﺔ ‪ Degree‬ھﻮ ﻋﺪد أﺑﻨﺎﺋﮭﺎ اﻟﺨﻠﯿﺔ ‪ H‬درﺟﺘﮭﺎ ‪.5‬‬
‫‪Aldopaee@ho tmail.co m‬‬ ‫‪523‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬
‫اﻟﻮرﻗﺔ ‪ Leaf‬ھﻲ اﻟﺨﻠﯿﺔ اﻟﺘﻲ درﺟﺘﮭﺎ ﺻﻔﺮ أي ﻻﯾﻮﺟﺪ ﻟﮭﺎ أﺑﻨﺎء‪.‬‬
‫وﻣﻦ اﻟﺸﻜﻞ ‪ 15-27‬ﯾﺘﻀﺢ ﺟﻤﯿﻊ ﻣﺎ ﺳﺒﻖ‪.‬‬

‫ﺷﻜﻞ ‪15-27‬‬

‫‪ 1.7.2‬اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ )‪(Binary Trees‬‬

‫اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ ھﻲ أﺷﺠﺎر‬


‫ﻛﺴﺎﺑﻘﺘﮭﺎ ﻓﻲ اﻟﺘﻌﺮﯾﻒ إﻻ أن ﻋﺪد‬
‫اﻷﺑﻨﺎء ﻷي ﺧﻠﯿﺔ ﻻ ﯾﺘﺠﺎوز اﻻﺛﻨﺎن‬

‫ﺷﻜﻞ ‪15-28‬‬ ‫ﻃﺮق ﺗﻤﺜﯿﻞ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ‬


‫أن اﻟﺸﺠﺮة ﺗﻤﺜﻞ ﺑﻌﺪة ﻃﺮق ﺑﻮاﺳﻄﺔ اﻟﻘﻮاﺋﻢ‪ ,‬وﺗﻤﺜﻞ ﺑﺎﻟﻤﺘﺠﮭﺎت وﺳﻨﺪرس ﻓﯿﻤﺎ ﯾﻠﻲ ھﺬه اﻟﻄﺮق‪:‬‬
‫‪ v‬إذا ﻛﺎﻧﺖ اﻟﺸﺠﺮة ﺛﻨﺎﺋﯿﺔ ﻣﻨﺘﻈﻤﺔ ﺑﻌﻤﻖ )‪ (H‬ﻓﺈن ﻋﺪد ﻋﻨﺎﺻﺮ ھﺬه اﻟﺸﺠﺮة ﯾﺴﺎوي‬
‫)‪ (2^(H+1)-1‬وﻋﻠﯿﺔ ﻓﺈﻧﮭﺎ ﺗﻤﺜﻞ ﺑﻤﺼﻔﻮﻓﺔ أﺣﺎدﯾﺔ اﻟﺒﻌﺪ و ﻋﺪد ﻋﻨﺎﺻﺮ اﻟﻤﺘﺠﮫ اﻟﺬي‬
‫ﯾﻤﺜﻞ اﻟﺸﺠﺮة ﯾﺴﺎوي )‪ . (2^(H+1)-1‬وﻣﻤﯿﺰات ھﺬه اﻟﻄﺮﯾﻘﺔ‬
‫اﻟﺴﮭﻮﻟﺔ ﻓﺈذا أﻋﻄﯿﺖ ﻣﻮﻗﻊ اﻟﻌﻘﺪة اﻻﺑﻦ ﻓﻤﻦ اﻟﺴﮭﻞ ﺗﺤﺪﯾﺪ ﻣﻮﻗﻊ اﻷب ﺑﺎﻟﻨﺴﺒﺔ‬ ‫‪ý‬‬
‫ﻟﮭﺎ‪ .‬ﻓﻠﻮ ﻛﺎﻧﺖ اﻟﻌﻘﺪة اﻻﺑﻦ ﻓﻲ اﻟﻤﻮﻗﻊ ‪ n‬ﻣﻦ اﻟﻤﺼﻔﻮﻓﺔ ﻓﺈن ﻣﻮﻗﻊ اﻷب ﯾﻜﻮن‬
‫ﺻﺤﯿﺤﺎً)‪.(n/2‬‬
‫ﺗﻄﺒﻖ ﺑﺴﮭﻮﻟﺔ ﻓﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ‪ ,‬ﻣﺜﻞ ﺑﯿﺴﻚ وﻓﻮرﺗﺮان ﺣﯿﺚ ﺗﻜﻮن ﻣﻮاﻗﻊ‬ ‫‪ý‬‬
‫اﻟﺬاﻛﺮة اﻟﺜﺎﺑﺘﺔ ﻣﺘﻮﻓﺮة ﻣﺒﺎﺷﺮة ‪.‬‬
‫وﻋﯿﻮب ھﺬه اﻟﻄﺮﯾﻘﺔ‬
‫‪ ý‬ﻋﻤﻠﯿﺔ اﻹﺿﺎﻓﺔ واﻟﺤﺬف ﺗﺆدي إﻟﻰ ﺗﺤﺮﯾﻚ اﻟﺒﯿﺎﻧﺎت إﻟﻰ أﻋﻠﻰ وأﺳﻔﻞ ﻓﻲ‬
‫اﻟﻤﺼﻔﻮﻓﺔ وھﺬا ﯾﻀﯿﻊ وﻗﺖ اﻟﻤﻌﺎﻟﺠﺔ ‪.‬‬
‫‪ ý‬ﺗﻜﻮن ھﻨﺎﻟﻚ ﻣﻮاﻗﻊ ذاﻛﺮة ﻏﯿﺮ ﻣﺴﺘﻐﻠﺔ‬
‫‪ v‬ﺗﻤﺜﯿﻞ اﻟﺸﺠﺮة ﺑﻮاﺳﻄﺔ اﻟﻘﻮاﺋﻢ ‪:‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪524‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺷﻜﻞ ‪15-29‬‬

‫وﻧﻼﺣ‬
‫ظ‬
‫ﻣﻦ‬
‫اﻟﺸﻜﻞ‬
‫اﻟﺴﺎﺑﻖ‬
‫أن‬
‫ﻛﻠﻤﺎ‬
‫اﺗﺠﮭﻨﺎ‬
‫إﻟﻰ‬
‫اﻟﯿﻤﯿﻦ‬
‫ﺷﻜﻞ ‪15-30‬‬ ‫ﯾﻜﻮن‬
‫اﻟﻌﺪد‬
‫اﻛﺒﺮ ﻣﻦ اﻟﺴﺎﺑﻖ وﻛﻞ ﻣﺎ اﺗﺠﮭﻨﺎ إﻟﻰ اﻟﯿﺴﺎر ﻛﺎن اﻟﻌﺪد اﺻﻐﺮ ﻣﻦ اﻷب أو اﻟﻌﻘﺪة اﻟﺴﺎﺑﻘﺔ وھﻜﺬا‬
‫ﺗﻜﻮن اﻷﻋﺪاد ﻣﺮﺗﺒﺔ ﺗﺼﺎﻋﺪﯾﺎً وﺗﻨﺎزﻟﯿﺎً ‪.‬‬
‫وﻧﻜﺮر أن اﻷﻋﺪاد ﻻ ﺗﺘﻜﺮر ﻓﻲ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ‪.‬‬
‫وﻧﻼﺣﻆ أن ﻣﻦ ﻋﯿﻮب ھﺬه اﻟﻄﺮﯾﻘﺔ‬
‫‪ ý‬ﺗﺤﺘﻮي ﻋﻠﻰ ﻓﺮاغ ﻓﻲ ﻓﻀﺎء اﻟﺬاﻛﺮة ﻏﯿﺮ ﻣﺴﺘﻌﻤﻞ ﻧﺘﯿﺠﺔ ﻻﺳﺘﺨﺪام ﻣﺆﺷﺮ ﺻﻔﺮﯾﺔ‬
‫‪.NULL‬‬
‫‪ ý‬ﺧﻮارزﻣﯿﺔ اﻟﺘﻄﺒﯿﻖ ﻟﮭﺎ أﺻﻌﺐ اﻟﻠﻐﺎت ﻓﻲ اﻟﻠﻐﺎت اﻟﺘﻲ ﻻ ﺗﻌﻄﻲ ﺗﻘﻨﯿﺔ ذاﻛﺮة ﻣﺘﺤﺮﻛﺔ‬
‫)دﯾﻨﺎﻣﯿﻜﯿﺔ ( ‪.‬‬

‫‪ 1.7.3‬ﺗﻄﺒﯿﻘﺎت اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ‬

‫‪ .i‬ﺷﺠﺮة ‪ Huffman‬ﻟﻀﻐﻂ اﻟﺒﯿﺎﻧﺎت‬

‫ﻟﺸﺮح ﻛﯿﻔﯿﺔ ﻋﻤﻞ ﻃﺮﯾﻘﺔ ‪ Huffman‬ﻧﻔﺮض اﻧﮫ ﯾﻮﺟﺪ ﻟﺪﯾﻨﺎ ﻣﻠﻒ وﺣﺠﻤﮫ ‪byte1000‬‬
‫ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﺤﺮوف )‪. (a,b,c,d,e,f,g,i,j‬‬

‫‪ -1‬ﻧﻘﻮم ﺑﻌﻤﻞ إﺣﺼﺎﺋﯿﺔ ﻋﻦ اﻟﻤﻠﻒ اﻟﻤﺮاد ﺗﻘﻠﯿﺺ ﺣﺠﻤﮫ وذﻟﻚ ﺑﻌﺪّ ﺗﻜﺮار ﻛﻞ ﺣﺮف‪.‬‬

‫ﺟﺪول ‪15-2‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪525‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ -2‬ﻧﻘﻮم ﺑﺒﻨﺎء ‪ Binary Tree‬وذﻟﻚ ﻋﻦ ﻃﺮﯾﻖ اﺧﺘﯿﺎر اﻟﺤﺮوف ذات اﻷﻗﻞ ﺗﻜﺮار وﺗﻮﺻﯿﻠﮭﺎ‬
‫ﺑﺒﻌﺾ‪.‬‬

‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺣﺮف ‪ j‬وﺣﺮف ‪ b‬ﯾﻤﺜﻼن أﻗﻞ ﺗﻜﺮار ‪ ،‬ﻧﻘﻮم ﺑﺘﻮﺻﯿﻠﮭﻤﺎ ﻣﻊ وﺿﻊ ﻣﺠﻤﻮع‬
‫ﺗﻜﺮارھﻤﺎ ﻛﻤﺎ ﻓﻲ ﺷﻜﻞ ‪.15-31‬‬
‫‪171‬‬ ‫‪130‬‬ ‫‪57‬‬ ‫‪52‬‬ ‫‪274‬‬ ‫‪149‬‬ ‫‪92‬‬ ‫‪42‬‬ ‫‪31‬‬ ‫‪2‬‬
‫ا‬
‫‪a‬‬ ‫‪h‬‬ ‫‪c‬‬ ‫‪f‬‬ ‫‪e‬‬ ‫‪i‬‬ ‫‪d‬‬ ‫‪g‬‬ ‫‪b‬‬ ‫‪j‬‬ ‫ﻵ‬
‫ن‬
‫‪33‬‬

‫ﯾ ﺷﻜﻞ ‪15-31‬‬
‫ﻣﺜﻞ ﻣﺠﻤﻮع ﺣﺮﻓﻲ ‪ b,j‬وﺣﺮف ‪ g‬اﻷﻗﻞ ﺗﻜﺮارا ﻧﻘﻮم ﺑﺘﻮﺻﯿﻠﮭﻤﺎ ﺑﻨﻔﺲ اﻟﺨﻄﻮات اﻟﺴﺎﺑﻘﺔ‬
‫‪171‬‬ ‫‪130‬‬ ‫‪57‬‬ ‫‪52‬‬ ‫‪274‬‬ ‫‪149‬‬ ‫‪92‬‬ ‫‪42‬‬ ‫‪31‬‬ ‫ﻋ ‪2‬‬
‫ﻧ‬
‫‪a‬‬ ‫‪h‬‬ ‫‪c‬‬ ‫‪f‬‬ ‫‪e‬‬ ‫‪i‬‬ ‫‪d‬‬ ‫‪g‬‬ ‫‪b‬‬ ‫‪j‬‬ ‫د‬
‫‪33‬‬
‫ﻣ‬
‫‪75‬‬
‫ن‬
‫ﺷﻜﻞ ‪15-29‬‬
‫ﺗ‬
‫وﺻﯿﻞ ﺟﻤﯿﻊ اﻟﺤﺮوف ﺗﻜﻮن ‪ Binary Tree‬ﻛﺎﻟﺸﻜﻞ ‪:15-32‬‬
‫‪leaves‬‬
‫‪3‬‬
‫‪171‬‬ ‫‪130‬‬ ‫‪57‬‬ ‫‪52‬‬ ‫‪274‬‬ ‫‪149‬‬ ‫‪92‬‬ ‫‪42‬‬ ‫‪31‬‬ ‫‪-2‬‬
‫‪a‬‬ ‫‪h‬‬ ‫‪c‬‬ ‫‪f‬‬ ‫‪e‬‬ ‫‪i‬‬ ‫‪d‬‬ ‫‪g‬‬ ‫‪b‬‬ ‫‪j‬‬
‫ﻧ‬
‫‪33‬‬
‫ﻗ‬
‫‪75‬‬
‫و‬
‫م‬
‫‪109‬‬

‫‪167‬‬
‫ﺑ‬
‫ﺗ‬
‫‪239‬‬
‫و‬
‫‪316‬‬
‫ز‬
‫ﯾ‬
‫‪410‬‬
‫ع‬
‫‪590‬‬
‫‪1‬‬
‫‪1000‬‬
‫ﻋ‬
‫‪Root‬‬ ‫ﻟ‬
‫ﺷﻜﻞى ‪15-33‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪526‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﻛﻞ ﻓﺮع ﻣﻦ اﻟﻔﺮوع اﻟﯿﻤﻨﻰ ‪ ،‬و ‪ 0‬ﻋﻠﻰ اﻟﻔﺮوع اﻟﯿﺴﺮى‪.‬‬
‫‪leaves‬‬

‫‪171‬‬ ‫‪130‬‬ ‫‪57‬‬ ‫‪52‬‬ ‫‪274‬‬ ‫‪149‬‬ ‫‪92‬‬ ‫‪42‬‬ ‫‪31‬‬ ‫‪2‬‬
‫‪ -4‬ﻧﻘﻮم‬
‫‪a‬‬ ‫‪h‬‬ ‫‪c‬‬ ‫‪f‬‬ ‫‪e‬‬ ‫‪i‬‬ ‫‪d‬‬ ‫‪g‬‬ ‫‪b‬‬ ‫‪j‬‬ ‫ﺑﺘﺴﺠﯿﻞ‬
‫اﻟﻤﺴﺎرات‬
‫‪0‬‬ ‫‪1‬‬
‫‪33‬‬
‫‪0‬‬
‫‪75‬‬
‫‪1‬‬
‫اﻟﺘﻲ‬
‫‪0‬‬ ‫‪1‬‬ ‫ﺗﻮﺻﻞ إﻟﻰ‬
‫‪109‬‬
‫‪0‬‬ ‫‪1‬‬
‫ﻛﻞ ﺣﺮف‬
‫‪167‬‬ ‫ﻣﻦ‬
‫‪0‬‬
‫‪239‬‬
‫‪1‬‬
‫اﻟﺤﺮوف‬
‫‪0‬‬ ‫‪1‬‬ ‫اﻷﺻﻠﯿﺔ‬
‫‪0‬‬
‫‪1‬‬
‫‪316‬‬
‫ﻟﻠﻤﻠﻒ ‪،‬‬
‫‪410‬‬ ‫وذﻟﻚ ﺑﺘﺘﺒﻊ‬
‫‪0‬‬
‫‪590‬‬
‫‪1‬‬
‫ﻣﺴﺎرات‬
‫‪Binary‬‬
‫‪0‬‬ ‫‪1‬‬
‫‪1000‬‬
‫‪Tree‬‬
‫ﻣﻦ اﻟﺠﺬر‬
‫‪Root‬‬
‫‪ Root‬إﻟﻰ‬
‫ﺷﻜﻞ ‪15-33‬‬
‫اﻷوراق‬
‫‪.Leaves‬‬

‫ﺟﺪول ‪15-3‬‬
‫‪a‬‬ ‫‪b‬‬ ‫‪c‬‬ ‫‪d e‬‬ ‫‪f‬‬ ‫‪g‬‬ ‫‪h‬‬ ‫‪i‬‬ ‫‪J‬‬
‫‪00 111110 0110 1110 10 0111 11110 010 110 111111‬‬

‫ﻋﻨﺪ ﺗﻜﻮﯾﻦ اﻟﻤﻠﻒ اﻟﻤﻀﻐﻮط ﻧﺴﺘﺒﺪل اﻟﺤﺮوف اﻷﺻﻠﯿﺔ ﺑﻤﺴﺎراﺗﮭﺎ اﻟﻤﺤﺴﻮﺑﺔ ﻓﻲ اﻟﺨﻄﻮة رﻗﻢ ‪.4‬‬

‫وﻧﺴﺘﻄﯿﻊ ﺣﺴﺎب ﺣﺠﻢ اﻟﻤﻠﻒ اﻟﺠﺪﯾﺪ وﻧﺴﺒﺔ ﺗﻘﻠﯿﺼﮫ ﺑﻀﺮب ﻃﻮل ﻣﺴﺎر ﻛﻞ ﺣﺮف ﻓﻲ ﺗﻜﺮاره ﻓﻲ اﻟﻤﻠﻒ‬

‫ﺟﺪول ‪15-4‬‬

‫أي أن اﻟﻤﻠﻒ اﻟﺠﺪﯾﺪ ﺳﯿﻜﻮن ﺣﺠﻤﮫ ‪ 372 =2970/8‬ﺑﺎﯾﺖ ‪ ،‬ﺑﻤﻌﻨﻰ أن اﻟﺤﺠﻢ اﻟﺠﺪﯾﺪ ﯾﻌﺎدل ‪%37.2‬‬
‫ﻣﻦ اﻟﺤﺠﻢ اﻷﺻﻠﻲ‪.‬‬
‫ﻓﻜﺮة ﻋﻤﻞ ھﺬه اﻟﻄﺮﯾﻘﺔ ﺗﺘﻠﺨﺺ ﻓﻲ إﻧﮭﺎ ﺗﺴﺘﻐﻞ اﻟﺤﺮوف اﻟﻤﻮﺟﻮدة ﺑﻜﺜﺮة ﻓﻲ اﻟﻤﻠﻒ وﺗﻀﻌﮭﺎ ﻓﻲ أﻗﺼﺮ‬
‫ﻣﺴﺎر ﻓﻲ ‪ Binary Tree‬ﻣﻤﺎ ﯾﻌﻨﻲ إﻧﮭﺎ )اﻟﺤﺮوف( ﺳﯿﺘﻢ أﻋﻄﺎﺋﮭﺎ أﻗﻞ ﺣﯿﺰ ﺗﺨﺰﯾﻨﻲ ﻣﻤﻜﻦ‪.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪527‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪Aldopaee@hotmail.co m‬‬ ‫‪528‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬
‫‪ 1.7.4‬ﺧﻮارزﻣﯿﺔ ﺑﻨﺎء اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ‬
‫أن ﺑﻨﺎء اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ ﯾﻌﺘﻤﺪ ﻋﻠﻰ ﻃﺮﯾﻘﺔ ﻋﺒﻮرھﺎ‪ ,‬وﺳﺎﺑﻘﺎً ﻗﺪ ﺳﻘﻨﺎ ﻋﺪة ﻃﺮق ﻟﻌﺒﻮر اﻟﺸﺠﺮة‬
‫ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ اﻟﻤﺆﺷﺮات وﻓﻲ اﻟﺨﻮارزﻣﯿﺎت اﻟﺘﺎﻟﯿﺔ ﺟﻤﯿﻌﮭﺎ ﺳﻨﻔﺘﺮض اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ ذات‬
‫ﻣﺆﺷﺮ اﻹﺑﺎء ﺑﺎﻷﺑﻨﺎء )‪ . (Father Link‬وﻋﻤﻠﯿﺔ إﺿﺎﻓﺔ ﻋﻘﺪة ﻓﻲ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ‬
‫ﻗﯿﻤﺔ ﺗﻠﻚ اﻟﻌﻘﺪة ‪ ,‬ﻓﺈن ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ اﻛﺒﺮ ﻣﻦ اﻟﺠﺬر اﺗﺠﮭﻨﺎ إﻟﻰ اﻟﯿﻤﯿﻦ واﻟﻌﻜﺲ ﻧﺘﺠﮫ إﻟﻰ اﻟﯿﺴﺎر‬
‫وﺧﻼﺻﺔ ھﺬه اﻟﺨﻮارزﻣﯿﺔ ﺗﺘﻠﺨﺺ ﺑﺎﻷﺗﻲ‪:‬‬
‫‪ ý‬ﺿﻊ اﻟﻌﻨﺼﺮ اﻷول ﻋﻠﻰ أﺳﺎس أﻧﺔ اﻟﻌﻘﺪة اﻷول ﻓﻲ اﻟﮭﯿﻜﻞ )اﻟﺠﺬر( ‪.‬‬
‫‪ ý‬واﻟﻌﺪد اﻟﺘﺎﻟﻲ إذا ﻛﺎن اﻟﻌﻨﺼﺮ اﻟﻤﺮاد إدﺧﺎﻟﮫ اﻛﺒﺮ ﻣﻦ اﻟﺠﺬر ﺳﻨﻀﻌﮫ ﻋﻠﻰ ﯾﻤﯿﻦ اﻟﺠﺬر‬
‫‪.‬‬
‫‪ ý‬وإﻻ ﻋﻠﻰ ﯾﺴﺎر اﻟﺠﺬر ‪.‬‬
‫واﻟﺸﻜﻞ ‪ 15-34‬ﯾﺒﯿﻦ ذﻟﻚ ‪ .‬ﻓﺈن أدﺧﻠﻨﺎ ھﺬه اﻟﻘﯿﻢ )‪(25,20,7,13,33,50,45,17,30,55‬‬
‫ﺳﺘﻜﻮن اﻟﺸﺠﺮة ﺑﮭﺬا اﻟﺸﻜﻞ‬

‫ﺷﻜﻞ ‪15-34‬‬
‫ﻟﻘﺪ‬
‫ﺑﺪﺋﻨﺎ ﺑﺎﻟﺠﺪر )‪ (25‬ﺛﻢ اﻧﺘﻘﻠﻨﺎ إﻟﻰ اﻟﯿﺴﺎر ﺑﺎﻟﻌﺪد ‪ 20‬ﻷﻧﺔ اﺻﻐﺮ ﻣﻦ ‪ 25‬ﺛﻢ اﻧﺘﻘﻠﻨﺎ إﻟﻰ ﯾﺴﺎر ‪25‬‬
‫و ‪ 20‬ﺑﺎﻟﻌﺪد ‪ 7‬ﻷﻧﺔ أﺻﻐﺮ ﻣﻦ ‪ 20‬ﺛﻢ اﻧﺘﻘﻠﻨﺎ ﺑﺎﻟﻌﺪد ‪ 13‬إﻟﻰ اﻟﯿﺴﺎر ﻣﻦ ‪ 25‬وھﻜﺬا إﻟﻰ ﻧﮭﺎﯾﺔ‬
‫اﻷﻋﺪاد ‪.‬‬

‫وﻧﻌﺮض اﻵن ﺻﻨﻒ اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ ‪:‬‬

‫**‪1. /‬‬
‫‪2. * Class binary tree by storing references to‬‬
‫‪3. * an element, a parent node, a left node, and a right node.‬‬
‫‪4. */‬‬
‫{‪5. public class BTNode‬‬
‫;‪6. private int element‬‬ ‫‪// element stored at‬‬
‫‪this node‬‬
‫‪7. private BTNode left, right; // adjacent nodes‬‬
‫‪8. /** Main constructor */‬‬
‫}{)(‪9. public BTNode‬‬
‫‪10.‬‬
‫{ )‪11. public BTNode(int element‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪529‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


12. setElement(element);
13. setLeft(null);
14. setRight(null);
15. }
16. /** Returns the element stored at this position */
17. public int element() { return element; }
18. /** Sets the element stored at this position */
19. public void setElement(int o) { element=o; }
20. /** Returns the left child of this position */
21. public BTNode getLeft() { return left; }
22. /** Sets the left child of this position */
23. public void setLeft(BTNode v) { left=v; }
24. /** Returns the right child of this position */
25. public BTNode getRight() { return right; }
26. /** Sets the right child of this position */
27. public void setRight(BTNode v) { right=v; }
28. }

: ‫وﻓﯿﻤﺎ ﯾﻠﻲ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﯾﻨﻔﺬ ﺟﻤﯿﻊ ﻣﺎ ﺳﺒﻖ‬

1. //‫ﺑﺮﻧﺎﻣﺞ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ‬


2. class Chp15_19 extends BTNode {
3. public static void main(String args[]){
4. BTNode root=null; // root BTNode of the
BTree
5. BTNode right=null; // right BTNode of the BTree
6. BTNode left=null; // left BTNode of the
BTree
7. BTNode node=null;
8.
9. int Arr[]={5,6,2,8,4,10,18,9,0};
10. //insert BTree
11. for (int i=0;i<Arr.length;i++)
12. {
13. if(root==null)
14. {
15. root=node=new BTNode(Arr[0]);
16. }
17. else
18. {
19. node=new BTNode(Arr[i]);
20. BTNode s,p;
21. p=s=root;
22. while(s!=null)
23. {
24. p=s;

Aldopaee@hotmail.co m 530 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫‪25.‬‬
‫))(‪if(node.element()>s.element‬‬
‫‪26.‬‬ ‫;)(‪s=s.getRight‬‬
‫‪27.‬‬ ‫‪else‬‬
‫‪28.‬‬ ‫;)(‪s=s.getLeft‬‬
‫‪29.‬‬ ‫}‬
‫‪30.‬‬ ‫))(‪if(node.element()>p.element‬‬
‫‪31.‬‬ ‫;)‪p.setRight(node‬‬
‫‪32.‬‬ ‫‪else‬‬
‫‪33.‬‬ ‫;)‪p.setLeft(node‬‬
‫‪34.‬‬
‫‪35.‬‬ ‫}‬
‫} ‪36.‬‬
‫‪37.‬‬
‫‪38. //Print DBTree‬‬
‫;)‪39. Print(root‬‬
‫;)"‪40. System.out.println("\nDBTree‬‬
‫} ‪41.‬‬
‫{)‪42. static void Print(BTNode node‬‬
‫{)‪43. if(node!=null‬‬
‫‪44.‬‬ ‫;)" "‪System.out.print(node.element()+‬‬
‫‪45.‬‬ ‫;))(‪Print(node.getLeft‬‬
‫‪46.‬‬ ‫;))(‪Print(node.getRight‬‬
‫‪47.‬‬ ‫}‬
‫‪48.‬‬ ‫}‬
‫} ‪49.‬‬

‫ﺷﺮح اﻟﻤﺜﺎل‪:‬‬
‫اﻷﺳﻄﺮ )‪ (35 - 18‬ﻗﻤﻨﺎ ﺑﻌﻤﻠﯿﮫ اﻟﺒﺤﺚ ﻋﻦ اﻟﻤﻮﻗﻊ اﻟﺘﻲ ﺳﻨﻀﻊ اﻟﻌﻘﺪة ﺣﺴﺐ ﺧﻮارزﻣﯿﺔ اﻷﺷﺠﺎر ﻓﺈذا‬
‫ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ اﻛﺒﺮ اﺗﺠﮭﻨﺎ ﯾﺴﺎراً وإﻻ اﺗﺠﮭﻨﺎ ﯾﻤﯿﻨﺎُ إﻟﻰ أن ﯾﺼﻞ ‪ s = null‬ﻛﻤﺎ ﻓﻲ اﻟﺴﻄﺮ ‪.22‬‬

‫ﻓﺎﺋﺪة اﻟﻤﺘﺤﻮل ‪ p‬ھﻮ ﻋﺒﺎرة ﻣﺆﺷﺮ ﯾﺆﺷﺮ ﺑﻤﻘﺪار واﺣﺪ ﻟﻠﺨﻠﻒ ﻟﻨﺤﺘﻔﻆ ﺑﻤﻮﻗﻊ أﺧﺮ ﻋﻘﺪة اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﻋﻤﻠﯿﺔ‬
‫اﻟﺒﺤﺚ ‪.‬‬

‫ﺑﻌﺪ ﻣﻦ ﺑﺤﺚ اﻟﻤﻮﻗﻊ ﻧﻘﻮم ﺑﻌﻤﻠﯿﮫ اﺳﺘﻔﺴﺎر ﻓﺈذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ اﻛﺒﺮ ﻣﻦ اﻟﻌﻘﺪة اﻟﺘﻲ ﻋﺜﺮﻧﺎ ﻋﻠﯿﮭﺎ ﺑﻮاﺳﻄﺔ ‪p‬‬
‫ﻓﺄﻧﻨﺎ ﻧﻀﻊ اﻟﻌﻘﺪة ﻋﻠﻰ اﻟﯿﻤﯿﻦ وإﻻ ﻧﻀﻌﮭﺎ ﻋﻠﻰ اﻟﯿﺴﺎر وھﻜﺬا ﻟﺒﺎﻗﻲ اﻟﻌﻘﺪ ﻛﻤﺎ ﻓﻲ اﻷﺳﻄﺮ )‪. (30 – 34‬‬

‫اﻟﺴﻄﺮ ‪ 39‬ﺗﻢ اﺳﺘﺪﻋﺎء ﻣﻨﮭﺞ ‪ Print‬ﻟﯿﻘﻮم ﺑﻄﺒﺎﻋﺔ اﻟﺸﺠﺮة ‪ .‬و ھﻨﺎ ﺗﻜﻮن ﻋﻤﻠﯿﺔ اﻟﻄﺒﺎﻋﺔ ﺑﺎﻻﺳﺘﺪﻋﺎء‬
‫اﻟﺬاﺗﻲ ﻓﮭﻲ أﺳﮭﻞ ‪.‬‬

‫‪ 1.7.5‬ﺧﻮارزم إﺳﺘﺮﺟﺎع اﻟﻤﻌﻠﻮﻣﺎت ﻣﻦ اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ‬

‫‪Binary Tree Traversal‬‬


‫واﻟﻤﻘﺼﻮد ھﻨﺎ ھﻮ زﯾﺎرة ﻛﻞ ﺧﻠﯿﺔ واﺳﺘﺮﺟﺎع ﻣﻌﻠﻮﻣﺎﺗﮭﺎ "ﻟﻠﻄﺒﺎﻋﺔ ﻣﺜﻼُ" ﻣﺮة واﺣﺪ ﻓﻘﻂ‪ .‬وﻟﻨﻔﺮض أن‬
‫ﺗﻤﺜﯿﻞ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪: 15-35‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪531‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﻓﻤﻦ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ﯾﻤﻜﻨﻨﺎ اﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت‬
: ‫ﻣﻦ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ ﺑﺴﺖ ﻃﺮق وھﻲ‬
Left Right Data
Left Data Right
Right Left Data
Right Data Left
15-35 ‫ﺷﻜﻞ‬ Data Left Right
Data Right Left
: ‫ ﯾﺘﺒﻘﻰ ﻟﻨﺎ ﺛﻼث ﻃﺮق وھﻲ‬Left ‫ ﻗﺒﻞ‬Right ‫وﺑﺎﺳﺘﺒﻌﺎد اﻟﻄﺮق اﻟﺘﻲ ﺗﻮﺟﺪ ﺑﮭﺎ‬

Left Right Data ‫ وﺗﻤﺜﻞ‬Post Order ‫اﻷوﻟﻰ وﺗﺴﻤﻰ‬


Data Left Right ‫ وﺗﻤﺜﻞ‬Pre Order ‫اﻟﺜﺎﻧﯿﺔ وﺗﺴﻤﻰ‬
Left Data Right ‫ وﺗﻤﺜﻞ‬In Order ‫واﻟﺜﺎﻟﺜﺔ وﺗﻤﺴﻰ‬
..‫وھﻜﺬا‬... ‫ اﻷﺧﯿﺮة‬Data ‫ ﻓﻔﻲ اﻟﻄﺮﯾﻘﺔ اﻷوﻟﻰ ﺗﻘﻊ‬، Data ‫وﺳﻤﯿﺖ ھﺬه اﻟﻄﺮق ﻧﺴﺒﺔ إﻟﻰ ﻣﻮﻗﻊ اﻟـ‬

. Post Order ‫ ﻃﺮﯾﻘﺔ‬.1

static void PostOrder(Node ptr)


{
if(ptr!=null){
PostOrder(ptr.getLeft());
PostOrder(ptr.getRight());
System.out.print(ptr.element()+" ");
}
}

‫ﺑﺎﻟﻨﻈﺮ إﻟﻰ ﻋﻤﻞ ھﺬه اﻟﻄﺮﯾﻘﺔ ﻧﺠﺪھﺎ‬


‫ﺗﺴﺘﺮﺟﻊ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻤﺴﺘﻮﯾﺎت‬
‫ ﻣﻊ‬،‫ ﺛﻢ اﻟﺘﻲ ﺗﻠﯿﮭﺎ وھﻜﺬا‬، ً‫اﻷﻋﻤﻖ أوﻻ‬
.‫أوﻟﻮﯾﺔ اﻟﺠﮭﺔ اﻟﯿﺴﺮى ﻟﻠﺸﺠﺮة‬

15-36 ‫ﺷﻜﻞ‬

Pre Order ‫ ﻃﺮﯾﻘﺔ‬.2

static void PreOrder(Node ptr)


{
if(ptr!=null){
System.out.print(ptr.element()+" ");
PreOrder(ptr.getLeft());
PreOrder(ptr.getRight());
}
Aldopaee
} @hotmail. co m 532 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬
‫ﯾﻤﻜﻦ إﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺮﺳﻢ وذﻟﻚ ﺑﺮﺳﻢ ﻣﺤﯿﻂ ﺣﻮل اﻟﺸﺠﺮة ﺑﺎدﯾﺔ ﻣﻦ اﻟﺠﺬر ‪ ،‬ﻣﻊ أوﻟﻮﯾﺔ اﻟﺠﮭﺔ‬
‫اﻟﯿﺴﺮى ﻟﻠﺸﺠﺮة‪.‬‬

‫ﺷﻜﻞ ‪15-37‬‬

‫‪ .b‬ﻃﺮﯾﻘﺔ ‪In Order‬‬


‫)‪static void InOrder (Node ptr‬‬
‫{‬
‫{)‪if(ptr!=null‬‬
‫;))(‪InOrder (ptr.getLeft‬‬
‫;))(‪InOrder (ptr.getRight‬‬
‫;)" "‪System.out.print(ptr.element()+‬‬
‫}‬
‫}‬

‫ﯾﻤﻜﻦ إﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺮﺳﻢ وذﻟﻚ ﺑﺈﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ أﻗﺼﻰ اﻟﯿﺴﺎر ‪ ،‬ﺑﻐﺾ اﻟﻨﻈﺮ‬
‫ﻋﻦ اﻟﻤﺴﺘﻮى ‪ ...‬وھﻜﺬا‪.‬‬

‫ﺷﻜﻞ ‪15-38‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪533‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ 1.7.6‬ﺧﻮارزﻣﯿﺔ ﻋﺪ ﻋﻘﺪ اﻷﺷﺠﺎر ‪:‬‬
‫إن ﺣﺠﻢ اﻟﺸﺠﺮة ﯾﺴﺎوي ﻋﺪد اﻟﻌﻘﺪ ﻓﻲ اﻟﺸﺠﺮة اﻟﻔﺮﻋﯿﺔ اﻟﯿﻤﻨﻰ ﻣﻀﺎﻓﺎً إﻟﯿﮭﺎ ﻋﺪد اﻟﻌﻘﺪ ﻓﻲ اﻟﺸﺠﺮة‬
‫اﻟﻔﺮﻋﯿﺔ اﻟﯿﺴﺮى ﻣﻀﺎﻓﺎً إﻟﯿﮭﺎ ﻋﻘﺪة اﻟﺠﺬر‪.‬‬

‫ﻃﺒﺎﻋﺔ أب وأخ اﻟﻌﺪد اﻟﻤﺪﺧﻞ ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪15-39‬‬

‫ﺷﻜﻞ ‪15-39‬‬

‫ﻓﻠﻮ أدﺧﻠﻨﺎ اﻟﺮﻗﻢ ‪ 6‬ﻓﺄﻧﺔ ﺳﻮف ﯾﻄﺒﻊ ﻟﻨﺎ اﻷب وھﻮ ‪ 1‬و ﯾﻄﺒﻊ ﻟﻨﺎ اﻷخ وھﻮ ‪. 2‬‬
‫وھﺬا ﻛﻮد اﻟﺒﺮﻧﺎﻣﺞ‪:‬‬

‫ﺑﺮﻧﺎﻣﺞ ﯾﻄﺒﻊ أخ و أب ﻋﺪد ﻣﺪﺧﻞ ﺑﻮاﺳﻄﺔ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ‪1. //‬‬


‫;‪2. import javax.swing.JOptionPane‬‬
‫{ ‪3. class Chp15_20 extends BTNode‬‬
‫{)][‪4. public static void main(String args‬‬
‫;‪5. BTNode root=null‬‬ ‫‪// root BTNode of the‬‬
‫‪BTree‬‬
‫;‪6. BTNode right=null‬‬ ‫‪// right BTNode of the‬‬
‫‪BTree‬‬
‫;‪7. BTNode left=null‬‬ ‫‪// left BTNode of the‬‬
‫‪BTree‬‬
‫;‪8. BTNode node=null‬‬
‫‪9.‬‬
‫;}‪10. int Arr[]={5,6,2,8,4,10,18,9,0‬‬
‫‪11. //insert BTree‬‬
‫)‪12. for (int i=0;i<Arr.length;i++‬‬
‫{ ‪13.‬‬
‫)‪14. if(root==null‬‬
‫‪15.‬‬ ‫{‬
‫‪16.‬‬ ‫;)]‪root=node=new BTNode(Arr[0‬‬
‫‪17.‬‬ ‫}‬
‫‪18.‬‬ ‫‪else‬‬
‫‪19.‬‬ ‫{‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪534‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


20. node=new BTNode(Arr[i]);
21. BTNode s,p;
22. p=s=root;
23. while(s!=null)
24. {
25. p=s;
26.
if(node.element()>s.element())
27. s=s.getRight();
28. else
29. s=s.getLeft();
30. }
31. if(node.element()>p.element())
32.
p.setRight(node);
33. else
34.
p.setLeft(node);
35.
36. }
37. }
38.
39. //Print DBTree
40. Print(root);
41. System.out.println("\nDBTree");
42.
43. String snum1;
44. int num1;boolean flag=false;
45. snum1 = JOptionPane.showInputDialog("Enter Number:")
;
46. num1 = Integer.parseInt(snum1);
47.
48. if(root.element()==num1)
49. {
50. System.out.println
51. ("The Number Not Prather And
Father");
52. System.exit(0);
53. }
54. //Sertch The Number In Tree
55. BTNode p=null;
56. node=root;
57. boolean f=true;
58. while(f)
59. {
60. p=node;

Aldopaee@hotmail.co m 535 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


61. if(node.element()>num1)
62. node=node.getLeft();
63. else
64. node=node.getRight();
65.
66. if(node==null)break;
67.
68. if(node.element()==num1){
69. f=false;
70. break;
71. }
72. }
73. if(f)
74. {
75. System.out.println("Not Found Number");
76. System.exit(0);
77. }
78.
79. System.out.println(p.element()+" Father");
80.
81. if(p.element()<num1)
82. {
83. if(p.getLeft()!=null)
84.
System.out.println(p.getLeft().element()+" Prather");
85. else
86. System.out.println("The Number Not
Prather");
87. }
88. else
89. {
90. if(p.getRight()!=null)
91.
System.out.println(p.getRight().element()+" Prather");
92. else
93. System.out.println("The Number Not
Prather");
94. }
95. System.exit(0);
96.
97. }
98. static void Print(BTNode node){
99. if(node!=null){
100. System.out.print(node.element()+" ");
101. Print(node.getLeft());
102. Print(node.getRight());

Aldopaee@hotmail.co m 536 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬


‫‪103.‬‬ ‫}‬
‫‪104.‬‬ ‫}‬
‫} ‪105.‬‬

‫‪ 1.7.7‬ﺧﻮارزﻣﯿﺔ ﺣﺴﺎب ﻋﺪد أوراق اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ‬


‫إن اﻟﻮرﻗﺔ ﻓﻲ اﻟﺸﺠﺮة ھﻲ اﻟﻌﻘﺪة اﻟﺘﻲ ﻟﯿﺲ ﻟﮭﺎ أﺑﻨﺎء ﻛﻤﺎ ﻗﻠﻨﺎ ﺳﺎﺑﻘﺎً ‪ ,‬وﻟﺤﺴﺎب ﻋﺪد أوراق اﻟﺸﺠﺮة ‪ ,‬ﻻﺑﺪ‬
‫أوﻻً ﻣﻦ اﻟﺘﺤﻘﻖ ﻣﻦ أن اﻟﻌﻘﺪة ھﻲ ورﻗﺔ أم ﻻ وذﻟﻚ ﺑﮭﺬا اﻟﺸﺮط‬
‫)‪if(node.getLeft()==null&&node.getRight()==null‬‬
‫ﻓﯿﻜﻮن ﺷﻜﻞ اﻟﻮرﻗﺔ ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪.15-40‬‬

‫ﺷﻜﻞ ‪15-40‬‬

‫‪ 1.7.8‬ﺧﻮارزﻣﯿﺔ ﺣﺬف ﻋﻘﺪ أوراق اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ‬


‫إذا ﻛﺎن اﻟﻌﺪد اﻟﻤﺮاد ﺣﺬﻓﮫ ورﻗﺔ ﻻ ﯾﺤﺘﻮي ﻋﻠﻰ أﺑﻨﺎء ﻓﺎﻷﻣﺮ ﺳﮭﻞ وﻻ ﺗﻮﺟﺪ ﻣﺸﻘﺔ‬ ‫‪v‬‬
‫ﻧﺒﺤﺚ ﻋﻦ اﻟﻌﺪد وﻗﺒﻞ اﻟﺘﻨﻘﻞ إﻟﻰ اﻟﯿﻤﯿﻦ أو إﻟﻰ اﻟﺸﻤﺎل ﻧﺨﺰن ﻣﻮﻗﻌﻨﺎ ﻓﻲ ﻣﺘﻐﯿﺮ ﺛﻢ‬ ‫‪.1‬‬
‫ﻧﻨﺘﻘﻞ وھﺬا اﻟﻤﺘﻐﯿﺮ ﺳﯿﻜﻮن ﯾﻤﺸﻲ ورآﻧﺎ ﺑﻤﻘﺪار واﺣﺪ ﻟﻠﺨﻠﻒ إي ﯾﻜﻮن أب اﻟﻤﻮﻗﻊ اﻟﺤﺎﻟﻲ‬
‫‪.‬‬
‫‪ .2‬إﺛﻨﺎء ﻋﻤﻠﯿﮫ اﻟﺘﻨﻘﻞ ﻧﺴﺘﻔﺴﺮ ﻋﻦ ﻧﻮع اﻟﻌﻘﺪة ﻓﺈذا ﻛﺎﻧﺖ ورﻗﺔ أم ﻻ ﺑﮭﺬا اﻟﺸﺮط ‪:‬‬
‫)‪if(node.getLeft()==null&&node.getRight()==null‬‬
‫ﺑﻌﺪ اﻟﻌﺜﻮر ﻋﻠﻰ اﻟﻌﺪد ﺑﻘﻲ ﻋﻠﯿﻨﺎ أن ﻧﺘﺄﻛﺪ ھﻞ ھﻮ ﻋﻠﻰ ﯾﺴﺎر اﻷب أم ﻋﻠﻰ ﯾﻤﯿﻨﮫ ﻓﺄن ﻛﺎن ﻋﻠﻰ‬
‫ﯾﺴﺎره ﻧﺠﻌﻞ ﺣﻘﻞ ‪ left=NULL‬ﻓﻨﻜﻮن ﻋﺰﻟﻨﺎ اﻟﻌﻘﺪة ﻣﻦ اﻟﺸﺠﺮة ﺛﻢ ﻧﺤﺬف اﻟﻌﻘﺪة وﻣﻦ‬
‫اﻟﺸﻜﻞ ‪ 15-41‬ﺳﯿﻮﺿﺢ ذﻟﻚ ‪.‬‬

‫ﺷﻜﻞ ‪15-41‬‬

‫ﻧﺮﯾﺪ ﺣﺬف اﻟﻌﻘﺪة ذات اﻟﻘﯿﻤﺔ ‪ 17‬ﻓﺴﺘﺼﺒﺢ اﻟﺸﺠﺮة ﺑﮭﺬا اﻟﺸﻜﻞ‬


‫‪Aldopaee@ho tmail.co m‬‬ ‫‪537‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬
‫ﺷﻜﻞ ‪15-42‬‬

‫‪ v‬إذا ﻛﺎن اﻟﻌﺪد اﻟﻤﺮاد ﺣﺬﻓﮫ ﯾﺤﺘﻮي ﻋﻠﻰ ﺷﺠﺮة ﻓﺮﻋﯿﺔ ﻣﺜﻞ اﻟﻌﺪد ‪70‬‬

‫ﺷﻜﻞ ‪15-43‬‬

‫‪ .1‬ﻧﺤﺪد ﻣﻮﻗﻊ اﻟﻌﺪد ھﻞ ھﻮ ﻋﻠﻰ ﯾﺴﺎر اﻷب أم ﻋﻠﻰ ﯾﻤﯿﻨﮫ )‪.if(60>70‬‬


‫‪ .2‬ھﻞ اﻟﻌﺪد ﯾﻮﺟﺪ ﻋﻠﻰ ﯾﻤﯿﻨﮫ ﻓﺮﺿﺎُ أﻋﺪاد وﺷﺠﺮة ﻓﺮﻋﯿﺔ ‪if(node-‬‬
‫)‪ >right!=NULL‬ﻓﺈذا ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﺄﻧﻨﺎ ﻧﺮﺑﻂ ﯾﻤﯿﻦ اﻷب ﺑﯿﻤﯿﻦ اﻻﺑﻦ ﻓﻨﻜﻮن ﻓﻲ ھﺬه‬
‫اﻟﺤﺎﻟﺔ ﻋﺰﻟﻨﺎ ‪ 70‬ﺑﻘﻲ ﻋﻠﯿﻨﺎ رﺑﻂ‬
‫أﺟﺰاء اﻻﺑﻦ وھﻮ ﻧﺼﻞ ﻷﺻﻐﺮ ﻗﯿﻤﺔ ﻓﻲ اﻟﻌﻘﺪة ‪ 77‬وﻧﺮﺑﻂ ﯾﺴﺎرھﺎ ﺑﺎﻟﻌﻘﺪ اﻟﺘﻲ ﻛﺎﻧﺖ‬
‫ﻣﺘﺼﻠﺔ ﺑﺎﻟﻌﺪد اﻟﻤﺮاد ﺣﺬﻓﮫ ﻓﺘﺼﯿﺮ اﻟﺸﺠﺮة ﺑﮭﺬا اﻟﺸﻜﻞ ‪.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪538‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪3‬ﺷﻜﻞ ‪15-44‬‬
‫‪ -‬ﺗﻢ ﻧﺤﺬف اﻟﻌﻘﺪة ‪.‬‬
‫ھﺬا إن وﺟﺪت ﻋﻠﻰ ﯾﻤﯿﻦ اﻟﻌﺪد ﻋﻘﺪ وان ﻟﻢ ﺗﻮﺟﺪ ﻧﺮﺑﻂ ﯾﻤﯿﻦ اﻷب ﺑﯿﺴﺎر اﻻﺑﻦ ﻣﺒﺎﺷﺮة‬
‫‪ v‬إذا ﻛﺎن اﻟﻌﺪد اﺻﻐﺮ ﻣﻦ اﻷب ﻧﻔﺲ اﻟﺨﻄﻮات اﻟﺴﺎﺑﻘﺔ ‪.‬‬
‫‪ v‬إذا ﻛﺎن اﻟﻌﺪد ﯾﻮﺟﺪ ﺑﯿﺴﺎره ﺗﻔﺮع ﺗﺮﺑﻂ ﯾﺴﺎر اﻷب ﺑﯿﺴﺎر اﻻﺑﻦ وﻧﺼﻞ ﻷﻛﺒﺮ ﻋﺪد داﺧﻞ‬
‫اﻟﺘﻔﺮع وﻧﺮﺑﻄﮫ ﺑﯿﻤﯿﻦ اﻟﻌﺪد ﻣﺜﻞ اﻟﻌﺪد ‪ 40‬ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ﻓﺘﺼﯿﺮ اﻟﺸﺠﺮة ﺑﮭﺬا اﻟﺸﻜﻞ‬

‫ﺷﻜﻞ ‪15-45‬‬

‫وإﻻ ﻧﺮﺑﻂ ﯾﺴﺎر اﻷب ﺑﯿﻤﯿﻦ اﻻﺑﻦ ‪ ,‬ﺛﻢ ﻧﺤﺬف اﻟﻌﻘﺪة ‪.‬‬

‫‪ v‬ﺑﻘﻲ ﻋﻠﯿﻨﺎ ﺣﺎﻟﺔ وھﻲ أن أراد ﺣﺬف اﻟﺠﺬر ھﻲ ﺑﻌﺾ اﻟﺸﻲء ﻣﺮﺑﻜﺔ إﻻ إﻧﮭﺎ‬
‫ﺑﺴﯿﻄﺔ‬
‫‪ ý‬ﻧﺒﺤﺚ أوﻻ ﻋﻦ اﺻﻐﺮ ﻋﻘﺪة ﻓﻲ اﻟﺠﺬع اﻷﯾﻤﻦ ﻟﻠﺠﺬر وﻧﻄﺒﻖ ﺟﻤﯿﻊ اﻟﺸﺮوط‬
‫اﻟﺘﻲ ذﻛﺮﻧﺎھﺎ ﺳﺎﺑﻘﺎً ‪.‬‬

‫‪ ý‬وﻧﺄﺧﺬ ﻗﯿﻤﺔ اﻟﻌﻘﺪة وﻧﺴﺎوي ﻗﯿﻤﺔ اﻟﺠﺬر ﺑﮭﺎ ﺛﻢ ﻧﺤﺬف اﻟﻌﻘﺪة اﻟﺘﻲ ﺑﺤﺜﻨﺎ ﻋﻨﮭﺎ‬
‫وﺑﮭﺬا ﻧﻜﻮن أﺣﻠﻠﻨﺎ ﻗﯿﻤﺔ اﻟﺠﺬر إي ﺑﻤﺜﺎﺑﺔ ﺣﺬﻓﻨﺎ اﻟﺠﺬر وھﺬا اﻟﺸﻜﻞ ﺳﯿﻨﺘﺞ ‪.‬‬

‫ﺷﻜﻞ ‪15-46‬‬

‫‪ ý‬وإن ﻟﻢ ﯾﻮﺟﺪ ﺗﻔﺮع ﯾﻤﯿﻦ ﻟﻠﺠﺬر ﻓﺈﻧﻨﺎ ﻧﻨﻘﻞ اﻟﺠﺬر ﺑﻤﻘﺪار واﺣﺪ ﻟﻠﯿﺴﺎر وﻧﺤﺬف‬
‫اﻟﻌﻘﺪة ‪.‬‬
‫وھﺬه ﻛﻞ اﻟﺨﻄﻮات ﯾﻤﻜﻦ دﻣﺠﮭﺎ ﺑﺒﺮﻧﺎﻣﺞ ﺷﺎﻣﻞ ﯾﺴﺘﻄﯿﻊ أن ﯾﺤﺬف ﻣﻦ إي ﻣﻜﺎن ‪.‬‬

‫إﻟﻰ ھﻨﺎ ﯾﻨﺘﮭﻲ ﺣﺪﯾﺜﻨﺎ ﻋﻦ اﻷﺷﺠﺎر ‪.‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪539‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺸﺒﻜﯿﺔ )اﻟﻤﺘﺮاﺑﻄﺔ(‬ ‫‪1.8‬‬

‫وﺗﻌﻨﻰ ‪ Plex‬اﻟﺸﺒﻜﺎت )اﻟﺮﺳﻮم ‪ ( Graphs‬ﻛﻤﺎ ﺗﺴﻤﻰ ﺑﯿﺎﻧﺎت ﻣﻀﻔﺮة‪ .‬إذا اﺗﺼﻞ أي ﻋﻨﺼﺮ ﺑﯿﺎن ﻓﻲ‬
‫اﻟﻤﺴﺘﻮى اﻷدﻧﻰ ﻣﻦ ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺸﺠﺮﯾﺔ ﺑﺄﻛﺜﺮ ﻣﻦ ﻋﻨﺼﺮ ﻓﻲ ﻣﺴﺘﻮى أﻋﻠﻰ ﻓﯿﻄﻠﻖ ﻋﻠﯿﮫ اﺳﻢ ھﯿﺎﻛﻞ‬
‫ﺑﯿﺎﻧﺎت ﺷﺒﻜﯿﺔ‪ ،‬ﺣﺘﻰ‬

‫ﺷﺠﺮة اﻟﻌﺎﺋﻠﺔ ﻣﻦ اﻟﻨﻮع اﻟﺸﺒﻜﻲ‬


‫وﻟﯿﺴﺖ ﻣﻦ اﻟﻨﻮع اﻟﮭﺮﻣﻲ‬
‫ﻓﺎﻟﺸﻜﻞ‪ 15- 46‬ﯾﻮﺿﺢ اﻟﻌﻼﻗﺎت‬
‫اﻟﮭﺮﻣﯿﺔ ﻷﺳﺮة ﺗﺘﻜﻮن ﻣﻦ ﺟﺪ‪،‬‬
‫أﺑﻨﺎء‪ ،‬أﺣﻔﺎد‪ ،‬ﺷﻜﻞ ﻏﯿﺮ ﺣﻘﯿﻘﻲ‬
‫ﻷﻧﻨﺎ أھﻤﻠﻨﺎ اﻷﻣﮭﺎت ﻣﻨﺬ زﻣﻦ‬
‫ﺑﻌﯿﺪ ﻟﻜﻦ اﻟﺸﻜﻞ ‪ 15-47‬وھﻲ‬
‫ﻋﻼﻗﺔ ﺗﻮﺿﺤﯿﮭﺎ أﻛﺜﺮ ﻛﻤﺎ ﻓﻲ‬
‫ﺷﻜﻞ ‪ 15-48‬و اﻟﺸﻜﻞ ‪15-49‬‬
‫ﯾﺒﯿﻦ اﻟﺘﻜﺎﻓﺊ اﻟﺸﺠﺮي ﻟﻤﺜﺎل ﻣﺎ‪.‬‬

‫اﻟﺸﻜﻞ ‪15-46‬‬

‫اﻟﺸﻜﻞ ‪15-47‬‬

‫اﻟﺸﻜﻞ ‪15-48‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪540‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺗﻜﺎﻓﺊ اﻟﺸﻜﻞ اﻟﺸﺠﺮي اﻟﺘﺎﻟﻲ‬

‫اﻟﺸﻜﻞ ‪15-49‬‬

‫وﺗﻨﻘﺴﻢ ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺸﺠﺮﯾﺔ إﻟﻰ ﻧﻮﻋﯿﻦ‪ ،‬ﺑﺴﯿﻂ وﻣﻌﻘﺪ‪ ،‬ﻓﻔﻲ اﻟﻨﻮع اﻟﺒﺴﯿﻂ ﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻣﺴﺘﻮﯾﺎت‬
‫اﻟﮭﯿﻜﻞ اﻟﺒﻨﺎﺋﻲ ﻟﻠﺒﯿﺎﻧﺎت أﻣﺎ اﻟﻨﻮع اﻟﻤﻌﻘﺪ ﻓﯿﺼﻌﺐ ذﻟﻚ ﻛﺜﯿﺮاً ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ ‪. 15-50‬‬

‫اﻟﺸﻜﻞ ‪15-50‬‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪541‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫ﺗﻤﺎرﯾﻦ اﻟﻔﺼﻞ‬
‫‪ .1‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺎﺳﺘﺨﺮاج اﻷﻋﺪاد اﻟﻤﺘﻜﺮرة ﻣﻦ اﻟﻤﻜﺪس إي ﺑﺤﺬف اﻷﻋﺪاد اﻟﻤﺘﻜﺮرة ؟‬
‫‪ .2‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻌﻤﻠﯿﺔ ﺗﺮﺗﯿﺐ ﻣﻜﺪس ؟‬
‫‪ .3‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻌﻤﻠﯿﺔ إزاﺣﺔ ﯾﻤﯿﻦ وﺷﻤﺎل ﻟﻸﻋﺪاد ﺣﺴﺐ اﻹزاﺣﺔ اﻟﻤﻄﻠﻮﺑﺔ ﻣﻦ اﻟﻤﺴﺘﺨﺪم؟‬
‫‪ .4‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺪﻣﺞ ﻣﻜﺪﺳﯿﻦ وﯾﻌﻤﻞ ﺟﻤﯿﻊ اﻟﻌﻤﻠﯿﺎت اﻟﻤﻨﻄﻘﯿﺔ )ﺗﻘﺎﻃﻊ‪ ,‬اﺗﺤﺎد‪ ,‬ﻃﺮح ( ؟‬
‫‪ .5‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﺤﻮﯾﻞ اﻷﻋﺪاد اﻟﺰوﺟﯿﺔ ﺑﻤﻜﺪس واﻟﻔﺮدﯾﺔ ﺑﻤﻜﺪس أﺧﺮ ؟‬
‫‪ .6‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺤﺬف اﻷﻋﺪاد اﻷوﻟﯿﺔ ﻣﻦ اﻟﻤﻜﺪس ؟‬
‫‪ .7‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻌﻜﺲ ﻃﺎﺑﻮر ؟‬
‫‪ .8‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻔﺼﻞ ﻃﺎﺑﻮر ﻣﻦ ﻣﻜﺎن ﻣﺤﺪد ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم ؟‬
‫‪ .9‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺤﺬف اﻟﻤﻮاﻗﻊ اﻟﺰوﺟﯿﺔ ﺑﺎﻟﻄﺎﺑﻮر ؟‬
‫‪ .10‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﺪوﯾﺮ ﻃﺎﺑﻮر ﺑﺎﻻﺗﺠﺎھﯿﻦ ﯾﻤﻦ وﺷﻤﺎل ؟‬
‫‪ .11‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻨﺴﺦ ﻣﻜﺪس إﻟﻰ ﻃﺎﺑﻮر ؟‪ //‬ﻣﻼﺣﻈﺔ ﯾﻮﺟﺪ ﻓﺮق ﺑﯿﻦ اﻟﻨﺴﺦ واﻟﻘﺺ‪//‬‬
‫‪ .12‬ﻟﺪﯾﻚ ﻃﺎﺑﻮر ﺑﺔ أﺷﺨﺎص وھﻢ ﻓﻲ اﻟﻤﺴﺘﺸﻔﻰ وﻣﺮﻗﻤﯿﻦ ﻣﻦ ‪ 1‬إﻟﻰ ‪ 5‬وھﻢ ﻓﻲ ﺻﻒ اﻵﻧﺘﻈﺎر‬
‫ﻓﺠﺄة اﻟﺸﺨﺺ رﻗﻢ ‪ 3‬أﺻﯿﺐ ﺑﻮﺟﻊ ﻗﻮي وﻻ ﯾﺴﺘﺤﻤﻞ اﻵﻧﺘﻈﺎر ﻓﺄﻣﺮ اﻟﻄﺒﯿﺐ ﺑﺈدﺧﺎﻟﮫ ﻷﻧﺔ‬
‫ﺣﺎﻟﺔ ﻃﺎرﺋﺔ ﻓﻜﯿﻒ ﺗﻌﺎﻟﺞ ھﺬه اﻟﻤﺸﻜﻠﺔ ﺑﺘﻄﺒﯿﻖ إﻟﯿﺔ وﺧﻮارزﻣﯿﺔ اﻟﻄﺎﺑﻮر اﻷﺗﻲ أوﻻً ﻟﻠﻄﺒﯿﺐ‬
‫اﻟﺪاﺧﻞ أوﻻً ؟‬
‫‪ .13‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﺮﺗﯿﺐ ﻗﺎﺋﻤﺔ أﺣﺎدﯾﺔ ؟‬
‫‪ .14‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻘﻠﺐ أي ﻋﻜﺲ ﻗﺎﺋﻤﺔ أﺣﺎدﯾﺔ ؟‬
‫‪ .15‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻘﻠﺐ اﻟﻤﻮاﻗﻊ اﻟﺰوﺟﯿﺔ ﻣﻊ اﻟﻔﺮدﯾﺔ أي ‪ swap‬؟‬
‫‪ .16‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺤﺬف اﻟﻤﻮاﻗﻊ اﻟﺰوﺟﯿﺔ ﺑﺎﻟﻘﺎﺋﻤﺔ اﻷﺣﺎدﯾﺔ ؟‬
‫‪ .17‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺪﻣﺞ ﻗﺎﺋﻤﺘﯿﻦ أﺣﺎدﯾﺘﯿﻦ وﻋﻤﻞ ﺟﻤﯿﻊ اﻟﻌﻼﻗﺎت اﻟﺮﯾﺎﺿﯿﺔ )ﺗﻘﺎﻃﻊ ‪ ,‬اﺗﺤﺎد ‪,‬‬
‫ﻃﺮح ( ؟‬
‫‪ .18‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻄﺒﺎﻋﺔ ﺛﺎﻟﺚ اﻛﺒﺮ ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﺎﺋﻤﺔ ؟‬
‫‪ .19‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﺮﺗﯿﺐ ﻃﺎﺑﻮر ﺑﻮاﺳﻄﺔ اﻟﻘﺎﺋﻤﺔ اﻷﺣﺎدﯾﺔ ؟‬
‫‪ .20‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ اﻟﺪوال ﯾﻘﻮم ﺑﻄﺒﺎﻋﺔ ﺛﺎﻟﺚ ﻣﺠﻤﻮع اﻛﺒﺮ اﻟﻘﯿﻢ وﻃﺒﺎﻋﺔ اﻷﻋﺪاد ﺑﺎﻟﻘﺎﺋﻤﺔ‬
‫اﻷﺣﺎدﯾﺔ ﻣﺜﻞ‬
‫‪ (1,2,7,9,5,6) .21‬ﻓﯿﻄﺒﻊ ‪ 21‬واﻷﻋﺪاد ‪ 7,9,5‬؟‬
‫‪ .22‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﻤﺜﯿﻞ ﺑﯿﺎﻧﺎت اﻟﻘﺎﺋﻤﺔ أﻷﺣﺎدﯾﺔ ﻓﻲ اﻟﺬاﻛﺮة ﺑﮭﺬا اﻟﺸﻜﻞ ؟‬
‫‪ .23‬ھﺬا اﻟﺴﺆال ﻟﻠﻘﺎرئ اﻟﻨﺒﯿﻞ ‪ -----‬ﺑﻮاﺳﻄﺔ اﻟﻘﺎﺋﻤﺔ اﻷﺣﺎدﯾﺔ اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻌﻤﻞ ﻋﻤﻞ اﻟﻘﺎﺋﻤﺔ‬
‫اﻟﺜﻨﺎﺋﯿﺔ إي ﯾﻜﻮن اﻟﮭﯿﻜﻞ اﻟﻌﺎم ﻟﻘﺎﺋﻤﮫ ﻣﻜﻮن ﻣﻦ ﻣﺘﻐﯿﺮﯾﻦ ﻓﻘﻂ إي ‪ next , int‬ﻻ ﯾﻮﺟﺪ ﻣﺆﺷﺮ‬
‫ﯾﺆﺷﺮ ﻟﻠﺨﻠﻒ ﻣﺜﻞ ‪ last‬ﻓﯿﺴﺘﻄﯿﻊ اﻟﻌﻮدة ﻟﻠﺨﻠﻒ ﻣﺮة وﻣﺮﺗﯿﻦ ‪ ......‬اﻟﺦ ؟‬
‫‪ .24‬ﺑﻮاﺳﻄﺔ اﻟﻘﻮاﺋﻢ أﻟﺜﻨﺎﺋﯿﮫ اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺣﺬف اﻟﻤﻮاﻗﻊ اﻷوﻟﯿﺔ ﻣﻦ ھﺬه اﻟﻘﺎﺋﻤﺔ وﻣﻌﺮوف إن‬
‫اﻷﻋﺪاد اﻷوﻟﯿﺔ )‪ (..…,1,2,3,5,7,9,11,13‬؟‬
‫‪ .25‬ﺑﻮاﺳﻄﺔ أﻟﻌﻮدﯾﮫ أو اﻟﺘﻜﺮار اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻌﻤﻞ ﻋﻠﻰ ﻃﺒﺎﻋﺔ ﻋﺪد اﻟﻌﻘﺪ اﻟﺜﻨﺎﺋﯿﺔ ؟‬
‫‪ .26‬ﺟﻤﯿﻊ اﻷﺳﺌﻠﺔ اﻟﺘﻲ ذﻛﺮت ﻓﻲ اﻟﻔﺼﻮل اﻟﺴﺎﺑﻘﺔ ﯾﻨﺒﻐﻲ ﻋﻠﻰ اﻟﻘﺎرئ ﺗﻄﺒﯿﻘﮭﺎ ﺑﺎﻟﻘﻮاﺋﻢ اﻟﺜﻨﺎﺋﯿﺔ ؟‬
‫‪ .27‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﻤﺜﯿﻞ ﺑﯿﺎﻧﺎت ھﺬا اﻟﺸﻜﻞ ﻓﻲ اﻟﺬاﻛﺮة ﻋﻢ ﻣﺮاﻋﺎة ﻧﻮع اﻟﻘﻮاﺋﻢ ؟‬
‫‪ .28‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ ﯾﻘﻮم ﺑﻄﺒﺎﻋﺔ اﻟﺸﺠﺮة ﺑﺪون اﺳﺘﺨﺪام اﻻﺳﺘﺪﻋﺎء اﻟﺬاﺗﻲ‬
‫؟‬
‫‪ .29‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ ﯾﻄﺒﻊ ﻣﺠﻤﻮع ﻣﺎ ﺗﺤﺖ اﻟﻌﺪد اﻟﻤﺪﺧﻞ وﻛﻢ أﻋﺪاد اﻛﺒﺮ‬
‫ﻣﻨﺔ وﻛﻢ أﻋﺪاد اﺻﻐﺮ ﻣﻨﺔ ؟‬
‫‪ .30‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ ﯾﻘﻮم ﺑﻄﺒﺎﻋﺔ اﻟﺸﺠﺮة ﻣﺮﺗﺒﺔ ﺗﺼﺎﻋﺪي وﻣﺮة ﺗﻨﺎزﻟﻲ ؟‬
‫‪ .31‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻮاﺳﻄﺔ اﻷﺷﺠﺎر اﻟﺜﻨﺎﺋﯿﺔ ﯾﻄﺒﻊ ﻛﻢ ﻋﺪد اﻵﺑﺎء اﻟﺬﯾﻦ ﻟﺪﯾﮭﻢ أﺑﻨﺎء اﺛﻨﺎن وﻛﻢ اﻟﺬﯾﻦ‬
‫ﻟﺪﯾﮭﻢ اﺑﻦ واﺣﺪ وﻛﻢ اﻟﺬﯾﻦ ﻟﯿﺲ ﻟﮭﻢ أﺑﻨﺎء ؟‬
‫‪ .32‬ﻟﯿﻜﻦ ﻟﺪﯾﻚ اﻟﺒﯿﺎﻧﺎت اﻟﺘﺎﻟﯿﺔ )‪(10,3,43,62, 5,1,40‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪542‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫‪ .33‬اﻟﻤﻄﻠﻮب ﻣﻨﻚ ﻃﺒﺎﻋﮫ ھﺬه اﻟﺸﺠﺮة أو إي ﺷﺠﺮة ﺑﺎﻟﺸﻜﻞ اﻷﺗﻲ‬

‫‪ .34‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﺤﻮﯾﻞ ﺷﺠﺮة ﺛﻨﺎﺋﯿﺔ إﻟﻰ ﻃﺎﺑﻮر ﺑﺸﺮط أن ﺗﺪﺧﻞ اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ ﻟﻠﻄﺎﺑﻮر‬
‫وﺑﺪن اﺳﺘﺨﺪام إي ﺧﻮارزﻣﯿﺔ ﺗﺮﺗﯿﺐ ؟‬
‫‪ .35‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﺤﻮﯾﻞ ﻃﺎﺑﻮر إﻟﻰ ﺷﺠﺮة ﺛﻨﺎﺋﯿﺔ ﻋﻠﻤﺎُ أن اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﻄﺎﺑﻮر ﻣﺘﻜﺮرة‬
‫واﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ ﻻ ﺗﻘﺒﻞ اﻟﻘﯿﻢ اﻟﻤﺘﻜﺮرة ؟‬
‫‪ .36‬ﻟﺪﯾﻚ اﻟﻜﻠﻤﺎت اﻟﺘﺎﻟﯿﺔ ) ‪SAMI , AMMAR , AHMED , BASSAM , SANAD ,‬‬
‫)‪ (MOSTAFA , READ , ALI , KAMAL ,AMIN‬اﻟﻤﻄﻠﻮب ﺗﻜﻮﯾﻦ ﺷﺠﺮة ﺛﻨﺎﺋﯿﺔ‬
‫ﻣﺜﻞ اﻟﻤﺜﺎل اﻟﺬي ﺗﻜﻠﻤﻨﺎ ﻋﻠﯿﺔ ﺳﺎﺑﻘﺎُ ؟‬
‫‪ .37‬اﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺤﺬف اﻷﻋﺪاد اﻷوﻟﯿﺔ ﻣﻦ اﻟﺸﺠﺮة اﻟﺜﻨﺎﺋﯿﺔ ؟‬

‫‪Aldopaee@ho tmail.co m‬‬ ‫‪543‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


‫أھﻢ ﻣﺮاﺟﻊ اﻟﻜﺘﺎب ﺑﺎﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ واﻷﺟﻨﺒﯿﺔ‬ ‫‪2‬‬

‫اﻟﻤﺮاﺟﻊ اﻟﻌﺮﺑﯿﺔ‬

‫‪ .1‬م‪ .‬ﻋﻤﺎر اﻟﺪﺑﻌﻲ ‪ ,(2005),‬ھﯿﺎﻛﻞ اﻟﺒﯿﺎﻧﺎت ﺑﻠﻐﺔ ‪. http:\\www.cb4a.com ,C++‬‬


‫‪ .2‬م‪ .‬ﻋﻤﺎر اﻟﺪﺑﻌﻲ ‪ , (2007),‬اﻟﺒﺮﻣﺠﺔ اﻟﻤﻮﺟﮭﺔ ﺑﻠﻐﺔ ‪. http:\\www.cb4a.com ,Java‬‬
‫‪ .3‬م‪ .‬ﻋﻤﺎر اﻟﺪﺑﻌﻲ ‪ ,(2006),‬ﻣﺌﺔ ﺳﺆال وﺳﺆال ﻹﺗﻘﺎن اﻟﺒﺮﻣﺠﺔ‪http:\\www.cb4a.com ,‬‬
‫‪.‬‬
‫‪ .4‬م‪ .‬ﻋﻤﺎر اﻟﺪﺑﻌﻲ ‪ ,(2006),‬أﺻﻮل اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ‪. http:\\www.cb4a.com , C++‬‬
‫‪ .5‬د‪ .‬ﻣﺮوان ﻣﺼﻄﻔﻲ ﻧﺎﻋﮫ )‪, (1997‬ﻣﺒﺎدئ اﻟﺤﺎﺳﻮب و اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ ﺑﯿﺴﻚ‪.‬‬
‫‪ .6‬ﺗﺄﻟﯿﻒ د‪ .‬ﻣﺤﻤﺪ ﻛﺎﻣﻞ ‪,‬د‪ .‬ﺣﺴﻦ ﻃﺎھﺮ‪ ,(1998) ,‬ﻣﻘﺪﻣﺔ ﻓﻲ ﻋﻠﻢ اﻟﺤﺎﺳﻮب ‪ ,‬ﺟﻤﮭﻮرﯾﺔ ﻣﺼﺮ‬
‫اﻟﻌﺮﺑﯿﺔ ‪,‬دار اﻟﻨﮭﻈﺔ ‪.‬‬
‫‪ .7‬م‪ .‬ﯾﺎﺳﺮ اﻟﻌﻘﺎد ‪ ,(1997),‬ﺗﺮﺑﻮ ﺑﺎﺳﻜﺎل ‪ ,7‬ﺳﻮرﯾﺔ ‪ ,‬دار ﺷﻌﺎع‪.‬‬
‫‪ .8‬د‪.‬ﻣﻈﮭﺮ ﻃﺎﯾﻞ‪ ,(1986) ,‬ﻧﻈﻢ أﻋﺪاد اﻟﻤﯿﻜﺮوﻛﻤﺒﯿﻮﺗﺮ ﺗﺄﻟﯿﻒ‪.‬‬
‫‪ .9‬م‪ .‬ﻋﺎﻣﺮ ﺑﻮاب )‪, (1989‬ﻣﻘﺪﻣﺔ إﻟﻰ ﻟﻐﺔ ‪ ,C‬ﻟﺒﻨﺎن‪ ,‬اﻟﺪار اﻟﻌﺮﺑﯿﺔ ﻟﻠﻌﻠﻮم‪.‬‬
‫‪ .10‬ﺟﻼل ﺧﺮﺳﺎﻧﺔ ‪ ,(2006),‬ﺗﻌﻠﻢ ‪ Java‬ﺑﺎﺳﺘﺨﺪام ﺑﯿﺌﺔ ﺗﻄﻮﯾﺮ ‪, JBulider‬ﺳﻮرﯾﺔ ‪ ,‬دار‬
‫ﺷﻌﺎع‪.‬‬
‫‪ .11‬د‪ .‬ﻣﺤﻤﺪ اﻟﻔﯿﻮﻣﻲ‪ ,(1986) ,‬ﺑﺮﻣﺠﺔ اﻟﺤﺎﺳﺒﺎت اﻻﻟﻜﺘﺮوﻧﯿﺔ ﺑﻠﻐﺔ ﻓﻮﺗﺮان‪ ,‬اﻟﻜﻮﯾﺖ ‪ ,‬ﻣﺆﺳﺴﺔ‬
‫اﻟﺨﻮارزﻣﻲ‪.‬‬
‫‪ .12‬ﻋﺰب ﻣﺤﻤﺪ ﻋﺰب‪ (2002) ,‬اﻟﻄﺮﯾﻖ إﻟﻰ اﺣﺘﺮاف ‪ ,.Java‬ﻣﺼﺮ ‪ ,‬داراﻷھﺮام‪.‬‬
‫‪ .13‬د‪ .‬ﺻﻼح اﻟﺪوه ﺟﻲ ‪ ,(2004) ,‬ﻛﯿﻒ ﺗﺒﺮﻣﺞ ﺑﻠﻐﺔ ‪, C++‬ﺳﻮرﯾﺔ ‪ ,‬دار ﺷﻌﺎع‪.‬‬
‫اﻟﻤﺆﺳﺴﺔ اﻟﻌﺎﻣﺔ ﻟﺘﻌﻠﯿﻢ اﻟﻔﻨﻲ واﻟﺘﺪرﯾﺐ اﻟﻤﮭﻨﻲ‪ ,‬اﻟﻤﻤﻠﻜﺔ اﻟﻌﺮﺑﯿﺔ اﻟﺴﻌﻮدﯾﺔ‪.‬‬ ‫‪.14‬‬
‫‪ .15‬ﺧﺎﻟﺪ ﺷﻘﺮوﻧﻲ‪ ,(2006) ,‬اﻟﺘﺤﻠﯿﻞ و اﻟﺘﺼﻤﯿﻢ ﺑﺎﻟﻤﻨﺤﻰ ﻟﻠﻜﺎﺋﻦ ﺑﺎﺳﺘﺨﺪام ‪.UML‬‬
‫‪ .16‬م‪ .‬ﺣﯿﺎن اﻟﺴﯿﺪ)‪ ,(1996‬ﺑﺮﻣﺠﺔ اﻟﺤﻮاﯾﺐ اﻟﺸﺨﺼﯿﺔ ﺑﻠﻐﺔ اﻟﺘﺠﻤﯿﻊ ‪ ,‬ﺳﻮرﯾﺔ‪ ,‬دار ﺷﻌﺎع‪.‬‬

‫ﻣﻮاﻗﻊ اﻟﻮﯾﺐ اﻟﻌﺮﺑﯿﺔ‬

‫‪.http://www.c4arab.com‬‬ ‫اﻟﻤﻮﺳﻮﻋﺔ اﻟﻌﺮﺑﯿﺔ‬ ‫‪.1‬‬


‫‪.http://www.javagirl.com‬‬ ‫ﺑﻨﺖ اﻟﺠﺎﻓﺎ‬ ‫‪.2‬‬
‫‪.http://www.deyaa.org‬‬ ‫اﻟﻤﺪرس اﻟﻌﺮﺑﻲ‬ ‫‪.3‬‬
‫ﻣﻨﺘﺪﯾﺎت اﻟﻔﺮﯾﻖ اﻟﻌﺮﺑﻲ ﻟﻠﺒﺮﻣﺠﺔ‬ ‫‪.4‬‬
‫‪.http://www.arabteam2000-forum.com‬‬

‫اﻟﻤﺮاﺟﻊ اﻻﻧﺠﻠﯿﺰﯾﺔ‬

‫‪1- Introduction to Computers Fourth Edition Peter Norton's‬‬


‫‪(2000).‬‬
‫‪2- Introduction to Computer Science.‬‬
‫‪3- Digital Design Second Edition M.Morris Mano (1991).‬‬
‫‪4- A Book on C Third Edition Al Kelley / Ira Pohl (1995).‬‬
‫‪5- Advanced Programming in Pascal with Data Structures‬‬
‫‪Larry Nyhoff / Sanford Leestma (1989).‬‬
‫)‪6- Osborne - Java 2--Complete Reference (5th Ed 2002‬‬
‫‪7- Thinking in Java, 2nd edition, Revision 12.‬‬
‫‪8- The Java Tutorial, Third Edition.‬‬

‫‪Aldopaee@hotmail.co m‬‬ ‫‪544‬‬ ‫اﻟﻤﮭﻨﺪس‪/‬ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬


9- The Java Tutorial Continued The Rest of the JDK.
10- The JFC Swing Tutorial A Guide to Constructing GUIs.
11- Java™ How to Program, Sixth Edition(2004).
12- Java™ Language Specification, Third Edition,
The(2005).
13- Object-Oriented Data Structures using Java(2001).
14- Data Structures and Algorithms in Java(2005).
15- Introduction to Computer Science using Java(2003).
16- The Java Language Specification Third Edition(2005).
17- Introduction to Programming Using Java Version (4.1,
June 2004).

‫ﻣﻮاﻗﻊ اﻟﻮﯾﺐ اﻻﻧﺠﻠﯿﺰﯾﺔ‬

1- http://www.java.sun.com.
2- http://www.rlg.org/visguides/visguide3.html.
3- http://www.data-compression.com/lossless.html.
4- http://splash.javasoft.com/jdbc.
5- http://www.scism.sbu.ac.uk/jfl/index.html.

Aldopaee@hotmail.co m 545 ‫ﻋﻤﺎر ﻣﺤﻤﺪ ﻋﯿﺴﻰ اﻟﺪﺑﻌﻲ‬/‫اﻟﻤﮭﻨﺪس‬

You might also like