Program C++
Program C++
WWW.CB4A.COM
ﻤﻘﺩﻤﺔ ﺍﻟﻜﺘﺎﺏ٥..........................................................................
ﻨﻅﺭﺓ ﻤﺨﺘﺼﺭﺓ ﺤﻭل ﺍﻟﻜﺘﺎﺏ٨ ........................................................................................................... :
١٠ .................................................................................................................................
٣
٤
ﻤﻼﺤﻅﺔ :
ﻟﻘﺩ ﺒﺩﺃﺕ ﻓﻲ ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻤﻨﺫ ﺤﻭﺍﻟﻲ ﻋﺸﺭﺓ ﺃﺸﻬﺭ ﺒﻌﻭﻥ ﺍﷲ
ﻋﺯ ﻭ ﺠل ﻭ ﺘﺄﻟﻴﻑ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻟﻡ ﻴﻜﻥ ﺒﺎﻷﻤﺭ ﺍﻟﻬﻴﻥ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻲ
ﻓﻜﺘﺎﺒﺔ ﻓﻜﺭﺓ ﻭﺍﺤﺩ ﺃﻭ ﻤﺜﺎل ﻭﺍﺤﺩ ﺃﺤﻴﺎﻨﺎ ً ﻗﺩ ﻴﺴﺘﻐﺭﻕ ﻤﻨﻲ ﻤﻥ
ﺍﻟﻭﻗﺕ ﺜﻼﺙ ﺃﻴﺎﻡ ،ﻭ ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻷﻤﺭ ﻋﻨﺩﻤﺎ ﺒﺩﺃﺕ ﻓﻲ ﻫﺫﺍ ﺍﻟﻌﻤل
ﻗﺭﺭﺕ ﻋﻠﻰ ﻋﺩﻡ ﻨﺸﺭ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻋﻠﻰ ﺸﺒﻜﺔ ﺍﻹﻨﺘﺭﻨﺕ ﻗﺒل
ﺍﻹﻨﺘﻬﺎﺀ ﻜﻠﻴﺎﹰ ﻤﻥ ﻜﺘﺎﺒﺔ ﻜل ﺃﺠﺯﺍﺀ ﺍﻟﻜﺘﺎﺏ ﺍﻟﻤﻘﺭﺭﺓ.
ﻭﻟﻜﻨﻲ ﺒﻌﺩ ﺃﻥ ﺍﻨﺘﻬﻴﺕ ﻤﻥ ﺍﻟﺠﺯﺀ ﺍﻟﺜﺎﻨﻲ ﻗﻤﺕ ﻓﻲ ﻤﺭﺠﻌﺔ
ﺍﻟﺠﺯﺌﻴﻴﻥ ﺍﻷﻭل ﻭ ﺍﻟﺜﺎﻨﻲ ﻓﻭﺠﺩﺕ ﺒﻌﺽ ﺍﻷﺨﻁﺎﺀ ،ﻓﺎﻟﻜﻤﺎل ﷲ ﻋﺯ
ﻭ ﺠل ،ﻟﺫﻟﻙ ﺘﺭﺍﺠﻌﺕ ﻓﻲ ﻗﺭﺍﺭﻱ ﻭ ﻗﺭﺭﺕ ﻋﻠﻰ ﻨﺸﺭ ﺍﻟﺠﺯﺀ
ﺍﻷﻭل ﻭ ﺍﻟﺜﺎﻨﻲ ﻋﻠﻰ ﺸﻜل ﻨﺴﺨﺔ ﺘﺠﺭﻴﺒﻴﺔ ،ﻟﻜﻲ ﻴﺘﻤﻜﻥ ﺠﻤﻴﻊ
ﺍﻷﺨﻭﺓ ﻤﻥ ﻗﺭﺃﺕ ﻤﺎ ﺘﻡ ﻜﺘﺎﺒﺘﻪ ﻭ ﻤﻥ ﺜﻡ ﻴﺘﻜﺭﻤﻭﺍ ﻋﻠﻲ ﺒﺎﻟﻨﻘﺩ ﻭ
ﺒﺎﻟﻤﻼﺤﻅﺎﺕ ﺤﻭل ﺍﻷﺨﻁﺎﺀ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻭ ﺤﻭل ﻜﻴﻔﻴﺔ ﺍﻷﺴﻠﻭﺏ ﻓﻲ
ﺍﻟﻜﺘﺎﺒﺔ ﻤﻥ ﺍﻟﻨﻭﺍﺤﻲ ﺍﻟﺴﻠﺒﻴﺔ ﻭ ﺍﻹﻴﺠﺎﺒﻴﺔ ﺤﺘﻰ ﺃﻜﺘﺸﻑ ﺃﺨﻁﺎﺌﻲ ﻭ
ﺃﺤﺎﻭل ﻋﻠﻰ ﻋﺩﻡ ﺘﻜﺭﺭﻫﺎ ﻓﻲ ﺍﻷﺠﺯﺍﺀ ﺍﻟﻼﺤﻘﺔ ﺇﻥ ﺸﺎﺀ ﺍﷲ.
ﻁﻠﺏ ﺨﺎﺹ :ﻻ ﺘﺒﺨﻠﻭﺍ ﻋﻠﻲ ﺒﻨﺼﺎﺌﺤﻜﻡ ،ﻭ ﺃﺭﺠﻭﺍ ﺃﻥ ﺘﺭﺴﻠﻭﺍ ﻟﻲ
ﺒﻤﻼﺤﻅﺘﻜﻡ ﻋﻠﻰ ﺍﻟﺒﺭﻴﺩ ﺍﻹﻟﻜﺘﺭﻭﻨﻲ ﺍﻟﺘﺎﻟﻲ:
[email protected]
ﻭ ﺴﺄﻜﻭﻥ ﺸﺎﻜﺭﺍﹰ ﻟﻜﻡ .ﺠﺯﺍﻜﻡ ﺍﷲ ﺨﻴﺭﺍﹰ
٥
) ﻳَﺎ ﻣَﻌْﺸَﺮَ اﻟْﺠِﻦﱢ وَاﻹِﻧﺲِ إِنْ اﺳْﺘَﻄَﻌْﺘُﻢْ أَنْ ﺗَﻨﻔُﺬُوا ﻣِﻦْ أَﻗْﻄَﺎرِ اﻟﺴﱠﻤَﻮَاتِ
وَاﻷَرْضِ ﻓَﺎﻧﻔُﺬُوا ﻻ ﺗَﻨﻔُﺬُونَ إِﻻﱠ ﺑِﺴُﻠْﻄَﺎنٍ (
ﺴﻭﺭﺓﺍﻟﺭﺤﻤﻥ )(٣٣
٦
ﺍﻨﻁﻼﻗﺎ ً ﻤﻥ ﺫﻟﻙ ﻜﻠﻪ ﻭ ﻁﻤﻌﺎﹰ ﻓﻲ ﺇﻴﺼﺎل ﺍﻟﻜﺘﺎﺏ ﺍﻟﻨﺎﻁﻕ ﺒﻠﻐﺔ ﺍﻟﻘﺭﺃﻥ ﺇﻟﻰ ﺠﻤﻴﻊ
ﺍﻹﺨﻭﺓ ﻁﻠﺒﺔ ﺍﻟﻌﻠﻡ ﻭ ﺍﻟﺭﺍﻏﺒﻴﻥ ﻓﻲ ﺘﻌﻠﻡ ﻟﻐﺔ ، C++ﻭ ﻟﻜﺜﺭﺓ ﺍﻟﻤﻭﺍﻀﻴﻊ
ﻭ ﺍﻟﻤﻘﺎﻻﺕ ﺍﻟﺘﻲ ﻗﺭﺃﺘﻬﺎ ﻋﻠﻰ ﺴﺎﺤﺎﺕ ﺸﺒﻜﺔ ﺍﻹﻨﺘﺭﻨﺕ ﻤﻥ ﺍﻹﺨﻭﺓ ﺍﻟﺭﺍﻏﺒﻴﻥ ﻓﻲ
ﺘﻌﻠﻡ ﻟﻐﺔ ﺴﻲ ﺒﻠﺱ ﺒﻠﺱ ﻭ ﺍﻟﺘﻲ ﺘﻁﺎﻟﺏ ﻓﻲ ﺇﺭﺸﺎﺩﻫﻡ ﺇﻟﻰ ﺒﻌﺽ ﺍﻟﻜﺘﺏ ﺍﻟﻌﺭﺒﻴﺔ
ﺍﻟﺘﻲ ﺘﺘﺤﺩﺙ ﻋﻥ ﻫﺫﻩ ﺍﻟﻠﻐﺔ ﻤﻊ ﻜﺜﺭﺓ ﺍﻟﺸﻜﺎﻭﻯ ﺤﻭل ﻗﻠﺔ ﻫﺫﻩ ﺍﻟﻜﺘﺏ ﺃﻭ
ﺍﺭﺘﻔﺎﻉ ﺜﻤﻥ ﺍﻟﻜﺘﺏ ﺍﻟﺘﻲ ﺘﺘﻜﻠﻡ ﻋﻥ ﻫﺫﻩ ﺍﻟﻠﻐﺔ ﻭ ﻋﺩﻡ ﻗﺩﺭﺓ ﺠﻤﻴﻊ ﺍﻹﺨﻭﺓ
ﺍﻟﺭﺍﻏﺒﻴﻥ ﻓﻲ ﺍﻟﺘﻌﻠﻡ ﻓﻲ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻜﺘﺏ ﺴﻭﺍﺀ ﺒﺴﺒﺏ ﺍﻟﺴﻌﺭ ﺍﻟﻤﺭﺘﻔﻊ
ﺃﻭ ﻋﺩﻡ ﺘﻭﻓﺭﻫﺎ ﻓﻲ ﺠﻤﻴﻊ ﺍﻟﺩﻭل ﺍﻟﻌﺭﺒﻴﺔ ﺃﻭ ﺍﻷﺠﻨﺒﻴﺔ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﻁﻼﺏ
ﺍﻟﻌﺭﺏ ﺍﻟﺫﻴﻥ ﻴﺩﺭﺴﻭﻥ ﻓﻲ ﺍﻟﺨﺎﺭﺝ ،ﻗﺭﺭﺕ ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻭ ﺍﻟﺫﻱ ﺃﺴﺄل ﺍﷲ
ﺴﺒﺤﺎﻨﻪ ﻭ ﺘﻌﺎﻟﻰ ﺒﺄﻥ ﻴﻌﻨﻨﻲ ﻋﻠﻰ ﻜﺘﺎﺒﺘﻪ ﺒﺎﻟﻁﺭﻴﻘﺔ ﻭ ﺍﻷﺴﻠﻭﺏ ﺍﻟﻤﻨﺎﺴﺒﻴﻥ ﻭ
ﺍﻟﺸﺭﺡ ﺍﻟﻤﺒﺴﻁ ﻭ ﺍﻟﻭﺍﻓﻲ ﻤﻊ ﺇﻴﺭﺍﺩ ﺍﻷﻤﺜﻠﺔ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻟﻠﻤﻭﺍﻀﻴﻊ ﺍﻟﻭﺍﺭﺩﺓ ﻓﻲ ﻫﺫﺍ
ﺍﻟﻜﺘﺎﺏ.
ﻭ ﺍﷲ ﻤﻥ ﻭﺭﺍﺀ ﺍﻟﻘﺼﺩ
٧
ﻗﻤﺕ ﻓﻲ ﺘﺄﻟﻴﻑ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻤﻥ ﺨﻼل ﻭﺠﻬﺔ ﻨﻅﺭﻱ ﺍﻟﺨﺎﺼﺔ ﻟﻜﻴﻔﻴﺔ ﺍﻟﺘﻌﻠﻡ ﺍﻟﺼﺤﻴﺢ
ﻟﻠﻐﺔ ، C++ﻓﻤﻥ ﻭﺠﻬﺔ ﻨﻁﺭﻱ ﺍﻟﺨﺎﺼﺔ ﺤﺎﻭﻟﺕ ﺍﻟﺘﺼﺩﻱ ﻟﻼﻋﺘﻘﺎﺩ ﺍﻟﺴﺎﺌﺩ ﺍﻟﺫﻱ ﺃﺴﻤﻌﺔ
ﻋﻠﻰ ﺸﺒﻜﺔ ﺍﻻﻨﺘﺭﻨﺕ ﻭ ﺍﻟﺫﻱ ﻴﻜﻤﻥ ﻓﻲ ﺃﻨﻪ ﻤﻥ ﺍﻟﺼﻌﺏ ﺠﺩﺍﹰ ﺇﻥ ﻟﻡ ﻴﻜﻥ ﻤﻥ ﺍﻟﻤﺴﺘﺤﻴل
ﺘﻌﻠﻡ ﻟﻐﺔ C++ﺇﻥ ﻟﻡ ﺘﻜﻥ ﺘﻌﺭﻑ ﻤﻥ ﻗﺒل ﻟﻐﺔ Cﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻨﺎ ﺃﻋﺭﻑ ﺍﻟﻜﺜﻴﺭ ﻤﻥ
ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﺍﻟﺫﻴﻥ ﺘﻌﻠﻤﻭﺍ ﻫﺫﻩ ﺍﻟﻠﻐﺔ ﻤﻥ ﺩﻭﻥ ﻤﻌﺭﻓﺔ ﻤﺴﺒﻘﺔ ﻟﻠﻐﺔ . C
ﻭ ﻤﻥ ﻭﺠﻬﺔ ﻨﻅﺭﻱ ﺍﻟﺨﺎﺼﺔ ﺃﻴﻀﺎﹰ ﺃﻨﻪ ﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﺘﺘﻌﻠﻡ ﻟﻐﺔ C++ﺒﺎﻟﺸﻜل ﺍﻟﺫﻱ
ﺘﺼﺒﺢ ﻓﻴﻪ ﻜﻤﺒﺭﻤﺞ ﻟﻬﺫﻩ ﺍﻟﻠﻐﺔ ﻭ ﻟﻴﺱ ﻜﻬﻭﺍﻱ ﺒﺭﻤﺠﺔ ،ﻋﻠﻴﻙ ﺃﻭﻻﹰ ﺒﺩﺭﺍﺴﺔ ﺍﻷﻭﺍﻤﺭ ﻭ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻷﺴﺎﺴﻴﺔ ﻟﻬﺫﻩ ﺍﻟﻠﻐﺔ ﺒﺸﻜل ﻋﻤﻴﻕ ﻭ ﻗﻭﻱ ﻭ ﻤﺤﺎﻭﻟﺔ ﺃﻥ ﺘﺘﻌﻠﻡ ﻜل ﺘﻌﻠﻴﻤﺔ ﻤﻥ
ﺘﻌﻠﻴﻤﺎﺕ ﻫﺫﻩ ﺍﻟﻠﻐﺔ ﻋﻠﻰ ﺤﺩﻯ ﻭ ﺩﺭﺍﺴﺘﻬﺎ ﺠﻴﺩﺍﹰ ﻭ ﻤﻌﺭﻓﺔ ﻜﻴﻔﻴﺔ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻭ ﻤﻭﻀﻌﻬﺎ
ﻓﻲ ﺍﻟﻤﻜﺎﻥ ﺍﻟﻤﻨﺎﺴﺏ ﺒﺎﻟﺒﺭﻨﺎﻤﺞ ﻭ ﻤﻌﺭﻓﺔ ﻜل ﻤﻼﺤﻅﺔ ﺃﻭ ﺘﻨﺒﻴﻪ ﺃﻭ ﺘﻌﻠﻴﻕ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻬﺫﻩ
ﺍﻟﺘﻌﻠﻴﻤﺔ ،ﻭ ﻟﻜﻥ ﻫﺫﺍ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻓﻘﻁ ،ﻓﺒﻌﺩ ﺃﻥ ﺘﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭ ﺍﻟﺠﻤل
ﺍﻷﺴﺎﺴﻴﺔ ﻟﻬﺫﻩ ﺍﻟﻠﻐﺔ ﺒﺸﻜل ﺠﻴﺩ ﻓﺈﻥ ﺫﻟﻙ ﺴﻭﻑ ﻴﺴﻬل ﻋﻠﻴﻙ ﺍﻟﻤﺸﻭﺍﺭ ﻗﹸﺩﻤﺎﹰ ﻭ ﻴﻭﻓﺭ
ﻋﻠﻴﻙ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﻭﻗﺕ ﻭ ﺍﻟﻌﻨﺎﺀ ﻟﻜﻲ ﺘﺼﺒﺢ ﻤﺒﺭﻤﺞ ﻟﻬﺫﻩ ﺍﻟﻠﻐﺔ.
٨
ﻭ ﺨﺫ ﻤﺜﺎل ﻋﻠﻰ ﺫﻟﻙ ﻓﺈﺫﺍ ﺃﺭﺕ ﺃﻥ ﺘﺒﻨﻰ ﻤﻨﺯل ﺠﺩﻴﺩ ﻓﺈﻥ ﺃﻭل ﻭ ﺃﻜﺜﺭ ﻤﺎ ﺘﻬﺘﻡ ﺒﻪ ﻫﻭ
ﺍﻷﺴﺎﺱ ﺍﻟﻘﻭﻱ ﻭ ﺍﻟﻤﺘﻴﻥ ﻟﻬﺫﺍ ﺍﻟﻤﻨﺯل ﻭ ﺇﺫﺍ ﺘﻤﻜﻨﺕ ﻤﻥ ﺫﻟﻙ ﻓﺈﻨﻙ ﺒﻌﺩ ﺫﻟﻙ ﺴﺘﺒﺩﺃ ﻓﻲ
ﺍﺨﺘﻴﺎﺭ ﺍﻟﺠﺩﺭﺍﻥ ﻭ ﺍﻷﺒﻭﺍﺏ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻟﻙ ﻭ ﺘﺯﻴﻥ ﺒﻴﺘﻙ ﻜﻤﺎ ﺘﺸﺎﺀ ﻭﻤﻥ ﺩﻭﻥ ﺃﻱ ﻗﻠﻕ ﺃﻭ
ﺨﻭﻑ ﻤﻥ ﺴﻘﻭﻁ ﻟﻠﻤﻨﺯل ﺃﻭ ﻤﺎ ﺸﺎﺒﻪ ﺫﻟﻙ ﻤﻥ ﻤﺸﺎﻜل ﺍﻟﺒﻨﺎﺀ ﺍﻟﺘﻲ ﺘﺄﺘﻲ ﻤﻥ ﺃﺜﺎﺭ ﺍﻷﺴﺎﺱ
ﺍﻟﻀﻌﻴﻑ ﺍﻟﻐﻴﺭ ﻤﺘﻴﻥ.
ﻟﺫﻟﻙ ﻓﻘﺩ ﺸﺭﻋﺕ ﺃﻭﻻﹰ ﻓﻲ ﺸﺭﺡ ﺍﻟﻤﺒﺎﺩﺉ ﻭ ﺍﻟﻤﻔﺎﻫﻴﻡ ﺍﻷﺴﺎﺴﻴﺔ ﻟﻬﺫﻩ ﺍﻟﻠﻐﺔ ﻭ ﺒﺸﻜل
ﻋﻤﻴﻕ ﻭ ﺸﺭﺡ ﻤﻔﺼل ﻟﻜل ﺠﻤﻠﺔ ﺃﻭ ﺘﻌﻠﻴﻤﺔ ﺃﻭ ﺃﻤﺭ ﻤﻥ ﺃﻭﺍﻤﺭ ﻫﺫﻩ ﺍﻟﻠﻐﺔ ﺍﻷﺴﺎﺴﻴﺔ ،ﺇﻟﻰ
ﺍﻟﺤﺩ ﺍﻟﺫﻱ ﻗﺩ ﺃﻜﻭﻥ ﻓﻴﻪ ﺃﺴﻬﺒﺕ ﻭ ﺃﻜﺜﺭﺕ ﻓﻲ ﺍﻟﺸﺭﺡ ،ﻭ ﻟﻜﻥ ﻫﺩﻓﻲ ﻓﻲ ﻫﺫﻴﻥ ﺍﻟﻔﺼﻠﻴﻥ
ﺍﻷﻭل ﻭ ﺍﻟﺜﺎﻨﻲ ﻫﻭ_ﻜﻤﺎ ﻗﻠﺕ ﺴﺎﺒﻘﺎﹰ_ ﺘﻜﻭﻴﻥ ﺒﻨﻴﺔ ﻭ ﻗﺎﻋﺩﺓ ﻗﻭﻴﺔ ﻭ ﻤﺘﻴﻨﺔ ﻟﻠﻤﺒﺭﻤﺞ ﺤﻭل
ﻟﻐﺔ C++ﺤﺘﻰ ﻴﺴﻬل ﻋﻠﻴﺔ ﺍﻟﻁﺭﻴﻕ ﻓﻴﻤﺎ ﺒﻌﺩ ﺒﺈﺫﻥ ﺍﷲ ﻋﺯ ﻭﺠل.
ﻓﻔﻲ ﺍﻟﺠﺯﺀ ﺍﻷﻭل ﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﺒﺩﺃﺕ ﻓﻲ ﻤﺎ ﻗﺒل ﻟﻐﺔ ﺴﻲ ﺒﻠﺱ ﺒﻠﺱ ،ﺒﺩﺃﺕ ﻓﻲ ﺇﻋﻁﺎﺀ
ﻓﻜﺭﺓ ﻤﺒﺴﻁﺔ ﻭ ﻭﺍﻀﺤﺔ ﻋﻥ ﺍﻟﻨﻅﻡ ﺍﻟﻌﺩﺩﻴﺔ ﻭ ﺍﻟﺘﻲ ﻴﻘﻭﻡ ﻋﻠﻴﻬﺎ ﺃﺴﺎﺱ ﻭ ﻤﺒﺩﺃ ﻋﻤل
ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ،ﻭ ﺍﻟﻬﺩﻑ ﻤﻥ ﻭﺭﺍﺀ ﺫﻟﻙ ﻫﻭ ﺘﻜﻭﻴﻥ ﺼﻭﺭﺓ ﻤﺒﺴﻁﺔ ﻋﻥ ﻜﻴﻔﻴﺔ ﻋﻤل ﺍﻟﺤﺎﺴﺏ
ﺍﻟﺫﻱ ﺒﻴﻥ ﻴﺩﻴﻙ.
ﺜﻡ ﺒﻌﺩ ﺫﻟﻙ ﺸﺭﻋﺕ ﻓﻲ ﺸﺭﺡ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻭ ﺍﻟﺭﻤﻭﺯ ﻭ ﺍﻷﺩﻭﺍﺕ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ
ﻟﻐﺔ ، C++
ﻭ ﺒﻌﺩ ﺫﻟﻙ ﻗﻤﺕ ﻓﻲ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻷﻭل ﻤﻥ ﺨﻼل ﺍﻟﻤﺤﺭﺭ Visual C++
ﻤﻊ ﺍﻟﺸﺭﺡ ﺍﻟﻤﻔﺼل ﻟﻜﻴﻔﻴﺔ ﻜﺘﺎﺒﺔ ﻭ ﺘﻨﻔﻴﺫ ﺍﻟﻜﻭﺩ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻜﻤﺒﻴﻭﺘﺭ ﻭ ﺍﻟﺫﺍﻜﺭﺓ.
ﺃﻤﺎ ﻓﻲ ﺍﻟﺠﺯﺀ ﺍﻟﺜﺎﻨﻲ ﻗﻤﺕ ﻓﻲ ﺸﺭﺡ ﻟﻜل ﻤﻥ ﺠﻤل ﺍﺘﺨﺎﺫ ﺍﻟﻘﺭﺍﺭ ﻭ ﺠﻤل ﺘﻨﻔﻴﺫ ﺍﻟﺤﻠﻘﺎﺕ ﻭ
ﻁﺒﻌﺎﹰ ﻗﻤﺕ ﻓﻲ ﺸﺭﺡ ﻜل ﻭﺍﺤﺩﺓ ﻋﻠﻰ ﺤﺩﻯ ﻤﻊ ﺇﻋﻁﺎﺀ ﺍﻷﻤﺜﻠﺔ ﺍﻟﻤﻨﺎﺴﺒﺔ.
ﻨﺴﺄل ﺍﻟﺘﻭﻓﻴﻕ
٩
ﺃﻫﺩﻱ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﺇﻟﻰ ﺃﺭﺽ ﻓﻠﺴﻁﻴﻥ ﺍﻟﺤﺒﻴﺒﺔ ...ﺇﻟﻰ ﺍﻟﻘﺩﺱ ﺍﻟﺸﺭﻴﻑ ...ﺇﻟﻰ
ﻤﺴﺭﻯ ﻨﺒﻴﻨﺎ ﻤﺤﻤﺩ ﺼﻠﻰ ﺍﷲ ﻋﻠﻴﺔ ﻭ ﺴﻠﻡ ...ﺇﻟﻰ ﻜل ﻓﻠﺴﻁﻴﻨﻲ ﻴﺩﺍﻓﻊ ﻭ ﻴﺠﺎﻫﺩ
ﻋﻥ ﻤﺴﺭﻯ ﺤﺒﻴﺒﻨﺎ ﻭ ﻨﺒﻲ ﺍﻟﻬﺩﻯ ﺨﺎﺘﻡ ﺍﻟﻤﺭﺴﻠﻴﻥ ﻋﻠﻴﺔ ﺃﻓﻀل ﺍﻟﺼﻼﺓ ﻭ ﺍﻟﺴﻼﻡ.
و أﻫﺪي ﻫﺬا اﻟﻜﺘﺎب إﻟﻰ ﺑﻼد اﻟﺮاﻓﺪﻳﻦ ...إﻟﻰ أرض اﻟﻌﺮاق اﻟﺤﺒﻴﺒﺔ ...أرض
اﻟﺨﻼﻓﺔ اﻹﺳﻼﻣﻴﺔ ...إﻟﻰ ﺟﺰء أﺧﺮ ﻓﻘﺪﻧﺎه ﻣﻦ اﻟﻌﺎﻟﻢ اﻹﺳﻼﻣﻲ ،ﻻ ﺣﻮل و ﻻ ﻗﻮة
إﻻ ﺑﺎﷲ اﻟﻌﻠﻲ اﻟﻌﻈﻴﻢ.
و إﻟﻰ اﻟﻤﺠﺎﻫﺪﻳﻦ اﻷﺑﻄﺎل اﻟﻐﻴﻮرﻳﻦ ﻋﻠﻰ دﻳﻨﻬﻢ و أوﻃﺎﻧﻬﻢ ﻧﺼﺮﻫﻢ اﷲ.
١٠
ﺇﻟﻰ ﻭﺍﻟﺩﻱ ﺍﻟﻐﺎﻟﻲ ﻋﻠﻰ ﻗﻠﺒﻲ ﺤﻔﻅﻪ ﺍﷲ ،ﺍﻟﺫﻱ ﻜﺎﻥ ﺩﺍﺌﻤﺎﹰ ﻴﻘﺩﻡ ﻟﻲ ﻜل ﻤﺎ ﺒﻭﺴﻌﻪ
ﻤﻥ ﺃﺠل ﺃﻥ ﺃﺒﻠﻎ ﺍﻟﺩﺭﺠﺎﺕ ﺍﻟﻌﻠﻰ ﻓﻲ ﺍﻟﻌﻠﻡ ،ﻓﺠﺯﺍﻙ ﺍﷲ ﻜل ﺍﻟﺨﻴﺭ ﻴﺎ ﺃﺒﻲ.
ﻭ ﺇﻟﻰ ﺃﻤﻲ ﺍﻟﺤﻨﻭﻨﺔ ﺤﻤﺎﻫﺎ ﺍﷲ ﻤﻥ ﻜل ﺸﺭ ،ﺍﻟﺘﻲ ﻤﺎ ﺒﺨﻠﺕ ﻋﻠﻲ ﻴﻭﻤﺎﹰ ﻗﻁ ﻤﻥ
ﺩﻋﺎﺌﻬﺎ ﻓﺠﺯﺍﻫﺎ ﺍﷲ ﻋﻨﻲ ﻜل ﺨﻴﺭ.
١١
)Language (C++
اﻟﺠﺰء اﻷول:
ﻗﺒﻞ إن ﻧﺒﺪأ ﻓﻲ ﺷﺮح أواﻣﺮ ﻟﻐﺔ ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ﻳﺠﺐ ﻋﻠﻴﻨﺎ أن ﻧﺪرس ﺑﻌﺾ اﻟﻤﻔﺎﻫﻴﻢ و اﻟﻤﺒﺎدئ
اﻷﺳﺎﺳﻴﻪ اﻟﺘﻲ ﻳﻌﻤﻞ ﻋﻠﻰ أﺳﺎﺳﻬﺎ اﻟﻜﻤﺒﻴﻮﺗﺮ و ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ اﻟﺘﻲ ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻷﻟﻪ ﻣﺜﻞ ﻟﻐﺔ
اﻷﻟﻪ و ﻫﺬه اﻟﻠﻐﺔ C++
-١ﻣﺒﺪأ ﻋﻤﻞ اﻟﻜﻤﺒﻴﻮﺗﺮ:
أن ﻛﻞ ﻣﺎ ﺗﺮاه أﻣﺎم ﻋﻴﻨﻚ ﻋﻠﻰ أﻟﺸﺎﺷﻪ ﻣﻦ ﻛﻠﻤﺎت أو ﺻﻮر أو ﺻﻮت ﻓﻲ اﻟﺤﻘﻴﻘﺔ ﻫﻮ ﻟﻴﺲ
ﻛﺬﻟﻚ أي أﻗﺼﺪ ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻬﻮ ﻻ ﻳﻌﺮف ﻣﺜﻼ ﺟﻤﻠﺔ )اﻟﺴﻼم ﻋﻠﻴﻜﻢ ( ﻣﺜﻞ أﻧﺖ ﻣﺎ
ﺗﻘﺮأﻫﺎ ﺑﻞ ﻫﺬه أﻟﺠﻤﻠﻪ ﺗﺨﺰن ﻓﻲ أﻟﺬاﻛﺮه ﻋﻠﻰ ﺷﻜﻞ أرﻗﺎم
أﻟﺬاﻛﺮه ﻫﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺒﺎﻳﺘﺎت و اﻟﺒﺎﻳﺖ اﻟﻮاﺣﺪ ﻳﺘﻜﻮن ﻣﻦ ﺛﻤﺎﻧﻴﺔ ﺑﻴﺖ
ﻣﺜﺎل :إذا ﻛﺎن ﻟﺪﻳﻨﺎ ذاﻛﺮه ﺳﻌﺘﻬﺎ ١٢٨ﺑﺎﻳﺖ ﻓﻬﺬا ﻳﻌﻨﻲ اﻧﻪ ﻟﺪﻳﻨﺎ ١٠٢٤=٨*١٢٨ﺑﻴﺖ
و اﻟﺒﺎﻳﺖ اﻟﻮاﺣﺪ ﻳﻜﻮن ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
ﺑ ﺎﻳ ﺖ 1
١٢
ﻣﻼﺣﻈﻪ:
) اﻟﻤﺸﻜﻠﺔ ﻗﺪﻳﻤﺎ ﻛﺎﻧﺖ أن ﻫﺬا اﻟﻨﻈﺎم ﻏﻴﺮ ﻛﺎﻣﻞ ﺣﻴﺚ ﻛﺎن ﻳﻨﺘﻘﺺ إﻟﻰ اﻟﻌﺪد ﺻﻔﺮ ﺣﺘﻰ
أوﺟﺪوه أﺟﺪادﻧﺎ اﻟﻌﺮب(
و اﻟﺘﻌﺪاد ﻳﺒﺪأ ﻣﻦ اﻟﺼﻔﺮ ٠ﺛﻢ ١ﺛﻢ ٩.......... ٢و اﻟﻌﺪد ٩ﻫﻮ اﻷﻛﺒﺮ ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي ﺛﻢ
أي ﻋﺪ إﺿﺎﻓﻲ ﻳﺠﺐ اﻻﻧﺘﻘﺎل إﻟﻰ اﻟﻴﻤﻴﻦ درﺟﻪ و اﺣﺪه أي ﻳﻨﺘﺞ ﻟﺪﻳﻨﺎ اﻟﺮﻗﻢ ١٠و ﻧﻼﺣﻆ ﻫﻨﺎ
أن اﻟﻌﺪد ١ﻳﺤﺘﻞ ﺧﺎﻧﺔ اﻟﻌﺸﺮات و اﻟﻌﺪد ﺻﻔﺮ ﻳﺤﺘﻞ ﺧﺎﻧﺔ اﻵﺣﺎد و ﻫﻜﺬا ﻧﺘﺎﺑﻊ اﻟﻌﺪ ﺣﺘﻰ
ﻧﺼﻞ إﻟﻰ اﻟﻌﺪد ٩٩ﺛﻢ ﻳﺤﺪث ﻟﻨﺎ اﻧﺘﻘﺎل إﻟﻰ اﻟﻴﻤﻴﻦ درﺟﻪ أﺧﺮى ﻓﻴﻨﺘﺞ ﻟﺪﻳﻨﺎ اﻟﺮﻗﻢ ١٠٠
و ﻧﻼﺣﻆ أن ١ﻳﺤﺘﻞ ﺧﺎﻧﺔ اﻟﻤﺌﺎت .
ﻣﺜﺎل اﻟﻌﺪد ٢٥٤ﻳﻌﻨﻲ = = ١ * ٤ + ١٠ * ٥ + ١٠٠ * ٢
و ﻳﻤﻜﻦ أن ﻧﻜﺘﺒﻪ ﻓﻲ ﻃﺮﻳﻘﻪ أﺧﺮى = ٠^١٠ * ٤ + ١ ^١٠ * ٥ + ٢^١٠ * ٢
٢٥٤=٤+٥٠+٢٠٠
اﻟﺮﻣﺰ ^ ﻳﻌﻨﻲ ﺑﺎﻟﻘﻮى أو أس
و ﻧﻼﺣﻆ أن اﻟﻨﻈﺎم اﻟﻌﺸﺮي ﻟﻪ ﻗﺎﻋﺪة ١٠أﻋﺪاد و ﺑﺸﻜﻞ ﻋﺎم أ ن ﻛﻞ اﻻﻧﻈﻤﻪ اﻟﺮﻗﻤﻴﺔ اﻟﺘﻲ
ﻧﺪرﺳﻬﺎ ﻟﻬﺎ ﻧﻔﺲ اﻟﻘﺎﻋﺪة ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﺘﺴﻤﻴﺔ اﻟﻤﻨﺴﻮب ﻟﻪ ﻓﺎﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻟﻪ ﻗﺎﻋﺪة ...... ٢اﻟﺦ
..........................................................................................
و ﻫﻮ اﻟﻨﻈﺎم اﻷﻛﺜﺮ ﺗﻌﺎﻣﻼ ﻣﻊ اﻟﻜﻤﺒﻴﻮﺗﺮ و ﺑﺎﻟﺬات ﻣﻊ اﻟﺬاﻛﺮه .و ﻫﻮ ﻳﺴﺘﺨﺪم ﻋﺪدﻳﻦ ﻓﻘﻂ
ﻫﻤﺎ } {١، ٠وﻛﻞ ﻣﻦ ﻫﺬﻳﻦ اﻟﺮﻗﻤﻴﻦ ﻳﺪﻋﻰ }ﺑﺖ{ و ﻫﺬا اﻟﺒﺖ ﺗﺘﻐﻴﺮ ﻗﻴﻤﺘﻪ ﺣﺴﺐ ﻣﻮﻗﻌﻪ
ﻣﺜﻼ:
١ﺑﺎﻳﺖ = ٨ﺑﺖ ﻫﺬا ﻳﻌﻨﻲ
و اﻟﺒﺖ ﻳﺒﺪأ ﺗﺮﺗﻴﺒﻪ ﻣﻦ اﻷﺻﻐﺮ إﻟﻰ اﻷﻛﺒﺮ أي ﻣﻦ اﻷﺧﻒ إﻟﻰ اﻷﺛﻘﻞ
و ﻫﺬا اﻟﺘﺮﺗﻴﺐ ﺳﻴﻜﻮن ﻣﻬﻢ ﻓﻲ ﻋﻤﻠﻴﺎت اﻟﺘﺤﻮﻳﻞ ﻣﻦ ﻧﻈﺎم إﻟﻰ أﺧﺮ
ﺑ ﺎﻳ ﺖ 1
2^7=128 2^6=64 2^5=32 2^4=16 2^3=8 2^2=4 2^1=2 2^0=1
اﻻﻛ ﺒ ﺮ اﻻﺻ ﻐ ﺮ
و اﻟﻤﺠﻤﻮع = ٢٥٥و أرﺟﻮا أن ﺗﺘﺬﻛﺮوا ﻫﺬا اﻟﺮﻗﻢ ﻓﻔﻲ اﻟﺪروس اﻟﻘﺎدﻣﺔ أن ﺷﺎء اﷲ ﺳﻴﻜﻮن
ﻣﻬﻢ
ﺗﺘﺬﻛﺮوا ﻣﻌﻲ أن ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي ﻛﺎن ﻟﺪﻳﻨﺎ اﻟﺨﺎﻧﺎت اﻟﺘﺎﻟﻴﻪ }أﺣﺎد .ﻋﺸﺮات .
ﻣﺌﺎت{...........
ﻓﻔﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻳﺼﺒﺢ ﻟﺪﻳﻨﺎ }أﺣﺎد .اﺛﻨﺎن .أرﺑﻌﺎت .ﺛﻤﺎﻧﻴﺎت
{...................................
و ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي إذا وﺟﺪ اﻟﺮﻗﻢ ٥ﻓﻲ ﺧﺎﻧﺔ ﺛﺎﻟﺜﻪ ﻓﻬﺬا ﻳﻌﻨﻲ ١٠٠ * ٥
ﻓﻔﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻳﺼﺒﺢ ﻟﺪﻳﻨﺎ إذا وﺟﺪ اﻟﺮﻗﻢ ٥ﻓﻲ ﺧﺎﻧﺔ ﺛﺎﻟﺜﻪ ﻓﻬﺬا ﻳﻌﻨﻲ ٤ *٥
١٣
إذا ﻛﺎن ﻟﺪﻳﻨﺎ اﻟﻌﺪد اﻟﻌﺸﺮي ٥٧٣ﻛﻴﻒ ﻧﺴﺘﻄﻴﻊ أن ﻧﻜﺘﺒﻪ ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ
ﻧﻘﺴﻢ اﻟﻌﺪد ٥٧٣ﻋﻠﻰ ٢ﻓﻴﻨﺘﺞ ﻟﺪﻳﻨﺎ اﻟﺮﻗﻢ ٢٨٦واﻟﺒﺎﻗﻲ ١
٠ ﻧﻘﺴﻢ اﻟﻌﺪد ٢٨٦ﻋﻠﻰ ٢ﻳﻌﻄﻲ ١٤٣و اﻟﺒﺎﻗﻲ
١ و اﻟﺒﺎﻗﻲ ﻧﻘﺴﻢ اﻟﻌﺪد ١٤٣ﻋﻠﻰ ٢ﻳﻌﻄﻲ ٧١
١ و اﻟﺒﺎﻗﻲ ﻧﻘﺴﻢ اﻟﻌﺪد ٧١ﻋﻠﻰ ٢ﻳﻌﻄﻲ ٣٥
١ و اﻟﺒﺎﻗﻲ ﻧﻘﺴﻢ اﻟﻌﺪد ٣٥ﻋﻠﻰ ٢ﻳﻌﻄﻲ ١٧
١ و اﻟﺒﺎﻗﻲ ﻧﻘﺴﻢ اﻟﻌﺪد ١٧ﻋﻠﻰ ٢ﻳﻌﻄﻲ ٨
٠ و اﻟﺒﺎﻗﻲ ﻋﻠﻰ ٢ﻳﻌﻄﻲ ٤ ﻧﻘﺴﻢ اﻟﻌﺪد ٨
٠ و اﻟﺒﺎﻗﻲ ﻋﻠﻰ ٢ﻳﻌﻄﻲ ٢ ﻧﻘﺴﻢ اﻟﻌﺪد ٤
٠ و اﻟﺒﺎﻗﻲ ﻋﻠﻰ ٢ﻳﻌﻄﻲ ١ ﻧﻘﺴﻢ اﻟﻌﺪد ٢
١ و اﻟﺒﺎﻗﻲ ﻋﻠﻰ ٢ﻳﻌﻄﻲ ٠ ﻧﻘﺴﻢ اﻟﻌﺪد ١
و اﻟﺬي ﻳﻬﻤﻨﺎ ﻣﻦ ﺗﻠﻚ اﻟﻌﻤﻠﻴﺔ اﻟﺴﺎﺑﻘﺔ ﻫﻮ اﻟﺒﺎﻗﻲ ﻣﻦ ﻋﻤﻠﻴﺔ اﻟﻘﺴﻤﺔ
ﺛﻢ ﻧﺒﺪأ ﻓﻲ ﻋﻤﻠﻴﺔاﻟﺘﺮﺗﻴﺐ ﻣﻦ اﻻﺻﻐﺮ إﻟﻰ اﻻﻛﺒﺮ و ذﻟﻚ ﺑﺎﻟﻨﺴﺒﻪ إﻟﻰ اﻟﺒﺖ ﻛﻤﺎ ﺗﺬﻛﺮون
أي ﻳﻨﺘﺞ ﻟﺪﻳﻨﺎ اﻟﺮﻗﻢ اﻟﺘﺎﻟﻲ١٠١١١١٠٠٠١ :
ﻣﻼﺣﻈﻪ ﻻ ﻳﺠﻮز ﻗﺮاﺋﺖ اﻟﻌﺪد ﻓﻲ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ ﻛﻤﺎ ﻓﻲ اﻟﻨﻈﺎم اﻟﻌﺸﺮي ﺑﻞ ﻳﻘﺮأ ﻫﻜﺬا
واﺣﺪ ﺻﻔﺮ واﺣﺪ واﺣﺪ واﺣﺪ واﺣﺪ ﺻﻔﺮ ﺻﻔﺮ ﺻﻔﺮ واﺣﺪ
أرﺟﻮ أن ﺗﺘﺬﻛﺮوا ﻫﺬا و أن ﺗﻤﻴﺰوا ﻓﻲ ﻗﺮاﺋﺖ اﻟﻌﺪد اﻟﺜﻨﺎﺋﻲ ﻋﻦ اﻟﻌﺸﺮي
ﻃﺮﻳﻘﺔ اﻟﺘﺤﻮﻳﻞ ﻣﻦ اﻟﻨﻈﺎم اﻟﺜﻨﺎﺋﻲ إﻟﻰ اﻟﻨﻈﺎم اﻟﻌﺸﺮي:
ﻧﺎﺣﺬ اﻟﻌﺪد اﻟﺜﻨﺎﺋﻲ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ١٠١١١١٠٠٠١
ﻓﻲ ﻋﻤﻠﻴﺔ اﻟﺘﺤﻮﻳﻞ ﻧﺒﺪأ ﻣﻦ اﻻﺻﻐﺮ إﻟﻰ اﻻﻛﺒﺮ ﻓﻨﺄﺧﺬ اﻟﺮﻗﻢ اﻻول و ﻧﻀﺮﺑﻪ ﻓﻲ اﻟﻘﺎﻋﺪه اﻟﺘﻲ
ﻳﻨﺘﻤﻲ اﻟﻴﻬﺎ اﻟﻨﻈﺎم أي ﻓﻲ اﻟﻌﺪد ٢ﻣﺮﻓﻮﻋﺎ إﻟﻰ اﻟﻘﻮه )اﻻس( ﺑﺎﻟﻨﺴﺒﻪ إﻟﻰ ﻣﻮﻗﻌﻪ ﻓﻲ أي ﺧﺎﻧﻪ
ﻓﻲ اﻟﺒﺖ ﺛﻢ ﻧﺘﺎﺑﻊ ﻋﻤﻠﻴﺔ اﻟﺘﺤﻮﻳﻞ ﻓﻲ ﻧﻔﺲ اﻟﻄﺮﻳﻘﻪ و ﻋﻨﺪﻣﺎ ﻧﺘﻬﻲ ﻣﺎ ﻳﺒﻘﻰ ﻋﻠﻴﻨﺎ ﺳﻮى ﺟﻤﻊ
اﻻﻋﺪاد اﻟﺘﻲ ﻧﺘﺠﺖ ﻟﺪﻳﻨﺎ وﻧﻜﻮن ﻗﺪ أﻧﺘﻬﻴﻨﺎ ﻣﻦ ﻋﻤﻠﻴﺔ اﻟﺘﺤﻮﻳﻞ
ﻫﻞ ﻓﻬﻤﺖ ؟ ﻻ ﺗﻘﻠﻖ ﺳﻮف أﺷﺮح ﻟﻚ ﻛﻴﻒ ﻳﺘﻢ ذﻟﻚ ﻧﺄﺧﺬ اﻟﺮﻗﻢ اﻻﺻﻐﺮ و ﻫﻮ اﻟﻮاﺣﺪ
وﻧﻀﺮﺑﻪ ﻓﻲ ﻗﺎﻋﺪة اﻟﻨﻈﺎم أي ﻧﻀﺮﺑﻪ ﻓﻲ اﻟﻌﺪد ٢ﻣﺮﻓﻮﻋﺎ إﻟﻰ اﻟﻘﻮه ﺣﺴﺐ ﻣﻮﻗﻌﻪ ﻓﻲ اﻟﺒﺖ
و اﻟﻌﺪد ١ﻳﻘﻊ ﻓﻲ اﻟﺨﺎﻧﻪ اﻻوﻟﻰ و ﻻ ﺗﻨﺴﻮا اﻟﺨﺎﻧﻪ اﻻوﻟﻰ ﻓﻲ اﻟﺒﺖ ﻫﻲ اﻟﻘﻴﻤﻪ ﺻﻔﺮ أي
ﻣﺮﻓﻮﻋﺎ إﻟﻰ اﻟﻌﺪد ٠
ﻓﺘﻨﺘﺞ ﻟﺪﻳﻨﺎ اﻟﻤﻌﺎدﻟﻪ اﻟﺘﺎﻟﻴﻪ
1.2^0 + 0.2^1 + 0.2^2
=+0.2^3+1.2^4+1.2^5+1.2^6+1.2^7+0.2^8+1.2^9
1+0+0+0+16+32+64+128+0+512=573
أﻟ ﻴﺲ ﻫﺬا ﻫﻮ رﻗﻤ ﻨ ﺎ573
١٤
١٥
و ﻫﺬا اﻟﻨﻈﺎم ﻫﻮ اﻷﻛﺜﺮ أﺳﺘﺨﺪاﻣﺎ ﻓﻲ ﻣﻌﻈﻢ اﻷﺟﻬﺰه اﻻﻟﻜﺘﺮوﻧﻴﻪ و ﺑﺎﻟﺬات ﻓﻲ اﻟﺤﺎﺳﺐ و ﻓﻲ
ﺗﺮﺟﻤﺔ اﻟﻜﻮد ﻣﻦ ﻟﻐﺔ ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ إﻟﻰ ﻟﻐﺔ اﻷﻟﻪ و ﺳﻮف أﺷﺮح ذﻟﻚ ﻓﻲ اﻟﺘﻔﺼﻴﻞ ﻓﻲ
اﻟﺪروس اﻟﻘﺎدﻣﻪ ﻋﻨﺪﻣﺎ ﻧﺒﺪأ ﻓﻲ ﻛﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ VC++
أن ﺷﺎء اﷲ ﻋﺰ و ﺟﻞ
و ﻫﺬا اﻟﻨﻈﺎم ﻣﻮﻗﻌﻪ ﻓﻲ اﻟﺒﺖ
ﺑ ﺎﻳ ﺖ 1
8^7=.. 8^6=.. 8^5=.. 8^4=.. 8^3=4056 16^2=256 16^1=16 16^0=1
اﻻﻛ ﺒ ﺮ اﻻﺻ ﻐ ﺮ
اﻣﺎ اﻟﺘﺤﻮﻳﻞ ﻣﻦ اﻟﺴﺖ اﻟﻌﺸﺮي إﻟﻰ اﻟﻌﺸﺮي ﻧﺘﺒﻊ ﻧﻔﺲ اﻟﻄﺮق اﻟﺴﺎﺑﻘﻪ ﻓﻲ اﻟﺘﺤﻮﻳﻞ ﻣﻦ ﻧﻈﺎم
إﻟﻰ أﺧﺮ و ﻟﻨﺄﺧﺬ ﻣﺜﺎل ﻓﻮرا
ﻟﺪﻳﻨﺎ اﻟﻌﺪد
A3Dأي ﻟﺪﻳﻨﺎ ﻋﺸﺮ ٢٥٦و ﺛﻼث ١٦و ﺛﻼث ﻋﺸﺮ ١
و ﻟﺬﻟﻚ ﻟﻸﻧﻪ ﻛﻤﺎ ﻗﻠﻨﺎ ﺑﺄن
A=10 and D=13
أي ﺗﺼﺒﺢ اﻟﻤﻌﺎدﻟﻪ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
256*10+3*16+13*1= 2621
١٦
ﻟﻨﻔﺮض أﻧﻨﺎ ﻧﺮﻳﺪ أن ﻧﻜﺘﺐ ﺑﺮﻧﺎﻣﺞ و ﻗﺒﻞ ﺗﻨﻔﻴﺬ ﻫﺬا اﻟﺒﺮﻧﺎﻣﺞ ﻳﺠﺐ اﻟﺘﺄﻛﺪ ﻣﻦ ﺻﺤﺔ ﺷﺮﻃﻴﻦ
ﻣﻌﺎ ً ﻗﺒﻞ أن ﻧﻨﻔﺬ اﻟﺒﺮﻧﺎﻣﺞ ﺛﻢ إذا ﺗﺤﻘﻖ اﻟﺸﺮﻃﻴﻦ ﻣﻌﺎ ً ﻧﻔﺬ اﻟﻤﻄﻠﻮب
ﻣﺜﺎل:
ﻟﻨﻔﺮض أﻧﻪ ﻟﺪﻳﻚ ﺣﺴﺎب ﻓﻲ أﺣﺪ اﻟﺒﻨﻮك و ﻟﺪﻳﻚ ﺑﻄﺎﻗﻪ و أردت أن ﺗﺴﺤﺐ ﻣﺒﻠﻎ ﻣﻌﻴﻦ ﻓﻘﺒﻞ أن
ﺗﻄﻠﺐ اﻟﻤﺒﻠﻎ اﻟﺬي ﺗﺮﻳﺪه ﻓﺈن اﻟﻤﺼﺮف اﻷﻟﻲ ﻳﻄﻠﺐ ﻣﻨﻚ ﺷﺮﻃﻴﻦ وﻫﺬان اﻟﺸﺮﻃﺎن ﻳﺠﺐ أن
ﻳﺘﺤﻘﻘﺎ ﻣﻌﺎ ً ﺣﺘﻰ ﻳﺘﻢ ﻟﻚ ﺻﺮف اﻟﻤﺒﻠﻎ اﻟﺬي ﺗﺮﻳﺪه
-١أدﺧﻞ أﺳﻤﻚ......
-٢أدﺧﻞ رﻗﻢ ﺣﺴﺎﺑﻚ............
أي وﺻﻒ ﻟﻐﺎرﻳﺘﻢ اﻟﺒﺮﻧﺎﻣﺞ ﺳﻴﻜﻮن ﻋﻠﻰ اﻟﻨﻤﻂ اﻟﺘﺎﻟﻲ
إذا ﻛﺎن اﻷﺳﻢ اﻟﻤﺪﺧﻞ ﻫﻮ أﺣﻤﺪ و ﻛﺎن رﻗﻢ اﻟﺤﺴﺎب اﻟﻤﺪﺧﻞ ١٧٢٥٤
إﺻﺮف اﻟﻤﺒﻠﻎ اﻟﻤﻄﻠﻮب
)If ( name = = ahmad && number = = 17254
{
ﻧﻔﺬ
}
و ﺳﻮف ﻧﺸﺮح ﻓﻴﻤﺎ ﺑﻌﺪ اﻟﻌﻤﻠﻴﻪ اﻟﺸﺮﻃﻴﻪ ifﻓﻲ اﻟﺪروس اﻷﺗﻴﻪ إن ﺷﺎء اﷲ
-٢ﺍﻟﻌﻤﻠﻴﻪ ﺍﻟﻤﻨﻁﻘﻴﻪ)||( ORﺍﻷﺨﺘﻴﺎﺭ :
ﻟﻨﻔﺭﺽ ﺃﻨﻨﺎ ﻋﻨﺩ ﻨﻘﻁﻪ ﻤﺎ ﻀﻤﻥ ﺒﺭﻨﺎﻤﺞ ﻭ ﻨﺭﻴﺩ ﺍﻟﺘﺄﻜﺩ ﻤﻥ ﺼﺤﺔ ﺸﺭﻁﻴﻥ ﺃﻭ ﻤﻥ ﺼﺤﺔ
ﺃﺤﺩﻫﻤﺎ ﻗﺒل ﺃﻥ ﻨﺨﺘﺎﺭ ﺍﻟﻤﺴﺎﺭ ﺍﻟﺘﺎﻟﻲ ﻟﻤﺘﺎﺒﻌﺔ ﺍﻟﺘﻨﻔﻴﺫ
١٧
ﻤﺜﺎل :
ﻟﺩﺨﻭل ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﻪ ﻴﺠﺏ ﺃﻥ ﻴﺘﺤﻘﻕ ﺃﺤﺩ ﺍﻟﺸﺭﻁﻴﻥ
-١ﻤﺠﻤﻭﻉ ﺍﻟﻌﻼﻤﺎﺕ ﺍﻟﻜﻠﻲ ﺃﻜﺜﺭ ﻤﻥ ٨٠
ﺃﻭ
-٢ﻤﺠﻤﻭﻉ ﺍﻟﻌﻼﻤﺎﺕ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﺃﻜﺜﺭ ﻤﻥ ٩٠
ﺃﻱ ﻴﻜﻔﻲ ﺘﺤﻘﻕ ﺃﺤﺩ ﺍﻟﺸﺭﻁﻴﻥ ﻟﺩﺨﻭل ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﻪ
ﻭ ﻴﻜﺘﺏ ﻫﺫﺍ ﺍﻟﺸﺭﻁ ﻋﻠﻰ ﺍﻟﻨﺤﻭ ﺍﻟﺘﺎﻟﻲ
)If (sum_grade > 80) || (sum_mat > 90
{
ﻨﻔﺫ
}
١٨
ﻛﻞ اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﻪ اﻟﻤﻮﺟﻮده ﻓﻲ اﻟﺠﺪول ﺗﺴﺨﺪم ﻓﻲ ﻟﻐﺔ ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ﺑﻨﻔﺲ اﻟﻄﺮﻳﻘﻪ اﻟﺘﻲ
ﺗﺴﺘﺨﺪم ﻓﻲ اﻟﻄﺮﻳﻘﻪ اﻟﺠﺒﺮﻳﻪ اﻟﻌﺎدﻳﻪ إﻻ اﻷداه %ﺑﺎﻗﻲ اﻟﻘﺴﻤﻪ اﻟﺼﺤﻴﺤﻪ اﻟﺘﻲ ﺗﻌﻄﻲ ﺑﺎﻗﻲ
ﻗﺴﻤﻪ ﻋﺪدﻳﻦ ﺻﺤﻴﺤﻴﻦ ﻋﻠﻰ ﺷﻜﻞ ﻋﺪد ﺻﺤﻴﺢ و ﻫﺬه اﻷداه ﻻ ﺗﺴﺘﺨﺪم إﻻ ﻣﻊ اﻷﻋﺪاد
اﻟﺼﺤﻴﺤﻪ
ﻣﺜﺎل ١=٢%٥ :
ﻳﻮﺟﺪ ﻓﻲ ﻟﻐﺔ ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ اﻟﻌﺪﻳﺪ ﻣﻦ اﻷدوات اﻟﺘﻲ ﺗﺴﺨﺪم ﻟﻠﻤﻘﺎرﻧﻪ ﺑﻴﻦ ﺷﺮﻃﻴﻦ
ﻣﻌﻨﻰ اﻷداه ﻃﺮﻳﻘﺔ ﻛﺘﺎﺑﺔ اﻷداه C++ رﻣﺰ اﻷداه ﻓﻲC++ اﻟﺸﻜﻞ اﻟﺠﺒﺮي
ﻓﻲ
xأﻛﺒﺮ ﻣﻦ y X<y < <
xأﺻﻐﺮ ﻣﻦ Y x>y > >
xأﻛﺒﺮ ﻣﻦ أو ﺗﺴﺎوي y X<=y =<
xأﺻﻐﺮ ﻣﻦ أو أﺗﺴﺎوي Y x>=y =>
١٩
ﻣﻼﺣﻈﻪ :
إن ﻟﻐﺔ C++ﺗﻤﻴﺰ ﺑﻴﻦ اﻷﺣﺮف اﻷﻧﺠﻴﻠﻴﺰﻳﻪ اﻟﻜﺒﻴﺮه و اﻟﺼﻐﻴﺮه
ﻟﺬﻟﻚ ﻓﺄن ﻟﻐﺔ C++ﺗﻌﺪ ﻣﻦ اﻟﻐﺎت اﻟﺤﺴﺎﺳﻪ ﻟﻠﺤﺮوف
ﻣﺜﺎل:أن اﻟﻤﺘﺮﺟﻢ ﻓﻲ اﻟﻠﻐﻪ ﻳﻤﻴﺰ اﻟﻜﻠﻤﻪ
Forﻋﻦ for
رﻏﻢ أﻧﻪ ﺑﺎﻟﻨﺴﺒﻪ ﻟﻨﺎ ﻻ ﻳﻮﺟﺪ أي ﻓﺮق ﺑﻴﻨﻬﺎ ﻟﻜﻦ اﻟﻤﺘﺮﺟﻢ ﻓﻲ ﻟﻐﺔ C++ﻋﻨﺪﻣﺎ ﻳﺒﺪأ
ﻓﻲ ﻋﻤﻠﻴﺔ اﻟﺘﺮﺟﻤﻪ ﻟﺘﺤﻮﻳﻞ ﻛﻮد اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﻜﺘﻮب إﻟﻰ ﻟﻐﺔ اﻷﻟﻪ ﻳﻔﺮق ﺑﻴﻦ اﻟﺤﺮوف اﻟﻜﺒﻴﺮه و
اﻟﺼﻐﻴﺮه
: اﻟﻜﻠﻤﺎت اﻟﻤﺤﺠﻮزه-٢
C++ ﻫﻲ اﻟﻜﻠﻤﺎت اﻟﻤﻌﺮﻓﻪ ﻣﺴﺒﻘﺎ ﻣﻦ ﻗﺒﻞ اﻟﻤﺘﺮﺟﻢ ل
و اﻟﺘﻲ ﻛﻤﺎ ﺳﺒﻖ و ﻗﻠﻨﺎ ﺑﺄﻧﻪ ﻻ ﻳﺠﻮز أﺳﺘﺨﺪاﻣﻬﺎ ﻛﺄﺳﻤﺎء ﻟﻠﻤﺘﻐﻴﺮات ﻟﻸﻧﻬﺎ ﺣﺠﺰت ﻣﺴﺒﻘﺎ ﻣﻦ
ﻗﺒﻞ اﻟﻤﺘﺮﺟﻢ
و ﻟﻜﻞ ﻛﻠﻤﻪ ﻣﻦ ﻫﺬه اﻟﻜﻠﻤﻪ ﻣﻌﻨﻰ ﺧﺎص و ﺗﺮﻣﺰ إﻟﻰ ﺷﻲء ﻣﻌﻴﻦ ﺳﻮف ﺗﺘﻌﺮف إﻟﻰ ﻣﻌﺎﻧﻴﻬﻢ
ﻋﻨﺪ اﻟﺒﺪء ﻓﻲ ﻛﺘﺎﺑﺔ ﻛﻮد اﻟﺒﺮﻧﺎﻣﺞ
أرﺟﻮا أن ﺗﻨﺘﺒﻬﻮا ﺑﺄن ﻫﺬه اﻟﻜﻠﻤﺎت اﻟﻤﺤﺠﻮزه ﺗﻜﺘﺐ ﻓﻲ اﻷﺣﺮف اﻟﺼﻐﻴﺮه:ﻣﻼﺣﻈﻪ
break Return
٢١
-١و ذﻟﻚ ﺑﺴﺒﺐ اﻟﻘﻮه اﻟﻜﺒﻴﺮه اﻟﺘﻲ ﻳﺘﻤﺘﻊ ﻓﻴﻬﺎ ﻫﺬا اﻟﻤﺤﺮر ﻓﻴﺠﻮل ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ و ﻗﺪرﺗﻪ ﻋﻠﻰ
اﻟﺘﻌﺎﻣﻞ ﻣﻊ أﻛﻮاد اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺳﻮف ﺗﻜﺘﺒﻬﺎ ﻓﻴﻪ إن ﺷﺎء اﷲ
-٣و أﻳﻀﺎ ً ﺑﺴﺒﺐ ﺳﻬﻮﻟﺔ ﺗﻘﺴﻴﻢ ﻛﺘﺎﺑﺔ أﻛﻮاد اﻟﺒﺮاﻣﺞ اﻟﻜﺒﻴﺮة اﻟﺘﻲ ﺗﻮد ﻛﺘﺎﺑﺘﻬﺎ إﻟﻰ ﻋﺪة أﺟﺰاء
و أﻋﻄﺎء ﻛﻞ ﺟﺰء إﻟﻰ ﻣﺒﺮﻣﺞ ﻟﻴﻜﺘﺐ ﻛﻮد اﻟﺒﺮﻧﺎﻣﺞ اﻟﺠﺰء و ﻣﻦ ﺛﻢ ﺗﺠﻤﻴﻊ ﻫﺬه اﻷﺟﺰاء
ﻟﻴﺘﻜﻮن ﻟﺪﻳﻨﺎ ﺑﺮﻧﺎﻣﺞ ﻛﺒﻴﺮ ﺑﻤﻌﻨﻰ اﻟﻜﻠﻤﺔ و ﻫﺬه اﻟﻄﺮﻳﻘﻪ ﺗﺘﻢ ﻓﻘﻂ ﻓﻲ ﺑﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﺎت اﻟﻤﻮﺟﻪ و
ذﻟﻚ ﻋﻦ ﻃﺮﻳﻖ اﻟﺼﻔﻮف classesاﻟﺘﻲ ﺳﻮف ﻧﺘﻌﺮف ﻋﻠﻴﻪ ﻻﺣﻘﺎ ً إن ﺷﺎء اﷲ
-٤ﻓﻴﺠﻮال ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ﺗﻌﻄﻴﻚ اﻟﻘﺪرة ﻋﻠﻰ ﻣﺸﺎﻫﺪة ﺧﻄﻮات ﺗﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺠﻚ ﺧﻄﻮة ﺑﺨﻄﻮة
-٥و أﻳﻀﺎ ً ﺑﺴﺒﺐ ﺳﻬﻮﻟﺔ اﻷﻧﺘﻘﺎل ﻣﻦ C++اﻟﻲ ﻓﻴﺠﻮل ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ إذا ﻛﻨﺖ ﻗﺪ ﺑﺪات
ﻣﻊ ﻓﻴﺠﻮل ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ﻓﻲ ﻛﺘﺎﺑﺔ أﻛﻮاد ﺑﺮاﻣﺠﻚ.
٢٢
ﺳﻮف ﻧﺘﻌﺮف ﻓﻲ ﻫﺬه اﻟﻔﻘﺮه أن ﺷﺎء اﷲ ﻋﺰ و ﺟﻞ ﻋﻠﻰ ﻛﻴﻔﻴﺔ ﻓﺘﺢ ﻣﺤﺮر اﻟﻠﻐﺔ
ﻓﻴﺠﻮل ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ و اﻟﺘﻌﺮف ﻋﻠﻰ اﻟﻨﻮاﻓﺬ ﻓﻴﻪ
ﺑﻌﺪ ﻋﻤﻠﻴﺔ أﻋﺪاد و ﺗﻨﺼﻴﺐ ﻓﻴﺠﻮل ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ إذﻫﺐ إﻟﻰ
اﺑﺪأ < اﻟﺒﺮاﻣﺞ < Visual C++
ﺳﻮف ﺗﻈﻬﺮ ﻟﻚ و اﺟﻬﺔ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
٢٣
و ﻣﻦ ﺛﻢ إذﻫﺐ إﻟﻰ ﺷﺮﻳﻂ ﻋﺮض اﻟﻘﻮاﺋﻢ و أﺧﺘﺮ ﻣﻦ ﻫﺬا اﻟﺸﺮﻳﻂ new < file
ﺣﻴﻨﺌﺬ ﺳﻮف ﻳﻈﻬﺮ ﻟﻚ ﺑﻤﺎ ﻳﺴﻤﻰ ﻓﻲ اﻟﺼﻨﺪوق اﻟﺤﻮاري
و اﻟﺬي ﺳﻮف ﻳﻈﻬﺮ ﻟﺪﻳﻚ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :
و ﻫﺬا اﻟﺼﻨﺪوق اﻟﺤﻮاري ﻳﺤﺘﻮي ﻋﻠﻰ ﻛﺎﻓﺔ اﻟﻤﺸﺎرﻳﻊ اﻟﺘﻲ ﻳﻤﻜﻦ ﻋﻤﻠﻬﺎ ﻓﻲ
Visual c++
و ﻧﺨﺘﺎر ﻣﻦ ﻫﺬا اﻟﺼﻨﺪوق Files
اﻟﻘﺎﺋﻤﺔ
ﻓﻴﻈﻬﺮ ﻟﻨﺎ اﻟﺼﻨﺪوق اﻟﺤﻮاري ﻟﻬﺬه اﻟﻘﺎﺋﻤﺔ
ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
٢٤
٢٥
٢٦
ﻟﻨﺒﺪأ ﻋﻠﻰ ﺑﺮﻛﺔ اﷲ ﻓﻲ ﻛﺘﺎﺑﺔ أول ﺑﺮﻧﺎﻣﺞ ﻟﻨﺎ ﻓﻲ ﺑﻴﺌﺔ ﻋﻤﻞ C++
٢٧
ﺗﻨﻔﻴﺬ اﻟﺒﺮﻧﺎﻣﺞ
٢٨
أﻣﺎ اﻷن دﻋﻨﺎ ﻧﺸﺮح ﻓﻲ اﻟﺘﻔﺼﻴﻞ اﻟﻤﺮاﺣﻞ اﻟﺘﻲ ﻳﻤﺮ ﻓﻴﻬﺎ أي ﺑﺮﻧﺎﻣﺞ ﻓﻲ C++ﻗﺒﻞ أن ﻳﺘﻢ ﺗﻨﻔﻴﺬه
-١اﻟﻤﺮﺣﻠﺔ اﻷوﻟﻰ :ﻣﺮﺣﻠﺔ اﻟﻜﺘﺎﺑﺔ edit
ﻓﻲ ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﺗﺘﻢ ﻓﻴﻬﺎ ﻛﺘﺎﺑﺔ ﻧﺺ اﻟﺒﺮﻧﺎﻣﺞ و ذﻟﻚ ﻳﺘﻢ ﺑﻮاﺳﻄﺔ ﻣﺤﺮر اﻟﻨﺼﻮص اﻟﺨﺎص
و اﻟﻤﺘﻮاﻓﻖ ﻣﻊ c++اﻟﺬي ﻳﺴﺘﺨﺪﻣﻪ اﻟﻤﺒﺮﻣﺞ ﻟﻜﺘﺎﺑﺔ ﺑﺮاﻣﺠﻪ و اﻟﻘﻴﺎم ﻓﻲ اﻟﺘﻌﺪﻳﻼت
ﺑﻴﺌﺔ ﻋﻤﻞ
و اﻷﺿﺎﻓﻪ اﻟﺤﺬف ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﻳﺘﻢ ﺗﺨﺰﻳﻦ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ اﻟﻘﺮص اﻟﺼﻠﺐ و ﻓﻲ اﻟﺬات اﻟﻤﻜﺎن
اﻟﺬي ﺣﺪدﺗﻪ أﻧﺖ ﻋﻨﺪﻣﺎ أﺧﺘﺮت اﻟﺪﻟﻴﻞ اﻟﺬي ﺣﻔﻈﺖ ﺑﻪ ﺑﺮﻧﺎﻣﺠﻚ
و ﻋﺎدة ﻣﺎ ﺗﻌﻄﻲ ﺑﺮاﻣﺞ C++أﺳﻤﺎء ﺗﻨﺘﻬﻲ ﻓﻲ اﻷﻣﺘﺪاد .cأو .ccp
-٢اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻧﻴﻪ :ﻣﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ اﻟﺘﺮﺟﻤﺔ preprocess
ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﺗﻬﺪف إﻟﻰ اﻟﺘﻌﺎﻣﻞ ﻣﻊ أواﻣﺮ ﺧﺎﺻﻪ ﺗﺴﻤﻰ ﺑﺘﻮﺟﻴﻬﺎت ﻣﺎ ﻗﺒﻞ preprocessor directives
اﻟﺘﺮﺟﻤﺔ
ﺗﺤﺪد ﻫﺬه اﻟﺘﻮﺟﻴﻬﺎت ﺟﻤﻠﺔ ﻣﻦ اﻟﻤﻌﺎﻟﺠﺎت و اﻹﺟﺮاءات اﻟﻮاﺟﺐ ﺗﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ ﻧﺺ اﻟﺒﺮﻧﺎﻣﺞ ﻗﺒﻞ ﻋﻤﻠﻴﺔ
اﻟﺘﺮﺟﻤﺔ ،أي ﻗﺒﻞ اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻟﺜﺔ .و ﻓﻲ ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﺗﺘﻢ ﻣﻌﺎﻟﺠﺔ ﻧﺺ اﻟﺒﺮﻧﺎﻣﺞ .
-٣اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻟﺜﺔ :ﻣﺮﺣﻠﺔ اﻟﺘﺮﺟﻤﺔ compileﻟﻠﺒﺮﻧﺎﻣﺞ
ﻓﻲ ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﻳﻘﻮم اﻟﻤﺘﺮﺟﻢ ﻓﻲ ﺗﺮﺟﻤﺔ c++إﻟﻰ ﻟﻐﺔ اﻷﻟﻪ .ﺣﻴﺚ ﻳﻮﻟﺪ اﻟﻤﺘﺮﺟﻢ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ اﻷﻟﻪ و
ﺑﺮﻧﺎﻣﺞ
ﻳﺨﺰﻧﻪ ﻋﻠﻰ اﻟﻘﺮص اﻟﺼﻠﺐ
-٤اﻟﻤﺮﺣﻠﺔ اﻟﺮاﺑﻌﺔ :ﻣﺮﺣﻠﺔ اﻟﻮﺻﻞ linking
ﻓﻲ ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﺗﺘﻢ إﺳﺘﺪﻋﺎءات ﻟﺘﻮاﺑﻊ ﺗﻢ ﺗﻌﺮﻳﻔﻬﺎ ﻓﻲ ﻣﻜﺎن أﺧﺮ ﻣﺜﻞ اﻟﻤﻜﺘﺒﺎت اﻟﻤﻌﻴﺎرﻳﺔ أو اﻟﻤﻜﺘﺒﺎت
اﻟﺨﺎﺻﺔ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﺒﺮﻣﺠﻴﻦ اﻟﻌﺎﻣﻠﻴﻦ ﺿﻤﻦ ﻣﺸﺮوع واﺣﺪ .ﻳﺤﺘﻮي اﻟﻨﺺ اﻟﻨﺎﺗﺞ ﺑﻌﺪ ﻋﻤﻠﻴﺔ
اﻟﺘﺮﺟﻤﺔ ﻋﻠﻰ ﻓﺠﻮات ﺑﺴﺒﺐ ﻫﺬه linkingﺑﻮﺻﻞ اﻟﻨﺺ اﻟﺴﺎﺑﻖ ﻣﻊ اﻟﺘﻮاﺑﻊ اﻟﻨﺎﻗﺼﺔ
اﻷﺟﺰاء اﻟﻨﺎﻗﺼﺔ ﻓﻴﻘﻮم اﻟﻮاﺻﻞ
و ﻛﻞ ذﻟﻚ ﻣﻦ أﺟﻞ اﻟﻮﺻﻮل إﻟﻰ ﺑﺮﻧﺎﻣﺞ ﻗﺎﺑﻞ ﻟﻠﺘﻨﻔﻴﺬ و ذﻟﻚ ﺳﻴﻜﻮن ﺗﺤﺖ اﻟﻨﻈﺎم unixاﻷﻣﺮ اﻟﺬي ﻳﻨﻔﺬ
ﻋﻤﻠﻴﺔ اﻟﺘﺮﺟﻤﺔ و اﻟﻮﺻﻞ ﻟﺒﺮﻧﺎﻣﺞ C++
-٥اﻟﻤﺮﺣﻠﺔ اﻟﺨﺎﻣﺴﺔ :ﻣﺮﺣﻠﺔ اﻟﺸﺤﻦ load
و ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﺗﺘﻤﺜﻞ ﻓﻲ إﺧﺘﺼﺎر ﻓﻲ ﻋﻤﻠﻴﺔ وﺿﻊ اﻟﺒﺮﻧﺎﻣﺞ) اﻟﺬي ﻗﻤﻨﺎ ﻓﻲ ﻛﺘﺎﺑﺘﻪ ( ﻓﻲ اﻟﺬاﻛﺮة و ذﻟﻚ
اﻟﺬي ﻳﻘﻮم ﺑﺄﺧﺬ اﻟﻤﻠﻒ اﻟﺘﻨﻔﻴﺬي و ﻳﻨﻘﻠﻪ إﻟﻰ اﻟﺬاﻛﺮة ﻟﻴﺘﻢ ﺗﺨﺰﻳﻨﻪ ﻫﻨﺎك ﻃﺮﻳﻖ اﻟﺸﺎﺣﻦ loaderﻋﻦ
-٦اﻟﻤﺮﺣﻠﺔ اﻟﺴﺎدﺳﺔ :ﻣﺮﺣﻠﺔ اﻟﺘﻨﻔﻴﺬ execute
ﻓﻲ ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﻳﺒﺪأ اﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﻨﻔﻴﺬ اﻟﺒﺮﻧﺎﻣﺞ ﺗﻌﻠﻴﻤﻪ اﻟﻮاﺣﺪة ﺗﻠﻮ اﻷﺧﺮى ﺣﺘﻰ أﺧﺮ ﺗﻌﻠﻴﻤﻪ ﻓﻲ ﺑﺮﻧﺎﻣﺠﻨﺎ
وذﻟﻚ ﺗﺤﺖ أﺷﺮاف و ﺳﻴﻄﺮة وﺣﺪة اﻟﺘﺤﻜﻢ و اﻟﻤﻌﺎﻟﺠﺔ
و ﺑﻌﺪ اﻟﻤﺮور ﻓﻲ ﺗﻠﻚ اﻟﻤﺮاﺣﻞ ﻳﺘﻢ ﺗﻨﻔﻴﺬ اﻟﺒﺮﻧﺎﻣﺞ و أﻇﻬﺎره ﻟﻨﺎ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺬي رأﻳﺘﻤﻪ
٢٩
أﻣﺎ اﻷن ﺑﻌﺪ أن ﺗﻌﺮﻓﻨﺎ ﻋﻠﻰ ﻣﺮاﺣﻞ ﺗﻨﻔﻴﺬ اﻟﺒﺮاﻣﺞ ﺳﻮف ﻧﺒﺪأ ﻓﻲ ﺷﺮح اﻷﺳﻄﺮ اﻟﺘﻲ ﻗﻤﻨﺎ ﻓﻲ
ﻛﺘﺎﺑﺘﻬﺎ
اﻟﺴﻄﺮ اﻷول ># include <iostream.h
ﻳﻌﺒﺮ ﻋﻦ ﺗﻮﺟﻴﻪ ﻟﻤﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ اﻟﺘﺮﺟﻤﺔ .ﻓﺎﻟﺘﻌﻠﻴﻤﻪ #و اﻟﺘﻲ includeﻫﻲ ﻣﻦ ﺗﻌﻠﻴﻤﺎت اﻟﻤﻌﺎﻟﺞ اﻟﻤﺒﺪﺋﻲ
ﻳﻠﻴﻬﺎ
أﻣﺎ اﻟﺘﻌﻠﻴﻤﺔ > <iostream.hذو اﻷﻣﺘﺪاد .h
ﺗﺪﻋﻰ ﻫﺬه اﻟﺘﻌﻠﻴﻤﺔ ﺑﺎﻟﻤﻠﻒ اﻟﺮأﺳﻲ اﻟﺤﺎوي ﻋﻠﻰ اﻟﻌﻤﻠﻴﺎت اﻟﺨﺎﺻﺔ ﻟﻠﺨﺮج و اﻹدﺧﺎل
ﻫﻮ أﻣﺮ ﻟﻠﻄﺒﺎﻋﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ و ﻫﺬا اﻷﻣﺮ ﻣﻌﺮف و ﻣﻮﺟﻮد ﻣﺴﺒﻘﺎ ً ﻓﻲ اﻟﻤﻠﻒ اﻟﻤﻠﻒ اﻟﺮأﺳﻲ iostream
cout
<< ﻳﺠﺐ أن ﺗﺘﺒﻊ ﺑﻌﺪ أﻣﺮ اﻟﻄﺒﺎﻋﺔ ,coutﻓﻬﻲ ﺗﺮﻣﺰ إﻟﻰ ﻋﻤﻠﻴﺔ اﻹدﺧﺎل.
" " ﻓﻬﺬه اﻟﺘﻌﻠﻴﻤﺔ ﻫﻲ ﻋﺒﺎرة ﻋﻦ ﻋﻼﻣﺔ أﻗﺘﺒﺎس و ﻛﻞ ﺷﻲء ﻳﻜﺘﺐ داﺧﻠﻬﺎ ﺳﻮف ﻳﻈﻬﺮ ﻋﻠﻰ اﻟﺸﺎﺷﺔ
٣٠
ﻣﻼﺣﻈﻪ:
ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺴﺎﺑﻖ ﻓﻲ ﻋﺪة ﻃﺮق و ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ اﻟﺴﺎﺑﻘﺔ أﻳﻀﺎ ً ﻓﻲ ﻋﺪة ﻃﺮق
ﻓﻌﻠﻰ ﺳﺒﻴﻞ اﻟﻤﺜﺎل
٣١
أﻻ ﺗﻮاﻓﻖ ﻣﻌﻲ ﺑﺄن اﻟﻨﺺ اﻟﻤﻄﺒﻮع أﺻﺒﺢ أﻛﺜﺮ ﺗﻨﺴﻴﻘﺎ ً و ﺳﻬﻮﻟﺔ ﻟﻠﻘﺮاء
إن ﻟﻐﺔ C++ﺗﻤﻨﺢ ﻟﻚ اﻟﻤﺮوﻧﺔ ﺑﺎﻟﺘﻌﺒﻴﺮ ﻋﻦ اﻟﺘﻌﻠﻴﻤﺎت ﺑﻄﺮق ﻣﺘﻨﻮﻋﺔ ﻣﻤﺎ ﻳﺆدي إﻟﻰ ﻃﺒﺎﻋﺔ
اﻟﺨﺮج ﻋﻠﻰ اﻟﺸﻜﻞ و اﻟﺘﻨﺴﻴﻖ اﻟﺬي ﺗﺮﻳﺪه أﻧﺖ و ﻳﻮاﻓﻖ ﺑﺮﻧﺎﻣﺠﻚ ﺑﺼﻮره ﻋﻤﻠﻴﺔ
ﻟﻘﺪ إﺳﺘﻌﻤﻠﻨﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ اﻟﺘﻌﻠﻴﻤﺔ \nو ﻫﺬه اﻟﺘﻌﻠﻴﻤﺔ ﻫﻲ ﻣﻦ أﺣﺪ ﺳﻼﺳﻞ اﻟﻬﺮوب
اﻟﺘﺎﻟﻴﺔ:
ﻓﺎﻟﺤﺮف \ backslashﻳﺴﻤﻰ ﺑﺤﺮف اﻟﻬﺮوب Escape characterوﻫﻮ ﻳﺪل ﻋﻠﻰ أن
ﻫﻨﺎك ﺣﺮف ﻳﺠﺐ إﻇﻬﺎره و ﻫﺬا اﻟﺤﺮف ﻳﺠﺐ أن ﻳﻜﻮن ﻣﻦ إﺣﺪى أﺣﺮف ﺳﻼﺳﻞ اﻟﻬﺮوب
ﻓﺎﻟﺤﺮف \nﻳﺪل ﻋﻠﻰ ﺑﺪاﻳﺔ ﺳﻄﺮ ﺟﺪﻳﺪ new lineو ﻫﺬا اﻟﺤﺮف ﻳﺴﺒﺐ ﻓﻲ ﻧﻘﻞ اﻟﻤﺆﺷﺮ
إﻟﻰ ﺑﺪاﻳﺔ ﺳﻄﺮ ﺟﺪﻳﺪ ﻋﻠﻰ اﻟﺸﺎﺷﺔ
ﻣﻼﺣﻈﺔ :
ﻻﺣﻆ أﺧﻲ اﻟﻜﺮﻳﻢ ﺑﺄن ﺣﺮف اﻟﻬﺮوب ﻳﻜﺘﺐ ﺑﻴﻦ ﻋﻼﻣﺘﻲ اﻷﻗﺘﺒﺎس " " و أﻧﻪ ﻻ ﻳﻄﺒﻊ ﻋﻠﻰ
اﻟﺸﺎﺷﺔ ﻟﻸﻧﻪ ﻣﻦ ﺗﻌﻠﻴﻤﺎت اﻟﻠﻐﺔ.
و ﻫﺬه ﺑﻌﺾ اﻷﺣﺮف اﻷﻛﺜﺮ إﺳﺘﻌﻤﻼ ً:
٣٢
٣٣
-٢اﻟﺤﺮف :\t
اﻟﺤﺮف
:\r - ٣إذا ﻛﺘﺐ ﻫﺬا اﻟﺤﺮف ﻓﻲ ﺑﻮرﻻﻧﺪ ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ﻓﺈﻧﻪ ﺳﻮف ﻳﻌﻴﺪ اﻟﻤﺆﺷﺮ إﻟﻰ ﺑﺪاﻳﺔ اﻟﺴﻄﺮ اﻟﺤﺎﻟﻲ دون
اﻹﻧﺘﻘﺎل إﻟﻰ ﺳﻄﺮﺟﺪﻳﺪ أﻣﺎ ﻓﻲ اﻹﺻﺪار ﻓﻴﺠﻮال ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ﻓﺈن ﺗﺄﺛﻴﺮه ﻫﻮ ﻋﺪم ﻃﺒﺎﻋﺔ ﻣﺎ ﻗﺒﻠﻪ ﺿﻤﻦ ﻋﻼﻣﺘﻲ اﻷﻗﺘﺒﺎس
٣٤
-٤اﻟﺤﺮف :\a
و ﻇﻴﻔﺔ ﻫﺬا اﻟﺤﺮف ﻫﻮ إﺻﺪار ﺻﻮﺗﻲ ،ﺻﻮت اﻟﻨﻈﺎم .ﻳﻤﻜﻨﻚ أن ﺗﺠﺮﺑﻪ ﻓﻲ ﻧﻔﺴﻚ.
-٥اﻟﺤﺮف \\:
ﻫﺬا اﻟﺤﺮف ﻳﺴﺎﻋﺪك ﻋﻠﻰ ﻃﺒﺎﻋﺔ ﺣﺮف اﻟﺸﻖ اﻟﻤﻌﻜﻮس \ ﻋﻠﻰ اﻟﺸﺎﺷﺔ.
-٦اﻟﺤﺮف "\:
ﻫﺬا اﻟﺤﺮف ﻳﻄﺒﻊ ﻟﻚ ﻋﻠﻰ اﻟﺸﺎﺷﺔ ﻋﻼﻣﺔ اﻷﻗﺘﺒﺎس " .و ﻫﺬا ﻣﺜﺎل ﻳﺠﻤﻊ ﺑﻴﻦ اﻟﺤﺮف اﻟﺨﺎﻣﺲ
و اﻟﺴﺎدس.
٣٥
ﻣﻼﺣﻈﻪ :
ﻟﻘﺪ إﺳﺘﻌﻤﻠﺖ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺒﻖ اﻟﺘﻌﻠﻴﻤﺔ ; Cout<<endlو ﻫﺬه اﻟﺘﻌﻠﻴﻤﺔ إذا ﻻﺣﻈﺖ ﻣﻌﻲ أﺧﻲ
اﻟﻜﺮﻳﻢ ﺑﺄن ﻟﻬﺎ ﻧﻔﺲ ﺗﺄﺛﻴﺮ ﺣﺮف اﻟﻬﺮوب \nﻓﻬﻲ ﺗﻨﻘﻞ اﻟﻤﺆﺷﺮ إﻟﻰ ﺳﻄﺮ ﺟﺪﻳﺪ
و ﻻ ﻛﻦ ﻻﺣﻆ ﻣﻌﻲ ﺑﺄن endlﻻ ﺗﻜﺘﺐ ﺑﻴﻦ ﻋﻼﻣﺘﻲ اﻷﻗﺘﺒﺎس " " .
ﻓﻲ اﻟﺤﻘﻴﻘﺔ إن اﻟﺬي ﺗﺮاه أﻣﺎﻣﻚ ﻣﻦ ﻛﺘﺎﺑﺔ ﻓﻲ اﻟﻠﻐﺔ اﻟﻌﺮﺑﻴﺔ ﻣﺎ ﻫﻮ إﻻ ﺷﺮح ﻣﺒﺴﻂ ﻟﻸﺳﻄﺮ
اﻟﺒﺮﻧﺎﻣﺞ أو ﺗﻌﻠﻴﻖ ﻳﻜﺘﺒﻪ اﻟﻤﺒﺮﻣﺞ ﺧﻼل ﻛﺘﺎﺑﺔ ﻟﻜﻮد اﻟﺒﺮﻧﺎﻣﺞ ﺣﺘﻰ ﺗﺴﺎﻋﺪه ﻋﻠﻰ ﻗﺮاءة و ﻓﻬﻢ
٣٦
اﻟﺒﺮﻧﺎﻣﺞ .أو أي ﺷﺨﺺ أﺧﺮ ﻳﺮﻳﺪ أن ﻳﻘﺮأ ﻛﻮد اﻟﺒﺮﻧﺎﻣﺞ ﻓﺈن ذﻟﻚ ﺳﻮف ﻳﺴﻬﻞ ﻋﻠﻴﺔ اﻟﻜﺜﻴﺮ
ﻣﻦ اﻟﻌﻨﺎء ﻣﻦ أﺟﻞ ﻓﻬﻢ اﻟﻜﻮد.
وﻟﻜﻦ ﻫﻨﺎك ﻣﺸﻜﻠﻪ واﺣﺪه ﻓﻲ ﻫﺬه اﻟﺘﻌﻠﻴﻤﺔ و ﻫﻲ ﻣﺎذا ﺳﻮف ﻧﻔﻌﻞ إذا أردت أن ﺗﻜﺘﺐ ﺗﻌﻠﻴﻖ
ﻣﻜﻮن ﻣﻦ ﻋﺪة أﺳﻄﺮ ﺣﻴﺚ إن إﺷﺎرة اﻟﺘﻌﻠﻴﻖ ﻫﺬه \\ ﺗﻌﻄﻴﻖ اﻟﺤﻖ ﻓﻲ ﻛﺘﺎﺑﺔ ﺗﻌﻠﻴﻘﻚ ﻋﻠﻰ ﺳﻄﺮ
واﺣﺪ ﻓﻘﻂ .وﻟﺤﻞ ﻫﺬه اﻟﻤﺸﻜﻠﺔ ﻳﻮﺟﺪ ﻓﻲ ﺳﻲ ﺑﻠﺲ ﺑﻠﺲ ﺗﻌﻠﻴﻤﺔ ﻟﻜﺘﺎﺑﺔ اﻟﺘﻌﻠﻴﻖ ﻋﻠﻰ أﻛﺜﺮ ﻣﻦ
ﺳﻄﺮ و ﻫﻲ
*\
ﻛﺘﺎﺑﺔ اﻟﺘﻌﻠﻴﻖ اﻟﺬي ﺗﺮﻳﺪه ﻫﻨﺎ
*/
ﻓﻬﻮ ﻳﻌﻨﻲ ﻋﻦ إﻋﻼن اﻟﻤﺘﺮﺟﻢ ﻋﻦ اﻟﻤﺘﻐﻴﺮات اﻟﺘﻲ ﻧﻨﻮي إﺳﺘﺨﺪاﻣﻬﺎ .وﻫﺬه اﻟﻤﺘﻐﻴﺮات ﺳﻮف
ﻳﺘﻢ ﺣﺠﺰ ﻣﻮﺿﻊ ﺧﺎص ﻟﻬﺎ ﻓﻲ اﻟﺬاﻛﺮة و ﻓﻲ ﻫﺬا اﻟﻤﻜﺎن اﻟﺬي ﺣﺠﺰ ﻓﻲ اﻟﺬاﻛﺮة ﺳﻮف ﻳﺨﺰن
ﻓﻴﻪ ﻗﻴﻤﻪ ﻟﻴﺘﻢ اﺳﺘﺨﺪاﻣﻬﺎ ﻓﻴﻤﺎ ﺑﻌﺪ .
و ﻟﻜﻦ ﻗﺒﻞ أن ﻳﻤﻜﻦ اﺳﺘﻌﻤﺎل اﻟﻤﺘﻐﻴﺮ ﻳﺠﺐ اﻟﺘﺼﺮﻳﺢ ﻋﻨﻪ .أي ﺗﺤﺪﻳﺪ ﻧﻮﻋﻪ و إﻋﻄﺎؤه إﺳﻤﺎ ً
و اﻟﺘﺼﺮﻳﺢ ﻋﻠﻰ ﻧﻮع اﻟﻤﺘﻐﻴﺮ ﻫﻮ أﻣﺮ ﻫﺎم ﺟﺪا ً ﻟﻸﻧﻪ ﻳﻌﺮف ﻧﻄﺎق اﻟﻘﻴﻢ اﻟﻤﺴﻤﻮﺣﺔ اﻟﺘﻲ
ﻳﺴﺘﻄﻴﻊ اﻟﻨﻮع ﺗﺨﺰﻳﻨﻬﺎ و ﻧﻮع اﻟﻌﻤﻠﻴﺎت اﻟﺘﻲ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ اﻟﻤﺘﻐﻴﺮ.
و ﻗﺪ أﻋﻠﻨﺎ ﻋﻦ ﻫﺬه اﻟﻤﺘﻐﻴﺮات ﻋﻠﻰ أﻧﻬﺎ ﻣﻦ اﻟﻨﻤﻂ Intو ﻫﺬا ﻳﻌﻨﻲ أن اﻟﻤﺘﻐﻴﺮات ﺳﻮف ﺗﻘﺒﻞ
ﻗﻴﻢ ﺻﺤﻴﺤﻪ ﻓﻘﻂ ﻣﺜﻞ ....٢٢٨ ، ٩-،٥،٠
أﻣﺎ إذا أردت ان ﺗﺴﺘﺨﺪم أﻋﺪاد ﺣﻘﻴﻘﺔ ﻣﺜﻞ ٣١٥٫٢١٣- ، ٠٫٠٣ ، ٢٫٥
ﺣﻴﻨﺌﺬ ﻳﺠﺐ ﻋﻠﻴﻚ اﺳﺘﺨﺪام اﻟﻨﻤﻂ floatأو اﻟﻨﻤﻂ doubleﻟﻸﻋﺪاد اﻟﺤﻘﻴﻘﺔ اﻟﻜﺒﻴﺮة
أﻣﺎ ﻟﺤﺎﻟﺔ اﻷﺣﺮف ﻓﻴﺠﺐ اﺳﺘﺨﺪام اﻟﻨﻤﻂ Char
أﻣﺎ اﻟﺘﻌﻠﻴﻤﺔ:
;"Cout<<"enter the number1 \n
٣٧
ﻓﻬﻮ أﻣﺮ ﻟﻄﺒﺎﻋﺔ ﻫﺬه اﻟﺮﺳﺎﻟﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ Enter the number1
اﻟﺘﻲ ﺗﻄﻠﺐ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﺑﺈدﺧﺎل اﻟﺮﻗﻢ اﻷول .أي وﻛﺎن اﻟﺒﺮﻧﺎﻣﺞ ﻳﻘﻮل ﻟﻠﻤﺴﺘﺨﺪم أدﺧﻞ اﻟﻌﺪد
اﻷول ﻓﺄﻧﺎ ﺟﺎﻫﺰ ﻟﻺﺳﺘﻘﺒﺎﻟﻪ.
أﻣﺎ اﻟﺘﻌﻠﻴﻤﺔ:
;Cin>>number1
ﻫﻲ ﻋﺒﺎرة ﻋﻦ ﻋﻤﻠﻴﺔ اﻟﺪﺧﻞ ﻣﻦ اﻟﻘﻴﻤﺔ اﻟﺘﻲ أدﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم ﻟﻠﻤﺘﻐﻴﺮاﻷول و ﻓﻲ ﻣﺜﺎﻟﻨﺎ ﻫﻲ
اﻟﻘﻴﻤﺔ اﻟﻌﺪد . ٢وﻳﻤﻜﻦ أن ﻧﻌﺒﺮ ﻋﻦ اﻟﺘﻌﻠﻴﻤﺔ اﻟﺴﺎﺑﻘﺔ ﻛﻤﺎ ﻳﻠﻲ
اﻟﺘﻌﻠﻴﻤﺔ cinﺗﻌﻄﻲ اﻟﻘﻴﻤﺔ اﻟﻤﺪﺧﻠﺔ إﻟﻰ اﻟﻤﺘﺤﻮل Number1
و ذﻟﻚ ﻃﺒﻌﺎ ً ﻳﺘﻢ ﺑﻌﺪ اﻟﻀﻐﻂ ﻋﻠﻰ زر اﻹدﺧﺎل ﻟﻜﻲ ﻳﺘﻢ إرﺳﺎل اﻟﻌﺪد إﻟﻰ اﻟﻜﻤﺒﻴﻮﺗﺮ .ﺛﻢ ﻟﻴﻘﻮم
ذﻟﻚ اﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﺈﺳﻨﺎد ﻫﺬا اﻟﻌﺪد إﻟﻰ اﻟﻤﺘﻐﻴﺮ اﻷول number1ﺑﻌﺪ
ﻣﻼﺣﻈﺔ:
ﻳﺠﺐ أن ﺗﻨﻬﻲ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﻓﻲ اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮﻃﺔ ; وﻫﺬه اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮﻃﺔ ﺗﺴﻤﻰ ﺑﻤﺆﺷﺮ ﻧﻬﺎﻳﺔ
اﻟﺘﻌﻠﻴﻤﺔ .وإن ﻋﺪم وﺿﻌﻬﺎ ﺑﻌﺪ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﺳﻮف ﻳﻈﻬﺮ ﻟﻚ اﻟﻤﺘﺮﺟﻢ ﺧﻄﺄ ﺧﻼل ﻣﺮﺣﻠﺔ
اﻟﺘﺮﺟﻤﺔ.
أﻣﺎ اﻟﺘﻌﻠﻴﻤﺘﻴﻦ
;"Cout<<"enter the number2: \n
; Cin>>number2
ﻓﻬﻤﺎ ﻳﻘﻮﻣﺎن ﻋﻠﻰ ﻧﻔﺲ ﻣﺒﺪأ اﻟﺘﻌﻠﻴﻤﺘﻴﻦ اﻟﺴﺎﺑﻘﺘﻴﻦ اﻟﺘﻴﻦ ﺳﺒﻖ ﺷﺮﺣﻬﻤﺎ
و ﻻﻛﻦ ﻓﻲ ﻫﺬه اﻟﺤﺎﻟﺔ ﻫﺬه اﻟﺘﻌﻠﻴﻤﺘﻴﻦ ﺗﺴﺘﻘﺒﻞ اﻟﻘﻴﻤﺔ ﻟﻠﻤﺘﻐﻴﺮ اﻟﺜﺎﻧﻲ و ﺗﺮﺳﻞ اﻟﻘﻴﻤﺔ ﻟﻠﻤﺘﻐﻴﺮ
اﻟﺜﺎﻧﻲ
Number2
ﻓﻬﻲ ﻓﻲ ﻛﻞ ﺑﺴﺎﻃﺔ ﻋﺒﺎرة ﻋﻦ ﻋﻤﻠﻴﺔ ﺣﺴﺎﺑﻴﺔ ﺑﺴﻴﻄﺔ ﺗﻘﻮم ﺑﺤﺴﺎب ﻣﺠﻤﻮع اﻟﻤﺘﻐﻴﺮﻳﻦ
Number1و اﻟﻤﺘﻐﻴﺮ Number2ﺛﻢ ﺑﻌﺪ إﺟﺮاء اﻟﻌﻤﻠﻴﺔ اﻟﺤﺴﺎﺑﻴﺔ ﺗﻘﻮم ﺑﺈرﺳﺎل اﻟﻨﺎﺗﺞ
إﻟﻰ اﻟﻤﺘﻐﻴﺮ Sumو ذﻟﻚ ﻋﻦ ﻃﺮﻳﻖ ﻋﻤﻠﻴﺔ اﻹﺳﻨﺎد =
٣٨
اﻟﺴﻄﺮ
; Cout<<" the sum is " << sum << endl
ﻣﻼﺣﻈﺔ:
ﻫﻞ ﻻﺣﻈﺖ ﻣﻌﻲ أﺧﻲ اﻟﻜﺮﻳﻢ أن cinو coutﻫﻲ ﻋﺒﺎرة ﻋﻦ ﻋﻤﻠﻴﺔ ﺣﻮار و ﺧﻄﺎب ﺑﻴﻦ
اﻟﻜﻤﺒﻴﻮﺗﺮ و اﻟﻤﺴﺘﺨﺪم ﻟﺬﻟﻚ ﺳﻤﻴﺖ ﻫﺬه اﻟﻌﻤﻠﻴﺔ ﺑﺎﻟﺒﺮﻣﺠﺔ اﻟﺨﻄﺎﺑﻴﺔ Interactive computing
ﻣﻼﺣﻈﺔ ﻫﺎﻣﺔ:
ﻳﻮﺟﺪ ﻓﻲ ﻟﻐﺔ C++ﻋﻤﻠﻴﺘﻴﻦ ﻫﻤﺎ ﺗﻘﺮﻳﺒﺎ ً ﻣﺘﺸﺎﺑﻬﺘﻴﻦ و ﻳﻜﺜﺮ وﻗﻮع ﻓﻲ اﻟﺨﻄﺄ ﺑﻴﻨﻬﻤﺎ
-١اﻟﻌﻤﻠﻴﺔ اﻷوﻟﻰ ﻫﻲ ﻋﻤﻠﻴﺔ اﻟﻤﻘﺎرﻧﺔ)=(:
و اﻟﺘﻲ ﺗﻌﻨﻲ أن اﻟﻄﺮف اﻷول ﻣﻦ اﻟﻤﻌﺎدﻟﺔ ﻳﺄﺧﺬ ﻗﻴﻤﺔ اﻟﻄﺮف اﻟﺜﺎﻧﻲ ﻣﻦ اﻟﻤﻌﺎدﻟﺔ.
إن ﻟﻐﺔ C++ﻫﻲ ﻟﻐﺔ ﺗﺴﺘﺨﺪم ﻗﻮاﻋﺪ اﻷوﻟﻮﻳﺔ ﻓﻲ إﺟﺮاء اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ و ﻫﺬه اﻟﻄﺮﻳﻘﺔ ﻗﺪ
ﺗﺨﺘﻠﻒ ﻋﻦ اﻟﻄﺮﻳﻘﺔ اﻟﺠﺒﺮﻳﺔ اﻟﻤﻌﺮوﻓﺔ ﻟﺪﻳﻨﺎ
إن أي ﻣﻌﺎدﻟﺔ ﻧﻜﺘﺒﻬﺎ ﻓﻲ ﻫﺬه اﻟﻠﻐﺔ ﻓﺈن C++ﺗﺒﺪأ ﻓﻲ إﺟﺮاء اﻟﻌﻤﻠﻴﺔ اﻟﺤﺴﺎﺑﻴﺔ ﺑﻄﺮﻳﻘﺔ ﻣﺘﺴﻠﺴﻠﻪ
ﻋﻠﻰ ﺛﻼث ﻣﺮاﺣﻞ:
-١اﻟﻤﺮﺣﻠﺔ اﻷوﻟﻰ :
إﺟﺮاء اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ اﻟﻤﻮﺟﻮدة ﺿﻤﻦ اﻷﻗﻮاس
-٢اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻧﻴﺔ :
إﺟﺮاء اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﻀﺮب و اﻟﻘﺴﻤﺔ و ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ اﻟﺼﺤﻴﺤﺔ
٣٩
ﻣﺜﺎل:
ﻟﻴﻜﻦ ﻟﺪﻳﻨﺎ ﻫﺬه اﻟﻤﻌﺎدﻟﺔ و ﻧﺮﻳﺪ أن ﻧﺠﺮي ﻟﻬﺎ اﻟﻌﻤﻠﻴﺔ اﻟﺤﺴﺎﺑﻴﺔ ﻓﻲ C++
y= 2 * 2 + 6 * 3 - 4
=2*2 4
y=4+6*3-4
٤٠
=6*3 18
y = 4 + 18 - 4
= 4 +18 22
y= 22 - 4
Y = 18
٤١
ﻟﻘﺪ ﺷﺮﺣﻨﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ اﻧﻪ ﻗﺒﻞ ان ﻧﺴﺘﺨﺪم اﻟﻤﺘﻐﻴﺮ ﻳﺠﺐ اﻟﺘﺼﺮﻳﺢ ﻋﻨﻪ
وﻫﺬه اﻟﻤﺘﻐﻴﺮات ﺳﻮف ﻳﺘﻢ ﺣﺠﺰ ﻣﻮﺿﻊ ﺧﺎص ﻟﻬﺎ ﻓﻲ اﻟﺬاﻛﺮة و ﻓﻲ ﻫﺬا اﻟﻤﻜﺎن اﻟﺬي ﺣﺠﺰ
ﻓﻲ اﻟﺬاﻛﺮة ﺳﻮف ﻳﺨﺰن ﻓﻴﻪ ﻗﻴﻤﻪ ﻟﻴﺘﻢ اﺳﺘﺨﺪاﻣﻬﺎ ﻓﻴﻤﺎ ﺑﻌﺪ أﺛﻨﺎء ﺗﻨﻔﻴﺬ اﻟﺒﺮﻧﺎﻣﺞ .
ﻓﻔﻲ اﻟﺬاﻛﺮة ﻳﺘﻢ ﻟﻜﻞ ﻣﺘﻐﻴﺮ اﺳﻢ nameو ﻧﻤﻂ typeو ﻗﻴﻤﺔ value
Number1
Number2
Sum
و ﺑﻌﺪ أن ﻗﻤﻨﺎ ﺑﺈدﺧﺎل ﻟﻜﻞ ﻣﺘﻐﻴﺮ ﻗﻴﻤﺔ ﻋﺪدﻳﺔ ﻓﺈن ﻫﺬه اﻟﻘﻴﻤﺔ ﺳﻮف ﺗﻮﺿﻊ ﻓﻲ ﻣﻮﺿﻊ اﻟﺬاﻛﺮة
اﻟﻤﺨﺼﺺ ﻟﻬﺎ ﻣﻊ اﻟﻌﻠﻢ أن ﻫﺬه اﻟﻤﻮاﺿﻊ ﺗﻜﻮن ﺟﻨﺒﺎ ً إﻟﻰ ﺟﻨﺐ ﻓﻲ اﻟﺬاﻛﺮة .
وﻳﻤﻜﻦ أن ﻧﻌﺒﺮ ﻋﻦ ذﻟﻚ ﺑﺎﻟﺸﻜﻞ اﻟﺘﻮﺿﻴﺤﻲ اﻟﺘﺎﻟﻲ:
2
Number1
Number2 3
Sum
٤٢
ﺑﻌﺪ أن ﻗﻤﻨﺎ ﺑﺈدﺧﺎل اﻟﻘﻴﻢ إﻟﻰ اﻟﻤﺘﻐﻴﺮات و أﺧﺬت ﻣﻮاﻗﻊ ﻟﻬﺎ ﻓﻲ اﻟﺬاﻛﺮة ﻫﺬا ﻳﻌﻨﻲ أن
اﻟﺒﺮﻧﺎﻣﺞ ﻗﺪ ﺣﺼﻞ ﻋﻠﻰ ﻗﻴﻤﺘﻲ اﻟﻤﺘﻐﻴﺮﻳﻦ
ﺑﻌﺪ ذﻟﻚ ﻳﻘﻮم اﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﻤﻠﻴﺔ اﻟﺠﻤﻊ و ﻳﻀﻊ اﻟﻨﺘﻴﺠﺔ ﻓﻲ ﻣﻮﺿﻊ sum
ﺑﻌﺪ ذﻟﻚ ﺳﻮف ﺗﺒﺪوا اﻟﻤﻮاﺿﻊ ﻓﻲ اﻟﺬﻛﺮة ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :
2
Number1
Number2 3
Sum 5
٤٣
٤٤
٤٥
ﺃﻤﺎ ﺍﻷﻥ ﺩﻋﻨﺎ ﻨﻀﺭﺏ ﻤﺜﺎل ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺜﻡ ﻨﻘﻭﻡ ﺒﺸﺭﺡ ﻜﻴﻑ ﺘﻨﻔﻴﺫ ﺍﻟﻤﺘﺭﺠﻡ ﻟﻬﺎ
ﻤﺜﺎل:
ﻟﻨﻔﺭﺽ ﺃﻥ ﺠﺎﻤﻌﺔ ﺍﻟﻬﻨﺩﺴﺔ ﺃﻋﻠﻨﺕ ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻟﺴﻨﺔ ﺍﻟﺩﺭﺍﺴﻴﺔ ﻋﻥ ﺒﺩﺀ ﻗﺒﻭل ﺍﻟﻁﻼﺏ ﺍﻟﺭﺍﻏﺒﻴﻥ
ﻓﻲ ﺍﻹﻨﺘﺴﺎﺏ ﺇﻟﻴﻬﺎ ﻭ ﻭﻀﻌﺕ ﻋﺩﺓ ﺸﺭﻭﻁ ﻟﻼﻨﺘﺴﺎﺏ ﻭ ﻜﺎﻥ ﺇﺤﺩﻯ ﻫﺫﻩ ﺍﻟﺸﺭﻭﻁ ﺒﺄﻥ ﻴﻜﻭﻥ
ﻤﺠﻤﻭﻉ ﻋﻼﻤﺎﺕ ﺍﻟﻁﺎﻟﺏ ﻻ ﻴﻘل ﻋﻥ ٧٠ﻓﻲ ﺍﻟﻤﺌﺔ
ﺩﻋﻨﺎ ﻨﺤﺎﻭل ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﺒﻨﺩ ﻟﻠﻘﺒﻭل ﻋﻠﻰ ﺸﻜل ﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ .c++ﻭ ﺒﻌﺩ ﻜﺘﺎﺒﺔ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻨﻀﻐﻁ ﻋﻠﻰ
ﻟﻠﺘﺤﻘﻕ ﻤﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ﻓﻲ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻓﺈﺫﺍ ﺃﻅﻬﺭ ﻟﻨﺎ ﺍﻟﻤﺘﺭﺠﻡ ﻫﺫﻩ ﺍﻟﺭﺴﺎﻟﻪ ﺍﻟﺘﻲ
ﺘﻌﻠﻥ ﻋﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ،ﻭ ﺍﻟﺘﻲ ﺘﻜﻭﻥ ﻓﻲ ﺃﺴﻔل ﺒﺭﻨﺎﻤﺞ visual C++
٤٦
٤٧
ﻭ ﺒﻨﺎﺀ ﻋﻠﻰ ﺫﻟﻙ ﻓﺈﻥ ﺍﻟﻤﺘﺭﺠﻡ ﻋﻨﺩﻤﺎ ﻴﺼل ﺇﻟﻰ ﺍﻟﺠﻤﻠﺔ ifﻓﺈﻨﻪ ﻴﻘﻭﻡ ﻤﻥ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺸﺭﻁ
ﺘﻨﻔﻴﺫ ﺠﻤﻠﺔ ﺇﺘﺨﺎﺫ ﺍﻟﻘﺭﺍﺭ )ﺇﺫﺍ( ifﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل ﺍﻟﻘﻭﺴﻴﻥ ﺍﻟﺼﻐﻴﺭﻴﻥ ﺍﻟﺫﻴﻥ ﻴﺄﺘﻴﻥ ﺒﻌﺩ if
ﻓﻭﺭﺍﹰ.
ﻓﺈﺫﺍ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ ﻋﻨﺩﺌﺫ ﺍﻟﻤﺘﺭﺠﻡ ﻴﻌﻁﻲ ﺍﻟﻨﺘﻴﺠﺔ trueﺃﻱ ﺼﺢ ﻭ ﺫﻟﻙ ﻴﻌﻨﻲ ﻨﻔﺫ ﺍﻷﻭﺍﻤﺭ ﻭ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ if
ﺃﻤﺎ ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺸﺭﻁ ﻏﻴﺭ ﻤﺤﻘﻕ ﻓﻬﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﺍﻟﻤﺘﺭﺠﻡ ﻴﻌﻁﻲ ﺍﻟﻨﺘﻴﺠﺔ falseﺃﻱ ﺨﻁﺄ
ﻭ ﺫﻟﻙ ﻴﻌﻨﻲ ﻻ ﺘﻨﻔﻴﺫ ﺃﻱ ﺸﻲﺀ ﺩﺍﺨل ﺠﺴﻡ ﺍﻟﺒﻨﻴﺔ . ifﻭ ﺒﻤﻌﻨﻰ ﺃﺨﺭ ﻜﺄﻥ ﺍﻟﻤﺘﺭﺠﻡ ﻴﻘﻭﻡ
ﺒﺘﺠﺎﻫل ﻜل ﺍﻷﻭﺍﻤﺭ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺩﺍﺨل ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ . if
ﻭ ﺍﻹﻨﺘﻘﺎل ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻲ ﺘﻠﻴﻪ ﻓﻲ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﺃﻤﺎ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺠﻨﺎ
ﻓﻌﻨﺩﻤﺎ ﻁﻠﺏ ﻤﻨﺎ ﺒﺈﺩﺨﺎل ﺩﺭﺠﺔ ﻋﻼﻤﺔ ﺍﻟﻁﺎﻟﺏ .ﻭ ﺃﺩﺨﻠﻨﺎ ﺍﻟﺩﺭﺠﺔ ٧٠ﻓﻔﻲ ﻫﺫﻩ ﺍﻟﺨﻁﻭﺓ ﻗﺎﻡ
ﺍﻟﻤﺘﺭﺠﻡ ﻓﻲ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺍﻟﺸﺭﻁ ﻭ ﺒﻌﺩ ﺍﻟﺘﺤﻘﻕ ﻭ ﺠﺩ ﺃﻥ ﺩﺭﺠﺔ ﻋﻼﻤﺔ ﺍﻟﻁﺎﻟﺏ ﺍﻟﻤﺩﺨﻠﺔ ﺘﺘﻭﺍﻓﻕ
ﻤﻊ ﺍﻟﺸﺭﻁ ﺃﻱ trueﻋﻨﺩﺌﺫ ﻗﺎﻡ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل ﺠﺴﻡ ifﻭ ﻗﺎﻡ ﻓﻲ ﻁﺒﻊ
ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺒﻴﻥ ﻋﻼﻤﺘﻲ ﺍﻹﻗﺘﺒﺎﺱ " ." welcome to university
ﻭ ﻟﻜﻥ ﻤﺎﺫﺍ ﺴﻭﻑ ﻴﺤﺼل ﺇﺫﺍ ﻗﻤﻨﺎ ﻓﻲ ﺇﺩﺨﺎل ﻗﻴﻤﺔ ﺃﻗل ﻤﻥ ٧٠
ﺤﻴﻨﺌﺫ ﻓﺈﻥ ﺍﻟﺸﺭﻁ ﻻ ﻴﻜﻭﻥ ﻤﺤﻘﻕ ﺃﻱ falseﻭ ﻟﻥ ﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺘﻨﻔﻴﺫ ﺃﻱ ﺸﻲﺀ.
٤٨
ﻤﻼﺤﻅﺔ:
ﺇﻥ ﻤﻥ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺘﻲ ﻴﻘﻊ ﻓﻴﻬﺎ ﻤﻌﻅﻡ ﺇﺨﻭﺍﻨﻨﺎ ﺍﻟﻤﺒﺭﻤﺠﻭﻥ ﻫﻲ ﻭﻀﻊ ﺍﻟﻔﺎﺼﻠﺔ ﺍﻟﻤﻨﻘﻭﻁﺔ ﺒﻌﺩ
ﻗﻭﺴﻴﻥ ﺍﻟﺠﻤﻠﺔ ifﻭ ﺫﻟﻙ ﻟﻸﻨﻪ ﻜﻤﺎ ﺘﻌﻭﺩﻨﺎ ﻓﺈﻨﻪ ﻓﻲ c++ﻨﻀﻊ ﻓﺎﺼﻠﺔ ﻤﻨﻘﻭﻁﺔ ﻋﻨﺩ ﻨﻬﺎﻴﺔ ﻜل
ﺘﻌﻠﻴﻤﺔ.
ﻣﺜﺎل ﺧﻄﺄ:
TRUE
false
إﺧﺘﺒﺎر
ﺟﺴﻢ اﻟﺠﻤﻠﺔ
body_ If
٤٩
٥٠
ﻟﺫﻟﻙ ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺍﻟﺘﻔﻜﻴﺭ ﻓﻲ ﻜﺘﺎﺒﺔ ﺸﻲﺀ ﺒﺤﻴﺙ ﺃﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻘﻭﻡ ﻓﻲ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﺃﺨﺭﻯ ﻓﻲ
ﺤﺎل ﻋﺩﻡ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ ﻟﻠﺠﻤﻠﺔ if
ﺤﻴﻨﺌﺫ ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺠﻤﻠﺔ if\elseﻭ ﺍﻟﺘﻲ ﺘﻌﻁﻴﻨﺎ ﻤﺠﺎل ﻟﻜﺘﺎﺒﺔ ﺘﻌﻠﻴﻤﺔ ﺃﺨﺭﻯ ﻓﻲ ﺤﺎل
ﻋﺩﻡ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ
ﻤﺜﺎل:
ﺃﻤﺎ ﺍﻷﻥ ﺩﻋﻨﺎ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﻨﻘﻭﻡ ﻓﻲ ﺘﻌﺩﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﺒﺤﻴﺙ ﺇﺫﺍ ﻗﺎﻡ ﺍﻟﻁﺎﻟﺏ ﻓﻲ ﺇﺩﺨﺎل
ﻗﻴﻤﺔ ﺃﺼﻐﺭ ﻤﻥ ٧٠ﻨﻜﺘﺏ ﺘﻌﻠﻴﻤﺔ ﺒﺤﻴﺙ ﺘﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺭﺴﺎﻟﺔ ﺘﻌﻠﻥ ﺍﻟﻁﺎﻟﺏ ﺒﺄﻥ
ﻋﻼﻤﺘﻪ ﺃﻗل ﻤﻥ ٧٠ﻭ ﻻ ﻴﻘﺒل ﻓﻲ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ .ﺜﻡ ﻨﻘﻭﻡ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻜﻤﺎ ﺘﻌﻠﻤﻨﺎ ﻓﻲ
ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ.ﻭ ﺒﻌﺩ ﺍﻟﺘﻨﻔﻴﺫ ﻴﻁﻠﺏ ﻤﻨﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺈﺩﺨﺎل ﺍﻟﻌﻼﻤﺔ ﻓﻨﻘﻭﻡ ﻓﻲ ﺇﺩﺨﺎل ﻋﻼﻤﺔ ﺃﻗل
ﻤﻥ ٧٠ﺤﻴﻨﺌﺫ ﺴﻭﻑ ﻴﺨﺭﺝ ﻟﻨﺎ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻜﻤﺎ ﻫﻭ ﻤﻭﻀﺢ ﻋﻠﻰ ﺍﻟﺸﻜل
ﺍﻟﺘﺎﻟﻲ:
٥١
٥٢
ﺇﺫﺍ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﻜﻤﺎ ﺘﺭﻯ ﻋﻨﺩﻤﺎ ﺃﺩﺨل ﺍﻟﻁﺎﻟﺏ ﺍﻟﺩﺭﺠﺔ ٦٥ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺸﺭﻁ
ﻭ ﻭﺠﺩ ﺒﺄﻥ ﺍﻟﻌﻼﻤﺔ ﺍﻟﻤﺩﺨﻠﺔ ﻏﻴﺭ ﻤﺘﻭﺍﻓﻘﺔ ﻤﻊ ﺍﻟﺸﺭﻁ ﺤﻴﻨﺌﺫ ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺠﻤﻠﺔ if
ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺍﻟﺒﻨﻴﺔ elseﻋﻨﺩﺌﺫ ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺈﺨﺭﺍﺝ ﺭﺴﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺘﺨﺒﺭﻩ
ﺒﺄﻥ ﻋﻼﻤﺔ ﺍﻟﻁﺎﻟﺏ ﺃﻗل ﻤﻥ ٧٠ﻭ ﻻ ﻴﺠﻭﺯ ﻟﻪ ﻓﻲ ﺍﻹﻨﺘﺴﺎﺏ ﺇﻟﻰ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ.
ﻤﻼﺤﻅﻪ:
ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﻴﺠﺏ ﺃﻥ ﺘﻨﺘﺒﻪ ﺇﻟﻰ ﺍﻷﻗﻭﺍﺱ ﺍﻟﻜﺒﻴﺭﺓ }{ ﻭ ﺍﻟﺘﻲ ﺘﺤﺼﺭ ﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﻨﻴﺔ ﺃﻭ ﺍﻟﺠﻤﻠﺔ.
ﻭ ﺒﺎﻟﺘﺎﻟﻲ ﻴﻤﻜﻥ ﺒﺴﻬﻭﻟﻪ ﻓﻲ ﻗﺭﺍﺀﺓ ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ ﺃﻭ ﺇﻀﺎﻓﺔ ﺃﻭﺍﻤﺭ ﺃﺨﺭﻯ ﻟﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ ﺇﺫﺍ ﻤﺎ
ﺃﺭﺩﺕ ﺍﻹﻀﺎﻓﺔ ﺃﻭ ﺍﻟﺘﻁﻭﻴﺭ ﻟﺒﺭﻨﺎﻤﺠﻙ ﻓﻴﻤﺎ ﺒﻌﺩ
ﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻨﻪ ﻴﻤﻜﻥ ﻜﺘﺎﺒﺔ ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ ﺩﻭﻥ ﻭﻀﻊ ﺍﻷﻗﻭﺍﺱ ﺍﻟﻜﺒﻴﺭﺓ }{.
ﻭ ﻟﻜﻨﻨﻲ ﺃﺭﺩﺩ ﺒﺎﻟﺘﺄﻜﻴﺩ ﻋﻠﻰ ﻭﻀﻌﻬﺎ ﻟﺘﺠﻨﺏ ﺍﻟﻭﻗﻭﻉ ﻓﻲ ﺍﻷﺨﻁﺎﺀ.
٥٣
TRUE
false
إﺧﺘﺒﺎر
ﻤﺘﻌﺩﺩ ﺍﻻﺘﺠﺎﻫﺎﺕ:
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﺇﻥ ﺍﻟﻘﺴﻡ ﺍﻟﺜﺎﻟﺙ ﻤﻥ ﺍﻟﺠﻤﻠﺔ Ifﻤﺎ ﻫﻲ ﺇﻻ ﺍﻟﺠﻤﻠﺔ ifﻓﻲ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺜﻨﺎﺌﻴﺔ ﻭ ﻟﻜﻨﻬﺎ
ﺘﺨﺘﻠﻑ ﺒﺄﻥ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﺘﺄﺘﻲ ﺒﺸﻜل ﻤﺘﺘﺎﻟﻲ ﻷﺘﺨﺎﺫ ﻗﺭﺍﺭ ﺒﺄﺴﻠﻭﺏ ﻤﺘﻌﺩﺩ ﺍﻻﺘﺠﺎﻫﺎﺕ.
ﺃﻱ ﻓﻲ ﺤﺎﻟﺔ ﻤﺘﻌﺩﺩ ﺍﻻﺘﺠﺎﻫﺎﺕ ﻨﻜﺘﺏ ﺃﻜﺜﺭ ﻤﻥ if/elseﺒﻁﺭﻴﻘﺔ ﻤﺘﺘﺎﻟﻴﺔ ﻭ ﻤﺘﺩﺍﺨﻠﺔ ﺘﺘﻨﺎﺴﺏ
ﺤﺴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﻨﺭﻴﺩ ﻜﺘﺎﺒﺘﻪ .
٥٤
ﻨﻌﻡ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﺃﻋﻠﻡ ﺃﻥ ﺍﻷﻤﺭ ﺒﺩﺃ ﻴﺼﻌﺏ ﻋﻠﻴﻙ ﻭ ﻗﺩ ﺘﺨﺘﻠﻁ ﻋﻠﻴﻙ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﺘﺩﺍﺨﻠﺔ
،ﻭ ﻟﻜﻥ ﺘﺫﻜﺭ ﺃﻨﻪ ﻤﻥ ﺃﺭﺍﺩ ﺍﻟﻌﻠﻰ ﺘﺤﻤل ﻤﺸﻘﺔ ﺼﻌﻭﺩ ﺍﻟﺠﺒﺎل ﻭ ﻜﻤﺎ ﻗﻴل ﺴﺎﺒﻘﺎﹰ
ﺇﻥ ﺍﻟﻀﻐﻁ ﻭ ﺍﻟﺤﺭﺍﺭﺓ ﺘﺼﻨﻊ ﺍﻷﻟﻤﺎﺱ
ﻭ ﻟﻜﻥ ﻻ ﺘﻘﻠﻕ ﻓﺈﻥ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ ﻫﻲ ﻤﻥ ﺍﻟﻤﺭﺍﺤل ﺍﻟﺴﻬﻠﺔ ﻭ ﺴﻭﻑ ﻨﺄﺨﺫ ﻤﺜﺎل ﻭ ﺇﻥ ﺸﺎﺀ ﺍﷲ
ﻓﺈﻥ ﺍﻷﻤﻭﺭ ﺴﻭﻑ ﺘﺘﻀﺢ ﺒﻌﺩ ﻫﺫﺍ ﺍﻟﻤﺜﺎل.
٥٥
ﻭ ﺴﻭﻑ ﻨﺄﺨﺫ ﻤﺜﺎﻟﻨﺎ ﺍﻟﺴﺎﺒﻕ ﻭ ﺴﻭﻑ ﻨﺤﺎﻭل ﺘﻁﻭﻴﺭﻩ ﻟﻴﺼﺒﺢ ﺒﺭﻨﺎﻤﺞ ﺤﻘﻴﻘﻲ ﻴﻌﺒﺭ ﻋﻥ ﻤﺴﺘﻭﻯ
ﻓﻬﻤﻨﺎ ﻟﻠﻐﺔ . C++
ﻤﺜﺎل:
ﺴﻭﻑ ﻨﻌﻭﺩ ﺃﻴﻀﺎﹰ ﺇﻟﻰ ﻤﺜﺎﻟﻨﺎ ﺍﻟﺴﺎﺒﻕ
ﻜﻤﺎ ﺘﺘﺫﻜﺭ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻭ ﺍﻟﺫﻱ ﻜﺎﻥ ﻋﺒﺎﺭﺓ ﻋﻥ :ﺃﻥ ﺠﺎﻤﻌﺔ ﺍﻟﻬﻨﺩﺴﺔ ﺃﻋﻠﻨﺕ
ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻟﺴﻨﺔ ﺍﻟﺩﺭﺍﺴﻴﺔ ﻋﻥ ﺒﺩﺀ ﻗﺒﻭل ﺍﻟﻁﻼﺏ ﺍﻟﺭﺍﻏﺒﻴﻥ ﻓﻲ ﺍﻹﻨﺘﺴﺎﺏ ﺇﻟﻴﻬﺎ ﻭ ﻭﻀﻌﺕ ﻋﺩﺓ
ﺸﺭﻭﻁ ﻟﻼﻨﺘﺴﺎﺏ ﻭ ﻜﺎﻥ ﺇﺤﺩﻯ ﻫﺫﻩ ﺍﻟﺸﺭﻭﻁ ﺒﺄﻥ ﻴﻜﻭﻥ ﻤﺠﻤﻭﻉ ﻋﻼﻤﺎﺕ ﺍﻟﻁﺎﻟﺏ ﻻ ﻴﻘل ﻋﻥ
٧٠ﻓﻲ ﺍﻟﻤﺌﺔ.
ﻭ ﻜﺎﻥ ﺃﻴﻀﺎﹰ ﺇﺤﺩﻯ ﻫﺫﻩ ﺍﻟﺸﺭﻭﻁ ﺍﻟﺘﻲ ﻭ ﻀﻌﺕ ﺍﻟﺠﺎﻤﻌﺔ ﻜﻤﺴﺎﻋﺩﻩ ﻟﻠﻁﺎﻟﺏ ﺒﺤﻴﺙ ﺃﻨﻪ ﺇﺫﺍ ﻜﺎﻥ
ﻤﺠﻤﻭﻉ ﺍﻟﻁﺎﻟﺏ ﺃﻗل ﻤﻥ ٧٠ﻓﻲ ﺍﻟﻤﺌﺔ ﻴﺠﻭﺯ ﻟﻪ ﻓﻲ ﺍﻻﻨﺘﺴﺎﺏ ﺇﻟﻰ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ ﻭ ﺫﻟﻙ ﺒﺸﺭﻁ
ﺇﺫﺍ ﻜﺎﻥ ﻤﺠﻤﻭﻉ ﻋﻼﻤﺎﺕ ﺍﻟﻁﺎﻟﺏ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﺃﻜﺜﺭ ﺃﻭ ﻴﺴﺎﻭﻱ ٨٠ﻓﻲ ﺍﻟﻤﺌﺔ ﻭ
ﻤﺠﻤﻭﻋﺔ ﺍﻟﻌﺎﻡ ﻻ ﻴﻘل ﻋﻥ ٥٠ﻓﻲ ﺍﻟﻤﺌﺔ.
ﺃﻱ ﺇﺫﺍ ﻜﺎﻥ ﻤﺠﻤﻭﻉ ﺍﻟﻁﺎﻟﺏ ﺍﻟﻌﺎﻡ ﺃﻜﺜﺭ ﺃﻭ ﻴﺴﺎﻭﻱ ٥٠ﻓﻲ ﺍﻟﻤﺌﺔ
ﻭ ﻤﺠﻤﻭﻋﺔ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﺃﻜﺜﺭ ﺃﻭ ﻴﺴﺎﻭﻱ ٨٠ﻓﻲ ﺍﻟﻤﺌﺔ
ﺤﻴﻨﺌﺫ ﻴﺠﻭﺯ ﻟﻪ ﺍﻻﻨﺘﺴﺎﺏ ﺇﻟﻰ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ ،ﺃﻤﺎ ﺍﻷﻥ ﺩﻋﻨﺎ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﺃﻥ ﻨﻌﺒﺭ ﻋﻥ ﺫﻟﻙ ﻋﻥ
ﻁﺭﻴﻕ ﻟﻐﺘﻨﺎ :C++
ﺴﻭﻑ ﻨﻜﺘﺏ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺜﻡ ﻨﺸﺭﺡ ﺃﺴﻁﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﻥ ﺸﺎﺀ ﺍﷲ
٥٦
ﻟﻠﺘﺤﻘﻕ ﻤﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ﻓﻲ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻓﺈﺫﺍ ﺃﻅﻬﺭ ﻟﻨﺎ ﺍﻟﻤﺘﺭﺠﻡ ﻫﺫﻩ ﺍﻟﺭﺴﺎﻟﻪ ﺍﻟﺘﻲ
ﺘﻌﻠﻥ ﻋﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ،ﻭ ﺍﻟﺘﻲ ﺘﻜﻭﻥ ﻓﻲ ﺃﺴﻔل ﺒﺭﻨﺎﻤﺞ visual C++
٥٧
ﻴﻅﻬﺭ ﻟﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩ ﻤﺭﺤﻠﺔ ﺍﻟﺘﻨﻔﻴﺫ ﺸﺎﺸﺔ ﺴﻭﺩﺍﺀ ﺘﺨﺒﺭﻙ ﻋﻥ ﺩﺭﺠﺔ ﺍﻟﻁﺎﻟﺏ
ﻭ ﺃﻨﺎ ﻗﻤﺕ ﻓﻲ ﺇﺩﺨﺎل ﺍﻟﺩﺭﺠﺔ ٥٥ﻭ ﺍﻟﺘﻲ ﻫﻲ ﺃﻗل ﻤﻥ ﺍﻟﺩﺭﺠﺔ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻟﺩﺨﻭل ﺍﻟﺠﺎﻤﻌﺔ ﻭ
ﺍﻟﺘﻲ ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺈﺨﺒﺎﺭﻱ ﻓﻲ ﺫﻟﻙ ﻭ ﻟﻜﻥ ﺃﻴﻀﺎﹰ ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺇﻋﻁﺎﺀ ﻓﺭﺼﺔ ﺃﺨﺭﻯ ﻭ
ﻁﻠﺏ ﻤﻨﻲ ﻓﻲ ﺇﺩﺨﺎل ﻋﻼﻤﺘﻲ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ
ﻭ ﺃﻨﺎ ﺃﺩﺨﻠﺕ ﺍﻟﻌﻼﻤﺔ ٨٢ﺤﻴﻨﺌﺫ ﻁﺒﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺭﺴﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺒﺈﺨﺒﺎﺭﻱ ﺒﺄﻨﻪ ﻗﺩ ﺘﻡ ﻗﺒﻭﻟﻲ
ﻓﻲ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ
٥٨
٥٩
Else
{
;cout<<"excuse! your grade less than 70" \n
;cout<<"NO how your grade mathemateic" \n
;cout<<" enter the grade math: \n
;cin>> grmat
)if(grmat >= 80 && grade >= 50
{
;" cout<<" welcome to University
}
ﻓﻨﺤﻥ ﻓﻲ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻗﻤﻨﺎ ﻓﻲ ﺇﺨﺒﺎﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﻨﻪ ﺇﺫﺍ ﻗﺎﻡ ﺍﻟﻁﺎﻟﺏ ﻓﻲ ﺇﺩﺨﺎل ﻋﻼﻤﺔ ﺃﻗل ﻤﻥ
، ٧٠ﻭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺴﻭﻑ ﻴﻌﺭﻑ ﺫﻟﻙ ﺒﻌﺩ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺸﺭﻁ ﺍﻟﺠﻤﻠﺔ ifﻓﺈﺫﺍ ﻜﺎﻨﺕ ﺍﻟﻨﺘﻴﺠﺔ
FALSEﺫﻟﻙ ﻴﻌﻨﻲ ﻻ ﺘﻨﻔﺫ ﺸﻲﺀ ﻀﻤﻥ ﺒﻨﻴﺔ ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ ifﻭ ﺍﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ else
ﻟﺘﻨﻔﺫ ﺍﻷﻭﺍﻤﺭ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺠﺴﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ else
ﻭ ﻨﺤﻥ ﻓﻘﺩ ﻜﺘﺎﺒﻨﺎ ﻀﻤﻥ ﺍﻟﺒﻨﻴﺔ elseﻜﺎﻟﺘﺎﻟﻲ:
ﺃﻭﻻﹰ ﻗﻤﻨﺎ ﻓﻲ ﻁﺒﻊ ﺭﺴﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺘﺨﺒﺭ ﺍﻟﻁﺎﻟﺏ ﺃﻥ ﻤﺠﻤﻭﻉ ﺩﺭﺠﺎﺘﻪ ﺃﻗل ﻤﻥ ٧٠
ﻭ ﻤﻥ ﺜﻡ ﻗﻤﻨﺎ ﻓﻲ ﻁﺭﺡ ﺴﺅﺍل ﻋﻠﻰ ﺍﻟﻁﺎﻟﺏ ﻭ ﻫﻭ ﻜﻡ ﺩﺭﺠﺔ ﻋﻼﻤﺘﻙ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ
ﻭ ﺜﻡ ﻁﻠﺒﻨﺎ ﻤﻨﻪ ﺒﺈﺩﺨﺎل ﺩﺭﺠﺕ ﻋﻼﻤﺘﻪ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ
ﺃﻤﺎ ﺍﻟﺘﻌﻠﻴﻤﺔ ; cin>>grmatﻓﺘﻘﻭﻡ ﺒﺈﺭﺴﺎل ﺩﺭﺠﺔ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ
ﺜﻡ ﺸﺭﻋﻨﺎ ﺒﻌﺩ ﺫﻟﻙ ﻓﻲ ﻜﺘﺎﺒﺔ ﺠﻤﻠﺔ ifﺍﻟﺸﺭﻁﻴﺔ ﻀﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ else
)If(grmat >= 80 && grade >= 50
ﻤﻥ ﺃﺠل ﺍﻟﺘﺤﻘﻕ ﺃﻥ ﺩﺭﺠﺔ ﺍﻟﻁﺎﻟﺏ ﺍﻟﺩﺨﻠﺔ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﻫﻲ ﺘﺴﺎﻭﻱ ﺃﻭ ﺃﻜﺒﺭ ﻤﻥ ٨٠
ﺩﺭﺠﺔ ﻋﻼﻤﺔ ﺍﻟﻁﺎﻟﺏ ﺍﻟﺘﻲ ﺃﺩﺨﻠﻨﺎﻫﺎ ﻤﺴﺒﻘﺎﹰ ﻭ ﺍﻟﺘﻲ ﻤﺎ ﺯﺍﻟﺕ ﻤﺤﻔﻭﻅﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻋﻠﻰ ﻭ
ﺸﻜل ﻤﺘﻐﻴﺭ gradeﺃﻨﻬﺎ ﻫﻲ ﺃﻴﻀﺎ ً ﺘﺴﺎﻭﻱ ﺃﻭ ﺃﻜﺒﺭ ﻤﻥ ٥٠ﻓﻲ ﺍﻟﻤﺌﺔ
٦٠
ﻓﺈﺫﺍ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁﺎﻥ ﻤﻌﺎﹰ ﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ if
ﺃﻱ ﺇﺫﺍ ﻜﺎﻥ ﻨﺘﻴﺠﺔ ﺍﻻﺨﺘﺒﺎﺭ TRUEﺍﻁﺒﻊ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺭﺴﺎﻟﺔ ﺘﺭﺤﻴﺏ ﻟﻠﻁﺎﻟﺏ
ﺃﻤﺎ ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻟﻨﺘﻴﺠﺔ FALSEﻨﻔﺫ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ
Else
{
;"cout<<" excuse? your grade less than 70 \n
;"cout<<"and too your grade mathemateic less than 80.\n
}
ﺃﻱ ﺍﻁﺒﻊ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺘﺨﺒﺭ ﺍﻟﻁﺎﻟﺏ ﺒﺄﻨﻪ ﻻ ﻴﺴﺘﻁﻴﻊ ﺍﻻﻨﺘﺴﺎﺏ ﺇﻟﻰ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ ﻭ ﺫﻟﻙ ﻟﻸﻥ
ﻤﺠﻤﻭﻉ ﻋﻼﻤﺘﻪ ﺍﻟﻌﺎﻤﺔ ﺃﻗل ﻤﻥ ٧٠ﻭ ﻷﻨﻪ ﺃﻴﻀﺎﹰ ﺩﺭﺠﺔ ﻋﻼﻤﺘﻪ ﻓﻲ ﻤﺎﺩﺓ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﺃﻗل ﻤﻥ
، ٨٠ﻭﺴﻭﻑ ﺘﻅﻬﺭ ﺍﻟﻨﺘﻴﺠﺔ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
ﻭ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺃﻴﻀﺎﹰ ﻻ ﺘﻨﻔﺫ ﺇﻻ ﻓﻘﻁ ﻓﻲ ﺤﺎل ﻋﺩﻡ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻭﻁ ﺍﻟﺴﺎﺒﻘﺔ ﺍﻟﺫﻜﺭ
ﺃﻤﺎ ﺍﻟﺴﻁﺭ ﺍﻷﺨﻴﺭ ; return 0ﻭ ﺫﻟﻙ ﻴﻌﻨﻲ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ .
٦١
ﻤﻼﺤﻅﻪ:
ﻤﺎﺫﺍ ﻟﻭ ﻜﺎﻥ ﺩﺭﺠﺔ ﻋﻼﻤﺔ ﺃﺤﺩ ﺍﻟﻁﻼﺏ ٨٥ﺃﻱ ﺍﻟﻤﺠﻤﻭﻉ ﺍﻟﻌﺎﻡ ﻭ ﻗﺎﻡ ﻓﻲ ﺇﺩﺨﺎل ﻫﺫﻩ ﺍﻟﺩﺭﺠﺔ
ﻓﻤﺎﺫﺍ ﺴﻭﻑ ﻴﺤﺼل ﻟﺒﺭﻨﺎﻤﺠﻨﺎ ،ﺩﻋﻨﺎ ﻨﺠﺭﺏ ﻭ ﻨﺭﻯ ﺍﻟﻨﺘﻴﺠﺔ
ﻜﻤﺎ ﺘﻼﺤﻅ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﻋﻨﺩﻤﺎ ﺃﺩﺨﻠﻨﺎ ﺩﺭﺠﺔ ﺃﻜﺒﺭ ﻤﻥ ٧٠ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻭﺭﺍﹰ ﻓﻲ ﻁﺒﻊ ﺭﺴﺎﻟﺔ
ﺘﺭﺤﻴﺏ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻭ ﺘﺠﺎﻫل ﻜل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻜﺘﻭﺒﺔ ﻓﻲ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻟﻤﺎﺫﺍ ؟
ﺤﺎﻭل ﺍﻹﺠﺎﺒﺔ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺴﺅﺍل ﺒﻨﻔﺴﻙ!!!!
٦٢
ﻭ ﻜﻤﺎ ﻗﻠﺕ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﺒﺄﻥ ﻫﺫﺍ ﺍﻟﺭﺴﻡ ﺍﻟﺘﻭﻀﻴﺤﻲ ﻫﻭ ﻓﻘﻁ ﻟﻤﺜﺎﻟﻨﺎ ﻟﻸﻨﻪ ﻴﺼﻌﺏ ﺃﻥ
ﺃﻋﻁﻴﻙ ﻤﺨﻁﻁ ﻟﻠﺠﻤﻠﺔ ifﺍﻟﻤﺘﻌﺩﺩﺓ ﺍﻻﺘﺠﺎﻫﺎﺕ ﻭ ﺫﻟﻙ ﺒﺴﺒﺏ ﺘﺸﻌﺏ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻭ ﻭﺠﻭﺩ
ﺃﻟﻑ ﻁﺭﻴﻘﺔ ﻭ ﻁﺭﻴﻘﺔ ﻟﻜﺘﺎﺒﺔ ifﺍﻟﻤﺘﻌﺩﺩﺓ ﺍﻻﺘﺠﺎﻫﺎﺕ ﻭ ﺫﻟﻙ ﻁﺒﻌﺎﹰ ﻜﻤﺎ ﻗﻠﺕ ﺒﻤﺎ ﻴﻨﺎﺴﺏ
ﻁﺒﻴﻌﺔ ﻭ ﻤﺘﻁﻠﺒﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﺘﻭﺩ ﻜﺘﺎﺒﺘﻪ.
٦٣
٦٤
# include <iostream.h>
main()
{
int grade;
float grmath;
cin>>grade;
if(grade>=70)
{
cout<<"welcome to University \n";
}
else
{
if(grade<50)
{
cout<<"Ecxuse! your drade less than 50!\n";
return 0;
}
cout<<"excuse your grade less than 70!:\n";
cout<<"But how your grade int the mathmatic!:\n";
else
{
cout<<"Ecxuse! your grade less than 70! \n";
cout<<"and ecxuse your grade mathmatic less than 80\n";
}
}
return 0;
}
٦٥
ﻭ ﺒﻌﺩ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ،ﺸﻐل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﺃﺩﺨل ﺍﻟﻌﻼﻤﺔ ٤٥ﺃﻭ ﺃﻱ ﻋﻼﻤﺔ
ﺃﻗل ﻤﻥ ٥٠ﺴﻭﻑ ﻴﺨﺭﺝ ﻟﻙ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ :
ﻭ ﻜﻤﺎ ﺘﻼﺤﻅ ﺒﻌﺩ ﺇﺩﺨﺎل ﺍﻟﻌﻼﻤﺔ ٤٥ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻭﺭﺍ ﻓﻲ ﺇﺒﻼﻍ ﺍﻟﻁﺎﻟﺏ ﺒﻌﺩ ﻗﺒﻭﻟﻪ ﻓﻲ
ﺍﻟﺠﺎﻤﻌﺔ ﻷﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﻌﺎﻡ ﺃﻗل ﻤﻥ ، ٥٠ﻭ ﻤﻥ ﺜﻡ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺩﻭﻥ ﺍﻟﻤﺘﺎﺒﻌﺔ .
ﺸﺭﺡ ﺃﺴﻁﺭ ﺍﻟﺘﻌﺩﻴل:
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻋﻨﺩﻤﺎ ﻗﻤﻨﺎ ﻓﻲ ﺘﻌﺩﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺤﺘﻰ ﺃﺼﺒﺢ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺫﻱ ﺘﺭﺍﻩ ،ﻟﻡ ﻨﻘﻡ ﻓﻲ
ﺇﺨﺘﺭﺍﻉ ﺼﺎﺭﻭﺥ ،ﺒل ﻜل ﻤﺎ ﻓﻲ ﺍﻷﻤﺭ ﻫﻭ ﺃﻥ ﺃﻀﻔﻨﺎ ﺜﻼﺜﺔ ﺃﺴﻁﺭ ﻻ ﻏﻴﺭ
ﻀﻤﻥ ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ elseﺍﻷﻭﻟﻰ ﻭ ﻫﻲ :
)if(grade<50
{
;"cout<<"Ecxuse! your drade less than 50!\n
;return 0
}
ﻗﻤﻨﺎ ﻓﻲ ﻜﺘﺎﺒﺔ ﺍﻟﺠﻤﻠﺔ ifﻟﻠﺘﺤﻘﻕ ﻤﻥ ﺍﻟﻌﻼﻤﺔ ﺍﻟﻌﺎﻤﺔ ﺍﻟﻤﺩﺨﻠﺔ ﺒﺤﻴﺙ ﺇﺫﺍ ﻜﺎﻨﺕ ﺃﻗل ﻤﻥ ٥٠
ﻴﺠﺏ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻭﺭﺍ ﻭ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ;return 0
ﻭ ; return 0ﺘﻌﻨﻲ ﻫﻨﺎ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺸﻜل ﺼﺤﻴﺢ ﺇﺫﺍ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ .
ﻭ ﻫﺫﺍ ﻜل ﺸﻲﺀ ﻓﻘﻁ ﻻ ﻏﻴﺭ!!!!
)ﺍﻟﻠﻬﻡ ﺇﻨﺎ ﻨﻌﻭﺫ ﺒﻙ ﻤﻥ ﻋﻠﻡ ﻻ ﻴﻨﻔﻊ(
٦٦
٦٧
ﻤﺭﺤﻠﺔ ﺍﻟﺘﻨﻔﻴﺫ:
ﻟﻠﺘﺤﻘﻕ ﻤﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ﻓﻲ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺃﻭ ﻴﻤﻜﻥ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ Ctrl+F7
ﻓﺈﺫﺍ ﺃﻅﻬﺭ ﻟﻨﺎ ﺍﻟﻤﺘﺭﺠﻡ ﻫﺫﻩ ﺍﻟﺭﺴﺎﻟﻪ ﺍﻟﺘﻲ ﺘﻌﻠﻥ ﻋﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ،ﻭ ﺍﻟﺘﻲ ﺘﻜﻭﻥ ﻓﻲ
ﺃﺴﻔل ﺒﺭﻨﺎﻤﺞ visual C++
ﻨﻀﻐﻁ ﻋﻠﻰ
٦٨
ﺃﻭ ﺇﺫﺍ ﻗﻤﺕ ﻓﻲ ﺇﺩﺨﺎل cﺒﻌﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺩﺨﻠﺔ ﻓﺈﻨﻪ ﺴﻭﻑ ﻴﻅﻬﺭ ﻟﺩﻴﻙ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻟﺸﻜل
ﺍﻟﺘﺎﻟﻲ:
٦٩
٧٠
ﺃﻱ ﻫل ﻤﻥ ﺴﻡ ﺇﻟﻰ ﺍﻹﻨﺵ ﺃﻡ ﻤﻥ ﺍﻹﻨﺵ ﺇﻟﻰ ﺴﻡ،ﻭ ﻫﺫﺍ ﺍﻟﻤﺘﻐﻴﺭ ﻟﻪ ﻗﻴﻤﺔ ﺍﺒﺘﺩﺍﺌﻴﻪ ﻜﻤﺎ ﺘﻼﺤﻅ
ﺃﻤﺎ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ:
;"Cout<<"enter the length:\n
٧١
ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ
Else
ﻜﻤﺎ ﻗﻠﻨﺎ ﻓﻲ ﺸﺭﻁ ﺍﻟﺠﻤﻠﺔ ifﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺤﺭﻑ ﺍﻟﻤﺩﺨل ﺍﻟﻤﺭﺍﻓﻕ ﻟﻠﻌﺩﺩ ﻫﻭ ﺍﻟﺤﺭﻑ iﻨﻔﺫ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ ifﺃﻤﺎ ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﺤﺭﻑ ﺍﻟﻤﺩﺨل ﻟﻴﺱ ﺍﻟﺤﺭﻑ iﺃﻱ
FALSEﺤﻴﻨﺌﺫ ﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺠﺴﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ else
ﻭ ﻀﻤﻥ ﺠﺴﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ elseﻭ ﻀﻌﻨﺎ ﺠﻤﻠﺔ ifﺍﻟﺘﺎﻟﻴﺔ
) ' If( ch = = ' cm
{
ﻫﺫﻩ ﺠﻤﻠﺔ ifﺍﻟﺸﺭﻁﻴﺔ ﻭ ﻜﺘﺒﻨﺎ ﻀﻤﻥ ﺍﻟﻘﻭﺴﻴﻥ ﺍﻟﺫﻴﻥ ﻴﺤﻭﻴﺎﻥ ﺸﺭﻁ ﺍﻟﺠﻤﻠﺔ ifﺃﻨﻪ ﺇﺫﺍ ﻜﺎﻥ
ﺍﻟﺤﺭﻑ ﺍﻟﻤﺩﺨل ﺍﻟﻤﺭﺍﻓﻕ ﻟﻠﻌﺩﺩ ﺍﻟﻤﺩﺨل ﻤﻥ ﻗﺒل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻫﻭ ﺍﻟﺤﺭﻑ (TRUE) cmﻨﻔﺫ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ if
٧٢
ﺃﻤﺎ ﺍﻟﺴﻁﺭ
; Cm = x
ﻓﻲ ﻫﺫﺍ ﺍﻟﺴﻁﺭ ﺃﺴﻨﺩﻨﺎ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻌﺩﺩﻴﺔ ﺍﻟﺘﻲ ﻗﻤﻨﺎ ﻓﻲ ﺍﺩﺨﻠﻬﺎ ﺇﻟﻰ ﺍﻟﻤﺘﻐﻴﺭ cmﻟﻜﻲ ﻨﺴﺘﺨﺩﻡ ﻫﺫﻩ
ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺴﻨﺩﺓ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻭﻴل ﺇﻟﻰ ﺇﻨﺵ ﻤﻥ ﺨﻼل ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ
; In = x / fac
ﻤﺎ ﻫﻭ ﺇﻻ ﻋﺒﺎﺭﺓ ﻋﻥ ﺇﻅﻬﺎﺭ ﻨﺘﻴﺠﺔ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺭﻴﺎﻀﻴﺔ ﺍﻟﺘﻲ ﻗﻤﻨﺎ ﺒﻬﺎ ،ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻭﻴل،
ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ.
ﻭ ﻫﺫﺍ ﻫﻭ ﺒﺒﺴﺎﻁﺔ ﻜل ﺸﻲﺀ ﻋﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﺍﻟﺫﻱ ﺃﺭﺠﻭﺍ ﻤﻥ ﺍﷲ ﻋﺯ ﻭ ﺠل ﺃﻥ ﺃﻜﻭﻥ ﻗﺩ
ﺍﺴﺘﻁﻌﺕ ﺃﻥ ﺃﻭﺼل ﻟﻙ ﻫﺫﻩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻤﻥ ﺍﻟﻘﻠﺏ ﺇﻟﻰ ﺍﻟﻘﻠﺏ ،ﻭ ﺇﺫﺍ ﻟﻡ ﺘﺴﺘﻁﻴﻊ ﻓﻬﻡ ﺫﻟﻙ ﻓﻬﺫﺍ
٧٣
ﻴﻌﻨﻲ ﺃﻥ ﺍﻟﻌﻴﺏ ﻓﻴﺎ ﺃﻨﺎ ،ﻭﺃﺭﺠﻭﺍ ﺃﻥ ﺘﺩﻋﻭﺍ ﺍﷲ ﺴﺒﺤﺎﻨﻪ ﻭ ﺘﻌﺎﻟﻰ ﺒﺄﻥ ﻴﻔﺘﺢ ﻟﻲ ﻤﻥ ﺃﺒﻭﺍﺏ
ﺭﺤﻤﺘﻪ ﻭ ﻋﻠﻤﻪ .
ﺏ -ﺍﻟﺠﻤﻠﺔ :switch
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﺇﻥ ﺍﻟﺠﻤﻠﺔ switchﻟﻴﺱ ﺠﻤﻠﺔ ﻗﺭﺍﺭ ﺠﺩﻴﺩﺓ ﻭ ﻏﺭﻴﺒﺔ ﻋﻠﻴﻙ ﺇﺫﺍ ﻜﻨﺕ ﻗﺩ ﻗﺭﺃﺕ ﻭ
ﺘﻌﻠﻤﺕ ﻜﻴﻔﻴﺔ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺠﻤﻠﺔ . if
ﻗﺩ ﺘﻘﻭل ﻜﻴﻑ ﺃﻨﻬﺎ ﻏﻴﺭ ﻏﺭﻴﺒﺔ ﻋﻠﻲ ﻭ ﺃﻨﺎ ﻤﺎ ﺯﻟﺕ ﻤﺒﺘﺩﺃ ﻭ ﻟﻡ ﺃﻗﺭﺃ ﺃﺒﺩﺍﹰ ﻋﻥ switchﻭ ﻟﻠﺘﻭ
ﻓﻘﻁ ﺍﻨﺘﻬﻴﺕ ﻤﻥ ﺘﻌﻠﻡ ifﺍﻟﺸﺭﻁﻴﺔ،
ﺃﻗﻭل ﻟﻙ ﻨﻌﻡ ﺃﺨﻲ ﺍﻟﻤﺘﻌﻠﻡ ﺇﻥ ﺠﻤﻠﺔ ﺍﻟﻘﺭﺍﺭ switchﻤﺎ ﻫﻲ ﺇﻻ ﻋﺒﺎﺭﺓ ﻋﻥ ﺠﻤﻠﺔ ﺍﻟﻘﺭﺍﺭ if
ﺍﻟﻤﺘﻌﺩﺩﺓ ﺍﻻﺘﺠﺎﻫﺎﺕ ،ﻭ ﺴﻭﻑ ﺘﻼﺤﻅ ﺫﻟﻙ ﻓﻲ ﻨﻔﺴﻙ ﺒﻌﺩ ﺘﻌﻠﻡ ﻜﻴﻔﻴﺔ ﺍﺴﺘﺨﺩﺍﻡ ، switch
ﻭ ﻟﻜﻥ switchﺘﺨﺘﻠﻑ ﻋﻥ ifﺃﻥ ﺍﻷﻭﻟﻰ ﺃﻜﺜﺭ ﺘﻨﻅﻴﻤﺎﹰ ﻭ ﺘﻨﺴﻴﻘﺎﹰ .
ﺇﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺠﻤﻠﺔ ﺍﺘﺨﺎﺫ ﺍﻟﻘﺭﺍﺭ ifﺃﻤﺭ ﻤﻬﻡ ﻓﻲ ﻜل ﺒﺭﻨﺎﻤﺞ ،ﻭ ﻴﻤﻜﻥ ﺍﻟﻘﻭل ﺃﻨﻪ ﻻ ﻴﺨﻠﻭ
ﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺍﻟﺠﻤﻠﺔ ، ifﻭﻟﻜﻥ ﺃﻻ ﺘﻼﺤﻅ ﻤﻌﻲ ﺃﻨﻪ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻜﺜﻴﺭ
ﻤﻥ ﺍﻻﺨﺘﻴﺎﺭﺍﺕ ﻭ ﺍﺴﺘﺨﺩﻤﻨﺎ ifﺍﻟﻤﺘﻌﺩﺩﺓ ﺍﻻﺘﺠﺎﻫﺎﺕ ﺒﺄﻥ ﺍﻷﻤﺭ ﺒﺩﺃ ﻴﺼﻌﺏ ﻋﻠﻴﻨﺎ ﻭ ﻗﺩ ﻴﻭﻗﻌﻨﺎ
ﻓﻲ ﻜﺜﻴﺭ ﻤﻥ ﺍﻷﺨﻁﺎﺀ ،ﻫﺫﺍ ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺇﻀﺎﻋﺔ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﻭﻗﺕ .
ﻟﺫﻟﻙ ﺃﻭﺠﺩﻭﺍ ﺠﻤﻠﺔ ﺍﻻﺨﺘﻴﺎﺭ swicthﻤﻥ ﺃﺠل ﺘﺠﻨﺏ ﺍﻟﻭﻗﻭﻉ ﻓﻲ ﺍﻷﺨﻁﺎﺀ ﻭ ﺇﻀﺎﻋﺔ ﺍﻟﻭﻗﺕ
ﻓﻲ ﺘﺭﺘﻴﺏ ﺸﺭﻭﻁ ﻭ ﺍﺨﺘﻴﺎﺭﺍﺕ ﻤﺘﺩﺍﺨﻠﺔ ﻭ ﻤﺘﺸﺎﺒﻜﺔ .
ﺘﻌﺭﻴﻑ ﺍﻟﺠﻤﻠﺔ : switch
ﺍﻟﺠﻤﻠﺔ switchﺘﻤﻜﻨﻙ ﻤﻥ ﺍﺨﺘﻴﺎﺭ ﻓﺭﻉ ﻭﺍﺤﺩ ﻓﻘﻁ ﻤﻥ ﻋﺩﺓ ﻓﺭﻭﻉ ،ﻭ ﻜل ﻓﺭﻉ ﻴﻜﺘﺏ ﻀﻤﻥ
ﺘﺴﻤﻴﺔ ﺘﺴﻤﻰ ، caseﻭ ﻤﻥ ﺜﻡ ﺘﻨﻔﻴﺫ ﻫﺫﺍ ﺍﻟﻔﺭﻉ ﺍﻟﺫﻱ ﻗﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺍﺨﺘﻴﺎﺭﻩ) ،ﻭ ﻫﻲ
ﺘﺴﺎﻋﺩﻙ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺇﻨﺸﺎﺀ ﺍﻟﻘﻭﺍﺌﻡ(
ﻭ ﺇﻻ ﺴﻭﻑ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﻔﺭﻉ defaultﺃﻭﺘﻭﻤﺎﺘﻴﻜﻴﺎﹰ ﺒﺸﻜل ﺫﺍﺘﻲ ،ﺇﺫﺍ ﻜﺎﻥ ﺍﺨﺘﻴﺎﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ
ﻻ ﻴﻭﺍﻓﻕ ﺃﻱ ﺘﺴﻤﻴﺔ ﻤﻥ ﺘﺴﻤﻴﺎﺕ . case
٧٤
switch (expression)
{
case constant1:
block of instructions 1
break;
case constant2:
block of instructions 2
break;
.
.
.
default:
default block of instructions
}
٧٥
ﻤﺜﺎل:
ﺘﻌﺎل ﻟﻨﺄﺨﺫ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺍﻟﺫﻱ ﻗﻤﻨﺎ ﻤﻥ ﺨﻼﻟﻪ ﻤﻥ ﺘﺤﻭﻴل ﻤﻥ ﺍﻹﻨﺵ ﺇﻟﻰ ﺴﻡ ﻭ ﺒﺎﻟﻌﻜﺱ ،ﻭﻗﺩ
ﻗﻤﻨﺎ ﻓﻲ ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻥ ﻁﺭﻴﻕ ifﺍﻟﻤﺘﻌﺩﺩﺓ ﺍﻻﺘﺠﺎﻫﺎﺕ
ﻭ ﺤﺘﻰ ﺃﺜﺒﺕ ﻟﻙ ﺃﻥ switchﻻ ﺘﺨﺘﻠﻑ ﻜﺜﻴﺭﺍﹰ ﻋﻥ ifﺍﻟﻤﺘﻌﺩﺩﺓ ﺍﻻﺘﺠﺎﻫﺎﺕ ،ﺴﻭﻑ ﻨﻜﺘﺏ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ﻨﻔﺴﻪ ﻟﻜﻥ ﻋﻥ ﻁﺭﻴﻕ . switch
٧٦
٧٧
ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ:
ﺒﻌﺩ ﻜﺘﺎﺒﺘﻪ ﻭ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺫ ﺴﻭﻑ ﻴﻁﻠﺏ ﻤﻨﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺈﺩﺨﺎل ﻗﻴﻤﺔ ﻋﺩﺩﻴﺔ ﺜﻡ ﺘﺤﺩﻴﺩ ﻨﻭﻋﻬﺎ ﻫل
ﻫﻴﺎ ﺴﻡ ﺃﻭ ﺇﻨﺵ ﻭ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﻭﻀﻊ ﺍﻟﺤﺭﻑ iﺒﻌﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺩﺨﻠﺔ ﻭ ﺍﻟﺫﻱ ﻴﺭﻤﺯ ﺇﻟﻰ
ﻭﺤﺩﺓ ﺍﻟﻘﻴﺎﺱ ﺇﻨﺵ ،ﺃﻭ ﻭﻀﻊ ﺍﻟﺤﺭﻑ cﻭ ﺍﻟﺫﻱ ﻴﺭﻤﺯ ﺇﻟﻰ ﻭﺤﺩﺓ ﺍﻟﻘﻴﺎﺱ ﺴﻡ ﻭﺴﻴﻅﻬﺭ ﻟﺩﻴﻙ
ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
٧٨
) Switch ( ch
{
case 'i':
;in=x
;cm=in*fac
;break
case 'c':
;cm=x
;in=cm/fac
;break
default:
;in=cm=0
;break
}
ﺒﻌﺩ ﺃﻥ ﻗﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺈﺩﺨﺎل ﺍﻟﻘﻴﻤﺔ ﺍﻟﻌﺩﺩﻴﺔ xﻭ ﻨﻭﻉ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﻭ ﺇﻟﻰ ﻋﻥ ﻁﺭﻴﻕ
ﺇﺩﺨﺎل ﻨﻭﻉ ﺍﻟﻤﺘﻐﻴﺭ ، chﻴﺄﺘﻲ ﻋﻤل ﺍﻟﺠﻤﻠﺔ switchﻭ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﻤﻘﺎﺭﻨﺔ ﺍﻟﺤﺭﻑ
ﺍﻟﻤﺩﺨل ﺃﻭﺘﻭﻤﺎﺘﻴﻜﻴﺎﹰ )ﻤﻘﺎﺭﻨﺔ ﺍﻟﻤﺘﻐﻴﺭ ﺍﻟﻤﻭﺠﻭﺩ ﺩﺍﺨل ﺍﻟﻘﻭﺴﻴﻥ ﺍﻟﻠﺫﺍﻥ ﻴﻠﻴﺎﻥ ( switch
ﻤﻊ ﻜل ﻓﺭﻉ ﻤﻥ ﺍﻟﻔﺭﻭﻉ Caseﻭ ﻋﻨﺩ ﺤﺼﻭل ﺍﻟﺘﻁﺎﺒﻕ ﻓﺈﻨﻪ ﺴﻭﻑ ﻴﺒﺩﺃ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ
ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل ﻫﺫﺍ ﺍﻟﻔﺭﻉ caseﻓﻘﻁ ﻻ ﻏﻴﺭ ،ﻭ ﻴﺘﻡ ﺘﺠﺎﻫل ﺠﻤﻴﻊ ﺍﻟﻔﺭﻭﻉ ﺍﻷﺨﺭﻯ
ﺍﻟﻤﻜﺘﻭﺒﺔ ﻀﻤﻥ ﺍﻟﺠﻤﻠﺔ ، switch
٧٩
ﻭ ﻋﻨﺩ ﺍﻹﻨﺘﻬﺎﺀ ﻤﻥ ﺘﻨﻔﻴﺫ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل ﺍﻟﻘﺴﻡ ﺍﻟﺫﻱ ﻗﻤﻨﺎ ﻓﻲ ﺍﺨﺘﻴﺎﺭﻩ ،
ﻴﺄﺘﻲ ﻋﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ breakﻭ ﺍﻟﺘﻲ ﺘﻌﻨﻲ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﻫﺫﺍ ﺍﻟﻔﺭﻉ caseﺒﺸﻜل ﺼﺤﻴﺢ .
ﻭ ﺇﺫﺍ ﻟﻡ ﻴﺘﻭﺍﻓﻕ ﺍﻟﺤﺭﻑ ﺍﻟﻤﺩﺨل ﻤﻥ ﻗﺒل ﺍﻟﻤﺴﺘﺨﺩﻡ ﺃﻱ ﺘﺴﻤﻴﺔ ﻤﻥ ﺘﺴﻤﻴﺎﺕ caseﺤﻴﻨﺌﺫ
ﺴﻭﻑ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل ﺍﻟﻘﺴﻡ . default
ﻭ ﻟﻨﺭﺠﻊ ﺇﻟﻰ ﻤﺜﺎﻟﻨﺎ ﻟﻨﺸﺭﺡ ﻓﻲ ﺍﻟﺘﻔﺼﻴل ﻜﻴﻔﻴﺔ ﻋﻤل ﺒﺭﻨﺎﻤﺠﻨﺎ
ﻓﻲ ﺍﻟﺤﺎﻟﺔ ﺍﻷﻭﻟﻰ ﺒﻌﺩ ﺃﻥ ﻗﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺇﺩﺨﺎل ﺍﻟﻘﻴﻤﺔ ﺍﻟﻌﺩﺩﻴﺔ ﺍﻟﻤﺭﺍﺩ ﺘﺤﻭﻴﻠﻬﺎ ، ٥ﻭﻤﻥ ﺜﻡ
ﻗﺎﻡ ﻓﻲ ﺇﺩﺨﺎل ﺍﻟﺤﺭﻑ iﻟﻠﺘﻌﺭﻴﻑ ﺒﺄﻥ ﺍﻟﺘﺤﻭﻴل ﺍﻟﻤﺭﺍﺩ ﻫﻭ ﻤﻥ ﺍﻹﻨﺵ ﺇﻟﻰ ﺴﻡ
ﻗﺎﻡ switchﺒﻌﺭﺽ ﺍﻟﺤﺭﻑ ﺍﻟﻤﺩﺨل ﻋﻠﻰ ﺠﻤﻴﻊ ﻓﺭﻭﻋﻪ ﺤﺘﻰ ﺘﺘﻡ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻁﺎﺒﻕ،
ﻭ ﺍﻟﺤﺭﻑ ﺍﻟﻤﺩﺨل ﻴﻁﺎﺒﻕ ﺍﻟﻔﺭﻉ ' case 'iﺤﻴﻨﺌﺫ ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺘﻁﺒﻴﻕ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ
ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل ﺍﻟﻔﺭﻉ ،ﺃﻱ ﻗﺎﻡ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺍﻹﻨﺵ ﺇﻟﻰ ﺴﻡ ،ﻭ ﺒﻌﺩ ﺍﻹﻨﺘﻬﺎﺀ ﻤﻥ
ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻭﻴل ﻴﺄﺘﻲ ﻋﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ breakﻟﻠﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺸﻜل ﺼﺤﻴﺢ .
ﻭ ﻟﻭ ﻗﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺇﺩﺨﺎل ﺍﻟﺤﺭﻑ Cﺒﺩﻻﹰ ﻤﻥ ﺍﻟﺤﺭﻑ ، Iﻓﺈﻨﻪ ﺴﻴﺘﻡ ﻨﻔﺱ ﻤﺭﺍﺤل ﺍﻟﻌﻤﻠﻴﺔ
ﺍﻟﺴﺎﺒﻘﺔ ﺒﺎﻟﻀﺒﻁ ﻭ ﻟﻜﻥ ﺴﻭﻑ ﻴﺘﻡ ﺍﻟﺘﺤﻭﻴل ﻤﻥ ﺴﻡ ﺇﻟﻰ ﺍﻹﻨﺵ .
ﻭ ﻻﻜﻥ ﻟﻭ ﻗﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺇﺩﺨﺎل ﺤﺭﻑ ﻻ ﻴﻁﺎﺒﻕ ﺃﻱ ﺘﺴﻤﻴﺔ ﻤﻥ ﺘﺴﻤﻴﺎﺕ ، caseﻓﺈﻨﻪ
ﺴﻭﻑ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل defaultﻭ ﺘﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻟﻘﻴﻤﺔ 0
ﻜﻤﺎ ﻤﻜﺘﻭﺏ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ.
٨٠
ﺘﻭﻀﻴﺢ :
ﻭ ﺤﺘﻰ ﺃﻭﺼل ﻟﻙ ﻜﻴﻔﻴﺔ ﻋﻤل switchﺴﻭﻑ ﺃﻋﻁﻴﻙ ﻤﺜﺎل ﻤﻥ ﺍﻟﺤﻴﺎﺓ ﺤﺘﻰ ﻴﻘﺭﺏ ﻟﻙ
ﻤﻔﻬﻭﻡ ﻋﻤل ﻫﺫﻩ ﺍﻟﺠﻤﻠﺔ
ﻓﺭﻀﺎﹰ ﻟﻭ ﻜﺎﻥ ﻋﻨﺩﻙ ﻋﺩﺩ ﻜﺒﻴﺭ ﻤﻥ ﺍﻟﻌﻤﺎل ،ﻭ ﺃﻨﺕ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺠﻤﻴﻊ ﻫﺅﻻﺀ ﺍﻟﻌﻤﺎل
ﻭﻻﻜﻥ ﻟﻴﺱ ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ ﻭ ﻓﻲ ﺃﻥ ﻭﺍﺤﺩ ،ﻓﺄﻨﺕ ﻤﺜﻼﹰ ﻟﻴﺱ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﻋﻤﺎل ﺍﻟﺒﻨﺎﺀ ﻭ
ﻋﻤﺎل ﺍﻟﻨﻅﺎﻓﺔ ﻓﻲ ﺃﻥ ﻭﺍﺤﺩ ،ﻓﺤﺘﻰ ﻴﻜﻭﻥ ﻋﻤﻠﻙ ﺃﻜﺜﺭ ﺘﻨﻅﻴﻤﺎﹰ ﻭ ﺃﻭﻓﺭ ﻤﺎﺩﻴﺎﹰ ﺃﻓﻀل ﻁﺭﻴﻘﺔ ﻫﻲ
ﺘﻘﺴﻴﻡ ﺍﻟﻌﻤﺎل ﺇﻟﻰ ﻤﺠﻤﻭﻋﺎﺕ ﻜل ﻭﺍﺤﺩ ﺤﺴﺏ ﺍﻟﻤﻬﻨﺔ ﻭ ﻋﻤﻠﻪ ،ﻓﻤﺜﻼﹰ ﺘﻘﺴﻡ ﻋﻤﺎﻟﻙ ﺇﻟﻰ
ﻤﺠﻤﻭﻋﺔ ﻋﻤﺎل ﻟﻠﺒﻨﺎﺀ ﻭ ﻤﺠﻤﻭﻋﺔ ﻋﻤﺎل ﻟﻠﻨﻅﺎﻓﺔ ﻭ ......ﺍﻟﺦ
ﻭ ﻋﻨﺩ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﻋﻤل ﻤﻌﻴﻥ ،ﻓﻤﺎ ﻋﻠﻴﻙ ﻫﻭ ﺇﻻ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻟﻠﻌﻤل ﺍﻟﺫﻱ
ﺘﺭﻴﺩﻩ ،ﻓﻬﺫﺍ ﺴﻭﻑ ﻴﺠﻌل ﻋﻤﻠﻙ ﺃﻜﺜﺭ ﺘﻨﻅﻴﻤﺎﹰ ﻭ ﺃﻜﺜﺭ ﺘﻭﻓﻴﺭﺍﹰ ﻟﻠﻭﻗﺕ ﻭ ﺍﻟﻤﺎل،
ﻭ ﻜﺫﻟﻙ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ switchﻓﺄﻨﺕ ﺘﻘﺴﻡ ﺒﺭﻨﺎﻤﺠﻙ ﺇﻟﻰ ﻤﺠﻤﻭﻋﺎﺕ ﺜﻡ ﺘﻘﻭﻡ ﻓﻲ ﺍﺴﺘﺩﻋﺎﺀ
ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻲ ﺘﺤﺩﺩﻫﺎ ﺃﻨﺕ ﻭ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻟﻙ ،ﻤﻤﺎ ﻴﺠﻌل ﺒﺭﺍﻤﺠﻙ ﺃﻗل ﺍﺴﺘﺨﺩﺍﻤﺎﹰ ﻟﻠﺫﺍﻜﺭﺓ ﻤﻥ
ﻏﻴﺭﻫﺎ ،ﻷﻨﻙ ﺘﺴﺘﺩﻋﻲ ﺠﺯﺀ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻜل ،ﻭ ﻫﺫﺍ ﺍﻟﺠﺯﺀ ﺍﻟﻤﺴﺘﺩﻋﻰ ﻫﻭ ﻓﻘﻁ
ﺴﻭﻯ ﻴﺸﻐل ﻤﻜﺎﻥ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻓﻘﻁ ،ﻭ ﻟﻴﺱ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻜﻠﻪ
ﻭ ﻫﺫﺍ ﻤﺨﻁﻁ ﺒﻴﺎﻨﻲ ﻴﻭﻀﺢ ﻜﻴﻔﻴﺔ ﻋﻤل switchﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ ،ﻭ ﻫﺫﺍ ﺍﻟﻤﺨﻁﻁ ﻫﻭ
ﻓﻘﻁ ﻟﻠﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻓﻘﻁ.
٨١
ﻤﻼﺤﻅﺔ:
ﺍﻟﺠﻤﻠﺔ switchﺘﺨﺘﻠﻑ ﻋﻥ ifﻭ ﺤﺘﻰ ﻋﻥ ﻏﻴﺭﻫﺎ ﻤﻥ ﺍﻟﺠﻤل ﺍﻷﺨﺭﻯ ﻓﻲ ﺃﻥ switchﻻ
ﺘﺴﺘﺨﺩﻡ ﺍﻷﻗﻭﺍﺱ ﺍﻟﻜﺒﻴﺭﺓ ﻤﻥ ﺃﺠل ﺍﻹﺤﺎﻁﺔ ﻓﻲ ﻜل ﻓﺭﻉ caseﻤﻥ ﻓﺭﻭﻋﻬﺎ ﻋﻠﻰ ﺍﻟﻌﻜﺱ ﻤﻥ
ﻏﻴﺭﻫﺎ.
٨٢
# include <iostream.h>
int main()
{
float number1,number2,result;
char Operator;
cout<<" *** this is program calculeatar in C++ *** \n";
cout<<"enter the first number:\n";
cin>>number1;
cout<<"enter the Operator:\n";
cin>>Operator;
cout<<"enter the tow number:\n";
cin>>number2;
switch(Operator)
{
case ' + ' :
result= number1+number2;
break ;
case ' - ' :
result= number1-number2;
break ;
case ' * ' :
result= number1*number2;
break ;
case ' / ' :
result= number1/number2;
break ;
default :
cout<<" bad Operator? \n";
}
cout<<"\n"<<number1<<" "<<Operator<<"
"<<number2<<" = "<<result<<endl;
return 0;
}
٨٣
٨٤
٨٥
ﻭﻅﻴﻔﻴﺔ ﻤﻨﺯﻟﻴﺔ :ﺃﻀﻑ ﺒﻌﺽ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﺍﻷﺨﺭﻯ ﻤﺜل ﻤﺭﺒﻊ ﺍﻟﻌﺩﺩ ،ﻭ ﺍﻟﺠﺫﺭ ،ﻭ
ﺤﺎﻭل ﺃﻥ ﺘﻌﻤل ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﻋﻠﻰ ﺜﻼﺜﺔ ﺃﻋﺩﺍﺩ .
٨٦
ﻭ ﺃﻨﺎ ﻗﻠﺕ ﻓﺭﻀﺎﹰ ﻭ ﻟﻜﻨﻪ ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻴﻭﺠﺩ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻜﻠﻴﺎﺕ ﺩﺍﺨل ﺍﻟﺠﺎﻤﻌﺔ ﺍﻟﻭﺍﺤﺩﺓ ﻭ ﻟﻜﻨﻲ
ﺇﺨﺘﺭﺕ ﻫﻨﺎ ﻜﻠﻴﺘﺎﻥ ﻓﻘﻁ ﻭﺫﻟﻙ ﻤﻥ ﺃﺠل ﺍﻟﺘﻘﻠﻴل ﻤﻥ ﻋﺩﺩ ﺃﺴﻁﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﻤﻥ ﺃﺠل ﻓﻬﻡ
ﺍﻟﻜﻭﺩ ﺒﺴﻬﻭﻟﺔ .
ﻭ ﺴﻭﻑ ﻨﺤﺘﺎﺝ ﻓﻲ ﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﺍﻟﻤﻨﺎﺴﺏ ﻟﻠﺒﺭﻨﺎﻤﺞ ﺇﻟﻰ ﻗﺎﺌﻤﺔ ﺘﻭﻓﺭ ﻟﻨﺎ ﺍﻻﺨﺘﻴﺎﺭ ﺇﻟﻰ ﺃﻱ ﻜﻠﻴﺔ
ﺃﺭﻴﺩ ﺍﻷﻨﺘﺴﺎﺏ ،ﻭ ﻤﻥ ﺜﻡ ﺃﺩﺨل ﺇﻟﻰ ﻫﺫﻩ ﺍﻟﻜﻠﻴﺔ ﻤﻥ ﺃﺠل ﺘﻌﺒﺌﺔ ﺍﻟﻁﻠﺏ ﺇﻥ ﻜﺎﻥ ﻴﺤﻕ ﻟﻲ
ﺍﻻﻨﺘﺴﺎﺏ ﺇﻟﻰ ﻫﺫﻩ ﺍﻟﻜﻠﻴﺔ ﺤﺴﺏ ﺸﺭﻭﻁ ﺍﻻﻨﺘﺴﺎﺏ .
ﻭ ﺒﺎﻟﻁﺒﻊ ﻨﺤﻥ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺠﻤﻠﺔ switchﺍﻟﺘﻲ ﺘﻭﻓﺭ ﻟﻨﺎ ﺼﻨﻊ ﺍﻟﻘﻭﺍﺌﻡ ،ﻭ ﺴﻭﻑ
ﻨﻀﻊ ﻜل ﻜﻠﻴﺔ ﻋﻠﻰ ﺸﻜل caseﻀﻤﻥ ﺍﻟﺒﻨﻴﺔ ، switchﻭﺩﺍﺨل ﺍﻟﻔﺭﻉ caseﻨﻜﺘﺏ ﺸﺭﻭﻁ
ﺍﻻﻨﺘﺴﺎﺏ ﺇﻟﻰ ﻫﺫﻩ ﺍﻟﻜﻠﻴﺔ ،ﻟﻥ ﺃﻁﻴل ﻋﻠﻴﻙ ﻓﻲ ﺍﻟﺸﺭﺡ ﻫﺫﺍ ﻫﻭ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩ ﻜﺘﺎﺒﺘﻪ
ﻭﺴﻭﻑ ﺃﻗﻭﻡ ﻓﻲ ﺸﺭﺡ ﻟﻸﺴﻁﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺠﺩﻴﺩﺓ ﺒﻌﺩ ﻤﺭﺤﻠﺔ ﺍﻟﺘﻨﻔﻴﺫ .
٨٧
if(grade>=65)
{
cout<<"welcome to University \n";
}
else
{
if(grade<50)
{
cout<<"Ecxuse! your grade less than 50!\n";
return 0;
}
cout<<"excuse your grade less than 70!:\n";
cout<<"But how your grade int the mathmatic!:\n";
cout<<"enter the grade mathmatic:\n";
cin>>grmath;
else
{
cout<<"Ecxuse! your grade less than 70! \n";
cout<<"and ecxuse your grade mathmatic less than 80\n";
}
}
break;
٨٨
case 2:
cout<<"\t\t\t **********************\n";
cout<<"\t\t\t *** Faculty machin ***\n";
cout<<"\t\t\t **********************\n";
int grade_machine;
float grphiysic_machine;
if(grade_machine>=65)
{
cout<<"welcome to University \n";
}
else
{
if(grade_machine<50)
{
cout<<"Ecxuse! your grade less than 50!\n";
return 0;
}
cout<<"excuse your grade less than 65!:\n";
cout<<"But how your grade int the phiysic!:\n";
else
{
cout<<"Ecxuse! your grade less than 65! \n";
cout<<"and ecxuse your grade grphiysic less than 70\n";
}
}
break;
case 3:
return 0;
break;
default:
cout<<"erorr? enter agin\n\n";
goto start_menu;
break;
}
return 0;
} ٨٩
٩٠
; int n
ﻓﻲ ﻫﺫﺍ ﺍﻟﺴﻁﺭ ﻗﻤﻨﺎ ﻓﻲ ﺇﻋﻼﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭ nﻭ ﺍﻟﺫﻱ ﻴﺭﻤﺯ ﺇﻟﻰ ﺤﺎﻟﺔ ﺍﻹﺩﺨﺎل ﻤﻥ
ﻋﻨﺎﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻟﺩﻴﻨﺎ ﻭ ﻫﻭ ﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻷﻋﺩﺍﺩ ﺍﻟﻁﺒﻴﻌﻴﺔ ، intﻷﻨﻪ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ
ﻗﻤﻨﺎ ﻓﻲ ﺘﺴﻤﻴﺔ ﺍﻟﻔﺭﻭﻉ caseﺒﺄﻋﺩﺍﺩ ﻁﺒﻴﻌﻴﺔ ١ﻭ ٢ﻭ . ٣
٩١
٩٢
ﻓﻬﻭ ﻴﻌﺭﺽ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺭﺴﺎﻟﺔ ﻓﻲ ﺤﺎﻟﺔ ﺇﺩﺨﺎل ﺨﺎﻁﺊ ﺘﺨﺒﺭ ﺍﻟﻁﺎﻟﺏ ﺒﺎﻟﺨﻁﺄ ﻭ ﺘﻌﻠﻨﻪ
ﺒﺈﺩﺨﺎل ﻗﻴﻤﺔ ﺠﺩﻴﺩﺓ .
ﻤﻼﺤﻅﺔ :
ﻻ ﻴﻨﺼﺢ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺠﻤﻠﺔ gotoﻓﻲ ﺃﻜﻭﺍﺩ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻜﺒﻴﺭﺓ ﻭ ﻟﻸﻜﺜﺭ ﻤﻥ ﻤﺭﺓ ،ﻭ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ
ﻓﻲ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻜﺜﺭﺓ ﻴﺅﺩﻱ ﺇﻟﻰ ﺒﻁﺊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﺜﻨﺎﺀ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻤﻥ ﻗﺒل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭ ﺇﻟﻰ
ﻅﻬﻭﺭ ﺒﻌﺽ ﺍﻷﺨﻁﺎﺀ ﺃﺤﻴﺎﻨﺎﹰ ،ﻭ ﻴﺤﺭﺹ ﻤﻌﻅﻡ ﺍﻟﻤﺒﺭﻤﺠﻭﻥ ﻋﻠﻰ ﻋﺩﻡ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﺠﻤﻠﺔ
ﻭ ﺫﻟﻙ ﻤﻥ ﺃﺠل ﺃﻥ ﺘﻜﻭﻥ ﺒﺭﺍﻤﺠﻬﻡ ﺫﺍﺘﻴﺔ ﺃﻱ ﺘﻌﺘﻤﺩ ﻋﻠﻰ ﻨﻔﺴﻬﺎ ﻓﻲ ﻜل ﺸﻲﺀ ﻤﻥ ﺩﻭﻥ ﺘﺩﺨل
ﺍﻟﻤﺒﺭﻤﺞ ﻟﻜﻲ ﻴﻭﺠﻬﺎ ﻭ ﻴﻘﻭل ﻟﻠﺒﺭﻨﺎﻤﺞ ﺇﺫﻫﺏ ﺇﻟﻰ ﻫﻨﺎ ﺃﻭ ﺇﻟﻰ ﻫﻨﺎﻙ.
٩٣
٩٤
ﻭ ﺤﺘﻰ ﻻ ﺃﻁﻴل ﻋﻠﻴﻜﻡ ﻓﻲ ﺍﻟﻜﻼﻡ ﺍﻟﻨﻅﺭﻱ ﻟﻨﺄﺨﺫ ﻤﺜﺎل ﻓﻭﺭﺍﹰ ﻟﻜﻲ ﺘﺴﺘﻭﻋﺏ ﻤﻔﻬﻭﻡ ﻜﻴﻔﻴﺔ
ﻋﻤل ﻫﺫﻩ ﺍﻟﺠﻤﻠﺔ .
;return 0
}
٩٥
ﻭ ﻁﺒﻌﺎﹰ ﺃﻨﺕ ﺘﻼﺤﻅ ﺍﻟﻔﺭﻕ ﺍﻟﻜﺒﻴﺭ ﺒﻴﻥ ﺍﻟﻁﺭﻴﻘﺘﻴﻥ ﻤﻥ ﺤﻴﺙ ﺍﻟﺘﻨﻅﻴﻡ ﻭ ﺍﺨﺘﺼﺎﺭ ﻋﺩﺩ ﺃﺴﻁﺭ
ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭ ﻨﺤﻥ ﻓﻲ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻗﻤﻨﺎ ﻓﻲ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻴﻁﺒﻊ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺠﺩﻭل ﺍﻟﻀﺭﺏ
ﻤﻥ ١ﺇﻟﻰ ١٠ﻓﻘﻁ ،ﺘﺨﻴل ﻤﺜﻼﹰ ﻟﻭ ﻁﻠﺏ ﻤﻨﺎ ﺒﺭﻨﺎﻤﺞ ﻴﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺠﺩﻭل ﺍﻟﻀﺭﺏ ﻤﻥ
١ﺇﻟﻰ ، ١٠٠٠ﻓﻜﻡ ﺴﻴﺘﻁﻠﺏ ﻤﻨﻙ ﻤﻥ ﺍﻟﻭﻗﺕ ﻭ ﺍﻟﻌﺏﺀ ﺍﻟﻜﺒﻴﺭﺍﻥ ﻤﻥ ﺃﺠل ﻜﺘﺎﺒﺔ ﻜﻭﺩ ﻫﺫﺍ
ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭ ﻟﻜﻥ ﻤﻊ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ forﻓﺄﻨﺕ ﺒﺤﺎﺠﻪ ﻓﻘﻁ ﺇﻟﻰ ﻨﻔﺱ ﺃﺴﻁﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ
،ﻓﻘﻁ ﻗﻡ ﺒﺘﻐﻴﺭ ﺍﻟﻘﻴﻡ ﺍﻟﺘﺎﻟﻴﺔ :
-١ﻗﻴﻤﺔ ﻤﺘﺤﻭل ﺍﻟﺘﺤﻜﻡ ﺍﻻﺒﺘﺩﺍﺌﻲ .
-٢ﻗﻴﻤﺔ ﺸﺭﻁ ﺍﺴﺘﻤﺭﺍﺭ ﺍﻟﺘﻜﺭﺍﺭ .
٩٦
ﻓﻬﻲ ﺘﻤﺎﻤﺎﹰ ﻟﻬﺎ ﻨﻔﺱ ﻤﺒﺩﺃ ﻋﻤل ﻭ ﺘﻨﻅﻴﻡ forﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺘﻡ ﺸﺭﺤﻬﺎ ﻗﺒل ﻗﻠﻴل ﻭ ﻻ ﻴﻭﺠﺩ ﺃﻱ
ﺍﺨﺘﻼﻑ ﺴﻭﻯ ﻓﻲ ﺍﺴﻡ ﺍﻟﻤﺘﻐﻴﺭ yﻓﻘﻁ ﻻ ﻏﻴﺭ .
ﻭ ﺍﻷﻗﻭﺍﺱ ﺍﻟﻜﺒﻴﺭﺓ} { ﺒﻌﺩ ﺍﻟﺠﻤﻠﺔ forﺍﻷﻭﻟﻰ ﻭ ﺍﻟﺜﺎﻨﻴﺔ ﻫﻲ ﻟﺘﺤﺼﺭ ﻤﺎ ﻴﺠﺏ ﺘﻨﻔﻴﺫﻩ ﻤﺎ ﺯﺍل
ﺸﺭﻁ ﺍﻻﺴﺘﻤﺭﺍﺭ ﺒﺎﻟﺘﻜﺭﺍﺭ ﻤﺤﻘﻕ ،ﻭ ﻫﻨﺎ ﻫﻭ ﺇﺨﺭﺍﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻗﻴﻤﺔ zﻭ ﺍﻟﺘﻲ ﻫﻲ ﻜﻤﺎ
ﻤﻭﻀﺤﺔ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻤﻠﻬﺎ ﻫﻭ ﺇﻴﺠﺎﺩ ﻨﺎﺘﺞ ﻀﺭﺏ ﺍﻟﻌﺩﺩ ﺍﻷﻭل ﻤﻥ ﺍﻟﺠﻤﻠﺔ forﺍﻷﻭﻟﻰ
ﻤﻀﺭﻭﺏ ﻓﻲ ﺍﻟﻌﺩﺩ ﺍﻷﻭل ﻤﻥ ﺍﻟﺠﻤﻠﺔ forﺍﻟﺜﺎﻨﻴﺔ ﻭﻫﻜﺫﺍ ﺇﻟﻰ ﺍﻟﻌﺩﺩ ١٠
;z=x*y
; cout<< x << " * " << y << " = " << z << endl
٩٧
ﻭ ﺤﺘﻰ ﻴﺘﻡ ﻟﻙ ﻤﻔﻬﻭﻡ ﻋﻤل ﺍﻟﺠﻤﻠﺔ forﺍﻟﺘﻜﺭﺍﺭﻴﺔ ﺴﻭﻑ ﺃﻗﻭﻡ ﻓﻲ ﺸﺭﺡ ﻤﺒﺩﺃ ﻋﻤﻠﻬﺎ ﻤﻥ ﺨﻼل
ﻤﺨﻁﻁ ﺘﻭﻀﻴﺤﻲ ﻟﻠﺒﻨﻴﺔ for
X=1
true
false
ﺘﻤﻌﻥ ﺠﻴﺩﺍﹰ ﻓﻲ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺼﻨﺩﻭﻗﻲ ﻟﻠﺠﻤﻠﺔ forﻭ ﻻﺤﻅ ﻜﻴﻑ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺠﻤﻠﺔ
ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺠﻤﻠﺔ forﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ :
ﻋﻨﺩﻤﺎ ﻴﺒﺩﺃ ﺍﻟﻤﺘﺭﺠﻡ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺠﻤﻠﺔ forﻴﺒﺩﺃ ﻓﻲ ﻤﺘﺤﻭل ﺍﻟﺘﺤﻜﻡ ﺍﻻﺒﺘﺩﺍﺌﻲ ﺤﻴﺙ ﺃﻥ ﻤﺘﺤﻭل
ﺍﻟﺘﺤﻜﻡ ﺍﻻﺒﺘﺩﺍﺌﻲ ﻴﺄﺨﺫ ﻗﻴﻤﺘﻪ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﻭ ﺍﻟﺘﻲ ﺘﺴﺎﻭﻱ ﻫﻨﺎ ﺍﻟﻌﺩﺩ ، x = ١
ﺒﻌﺩ ﺃﻥ ﻴﺘﻡ ﺇﺴﻨﺎﺩ ﺍﻟﻌﺩﺩ ١ﺇﻟﻰ ﻤﺘﺤﻭل ﺍﻟﺘﺤﻜﻡ ﺍﻻﺒﺘﺩﺍﺌﻲ ،ﻴﺘﻡ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺼﺤﺔ ﺸﺭﻁ
ﺍﻻﺴﺘﻤﺭﺍﺭ ﺒﺎﻟﺘﻜﺭﺍﺭ
ﻭ ﺍﻟﺫﻱ ﻫﻭ ﻫﻨﺎ ﺃﺼﻐﺭ ﺃﻭ ﻴﺴﺎﻭﻱ ﺍﻟﻌﺩﺩ ، x<=١٠ﻭ ﺍﻟﻌﺩﺩ ١ﻴﺩﺨل ﻀﻤﻥ ﺍﻟﻤﺠﺎل ﺃﺼﻐﺭ
ﺃﻭ ﻴﺴﺎﻭﻱ ﻤﻥ ﺍﻟﻌﺩﺩ ١٠ﺃﻱ ﺃﻥ ﺍﻟﺸﺭﻁ ﻤﺤﻘﻘﺎﹰ ، true
٩٨
ﻭ ﺒﻌﺩ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺼﺤﺔ ﺸﺭﻁ ﺍﻻﺴﺘﻤﺭﺍﺭ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻷﻭﺍﻤﺭ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨل
ﺍﻷﻗﻭﺍﺱ ﺍﻟﻜﺒﻴﺭﺓ ﻟﻠﺠﻤﻠﺔ forﻤﺭﺓ ﻭﺍﺤﺩﺓ ﻓﻘﻁ ،ﻭ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻓﺈﻨﻪ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﻀﺭﺏ ﺍﻟﻌﺩﺩ ١
ﻤﻥ ﺍﻟﺠﻤﻠﺔ forﺍﻷﻭﻟﻰ ﻭ ﺍﻟﻌﺩﺩ ١ﻤﻥ ﺍﻟﺠﻤﻠﺔ forﺍﻟﺜﺎﻨﻴﺔ ﻭﺇﺨﺭﺍﺝ ﺍﻟﻨﺎﺘﺞ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ .
ﻭ ﺒﻌﺩ ﺃﻥ ﻴﺘﻡ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ، forﺒﻌﺩﻫﺎ ﻴﺘﻡ ﺯﻴﺎﺩﺓ ﻗﻴﻤﺔ
ﺍﻟﻤﺘﺤﻭل ﺍﻻﺒﺘﺩﺍﺌﻲ xﺒﻭﺍﺤﺩ ﻭ ﺫﻟﻙ ﻤﻥ ﺨﻼل ﺍﻟﺘﻌﻠﻴﻤﺔ ، x++ﺃﻱ ﺃﻥ ﻗﻴﻤﺔ xﺘﺼﺒﺢ ﺘﺴﺎﻭﻱ
ﺍﻟﻌﺩﺩ ، ٢ﻭ ﺒﻌﺩ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ﺘﺒﺩﺃ ﺍﻟﺠﻤﻠﺔ forﻤﻥ ﺠﺩﻴﺩ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺼﺤﺔ ﺸﺭﻁ
ﺍﻻﺴﺘﻤﺭﺍﺭ ﺒﺎﻟﺘﻜﺭﺍﺭ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺠﺩﻴﺩﺓ ﻟﻠﻤﺘﺤﻭل . x
ﻭ ﺍﻟﻌﺩﺩ ٢ﻴﺩﺨل ﻀﻤﻥ ﺍﻟﻤﺠﺎل ﺃﺼﻐﺭ ﺃﻭ ﻴﺴﺎﻭﻱ ، ١٠ﺃﻱ ﺃﻥ ﺸﺭﻁ ﺍﻻﺴﺘﻤﺭﺍﺭ
ﻤﺤﻘﻕ ...... trueﻭﻫﻜﺫﺍ ﻴﺘﻡ ﺯﻴﺎﺩﺓ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل ﺒﺎﻟﺘﻜﺭﺍﺭ xﻜل ﻤﺭﺓ ﺒﻭﺍﺤﺩ ﻭ ﻤﻥ ﺜﻡ
ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺼﺤﺔ ﺍﻻﺴﺘﻤﺭﺍﺭ ﺒﺎﻟﺘﻜﺭﺍﺭ ﻭ ﻤﻥ ﺜﻡ ﺍﻟﺘﻨﻔﻴﺫ ﺤﺘﻰ ﺘﺼﺒﺢ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل ﺘﺴﺎﻭﻱ
ﺍﻟﻘﻴﻤﺔ ١١ﻤﻤﺎ ﻴﺴﺒﺏ ﻓﻲ ﻋﺩﻡ ﺼﺤﺔ ﺸﺭﻁ ﺍﻻﺴﺘﻤﺭﺍﺭ ﺒﺎﻟﺘﻜﺭﺍﺭ falseﻤﻤﺎ ﻴﺅﺩﻱ ﺇﻟﻰ ﺇﻨﻬﺎﺀ
ﻋﻤل for
ﻟﻴﺘﺎﺒﻊ ﺒﻌﺩﻫﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭ ﻓﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ; return 0ﺃﻱ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ .
ﻭ ﺃﺭﺠﻭﺍ ﻤﻥ ﺍﷲ ﻋﺯ ﻭ ﺠل ﺃﻥ ﺃﻜﻭﻥ ﻗﺩ ﺃﻭﺼﻠﺕ ﻟﻙ ﻤﻔﻬﻭﻡ ﻋﻤل ﺍﻟﺠﻤﻠﺔ for
ﺇﻥ ﻜﻨﺕ ﻗﺩ ﺃﺤﺴﻨﺕ ﻓﻲ ﺍﻟﺸﺭﺡ ﻓﻬﺫﺍ ﻤﻥ ﻓﻀل ﺍﷲ ﻭ ﷲ ﺍﻟﺤﻤﺩ ،ﻭ ﺇﻥ ﻟﻡ ﺃﻭﻓﻕ ﻓﻬﺫﺍ ﻤﻥ ﻅﻠﻤﻲ
ﻟﻨﻔﺴﻲ ،ﻨﺴﺄل ﺍﷲ ﺍﻟﻬﺩﺍﻴﺔ ﻭ ﺍﻟﺭﺤﻤﺔ ،ﻭ ﻻ ﺘﻨﺴﻭﻨﻲ ﻤﻥ ﺩﻋﻭﺓ ﺃﺥ ﻓﻲ ﺍﷲ .
٩٩
ﺘﻨﺒﻴﻪ :
ﻤﻥ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺘﻲ ﻴﻘﻊ ﺒﻬﺎ ﺒﻌﺽ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻫﻲ ﻭﻀﻊ ﻓﺎﺼﻠﺔ ﻤﻨﻘﻭﻁﺔ ﺒﻌﺩ ﺃﻗﻭﺍﺱ
ﺍﻟﺠﻤﻠﺔ for
ﻭ ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﺇﻥ ﻭﻀﻊ ﺍﻟﻔﺎﺼﻠﺔ ﺍﻟﻤﻨﻘﻭﻁﺔ ﺒﻌﺩ ﺃﻗﻭﺍﺱ forﻻ ﻴﻅﻬﺭ ﺃﻱ ﺨﻁﺄ ﺃﺜﻨﺎﺀ ﻤﺭﺤﻠﺔ
ﺘﺭﺠﻤﺔ ﺍﻟﻜﻭﻤﺒﻠﻴﺎﺘﺭ ﻟﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﺃﺜﻨﺎﺀ ﻤﺭﺤﻠﺔ ﺍﻟﺘﺭﺠﻤﺔ( ،ﻭﻟﻜﻥ ﺍﻟﺨﻁﺄ ﻴﻜﻤﻥ ﻓﻲ ﺃﻥ ﺠﺴﻡ
ﺍﻟﺠﻤﻠﺔ forﻴﺼﺒﺢ ﻤﺅﻟﻔﺎﹰ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﻓﺎﺭﻏﺔ ،ﺃﻱ ﻭ ﻜﺄﻥ ﺍﻟﺠﻤﻠﺔ forﻏﻴﺭ ﻤﻭﺠﻭﺩﺓ ،
ﺠﺭﺏ ﻓﻲ ﻨﻔﺴﻙ ﻭ ﻀﻊ ﺒﻌﺩ ﺍﻟﺘﻌﻠﻴﻤﺔ forﻓﺎﺼﻠﺔ ﻤﻨﻘﻭﻁﺔ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻭ ﻻﺤﻅ ﻤﺎﺫﺍ
ﺴﻭﻑ ﻴﺨﺭﺝ ﻟﻙ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ .
ﻤﻼﺤﻅﺔ :
ﺇﻥ ﻜل ﺘﻌﺒﻴﺭ ﻤﻥ ﺍﻟﺘﻌﺎﺒﻴﺭ ﺍﻟﺜﻼﺜﺔ ﻓﻲ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ forﻫﻲ ﺘﻌﺎﺒﻴﺭ ﺍﺨﺘﻴﺎﺭﻴﺔ ﻭ ﻟﻴﺴﺕ
ﺇﺠﺒﺎﺭﻴﺔ ،
ﺃﻱ ﻭﻀﻊ ﺍﺴﻡ ﺍﻟﺘﻌﺒﻴﺭ ﺍﻷﻭل ﻓﻘﻁ ﻤﻥ ﺩﻭﻥ ﻗﻴﻤﺔ ﺍﺒﺘﺩﺍﺌﻴﺔ ﻫﻭ ﺍﺨﺘﻴﺎﺭﻱ ،
ﻭ ﻟﻜﻥ ﻟﻭ ﻭﻀﻌﺕ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺍﺴﻡ ﺍﻟﻤﺘﺤﻭل ﺒﺎﻟﺘﻜﺭﺍﺭ ﺒﺩﻭﻥ ﻗﻴﻤﺔ ﺍﺒﺘﺩﺍﺌﻴﺔ ﺴﻴﻨﺘﺞ ﻟﺩﻴﻨﺎ
ﺤﻠﻘﺔ ﻏﻴﺭ ﻤﻨﺘﻬﻴﺔ ﻭﺫﻟﻙ ﻟﻸﻥ ﺍﻟﻤﺘﺭﺠﻡ ﻴﻔﺘﺭﺽ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺭ . true
ﻭ ﻟﻭ ﻗﻤﻨﺎ ﻓﻲ ﻜﺘﺎﺒﺔ ﺍﻟﺘﻌﺒﻴﺭ ﺍﻟﺜﺎﻨﻲ ﻤﻥ ﺩﻭﻥ ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻨﻬﺎﺌﻴﺔ ﻟﻤﺘﺤﻭل ﺍﻟﺘﻜﺭﺍﺭ ،ﺴﻭﻑ
ﻴﻨﺘﺞ ﻟﺩﻴﻨﺎ ﻨﻔﺱ ﺍﻟﻨﺘﻴﺠﺔ ،ﻭﻜﺫﻟﻙ ﺍﻷﻤﺭ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﺘﻌﺒﻴﺭ ﺍﻟﺜﺎﻟﺙ .
١٠٠
ﻤﻼﺤﻅﺔ :
ﻴﺤﺒﺏ ﻭﻀﻊ ﻋﻤﻠﻴﺔ ﺍﻹﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻀﻤﻥ ﺍﻟﺠﻤﻠﺔ forﻟﺴﻬﻭﻟﺔ ﻗﺭﺃﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻴﻤﺎ
ﺒﻌﺩ ،ﻭ ﻤﻤﺎ ﻴﻔﻀﻠﻪ ﺒﻌﺽ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻫﻭ ﺘﻌﺭﻴﻑ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ
forﻤﻥ ﺍﻟﻨﻭﻉ . int
ﻤﺜﺎل:
)for (int x=0;x<=10;x++
١٠١
ﻭ ﺒﺎﻟﻁﺒﻊ ﺴﻭﻑ ﺘﻜﻭﻥ ﺍﻟﻨﺘﻴﺠﺔ ﻭﺍﺤﺩﺓ ﻻ ﻤﺤﺎﻟﺔ ،ﻭ ﻟﻜﻥ ﻜﻴﻑ ﺴﻭﻑ ﺘﻜﻭﻥ ﺍﻟﻨﺘﻴﺠﺔ ﻭﺍﺤﺩﺓ ﻤﻊ
ﺍﻹﺨﺘﻼﻑ ﺍﻟﻭﺍﻀﺢ ﻓﻲ ﺍﻟﻁﺭﻴﻘﺘﻴﻥ ،
ﻴﻘﻭﻡ ﻤﺘﺭﺠﻡ ﻟﻐﺔ C++ﻓﻲ ﻗﺭﺃﺕ ﻋﻤﻠﻴﺔ ﺍﻹﺴﻨﺎﺩ = +ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
ﺠﻤﻊ ﻗﻴﻤﺔ ﺍﻟﻤﺘﻐﻴﺭ xﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﻴﻤﻴﻥ ﺍﻟﻤﻌﺎﺩﻟﺔ ﻤﻊ ﺍﻟﻌﺩﺩ ﺍﻟﻤﻭﺠﻭﺩ ﺒﻌﺩ ﻗﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ ﺜﻡ
ﺇﺴﻨﺎﺩ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻨﺎﺘﺠﺔ ﺇﻟﻰ ﻗﻴﻤﺔ ﺍﻟﻤﺘﻐﻴﺭ . x
ﻤﺜﺎل ﻟﻠﺘﻭﻀﻴﺢ:
١٠٢
ﻭ ﺍﻟﻨﺘﻴﺠﺔ ﻜﺎﻟﺘﺎﻟﻲ:
ﻭ ﻫﺫﻩ ﺒﻌﺽ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺒﻴﺔ ﺍﻟﺘﻲ ﻴﻤﻜﻥ ﺇﺴﻨﺎﺩﻫﺎ ﻭ ﻜﺘﺎﺒﺘﻬﺎ ﻋﻠﻰ ﺸﻜل ﻋﻤﻠﻴﺔ ﺇﺴﻨﺎﺩﻴﺔ
ﻤﻊ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺭﻴﺎﻀﻴﺔ ﺍﻟﺘﻲ ﺘﻜﺘﺏ ﻓﻴﻬﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻁﺒﻴﻌﻲ
ﻋﻤﻠﻴﺔ ﺍﻹﺴﻨﺎﺩ ﻓﻲ C++ ﺍﻟﺸﻜل ﺍﻟﺭﻴﺎﻀﻲ
;x+=5 x=x+5
;x-=7 x=x-7
;x*=x x=x*2
;x/=3 x=x/3
;x%=4 x=x%4
*************************************************
ﺍﻟﻠﻬﻡ ﻻ ﺘﻨﺴﻨﻲ ﻤﻥ ﺭﺤﻤﺘﻙ
*************************************************
١٠٣
ﻋﻤﻠﻴﺎﺕ ﺍﻟﺯﻴﺎﺩﺓ ﻭ ﺍﻹﻨﻘﺎﺹ ﺒﺸﺘﻰ ﺃﺸﻜﺎﻟﻬﺎ ﻭ ﺍﻟﺸﻜل ﺍﻷﺴﺎﺴﻲ ﻟﻠﺯﻴﺎﺩﺓ ﺃﻭ ﺘﺩﻋﻡ ﻟﻐﺔ C++
ﺍﻹﻨﻘﺎﺹ ﻫﻭ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ) (++ﻭ ﻋﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ ﺒﻭﺍﺤﺩ )، (- -
ﻭ ﻫﻤﺎ ﻋﻤﻠﻴﺘﺎﻥ ﻤﺘﻌﺎﻜﺴﺘﺎﻥ ﻭ ﻟﻜﻥ ﻟﻬﻤﺎ ﻨﻔﺱ ﻤﺒﺩﺃ ﺍﻟﻌﻤل ﻭ ﺍﻟﻔﺭﻕ ﻫﻭ ﺃﻥ ﺍﻷﻭﻟﻰ ﺘﺒﺩﺃ ﺒﺘﻨﻔﻴﺫ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺍﻷﺼﻐﺭ ﺇﻟﻰ ﺍﻷﻜﺒﺭ ﺃﻤﺎ ﻋﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ ﺒﻭﺍﺤﺩ ﻓﺈﻨﻬﺎ ﺘﺒﺩﺃ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻤﻥ ﺍﻷﻜﺒﺭ ﺇﻟﻰ ﺍﻷﺼﻐﺭ.
ﻤﺜﺎل ﻟﻌﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ :
ﺒﺸﻜل ﺘﺼﺎﻋﺩﻱ. ﺇﺨﺭﺍﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻤﻥ ﺍﻟﻌﺩﺩ 0ﺇﻟﻰ ﺍﻟﻌﺩﺩ 10
١٠٤
ﻭﺒﻌﺩ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺫ ﺴﻭﻑ ﻴﺨﺭﺝ ﻟﺩﻴﻨﺎ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
ﻻﺤﻅ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﻭ ﻋﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ ﺒﻭﺍﺤﺩ ﻤﻥ ﺨﻼل
ﻫﻭ ﺃﻨﻬﻤﺎ ﻋﻤﻠﻴﺘﺎﻥ ﻤﺘﻌﺎﻜﺴﺘﺎﻥ ﻤﻥ ﺤﻴﺙ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ for
ﺍﻟﺸﺎﺸﺔ .
ﻭ ﻴﻭﺠﺩ ﻨﻭﻋﻴﻥ ﻟﻌﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ﻭ ﻜﺫﻟﻙ ﺍﻷﻤﺭ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻌﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ ﺒﻭﺍﺤﺩ
ﻭ ﻫﻤﺎ:
-١ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ): (++
ﺃ -ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ﺍﻷﻤﺎﻤﻴﺔ .
ﺏ -ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ﺍﻟﺨﻠﻔﻴﺔ .
-٢ﻋﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ ﺒﻭﺍﺤﺩ ):(--
ﺃ -ﻋﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ ﺒﻭﺍﺤﺩ ﺍﻷﻤﺎﻤﻴﺔ .
ﺏ -ﻋﻤﻠﻴﺔ ﺍﻹﻨﻘﺎﺹ ﺒﻭﺍﺤﺩ ﺍﻟﺨﻠﻔﻴﺔ .
ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ )ﺃﻭ ﺍﻹﻨﻘﺎﺹ( ﺒﻭﺍﺤﺩ ﺍﻷﻤﺎﻤﻴﺔ ﻭ ﺍﻟﺨﻠﻔﻴﺔ ﻫﻭ ﻤﺘﻰ ﻴﺘﻡ ﺍﺴﺘﺨﺩﺍﻡ ﻗﻴﻤﺔ
ﺍﻟﻤﺘﺤﻭل ﺍﻟﻤﺭﺍﺩ ﺯﻴﺎﺩﺘﻪ )ﺃﻭ ﻨﻘﺼﺎﻨﻪ( ﺒﻌﺩ ﺃﻡ ﻗﺒل ﺍﻟﺯﻴﺎﺩﺓ ﻋﻠﻰ ﺍﻟﻤﺘﺤﻭل.
ﻓﻔﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ )ﺍﻟﻨﻘﺼﺎﻥ( ﺒﻭﺍﺤﺩ ﺍﻷﻤﺎﻤﻴﺔ ﻴﺘﻡ ﺃﻭﻻﹰ ﺯﻴﺎﺩﺓ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل ﺜﻡ ﺒﻌﺩ ﺍﻟﺯﻴﺎﺩﺓ ﻴﺘﻡ
ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺠﺩﻴﺩﺓ.
١٠٥
ﺃﻤﺎ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ )ﺍﻟﻨﻘﺼﺎﻥ( ﺒﻭﺍﺤﺩ ﺍﻟﺨﻠﻔﻴﺔ ﻴﺘﻡ ﺃﻭﻻﹰ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻘﻴﻤﺔ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﻤﻌﻁﺎﺓ
ﻟﻠﻤﺘﺤﻭل ﺜﻡ ﺒﻌﺩ ﺫﻟﻙ ﺘﺘﻡ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ﻟﻠﻤﺘﺤﻭل.
١٠٦
ﺘﻨﺒﻴﺔ:
ﻴﺅﺩﻱ ﺍﺴﺘﺨﺩﺍﻡ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺃﻭ ﺍﻟﻨﻘﺼﺎﻥ ﻓﻲ ﺃﻜﺜﺭ ﻤﻥ ﻭﺍﺤﺩ ﻀﻤﻥ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ for
ﺇﻟﻰ ﻨﺸﺅ ﺤﻠﻘﺔ ﻏﻴﺭ ﻤﻨﺘﻬﻴﺔ ﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻥ ﺍﻟﻤﺘﺭﺠﻡ ﻻ ﻴﺨﺭﺝ ﺃﻱ ﺨﻁﺄ.
ﻤﺜﺎل ﺨﻁﺄ:
)for(int x=0 ; x<=10 ; x+2
-٢ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﺤﻴﺙ ﻴﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻷﻋﺩﺍﺩ ﺍﻟﻔﺭﺩﻴﺔ ﻓﻘﻁ ﻤﻥ ٩٩ﺇﻟﻰ ١ﺒﺸﻜل
ﺘﻨﺎﺯﻟﻲ ﻭﺫﻟﻙ ﻤﻥ ﺨﻼل ﺍﻟﺠﻤﻠﺔ forﺍﻟﺘﻜﺭﺍﺭﻴﺔ.
ﺍﻟﺤل:
١٠٧
-٣ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﺤﻴﺙ ﻴﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻷﻋﺩﺍﺩ ﻤﻥ ٠ﺇﻟﻰ ٥٥ﺒﺨﻁﻭﺓ ﻗﺩﺭﻫﺎ ٥ﻭ
ﺒﺸﻜل ﺘﺼﺎﻋﺩﻱ.
ﺍﻟﺤل:
١٠٨
-٤ﺘﺎﺠﺭ ﺃﻋﻠﻥ ﻋﻥ ﻓﺘﺢ ﻤﺤﻠﻪ ﺍﻟﺘﺠﺎﺭﻱ ﺍﻟﺠﺩﻴﺩ ﻭ ﻟﻜﻲ ﻴﺠﺫﺏ ﻋﺩﺩ ﺯﺒﺎﺌﻥ ﺃﻜﺜﺭ ﻗﺭﺭ
ﻋﻤل ﺩﻋﺎﻴﺔ ﻟﻤﺤﻠﺔ ﺍﻟﺘﺠﺎﺭﻱ ﻭ ﺫﻟﻙ ﻤﻥ ﺨﻼل ﺇﻋﻁﺎﺀ ﻟﻜل ﺯﺍﺌﺭ ﻴﺩﺨل ﺍﻟﻤﺤل ﻭ
ﻴﻜﻭﻥ ﺭﻗﻤﻪ ﺍﻟﺜﻼﺜﻭﻥ ٣٠ﺇﻋﻁﺎﺅﻩ ﻫﺩﻴﺔ ﻤﻌﻴﻨﺔ.
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻟﺫﻟﻙ ﺍﻟﺘﺎﺠﺭ ﺒﺤﻴﺙ ﻋﻨﺩﻤﺎ ﻴﺩﺨل ﺍﻟﺯﺍﺌﺭ ﺭﻗﻡ ٣٠ﻴﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺃﻨﻪ
ﺍﻟﺯﺍﺌﺭ ﺍﻟﺭﺍﺒﺢ ﺍﻟﺫﻱ ﺴﻭﻑ ﻴﻤﻨﺢ ﺍﻟﻬﺩﻴﺔ ،ﻭ ﻟﻨﻔﺭﺽ ﺃﻥ ﻋﺩﺩ ﺍﻟﺯﻭﺍﺭ ﻓﻲ ﺍﻟﻴﻭﻡ ﻤﺌﺔ ﺯﺍﺌﺭ
ﻓﺭﻀﺎﹰ.
ﺍﻟﺤل:
١٠٩
١١٠
ﺍﻟﺤل:
ﻗﺒل ﺃﻥ ﻨﺒﺩﺃ ﻓﻲ ﻜﺘﺎﺒﺔ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻨﺎ ﻴﺠﺏ ﺃﻥ ﻨﺤﺎﻭل ﻜﺘﺎﺒﺔ ﺨﻭﺍﺭﺯﻤﻴﺔ ﻫﺫﺍ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﻜﻲ ﻴﺴﻬل ﻋﻠﻴﻨﺎ ﻤﻔﻬﻭﻡ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻨﺎ .
ﻋﻤل ﺃﻴﺎﻡ ﺍﻷﺴﺒﻭﻉ ﻤﺎ ﻋﺩﺍ ﺍﻟﺨﻤﻴﺱ ﻭ ﺍﻟﺠﻤﻌﺔ ﻴﺴﺘﻠﻡ ﺍﻟﻤﻭﻅﻑ ﺭﺍﺘﺏ ﻗﺩﺭﻩ n1
ﻋﻤل ﻴﻭﻡ ﺍﻟﺨﻤﻴﺱ ﻴﺴﺘﻠﻡ ﺍﻟﻤﻭﻅﻑ ﺭﺍﺘﺏ ﻗﺩﺭﺓ n2
ﻴﺼﺭﻑ ﺍﻟﻤﻭﻅﻑ ﻓﻲ ﻴﻭﻡ ﺍﻟﺠﻤﻌﺔ ﻤﺒﻠﻎ ﻗﺩﺭﺓ n3
ﻴﻭﺠﺩ ﻟﺩﻯ ﺍﻟﻤﻭﻅﻑ ﻓﻲ ﺍﻟﺒﻨﻙ ﻤﺒﻠﻎ ﻤﻌﻴﻥ ﻗﺩﺭﺓ n4
ﻋﺩﺩ ﺍﻷﻴﺎﻡ ﺍﻟﻜﻠﻲ ﻟﻌﻤل ﺍﻟﻤﻭﻅﻑ n5
ﻭ ﻤﻥ ﺜﻡ ﻨﻜﺘﺏ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻟﻜل ﻤﺘﻐﻴﺭ ﺴﻭﻑ ﻨﺴﺘﺨﺩﻤﻪ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ:
-١ﺭﺍﺘﺏ ﺍﻟﻴﻭﻡrateb_day :
-٢ﺭﺍﺘﺏ ﻴﻭﻡ ﺍﻟﺨﻤﻴﺱrateb_alkamis :
-٣ﺍﻟﻤﺎل ﺍﻟﻤﺘﻭﻓﺭﺓ ﻟﺩﻯ ﺍﻟﻤﻭﻅﻑ ﻓﻲ ﺍﻟﺒﻨﻙ money_bank :
-٤ﻤﺼﺭﻭﻑ ﻴﻭﻡ ﺍﻟﺠﻤﻌﺔ saruf_aljum3a :
-٥ﻋﺩﺩ ﺍﻷﻴﺎﻡ ﺍﻟﻜﻠﻲ ﻟﻌﻤل ﺍﻟﻤﻭﻅﻑ days :
-٦ﻤﺠﻤﻭﻉ ﺍﻟﻤﺎل ﺍﻟﻜﻠﻲ full_money :
-٧ﻤﺘﻐﻴﺭ ﻟﻜﻲ ﻴﺤﺩﺩ ﺃﻱ ﻴﻭﻡ ﻤﻥ ﺃﻴﺎﻡ ﺍﻷﺴﺒﻭﻉ s :
ﻭ ﺒﻌﺩ ﺫﻟﻙ ﻨﻘﻭﻡ ﻓﻲ ﻜﺘﺎﺒﺔ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﺫﺍ ﻜﺎﻨﺕ ﻓﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻗﺩ ﺍﺘﻀﺤﺕ ﻟﻙ ،ﻭ ﺇﻥ
ﻟﻡ ﺘﻜﻥ ﻓﻜﺭﺓ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻏﻴﺭ ﻭﺍﻀﺤﺔ ﻓﺄﺭﺠﻭﺍ ﻗﺭﺃﺓ ﺍﻟﻤﺜﺎل ﻤﺭﺓ ﺃﺨﺭﻯ ﺤﺘﻰ ﺘﺘﻀﺢ ﻟﻙ ﻓﻜﺭﺓ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﻜﻲ ﺘﺴﺘﻭﻋﺏ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ.
١١١
:ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ
١١٢
١١٣
١١٤
ﺒﻌﺩ ﺃﻥ ﻗﻤﻨﺎ ﻓﻲ ﺘﻌﺭﻴﻑ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺭﺍﺩ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻭ ﺍﻟﺘﻲ ﻗﻤﺕﹸ ﻓﻲ ﺘﻭﻀﻴﺤﻬﺎ ﻓﻲ
ﺍﻟﺼﻔﺤﺔ ﺍﻟﺴﺎﺒﻘﺔ،
ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻗﻤﺕﹸ ﻓﻲ ﺇﺴﻨﺎﺩ ﻗﻴﻤﺔ ﺍﻟﻤﺎل ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺒﻨﻙ ﺇﻟﻰ ﻤﺠﻤﻭﻉ ﺍﻟﻤﺎل ﺍﻟﻜﻠﻲ ﻤﻥ
ﺨﻼل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ :
;full_money = money_bank
ﺘﺤﺫﻴﺭ:
ﻭ ﺃﺭﺠﻭﺍ ﺍﻻﻨﺘﺒﺎﻩ ﺇﻟﻰ ﻜﻠﻤﺔ ﺇﺴﻨﺎﺩ ) = ( ﻭ ﺍﻟﺘﻲ ﻨﺭﻤﺯ ﻟﻬﺎ ﺒﺈﺸﺎﺭﺓ ﻴﺴﺎﻭﻱ ﻭﺍﺤﺩﺓ ﻓﻘﻁ،
ﻭ ﻟﻭ ﻗﻤﻨﺎ ﻓﻲ ﻭﻀﻊ ﺇﺸﺎﺭﺘﻴﻥ )= =( ﻓﻬﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﻗﻴﻤﺔ ﺍﻟﻤﺎل ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺒﻨﻙ ﺘﺴﺎﻭﻱ
ﻨﻔﺱ ﻗﻴﻤﺔ ﺍﻟﻤﺎل ﺍﻟﻜﻠﻲ ﻭ ﻫﺫﺍ ﻴﻌﺘﺒﺭ ﺨﻁﺄ ﺒﺭﻤﺠﻲ ﻓﺎﺩﺡ .
ﻭ ﺒﻌﺩ ﺫﻟﻙ ﻗﻤﺕ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﻁﺒﻴﻌﺔ ﻋﺩﺩ ﺍﻷﻴﺎﻡ ﺍﻟﺘﻲ ﻗﺎﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ
ﺇﺩﺨﺎﻟﻬﺎ
ﻭﺫﻟﻙ ﻤﻥ ﺨﻼل ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ forﻭ ﺠﻤﻠﺔ ﺍﻟﺘﺤﻜﻡ . if
ﻓﻤﻥ ﺨﻼل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ:
)for(int s=1;s<=days;s++
ﻗﻤﺕ ﻓﻲ ﺼﻨﻊ ﺤﻠﻘﺔ ﻜﻌﺩﺍﺩ ﻟﻸﻴﺎﻡ ﺍﻟﻌﻤل ،ﺘﺒﺩﺃ ﻤﻥ ﻴﻭﻡ ﺭﻗﻡ ﻭﺍﺤﺩ) ﺤﻴﺙ ﺃﻨﻪ ﻤﻥ ﺍﻟﻁﺒﻴﻌﻲ ﻻ
ﻴﻭﺠﺩ ﺃﻗل ﻤﻥ ﻴﻭﻡ ﻭﺍﺤﺩ ﺩﻭﺍﻡ ( ﻭ ﻨﻬﺎﻴﺔ ﺍﻟﺤﻠﻘﺔ ﻫﻨﺎ ﺍﻟﺫﻱ ﻴﺤﺩﺩﻫﺎ ﻫﻭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺨﻼل
١١٥
ﺇﺩﺨﺎﻟﻪ ﻟﻌﺩﺩ ﺍﻷﻴﺎﻡ ﻤﻥ ﺨﻼل ﺍﻟﻤﺘﻐﻴﺭ ، daysﻭ ﻫﺫﻩ ﺍﻟﺤﻠﻘﺔ ﺘﺘﺯﺍﻴﺩ ﺒﻤﻘﺩﺍﺭ ﻭﺍﺤﺩ ﻜل ﻤﺭﺓ
s++
ﻓﻤﻥ ﺨﻼل ﻫﺫﺍ ﺍﻟﻌﺩﺍﺩ ﺴﻭﻑ ﻴﺘﻡ ﺤﺴﺎﺏ ﻤﺠﻤﻭﻉ ﺍﻷﻴﺎﻡ ﺍﻟﻜﻠﻲ ﺍﻟﺘﻲ ﻗﺎﻡ ﺍﻟﻤﻭﻅﻑ ﻓﻲ ﺇﺩﺨﺎﻟﻬﺎ
،ﻭﻟﻜﻥ ﻜﻴﻑ ﺴﻭﻑ ﻴﺘﻌﺭﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﻥ ﻫﺫﺍ ﺍﻟﻴﻭﻡ ﻫﻭ ﺍﻟﺨﻤﻴﺱ ﺃﻭ ﺍﻟﺠﻤﻌﺔ ﺃﻭ ﺃﻱ ﻴﻭﻡ
ﺃﺨﺭ،
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻫﻨﺎ ﻴﺄﺘﻲ ﺩﻭﺭ ﺍﻟﻤﺒﺭﻤﺞ ﻓﻲ ﺍﻹﺒﺩﺍﻉ ﻭ ﺍﻟﺘﻔﻜﻴﺭ ﻓﻲ ﺤل ﻤﺜل ﻫﺫﻩ ﺍﻟﻤﺸﺎﻜل ﺍﻟﺘﻲ
ﺘﻭﺍﺠﻪ.
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﺍﻷﺴﺒﻭﻉ ﻋﺒﺎﺭﺓ ﻋﻥ ﺴﺒﻌﺔ ﺃﻴﺎﻡ } {1,2,3,4,5,6,7ﻭ ﺍﻟﻴﻭﻡ ﺍﻷﻭل ﻫﻭ ﺍﻟﺴﺒﺕ
ﺃﻱ ﺭﻗﻡ ، ١ﺍﻷﺤﺩ ﺭﻗﻡ ، ٢ﺍﻻﺜﻨﻴﻥ ، ٣ﺍﻟﺜﻼﺜﺎﺀ ، ٤ﺍﻷﺭﺒﻌﺎﺀ ، ٥ﺍﻟﺨﻤﻴﺱ ، ٦ﺍﻟﺠﻤﻌﺔ
٧
ﻭ ﻟﻜﻲ ﻴﺘﻌﺭﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﺃﻱ ﻴﻭﻡ ﻤﻥ ﺃﻴﺎﻡ ﺍﻷﺴﺒﻭﻉ ﻫﺫﺍ ﻓﻴﻤﻜﻨﻨﺎ ﺫﻟﻙ ﻤﻥ ﺨﻼل if
)if(s%6= =0
{
;full_money+=rateb_alkamis
}
ﻓﻤﻥ ﺨﻼل ﺠﻤﻠﺔ ﺍﻻﺨﺘﻴﺎﺭ ifﻫﺫﻩ ﺴﻭﻑ ﻴﺘﻡ ﺘﻌﺭﻑ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﻴﻭﻡ ﺍﻟﺨﻤﻴﺱ ﻓﻘﻁ ﻭ
ﺫﻟﻙ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ :
ﻴﺘﻡ ﺍﺨﺘﺒﺎﺭ ﻋﺩﺩ ﺍﻷﻴﺎﻡ ) ﺍﻟﻤﺩﺨﻠﺔ ﻤﻥ ﻗﺒل ﺍﻟﻤﻭﻅﻑ ( ﻤﻥ ﺨﻼل ifﺤﻴﺙ ﺃﻨﻪ ﻜل ﻴﻭﻡ ﻴﻜﻭﻥ
ﺒﺎﻗﻲ ﻗﺴﻤﺘﻪ ﻴﺴﺎﻭﻱ ) ٦ﻭ ٦ﻴﻌﻨﻲ ﺃﻥ ﻫﺫﺍ ﺍﻟﻴﻭﻡ ﻫﻭ ﻴﻭﻡ ﺍﻟﺨﻤﻴﺱ( ﻴﺘﻡ ﺇﻀﺎﻓﺔ ﺭﺍﺘﺏ ﻴﻭﻡ
ﺍﻟﺨﻤﻴﺱ ﺇﻟﻰ ﻤﺠﻤﻭﻉ ﺍﻟﻤﺎل ﺍﻟﻜﻠﻲ
١١٦
ﻭ ﺇﺫﺍ ﻟﻡ ﻴﻜﻥ ﺒﺎﻗﻲ ﻗﺴﻤﺔ ﺍﻟﻌﺩﺩ ٦ﻴﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ ﻨﻨﺘﻘل ﺇﻟﻰ ﺍﻟﻤﺭﺤﻠﺔ ﺍﻟﺘﺎﻟﻴﺔ:
else
{
)if(s%7= =0
{
;full_money-=saruf_aljum3a
}
ﻴﺘﻡ ﻓﻲ ﺠﻤﻠﺔ ﺍﻻﺨﺘﺒﺎﺭ ifﻫﺫﻩ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺃﻥ ﻫﺫﺍ ﺍﻟﻴﻭﻡ ﻫﻭ ﻴﻭﻡ ﺍﻟﺠﻤﻌﺔ .
ﺤﻴﺙ ﺃﻨﻪ ﺇﺫﺍ ﻜﺎﻥ ﺒﺎﻗﻲ ﻗﺴﻤﺔ ﺍﻟﻴﻭﻡ ﻋﻠﻰ ٧ﻴﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ ﻓﻬﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﻫﺫﺍ ﺍﻟﻴﻭﻡ ﻫﻭ ﻴﻭﻡ
ﺍﻟﺠﻤﻌﺔ ) ﻴﻭﻡ ﺍﻟﺠﻤﻌﺔ ﺭﻗﻤﻪ . ( ٧
ﻭ ﺒﻌﺩ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺃﻥ ﻫﺫﺍ ﺍﻟﻴﻭﻡ ﻫﻭ ﻴﻭﻡ ﺍﻟﺠﻤﻌﺔ ﻴﺘﻡ ﺇﻨﻘﺎﺹ ﻤﺼﺭﻑ ﻴﻭﻡ ﺍﻟﺠﻤﻌﺔ ﻤﻥ
ﻤﺠﻤﻭﻉ ﺍﻟﻤﺎل ﺍﻟﻜﻠﻲ .
ﺃﻤﺎ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ :
else
{
;full_money+=rateb_day
}
ﻓﺈﻨﻪ ﺇﻥ ﻟﻡ ﻴﻜﻥ ﻫﺫﺍ ﺍﻟﻴﻭﻡ ﻫﻭ ﻴﻭﻡ ﺍﻟﺨﻤﻴﺱ ﻭ ﻻ ﻴﻭﻡ ﺍﻟﺠﻤﻌﺔ ﻓﻬﺫﺍ ﻴﻌﻨﻲ ﺃﻨﻪ ﺃﻱ ﻴﻭﻡ ﻤﻥ
ﺍﻟﺴﺒﺕ ﺇﻟﻰ ﺍﻷﺭﺒﻌﺎﺀ ،ﻭ ﺴﻴﺘﻡ ﺇﻀﺎﻓﺔ ﺍﻟﻤﺭﺘﺏ ﺍﻟﻴﻭﻤﻲ ﻟﻠﻤﻭﻅﻑ ﺇﻟﻰ ﻤﺠﻤﻭﻉ ﺍﻟﻤﺎل ﺍﻟﻜﻠﻲ.
ﺃﻤﺎ ﻓﻲ ﻫﺫﺍ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻓﻴﺘﻡ ﻋﻤﻠﻴﺔ ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻟﻠﻤﺠﻤﻭﻉ ﺍﻟﻤﺎل ﺍﻟﻜﻠﻲ ﺍﻟﻤﺘﺒﻘﻲ
ﻟﺩﻯ ﺍﻟﻤﻭﻅﻑ ﺒﻌﺩ ﻋﺩﺩ ﺍﻷﻴﺎﻡ ﺍﻟﺘﻲ ﻗﺎﻡ ﺍﻟﻤﻭﻅﻑ ﻓﻲ ﺇﺩﺨﺎﻟﻬﺎ
١١٧
ﻤﻼﺤﻅﺔ :
ﻟﻘﺩ ﻭﻀﻌﺕ ﻫﻨﺎ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻤﻥ ﻨﻭﻉ intﺃﻱ ﻤﻥ ﻨﻭﻉ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ،ﻓﻠﻭ ﺃﺩﺨﻠﻨﺎ ﻋﺩﺩ
ﻋﺸﺭﻱ ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل ﻓﺴﻭﻑ ﻴﺨﺭﺝ ﻟﻨﺎ ﺨﻁﺄ ﺃﺜﻨﺎﺀ ﻤﺭﺤﻠﺔ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻜﺎﻟﺘﺎﻟﻲ:
ﻟﺫﻟﻙ ﻴﺭﺠﻰ ﺍﻻﻨﺘﺒﺎﻩ ﻓﺈﺫﺍ ﺃﺭﺩﺕ ﺇﺩﺨﺎل ﻋﺩﺩ ﻏﻴﺭ ﻁﺒﻴﻌﻲ ،ﺤﻴﻨﺌﺫ ﻴﺠﺏ ﻋﻠﻴﻙ ﺃﻭﻻﹰ ﺍﻟﻘﻴﺎﻡ ﻓﻲ
ﺘﻐﻴﺭ ﻨﻭﻉ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻜﺎﻟﻨﻭﻉ floatﺃﻭ . double
١١٨
ﺍﻟﺠﻤﻠﺔ : while
ﺇﻥ ﻜﻨﺕ ﻗﺩ ﻗﺭﺃﺕ ﻭ ﺘﻌﻠﻤﺕ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ forﻓﺈﻥ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ whileﺴﺘﻜﻭﻥ ﺒﺈﺫﻥ
ﺍﷲ ﺃﻤﺭ ﻤﻥ ﺍﻟﺒﺩﻴﻬﻲ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻙ.
ﻭ ﺫﻟﻙ ﻟﻸﻥ whileﻤﺎ ﻫﻲ ﺇﻻ ﻨﺴﺨﺔ ﻤﻥ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ forﻤﻊ ﻭﺠﻭﺩ ﺒﻌﺽ ﺍﻻﺨﺘﻼﻓﺎﺕ
ﺍﻟﺒﺴﻴﻁﺔ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻌﺎﻡ ﻭ ﺍﻟﻭﻅﻴﻔﺔ.
ﻭ ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻫﻨﺎ ﻴﻜﻤﻥ ﻗﻭﺓ ﻫﺫﻩ ﺍﻟﻠﻐﺔ C++ﺤﻴﺙ ﺃﻨﻬﺎ ﻻ ﺘﺤﺼﺭﻙ ﻓﻲ ﺠﻤﻠﺔ ﺘﻜﺭﺍﺭ
ﻭﺍﺤﺩﺓ ﻭ ﻴﺠﺏ ﻋﻠﻴﻙ ﺍﻟﺘﻘﻴﺩ ﺒﻬﺎ ﻭ ﻜﺘﺎﺒﺔ ﺃﻜﻭﺍﺩ ﺒﺭﺍﻤﺠﻙ ﻤﻥ ﺨﻼﻟﻬﺎ ،ﺒل ﺘﻌﻁﻴﻙ ﺍﻟﺤﺭﻴﺔ ﻭ
ﺍﻟﻤﺠﺎل ﺍﻟﻭﺍﺴﻊ ﻓﻲ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻭ ﺠﻤل ﺍﻟﺘﺤﻜﻡ ﺍﻟﻤﻨﺎﺴﺒﺔ ﻟﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺠﻙ ،ﻭ
ﺴﻨﺭﻯ ﻤﻥ ﺨﻼل ﻫﺫﻩ ﺍﻟﺠﻤﻠﺔ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺠﺩﻴﺩﺓ whileﻤﺠﺎل ﻭ ﺤﺭﻴﺔ ﺃﻭﺴﻊ ﻓﻲ ﺍﻟﺒﺭﻤﺠﺔ
ﺃﻜﺜﺭ ﺒﻜﺜﻴﺭ ﻤﻥ ﺍﻋﺘﻤﺎﺩﻨﺎ ﻓﻘﻁ ﻋﻠﻰ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ forﻭﺤﺩﻫﺎ ﻓﻘﻁ.
ﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻨﻪ ﻴﻤﻜﻥ ﻜﺘﺎﺒﺔ ﺒﻌﺽ ﺍﻟﺒﺭﺍﻤﺞ ﻤﻥ ﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ، whileﻭﻟﻜﻥ ﻤﻥ ﺨﻼل ﻫﺫﻩ
ﺍﻟﺘﻌﻠﻴﻤﺔ ﻴﻤﻜﻨﻙ ﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺞ ﺃﻜﺜﺭ ﻟﻴﻭﻨﺔ ﻭ ﻤﺭﻭﻨﺔ ﻭ ﻗﺎﺒﻠﺔ ﻟﻠﺘﻁﻭﻴﺭ ﻤﻥ ﻏﻴﺭﻫﺎ.
ﻤﻼﺤﻅﺔ:
ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ forﺘﻌﺘﺒﺭ ﺃﻜﺜﺭ ﺸﻴﻭﻋﺎﹰ ﻤﻥ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ whileﻤﻥ ﺤﻴﺙ ﺍﻻﺴﺘﺨﺩﺍﻡ ﻭ
ﺫﻟﻙ ﺒﺴﺒﺏ ﻗﻭﺓ ﻭ ﻟﻴﻭﻨﺔ ﻭﺘﻨﻅﻴﻡ forﻋﻥ .whileﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻥ ﺍﻟﻤﺒﺭﻤﺠﻭﻥ ﻻ ﻴﺴﺘﻁﻴﻌﻭﺍ
ﺍﻟﺘﺨﻠﻲ ﻋﻥ ،whileﻭ ﺫﻟﻙ ﺃﻥ ﻟﻜل ﻭﺍﺤﺩﺓ ﻤﻥ ﻫﺎﺘﻴﻥ ﺍﻟﺠﻤﻠﺘﻴﻥ ﻟﻬﺎ ﻤﻭﻗﻌﻬﺎ ﺍﻟﺨﺎﺹ ﻓﻲ
ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺨﺎﺹ ﻟﻜل ﻭﺍﺤﺩﺓ ﻫﻭ ﺃﻨﺕ ﺒﻨﻔﺴﻙ ﺍﻟﺫﻱ ﺴﻭﻑ ﺘﺘﻌﺭﻑ ﻋﻠﻴﺔ ﻭ
ﺫﻟﻙ ﻤﻥ ﺨﻼل ﺍﻟﺘﺠﺭﺒﺔ ﻭ ﺍﻟﺨﺒﺭﺓ ﻓﻲ ﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺠﻙ.
١١٩
١٢٠
١٢١
ﻭ ﻟﻜﻲ ﺘﺭﻯ ﻓﻲ ﻨﻔﺴﻙ ﺍﻟﺘﺸﺎﺒﻪ ﺍﻟﻜﺒﻴﺭ ﺒﻴﻥ forﻭ whileﺃﻋﻤل ﻤﻘﺎﺭﻨﺔ ﺒﻴﻥ ﺍﻷﺠﺯﺍﺀ
ﺍﻟﻤﺅﻟﻔﺔ ﻟﻜل ﻤﻥ ﺍﻟﺠﻤﻠﺘﻴﻥ ،ﻭ ﻻﺤﻅ ﺍﻟﺘﺎﻟﻲ:
-١ﻤﻜﺎﻥ ﺘﻭﻀﻊ ﻤﺘﺤﻭل ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﺘﻜﺭﺍﺭ ﻭ ﻗﻴﻤﺘﻪ.
-٢ﻤﻜﺎﻥ ﺘﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻨﻬﺎﺌﻴﺔ ﻟﻤﺘﺤﻭل ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﺘﻜﺭﺍﺭ.
-٣ﻤﻜﺎﻥ ﺘﻭﻀﻊ ﺯﻴﺎﺩﺓ ﻗﻴﻤﺔ ﻤﺘﺤﻭل ﺍﻟﺘﺤﻜﻡ ﺒﺎﻟﺘﻜﺭﺍﺭ.
ﺃﻤﺎ ﺍﻷﻥ ﻟﻨﺄﺨﺫ ﻤﺜﺎل ﻋﻤﻠﻲ ﻟﻴﺘﻜﻭﻥ ﻟﺩﻴﻨﺎ ﻤﻔﻬﻭﻡ ﺃﻭﻀﺢ ﻟﻬﺫﻩ ﺍﻟﺠﻤﻠﺔ.
١٢٢
ﻤﺜﺎل :١
ﺇﺨﺭﺍﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻷﻋﺩﺍﺩ ﻤﻥ ١ﺇﻟﻰ ١٠ﺒﺸﻜل ﺘﺼﺎﻋﺩﻱ.
ﺍﻟﺤل:
١٢٣
ﻤﺜﺎل :٢
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻴﻁﻠﺏ ﻤﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﺤﺭﻑ ﻤﻌﻴﻥ ،ﻭﻴﻜﺭﺭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻁﻠﺏ ﻤﺎ ﻟﻡ
ﻴﺩﺨل ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻟﺤﺭﻑ .n
ﺍﻟﺤل:
ﻤﻼﺤﻅﺔ ﻫﺎﻤﺔ:
ﻻﺤﻅ ﻭﺠﻭﺩ ﺍﻟﺤﺭﻑ nﺩﺍﺨل ﻓﺘﺤﺘﻴﻥ ،ﻟﻤﺎﺫﺍ ؟ )ﺫﹶﻜﺭﺕﹸ ﻫﺫﻩ ﺍﻟﻤﻼﺤﻅﺔ ﺴﺎﺒﻘﺎﹰ(
ﻭ ﻟﻭ ﻨﺴﻴﺕ ﻭﻀﻊ ﺍﻟﺤﺭﻑ ﺩﺍﺨل ﻓﺘﺤﺘﻴﻥ ﺴﻭﻑ ﻴﺨﺭﺝ ﻟﻙ ﺍﻟﻤﺘﺭﺠﻡ ﺍﻟﺨﻁﺄ ﺍﻟﺘﺎﻟﻲ:
error C2065: 'n' : undeclared identifier
١٢٤
ﻤﺜﺎل :٣
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻟﺤﺴﺎﺏ ﺍﻟﻤﻌﺩل ﺍﻟﺤﺴﺎﺒﻲ)ﻤﺠﻤﻭﻉ ﺍﻟﻌﻼﻤﺎﺕ ﻤﻘﺴﻭﻡ ﻋﻠﻰ ﻋﺩﺩﻫﻥ( ﻟﻌﻼﻤﺎﺕ
ﻁﺎﻟﺏ ﻓﺭﻀﺎﹰ ﺃﻥ ﻫﺫﺍ ﺍﻟﻁﺎﻟﺏ ﻗﺎﻡ ﻓﻲ ﺘﻘﺩﻴﻡ ﺨﻤﺴﺔ ﺍﻤﺘﺤﺎﻨﺎﺕ ﻓﻲ ﻤﻭﺍﺩ ﻤﻌﻴﻨﺔ ﻻ ﻋﻠﻰ ﺍﻟﺘﻌﻴﻥ
ﺍﻟﺤل:
ﻤﻥ ﺃﺠل ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺇﺨﺘﺭﺕ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﺘﻲ ﺴﻭﻑ ﺍﺴﺘﺨﺩﻤﻬﺎ ﺍﻷﺴﻤﺎﺀ ﺍﻟﺘﺎﻟﻴﺔ:
ﺍﻟﻤﺘﻐﻴﺭ gradeﻭ ﺍﻟﺫﻱ ﻴﻌﺒﺭ ﻋﻥ ﺩﺭﺠﺔ ﻋﻼﻤﺔ ﺍﻟﻁﺎﻟﺏ ﺍﻟﻤﺩﺨﻠﺔ .
ﻭ ﺍﻟﻤﺘﻐﻴﺭ total_gradeﻟﺤﺴﺎﺏ ﻤﺠﻤﻭﻉ ﻋﻼﻤﺎﺕ ﺍﻟﻜﺎﻟﺏ ﺍﻟﻤﺩﺨﻠﺔ.
ﻭ ﺍﻟﻤﺘﻐﻴﺭ counter_gradeﻴﺴﺘﺨﺩﻡ ﻜﻌﺩﺍﺩ ﻟﺤﺴﺎﺏ ﻋﺩﺩ ﻤﺭﺍﺕ ﺍﻟﻌﻼﻤﺎﺕ ﺍﻟﻤﺩﺨﻠﺔ.
ﻭ ﺍﻟﻤﺘﻐﻴﺭ sumﻟﺤﺴﺎﺏ ﺍﻟﻤﻌﺩل ﺍﻟﻭﺴﻁﻲ ﻟﻠﻌﻼﻤﺎﺕ ﺍﻟﻤﺩﺨﻠﺔ.
١٢٥
ﻟﺫﻟﻙ ﻻ ﺘﺒﺨل ﻋﻠﻰ ﺒﺭﺍﻤﺠﻙ ﻓﻲ ﺘﻭﻀﻴﺢ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ،ﺤﺘﻰ ﻭ ﺇﻥ ﺘﻁﻠﺏ ﺫﻟﻙ ﻤﻨﻙ
ﻜﺘﺎﺒﺔ ﺍﺴﻡ ﺍﻟﻤﺘﻐﻴﺭ ﻓﻲ ﺜﻼﺙ ﻜﻠﻤﺎﺕ ﺇﻥ ﻜﻨﺕ ﺘﻜﺘﺏ ﺒﺭﺍﻤﺠﻙ ﻓﻲ ﻤﺤﺭﺭ Visual C++
١٢٦
-٢ﻭ ﻻﺤﻅ ﺃﻨﻪ ﺃﻴﻀﺎﹰ ﻗﻤﻨﺎ ﻓﻲ ﺇﻋﻁﺎﺀ ﻗﻴﻡ ﺃﻭﻟﻴﻪ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﻭ ﻫﻲ ﺍﻟﻘﻴﻤﺔ ﺼﻔﺭ
)ﻤﺎ ﻋﺩﺍ ﺍﻟﻘﻴﻤﺔ counter_gradeﻭ ﺍﻟﺘﻲ ﺴﺄﻗﻭﻡ ﻓﻲ ﺸﺭﺡ ﺫﻟﻙ ﻻﺤﻘﺎﹰ(
ﻭ ﻗﻤﻨﺎ ﻓﻲ ﺇﻋﻁﺎﺀ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻗﻴﻡ ﺃﻭﻟﻴﺔ ﻟﻠﺴﺒﺏ ﺍﻟﺘﺎﻟﻲ:
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻋﻨﺩﻤﺎ ﺃﻋﻁﻴﻨﺎ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﺃﺴﻤﺎﺀ ﻭ ﻋﺭﻓﻨﺎ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻤﻥ ﺃﻱ ﻨﻭﻉ ﻭ ﺫﻟﻙ ﻴﻌﻨﻲ
ﺃﻨﻪ ﺤﺠﺯﻨﺎ ﻟﻬﺫﻩ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺃﻤﺎﻜﻥ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ .ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﻘﻭﻡ ﺍﻟﻤﻌﺎﻟﺞ ﻓﻲ ﺇﺴﻨﺎﺩ
ﻗﻴﻤﺔ ﻤﺨﺯﻨﺔ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺴﺎﺒﻘﺎﹰ ﺇﻟﻰ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﺤﺠﺯ ﻟﻠﻤﺘﻐﻴﺭ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ،ﻭﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻥ
ﺍﻟﻤﺘﻐﻴﺭ ﺴﻴﺄﺨﺫ ﻫﺫﻩ ﺍﻟﻘﻴﻤﺔ ﺃﺴﻨﺩﺕ ﻟﻪ.
ﻭ ﺴﻭﻑ ﺃﻗﻭﻡ ﻓﻲ ﺸﺭﺡ ﺍﻟﻜﻼﻡ ﺍﻟﻨﻅﺭﻱ ﺍﻟﺴﺎﺒﻕ ﻋﻠﻰ ﺸﻜل ﻋﻤﻠﻲ ﻭ ﻤﺭﺌﻲ ﻭ ﻭﺍﻀﺢ ﻭ ﺫﻟﻙ
ﻤﻥ ﺨﻼل ﺒﻴﺌﺔ ﻋﻤل Visual C++ﻭ ﺫﻟﻙ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
ﻟﻜﻲ ﺘﺭﻯ ﺍﻟﻘﻴﻡ ﺍﻟﺘﻲ ﺘﺴﻨﺩ ﺇﻟﻰ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻓﻲ ﺤﺎﻟﺔ ﻋﺩﻡ ﺇﻋﻁﺎﺌﻬﺎ ﻗﻴﻡ ﺃﻭﻟﻴﺔ ﺇﺘﺒﻊ ﺍﻟﺨﻁﻭﺍﺕ
ﺍﻟﺘﺎﻟﻴﺔ:
-١ﻻ ﺘﻌﻁﻲ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﻗﻴﻡ ﺃﻭﻟﻴﺔ ،ﺃﻱ ﻗﻡ ﻓﻲ ﺘﻌﺭﻴﻔﻬﺎ ﻤﻥ ﺍﻟﻨﻭﻉ doubleﻓﻘﻁ ﻭ ﻻ
ﺘﻀﻑ ﺃﻱ ﺸﻲﺀ ﻏﻴﺭ ﺫﻟﻙ.
-٢ﺒﻌﺩ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ﻭ ﺫﻟﻙ ﺒﻌﺩ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ctrl+f7
-٣ﻗﻡ ﻓﻲ ﺍﻟﻀﻐﻁ ﻓﻘﻁ ﻋﻠﻰ ﺍﻟﺯﺭ f10
ﺴﺘﻅﻬﺭ ﻟﻙ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﺸﺎﺸﺔ ﺴﻭﺩﺍﺀ ﺜﻡ ﺘﺨﺘﻔﻲ ﺒﺴﺭﻋﺔ ،ﻭﺴﻴﺒﻘﻰ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺃﻤﺎﻤﻙ ﺒﻴﺌﺔ
Visual C++ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
١٢٧
١٢٨
١٢٩
-٢ﻗﻡ ﻓﻲ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ f10ﻀﻐﻁﺔ ﻭﺍﺤﺩ ﻜل ﻤﺭﺓ ﻤﻊ ﺍﻻﻨﺘﺒﺎﻩ ﺇﻟﻰ ﺍﻟﺘﻐﻴﺭ ﺍﻟﺫﻱ
ﺴﻴﻁﺭﺃ ﻋﻠﻰ ﻗﻴﻡ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ،ﻭﺫﻟﻙ ﺴﻴﻜﻭﻥ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
-٣ﺘﺎﺒﻊ ﻓﻲ ﺍﻟﻀﻐﻁ ﻋﻠﻰ ﺍﻟﺯﺭ f10ﺤﺘﻰ ﻴﻨﻁﻠﻕ ﺼﻭﺕ ﻤﻥ ﺍﻟﺠﻬﺎﺯ ﻴﻌﻠﻥ ﻋﻥ ﺇﻨﺘﻬﺎﺀ
ﺍﺴﺘﺨﺩﺍﻡ ﻗﻴﻡ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺩﺨﻠﺔ.
ﻤﺎ ﺍﻟﺫﻱ ﺘﻼﺤﻅﻪ ﺒﻌﺩ ﻫﺫﺍ ﻜﻠﻪ:
ﻨﻼﺤﻅ ﺃﻥ ﻗﻴﻡ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻟﻡ ﺘﺘﻐﻴﺭ ﻻ ﻗﺒل ﻭ ﻻ ﺒﻌﺩ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻭ ﻫﺫﺍ ﻴﻌﻨﻲ ﺃﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﺍﺴﺘﺨﺩﻡ ﻗﻴﻡ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﻀﻤﻥ ﺍﻟﻤﺠﺎل ﺍﻟﻤﻌﻠﻥ ﻓﻲ ﺤﻘل ﺍﻟﻘﻴﻤﺔ ، valueﻤﻤﺎ ﻴﻌﻨﻲ ﺃﻨﻪ ﻋﻠﻰ
ﺍﻟﺭﻏﻡ ﻤﻥ ﺼﺤﺔ ﻜﻭﺩ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻭ ﻋﻠﻰ ﺍﻟﺭﻏﻡ ﻤﻥ ﺃﻥ ﺍﻟﻤﺘﺭﺠﻡ ﻟﻡ ﻴﺨﺭﺝ ﻟﻨﺎ ﺃﻱ ﺨﻁﺄ ﻋﻠﻰ
ﺍﻹﻁﻼﻕ ﺇﻻ ﺃﻥ ﺍﻟﻨﺘﻴﺠﺔ ﺒﻌﺩ ﺇﺩﺨﺎل ﻋﻼﻤﺎﺕ ﺍﻟﻁﺎﻟﺏ ﻟﻴﺴﺕ ﺼﺤﻴﺤﺔ.
١٣٠
ﺃﻤﺎ ﺍﻷﻥ ﻟﻨﻘﻡ ﻓﻲ ﻨﻔﺱ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺴﺎﺒﻘﺔ ﻭ ﻟﻜﻥ ﻤﻊ ﺇﻋﻁﺎﺀ ﻗﻴﻡ ﺇﺒﺘﺩﺍﺌﻴﺔ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ،ﻭ
ﺴﻨﻼﺤﻅ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﺍﻟﺤﺎﻟﺘﻴﻥ
ﻭ ﻟﻜﻥ ﺃﻭﻻﹰ ﻴﺠﺏ ﻋﻠﻴﻙ ﺍﻟﻌﻭﺩﺓ ﺇﻟﻰ ﻤﺤﺭﺭ ﺍﻷﻜﻭﺍﺩ ﻭﺫﻟﻙ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ f7ﻭ ﻤﻥ ﺜﻡ ﻋﻠﻰ
ﺍﻟﺯﺭ enter
ﻭ ﺒﻌﺩ ﺇﻋﻁﺎﺀ ﻗﻴﻡ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﻭ ﺍﻟﻌﻭﺩﺓ ﻟﺭﺅﻴﺔ ﻗﻴﻡ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺠﻭﺯﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺎﻟﻀﻐﻁ
ﻤﺭﺓ ﺃﺨﺭﻯ ﻋﻠﻰ F10ﺴﻨﻼﺤﻅ ﻜﺎﻟﺘﺎﻟﻲ:
-١ﻋﺭﺽ ﺍﻟﻤﺠﺎل ﻟﻘﻴﻡ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻨﻬﺎ
ﻓﻔﻲ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃُﻋﻁﻴﺕ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﻗﻴﻡ ﻏﻴﺭ ﻤﻌﺭﻭﻓﺔ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ.
-٣ﻨﺘﺎﺒﻊ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ F10ﺤﺘﻰ ﻴﺼل ﺍﻟﻤﺅﺸﺭ ﺇﻟﻰ ﺍﻟﻤﺘﻐﻴﺭ grade ,sumﻋﻨﺩﺌﺫ
ﺴﻴﻅﻬﺭ ﻟﻨﺎ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
ﻨﻼﺤﻅ ﺃﻨﻪ ﺘﻡ ﺘﺼﻔﻴﺭ ﺍﻟﻤﺘﻐﻴﺭﺍﻥ ﻭ ﺃﺼﺒﺤﺕ ﺍﻟﻘﻴﻡ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﻟﻬﻤﺎ ﻴﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ.
ﻭ ﻻﺤﻅ ﺍﻟﻔﺭﻕ ﻤﻊ ﺍﻟﻤﺭﺤﻠﺔ ﺍﻟﺴﺎﺒﻘﺔ ﺤﻴﻥ ﻜﺎﻨﺕ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺒﺩﻭﻥ ﻗﻴﻡ ﺃﻭﻟﻴﺔ.
١٣١
-٤ﻨﺘﺎﺒﻊ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ F10ﺤﺘﻰ ﻴﺼل ﺍﻟﻤﺅﺸﺭ ﺇﻟﻰ ﺍﻟﻤﺘﻐﻴﺭ total_grade ,
counter_gradeﻋﻨﺩﺌﺫ ﺴﻴﻅﻬﺭ ﻟﻨﺎ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
١٣٢
ﺍﻟﺨﻼﺼﺔ:
ﻴﺠﺏ ﺇﻋﻁﺎﺀ ﻗﻴﻡ ﺍﺒﺘﺩﺍﺌﻴﺔ ﻟﻠﻤﺘﻐﻴﺭﺍﺕ ﻀﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺃﺠل ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻨﺘﻴﺠﺔ
ﺼﺤﻴﺤﺔ ﻤﺌﺔ ﺒﺎﻟﻤﺌﺔ ﻭ ﻤﻥ ﺩﻭﻥ ﺸﻜﻭﻙ ﻓﻲ ﺍﻟﻨﺘﺎﺌﺞ ،ﻭ ﺇﻻ ﺴﻴﻭﻑ ﻴﻌﻁﻰ ﻗﻴﻡ ﺃﺨﺭﻯ
ﻟﻠﻤﺘﻐﻴﺭﺍﺕ )ﻫﺫﻩ ﺍﻟﻘﻴﻡ ﺘﻜﻭﻥ ﻓﻲ ﺍﻟﻤﻭﻀﻊ ﺍﻟﺫﻱ ﺤﺠﺯ ﻟﻠﻤﺘﻐﻴﺭ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ( ﻤﻤﺎ ﻴﺅﺩﻱ
ﺇﻟﻰ ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻨﺘﺎﺌﺞ ﺨﻁﺊ ﻋﻠﻰ ﺍﻟﺭﻏﻡ ﻤﻥ ﺼﺤﺔ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﺘﺭﺠﻡ.
١٣٣
ﻤﺜﺎل :٤
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻟﺤﺴﺎﺏ ﺍﻟﻤﻌﺩل ﺍﻟﺤﺴﺎﺒﻲ)ﻤﺠﻤﻭﻉ ﺍﻟﻌﻼﻤﺎﺕ ﻤﻘﺴﻭﻡ ﻋﻠﻰ ﻋﺩﺩﻫﻥ( ﻟﻌﻼﻤﺎﺕ
ﻁﺎﻟﺏ ،ﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻥ ﺍﻟﻁﺎﻟﺏ ﻨﻔﺴﻪ ﻫﻭ ﺍﻟﺫﻱ ﺴﻭﻑ ﻴﺤﺩﺩ ﻋﺩﺩ ﺍﻷﻤﺘﺤﺎﻨﺎﺕ ﺍﻟﻤﺭﺍﺩ ﺇﺩﺨﺎﻟﻬﺎ
ﻟﺤﺴﺎﺏ ﻤﻌﺩﻟﻬﻥ ،ﺃﻱ ﺃﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻌﻁﻴﻪ ﺤﺭﻴﺔ ﺍﻻﺨﺘﻴﺎﺭ.
ﺍﻟﺤل:
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﻤﺎ ﻫﻭ ﺇﻻ ﻋﺒﺎﺭﺓ ﻋﻥ ﺘﻌﺩﻴل ﻟﻠﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ،ﻭﺴﻭﻑ ﻨﺠﺭﻱ ﺒﻌﺽ
ﺍﻟﺘﻐﻴﺭﺍﺕ ﺍﻟﺒﺴﻴﻁﺔ ﻋﻠﻰ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻟﺤل ﻫﺫﺍ ﺍﻟﻤﺜﺎل ،ﻭﺫﻟﻙ ﺴﻴﻜﻭﻥ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
و ﺑﻌﺪ ﺗﻨﻔﻴﺬ اﻟﺒﺮﻧﺎﻣﺞ ﺳﻮف ﺗﺨﺮج ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺨﺒﺮﻧﺎ ﻋﻦ ﻋﺪد اﻻﻣﺘﺤﺎﻧﺎت اﻟﺘﻲ ﻗﺎم اﻟﻄﺎﻟﺐ ﻓﻲ
ﺗﻘﺪﻳﻤﻬﺎ ،و ﻣﻦ ﺛﻢ ﺗﻄﻠﺐ ﻣﻨﺎ درﺟﺔ ﻋﻼﻣﺔ ﻛﻞ اﻣﺘﺤﺎن ،و ﺑﻌﺪ ذﻟﻚ ﺳﻴﺨﺮج ﻟﻨﺎ اﻟﺒﺮﻧﺎﻣﺞ
ﻣﺠﻤﻮع ﻣﺘﻮﺳﻂ اﻟﻌﻼﻣﺎت اﻟﻤﺪﺧﻠﺔ ،و ذﻟﻚ ﺳﻴﻜﻮن ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
١٣٤
ﻓﻲ ﻫﺬا اﻟﺒﺮﻧﺎﻣﺞ ﻟﻢ ﻧﻈﻒ أي ﺷﻲء ﺟﺪﻳﺪ ﻏﻴﺮ إﺿﺎﻓﺔ اﻟﻤﺘﻐﻴﺮ numberو وﻇﻴﻔﺘﻪ ﻋﻠﻰ
اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
ﻳﺄﺧﺬ ﻣﻦ اﻟﻄﺎﻟﺐ ﻋﺪد اﻻﻣﺘﺤﺎﻧﺎت اﻟﺘﻲ ﻗﺎم ﻓﻲ إدﺧﺎﻟﻬﺎ اﻟﻄﺎﻟﺐ ،و ﻣﻦ ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﻳﻤﺮر
اﻟﻤﺘﻐﻴﺮ numberاﻟﻘﻴﻤﺔ اﻟﻤﺪﺧﻠﺔ إﻟﻰ ﺷﺮط إﺳﺘﻤﺮار ﺟﻤﻠﺔ اﻟﺘﻜﺮار whileو ﻫﻨﺎ ﻳﻨﺘﻬﻲ
ﻋﻤﻞ اﻟﻤﺘﻐﻴﺮ numberداﺧﻞ ، while
أﻣﺎ ﻋﻤﻠﻪ ﺑﻌﺪ اﻟﺠﻤﻠﺔ whileﻓﻬﻮ ﻋﺒﺎرة ﻋﻦ ﺗﻤﺮﻳﺮ ﻗﻴﻤﺘﻪ إﻟﻰ اﻟﻤﻌﺎدﻟﺔ اﻟﺘﺎﻟﻴﺔ
Sum=total_grade/number
و ﻫﺬا ﻫﻮ ﻛﻞ ﺑﺮﻧﺎﻣﺠﻨﺎ.
١٣٥
ﻤﺜﺎل :٥
ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﻤﺎ ﻫﻭ ﺇﻻ ﻋﺒﺎﺭﺓ ﻋﻥ ﺘﻁﻭﻴﺭ ﺒﺴﻴﻁ ﻟﻠﻤﺜﺎل ﺍﻷﺴﺎﺴﻲ ﻓﻲ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻭ ﺍﻟﺫﻱ
ﺘﺩﻭﺭ ﻓﻜﺭﺘﻪ ﺤﻭل ﺘﻘﺩﻴﻡ ﻁﻠﺏ ﺍﻨﺘﺴﺎﺏ ﻟﻠﺠﺎﻤﻌﺔ.
ﻓﻔﻲ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ ﺴﻨﻁﻭﺭ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
-١ﺘﺤﺩﻴﺩ ﻋﺩﺩ ﺍﻟﻁﻼﺏ ﺍﻟﻤﻨﺘﺴﺒﻴﻥ ﺇﻟﻰ ﻜل ﻜﻠﻴﺔ ﻤﻥ ﻜﻠﻴﺎﺕ ﺍﻟﺠﺎﻤﻌﺔ ،ﺤﻴﺙ ﺃﻨﻪ ﻤﻥ
ﺍﻟﻤﻌﻠﻭﻡ ﺃﻥ ﻜل ﻜﻠﻴﺔ ﺘﺴﺘﻁﻴﻊ ﺍﺴﺘﻴﻌﺎﺏ ﻋﺩﺩ ﻤﺤﺩﺩ ﻤﻥ ﺍﻟﻁﻼﺏ.
)ﻭ ﺴﻨﺤﺩﺩ ﻨﺤﻥ ﻫﻨﺎ ﻓﺭﻀﺎﹰ ٣ﻁﻼﺏ ﻟﻜل ﻜﻠﻴﺔ ﻭ ﺫﻟﻙ ﻟﻼﺨﺘﺼﺎﺭ ﻓﻘﻁ(
-٢ﺇﺨﺭﺍﺝ ﺭﺴﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺘﺨﺒﺭﻨﺎ ﺒﺎﻜﺘﻤﺎل ﻋﺩﺩ ﺍﻟﻁﻼﺏ ﺍﻟﻤﻨﺘﺴﺒﻴﻥ ﺇﻟﻰ ﺍﻟﻜﻠﻴﺔ ﻭ ﻤﻥ
ﺜﻡ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ.
١٣٦
:ﻛﻮد اﻟﺒﺮﻧﺎﻣﺞ
# include <iostream.h>
main()
{
int n;
int number_student=1; // while ﺷﺮط اﺳﺘﻤﺮار ﺟﻤﻠﺔ اﻟﺘﻜﺮار
cout<<"\n\n";
cout<<"\t\t\t ***************************** \n";
cout<<"\t\t\t *** Welcome to University *** \n";
cout<<"\t\t\t ***************************** \n\n\n";
cout<<" \t 1- to enter Faculty Of Information Technology
Computer .\n";
cout<<" \t 2- to enter Faculty Machine .\n";
cout<<" \t 3- to EXIT .\n";
start_menu:
cin>>n;
switch (n)
{
case 1:
cout<<"\t\t\t ***********************\n";
cout<<"\t\t\t *** Faculty Computer ***\n";
cout<<"\t\t\t ***********************\n";
while(number_student<=3)
{
number_student++;
int grade;
float grmath;
١٣٧
if(grade>=65)
{
cout<<"welcome to University "<<">>"<<"\t student
number:"<<number_student-1<<endl<<endl;
}
else
{
if(grade<50)
{
cout<<"Ecxuse! your grade less than 50!\n";
return 0;
}
cout<<"excuse your grade less than 70!:\n";
cout<<"But how your grade int the mathmatic!:\n";
cout<<"enter the grade mathmatic:\n";
cin>>grmath;
else
{
cout<<"Ecxuse! your grade less than 70!
\n";
cout<<"and ecxuse your grade mathmatic
less than 80\n";
}
}
١٣٨
cout<<"\t\t\t\t^^^^^^^^^^^^^^^^^\n";
cout<<"\t\t\t\t calss is full\n\n";
cout<<"\t\t\t\t^^^^^^^^^^^^^^^^^\n";
break;
case 2:
cout<<"\t\t\t **********************\n";
cout<<"\t\t\t *** Faculty machin ***\n";
cout<<"\t\t\t **********************\n";
while(number_student<=3)
{
number_student++;
int grade_machine;
float grphiysic_machine;
if(grade_machine>=65)
{
cout<<"welcome to University "<<">>"<<"\tstudent
number:"<<number_student-1<<endl<<endl;
}
else
{
if(grade_machine<50)
{
cout<<"Ecxuse! your grade less than 50!\n";
return 0;
}
cout<<"excuse your grade less than 65!:\n";
cout<<"But how your grade int the phiysic!:\n";
١٣٩
else
{
cout<<"Ecxuse! your grade less than 65! \n";
cout<<"and ecxuse your grade grphiysic less
than 70\n";
}
}
}
cout<<"\t\t\t\t^^^^^^^^^^^^^^^^^\n";
cout<<"\t\t\t\t calss is full\n\n";
cout<<"\t\t\t\t^^^^^^^^^^^^^^^^^\n";
break;
case 3:
return 0;
break;
default:
cout<<"erorr? enter agin\n\n";
goto start_menu;
break;
}
return 0;
}
١٤٠
ﻣﺮﺣﻠﺔ اﻟﺘﻨﻔﻴﺬ:
ﺑﻌﺪ ﺗﻨﻔﻴﺬ اﻟﺒﺮﻧﺎﻣﺞ ﻗﻤﺖ ﻓﻲ اﻟﺒﺪاﻳﺔ ﻓﻲ اﺧﺘﻴﺎر رﻗﻢ واﺣﺪ و اﻟﺬي ﻫﻮ ﻋﺒﺎرة ﻋﻦ ﻛﻠﻴﺔ
اﻟﻜﻤﺒﻴﻮﺗﺮ .و ذﻟﻚ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
١٤١
أو ﺑﺎﺧﺘﻴﺎرك ﻟﺮﻗﻢ ٢ﻛﻠﻴﺔ اﻟﻤﻴﻜﺎﻧﻴﻚ .و ذﻟﻚ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
١٤٢
ﺳﺄﻗﻮم ﻓﻲ ﺷﺮح اﻷﺳﻄﺮ ذات اﻟﻠﻮن اﻷﺣﻤﺮ ﻓﻘﻂ ،و ذﻟﻚ ﻟﻶن ﺑﻘﻴﺔ أﺳﻄﺮ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻌﺮوﻓﺔ
و ﻗﺪ ﺷﺮﺣﺖ ﻣﻦ ﻗﺒﻞ.
;int number_student=1
ﻗﻤﻨﺎ ﻓﻲ إﻧﺸﺎء ﻣﺘﻐﻴﺮ number_studentﻣﻦ أﺟﻞ ﺷﺮط ﺟﻤﻠﺔ اﻟﺘﻜﺮار whileو ﻫﻮ ﻫﻨﺎ
ﻳﻘﻮم ﺑﻮﻇﻴﻔﺔ ﻋﺪاد ﻟﺤﺴﺎب ﻋﺪد اﻟﻄﻼب اﻟﻤﻨﺘﺴﺒﻴﻦ.
ﺳﺆال:
ﻟﻤﺎذا ﻗﻤﻨﺎ ﻓﻲ إﻋﻄﺎء اﻟﻤﺘﻐﻴﺮ number_studentﻗﻴﻤﺔ اﺑﺘﺪاﺋﻴﺔ واﺣﺪ و ﻟﻴﺲ ﺻﻔﺮ؟
)while(number_student<=3
{
;number_student++
ﻓﻬﻲ ﻛﻤﺎ ﺗﺮون ﻋﺒﺎرة ﻋﻦ ﺟﻤﻠﺔ اﻟﺘﻜﺮار whileﻟﺘﻘﻮم ﻓﻲ ﻋﻤﻠﻴﺔ إﻋﺎدة و ﺗﻜﺮار ﻃﻠﺐ
اﻻﻧﺘﺴﺎب ﻣﺎ دام اﻟﺸﺮط اﻟﻤﻮﺟﻮد داﺧﻞ اﻟﻘﻮﺳﻴﻦ اﻟﺬﻳﻦ ﻳﻠﻴﻦ whileﻣﺤﻘﻖ .
أﻣﺎ number_studentﻓﻬﻮ ﻋﺒﺎرة ﻋﻦ ﺷﺮط ﺗﻨﻔﻴﺬ ﺗﻜﺮار اﻟﺠﻤﻠﺔ whileو اﻟﺬي ﻫﻮ ﻫﻨﺎ
إﻳﻘﺎف ﺗﻨﻔﻴﺬ ﻋﻤﻞ whileﻋﻨﺪﻣﺎ ﻳﻜﺘﻤﻞ ﻋﺪد اﻟﻄﻼب إﻟﻰ ٣ﻃﻼب
أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ number_student++ﻓﻬﻲ ﻋﺒﺎرة ﻋﻦ إﺿﺎﻓﺔ واﺣﺪ ﻛﻞ ﻣﺮة ﻳﺘﻢ ﺗﻨﻔﻴﺬ
ﻓﻴﻬﺎ اﻟﺠﻤﻠﺔ while
أﻣﺎ اﻟﺘﻌﻠﻴﻤﺔ اﻟﺘﺎﻟﻴﺔ ﻓﻬﻲ ﻋﺒﺎرة ﻋﻦ إﺧﺮاج ﻋﻠﻰ اﻟﺸﺎﺷﺔ رﻗﻢ اﻟﻄﺎﻟﺐ اﻟﻤﻨﺘﺴﺐ إﻟﻰ اﻟﺠﺎﻣﻌﺔ
١٤٣
أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﺘﻌﻠﻴﻤﺎت ذات اﻟﻠﻮن اﻷﺣﻤﺮاﻟﺘﻲ ﺑﺪاﺧﻞ case 2:ﻓﻬﻲ ﻧﻔﺲ اﻟﺸﻲء ﺑﺎﻟﻨﺴﺒﺔ
إﻟﻰ case 1:و ﻻ ﻳﻮﺟﺪ أي اﺧﺘﻼف ﺑﻴﻨﻬﻤﺎ .
١٤٤
و ﻫﻲ اﻟﺠﻤﻠﺔ اﻷﺧﻴﺮة ﻣﻦ ﺟﻤﻠﺔ اﻟﺤﻠﻘﺎت loopﻓﻲ ﻟﻐﺔ ،C++و ﻓﻲ اﻟﺤﻘﻴﻘﺔ ﻳﻮﺟﺪ ﺷﺒﻪ ﺑﻴﻦ
اﻟﺠﻤﻠﺔ whileو اﻟﺠﻤﻠﺔ do/whileﻣﻦ ﺣﻴﺚ ﻣﺒﺪأ اﻟﻌﻤﻞ و اﻟﺒﻨﻴﺔ ،ﻣﻊ وﺟﺪود ﺑﻌﺾ
اﻻﺧﺘﻼﻓﺎت أﻳﻀﺎ ً ﻣﻦ ﺣﻴﺚ ﻣﺒﺪأ اﻟﻌﻤﻞ و ﺗﺮﻛﻴﺐ اﻟﺠﻤﻠﺔ ،و ﺳﻨﺮى ﻧﻘﻂ اﻟﺘﺸﺎﺑﻪ و اﻻﺧﺘﻼف
ﺑﻴﻨﻬﻤﺎ و ذﻟﻚ ﺑﻌﺪ اﻟﺘﻌﺮف ﻋﻠﻰ ﺗﺮﻛﻴﺐ ﺑﻨﻴﺔ . do/while
do
{
statement
}
;)while(condition
١٤٥
و ﻻﺣﻆ ﻣﻌﻲ أﺧﻲ اﻟﻜﺮﻳﻢ ﻣﻜﺎن ﺗﻮﺿﻊ ﺷﺮط اﻟﺘﻜﺮار و ﺟﺴﻢ اﻟﺠﻤﻠﺔ ﻓﻲ do/while
و ﻗﺎرن ذﻟﻚ ﻓﻲ ﻣﻜﺎن ﺗﻮﺿﻊ ﺷﺮط اﻟﺘﻜﺮار وﺟﺴﻢ اﻟﺠﻤﻠﺔ ﺑﺎﻟﻨﺴﺒﺔ إﻟﻰ اﻟﺠﻤﻠﺔ .while
١٤٦
و اﻟﻔﺮق ﺑﻴﻦ whileو do/whileﻫﻮ أﻧﻪ ﻓﻲ اﻷﺧﻴﺮة ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺟﺴﻢ اﻟﺠﻤﻠﺔ do/while
ﻣﺮة و اﺣﺪة ﻋﻠﻰ اﻷﻗﻞ و ذﻟﻚ ﻋﻠﻰ ﻋﻜﺲ اﻟﺠﻤﻠﺔ whileﻓﻤﻦ اﻟﻤﻤﻜﻦ ﻋﺪم ﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺎﺗﻬﺎ
ﺣﺘﻰ و ﻻ ﻣﺮة واﺣﺪة إذا ﻟﻢ ﻳﺘﺤﻘﻖ ﺷﺮط اﻟﺘﻜﺮار.
ﻭ ﺤﺘﻰ ﻴﺘﻀﺢ ﻟﻙ ﻤﻔﻬﻭﻡ ﻋﻤل ﺍﻟﺠﻤﻠﺔ do/whileﻓﻼ ﺒﺩ ﻤﻥ ﺩﻋﻡ ﺍﻟﻜﻼﻡ ﺍﻟﻨﻅﺭﻱ ﺍﻟﺴﺎﺒﻕ
ﺒﺎﻷﻤﺜﻠﺔ ﻟﻜﻲ ﺘﺴﺎﻋﺩﻙ ﻋﻠﻰ ﺍﺴﺘﻴﻌﺎﺏ ﻋﻤل ﻫﺫﻩ ﺍﻟﺠﻤﻠﺔ.
١٤٧
ﻤﺜﺎل :١
ﺃﺨﺭﺍﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻷﻋﺩﺍﺩ ﻤﻥ ﻭﺍﺤﺩ ﺇﻟﻰ ﻋﺸﺭﺓ ﻤﻥ ﺍﻟﺠﻤﻠﺔ do/while
ﺍﻟﺤل:
١٤٨
ﻤﻼﺤﻅﺎﺕ ﺠﻴﺩﺓ:
-١ﻋﺩﻡ ﻭﻀﻊ ﺍﻟﻔﺎﺼﻠﺔ ﺍﻟﻤﻨﻘﻭﻁﺔ ﺒﻌﺩ ﺍﻟﻘﻭﺴﻴﻥ ﺍﻟﻭﺍﻗﻌﻴﻥ ﺒﻌﺩ whileﻴﺴﺒﺏ ﺨﻁﺄ ﺃﺜﻨﺎﺀ
ﻤﺭﺤﻠﺔ ﺍﻟﺘﺭﺠﻤﺔ ﻭﺴﻴﺨﺭﺝ ﻟﻙ ﺨﻁﺄ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
'error C2143: syntax error : missing ';' before 'return
ﻭ ﻁﺒﻌﺎ ً ﻫﺫﺍ ﺍﻟﺸﻜل ﻟﻴﺱ ﺠﺒﺭﻴﺎ ً ﻭ ﻓﺭﻀﻴﺎ ً ﻭ ﻟﻜﻥ ﺍﻟﻤﺒﺭﻤﺠﻭﻥ ﻴﺨﺘﻠﻔﻭﻥ ﻓﻲ ﻁﺭﻕ ﻜﺘﺎﺒﺔ
ﺃﻜﻭﺍﺩ ﺒﺭﺍﻤﺠﻬﻡ ﻭ ﺫﻟﻙ ﺘﺒﻌﺎ ً ﻟﻡ ﻴﺭﻯ ﺍﻟﻤﺒﺭﻤﺞ ﻫﻭ ﺒﻨﻔﺴﻪ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﻤﺜﻠﻰ ﻭ ﺍﻷﺴﻬل ﻟﻤﻜﺎﻥ
ﺘﻭﻀﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺩﺍﺨل ﺍﻟﺒﺭﻨﺎﻤﺞ.
ﻭ ﻟﻜﻥ ﻴﺭﺠﻰ ﺍﻟﻤﻼﺤﻅﺔ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ x++ﻴﺠﺏ ﺃﻥ ﺘﻜﺘﺏ ﺤﺼﺭﺍ ً ﺩﺍﺨل ﺠﺴﻡ ﺍﻟﺠﻤﻠﺔ
do/whileﻭ ﺇﻻ ﺃﻋﺘﺒﺭ ﺫﻟﻙ ﺨﻁﺄ ﻗﻭﺍﻋﺩﻴﺎ ً.
ﻭ ﺃﺭﺠﻭﺍ ﺍﻻﻨﺘﺒﺎﻩ ﺇﻟﻰ ﻤﻜﺎﻥ ﺘﻭﻀﻊ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﻤﺘﻐﻴﺭ ﻓﻲ ﺍﻟﺤﺎﻟﺘﻴﻥ :
ﺍﻟﺤﺎﻟﺔ ﺍﻷﻭﻟﻰ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﺍﻟﺘﻲ ﻜﺘﺒﺕ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ x++
ﻭ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻭ ﺍﻟﺘﻲ ﻜﺘﺒﺕ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ++x
ﻟﻤﺎﺫﺍ ﻓﻲ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻗﻤﻨﺎ ﻓﻲ ﻭﻀﻊ ﻋﻤﻠﻴﺔ ﺍﻟﺯﻴﺎﺩﺓ ﺒﻭﺍﺤﺩ ﺃﻤﺎﻤﻴﺔ ﻭ ﻟﻴﺱ ﺨﻠﻔﻴﺔ؟
ﻭ ﻫل ﺫﻟﻙ ﺴﻴﻐﻴﺭ ﻓﻲ ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ؟
ﺇﺫﺍ ﻜﺎﻨﺕ ﺍﻹﺠﺎﺒﺔ ﻨﻌﻡ ﻓﻠﻤﺎﺫﺍ؟
١٤٩
ﺤﺎﻭل ﺃﻥ ﺘﺠﻴﺏ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺴﺅﺍل ﻓﻲ ﻨﻔﺴﻙ ﻤﻥ ﺨﻼل ﻗﺭﺃﺘﻙ ﻟﻸﻨﻭﺍﻉ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺯﻴﺎﺩﺓ
ﺒﻭﺍﺤﺩ ﺍﻷﻤﺎﻤﻴﺔ ﻭ ﺍﻟﺨﻠﻔﻴﺔ !!!
ﻤﺜﺎل :٢
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻴﻘﻭﻡ ﻓﻲ ﻁﺒﻊ ﺍﻷﻋﺩﺍﺩ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ،ﺒﺤﻴﺙ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻫﻭ ﺍﻟﺫﻱ ﻴﺤﺩﺩ ﻫﺫﻩ
ﺍﻷﻋﺩﺍﺩ ﻤﻥ ﺃﻱ ﺭﻗﻡ ﺇﻟﻰ ﺃﻱ ﺭﻗﻡ.
ﺍﻟﺤل:
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﻻ ﻴﺨﻠﻑ ﻋﻥ ﺴﺎﺒﻘﻪ ﻜﺜﻴﺭﺍ ً ﻤﻥ ﺤﻴﺙ ﺍﻟﻤﺒﺩﺃ ﺍﻟﻌﻤل ﺤﻴﺙ ﺃﻨﻪ ﻴﺠﺏ
ﻋﻠﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﻜﺴﺎﺒﻘﺔ ﻁﺒﻊ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺃﻋﺩﺍﺩ ﻤﻥ ﺨﻼل ،do/whileﻭ
ﻨﻘﻁﺔ ﺍﻻﺨﺘﻼﻑ ﻫﻲ ﺃﻨﻪ ﻓﻲ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻫﻭ ﺍﻟﺫﻱ ﻴﺘﺤﻜﻡ ﻓﻲ ﺒﺩﺍﻴﺔ ﻭ ﻨﻬﺎﻴﺔ
ﺤﻠﻘﺔ ﺍﻟﺘﻜﺭﺍﺭ.
ﻭ ﻋﻠﻰ ﺫﻟﻙ ﻓﺈﻥ ﻜﻭﺩ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻻ ﻴﺨﺘﻠﻑ ﻋﻥ ﺴﺎﺒﻘﺔ ﺴﻭﻯ ﺃﻨﻪ ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻀﻴﻑ
ﻟﻜﻭﺩ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻤﺠﺭﻯ ﺩﺨل ﻭ ﺨﺭﺝ ﻤﻥ ﺃﺠل ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﺒﺩﺍﻴﺔ ﺤﻠﻘﺔ ﺍﻟﺘﻜﺭﺍﺭ ﻭ ﻨﻬﺎﻴﺔ.
ﻭ ﺫﻟﻙ ﺴﻴﻜﻭﻥ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
١٥٠
ﻭ ﺒﻌﺩ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺫ ﺴﻭﻑ ﺘﻅﻬﺭ ﻟﺩﻴﻨﺎ ﺸﺎﺸﺔ ﺴﻭﺩﺍﺀ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
ﻭﻅﻴﻔﺔ ﻤﻨﺯﻟﻴﺔ:
ﻻﺤﻅ ﻤﻌﻲ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ،ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﻜﺎﻨﺕ ﻨﻭﻉ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺘﻲ ﻗﻤﻨﺎ ﻓﻲ ﺇﺩﺨﺎﻟﻬﺎ ﻤﻥ
ﺍﻟﻨﻭﻉ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ .int
ﻗﻡ ﻓﻲ ﺘﻐﻴﺭ ﻨﻭﻉ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺤﻴﺙ ﻴﺼﺒﺢ ﺒﻤﻘﺩﻭﺭﻨﺎ ﺇﺩﺨﺎل ﺃﻋﺩﺍﺩ ﻋﺸﺭﻴﺔ ﺃﻱ ﺫﺍﺕ
ﻓﻭﺍﺼل؟
ﻭ ﺒﻌﺩ ﺍﻟﺘﻌﺩﻴل ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﺍﻟﻨﺘﻴﺠﺔ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
١٥١
ﻤﺜﺎل :٣
ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﻤﺎ ﻫﻭ ﺇﻻ ﻋﺒﺎﺭﺓ ﻋﻥ ﺍﻟﻤﺜﺎل ﺍﻟﺨﺎﻤﺱ ﻓﻲ ﺍﻟﺠﻤﻠﺔ whileﻭ ﺍﻟﺫﻱ ﺘﺩﻭﺭ ﻓﻜﺭﺘﻪ
ﺤﻭل ﺘﻁﻭﻴﺭ ﺒﺴﻴﻁ ﻟﻠﻤﺜﺎل ﺍﻷﺴﺎﺴﻲ ﻓﻲ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻭ ﺍﻟﺫﻱ ﺘﺩﻭﺭ ﻓﻜﺭﺘﻪ ﺤﻭل ﺘﻘﺩﻴﻡ ﻁﻠﺏ
ﺍﻨﺘﺴﺎﺏ ﻟﻠﺠﺎﻤﻌﺔ ﻭ ﺍﻟﻔﺭﻕ ﻫﻭ ﺃﻨﻪ ﺴﻨﻘﻭﻡ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻤﻥ ﺨﻼل .do/while
ﻓﻔﻲ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ ﺴﻨﻁﻭﺭ ﺒﺭﻨﺎﻤﺠﻨﺎ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ)ﻜﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ(:
-٣ﺘﺤﺩﻴﺩ ﻋﺩﺩ ﺍﻟﻁﻼﺏ ﺍﻟﻤﻨﺘﺴﺒﻴﻥ ﺇﻟﻰ ﻜل ﻜﻠﻴﺔ ﻤﻥ ﻜﻠﻴﺎﺕ ﺍﻟﺠﺎﻤﻌﺔ ،ﺤﻴﺙ ﺃﻨﻪ ﻤﻥ
ﺍﻟﻤﻌﻠﻭﻡ ﺃﻥ ﻜل ﻜﻠﻴﺔ ﺘﺴﺘﻁﻴﻊ ﺍﺴﺘﻴﻌﺎﺏ ﻋﺩﺩ ﻤﺤﺩﺩ ﻤﻥ ﺍﻟﻁﻼﺏ.
)ﻭ ﺴﻨﺤﺩﺩ ﻨﺤﻥ ﻫﻨﺎ ﻓﺭﻀﺎﹰ ٣ﻁﻼﺏ ﻟﻜل ﻜﻠﻴﺔ ﻭ ﺫﻟﻙ ﻟﻼﺨﺘﺼﺎﺭ ﻓﻘﻁ(
-٤ﺇﺨﺭﺍﺝ ﺭﺴﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺘﺨﺒﺭﻨﺎ ﺒﺎﻜﺘﻤﺎل ﻋﺩﺩ ﺍﻟﻁﻼﺏ ﺍﻟﻤﻨﺘﺴﺒﻴﻥ ﺇﻟﻰ ﺍﻟﻜﻠﻴﺔ ﻭ ﻤﻥ
ﺜﻡ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ.
ﺍﻟﺤل:
ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻟﻡ ﺃﻗﻡ ﻓﻲ ﺫﻟﻙ ﺍﻟﺘﻐﻴﺭ ﺍﻟﻜﺒﻴﺭ ﺴﻭﻯ ﺃﻨﻲ ﻗﻤﺕ ﻓﻲ ﻭﻀﻊ ﺍﻟﺠﻤﻠﺔ do/while
ﻤﻜﺎﻥ ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ ،whileﻭ ﻫﺫﺍ ﻫﻭ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩ ﺍﻟﺘﻌﺩﻴل ،ﻭ ﻻﺤﻅ ﺍﻟﻔﺭﻕ ﺒﻴﻥ
ﺍﻟﻁﺭﻴﻘﺘﻴﻥ ﺍﻟﺘﻲ ﻜﺘﺏ ﻓﻴﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻥ ﺨﻼل whileﻭ ﺍﻟﺠﻤﻠﺔ .do/while
١٥٢
١٥٣
١٥٤
ﻤﺜﺎل :٤
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻴﻁﻠﺏ ﻤﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﺩﺨﺎل ﻋﺩﺩ ﻤﻌﻴﻥ ﻤﻥ ﺍﻷﺤﺭﻑ ﺍﻷﻨﻜﻠﻴﺯﻴﺔ ﻻ ﻋﻠﻰ
ﺍﻟﺘﻌﻴﻥ ﻭ ﻴﺠﺏ ﻋﻠﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺃﻥ ﻴﻨﻔﺫ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻗﺒل ﻋﻤﻠﻴﺔ ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ:
-١ﺤﺴﺎﺏ ﻋﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﻤﺩﺨﻠﺔ ﻤﻥ ﺍﻟﻨﻭﻉ .A
-٢ﺤﺴﺎﺏ ﻋﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﻤﺩﺨﻠﺔ ﻤﻥ ﺍﻟﻨﻭﻉ .B
-٣ﺤﺴﺎﺏ ﻋﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﻤﺩﺨﻠﺔ ﻤﻥ ﺍﻟﻨﻭﻉ .C
-٤ﺤﺴﺎﺏ ﺍﻟﻤﺠﻤﻭﻉ ﺍﻟﻜﻠﻲ ﻟﻸﺤﺭﻑ ﺍﻟﻤﺩﺨﻠﺔ.
-٥ﺍﺨﺘﻴﺎﺭ ﺍﻟﺤﺭﻑ Xﻟﻠﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ .ﻤﻊ ﺍﻷﺨﺫ ﺒﻌﻴﻥ ﺍﻟﻨﻅﺭ ﺃﻥ Xﻻ ﺘﻌﺘﺒﺭ
ﻤﻥ ﺍﻷﺤﺭﻑ ﺍﻟﻤﺩﺨﻠﺔ ،ﺒل ﺤﺭﻑ ﻤﻥ ﺃﺠل ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻘﻁ.
ﺍﻟﺤل:
ﺃﻋﺘﻘﺩ ﻓﻲ ﺭﺃﻱ ﺍﻟﺨﺎﺹ ﻗﺒل ﺃﻥ ﻨﺒﺩﺃ ﻓﻲ ﺤل ﺍﻟﻤﺴﺄﻟﺔ ﻭ ﺍﻟﻤﺒﺎﺸﺭﺓ ﻓﻲ ﻜﺘﺎﺒﺔ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﺃﻥ ﻨﺤﺎﻭل ﻓﻬﻡ ﻨﺹ ﺍﻟﻤﺴﺄﻟﺔ ﻭ ﻤﺎ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻨﺎ ﻋﻤﻠﻪ ﻓﻲ ﻫﺫﺍ
ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻓﺈﺫﺍ ﻗﻤﺕ ﺒﺘﻠﻙ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺒﺴﻴﻁﺔ ﻭ ﺍﺴﺘﻭﻋﺒﺕ ﻨﺹ ﺍﻟﻤﺴﺄﻟﺔ ﻭ ﻤﺎ ﺍﻟﻤﻁﻠﻭﺏ
ﻤﻨﻙ ﻓﺄﻨﺎ ﺃﺒﺸﺭﻙ ﺒﺄﻨﻙ ﻗﺩ ﻗﻤﺕ ﻓﻲ ﺤل %٥٠ﻤﻥ ﺍﻟﻤﺴﺄﻟﺔ ﺃﻱ ﻨﺼﻑ ﺍﻟﻤﺴﺄﻟﺔ ﻗﺩ ﺤﻠﺕ ﻭ
ﻟﻡ ﻴﺒﻘﻰ ﺴﻭﻯ ﺍﻟﻨﺼﻑ ﺍﻷﺨﺭ ﻭ ﺍﻟﺫﻱ ﻓﻲ ﺘﺼﻭﺭﻱ ﺒﺄﻨﻪ ﺴﻴﻜﻭﻥ ﺃﺴﻬل ﻤﻥ ﺍﻟﻨﺼﻑ ﺍﻷﻭل.
ﻭ ﺃﻗﺩﻡ ﻨﺼﻴﺤﺔ ﻟﻸﺨﻭﺓ ﺍﻟﻤﺒﺭﻤﺠﻭﻥ ﻭ ﻫﺫﻩ ﻤﻥ ﻭﺠﻬﺕ ﻨﻁﺭﻱ ﺍﻟﺨﺎﺼﺔ:
ﻗﺒل ﺍﻟﺒﺩﺀ ﻓﻲ ﻜﺘﺎﺒﺔ ﻜﻭﺩ ﺃﻱ ﺒﺭﻨﺎﻤﺞ ﺴﻭﺍﺀ ﺃﻜﺎﻥ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻨﻙ ﻫﻭ ﻟﻴﺱ ﺒﺎﻟﻜﺜﻴﺭ ﺃﻭ ﺒﺎﻟﻜﺜﻴﺭ
ﺤﺎﻭل ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻗﺭﺃﺓ ﻨﺹ ﺍﻟﻤﺴﺄﻟﺔ ﺠﻴﺩﺍ ً ﻭ ﺍﺴﺘﻴﻌﺎﺏ ﻤﺎ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻨﻙ ،ﻭ ﺤﺒﺫﺍ ﻟﻭ ﻜﺎﻥ
ﻓﻲ ﻴﺩﻙ ﻭ ﺭﻗﺔ ﻭ ﻗﻠﻡ ﺘﺩﻭﻥ ﺍﻟﻨﻘﺎﻁ ﺍﻟﻤﻁﻠﻭﺏ ﻋﻤﻠﻬﺎ ﻤﻨﻙ ﻭ ﻻ ﻤﻨﺎﻉ ﻤﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺭﺴﻡ
ﻓﻲ ﺫﻟﻙ ﻤﺜل ﺭﺴﻡ ﺍﻟﻤﺨﻁﻁﺎﺕ ﺍﻟﺘﻭﻀﻴﺤﻴﺔ ﺃﻭ ﻤﺎ ﺸﺎﺒﻪ ﺫﻟﻙ .ﻭ ﺍﻟﻬﺩﻑ ﻤﻥ ﻭﺭﺍﺀ ﺫﻟﻙ ﻫﻭ
ﺘﻜﻭﻴﻥ ﻓﻜﺭﺓ ﻭ ﺼﻭﺭﺓ ﻋﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﺴﺘﻘﻭﻡ ﻓﻲ ﻋﻤﻠﻪ.
١٥٥
١٥٦
١٥٧
}
;)'}while(ch!='x
١٥٨
ﻗﻤﺕ ﻓﻲ ﺇﺩﺨﺎل ﺃﺭﺒﻊ ﺤﺭﻭﻑ A :ﻤﺭﺓ ﻭﺍﺤﺩﻩ ﻭ ﻜﺫﻟﻙ ﺍﻷﻤﺭ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﻭ Bﻭ Cﻭ D
ﻭ ﻤﺠﻤﻭﻉ ﺍﻷﺤﺭﻑ ﻫﻭ ٤ﺃﺭﺒﻊ ﺃﺤﺭﻑ،
١٥٩
ﻭﻻﻜﻥ ﻤﺎﺫﺍ ﺃﺨﺭﺝ ﻟﻨﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﻤﺠﻤﻭﻉ ﺍﻟﻜﻠﻲ ﻟﻌﺩﺩ ﺍﻷﺤﺭﻑ ﺍﻟﻤﺩﺨﻠﺔ؟
ﺍﻟﺠﻭﺍﺏ ﻫﻭ ١-ﻟﻤﺎﺫﺍ ؟
ﻟﻜﻲ ﻨﺠﻴﺏ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﺴﺅﺍل ﻴﺠﺏ ﻋﻠﻴﻨﺎ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻓﻬﻡ ﻤﺒﺩﺃ ﻋﻤل ﺍﻟﺠﻤل ﻭ ﺍﻟﺒﻨﻰ
ﺍﻟﻤﺘﺩﺍﺨﻠﺔ ،ﻓﻔﻲ ﺒﺭﻨﺎﻤﺠﻨﺎ ﺍﻟﺴﺎﺒﻕ ﻗﻤﻨﺎ ﻓﻲ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺠﻤﻠﺔ switchﻭ ﺍﻟﺘﻲ ﺘﻘﻊ ﺒﺩﺍﺨل
ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ .do/while
ﻭ ﻗﻤﺕ ﻓﻲ ﺭﺴﻡ ﻫﺫﻩ ﺍﻟﺼﻭﺭﺓ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻥ ﻤﻭﻗﻊ switchﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ .do/while
١٦٠
ﻭ ﻤﻥ ﺍﻟﻤﻌﺭﻑ ﺒﺄﻥ ﺍﻷﺏ ﻴﻭﺭﺙ ﺇﻟﻰ ﺍﺒﻨﻪ ﺒﻌﺽ ﺍﻟﺼﻔﺎﺕ ﻜﺎﻟﻁﻭل ﻭ ﻟﻭﻥ ﺍﻟﺸﻌﺭ...ﺍﻟﺦ
ﻭ ﺍﻟﻌﻜﺱ ﻏﻴﺭ ﺼﺤﻴﺢ ﻓﺎﻻﺒﻥ ﻻ ﻴﻭﺭﺙ ﺇﻟﻰ ﺃﺒﻴﻪ ﺼﻔﺎﺘﻪ ) ﻭ ﺘﻘﺒل ﻫﺫﺍ ﺍﻟﻜﻼﻡ ﻤﺒﺩﺃ ً ﻓﻘﻁ .
ﻭ ﺴﻭﻑ ﻨﺘﻌﺭﺽ ﺇﻟﻰ ﻫﺫﺍ ﺍﻟﻤﻭﻀﻭﻉ ﺒﺎﻟﺘﻔﺼﻴل ﺇﻥ ﺸﺎﺀ ﺍﷲ ﻓﻲ ﻓﺼل ﺍﻟﻭﻅﺎﺌﻑ
. ( Function
ﻭ ﻜﺫﻟﻙ ﺍﻷﻤﺭ ﺒﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﻤﺜﺎﻟﻨﺎ ،ﻓﻌﻨﺩﻤﺎ ﻗﻤﻨﺎ ﻓﻲ ﻜﺘﺎﺒﺔ ﺍﻟﻤﺘﻐﻴﺭ ch_number++ﺩﺍﺨل
switchﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﺘﻨﻔﻴﺫ ﺩﻭﺭ ﺍﻟﻤﺘﻐﻴﺭ ﺩﺍﺨل ) switchﺍﻻﺒﻥ( ﻓﻘﻁ! ﻭ ﻟﻡ ﻴﻘﻡ ﻓﻲ
ﺘﻨﻔﻴﺫﻩ ﺩﺍﺨل ﺠﻤﻠﺔ ﺍﻟﺘﻜﺭﺍﺭ do/whileﻭ ﻜﻤﺎ ﻫﻭ ﻤﻌﺭﻭﻑ ﻓﺈﻥ ﺍﻟﻤﺘﻐﻴﺭ
ch_number++ﻻ ﺩﻭﺭ ﻟﻪ ﺩﺍﺨل ،switch
ﻤﻤﺎ ﺃﺩﻯ ﺇﻟﻰ ﺇﻋﻁﺎﺀﻩ ﺍﻟﻘﻴﻤﺔ ﺼﻔﺭ ﺃﻱ ﻻ ﺸﻲﺀ.
ﻭ ﻟﻤﺎﺫﺍ ﻜﺎﻥ ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻟﻤﺠﻤﻭﻉ ﺍﻷﻋﺩﺍﺩ ﺍﻟﻜﻠﻲ ﻴﺴﺎﻭﻱ ١-؟
ﺫﻟﻙ ﺒﺴﺒﺏ ﺸﺭﻁ ﻨﺹ ﺍﻟﻤﺴﺄﻟﺔ )ﻤﺠﻤﻭﻉ ﻋﺩﺩ ﺍﻟﺤﺭﻭﻑ ١-ﺍﻟﺤﺭﻑ ( x
0–1=-1
ﺍﻟﺨﻼﺼﺔ:
ﺃﻥ ﺍﻷﻭﺍﻤﺭ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻭﺍﻗﻌﺔ ﻀﻤﻥ ) switchﺍﻻﺒﻥ( ﻓﺈﻨﻬﺎ ﺘﻨﻔﺫ ﻓﻘﻁ ﻀﻤﻥ ﺤﺩﻭﺩ
switchﻓﻘﻁ ﻭ ﻻ ﻴﺘﻌﺩﻯ ﺫﻟﻙ ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭ ﺍﻷﻭﺍﻤﺭ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ do/while
)ﺍﻷﺏ( ﻭ ﺍﻟﻌﻜﺱ ﻏﻴﺭ ﺼﺤﻴﺢ.
ﻭ ﻜﻤﺎ ﻗﻠﺕ ﺘﻘﺒل ﻤﻨﻲ ﻫﺫﺍ ﺍﻟﻜﻼﻡ ﻜﺒﺩﺍﻴﺔ ﻓﻘﻁ ،ﻭ ﻫﺩﻓﻲ ﻤﻥ ﻫﺫﺍ ﺍﻟﺸﺭﺡ ﻜﻠﻪ ﻫﻭ ﺇﻴﺼﺎل
ﻓﻜﺭﺓ ﻋﻤل ﺠﻤﻠﺔ ﺩﺍﺨل ﺠﻤﻠﺔ ﻭ ﻋﻼﻗﺔ ﺫﻟﻙ ﺒﺎﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻭﺍﻗﻌﺔ ﻀﻤﻥ ﺘﻠﻙ ﺍﻟﺠﻤل ﻭ
ﺴﻴﻜﻭﻥ ﻟﻨﺎ ﺤﺩﻴﺙ ﻤﻔﺼل ﺇﻥ ﺸﺎﺀ ﺍﷲ ﻋﻥ ﺘﻤﺭﻴﺭ ﺍﻟﻘﻴﻡ ﺒﻴﻥ ﺍﻟﺠﻤل ﻭ ﺍﻟﻭﺭﺍﺜﺔ ﻓﻲ
ﺍﻟﻔﺼﻭل ﺍﻟﻘﺎﺩﻤﺔ ﺒﻤﺸﻴﺌﺔ ﺍﻟﻤﻭﻟﻰ ﻋﺯ ﻭ ﺠل.
ﻭ ﻨﻬﺎﻴﺔ ﺃﺴﺄل ﺍﷲ ﻋﺯ ﻭ ﺠل ﺃﻥ ﻴﻜﻭﻥ ﻗﺩ ﻭﻓﻘﻨﻲ ﻓﻲ ﺸﺭﺡ ﺍﻟﺠﻤﻠﺔ do/while
ﻓﺈﻥ ﻜﻨﺕ ﻗﺩ ﺃﺤﺴﻨﺕﹸ ﻓﻲ ﺍﻟﺸﺭﺡ ﻭ ﻭﺼﻭل ﺍﻟﻔﻜﺭﺓ ﺇﻟﻴﻙ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ،ﻓﺈﻥ ﻫﺫﺍ ﻤﻥ ﻓﻀل
ﺭﺒﻲ ،ﻭ ﺇﻥ ﻟﻡ ﺃﻭﻓﻕ ﻓﻲ ﺫﻟﻙ ﻓﻬﺫﺍ ﻤﻤﺎ ﺫﻨﻭﺒﻲ ﻭ ﻤﻤﺎ ﻜﺴﺒﺕ ﻨﻔﺴﻲ ﻨﺴﺄل ﺍﷲ ﺍﻟﻌﺎﻓﻴﺔ.
١٦١
ﺍﻟﺘﻌﻠﻴﻤﺔ : break
ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻟﻴﺴﺕ ﺒﺎﻟﻐﺭﻴﺒﺔ ﻋﻠﻴﻙ ﺃﺨﻲ ﺍﻟﻘﺎﺭﺉ ﺇﻥ ﻜﻨﺕ ﻗﺭﺃﺕ ﺍﻟﺠﻤﻠﺔ .switch
ﻓﻬل ﺘﺫﻜﺭ ﺘﺭﻜﻴﺏ ﺍﻟﺠﻤﻠﺔ switchﻭ ﻓﺭﻭﻋﻬﺎ caseﻓﻘﺩ ﻜﺎﻥ ﻓﻲ ﻨﻬﺎﻴﺔ ﻜل caseﻨﻀﻊ
ﺍﻟﺘﻌﻠﻴﻤﺔ braekﻭ ﺫﻟﻙ ﻟﻺﻨﻬﺎﺀ ﺃﻭ ﺇﻴﻘﺎﻑ ﻋﻤل ﺫﻟﻙ ﺍﻟﻔﺭﻉ caseﺒﻌﺩ ﺍﻹﻨﺘﻬﺎﺀ ﻤﻥ ﺘﻨﻔﻴﺫ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻭﺠﻭﺩﺓ ﺩﺍﺨﻠﺔ.
ﻭ ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻫﺫﻩ ﻫﻲ ﻨﻔﺱ ﺍﻟﺘﻌﻠﻴﻤﺔ braekﺍﻟﺘﻲ ﺴﻭﻑ ﻨﻘﻭﻡ ﻓﻲ ﺩﺭﺍﺴﺘﻬﺎ ﺒﺈﺫﻥ ﺍﷲ ،ﻭ
ﻟﻜﻥ ﺍﻟﻔﺭﻕ ﻫﻨﺎ ﻫﻭ ﺃﻨﻪ ﺴﻨﻌﻤﻡ ﺍﺴﺘﻌﻤﺎل ﻫﺫﻩ ﺍﻟﺠﻤﻠﺔ ﻋﻠﻰ ﺒﻘﻴﺔ ﺍﻟﺠﻤل ﺍﻟﺘﻲ ﺴﺒﻕ ﺩﺭﺍﺴﺘﻬﺎ
) ( for,while,do/whileﻭ ﺴﻨﻭﻀﺢ ﺒﺈﺫﻥ ﺍﷲ ﻜﻴﻔﻴﺔ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻤﻊ ﺘﻠﻙ ﺍﻟﺠﻤل.
ﺘﺴﺘﺨﺩﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ breakﻤﻥ ﺇﺠل ﺍﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺠﻤﻠﺔ ﺍﻟﻭﺍﻗﻌﺔ ﻀﻤﻨﻬﺎ ﻓﻭﺭﺍ ً ،ﻟﻜﻲ ﻴﺘﺎﺒﻊ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩ ﺫﻟﻙ ﺘﻨﻔﻴﺫ ﺒﻘﻴﺔ ﺍﻷﻭﺍﻤﺭ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻭﺍﻗﻌﺔ ﺒﻌﺩﻫﺎ ﻤﺒﺎﺸﺭﺓ.
ﻭ ﻴﻤﻜﻨﻨﺎ ﺍﻟﻘﻭل ﺒﺸﻜل ﺃﺨﺭ ﺃﻨﻬﺎ ﺘﻐﻴﺭ ﻤﺠﺭﻯ ﺘﻨﻔﻴﺫ ﺠﻤل ﺍﺘﺨﺎﺫ ﺍﻟﻘﺭﺍﺭ ﻭ ﺠﻤل ﺍﻟﺘﻜﺭﺍﺭ.
ﻟﻨﺄﺨﺫ ﺒﻌﺽ ﺍﻷﻤﺜﻠﺔ ﺤﺘﻰ ﺘﺘﻜﻭﻥ ﻟﺩﻴﻙ ﺼﻭﺭﺓ ﻭ ﻤﻔﻬﻭﻡ ﺃﻭﺴﻊ ﺤﻭل ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ.
ﻤﺜﺎل :
ﻟﻨﻔﺭﺽ ﺃﻨﻪ ﻴﻭﺠﺩ ﻓﻲ ﺇﺤﺩﻯ ﺍﻟﻤﺸﺎﻓﻲ ﻋﺩﺩ ﻤﻥ ﺍﻟﻤﺭﺽ ﻻ ﻋﻠﻰ ﺍﻟﺘﻌﻴﻥ ﻓﻲ ﻏﺭﻓﺔ ﻭﺍﺤﺩﺓ ﻭ
ﻓﻲ ﻫﺫﻩ ﺍﻟﻐﺭﻓﺔ ﻴﻭﺤﺩ ﻁﺒﻴﺏ ﻭﺍﺤﺩ ،ﻭ ﻤﻥ ﺍﻟﺼﻌﺏ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﻁﺒﻴﺏ ﻤﺭﺍﻗﺒﺔ ﻫﺅﻻﺀ
ﺍﻟﻤﺭﻀﻰ ﺠﻤﻴﻌﺎ ً ﻓﻲ ﺃﻥ ﻭﺍﺤﺩ.
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻟﺘﺤﺫﻴﺭ ﺍﻟﻁﺒﻴﺏ ﺒﻭﺠﻭﺩ ﺨﻁﺭ ﻋﻠﻰ ﺤﻴﺎﺓ ﺇﺤﺩﻯ ﺍﻟﻤﺭﻀﻰ ﻭ ﺫﻟﻙ ﺒﺴﺒﺏ
ﺍﺭﺘﻔﺎﻉ ﺩﺭﺠﺔ ﺤﺭﺍﺭﺘﻪ ﺇﻟﻰ ) 39ﻭ ﻫﺫﻩ ﺍﻟﺩﺭﺠﺔ ﺘﻌﺘﺒﺭ ﺨﻁﺭﺓ ﻋﻠﻰ ﺤﻴﺎﺓ ﺍﻟﻤﺭﻴﺽ ﻤﻤﺎ
ﻴﺴﺘﺩﻋﻲ ﻤﺴﺎﻋﺩﺓ ﻋﺎﺠﻠﺔ ﻤﻥ ﺍﻟﻁﺒﻴﺏ ﻟﺘﺨﻔﻴﺽ ﺩﺭﺠﺔ ﺤﺭﺍﺭﺓ ﺍﻟﻤﺭﻴﺽ(
ﺒﺤﻴﺙ ﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﺘﺤﺫﻴﺭ ﻋﻠﻰ ﺸﻜل ﺼﻭﺕ ﺘﻨﺒﻴﺔ ﻴﺨﺭﺝ ﻤﻥ ﺠﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻭﺘﺭ.
ﻤﻊ ﺍﻟﻌﻠﻡ ﺃﻨﻪ ﻴﺘﻡ ﻗﻴﺎﺱ ﺩﺭﺠﺔ ﺤﺭﺍﺭﺓ ﺍﻟﻤﺭﻴﺽ ﺒﻔﺎﺭﻕ ﻨﺼﻑ ﺩﺭﺠﺔ ﻓﻲ ﻜل ﻤﺭﺤﻠﺔ.
١٦٢
ﺍﻟﺤل:
ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﺴﻭﻑ ﻨﻘﻭﻡ ﻓﻲ ﺤل ﺍﻟﻤﺴﺄﻟﺔ ﻋﻠﻰ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺜﻡ ﺒﻌﺩ ﺫﻟﻙ ﻨﻘﻭﻡ
ﺒﺘﺤﻭﻟﻬﺎ ﺇﻟﻰ ﺸﻴﻔﺭﺓ ﺒﺭﻨﺎﻤﺞ C++
ﻤﻥ ﺨﻼل ﻨﺹ ﺍﻟﻤﺴﺄﻟﺔ ﻨﻀﻊ ﺍﻟﻨﻘﺎﻁ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻤﻨﺎ ﻋﻤﻠﻬﺎ:
-١ﺒﺭﻨﺎﻤﺞ ﻴﻘﻭﻡ ﻓﻲ ﻗﻴﺎﺱ ﺩﺭﺠﺔ ﺤﺭﺍﺭﺓ ﺍﻟﻤﺭﻴﺽ ﺒﻔﺎﺭﻕ 0.5ﺩﺭﺠﺔ ﻜل ﻤﺭﺤﻠﺔ
-٢ﻋﻨﺩ ﻭﺼﻭل ﺩﺭﺠﺔ ﺤﺭﺍﺭﺓ ﺍﻟﻤﺭﻴﺽ ﺇﻟﻰ 39ﻴﺠﺏ ﻋﻠﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﺨﺭﺍﺝ ﺭﺴﺎﻟﺔ
ﺘﺤﺫﻴﺭ ﻋﻠﻰ ﺸﻜل ﺼﻭﺕ ﻴﺨﺭﺝ ﻤﻥ ﺍﻟﺠﻬﺎﺯ.
-٣ﻤﻥ ﺍﻟﻤﻌﻠﻭﻡ ﺃﻥ ﺍﻟﻤﺭﻴﺽ ﻴﺴﺘﻁﻴﻊ ﺘﺤﻤل ﺩﺭﺠﺔ ﺤﺭﺍﺭﺓ ﺘﺒﺩﺃ ﻤﻥ ٣٦ﺇﻟﻰ ٤٠ﻜﺤﺩ
ﺃﻗﺼﻰ
)ﺃﻨﺎ ﻟﺴﺕ ﻁﺒﻴﺒﺎ ً ﻟﻜﻲ ﺃﻋﻁﻴﻙ ﺩﺭﺠﺎﺕ ﺍﻟﺤﺭﺍﺭﺓ ﺍﻟﺘﻲ ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺭﺽ ﺘﺤﻤﻠﻬﺎ ﻜﺤﺩ ﺃﺩﻨﻰ
ﻭ ﺃﻗﺼﻰ ،ﻭ ﻟﻜﻨﻲ ﻗﻤﺕ ﻓﻲ ﺍﺴﺘﺸﺎﺭﺓ ﺒﻌﺽ ﺍﻷﻁﺒﺎﺀ ﻓﻲ ﺫﻟﻙ ﻭ ﺃﺨﺒﺭﻭﻨﻲ ﻜﺸﻜل ﻋﺎﻡ ﻋﻥ
ﺤﺩﻭﺩ ﺩﺭﺠﺔ ﺍﻟﺤﺭﺍﺭﺓ ﺍﻟﺘﻲ ﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺭﻴﺽ ﺘﺤﻤﻠﻬﺎ ،ﺇﻥ ﻜﻨﺕ ﺘﺭﻴﺩ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﺒﺸﻜل
ﺠﺩﻱ ﻓﻌﻠﻴﻙ ﺍﺴﺘﺸﺎﺭﺓ ﺍﻷﻁﺒﺎﺀ ﺒﺫﻟﻙ ﻟﻸﺨﺫ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﺩﻗﻴﻘﺔ ﻤﻨﻬﻡ (
ﻤﻥ ﺍﻟﻨﻘﺎﻁ ﺍﻟﺴﺎﺒﻘﺔ ﻨﻜﺘﺏ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭ ﺍﻟﺫﻱ ﺴﻴﻜﻭﻥ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
١٦٣
ﻭ ﺒﻌﺩ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﻋﺩﻡ ﻭﺠﻭﺩ ﺃﺨﻁﺎﺀ ﻓﻲ ﻜﻭﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻨﻘﻭﻡ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺴﻴﻜﻭﻥ
ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻋﻠﻰ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ:
ﻭ ﻻﺤﻅ ﻋﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ breakﺩﺍﺨل ﺍﻟﺠﻤﻠﺔ ،forﻭ ﻤﺎﺫﺍ ﺃﺜﺭﺕ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﻤﺠﺭﻯ
ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺎﺕ ) forﻤﻊ ﻤﻼﺤﻅﺔ ﻨﻬﺎﻴﺔ ﺸﺭﻁ ﺍﻟﺘﻜﺭﺍﺭ t<=40ﻭ ﻤﻘﺎﺭﻨﺔ ﺫﻟﻙ ﺒﺎﻟﺨﺭﺝ
ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ (
ﻭﺴﻭﻑ ﻨﻘﻭﻡ ﻓﻲ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ breakﻓﻲ ﻜﺜﻴﺭ ﻤﻥ ﺒﺭﺍﻤﺠﻨﺎ ﺍﻟﺘﻲ ﺴﻨﻜﺘﺒﻬﺎ ﻻﺤﻘﺎ ً ﻓﻲ
ﺍﻟﻤﻭﺍﻀﻴﻊ ﺍﻟﺘﻲ ﺴﻨﺘﺤﺩﺙ ﻋﻨﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻭل ﺍﻟﻘﺎﺩﻤﺔ ﺒﺈﺫﻥ ﺍﷲ ﻋﺯ ﻭ ﺠل.
ﻭ ﺍﻟﺨﻼﺼﺔ ﺃﻨﻲ ﺃﺭﻴﺩ ﻤﻨﻙ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﺃﻥ ﺘﺴﺘﻭﻋﺏ ﻭ ﺘﺩﺭﻙ ﻋﻤل ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻀﻤﻥ
ﺍﻟﺠﻤل ﺍﻷﺨﺭﻯ ) ( for,switch,while,do/whileﻭ ﺍﻻﺭﺘﺒﺎﻁ ﺒﻴﻨﻬﺎ ﻭ ﺒﻴﻥ if
ﻭ ﻻ ﺘﻨﺴﻰ ﺃﻥ ﺨﻴﺭ ﻤﻌﻠﻡ ﻟﻠﻐﺔ C++ﻫﻭ ﺃﻨﺕ ،ﻤﻥ ﺨﻼل ﺨﺒﺭﺘﻙ ﻭ ﺍﻟﺘﻲ ﺘﻌﺘﻤﺩ ﻋﻠﻰ ﻜﺜﺭﺓ
ﺍﻟﺘﻤﺎﺭﻴﻥ ﻭ ﺍﻷﻤﺜﻠﺔ ﺍﻟﺘﻲ ﺘﻘﻭﻡ ﻓﻲ ﺇﻴﺠﺎﺩﻫﺎ ﺃﻨﺕ ﺒﻨﻔﺴﻙ ﺜﻡ ﺘﻘﻭﻡ ﺒﺤﻠﻬﺎ ،ﻭﻫﺫﺍ ﺍﻷﻤﺭ ﻴﺘﻁﻠﺏ
ﺇﻟﻰ ﺠﻬﺩ ﻭ ﻭﻗﺕ .ﻭ ﻻ ﺘﻨﺴﻰ ﻤﻥ ﺴﺎﺭ ﻋﻠﻰ ﺍﻟﺩﺭﺏ ﻭﺼل.
١٦٤
ﺍﻟﺘﻌﻠﻴﻤﺔ : continue
ﺍﻟﺘﻌﻠﻴﻤﺔ continueﺘﺸﺒﻪ ﺃﻟﻰ ﺤﺩ ﻜﺒﻴﺭ ﺍﻟﺘﻌﻠﻴﻤﺔ breakﻤﻊ ﻭﺠﻭﺩ ﺒﻌﺽ ﺍﻻﺨﺘﻼﻑ
ﺒﻴﻨﻬﻤﺎ ﻤﻥ ﺤﻴﺙ ﻤﺒﺩﺃ ﺍﻟﻌﻤل.
ﻭﺠﻬﺔ ﺍﻟﺘﺸﺎﺒﺔ ﺒﻴﻥ breakﻭ continueﺃﻥ ﻟﻬﻤﺎ ﻨﻔﺱ ﺍﻟﻤﻭﻀﻊ ﺩﺍﺨل ﺍﻟﺠﻤل
) ( for,while,do/whileﻭ ﻟﻬﻤﺎ ﺃﻴﻀﺎ ً ﻨﻔﺱ ﺍﻟﺘﺄﺜﻴﺭ ﺩﺍﺨل ﻫﺫﻩ ﺍﻟﺠﻤل ،ﺇﻻ ﺃﻥ
ﺍﻟﺘﻌﻠﻴﻤﺔ continueﺘﺨﺘﻠﻑ ﻋﻥ breakﺒﺈﻥ ﺍﻟﺜﺎﻨﻴﺔ ﺘﻘﻭﻡ ﺒﺎﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺠﻤﻠﺔ ﻓﻭﺭﺍ ً
ﻟﻴﺘﺎﺒﻊ ﺒﻌﺩﻫﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺘﻨﻔﻴﺫ ﺍﻷﻭﺍﻤﺭ ﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻭﺍﻗﻌﺔ ﺒﻌﺩ ﺍﻟﺠﻤﻠﺔ ﺍﻟﻤﺘﻀﻤﻨﺔ
ﺍﻟﺘﻌﻠﻴﻤﺔ ، breakﺃﻤﺎ ﺍﻷﻭﻟﻰ ﻓﺘﻭﻗﻑ ﻋﻤل ﺍﻟﺠﻤﻠﺔ ﺍﻟﻭﺍﻗﻌﺔ ﻀﻤﻨﻬﺎ ﻋﻨﺩ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺫﻱ ﻨﺤﺩﺩﻩ
ﺜﻡ ﺘﻌﻭﺩ ﻤﻥ ﺠﺩﻴﺩ ﻟﺘﻨﻔﻴﺫ ﺒﻘﻴﺔ ﺃﻭﺍﻤﺭ ﺍﻟﺠﻤﻠﺔ ﺍﻟﻭﺍﻗﻌﺔ ﻀﻤﻨﻬﺎ ﺒﻌﺩ ﺍﻟﻨﻘﻁﺔ ﺍﻟﺘﻲ ﺘﻭﻗﻔﺕ ﻋﻨﺩﻫﺎ.
ﻫل ﺘﺸﺎﺒﻜﺕ ﻋﻠﻴﻙ ﺍﻷﻤﻭﺭ ﻻ ﺘﻘﻠﻕ ﺴﻭﻑ ﺃﻗﻭﻡ ﺒﺘﻭﻀﻴﺢ ﻫﺫﻩ ﺍﻟﻔﻜﺭﺓ ﻤﻥ ﺨﻼل ﺍﻷﻤﺜﻠﺔ ﻭ
ﻟﻜﻥ ﻓﻲ ﺍﻟﺒﺩﺍﻴﺔ ﻗﻤﺕ ﻓﻲ ﺇﻨﺸﺎﺀ ﺸﻜل ﺭﺴﻤﻲ ﺘﻭﻀﻴﺤﻲ ﻟﻜل ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ breakﻭ
continueﺩﺍﺨل ﺍﻟﺠﻤﻠﺔ forﺤﺘﻰ ﻴﺘﻜﻭﻥ ﻟﺩﻴﻙ ﻤﻔﻬﻭﻡ ﺃﻭﺴﻊ ﺤﻭل ﻜﻴﻔﻴﺔ ﻤﺒﺩﺃ ﻋﻤﻠﻬﻤﺎ
١٦٥
١٦٦
ﻭ ﻟﻨﺄﺨﺫ ﻤﺜﺎﻟﻴﻥ ﻟﻜل ﻤﻥ breakﻭ continueﻟﻨﻭﻀﺢ ﺍﻟﻔﺭﻕ ﺒﻴﻥ ﻋﻤل ﻫﺎﺘﻴﻥ ﺍﻟﺘﻌﻠﻴﻤﻴﺘﻴﻥ
ﻭ ﺍﻟﻤﺜﺎل ﺍﻷﻭل ﺴﻴﻜﻭﻥ ﺘﻭﻀﻴﺢ ﻟﻌﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ .break
ﻤﺜﺎل :١
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻴﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻷﻋﺩﺍﺩ ﻤﻥ ١ﺇﻟﻰ ٥ﺒﺸﻜل ﺘﻜﺭﺍﺭ ﺘﺼﺎﻋﺩﻱ ﻭ ﺫﻟﻙ
ﻤﻥ ﺨﻼل ﺍﻟﺠﻤﻠﺔ ،forﺜﻡ ﺒﻌﺩ ﺫﻟﻙ ﻗﻡ ﻓﻲ ﺇﺩﺨﺎل ﺍﻟﺘﻌﻠﻴﻤﺔ breakﻓﻲ ﺤﺎل ﺇﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﺔ
ﺍﻟﻤﺘﻐﻴﺭ ﺘﺴﺎﻭﻱ ، ٣ﻭ ﻻﺤﻅ ﺫﻟﻙ ﻋﻠﻰ ﺘﺄﺜﻴﺭ ﻤﺠﺭﻯ ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ.
ﺍﻟﺤل:
١٦٧
ﻤﺜﺎل :٢
ﺃﻜﺘﺏ ﺒﺭﻨﺎﻤﺞ ﻴﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺍﻷﻋﺩﺍﺩ ﻤﻥ ١ﺇﻟﻰ ٥ﺒﺸﻜل ﺘﻜﺭﺍﺭ ﺘﺼﺎﻋﺩﻱ ﻭ ﺫﻟﻙ
ﻤﻥ ﺨﻼل ﺍﻟﺠﻤﻠﺔ ،forﺜﻡ ﺒﻌﺩ ﺫﻟﻙ ﻗﻡ ﻓﻲ ﺇﺩﺨﺎل ﺍﻟﺘﻌﻠﻴﻤﺔ continueﻓﻲ ﺤﺎل ﺇﺫﺍ ﻜﺎﻨﺕ
ﻗﻴﻤﺔ ﺍﻟﻤﺘﻐﻴﺭ ﺘﺴﺎﻭﻱ ، ٣ﻭ ﻻﺤﻅ ﺫﻟﻙ ﻋﻠﻰ ﺘﺄﺜﻴﺭ ﻤﺠﺭﻯ ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ.
ﺍﻟﺤل:
١٦٨
ﻭ ﻻﺤﻅ ﻤﻌﻲ ﺃﺨﻲ ﺍﻟﻜﺭﻴﻡ ﺍﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﻟﻠﻤﺜﺎل ﺍﻷﻭل ) ( braekﺤﻴﺙ ﺒﺩﺃ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻲ ﺘﻨﻔﻴﺫ ﺤﻠﻘﺕ ﺍﻟﺘﻜﺭﺍﺭ ﻟﻠﺠﻤﻠﺔ forﻤﻥ ﺍﻟﻌﺩﺩ ١ﻭ ﺤﺘﻰ ﻭ ﺼﻭل ﻗﻴﻤﺔ ﺍﻟﻤﺘﻐﻴﺭ
ﺇﻟﻰ ﺍﻟﻌﺩﺩ ٣
)If(x = = 3
{
;break
}
ﻤﻤﺎ ﺃﺩﻯ ﺇﻟﻰ ﺍﻟﺨﺭﻭﺝ ﻓﻭﺭﺍ ً ﻤﻥ ﺤﻠﻘﺔ ﺍﻟﺘﻜﺭﺍﺭ ،ﻭ ﻟﻡ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺒﻘﻴﺔ ﺤﻠﻘﺔ ﺍﻟﺘﻜﺭﺍﺭ ﻤﻊ ﺍﻟﻌﻠﻡ
ﺃﻥ ﺸﺭﻁ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻜﺭﺍﺭ . x<=5
ﺃﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺜﺎﻨﻲ ﻓﺎﻟﺨﺭﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺒﺩﺃ ﻤﻥ ﺍﻟﻌﺩﺩ ١ﻭﺼﻭﻻﹰ ﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ ٣ﻭ ﻟﻜﻥ
ﻫﺫﻩ ﺍﻟﻘﻴﻤﺔ ٣ﻟﻡ ﺘﻅﻬﺭ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ،ﻭ ﺫﻟﻙ ﺒﺴﺒﺏ ﺍﻟﺘﻌﻠﻴﻤﺔ continue
)If( x = = 3
{
;continue
}
ﺤﻴﺙ ﻗﺎﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺘﺨﻁﻲ ﻫﺫﻩ ﺍﻟﻘﻴﻤﺔ ﻭ ﻤﻥ ﺜﻡ ﺘﺎﺒﻊ ﺒﻌﺩ ﺫﻟﻙ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻜﺭﺍﺭ ﺇﻟﻰ ﺃﻥ
ﻭﺼل ﻋﺩﺍﺩ ﺍﻟﺘﻜﺭﺍﺭ ﺇﻟﻰ ٥ﺃﻱ ﻗﻴﻤﺔ ﻨﻬﺎﻴﺔ ﺸﺭﻁ ﺍﻟﺘﻜﺭﺍﺭ.
ﻭ ﺃﺭﺠﻭﺍ ﻤﻥ ﺍﷲ ﻋﺯ ﻭ ﺠل ﺃﻥ ﺃﻜﻭﻥ ﻗﺩ ﻭﻓﻘﺕ ﻓﻲ ﺸﺭﺡ ﻫﺎﺘﻴﻥ ﺍﻟﺘﻌﻠﻴﻤﺘﻴﻥ ﻭ ﻓﻲ ﺇﻴﺼﺎل
ﺍﻟﻔﻜﺭﺓ ﺇﻟﻴﻜﻡ ﻭ ﻓﻲ ﺘﻜﻭﻴﻥ ﻓﻜﺭﺓ ﻋﺎﻤﺔ ﻭ ﻤﻔﻬﻭﻤﺔ ﺤﻭل ﻜﻴﻔﻴﺔ ﺍﺴﺘﺨﺩﺍﻤﻬﻡ.
١٦٩
١٧٠