Windows Programming Asst. Prof. Ali Kadhum Idrees

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

‫‪Windows Programming‬‬ ‫‪Asst. Prof.

Ali Kadhum Idrees‬‬

‫مالحظة‬
‫يتم في الجانب العملي تعلُم برمجة النوافذ باستخدام فيجوال بيسك ‪٢٠١٠‬‬
‫)‪ (Windows programming using visual basic 2010‬حيث سيتم تعلُم‬
‫اساسيات ھذه المادة في المختبر باالضافة الى استخدام ھذه االساسيات في برمجة‬
‫الخوارزميات التي تُأخذ في الجانب النظري من كورس تصميم وتحليل‬
‫الخوارزميات‪.‬‬
‫المصادر‪:‬‬
‫‪1‐ Mastering Microso Visual Basic 2010‬‬
‫‪2‐ Mastering Microsoft Visual Basic.Net‬‬

‫مترجم بواسطة محمد حمدي غانم‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪1‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫أﻫم اﻻﺳﺗﺛﻧﺎءات ‪Exceptions‬‬


‫ّ‬
‫ﺑﺄﻫﻣﻬـﺎ‪ ،‬وﻫـﻲ ﺑﻌـض ﺗﻠـك اﻟﻣوﺟـودة ﻓـﻲ ﻓﺿـﺎء‬
‫ﻓﻲ ﻫذا اﻟﻔﺻﻝ اﻟﻣﻠﺣق‪ ،‬ﺳﻧﺷرح أﻫ ّـم أﻧـواع اﻻﺳـﺗﺛﻧﺎءات‪ ،‬وﺳـﻧﻛﺗﻔﻲ ّ‬
‫اﻻﺳم ‪..System‬‬
‫ﺧﻠﻳﺔ اﻻﺳﺗﺛﻧﺎء ‪Exception Class‬‬
‫ّ‬
‫ﺧﻠﻳﺔ اﻻﺳﺗﺛﻧﺎء ‪:Exception Class‬‬
‫اﺳﺗﺧدام ّ‬
‫أن اﻻﺳـ ــﺗﺛﻧﺎء ﻣـ ــن اﻟﻧـ ــوع‬
‫ﺧﻠﻳـ ــﺔ اﻻﺳـ ــﺗﺛﻧﺎءات اﻟرﺋﻳﺳـ ـ ّـﻳﺔ ‪ ..Exception Class‬ﺑﻣﻌﻧـ ــﻰ ّ‬
‫ﺗـ ــرث ﻛ ـ ـ ّﻝ اﻻﺳـ ــﺗﺛﻧﺎءات ّ‬
‫أي ﺧطــﺈ ﻓــﻲ ﺗطﺑﻳﻘــك ﻣﻬﻣــﺎ ﻛــﺎن ﻧوﻋــﻪ‪ .‬إذن ﻓــﺑم ﺗﻔﻳــدﻧﺎ ﻛـ ّﻝ ﻫــذﻩ اﻻﺳــﺗﺛﻧﺎءات اﻟﺗــﻲ‬
‫‪ Exception‬ﻳﻧطﻠــق ﻟــو ﺣــدث ّ‬
‫ﺗﻧظﻳﻣﻳﺔ‪ ،‬ﺣﺗّﻰ ﺗﺣﺻﻝ ﻋﻠـﻰ درﺟـﺔ أﻛﺑـر ﻣـن اﻟدﻗّـﺔ ﻋﻧـد ﻣﻌﺎﻟﺟـﺔ اﻟﺧطـﺈ‪..‬‬
‫ّ‬ ‫ﻋﻣﻠﻳﺔ‬
‫ﺳﻧﺷرﺣﻬﺎ ﻫﺎ ﻫﻧﺎ؟ ﻳﻣﻛﻧك اﻋﺗﺑﺎرﻫﺎ ّ‬
‫اﻧظر ﻟﻠﻣﺛﺎﻝ اﻟﺗﺎﻟﻲ‪:‬‬
‫‪Try‬‬
‫‪…………….‬‬
‫وﻳﻣﻛﻧك اﺳﺗﺧدام اﻟﺟﻣﻠﺔ اﻟﺗﺎﻟﻳﺔ ﻟﻣﻐﺎدرة ﻣﻘطﻊ ﻣﻌﺎﻟﺟﺔ اﻻﺳﺗﺛﻧﺎء '‬
‫‪Exit Try‬‬
‫‪Catch Exc As DivideByZeroException‬‬
‫‪…………….‬‬
‫‪Catch Exc As ArithmeticException‬‬
‫‪…………….‬‬
‫‪Catch Exc As SystemException‬‬
‫‪…………….‬‬
‫أي ﺷرط ﻳﻧﺎﺳﺑك ‪Catch When‬‬
‫‪…………….‬‬
‫‪Catch Exc As Exception‬‬
‫‪…………….‬‬
‫‪Finally‬‬
‫‪…………….‬‬
‫‪End Try‬‬
‫إن‬
‫أن ﻫذا اﻟﻛود ﻳﺣﺎوﻝ ﻣﻌﺎﻟﺟﺔ اﻻﺳﺗﺛﻧﺎء اﻟﻧﺎﺗﺞ ﻋن اﻟﻘﺳﻣﺔ ﻋﻠـﻰ ﺻـﻔر ‪ّ ..DivideByZeroException‬‬ ‫ﻻﺣظ ّ‬
‫اﻟﻌﻣﻠﻳـﺎت‬
‫ّ‬ ‫اﻟﺧﻠﻳﺔ ‪ ،ArithmeticException‬اﻟﺗـﻲ ﺗﻣﺛّـﻝ ﺟﻣﻳـﻊ اﻻﺳـﺗﺛﻧﺎءات اﻟﻧﺎﺗﺟـﺔ ﻋـن‬ ‫ﻣﺷﺗق ﻣن ّ‬‫ّ‬ ‫ﻫذا اﻻﺳﺗﺛﻧﺎء‬
‫ـﺗﺗم ﻣﻌﺎﻟﺟﺗــﻪ ﻓــﻲ ﻣﻘطــﻊ‬
‫ـﺎﺑﻲ آﺧــر‪ ،‬ﻓﺳـ ّ‬
‫ـﺎﺑﻳﺔ‪ ..‬ﻓــﺈذا ﻟــم ﻳﺣــدث اﺳــﺗﺛﻧﺎء اﻟﻘﺳــﻣﺔ ﻋﻠــﻰ ﺻــﻔر‪ ،‬وﺣــدث اﺳــﺗﺛﻧﺎء ﺣﺳـ ّ‬
‫اﻟﺣﺳـ ّ‬
‫ـﺈن اﻟﻛــود‬
‫ـﺎﺑﻲ‪ ،‬وﺣــدث اﺳــﺗﺛﻧﺎء ﻓــﻲ اﻟﻧظــﺎم‪ ،‬ﻓـ ّ‬
‫اﻻﺳــﺗﺛﻧﺎء ‪ .ArithmeticException‬ﻓــﺈذا ﻟــم ﻳﺣــدث اﺳــﺗﺛﻧﺎء ﺣﺳـ ّ‬
‫ـﺎﺑﻳﺔ(‪ .‬وﻳﻣﻛﻧــك اﺳــﺗﺧدام ﻣﻘطــﻊ‬‫ﺳﻳﺳــﺗﺧدم اﻻﺳــﺗﺛﻧﺎء ‪) ،SystemException‬وﻣﻧــﻪ ﻗــد اﺷــﺗﻘّت اﻻﺳــﺗﺛﻧﺎءات اﻟﺣﺳـ ّ‬
‫أي اﺳ ــﺗﺛﻧﺎء ﻻ ﻳﻧ ــدرج ﺗﺣ ــت‬ ‫‪ ،Catch When‬ﻟﻣﻌﺎﻟﺟ ــﺔ اﻻﺳ ــﺗﺛﻧﺎءات ﺑﺷ ــروط ﻣﻌﻳﻧ ــﺔ‪ ..‬وأﺧﻳـ ـرا‪ ،‬ﻟ ــو ﻛ ــﺎن ﻫﻧ ــﺎك ّ‬
‫ـﺎم ‪ ،Exception‬اﻟ ـ ــذي ﺗﻧ ـ ــدرج ﺗﺣﺗ ـ ــﻪ ﻛـ ـ ـ ّﻝ أﻧـ ـ ـواع‬ ‫ـﺗﺗم ﻣﻌﺎﻟﺟﺗ ـ ــﻪ ﺗﺣ ـ ــت اﻻﺳ ـ ــﺗﺛﻧﺎء اﻟﻌ ـ ـ ّ‬
‫اﻻﺳ ـ ــﺗﺛﻧﺎءات اﻟﺳ ـ ــﺎﺑﻘﺔ‪ ،‬ﻓﺳ ـ ـ ّ‬
‫رد اﻟﻔﻌــﻝ اﻟﻣﺗّﺧــذ ﻋﻧــد ﺣــدوث أﻧ ـواع ﺑﻌﻳﻧﻬــﺎ ﻣــن‬ ‫ﺗﻧظﻳﻣﻳــﺔ‪ ،‬ﻟﻠــﺗﺣ ّﻛم ﻓــﻲ ّ‬
‫ّ‬ ‫ﻋﻣﻠﻳــﺔ‬
‫اﻻﺳــﺗﺛﻧﺎءات‪ .‬ﻛﻣــﺎ ﺗــرى‪ّ :‬إﻧﻬــﺎ ﻣﺟـ ّـرد ّ‬
‫ﺧﺎﺻﺔ ﻋﻧد ﺣـدوث اﺳـﺗﺛﻧﺎء اﻟﻘﺳـﻣﺔ‬
‫ّ‬ ‫ﻣﻬﺗم ﻓﻲ اﻟﻛود اﻟﺳﺎﺑق‪ ،‬ﺑﺎﺗّﺧﺎذ ﺧطوات‬
‫أن اﻟﻣﺑرﻣﺞ ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‪ ..‬ﻓﻣﺛﻼ‪ ،‬ﻳﺑدو ّ‬
‫أي ﺟﻣﻠــﺔ ‪ Catch‬ﻣــن اﻟﺟﻣــﻝ اﻟﺳــﺎﺑﻘﺔ‪..‬‬
‫أن ﺑﺈﻣﻛﺎﻧــك اﺳــﺗﺧدام ﺟﻣﻠــﺔ ‪ When‬ﻓــﻲ ّ‬
‫ﻋﻠــﻰ ﺻــﻔر‪ .‬ﻫــذا ﻣــﻊ ﻣﻼﺣظــﺔ‪ّ ،‬‬
‫ﻣﺛﻝ‪:‬‬
‫أي ﺷرط ﻳﻧﺎﺳﺑك ‪Catch Exc As Exception When‬‬
‫ﻛﻣﺎ ﻳﻣﻛﻧك أن ﺗﻛﺗب ﻛﻠﻣﺔ ‪ Catch‬ﻣﻧﻔردة ﻛﺎﻟﺗﺎﻟﻲ‪:‬‬
‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬
‫‪2‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫‪Try‬‬

‫‪Catch Exc As DivideByZeroException‬‬

‫‪Catch‬‬

‫‪End Try‬‬
‫ﻫﺎﻣﺔ‪:‬‬
‫ﻣﻼﺣظﺔ ّ‬
‫ﺟﻳدا‪ ،‬وﺗﺗﺳـﺎءﻝ‪ :‬وﻟﻣـﺎذا ﻻ أﻛﺗـب اﻟﻛـود ﺑﻌـد ﻧﻬﺎﻳـﺔ ﻣﻘطـﻊ‬ ‫ﻻ رﻳب ّأﻧك ﻣﺎ زﻟت ﻟم ﺗﻔﻬم وظﻳﻔﺔ اﻟﻣﻘطﻊ ‪ّ Finally‬‬
‫ﻟﻠﻛﻳﻔﻳ ــﺔ اﻟﺗ ــﻲ ﻳﻌﻣ ــﻝ ﺑﻬ ــﺎ ﻣﻌ ــﺎﻟﺞ‬
‫ّ‬ ‫اﻻﺳ ــﺗﺛﻧﺎء ﻛﻠّ ــﻪ‪ ،‬ﺑ ــدﻻ ﻣ ــن ﻛﺗﺎﺑﺗ ــﻪ ﻓ ــﻲ ﺟﻣﻠ ــﺔ ‪Finally‬؟ ﻫ ــذا ﻳﻌ ــود ﻓ ــﻲ اﻟواﻗ ــﻊ‬
‫إن ﺑﺈﻣﻛﺎﻧ ــك أن ﺗﻛﺗ ــب ﻣﻘ ــﺎطﻊ ﻟﻣﻌﺎﻟﺟ ــﺔ اﻻﺳ ــﺗﺛﻧﺎءات‪ ،‬داﺧ ــﻝ ﻣﻘط ــﻊ ‪ ..Try‬وﺑﺈﻣﻛﺎﻧ ــك ﻣ ــن داﺧ ــﻝ‬
‫اﻻﺳ ــﺗﺛﻧﺎء‪ّ ..‬‬
‫ﻣﻘطـﻊ ‪ Try‬أﻳﺿــﺎ‪ ،‬اﺳـﺗدﻋﺎء إﺟـراءات أﺧـرى‪ ،‬ﺑﻬــﺎ ﻣﻘـﺎطﻊ ﻟﻣﻌﺎﻟﺟــﺔ اﻻﺳـﺗﺛﻧﺎءات‪ ..‬ﺑــدأت ﺗﻔﻬـم إذن ﻣﻌﻧــﻰ ﻛﻠﻣــﺔ‬
‫ـﻲ ‪ Structured‬اﻟﺗــﻲ ﻧﺻـف ﺑﻬــﺎ ﻣﻌﺎﻟﺟــﺔ اﻻﺳـﺗﺛﻧﺎء؟ ﺑﻧــﺎء ﻋﻠـﻰ ﻫــذا‪ ،‬ﻟــو ﺣـدث اﺳــﺗﺛﻧﺎء‪ ،‬وﻟـم ﻳوﺟــد ﻣﻘطــﻊ‬
‫ﻫﻳﻛﻠ ّ‬
‫ﻓﺈن اﻟﺗﻧﻔﻳذ ﻳﻧﺗﻘﻝ ﻟﻣﻘطـﻊ ﻣﻌﺎﻟﺟـﺔ اﻟﺧطـﺄ اﻷﻋﻠـﻰ )اﻟـذي ﻳﺣﺗـوي ﻋﻠـﻰ‬ ‫‪ Catch‬ﻳﺣﺗوي ﻋﻠﻰ ﻧوع اﻟﺧطﺈ اﻟﻣﻧﺎﺳب‪ّ ،‬‬
‫ـﺎﻟﻲ إﻟــﻰ اﻹﺟـراء اﻟـذي اﺳــﺗدﻋﺎﻩ )إذا ﻛــﺎن ﻫــذا اﻻﺳـﺗدﻋﺎء ﻗــد ﺣــدث ﻓــﻲ‬
‫ـﺎﻟﻲ(‪ ،‬أو ﻳﻐــﺎدر اﻹﺟـراء اﻟﺣـ ّ‬
‫اﻟﻣﻘطـﻊ اﻟﺣـ ّ‬
‫ﺛم إﻟـﻰ اﻹﺟـراء اﻟـذي اﺳـﺗدﻋﺎﻩ‪ ..‬وﻫﻛـذا‪ ،‬ﺣﺗّـﻰ ﻳﻌﺛـر ﻋﻠـﻰ ﺟﻣﻠـﺔ ‪ Catch‬اﻟﻣﻧﺎﺳـﺑﺔ‪) ..‬ﻟـن ﻳﺣـدث‬ ‫ﺟﻣﻠﺔ ‪ّ ..(Try‬‬
‫ﻫذا طﺑﻌﺎ ﻓﻲ ﺣﺎﻟﺔ اﺳﺗﺧدام ﺟﻣﻠﺔ ‪ Catch‬اﻟﻌﺎﻣﺔ‪:‬‬
‫‪ As Exception‬اﺳم_اﻻﺳﺗﺛﻧﺎء ‪Catch‬‬
‫ﻣﻣﺎ ﺳﺑق ﻳﺗّﺿﺢ ﻟك ﻣﺎ ﻳﻠﻲ‪:‬‬ ‫ﻓﻬﻲ ﺗﺗﻌﺎﻣﻝ ﻣﻊ أي ﻧوع ﻣن اﻻﺳﺗﺛﻧﺎءات‪ّ .‬‬
‫ـﺗم ﺗﻣرﻳــر اﻻﺳــﺗﺛﻧﺎء ﻋﺑــر اﻹﺟـراءات اﻟﻣﺧﺗﻠﻔــﺔ ﻣــن‬
‫ﻫﻳﻛﻠﻳــﺔ ‪ ،Structured‬ﺣﻳــث ﻳـ ّ‬
‫ّ‬ ‫أن ﻣﻌﺎﻟﺟــﺔ اﻟﺧطــﺄ‬
‫‪ -١‬ﻣﻌﻧــﻰ ّ‬
‫ـﺗم اﻟﻌﺛــور ﻋﻠــﻰ اﻟﻣﻌــﺎﻟﺞ اﻟﻣﻧﺎﺳــب ﻟﻼﺳــﺗﺛﻧﺎء‪ ..‬وﺑﻬــذا ﺗﻣﺗﻠــك ﺗﺣ ّﻛﻣــﺎ أﻛﺑــر ﻓــﻲ‬
‫اﻟــداﺧﻝ ﻟﻠﺧــﺎرج ـ إﻟــﻰ أن ﻳـ ّ‬
‫ﺿم ﻛ ّﻝ ﺟﻣﻝ اﻟﻣﻌﺎﻟﺟﺔ ﻓﻲ ﻣوﺿﻊ واﺣد‪.‬‬ ‫ﺗﺗم‪ ،‬ﺑﺣﻳث ﻳﻣﻛﻧك ـ ﻟو أردت ـ ّ‬ ‫أي إﺟراء ّ‬ ‫ﻣﻌﺎﻟﺟﺔ اﻟﺧطﺈ وﻓﻲ ّ‬
‫ﺣﻳوﻳﺔ ﻟﻠﻐﺎﻳﺔ‪ ،‬ﻓﻬـﻲ ﺗﻠـزم ‪ VB‬ﺑﺗﻧﻔﻳـذ ﺑﻌـض اﻟﻛـود ﻗﺑـﻝ أن ﻳﻐـﺎدر اﻹﺟـراء‪ ..‬وأﻧـت ﺗﻔﻬـم‬ ‫أن ﺟﻣﻠﺔ ‪ّ Finally‬‬ ‫‪ّ -٢‬‬
‫اﻵن ﻛﻳــف ﻳﻣﻛــن ﻣﻐــﺎدرة اﻹﺟـراء إﺟﺑﺎرّﻳــﺎ ﻓــﻲ ﺣﺎﻟــﺔ ﺣــدوث اﺳــﺗﺛﻧﺎء ﻏﻳــر ﻣﻌــﺎﻟﺞ‪ ..‬ﻟﻬــذا ﻓﻣــن اﻟﻣﻬـ ّـم ﺟـ ّـدا أن‬
‫أي ﻋﻣــﻝ ﻗــد ﺑدأﺗــﻪ‪ ،‬ﺣﺗّــﻰ ﻻ ﺗﺣــدث ﻧﺗــﺎﺋﺞ‬ ‫ﺗﺳــﺗﺧدم ﻣﻘطــﻊ ‪ Finally‬ﻹﻏــﻼق اﻟﻣﻠﻔــﺎت اﻟﺗــﻲ ﻓﺗﺣﺗﻬــﺎ ٕواﻧﻬــﺎء ّ‬
‫ﻏﻳر ﻣﺗوﻗﻌﺔ‪.‬‬
‫ﺧﻠﻳﺔ اﻻﺳﺗﺛﻧﺎء‪ ،‬اﻟﺗﻲ ﺗرﺛﻬﺎ ﻛ ّﻝ أﻧواع اﻻﺳﺗﺛﻧﺎءات اﻷﺧرى‪.‬‬
‫أﻫم ﺧﺻﺎﺋص ووﺳﺎﺋﻝ ّ‬
‫واﻵن ﺗﻌﺎﻝ ﻧرى ّ‬

‫ﺧﺻﺎﺋص ﺧ ّﻠﻳﺔ اﻻﺳﺗﺛﻧﺎء ‪:Exception Class‬‬


‫ﻣﻠف اﻟﻣﺳﺎﻋدة اﻟذي ﻳﺷرح اﻻﺳﺗﺛﻧﺎء‪.‬‬
‫ﺗﻐﻳر ّ‬
‫ﻣﻠف اﻟﻣﺳﺎﻋدة ‪ :HelpLink‬ﺗﻘ أر أو ّ‬
‫ّ‬
‫ﻧص ﻳﺷرح اﻻﺳﺗﺛﻧﺎء اﻟذي ﺣدث وأﺳﺑﺎﺑﻪ‪.‬‬
‫اﻟرﺳﺎﻟﺔ ‪ّ :Message‬‬
‫ﺗﺳﺑب ﻓﻲ ﺣدوث اﻻﺳﺗﺛﻧﺎء‪.‬‬
‫ﻣﺻدر اﻻﺳﺗﺛﻧﺎء ‪ :Source‬ﺗﻌﻳد اﺳم اﻟﺗطﺑﻳق أو اﻟﻛﺎﺋن اﻟذي ّ‬
‫ﺗﺳﺑﺑت ﻓﻲ ﺣدوث اﻻﺳﺗﺛﻧﺎء‪.‬‬
‫ﻣوﻗﻊ اﻟﻬدف ‪ :TargetSite‬ﺗﻌﻳد اﺳم اﻟداﻟﺔ اﻟﺗﻲ ّ‬
‫ﺗﺳﺑب ﻓﻲ إطﻼق اﻻﺳﺗﺛﻧﺎء اﻟﺣﺎﻟﻲ‪ ..‬ﻳﺣدث أﺣﻳﺎﻧﺎ‬
‫اﻟداﺧﻠﻲ ‪ :InnerException‬ﺗﻌﻳد اﻻﺳﺗﺛﻧﺎء اﻟذي ّ‬‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎء‬
‫أن ﻳﻧطﻠق اﺳﺗﺛﻧﺎء داﺧﻝ إﺣدى اﻟوﺳﺎﺋﻝ‪ ،‬ﻓﺗﻘوم ﺑﺗﻣرﻳرﻩ إﻟﻰ ﻣﺳﺗدﻋﻳﻬﺎ‪.‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪3‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫ﺗم اﺳﺗدﻋﺎؤﻫﺎ ﻣن ﺑﻌﺿﻬﺎ‪ ،‬وﺻـوﻻ ﻟﺗﻠـك اﻟﺗـﻲ‬


‫ﻧﺻﺎ‪ ،‬ﻳﻣﺛّﻝ ﻣﺳﺎر اﻟوﺳﺎﺋﻝ اﻟﺗﻲ ّ‬
‫اﻟرﺻﺔ ‪ :StackTrace‬ﺗﻌﻳد ّ‬‫ﻣﺳﺎر ّ‬
‫ﺣدث ﺑﻬﺎ اﻻﺳﺗﺛﻧﺎء‪.‬‬

‫ﺧﻠﻳﺔ اﻻﺳﺗﺛﻧﺎء ‪:Exception Class‬‬


‫وﺳﺎﺋﻝ ّ‬
‫ـﻠﻲ‪ ،‬اﻟــذي ﺗﺳـ ّـﺑب ﻓــﻲ اﻧطــﻼق ﺳﻠﺳــﻠﺔ ﻣــن‬
‫ـﻠﻲ ‪ :GetBaseException‬ﺗﻌﻳــد اﻻﺳــﺗﺛﻧﺎء اﻷﺻـ ّ‬
‫اﻗـ ٕار اﻻﺳــﺗﺛﻧﺎء اﻷﺻـ ّ‬
‫اﻻﺳﺗﺛﻧﺎءات‪.‬‬
‫ﻧﺻﺎ ﻳﻣﺛّﻝ اﻻﺳﺗﺛﻧﺎء‪.‬‬
‫ﻧص ‪ :ToString‬ﺗﻌﻳد ّ‬
‫إﻟﻰ ّ‬

‫أﻫم اﻻﺳﺗﺛﻧﺎءات‬
‫ﺑﻌض ّ‬
‫اﻟﺧﻠﻳ ــﺔ اﻟرﺋﻳﺳ ـ ّـﻳﺔ ﻟﻛـ ـ ّﻝ أﻧـ ـواع اﻻﺳ ــﺗﺛﻧﺎءات‬
‫اﻟﺧﻠﻳ ــﺔ ‪ّ SystemException‬‬
‫اﻟﺧﺎﺻـــﺔ ﺑﺎﻟﻧظـــﺎم‪ :‬ﺗﻣﺛّ ــﻝ ّ‬
‫ّ‬ ‫اﻻﺳـــﺗﺛﻧﺎءات‬
‫أي ﺧط ــﺈ ﻓـ ــﻲ‬
‫اﻟﻣوﺟ ــودة ﻓـ ــﻲ ﻓﺿـــﺎء اﻻﺳـ ــم ‪ ..System‬وﻳﻧطﻠ ــق اﻻﺳـ ــﺗﺛﻧﺎء ‪ SystemException‬ﻋﻧ ــد ﺣـ ــدوث ّ‬
‫ﺳﻧﻔﺻﻠﻪ ﻓﻲ اﻟﻣﻘﺎطﻊ اﻟﺗﺎﻟﻳﺔ‪.‬‬
‫ّ‬ ‫ﻣﻣﺎ‬
‫اﻟﻧظﺎم‪ّ ،‬‬
‫ﺗﺿم‪:‬‬
‫اﻟﺧﺎﺻﺔ ﺑﺎﻟﺗطﺑﻳﻘﺎت واﻟﺑراﻣﺞ‪ :‬ﺗرث ﻫذﻩ اﻻﺳﺗﺛﻧﺎءات اﻻﺳﺗﺛﻧﺎء ‪ ..SystemException‬وﻫﻲ ّ‬ ‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫ﻣﺣﻣــﻝ ‪UnLoaded‬‬
‫‪ :AppDomainUnloadedException‬ﻳﺣـدث ﻋﻧــد ﻣﺣﺎوﻟــﺔ اﻟﺗﻌﺎﻣــﻝ ﻣــﻊ ﺗطﺑﻳــق ﻏﻳــر ّ‬
‫)ﺗم اﻧﺗﻬﺎؤﻩ‪ ،‬أو ﻟم ﻳﺑدأ ﺑﻌد(‪.‬‬
‫ّ‬
‫‪ :CannotUnloadAppDomainException‬ﻳﺣدث ﻋﻧدﻣﺎ ﺗﻔﺷﻝ ﻣﺣﺎوﻟﺔ إﻏﻼق ‪ unload‬أﺣـد اﻟﺗطﺑﻳﻘـﺎت‬
‫‪.application domain‬‬
‫ـف ﺗﻧﻔﻳـذي ‪ executable file‬ﻏﻳـر ﺻـﺎﻟﺢ‬
‫‪ :BadImageFormatException‬ﻳﺣدث ﻋﻧد ﻣﺣﺎوﻟﺔ ﺗﺷﻐﻳﻝ ﻣﻠ ّ‬
‫ﻟﻠﺗﺷﻐﻳﻝ‪.‬‬
‫اﻟﺣﺎﻟﻳﺔ‪.‬‬
‫ّ‬ ‫اﻟﻌﻣﻠﻳﺔ‬
‫ّ‬ ‫‪ :ContextMarshalException‬ﻳﺣدث ﻋﻧدﻣﺎ ﺗﻔﺷﻝ ﻣﺣﺎوﻟﺔ اﻟﺗﻌﺎﻣﻝ ﻣﻊ ﻛﺎﺋن ﺧﺎرج ﺣدود‬
‫ـﺎص ﺑﺎﻟﻠﻐـ ــﺔ‬
‫ـﻲ ﻓـ ــﻲ ﻣﺣـ ـ ّـرك اﻟﺗﻧﻔﻳـ ــذ اﻟﺧـ ـ ّ‬
‫‪ :ExecutionEngineException‬ﻳﺣـ ــدث ﻋﻧـ ــدﻣﺎ ﻳﺣـ ــدث ﺧطـ ــﺄ داﺧﻠـ ـ ّ‬
‫‪.CLR's Execution engine‬‬

‫‪ :InvalidProgramException‬ﻳﺣدث ﻫذا اﻻﺳﺗﺛﻧﺎء إذا ﻛﺎن ﻫﻧﺎك ﺧطﺄ ﻓﻲ ﻣﺗرﺟم اﻟﻛود ‪ّ ،compiler‬‬
‫ﻣﻣﺎ‬
‫ﺗﺗﺳﺑب أﻧت ﻓﻲ ﺣدوث ﻫذا اﻻﺳﺗﺛﻧﺎء‪.‬‬
‫ﻳؤدى إﻟﻰ ﺗرﺟﻣﺔ اﻟﺑرﻧﺎﻣﺞ ﺑطرﻳﻘﺔ ﺧﺎطﺋﺔ‪ ..‬ﺑﺧﻼف ذﻟك‪ ،‬ﻻ ﻳﻣﻛن أن ّ‬
‫ّ‬
‫ﻣﻌﻳﻧﺔ ﻏﻳر ﻣﺗﺎﺣﺔ ﺑواﺳطﺔ اﻟﺑرﻧﺎﻣﺞ‪.‬‬
‫‪ :NotSupportedException‬ﻳﺣدث ﻋﻧدﻣﺎ ﺗﺣﺎوﻝ أداء وظﻳﻔﺔ ّ‬
‫‪ :UnauthorizedAccessException‬ﻳﺣــدث ﻋﻧــد ﻣﺣﺎوﻟــﺔ اﻟﺗﻌﺎﻣــﻝ ﺑــدون ﺗﺻ ـرﻳﺢ ﻣــﻊ ﻋﻧﺻــر ﻣﺣﻣـ ّ‬
‫ـﻲ ﻣــن‬
‫ﻋﻧﺎﺻر اﻟﻧظﺎم‪.‬‬
‫ﺋﻳﺳﻳﺔ ‪ ،Base class‬ﻟﻼﺳﺗﺛﻧﺎءات اﻟﺗﻲ ﺗﺣدث ﻓﻲ اﻟﺗطﺑﻳق‪.‬‬
‫اﻟﺧﻠﻳﺔ اﻟر ّ‬
‫‪ :ApplicationException‬ﻳﻣﺛّﻝ ّ‬

‫اﻟﺧﺎﺻﺔ ﺑﻔﺷﻝ اﻟﺗﺣﻣﻳﻝ‪:‬‬


‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫ﻣﻌﻳن‪.‬‬
‫ﺋﻳﺳﻳﺔ ﻟﻼﺳﺗﺛﻧﺎءات اﻟﺗﻲ ﺗﺣدث ﻋﻧد ﻓﺷﻝ ﺗﺣﻣﻳﻝ ﻛﺎﺋن ّ‬
‫اﻟﺧﻠﻳﺔ اﻟر ّ‬
‫‪ :TypeLoadException‬ﻫذﻩ ﻫﻲ ّ‬
‫ﻣﻌﻳن‪.‬‬
‫ﻣﻠف ‪ّ .dll‬‬
‫ﻳﺗم اﻟﻌﺛور ﻋﻠﻰ ّ‬‫‪ :DllNotFoundException‬ﻳﺣدث ﻋﻧدﻣﺎ ﻻ ّ‬
‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬
‫‪4‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫ﻣﻌﻳن‪.‬‬
‫ﻣﻠف ‪ّ .dll‬‬
‫‪ :EntryPointNotFoundException‬ﻳﺣدث ﻋﻧدﻣﺎ ﻳﻔﺷﻝ اﺳﺗدﻋﺎء إﺣدى اﻟدواﻝ ﻣن ّ‬

‫اﻟﺧﺎﺻﺔ ﺑﺎﻟذاﻛرة‪:‬‬
‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫ﺗﺿم‪:‬‬
‫ﺗرث ﻫذﻩ اﻻﺳﺗﺛﻧﺎءات اﻻﺳﺗﺛﻧﺎء ‪ ..SystemException‬وﻫﻲ ّ‬
‫‪ :OutOfMemoryException‬ﻳﺣدث ﻋﻧدﻣﺎ ﻳﻌﺟز اﻟﺗطﺑﻳق ﻋن ﺣﺟز اﻟﻣﺳﺎﺣﺔ اﻟﻣطﻠوﺑﺔ ﻓﻲ اﻟذاﻛرة‪.‬‬
‫اﻟﻣﺧﺻﺻﺔ ﻟـﻪ ـ ﻓـﻲ‬
‫ّ‬ ‫اﻟرﺻﺔ ‪stack‬‬
‫ّ‬ ‫‪ :StackOverflowException‬ﻳﺣدث ﻋﻧدﻣﺎ ﻳﺳﺗﻧﻔد اﻟﺑرﻧﺎﻣﺞ ﻛ ّﻝ ﻣﺳﺎﺣﺔ‬
‫ﺟﻳدا‪.‬‬
‫اﻟﻐﺎﻟب ﺑﺳﺑب إﺟراء ارﺗدادي ‪ Recursive Procedure‬ﻏﻳر ﻣﻛﺗوب ّ‬
‫اﻟﺧﺎﺻــﺔ ﺑﺎﻟﺗﻌﺎﻣــﻝ ﻣــﻊ اﻟﻛﺎﺋﻧــﺎت‪ :‬ﺗــرث ﻫــذﻩ اﻻﺳــﺗﺛﻧﺎءات اﻻﺳــﺗﺛﻧﺎء ‪ ..SystemException‬وﻫــﻲ‬
‫ّ‬ ‫اﻻﺳــﺗﺛﻧﺎءات‬
‫ﺗﺿم‪:‬‬
‫ّ‬
‫ﻋﻣﻠﻳــﺔ ﺗﺣوﻳــﻝ ﻏﻳــر ﻣﻣﻛﻧــﺔ ﺑــﻳن ﻧــوﻋﻳن ﻣــن اﻟﻛﺎﺋﻧــﺎت‬
‫‪ :InvalidCastException‬ﻳﺣــدث ﺣﻳﻧﻣــﺎ ﺗﺣــﺎوﻝ إﺟ ـراء ّ‬
‫‪.Invalid conversion of types‬‬
‫‪ :NullReferenceException‬ﻳﺣــدث ﻋﻧــدﻣﺎ ﺗﺣــﺎوﻝ أن ﺗﺗﻌﺎﻣــﻝ ﻣــﻊ وﺳــﻳﻠﺔ ﻏﻳــر ﻣﺷــﺗرﻛﺔ ‪،Non_shared‬‬
‫اﻟﺧﻠﻳﺔ‪.‬‬
‫أي ﻧﺳﺧﺔ ‪ Instance‬ﻣن ّ‬‫ﺑﻳﻧﻣﺎ اﻟﻛﺎﺋن ﻳﺷﻳر إﻟﻰ اﻟﻘﻳﻣﺔ ‪ ،Nothing‬ﺑﻣﻌﻧﻰ ّأﻧﻪ ﻻ ﻳﺷﻳر إﻟﻰ ّ‬
‫ﻣﺣﻣﻠﺔ ‪.Unloaded class‬‬ ‫‪ :TypeUnloadedException‬ﻳﺣدث ﻋﻧد ﻣﺣﺎوﻟﺔ اﻟﺗﻌﺎﻣﻝ ﻣﻊ ّ‬
‫ﺧﻠﻳﺔ ﻏﻳر ّ‬
‫‪ :TypeInitializationException‬ﻳﺣدث ﻋﻧد ﺣدوث ﺧطﺊ ﻓﻲ ﺣدث إﻧﺷﺎء اﻟﻛﺎﺋن ‪.New‬‬
‫ﺋﻳﺳﻳﺔ ﻟﻼﺳﺗﺛﻧﺎء ‪.ObjectDisposedException‬‬
‫اﻟﺧﻠﻳﺔ اﻟر ّ‬
‫‪ :InvalidOperationException‬ﻫذﻩ ﻫﻲ ّ‬
‫ﺗم اﻟﺗﺧﻠّص ﻣﻧﻪ ‪.Disposed‬‬
‫‪ :ObjectDisposedException‬ﻳﺣدث ﻋﻧد ﻣﺣﺎوﻟﺔ اﺳﺗﺧدام ﻛﺎﺋن ّ‬

‫اﻟﺧﺎﺻﺔ ﺑﺎﻟدوا ّﻝ‪:‬‬


‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫اﻟﻣﺣﻣﻳﺔ ‪:Protected‬‬ ‫ّ‬ ‫اﻟﺧﺎﺻﺔ ﺑﺎﺳﺗدﻋﺎء اﻟوﺳﺎﺋﻝ‬
‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫اﻟﺧﺎﺻــﺔ ﺑﻔﺷــﻝ اﺳــﺗدﻋﺎء ﺣﻘــوﻝ‬
‫ّ‬ ‫اﻟﺧﻠﻳــﺔ اﻟرﺋﻳﺳـ ّـﻳﺔ‪ ،‬ﻟﻛ ـ ّﻝ اﻻﺳــﺗﺛﻧﺎءات‬
‫‪ :MemberAccessException‬ﻫــذﻩ ﻫــﻲ ّ‬
‫ووﺳﺎﺋﻝ وﺧﺻﺎﺋص اﻟﻛﺎﺋﻧﺎت‪.‬‬
‫ـﺎص ‪ Private‬أو‬‫)ﻣﺗﻐﻳـ ــر( ‪ field‬ﺧـ ـ ّ‬
‫ّ‬ ‫‪ :FieldAccessException‬ﻳﺣـ ــدث ﻋﻧـ ــدﻣﺎ ﺗﺣـ ــﺎوﻝ اﻟﺗﻌﺎﻣـ ــﻝ ﻣـ ــﻊ ﺣﻘـ ــﻝ‬
‫اﻟﻣﺗﻐﻳـر‬
‫ّ‬ ‫ﻣﺣﻣﻲ ‪ protected‬ﻓﻲ إﺣدى اﻟﺧﻼﻳﺎ ‪ ،Classes‬ﻣن ﺧﺎرج اﻟﻧطﺎق ‪ Domain‬اﻟﻣﺳﻣوح ﻟك ﺑﺎﻟﺗﻌﺎﻣﻝ ﻣﻊ‬ ‫ّ‬
‫ﻣن ﺧﻼﻟﻪ‪.‬‬
‫ﺧﺎﺻـ ــﺔ ‪ private‬أو‬
‫ّ‬ ‫‪ :MethodAccessException‬ﻳﺣـ ــدث ﻋﻧـ ــدﻣﺎ ﺗﺣـ ــﺎوﻝ اﻟﺗﻌﺎﻣـ ــﻝ ﻣـ ــﻊ وﺳـ ــﻳﻠﺔ ‪Method‬‬
‫ﻣﺣﻣﻳﺔ ‪ protected‬ﻓﻲ إﺣدى اﻟﺧﻼﻳﺎ‪ ،‬ﻣن ﺧﺎرج اﻟﻧطﺎق ‪ Domain‬اﻟﻣﺳﻣوح ﻟك ﺑﺎﻟﺗﻌﺎﻣﻝ ﻣﻌﻬﺎ ﻣن ﺧﻼﻟﻪ‪.‬‬ ‫ّ‬

‫اﻟﺧﺎﺻﺔ ﺑﺎﺳﺗدﻋﺎء اﻟوﺳﺎﺋﻝ ﻏﻳر اﻟﻣوﺟودة‪:‬‬


‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫اﻟﺧﻠﻳــﺔ اﻟرﺋﻳﺳـ ّـﻳﺔ ﻟﻼﺳــﺗﺛﻧﺎءات اﻟﺗــﻲ ﺗﺣــدث ﻋﻧــدﻣﺎ ﺗﺣــﺎوﻝ اﺳــﺗدﻋﺎء‬
‫‪ :MissingMemberException‬ﻫــذﻩ ﻫــﻲ ّ‬
‫ﻣﻌﻳن‪.‬‬
‫ﻋﺿو ‪ Member‬ﻏﻳر ﻣوﺟود ﻓﻲ ﻛﺎﺋن ّ‬
‫)ﻣﺗﻐﻳر( ﻏﻳر ﻣوﺟود ﻓﻲ اﻟﻛﺎﺋن‪.‬‬
‫ّ‬ ‫‪ :MissingFieldException‬ﻳﺣدث ﻋﻧدﻣﺎ ﺗﺣﺎوﻝ أن ﺗﺗﻌﺎﻣﻝ ﻣﻊ ﺣﻘﻝ‬
‫‪ :MissingMethodException‬ﻳﺣدث ﻋﻧدﻣﺎ ﺗﺣﺎوﻝ اﻟﺗﻌﺎﻣﻝ ﻣﻊ وﺳﻳﻠﺔ ﻏﻳر ﻣوﺟودة ﻓﻲ اﻟﻛﺎﺋن‪.‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪5‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫اﻟﺧﺎﺻﺔ ﺑﻣﻌﺎﻣﻼت اﻟدوا ّﻝ‪:‬‬


‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫ﺗﺿم‪:‬‬
‫ﺗرث ﻫذﻩ اﻻﺳﺗﺛﻧﺎءات اﻻﺳﺗﺛﻧﺎء ‪ ..SystemException‬وﻫﻲ ّ‬
‫‪incorrectly‬‬ ‫ﻣﻧﺳ ــق ﺑطرﻳﻘ ــﺔ ﺻ ــﺣﻳﺣﺔ‬
‫‪ :FormatException‬ﻳﺣ ــدث ﻋﻧ ــدﻣﺎ ﻳﻛ ــون ﻣﻌﺎﻣ ــﻝ اﻟداﻟ ــﺔ ﻏﻳ ــر ّ‬
‫‪.formatted‬‬
‫ﺋﻳﺳﻳﺔ ﻟﻼﺳﺗﺛﻧﺎءات اﻟﺗﺎﻟﻳﺔ‪:‬‬
‫اﻟﺧﻠﻳﺔ اﻟر ّ‬
‫‪ :ArgumentException‬ﻳﻣﺛّﻝ ّ‬
‫‪ :ArgumentNullException‬ﻳﺣ ــدث ﻋﻧ ــد ﺗﻣرﻳ ــر اﻟﻘﻳﻣ ــﺔ ‪ Nothing‬ﻛﻣﻌﺎﻣ ــﻝ ﻟداﻟ ــﺔ ﺗﻧﺗظ ــر ﻣرﺟﻌ ــﺎ ﺻ ــﺎﻟﺣﺎ‬
‫ﻟﻛﺎﺋن ‪.Valid object reference‬‬
‫‪ :ArgumentOutOfRangeException‬ﻳﺣ ــدث ﻋﻧ ــد إرﺳ ــﺎﻝ ﻗﻳﻣ ــﺔ ﺧ ــﺎرج اﻟﻣ ــدى اﻟﻣﺳ ــﻣوح ﺑ ــﻪ ﻟﻣﻌ ــﺎﻣﻼت‬
‫اﻟداﻟّﺔ‪.‬‬
‫‪ :DuplicateWaitObjectException‬ﻳﺣ ــدث ﻋﻧ ــدﻣﺎ ﻳظﻬ ــر ﻛ ــﺎﺋن أﻛﺛ ــر ﻣ ــن ﻣ ـ ّـرة ﻓ ــﻲ ﻣﺻ ــﻔوﻓﺔ اﻟﻛﺎﺋﻧ ــﺎت‬
‫اﻟﻣﺗزاﻣﻧﺔ ‪) Synchronization objects‬راﺟﻊ اﻟﻔﺻﻝ رﻗم ‪.(١٤‬‬

‫اﻟﺧﺎﺻﺔ ﺑﺎﻟﻣﺻﻔوﻓﺎت‪:‬‬
‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫ﺗﺿم‪:‬‬
‫ﺗرث ﻫذﻩ اﻻﺳﺗﺛﻧﺎءات اﻻﺳﺗﺛﻧﺎء ‪ ..SystemException‬وﻫﻲ ّ‬
‫‪ :ArrayTypeMismatchException‬ﻳﺣــدث ﻋﻧــدﻣﺎ ﺗﺣــﺎوﻝ وﺿــﻊ ﻗﻳﻣــﺔ ﻣــن ﻧــوع ﻏﻳــر ﻣﻧﺎﺳــب ﻓــﻲ إﺣــدى‬
‫ﺧﺎﻧﺎت اﻟﻣﺻﻔوﻓﺔ‪.‬‬

‫‪ :IndexOutOfRangeException‬ﻳﺣدث ﻋﻧدﻣﺎ ﺗﺣﺎوﻝ اﻟﺗﻌﺎﻣﻝ ﻣﻊ ﺧﺎﻧﺔ ﻏﻳر ﻣوﺟودة ﻓﻲ اﻟﻣﺻﻔوﻓﺔ‪.‬‬


‫‪ :RankException‬ﻳﺣ ــدث ﻋﻧ ــدﻣﺎ ﺗﺣ ــﺎوﻝ ﺗﻣرﻳ ــر ﻣﺻ ــﻔوﻓﺔ ﻛﻣﻌﺎﻣ ــﻝ ﻟداﻟ ــﺔ‪ ،‬ﺑﻳﻧﻣ ــﺎ ﻋ ــدد أﺑﻌ ــﺎد اﻟﻣﺻ ــﻔوﻓﺔ ﻏﻳ ــر‬
‫ﻣﻧﺎﺳب ﻟﻣﻌﺎﻣﻝ اﻟداﻟﺔ‪.‬‬

‫اﻟﺣﺳﺎﺑﻳﺔ‪:‬‬
‫ّ‬ ‫ﺑﺎﻟﻌﻣﻠﻳﺎت‬
‫ّ‬ ‫اﻟﺧﺎﺻﺔ‬
‫ّ‬ ‫اﻻﺳﺗﺛﻧﺎءات‬
‫ﺗﺿم‪:‬‬
‫ﺗرث ﻫذﻩ اﻻﺳﺗﺛﻧﺎءات اﻻﺳﺗﺛﻧﺎء ‪ ..SystemException‬وﻫﻲ ّ‬
‫ـﺎﺑﻳﺔ‪ ،‬ﺣﻳ ــث ﻳﺣ ــدث ﻫ ــذا اﻻﺳ ــﺗﺛﻧﺎء ﻋﻧ ــد‬
‫اﻟﺧﻠﻳ ــﺔ اﻟرﺋﻳﺳ ـ ّـﻳﺔ ﻟﻼﺳ ــﺗﺛﻧﺎءات اﻟﺣﺳ ـ ّ‬
‫‪ :ArithmeticException‬ﻳﻣﺛّ ــﻝ ّ‬
‫اﻟﺧﻠﻳﺔ‪.‬‬
‫اﻟﺣﺳﺎﺑﻳﺔ ﻫذﻩ ّ‬
‫ّ‬ ‫ﺣﺳﺎﺑﻲ‪ ..‬وﺗرث ﺑﺎﻗﻲ اﻻﺳﺗﺛﻧﺎءات‬
‫ّ‬ ‫أي ﺧطﺈ‬
‫ﺣدوث ّ‬
‫أن ﻗﺳــﻣﺔ‬
‫ـددا ﺻــﺣﻳﺣﺎ ‪ Integer‬ﻋﻠــﻰ ﺻــﻔر‪ ..‬ﻻﺣــظ ّ‬
‫‪ :DivideByZeroException‬ﻳﺣــدث ﻋﻧــدﻣﺎ ﺗﻘﺳــم ﻋـ ً‬
‫اﻷﻋداد اﻟﻌﺷرّﻳﺔ ﻋﻠﻰ ﺻﻔر ﻻ ﺗرﻣﻲ ﻫذا اﻻﺳﺗﺛﻧﺎء‪ ،‬ﺑﻝ ﻳﻧﺗﺞ ﻋﻧﻬﺎ اﻟﻘﻳﻣﺔ "ﻣﺎ ﻻ ﻧﻬﺎﻳﺔ"‪.‬‬
‫‪ :NotFiniteNumberException‬ﻳﺣــدث ﻋﻧــدﻣﺎ ﺗﺣــﺎوﻝ اﺳــﺗﺧدام رﻗــم ﻏﻳــر ﺻــﺎﻟﺢ ) ﻣــﺎ ﻻ ﻧﻬﺎﻳــﺔ اﻟﻣوﺟﺑــﺔ‬
‫ـﺎﺑﻳﺔ ﺗﺗطﻠّــب‬
‫ﻋﻣﻠﻳــﺔ ﺣﺳـ ّ‬
‫‪ ،PositiveInfinity‬ﻣــﺎ ﻻ ﻧﻬﺎﻳــﺔ اﻟﺳــﺎﻟﺑﺔ ‪ ،NegativeInfinity‬ﻟــﻳس رﻗﻣــﺎ ‪ (NaN‬ﻓــﻲ ّ‬
‫رﻗﻣﺎ ﻣﻘﺑوﻻ‪.‬‬
‫اﻟرﻗﻣﻳﺔ اﻟﻣﺳﻣوح ﺑﻬﺎ‪.‬‬
‫ّ‬ ‫ﻣﻌﻳﻧﺔ‪ ،‬اﻟﺣدود‬
‫ﺣﺳﺎﺑﻳﺔ ّ‬
‫ّ‬ ‫ﻋﻣﻠﻳﺔ‬
‫‪ :OverflowException‬ﻳﺣدث ﻋﻧدﻣﺎ ﻳﺗﺟﺎوز ﻧﺎﺗﺞ ّ‬

‫ﻣﻠﺣق ‪٢‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪6‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫اﻟﻌد اﻟﺛﻧﺎﺋﻲ‪:‬‬
‫ﻧظﺎم ّ‬
‫ﻣﻔﻬوﻣﻪ‪:‬‬
‫أن ﻫــذا اﻟﻧظــﺎم ﻟــم ﻳﻛــن ﻓطرًّﻳــﺎ ﻛﻣــﺎ ﻻ ﺑـ ّـد‬
‫ي ﻫــو اﻟﻧظــﺎم اﻟوﺣﻳــد اﻟــذي ﻳﻣﻛــن اﺳــﺗﺧداﻣﻪ ﻟﻠﻌـ ّـد‪ ،‬ﻛﻣــﺎ ّ‬
‫ﻟــﻳس اﻟﻧظــﺎم اﻟﻌﺷــر ّ‬
‫ـﻲ‪،‬‬ ‫ﺗﺗﺧﻳــﻝ‪ ..‬ﻓﻣــﺛﻼ‪ ،‬ﻛﺎﻧــت ﺣﺿــﺎرة اﻟﻌـراق اﻟﻘدﻳﻣــﺔ ﺗﺳــﺗﺧدم اﻟﻧظــﺎم اﻟﺳــﺗﻳﻧﻲ ﻟﻠﻌـ ّـد‪ ،‬وذﻟــك ﻟﻣﻼءﻣﺗــﻪ ﻟﻠﻧظــﺎم اﻟﻔﻠﻛـ ّ‬ ‫و ّأﻧــك ّ‬
‫ﻣﺳﺗﺧدﻣﺎ ﺣﺗّﻰ اﻟﻳ ِ‬
‫ـوم ﻓـﻲ ﻗﻳـﺎس اﻟزواﻳـﺎ‪ ،‬ﻓﺎﻟدرﺟـﺔ ﺗﺳـﺎوي ‪ ٦٠‬دﻗﻳﻘـﺔ واﻟدﻗﻳﻘـﺔ ﺗﺳـﺎوي ‪ ٦٠‬ﺛﺎﻧﻳـﺔ‪ ،‬ﻛﻣـﺎ ّأﻧﻧـﺎ‬ ‫ً‬ ‫وﻫو ﻣﺎ زاﻝ‬
‫ﻳوﻣﻳﺎ ﻓﻲ ﻗﻳﺎس اﻟوﻗت‪ ،‬ﻓﺎﻟﺳﺎﻋﺔ أﻳﺿﺎ ﺗﺳﺎوي ‪ ٦٠‬دﻗﻳﻘﺔ واﻟدﻗﻳﻘﺔ ﺗﺳـﺎوي ‪٦٠‬‬ ‫ﻳﻧﻲ ّ‬‫اﻟﻧظﺎم اﻟﺳﺗّ ّ‬
‫َ‬ ‫ﺟﻣﻳﻌﺎ ﻣﺎ زﻟﻧﺎ ﻧﺳﺗﺧدم‬
‫أن اﻟﻌﻼﻗــﺔ ﺑــﻳن اﻟﻣواﻗﻳــت وﻧظــﺎم اﻟﻔﻠــك ﻫــﻲ ﻋﻼﻗــﺔ‬
‫ﺛﺎﻧﻳــﺔ‪ ،‬وذﻟــك ﻻرﺗﺑــﺎط اﻟزواﻳــﺎ واﻟوﻗــت ﺑﺣرﻛــﺔ اﻷﻓــﻼك )ﻻﺣــظ ّ‬
‫ﻣﺗوﻗّﻌﺔ‪ ،‬ﻓﻧﺣن ﻧﻘﻳس اﻟوﻗت ﺗﺑﻌﺎ ﻟﺣرﻛﺔ اﻷرض ﺣوﻝ ﻧﻔﺳﻬﺎ وﺣوﻝ اﻟﺷﻣس(‪ .‬وﻛﻘﺎﻋدة‪ :‬ﻳﻣﻛﻧك اﺑﺗداع أي ﻧظـﺎم ﻋ ّـد‬
‫ﺗرﻳــدﻩ‪ ،‬ﺣﺗّــﻰ وﻟــو ﻛــﺎن اﻟﻧظــﺎم اﻟﻣﺋــوي أو اﻷﻟﻔــﻲ‪ ،‬وﻟﻛـ ّـن اﻟﻣﺷــﻛﻠﺔ اﻟﺗــﻲ ﺳــﺗواﺟﻬك ﻫــﻲ‪ :‬ﻣــن أﻳــن ﺗــﺄﺗﻲ ﺑرﻣــوز ﻟﻬــذا‬
‫ي‪ ،‬ﻧﺳــﺗﺧدم ﻋﺷ ـرة رﻣــوز ﻛﺄرﻗــﺎم )‪ ، (٩ ، ...... ،٢ ،١ ،٠‬ﺑﺣﻳــث‬ ‫اﻟﻧظــﺎم ﻻﺳــﺗﺧداﻣﻬﺎ ﻛﺄرﻗــﺎم؟ ﻓﻔــﻲ اﻟﻧظــﺎم اﻟﻌﺷــر ّ‬
‫ﻧﻬﺎﺋﻳ ــﺔ ﻣﻧﻬ ــﺎ ﺑﺗوﻟﻳﻔﻬ ــﺎ ﻣﻌ ــﺎ‪ ،‬ﻣﺛ ــﻝ ‪ ..٦٤٩٨٦٣ ،٧٦٣٨ ،١٢٣‬إﻟ ــﺦ‪) .‬ﻛ ــﺎن ﻟﻠ ــوح اﻟﺣﺳ ــﺎب‬ ‫ﻳﻣﻛ ــن ﺗوﻟﻳ ــد أﻋ ــداد ﻻ ّ‬
‫ﻗﻧﻧ ـوا ﻗواﻋــد ﻫــذا اﻟﻧظــﺎم‬
‫ـﻳﻧﻲ اﻟﻔﺿــﻝ ﻓــﻲ اﺑﺗــداع ﻫــذا اﻟﻧظــﺎم‪ ،‬وﻋــﻧﻬم ﻧﻘﻠــﻪ اﻟﻬﻧــود‪ ،‬وﻋــﻧﻬم أﺧــذﻩ اﻟﻌــرب ﺣﻳــث ّ‬
‫اﻟﺻـ ّ‬
‫رﻣز ﻟﻠﺻﻔر(‪ .‬وﻓﻲ ﻫذا اﻟﻧظـﺎم أﻳﺿـﺎ‪ ،‬ﻳﻛﺗﺳـب اﻟـرﻗم ﻗﻳﻣﺗـﻪ ً‬
‫ﺗﺑﻌـﺎ ﻟﻠﺧﺎﻧـﺔ اﻟﺗـﻲ ﻳوﺟـد ﻓﻳﻬـﺎ‪ ،‬ﻓﻔـﻲ ﺧﺎﻧـﺔ اﻵﺣـﺎد‬ ‫واﺑﺗﻛروا ًا‬
‫ﺗﻛون ﻗﻳﻣﺗﻪ ﻛﻣﺎ ﻫﻲ‪ ،‬وﻓﻲ ﺧﺎﻧﺔ اﻟﻌﺷرات ﺗﻛون ﻗﻳﻣﺗﻪ ﻣﺿروﺑﺔ ﻓـﻲ ‪ ،١٠‬وﻓـﻲ ﺧﺎﻧـﺔ اﻟﻣﺋـﺎت ﺗﻛـون ﻗﻳﻣﺗـﻪ ﻣﺿـروﺑﺔ‬
‫ﻓﻲ ‪. ،١٠٠‬‬
‫ﻷﻧـﻪ ﻓـﻲ ﺧﺎﻧـﺔ اﻟﻌﺷـرات( ‪١٠٠ ×١) ١٠٠ +‬‬
‫ﻓﻣﺛﻼ‪ :‬اﻟﻌدد ‪ ١١١‬ﻫو ﻋﺑﺎرة ﻋـن ‪) ١‬ﻓـﻲ اﻵﺣـﺎد( ‪ّ ١٠ × ١) ١٠ +‬‬
‫أن اﻟرﻗم واﺣد ﻗد اﺧﺗﻠﻔت ﻗﻳﻣﺗﻪ ﻋﻠﻰ ﺣﺳب ﻣوﺿﻌﻪ ﻓﻲ اﻟﻌدد‪.‬‬
‫ﻷﻧﻪ ﻓﻲ ﺧﺎﻧﺔ اﻟﻣﺋﺎت(‪ ..‬وﻫﻛذا ﺗرى ّ‬
‫ّ‬
‫ﻋﺎﻣﺔ‪:‬‬
‫إن ﻟﻬذﻩ اﻟﺣﻘﻳﻘﺔ ﺻﻳﻐ ًﺔ ّ‬‫ّ‬
‫ﻓﺈن ﻗﻳﻣﺗﻪ "ق" ﺑﺎﻟﻧﺳﺑﺔ ﻟﻣوﻗﻌﻪ "م" ﻓﻲ اﻟﻌدد ﻫﻲ‪:‬‬
‫ي‪ ،‬ﻟو ﻛﺎن ﻟدﻳك رﻗم "ر"‪ّ ،‬‬
‫ﻓﻲ اﻟﻧظﺎم اﻟﻌﺷر ّ‬
‫ق = ر × ‪) ١٠‬م ‪.(١-‬‬

‫ﻓﻣﺛﻼ اﻟرﻗم ‪) ٥‬ر =‪ (٥‬ﻓﻲ ﺧﺎﻧﺔ اﻵﺣﺎد )م = ‪ (١‬ﻗﻳﻣﺗﻪ‪:‬‬


‫)‪(١- ١‬‬
‫= ‪.٥ = ١ × ٥‬‬ ‫ق = ‪١٠ × ٥‬‬
‫وﻓﻲ ﺧﺎﻧﺔ اﻟﻌﺷرات )م = ‪ (٢‬ﻗﻳﻣﺗﻪ‪:‬‬
‫)‪(١- ٢‬‬
‫= ‪.٥٠ = ١٠ × ٥‬‬ ‫ق = ‪١٠ × ٥‬‬
‫وﻓﻲ ﺧﺎﻧﺔ اﻟﻌﺷرات )م = ‪ (٢‬ﻗﻳﻣﺗﻪ‪:‬‬
‫)‪(١- ٣‬‬
‫= ‪ ...٥٠٠ = ١٠٠ × ٥‬وﻫﻛذا‪.‬‬ ‫ق = ‪١٠ × ٥‬‬
‫اﻟﻣوﺿﻌﻳﺔ ﻟﻛﻝ رﻗم ﻣن أرﻗﺎﻣﻪ‪ ..‬ﻓﻣﺛﻼ‪:‬‬
‫ّ‬ ‫وﻟﺣﺳﺎب اﻟﻌدد ﻛﻛﻝ‪ ،‬ﻳﺗم ﺟﻣﻊ اﻟﻘﻳﻣﺔ‬
‫اﻟﻌدد ‪.١٠٠ + ٤٠ + ٣ = (٢) ١٠ × ١ + (١) ١٠ × ٤ + (٠) ١٠ × ٣ = ١٤٣‬‬
‫اﻻﺑﺗداﺋﻲ؟‬
‫ّ‬ ‫اﻷوﻝ‬
‫ﺗﻛرر ﻟﻧﺎ اﻟﻛﻼم اﻟذي درﺳﻧﺎﻩ ﻓﻲ اﻟﺻف ّ‬ ‫طﺑﻌﺎ ﺳﺗﺗﺳﺎءﻝ ﻓﻲ اﺳﺗﻳﺎء‪ :‬ﻟﻣﺎذا ّ‬
‫أي ﻧظـﺎم‪ ..‬ﻓﺑـدﻻ‬
‫"اﻟطﻔوﻟﻳـﺔ"‪ ،‬ﻓﻬـذﻩ اﻟﻘواﻋـد ﻳﻣﻛـن ﺗﻌﻣﻳﻣﻬـﺎ ﻋﻠـﻰ ّ‬
‫ّ‬ ‫أﻫﻣّﻳـﺔ ﻫـذﻩ اﻟﻘواﻋـد‬
‫وﻟو ﺻﺑرت ﻗﻠﻳﻼ‪ ،‬ﻟﻌرﻓت ﻣدى ّ‬
‫ﺟرب اﻟﻧظـﺎم اﻟﺧﻣﺎﺳـﻲ )‪،١ ،٠‬‬‫ﻣن اﻷﺳﺎس ‪ ١٠‬ﻓﻲ اﻟﻣﻌﺎدﻻت اﻟﺳﺎﺑﻘﺔ‪ ،‬ﺿﻊ ﺑدﻻ ﻣﻧﻪ أﺳﺎس اﻟﻧظﺎم اﻟذي ﺗرﻳدﻩ‪ّ ..‬‬
‫ـر ﻷن اﻟﻛﻣﺑﻳ ــوﺗر ﻳﻌﻣ ــﻝ‬
‫‪ ،(٤ ،٣ ،٢‬واﻟﻧظ ــﺎم اﻟﻌﺷـ ـرﻳﻧﻲ )‪ ،(١٩ ، ....... ،٢ ،١ ،٠‬وأي ﻧظ ــﺎم آﺧ ــر ﺗرﻳ ــدﻩ‪ .‬وﻧظ ـ ًا‬
‫ﺑــدواﺋر ﻛﻬر ّﺑﻳــﺔ دﻗﻳﻘــﺔ‪ ،‬ﻳﻣﻛﻧﻬــﺎ أن ﺗــدرك ﺣــﺎﻟﺗﻳن ﻓﻘـط‪ :‬ﻣــرور اﻟﺗﻳــﺎر )وﺳــﻧرﻣز ﻟــﻪ رﻳﺎﺿـّـﻳﺎ ﺑــﺎﻟرﻣز ‪ ،(١‬أو اﻧﻘطﺎﻋــﻪ )‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪7‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫ـﺎﺋﻲ )‪ ، (١ ،٠‬ﻫــو اﻟﻧظــﺎم اﻷﻣﺛــﻝ ﺑﺎﻟﻧﺳــﺑﺔ ﻟﻠﻛﻣﺑﻳــوﺗر‪ ،‬وﻫــو ﻫﻧــﺎ ﻣــﺎ‬


‫ـﺈن اﻟﻧظــﺎم اﻟﺛﻧـ ّ‬
‫وﺳــﻧرﻣز ﻟــﻪ رﻳﺎﺿـ ّـﻳﺎ ﺑــﺎﻟرﻣز ‪ ،(٠‬ﻓـ ّ‬
‫اﻟﺣﺳﺎﺑﻳﺔ )اﻟﺟﻣﻊ واﻟطـرح واﻟﺿـرب واﻟﻘﺳـﻣﺔ(‪.‬‬ ‫ّ‬ ‫اﻟﻌد واﻟﻌﻣﻠﻳﺎت‬
‫ي ﻓﻲ ّ‬ ‫ﻳﻌﻧﻳﻧﺎ‪ّ .‬إﻧﻪ ﻳﺳﻳر ﻋﻠﻰ ﻧﻔس ﻗواﻋد اﻟﻧظﺎم اﻟﻌﺷر ّ‬
‫وﻓــﻲ اﻷﻣﺛﻠــﺔ اﻟﺗﺎﻟﻳــﺔ‪ ،‬ﺳﻧﺿــﻊ اﻟﻌــدد ﺑــﻳن ﻗوﺳــﻳن‪ ،‬وﻧﺿــﻊ أﺳــﺎس اﻟﻧظــﺎم ﺑﺟوارﻫﻣــﺎ‪ ،‬ﻟﻧــرى ﻛﻳــف ﻳﻣﻛــن اﻟﺗﺣوﻳــﻝ ﺑــﻳن‬
‫اﻟﻧظﺎم اﻟﻌﺷري واﻟﻧظﺎم اﻟﺛﻧﺎﺋﻲ‪:‬‬
‫= )‪.٢(١‬‬ ‫)‪١٠(١‬‬

‫= ‪.٢(١٠) = ١ ٢ × ١ + ٠ ٢ × ٠‬‬ ‫)‪١٠(٢‬‬


‫‪١‬‬ ‫‪٠‬‬
‫= ‪.٢(١١) = ٢ × ١ + ٢ × ١ = ٢ + ١‬‬ ‫)‪١٠(٣‬‬
‫)‪(٤‬‬ ‫)‪(٣‬‬ ‫)‪(٢‬‬ ‫)‪(١‬‬ ‫)‪(٠‬‬
‫‪٢ ×١ +‬‬ ‫‪٢×١+‬‬ ‫‪٢×٠+‬‬ ‫‪٢×٠+‬‬ ‫)‪٢ × ١ = ٢(١١٠٠١‬‬
‫= ‪.١٠(٢٥) = ١٦ + ٨ + ٠ + ٠ + ١‬‬

‫أﻗﺻﻰ ﻋدد ﻋﺷري ﻳﻘﺑﻠﻪ ﻋدد ﻣن اﻟﺧﺎﻧﺎت ﻓﻲ اﻟﻧظﺎم اﻟﺛﻧﺎﺋﻲ‪:‬‬


‫أﻗﺻــﻰ ﻋــدد ﻳﻣﻛــن أن ﺗﺿــﻌﻪ ﻓــﻲ ‪ ٣‬ﺧﺎﻧــﺎت ﻋﺷ ـرّﻳﺔ ﻫــو ‪ ،٩٩٩‬أي ‪ ،١ - ١٠٠٠‬أي ‪ ،١ – ٣ ١٠‬وأﻗﺻــﻰ ﻋــدد‬
‫ﻳﻣﻛــن أن ﺗﺿــﻌﻪ ﻓــﻲ أرﺑــﻊ ﺧﺎﻧــﺎت ﻫــو ‪ ،٩٩٩٩ = ١ – ١٠٠٠٠ = ١ – ٤ ١٠‬وأﻗﺻــﻰ ﻋــدد ﺗﺿــﻌﻪ ﻓــﻲ )ن( ﻣــن‬
‫اﻟﺧﺎﻧﺎت ﻫو ‪ ١٠‬ن – ‪.١‬‬
‫ـﺎﺋﻳﺗﻳن ﻫـو )‪ ،١ – ٢ ٢ = ٣ = ٢(١١‬وأﻗﺻـﻰ ﻋـدد ﻳﻣﻛـن أن‬ ‫ﻓﺈن أﻗﺻـﻰ ﻋـدد ﻳﻣﻛـن وﺿـﻌﻪ ﻓـﻲ ﺧـﺎﻧﺗﻳن ﺛﻧ ّ‬
‫ﺑﺎﻟﻣﺛﻝ‪ّ ،‬‬
‫اﻟﻣﺗﻐﻳ ــر ﻣ ــن اﻟﻧ ــوع "وﺣ ــدة‬
‫ّ‬ ‫ﺗﺿ ــﻌﻪ ﻓ ــﻲ ‪ ٨‬ﺧﺎﻧ ــﺎت ﻫ ــو ‪) ٢٥٥ = ١- ٢٥٦ = ١ – ٨ ٢‬ﻫ ــذا ﻫ ــو اﻟﺳ ــﺑب ﻓ ــﻲ أن‬
‫اﻟذاﻛرة" ‪ Byte‬ﻳﻘﺑﻝ اﻷﻋداد ﻣن ‪ ٠‬ﺣﺗّـﻰ ‪ ..(٢٥٥‬وﻋﻣوﻣـﺎ‪ :‬أﻗﺻـﻰ ﻋـدد ﺗﺿـﻌﻪ ﻓـﻲ )ن( ﻣـن اﻟﺧﺎﻧـﺎت ﻫـو ‪ ٢‬ن –‬
‫‪.١‬‬

‫اﻷﻋداد اﻟﻣوﺟﺑﺔ واﻟﺳﺎﻟﺑﺔ‪:‬‬


‫ـﺎﺋﻲ‪ ،‬ﺑﺗﺧﺻــﻳص أﻗﺻـﻰ ﺧﺎﻧــﺔ ﻋﻠــﻰ اﻟﻳﺳــﺎر ﻟﻺﺷــﺎرة‪ ،‬ﻓﻠــو ﻛﺎﻧــت ﻗﻳﻣﺗﻬــﺎ‬ ‫ﻳﻣﻛـن ﺗﻣﺛﻳــﻝ اﻷﻋــداد اﻟﺳــﺎﻟﺑﺔ ﻓــﻲ اﻟﻧظــﺎم اﻟﺛﻧـ ّ‬
‫أن رﻗﻣــﺎ ﻣﺛــﻝ )‪ ٢(١١٠٠١‬ﻳﻣﻛــن أن ﻳﻣﺛّــﻝ‬ ‫ﺻــﻔ ار ﻛــﺎن اﻟﻌــدد ﻣوﺟﺑــﺎ‪ ،‬وﻟــو ﻛﺎﻧــت ﻗﻳﻣﺗﻬــﺎ ‪ ،١‬ﻛــﺎن اﻟﻌــدد ﺳــﺎﻟﺑﺎ‪ ..‬أي ّ‬
‫ﻛﻧـﺎ‬
‫إن ذﻟك ﻳرﺟﻊ ﻟطرﻳﻘﺔ ﺗﻌﺎﻣﻠك أﻧت ﻣﻊ اﻟﻌدد‪ ،‬وﻟـو ّ‬ ‫اﻟرﻗﻣﻳن اﻟﻌﺷرﻳﻳن ‪ ٢٥‬أو ‪ ..٩-‬ﻓﻛﻳف ﻳﻣﻛن اﻟﺗﻔرﻳق ﺑﻳﻧﻬﻣﺎ؟ ّ‬
‫ﻧﺳــﺗﺧدم إﺣــدى ﻟﻐــﺎت اﻟﺑرﻣﺟــﺔ ﻣﻧﺧﻔﺿــﺔ اﻟﻣﺳــﺗوى ‪ ،Low Level‬ﻟﻛﻧــت أرﻳﺗــك ﻛﻳــف ﺗُﺧﺑــر اﻟﻛﻣﺑﻳــوﺗر ﺑﻣ ارﻋــﺎة‬
‫ﺗﻬﻣﻧــﺎ ﻫﻧــﺎ‪ ،‬ﻓﺄﻧــت ﺗﺗﻌﺎﻣــﻝ ﻣــﻊ أﻋﻠــﻰ ﻟﻐــﺎت اﻟﺑرﻣﺟــﺔ‪ :‬ﻟﻐــﺔ‬
‫اﻹﺷــﺎرة أو ﻋــدم ﻣراﻋﺎﺗﻬــﺎ‪ ..‬وﻟﻛــن ﻛــﻝ ﻫــذﻩ اﻟﻣﺗﺎﻫــﺎت ﻻ ّ‬
‫اﻟﻣﺗﻐﻳــر ﻣــن اﻟﻧــوع ‪ Byte‬ﻳﺣﻣــﻝ ﻓﻘــط‬
‫ّ‬ ‫أن‬
‫‪ ،VB‬وﻫــﻲ ﺗﺗــوﻟّﻰ ﻋﻧــك ﻛــﻝ اﻟﻌﻣﻠﻳــﺎت اﻟﻣﻌﻘّــدة‪ .‬ﻳﻛﻔﻳــك ﻫﻧــﺎ أن ﺗﺗــذ ّﻛر‪ّ ،‬‬
‫أﻣــﺎ اﻟﻣﺗﻐﻳــر ﻣــن اﻟﻧــوع‬
‫أن أﻛﺑــر ﻋــدد ﻳﺳــﺗوﻋﺑﻪ ﻫــو ‪ّ ..٢٥٥‬‬
‫أﻋــدادا ﻣوﺟﺑــﺔ‪ ،‬ﻟﻬــذا ُﻳﻛﺗــب اﻟﻌــدد ﻓــﻲ ‪ ٨‬ﺧﺎﻧــﺎت‪ ،‬أي ّ‬
‫ﻣﺧﺻﺻﺔ ﻟﻺﺷﺎرة‪ ،‬وﺑﻬذا ُﻳﻛﺗب اﻟﻌـدد ﻓـﻲ‬
‫ّ‬ ‫أن ﻫﻧﺎك ﺧﺎﻧﺔ‬
‫ﻣﻣﺎ ﻳﻌﻧﻰ ّ‬
‫‪ ،SByte‬ﻓﻳﻣﻛن أن ﻳﺣﺗوي ﻋﻠﻰ أﻋداد ﺳﺎﻟﺑﺔ‪ّ ،‬‬
‫أن أﻛﺑر ﻋدد ﻳﺳﺗوﻋﺑﻪ ﻫو ‪.١٢٧ = ١ – ٧ ٢‬‬
‫‪ ٧‬ﺧﺎﻧﺎت ﻓﻘط‪ ،‬أي ّ‬
‫أن ﻫـذﻩ ﻫـﻲ اﻟطرﻳﻘـﺔ اﻟﺗـﻲ ﻳﺗﻌﺎﻣـﻝ ﺑﻬـﺎ اﻟﻛﻣﺑﻳـوﺗر ﻣـﻊ ﻛـ ّﻝ ﺷـﻲء‪ّ ..‬إﻧـﻪ ﻻ ﻳﻌـرف‬
‫ﻳﺟب أن ﺗﻼﺣظﻪ ﻫﻧـﺎ‪ ،‬ﻫـو ّ‬
‫أﻫم ﻣﺎ ُ‬
‫ّ‬
‫إن ‪ ٨‬ﺧﺎﻧـﺎت ّ‬
‫ﺛﻧﺎﺋﻳـﺔ ﺗﺣﺗـوي ﻛﻠّﻬـﺎ ﻋﻠـﻰ‬ ‫ﻳﺣوﻟﻬـﺎ إﻟـﻰ ﻣـدﻟوﻻت أﺧـرى ﻋﻠـﻰ ﺣﺳـب رﻏﺑﺎﺗﻧـﺎ ﻧﺣـن‪ّ ..‬‬ ‫وﻟﻛﻧﻪ ّ‬
‫ﻏﻳر اﻷرﻗﺎم‪ّ ،‬‬
‫اﻟرﻗم ‪ ٢(١١١١١١١١) ١‬ﺗﻌطﻳﻧﺎ اﻟرﻗم ‪ ٢٥٥‬ﻟـو اﻋﺗﺑرﻧﺎﻫـﺎ ﻣوﺟﺑـﺔ‪ ،‬و – ‪ ١٢٧‬ﻟـو اﻋﺗﺑرﻧﺎﻫـﺎ ﺳـﺎﻟﺑﺔ‪ ،‬واﻟﻠـون اﻷﺣﻣـر‬
‫ﻟــو اﻋﺗﺑرﻧﺎﻫــﺎ ﻟوﻧــﺎ‪ ،‬واﻟرﻣــز "‪ "ÿ‬ﻟــو اﻋﺗﺑرﻧﺎﻫــﺎ ﺣرﻓــﺎ‪ ،‬وﻧﻐﻣــﺔ ﻣــﺎ ﻟــو اﻋﺗﺑرﻧﺎﻫــﺎ ﺻــوﺗﺎ‪ .....‬وﻫﻛــذا‪ ..‬ﻛ ـ ّﻝ ﻣــﺎ ﻳﻔﻌﻠــﻪ‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪8‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫ـﻲء ﺑﺎﻟﻧﺳ ِ‬
‫ـﺑﺔ ﻟﻠﻛﻣﺑﻳـوﺗر‬ ‫اﻟﻛﻣﺑﻳوﺗر ﻫو أن ﻳﻧظر ﻓﻲ ﺟداوﻝ اﻟﺗﺣوﻳﻝ اﻟﻣﻧﺎﺳﺑﺔ‪ ،‬وﻳﻌرض ﻟﻧﺎ اﻟﻘﻳﻣﺔ اﻟﻧﺎظرة‪ ..‬إن ﻛـ ّﻝ ﺷ ٍ‬
‫ّ‬
‫اﻟﻣﺟردة اﻟﺗﻲ ﻳﺗﻌﺎﻣﻝ ﻣﻌﻬﺎ‪ ،‬ﻳﻣﻛن أن ﺗﻔﻌﻝ ﻛ ّﻝ ﺷﻲء‪ ..‬اﻟﻣﻬم‪ :‬ﻫو اﻟزاوﻳﺔ اﻟﺗﻲ ﺗﻧظر ﻟﻬﺎ ﻣﻧﻬﺎ‪.‬‬
‫ّ‬ ‫ﻧﺳﺑﻲ‪ ،‬ﻓﺎﻷرﻗﺎم‬
‫ّ‬

‫اﻟﺣﺳﺎﺑﻳﺔ‪:‬‬
‫ّ‬ ‫اﻟﻌﻣﻠﻳﺎت‬
‫ّ‬
‫أن اﻷﻣـر ﻓـﻲ ﻣﻧﺗﻬـﻰ اﻟﺑﺳـﺎطﺔ‪ ،‬ﻓﺄﻧـت ﺗﺟﻣـﻊ رﻗﻣـﻲ‬ ‫اﻟﺛﻧﺎﺋﻳـﺔ‪ ،‬ﻓﺳـﺗﺟد ّ‬
‫ّ‬ ‫ﻟو ﺣﺎوﻟـت إﺟـراء ﻋﻣﻠﻳـﺎت اﻟﺟﻣـﻊ ﻋﻠـﻰ اﻷﻋـداد‬
‫ﺧــﺎﻧﺗﻲ اﻵﺣ ــﺎد ﻓ ــﻲ اﻟﻌ ــددﻳن‪ ،‬وﺗﺣﻣ ــﻝ ﻣﻌ ــك اﻟﺑ ــﺎﻗﻲ ﻟﺗﺟﻣﻌ ــﻪ ﻋﻠ ــﻰ ﻧ ــﺎﺗﺞ ﺟﻣ ــﻊ رﻗﻣ ــﻲ ﺧ ــﺎﻧﺗﻲ اﻟﺛﻧﺎﺋﻳ ــﺎت‪ ،‬ﺛ ــم ﺧ ــﺎﻧﺗﻲ‬
‫ي‪ٕ ،‬وان ﻛﻧت ﻫﻧﺎ ﺳﺗﺻﺎدف ﺛﻼث ﺣﺎﻻت ﻓﺣﺳب‪:‬‬
‫اﻟرﺑﺎﻋﻳﺎت‪ ،‬وﻫﻛذا‪ .. ...‬ﻧﻔس ﻣﺎ ﺗﻔﻌﻠﻪ ﻓﻲ اﻟﻧظﺎم اﻟﻌﺷر ّ‬
‫‪ -١‬أن ﻳﻛون اﻟرﻗﻣﺎن ﺻﻔرﻳن‪ ،‬ﻓﻳﻛون ﻣﺟﻣوﻋﻬﻣﺎ ﺻﻔرا‪.‬‬
‫‪ -٢‬أن ﻳﻛون أﺣد اﻟرﻗﻣﻳن ‪ ١‬واﻵﺧر ﺻﻔرا‪ ،‬ﻓﻳﻛون ﻣﺟﻣوﻋﻬﻣﺎ ‪.١‬‬
‫‪ -٣‬أن ﻳﻛون ﻛﻼ اﻟرﻗﻣﻳن ‪ ،١‬ﻓﻳﻛون ﻣﺟﻣوﻋﻬﻣﺎ ‪ ،٠‬واﻟﺑﺎﻗﻲ واﺣد‪.‬‬
‫طﺑﻌـﺎ اﻟﺣﺎﻟـﺔ اﻷﺧﻳـرة ﻫـﻲ اﻟﺗــﻲ ﺳـﺗُرﺑﻛك‪ ..‬ﻧﻔــس ﻣـﺎ ﺣـدث ﻟــك ﻋﻧـدﻣﺎ ﺗﻌﻠّﻣــت أن ﺟﻣـﻊ ‪ ٠ = ١ + ٩‬واﻟﺑــﺎﻗﻲ ‪) ١‬أي‬
‫= )‪ ..٢(١٠‬ﻛـﻝ ﻣـﺎ ﻳﺣـدث ﻫـو ّأﻧـك ﻋﻧـدﻣﺎ ﺗﺗﺟـﺎوز أﻗﺻـﻰ رﻗـم ﻓـﻲ اﻟﻧظـﺎم )‪٩‬‬ ‫)‪١٠(٢‬‬
‫ﻓﺈن ‪= ١+١‬‬ ‫‪ ..(١٠‬ﺑﺎﻟﻣﺛﻝ‪ّ ،‬‬
‫ﻓﻲ اﻟﻌﺷري ‪ ،‬و ‪ ١‬ﻓﻲ اﻟﺛﻧﺎﺋﻲ(‪ ،‬ﺗﻧﺗﻘﻝ إﻟﻰ اﻟﺧﺎﻧﺔ اﻟﺗﺎﻟﻳﺔ وﻣﻌك اﻟﺑﺎﻗﻲ!‬
‫ﻓﻠﻧر ﻣﺛﺎﻻ ﻟﻠﺟﻣﻊ‪:‬‬
‫َ‬
‫‪١٠٠٠١١١‬‬
‫‪١١٠٠ +‬‬
‫ـــ‬
‫‪١٠١٠٠١١‬‬
‫ـﺎﺑﻳﺔ‪ ،‬ﻛـﺎﻟطرح واﻟﺿـرب واﻟﻘﺳـﻣﺔ‪ ،‬ﻓﻬـﻲ ﻛﻣـﺎ ﻗﻠﻧـﺎ‪ ،‬ﻣﻣﺎﺛﻠـﺔ ﺗﻣﺎﻣـﺎ ﻟﻣﺛﻳﻼﺗﻬـﺎ‬
‫وﺑﺎﻟﻣﺛﻝ‪ ،‬ﻳﻣﻛن إﺟـراء ﺑـﺎﻗﻲ اﻟﻌﻣﻠﻳـﺎت اﻟﺣﺳ ّ‬
‫ﻷن اﻟﺗطﺑﻳﻘــﺎت اﻟﺗــﻲ ﺗﺑﻧﻳﻬــﺎ ﻻ ﺗﺳــﺗﺧدم اﻟﺣﺳــﺎﺑﺎت‬
‫ـﺎﺑﻳﺔ‪ّ ،‬‬
‫وﻟﻛﻧﻧــﺎ ﻟــن ﻧرّﻛــز ﻋﻠــﻰ اﻟﻌﻣﻠﻳــﺎت اﻟﺣﺳـ ّ‬
‫ي‪ّ .‬‬ ‫ﻓــﻲ اﻟﻧظــﺎم اﻟﻌﺷــر ّ‬
‫اﻟﻣﻧطﻘﻳ ــﺔ‪ ،‬ﻓﻛﺛﻳـ ـ ار ﻣ ــﺎ ﺳ ــﺗﺣﺗﺎﺟﻬﺎ ﻓ ــﻲ‬
‫ّ‬ ‫اﻟﻌﻣﻠﻳ ــﺎت‬
‫ّ‬ ‫ﻳﻬﻣﻧ ــﺎ ﻫﻧ ــﺎ ﻫ ــو‬
‫إن اﻟ ــذي ّ‬
‫ي‪ّ .‬‬
‫اﻟﺛﻧﺎﺋﻳ ــﺔ‪ٕ ،‬واّﻧﻣ ــﺎ ﺗﺳ ــﺗﺧدم اﻟﻧظ ــﺎم اﻟﻌﺷ ــر ّ‬
‫ّ‬
‫ﺑراﻣﺟك‪.‬‬

‫اﻟﻣﻧطﻘﻳﺔ‬
‫ّ‬ ‫اﻟﻌﻣﻠﻳﺎت‬
‫ّ‬
‫"ﻟﻳس" ‪:NOT‬‬
‫اﻟﻣﺗﻐﻳر اﻟذي ﺗُﺟـرى ﻋﻠﻳـﻪ‪ ،‬ﻣـن ﺻـواب ﻟﺧطـﺈ واﻟﻌﻛـس‪..‬‬
‫ّ‬ ‫اﻟﻌﻣﻠﻳﺔ ﺗﻌﻛس ﻗﻳﻣﺔ‬
‫ّ‬ ‫ﻓﺈن ﻫذﻩ‬
‫اﻟﻣﻧطﻘﻳﺔ‪ّ ،‬‬
‫ّ‬ ‫ﻟﻠﻣﺗﻐﻳرات‬
‫ّ‬ ‫ﺑﺎﻟﻧﺳﺑﺔ‬
‫واﻟﺟﻣﻠﺔ اﻟﺗﺎﻟﻳﺔ ﺗُرﻳك ﻣﺛﺎﻻ ﻟﻬذا‪:‬‬
‫‪Failure = Not Failure‬‬
‫وﻫﻲ طرﻳﻘﺔ ﻣﺧﺗﺻرة ﻟﻠطرﻳﻘﺔ اﻟﺗﺎﻟﻳﺔ‪:‬‬
‫‪If Failure = True Then‬‬
‫‪Failure = False‬‬
‫‪Else‬‬
‫‪Failure = True‬‬
‫‪End If‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪9‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫اﻟﺛﻧﺎﺋﻳـﺔ‪ ،‬ﻟﻌﻛـس ﻛـﻝ ﺻـﻔر‬


‫ّ‬ ‫وﻟﻳﺳت ﻫذﻩ ﻫﻲ اﻟوظﻳﻔﺔ اﻟوﺣﻳدة ﻟﻌﻣﻠﻳﺔ "ﻟﻳس" ‪ ،NOT‬إذ ﻳﻣﻛـن اﺳـﺗﺧداﻣﻬﺎ ﻣـﻊ اﻷرﻗـﺎم‬
‫إﻟـﻰ واﺣـد‪ ،‬وﻛـﻝ واﺣـد إﻟـﻰ ﺻـﻔر )ﻳﺳـﻣﻰ ﻫـذا ‪ ،(Bitwise Operation‬ﺑﺣﻳـث ﻟـو ﺟﻣﻌـت اﻟﻌـدد وﻣﻌﻛوﺳـﻪ‪ ،‬ﻳﻧـﺗﺞ‬
‫ﺗﺗﻛون ﻛﻝ ﺧﺎﻧﺎﺗﻪ ﻣن اﻟرﻗم ‪ ..١‬ﻓﻠو ﺟرﺑت ﻫذا اﻟﻣﺛﺎﻝ‪:‬‬
‫ﻋدد ّ‬
‫‪Dim X As Byte = 5‬‬
‫)‪MsgBox (NOT X‬‬
‫اﻟﺛﻧﺎﺋﻳﺔ‪.‬‬
‫ّ‬ ‫ﺗﻌﺎﻝ ﻧﻣﺛّﻝ اﻟرﻗم ‪ ٥‬ﺑﺎﻟطرﻳﻘﺔ‬
‫ﻟظﻬرت ﻟك رﺳﺎﻟﺔ ﺗﻌرض اﻟرﻗم ‪ ..٢٥٠‬ﻫﻝ أدﻫﺷك اﻟرﻗم؟ ﻓﻲ اﻟﺑداﻳﺔ َ‬
‫)‪.٢(١٠١) = ٢ ٢ × ١ + ١ ٢ × ٠ + ٠ ٢ × ١ = ٤ + ١ = ١٠(٥‬‬
‫وﺑﻬذا ﻳﻛون اﻟﻣﻌﻛوس ﻫو )‪.١٠(٢) = ٢(٠١٠‬‬
‫اﻟﻣﺗﻐﻳــر ‪ُ Byte‬ﻳﻣﺛّـﻝ ﻓــﻲ اﻟــذاﻛرة ﺑﺛﻣﺎﻧﻳـﺔ ﺧﺎﻧــﺎت‪ ،‬ﻟﻬــذا ﻳﺟـب أن ﻧﺿــﻊ ﺧﻣﺳــﺔ‬
‫ّ‬ ‫إن‬
‫ﻓﻣـن أﻳــن أﺗـت اﻟﻘﻳﻣــﺔ ‪ ٢٥٠‬إذن؟ ّ‬
‫ي‪ ،‬ﻻ ﻳـؤﺛّر وﺿـﻊ ﺻـﻔر ﻋﻠـﻰ اﻟﻳﺳـﺎر ﻓـﻲ ﻗﻳﻣـﺔ اﻟـرﻗم‪،‬‬ ‫أﺻﻔﺎر ﻋﻠﻰ ﻳﺳﺎر اﻟﺗﺣوﻳﻝ اﻟﺳﺎﺑق‪ ..‬وﻛﻣﺎ ﻓﻲ اﻟﻧظﺎم اﻟﻌﺷـر ّ‬
‫ﻣﻣﺎ ﺳﻳﻛون ﻟﻪ أﻛﺑر اﻷﺛر‪:‬‬
‫ﺳﻳﺗﺣوﻝ ﻛ ّﻝ ﺻﻔر إﻟﻰ ‪ّ ،١‬‬
‫ّ‬ ‫وﻟﻛن ﻋﻧد ﻋﻛس اﻟرﻗم‪،‬‬
‫)‪.٢(٠٠٠٠٠١٠١) = ١٠(٥‬‬
‫وﺑﻬذا ﻳﻛون اﻟﻣﻌﻛوس ﻫو )‪.١٠(٢٥٠) = ١٢٨ + ٦٤ + ٣٢ + ١٦ + ٨ + ٢ = ٢(١١١١١٠١٠‬‬
‫اﻟﻣﺗﻐﻳـر ﻣـن‬
‫ّ‬ ‫وﻟو ﺟﻣﻌﻧﺎ اﻟرﻗم وﻣﻌﻛوﺳﻪ‪ ،‬ﻟﻧﺗﺞ ﻟﻧﺎ اﻟرﻗم )‪ ،٢(١١١١١١١١‬اﻟذي ﻳﻣﺛّـﻝ أﻗﺻـﻰ ﻋـدد ﻳﻣﻛـن أن ﻳﺣﻣﻠـﻪ‬
‫اﻟﻧوع ‪ ،Byte‬وﻫو ‪ .٢٥٥‬إذن ﻳﻣﻛن اﺳﺗﻧﺗﺎج ﻣﺎ ﻳﻠﻲ‪:‬‬
‫اﻟﺣﺎﻟﻳﺔ‪.‬‬
‫ّ‬ ‫اﻟﻣﺗﻐﻳر‬
‫ّ‬ ‫اﻟﻣﺗﻐﻳر – ﻗﻳﻣﺔ‬
‫ّ‬ ‫ﻣﻛوس اﻟﻣﺗﻐﻳر = أﻗﺻﻰ ﻋدد ﻳﻣﻛن أن ﻳﺣﻣﻠﻪ‬
‫ي‬
‫وﺑﻧــﺎء ﻋﻠ ــﻰ ﻫــذا‪ ،‬ﻛ ــﺎن ﻣ ــن اﻟﻣﻣﻛــن ﺣﺳ ــﺎب ﻧــﺎﺗﺞ اﻟﻌﻣﻠﻳ ــﺔ اﻟﺳ ــﺎﺑﻘﺔ ﻣﺑﺎﺷـ ـرة‪ ،‬دون اﻟﺗﺣوﻳ ــﻝ ﺑــﻳن اﻟﻧظ ــﺎﻣﻳن اﻟﻌﺷ ــر ّ‬
‫اﻟﺛﻧﺎﺋﻲ‪ ،‬وذﻟك ﻛﺎﻟﺗﺎﻟﻲ‪:‬‬
‫ّ‬ ‫و‬
‫ﻟﻳس )‪.٢٥٠ = ٥ – ٢٥٥ = (٥‬‬
‫ﻟﻬذا ﻳﺳﻣﻰ ﻣﻌﻛوس اﻟرﻗم ﺑـ "ﻣراﻓق اﻟرﻗم" ‪.Complement‬‬
‫"و" ‪:AND‬‬
‫ـﺎﻝ‬
‫اﻷوﻝ )و( اﻟﺛــﺎﻧﻲ‪ ..‬ﺧــذ ﻫــذا اﻟﻣﺛـ َ‬
‫ﻣﻧطﻘﻳــﻳن‪ ،‬ﻟﻠﺗﺄ ّﻛــد ﻣــن ﺣــدوث ﻛﻠﻳﻬﻣــﺎ ﻣﻌــﺎ‪ّ :‬‬
‫ّ‬ ‫ﻣﺗﻐﻳـرﻳن‬
‫ّ‬ ‫ﺗﺳــﺗﺧدم ﻫــذﻩ اﻟﻌﻣﻠﻳــﺔ ﻣــﻊ‬
‫ﻟﻠﺗوﺿﻳﺢ‪:‬‬
‫ﺧﻔﻰ ‪:Hidden‬‬ ‫اﻓﺗرض ّأﻧك ﺗرﻳد ﻓﺗﺢ ﻣﻠف‪ ..‬ﻳﺟب أن ﺗﺗﺄ ّﻛد أوﻻ ّأﻧﻪ ﻟﻳس ﻟﻠﻘراءة ﻓﻘط ‪ ReadOnly‬وﻟﻳس ُﻣ ً‬
‫‪If ReadOnly = False AND Hidden = False Then‬‬
‫} اﻟﻛود اﻟﻣﻧﺎﺳب ﻟﻔﺗﺢ اﻟﻣﻠف {‬
‫‪Else‬‬
‫)"ﻻ ﻳﻣﻛن ﻓﺗﺢ اﻟﻣﻠف إذا ﻛﺎن ﻟﻠﻘراءة ﻓﻘط أو ُﻣﺧﻔﻰ"(‪MsgBox‬‬
‫‪End If‬‬
‫ﻻﺣ ـ ـظّ أن ‪ And‬ﻻ ﺗ ـ ـرﺑط ﻓﻘـ ــط ﺑـ ــﻳن ﻣﺗﻐﻳ ـ ـرﻳن‪ ،‬ﺑـ ــﻝ ﻳﻣﻛـ ــن أن ﺗ ـ ـرﺑط ﻛـ ــذﻟك ﺑـ ــﻳن ﺷـ ــرطﻳن‪ ،‬ﻓﻔـ ــﻲ اﻟﻣﺛـ ــﺎﻝ اﻟﺳـ ــﺎﺑق‪،‬‬
‫‪ ReadOnly = False‬ﻫﻲ ﺟﻣﻠﺔ ﺷرط‪ ،‬و ‪ Hidden = False‬ﻫﻲ ﺟﻣﻠﺔ ﺷرط أﺧرى‪.‬‬

‫اﻟﺛﻧﺎﺋﻳﺔ؟‬
‫ّ‬ ‫وﻟﻛن ﻣﺎذا ﻋن اﺳﺗﺧدام ‪ AND‬ﻣﻊ اﻷﻋداد‬
‫اﻟﻌﻣﻠﻳﺔ ﻋﻧد ﺗطﺑﻳﻘﻬﺎ ﻋﻠﻰ ﺧﺎﻧﺗﻳن‪:‬‬
‫ّ‬ ‫ﻳوﺿﺢ ﻟﻧﺎ وظﻳﻔﺔ ﻫذﻩ‬
‫اﻟﺟدوﻝ اﻵﺗﻲ ّ‬
‫أوب‬ ‫ب‬ ‫أ‬
‫‪٠‬‬ ‫‪٠‬‬ ‫‪٠‬‬
‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬
‫‪10‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫‪٠‬‬ ‫‪٠‬‬ ‫‪١‬‬


‫‪٠‬‬ ‫‪١‬‬ ‫‪٠‬‬
‫‪١‬‬ ‫‪١‬‬ ‫‪١‬‬

‫أن ﻧﺎﺗﺞ ﻋﻣﻠﻳﺔ "و" ﻋﻠـﻰ رﻗﻣـﻳن ﻓـﻲ ﺧـﺎﻧﺗﻳن ﻣﺗﻧـﺎظرﺗﻳن ﻣـن ﻋـددﻳن‪ ،‬ﻫـو ﺻـﻔر داﺋﻣـﺎ‪ ،‬إﻻ إذا ﻛـﺎن ﻛـﻼ اﻟـرﻗﻣﻳن‬
‫أي ّ‬
‫ﺟرب ﻫذا اﻟﻣﺛﺎﻝ‪:‬‬
‫ﻣﻌﺎ ‪ّ ..١‬‬
‫‪Dim A As Byte = 5 , B As Byte = 34‬‬
‫)‪MsgBox (A AND B‬‬
‫ﻓﻲ اﻟﺑداﻳﺔ ﺗﻌﺎﻝ ﻧﺣوﻝ اﻟﻌددﻳن ﻟﻠﻧظﺎم اﻟﺛﻧﺎﺋﻲ‪:‬‬
‫‪.٢(٠٠٠٠٠١٠١) = ٥‬‬
‫‪= ٥ ٢ × ١ + ٤ ٢ × ٠ + ٣ ٢ × ٠ + ٢ ٢ × ٠ + ١ ٢ × ١ + ٠ ٢ × ٠ = ٣٢ + ٢ = ٣٤‬‬
‫)‪.٢(٠٠١٠٠٠١٠‬‬
‫اﻷوﻝ ﻓ ــﻲ اﻟﺧــﺎﻧﺗﻳن اﻷوﻟ ــﻰ واﻟﺛﺎﻟﺛ ــﺔ ﻓﻘــط‪ ،‬ﺑﻳﻧﻣ ــﺎ ﻳﻧ ــﺎظرﻩ اﻟــرﻗم ‪ ٠‬ﻓ ــﻲ ﻫ ــﺎﺗﻳن‬
‫أن اﻟ ــرﻗم ا ﻣوﺟ ــود ﻓــﻲ اﻟﻌ ــدد ّ‬
‫ﺗﻼﺣــظ ّ‬
‫اﻟﺧــﺎﻧﺗﻳن ﻓــﻲ اﻟﻌــدد اﻟﺛــﺎﻧﻲ‪ ..‬إذن ﻛــﻝ اﻟﺧﺎﻧــﺎت اﻟﻧﺎﺗﺟــﺔ ﻋــن ﻋﻣﻠﻳــﺔ "و" ﺳــﺗﻛون أﺻــﻔﺎرا‪ ..‬ﻟﻬــذا ﺳــﺗظﻬر ﻟــك اﻟرﺳــﺎﻟﺔ‬
‫وﻋﻠﻳﻬﺎ اﻟرﻗم ‪.٠‬‬

‫اﻟﻌﻣﻠﻳﺔ‪:‬‬
‫ّ‬ ‫أﻫم ﺧواص ﻫذﻩ‬
‫و ّ‬
‫‪ -١‬أ و أ = أ‪.‬‬
‫‪ - ٢‬أ و ‪.٠ = ٠‬‬
‫‪ -٣‬أ و ‪ = ١‬أ‪.‬‬
‫‪ -٤‬أ و ﻟﻳس أ = ‪) ٠‬ﻻ ﻳﻣﻛن أن ﻳﺟﺗﻣﻊ اﻟﺷﻲء وﻋﻛﺳﻪ‪ ..‬ﻫذا ﺷرط ﺧﺎطﺊ داﺋﻣﺎ(‪.‬‬
‫"أو" ‪:OR‬‬
‫اﻷوﻝ )أو( اﻟﺛـﺎﻧﻲ )أو( ﻛﻠﻳﻬﻣـﺎ‬
‫ﻣﻧطﻘﻳﻳن‪ ،‬ﻟﻠﺗﺄ ّﻛد ﻣن ﺣدوث أﺣدﻫﻣﺎ ﻋﻠـﻰ اﻷﻗـﻝ‪ّ :‬‬
‫ّ‬ ‫ﻣﺗﻐﻳرﻳن‬
‫ّ‬ ‫ﺗﺳﺗﺧدم ﻫذﻩ اﻟﻌﻣﻠﻳﺔ ﻣﻊ‬
‫اﻟﻣﺛﺎﻝ ﻟﻠﺗوﺿﻳﺢ‪:‬‬
‫َ‬ ‫ﻣﻌﺎ‪ ..‬ﺧذ ﻫذا‬
‫‪If ReadOnly Or Hidden Then‬‬
‫)"ﻻ ﻳﻣﻛن ﻓﺗﺢ اﻟﻣﻠف إذا ﻛﺎن ﻟﻠﻘراءة ﻓﻘط أو ُﻣﺧﻔﻰ"(‪MsgBox‬‬
‫اﻟﻣﻠف ﻟﻳس ﻣﺧﻔﻰ وﻟﻳس ﻟﻠﻘراءة ﻓﻘط ' ‪Else‬‬
‫} اﻟﻛود اﻟﻣﻧﺎﺳب ﻟﻔﺗﺢ اﻟﻣﻠف {‬
‫‪End If‬‬
‫ـف إذا ﻟـــم ﻳﻛــن )ﻟﻠﻘــراءة ﻓﻘــط‪ ،‬أو‬
‫وﻳﻣﻛــن إﻳﺟــﺎد ﺻــﻳﻐﺔ أﺧــرى ﻟﻠﻛــود اﻟﺳــﺎﺑق‪ ،‬ﺑﺎﺳــﺗﺧدام ‪ ،NOT‬ﻓﻧﻘــوم ﺑﻔــﺗﺢ اﻟﻣﻠـ ّ‬
‫ﻣﺧﻔﻰ(‪:‬‬
‫‪If Not (ReadOnly or Hidden) Then‬‬
‫} اﻟﻛود اﻟﻣﻧﺎﺳب ﻟﻔﺗﺢ اﻟﻣﻠف {‬
‫‪Else‬‬
‫)"ﻻ ﻳﻣﻛن ﻓﺗﺢ اﻟﻣﻠف إذا ﻛﺎن ﻟﻠﻘراءة ﻓﻘط أو ُﻣﺧﻔﻰ"(‪MsgBox‬‬
‫‪End If‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪11‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫أن اﻟﻧﻔﻲ ﻳﺷﻣﻝ ﻧـﺎﺗﺞ ﻛـﻝ ﻣـﺎ ﺑـﻳن اﻟﻘوﺳـﻳن‪ ،‬ﻓﻣـﺛﻼ ﻟـو ﻛـﺎن اﻟﻣﻠـف ﻟﻠﻘـراءة ﻓﻘـط ‪ ،ReadOnly = True‬ﻟﻛـﺎن‬
‫ﻻﺣظ ّ‬
‫ـﺗم‬
‫ـﺎﺋﻲ ‪ ..False‬إذن ﻓﻠـن ﻳ ّ‬
‫ﻧﺎﺗﺞ ﻋﻣﻠﻳﺔ "أو" ﻫـو ‪ ،True‬ﺣﻳـث ﺳـﺗﺗم ﻋﻠﻳـﻪ ﻋﻣﻠﻳـﺔ اﻟﻧﻔـﻲ ‪ ،NOT‬ﻟﻳﺻـﺑﺢ اﻟﻧـﺎﺗﺞ اﻟﻧﻬ ّ‬
‫ﻷن اﻟﺷــرط ﺧطــﺄ‪ ،‬وﺳــﻳﻧﻔّذ اﻟﺑرﻧــﺎﻣﺞ اﻟﺣﺎﻟــﺔ اﻷﺧــرى ‪ .Else‬وﻣــﺎ ازﻟــت ﻫﻧــﺎك طرﻳﻘــﺔ ﺛﺎﻟﺛــﺔ ﻟﺗﻧﻔﻳــذ‬‫ﺗﻧﻔﻳــذ ﺟﻣﻠــﺔ اﻟﺷــرط‪ّ ،‬‬
‫ﺣدي ﻋﻣﻠﻳﺔ ‪ Or‬ﻣﻊ ﻋﻛس اﻟﻣﻌﺎﻣـﻝ ‪ Or‬ﻧﻔﺳـﻪ‪..‬‬ ‫ك اﻟﻘوس‪ ،‬ﺑﺈدﺧﺎﻝ ‪ NOT‬ﻋﻠﻰ ّ‬ ‫ﻧﻔس اﻟﺑرﻧﺎﻣﺞ‪ ،‬ﺣﻳث ﻳﻣﻛﻧﻧﺎ أن ﻧﻔ ّ‬
‫ﺗﻌﺎﻝ ﻧﺳﺗﻧﺗﺟﻬﺎ‪:‬‬
‫وﻟﻛن ﻣﺎ ﻫو ﻋﻛس ‪Or‬؟‪َ ..‬‬
‫ﻟو ﻗﻠت‪ :‬ﻟم ﻳﺄت )ﻣﺣﻣد أو أﺣﻣد(‪ ،‬ﻓﺄﻧت ﺗﻌﻧﻲ أن اﻻﺛﻧﻳن ﻣﻌﺎ ﻟم ﻳﺄﺗﻳـﺎ ﺑﻌـد‪ ..‬وﻳﻣﻛـن أن ﺗﻘـوﻝ ﻫـذﻩ اﻟﺟﻣﻠـﺔ ﺑطرﻳﻘـﺔ‬
‫أن ﻧﻔﻲ ‪ AND‬ﻫو ‪.Or‬‬ ‫ِ‬
‫أﺧري ﻛﺎﻟﺗﺎﻟﻲ‪ :‬ﻟم ﻳﺄت ﻣﺣﻣد و ﻟم ﻳﺄت أﺣﻣد‪ .‬إذن ﻓﻧﻔﻲ ‪ OR‬ﻫو ‪ ،AND‬ﻛﻣﺎ ّ‬
‫إذن‪ :‬ﻟﻳس )ﻟﻠﻘراءة ﻓﻘط أو ﻣﺧﻔﻰ( = ﻟﻳس ﻟﻠﻘراءة ﻓﻘط وﻟﻳس ﻣﺧﻔﻰ‪:‬‬
‫‪If Not ReadOnly And Not Hidden Then‬‬
‫} اﻟﻛود اﻟﻣﻧﺎﺳب ﻟﻔﺗﺢ اﻟﻣﻠف {‬
‫‪Else‬‬
‫)"ﻻ ﻳﻣﻛن ﻓﺗﺢ اﻟﻣﻠف إذا ﻛﺎن ﻟﻠﻘراءة ﻓﻘط أو ُﻣﺧﻔﻰ"(‪MsgBox‬‬
‫‪End If‬‬
‫اﻟﺛﻧﺎﺋﻳﺔ؟‬
‫ّ‬ ‫وﻟﻛن ﻣﺎذا ﻋن اﺳﺗﺧدام ‪ OR‬ﻣﻊ اﻷﻋداد‬
‫اﻟﻌﻣﻠﻳﺔ ﻋﻧد ﺗطﺑﻳﻘﻬﺎ ﻋﻠﻰ ﺧﺎﻧﺗﻳن‪:‬‬
‫ّ‬ ‫ﻳوﺿﺢ ﻟﻧﺎ وظﻳﻔﺔ ﻫذﻩ‬
‫اﻟﺟدوﻝ اﻵﺗﻲ ّ‬
‫أ أو ب‬ ‫ب‬ ‫أ‬
‫‪٠‬‬ ‫‪٠‬‬ ‫‪٠‬‬
‫‪١‬‬ ‫‪٠‬‬ ‫‪١‬‬
‫‪١‬‬ ‫‪١‬‬ ‫‪٠‬‬
‫‪١‬‬ ‫‪١‬‬ ‫‪١‬‬
‫أن ﻧﺎﺗﺞ ﻋﻣﻠﻳﺔ "أو" ﻋﻠﻰ رﻗﻣﻳن ﻓﻲ ﺧﺎﻧﺗﻳن ﻣﺗﻧﺎظرﺗﻳن ﻣن ﻋـددﻳن‪ ،‬ﻫـو ‪ ١‬داﺋﻣـﺎ‪ ،‬إﻻ إذا ﻛـﺎن ﻛـﻼ اﻟـرﻗﻣﻳن ﻣﻌـﺎ‬
‫أي ّ‬
‫ﺟرب ﻫذا اﻟﻣﺛﺎﻝ‪:‬‬
‫ﺻﻔرا‪ّ ..‬‬
‫‪Dim A As Byte = 5 , B As Byte = 34‬‬
‫)‪MsgBox (A Or B‬‬
‫‪.٢(٠٠٠٠٠١٠١) = ٥‬‬
‫‪.٢(٠٠١٠٠٠١٠) = ٣٤‬‬
‫واﻟﻧﺎﺗﺞ = )‪.٣٩ = ٣٢ +٤ + ٢ + ١ = ٢(٠٠١٠٠١١١‬‬
‫وﻫو اﻟرﻗم اﻟذي ﺳﻳﻌرﺿﻪ ﻟك اﻟرﺳﺎﻟﺔ‪.‬‬
‫ﺗﻼﺣــظ أن اﻟﻧــﺎﺗﺞ ‪ ..٣٤ + ٥ = ٣٩‬ﻻ ﺗﺟﻌــﻝ ذﻟــك ﻳﺧــدﻋك‪ ،‬ﻓﻌﻣﻠﻳــﺔ "أو" ﻟﻳﺳــت ﻋﻣﻠﻳــﺔ ﺟﻣــﻊ‪ ،‬واﻟــذي ﺟﻌﻠﻬــﺎ ﺗﺑــدو‬
‫أن ﻣوﺿﻊ اﻟرﻗم ‪ ١‬ﻏﻳر ﻣﺗﻧﺎظر ﻓﻲ اﻟﻌددﻳن‪ ،‬وﻟو ﻧﻔّذت اﻟﻛود اﻟﺗﺎﻟﻲ ﻟﻔﻬﻣت ﻣﺎ أﻋﻧﻳﻪ‪:‬‬
‫ﻛذﻟك ﻫﻧﺎ‪ ،‬ﻫو ّ‬
‫‪Dim A As Byte = 6 , B As Byte = 34‬‬
‫)‪MsgBox (A OR B‬‬
‫أن ﻧﺎﺗﺞ ﺟﻣﻊ ) ‪ (٣٤ + ٦‬ﻫو ‪.٤٠‬‬ ‫ﺣﻳث ﺳﺗﺟد أن اﻟرﺳﺎﻟﺔ ﺗﻌرض ﻟك اﻟرﻗم ‪ ،٣٨‬ﺑﻳﻧﻣﺎ ّ‬
‫اﻟﻌﻣﻠﻳﺔ‪:‬‬
‫ّ‬ ‫أﻫم ﺧواص ﻫذﻩ‬‫و ّ‬
‫ا‪ -‬أ أو أ = أ‪.‬‬
‫‪ -٢‬أ أو ‪ = ٠‬أ‪.‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪12‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫‪ -٣‬أ أو ‪.١ = ١‬‬


‫‪ – ٤‬أ أو ﻟﻳس أ = ‪) ١‬اﻟﺷﻲء أو ﻋﻛﺳﻪ‪ ..‬ﻫذا ﺷرط ﺻﺣﻳﺢ داﺋﻣﺎ(‪.‬‬
‫"أو اﻟﻣﻘﺻورة" ‪:XOR‬‬
‫أي‬
‫اﻷﺳﺎﺳﻳﺔ اﻟﺗـﻲ ﻳﻣﻛـن ﻋـن طرﻳﻘﻬـﺎ اﺷـﺗﻘﺎق ّ‬
‫ّ‬ ‫اﻟﻌﻣﻠﻳﺎت‬
‫ّ‬ ‫إن اﻟﻌﻣﻠﻳﺎت اﻟﺛﻼث اﻟﺳﺎﺑﻘﺔ ‪ NOT‬و ‪ OR‬و ‪ AND‬ﻫﻲ‬
‫أي‬
‫ـﺎﺑﻳﺔ )ﻛـﺎﻟﺟﻣﻊ واﻟطـرح واﻟﺿـرب واﻟﻘﺳـﻣﺔ(‪ ،‬و ّ‬
‫ﻣﻧطﻘﻳﺔ ﻷﺧرى‪ ..‬ﺑﻝ وﻣﻧﻬﺎ ﻳﻣﻛن اﺷﺗﻘﺎق ﻛ ّﻝ اﻟﻌﻣﻠﻳـﺎت اﻟﺣﺳ ّ‬
‫ّ‬ ‫ﻋﻣﻠﻳﺔ‬
‫ّ‬
‫اﻟﻌﻣﻠﻳـﺎت‬
‫ّ‬ ‫ـﺗم ﺗﻣﺛﻳـﻝ ﻛـ ّﻝ اﻟوظـﺎﺋف ﺑﺎﺳـﺗﺧدام ﻫـذﻩ‬
‫داﻟﺔ أﺧرى‪ ..‬وﻫذﻩ ﻫـﻲ اﻟطرﻳﻘـﺔ اﻟﺗـﻲ ﻳﻌﻣـﻝ ﺑﻬـﺎ اﻟﻛﻣﺑﻳـوﺗر‪ ،‬ﺣﻳـث ﻳ ّ‬
‫وﻟﻛن ﺷرح ﻫذا ﺧﺎرج ﻋن ﻧطﺎﻗﻧﺎ اﻵن‪.‬‬ ‫اﻟﻣﻧطﻘﻳﺔ‪ّ ..‬‬
‫ّ‬
‫اﻟﻌﻣﻠﻳﺔ ‪ ،XOR‬ووظﻳﻔﺗﻬﺎ ﻛﺎﻟﺗﺎﻟﻲ‪:‬‬
‫ّ‬ ‫ﺣﻳوﻳﺔ ﻟﻠﻐﺎﻳﺔ‪،‬‬
‫اﻟﻌﻣﻠﻳﺎت اﻟﺗﻲ ﻳﻣﻛن اﺷﺗﻘﺎﻗﻬﺎ‪ ،‬وﺗﻌﺗﺑر ّ‬
‫ّ‬ ‫وﻣن‬
‫‪A XOR B = (A AND NOT B) OR (B AND NOT A).‬‬
‫أ ‪ XOR‬ب = )أ وﻟﻳس ب( أو )ب وﻟﻳس أ(‪.‬‬
‫ﻳﺑﻳن وظﻳﻔﺗﻬﺎ‪:‬‬
‫واﻟﺟدوﻝ اﻟﺗﺎﻟﻲ ّ‬

‫أ ‪ XOR‬ب‬ ‫ب‬ ‫أ‬


‫‪٠‬‬ ‫‪٠‬‬ ‫‪٠‬‬
‫‪١‬‬ ‫‪٠‬‬ ‫‪١‬‬
‫‪١‬‬ ‫‪١‬‬ ‫‪٠‬‬
‫‪٠‬‬ ‫‪١‬‬ ‫‪١‬‬

‫اﻟﻌﻣﻠﻳﺔ‪:‬‬
‫ّ‬ ‫أﻫم ﺧواص ﻫذﻩ‬
‫و ّ‬
‫‪ -١‬أ ‪ XOR‬أ = ‪.٠‬‬
‫‪ -٢‬أ ‪ = ٠ XOR‬أ‪.‬‬
‫)‪.(A XOR 1 = NOT A‬‬ ‫‪ -٣‬أ ‪ = ١ XOR‬ﻟﻳس أ‬
‫‪ -٤‬أ ‪ XOR‬ﻟﻳس أ = ‪.١‬‬

‫ﺗﻛوﻳن اﻷﻗﻧﻌﺔ ‪:Masking‬‬


‫ﺷرات ‪ Flags‬واﻷﻗﻧﻌﺔ ‪:Masks‬‬
‫اﻟﻣؤ ّ‬
‫ﻛﺛﻳـ ار ﻣــﺎ ﻧﺳــﺗﺧدم ﻣﺗﻐﻳـ ار واﺣــدا ﻟﺗﺧـزﻳن ﻣﻌﻠوﻣـ ٍ‬
‫ـﺎت ﻋــن ﺣﺎﻟــﺔ اﻟﻌدﻳــد ﻣــن اﻷﺷــﻳﺎء‪ ،‬إذا ﻛﺎﻧــت ﻫــذﻩ اﻟﺣﺎﻟــﺔ ﻟﻬــﺎ ﻗﻳﻣﺗــﺎن‬
‫ﻣﺗﻐﻳر واﺣد ﺣﺎﻟﺔ ‪ ٨‬طﻼب‪ ،‬ﻣـن ﺣﻳـث اﻟﻐﻳـﺎب واﻟﺣﺿـور‪..‬‬
‫ﺗﺧزن ﻓﻲ ّ‬
‫ﻓﺣﺳب )ﻧﻌم ‪ /‬ﻻ‪ .(٠/١ ..‬ﻓﻣﺛﻼ‪ ،‬ﻳﻣﻛن أن ّ‬
‫ﻛﻳف ﺗﻔﻌﻝ ذﻟك؟‬
‫ﻣﺗﻐﻳ ار ﻣن اﻟﻧوع ‪ Byte‬وﻟﻳﻛن ‪ ..Students‬أﻧت ﺗﻌرف ّأﻧﻪ ﻳﺣﺟـز وﺣـدة ذاﻛـرة‪ ،‬أي ّأﻧـﻪ ﻳﺗﻛ ّـون ﻣـن‬ ‫ﻋرف ّ‬ ‫ﺑﺳﻳطﺔ‪ّ :‬‬
‫ﺳﻧﺧﺻــص ﻟﻛــﻝ طﺎﻟــب ﺧﺎﻧــﺔ ﻣﻧﻬــﺎ‪ ،‬واﻟطﺎﻟــب اﻟﻣوﺟــود ﺳﻧﺿــﻊ ﻓــﻲ ﺧﺎﻧﺗــﻪ اﻟــرﻗم ‪ ،١‬واﻟطﺎﻟــب اﻟﻐﺎﺋــب‬
‫ّ‬ ‫‪ ٨‬ﺧﺎﻧــﺎت‪..‬‬
‫أن ﻫــذﻩ‬
‫اﻟﻣﺗﻐﻳــر ﻋﻠــﻰ ﻋــدد ﻳــد ّﻝ ﻋﻠــﻰ ﺣﺎﻟــﺔ اﻟطــﻼب اﻟﺛﻣﺎﻧﻳــﺔ‪ .‬ﻻﺣــظ ّ‬
‫ّ‬ ‫ﺳﻧﺿــﻊ ﻓــﻲ ﺧﺎﻧﺗــﻪ اﻟــرﻗم ‪ ..٠‬وﺑﻬــذا ﺳــﻳﺣﺗوي‬
‫ﺳﺗؤدي ﻟﻣﺎ ﻳﻠﻲ‪:‬‬ ‫ّ‬ ‫اﻟﺗﻘﻧﻳﺔ‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪. ٠‬‬
‫ّ‬ ‫ﻟو ﻛﺎن ﻛ ّﻝ اﻟطﻼب ﻏﺎﺋﺑﻳن‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬
‫‪13‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.١‬‬


‫ّ‬ ‫اﻷوﻝ ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫ﻟو ﻛﺎن اﻟطﺎﻟب ّ‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.٢‬‬
‫ّ‬ ‫ﻟو ﻛﺎن اﻟطﺎﻟب اﻟﺛﺎﻧﻲ ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.٤‬‬
‫ّ‬ ‫ﻟو ﻛﺎن اﻟطﺎﻟب اﻟﺛﺎﻟث ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.٨‬‬
‫ّ‬ ‫ﻟو ﻛﺎن اﻟطﺎﻟب اﻟراﺑﻊ ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.١٦‬‬
‫ّ‬ ‫ﻟو ﻛﺎن اﻟطﺎﻟب اﻟﺧﺎﻣس ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.٣٢‬‬
‫ّ‬ ‫ﻟو ﻛﺎن اﻟطﺎﻟب اﻟﺳﺎدس ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.٦٤‬‬
‫ّ‬ ‫ﻟو ﻛﺎن اﻟطﺎﻟب اﻟﺳﺎﺑﻊ ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫اﻟﻣﺗﻐﻳر ﻋﻠﻰ اﻟﻌدد ‪.١٢٨‬‬
‫ّ‬ ‫ﻟو ﻛﺎن اﻟطﺎﻟب اﻟﺛﺎﻣن ﻣوﺟودا ﺑﻣﻔردﻩ‪ ،‬ﻓﺳﻳﺣﺗوي‬
‫اﻟﻣﺗﻐﻳــر ﻳﺳــﺎوي )‪ (٢‬ر‪ ..١-‬واﺿــﺢ إذن ّأﻧﻧــﺎ ﻧﺳــﺗﺧدم‬
‫ّ‬ ‫ـﺈن ﺗــﺄﺛﻳرﻩ ﻋﻠــﻰ‬
‫ﻫــﻝ ﻻﺣظــت ﺷــﻳﺋﺎ؟ ﻟــو ﻛــﺎن رﻗــم اﻟطﺎﻟــب ر‪ ،‬ﻓـ ّ‬
‫ﻟﻠﻣﺗﻐﻳـر اﻟﻘﻳﻣـﺔ ‪،٥ = ٤ + ١‬‬‫ّ‬ ‫اﻷوﻝ واﻟﺛﺎﻟـث ﻳﻌطـﻲ‬
‫أن وﺟـود اﻟطﺎﻟـب ّ‬ ‫ي‪ .‬ﻻﺣـظ ﻛـذﻟك ّ‬ ‫اﻟﺛﻧﺎﺋﻲ‪ ،‬وﻟـﻳس اﻟﻌﺷـر ّ‬
‫ّ‬ ‫اﻟﻧظﺎم‬
‫أن ﻛـ ّﻝ ﻋــدد ﻧــﺎﺗﺞ‬
‫إن ﻫــذﻩ اﻟﻧﺗﻳﺟــﺔ ﺗﻌﻧــﻲ ﺑﺑﺳــﺎطﺔ‪ّ ،‬‬
‫وﻫــﻲ ﻗﻳﻣــﺔ ﻳﺳــﺗﺣﻳﻝ أن ﺗﻧــﺗﺞ ﻋــن ﺟﻣــﻊ طــﺎﻟﺑﻳن آﺧــرﻳن ﻏﻳرﻫﻣــﺎ‪ّ .‬‬
‫أي ﻟـﺑس‪.‬‬‫ﻣﺗﻔرد‪ ،‬ﻳﻣﻛـن ﻣـن ﺧﻼﻟـﻪ ﺗﺣدﻳـد ﺣﺎﻟـﺔ اﻟطـﻼب ﺑـﻼ ّ‬ ‫ﻋن ﺗﺑﺎدﻳﻝ وﺗواﻓﻳق ﺣﺿور وﻏﻳﺎب اﻟطﻼب‪ ،‬ﻫو ﻋدد ّ‬
‫ﻛﻳﻔﻳــﺔ ﺗﻌرﻳــف اﻟﻣؤ ّﺷ ـرات‪ ،‬ﺿــﻣن ﻣوﺿــوع‬
‫اﻟﻣﺗﻐﻳــر ﻓــﻲ ﻫــذﻩ اﻟﺣﺎﻟــﺔ ُﻳﺳـ ّـﻣﻰ ﻣؤ ّﺷ ـ ار ‪ ،Flag‬وﻳﻣﻛﻧــك أن ﺗﻌــرف ّ‬
‫ّ‬ ‫إن‬
‫ّ‬
‫ﺗﻌرﻳف اﻟﻣرﻗّﻣﺎت ‪ Enums‬ﻓﻲ ﻧﻬﺎﻳﺔ اﻟﻔﺻﻝ اﻟﺛﺎﻟث‪.‬‬
‫وﻟﻛن‪ ..‬ﻣﺎ ﻫو ﻣوﺿوع اﻷﻗﻧﻌﺔ ﻫذا؟‬
‫دون أن ﻧؤﺛّر ﻋﻠﻰ ﺑﺎﻗﻲ اﻟطﻼب؟‬‫ﻧﻐﻳر ﺣﺎﻟﺔ أﺣد اﻟطﻼب َ‬ ‫اﻟﻔﻛرة ﻫﻧﺎ ﻫﻲ ﻛﻳف ّ‬
‫ﻷﻧك اﻛﺗﺷﻔت ّأﻧﻪ ﻏﺎﺋب‪ّ ..‬أوﻝ ﻣﺎ ﺳﻳﺟوﻝ ﺑذﻫﻧك‪ ،‬ﻫـو‬ ‫اﻓﺗرض ﻣﺛﻼ‪ّ ،‬أﻧك ﺗرﻳد وﺿﻊ ‪ .‬ﻓﻲ ﺧﺎﻧﺔ اﻟطﺎﻟب اﻟﺧﺎﻣس‪ّ ،‬‬
‫ﻟﻠﻣﺗﻐﻳــر ‪ ،Students‬ﻫــﻲ ﻛــﻝ ﺗﺑﺎدﻳــﻝ وﺗواﻓﻳــق ﺣﺿــور‬
‫ّ‬ ‫أن ﺗﻛﺗــب ﺟﻣﻠــﺔ ‪ Select Case‬ﺗﺧﺗﺑــر ﻓﻳﻬــﺎ ‪ ٢٥٥‬ﺣﺎﻟــﺔ‬
‫ﻋﻣﻠﻲ‪ ..‬اﻷﻓﺿﻝ أن ﺗﺑﺣـث ﻋـن وﺳـﻳﻠﺔ ﺗﺳـﻣﺢ ﻟـك ﺑوﺿـﻊ ﺻـﻔر ﻓـﻲ‬
‫ّ‬ ‫وﻏﻳﺎب اﻟطﻼب اﻟﺛﻣﺎﻧﻳﺔ‪ ..‬طﺑﻌﺎ ﻫذا ﺣﻝ ﻏﻳر‬
‫ﺳﻣﻰ إﻟﺑﺎس اﻟﻘﻧﺎع ‪ ،Masking‬ﺣﻳث ﻳﺑدو‬ ‫اﻟﺧﺎﻧﺔ اﻟﺧﺎﻣﺳﺔ ﻣن اﻟﻌدد دون ﺗﻐﻳﻳر ﻗﻳم ﺑﺎﻗﻲ اﻟﺧﺎﻧﺎت‪ ..‬ﻫذﻩ اﻟﺣرﻛﺔ ﺗ ّ‬
‫ﻗﻧﺎﻋــﺎ ﺣﺗّــﻰ ﻻ ﻳظﻬــر ﻣﻧــﻪ ﺳــوى اﻟﺧﺎﻧــﺔ اﻟﺧﺎﻣﺳــﺔ ﻓﻘــط‪ .‬وﻟﻛــن ﻛﻳــف ﻧﺻــﻧﻊ ﻫــذا اﻟﻘﻧــﺎع‬
‫وﻛﺄﻧــك أﻟﺑﺳــت اﻟﻌــدد ً‬
‫اﻷﻣــر ّ‬
‫ﻧﺗﻌرف ﻋﻠﻳﻬﺎ‪ ،‬وﻧرى ﻛﻳف ﻧﺻﻧﻌﻬﺎ‪.‬‬ ‫ﻣﺣددة‪ ..‬ﺗﻌﺎﻝ ّ‬ ‫‪Mask‬؟ ﻟدﻳﻧﺎ ﻫﻧﺎ ﺛﻼﺛﺔ أﻗﻧﻌﺔ‪ ،‬ﻛ ّﻝ ﻣﻧﻬﺎ ﻟﻪ وظﻳﻔﺔ ّ‬

‫ﺗﻛوﻳن ﻗﻧﺎع "و"‪:‬‬


‫اﻟﻣﺗﻐﻳــر ﺑﺎﻟﻘﻳﻣــﺔ ‪) ٢٥٥‬ﻛــﻝ اﻟﺧﺎﻧــﺎت ﺑﻬــﺎ ‪ ..(١‬واﻵن‬
‫ّ‬ ‫أن ﻛــﻝ اﻟطــﻼب ﻣوﺟــودون‪ ،‬ﻟﻬــذا ﺳــﻧﺑدأ‬
‫ﻓــﻲ اﻟﺑداﻳــﺔ ﺳــﻧﻔﺗرض ّ‬
‫ﻧرﻳد ﺗﺳﺟﻳﻝ ﻏﻳﺎب اﻟطﺎﻟب اﻟﺧﺎﻣس‪ ..‬ﻫﻧﺎ ﻳﺄﺗﻲ دور اﻟﺧﺎﺻﻳﺗﻳن اﻟﺛﺎﻧﻳﺔ واﻟﺛﺎﻟﺛﺔ ﻟﻌﻣﻠﻳﺔ ‪:And‬‬
‫أي رﻗم وﺑﻳن اﻟواﺣد‪ ،‬ﻳظ ّﻝ اﻟرﻗم ﻛﻣﺎ ﻫو‪:‬‬
‫‪ -‬ﻓﻌﻧد إﺟراﺋﻬﺎ ﺑﻳن ّ‬
‫‪X And 1 = X‬‬
‫أي رﻗم واﻟﺻﻔر‪ ،‬ﻓﺳﻳﻛون اﻟﻧﺎﺗﺞ ﺻﻔرا‪.‬‬
‫أﻣﺎ ﻟو أﺟرﻳﻧﺎﻫﺎ ﺑﻳن ّ‬
‫‪ّ -‬‬
‫‪X And 0 = 0‬‬
‫إذن ﻓﺳﻳﻛون ﻗﻧﺎﻋﻧﺎ ﻋﺑﺎرة ﻋن ﻋدد‪ ،‬ﻛﻝ ﺧﺎﻧﺎﺗﻪ ﺗﺣﺗوي ﻋﻠﻰ اﻟرﻗم ‪ ،١‬ﻣﺎ ﻋدا اﻟﺧﺎﻧﺔ اﻟﺧﺎﻣﺳﺔ‪ ،‬ﻓﺳﺗﺣﺗوي ﻋﻠﻰ ‪:٠‬‬
‫)‪.٢٣٩ = ١٦ – ٢٥٥ = ٢(١١١٠١١١١‬‬
‫إذن ﻓﺎﻟﻛود ﺳﻳﻛون ﻛﺎﻟﺗﺎﻟﻲ‪:‬‬
‫‪Dim Students As Byte = 255‬‬
‫‪Students = Students AND 239‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪14‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫وﺑﻬــذﻩ اﻟطرﻳﻘــﺔ‪ ،‬ﺳــﺗﺟد ّأﻧــك ﺗﺳــﺗطﻳﻊ ﺗــﺄﻟﻳف ‪ ٨‬أﻗﻧﻌــﺔ ﻓﻘــط‪ ،‬ﺗﻌﺑــر ﺑﻬــﺎ ﻋــن ﻏﻳــﺎب ﻛــﻝ طﺎﻟــب ﻣــن اﻟطﻠﺑــﺔ‪ ..‬ﺣــﺎوﻝ أن‬
‫أن اﻟـرﻗم )‪٢(١١١٠١١١١‬‬ ‫ﺗﻛوﻳن ﻫذﻩ اﻷﻗﻧﻌﺔ‪ ..‬وﻳﻣﻛﻧك ﺗﺳﻬﻳﻝ اﻷﻣـر ﻋﻠـﻰ ﻧﻔﺳـك‪ ،‬ﻟـو ﻻﺣظـت ّ‬ ‫ِ‬ ‫ﻧﻔﺳك ﻋﻠﻰ‬ ‫ﺗدرب َ‬ ‫ّ‬
‫أن ﺑﺎﺳﺗطﺎﻋﺗك اﻟﺗﻌﺑﻳر ﻋن اﻟﻛود اﻟﺳﺎﺑق ﻛﺎﻟﺗﺎﻟﻲ‪:‬‬
‫ﻫو ﻣﻌﻛوس اﻟرﻗم ))‪ ٢(٠٠٠١٠٠٠٠‬أي ‪ ..١٦‬ﻣﻌﻧﻰ ﻫذا ّ‬
‫)‪Students = Students And (Not 16‬‬
‫‪١-٥‬‬
‫ﺗﻌﺑر اﻟﺟﻣﻠﺔ اﻟﺗﺎﻟﻳﺔ ﻋن ﻏﻳﺎب اﻟطﺎﻟب رﻗم ‪:N‬‬
‫وﻟو ﻻﺣظت أن ‪ ، (٢) = ١٦‬ﻓﻳﻣﻛﻧك أن ﺗﻔﻬم ﻛﻳف ﻳﻣﻛن أن ّ‬
‫))‪Students = Students And (Not 2^(N-1‬‬
‫اﻟﻣﺗﻐﻳر ‪ N‬وﻣﻧﺣﻪ ﻗﻳﻣﺔ أوﻻ‪.‬‬
‫ّ‬ ‫ﻳﺟب ﻋﻠﻳك ﺗﻌرﻳف‬
‫وطﺑﻌﺎ ُ‬
‫ﻗﺎﻋدة‪:‬‬
‫ـﻔرا‪ ،‬دون ﺗﻐﻳﻳــر ﺑـﺎﻗﻲ ﺧﺎﻧـﺎت اﻟﻌـدد‪ ..‬وﻳـﺗم ﺗﻛوﻳﻧــﻪ‬
‫اﺳـﺗﺧدم ﻗﻧـﺎع ‪ And‬ﻟﺟﻌـﻝ ﻗﻳﻣـﺔ ﺧﺎﻧــﺔ أو أﻛﺛـر ﻓـﻲ ﻋـدد ﺻ ً‬
‫ﺑوﺿﻊ ﺻﻔر ﻓﻲ اﻟﻘﻧﺎع ﻓﻲ اﻟﻣواﺿﻊ اﻟﻣﻧﺎظرة ﻟﻠﺧﺎﻧﺎت اﻟﺗﻲ ﺗرﻳد ﺗﻐﻳﻳرﻫﺎ‪ ،‬ووﺿﻊ ‪ ١‬ﻓﻲ ﺑﺎﻗﻲ ﺧﺎﻧﺎت اﻟﻘﻧﺎع‪.‬‬
‫ﺗﻛوﻳن ﻗﻧﺎع ‪:Or‬‬
‫ﻣﺗﺄﺧرا‪ ،‬وﺗرﻳد إﺛﺑـﺎت ﺣﺿـورﻩ ﻣ ّـرةً‬
‫ﺳﺟﻠﺗﻪ ﻓﻲ اﻟﻐﻳﺎب ﺑﻘﻧﺎع ‪ And‬ﻗد ﺣﺿر ّ‬ ‫أن اﻟطﺎﻟب اﻟﺧﺎﻣس اﻟذي ّ‬ ‫اﻓﺗرض اﻵن ّ‬
‫أﺧرى‪ ،‬وﻛـﺎن ﻫﻧـﺎك ﻋـدد آﺧـر ﻣـن اﻟطـﻼب اﻟﻐـﺎﺋﺑﻳن‪ ،‬ﺑﺣﻳـث ﻻ ﺗرﻳـد ﺗﻐﻳﻳـر ﺑـﺎﻗﻲ ﻗـﻳم اﻟﺧﺎﻧـﺎت‪ ..‬ﻓـﻲ ﻫـذﻩ اﻟﺣﻠـﺔ ﻟـن‬
‫ﻷﻧــﻪ ﻻ ُﻳﺳــﺗﺧدم إﻻ ﻟوﺿــﻊ اﻷﺻــﻔﺎر‪ ..‬ﻫﻧــﺎ ﻳﻣﻛــن اﺳــﺗﺧدام ﻗﻧــﺎع ‪ ،Or‬ﺑﺗﻛــوﻳن رﻗــم ﻛﻠــﻪ أﺻــﻔﺎر‬ ‫ﻳﻔﻳــدﻧﺎ ﻗﻧــﺎع ‪ّ ،And‬‬
‫ﻳﻐﻳـ ــر اﻟﺧﺎﻧـ ــﺔ اﻟﻣﻧـ ــﺎظرة ﻓـ ــﻲ ﻋﻣﻠﻳـ ــﺔ ‪ ،(Or‬ﻣـ ــﺎ ﻋـ ــدا اﻟﺧﺎﻧـ ــﺔ اﻟﺧﺎﻣﺳـ ــﺔ ﻓﺳـ ــﻧﺟﻌﻠﻬﺎ ‪١‬‬
‫)اﻟﺧﺎﺻ ـ ّـﻳﺔ اﻟﺛﺎﻧﻳـ ــﺔ‪ :‬اﻟﺻـ ــﻔر ﻻ ّ‬
‫)اﻟﺧﺎﺻﻳﺔ اﻟﺛﺎﻟﺛﺔ(‪ ..‬ﻓﻲ ﻫذﻩ اﻟﺣﺎﻟﺔ ﺳﻳﻛون اﻟﻘﻧﺎع ﻫو )‪.١٦ = ٢(٠٠٠١٠٠٠٠‬‬
‫ّ‬
‫‪Students = Students Or 16‬‬
‫ﻋﺎﻣﺔ‪ ،‬ﻳﻣﻛﻧك ﺗﻐﻳﻳر اﻟﺧﺎﻧﺔ رﻗم ‪ N‬ﻟﺗﺻﺑﺢ ‪ ،١‬ﺑﺎﻟﺟﻣﻠﺔ اﻟﺗﺎﻟﻳﺔ‪:‬‬
‫وﺑﺻورة ّ‬
‫)‪Students = Students Or 2^(N-1‬‬
‫ﻗﺎﻋدة‪:‬‬
‫اﺳﺗﺧدم ﻗﻧﺎع ‪ Or‬ﻟوﺿﻊ ﺧﺎﻧـﺔ أو أﻛﺛـر ﻓـﻲ ﻋـدد ﺑواﺣـد‪ ،‬دون ﺗﻐﻳﻳـر ﺑـﺎﻗﻲ ﺧﺎﻧـﺎت اﻟﻌـدد‪ ..‬وﻳـﺗم ﺗﻛوﻳﻧـﻪ ﺑوﺿـﻊ‬
‫‪ ١‬ﻓﻲ اﻟﻘﻧﺎع ﻓﻲ اﻟﻣواﺿﻊ اﻟﻣﻧﺎظرة ﻟﻠﺧﺎﻧﺎت اﻟﺗﻲ ﺗرﻳد ﺗﻐﻳﻳرﻫﺎ‪ ،‬ووﺿﻊ ‪ ٠‬ﻓﻲ ﺑﺎﻗﻲ ﺧﺎﻧﺎت اﻟﻘﻧﺎع‪.‬‬
‫ﺗﻛوﻳن ﻗﻧﺎع ‪:XOR‬‬
‫ﻫﺎﻣــﺎ ﺟــدا ﻣــن أﻧـواع اﻷﻗﻧﻌــﺔ‪ ،‬وذﻟــك ﻓــﻲ ﺣﺎﻟــﺔ إذا ﻣــﺎ أردﻧــﺎ ﻋﻛــس ﻗﻳﻣــﺔ ﺑﻌــض اﻟﺧﺎﻧــﺎت ﻓــﻲ‬
‫ﺗﻘـ ّـدم ﻟﻧــﺎ ‪ XOR‬ﻧوﻋــﺎ ّ‬
‫ﻋدد‪ ،‬دون ﺗﻐﻳﻳر ﺑﺎﻗﻲ اﻟﺧﺎﻧﺎت‪ .‬اﻓرض ﻣﺛﻼ ـ ﻣـﺛﻼ ﻳﻌﻧـﻲ!! ـ ّأﻧـك ﺗرﻳـد أن ﺗﻌﺑـث ﻣـﻊ اﻟطﺎﻟـب اﻟﺧـﺎﻣس اﻟـذي أرﻫﻘﻧـﺎ‬
‫ﻣــﻊ ﻗﻧــﺎﻋﻲ ‪ And‬و ‪ ،Or‬ﻓﻘـ ّـررت أن ﺗﻌﻛــس ﺣــﺎﻻت ﺣﺿــورﻩ ﻫــذا اﻷﺳــﺑوع ﻛﻧــوٍع ﻣــن اﻟﻣﻘﺎﻟــب اﻟﺳــﺎﺧﻧﺔ‪ ..‬ﻓــﻲ ﻫــذﻩ‬
‫ﻷن‬
‫اﻟﺣﺎﻟــﺔ ﺳﺗﺳــﺗﺧدم ‪ XOR‬ﻣــﻊ ﻧﻔــس ﻗﻧــﺎع ‪) Or‬ﻻ ﺗــﻧس أن "أو اﻟﻣﻘﺻــورة" ‪ XOR‬ﻫــﻲ ﺣﺎﻟــﺔ ﺧﺎﺻــﺔ ﻣــن ‪ّ ،(Or‬‬
‫اﻟﺧﺎﻧﺔ اﻟﺗﻲ ﺑﻬﺎ واﺣد ﻓﻲ اﻟﻘﻧـﺎع ﺗﻌﻛـس ﻗﻳﻣـﺔ اﻟﺧﺎﻧـﺔ اﻟﺗـﻲ ﺗﻧﺎظرﻫـﺎ ﻓـﻲ اﻟﻌـدد‪ ،‬ﺑﻳﻧﻣـﺎ ﻻ ﺗـؤﺛّر اﻟﺧﺎﻧـﺔ اﻟﺗـﻲ ﺑﻬـﺎ ﺻـﻔر‬
‫ﻓﻳﻣﺎ ﻳﻧﺎظرﻫﺎ ﻣن ﺧﺎﻧﺎت‪.‬‬
‫‪Students = Students XOR 16‬‬
‫ﻷن‬
‫ﻷﻧﻧــﺎ اﺳــﺗﺧدﻣﻧﺎ اﻟــرﻗم ‪ ١٦‬ﻣ ـرﺗﻳن‪ :‬ﻣ ـرة ﻣــﻊ ‪ OR‬وﻣ ـرة ﻣــﻊ ‪ ،XOR‬ﻓﺎﻟﻧــﺎﺗﺞ ﺳــﻳﺧﺗﻠف ﻓــﻲ اﻟﺣــﺎﻟﺗﻳن‪ّ ،‬‬
‫ﻻ ﺗرﺗﺑــك ّ‬
‫ﺑﺎﻟﻌﻣﻠﻳﺔ ﻛذﻟك‪.‬‬
‫ّ‬ ‫اﻟﻌﺑرة ﻟﻳﺳت ﺑﺎﻟﻘﻧﺎع ﻓﻘط‪ٕ ،‬واﻧﻣﺎ‬
‫ﻗﺎﻋدة‪:‬‬
‫اﺳﺗﺧدم ﻗﻧﺎع "أو اﻟﻣﻘﺻورة" ‪ XOR‬ﻟﻌﻛس ﻗﻳﻣﺔ ﺧﺎﻧﺔ أو أﻛﺛر ﻓﻲ ﻋدد‪ ،‬دون ﺗﻐﻳﻳر ﺑﺎﻗﻲ ﺧﺎﻧﺎت اﻟﻌدد‪ ..‬وﻳﺗم‬
‫ﺗﻛوﻳن ﻫذا اﻟﻘﻧﺎع ﺑوﺿﻊ ‪ ١‬ﻓﻲ اﻟﻘﻧﺎع ﻓـﻲ اﻟﺧﺎﻧـﺎت اﻟﻣﻧـﺎظرة ﻟﻠﺧﺎﻧـﺎت اﻟﺗـﻲ ﺗرﻳـد ﻋﻛﺳـﻬﺎ ﻓـﻲ اﻟﻌـدد‪ ،‬ووﺿـﻊ ‪٠‬‬
‫ﻓﻲ ﺑﺎﻗﻲ ﺧﺎﻧﺎت اﻟﻘﻧﺎع‪.‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪15‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫ﻣﺷروع اﻷﻗﻧﻌﺔ‪:‬‬
‫ـف واﻟــدوران؟‪ ..‬ﻟﻣــﺎذا ﻻ أﻋـ ّـرف ‪ ٨‬ﻣﺗﻐﻳ ـرات‪ :‬واﺣــد ﻟﻛــﻝ طﺎﻟــب‪ ،‬ﺑــدﻻ ﻣــن ﻣوﺿــوع‬
‫طﺑﻌــﺎ ﺳﺗﺗﺳــﺎءﻝ‪ :‬وﻟﻣــﺎذا ﻫــذا اﻟﻠـ ّ‬
‫ﺧﺎﺻـﺔ ّأﻧـك ﻟـن ﺗﺗﻌﺎﻣـﻝ ﻣـﻊ ‪ ٨‬طـﻼب‬‫ّ‬ ‫اﻟﻣؤ ّﺷرات واﻷﻗﻧﻌﺔ ﻫذا؟ وﻟﻛن أﺣﻳﺎﻧﺎ ﺗﺑـدو اﻟطرﻳﻘـﺔ اﻷوﻟـﻰ أوﻓـر ﻓـﻲ اﻟﺣﺟـم‪،‬‬
‫ﻓﻘــط ﻓــﻲ ﻛ ـ ّﻝ ﻣــرة‪ .‬ﻋﺎﻣ ـﺔً‪ ،‬ﻫــذﻩ ﻣﺟــرد طرﻳﻘــﺔ‪ ،‬ﺗﺳــﺗطﻳﻊ أن ﺗﺿــﻳﻔﻬﺎ ﻟﺳــﺟ ّﻝ ﺧﺑ ارﺗــك‪ ،‬وﻫــﻲ ﺷــﺎﺋﻌﺔ اﻻﺳـ ِ‬
‫ـﺗﺧدام ﻓــﻲ‬ ‫ّ‬ ‫ّ‬ ‫ّ‬
‫اﻟﺑرﻣﺟــﺔ‪ ،‬وﺳــﺗﻘﺎﺑﻠك ﻛﺛﻳـ ًـرا‪ .‬ﻓﻣ ـﺛﻼ‪ ،‬ﻋﻧــد اﻟﺗﻌﺎﻣـ ِـﻝ ﻣــﻊ اﻟﻣﻠﻔّــﺎت‪ ،‬ﻫﻧــﺎك ﺧﺎﺻـ ّـﻳﺔ اﺳــﻣﻬﺎ ‪ ،GetAttributes‬ﺗﻌﻳــد ﻟــك‬
‫ـف ﻗـد‬
‫أن اﻟﻣﻠ ّ‬
‫ـﻲ ‪ ...Normal‬إﻟـﺦ‪ ..(.‬اﻟﻣﺷـﻛﻠﺔ ّ‬ ‫اﻟﻣﻠف )ﻟﻠﻘراءة ﻓﻘـط ‪ ،ReadOnly‬ﻣﺧﻔـﻰ ‪ ،Hidden‬طﺑﻳﻌ ّ‬ ‫ّ‬ ‫ﺳﻣﺎت‬
‫وﺧﻔﻳــﺎ‪ ..‬ﻓﻛﻳــف إذن ﻳﻣﻛــن اﻟﺗﻌﺑﻳــر ﻋــن ﻛ ـ ّﻝ ﻫــذﻩ‬
‫ـون ﻟﻠﻘ ـراءة ﻓﻘــط ّ‬
‫ﻳﻣﺗﻠــك أﻛﺛــر ﻣــن ﺳــﻣﺔ ﻓــﻲ ﻧﻔــس اﻟوﻗــت‪ ،‬ﻛــﺄن ﻳﻛـ َ‬
‫ـﺎﻝ ﻧــرى ﺑﻌــض اﻟﻛــود‪ ،‬واﻟــذي ﺳــﺗﺟدﻩ‬
‫اﻟﺳــﻣﺎت ﺑﺧﺎﺻـ ّـﻳﺔ واﺣــدة؟‪ ..‬آﻩ‪ ..‬ﻓﻬﻣـت!‪ ..‬ﺳﻧﺳــﺗﺧدم اﻟﻣؤ ّﺷـرات واﻷﻗﻧﻌــﺔ‪ .‬ﺗﻌـ َ‬
‫ﻣﺷــروﺣﺎ ﺑﺎﻟﺗﻔﺻــﻳﻝ ﻓــﻲ اﻟﻔﺻــﻝ اﻟﻌﺎﺷــر "اﻟﻣﻠﻔّــﺎت"‪ .‬ﻓــﻲ اﻟﺑداﻳــﺔ ﻳﺟــب أن ﺗﻛﺗــب ﺟﻣﻠــﺔ اﻻﺳــﺗﻳراد اﻟﺗﺎﻟﻳــﺔ ﻓــﻲ أﻗﺻــﻰ‬
‫ﺑداﻳﺔ ﻛود اﻟﻧﻣوذج‪ ،‬ﻗﺑﻝ ﺟﻣﻠﺔ ﺗﻌرﻳف اﻟﻧﻣوذج ﻧﻔﺳﻪ‪:‬‬
‫‪Imports System.IO‬‬
‫اﻟﻣﻠف "‪:"C:\boot.ini‬‬ ‫ّ‬ ‫ﺗﻌﺎﻝ ﻧﻘ أر ﺳﻣﺎت‬
‫واﻵن َ‬
‫)"‪Dim FA As FileAttributes = File.GetAttributes("C:\boot.ini‬‬
‫)‪MsgBox(FA.ToString‬‬
‫ـﻲ‬
‫إن اﻟﻛــود اﻟﺗــﺎﻟﻲ ﻳﺳــﺗﺧدم ﻗﻧــﺎع ‪ AND‬ﻟﻠــﺗﺧﻠّص ﻣــن ﺳــﻣﺔ ﺧﻔـ ّ‬
‫ـﺎﻝ ﻧــرى اﺳــﺗﺧداﻣﺎ ﻟﻛ ـ ّﻝ ﻧــوع ﻣــن اﻷﻗﻧﻌــﺔ‪ّ :‬‬
‫ﺛـ ّـم ﺗﻌـ َ‬
‫اﻟﻣﻠف ﻗﺎﺑﻼ ﻟﻠﻘراءة واﻟﻛﺗﺎﺑﺔ‪ ..‬ﻻﺣظ ّأﻧﻧﺎ ﻟن ﻧﺳﺗﺧدم اﻷرﻗـﺎم ﻣﺑﺎﺷـرةً‪ ،‬ﺑـﻝ ﺳﻧﺳـﺗﻔﻳد ﻣـن اﻟﻣرﻗّﻣـﺎت‪،‬‬
‫ّ‬ ‫‪ ،Hidden‬وﻳﻌﻳد‬
‫اﻟﺗﻲ ﺗﺟﻌﻝ اﻟﻛود واﺿﺣﺎ وﻣﻔﻬوﻣﺎ‪:‬‬
‫)‪FA = FA And (Not FileAttributes.Hidden‬‬
‫)‪MsgBox(FA.ToString‬‬
‫اﻟﻣﻠف‪:‬‬
‫ّ‬ ‫واﻟﻛود اﻟﺗﺎﻟﻲ ﻳﺿﻳف ﺳﻣﺔ ﻟﻠﻘراءة ﻓﻘط ﻟﺳﻣﺎت‬
‫‪FA = FA Or FileAttributes.ReadOnly‬‬
‫)‪MsgBox(FA.ToString‬‬
‫ﻣرة أﺧرى ﻟﺗﻌود ﻟﺣﺎﻟﺗﻬﺎ اﻷوﻟﻰ‪:‬‬ ‫ﺛم ﻳﻌﻛﺳﻬﺎ ّ‬ ‫أﻣﺎ اﻟﻛود اﻟﺗﺎﻟﻲ ﻓﻳﻌﻛس ﺣﺎﻟﺔ اﻟﺳﻣﺔ ‪ّ System‬‬ ‫ّ‬
‫‪FA = FA XOr FileAttributes.System‬‬
‫)‪MsgBox(FA.ToString‬‬
‫‪FA = FA XOr FileAttributes.System‬‬
‫)‪MsgBox(FA.ToString‬‬
‫وﻳﻣﻛﻧك ﺗﺟرﺑﺔ ﻫذا اﻟﻛود ﻓﻲ ﺗطﺑﻳق ‪ Masking‬ﻓﻲ ﻣﺟﻠّد ﺑراﻣﺞ ﻫذا اﻟﻣﻠﺣق‪.‬‬

‫ﻣﻠﺣق ‪٣‬‬
‫اﻟرﻳﺎﺿﻳﺔ‬
‫ّ‬ ‫اﻟدوا ّﻝ‬
‫اﻟرﻳﺎﺿﻳﺎت ‪:Math‬‬
‫ّ‬ ‫ﺧﻠﻳﺔ‬
‫ّ‬ ‫‪‬‬
‫اﺋﻳﺔ‪:‬‬
‫ﺗوﻟﻳد اﻷﻋداد اﻟﻌﺷو ّ‬ ‫‪‬‬

‫اﻟرﻳﺎﺿﻳﺎت ‪:Math‬‬
‫ّ‬ ‫ﺧﻠﻳﺔ‬
‫ّ‬
‫اﻟﺧﻠﻳﺔ ﻋﻠﻰ اﻟﺻﻳﻐﺔ اﻟﺗﺎﻟﻳﺔ‪:‬‬
‫ﺗﻌرﻳﻔﻬﺎ واﺳﺗﺧداﻣﻬﺎ‪ :‬ﺗﺳﺗﺧدم ﻫذﻩ ّ‬
‫)اﻟﻣﻌﺎﻣﻼت(اﺳم اﻟداﻟﺔ‪ = Math.‬اﻟﻧﺎﺗﺞ‬
‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬
‫‪16‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫ﻣﺛﺎﻝ‪:‬‬
‫‪Dim X As Integer = 10‬‬
‫‪Dim Y As Integer = 5‬‬
‫ﺳﺗﻌرض اﻟرﺳﺎﻟﺔ اﻟرﻗم ‪MsgBox (Math.Max(X,Y)) ' ١٠‬‬
‫اﻷﺳﺎﺳﻳﺔ‪:‬‬
‫ّ‬ ‫اﻟدوا ّﻝ‬
‫ﺗﺳﺗﻘﺑﻝ ﻋددﻳن‪ ،‬وﺗﻌﻳد أﻛﺑرﻫﻣﺎ‪.‬‬ ‫أﻛﺑر ﻋدد ‪Max‬‬
‫ﺗﺳﺗﻘﺑﻝ ﻋددﻳن‪ ،‬وﺗﻌﻳد أﺻﻐرﻫﻣﺎ‪.‬‬ ‫أﺻﻐر ﻋدد ‪Min‬‬
‫ﻓﺈﻧﻬـﺎ ﺗﻌﻳـد‬
‫ﺗﻌﻳد رﻗﻣﺎ ﺻﺣﻳﺣﺎ أﻛﺑرﻣن أو ﻳﺳﺎوي اﻟرﻗم اﻟﻣرﺳﻝ ﻟﻬﺎ‪ ..‬ﻓﻣﺛﻼ ﻟـو أرﺳـﻠت ﻟﻬـﺎ ‪ّ ٥‬‬ ‫أﻛﺑر ﻋدد ﺻﺣﻳﺢ‬
‫ﻓﺈﻧﻬﺎ ﺗﻌﻳد ‪.٦‬‬
‫‪ ،٥‬وﻟو أرﺳﻠت ﻟﻬﺎ ‪ّ ٥.١‬‬
‫‪Ceiling‬‬

‫ﻣﻣﺎﺛﻠﺔ ﻟﻠداﻟﺔ ‪ ،Int‬ﺣﻳث ﺗﻌﻳد رﻗﻣﺎ ﺻﺣﻳﺣﺎ أﺻـﻐر ﻣـن أو ﻳﺳـﺎوي اﻟـرﻗم اﻟﻣرﺳـﻝ ﻟﻬـﺎ‪ ..‬ﻓﻣـﺛﻼ‬ ‫أﺻﻐر ﻋدد ﺻﺣﻳﺢ‬
‫ﻓﺈﻧﻬﺎ ﺗﻌﻳد ‪ ٥‬أﻳﺿﺎ‪.‬‬
‫ﻓﺈﻧﻬﺎ ﺗﻌﻳد ‪ ،٥‬وﻟو أرﺳﻠت ﻟﻬﺎ ‪ّ ٥.١‬‬
‫ﻟو أرﺳﻠت ﻟﻬﺎ ‪ّ ٥‬‬
‫‪Floor‬‬

‫ﻓﺈﻧﻬـﺎ ﺗﻌﻳـد‬
‫ﻣﻘرﺑﺎ إﻟـﻰ أﻗـرب ﻋـدد ﺻـﺣﻳﺢ‪ ..‬ﻓﻣـﺛﻼ ﻟـو أرﺳـﻠت ﻟﻬـﺎ ‪ّ ٥.١‬‬
‫ﺗﻌﻳد اﻟرﻗم اﻟﻣرﺳﻝ ﻟﻬﺎ ّ‬ ‫ﺗﻘرﻳب اﻟﻌدد‬
‫ﻓﺈﻧﻬﺎ ﺗﻌﻳد ‪.٦‬‬
‫‪ ،٥‬وﻟو أرﺳﻠت ﻟﻬﺎ ‪ّ ٥.٥‬‬
‫‪Round‬‬

‫اﻷوﻝ ﻋﻠــﻰ‬
‫ﻣﻣﺎﺛﻠــﺔ ﻟﺗﻌﺑﻳــر ‪ Div‬ﻓــﻲ ﻓﻳﺟﻳ ـواﻝ ﺑﻳزﻳــك‪ ،‬ﺣﻳــث ﺗﻌﻳــد اﻟﺑــﺎﻗﻲ ﻣــن ﻗﺳــﻣﺔ اﻟﻣﻌﺎﻣــﻝ ّ‬ ‫ﺑﺎﻗﻲ اﻟﻘﺳﻣﺔ‬
‫اﻟﻣﻌﺎﻣﻝ اﻟﺛﺎﻧﻲ‪.‬‬ ‫‪IEEERemainder‬‬

‫ﺗﻌﻳد اﻟﻌدد اﻟﻣرﺳﻝ ﻟﻬﺎ‪ ،‬ﺑدون إﺷﺎرة‪.‬‬ ‫اﻟﻘﻳﻣﺔ اﻟﻣطﻠﻘﺔ ‪Abs‬‬


‫ﺗﻌﻳد ‪ ١-‬ﻟو ﻛﺎن اﻟﻌدد اﻟﻣرﺳﻝ ﻟﻬﺎ أﺻﻐر ﻣن اﻟﺻﻔر‪ ،‬وﺗﻌﻳد ﺻﻔ ار إذا ﻛﺎن ﺻﻔرا‪ ،‬وﺗﻌﻳـد ‪١‬‬ ‫اﻹﺷﺎرة‬
‫إذا ﻛﺎن أﻛﺑر ﻣن اﻟﺻﻔر‪.‬‬ ‫‪Sign‬‬

‫دوا ّﻝ اﻷﺳس واﻟﺟذور واﻟﻠوﻏﺎرﻳﺗﻣﺎت‪:‬‬


‫اﻟﻣوﺿﺢ ﻓﻲ اﻟﻣﻌﺎﻣﻝ اﻟﺛـﺎﻧﻲ‪ ..‬وﺑﻬـذا ﻓﻳﻬـﻲ‬
‫ّ‬ ‫ﻟﻸس‬
‫اﻷوﻝ ّ‬
‫ﺗﻌﻳد اﻟرﻗم اﻟﻧﺎﺗﺞ ﻣن رﻓﻊ اﻟﻣﻌﺎﻣﻝ ّ‬ ‫اﻷس‬
‫ّ‬
‫أن‪:‬‬
‫أي ّ‬
‫ﺗﻣﺎﺛﻝ اﻟﻣﻌﺎﻣﻝ ^‪ّ ..‬‬
‫‪Pow‬‬
‫‪2^3‬‬
‫ﺗﻛﺎﻓﺊ‪:‬‬
‫)‪Math.Pow(2,3‬‬
‫ـﻸس‬
‫ـﻲ "ﻫ ــ" ‪) e‬ﻗﻳﻣﺗــﻪ ﺗﺳــﺎوي ﺗﻘرﻳﺑــﺎ ‪ (٢.٧٢‬ﻟـ ّ‬
‫ﺗﻌﻳــد اﻟــرﻗم اﻟﻧــﺎﺗﺞ ﻣــن رﻓــﻊ اﻷﺳــﺎس اﻟطﺑﻳﻌـ ّ‬ ‫اﻟطﺑﻳﻌﻲ‬
‫ّ‬ ‫اﻷس‬
‫ّ‬
‫اﻟﻣوﺿﺢ ﻓﻲ اﻟﻣﻌﺎﻣﻝ اﻟﻣرﺳﻝ ﻟﻠداﻟﺔ‪.‬‬ ‫ّ‬
‫‪Exp‬‬
‫إن اﻟﺗﻌﺑﻳر اﻟرﻳﺎﺿﻲ‪:‬‬
‫‪X‬‬
‫‪Y=e‬‬
‫ﺑرﻣﺟﻳﺎ ﺑﺎﻟﺗﻌﺑﻳر‪:‬‬
‫ّ‬ ‫ﻳﻣﻛن ﺗﻣﺛﻳﻠﻪ‬
‫)‪Y = Math.Exp(X‬‬
‫ﺑﻳﻌﻲ ﻟﻠﻣﻌﺎﻣﻝ اﻟﻣرﺳﻝ‪.‬‬
‫ﺗُﻌﻳد اﻟﺟذر اﻟﺗر ّ‬ ‫ﺑﻳﻌﻲ ‪Sqrt‬‬
‫اﻟﺟذر اﻟﺗر ّ‬
‫ـﻲ ‪ ،e‬ﻳﻧـﺗﺞ‬
‫ـﺄس ﻟﻸﺳـﺎس اﻟطﺑﻳﻌ ّ‬
‫ﻋﻛس اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ‪ ..‬ﻓﻬﻲ ﺗﻌﻳد اﻟـرﻗم اﻟـذي ﻋﻧـد وﺿـﻌﻪ ﻛ ّ‬ ‫اﻟﻠوﻏﺎرﻳﺗم اﻟطﺑﻳﻌﻲ‬
‫ﻳﺎﺿﻳﺎت ﺑﺎﺳم ‪.Ln‬‬
‫ﻧﻌﺑر ﻋن ﻫذﻩ اﻟداﻟﺔ ﻓﻲ اﻟر ّ‬‫اﻟﻣﻌﺎﻣﻝ اﻟﻣرﺳﻝ ﻟﻠداﻟﺔ‪ ..‬وﻧﺣن ّ‬
‫‪Log‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪17‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫أي ّأﻧﻪ ﺗﺑﻌﺎ ﻟﻠﻣﺛﺎﻝ اﻟﺳﺎﺑق‪:‬‬


‫ّ‬
‫)‪X = Math.Log(Y‬‬
‫ﻛﺄس ﻟﻸﺳﺎس ‪ ،١٠‬ﻳﻧﺗﺞ اﻟﻣﻌﺎﻣﻝ اﻟﻣرﺳﻝ ﻟﻠداﻟﺔ‪.‬‬
‫ﺗﻌﻳد اﻟرﻗم اﻟذي ﻋﻧد وﺿﻌﻪ ّ‬ ‫ﻟوﻏﺎرﻳﺗم اﻷﺳﺎس ‪١٠‬‬
‫ﻓﺈذا ﻛﺎﻧت‪:‬‬ ‫‪Log10‬‬
‫‪Y = 10^X‬‬
‫ﻓﺈن‪:‬‬
‫ّ‬
‫)‪X = Math.Log10(Y‬‬

‫اﺋدﻳﺔ‪:‬‬
‫ﺛﻳﺔ واﻟز ّ‬
‫اﻟدوا ّﻝ اﻟﻣﺛﻠّ ّ‬
‫ﺟﻳــب ﺗﻣــﺎم اﻟزاوﻳــﺔ ﻓــﻲ ﺣﺳــﺎب اﻟﻣﺛﻠّﺛــﺎت‪ ،‬وﻫــﻲ ﻋﺑــﺎرة ﻋــن ﻧــﺎﺗﺞ ﻗﺳــﻣﺔ طــوﻝ اﻟﺿــﻠﻊ اﻟﻣﺟــﺎور ﻟﻠزاوﻳــﺔ‬ ‫ﺟﺗﺎ‬
‫ﻋﻠﻰ طوﻝ اﻟوﺗر ﻓﻲ اﻟﻣﺛﻠّث ﻗﺎﺋم اﻟزاوﻳﺔ‪.‬‬ ‫‪Cos‬‬

‫ﻋﻛس اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ‪ ،‬ﻓﻬﻲ ﺗﻌﻳد ﻟك اﻟزاوﻳﺔ إذا أرﺳﻠت ﻟﻬﺎ ﺟﺗﺎ اﻟزاوﻳﺔ‪.‬‬ ‫ﺟﺗﺎ‪Acos ١-‬‬
‫ﺟﻳــب اﻟزاوﻳــﺔ ﻓــﻲ ﺣﺳــﺎب اﻟﻣﺛﻠّﺛــﺎت‪ ،‬وﻫــﻲ ﻋﺑــﺎرة ﻋــن ﻧــﺎﺗﺞ ﻗﺳــﻣﺔ طــوﻝ اﻟﺿــﻠﻊ اﻟﻣﻘﺎﺑــﻝ ﻟﻠزاوﻳــﺔ ﻋﻠــﻰ‬ ‫ﺟﺎ ‪Sin‬‬
‫طوﻝ اﻟوﺗر ﻓﻲ اﻟﻣﺛﻠّث ﻗﺎﺋم اﻟزاوﻳﺔ‪.‬‬
‫‪١-‬‬
‫ﻋﻛس اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ‪ ،‬ﻓﻬﻲ ﺗﻌﻳد ﻟك اﻟزاوﻳﺔ إذا أرﺳﻠت ﻟﻬﺎ ﺟﺎ اﻟزاوﻳﺔ‪.‬‬ ‫‪Asin‬‬ ‫ﺟﺎ‬
‫ظ ـ ّﻝ اﻟزاوﻳــﺔ )ﻣﻳــﻝ اﻟﻣﻣــﺎس ﻟﻠﻣﻧﺣﻧــﻰ ﻋﻧــد ﻧﻘطــﺔ ﻣﻌﻳﻧــﺔ( ﻓــﻲ ﺣﺳــﺎب اﻟﻣﺛﻠّﺛــﺎت‪ ،‬وﻫــو ﻋﺑــﺎرة ﻋــن ﻧــﺎﺗﺞ‬ ‫ظﺎ ‪Tan‬‬
‫ﻗﺳﻣﺔ‪:‬‬
‫ﺟﺎ ÷ ﺟﺗﺎ )طوﻝ اﻟﺿﻠﻊ اﻟﻣﻘﺎﺑﻝ ﻟﻠزاوﻳﺔ ÷ طوﻝ اﻟﺿﻠﻊ اﻟﻣﺟﺎور ﻟﻬﺎ ﻓﻲ اﻟﻣﺛﻠّث ﻗﺎﺋم اﻟزاوﻳﺔ(‪.‬‬
‫‪١-‬‬
‫ﻋﻛس اﻟداﻟﺔ اﻟﺳﺎﺑﻘﺔ‪ ،‬ﻓﻬﻲ ﺗﻌﻳد ﻟك اﻟزاوﻳﺔ إذا أرﺳﻠت ﻟﻬﺎ ظﻝ اﻟزاوﻳﺔ‪.‬‬ ‫‪Atan‬‬ ‫ظﺎ‬
‫وﻟﻛﻧﻬــﺎ ﺗﺣﺳــب اﻟزاوﻳــﺔ ﻣــن ﻧــﺎﺗﺞ ﻗﺳــﻣﺔ اﻟــرﻗﻣﻳن اﻟﻣرﺳــﻠﻳن ﻟﻬــﺎ‪ ..‬ﻫــذا اﻟرﻗﻣــﺎن ﻗــد‬
‫ﻣﺛــﻝ اﻟداﻟــﺔ اﻟﺳــﺎﺑﻘﺔ‪ّ ،‬‬
‫‪Atan2‬‬
‫ـﺎس‪ ،‬أو ﻳﻣـﺛﻼن ﺟـﺎ وﺟﺗـﺎ‪ ،‬أو‬ ‫اﻷﻓﻘﻲ ﻟﻠﻧﻘطﺔ اﻟﺗﻲ ﻧﺣﺳـب ﻋﻧـدﻫﺎ ﻣﻳـﻝ اﻟﻣﻣ ّ‬ ‫أﺳﻲ و ّ‬ ‫اﻹﺣداﺛﻳﻳن اﻟر ّ‬
‫ّ‬ ‫ﻳﻣﺛّﻼن‬
‫ﻳﻣﺛّﻼن طوﻟﻲ اﻟﺿﻠﻌﻳن اﻟﻣﻘﺎﺑﻝ واﻟﻣﺟﺎور ﻟﻠزاوﻳﺔ ﻓﻲ اﻟﻣﺛﻠّث‪.‬‬
‫ـﺗم ﺑﻬــذﻩ‬
‫اﺋدﻳــﺔ ‪) ..Hyperbolic Cos‬إذا ﻟــم ﺗﻛــن ﺿــﻠﻳﻌﺎ ﺑﺎﻟرﻳﺎﺿــﻳﺎت‪ ،‬ﻓــﻼ ﺗﻬـ ّ‬
‫ﺟﻳــب ﺗﻣــﺎم اﻟزاوﻳــﺔ اﻟز ّ‬
‫‪Cosh‬‬
‫اﺋدﻳﺔ(‪.‬‬
‫اﻟدواﻝ اﻟز ّ‬
‫اﺋدﻳﺔ ‪.Hyperbolic Sin‬‬
‫ﺟﻳب اﻟزاوﻳﺔ اﻟز ّ‬
‫‪Sinh‬‬

‫اﺋدﻳﺔ ‪.Hyperbolic Tan‬‬


‫ظ ّﻝ اﻟزاوﻳﺔ اﻟز ّ‬
‫‪Tanh‬‬

‫اﻟﺛواﺑت‪:‬‬
‫ﻳﺎﺿﻳﺎت ﻋﻠﻰ ﺛﺎﺑﺗﻳن‪ ،‬ﻫﻣﺎ‪:‬‬
‫ﺧﻠﻳﺔ اﻟر ّ‬
‫ﺗﺣﺗوي ّ‬
‫‪[1]١‬‬
‫‪.‬‬ ‫ﻓﺈن ﻗﻳﻣﺗﻪ ﺗﺳﺎوي ﺗﻘرﻳﺑﺎ ‪٢.٧٢‬‬
‫اﻟطﺑﻳﻌﻲ ‪ :E‬وﻛﻣﺎ ذﻛرﻧﺎ ّ‬
‫ّ‬ ‫اﻷﺳﺎس‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪18‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫اﻟﺗﻘرﻳﺑﻳﺔ "ط" ‪ :PI‬اﻟﻧﺳﺑﺔ ﺑﻳن ﻣﺣﻳط اﻟداﺋرة وطوﻝ ﻗطرﻫﺎ‪ ،‬وﺗﺳﺎوي ﺗﻘرﻳﺑﺎ )‪ (٧ ÷ ٢٢‬أو ‪.٣.١٤‬‬
‫ّ‬ ‫اﻟﻧﺳﺑﺔ‬

‫اﺋﻳﺔ‪:‬‬
‫ﺗوﻟﻳد اﻷﻋداد اﻟﻌﺷو ّ‬
‫‪ -١‬ﺑﺎﺳﺗﺧدام دواﻝ ‪:VB‬‬
‫اﺋﻳﺔ‪:‬‬
‫ﻫﺎﻣﺗﻳن ﻟﺗوﻟﻳد اﻷﻋداد اﻟﻌﺷو ّ‬
‫ﻳﻣﻧﺣك ‪ VB‬داﻟﺗﻳن ّ‬

‫اﺋﻲ ‪:Rnd‬‬ ‫ﻋﺷو ّ‬


‫اﺋﻲ ﺑﻳن اﻟﺻﻔر واﻟواﺣد‪.‬‬
‫اﺳﺗﺧدم ﻫذﻩ اﻟداﻟﺔ ﻟﻠﺣﺻوﻝ ﻋﻠﻰ رﻗم ﺷﺑﻪ ﻋﺷو ّ‬
‫))(‪MsgBox(Rnd‬‬
‫اﺋﻲ‪ ..‬ﻻﺣـظ ّأﻧـك ﻟـو أرﺳـﻠت ﻫـذا‬ ‫ي‪ ،‬ﻋﺑﺎرة ﻋن رﻗم ﻳدﺧﻝ ﻓـﻲ ﺣﺳـﺎﺑﺎت ﺗوﻟﻳـد اﻟـرﻗم اﻟﻌﺷـو ّ‬ ‫وﻟﻬذﻩ اﻟداﻟﺔ ﻣﻌﺎﻣﻝ اﺧﺗﻳﺎر ّ‬
‫اﺋﻳﺔ‬
‫أن اﻷرﻗﺎم اﻟﻌﺷـو ّ‬ ‫اﺋﻲ ﻗﻣت ﺑﺈﻧﺗﺎﺟﻪ ﺑﻬذﻩ اﻟداﻟﺔ‪ .‬وﻳﺟب أن ﺗﻼﺣظ ّ‬ ‫اﻟﻣﻌﺎﻣﻝ ﺻﻔرا‪ ،‬ﻓﺳﺗﺣﺻﻝ ﻋﻠﻰ آﺧر رﻗم ﻋﺷو ّ‬
‫اﺋﻳﺔ‪ ،‬ﺛـ ّـم أﻏﻠﻘــت اﻟﺗطﺑﻳــق‬
‫اﻟﺗــﻲ ﻳﻧﺗﺟﻬــﺎ ‪ VB‬ﺗﻧــﺗﺞ ﺑــﻧﻔس اﻟﺗرﺗﻳــب ﻛـ ّﻝ ﻣـ ّـرة‪ ،‬ﺑﻣﻌﻧــﻰ ّأﻧــك ﻟــو أﻧﺗﺟــت ﺛﻼﺛــﺔ أرﻗــﺎم ﻋﺷـو ّ‬
‫وﻟﻛﻧﻬﺎ‬
‫إن ﻫذا ﻟﻳس ﺧطﺄ‪ّ ،‬‬ ‫اﺋﻳﺔ ﺟدﻳدة‪ ،‬ﻓﺳﺗﺣﺻﻝ ﻋﻠﻰ ﻧﻔس اﻷرﻗﺎم اﻟﺳﺎﺑﻘﺔ‪ّ .‬‬ ‫وأﻋدت ﺗﺷﻐﻳﻠﻪ ﻹﻧﺗﺎج ﺛﻼﺛﺔ أرﻗﺎم ﻋﺷو ّ‬
‫ﻣﻳ ـزة ﻳﻣﻧﺣﻬــﺎ ﻟــك ‪ VB‬ﺣﺗّــﻰ ﺗﺳــﺗطﻳﻊ ﺗﺻــﺣﻳﺢ ّأﻳــﺔ أﺧطــﺎء ﺗﺣــدث ﻓــﻲ ﺑرﻧﺎﻣﺟــك‪ ..‬ﻓﻠــو ﻟــم ﺗﺳــﺗطﻊ اﺳــﺗﻌﺎدة اﻷرﻗــﺎم‬
‫ﻋﺎﻣـﺔً ﻻ ﺗﻘﻠـق‪..‬‬
‫اﺋﻳﺔ اﻟﺗـﻲ ﺳ ّـﺑﺑت اﻟﺧطـﺈ‪ ،‬ﻓﻘـد ﺗﻌـﻳش ﻋﻣـرك ﻛﻠّـﻪ ﺗﻧﺗظـر ﺣـدوث اﻟﺧطـﺈ ﻣ ّـرة أﺧـرى ﺑـﻼ ﺟـدوى‪ّ .‬‬ ‫اﻟﻌﺷو ّ‬
‫ﻳﻣﻛﻧــك أن ﺗﺗﺟــﺎوز ﻫــذﻩ اﻹﻣﻛﺎﻧﻳــﺔ‪ ،‬ﻟﺗﺛــق ﻓــﻲ ﺣﺻــوﻟك ﻋﻠــﻰ أرﻗــﺎم ﻋﺷ ـو ّ‬
‫اﺋﻳﺔ ﻏﻳــر ﻣﺗﻛـ ّـررة‪ ،‬وذﻟــك ﺑﺎﺳــﺗﺧدام اﻟداﻟــﺔ‬
‫اﺋﻲ ﺑﻳن اﻟﺻﻔر واﻟواﺣد؟‪ ..‬ﻣـﺎذا ﻟـو أردﻧـﺎ أن ﻳﻛـون ﺑـﻳن‬
‫ﺑم ﻳﻔﻳدﻧﺎ رﻗم ﻋﺷو ّ‬
‫‪ ،Randomize‬ﻛﻣﺎ ﺳﻧرى ﻻﺣﻘﺎ‪ .‬وﻟﻛن َ‬
‫اﺋﻲ‬
‫‪ ١‬و ‪ ٤٩‬ﻣﺛﻼ؟ ﺑﺳﻳطﺔ‪ ..‬ﻛ ّﻝ ﻣﺎ ﻋﻠﻳﻧﺎ ﻫو اﺳﺗﺧدام ﺑﻌـض ﻗواﻋـد اﻟﺿـرب واﻟﺟﻣـﻊ‪ ،‬ﺣﻳـث ﺳﻧﺿـرب اﻟـرﻗم اﻟﻌﺷـو ّ‬
‫ﺛم ﻧﺟﻣﻊ ﻋﻠﻳﻪ ‪ ،١‬وﻧﺄﺧذ اﻟﻌدد اﻟﺻﺣﻳﺢ ﻣن اﻟﻧﺎﺗﺞ‪ ..‬اﻧظر ﻟﻠﺟﻣﻠﺔ اﻟﺗﺎﻟﻳﺔ‪:‬‬
‫ﻓﻲ ‪ّ ،٤٩‬‬
‫) ) ‪MsgBox( Int( Rnd() * 49 + 1‬‬

‫ﺗوزﻳﻊ ﻋﺷواﺋﻲ ‪:Randomize‬‬


‫اﺳﺗﺧدم ﻫذﻩ اﻟداﻟﺔ ﻓﻲ ﺑداﻳﺔ اﻹﺟراء اﻟذي ﺗﺳﺗدﻋﻲ ﻓﻳﻪ اﻟداﻟﺔ ‪ ،Rnd‬وذﻟك ﻟﺿﻣﺎن اﻟﺣﺻـوﻝ ﻋﻠـﻰ ﺗﺗـﺎﺑﻊ ﺟدﻳـد ﻣـن‬
‫ﻳﺗم ﻓﻳﻬﺎ ﺗﻧﻔﻳذ اﻹﺟراء‪ .‬ﻟﻌﻠّك ﺗﺗﺳﺎءﻝ ﻛﻳف ﻳﺣدث ﻫذا؟‬ ‫ﻣرة ّ‬‫اﺋﻳﺔ‪ ،‬ﻓﻲ ﻛ ّﻝ ّ‬
‫اﻷرﻗﺎم اﻟﻌﺷو ّ‬
‫أن‬
‫ﻣﻣــﺎ ﻳﻌﻧــﻲ ّ‬
‫اﺋﻲ‪ّ ،‬‬
‫إن اﺳــﺗدﻋﺎء اﻟداﻟــﺔ ‪ Randomize‬ﻳﺟﻌــﻝ ‪ VB‬ﻳﺳــﺗﺧدم ﺗوﻗﻳــت ﺟﻬــﺎزك ﻓــﻲ إﻧﺗــﺎج اﻟــرﻗم اﻟﻌﺷ ـو ّ‬‫ّ‬
‫ﻣرة‪.‬‬
‫اﺋﻳﺔ اﻟﻣﺗوﻟّدة ﺳﺗﻛون ﻣﺧﺗﻠﻔﺔ ﻓﻲ ﻛ ّﻝ ّ‬
‫ﻣﺟﻣوﻋﺔ اﻷرﻗﺎم اﻟﻌﺷو ّ‬

‫اﺋﻳﺔ ‪:Random Class‬‬‫ﺧﻠﻳﺔ اﻷﻋداد اﻟﻌﺷو ّ‬


‫ﺑﺎﺳﺗﺧدام ّ‬
‫ﻣﺗﻐﻳـر ﻣـن ﻫـذﻩ‬
‫اﺋﻳﺔ‪ ..‬وﻳﻣﻛﻧـك ﺗﻌرﻳـف ّ‬
‫اﻟﺧﻠﻳﺔ ‪ Random‬ﻟﺗوﻟﻳد اﻷﻋداد اﻟﻌﺷـو ّ‬
‫ﻳﻣﻧﺣك إطﺎر اﻟﻌﻣﻝ ‪ّ Framework‬‬
‫اﻟﺧﻠﻳﺔ ﻛﺎﻟﺗﺎﻟﻲ‪:‬‬
‫ّ‬
‫)(‪Dim R As New Random‬‬
‫اﺋﻲ‪:‬‬
‫رﻗﻣﻳﺎ‪ ،‬ﻳدﺧﻝ ﻓﻲ ﺗوﻟﻳد اﻟرﻗم اﻟﻌﺷو ّ‬
‫وﺗوﺟد ﺻﻳﻐﺔ أﺧرى‪ ،‬ﺗﺳﺗﻘﺑﻝ ﻣﻌﺎﻣﻼ ّ‬
‫ﻣﺑدﺋﻲ(‪Dim R As New Random‬‬
‫ّ‬ ‫)رﻗم‬
‫اﺋﻳﺔ‪:‬‬
‫ﺗﺳﺗﻣد ﻫذا اﻟرﻗم ﻣن ﺗوﻗﻳت ﺟﻬﺎزك‪ ،‬زﻳﺎدة ﻓﻲ ﺿﻣﺎن اﻟﻌﺷو ّ‬
‫ّ‬ ‫وﻳﻣﻛﻧك أن‬
‫))‪Dim R As New Random(CInt(Now.ToOADate‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪19‬‬
‫‪Windows Programming‬‬ ‫‪Asst. Prof. Ali Kadhum Idrees‬‬

‫اﻟﺧﻠﻳﺔ اﻟوﺳﺎﺋﻝ اﻟﺗﺎﻟﻳﺔ‪:‬‬


‫ّ‬ ‫وﺗﻣﺗﻠك ﻫذﻩ‬
‫اﻟﻌدد اﻟﺻﺣﻳﺢ اﻟﺗﺎﻟﻲ ‪:Next‬‬
‫اﺋﻳﺎ ﺟدﻳدا‪ ..‬ﻫذا اﻟﻌدد ﺳﻳﻛون ﻋددا ﺻﺣﻳﺣﺎ ‪ ،Integer‬ﻣن ﺻﻔر إﻟﻰ ﻣﺎ ﻳزﻳد ﻋن ‪ ٢‬ﻣﻠﻳﺎر‪:‬‬ ‫ﺗﻌﻳد ﻋددا ﻋﺷو ّ‬
‫)‪MsgBox(R.Next‬‬
‫اﺋﻲ اﻟﻧـﺎﺗﺞ )ﺑـدﻻ ﻣـن ‪ ٢‬ﻣﻠﻳـﺎر(‪ ..‬واﻟﺟﻣﻠـﺔ‬
‫وﺗوﺟد ﺻﻳﻐﺔ ﻣن ﻫذﻩ اﻟداﻟﺔ ﺗﺳﻣﺢ ﻟك ﺑﺗﺣدﻳد اﻟﺣ ّـد اﻷﻗﺻـﻰ ﻟﻠـرﻗم اﻟﻌﺷـو ّ‬
‫ﺑﻳن ‪ ٠‬و ‪:١٢‬‬
‫اﺋﻳﺎ َ‬
‫اﻟﺗﺎﻟﻳﺔ ﺗوﻟّد ﻋددا ﻋﺷو ّ‬
‫))‪MsgBox(R.Next(12‬‬
‫اﺋﻳﺎ ﺑﻳن ‪ ٥‬و ‪:٤٥‬‬
‫ﻟﺣد اﻷﻗﺻﻰ‪ ..‬واﻟﺟﻣﻠﺔ اﻟﺗﺎﻟﻳﺔ ﺗوﻟّد ﻋددا ﻋﺷو ّ‬
‫اﻟﺣد اﻷدﻧﻰ وا ّ‬
‫وﺗوﺟد ﺻﻳﻐﺔ ﺛﺎﻟﺛﺔ‪ ،‬ﺗﻘﺑﻝ ﻣﻌﺎﻣﻠﻳن‪ّ :‬‬
‫))‪MsgBox(R.Next(5,45‬‬

‫اﻟﻌدد اﻟﻣزدوج اﻟﺗﺎﻟﻲ ‪:NextDouble‬‬


‫وﻟﻛﻧـﻪ أﺑـدا ﺳـﻳﻛون‬
‫أن ﻫذا اﻟﻌدد ﻗد ﻳﻛـون ﻣﺳـﺎوﻳﺎ ﻟﻠﺻـﻔر ّ‬
‫اﺋﻳﺎ ﺟدﻳدا ﻣﺎ ﺑﻳن اﻟﺻﻔر واﻟواﺣد‪ ..‬ﻻﺣظ ّ‬
‫ﺗﻌﻳد ﻋددا ﻋﺷو ّ‬
‫أﺻﻐر ﻣن اﻟواﺣد‪.‬‬

‫اﺋﻳﺔ اﻟﺗﺎﻟﻳﺔ ‪:NextBytes‬‬


‫ﻣﺻﻔوﻓﺔ اﻷﻋداد اﻟﻌﺷو ّ‬
‫اﺋﻳﺔ‪ ..‬ﻫــذﻩ اﻟﻣﺻــﻔوﻓﺔ‬
‫ﻫــذﻩ اﻟوﺳــﻳﻠﺔ اﻟﺷـ ّـﻳﻘﺔ ﺗﺗــﻳﺢ ﻟــك ﻣــﻝء ﻣﺻــﻔوﻓﺔ وﺣــدات ‪ Bytes‬ﺑﻣﺟﻣوﻋــﺔ ﻣــن اﻷﻋــداد اﻟﻌﺷ ـو ّ‬
‫ﻣرﺟﻌﻲ ‪:ByRef‬‬
‫ّ‬ ‫ﺳﺗرﺳﻠﻬﺎ ﻟﻬذﻩ اﻟوﺳﻳﻠﺔ ﻛﻣﻌﺎﻣﻝ‬
‫‪Dim RA(10) As Byte‬‬
‫)‪R.NextBytes(RA‬‬

‫‪Department of Computer Science‬‬ ‫‪College of Science for Women‬‬


‫‪20‬‬

You might also like