Programming in PascaL
Programming in PascaL
ﺒﻌﺩ ﺍﻟﺘﻁﻭﺭ ﺍﻟﺸﺩﻴﺩ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﻪ ،ﻭﺍﻻﻋﺩﺍﺩ ﺍﻟﻬﺎﺌﻠﻪ ﻤﻥ ﺍﻟﻁﻠﺒﻪ ﺍﻟﺘﻰ ﺘﺤﺎﻭل ﺍﻥ ﺘﺘﻌﻠﻡ
ﻭﻟﻭﺸﻴﺌﺎ ﻴﺴﻴﺭﺍ ﻟﻜﻲ ﻴﺴﻴﺭﻭﺍ ﻓﻲ ﺍﻟﺩﺭﺏ ﺍﻻﺴﻠﻡ ﻟﻬﻡ ،ﻜﺎﻥ ﻻﺒﺩ ﻤﻥ ﻟﻐﻪ ﺒﺭﻤﺠﻪ ﺤﺘﻰ ﺍﻥ ﻟﻡ ﺘﻜﻥ
ﺒﻤﺴﺘﻭﻯ ﺍﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﺠﺩﻴﺩﻩ ﻟﻜﻲ ﻴﺒﺩﺃ ﺒﻬﺎ ﺍﻟﻤﺒﺭﻤﺞ ﺍﻟﺠﺩﻴﺩ ﻓﻲ ﻋﺎﻟﻡ ﺍﻟﺒﺭﻤﺠﻪ .
ﻭﻤﻥ ﻫﻨﺎ ﺒﺯﻏﺕ ﻓﻜﺭﻩ ﺍﻨﺸﺎﺀ ﻜﺘﺎﺏ ﻴﺘﺤﺩﺙ ﻋﻥ ﺍﻟﺒﺭﻤﺞ ﺒﻠﻐﻪ ﺒﺎﺴﻜﺎل ،ﻓﻲ ﺍﻟﻭﻗﺕ ﺍﻟﺫﻱ ﻴﻨﺩﺭ ﺍﻥ
ﻨﺠﺩ ﻜﺘﺎﺒﺎ ﻴﺘﺤﺩﺙ ﻋﻥ ﻫﺫﻩ ﺍﻟﻠﻐﻪ ﺒﺸﻜل ﺠﻴﺩ .
ﻓﻲ ﺍﻟﺤﻘﻴﻘﻪ ﻜﺜﻴﺭ ﻤﻥ ﺍﻟﻜﺘﺏ ﺘﺘﺤﺩﺙ ﻋﻥ ﻟﻐﺔ ﺒﺎﺴﻜﺎل ،ﻭ ﻟﻜﻥ ﻗﻠﻴل ﻤﻨﻬﺎ ﻴﻌﻠﻤﻙ ﻜﻴﻑ ﺘﺼﺒﺢ
ﻤﺒﺭﻤﺠﺎ ،ﻜﺜﻴﺭ ﻤﻥ ﻫﺫﻩ ﺍﻟﻜﺘﺏ ﻤﻠﻲﺀ ﺒﺄﻜﻭﺍﺩ ﺴﻴﺌﺔ ﺠﺩﺍ ،ﺴﻴﺌﺔ ﻤﻥ ﻨﺎﺤﻴﺔ ﺍﻥ ﺘﺼﻤﻴﻤﻬﺎ ﺴﻲﺀ ،ﻭ
ﻟﻴﺱ ﻤﻥ ﻨﺎﺤﻴﺔ ﺍﻨﻬﺎ ﻻ ﺘﻌﻤل.
ﻟﺫﻟﻙ ﻻ ﺘﺘﻭﻗﻊ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻻﻤﺜﻠﻪ ﻭﺍﻟﺘﻤﺎﺭﻴﻥ ﺍﻟﻤﻜﺭﺭﻩ ﻜﻤﺎ ﻓﻲ ﺍﻜﺜﺭ ﺍﻟﻜﺘﺏ ،ﻓﺄﻨﺎ ﺍﺤﺏ ﺍﻥ ﺍﺸﺭﺡ
ﻤﻔﻬﻭﻡ ﺍﻟﺒﺭﻤﺠﻪ ﺍﻱ ﻓﻬﻡ ﺍﻟﺠﻤل ﻭﺍﻻﻴﻌﺎﺯﺍﺕ ﺍﻟﺘﻰ ﺘﺘﻜﻭﻥ ﻤﻨﻬﺎ ﺍﻟﻠﻐﻪ ﺒﺸﻜل ﻋﺎﻡ ،ﺜﻡ ﺸﺭﺡ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺸﻜل ﺨﺎﺹ ﻤﻥ ﺤﻴﺙ ﻜﺘﺎﺒﻪ ﺠﻤل ﺴﻠﻴﻤﻪ ﺨﺎﻟﻴﻪ ﻤﻥ ﺍﻻﺨﻁﺎﺀ ،ﻭﻤﺎ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺒﺩﻴﻠﻪ
ﻭﺍﻻﺤﺘﻤﺎﻻﺕ ﺍﻟﻤﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ،ﻭﺍﻻﺨﻁﺎﺀ ﺍﻟﻨﺎﺘﺠﻪ ﻭﻜﻴﻔﻴﻪ ﺘﻔﺎﺩﻴﻬﺎ ﻭﻤﺎ ﺍﻟﻰ ﺫﻟﻙ.
ﻟﺫﻟﻙ ﺴﺘﺠﺩ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻟﺸﺭﺡ ﺍﻟﻨﻅﺭﻱ ،ﻟﻜﻥ ﺼﺩﻗﻨﻲ ﺴﻭﻑ ﻴﻔﻴﺩﻙ ﺒﺸﻜل ﻜﺒﻴﺭ ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒل ﻓﻲ
ﺤﺎل ﺍﺭﺩﺕ ﻜﺘﺎﺒﻪ ﺒﺭﺍﻤﺞ ﺒﺼﻭﺭﻩ ﺼﺤﻴﺤﻪ ﻭﺴﻠﻴﻤﻪ ،ﺍﻴﻀﺎ ﻓﻲ ﺤﺎل ﺍﺭﺩﺕ ﺘﻐﻴﻴﺭ ﺍﻟﻠﻐﻪ ﻓﺴﻭﻑ
ﻴﻔﻴﺩﻙ ﻜﺜﻴﺭﺍ .
ﻋﻤﻭﻤﺎ ﺍﺘﻤﻨﻰ ﻟﻜﻡ ﺍﺴﻌﺩ ﺍﻻﻭﻗﺎﺕ ،ﻭﺒﺭﻤﺠﻪ ﻤﻭﻓﻘﻪ ﻟﻠﺠﻤﻴﻊ ،ﺒﺈﺫﻥ ﺍﷲ !!
ﺍﳌﺆﻟــــﻒ !!
ﻭﺟﺪﻱ ﻋﺼﺎﻡ ﻋﺒﺪ ﺍﻟﺮﺣﻴﻢ
2
ﻫﺫﺍ ﺍﻟﺠﺯﺀ ﺍﻻﻭل ﻤﻥ ﺍﻟﻜﺘﺎﺏ ،ﺍﻴﻀﺎ ﻫﻲ ﺍﻟﻨﺴﺨﻪ ﺍﻻﻭﻟﻰ ،ﻭﺴﻴﺘﻡ ﺘﻁﻭﻴﺭﻫﺎ ﻤﺘﻰ ﺩﻋﺕ
ﺍﻟﺤﺎﺠﻪ ﺍﻟﻰ ﺫﻟﻙ ،ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺁﺨﺭ ﻨﺴﺨﺔ ﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻗﻡ ﺒﻤﺭﺍﺴﻠﺘﻲ :
. [email protected]
ﻴﻤﻜﻨﻙ ﻁﺒﺎﻋﺔ ﻫﺫ ﺍ ﺍﻟﻜﺘﺎﺏ ﻟﻼﺴﺘﺨﺩﺍﻡ ﺍﻟﺸﺨﺼﻲ ﻓﻘﻁ ،ﻭ ﻴﻤﻨﻊ ﺍﺴﺘﻐﻼﻟﻪ ﻓﻲ ﺃﻴﺔ ﺃﻤﻭﺭ
ﺘﺠﺎﺭﻴﺔ ﺒﺩﻭﻥ ﺍﻹﺫﻥ ﺍﻟﺨﻁﻲ ﻤﻥ ﺍﻟﻤﺅﻟﻑ.
ﻓﻲ ﺤﺎﻟﺔ ﺒﺎﻥ ﻭﺠﺩﺕ ﺠﺯﺀ ﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﻏﻴﺭ ﻭﺍﻀﺤﺔ ﺃﻭ ﺒﺤﺎﺠﺔ ﺇﻟﻰ ﺸﺭﺡ ﻤﻔﺼل
ﻓﺒﺭﺠﺎﺀ ﺇﺨﺒﺎﺭﻱ ﺒﺫﻟﻙ ﻓﻭﺭﺍ ﻋﻠﻰ ﺒﺭﻴﺩﻱ ﺍﻹﻟﻜﺘﺭﻭﻨﻲ ،ﺤﺘﻰ ﺃﺘﻤﻜﻥ ﻤﻥ ﺇﻀﺎﻓﺔ ﺍﻷﺠﺯﺍﺀ
ﺍﻟﻨﺎﻗﺼﺔ ﺃﻭ ﺘﻭﻀﻴﺢ ﺍﻷﺠﺯﺍﺀ ﺍﻟﻐﻴﺭ ﻭﺍﻀﺤﺔ ﻓﻭﺭﺍ ،ﻁﺒﻌﺎ ﻓﻲ ﺍﻟﻨﺴﺨﻪ ﺍﻟﻘﺎﺩﻤﻪ.
ﻜل ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺍﻟﺘﻰ ﻓﻲ ﺍﻟﻜﺘﺎﺏ ﺘﻌﺒﺭ ﻋﻥ ﺭﺃﻱ ﺍﻟﻤﺅﻟﻑ ﻭﺠﺩﻱ ﻋﺼﺎﻡ ،ﻭﻫﻭ ﻏﻴﺭ
ﻤﺴﺅﻭل ﺘﻤﺎﻤﺎ ﻋﻥ ﺃﻱ ﺍﺴﺘﻌﻤﺎل ﻏﻴﺭ ﺸﺭﻋﻲ ﻟﻬﺫﺍ ﺍﻟﻜﺘﺎﺏ .
3
4
ﺍﻤﺎ ﺒﺎﻟﻨﺴﺒﻪ ﻟﻠﺠﺯﺀ ﺍﻻﺨﺭ ،ﺴﻭﻑ ﻴﻜﻭﻥ ﻓﻲ ﺨﻼل ﺍﻟﺸﻬﻭﺭ ﺍﻟﻘﺎﺩﻤﻪ ،ﻨﻅﺭﺍ
ﻟﺼﻌﻭﺒﺘﻪ ﻤﻥ ﻨﺎﺤﻴﻪ ،ﻭﻟﻘﻠﻪ ﺍﻟﻤﺭﺍﺠﻊ ﻭﺍﻟﻤﺼﺎﺩﺭ ﺍﻟﺘﻰ ﺘﺘﻜﻠﻡ ﻋﻥ ﺒﻌﺽ ﺍﻟﻨﻘﺎﻁ .
ﺍﻴﻀﺎ ﻫﺫﺍ ﺍﻟﺠﺯﺀ ﻴﻌﺘﺒﺭ ﻜﺎﻓﻲ ﻟﻠﺫﻴﻥ ﻴﺭﻴﺩﻭﻥ ﺍﻟﺘﻨﻘل ﺍﻟﻰ ﻟﻐﻪ ﺍﺨﺭﻯ ﻓﻭﺭ ﺍﺩﺭﺍﻜﻬﻡ
ﻟﻠﻤﻨﻁﻕ ﺍﻟﺒﺭﻤﺠﻲ ﻭﺍﻟﺠﺯﺀ ﺍﻟﺜﺎﻨﻲ ﻴﻜﻭﻥ ﻟﻼﺸﺨﺎﺹ ﺍﻟﺫﻴﻥ ﻗﺭﺭﻭﺍ ﺍﻥ ﻴﺘﻌﻤﻘﻭﺍ ﻓﻲ
ﻫﺫﻩ ﺍﻟﻠﻐﻪ .
5
ﺍﻴﻀﺎ ﺍﺜﻨﺎﺀ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﺍﻤﺞ ﻓﻲ ﻫﺫﺍ ﺍﻟﺒﺎﺏ ﺴﻭﻑ ﺍﻗﺘﺼﺭ ﻓﻘﻁ ﻋﻠﻰ ﻜﺘﺎﺒﺔ ﻤﺎ ﺒﻌﺩ
ﻜﻠﻤﻪ beginﻟﻠﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ ﻭﻟﻥ ﻨﺘﻁﺭﻕ ﻟﻜﺘﺎﺒﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻜﺎﻤﻼ ) ﺍﻻ ﻓﻲ
ﺒﻌﺽ ﺍﻟﺒﺭﺍﻤﺞ( ﻨﻅﺭﺍ ﻻﻥ ﻜﺘﺎﺘﺒﻬﺎ ﻜﺎﻤﻠﻪ ﺴﻴﺅﺩﻱ ﺍﻟﻰ ﺯﻴﺎﺩﻩ ﻋﺸﺭﺍﺕ ﺍﻥ ﻟﻡ ﻴﻜﻥ
ﻤﺌﺎﺕ ﺍﻟﺼﻔﺤﺎﺕ ﺒﻼ ﻓﺎﺌﺩﻩ .
ﺍﻴﻀﺎ ﺴﻭﻑ ﻨﺴﺘﺨﺩﻡ ﻜﺜﻴﺭﺍ ﻜﻠﻤﻪ Blockﻭﻫﻲ ﺘﻌﻨﻲ ﺒﺩﺍﻴﻪ beginﻭﻨﻬﺎﻴﻪ end
ﻓﺄﻱ ﺒﺭﻨﺎﻤﺞ ﺒﺎﺴﻜﺎل ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺍﻟـ blockﺍﻟﺭﺌﻴﺴﻲ ﻭﻫﻭ beginﻟﻠﺒﺭﻨﺎﻤﺞ
ﻭﻤﻥ ﺜﻡ ﺒﻌﺩ ﻜﺘﺎﺒﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻨﻀﻊ ﻨﻬﺎﻴﺘﻪ ﻭﻫﻲ ﻋﺒﺎﺭﻩ ﻋﻥ ، end.ﺍﻴﻀﺎ ﻗﺩ
ﺘﺤﺘﻭﻱ ﺒﻌﺽ ﺠﻤل ﺒﺎﺴﻜﺎل ﻋﻠﻰ Blockﺨﺎﺹ ﺒﻬﺎ ﻤﺜل ﺠﻤل ) ifﻭ caseﻭ
.. forﺍﻟﺦ( ﻭﺴﻭﻑ ﻴﺘﻡ ﺫﻜﺭ ﻫﺫﻩ ﺍﻟﺠﻤل ﺒﺎﻟﺘﻔﺼﻴل ﻓﻲ ﺍﻟﺩﺭﻭﺱ ﺍﻟﻘﺎﺩﻤﻪ .
ﻤﻥ ﺍﻓﻀل ﺍﻟﻁﺭﻕ ﻓﻲ ﺍﻟﺘﻌﻠﻡ ،ﻫﻲ ﻜﺘﺎﺒﻪ ﺍﻟﻤﺯﻴﺩ ﻤﻥ ﺍﻟﺒﺭﺍﻤﺞ .ﻭﺍﻟﺤﺫﺭ ﻤﻥ ﻨﺴﺦ
ﺍﻻﻜﻭﺍﺩ ﻭﻟﺼﻘﻬﺎ ﻓﺈﻨﻬﺎ ﻁﺭﻴﻘﻪ ﺨﺎﻁﺌﻪ ﺠﺩﺍ .ﻋﻠﻴﻙ ﺒﻘﺭﺍﺀﻩ ﺍﻻﻜﻭﺍﺩ ﻭﻓﻬﻤﻬﺎ ﺜﻡ
ﺍﻋﺎﺩﻩ ﻜﺘﺎﺒﺘﻬﺎ ﻤﺭﻩ ﺍﺨﺭﻯ ﻓﻲ ﺒﻴﺌﻪ ﺍﻟﺘﻁﻭﻴﺭ .
ﺍﻴﻀﺎ ﺘﻡ ﻜﺘﺎﺒﻪ ﺍﻻﻜﻭﺍﺩ ﻓﻲ ﺒﺭﻨﺎﻤﺞ wordﻟﺫﻟﻙ ﻋﻨﺩ ﻤﺤﺎﻭﻟﻪ ﻨﺴﺦ ﺍﻻﻜﻭﺍﺩ ﺍﻟﻰ
ﺒﻴﺌﻪ ﺍﻟﺘﻁﻭﻴﺭ ،ﺴﻭﻑ ﺘﺠﺩﻫﺎ ﻏﻴﺭ ﻤﺭﺘﺒﻪ ﻭﺒﺸﻜل ﺘﺼﻌﺏ ﻗﺭﺍﺌﺘﻪ .ﻟﺫﻟﻙ ﻜﻤﺎ ﻗﻠﻨﺎ
ﻻ ﺘﻘﻡ ﺒﻨﺴﺦ ﺍﻻﻜﻭﺍﺩ.
6
ﻭﻛﻤﺎ ﻳﻘﺎﻝ
ﻣﺸﻮﺍﺭ ﺍﻻﻟﻒ ﻣﻴﻞ ﻳﺒﺪﺃ ﲞﻄﻮﻩ .
ﺑﺎﻟﺘﻮﻓﻴﻖ !
7
ﻓﻔﻲ ﻨﻔﺱ ﺍﻟﺴﻨﻪ ﺍﺨﺘﺭﻉ ﺃﻭل ﺤﺎﺴﺏ ﻨﺼﻑ ﺁﻟﻲ ﻭﺴﻤﻲ ﺒﺎﺴﻤﻪ ) ﺤﺎﺴﺏ ﺒﺎﺴﻜﺎل
، ( 1642ﻭﻜﺎﻥ ﺫﻟﻙ ﻟﺴﺒﺏ ﺃﺴﺎﺴﻲ ﻭﻫﻭ ﻤﺴﺎﻋﺩﻩ ﺃﺒﻴﻪ ﺍﻟﺫﻱ ﻜﺎﻥ ﻴﻌﻤل ﻓﻲ
ﻤﺅﺴﺴﺔ ﺍﻟﻀﺭﺍﺌﺏ ﻤﺤﺼﻼ ﻟﻠﻔﻭﺍﺘﻴﺭ ﻭﺍﻟﺫﻱ ﻜﺎﻥ ﻴﻘﻀﻲ ﻤﻌﻅﻡ ﻟﻴﺎﻟﻴﻪ ﻤﺴﺘﺨﺩﻤﺎ
ﺍﻟﻌﺩ ﺍﻟﻴﺩﻭﻱ ﻓﻲ ﺇﺤﺼﺎﺀ ﻭﺘﺩﻗﻴﻕ ﺤﺴﺎﺒﺎﺕ ﺍﻟﻤﺒﺎﻟﻎ ﺍﻟﺘﻲ ﺤﺼﻠﻬﺎ ﻭﻗﺩ ﻜﺎﻥ ﻴﺸﻜل
ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﺍﻟﺒﻁﻲﺀ ﻤﻥ ﺍﻟﺤﺴﺎﺏ ﺇﺭﺒﺎﻜﺎ ﻟﻌﺎﺌﻠﺘﻪ ،ﻭﺒﺎﻟﺘﺎﻟﻲ ﻴﺄﺨﺫ ﻤﻨﻪ ﺍﻟﻭﻗﺕ
ﺍﻟﻜﺒﻴﺭ.
8
ﺍﻟﻤﺘﺭﺠﻡ :
ﻴﻭﺠﺩ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻤﺘﺭﺠﻤﺎﺕ ﺍﻟﺘﻰ ﺘﻌﻤل ﻋﻠﻰ ﺒﺎﺴﻜﺎل ،ﻭﻤﻥ ﺍﺸﻬﺭﻫﺎ ﺍﻟـ Free
Pascalﺍﻴﻀﺎ ﻫﻨﺎﻙ ﺍﻟﺒﻭﺭﻻﻨﺩ ، Borland Pascalﺍﻴﻀﺎ ﻫﻨﺎﻙ ﺍﻟﻨﺴﺨﻪ ﺍﻟﺘﺭﺒﻭ
ﻭﻫﻰ ﺍﻟﺘﻰ ﺴﻨﺘﻌﻤﺩ ﻋﻠﻴﻬﺎ ﻓﻲ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ،Turbo Pascalﻭﻫﻨﺎﻙ ﺍﻴﻀﺎ ﻨﺴﺨﻪ
ﻤﻥ ﺸﺭﻜﻪ ﻤﺎﻴﻜﺭﻭﺴﻭﻓﺕ ،ﻭﺍﻟﻌﺩﻴﺩ ﺍﻟﻌﺩﻴﺩ .
ﺍﻟﺸﺊ ﺍﻟﻭﺤﻴﺩ ﺍﻟﺫﻱ ﺘﺨﺘﻠﻑ ﻓﻴﻪ ﻫﺫﻩ ﺍﻟﻤﺘﺭﺠﻤﺎﺕ ﻫﻲ ﻓﻲ ﻜﺘﺎﺒﻪ ﺒﻌﺽ ﺍﻟﺩﻭﺍل ،
ﻭﻁﺭﻕ ﺘﻨﻔﻴﺫﻫﺎ ،ﻜل ﻤﺘﺭﺠﻡ ﻟﻪ ﻤﻜﺘﺒﺎﺘﻪ ﻭﺩﻭﺍﻟﻪ ﺍﻟﺨﺎﺼﻪ .ﻟﻜﻥ ﺍﻟﻔﻜﺭﻩ ﺍﻟﺒﺭﻤﺠﻴﻪ
ﻫﻰ ﻨﻔﺴﻬﺎ ﻓﻲ ﺠﻤﻴﻊ ﺍﻟﻤﺘﺭﺠﻤﺎﺕ ﻭﻟﻴﺱ ﻟﻐﻪ ﺒﺎﺴﻜﺎل ﻓﻘﻁ ﻭﺒﺎﻻﺼﺢ ﻟﺠﻤﻴﻊ ﻟﻐﺎﺕ
ﺍﻟﺒﺭﻤﺤﻪ ﺍﻟﻔﻜﺭﻩ ﺍﻟﺒﺭﻤﺠﻴﻪ ﻭﺍﺤﺩﻩ ﻭﺍﻥ ﺍﺨﺘﻠﻘﺕ ﻁﺭﻕ ﻜﺘﺎﺒﻪ ﺍﻟﻜﻭﺩ ﺒﺸﻜل ﻻﺨﺭ،
ﻟﻜﻥ ﻓﻲ ﺍﻟﻨﻬﺎﻴﻪ ﺍﻟﻔﻜﺭﻩ ﻭﺍﺤﺩ .
ﻟﺫﻟﻙ ﻋﻨﺩ ﺍﻨﺘﻘﺎل ﺍﻟﻤﺒﺭﻤﺞ ﺍﻟﻤﺘﻘﻥ ﻟﻠﻐﺘﻪ ﺍﻟﻰ ﻟﻐﻪ ﻻﺨﺭﻯ ،ﺴﻴﺠﺩ ﻨﻔﺴﻪ ﻓﻲ ﻭﻗﺕ
ﻗﺼﻴﺭ ﺍﺼﺒﺢ ﻤﺩﺭﻙ ﻟﻠﻐﻪ ﺍﻟﺠﺩﻴﺩﻩ ﻟﻴﺱ ﻻﻥ ﺍﻟﻠﻐﻪ ﺍﻟﺠﺩﻴﺩﻩ ﺴﻬﻠﻪ ،ﻭﻟﻜﻥ ﻻﻥ
ﺍﻟﻤﺒﺭﻤﺞ ﺍﺴﺎﺴﻪ ﻤﺘﻴﻥ ﻭ ﻓﺎﻫﻡ ﺍﻟﻔﻜﺭﻩ ﺍﻟﺒﺭﻤﺠﻴﻪ .
9
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻤﻜﻥ ﺘﻌﺭﻴﻔﻪ ﺒﺄﻨﻪ ﻤﺠﻤﻭﻋﻪ ﻤﻥ ﺍﻻﻭﺍﻤﺭ ﺍﻟﺘﻰ ﻴﻜﺘﺒﻬﺎ ﺍﻟﻤﺒﺭﻤﺞ ﺃﻭ ﺒﺄﻨﻪ
ﺍﺤﺩ ﺍﻻﺠﺯﺍﺀ ﺍﻟﺘﻨﻔﻴﺫﻴﻪ ﻤﻥ ﺍﻟﺘﻁﺒﻴﻕ .
10
ﻭﻟﻠﺘﻐﻠﺏ ﻋﻠﻰ ﻫﺫﺍ ﺍﻟﻤﻭﻗﻑ ﺍﻟﺫﻱ ﻴﺅﺩﻱ ﺍﻟﻰ ﺍﺤﺩﺍﺙ ﺒﻌﺽ ﺍﻻﺭﺘﺒﺎﻙ ،ﺜﻡ ﺍﻨﺸﺎﺀ
ﺍﻟﺒﺭﻤﺠﻪ ﺍﻟﻬﻴﻜﻠﻴﻪ . structured programming
ﺍﻥ ﺍﻟﻔﻜﺭﻩ ﺍﻟﺭﺌﻴﺴﻴﻪ ﺍﻟﻤﺒﻨﻴﻪ ﻋﻠﻴﻬﺎ ﺍﻟﺒﺭﻤﺠﻪ ﺍﻟﻬﻴﻜﻠﻴﻪ ﺘﻤﺎﺜل ﻓﻲ ﺒﺴﺎﻁﺘﻬﺎ ﻓﻜﺭﻩ "ﻓﺭﻕ
ﺘﺴﺩ" .ﻴﻤﻜﻥ ﺘﺨﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﻠﻰ ﺍﻨﻪ ﻤﺭﻜﺏ ﻤﻥ ﻤﺠﻤﻭﻋﻪ ﻤﻥ ﻤﻬﺎﻡ .ﻭﺍﻱ
ﻤﻬﻤﻪ ﺍﻋﻘﺩ ﻤﻥ ﺍﻥ ﺘﻭﺼﻑ ﺒﺴﻬﻭﻟﻪ ﺴﻴﺘﻡ ﺘﻘﺴﻴﻤﻬﺎ ﺍﻟﻰ ﻤﺠﻤﻭﻋﻪ ﻤﻥ ﺍﻟﻤﻬﺎﻡ
ﺍﻻﺼﻐﺭ ﺍﻟﻰ ﺍﻥ ﺘﺼﺒﺢ ﺍﻟﻤﻬﺎﻡ ﺼﻐﻴﺭﻩ ﺒﺎﻟﺩﺭﺠﻪ ﺍﻟﻜﺎﻓﻴﻪ ﻟﻔﻬﻤﻬﺎ ﻭﺍﺴﺘﻴﻌﺎﺒﻬﺎ ﺒﺴﻬﻭﻟﻪ
ﻋﻠﻰ ﺴﺒﻴل ﺍﻟﻤﺜﺎل ،ﺴﺘﺠﺩ ﺍﻥ ﺤﺴﺎﺏ ﻤﺘﻭﺴﻁ ﻤﺭﺘﺒﺎﺕ ﺍﻟﻤﻭﻅﻔﻴﻥ ﺒﺎﺤﺩﻯ ﺍﻟﺸﺭﻜﺎﺕ
ﻤﻬﻤﻪ ﻤﻌﻘﺩﻩ ،ﻭﻤﻊ ﺫﻟﻙ ،ﺒﻤﻘﺩﻭﺭﻙ ﺘﻘﺴﻴﻡ ﻫﺫﻩ ﺍﻟﻤﻬﻤﻪ ﺍﻟﻰ ﺍﻟﻤﻬﺎﻡ ﺍﻟﺘﺎﻟﻴﻪ :
.1ﻤﻌﺭﻓﻪ ﻤﺭﺘﺏ ﻜل ﻤﻭﻅﻑ
.2ﺤﺴﺎﺏ ﻋﺩﺩ ﺍﻟﻤﻭﻅﻔﻴﻥ
11
ﺘﻘﺴﻴﻡ ﻤﻬﻤﻪ ﺠﻤﻊ ﺍﻟﻤﺭﺘﺒﺎﺕ ) (3ﺍﻟﻰ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﻪ : ﻤﻥ ﺍﻟﻤﻤﻜﻥ
ﺍﺤﻀﺎﺭ ﺍﻟﺴﺠل ﺍﻟﺨﺎﺹ ﺒﻜل ﻤﻭﻅﻑ .1
ﺍﻟﻭﺼﻭل ﺍﻟﻰ ﻗﻴﻤﻪ ﺍﻟﻤﺭﺘﺏ .2
ﺍﻀﺎﻓﻪ ﺍﻟﻤﺭﺘﺏ ﺍﻟﻰ ﺍﺠﻤﺎﻟﻲ ﺍﻟﻤﺭﺘﺒﺎﺕ .3
ﺍﺤﻀﺎﺭ ﺴﺠل ﺍﻟﻤﻭﻅﻑ ﺍﻟﺘﺎﻟﻲ .4
ﻭﻫﻜﺫﺍ ،ﻴﺘﻡ ﺘﻘﺴﻴﻡ ﺍﻟﻤﻬﺎﻡ ﺍﻟﻤﻘﻌﺩﻩ ﺍﻟﻰ ﻤﻬﺎﻡ ﻓﺭﻋﻴﻪ ﺍﺼﻐﺭ ﻤﻨﻬﺎ ﺤﺘﻰ ﺘﺼﺒﺢ
ﺍﻟﻤﺸﻜﻠﻪ ﻴﺴﻴﺭﻩ .
ﺒﻴﺌﻪ ﺍﻟﺘﻁﻭﻴﺭ
ﻜﻤﺎ ﺫﻜﺭﻨﺎ ﺴﺎﺒﻘﺎ ،ﺘﻡ ﺍﻋﺘﻤﺎﺩ ﺍﻟﻤﺘﺭﺠﻡ Turbo Pascalﻓﻲ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ،
ﻭﺍﻟﺴﺒﺏ ﻓﻲ ﺫﻟﻙ ﺤﻴﺙ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻋﺩﺩ ﻜﺒﻴﺭ ﻤﻥ ﺍﻻﺠﺭﺍﺀﺍﺕ ﺍﻟﺠﺎﻫﺯﻩ ،ﺒﺨﻼﻑ
ﺒﻘﻴﻪ ﺍﻟﻤﺘﺭﺠﻤﺎﺕ ﺍﻟﺘﻰ ﺘﻌﻤل ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻠﻐﻪ ،ﻫﺫﺍ ﻻ ﻴﻌﻨﻲ ﺍﻥ ﺍﻟﺒﻘﻴﻪ ﻏﻴﺭ ﻤﻨﺎﺴﺒﻪ
ﻟﻠﻌﻤل .
12
ﺸﺭﻴﻁ ﺍﻟﻘﻭﺍﺌﻡ ،ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻘﻭﺍﺌﻡ ﻜﻤﺎ ﻨﻼﺤﻅ .ﻭﻫﻲ ﻟﻥ ﺘﺨﺘﻠﻑ
ﻋﻥ ﺍﻱ ﺘﻁﺒﻴﻕ ﺍﺨﺭ) ﻤﺜﻼ ﺒﺭﻨﺎﻤﺞ . ( wordﺍﻤﺎ ﺒﺎﻟﻨﺴﺒﻪ ﻟﻠﻘﺎﺌﻤﻪ ، compile
ﻓﻬﻲ ﻟﺘﺭﺠﻤﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ .ﻭﺍﻟﻘﺎﺌﻤﻪ runﻓﻬﻲ ﻟﺘﺸﻐﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ )ﺍﻱ ﺘﻨﻔﻴﺫﻩ ( .
ﺍﻟﺸﺭﻴﻁ ﺍﻟﺫﻱ ﻴﻭﺠﺩ ﻓﻲ ﺍﺴﻔل ﺍﻟﺼﻔﺤﻪ )ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﻨﻁﻠﻕ ﻋﻠﻴﻪ ﺸﺭﻴﻁ
ﺍﻟﺤﺎﻟﻪ( ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺍﺭﺒﻊ ﺨﺎﻨﺎﺕ ،ﺍﻻﻭﻟﻰ ﻟﻤﻌﺭﻓﻪ ﺭﻗﻡ ﺍﻟﺼﻑ ﻭﺍﻟﻌﺎﻤﻭﺩ .
ﺍﻟﺜﺎﻨﻴﻪ ﻟﻤﻌﺭﻓﻪ ﻫل ﺘﻡ ﺤﻔﻅ ﺍﻟﻤﻠﻑ ﺒﻌﺩ ﺍﻟﺘﻌﺩﻴل ﺍﻡ ﻻ .ﺍﻟﺜﺎﻟﺜﻪ ﻟﺘﻐﻴﺭ ﻁﺭﻴﻘﻪ
13
14
ﰲ ﻫﺬﺍ ﺍﻟﻴﻮﻡ ﻻ ﺗﻌﺘﻘﺪ ﺍﻧﻚ ﺳﻮﻑ ﺗﺘﻌﻠﻢ ﺍﻟﻜﺜﲑ ،ﻻﻧﻨﺎ ﻛﻤﺎ ﺫﻛﺮﻧﺎ ﺍﻧﻚ
ﺳﻮﻑ ﺗﺘﻌﻠﻢ ﺍﳌﻮﺍﺿﻴﻊ ﺍﳉﺪﻳﺪﻩ ﻣﻦ ﺧﻼﻝ ﺗﻘﺪﻣﻚ ﰲ ﻗﺮﺍﺀﻩ ﺍﳌﺰﻳﺪ ﻣﻦ
ﺍﳌﻮﺍﺿﻴﻊ ﺍﳌﺘﻘﺪﻣﻪ .
15
ﺭﺃ ﺱ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﺍﻟﺴﻁﺭ ﺍﻻﻭل ﻫﻭ ﻟﻜﺘﺎﺒﻪ ﺍﺴﻡ ﻟﻠﺒﺭﻨﺎﻤﺞ ،ﺍﻱ ﺍﺴﻡ ﻴﻤﻜﻨﻙ ﻭﻀﻌﻪ ﻜﻴﻔﻤﺎ ﺘﺭﻴﺩ ،
ﻟﻜﻥ ﻴﺤﺒﺫ ﺍﻥ ﻴﻜﻭﻥ ﻟﻪ ﻋﻼﻗﻪ ﺒﺎﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﺘﻜﺘﺒﻪ ،ﻓﻤﺜﻼ ﺒﺭﻨﺎﻤﺞ ﺍﻟﻪ ﺤﺎﺴﺒﻪ ،
ﻴﺼﺒﺢ ﺍﺴﻤﻪ ﻤﺜﻼ ، calculateﺍﻴﻀﺎ ﻫﻨﺎﻙ ﻗﻭﺍﻋﺩ ﻓﻲ ﻜﺘﺎﺒﻪ ﺍﺴﻤﺎﺀ ﺍﻟﺒﺭﺍﻤﺞ ﻓﻼ
ﻴﻤﻜﻥ ﺍﻥ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻤﺴﺎﻓﺎﺕ ﺍﻭ ﻴﺒﺩﺃ ﺍﻻﺴﻡ ﺒﺭﻗﻡ ،ﺍﻴﻀﺎ ﻓﻲ ﺤﺎﻟﻪ ﺍﻥ ﺍﺴﻡ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻜﻠﻤﺘﻴﻥ ﻓﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﺘﻜﺘﺏ ﻤﺘﻼﺼﻘﺘﻴﻥ ﻤﻊ ﻤﺭﺍﻋﺎﻩ
ﺘﻜﺒﻴﺭ ﺍﻟﺤﺭﻑ ﺍﻻﻭل ﻤﻥ ﻜل ﻜﻠﻤﻪ ،ﻓﻤﺜﻼ ، WajdyEssamﺍﻭ ﻤﻥ ﺍﻟﻤﻤﻜﻥ
ﻭﻀﻊ ﻋﻼﻤﻪ ﺍﻟﺸﺭﻁﻪ – ﻟﻠﻔﺼل ﺒﻴﻥ ﺍﻻﺴﻡ ﺍﻻﻭل ﻭﺍﻟﺜﺎﻨﻲ . wajdy-essam ،
16
ﻓﺎﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻰ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻤﺨﺭﺠﺎﺕ ﻓﻘﻁ ،ﻤﺜﻼ ﻁﺒﺎﻋﻪ ﺠﻤﻠﻪ ﻋﻠﻰ ﺍﻟﺸﺎﺸﻪ
ﻓﻭﺭ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻴﻜﻭﻥ outputﻓﻘﻁ ! ﺍﻤﺎ ﺍﺫﺍ ﻜﺎﻥ ﻤﺩﺨﻼﺕ ﻓﻘﻁ ﺒﺩﻭﻥ
ﻤﺨﺭﺠﺎﺕ )ﻤﺴﺘﺤﻴﻠﻪ ﻨﻭﻋﺎ ﻤﺎ ،ﺍﻭ ﺒﺎﻻﺼﺢ ﻨﺎﺩﺭﻩ( ﻓﺘﻜﻭﻥ inputﻓﻘﻁ ،ﻓﻲ
ﺤﺎل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻤﺩﺨﻼﺕ ﻭﻤﺨﺭﺠﺎﺕ )ﻭﻫﻭ ﺍﻻﻏﻠﺏ( ﻓﺘﻜﻭﻥ ﺍﻻﺜﻨﻴﻥ
ﻤﻌﺎ ،ﺍﻱ . input, output
ﻓﻲ ﺍﻟﻜﺜﻴﺭ ﻤﻥ ﺍﻻﺤﻴﺎﻥ ،ﻴﺘﻡ ﺘﺠﺎﻫل ﺍﻟﻜﻠﻤﺘﻴﻥ input , outputﻭﻻ ﻴﺘﻡ ﻜﺘﺎﺒﺘﻬﺎ
ﻋﻠﻰ ﺍﻻﻁﻼﻕ .ﻭﻴﻜﺘﻔﻰ ﺒﺎﺴﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻘﻁ .
;Program test
ﻜﻤﺎ ﺍﻥ ﺭﺃﺱ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻏﻴﺭ ﻀﺭﻭﺭﻱ ﻟﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺍﻱ ﺍﻨﻪ ﻤﻥ ﺍﻟﻤﻤﻜﻥ
ﺘﺠﺎﻫﻠﻪ ﺘﻤﺎﻡ ﻭﺍﻟﺒﺩﺀ ﺒﺎﻟﺠﻤﻠﻪ ﺍﻟﺘﻰ ﺘﻠﻴﻪ ،ﻟﻜﻥ ﻫﺫﺍ ﺍﻟﺨﻴﺎﺭ ﻏﻴﺭ ﻤﺤﺒﺫ ﺘﻤﺎﻤﺎ .
17
18
ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ
ﻜل ﺍﻟﺒﺭﺍﻤﺞ ﻓﻲ ﺒﺎﺴﻜﺎل ،ﺘﺒﺩﺃ ﺒﺎﻟﻜﻠﻤﻪ ﺍﻟﻤﺤﺠﻭﺯﻩ ، beginﻭﺘﻨﺘﻬﻲ ﺒﺎﻟﻜﻠﻤﻪ
ﺍﻟﻤﺤﺠﻭﺯﻩ ) end.ﻻﺤﻅ ﺍﻟﻨﻘﻁﻪ ،ﻭﻤﻌﻨﺎﻫﺎ ﺍﻥ ﻨﻬﺎﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻫﻨﺎ ،ﻭﺍﻱ ﺸﻲ
ﻴﻜﺘﺏ ﺒﻌﺩ ﻫﺫﻩ ﺍﻟﻨﻘﻁﺔ ،ﻻ ﻴﻠﺘﻔﺕ ﺍﻟﻴﻬﺎ ﺍﻟﻤﺘﺭﺠﻡ ( .
ﻫﺫﻩ ﺍﻟﺠﻤل ) ﺍﻟﺘﻰ ﺘﺤﺘﺎﺝ ﺍﻟﻰ beginﻭ ; endﺨﺎﺼﻪ ﺒﻬﺎ ( ﺘﺴﻤﻰ ﺠﻤل ﻤﺭﻜﺒﻪ
ﻭﺘﺴﻤﻰ ﺍﻴﻀﺎ . Block
ﻴﺠﺏ ﺍﻥ ﺘﻼﺤﻅ ،ﺍﻥ ﻨﻬﺎﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺩﺍﺌﻤﺎ ﺘﻜﻭﻥ ﺒﺎﻟﺠﻤﻠﻪ ، end.ﺍﻤﺎ ﻨﻬﺎﻴﻪ ﺍﻟـ
) Blockﺍﻟﺠﻤﻠﻪ ﺍﻟﻤﺭﻜﺒﻪ( ﻴﻜﻭﻥ ﺩﺍﺌﻤﺎ ﺒﺎﻟﺠﻤﻠﻪ ;. end
ﺴﻭﻑ ﻨﺘﻜﻠﻡ ﻋﻥ ﻫﺫﻩ ﺍﻟﻨﻘﺎﻁ ﺒﺎﻟﺘﻔﺼﻴل ﻤﻥ ﺨﻼل ﺍﻟﺩﺭﻭﺱ ﺍﻟﻘﺎﺩﻤﻪ !!
19
ﻭﻋﻨﺩﻤﺎ ﻴﺭﻯ ﺍﻟﻤﺘﺭﺠﻡ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ،ﻴﻘﻭﻡ ﺒﺘﺎﺠﻬﻠﻬﺎ ﻭﺍﻟﺫﻫﺎﺏ ﺍﻟﻰ ﺍﻟﺠﻤل ﺍﻟﺘﻲ
ﺘـﻠﻴﻬﺎ ) ﺍﻱ ﺍﻨﻬﺎ ﻻ ﺘﻅﻬﺭ ﻭﻗﺕ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺒﻴﻨﻤﺎ ﺘﻅﻬﺭ ﻓﻲ ﺍﻟﻜﻭﺩ ﺍﻟﻤﺼﺩﺭ
( source codeﻭﻫﻨﺎﻙ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﻭﻫﻤﺎ :
20
ﺍﺫﺍ ﺒﺎﺨﺘﺼﺎﺭ /ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺘﺴﺘﺨﺩﻡ ﻻﻴﻀﺎﺡ ﻋﻤل ﺒﻌﺽ ﺍﻟﺩﻭﺍل ﻭﺍﻻﺠﺭﺍﺀﺍﺕ ﺍﻟﺘﻰ
ﺘﻜﻭﻥ ﻤﻌﺭﻭﻓﻪ ﻟﺩﻯ ﺍﻟﻤﺒﺭﻤﺞ ﻭﻏﻴﺭ ﻤﻌﺭﻭﻓﻪ ﻟﻠﺒﻘﻴﻪ ،ﺍﻴﻀﺎ ﺘﺴﺘﺨﺩﻡ ﻟﻜﺘﺎﺒﻪ
ﺒﻌﺽ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺤﻭل ﺍﻟﺒﺭﻨﺎﻤﺞ )ﻜﻭﻗﺕ ﺍﻨﺸﺎﺀﻩ ﻭﺘﺤﺩﻴﺜﻪ( ﺍﻭ ﻤﻌﻠﻭﻤﺎﺕ ﺤﻭل
ﺍﻟﻤﺒﺭﻤﺞ ﻨﻔﺴﻪ )ﻜﺎﻻﺴﻡ ﻭﻋﻨﻭﺍﻥ ﺍﻟﺒﺭﻴﺩ ﺍﻻﻟﻜﺘﺭﻭﻨﻲ ( .
ﺘﻜﻭﻥ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﻓﻲ ﺍﻱ ﻤﻜﺎﻥ ﻓﻲ ﺒﺭﻨﺎﻤﺞ ﺒﺎﺴﻜﺎل ،ﺍﻱ ﻤﻜﺎﻥ ﻋﻠﻰ ﺍﻻﻁﻼﻕ ،
ﻟﻜﻥ ﻴﻔﻀل ﺍﻥ ﺘﻜﺘﺏ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﻓﻲ ﺒﺩﺍﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ) ﻫﺫﺍ ﺍﺫﺍ ﻜﺎﻨﺕ ﻤﻌﻠﻭﻤﺎﺕ
ﺤﻭل ﻭﻅﻴﻔﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺍﻭ ﻤﻌﻠﻭﻤﺎﺕ ﺤﻭل ﺍﻟﻤﺒﺭﻤﺞ( ،ﺍﻭ ﺘﻜﺘﺏ ﺒﺠﺎﻨﺏ ﺍﻻﻭﺍﻤﺭ
ﺍﻟﻐﻴﺭ ﻤﻌﺭﻭﻓﻪ ،ﻜﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ) ﺒﺎﻋﺘﺒﺎﺭ ﺍﻥ ﺍﻻﻤﺭ writelnﻏﻴﺭ
ﻤﻌﺭﻭﻑ ( .
ﺭﺍﺱ ﺍﻟﺒﺭﻨﺎﻤﺞ )ﻜﻤﺎ ﺫﻜﺭﻨﺎ ﺴﺎﺒﻘﺎ( ﻴﻌﻠﻥ ﻋﻨﻪ ﺒﺎﻟﻜﻠﻤﻪ ﺍﻟﻤﺤﺠﻭﺯﻩ program
ﺍﻟﻭﺤﺩﺍﺕ ﺍﻟﻤﺴﺘﺨﺩﻤﻪ )ﻜﻤﺎ ﺫﻜﺭﻨﺎ ( ﻴﻌﻠﻥ ﻋﻨﻬﺎ ﺒﺎﻟﻜﻠﻤﻪ ﺍﻟﺤﺠﻭﺯﻩ uses
ﺍﻟﻌﻨﻭﺍﻴﻥ ﺍﻟﻤﺴﺘﺨﺩﻤﻪ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻌﻠﻥ ﻋﻨﻬﺎ ﺒﺎﻟﻜﻠﻤﻪ ﺍﻟﻤﺤﺠﻭﺯﻩ label
ﺍﻟﺠﻤل ﺍﻟﻤﻌﺭﻓﻪ ﻤﻥ ﻗﺒل ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﻌﻠﻥ ﻋﻨﻬﺎ ﺒﺎﻟﻜﻠﻤﻪ ﺍﻟﻤﺤﺠﻭﺯﻩ type
21
ﻭﺴﻴﺘﻡ ﺫﻜﺭ ﺠﻤﻴﻊ ﻫﺫﻩ ﺍﻻﺸﻴﺎﺀ ،ﺒﺸﻲﺀ ﻤﻥ ﺍﻟﺘﻔﺼﻴل ﻋﻨﺩﻤﺎ ﻴﺤﻴﻥ ﻭﻗﺘﻬﺎ .
ﻤﻥ ﺍﻫﻡ ﺍﻻﺸﻴﺎﺀ ﻟﺩﻯ ﺍﻟﻤﺒﺭﻤﺞ ﻋﻨﺩ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﻤﺎ ،ﻫﻭ ﺍﻥ ﻴﻜﻭﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻭﺍﻀﺢ ﻭﻤﻘﺭﻭﺀ ﻟﻠﺠﻤﻴﻊ )ﺍﻟﻤﺒﺭﻤﺠﻴﻥ( ،ﺤﺘﻰ ﻟﻠﻤﺒﺭﻤﺞ ﻨﻔﺴﻪ ،ﻓﻲ ﺤﺎﻟﻪ ﺍﺭﺍﺩ
ﺘﺼﺤﻴﺢ ﺨﻁﺄ ﻤﺎ ،ﺍﻭ ﺍﻀﺎﻓﻪ ﻗﻁﻌﻪ ﻤﻥ ﺍﻟﻜﻭﺩ !! ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﻪ ﻴﺠﺏ ﺍﻥ ﻴﻜﻭﻥ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﺭﺘﺏ ﻭﺍﻴﻀﺎ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺘﻌﻠﻴﻘﺎﺕ ﻓﻲ ﺤﺎل ﺍﺴﺘﺨﺩﺍﻡ ﺩﻭﺍل ﻏﻴﺭ
ﻤﺄﻟﻭﻓﻪ ﻭﻗﺩ ﺘﻡ ﺫﻜﺭ ﻜﻴﻔﻴﻪ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ .
22
23
ﺍﻅﻥ ﺍﻻﻭل ﺍﺴﻬل ﺒﻜﺜﻴﺭ ،ﺍﻟﻴﺱ ﻜﺫﻟﻙ !! ﻻﻨﻪ ﺘﻡ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟـ ، Tabﺍﻤﺎ ﻋﻥ
ﻁﺭﻴﻘﻪ ﺍﺴﺘﺨﺩﺍﻤﻪ ﻓﻬﻲ ﺴﻬﻠﻪ ﺠﺩﺍ ،ﺍﺫﺍ ﻜﻨﺕ ﺘﺭﻴﺩ ﺍﻥ ﺘﺤﺭﻙ ﺍﻟﻨﺹ ﺍﻟﻰ ﺍﻟﻴﻤﻴﻥ
ﻜل ﻤﺎ ﻋﻠﻴﻙ ﻫﻭ ﻀﻐﻁ ﻤﻔﺘﺎﺡ Tabﻭﺒﻌﺩ ﻜﺘﺎﺒﻪ ﺍﻟﺠﻤﻠﻪ ﻭﻀﻐﻁ enterﺴﻭﻑ
ﻴﻨﺘﻘل ﺍﻟﻤﺅﺸﺭ ﺍﻟﻰ ﺍﺴﻔل ﺍﻟﺠﻤﻠﻪ ﺍﻟﺴﺎﺒﻘﻪ ﻤﺒﺎﺸﺭﻩ )ﺍﻱ ﺍﻟﺘﻰ ﺘﻡ ﻗﺒل ﻜﺘﺎﺒﺘﻬﺎ
ﺍﺴﺘﺨﺩﺍﻡ ﻤﻔﺘﺎﺡ ﺍﻟـ . ( Tab
ﺍﻅﻥ ﺍﻟﻌﻤﻠﻴﻪ ﻨﻅﺭﻴﺎ ﺼﻌﺒﻪ ﻨﻭﻋﺎ ﻤﺎ ،ﻟﻜﻥ ﻋﻨﺩ ﻤﺤﺎﻭل ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﺴﻭﻑ ﺘﺠﺩﻫﺎ
ﻓﻲ ﻏﺎﻴﻪ ﺍﻟﺴﻬﻭﻟﻪ ،ﻭﺒﻜﺘﺎﺒﻪ ﺒﻌﺽ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻌﺩﻴﺩﻩ ﺴﻭﻑ ﺘﻼﺤﻅ ﺍﻨﻙ ﺍﺼﺒﺤﺕ
ﻗﺎﺩﺭﺍ ﻋﻠﻰ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﺒﻤﻬﺎﺭﻩ ﻜﺒﻴﺭﻩ ،ﻻ ﺘﻘﻠﻕ ﺍﺫﺍ ﻟﻡ ﺘﺩﺭﻙ ﺍﺴﺘﺨﺩﻤﻬﺎ ﺍﻻﻥ .
ﻓﻲ ﺤﺎل ﺘﺴﻤﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺭﺍﻋﻰ ﺘﺴﻤﻴﺘﻪ ﺒﺎﺴﻡ ﻴﺩل ﻋﻠﻰ ﻓﻌﻠﻪ ﺍﻭ ﻭﻅﻴﻔﺘﻪ
ﻭﻻ ﻴﻤﻜﻥ ﻜﺘﺎﺒﻪ ﺍﺴﻡ ﻟﻠﺒﺭﻨﺎﻤﺞ ﻭﻴﻜﻭﻥ ﻫﻭ ﻨﻔﺴﻪ ﺍﺴﻡ ﻟﻤﺘﻐﻴﺭ ،ﺍﻴﻀﺎ
ﻻ ﻴﻤﻜﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺴﺎﻓﺎﺕ ﻓﻲ ﻜﺘﺎﺒﻪ ﺍﺴﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭﺍﻻﺴﻤﺎﺀ ﺍﻟﻁﻭﻴﻠﻪ
ﻏﻴﺭ ﻤﺤﺒﺫﻩ ﺒﺘﺎﺘﺎ ﻓﻲ ﻜﺘﺎﺒﻪ ﺍﺴﻡ ﺒﺭﻨﺎﻤﺞ ،ﻜﻥ ﺤﺭﻴﺹ !!
24
ﺍﳌﺘﻐﲑﺍﺕ ﻭﺍﻟﺜﻮﺍﺑﺖ
ﺳﺘﺘﻌﻠﻢ ﺍﻟﻴﻮﻡ
vﻛﻴﻔﻴﻪ ﻃﺒﺎﻋﻪ ﲨﻠﻪ ﻋﻠﻰ ﺍﻟﺸﺎﺷﻪ
vﻛﻴﻔﻴﻪ ﺍﻻﻋﻼﻥ ﻋﻦ ﺍﳌﺘﻐﲑﺍﺕ ﻭﺍﻟﺜﻮﺍﺑﺖ ﻭﺗﻌﺮﻳﻔﻬﻤﺎ
vﻛﻴﻔﻴﻪ ﺗﻌﻴﲔ ﺍﻟﻘﻴﻢ ﻟﻠﻤﺘﻐﲑﺍﺕ ﻭﻣﻌﺎﳉﻪ ﻫﺬﻩ ﺍﻟﻘﻴﻢ
vﻛﻴﻔﻴﻪ ﻛﺘﺎﺑﻪ ﻗﻴﻤﻪ ﺍﺣﺪ ﺍﳌﺘﻐﲑﺍﺕ ﻋﻠﻰ ﺍﻟﺸﺎﺷﻪ
25
ﺍﻟﻔﺭﻕ ﺒﻴﻨﻬﻤﺎ :ﻫﻭ ﺍﻥ writeﻴﻁﺒﻊ ﺍﻟﺠﻤﻠﻪ ﻋﻠﻰ ﺍﻟﺸﺎﺸﻪ ﺜﻡ ﻴﻜﻭﻥ ﺍﻟﻤﺅﺸﺭ ﻓﻲ
ﻨﻔﺱ ﺍﻟﺴﻁﺭ .
ﺍﻤﺎ ﻓﻲ ﺠﻤﻠﻪ writelnﻓﺎﻥ ﺍﻟﺠﻤﻠﻪ ﺘﻨﻁﺒﻊ ﺍﻴﻀﺎ ﻋﻠﻰ ﺍﻟﺸﺎﺸﻪ ﻟﻜﻥ ﺍﻟﻤﺅﺸﺭ ﻴﻨﺘﻘل
ﺍﻟﻰ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ .
ﺍﻟﻨﻭﻉ ﺍﻻﻭل
ﻟﻁﺒﺎﻋﻪ ﺍﻱ ﻨﺹ ﻋﻠﻰ ﺍﻟﺸﺎﺸﻪ ﻴﺠﺏ ﺍﻥ ﻨﻘﻭﻡ ﺒﻜﺘﺎﺒﻪ ﺍﻤﺭ ﺍﻟﻁﺒﺎﻋﻪ ) writeﺍﻭ
( writelnﺜﻡ ﻨﻘﻭﻡ ﺒﻔﺘﺢ ﻗﻭﺱ ﻭﺍﻏﻼﻗﻪ ﺍﻴﻀﺎ ﻭﻨﻜﺘﺏ ﺒﺩﺍﺨﻠﻪ ﺍﻟﺠﻤﻠﻪ
ﺍﻟﻤﺭﺍﺩ ﻁﺒﺎﻋﺘﻬﺎ ،ﺍﻴﻀﺎ ﻴﺠﺏ ﺍﻥ ﻨﺤﻴﻁﻬﺎ ﺒﻘﻭﺱ ﺼﻐﻴﺭ )'( quoteﻤﻥ
ﺍﻟﺠﺎﻨﺒﻴﻥ )ﻴﺘﻡ ﻜﺘﺎﺒﺘﻪ ﻋﻥ ﻁﺭﻴﻕ ﻤﻔﺘﺎﺡ ﺤﺭﻑ )ﻁ( ﺒﺎﻟﻠﻐﻪ ﺍﻻﻨﺠﻠﻴﺯﻴﻪ(
26
wajdy ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻻﻭل ﺴﻭﻑ ﻴﻁﺒﻊ ﻓﻲ ﺍﻟﺸﺎﺸﻪ )ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ( ﻜﻠﻤﻪ
. ﻭﻴﻜﻭﻥ ﺍﻟﻤﺅﺸﺭ ﻓﻲ ﻨﻔﺱ ﺍﻟﺴﻁﺭ
27
ﻓﻲ ﺤﺎﻟﻪ ﺍﻨﻨﺎ ﻨﺭﻴﺩ ﺍﻥ ﻨﺘﺭﻙ ﻤﺴﺎﻓﻪ ﺴﻁﺭ ﺒﻴﻥ ﺍﻟﺠﻤﻠﻪ ﺍﻻﻭﻟﻰ ﻭﺍﻟﺠﻤﻠﻪ ﺍﻟﺜﺎﻨﻴﻪ
;writeln ﺴﻭﻑ ﺘﻜﺘﺏ :
ﻤﺜﺎل //
ﻟﻁﺒﺎﻋﻪ ﺠﻤﻠﻪ ﻭﺘﺭﻙ ﺴﻁﺭ ﻓﺎﺭﻍ ﺜﻡ ﻁﺒﺎﻋﻪ ﺠﻤﻠﻪ ﺍﺨﺭﻯ ﺴﻭﻑ ﻴﻜﻭﻥ ﺸﻜل
ﺍﻟﺒﺭﻨﺎﻤﺞ ﻜﺎﻻﺘﻲ ::
Begin
;)'Writeln ('My Name is wajdy essam
;Writeln
;)' Write (‘do you understand the lesson
End.
ﺍﻟﻤﺨﺭﺠﺎﺕ ﺴﻭﻑ ﺘﻜﻭﻥ ﻜﺎﻻﺘﻲ :
My name is wajdy essam
28
ﺍﻜﺘﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺩﺍﺨل ﺒﻴﺌﻪ ﺍﻟﺘﻁﻭﻴﺭ ،ﻭﻗﻡ ﺒﺘﺭﺠﻤﺘﻪ ﺜﻡ ﺒﺘﺸﻐﻴﻠﻪ .ﺴﺘﺠﺩ ﺍﻟﺸﺎﺸﻪ
! Hello World ﺘﻌﺭﺽ :
ﺍﺫﺍ ﺘﻡ ﺫﻟﻙ ﻓﺘﻬﺎﻨﻴﻨﺎ ﻟﻙ ! ﻓﻘﺩ ﻨﺠﺤﺕ ﻓﻲ ﻜﺘﺎﺒﻪ ﺍﻭل ﺒﺭﻨﺎﻤﺞ ﻟﻙ ﻓﻲ ﺒﺎﺴﻜﺎل ،ﻗﺩ
ﻴﺒﺩﻭﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺴﻴﻁﺎ ﻟﻠﻐﺎﻴﻪ ،ﻟﻜﻥ ﻋﻠﻴﻙ ﺍﻥ ﺘﺩﺭﻙ ﺍﻥ ﺠﻤﻴﻊ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ
ﺍﻟﻤﺤﺘﺭﻓﻴﻥ ﺒﺩﺅﺍ ﺒﻬﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ .
29
ﻤﺎ ﻫﻭ ﺍﻟﻤﺘﻐﻴﺭ
ﻓﻲ ﺍﻏﻠﺏ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﻪ ﺍﻟﻤﺘﻐﻴﺭ variableﻫﻭ ﻤﻜﺎﻥ ﻟﺘﺨﺯﻴﻥ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ،
ﺍﻟﻤﺘﻐﻴﺭ ﻫﻭ ﻤﻭﻗﻊ ﺒﺫﺍﻜﺭﻩ ﺠﻬﺎﺯﻙ ﺤﻴﺙ ﻴﻤﻜﻨﻙ ﺘﺨﺯﻴﻥ ﻗﻴﻤﻪ ﺒﺩﺍﺨﻠﻪ ﺜﻡ ﺍﺴﺘﻌﺎﺩﻩ
ﻫﺫﻩ ﺍﻟﻘﻴﻤﻪ ﻤﻨﻪ ﻓﻴﻤﺎ ﺒﻌﺩ .
ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺘﺼﻭﺭ ﺫﺍﻜﺭﻩ ﺠﻬﺎﺯﻙ ﻋﻠﻰ ﻫﻴﺌﻪ ﺴﻠﺴﻠﻪ ﻤﻥ ﺍﻟﺨﺎﻨﺎﺕ ،ﻭﻜل ﺨﺎﻨﻪ
ﺘﻤﺜل ﻭﺍﺤﺩﻩ ﻤﻥ ﻋﺩﻩ ﺨﺎﻨﺎﺕ ﻤﺘﺭﺍﺼﻪ ،ﻭﺠﻤﻴﻊ ﺍﻟﺨﺎﻨﺎﺕ )ﺍﻭ ﻤﻭﺍﻗﻊ ﺍﻟﺫﺍﻜﺭﻩ( ﻴﺘﻡ
ﺘﺭﻗﻴﻤﻬﺎ ﺘﺴﻠﺴﻠﻴﺎ .
ﺘﻌﺭﻑ ﻫﺫﻩ ﺍﻻﺭﻗﺎﻡ ﺒﺄﻨﻬﺎ ﻋﻨﺎﻭﻴﻥ ﺍﻟﺫﺍﻜﺭﻩ ،ﻴﻘﻭﻡ ﺍﻟﻤﺘﻐﻴﺭ ﺒﺤﺠﺯ ﺨﺎﻨﻪ ﺃﻭ ﺍﻜﺜﺭ
ﺒﺤﻴﺙ ﺘﺨﺯﻥ ﻓﻴﻬﺎ ﺍﺤﺩﻯ ﺍﻟﻘﻴﻡ .
30
اﻟﺬاﻛﺮه
102
ﻜل ﺨﺎﻨﻪ ﺘﺸﻐل ﻭﺍﺤﺩ ﺒﺎﻴﺕ .ﺍﺫﺍ ﻜﺎﻥ ﺤﺠﻡ ﺍﻟﻤﺘﻐﻴﺭ ﺍﻟﺫﻱ ﺘﻨﺸﺌﻪ ﺍﺭﺒﻌﻪ ﺒﺎﻴﺕ ،
ﻓﻬﺫﺍ ﻤﻌﻨﺎﻩ ﺍﻨﻪ ﺴﻴﺤﺘﺎﺝ ﺍﻟﻰ ﺍﺭﺒﻌﻪ ﺒﺎﻴﺕ ﻤﻥ ﺍﻟﺫﺍﻜﺭﻩ .ﺍﻭ ﺍﺭﺒﻌﻪ ﺨﺎﻨﺎﺕ .ﻴﺨﺒﺭ
ﻨﻭﻉ ﺍﻟﻤﺘﻐﻴﺭ )ﻤﺜل ﺍﻟﻌﺩﺩ ﺍﻟﺼﺤﻴﺢ ( integerﺍﻟﻤﺘﺭﺠﻡ ﺒﻤﻘﺩﺍﺭ ﺍﻟﺫﺍﻜﺭﻩ )ﻋﺩﺩ
ﺍﻟﺨﺎﻨﺎﺕ ( ﺍﻟﺘﻰ ﺴﻴﺤﺠﺯﻫﺎ ﺍﻟﻤﺘﻐﻴﺭ .
ﻫﻨﺎﻙ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺨﺘﻠﻔﻪ ﻓﻲ ﻟﻐﻪ ﺒﺎﺴﻜﺎل ﺍﻴﻀﺎ ﺒﺄﺒﻌﺎﺩ ﻤﺨﺘﻠﻔﻪ ،،
ﻭﺤﺠﻭﻡ ﻤﺨﺘﻠﻔﻪ ﺍﻴﻀﺎ !! ﻫﺫﻩ ﻫﻲ ﺍﺸﻬﺭﻫﺎ ::
31
ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ
ﻜﻤﺎ ﺭﺃﻴﻨﺎ ﺴﺎﺒﻘﺎﹰ )ﺍﻟﻴﻭﻡ ﺍﻟﺜﺎﻨﻲ( ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻌﺎﻡ ﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﺴﻜﺎل ،ﺭﺃﻴﻨﺎ ﻋﺒﺎﺭﻩ
varﻭﻫﻨﺎ ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺯﺀ ﺴﻭﻑ ﻨﻌﻠﻥ ﻋﻥ ﺠﻤﻴﻊ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﺘﻰ ﻨﺤﺘﺎﺠﻬﺎ ﻓﻲ
ﺍﻟﺒﺭﻨﺎﻤﺞ )ﻜل ﺒﺭﻨﺎﻤﺞ ﻟﻪ ﻤﺘﻐﻴﺭﺍﺕ ﻋﻠﻰ ﺤﺴﺏ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ( .
32
ﻤﺜﺎل //
Var
;X:integer
;Y:string
;A,b:char }ﻟﻼﻋﻼﻥ ﻋﻥ ﻤﺘﻐﻴﺭﻴﻥ ﻤﻥ ﻨﻭﻉ ﻭﺍﺤﺩ{
ﻋﻨﺩ ﺍﻋﻼﻨﻙ ﻋﻥ ﻤﺘﻐﻴﺭ ،ﻴﺘﻡ ﺘﺨﺼﻴﺹ )ﺤﺠﺯ( ﺍﻟﺫﺍﻜﺭﻩ ﻟﻬﺫﺍ ﺍﻟﻤﺘﻐﻴﺭ ،ﻗﻴﻤﻪ
ﻫﺫﺍ ﺍﻟﻤﺘﻐﻴﺭ ﺴﺘﻜﻭﻥ ﺍﻱ ﻗﻴﻤﻪ ﺘﺼﺎﺩﻑ ﻭﺠﻭﺩﻫﺎ ﺒﺎﻟﺫﺍﻜﺭﻩ ﻓﻲ ﻫﺫﺍ ﺍﻟﻭﻗﺕ ،
ﺴﺘﻌﺭﻑ ﺒﻌﺩ ﻗﻠﻴل ﻜﻴﻔﻴﻪ ﺘﻌﻴﻴﻥ ﻗﻴﻤﻪ ﺠﺩﻴﺩﻩ ﻟﻬﺫﻩ ﺍﻟﺫﺍﻜﺭﻩ .
33
ﻭﻫﺫﺍ ﺍﻟﺘﻌﻴﻴﻥ ﻴﺠﺏ ﺍﻥ ﻴﻜﻭﻥ ﺩﺍﺨل ﺒﺩﺍﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺃﻱ ﺒﻌﺩ ﺍﻟـ begin
ﻟﻠﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ .
ﻤﺜﺎل //
Var
;X: integer
Begin
;X: = 10
;)Writeln(x
End.
ﺍﻟﻤﺨﺭﺠﺎﺕ ﺴﻭﻑ ﺘﻜﻭﻥ ﻋﺒﺎﺭﻩ ﻋﻥ ﻗﻴﻤﻪ Xﻭﺘﺴﺎﻭﻱ . 10
34
ﻋﻨﺩﻤﺎ ﻨﺭﻴﺩ ﺍﻥ ﻨﻁﺒﻊ ﻗﻴﻤﻪ ﻤﺘﻐﻴﺭ ﻤﺎ ﻓﻨﻜﺘﺒﻬﺎ ﺒﺩﻭﻥ ﺍﻗﻭﺍﺱ )ﺍﻟﻨﻭﻉ ﺍﻟﺜﺎﻨﻲ(.
ﺍﻤﺎ ﻓﻲ ﺤﺎﻟﻪ ﻁﺒﺎﻋﻪ ﺍﻟﺠﻤﻠﻪ ﻜﻤﺎ ﻫﻲ ﻨﺴﺘﺨﺩﻤﻬﺎ ﺒﺎﻻﻗﻭﺍﺱ )ﺍﻟﻨﻭﻉ ﺍﻻﻭل(.
35
ﺸﺭﺡ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻻﻭل ،ﺘﻡ ﺘﻌﻴﻴﻥ ﻗﻴﻤﻪ xﻭﻫﻲ ، 10ﺜﻡ ﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺜﺎﻨﻲ ﺘﻡ ﺘﻌﻴﻴﻥ
ﻗﻴﻤﻪ ﺠﺩﻴﺩﻩ ﻟﻠـ ) xﺍﻱ ﺘﻡ ﻤﺴﺢ ﺍﻟﻘﺩﻴﻤﻪ ﻭﺘﻌﻴﻴﻥ ﺍﺨﺭﻯ ﺒﺩﻟﻬﺎ ﻭﻫﻲ (2ﻭﻓﻲ
ﺍﻟﺴﻁﺭ ﺍﻻﺨﻴﺭ ﺘﻡ ﻁﺒﺎﻋﻪ ﻗﻴﻤﻪ ، xﻭﻫﻲ .2
36
ﺍﺭﻴﺩ ﺍﻥ ﺍﻨﻭﻩ ﺍﻨﻪ ﻓﻲ ﻋﻤﻠﻴﺎﺕ ﺍﻻﺩﺨﺎل " ﻻ ﻴﻬﻡ ﺍﺫﺍ ﺍﺩﺨﻠﺕ ﺍﻟﻌﺩﺩ ﺍﻻﻭل ﺜﻡ ﻤﺴﺎﻓﻪ
ﺜﻡ ﺍﻟﻌﺩﺩ ﺍﻟﺜﺎﻨﻲ ،ﺍﻭ ﺍﺩﺨﻠﺕ ﺍﻟﻌﺩﺩ ﺍﻻﻭل ﺜﻡ ﺍﻨﺘﺭ ﺜﻡ ﺍﻟﻌﺩﺩ ﺍﻟﺜﺎﻨﻲ " .
37
ﺍﻟﻤﺜﺎل ﺍﻟﺜﺎﻨﻲ
Program example (input, output);
Uses wincrt;
Var
X: integer;
S: string;
Begin
Write ('Enter your Name: ');
Readln(s);
Write ('Enter your Age: ');
Readln(x);
Writeln ('Your Name is: ',s,' your age is: ',x);
End.
38
ﺸﺭﺡ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﺍﻟﺴﻁﺭﻴﻥ ﺍﻻﻭﻟﻴﻥ ،ﻤﻌﺭﻭﻓﻴﻥ ﺍﻻﻭل ﻻﺴﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻟﺜﺎﻨﻲ ﻟﻠﻭﺤﺩﻩ ﺍﻟﻤﺴﺘﺨﺩﻤﻪ
)ﻨﻅﺭﺍ ﻻﻥ ﻫﻨﺎﻙ ﻤﺨﺭﺠﺎﺕ )ﻋﺒﺎﺭﻩ (writelnﻓﻴﺠﺏ ﺍﻥ ﻨﺴﺘﺨﺩﻡ ﻭﺤﺩﻩ
. ( wincrt
ﺍﻟﺴﻁﺭ ﺍﻟﺜﺎﻟﺙ ،ﻫﻭ ﻟﻼﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ .ﻭﻗﺩ ﺘﻡ ﺍﻻﻋﻼﻥ ﺍﻟﻤﺘﻐﻴﺭ xﻤﻥ
ﺍﻟﻨﻭﻉ ﺍﻟﺼﺤﻴﺢ ، integerﻭﺍﻟﻤﺘﻐﻴﺭ sﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺴﻠﺴﻠﻪ ﺍﻟﻨﺼﻴﻪ . string
39
ﻫﺫﻩ ﺍﻻﺭﻗﺎﻡ ﻤﻥ ﺍﻟﺼﻌﺏ ﺤﻔﻅﻬﺎ ،ﻟﻠﺒﻌﺽ ﻤﻨﺎ ﻋﻠﻰ ﺍﻻﻗل ،ﻟﻠﺫﻙ ﺒﺎﺴﻜﺎل ﺘﻘﺩﻡ
ﺍﺩﺍﻩ ﺠﻴﺩﻩ ﻟﻠﺜﻭﺍﺒﺕ ،ﺍﻴﻀﺎ ﺘﻭﺠﺩ ﺒﻌﺽ ﺍﻟﺩﻭﺍل ﺍﻟﻤﻌﺭﻓﻪ ﻤﺴﺒﻘﺎ ﻓﻴﻬﺎ ﻤﺜﻼ .pi
ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﺜﻭﺍﺒﺕ
ﻴﻜﻭﻥ ﻋﺎﺩﻩ ﻓﻭﻕ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ،ﻜﻤﺎ ﻴﺄﺨﺫ ﺍﻟﺸﻜل ﺍﻻﺘﻲ /
Const
; Myconst = 1234
40
ﻟﻜﻥ ﺘﺫﻜﺭ ﻜﻠﻤﺘﻰ ﻫﺫﻩ ،ﺍﻟﺜﻭﺍﺒﺕ ﻏﻴﺭ ﻗﺎﺒﻠﻪ ﻟﻠﺘﻐﻴﺭ ﺍﺒﺩﺍ ﺍﺒﺩﺍ ﺍﻻ ﻓﻲ ﺤﺎﻟﻪ ﻭﺍﺤﺩﻩ
ﻓﻘﻁ ﻭﻫﻲ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﺜﺎﺒﺕ ﺒﻬﺫﺍ ﺍﻟﺸﻜل/
Const
;Myconst: mytype =the value
ﻤﺜﺎل //
Const
;Mc: integer = 40
ﺍﻴﻀﺎ /
41
ﻤﺜﺎل//
Const
;X:word=10
Var
;Z:integer
Begin
;Z:= 2
;X:= 20
;)Writeln(x*z
End.
ﺴﻬل ،ﺍﻟﻴﺱ ﻜﺫﻟﻙ ،ﻜﻤﺎ ﻓﻲ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻌﺎﺩﻴﻪ .
42
ﺍﻟﺘﻌﺒﲑﺍﺕ ﻭﺍﻟﻌﺒﺎﺭﺍﺕ
43
ﺍﻟﺘﻌﺒﻴﺭﺍﺕ
ﺍﻱ ﺸﻲ ﻴﻨﺘﺞ ﻋﻨﻪ ﺍﺤﺩﻯ ﺍﻟﻘﻴﻡ ﻴﻭﺼﻑ ﺒﺄﻨﻪ ﺘﻌﺒﻴﺭ . expressionﻭﺍﻟﺘﻌﺒﻴﺭ ﻫﻭ
ﻤﺎ ﻴﻌﻭﺩ ﺒﺎﺤﺩﻯ ﺍﻟﻘﻴﻡ .ﻓﺎﻟﻌﺒﺎﺭﻩ 2+3ﺘﻌﻭﺩ ﺒﺎﻟﻘﻴﻤﻪ ، 5ﺠﻤﻴﻊ ﺍﻟﺘﻌﺒﻴﺭﺍﺕ ﻫﻲ
ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ ﻋﺒﺎﺭﺍﺕ .
44
ﺸﻜﻠﻬﺎ ﺍﻟﻌﻤﻠﻴﻪ
+ ﺍﻟﺠﻤﻊ
- ﺍﻟﻁﺭﺡ
* ﺍﻟﻀﺭﺏ
div ﻗﺴﻤﻪ ﻋﺩﺩ ﺼﺤﻴﺢ
/ ﻗﺴﻤﻪ ﻋﺩﺩ ﺤﻘﻴﻘﻲ
mod ﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﻪ
ﺍﻟﻌﻼﻤﻪ ﺍﻟﻌﻤﻠﻴﻪ
> ﺍﻜﺒﺭ
ﺍﻜﺒﺭ ﻤﻥ ﺍﻭ ﻴﺴﺎﻭﻱ =>
< ﺍﺼﻐﺭ
ﺍﺼﻐﺭ ﻤﻥ ﺍﻭ ﻴﺴﺎﻭﻱ =<
= ﻴﺴﺎﻭﻱ
>< ﻻ ﻴﺴﺎﻭﻱ
45
46
ﻓﻲ ﺤﺎل ﻭﺠﻭﺩ ﻤﻌﺎﻤﻠﻴﻥ ﺤﺴﺎﺒﻴﻥ ﻟﻬﻤﺎ ﻨﻔﺱ ﺍﻻﺴﺒﻘﻴﻪ ،ﻓﺴﻭﻑ ﻴﺠﺭﻱ ﺘﻨﻔﻴﺫﻫﻤﺎ
ﻤﻥ ﺍﻟﻴﺴﺎﺭ ﺍﻟﻰ ﺍﻟﻴﻤﻴﻥ .ﻓﻔﻰ ﺍﻟﻌﺒﺎﺭﻩ
;X:= 5+3+8*9+6*4
ﻴﺠﺭﻱ ﻋﻤﻠﻴﻪ ﺍﻟﻀﺭﺏ ﺍﻭﻻ ،ﻤﻥ ﺍﻟﻴﺴﺎﺭ ﺍﻟﻰ ﺍﻟﻴﻤﻴﻥ .ﻭﻋﻠﻰ ﺍﺴﺎﺱ ﺍﻥ
9*8=72ﻭﺍﻥ ، 6*4=24ﻓﺈﻥ ﺍﻟﻌﺒﺎﺭﻩ ﺴﺘﺼﺒﺢ :
;X:= 5+3+72+24
ﻓﻲ ﺒﻌﺽ ﺍﻻﺤﻴﺎﻥ ،ﻴﺘﻭﺠﺏ ﻋﻠﻴﻙ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻻﻗﻭﺍﺱ ﻟﺘﻐﻴﺭ ﺘﺭﺘﻴﺏ ﺍﻻﺴﺒﻘﻴﻪ ،
ﺤﻴﺙ ﺍﻥ ﺍﻻﻗﻭﺍﺱ ﺘﺄﺨﺫ ﺩﺭﺠﻪ ﺍﺴﺒﻘﻴﻪ ﺍﻋﻠﻰ ﻤﻥ ﺠﻤﻴﻊ ﺍﻟﻤﻌﺎﻤﻼﺕ ﺍﻟﺤﺴﺎﺒﻴﻪ .
47
ﺍﺭﺃﻴﺕ ،ﺼﺤﻴﺢ ﺍﻨﻪ ﻴﺄﺨﺫ ﻭﻗﺘﺎ ﺍﻁﻭل ﻓﻲ ﺍﻟﻜﺘﺎﺒﻪ ،ﻜﻤﺎ ﻴﺴﺘﺨﺩﻡ ﻤﺘﻐﻴﺭﺍﺕ ﺍﻜﺜﺭ ،
ﻟﻜﻨﻪ ﺍﺴﻬل ﻜﺜﻴﺭﺍ ﻓﻲ ﺍﻻﺴﺘﻴﻌﺎﺏ .
48
ﺍﳉﻤﻞ ﺍﻟﺸﺮﻃﻴﻪ
ﻓﻤﺜﻼ ،ﺍﺫﺍ ﻓﻬﻤﺖ ﺍﻟﺪﺭﺱ ﻓﺴﻮﻑ ﺍﻧﺘﻘﻞ ﺍﱃ ﺍﻟﺪﺭﺱ ﺍﻟﺘﺎﱄ ﻭﺍﻻ ﺳﻮﻑ
ﺍﻋﻴﺪ ﻗﺮﺍﺋﺘﻪ ﻣﺮﻩ ﺍﺧﺮﻯ !
ﺤﺴﻨﺎ ،ﻜﻴﻑ ﻴﻔﻬﻡ ﺍﻟﻤﺘﺭﺠﻡ ﺫﻟﻙ ؟ ﺍﻭﻻ ﻴﻘﻭﻡ ﺒﺎﻟﺘﺤﻘﻕ ﻤﻥ ﺍﻟﺸﺭﻁ ،condition
ﺍﺫﺍ ﻜﺎﻥ ﺍﻟﺸﺭﻁ ﻤﺘﺤﻘﻕ ﻓﺎﻨﻪ ﻴﻘﻭﻡ ﺒﺘﻨﻔﻴﺫ ﻤﺎ ﺒﻴﻥ )ﺍﻟـ Begin (Blockﻭ ;end
ﻭﻤﺎ ﺒﻌﺩ ﺠﻤﻠﻪ ﻭﺍﻻ elseﻓﺎﻨﻪ ﻴﻘﻭﻡ ﺒﺘﺠﺎﻫﻠﻬﺎ )ﻫﺫﺍ ﻓﻲ ﺤﺎﻟﻪ ﺍﻟﺸﺭﻁ ﻤﺘﺤﻘﻕ( .
ﺍﻤﺎ ﺍﺫﺍ ﻟﻡ ﻴﻜﻥ ﻤﺘﺤﻘﻕ ﻓﺎﻨﻪ ﻴﺫﻫﺏ ﺍﻟﻰ ﺠﻤﻠﻪ elseﻭﻴﻘﻭﻡ ﺒﺘﻨﻔﻴﺫ ﻤﺎ ﺍﻟـ
Blockﺍﻟﺨﺎﺹ ﺒﺎﻟﺠﻤﻠﻪ . else
50
ﺍﻤﺎ ﺍﺫﺍ ﻜﺎﻥ ﺒﻌﺩ ﺍﻟﺠﻤﻠﻪ ifﺍﻜﺜﺭ ﻤﻥ ﺠﻤﻠﻪ ﻤﺭﺍﺩ ﺘﻨﻔﻴﺫﻫﺎ ﻓﻲ ﺤﺎﻟﻪ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ
ﻓﺎﻨﻪ ﻴﺠﺏ ﺍﻥ ﻨﻀﻊ ﺍﻟـ . block
ﻤﺜﺎل//
Begin
;)Read(x
If x<10 then
Begin
;Sum:=x+20
;)Write(sum
;End
;)'Write('done
End.
51
:ﻤﻼﺤﻅﻪ
ﻭﺒﻌﺩﻫﺎ ﺴﻴﻘﻭﻡblock ( ﻓﺈﻨﻪ ﺴﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟـ5=x ﻓﻲ ﺤﺎل ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ )ﻤﺜﻼ
.done ﺒﻁﺒﺎﻋﻪ ﺍﻟﺠﻤل ﺍﻟﺘﻰ ﺘﻠﻴﻪ
//ﻤﺜﺎل
Program wajdy (input,output);
Uses wincrt;
Var
I:integer;
Begin
Write('Please enter any number: ');
Readln(i);
If i <=10 then
Begin
Writeln('hello world');
Writeln('wajdy essam');
Writeln('O.K');
End;
Writeln('do you anderstand ?? ');
End.
52
ﺍﻟﻤﺨﺭﺠﺎﺕ
· ﻓﻲ ﺤﺎﻟﻪ / i=5
53
//ﻤﺜﺎل ﺍﺨﺭ
Begin
Read(x);
If x>0 then
Begin
Writeln('You Enterd 0');
Writeln('o.k');
End
Else
Begin
Writeln('you enterd not 0 ');
Writeln('o.k');
End;
Writeln('done');
End.
ﺍﻟﻤﺨﺭﺠﺎﺕ
: ﻓﺈﻥ ﺍﻟﻤﺨﺭﺠﺎﺕ ﻫﻲ0 ﺍﺫﺍ ﻜﺎﻥ ﺍﻟﻤﺩﺨل
You Enterd 0
o.k
done
54
ﻻﺤﻅ ﺍﺨﺘﻔﺎﺀ ﻋﻼﻤﻪ ; ﻗﺒل ﺠﻤﻠﻪ ، elseﻭﻫﻜﺫﺍ ﻓﻲ ﺠﻤﻴﻊ ﺠﻤل .ifﺍﺫﺍ ﻜﺎﻨﺕ
ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺠﻤﻠﻪ elseﻓﺈﻥ ﺍﻟﺠﻤﻠﻪ ﺍﻟﺘﻰ ﺘﻜﻭﻥ ﻗﺒﻠﻬﺎ ﻻ ﺘﺤﺘﻭﻱ ﻋﻠﻰ
semicolonﻻﻨﻬﺎ ﺘﻌﺘﺒﺭ ﺠﻤﻠﻪ ﻭﺍﺤﺩﻩ ﻤﻥ ﺍﻟﺒﺩﺍﻴﻪ .
ﻤﺜﺎل//
Begin
If x<10 then
Begin
;)' Writeln(' x is less than 10
;)'If x>3 then write('x is more than 3
;End
End.
ﻨﻌﻡ ﻨﻌﻡ ،ﻜﻡ ﻫﻭ ﺠﻤﻴل ،ﺍﻴﻀﺎ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﺘﺤﺘﻭﻱ ifﺍﻟﺜﺎﻨﻴﻪ )ﻓﻲ
ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ( ﻋﻠﻰ ﺍﻜﺜﺭ ﻤﻥ ﺍﻤﺭ ﺍﻭ ﻋﺒﺎﺭﻩ ﻭﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﻪ ﻴﺠﺏ ﺍﻥ ﺘﻭﻀﻊ
ﺩﺍﺨل blockﺍﺨﺭ )ﺃﻱ beginﻭ ;. ( end
55
ﺘﻘﺩﻡ ﺒﺎﺴﻜﺎل ﺍﺭﺒﻌﻪ ﻁﺭﻕ ﻟﺭﺒﻁ ﺍﻟﺸﺭﻭﻁ ﺒﻌﻀﻬﺎ ﺒﺒﻌﺽ ﻭﻫﻲ :
not,And , or, xor
ﺠﻤﻠﻪ orﺍﻭ:
ﻤﻌﻨﺎﻫﺎ ﺍﻨﻪ ﻻﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺸﺭﻁ ﺍﻭ ﺍﻟـ blockﺍﻻ ﺍﺫﺍ ﻜﺎﻥ ﺍﺤﺩ ﺍﻟﺸﺭﻁﻴﻥ )ﺍﻭ
ﻜﻼﻫﻤﺎ( ﻤﺘﺤﻘﻕ
ﺠﻤﻠﻪ :xor
ﻤﻌﻨﺎﻫﺎ ﺍﻨﻪ ﻻﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺸﺭﻁ ﺍﻭ ﺍﻟـ blockﺍﻻ ﺍﺫﺍ ﻜﺎﻥ ﻫﻨﺎﻙ ﺸﺭﻁ ﻭﺍﺤﺩ ﻓﻘﻁ
ﻤﺘﺤﻘﻕ
56
ﺍﻴﻀﺎ ﻻﺤﻅ ﻭﻀﻊ ﺍﻻﻗﻭﺍﺱ ﻓﻲ ﻜل ﺸﺭﻁ ،ﺍﻱ ﺍﻥ ﻜل ﻋﻤﻠﻴﻪ ﺭﺒﻁ ﻴﺠﺏ ﺍﻥ
ﺘﻭﻀﻊ ﻜل ﺸﺭﻁ ﻓﻲ ﻗﻭﺱ .
57
58
59
ﺠﻤﻠﻪ in
ﺘﺴﺘﺨﺩﻡ ﺠﻤﻠﻪ inﻓﻲ ﺍﻟﺠﻤﻠﻪ ﺍﻟﺸﺭﻁﻴﻪ ﻟﺘﺤﺩﻴﺩ ﺍﻟﻤﺩﻯ ،ﺩﻋﻨﺎ ﻨﺭﻯ ﻜﻴﻔﻴﻪ
ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ .
ﻓﻤﺜﻼ ﺍﻟﻌﺒﺎﺭﻩ ﺍﻻﻭﻟﻰ:
;)'If (x>=90) and (x<=100) then writeln('A
ﺍﺭﺃﻴﺕ ،ﻜﻡ ﻫﻭ ﺴﻬل ،ﻴﺘﻡ ﺘﺤﺩﻴﺩ ﺍﻟﻤﺩﻯ ﺒﻜﺘﺎﺒﻪ ﺍﻟﻌﻨﺼﺭ ﺍﻻﻭل ﻭﺍﻻﺨﻴﺭ ﻭﺒﻴﻨﻬﻡ
ﻨﻘﻁﺘﺎﻥ ﻓﻘﻁ ) ، ( ..ﻻﺤﻅ ﻨﻘﻁﺘﺎﻥ ﻓﻘﻁ !
ﺍﻴﻀﺎ ﻟﻭ ﻜﺎﻥ ﻫﻨﺎﻙ ﺍﻋﺩﺍﺩ ﻤﻌﻴﻨﻪ ﻓﻲ ﺤﺎل ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺠﻤﻠﻪ inﺴﻭﻑ ﺘﺼﺒﺢ
ﺒﺎﻟﺸﻜل ﺍﻻﺘﻰ :
;)'If z in [5,9,6,8,66] then writeln('O.k
60
ﺤﻴﺙ )ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻻﻭل( ﻗﻤﻨﺎ ﺒﻜﺘﺎﺒﻪ، (ﻨﻌﻭﺩ ﺍﻟﻰ ﺍﻟﻤﺜﺎل ﺍﻻﻭل )ﺩﺭﺠﺎﺕ ﺍﻟﻁﺎﻟﺏ
if ﺍﻟﻤﺘﺩﺍﺨﻠﻪ )ﺃﻱ ﺠﻤﻠﻪif ﻭﻟﻜﻥ ﻤﺎ ﺭﺃﻴﻙ ﻟﻭ ﻗﻤﻨﺎ ﺒﻜﺘﺎﺒﺘﻪ ﺒـif ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺠﻤﻠﻪ
.( ﺍﺨﺭﻯif ﺩﺍﺨل ﺠﻤﻠﻪ
Begin
Read(x);
If x>= 90 then mark:= 'A'
Else
If x >= 80 then mark:='B'
Else
If x>=70 then mark:= 'C'
Else
If x>=60 then mark:='D'
Else
If x>= 50 then mark:='E'
Else
If x>=0 then mark:='F';
Writeln(mark);
End.
61
ﻤﻌﻨﻰ ﻫﺫﺍ ﺍﻟﺴﻁﺭ ﺍﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﻪ xﺍﻜﺒﺭ ﻤﻥ ﺍﻭ ﺘﺴﺎﻭﻱ 90ﻓﻘﻡ ﺒﺘﺨﺯﻴﻥ Aﻓﻲ
ﺍﻟﻤﺘﻐﻴﺭ ) markﻻﺤﻅ ﺍﻟﻌﻼﻤﻪ ' ﻋﻠﻰ ﺠﺎﻨﺒﻲ Aﻻﻨﻬﺎ ﻤﻥ ﺍﻟﻨﻭﻉ ( charﺜﻡ
ﺍﻀﻔﻨﺎ ﺠﻤﻠﻪ ﻭﺍﻻ ) elseﺃﻱ ﺍﺼﻐﺭ ﻤﻥ ﺍﻭ ﺘﺴﺎﻭﻱ (89ﻭﻗﻤﻨﺎ ﺒﻜﺘﺎﺒﻪ ﺍﻟﺸﺭﻁ
ﺍﻟﺜﺎﻨﻲ ،ﻭﺍﻀﺎﻓﻪ elseﺍﻴﻀﺎ ،ﻭﻫﻜﺫﺍ ﻓﻲ ﺠﻤﻴﻊ ﺍﻟﺠﻤل ﺍﻟﺒﺎﻗﻴﻪ .
ﻓﺈﺫﺍ ﻟﻡ ﺘﺘﺤﻘﻕ ﺍﻟﺠﻤﻠﻪ ﺍﻻﻭﻟﻰ ،ﺴﻴﺫﻫﺏ ﺍﻟﻰ ﺍﻟﺠﻤﻠﻪ ﺍﻟﺜﺎﻨﻴﻪ ،ﻓﺈﺫﺍ ﻟﻡ ﺘﺘﺤﻘﻕ
ﺴﻴﺫﻫﺏ ﺍﻟﻰ ﺍﻟﺠﻤﻠﻪ ﺍﻟﺜﺎﻨﻴﻪ ﻭﻫﻜﺫﺍ ،ﺍﻟﻰ ﺍﻥ ﻴﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ ،ﻭﻴﻨﺘﻘل ﺍﻟﻰ ﺠﻤﻠﻪ
ﺍﻟﻁﺒﺎﻋﻪ .
ﻻﺤﻅ ﺍﺨﺘﻔﺎﺀ ﻋﻼﻤﻪ ; ) (semicolonﻓﻲ ﺠﻤﻴﻊ ﺍﻟﺠﻤل ﺍﻟﺘﻰ ﻴﺄﺘﻲ ﺒﻌﺩﻫﺎ ﺠﻤﻠﻪ
elseﺍﻻ ﺍﻟﺸﺭﻁ ﺍﻻﺨﻴﺭ ﺒﺴﺒﺏ ﺍﻥ ﻤﺎ ﺒﻌﺩﻩ ﻟﻴﺱ ﺠﻤﻠﻪ . else
ﻭﻓﻲ ﺍﻻﺨﻴﺭ ﻗﻤﻨﺎ ﺒﻁﺒﺎﻋﻪ ﻗﻴﻤﻪ ﺍﻟﻤﺘﻐﻴﺭ . mark
63
ﺍﻱ ﻓﻲ ﺤﺎل ﻜﺘﺎﺒﻪ ﻤﺩﻯ ﻤﻌﻴﻥ ﻴﻜﻭﻥ ﺫﻟﻙ ﻋﻥ ﻁﺭﻴﻕ ﻜﺘﺎﺒﻪ ﺍﻟﻌﻨﺼﺭ ﺍﻻﻭل ﻓﻲ
ﺍﻟﻤﺩﻯ ﺜﻡ ﺍﻟﻨﻘﻁﺘﺎﻥ ) ، ( ..ﺜﻡ ﻨﻜﺘﺏ ﺍﻟﻌﻨﺼﺭ ﺍﻻﺨﻴﺭ ﻓﻲ ﺍﻟﻤﺩﻯ .
ﺍﻤﺎ ﺍﺫﺍ ﺍﺭﺩﺕ ﻜﺘﺎﺒﻪ ﻋﻨﺎﺼﺭ ﻤﺨﺘﻠﻔﻪ ،ﻓﺘﺘﻡ ﻜﺘﺎﺒﻪ ﺍﻟﻌﻨﺎﺼﺭ ﻭﺍﻟﻔﺼل ﺒﻴﻨﻬﻡ
ﺒﻔﺎﺼﻠﻪ ﻜﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ .
ﺍﻴﻀﺎ ﻟﻭ ﻜﺎﻥ ﻫﻨﺎﻙ ﺍﻜﺜﺭ ﻤﻥ ﺍﻤﺭ ﻓﻲ ﺍﻟﺸﺭﻁ ﺍﻻﻭل ﺃﻱ ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﺍﻟﺩﺭﺠﻪ ﻤﺎ
ﺒﻴﻥ 90ﺍﻟﻰ 100ﻴﺠﺏ ﺍﻥ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﻤﺜﻼ ﺠﻤﻠﺘﻴﻥ ﻁﺒﺎﻋﻪ ﻋﻠﻰ ﺍﻟﺸﺎﺸﻪ ﻜﻴﻑ
ﻴﻤﻜﻥ ﻓﻌل ﺫﻟﻙ ..؟
64
/ﻤﺜﺎل
Case x of
90..100:
Begin
Writeln('Your good man');
Writeln(' Your mark is A');
Writeln('Have anice day');
End;
80..89:
Begin
Writeln('Thank you very mach');
Writeln('Your mark is B');
End;
0..49:
Begin
Writeln('Im sorry');
Writeln('your maek is F');
End;
Else
Writeln('wrong');
End;
End.
65
ﻭﻤﺎﺫﺍ ﺍﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﻪ xﺘﺴﺎﻭﻱ 60-ﺍﻭ ،،، 70؟؟ ﻻﺤﻅ ﺍﻨﻨﺎ ﺍﺴﺘﺨﺩﻤﻨﺎ ﻋﺒﺎﺭﻩ
else
ﻤﻌﻨﺎﻫﺎ ﺃﻱ ﻗﻴﻤﻪ ﻟـ xﻏﻴﺭ ﺍﻟﻤﺫﻜﻭﺭﻩ ﺴﻭﻑ ﻴﻜﻭﻥ ﺍﻟﻤﺨﺭﺠﺎﺕ wrong
66
ﺍﳊﻠﻘﺎﺕ ﻭﺍﻟﺘﻜﺮﺍﺭﺍﺕ
ﰲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻻﺣﻴﺎﻥ ،ﺳﻮﻑ ﻧﺮﻳﺪ ﺗﻜﺮﺍﺭ ﲨﻠﻪ )ﻣﺜﻼ ﺗﻜﺮﺍﺭ ﻃﺒﺎﻋﻪ ﺍﲰﻚ ﻋﻠﻰ
ﺍﻟﺸﺎﺷﻪ( ﻭﻣﻦ ﻏﲑ ﺍﳌﻨﻄﻘﻲ ﺍﻥ ﻳﺘﻢ ﻛﺘﺎﺑﻪ ﲨﻠﻪ ﺍﻟﻄﺒﺎﻋﻪ ﻟﻌﺪﺩ ﻛﺒﲑ ﻣﺜﻼ 100ﻣﺮﻩ .
ﺍﻭ ﺍﻥ ﻳﻜﻮﻥ ﻋﺪﺩ ﺍﻟﺘﻨﻔﻴﺬ ﳎﻬﻮﻝ ﻟﺪﻯ ﺍﳌﱪﻣﺞ ،ﻻﺭﺗﺒﺎﻁ ﻫﺬﺍ ﺍﻟﻌﺪﺩ ﺑﺸﺮﻁ ﺍﻭ ﺷﺮﻭﻁ
ﻣﻌﻴﻨﻪ !
ﻟﺬﻟﻚ ﻗﺪﻣﺖ ﺑﺎﺳﻜﺎﻝ ﺛﻼﺛﻪ ﺍﻧﻮﺍﻉ ﻣﻦ ﺍﻟﺘﻜﺮﺍﺭ ﻛﻞ ﻣﻨﻬﺎ ﻟﻪ ﻭﻇﻴﻔﻪ ﺍﻭ ﻏﺮﺽ ﻣﻌﲔ ﻭﻫﻢ
:
· For ….. To …. do
· While ……. Do
· Repeat …… until
ﻭﻗﺒﻞ ﺍﻟﺒﺪﺍﻳﻪ ﰲ ﻫﺬﻩ ﺍﳉﻤﻞ ،ﳚﺐ ﺍﻥ ﻧﻌﺮﻑ ﻧﺸﺄﻩ ﺍﻟﺘﻜﺮﺍﺭ ﻭﺑﺪﺍﻳﺘﻪ )ﲨﻠﻪ
. (goto
67
ﻤﺜﺎل//
68
ﺍﻟﺸﺭﺡ
ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻋﻼﻩ ،ﺘﻡ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻌﻨﻭﺍﻥ labelﺒﺎﺴﻡ ، wajdyﻭﻓﻲ
ﺒﺩﺍﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭﻀﻌﻨﺎ ﺍﻟﺸﺭﻁ ﺍﻟﺘﺎﻟﻲ :ﺍﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﻪ xﺍﻜﺒﺭ ﻤﻥ ﺍﻭ
ﺘﺴﺎﻭﻱ 10ﻓﻘﻡ ﺒﺎﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ . exitﺍﻤﺎ ﺍﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﻪ xﺍﻗل ﻤﻥ
10ﻓﺘﻭﺠﻪ ﺍﻟﻰ ﺍﻟﻌﻨﻭﺍﻥ ، wajdyﻓﻲ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ،ﺍﻟﻌﻨﻭﺍﻥ ﻤﺘﺒﻭﻋﺎ
ﺒﻨﻘﻁﺘﻴﻥ ﺭﺍﺴﻴﺘﻴﻥ ﻭﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺠﻤﻠﻪ ﻁﺒﺎﻋﻪ . less than 10
ﻟﻘﺩ ﺍﺩﻯ ﺍﻻﺴﺘﺨﺩﺍﻡ ﻏﻴﺭ ﺍﻟﻤﻘﻴﺩ ﻟﻌﺒﺎﺭﺕ Gotoﺍﻟﻰ ﻭﺠﻭﺩ ﺒﺭﺍﻤﺞ ﻤﺘﺸﺎﺒﻜﻪ
ﻴﺴﺘﺤﻴل ﻗﺭﺍﺀﺘﻬﺎ ﺘﻌﺭﻑ ﺒﺎﺴﻡ " ﺍﻻﻭﺍﻤﺭ ﺍﻻﺴﺒﺎﺠﻴﺘﻲ " )ﻨﻅﺭﺍ ﻟﺘﺸﺎﺒﻜﻬﺎ(
ﻭﻨﺘﻴﺠﻪ ﻟﻬﺫﺍ ﻅﻥ ﺍﻤﻀﻰ ﻤﻌﻠﻤﻭ ﻋﻠﻭﻡ ﺍﻟﻜﻤﺒﻴﻭﺘﺭ ﻓﻲ ﺍﻻﻭﻨﻪ ﺍﻻﺨﻴﺭﻩ ﻓﻲ ﺼﺏ
ﺩﺭﺱ ﻭﺍﺤﺩ ﻓﻲ ﺭﺅﻭﺱ ﺘﻼﻤﻴﺫﻫﻡ ،ﺍﻻ ﻭﻫﻭ " ﻻﺘﺴﺘﺨﺩﻡ ﻋﺒﺎﺭﺍﺕ gotoﻤﻬﻤﺎ
ﻜﺎﻨﺕ ﺍﻻﺴﺒﺎﺏ ﺍﻭ ﺍﻟﻅﺭﻭﻑ " .
69
ﻓﻲ ﺍﻟﺒﺩﺍﻴﻪ ﻗﺒل ﻜﺘﺎﺒﻪ ﺠﻤﻠﻪ ، forﻴﺠﺏ ﺍﻥ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﻤﺘﻐﻴﺭ ﻤﻌﺭﻑ ﻋﻠﻰ
ﺤﺴﺏ ﺍﻟﺘﻜﺭﺍﺭ ﺍﻟﻤﻁﻠﻭﺏ .ﺒﻤﻌﻨﻰ ﺍﺫﺍ ﺍﻟﺘﻜﺭﺍﺭ ﻤﻥ 1ﺍﻟﻰ 10ﻴﻜﻭﻥ ﺍﻟﻤﺘﻐﻴﺭ ﻤﻥ
ﺍﻟﻨﻭﻉ ﺍﻟﺼﺤﻴﺢ ، integerﺍﻤﺎ ﺍﺫﺍ ﻜﺎﻥ ﺍﻟﺘﻜﺭﺍﺭ ﻤﻥ ﺍﻟﺤﺭﻑ aﺍﻟﻰ ﺍﻟﺤﺭﻑ z
ﻓﻴﻜﻭﻥ ﺍﻟﻤﺘﻐﻴﺭ ﻤﻥ ﺍﻟﻨﻭﻉ ، charﻭﻫﻜﺫﺍ .
70
71
ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﻪ )ﺍﻟﺴﺎﺒﻘﻪ( ﺴﻭﻑ ﻴﻜﻭﻥ ﺍﻟﻨﺎﺘﺞ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﺒﺎﺭﻩ ﻋﻥ ﺍﻻﻋﺩﺍﺩ
ﻤﻁﺒﻭﻋﻪ )ﻜل ﻭﺍﺤﺩﻩ ﻋﻠﻰ ﺴﻁﺭ( ﻤﻥ 10ﺍﻟﻰ . 1
ﻓﻲ ﺤﺎﻟﻪ ﺍﺭﺩﻨﺎ ﻋﺩﺍﺩ ﻟﻁﺒﺎﻋﻪ ﺍﻻﺤﺭﻑ )ﻴﺠﺏ ﺍﻥ ﻴﻜﻭﻥ ﺍﻟﻤﺘﻐﻴﺭ ﻤﻥ ﺍﻟﻨﻭﻉ
.(char
ﻤﻌﻨﻰ ﻫﺫﻩ ﺍﻟﺠﻤﻠﻪ ;)' ' write(I,ﻫﻰ ﺍﻥ ﻴﻁﺒﻊ ﺍﻟﻘﻴﻤﻪ ﺍﻻﻭﻟﻰ ﻟﻠﻌﺩﺍﺩ )ﻟﻠﺤﻠﻘﻪ(
ﻭﻫﻲ aﻭﻤﻥ ﺜﻡ ﻭﻀﻊ ﻤﺴﺎﻓﻪ ،ﺍﻻﻥ ﻁﺒﺎﻋﻪ ﺍﻟﻘﻴﻤﻪ ﺍﻟﺜﺎﻨﻴﻪ ﻟﻠﻌﺩﺍﺩ ﻭﻫﻰ bﻭﺘﺭﻙ
72
.1ﺘﻘﻭﻡ ﺍﻟﺤﻠﻘﻪ ﺒﺘﻨﻔﻴﺫ ﺍﻟﺤﻠﻘﻪ ﻤﻥ ﺍﻭل ﻗﻴﻤﻪ ﺍﻟﻰ ﺍﺨﺭ ﻗﻴﻤﻪ ﻟﻬﺎ
74
75
ﻓﻲ ﺍﻟﺒﺩﺍﻴﻪ ﻴﺄﺨﺫ ﺍﻟﻤﺘﻐﻴﺭ Iﺍﻟﻘﻴﻤﻪ ﺍﻻﺒﺘﺩﺍﺌﻴﻪ ﻟﻪ ﻭﻫﻲ . 1ﻭﺴﻭﻑ ﻴﻨﺘﻘل ﺍﻟﻰ
ﺍﻟﺠﻤﻠﻪ ﺍﻟﺘﺎﻟﻴﻪ ،ﺴﻭﻑ ﻴﺠﺩ ﻫﻨﺎﻙ beginﻭ ;!! end
ﻫﻨﺎ ﺴﻴﻔﻬﻡ ﺍﻟﻤﺘﺭﺠﻡ ﺍﻥ ﻤﺎﺒﻴﻥ beginﻭﺍﻟـ ; endﺴﻭﻑ ﻴﻨﻔﺫ ﻜل ﻤﺭﻩ ﻋﻨﺩﻤﺎ
ﺘﺘﻐﻴﺭ ﻗﻴﻤﻪ ﺍﻟﻤﺘﻐﻴﺭ . I
ﺒﻤﻌﻨﻰ ﻋﻨﺩﻤﺎ ﻴﺄﺨﺫ ﺍﻟﻤﺘﻐﻴﺭ Iﺍﻟﻘﻴﻤﻪ ﺍﻻﻭﻟﻰ 1ﺴﻭﻑ ﻴﻁﺒﻊ ﺍﻟﻜﻠﻤﻪ hallowﺜﻡ
ﻴﻨﺘﻘل ﻟﻠﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻭﻴﻁﺒﻊ worldﺜﻡ ﻴﻨﺘﻘل ﺍﻟﻤﺅﺸﺭ ﻟﻠﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ .ﻜل ﻫﺫﻩ
ﺍﻟﻌﻤﻠﻴﺎﺕ ﻓﻲ ﺍﻟﻘﻴﻤﻪ ﺍﻻﻭﻟﻰ ) ( 1ﻓﻘﻁ !!
76
ﺍﺫﺍ ﻨﻌﻡ ﻓﺈﻨﻪ ﻴﻘﻭﻡ ﻤﺭﻩ ﺜﺎﻨﻴﻪ ﺒﺘﻨﻔﻴﺫ ﺍﻟـ . blockﺍﻟﻰ ﺍﻥ ﻻ ﻴﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ .
ﺍﺫﺍ ﻟﻡ ﻴﺘﺤﻘﻕ ﻓﺎﻨﻪ ﻴﻘﻭﻡ ﺒﺎﻟﺨﺭﻭﺝ ﻤﻥ ﻫﺫﻩ ﺍﻟﺤﻠﻘﻪ ،ﻭﺘﻨﻔﻴﺫ ﺍﻻﻭﺍﻤﺭ ﺒﻌﺩ ﺠﻤﻠﻪ
; endﺍﺫﺍ ﻜﺎﻥ ﻫﻨﺎﻙ ﺠﻤل ﺍﻭ ﺍﻭﺍﻤﺭ .
77
ﻧﻌﻢ
ﺍﻻﻭﺍﻤﺭ ﺍﻟﺘﺎﻟﻴﻪ
78
ﺍﻻﻥ ﺒﺩﺃﻨﺎ ﺍﻟﺘﻜﺭﺍﺭ ،ﻗﻤﻨﺎ ﺒﻜﺘﺎﺒﻪ ﺍﻟﺸﺭﻁ ، i<6ﻤﻌﻨﺎﻩ ﺍﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﻪ Iﺍﺼﻐﺭ
ﻤﻥ 6ﺴﻴﺘﻡ ﺍﻟﺩﺨﻭل ﺍﻟﻰ ﺩﺍﺨل ﺍﻟـ Blockﺍﻤﺎ ﺍﺫﺍ ﻜﺎﻨﺕ ﺘﺴﺎﻭﻱ 6ﺍﻭ ﺍﻜﺒﺭ
ﻓﺈﻨﻪ ﻴﻘﻭﻡ ﺒﺎﻟﺨﺭﻭﺝ ﻤﻨﻪ ﻭﻋﺩﻡ ﺘﻨﻔﻴﺫ ﺸﻲ )ﻓﻲ ﺍﻟـ blockﻁﺒﻌﺎ (
ﺍﺫﺍ ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ )ﺍﻱ Iﺍﺼﻐﺭ ﻤﻥ ( 6ﺴﻭﻑ ﺘﺘﻡ ﻁﺒﺎﻋﻪ ﺍﻟﻤﺘﻐﻴﺭ . Iﻭﺍﻀﺎﻓﻪ
ﺍﻟﺠﻤﻠﻪ ، i:=i+1ﻴﻌﻨﻲ Iﺍﻟﻘﺩﻴﻤﻪ ) + (1ﺍﻟﺭﻗﻡ ، 1ﻭﻗﻤﻨﺎ ﺒﺘﺨﺯﻴﻥ ﺍﻟﻨﺎﺘﺞ )(2
ﻓﻲ ﻤﺘﻐﻴﺭ . I
ﺍﻻﻥ ﻴﻌﻭﺩ ﺍﻟﻰ ﺍﻟﺸﺭﻁ ﻤﺭﻩ ﺍﺨﺭﻯ ﻫل Iﺍﻟﻠﻰ ﻫﻲ 2ﺍﺼﻐﺭ ﻤﻥ 6؟ ﻨﻌﻡ ،ﺍﺫﺍ
ﻴﻘﻭﻡ ﻤﺭﻩ ﺍﺨﺭﻯ ﺒﺘﻨﻔﻴﺫ ﺍﻟـ ) blockﻭﺴﻭﻑ ﺘﻜﻭﻥ ﻗﻴﻤﻪ ﺍﻟـ Iﻫﺫﻩ ﺍﻟﻤﺭﻩ
ﺘﺴﺎﻭﻱ (3
79
ﻤﻼﺤﻅﺎﺕ ::
ﻴﺠﺏ ﻋﻠﻴﻙ ﻓﻲ ﺍﻏﻠﺏ ﺍﻻﺤﻴﺎﻥ ﺍﻥ ﺘﻌﻁﻲ ﻗﻴﻤﻪ ﻤﺎ ﻟﻠﻤﺘﻐﻴﺭ ﺍﻟﺫﻱ ﻟﺩﻴﻙ ﻗﺒل
ﺠﻤﻠﻪ ) whileﻭﺍﻴﻀﺎ ، (repeatﺍﺫﺍ ﻟﻡ ﺘﺭﻴﺩ ﻓﺈﻥ ﺍﻟﻤﺘﺭﺠﻡ ﺴﻭﻑ ﻴﻌﻁﻴﻬﺎ
ﻗﻴﻤﺘﻬﺎ ﺍﻻﻓﺘﺭﺍﻀﻴﻪ ﻭﻫﻲ . 0
ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ﺍﺤﺫﻑ ﻫﺫﻩ ﺍﻟﺠﻤﻠﻪ ﻨﻬﺎﺌﻴﺎ) ، ( i:=i+1ﻭﻗﻡ ﺒﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻤﺎﺫﺍ ﺘﻼﺤﻅ ؟ ﺴﻭﻑ ﺘﺠﺩ ﺍﻥ ﺍﻟﻨﺎﺘﺞ ﻫﻭ ﻋﺒﺎﺭﻩ ﻋﻥ ﺍﻻﻋﺩﺍﺩ ﻤﻥ 0ﺍﻟﻰ 5
ﻤﻁﺒﻭﻋﻪ ﻜل ﻤﻨﻬﺎ ﻓﻲ ﺴﻁﺭ.
ﺍﺫﺍ ﻤﺎ ﺍﻟﻌﻤل ﻟﻜﻲ ﻴﺼﺒﺢ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻁﺒﻊ ﺍﻻﻋﺩﺍﺩ ﻤﻥ 1ﺍﻟﻰ 5ﻭﻟﻴﺱ ﻤﻥ 0؟
ﻋﻠﻴﻨﺎ ﺒﺘﻐﻴﺭ ﻤﻭﺍﻗﻊ ﺍﻟﺠﻤل ﺍﻟﺘﻰ ﺒﺩﺍﺨل ﺍﻟـ blockﺃﻱ ﻨﻀﻊ ﺍﻟﺠﻤﻠﻪ ﺍﻻﻭﻟﻰ
i:=i+1ﺜﻡ ﻨﻀﻊ ﺍﻟﺠﻤﻠﻪ ﺍﻟﺜﺎﻨﻴﻪ ﻫﻲ ;). writeln(i
ﺍﻴﻀﺎ ﻋﻠﻴﻨﺎ ﺒﺘﻐﻴﺭ ﺍﻟﺸﺭﻁ ﻓﻲ ﺒﺩﺍﻴﻪ ﺍﻟﺤﻠﻘﻪ ﺃﻱ ﻴﺼﺒﺢ while i<5 do
ﻗﻡ ﺒﺘﺠﺭﻴﺏ ﻫﺫﻩ ﺍﻟﻤﻼﺤﻅﻪ ،ﻟﻜﻲ ﺘﻔﻬﻤﻬﺎ ﺒﺸﻜل ﺠﻴﺩ ...
80
ﻜﻴﻔﻴﻪ ﻋﻤﻠﻬﺎ:
ﻓﻲ ﺍﻟﺒﺩﺍﻴﻪ ﻴﻘﻭﻡ ﺍﻟﻤﺘﺭﺠﻡ ﺒﺩﺨﻭل ﺍﻟﺤﻠﻘﻪ repeatﻭﺘﻨﻔﻴﺫ ﺠﻤﻴﻊ ﺍﻻﻭﺍﻤﺭ ﺍﻟﺘﻲ
ﺒﺩﺍﺨﻠﻪ ﺤﺘﻰ ﻴﺼل ﺍﻟﻰ ﺠﻤﻠﻪ untilﻓﻴﺘﻭﻗﻑ ﻟﻴﺴﺄل ﻫل ﺍﻟﺸﺭﻁ ﻤﺘﺤﻘﻕ ﺍﻡ ﻻ؟؟
ﻭﺍﺫﺍ ﻻ )ﺍﻟﺸﺭﻁ ﻏﻴﺭ ﻤﺘﺤﻘﻕ( ﻓﺈﻨﻪ ﻴﻘﻭﻡ ﺒﺎﻟﺩﺨﻭل ﺍﻟﻰ ﺍﻟﺤﻠﻘﻪ ﻤﺭﻩ ﺍﺨﺭﻯ ﻭﺘﻜﺭﺍﺭ
ﺍﻻﻭﺍﻤﺭ ...ﻭﻫﻜﺫﺍ ،ﺤﺘﻰ ﻴﺘﻡ ﺍﻟﺘﺤﻘﻕ ﻤﻥ ﺍﻟﺸﺭﻁ .
81
ﻧﻌﻢ
اﻻواﻣﺮ اﻟﺘﺎﻟﯿﮫ
ﻓﻲ ﺍﻟﺒﺩﺍﻴﻪ ﺴﻴﺠﺩ ﻫﻨﺎﻙ ﺠﻤﻠﻪ ﻁﺒﺎﻋﻪ ﻟﻠﻤﺘﻐﻴﺭ ) Iﻗﻴﻤﺘﻪ ﺘﺴﺎﻭﻱ 1ﺒﺴﺒﺏ ﺍﻟﺘﻌﻴﻴﻥ
ﺍﻟﺫﻱ ﻗﺒل ﺠﻤﻠﻪ ﺍﻟﺘﻜﺭﺍﺭ(.
ﺒﻌﺩ ﺫﻟﻙ ﺴﻴﺠﺩ ﺍﻟﻌﺒﺎﺭﻩ ، I:=i+1ﻭﻤﻌﻨﺎﻫﺎ "ﺍﻱ ﻗﻡ ﺯﻴﺎﺩﻩ 1ﻋﻠﻰ ﺍﻟﻤﺘﻐﻴﺭ I
)ﻗﻴﻤﺘﻪ ﺘﺴﺎﻭﻱ ، ( 1ﻭﻗﻡ ﺒﺘﻌﻴﻨﻬﻤﺎ ﺩﺍﺨل ﺍﻟﻤﺘﻐﻴﺭ . " I
ﺍﻱ ﺍﻥ ﻗﻴﻤﻪ ﺍﻟﻤﺘﻐﻴﺭ Iﺍﻟﺤﺎﻟﻴﻪ ﺘﺴﺎﻭﻱ . 2
ﺍﻻﻥ ﺴﻴﺫﻫﺏ ﺍﻟﻰ ﺠﻤﻠﻪ ، untilﻭﻴﺘﺤﻘﻕ ﻤﻥ ﺍﻟﺸﺭﻁ .ﻫل 2ﺍﻜﺒﺭ ﻤﻥ 5؟ ﺍﺫﺍ
ﻜﺎﻥ ﺍﻟﺠﻭﺍﺏ ﻨﻌﻡ ﻓﺴﻭﻑ ﻴﻘﻭﻡ ﺒﺎﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺤﻠﻘﻪ .ﺍﻤﺎ ﺍﺫﺍ ﻻ )ﻭﻫﻭ ﺍﻟﺼﺤﻴﺢ
ﺍﻻﻥ( ﻓﺴﻭﻑ ﻴﺭﺠﻊ ﻤﺭﻩ ﺍﺨﺭﻯ ﻟﻠﺘﻜﺭﺍﺭ.
ﻓﻴﻁﺒﻊ ﺍﻟﻤﺘﻐﻴﺭ ) Iﻗﻴﻤﺘﻪ ﺘﺴﺎﻭﻱ ، ( 2ﻭﻴﻘﻭﻡ ﺒﺯﻴﺎﺩﻩ 1ﻋﻠﻰ ﺍﻟﻤﺘﻐﻴﺭ ﻭﻴﺼﺒﺢ .3
ﻭﺍﻻﻥ ﻴﺘﺤﻘﻕ ﻤﻥ ﺍﻟﺸﺭﻁ ..ﻭﻫﻜﺫﺍ
83
Repeat
;)'Writeln('wajdy
Until 3>5
ﻜﺭﺭ ﺤﺘﻰ ﺘﺼﺒﺢ 3ﺍﻜﺒﺭ ﻤﻥ !! 5ﻟﺫﻟﻙ ﺴﻭﻑ ﻴﻜﻭﻥ ﺘﻜﺭﺍﺭ ﺠﻤﻠﻪ ﺍﻟﻁﺒﺎﻋﻪ
ﺤﺘﻰ ﺘﺼﺒﺢ 3ﺍﻜﺒﺭ ﻤﻥ ) 5ﺒﺎﻟﻌﺭﺒﻲ ﺍﻟﻰ ﻤﺎ ﻻﻨﻬﺎﻴﻪ (.
84
ﻜل ﺘﻠﻙ ﺍﻻﻤﻭﺭ ﺘﻜﻭﻥ ﻋﻠﻰ ﺤﺴﺏ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻁﻠﻭﺏ ،ﻋﻠﻰ ﻤﺩﻯ ﺘﻔﻜﻴﺭ
ﺍﻟﻤﺒﺭﻤﺞ ،ﺒﻤﻌﻨﻰ ﺍﻥ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﻨﺠﺩ ﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﺤﺩ ﺍﻜﺜﺭ ﻤﻥ 3ﻁﺭﻕ ﻟﺤﻠﻪ
ﻟﺫﻟﻙ ﻻ ﺘﺤﺎﻭل ﺤﻔﻅ ﺃﻱ ﺒﺭﻨﺎﻤﺞ ﻭﺍﻨﻤﺎ ﺤﺎﻭل ﺘﻔﻬﻡ ﺍﻟﻤﻔﻬﻭﻡ ﺍﻟﻌﺎﻡ ،ﻭﻤﻥ ﺜﻡ
ﺴﺘﺴﺘﻁﻴﻊ ﻜﺘﺎﺒﻪ ﺍﻟﺒﺭﺍﻤﺞ ﺒﻁﺭﻴﻘﺘﻙ ﺍﻟﺨﺎﺼﻪ .
Repeat ….
:
For ….. do
Begin
:
;End
:
Until ……….
85
:ﻤﺜﺎل
Begin
For i:= 1 to 10 do
Begin
Writeln(i);
If i=5 then exit ;
End;
Writeln('Done');
End.
86
*
* *
** *
****
ﺍﻭﻻ ﻋﻨﺩﻤﺎ ﻴﺄﺨﺫ ﺍﻟﻤﺘﻐﻴﺭ Iﺍﻟﻘﻴﻤﻪ ﺍﻻﻭﻟﻰ 1ﻴﻘﻭﻡ ﺒﺘﻨﻔﻴﺫ ﻤﺎ ﺒﻴﻥ ﺍﻟـ . Block
ﺍﻟـ blockﻴﻭﺠﺩ ﺒﻪ ﺤﻠﻘﻪ ﺍﺨﺭﻯ )ﺩﺍﺨﻠﻴﻪ( ،ﺍﻱ ﺴﺘﻨﻔﺫ ﺍﻟﺤﻠﻘﻪ ﺍﻟﺩﺍﺨﻠﻴﻪ ﻜﺎﻤﻠﻪ
ﻋﻨﺩﻤﺎ ﺘﺄﺨﺫ ﺍﻟﺤﻠﻘﻪ ﺍﻟﺨﺎﺭﺠﻴﻪ ﺍﻟﻘﻴﻤﻪ . 1ﻭﻋﻨﺩﻤﺎ ﺘﺄﺨﺫ ﺍﻟﺤﻠﻘﻪ ﺍﻟﺨﺎﺭﺠﻴﻪ ﺍﻟﻘﻴﻤﻪ 2
ﺴﺘﻨﻔﺫ ﺍﻟﺤﻠﻘﻪ ﺍﻟﺩﺍﺨﻠﻴﻪ ﻜﺎﻤﻠﻪ ﻤﺭﻩ ﺍﺨﺭﻯ .ﻭﻫﻜﺫﺍ ﻜل ﻤﺎ ﺘﺎﺨﺫ ﺍﻟﺤﻠﻘﻪ ﺍﻟﺨﺎﺭﺠﻴﻪ
ﻗﻴﻤﻪ ﻤﺎ ﻓﺈﻥ ﺍﻟﺤﻠﻘﻪ ﺍﻟﺩﺍﺨﻠﻴﻪ ﺘﻨﻔﺫ ﻜﺎﻤﻠﻪ .
ﺍﻻﻥ ﺍﺨﺫ ﻤﺘﻐﻴﺭ ﺍﻟﺤﻠﻘﻪ ﺍﻻﻭﻟﻰ )ﺍﻟﺨﺎﺭﺠﻴﻪ( ﺍﻟﻘﻴﻤﻪ ) 1ﺍﻱ Iﻴﺴﺎﻭﻱ 1ﺍﻻﻥ(.
ﺍﻟﺤﻠﻘﻪ ﺍﻟﺜﺎﻨﻴﻪ ﻤﻥ 1ﺍﻟﻰ ) Iﺃﻱ ﺍﻟﻰ (1ﺃﻱ ﺴﺘﻜﺭﺭ ﻤﺭﻩ ﻭﺍﺤﺩﻩ ﺍﻟﺠﻤﻠﻪ ﺍﻟﺘﺎﻟﻴﻪ
ﻭﻫﻲ ﻁﺒﺎﻋﻪ ﻨﺠﻤﻪ ،ﺍﻻﻥ ﺘﻨﻔﺫ ﻋﺒﺎﺭﻩ . writeln
ﻭﺒﻬﺫﺍ ﺍﻨﺘﻬﻰ ﺘﻨﻔﻴﺫ ﺍﻟﺤﻠﻘﻪ ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻗﻴﻤﻪ ﺍﻟﻤﺘﻐﻴﺭ Iﺘﺴﺎﻭﻱ 1
ﺍﻻﻥ ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻗﻴﻤﻪ ﻤﺘﻐﻴﺭ ﺍﻟﺤﻠﻘﻪ ﺍﻟﺨﺎﺭﺠﻴﻪ Iﺘﺴﺎﻭﻱ ، 2ﺴﻴﻘﻭﻡ ﺒﺘﻨﻔﻴﺫ ﻤﺎ
ﺒﻴﻥ ﺍﻟـ block
ﺍﻟﺤﻠﻘﻪ ﺍﻟﺩﺍﺨﻠﻴﻪ ﻤﻥ 1ﺍﻟﻰ ) Iﺃﻱ ﺍﻟﻲ (2ﺃﻱ ﺴﺘﻜﺭﺭ ﺍﻟﺤﻠﻘﻪ ﻤﺭﺘﺎﻥ ،
ﺍﻟﻤﺭﻩ ﺍﻻﻭﻟﻰ ﺴﻭﻑ ﺘﻨﻁﺒﻊ * ،ﻭﺍﻟﻤﺭﻩ ﺍﻟﺜﺎﻨﻴﻪ * )ﺃﻱ ﻨﺠﻤﺘﺎﻥ ﻓﻲ ﻨﻔﺱ ﺍﻟﺴﻁﺭ(
ﺜﻡ ﺘﻨﻔﺫ ﺍﻟﻌﺒﺎﺭﻩ writelnﻭﻴﻨﺘﻘل ﺍﻟﻤﺅﺸﺭ ﻟﻠﺴﻁﺭ ﺍﻟﺜﺎﻟﺙ ،ﻭﻫﻜﺫﺍ !!
88
ﺍﻻﺟﺮﺍﺀﺍﺕ ﻭﺍﻟﺪﻭﺍﻝ
procedure &Function
89
ﻭﻫﻲ ﻤﻔﻴﺩﻩ ﻋﻨﺩﻤﺎ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﻗﺴﻡ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺠﺏ ﺍﻥ ﻴﻘﻭﻡ ﺒﺎﻋﻤﺎل ﻤﻌﻴﻨﻪ
ﻓﻲ ﺍﺠﺯﺍﺀ ﻤﺘﻔﺭﻗﻪ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ !!
Begin
:
End.
ﻜﻤﺎ ﺸﺎﻫﺩﻨﺎ ،ﺍﻻﺠﺭﺍﺀﺍﺕ ﺘﻌﺭﻑ ﻗﺒل ﺒﺩﺍﻴﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ )ﺍﻻﻗﺘﺭﺍﻨﺎﺕ ﺴﻭﻑ
ﺍﺘﻨﺎﻭﻟﻬﺎ ﻻﺤﻘﺎ( ﺍﻴﻀﺎ ﻤﻜﺎﻥ procenameﻴﺘﻡ ﻜﺘﺎﺒﻪ ﺍﺴﻡ ﺍﻻﺠﺭﺍﺀ ﺍﻟﺫﻱ ﺘﺭﻴﺩﻩ !!
90
// ﻤﺜﺎل ﻟﻼﺠﺭﺍﺀﺍﺕ
Program example (input, output);
Uses wincrt;
Procedure pause;
Begin
Writeln ('press any key to continuo ');
Readln;
End;
Begin
Writeln (‘my name is wajdy essam ');
Pause;
91
ﻭﻤﻥ ﺜﻡ ﺒﺩﺃﻨﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻁﺒﻌﻨﺎ ﺍﻟﺠﻤﻠﻪ ﺍﻻﻭﻟﻰ ﻋﻠﻰ ﺍﻟﺸﺎﺸﻪ ،ﻭﺘﻡ ﺍﺴﺘﺩﻋﺎﺀ
ﺍﻻﺠﺭﺍﺀ . pause
ﺍﻻﻥ ﺴﻴﻘﻭﻡ ﺒﺘﻨﻔﻴﺫ ﺍﻻﺠﺭﺍﺀ )ﺃﻱ ﻁﺒﺎﻋﻪ ﺍﻟﺠﻤﻠﻪ ﻭﺍﻨﺘﻅﺎﺭ ﺍﺩﺨﺎل ﺃﻱ ﻤﻔﺘﺎﺡ ﻤﻥ
ﺍﻟﻤﺴﻨﺨﺩﻡ( .ﻭﻫﻜﺫﺍ ﻓﻲ ﺠﻤﻴﻊ ﺍﻟﺠﻤل ﺍﻟﺒﺎﻗﻴﻪ ،ﻜل ﻤﺎﻓﻲ ﺍﻻﻤﺭ ﺍﻨﻪ ﻴﺘﻡ ﺍﺴﺘﺩﻋﺎﺀ
ﺍﻻﺠﺭﺍﺀ ﻭﺘﻨﻔﻴﺫ ﻤﺎ ﻓﻴﻪ !!!
ﺍﻻﺠﺭﺍﺀﺍﺕ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻤﺘﻐﻴﺭﺍﺕ ﺨﺎﺼﻪ ﺒﻬﺎ ﺘﺴﻤﻰ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻤﺤﻠﻴﻪ local
variableﻭﻫﻲ ﻤﻌﺭﻓﻪ ﻓﻘﻁ ﺩﺍﺨل ﺍﻻﺠﺭﺍﺀ )ﺃﻱ ﻏﻴﺭ ﻤﻌﺭﻓﻪ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﺍﻟﺭﺌﻴﺴﻲ( .
ﻤﺜﺎل//
;Procedure wajdy
Var
;a: integer
Begin
; a:=10
;)Writeln (a
;End
Begin
;wajdy
}ﻫﻨﺎ ﺨﻁﺄ ،،ﻻﻥ ﺍﻟﻤﺘﻐﻴﺭ ﻤﻌﺭﻑ ﻓﻘﻁ ﺩﺍﺨل ﺍﻻﺠﺭﺍﺀ { ;a:= 20
End.
ﺘﻡ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻻﺠﺭﺍﺀ ، wajdyﻭﻟﻜﻥ ﺍﻟﻤﺘﻐﻴﺭ aﺨﺎﻁﺊ ،ﻻﻨﻪ ﻤﻌﺭﻑ ﻋﻠﻰ ﺍﻨﻪ
ﻤﺘﻐﻴﺭ ﻤﺤﻠﻰ ،ﺃﻱ ﺨﺎﺹ ﺩﺍﺨل ﺍﻻﺠﺭﺍﺀ ﻓﻘﻁ !!
93
ﻜﻤﺎ ﻨﺭﻯ ﺍﻥ ﺍﻟﻤﺘﻐﻴﺭ ﺍﻟﻌﺎﻟﻤﻲ ﻴﻤﻜﻥ ﺘﻐﻴﺭﻩ ﺩﺍﺨل ﺍﻻﺠﺭﺍﺀ ﻭﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺍﻤﺎ
ﺍﻟﻤﺘﻐﻴﺭ ﺍﻟﻤﺤﻠﻲ ﻓﻼ ﻴﻤﻜﻥ ﺫﻟﻙ ﺍﻻ ﻤﻥ ﺨﻼل ﺍﻻﺠﺭﺍﺀ ﻓﻘﻁ !!
ﺍﻤﺎ ﺍﺫﺍ ﺘﻡ ﺍﻋﻼﻥ ﺍﻟﻤﺘﻐﻴﺭ ﺍﻟﻤﺤﻠﻰ ﻭﺍﻟﻌﺎﻟﻤﻲ ﺒﻨﻔﺱ ﺍﻻﺴﻡ ،ﻓﺈﻥ ﺍﻟﻌﺎﻟﻤﻲ ﺴﻴﺘﺠﺎﻭﺯ
overridedﻋﻠﻰ ﺍﻟﻤﺤﻠﻰ ،ﻜﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻻﺘﻲ //
94
: Parameters ﺍﻟﻭﺴﺎﺌﻁ
ﻴﺠﺏ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﻪ ﺍﻥ، ﻋﻨﺩﻤﺎ ﻨﺭﻴﺩ ﻗﺭﺍﺀﻩ ﻤﺘﻐﻴﺭ ﻤﺤﻠﻲ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ
95
ﺍﻻﻥ ﻓﻲ ﺍﺜﻨﺎﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ ،ﻋﻨﺩ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻻﺠﺭﺍﺀ ﻨﻘﻭﻡ ﺒﻔﺘﺢ ﻗﻭﺱ ﻭﻨﻘﻭﻡ
ﺒﻜﺘﺎﺒﻪ ﻤﺘﻐﻴﺭﺍﺕ ﻤﺘﺸﺎﺒﻬﻪ ﻤﻊ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﺸﻜﻠﻴﻪ )ﺍﻟﺘﻲ ﻗﻤﻨﺎ ﺒﻜﺘﺎﺒﺘﻬﺎ ﺒﻌﺩ ﺍﺴﻡ
ﺍﻻﺠﺭﺍﺀ ﻤﺒﺎﺸﺭﻩ( .ﻭﺘﺴﻤﻰ ﺒﺎل"ﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻔﻌﻠﻴﻪ" . Actual Variables
ﻜﻠﻤﻪ ﻤﺘﺸﺎﺒﻬﻪ ﺘﻌﻨﻲ "ﺍﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻔﻌﻠﻴﻪ ﺘﻜﻭﻥ ﻋﺩﺩﻫﺎ ﻤﺴﺎﻭ ﻟﻌﺩﺩ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ
ﺍﻟﺸﻜﻠﻴﻪ ،ﻭﺍﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻔﻌﻠﻴﻪ ﺘﻜﻭﻥ ﻤﻥ ﻨﻔﺱ ﻨﻭﻉ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﺸﻜﻠﻴﻪ "
ﻭﺒﺩﻭﻥ ﺘﺤﻘﻕ ﻫﺫﻴﻥ ﺍﻟﺸﺭﻁﻴﻥ ﻟﻥ ﻴﺘﻡ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ .
ﻜﻤﺎ ﺫﻜﺭﻨﺎ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﺸﻜﻠﻴﻪ ﺘﻜﻭﻥ ﺒﻌﺩ ﺍﺴﻡ ﺍﻻﺠﺭﺍﺀ )ﻤﺘﺒﻭﻋﻪ ﺒﻨﻭﻋﻪ( .ﺍﻤﺎ
ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻔﻌﻠﻴﻪ ﻓﻴﺘﻡ ﺘﻌﺭﻴﻔﻬﺎ ﺒﺸﻜل ﻁﺒﻴﻌﻲ )ﺍﻱ ﻓﻲ ﻗﺴﻡ ﺍﻻﻋﻼﻥ ﻋﻥ
ﺍﻟﻤﺘﻐﻴﺭﺍﺕ . ( var
96
ﺸﺭﺡ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﺘﻡ ﺍﻻﻋﻼﻥ ﻋﻥ ﻤﺘﻐﻴﺭﻴﻥ ﺸﻜﻠﻴﻴﻥ a,bﻤﻥ ﺍﻟﻨﻭﻉ ﺍﻟﺼﺤﻴﺢ ﻭﺫﻟﻙ ﻓﻲ ﺍﻻﺠﺭﺍﺀ w
ﺒﻌﺩ ﺫﻟﻙ ﺘﻡ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻔﻌﻠﻴﻪ ،ﻭﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ ﺘﻡ
ﺍﺴﺘﺩﻋﺎﺀ ﺍﻻﺠﺭﺍﺀ Wﻤﻊ ﺍﻟﻭﺴﺎﺌﻁ )ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﻔﻌﻠﻴﻪ( .
ﻻﺤﻅ ﺘﺸﺎﺒﻪ ﻜل ﻤﻥ ﻨﻭﻉ ﻭﻋﺩﺩ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺍﻟﺸﻜﻠﻴﻪ ﻭﺍﻟﻔﻌﻠﻴﻪ .
ﺍﻟﺘﻤﺭﻴﺭ passes
ﻫﻨﺎﻙ ﻨﻭﻋﻴﻥ ﻤﻥ ﺍﻟﺘﻤﺭﻴﺭ ،ﻭﻟﻜل ﻤﻨﻬﻡ ﺍﺴﺘﺨﺩﺍﻤﻪ ﺍﻟﺨﺎﺹ ،ﺩﻋﻨﺎ ﻨﺭﻯ ﺒﻌﺽ
ﺍﻻﻤﺜﻠﻪ :
;)Procedure foo (a: byte
Begin
97
Var
;x: byte
Begin
;x: =15
}Writeln(x); {15
;)Foo(x
}Writeln(x); {Still 15
End.
ﺍﻟﻤﺨﺭﺠﺎﺕ
15
15
10
15
ﺸﺭﺡ ﺍﻟﺒﺭﻨﺎﻤﺞ
ﻓﻲ ﺍﻟﺒﺩﺍﻴﻪ ﻜﺎﻨﺕ x=15ﺜﻡ ﻤﺭﺭ ﺍﻻﺠﺭﺍﺀ ﺍﻟﻰ ، aﻭﺘﻡ ﺘﻐﻴﺭ . aﻭﺘﻡ ﻁﺒﺎﻋﺘﻪ
، 10ﺜﻡ ﺘﻡ ﻁﺒﺎﻋﻪ ) xﻻﺤﻅ ﻟﻡ ﺘﺘﻐﻴﺭ ﻗﻴﻤﻪ xﺒﺎﻟﺭﻏﻡ ﻤﻥ ﺘﻐﻴﺭ ﻗﻴﻤﻪ aﻓﻲ
ﺍﻻﺠﺭﺍﺀ ( .
ﻫﺫﺍ ﺍﻟﻨﻭﻉ ﻤﻥ ﺍﻟﺘﻤﺭﻴﺭ ﻴﺴﻤﻰ " ﺍﻟﺘﻤﺭﻴﺭ ﺒﺎﻟﻘﻴﻤﻪ" pass by value
98
Var
x : byte;
Begin
x: =15;
Writeln(x); {15}
Foo(x);
Writeln(x); {10}
End.
ﺍﻟﻤﺨﺭﺠﺎﺕ
15
15
10
10
ﺍﻟﺸﺭﺡ
ﺴﻭﻑx ﻓﺈﻥ ﺍﻟﻘﻴﻤﻪ، parameters ﺍﻤﺎﻡ ﺍﻟﻭﺴﺎﺌﻁvar ﺍﺫﺍ ﺘﻡ ﺍﻀﺎﻓﻪ ﺠﻤﻠﻪ
. a ﺘﺘﻐﻴﺭ ﺍﺫﺍ ﺘﻐﻴﺭﺕ ﻗﻴﻤﻪ
99
ﻴﺠﺏ ﺍﻥ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻤﺭﻴﺭ ﺒﺎﻟﻘﻴﻤﻪ ﻓﻲ ﺤﺎﻟﻪ ﺍﻨﻪ ﻏﻴﺭ ﻀﺭﻭﺭﻱ ﺍﻥ ﻨﻐﻴﺭ ﺍﻟﻭﺴﺎﺌﻁ
ﺍﻟﺘﻰ ﻓﻲ ﺍﻻﺠﺭﺍﺀ .
ﺍﻤﺎ ﺍﺫﺍ ﻜﺎﻥ ﺘﻐﻴﺭ ﺍﻟﻭﺴﺎﺌﻁ ﻀﺭﻭﺭﻱ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻨﺴﺘﺨﺩﻡ ﺍﻟﺘﻤﺭﻴﺭ ﺒﺎﻻﺸﺎﺭﻩ .
ﺍﻻﻗﺘﺭﺍﻨﺎﺕ :functions
ﺘﺘﺸﺎﺒﻪ ﻜﺜﻴﺭﺍ ﻤﻊ ﺍﻻﺠﺭﺍﺀﺍﺕ ،ﺍﻻ ﺍﻨﻬﺎ ﺘﻘﻭﻡ ﺒﺈﺭﺠﺎﻉ ﻗﻴﻤﻪ ﻓﻲ ﺍﺴﻡ ﺍﻟﺩﺍﻟﻪ
)ﺍﻻﻗﺘﺭﺍﻥ( ،ﺍﻱ ﻴﺤﻤل ﺍﻟﻘﻴﻤﻪ ﺍﻟﻨﻬﺎﺌﻴﻪ .ﻟﺫﻟﻙ ﻴﻌﺘﺒﺭ ﺍﺴﻡ ﺍﻟﺩﺍﻟﻪ ﻤﺘﻐﻴﺭ ﻭﻴﺠﺏ
ﻜﺘﺎﺒﻪ ﻨﻭﻋﻬﺎ ﺒﺠﺎﻨﺏ ﺍﺴﻡ ﺍﻟﺩﺍﻟﻪ ،ﻭﺍﺫﺍ ﻜﺎﻨﺕ ﻫﻨﺎﻙ ﻭﺴﺎﺌﻁ ﻓﺈﻨﻬﺎ ﺘﻜﺘﺏ ﺒﻌﺩ ﺍﺴﻡ
ﺍﻟﺩﺍﻟﻪ )ﻜﻤﺎ ﻓﻲ ﺍﻻﺠﺭﺍﺀﺕ ( ﺜﻡ ) ( :ﺜﻡ ﻨﻭﻉ ﺍﻟﻭﺴﺎﺌﻁ .ﺒﻌﺩﻫﺎ ﻴﺘﻡ ﻜﺘﺎﺒﻪ ﻨﻭﻉ
ﺍﻟﺩﺍﻟﻪ .
100
ﻨﺩﺍﺀ ﺍﻟﺩﺍﻟﻪ
ﻴﺘﻡ ﻨﺩﺍﺀ ﺍﻟﺩﺍﻟﻪ ﺒﻁﺭﻴﻘﺘﻴﻥ :
ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﺘﻌﻴﻴﻥ ،ﺍﻱ ﻴﺘﻡ ﻓﻲ ﻗﺴﻡ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ )ﺍﻟﻌﺎﻟﻤﻴﻪ(
ﺍﻻﻋﻼﻥ ﻋﻥ ﻤﺘﻐﻴﺭ ﺠﺩﻴﺩ ﻭﻟﻴﻜﻥ ، xﺒﻌﺩﻫﺎ ﻴﺘﻡ ﻨﺩﺍﺀ ﺍﻻﺠﺭﺍﺀ ﺒﻬﺫﺍ ﺍﻟﺸﻜل :
;X: = functionname
ﻋﻥ ﻁﺭﻴﻕ ﺠﻤﻠﻪ ﻁﺒﺎﻋﻪ ﻤﺘﻐﻴﺭ ،ﺤﻴﺙ ﻜﻤﺎ ﺫﻜﺭﻨﺎ ﻴﻌﺘﺒﺭ ﺍﺴﻡ ﺍﻟﺩﺍﻟﻪ
ﻤﺘﻐﻴﺭ ،ﻭﻴﺘﻡ ﺍﻟﻨﺩﺍﺀ ﺒﻬﺫﺍ ﺍﻟﺸﻜل :
;)Write (functionname
ﻤﺜﺎل:
;)Program ex (input, output
;Uses wincrt
;Function w (a, b: integer): integer
Begin
; )Read (a, b
;W: = a+b
;End
Var
;no1, no2: integer
101
102
103
ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﻴﻘﻭﻡ ﺍﻻﺠﺭﺍﺀ ﺒﺎﺴﺘﺩﻋﺎﺀ ﺩﺍﻟﻪ ،ﺍﻭ ﺍﻥ ﺘﻘﻭﻡ ﺍﻟﺩﺍﻟﻪ ﺒﺎﺴﺘﺩﻋﺎﺀ
ﺍﺠﺭﺍﺀ ،ﺍﻴﻀﺎ ﺍﻟﺩﻭﺍل ﺘﺴﺘﻁﻴﻊ ﺍﺴﺘﺩﻋﺎﺀ ﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺽ ،ﻤﻊ ﺍﻟﻤﺤﺎﻓﻅﻪ ﻋﻠﻰ
ﺍﻟﺸﺭﻁ ،ﻭﻫﻭ ﺍﻥ ﺘﻜﻭﻥ ﺍﻟﺩﺍﻟﻪ ﺍﻟﺫﻱ ﻴﺭﻴﺩ ﺍﻻﺴﺘﺩﻋﺎﺀ ﻤﻨﻬﺎ ﺒﻌﺩ ﺍﻟﺩﺍﻟﻪ ﺍﻟﺫﻱ ﻴﺭﻴﺩ
ﺍﺴﺘﺩﻋﺎﺌﻬﺎ .ﻤﺜﻠﻬﺎ ﻤﺜل ﺍﻻﺠﺭﺍﺀﺍﺕ .
ﺍﻻﺠﺭﺍﺀﺍﺕ ﺍﻟﻤﺘﺩﺍﺨﻠﻪ
ﻤﺜل ﺍﻟﺠﻤل ﺍﻟﺸﺭﻁﻴﻪ ﻭﺍﻟﺘﻜﺭﺍﺭﻴﻪ ،ﺍﻻﺠﺭﺍﺀﺍﺕ ﺍﻴﻀﺎ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﺘﺼﺒﺢ
ﻤﺘﺩﺍﺨﻠﻪ
}Procedure e; {e cannot access a, b, c, and d
Begin
:
;End
;Procedure a
;Procedure b
Begin
}c; {illegal
}e; {legal
;End
;Procedure c
Begin
104
Procedure d;
Begin
:
b; {illegal}
c; {illegal}
a; {legal}
e; {legal}
End;
Begin
:
b; {illegal}
c; {illegal}
a; {legal}
d; {legal}
105
ﺍﻻﺠﺭﺍﺀ cﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﻴﺴﺘﺩﻋﻲ ﺍﻻﺠﺭﺍﺀ ، bﻻﻥ cﻴﺄﺘﻲ ﺒﻌﺩ ﺍﻻﺠﺭﺍﺀ . b
ﺍﻤﺎ ﺍﻻﺠﺭﺍﺀ bﻓﻼ ﻴﻤﻜﻥ ﺍﻥ ﻴﺴﺘﺩﻋﻲ ﺍﻻﺠﺭﺍﺀ cﻻﻥ ﺍﻻﺠﺭﺍﺀ cﻴﺄﺘﻲ ﺒﻌﺩ
ﺍﻻﺠﺭﺍﺀ .b
ﺍﻻﺴﺘﺩﻋﺎﺀ ﺍﻟﺫﺍﺘﻲ
;Procedure a
Begin
;A
;End
Begin
;A
End.
106
ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺴﺎﺒﻕ ،ﺍﺫﺍ ﻜﺎﻨﺕ ﻗﻴﻤﻪ nﺍﺼﻐﺭ ﻤﻥ ﺍﻭ ﺘﺴﺎﻭﻱ 100ﻓﺈﻨﻪ ﻴﺘﻡ
ﺍﺴﺘﺩﻋﺎﺀ ﺍﻻﺠﺭﺍﺀ ) mﺍﻱ ﺍﺴﺘﺩﻋﺎﺀ ﻨﻔﺴﻪ ( ﻭﻫﻜﺫﺍ .ﺍﻟﻰ ﺍﻥ ﺘﺼﺒﺢ ﻗﻴﻤﻪ n
ﺍﻜﺒﺭ ﻤﻥ 100ﻓﺈﻨﻪ ﻴﺘﻡ ﺍﻨﻬﺎﺀ ﺍﻻﺠﺭﺍﺀ .
107
ﺍﳌﺼﻔﻮﻓﺎﺕ
ﺍﻣﺎ ﺍﺫﺍ ﻛﺎﻥ ﻣﺜﻼ 20ﻣﺘﻐﲑ ﻣﻦ ﺍﻟﻨﻮﻉ ﺍﳊﺮﰲ !! ﻫﻞ ﺳﺘﻌﻠﻦ ﻋﻨﻬﻢ ﻭﺍﺣﺪ
ﻭﺍﺣﺪ ..ﺍﻡ ﻣﺎﺫﺍ !
108
ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺼﻔﻭﻓﻪ
ﻴﻌﻠﻥ ﻋﻨﻬﺎ ﻓﻲ ﻗﺴﻡ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ،ﺒﻬﺫﺍ ﺍﻟﺸﻜل :
Var
; Arrayname: array [x..y] of type
:Typeﻫﻲ ﺍﺤﺩ ﺍﻨﻭﺍﻉ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ .
ﻤﺜﺎل //
Var
;X:array [1..10] of integer
;Data:array[5..25] of char
ﻴﻤﻜﻥ ﺍﻋﻼﻥ ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ﺒﺄﻱ ﺍﺴﻡ ﻜﻤﺎ ﺘﺭﻴﺩ ،ﺍﻴﻀﺎ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻥ ﺘﻜﻭﻥ
ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ﻤﺘﻐﻴﺭ ﻋﺎﻟﻤﻲ ﺍﻭ ﻤﺤﻠﻲ .
109
ﺍﺫﺍ ﺍﻟﻌﻨﺼﺭ ﺍﻻﻭل ﺍﺼﺒﺢ ﻟﺩﻴﻪ ﻗﻴﻤﻪ ﻭﻫﻲ ، 10ﻭﺍﻟﻌﻨﺼﺭ ﺍﻟﺜﺎﻨﻲ ﻟﻪ ﺍﻟﻘﻴﻤﻪ 30
ﻭﻫﻜﺫﺍ ..
ﻤﺜﺎل//
Var
;X:array [1..10] of integer
Begin
;X[1]:= 3
;X[5]:= 2
;)]Writeln(x[1]*x[5
;)]Writeln(x[1
End.
110
ﺍﻟﻤﺨﺭﺠﺎﺕ
6
3
111
For i:= 1 to 30 do
Readln(x[i]);
112
113
ﺍﻟﺫﻱ ﺘﺤﺘﺎﺠﻪ ﺍﻨﻪ ﻓﻲ ﺍﻟﻤﺼﻔﻭﻓﻪ ﻤﻥ ﺍﻟﺒﻌﺩ ﺍﻟﺜﺎﻨﻲ ﺴﺘﺤﺘﺎﺝ ﺍﻟﻰ ﺤﻠﻘﺘﻴﻥ ﺍﻻﻭﻟﻰ
ﻟﻠﺒﻌﺩ ﺍﻻﻭل ﻭﺍﻟﺜﺎﻨﻴﻪ ﻟﻠﺜﺎﻨﻲ ،ﺍﻴﻀﺎ ﺍﻟﻤﺼﻔﻭﻓﻪ ﺫﺍﺕ ﺍﻟﺜﻼﺜﻪ ﺍﺒﻌﺎﺩ ﺴﺘﺤﺘﺎﺝ ﺍﻟﻰ
ﺜﻼﺙ ﺤﻠﻘﺎﺕ ﻤﺘﺩﺍﺨﻠﻪ !! )ﻫﺫﺍ ﺍﺫﺍ ﻜﻨﺕ ﺘﺭﻴﺩ ﺍﺩﺨﺎل ﻗﻴﻡ ﺍﻟﻰ ﺍﻟﻤﺼﻔﻭﻓﻪ ﻋﻥ
ﻁﺭﻴﻕ ﺠﻤﻠﻪ ﺍﻻﺩﺨﺎل readlnﻭ .( read
For i:= 1 to 3 do
Begin
For j:=1 to 3 do
Read(b[I,j]);
End;
sum:=0;
for i:=1 to 3 do
begin
for j:= 1 to 3 do
x[I,j]:=sum + ( (a[I,j]) * (b[I,j]) ) ;
end;
for i:= 1 to 3 do
begin
for j:= 1 to 3 do
writeln(x[I,j]);
end;
end.
115
ﻭﻓﻲ ﺍﻟﻤﺼﻭﻓﺎﺕ ﺫﺍﺕ ﺍﻟﺒﻌﺩﻴﻥ "ﻴﺠﺏ ﺍﻥ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﺤﻠﻘﺘﻴﻥ ﻤﺘﺩﺍﺨﻠﺘﻴﻥ" ﻟﻴﺘﻡ
ﻗﺭﺍﺀﻩ ﺍﻟﺒﻌﺩ ﺍﻻﻭل ﻭﺍﻟﺒﻌﺩ ﺍﻟﺜﺎﻨﻲ .
ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺒﻌﺩ ﺍﻻﻭل ﻫﻭ Iﻭﺍﻟﺜﺎﻨﻲ ﻫﻭ . j
116
117
ﺍﻻﻥ ﺍﻟﻌﺒﺎﺭﻩ ﺍﻻﺨﻴﺭ ،ﻫﻲ ﻨﻭﻉ ﻤﻥ ﺍﻨﻭﺍﻉ ﺍﻟﻁﺒﺎﻋﻪ )ﺍﻟﻨﻭﻉ ﺍﻟﺜﺎﻟﺙ ﺒﺎﻟﺘﺤﺩﻴﺩ( ،
ﺤﻴﺙ ﻴﻘﻭﻡ ﺒﻁﺒﺎﻋﻪ ﻨﺹ ﻭﻗﻴﻤﻪ ﻟﻤﺘﻐﻴﺭ )ﻤﻊ ﺍﻟﻔﺼل ﺒﻴﻨﻬﻡ ﺒﻔﺎﺼﻠﻪ(.
ﺍﻟﻨﺹ ﻫﻭ . The length of s is
ﻗﻴﻤﻪ ﺍﻟﻤﺘﻐﻴﺭ ﻫﻲ )] . ord(s[0ﻭﻤﻌﻨﺎﻫﺎ "ﻁﻭل ﺍﻟﺴﻠﺴﻠﻪ ﺍﻟﻨﺼﻴﻪ" .
ﻭﻫﻨﺎﻙ ﺩﺍﻟﻪ ﺍﺨﺭﻯ ﻓﻲ ﺒﺎﺴﻜﺎل ،ﺘﺴﺘﻁﻴﻊ ﺍﻥ ﺘﺴﺘﺨﺭﺝ ﻤﻨﻬﺎ ﺍﻟﻁﻭل ﺒﻜل ﻴﺴﺭ ،
ﻭﺴﻭﻑ ﻴﺘﻡ ﺍﻟﺘﺤﺩﺙ ﻋﻨﻬﺎ ﺒﻌﺩ ﻗﻠﻴل .
ﻋﺎﺩﻩ ،ﺍﻟﺴﻠﺴﻠﻪ ﺍﻟﻨﺼﻴﻪ ﺘﺄﺨﺫ 80ﺤﺭﻑ ﻜﺤﺩ ﺍﻗﺼﻰ ،ﺍﺫﺍ ﻜﻨﺕ ﺘﺭﻴﺩ ﺍﻻﻋﻼﻥ
ﻋﻥ ﺴﻠﺴﻠﻪ ﻨﺼﻴﻪ ﻟﻜﻥ ﺒﺤﺩﻭﺩ 10ﺍﺤﺭﻑ ﻤﺜﻼ ،ﺒﺎﺴﻜﺎل ﺘﻘﺩﻡ ﻭﺴﻴﻠﻪ ﻟﺘﺤﺩﻴﺩ ﻋﺩﺩ
ﺍﻻﺤﺭﻑ .ﻻﻥ ﺍﻻﻋﻼﻥ ﻋﻨﻬﺎ ﺒﺎﻟﻁﺭﻴﻘﻪ ﺍﻟﻌﺎﺩﻴﻪ ﺴﻭﻑ ﻴﻜﻭﻥ ﺘﺒﺫﻴﺭ ﻓﻲ ﺍﻟﻤﺴﺎﺤﻪ
.
Var
;]S:string[10
119
/2ﺍﻻﻤﺭ Copy
ﻴﻘﻭﻡ ﺒﻨﺴﺦ ﺍﻟﺤﺭﻭﻑ ﻤﻥ ﻤﻜﺎﻥ ﻤﺤﺩﺩ ، fromﻭﻜﻡ ﺤﺭﻑ ﻴﺠﺏ ﺃﻥ ﻴﺄﺨﺫ
. howmuch
ﻤﻌﻨﻰ ﺍﻟﺴﻁﺭ ﺍﻟﺜﺎﻨﻲ ،ﻗﻡ ﺒﺎﻟﺒﺩﺀ ﺒﻌﻤﻠﻴﻪ ﺍﻟﻨﺴﺦ ﻤﻥ ﺍﻟﺤﺭﻑ ، 7ﻭﺍﻨﺴﺦ 3ﻓﻘﻁ .
ﺍﻟﻤﺨﺭﺠﺎﺕ ﻫﻲ ess :
120
ﺍﺫﺍ ﻜﺎﻨﺕ ﻋﺩﺩ ﺍﻟﺤﺭﻭﻑ ﺍﻟﺘﻰ ﻨﺭﻴﺩ ﻨﺴﺨﻬﺎ howmuchﺍﻜﺒﺭ ﻤﻥ ﺍﻟﺴﻠﺴﻠﻪ ﻓﺈﻨﻬﺎ
ﺘﻜﺘﺏ ﺍﻟﺒﺎﻗﻲ ﻤﻥ ﺍﻟﺴﻠﺴﻠﻪ .
;)’S:= (‘wajdy essam
;)N:= copy(s,7,10
;)Writeln(n
ﺍﻟﻤﺨﺭﺠﺎﺕ ﻫﻲ ess :
/3ﺍﻻﻤﺭ pos
ﻴﻘﻭﻡ ﺒﺎﺴﺘﺨﺭﺍﺝ ﻤﻭﻗﻊ ﺍﻟﺴﻠﺴﻠﻪ ﺍﻟﺼﻐﻴﺭﻩ ،ﻤﻥ ﺍﻟﺴﻠﺴﻠﻪ ﺍﻟﻜﺒﻴﺭﻩ . s
ﺍﻟﺼﻴﻐﻪ ﺍﻟﻌﺎﻤﻪpos(substr,s) :
Substrﻫﻲ ﻜﻠﻤﻪ ﺍﻟﺒﺤﺙ
Sﺍﻟﺴﻠﺴﻠﻪ ﺍﻟﺘﻰ ﻴﺘﻤﻥ ﺍﻟﺒﺤﺙ ﺒﻬﺎ.
;)’S:= pos(‘are’,’how are you
;)Writeln(s
ﺍﻟﻤﺨﺭﺠﺎﺕ ﻫﻲ 5 :
ﺤﻴﺙ ﺘﻜﻭﻥ ﺍﻟﻜﻠﻤﻪ areﻓﻲ ﺍﻟﻤﻭﻗﻊ ﺍﻟﺨﺎﻤﺱ ﻓﻲ ﺍﻟﺴﻠﺴﻠﻪ ﺍﻟﻜﺒﻴﺭﻩ .
121
;’S1:=’not
;’S2:=’ I do love you
;)Insert(s1,s2,6
;)Writeln(s2
ﺍﻟﻤﺨﺭﺠﺎﺕ ﻫﻲI do not love you :
ﺍﺫﺍ ﻜﺎﻥ ﺍﻟﻨﺎﺘﺞ ﺍﻜﺜﺭ ﻤﻥ 255ﺤﺭﻑ ،ﻓﺎﻨﻪ ﻴﺘﻡ ﺤﺫﻑ ﺍﻟﺒﺎﻗﻲ ﻤﻥ
ﺍﻟـ 255ﺤﺭﻑ .
/4ﺍﻻﻤﺭ delete
ﻴﻘﻭﻡ ﻫﺫﺍ ﺍﻻﻤﺭ ﺒﺤﺫﻑ ﺍﻟﺤﺭﻭﻑ ﻤﻥ ﺍﻟﺴﻠﺴﻠﻪ
ﺍﻟﺼﻴﻐﻪ ﺍﻟﻌﺎﻤﻪ delete(s,from,howmuch) :
;)’S:=(’wajdy essam
;)Delete(s,1,6
;)Writeln(s
ﺍﻟﻤﺨﺭﺠﺎﺕ ﻫﻲ essam :
122
ﰲ ﻫﺬﺍ ﺍﻟﺪﺭﺱ ﺳﻮﻑ ﺗﺘﻌﻠﻢ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﳑﻴﺰﺍﺕ ﻟﻐﻪ ﺑﺎﺳﻜﺎﻝ ﻭﻫﻲ ﺍﳉﻤﻞ
ﺍﳌﻌﺮﻓﻪ ﻣﻦ ﻗﺒﻞ ﺍﳌﱪﻣﺞ.
ﺍﻣﺎ ﺑﺎﻟﻨﺴﺒﻪ ﻟﻠﻤﺠﻤﻮﻋﺎﺕ ﻓﻬﻮ ﺩﺭﺱ ﻗﺼﲑ ﻭﺳﻬﻞ ﺟﺪﺍ )ﺍﻳﻀﺎ ﻫﻮ ﻳﻨﻄﻮﻱ
ﲢﺖ ﺍﻧﻮﺍﻉ ﺍﻟـ ، ( typeﻟﺬﻟﻚ ﲤﺖ ﺍﺿﺎﻓﺘﻪ ﺍﱃ ﻫﺬﺍ ﺍﻟﻴﻮﻡ ..
Type
;)Name= (wajdy, essam, Ahmed
ﻤﺜﺎل //
Type
;)Car = (bmw , Mazda ,Honda ,ford
;)Color = (red ,green ,blue
;]Str20 = string[20
124
125
.2ﺍﻻﻤﺭ : chr
ﻴﻘﻭﻡ ﺒﺎﻋﻁﺎﺀ ﺍﻟﺭﻗﻡ ﻟﻠﺤﺭﻑ ﺍﻟﻤﺩﺨل ،ﻁﺒﻘﺎ ﻟﻤﻌﺎﻴﻴﺭ ASCIIﺍﻱ ﻋﻜﺱ ﺍﻟﺩﺍﻟﻪ
ord
ﻤﺜﺎل/
}Chr(65); {=a
ﻤﻊ ﻤﻼﺤﻅﻪ ﺍﻥ ﻗﻴﻤﻪ ﺍﻟﺤﺭﻑ ﺍﻟـ capitalﺘﺨﺘﻠﻑ ﻋﻥ ﺍﻟـ .small
126
127
ﻓﻌﻠﻴﺎ ﺍﻟﺴﺠﻼﺕ ﻫﻭ ﻨﻭﻉ ﻤﻥ ﺍﻨﻭﺍﻉ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﻌﺭﻓﻪ ،ﻭﺘﻨﻁﻭﻱ ﺘﺤﺕ ﻗﺴﻡ ﺍﻟـ
، typeﻭﻓﻲ ﺍﻏﻠﺏ ﺍﻻﺤﻴﺎﻥ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟـ typeﻴﻜﻭﻥ ﻗﺒل ﺍﻻﻋﻼﻥ ﻋﻥ
ﺍﻟﻤﺘﻐﻴﺭﺍﺕ .
128
Var
; Da: data
ﺍﻟﺴﺠل ﻟﻥ ﻴﺴﺘﺨﺩﻡ ﺒﻌﺩ ﺍﻻﻋﻼﻥ ﻋﻨﻪ ،ﺍﻻ ﺍﺫﺍ ﻜﺎﻥ ﻫﻨﺎﻙ ﻤﺘﻐﻴﺭ daﻴﺤﻤل ﺍﺴﻡ
ﺍﻟﺴﺠل ،ﻫﺫﻩ ﻫﻲ ﺍﻫﻡ ﻨﻘﻁ ﻓﻲ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﺴﺠﻼﺕ .
ﻨﺄﺘﻲ ﺍﻟﻰ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ ،ﻭﻜﻴﻔﻴﻪ ﺍﺩﺨﺎل ﺍﻟﻘﻴﻡ ﺍﻟﻴﻬﺎ ،ﻋﻥ ﻁﺭﻴﻕ ﺠﻤل
ﺍﻟﺘﻌﻴﻴﻥ ﺍﻭ ﺠﻤﻠﻪ ﺍﻻﺩﺨﺎل readlnﻭ . read
129
ﻻﺤﻅ ﺍﻨﻪ ﻴﺠﺏ ﺍﻥ ﻴﻜﺘﺏ ﺍﻟﻤﺘﻐﻴﺭ ﺍﻟﺫﻱ ﻴﺤﻤل ﺍﻟﺴﺠل daﺜﻡ ﻨﻘﻁﻪ ،ﺜﻡ ﺍﺴﻡ
ﺍﻟﺤﻘل ﺍﻟﻤﺭﺍﺩ ﺘﻌﻴﻴﻨﻪ ﺍﻟﻰ ﻗﻴﻤﻪ .
)ﻭﻜﻤﺎ ﺫﻜﺭ ﺴﺎﺒﻘﺎ ،ﻋﻨﺩ ﺍﺴﻨﺎﺩ ﺍﻟﺴﻼﺴل ﺍﻟﻨﺼﻴﻪ ﻭﺍﻻﺤﺭﻑ ﻴﺠﺏ ﺍﻥ ﺘﻀﻊ ﺍﻟﻘﻴﻡ
ﺒﻴﻥ ﻋﻼﻤﻪ ’.( ‘ here
ﻫﻨﺎﻙ ﻁﺭﻴﻘﻪ ﺍﺨﺭﻯ ﻻﺴﻨﺎﺩ ﺍﻟﻘﻴﻡ ﻭ ﻗﺭﺍﺀﻩ)ﺍﺩﺨﺎل ﻗﻴﻡ( ﺍﻟﺴﺠﻼﺕ ،ﻭﻫﻲ ﺍﻓﻀل
ﻤﻥ ﺍﻻﻭﻟﻰ )ﻤﻥ ﻨﺎﺤﻴﻪ ﺴﻬﻭﻟﻪ ﻓﻘﻁ ﻻ ﺍﻜﺜﺭ( ﻭﻫﻲ ﺒﺎﺴﺘﺨﺩﺍﻡ with … do
130
Begin
With da do
Begin
; ’Name := ‘wajdy
;Age := 20
Tel := 0911119415
;End
End.
131
With da do
Begin
;)Writeln(name }ﺒﺎﻟﻁﺭﻴﻘﻪ ﺍﻟﺜﺎﻨﻴﻪ{
;End
132
133
ﻓﻲ ﻗﺴﻡ ﺍﻻﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ،ﺘﻡ ﺍﻻﻋﻼﻥ ﻋﻠﻰ ﺍﻟﻤﺘﻐﻴﺭ daﻭﺍﻟﺫﻱ ﻫﻭ
ﻋﺒﺎﺭﻩ ﻋﻥ ﻤﺼﻔﻭﻓﻪ ﻤﻜﻭﻨﻪ ﻤﻥ ﺜﻼﺜﻪ ﻋﻨﺎﺼﺭ) . (dataﻭﻤﺘﻐﻴﺭ Iﻤﻥ ﺍﻟﻨﻭﻉ
ﺍﻟﺼﺤﻴﺢ )ﻴﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻟﺘﻜﺭﺍﺭ ( .
134
ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﻋﻠﻰ beginﻭ ; ، endﺍﻱ ﺍﻨﻬﺎ ﺤﻠﻘﻪ ﻤﺭﻜﺒﻪ ﻭﺍﻱ ﺍﻭﺍﻤﺭ ﻓﻲ ﻫﺫﻩ
ﺍﻟﺤﻠﻘﻪ ﺴﻭﻑ ﺘﻜﺭﺭ ﺜﻼﺜﻪ ﻤﺭﺍﺕ .
ﺍﻻﻥ ﺴﻭﻑ ﻨﺭﻯ ﺠﻤﻠﻪ ﻁﺒﺎﻋﻪ ﻨﺹ +ﻗﻴﻤﻪ ﻤﺘﻐﻴﺭ ، Iﺜﻡ ﺒﺩﺃ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﺴﺠل
ﺒﺎﻟﺠﻤﻠﻪ ، With da[i] doﺍﻱ ﻤﻊ ﺍﻟﻁﺎﻟﺏ )ﺍﻻﻭل ،ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻗﻴﻤﻪ
ﺍﻟﻤﺘﻐﻴﺭ Iﺘﺴﺎﻭﻱ ، 1ﻭﺍﻟﺜﺎﻨﻲ ﻋﻨﺩﻤﺎ ﺘﻜﻭﻥ ﻗﻴﻤﻪ Iﺘﺴﺎﻭﻱ ،2ﻭﻫﻜﺫﺍ( .
135
ﺴﻭﻑ ﻴﺘﻜﺭﺭ ﻫﺫﺍ ﺍل blockﺜﻼﺙ ﻤﺭﺍﺕ )ﻨﻅﺭﺍ ﻟﺤﻠﻘﻪ . (forﻭﻫﻜﺫﺍ ﺘﻡ ﺍﺩﺨﺎل
ﺒﻴﺎﻨﺎﺕ ﺜﻼﺙ ﻁﻼﺏ .
ﺍﻟﺠﻤﻠﻪ clrscrﻤﻌﻨﺎﻫﺎ clear screenﺍﻱ ﺘﻨﻅﻴﻑ ﺍﻟﺸﺎﺸﻪ ،ﺍﻱ ﺴﻴﺘﻡ ﻋﻨﺩ ﻜﺘﺎﺒﻪ
ﻫﺫﺍ ﺍﻻﻤﺭ ﻤﺴﺢ ﻜﺎﻓﻪ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺍﻟﺸﺎﺸﻪ .
ﺍﻟﺤﻠﻘﻪ ﺍﻟﺜﺎﻨﻴﻪ ﻫﻲ ﻟﻁﺒﺎﻋﻪ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻁﻼﺏ ﺍﻟﺜﻼﺜﻪ ،ﻭﻫﻲ ﺸﺒﻴﻪ ﺒﺎﻟﺤﻠﻘﻪ ﺍﻟﺴﺎﺒﻘﻪ
)ﺍﻻﻭﻟﻰ( ﻟﺫﻟﻙ ﻟﻥ ﻨﻌﻴﺩ ﺘﻜﺭﺍﺭ ﻨﻔﺱ ﺍﻟﻜﻼﻡ .
ﺍﻟﻤﺠﻤﻭﻋﺎﺕ Sets
ﺍﻟﻤﺠﻤﻭﻋﺎﺕ ﻤﻥ ﺍﺤﺩ ﺍﻟﻤﺯﺍﻴﺎ ﺍﻟﺨﺎﺼﻪ ﻟﻠﻐﻪ ﺒﺎﺴﻜﺎل ،ﻭﺍﻟﺘﻰ ﻨﺎﺩﺭﺍ ﻤﺎ ﻨﺠﺩﻫﺎ ﻓﻲ
ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﻪ ﺍﻻﺨﺭﻯ .
ﺍﻏﻠﺏ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻴﺘﺠﺎﻫﻠﻭﺍ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﻪ ﻭﻴﻘﻭﻤﻭﺍ ﺒﺩﻻ ﻋﻥ ﺫﻟﻙ ﺒﺎﺴﺘﺨﺩﺍﻡ
ﺍﻟﻤﺼﻔﻭﻓﺎﺕ ،ﻟﻤﺎ ﻴﻭﺠﺩ ﻤﻥ ﺘﺸﺎﺒﻪ ﺒﻴﻨﻬﻤﺎ .
ﻋﻠﻰ ﺍﻟﻌﻤﻭﻡ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺠﻤﻭﻋﺎﺕ ﻓﻲ ﺒﺭﺍﻤﺠﻨﺎ ﻴﻌﺘﺒﺭ ﺸﻲﺀ ﺠﻴﺩ ،ﺠﺩﺍ !!
ﺍﻨﺎ ﺸﺨﺼﻴﺎ ﻨﺎﺩﺭﺍ ﻤﺎ ﺍﺴﺘﺨﺩﻤﻬﺎ ﺍﻴﻀﺎ ،ﻟﻜﻨﻬﺎ ﻤﻔﻴﺩﻩ ﻓﻲ ﺒﻌﺽ ﺍﻻﺤﻴﺎﻥ ،ﻭﺍﻟﻌﺩﻴﺩ
ﻤﻥ ﺍﻟﻜﺘﺏ ﺘﻡ ﺘﺠﺎﻫل ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﻪ ﻭﻋﺩﻡ ﺍﻻﺸﺎﺩﻩ ﻟﻬﺎ ،ﻟﻜﻥ ﺍﻥ ﺸﺎﺀ ﺍﷲ
ﺴﺄﺤﺎﻭل ﺃﻥ ﺍﻏﻁﻴﻬﺎ ﺒﻘﺩﺭ ﺍﻻﻤﻜﺎﻥ .
136
//ﻤﺜﺎل
Program ex (input, output);
Uses wincrt;
Type
Days = (Sunday, Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday);
Var
allday : set of days;
workday : set of Monday .. Friday;
thisday : days;
137
ﻴﻜﻭﻥ ﺫﻟﻙ ﻫﻜﺫﺍ، ﻟﻨﻔﺘﺭﺽ ﺍﻨﻨﺎ ﻨﺭﻴﺩ ﺍﻥ ﻨﺤﺫﻑ ﺍﺤﺩ ﻫﺫﻩ ﺍﻻﻴﺎﻡ ﻟﺴﺒﺏ ﻤﺎ
Exclude(myday,Friday);
.ﺍﻻﻥ ﺘﻡ ﺍﺴﺘﺒﻌﺎﺩ ﻴﻭﻡ ﺍﻟﺠﻤﻌﻪ ﻤﻥ ﺍﻴﺎﻡ ﺍﻻﺴﺒﻭﻉ
138
139
ﺤﺴﻨﺎ ،ﺩﻋﻨﺎ ﻨﺭﻯ ﺍﻟﺸﻜل ﺍﻟﻌﺎﻡ ﻟﻜﻴﻔﻴﻪ ﻜﺘﺎﺒﻪ ﻭﺤﺩﻩ ﺨﺎﺼﻪ ﺒﻨﺎ
Interface
Uses....
Var
}... {Visible global variables
;Procedure myproc
;Function myfunc: word
:
140
Procedure myproc;
Begin
: {the routines}
:
End;
:
: {other procedure's / function's routines}
:
Begin
: {Initialization code}
:
End.
141
ﻤﺜﺎل ﺒﺴﻴﻁ
}{This unit must be stored in MYUNIT.PAS
;Unit myunit
Interface
;Uses CRT
Var
;X : byte
;Y, z: integer
;Procedure a
;Procedure b
;Function c: byte
Implementation
Var
142
Procedure a;
Begin
:
:
End;
Procedure d;
Begin
:
:
End;
Procedure b;
Begin
:
:
End;
Function c: byte;
Begin
:
:
End;
143
Begin
: {Initialization code}
:
End.
Var
N: byte;
Begin
A; {legal}
B; {legal}
N: =c; {legal}
X: =1; {legal}
Y: =-1; {legal}
144
ﻜﻤﺎ ﺫﻜﺭﻨﺎ ﻓﻲ ﺒﺩﺍﻴﻪ ﺍﻟﺩﺭﺱ ،ﺍﻥ ﺍﻟﺤﺎﺠﻪ ﻟﻬﺎ ﻋﻨﺩﻤﺎ ﻨﺭﻴﺩ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﺩﻴﺩ ﻤﻥ
ﺍﻻﻭﺍﻤﺭ ﺍﻭ ﺍﻻﺠﺭﺍﺀﺍﺕ ﻓﻲ ﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺒﺭﺍﻤﺞ ،ﻨﻘﻭﻡ ﺒﻜﺘﺎﺒﻪ ﻭﺤﺩﻩ ﺘﻀﻡ ﻫﺫﻩ
ﺍﻻﻭﺍﻤﺭ ﺠﻤﻴﻌﺎ .ﺜﻡ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﻴﺌﺴﻲ ﻨﻘﻭﻡ ﺒﺎﻀﺎﻓﻪ ﻫﺫﻩ ﺍﻟﻭﺤﺩﻩ .
145
146
ﻓﻲ ﺤﺎﻟﻪ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻨﺼﻴﻪ ،ﺴﻨﻨﺎﻗﺵ ﻋﻠﻰ ﺍﺴﺎﺱ ﺍﻥ ﺍﻟﻤﻠﻑ ﺍﻟﻨﺼﻲ
ﺍﻟﺫﻱ ﺴﻨﻨﺸﺌﻪ )ﺍﻭ ﺍﻟﻤﻭﺠﻭﺩ( ﺴﻭﻑ ﻴﻜﻭﻥ ﻓﻲ ﻤﺠﻠﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﺍﻱ ﻤﻭﺠﻭﺩ ﻓﻲ
ﺍﻟﻘﺭﺹ cﺩﺍﺨل ﺍﻟﻤﺠﻠﺩ . TPW
ﻓﻲ ﺤﺎﻟﻪ ﻤﻠﻑ ﻨﺼﻲ ﻤﻭﺠﻭﺩ ﻤﺴﺒﻘﺎ )ﻜﻤﺎ ﻗﻠﻨﺎ ﻓﻲ ﺍﻟﺒﺩﺍﻴﻪ ﺩﺍﺨل
ﻤﺠﻠﺩ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻱ ﻓﻲ ﺍﻟﻤﺴﺎﺭ ( C:/TPWﺴﻭﻑ ﻴﻜﻭﻥ ﺍﻟـ
assignﺒﻬﺫﺍ ﺍﻟﺸﻜل ،ﺒﺎﻋﺘﺒﺎﺭ ﺍﻥ ﺍﻟﻤﻠﻑ ﺍﻟﻤﻭﺠﻭﺩ ﺒﺎﺴﻡ wajdy.txt
Begin
;)’Assign (f,’wajdy.txt
147
ﻻﺤﻅ ﺍﻟﻤﺘﻐﻴﺭ sﻤﻥ ﺍﻟﻨﻭﻉ stringﺍﻱ ﺴﻠﺴﻠﻪ ﻨﺼﻴﻪ )ﻻﻥ ﺍﺴﻡ ﺍﻟﻤﻠﻑ
ﺴﻭﻑ ﻴﻜﻭﻥ ﻋﺒﺎﺭﻩ ﻋﻥ ﻤﺠﻤﻭﻋﻪ ﻤﻥ ﺍﻟﺤﺭﻭﻑ ﻭﺍﻻﺭﻗﺎﻡ (.
.4ﺍﻟﺨﻁﻭﻩ ﺍﻟﺭﺍﺒﻌﻪ ﻫﻭ ﻗﺭﺍﺀﻩ ﺍﻟﺒﻴﺎﻨﺎﺕ )ﻓﻲ ﺍﻟﻤﻠﻑ ﺍﻟﻘﺩﻴﻡ ( ﻭﻴﺘﻡ ﺫﻟﻙ ﺒـ
;)Readln (f, x
;)Writeln(x
148
149
150
ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ،ﻟﻭ ﺍﺩﺭﻨﺎ ﺍﻥ ﻴﻜﻭﻥ ﺍﺴﻡ ﺍﻟﻤﻠﻑ ﺍﻟﻨﺼﻲ ﻫﻭ ﺍﻟﺫﻱ ﻴﺩﺨﻠﻪ
ﺍﻟﻤﺴﺘﺨﺩﻡ ،ﻴﻜﻭﻥ ﺸﻜﻠﻪ ﻜﺎﺍﻻﺘﻲ /
Begin
;)Read (n
;)Assign (f, n
:
:
End.
ﺍﻟﻤﺘﻐﻴﺭ Nﻫﻭ ﻤﺘﻐﻴﺭ ﻤﻥ ﺍﻟﻨﻭﻉ . string
ﻤﺜﺎل ﻋﻠﻰ ﺍﺩﺨل ﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻤﻠﻑ ﺠﺩﻴﺩ )ﺍﻱ ﻴﺘﻡ ﺍﻨﺸﺎﺀ ﻤﻠﻑ ﺒﺎﻱ ﺍﺴﻡ ﻭﻤﻥ ﺜﻡ
ﺘﺘﻡ ﻜﺘﺎﺒﻪ ﺒﻌﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﻠﻴﻪ (.
;)Program ex2 (input, output
;Uses wincrt
Var
;F: text
;S, n: string
;Ch: char
151
ﺒﺩﺃ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻗﻤﻨﺎ ﺒﻘﺭﺍﺀﻩ ﺍﻟﻤﺘﻐﻴﺭ nﻭﻋﻴﻨﺎﻩ assignﺍﻟﻰ ﺍﻟﻤﻠﻑ ﺍﻟﻨﺼﻲ ،
ﻭﻗﻤﻨﺎ ﺒﺈﻨﺸﺎﻩ . rewrite
ﺍﻻﻥ ﺒﺩﺍﺕ ﺤﻠﻘﻪ ﺍﻟﺘﻜﺭﺍﺭ ،ﺍﻗﺭﺃ ﺍﻟﻤﺘﻐﻴﺭ (Readln(s);) sﻭﻤﻥ ﺜﻡ ﺍﻁﺒﻌﻪ ﻋﻠﻰ
ﺍﻟﻤﻠﻑ ﺍﻟﻨﺼﻲ );)(Writeln(f,s
ﻭ ); (Ch:= readkeyﻤﺎﺫﺍ ﻴﻘﺼﺩ ﺒﻬﺎ .......؟
152
ﻤﻌﻨﻰ ﺫﻟﻙ ﺴﻭﻑ ﺘﻜﺭﺭ ﺍﻟﺤﻠﻘﻪ ﺤﺘﻰ ﻴﻘﻭﻡ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﻀﻐﻁ ﻋﻠﻰ ﻤﻔﺘﺎﺡ
ﺍﻟﻬﺭﻭﺏ . Esc
ﺠﻤﻠﻪ //append
ﺍﺫﺍ ﻗﻤﻨﺎ ﺒﺎﻨﺸﺎﺀ ﻤﻠﻑ ﺠﺩﻴﺩ ﺒﻨﻔﺱ ﺍﻻﺴﻡ ﻟﻤﻠﻑ ﻗﺩﻴﻡ ﺍﻱ ﻤﻨﺸﺄ ﻤﺴﺒﻘﺎ ،ﻓﻲ ﻫﺫﻩ
ﺍﻟﺤﺎﻟﻪ ﺴﻭﻑ ﻴﺘﻡ ﻤﺴﺢ ﻜﺎﻓﻪ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺍﻟﻤﻠﻑ ﺍﻟﻘﺩﻴﻡ .
ﺍﺫﺍ ﺠﻤﻠﻪ appendﺘﺴﺘﺨﺩﻡ ﻻﻀﺎﻓﻪ ﺒﻴﺎﻨﺎﺕ ﺠﺩﻴﺩﻩ ﺍﻟﻰ ﻤﻠﻑ ﻗﺩﻴﻡ ،ﻭﻴﺘﻡ
ﻜﺘﺎﺒﺘﻬﺎ ﺒﺩل ﺠﻤﻠﻪ rewriteﻻﺤﻅ :
;)’Assign (f,’wajdy.txt
;)Append (f
153
ﻓﻲ ﺒﻌﺽ ﺍﻻﺤﻴﺎﻥ ﺘﺤﺘﺎﺝ ﺍﻟﻰ ﺍﻟﺘﺄﻜﺩ ﻤﻥ ﺍﻥ ﺍﻟـ bufferﻻ ﻴﺘﺠﺎﻭﺯ ﺤﺩﻩ
ﺍﻻﻗﺼﻰ ﻤﻬﻼ ،ﺍﻨﺕ ﻗﻠﺕ ﺍﻨﻪ ﻜﺎﻓﻲ ﻟﻠﻌﻤﻠﻴﺎﺕ ﻓﻲ ﺒﺎﺴﻜﺎل ؟؟ ﻨﻌﻡ ﻟﻜﻥ ﻤﺎﺫﺍ ﻟﻭ
ﺍﻨﻘﻁﺕ ﺍﻟﻜﻬﺭﺒﺎﺀ ﺍﻭ ﺍﻨﻐﻠﻕ ﺍﻟﺠﻬﺎﺯ ﻻﻱ ﺴﺒﺏ ﻤﻥ ﺍﻻﺴﺒﺎﺏ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﻪ ﻓﺈﻥ
ﻜل ﻤﺤﺘﻭﻴﺎﺕ ﺍﻟـ bufferﺴﻭﻑ ﺘﻀﻴﻊ ﻫﺒﺎﺀﺍ ﻤﻨﺜﻭﺭﺍ ،ﻟﺫﻟﻙ ﻴﺠﺏ ﺤﻔﻅ
flushﻤﺤﺘﻭﻴﺎﺕ ﺍﻟﻘﺭﺹ ﺒﺸﻜل ﻴﺩﻭﻱ ﻻﻨﻪ ﻴﺤﻔﻅ ﺍﻭل ﺒﺄﻭل ،ﺍﻨﺕ ﻻ ﺘﺭﻴﺩ
ﻤﺴﺘﺨﺩﻡ ﺒﺭﻨﺎﻤﺞ ﻴﻘﻭل ﺍﺍﺍﺍﺍﺍﺍﺍﺍﺍﻩ ﻟﻘﺩ ﻓﻘﺩﺕ ﺒﻴﺎﻨﺎﺘﻲ J
ﺤﻔﻅ ﻤﺤﺘﻭﻴﺎﺕ ﺍﻟـ Bufferﺍﻟﻰ ﺍﻟﻘﺭﺹ ﺒﺸﻜل ﻴﺩﻭﻱ ﻴﻜﻭﻥ ﺒﺎﻀﺎﻓﻪ ﺍﻟﺠﻤﻠﻪ
ﺍﻻﺘﻴﻪ /
;)Flush (f
ﻭﻴﻤﻜﻥ ﻜﺘﺎﺒﺘﻪ ﻓﻲ ﻤﻜﺎﻥ ﺒﻌﺩ ﺘﻌﻴﻴﻥ ﺍﻟﻤﻠﻑ ﺍﻟﻰ ﺍﻏﻼﻕ ﺍﻟﻤﻠﻑ ،ﻟﻜﻥ ﻋﺎﺩﻩ ﻴﻔﻀل
ﻗﺒل ﺍﻏﻼﻕ ﺍﻟﻤﻠﻑ .
ﻫﺫﺍ ﺒﺎﻟﻨﺴﺒﻪ ﺍﻟﻰ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻨﺼﻴﻪ ،ﺍﻤﺎ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺜﻨﺎﺌﻴﻪ ﻓﺎﻻﻤﺭ ﻴﺨﺘﻠﻑ )ﻭﺴﻭﻑ
ﻨﺘﻜﻠﻡ ﻋﻨﻪ ﺒﻌﺩ ﻗﻠﻴل ( .
ﺒﻌﺽ ﺍﻻﺤﻴﺎﻥ ﻓﻲ ﺤﺎﻟﻪ ﻗﺭﺍﺀﻩ ﺍﻭ ﺍﻀﺎﻓﻪ ﻤﻌﻠﻭﻤﺎﺕ ﻟﻤﻠﻑ ﻏﻴﺭ ﻤﻭﺠﻭﺩ ،
ﺒﺎﺴﻜﺎل ﻴﺼﺭﺥ " "Errorﺜﻡ ﻴﻘﻭﻡ ﺒﺎﻟﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ،ﻭﺍﻟﺭﺠﻭﻉ ﺍﻟﻰ
154
ﻤﺜﺎل //
;)Program example (input,output
;Uses wincrt
Var
;F:text
;S:string
Begin
;)‘ Write (‘Enter the file name:
;)Readln(s
;)Assign (f, s
}{$I-
155
} {$I-ﻭ } {$I+ﺘﻜﻭﻥ ﻋﺎﺩﻩ ﺒﻴﻥ ﻓﺘﺢ ﺍﻟﻤﻠﻑ ،ﻜﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ،ﻗﻡ
ﺒﺘﺠﺭﺒﻪ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻭﺍﻟﺘﺎﻜﺩ ﻤﻥ ﻤﻌﺭﻓﺘﻪ .
ﺍﻥ ﺘﻀﻤﻴﻥ ﺍﻟـ IOResultﻴﺘﺴﺒﺏ ﻓﻲ ﺍﻋﺎﺩﻩ ﺭﻤﺯ ﺍﻟﺨﻁﺄ ،ﻤﻥ ﺍﻟﻤﻔﺘﺭﺽ ﺍﻥ
ﺘﻘﻭﻡ ﺒﺤﻔﻅ ﻤﺤﺘﻭﻴﺎﺘﻪ ﺍﻭﻻ ﺜﻡ ﺍﻜﺘﺸﻑ ﺍﻟﺨﻁﺄ ،ﻨﻔﺭﺽ nﻤﺘﻐﻴﺭ ﻤﻥ ﺍﻟﻨﻭﻉ
ﺍﻟﺤﻘﻴﻘﻲ .integer
ﺍﻻﻥ ﻨﺭﺠﻊ ﺍﻟﻰ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ ،ﺴﺄﻜﺘﺏ ﻤﺎ ﺒﻌﺩ ﺍﻟـ Beginﻟﻠﺒﺭﻨﺎﻤﺞ ﺍﻟﺭﺌﻴﺴﻲ
156
157
158
159
Begin
Write (‘Input File name: ‘);
Readln(s);
Assign (f, s);
Rewrite (f);
Repeat
Clrscr;
Write (‘Name= ‘); readln (d.name);
Write (‘Age = ‘); readln (d.age);
Write (f, d);
Write (‘Input New Data Y/N ‘);
Repeat
C: = upcase (readkey);
160
161
ﺍﻳﻀﺎ ﺳﻮﻑ ﻧﺄﺧﺬ ﺑﻌﺾ ﺍﻟﺪﻭﺍﻝ ﺍﳊﺴﺎﺑﻴﻪ ﺍﻟﱴ ﺗﻔﻴﺪﻙ ﰲ ﺣﺎﻟﻪ ﺍﺭﺩﺕ ﻋﻤﻞ
ﺑﺮﺍﻣﺞ ﺭﻳﺎﺿﻴﻪ .
162
: ﺍﻟﺩﻭﺍل ﺍﻟﺤﺴﺎﺒﻴﻪ
=-=-=-=-=-=
163
ﺍﻟﻜﺘﺏ ﺍﻻﺠﻨﺒﻴﻪ
ﻟﻠﻜﺎﺘﺏ Marco cantu EssentialPascal
ﻟﻠﻜﺎﺘﺏ Rob miles Introduction to Pascal
ﻟﻠﻜﺎﺘﺏ M.F.Somers Learning PASCAL
ﻟﺼﺎﺤﺏ ﺍﻟﻠﻐﻪ Wirth PascalRevisedReport
ﻟﻠﻜﺎﺘﺏ Roby Joehanes The Basic of Pascal
ﺍﻟﻜﺘﺏ ﺍﻟﻌﺭﺒﻴﻪ
ﻟﻠﻜﺎﺘﺏ ﻋﺭﻭﻩ ﻤﻌﺎﻴﻴﺭ ﻓﻲ ﺘﻘﻴﻴﻡ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﻪ
ﻟﻠﻜﺎﺘﺏ MaaSTaaR ﺍﻟﺩﺭﻭﺱ ﺍﻟﻤﺘﺭﺠﻤﻪ ﻓﻲ ﺒﺎﺴﻜﺎل
164
ﻭﺼﻠﻲ ﺍﻟﻠﻬﻡ ﻭﺴﻠﻡ ﻭﺒﺎﺭﻙ ﻋﻠﻰ ﻨﺒﻴﻨﺎ ﻤﺤﻤﺩ ﻭﻋﻠﻰ ﺍﻟﻪ ﻭﺼﺤﺒﻪ
ﺍﺠﻤﻌﻴﻥ .
165