Professional Documents
Culture Documents
خوارزمية حل بواسطة الحاسب
خوارزمية حل بواسطة الحاسب
Algorithm
ﻤﻘﺩﻤﺔ
ل ﻟﻠﻤﺴﺄﻟﺔ ﺍﻟﻤﻁﺭﻭﺤـﺔ .ﻭﻫـﺫﺍ
ﻗﺒل ﻜﺘﺎﺒﺔ ﺃﻱ ﺒﺭﻨﺎﻤﺞ ﻟﺤل ﻤﺴﺄﻟﺔ ﻤﺎ ،ﻴﺠﺏ ﺃﻥ ﻴﺘﻭﻓﺭ ﻟﺩﻴﻨﺎ ﻓﻬ ﻡ ﺸﺎﻤ ٌ
ﻴﺘﻀﻤﻥ ﺘﺤﺩﻴﺩ ﻭﺘﻭﺼﻴﻑ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻨﻌﺘﻤﺩ ﻋﻠﻴﻬﺎ ﺃﻭ ﻨﻨﻁﻠﻕ ﻤﻨﻬﺎ ،ﻭﺍﻟﻨﺘﺎﺌﺞ ﺍﻟﺘﻲ ﻨﺭﻴﺩ ﺍﻟﻭﺼﻭل
ﺇﻟﻴﻬﺎ .ﺒل ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻨﺘﺒﻊ ﺃﺴﻠﻭﺒﹰﺎ ﻤﻨﻬﺠﻴﹰﺎ ﻟﻠﺤل ،ﻭﻨﻌﺒﺭ ﻋﻥ ﻫﺫﺍ ﺍﻟﺤل ﺒﻁﺭﻴﻘﺔ ﻤﺅﻁﺭﺓ ﻤﻬﻴﻜﻠﺔ ﻻ
ﻟﺒﺱ ﻓﻴﻬﺎ ﻜﺎﻓﻴﺔ ﻟﺘﻨﻘﻠﻨﺎ ﻓﻴﻤﺎ ﺒﻌﺩ ﺇﻟﻰ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻤﻌﻴﻨﺔ ﺩﻭﻥ ﻋﻨﺎﺀ ﻜﺒﻴﺭ.
.1ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ
ﻴﺘﻡ ﺤل ﺃﻱ ﻤﺴﺄﻟﺔ ﺒﺭﻤﺠﻴﺔ ﻤﻥ ﺨﻼل ﺘﻨﻔﻴﺫ ﺴﻠﺴﻠﺔ ﻤﻥ ﺍﻷﻓﻌﺎل ﻭﻓﻕ ﺘﺭﺘﻴﺏ ﻤﻌﻴﻥ ،ﺇﻨﻬﺎ ﺨﻁﺔ ﺍﻟﺤل،
ﻭﻨﻁﻠﻕ ﻋﻠﻴﻬﺎ ﺘﺴﻤﻴﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ،Algorithmﻭﺘﺘﻀﻤﻥ ﺨﻁﻭﺍﺕ ﺤل ﻤﺴﺄﻟﺔ ﻋﺒﺭ ﺘﺤﺩﻴﺩ:
-1ﺍﻷﻓﻌﺎل ﺍﻟﻭﺍﺠﺏ ﺘﻨﻔﻴﺫﻫﺎ.
-2ﺍﻟﺘﺭﺘﻴﺏ ﺍﻟﻭﺍﺠﺏ ﺇﺘﺒﺎﻋﻪ ﻤﻥ ﺃﺠل ﺘﻨﻔﻴﺫ ﺍﻷﻓﻌﺎل ﺍﻟﺴﺎﺒﻘﺔ.
ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﺍﻷﻓﻌﺎل ﻭﺘﺭﺘﻴﺏ ﺍﻟﺘﻨﻔﻴﺫ ﻤﻭﺼﻔﹰﺎ ﻋﻠﻰ ﻭﺠ ٍﻪ ﻻ ﻴﺩﻋﻭ ﺇﻟﻰ ﺍﻟﻠـﺒﺱ ﺃﻭ ﺍﻟﺘﺄﻭﻴـل ،ﻭﺃﻥ
ﻼ ﻟﻼﻨﺘﻘﺎل ﻟﺒﺭﻨﺎﻤﺞ ﻟﻠﺘﻨﻔﻴﺫ ﻤﻥ ﻗﺒل ﺍﻟﺤﺎﺴﻭﺏ.
ﻴﻜﻭﻥ ﻗﺎﺒ ﹸ
1
)(Pseudo Code .2ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ
ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻟﻐﺔ ﻤﺼﻁﻨﻌﺔ ﺒﻤﻌﻨﻰ ﺃﻨﻬﺎ ﻟﻐﺔ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺒﺭﺍﻤﺞ ﻭﻟﻜﻨﻬﺎ ﻟﻴﺴﺕ
ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻓﻌﻠﻴﺔ .ﺘﺴﺎﻋﺩ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻋﻠﻰ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ :ﺨﻁﻭﺍﺕ ﺍﻟﺤل ،ﻭﻤﺴﺎﺭ ﺃﻭ
ﺘﺴﻠﺴل ﺘﻨﻔﻴﺫﻫﺎ.
ﺴﻨﻘﻭﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل ﺒﻌﺭﺽ ﻟﻐﺔ ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﺘﻔﻴﺩﻨﺎ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺭ ﺒﺸﻜل "ﻁﺒﻴﻌﻲ" ﻋﻥ ﺨﻁﻭﺍﺘﻨـﺎ
ﻭﻤﺴﺎﺭﻨﺎ ﻟﺤل ﻤﺴﺄﻟﺔ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ.
ﺘﺸﺒﻪ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻟﻐﺔ ﺘﻔﻜﻴﺭﻨﺎ ﻓﻲ ﻟﻐﺘﻨﺎ ﺍﻟﻤﺘﺩﺍﻭﻟﺔ ،ﻓﻬﻲ ﻟﻐﺔ ﻤﺒﺴﻁﺔ ﻭﻤﻔﻬﻭﻤﺔ ،ﻭﻟﻜﻥ ﻤﺅﻁﺭﺓ
ﻭﻤﻬﻴﻜﻠﺔ ،ﺴﺘﺴﻬل ﻟﻨﺎ ﻓﻴﻤﺎ ﺒﻌﺩ ﺍﻻﻨﺘﻘﺎل ﺇﻟﻰ ﻟﻐﺔ ﺒﺭﻤﺠﻴﺔ ﻓﻌﻠﻴﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ.
:pseudo code ﻤﻌﻨﻰ ﻜﻠﻤﺔ
ﻓﻲ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻓﻲ ﺴﻴﺎﻕ ﻋﻠﻭﻡ ﺍﻟﺤﺎﺴﻭﺏ ﻟﻠﺩﻻﻟﺔ ﻋﻠﻰ ﺍﻟﺘﺭﻤﻴﺯ ﻟﻠﺤﺎﺴـﻭﺏ ﺃﻭ code ﺘﺴﺘﺨﺩﻡ ﻜﻠﻤﺔ
)ﺸـﺒﻪ ﺃﻭ ﻗﺭﻴـﺏ pseudo code ﻟﻜل ﻤﺎ ﻫﻭ ﺘﻌﻠﻴﻤﺎﺕ ﻟﻐﺎﺕ ﺒﺭﻤﺠﺔ ،ﻭﻤﻥ ﻫﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺼﻁﻠﺢ
ﺍﻟﺘﺭﻤﻴﺯ( ﻟﻠﺩﻻﻟﺔ ﺃﻨﻬﺎ ﻟﻐﺔ ﻗﺭﻴﺒﺔ ﺃﻭ ﺸﺒﻴﻬﺔ ﺒﻠﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ.
ﻻ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺤﺎﺴﺏ ،ﻟﻜﻨﻬﺎ ﺘﺴﺎﻋﺩ ﺍﻟﻤﺒـﺭﻤﺞ ﻜﺜﻴـﺭﹰﺍ
ﻋﻠﻰ ﺍﻟﺘﻔﻜﻴﺭ ﺒﺒﺭﻨﺎﻤﺠﻪ ﻗﺒل ﻤﺤﺎﻭﻟﺔ ﻜﺘﺎﺒﺘﻪ ﺒﺄﻴﺔ ﻟﻐﺔ ﺒﺭﻤﺠﺔ.
2
ﺴﻨﺒﺩﺃ ﺍﻵﻥ ﺒﺸﺭﺡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻷﺴﺎﺴﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ،ﻟﻨﺴﺘﻭﻋﺏ ﺠﻴﺩﹰﺍ ﻋﻤﺎ ﺘﻌﺒﺭ ﻓﻌﻠﻴﹰﺎ ﺒـﺸﻜل
ﺩﻗﻴﻕ.
ﻭﺴﻨﺴﺘﺨﺩﻡ ﻜﻠﻤﺔ ﻤﺘﺤﻭل ﻭﺨﺎﻨﺔ ﺫﺍﻜﺭﺓ ﻟﻨﻔﺱ ﺍﻟﺩﻻﻟﺔ .ﻭﻓﻲ ﺃﻤﺜﻠﺘﻨﺎ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل ﺴـﻴﻜﻭﻥ ﻤﻌﻅـﻡ
ﺍﺴﺘﺨﺩﺍﻤﻨﺎ ﻟﻤﺘﺤﻭﻻﺕ ﻋﺩﺩﻴﺔ ﺼﺤﻴﺤﺔ ).(integer
ﺒﺜﻼﺜﻴﺔ :ﺍﺴﻡ ﺘﻌﺭﻴﻑ ،identifierﻨﻤﻁ ،typeﺨﺎﻨـﺔ ﺫﺍﻜـﺭﺓ ﻴـﺸﻐﻠﻬﺎ variable ﻴﻌﺭﻑ ﺍﻟﻤﺘﺤﻭل
.memory allocation
ﺘﻌﻠﻴﻤﺎﺕ ﺃﺴﺎﺴﻴﺔ ﻟﻠﺘﻌﺒﻴﺭ ﻋـﻥ ﺃﻱ ﺤـل ﻟﻤـﺴﺄﻟﺔ 5 ﻭﻟﻨﺭﻜﺯ ﻤﻌﹰﺎ ،ﺃﻟﻴﺱ ﺭﺍﺌﻌﹰﺎ ﺃﻥ ﻨﺩﺭﻙ ﺃﻨﻪ ﻴﻜﻔﻴﻨﺎ
ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ.
-1ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﺭﺍﺀﺓ
ﻫﻲ ﺇﻋﻁﺎﺀ ﻗﻴﻤﺔ ﻤﻥ ﺍﻟﺩﺨل )ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ( ﻟﻭﻀﻌﻬﺎ ﻓﻲ ﺨﺎﻨﺔ ﺫﺍﻜﺭﺓ.
ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ:
ﻨﻌﻁﻲ ﺸﻜ ﹰ
ﺍﻗﺭﺃ ﻤﺘﺤﻭل ﺃﻭ ﻤﺘﺤﻭﻻﺕ
ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺃﻤﺭ ﻴﻘﻭل ﺨﺫ ﺍﻟﻘﻴﻤﺔ )ﺍﻟﻘﻴﻡ( ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺩﺨل ﻭﻀﻌﻬﺎ ﻓﻲ ﺨﺎﻨﺔ )ﺨﺎﻨﺎﺕ( ﺫﺍﻜﺭﺓ
ﺍﻟﻤﺘﺤﻭل )ﺍﻟﻤﺘﺤﻭﻻﺕ(.
ﺃﻤﺜﻠﺔ:
N ﺍﻗﺭﺃ
N ﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﺘﹸﻌﻁﻰ ﻤﻥ ﺍﻟﺩﺨل ﻓﻲ ﺨﺎﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ
ﻴﺠﺏ ﺍﻟﺘﻨﻭﻴﻪ ﺃﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺤﺎﺴﻭﺏ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﺭﺍﺀﺓ ﻴﻜﻭﻥ ﺒﺎﻨﺘﻅﺎﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺤﺘﻰ ﻴﺩﺨل ﻗﻴﻡ ﻭﻴـﻀﻐﻁ
ﻤﻔﺘﺎﺡ ﺍﻹﺩﺨﺎل .Enter
-2ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ
ﻭﻫﻲ ﺇﻅﻬﺎﺭ ﻗﻴﻡ ﻤﻌﻴﻨﺔ ﻋﻠﻰ ﻭﺤﺩﺓ ﺍﻟﺨﺭﺝ )ﺍﻟﺸﺎﺸﺔ(
ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ:
ﻨﻌﻁﻲ ﺸﻜ ﹰ
ﺍﻜﺘﺏ ﺼﻴﻐﺔ ﺃﻭ ﺘﻌﺒﻴﺭ
3
(formulaﻫﻲ ﺘﺭﻜﻴﺏ ﻤﻥ ﻤﺘﺤﻭﻻﺕ ﻭ ﺜﻭﺍﺒﺕ ﻭ ﻋﻤﻠﻴـﺎﺕ ﺃﻭ ), expression ﻭﺍﻟﺼﻴﻐﺔ ﺃﻭ ﺍﻟﺘﻌﺒﻴﺭ
ﻻ ﻓﻘﻁ ﺃﻭ ﺜﺎﺒﺘﹰﺎ ﻓﻘﻁ.
ﺘﻭﺍﺒﻊ ،ﻭﻓﻲ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺒﺴﻴﻁﺔ ﻴﻜﻭﻥ ﺍﻟﺘﻌﺒﻴﺭ ﻤﺘﺤﻭ ﹰ
ﺇﺫﻥ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ ﻫﻲ ﺃﻤﺭ ﻴﻘﻭل ﺃﻅﻬﺭ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻠﻰ ﻭﺤﺩﺓ ﺍﻟﺨﺭﺝ.
ﻭﻜﻤﺎ ﻓﻲ ﺘﻌﻠﻴﻤﺔ ﺍﻟﺩﺨل ﻴﻤﻜﻥ ﺃﻥ ﻨﻁﻠﺏ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ ﺍﻅﻬﺎﺭ ﺃﻜﺜﺭ ﻤﻥ ﻗﻴﻤﺔ )ﻋﺩﺓ ﺼﻴﻎ(.
ﺃﻤﺜﻠﺔ:
N ﺍﻜﺘﺏ
ﻋﻠﻰ ﺍﻟﺨﺭﺝ. N ﺃﻅﻬﺭ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺨﺎﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ
N*2 ﺍﻜﺘﺏ
ﻭ ﺃﻅﻬﺭﻫﺎ ﻋﻠﻰ ﺍﻟﺨﺭﺝ. N*2 ﺍﺤﺴﺏ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺭ
ﻓﺴﻴﻅﻬﺭ ﻋﻠﻰ ﺍﻟﺨﺭﺝ ﺍﻟﻘﻴﻤﺔ .12 6 ﺘﺴﺎﻭﻱ N ﻓﺈﻥ ﻜﺎﻨﺕ
20 ﺍﻜﺘﺏ
ﻭﻫﻤﺎ ﻤﺜﺎﻻﻥ ﻋﻥ ﻜﺘﺎﺒﺔ ﺜﻭﺍﺒﺕ ،ﺍﻷﻭل ﻋﺩﺩﻱ ﻭﺍﻟﺜﺎﻨﻲ ﻨﺼﻲ )ﺴﻠﺴﻠﺔ ﺤﺭﻭﻑ(.
)cos(0 ﺍﻜﺘﺏ
،ﻭﻫﺫﺍ ﻤﺜﺎل ﻋﻥ ﺇﻅﻬﺎﺭ ﺼﻴﻐﺔ ﺘﺘﻀﻤﻥ ﺘﺎﺒﻊ. 1.0 ﺴﺘﻅﻬﺭ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻴﻤﺔ
-3ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ
ﻭﻫﻲ ﺇﺴﻨﺎﺩ ﻗﻴﻤﺔ ﺼﻴﻐﺔ ﻟﻤﺘﺤﻭل )ﻟﺨﺎﻨﺔ ﺫﺍﻜﺭﺓ(
ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ:
ﻨﻌﻁﻲ ﺸﻜ ﹰ
ﻤﺘﺤﻭل Å ﺼﻴﻐﺔ
4
ﻤﺜﺎل:1
ﺍﻟﻘﻴﻡ ﺍﻟﻤﺨﺯﻨﺔ ).(t = 10, i=25 t, i ﻟﺩﻴﻨﺎ ﻓﻲ ﺨﺎﻨﺘﻲ ﺍﻟﺫﺍﻜﺭﺓ
iÅt ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ ﺍﻟﺘﺎﻟﻴﺔ:
ﺍﻟﻘﻴﻤﺔ 10ﺃﻴﻀﹰﺎ .ﺃﻭ ﻨﻘﻭل ﺃﻥ ﺍﻟﻤﺘﺤﻭل tﻴﺴﺎﻭﻱ .10 i ﺘﺼﺒﺢ ﻓﻲ ﺍﻟﺨﺎﻨﺔ
i Å i + 4*t ﻭﺒﺘﻨﻔﻴﺫ ﺍﻹﺴﻨﺎﺩ:
ﺘﺼﺒﺢ ﻗﻴﻤﺔ iﺘﺴﺎﻭﻱ .50
ﻤﺜﺎل:2
،ﻨﻜﺘﺏ: x=4 ﻓﻲ ﺤﺎﻟﺔ y = x2 - 16 ﺤﺴﺎﺏ ﻗﻴﻤﺔ ﺍﻟﺘﺎﺒﻊ:
xÅ4
y Å x2 - 16
ﺒﻬﺫﺍ ﺍﻹﺴﻨﺎﺩ y ﻤﺎ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل
ﻤﺜﺎل:3
ﻭﺇﻅﻬﺎﺭ ﺍﻟﻨﺘﻴﺠﺔ ﻤﻥ ﺃﺠل y=x3-9 ﺍﻜﺘﺏ ﻤﺠﻤﻭﻋﺔ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺃﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﺴﻤﺢ ﺒﺤﺴﺎﺏ ﺍﻟﺘﺎﺒﻊ
ﻗﻴﻡ xﻴﺠﺭﻱ ﺇﺩﺨﺎﻟﻬﺎ؟
x ﺇﻗﺭﺃ
y Å x3-9
y ﺍﻜﺘﺏ
ﻭ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺇﻅﻬﺎﺭ ﺍﻟﻨﺘﻴﺠﺔ ﻋﻠﻰ ﻨﺤ ٍﻭ ﻤﻌﺒﺭ ﺃﻜﺜﺭ ،ﻨﺴﺘﺒﺩل ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ ،ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ:
ﺍﻜﺘﺏ ”x=”, x ,” y=”, y
-4ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ
ﻭﻓﻴﻬﺎ ﺘﺘﺤﺩﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺘﻨﻔﻴﺫ ﺒﻨﺎ ًﺀ ﻋﻠﻰ ﺍﺨﺘﺒﺎﺭ ﺸﺭﻁ ،ﻭﺘﺭﺩ ﺒﺄﺤﺩ ﺍﻟﺸﻜﻠﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ:
ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻟﺒﺴﻴﻁﺔ ﺃﻭ ﺍﻟﺘﻨﻔﻴﺫ ﺒﺸﺭﻁ. -1
ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻻﺨﺘﻴﺎﺭﻴﺔ ﺃﻭ ﺍﻟﺘﻨﻔﻴﺫ ﺒﺎﺨﺘﻴﺎﺭ ﺒﻴﻥ ﻤﺴﺎﺭﻴﻥ ﻭﻓﻘﹰﺎ ﻟﻠﺸﺭﻁ. -2
5
1-4ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻟﺒﺴﻴﻁﺔ
ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ:
ﻨﻌﻁﻲ ﺸﻜ ﹰ
ﻤﺜﺎل:1
ﺇﺫﺍ ) ( N > 0ﻨﻔﱢﺫ
a Å s/N
ﺃﻜﺒﺭ ﻤﻥ ﺍﻟـﺼﻔﺭ. N ﺒﺸﺭﻁ ﺃﻥ ﺘﻜﻭﻥ N ﻨﺭﻴﺩ ﻤﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻫﻨﺎ ﺃﻥ ﻨﻘﺴﻡ ﻋﻠﻰ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل
ﺇﻟﻰ ﺍﻟﻤﺘﺤﻭل .a s/N ﺃﻜﺒﺭ ﻤﻥ ﺍﻟﺼﻔﺭ ،ﻋﻨﺩﻫﺎ ﻨﻔﱢﺫ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ ﻟﻠﺘﻌﺒﻴﺭ N ﺃﻱ ﺇﺫﺍ ﻜﺎﻨﺕ
ﻤﺜﺎل:2
ﺇﻟﻰ .100 0 ﻨﺭﻴﺩ ﺇﺩﺨﺎل )ﻗﺭﺍﺀﺓ( ﻋﻼﻤﺔ ﻤﺎﺩﺓ ﻭﻨﺭﻴﺩ ﻜﺘﺎﺒﺘﻬﺎ ﻓﻘﻁ ﺇﺫﺍ ﻜﺎﻨﺕ ﻓﻲ ﺍﻟﻤﺠﺎل ﻤﻥ
ﺍﻟﻤﺘﺤﻭل ﺍﻟﺫﻱ ﻨﻜﺭﺴﻪ ﻟﻠﻌﻼﻤﺔ. x ﻟﻴﻜﻥ
x ﺍﻗﺭﺃ
( ﻨﻔﱢﺫ x ≤100 ﻭ x≥0 ﺇﺫﺍ )
x ﺍﻜﺘﺏ
6
2-4ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻻﺨﺘﻴﺎﺭﻴﺔ
ﻓﻲ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻴﺠﺭﻱ ﺍﻻﺨﺘﻴﺎﺭ ﺒﻴﻥ ﻤﺴﺎﺭﻱ ﺘﻨﻔﻴﺫ :ﺇﻤﺎ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ 1-ﻓـﻲ ﺤـﺎل
ﻜﺎﻥ ﺍﻟﺸﺭﻁ ﻤﺤﻘﻘﹰﺎ ) ﺼﺤﻴﺤﹰﺎ( ﺃﻭ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ 2-ﻓﻲ ﺍﻟﺤﺎﻟﺔ ﺍﻟﻤﻌﺎﻜﺴﺔ.
ﻤﺜﺎل:1
ﺇﺫﺍ ) ( N ≠ 0ﻨﻔﱢﺫ
a Å s/N
ﻭﺇﻻ
ﺍﻜﺘﺏ "ﻻ ﻨﺴﺘﻁﻴﻊ ﺍﻟﻘﺴﻤﺔ ﻋﻠﻰ ﺍﻟﺼﻔﺭ "
ﻻ ﺘﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ، N ﺒﺸﺭﻁ ﺃﻥ ﺘﻜﻭﻥ N ﻨﺭﻴﺩ ﻤﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻫﻨﺎ ﺃﻥ ﺘﻘﺴﻡ ﻋﻠﻰ ﻗﻴﻤﺔ ﺍﻟﻤﺘﺤﻭل
ﻭﺇﻻ ﻨﻅﻬﺭ ﻋﺒﺎﺭﺓ ﺘﺩل ﻋﻠﻰ ﺍﻟﺨﻁﺄ.
ﻤﺜﺎل:2
ﺇﻟﻴﻙ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﺍﻟﻤﻨﺘﻬﻲ ﺍﻟﺒﺴﺎﻁﺔ ،ﻭﻟﻜﻨﻪ ﺴﻴﻌﻠﻤﻨﺎ ،ﺃﻤﻭﺭ ﻋﺩﻴﺩﺓ :ﻨﺭﻴـﺩ ﻗـﺭﺍﺀﺓ ﻋـﺩﺩﻴﻥ ،ﻭﻜﺘﺎﺒـﺔ
ﺍﻟﻤﻘﺎﺭﻨﺔ ﺒﻴﻨﻬﻤﺎ )ﺃﻜﺒﺭ ،ﺃﺼﻐﺭ ،ﻴﺴﺎﻭﻱ(.
ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ:
a, b ﺇﻗﺭﺃ
ﺇﺫﺍ ) ( a > bﻨﻔﱢﺫ
a ,” > ”, b ﺍﻜﺘﺏ
ﻭﺇﻻ
ﺇﺫﺍ ) ( a < bﻨﻔﱢﺫ
7
a ,” < ”, b ﺍﻜﺘﺏ
ﻭﺇﻻ
a ,” = ”, b ﺍﻜﺘﺏ
ﺇﻥ ﻤﺎ ﻜﺘﺒﻨﺎﻩ ﻫﻨﺎ ﻫﻭ ﺸﻜل ﻤﻬﻴﻜل ﻭ ﻤﺅﻁﺭ ﻟﻤﺎ ﺘﻔﻜﺭ ﺒﻪ ﺒﺸــــﻜل ﻁﺒﻴﻌﻲ :ﻓﺈﻤﺎ ﺍﻟﻌـﺩﺩ ﺍﻷﻭل
) (aﺃﻜﺒﺭ ﺍﻟﺜﺎﻨﻲ ) (bﻭﺇﻻ ﻓﻬﻭ ﺃﺼﻐﺭ ﻤﻨﻪ ﺃﻭ ﻴﺴﺎﻭﻴﻪ ،ﻓﺈﺫﺍ ﻜﺎﻥ ﺃﺼـﻐﺭ ﻜﺘﺒﻨﺎ ﺫﻟﻙ ﻭﺇﻻ ﻓﻬﻭ ﺤﺘﻤـﹰﺎ
ﻴﺴﺎﻭﻴﻪ.
ﻻ ﺤﻅ ﻫﻨﺎ ﺘﺩﺍﺨل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﻤﺴﺘﻭﻴﺎﺕ ﺃﻭ ﻫﻴﺎﻜل .ﻓﺎﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺘﻨﻔﺫ ﺩﺍﺨل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ
ﺍﻻﺨﺘﻴﺎﺭﻴﺔ ﻫﻲ ﺒﺩﻭﺭﻫﺎ ﺘﻌﻠﻴﻤﺔ ﺸﺭﻁﻴﺔ ،ﻭﻫﺫﻩ ﺒﺩﻭﺭﻫﺎ ﻴﻤﻜﻥ ﺃﻥ ﺘﺄﺨﺫ ﺃﻱ ﺘﻌﻠﻴﻤﺔ ﺒﻤﺎ ﻓﻴﻬﺎ ﺍﻟﺘﻌﻠﻴﻤـﺔ
ﺍﻟﺸﺭﻁﻴﺔ .ﺒﻬﺫﺍ ﻴﻤﻜﻨﻨﺎ ﺃﻥ ﻨﺒﺩﺃ ﺍﻹﺩﺭﺍﻙ ﺃﻥ ﻫﺫﻩ ﺍﻟﺒﻨﻰ ﺃﻭ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻷﺴﺎﺴﻴﺔ ﻴﻤﻜﻨﻬﺎ ﺃﻥ
ﺘﺠﻌﻠﻨﺎ ﻨﻌﺒﺭ ﻋﻥ ﺤﻠﻭﻟﻨﺎ )ﻤﻬﻤﺎ ﻜﺎﻨﺕ ﻤﺘﺸﻌﺒﺔ( ﺒﺘﻤﻴﻴﺯ ﺍﻟﺤﺎﻻﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻋﻠـﻰ ﻨﺤـﻭ ﻤﻬﻴﻜـل ﻭ
ﻤﺅﻁﺭ.
ﺘﻨﻭﻴﻪ ﻫﺎﻡ:
ﺘﺴﻤﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺃﻴﻀﺎﹸ ،ﺒﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻔﺭﻴﻊ .ﻷﻥ ﻤﺴﺎﺭ ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﺘﻔﺭﻉ ﻋﻨﺩﻫﺎ
ﺇﻟﻰ ﺍﻻﺨﺘﻴﺎﺭ ﺒﻴﻥ ﻤﺴﺎﺭﻴﻥ ﻭﻓﻘﹸﺎ ﻟﺸﺭﻁ.
-5ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻜﺭﺍﺭﻴﺔ
ﺘﺴﺘﻌﻤل ﻟﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ،ﻴﺭﺘﺒﻁ ﻫﺫﺍ ﺍﻟﺘﻜﺭﺍﺭ ﺒﺘﺤﻘﻕ ﺸﺭﻁ ،ﺇﺫ ﻴﺨﺘﺒﺭ ﺍﻟـﺸﺭﻁ
ﻓﺈﻥ ﻜﺎﻥ ﺍﻟﺸﺭﻁ ﻤﺤﻘﻘﹰﺎ )ﺼﺤﻴﺤﹰﺎ( ﺘﻨﻔﺫ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ
ﻭﻴﻜﺭﺭ ﺘﻨﻔﻴﺫ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﺎﺩﺍﻡ ﺍﻟﺸﺭﻁ ﻤﺤﻘﻘﹰﺎ.
ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ:
ﻨﻌﻁﻲ ﺸﻜ ﹰ
ﺻﺢ
ﺷﺮط
ﻤﺎﺩﺍﻡ ) ﺸﺭﻁ( ﻜﺭﺭ
ﺧﻄﺄ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ
ﻣﺠﻤﻮﻋﺔ ﺗﻌﻠﻴﻤﺎت
ﺘﺴﻤﻰ ﻫـﺫﻩ ﺍﻟﺘﻌﻠﻴﻤـﺔ
،controlﺒﺎﻟﺤﻠﻘـﺔ structure ﺃﻴﻀﺎﹰ ،ﻤﻥ ﺒﻴﻥ ﺒﻨﻰ ﺍﻟﺘﺤﻜﻡ
ﺍﻟﺘﻜﺭﺍﺭﻴﺔ .ﺇﺫ ﺃﻨﻪ ﻓﻲ ﺤﺎل ﺘﺤﻘﻕ ﺍﻟﺸﺭﻁ ﺘﻨﻔﺫ ﻤﺠﻤﻭﻋـﺔ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ،ﻟﻴﻌﻭﺩ ﺍﻟﺘﻨﻔﻴﺫ ﺇﻟﻰ ﺍﺨﺘﺒﺎﺭ ﺍﻟﺸﺭﻁ ﻤﻥ ﺠﺩﻴﺩ ،ﻟﺘﻨﻔﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻤﻥ ﺠﺩﻴـﺩ ﻤـﺎﺩﺍﻡ ﺍﻟـﺸﺭﻁ
ﻤﺤﻘﻘﹰﺎ .ﻭﺘﺒﻘﻰ ﻫﺫﻩ ﺍﻟﺤﻠﻘﺔ ﺃﻭ ﺍﻟﺘﻜﺭﺍﺭ ﻤﺴﺘﻤﺭﹰﺍ ﻓﻲ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﺨﺘﺒﺎﺭ ﺍﻟﺸﺭﻁ ،ﺤﺘـﻰ
ﻴﺼﺒﺢ ﺍﻟﺸﺭﻁ ﻏﻴﺭ ﻤﺤﻘﻕ ،ﻋﻨﺩﻫﺎ ﻴﻨﺘﻘل ﺍﻟﺘﻨﻔﻴﺫ ،ﺇﻟﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻜﺭﺍﺭ.
8
ﻤﺜﺎل:1
ﻜﺘﺎﺒﺔ ﺠﺩﻭل ﺍﻟﻀﺭﺏ ﻟﻠﻌﺩﺩ .7
ﺍﻟﻔﻜﺭﺓ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ،ﻫﻲ ﻤﺎ ﺘﻘﻭﻡ ﺒﻪ ﻓﻌﻠﻴﹰﺎ ﺒﻴﺩﻙ .ﺘﻜﺭﺍﺭ ﻜﺘﺎﺒﺔ ﺃﺴﻁﺭ ﻤﻥ ﺍﻟﺸﻜل:
7 x1=7
7 x2=14
.............
7 x 10 = 70
ﻭﺘﺘﺯﺍﻴﺩ ﻟﺘﺘﻭﻗﻑ ﻋﻨﺩ ﺍﻟﻘﻴﻤﺔ .10 1 ﺘﺒﺩﺃ ﺒﺎﻟﻘﻴﻤﺔ i ﺤﻴﺙ 7 x i = 7*i ﺃﻱ ﺘﻜﺭﺍﺭ ﻜﺘﺎﺒﺔ:
ﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺤل
iÅ1
( ﻜﺭﺭ i ≤ 10 ﻤﺎﺩﺍﻡ )
i Å i +1
ﻤﺜﺎل:2
ﺘﹸﻌﻁﻰ ﻜﺩﺨل. M ﺤﻴﺙ 1, 2, 3,...M ﺍﻟﻤﻁﻠﻭﺏ ﺤﺴﺎﺏ ﻤﺠﻤﻭﻉ ﺍﻷﻋﺩﺍﺩ
ﺍﻵﻥ ﻭﻗﺩ ﺍﻜﺘﻤﻠﺕ ﻟﺩﻴﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻷﺴﺎﺴﻴﺔ ،ﻭﻗﺩ ﺍﺩﻋﻴﻨﺎ ﺃﻨﻬﺎ ﻜﺎﻓﻴﺔ ﻟﻨﻌﺒﺭ ﻋﻥ ﺤـل ﺃﻱ
ﻤﺴﺄﻟﺔ ،ﻟﻨﺒﺩﺃ ﺍﻟﺘﻔﻜﻴﺭ ﺒﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺤل ﺒﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ.
ﺍﻟﻤﻬﻡ ﺃﻥ ﻨﺒﺩﺃ ﺒﺘﻭﺼﻴﻑ ﺍﻟﻤﺴﺄﻟﺔ ﺠﻴﺩﺍﹰ ،ﻭﻴﻜﻭﻥ ﺫﻟﻙ ﺒﺘﺤﺩﻴﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﻨﺘﺎﺌﺞ ﺒﺸﻜل ﺩﻗﻴﻕ ،ﻭﻴﻜﻭﻥ
ﻻ ﺇﻟﻰ ﺍﻟﻨﺘﺎﺌﺞ.
ﺍﻟﺤل )ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ( ﺒﻤﺤﺎﻭﻟﺔ ﺒﻨﺎﺀ ﺍﻟﺨﻁﻭﺍﺕ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺼﻭ ﹰ
9
ﺇﻥ ﺍﻟﺤل ﺒﺩﻴﻬﻲ ﻫﻨﺎ ،ﻤﺎ ﻫﻲ ﺇﻻ ﺘﻌﻠﻴﻤﺔ ﺇﺴﻨﺎﺩ ﻭﺃﺤﺼل ﻋﻠﻰ ﺍﻟﻤﻁﻠﻭﺏ ،ﺃﻱ:
M ﺍﻗﺭﺃ
S Å 1+2+3+...M
S ﺍﻜﺘﺏ
ﻤﺎ ﺭﺃﻴﻙ!!! ﺒﺎﻟﻁﺒﻊ ﻟﻥ ﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﺤل ﻤﻘﺒﻭل ﺨﻭﺍﺭﺯﻤﻴﹰﺎ ﻷﻨﻪ ﻟـﻥ ﻴﻜـﻭﻥ ﻤﻘﺒـﻭل ﺒﺭﻤﺠﻴـﹰﺎ ﻭﻻ
ﺤﺎﺴﻭﺒﻴﹰﺎ .ﻻ ﻴﻤﻜﻥ ﺃﻥ ﺘﻜﻭﻥ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ ﻤﻘﺒﻭﻟﺔ ﺒﻬﺫﺍ ﺍﻟﺸﻜل :ﺃﻴﺔ ﺼﻴﻐﺔ ﺭﻴﺎﻀﻴﺔ ﻫﺫﻩ ﺍﻟﻤﻜﺘﻭﺒـﺔ
ﺒـ !....+Mﻫﺫﺍ ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﺒﺭ ﻋﻥ ﻓﻜﺭﺓ ﻤﻔﻬﻭﻤﺔ ﻟﻨﺎ ،ﻭﻟﻜﻨﻪ ﻏﻴﺭ ﻗﺎﺒل ﻟﻠﺤﺴﺎﺏ.
ﺤﺘﻰ .M 3 ﺜﻡ 2 ﺜﻡ 1 ﻭﻟﻜﻥ ﻨﺘﺎﺒﻊ ﻨﻔﺱ ﺍﻟﻔﻜﺭﺓ ﺒﺄﺴﻠﻭﺏ ﻤﺨﺘﻠﻑ ﻗﻠﻴﻼﹰ ،ﻨﺠﻤﻊ ﺇﻟﻰ ﺍﻟﻤﺘﺤﻭل ﺍﻟﻘﻴﻤﺔ
....،ﺤﺘـﻰ .M 2 ،1 ﺤﻴﺙ ﺴﻴﻜﻭﻥ iﻫﻭ ﺍﻟﻤﺘﺤﻭل ﺍﻟﺫﻱ ﻴﺄﺨـﺫ SÅS+i ﻭﺠﺩﻨﺎ ﺒﺩﺍﻴﺔ ﺍﻟﻔﻜﺭﺓ:
ﻭﻟﻜﻥ ﻟﻡ ﻨﺘﺨﻠﺹ ﺒﻌﺩ ﻤﻥ ﻫﺫﻩ ﺍﻟﻨﻘﺎﻁ ﺍﻟﻠﻌﻴﻨﺔ .M,...,..
ﺇﻟـﻰ 1 ﻻ ﻟﻴﺴﺕ ﺒﻬﺫﻩ ﺍﻟﺼﻌﻭﺒﺔ ،ﺇﻨﻬﺎ ﻗﻴﻡ ﻤﺘﺤﻭل ﻋﺩﺍﺩ ﻴﺘﺯﺍﻴﺩ ﺒﺸﻜل ﺘﻜﺭﺍﺭﻱ ،ﻨﻜﺭﺭ ﺯﻴﺎﺩﺘﻪ ﺒﻘﻴﻤﺔ
(. i≤M ﺃﻥ ﻴﺼل ﺇﻟﻰ ﺍﻟﻘﻴﻤﺔ .Mﺃﻱ ﺸﺭﻁ ﺍﻟﺘﻜﺭﺍﺭ )
M ﺍﻗﺭﺃ
SÅ0
iÅ1
( ﻜﺭﺭ i≤M ﻤﺎﺩﺍﻡ )
SÅS+i
i Å i +1
S ﺍﻜﺘﺏ
ﻟﻨﺘﺄﻜﺩ ﻤﻥ ﺼﺤﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﻭﺫﻟﻙ ﺒﺎﺨﺘﺒﺎﺭﻫﺎ ﻴﺩﻭﻴﹰﺎ ﻤﻥ ﺃﺠل ﻗﻴﻡ ﻤﺨﺘﻠﻔﺔ ﻟﻠﻤﺘﺤﻭل :M
M=1 ﺍﻟﺩﺨل:
M S i ﺘﻜﺭﺍﺭ ﺸﺭﻁ i ≤ M
1 0 1 0 ﺼﺢ
1 1 2 1 ﺨﻁﺄ
S=1 ﺍﻟﺨﺭﺝ ﺃﻭ ﺍﻟﻨﺘﻴﺠﺔ:
M=3 ﺍﻟﺩﺨل:
M S i ﺘﻜﺭﺍﺭ ﺸﺭﻁ i ≤ M
3 0 1 0 ﺼﺢ
3 1 2 1 ﺼﺢ
3 3 3 2 ﺼﺢ
3 6 4 3 ﺨﻁﺄ
S=6 ﺍﻟﺨﺭﺝ ﺃﻭ ﺍﻟﻨﺘﻴﺠﺔ:
10
ﺇﻥ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺤل ﻟﻴﺴﺕ ﻭﺤﻴﺩﺓ ،ﺤﺘﻰ ﺇﻥ ﻜﺎﻨﺕ ﻓﻲ ﻓﻜﺭﺘﻬﺎ ﻭﺍﺤﺩﺓ ،ﻓﺎﻟﺩﻗﺔ ﻓـﻲ ﺍﻟﻘـﻴﻡ ﻭﺘﺭﺘﻴـﺏ
ﻻ ﻤﺨﺘﻠﻔﺔ.
ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻴﻤﻜﻥ ﺃﻥ ﻴﻌﻁﻴﻨﺎ ﺤﻠﻭ ﹰ
M ﺍﻗﺭﺃ
SÅ1
iÅ1
( ﻜﺭﺭ i<M ﻤﺎﺩﺍﻡ )
i Å i +1
SÅS+i
S ﺍﻜﺘﺏ
ﻭﻗﺩ ﺃﺸﺭﻨﺎ ﺇﻟﻰ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ﻋﻥ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺴﺎﺒﻘﺔ.
ﺃﻜﺒﺭ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺒﺭﻤﺠﻴﺔ ،ﻨﺩﺨل ﺒﺤﻠﻘﺔ ﻻﻨﻬﺎﺌﻴﺔ ،ﺃﻱ ﻴﺴﺘﻤﺭ ﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺒـﻼ
ﺘﻭﻗﻑ.ﻨﻨﺘﺒﻪ ﺇﻟﻰ ﻤﺜل ﻫﺫﺍ ﺍﻟﺨﻁﺄ ﺇﻥ ﻟﻡ ﺘﻜﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺘﺤﻤل ﻓﻲ ﻁﻴﺎﺘﻬﺎ ﺃﻱ ﺘﻌﺩﻴل ﻋﻠـﻰ
ﺃﻱ ﻤﻥ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﻀﻤﻨﺔ ﺒﺎﻟﺸﺭﻁ ﻓﻬﻨﺎﻙ ﺤﺘﻤﹰﺎ ﺤﻠﻘﺔ ﻻ ﻨﻬﺎﺌﻴﺔ.
M ﺍﻗﺭﺃ
SÅ0
iÅ1
( ﻜﺭﺭ i≤M ﻤﺎﺩﺍﻡ )
S←S+i
i ← i +1
S ﺍﻜﺘﺏ
11
ﻻﺤﻅ ﻤﺎ ﺍﻟﺫﻱ ﻴﺤﺼل ﻟﻭ ﻨﺴﻴﻨﺎ ﺘﻌﻠﻴﻤﺔ ﺘﻐﻴﻴﺭ ﺍﻟﻤﺘﺤﻭل iﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ:
M=1 ﺍﻟﺩﺨل:
M S i ﺘﻜﺭﺍﺭ i≤M ﺸﺭﻁ
1 0 1 0 ﺼﺢ
1 1 1 1 ﺼﺢ
1 2 1 2 ﺼﺢ
1 3 1 3 ﺼﺢ
1 … 1 … ﺼﺢ
1 1 ﺼﺢ
1 1 ﺼﺢ
1 ﻻﻧﻬﺎﻳﺔ )أﻋﻠﻰ ﻗﻴﻤﺔ ﻣﻤﻜﻨﺔ ﺣﺎﺳﻮﺑﻴًﺎ( 1 ﺼﺢ
ﻫﺫﺍ ﻤﺎ ﻨﺴﻤﻴﻪ ﺤﻠﻘﺔ ﺘﻜﺭﺍﺭ ﻻﻨﻬﺎﺌﻴﺔ.
M ﺍﻗﺭﺃ
SÅ0
iÅ1
S ﺍﻜﺘﺏ
ﺃﻤﺜﻠﺔ ﻋﺎﻤﺔ
ﻤﺜﺎل :1ﺤﺴﺎﺏ ﺍﻟﻘﺎﺴﻡ ﺍﻟﻤﺸﺘﺭﻙ ﺍﻷﻋﻅﻡ ﻟﻌﺩﺩﻴﻥ ﺼﺤﻴﺤﻴﻥ ﻤﻭﺠﺒﻴﻥ.
ﺍﻟﻘﺎﺴﻡ ﺍﻟﻤﺸﺘﺭﻙ ﺍﻷﻋﻅﻡ ﻟﻌﺩﺩﻴﻥ ﺼﺤﻴﺤﻴﻥ ﻫﻭ ﺃﻜﺒﺭ ﻋﺩﺩ ﺼﺤﻴﺢ ﻴﻤﻜﻥ ﻨﻘﺴﻡ ﻋﻠﻴﻪ ﺍﻟﻌﺩﺩﻴﻥ )ﺩﻭﻥ
ﺒﺎﻗﻲ ﻁﺒﻌﹰﺎ(.
ﻫﻭ ..... .1 3 ،10 ﻫﻭ .15ﻟﻠﻌﺩﺩﻴﻥ: 45 ،75 ﻫﻭ .4ﻟﻠﻌﺩﺩﻴﻥ: 16 ،12 ﻟﻠﻌﺩﺩﻴﻥ:
ﺨﻭﺍﺭﺯﻤﻴﺔ ﺇﻗﻠﻴﺩﺱ :ﺨﻭﺍﺭﺯﻤﻴﺔ ﺭﺍﺌﻌﺔ ﻻ ﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺃﻴﺔ ﻋﻤﻠﻴﺎﺕ ﻗﺴﻤﺔ ﺃﻭ ﻀﺭﺏ.
ﻭﻫﻲ ﻜﺎﻟﺘﺎﻟﻲ ،ﻨﻁﺭﺤﺎﻟﻌﺩﺩ ﺍﻷﺼﻐﺭ ﻤﻥ ﺍﻟﻌﺩﺩ ﺍﻷﻜﺒﺭ ﻭﻨﻀﻌﻪ ﻤﻜﺎﻨﻪ ،ﻨﻜﺭﺭ ﺫﻟﻙ ﺤﺘـﻰ ﻴﺘـﺴﺎﻭﻯ
75, 45 ﺍﻟﻌﺩﺩﺍﻥ .ﻟﻨﻁﺒﻕ ﺫﻟﻙ ﻋﻠﻰ ﺍﻟﻌﺩﺩﻴﻥ
A B
75 45
30 45
30 15
15 15
12
ﻟﻨﻌﺒﺭ ﻋﻥ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺇﻗﻠﻴﺩﺱ ﺒﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ:
ﻨﻁﺭﺡ ﺍﻟﻌﺩﺩ ﺍﻷﺼﻐﺭ ﻤﻥ ﺍﻟﻌﺩﺩ ﺍﻷﻜﺒﺭ ﻭﻨﻀﻌﻪ ﻤﻜﺎﻨﻪ ،ﻨﻜﺭﺭ ﺫﻟﻙ ﺤﺘﻰ ﻴﺘﺴﺎﻭﻯ ﺍﻟﻌﺩﺩﺍﻥ.
ﺍﻟﻘﺎﺴﻡ ﺍﻟﻤﺸﺘﺭﻙ ﺍﻷﻋﻅﻡ. g ﺍﻟﻨﺘﻴﺠﺔ: ﻋﺩﺩﺍﻥ ﺼﺤﻴﺤﺎﻥ ﻤﻭﺠﺒﺎﻥ. a, b ﺍﻟﺩﺨل:
ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ:
a, b ﺍﻗﺭﺃ
gÅa
g ﺍﻜﺘﺏ
ﺇﻨﻬﺎ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺭﺍﺌﻌﺔ ﻭﺒﺴﻴﻁﺔ ،ﻭﺍﺴﺘﺨﺩﻤﻨﺎ ﻓﻴﻬﺎ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻷﺴﺎﺴـﻴﺔ )ﺩﺨـل،
ﺨﺭﺝ ،ﺇﺴﻨﺎﺩ ،ﺘﻌﻠﻴﻤﺔ ﺸﺭﻁﻴﺔ ،ﺘﻌﻠﻴﻤﺔ ﺘﻜﺭﺍﺭﻴﺔ(.
ﺒﺎﻟﺘﻌﻠﻴﻤﺔ g Å b؟ gÅa ﺴﺅﺍل :ﻫل ﺘﺘﻐﻴﺭ ﺍﻟﻨﺘﻴﺠﺔ ﺇﺫﺍ ﻏﻴﺭﻨﺎ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ
ﻻ ﺘﻐﻴﻴﺭ ،ﻷﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺘﻠﻲ ﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻜﺭﺍﺭ ،ﺍﻟﺘﻲ ﻻ ﻨﻨﺘﻘل ﺇﻟﻰ ﻤﺎ ﺒﻌﺩﻫﺎ ﺇﻻ ﺒﻌﺩ ﻋـﺩﻡ ﺘﺤﻘـﻕ
ﻤﺘﺴﺎﻭﻴﺘﺎﻥ b ﻭ a ( .ﻭﺒﺎﻟﺘﺎﻟﻲ ﻋﻨﺩ ﻭﺼﻭﻟﻨﺎ ﺇﻟﻰ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ ،ﺘﻜﻭﻥ ﻗﻴﻤﺔ b ﺍﻟﺸﺭﻁ ) aﻻ ﺘﺴﺎﻭﻱ
ﺒﺎﻟﻀﺭﻭﺭﺓ.
13
ﻴﺘﻠﻤﺱ ﻭﻴﺘﺨﻴل ﺍﻟﻤﺴﺄﻟﺔ ﻭﺍﺭﺴﻡ ﻭﺸﻁﺏ ﻋﻠﻰ ﻤﺴﻭﺩﺘﻙ ﻭﺍﻟﻤﻬﻡ ﺠﺩﹰﺍ ﺃﻥ ﺘﻜﻭﻥ ﻗﺎﺩﺭﹰﺍ ﻋﻠﻰ ﺤل ﺍﻟﻤﺴﺄﻟﺔ
ﻴﺩﻭﻴﹰﺎ )ﻓﻲ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺒﺴﻴﻁﺔ( ،ﺘﺫﻜﺭ ﻟﻥ ﻴﻘﺩﻡ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺤل .ﻨﺅﻜﺩ ﻟﻙ ﺃﻥ ﺘﻔﻜﻴﺭﻙ ﺍﻟﻌﺎﺩﻱ ﻟﻠﺤـل
ﻴﻤﻜﻥ ﺒﺠﻬﺩ ﻗﻠﻴل ﺼﻴﺎﻏﺘﻪ ﺒﻠﻐﺔ ﺨﻭﺍﺭﺯﻤﻴﺔ ،ﺴﻴﻤﻜﻥ ﻓﻴﻤﺎ ﺒﻌﺩ ﻨﻘﻠﻬﺎ ﺒﺠﻬﺩ ﻗﻠﻴل ﺃﻴﻀﹰﺎ ﺇﻟﻰ ﺃﻴـﺔ ﻟﻐـﺔ
ﺒﺭﻤﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ.
ﻓﻔﻲ ﻤﺴﺄﻟﺘﻨﺎ ﻫﻨﺎ ،ﺘﺨﻴل ﺃﻨﻙ ﺘﺭﻴﺩ ﻤﻌﺭﻓﺔ ﺍﻟﺸﺨﺹ ﺍﻷﻁﻭل ﺒﻴﻥ ﻤﺠﻤﻭﻋﺔ ﺃﺸﺨﺎﺹ ﻴـﺭﺩﻭﻥ ﺇﻟـﻰ
ﻏﺭﻓﺘﻙ ﺒﺎﻟﺘﺘﺎﻟﻲ ،ﻭ ﺒﺎﻟﻁﺒﻊ ﻻ ﻴﻤﻜﻥ ﻟﻐﺭﻓﺘﻙ ﺃﻥ ﺘﺴﺘﻭﻋﺏ ﺇﻻ ﻋﺩﺩًﹰﺍ ﻤﺤﺩﺩﻭ ﺠﺩﹰﺍ ﻤﻥ ﺍﻟﻤﺠﻤﻭﻋﺔ ،ﺃﻱ
ﻻ ﺘﺴﺘﻁﻴﻊ ﺍﻟﻨﻅﺭ ﺇﻟﻴﻬﻡ ﺠﻤﻴﻌﹰﺎ ﻟﺘﻘﻭل ﺒﻨﻅﺭﺓ ﺨﺎﻁﻔﺔ ﻫﺫﺍ ﻫﻭ ﺍﻷﻁﻭل.
ﺍﻟﺤل ﻫﻭ ﻜﺎﻟﺘﺎﻟﻲ ،ﺘﺩﺨل ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ،ﺘﻌﺘﺒﺭﻩ ﺍﻷﻁﻭل ﺇﻟﻰ ﺃﻥ ﻴﺜﺒﺕ ﺍﻟﻌﻜﺱ ،ﺃﻱ ﺘﻜﺭﺭ
ﺇﺩﺨﺎل ﺍﻟﻌﻨﺎﺼﺭ ،ﺘﻘﺎﺭﻥ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺩﺨل ﻤﻊ ﻤﻥ ﺍﻋﺘﺒﺭﺘﻪ ﺍﻷﻁﻭل ﻓﺈﻥ ﻜﺎﻥ ﺃﻁﻭل ﻤﻨﻪ
ﺘﺠﻌﻠﻪ ﻴﺤل ﻤﻜﺎﻨﻪ ،ﻭﻫﻜﺫﺍ ﺤﺘﻰ ﻨﻬﺎﻴﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ.
ﺇﻨﻬﺎ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ،ﻭﻤﺎ ﻋﻠﻴﻨﺎ ﺇﻻ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻤﺎ ﻜﺘﺒﻨﺎﻩ ﺒﺨﻁﻭﺍﺕ ﻤﺤﺩﺩﺓ ،ﻭﺒﻬﻴﻜﻠﻴﺔ ﻭﺍﻀﺤﺔ ﻭﺩﻗﻴﻘـﺔ ﻻ
ﻟﺒﺱ ﻓﻴﻬﺎ ،ﺒﻌﺩ ﺃﻥ ﻨﺤﺩﺩ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﻌﺒﺭﺓ ﻋﻤﺎ ﻨﻌﺎﻟﺠﻪ.
ﺘﺩﺨل ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل ،ﺘﻌﺘﺒﺭﻩ ﺍﻷﻁﻭل ﺇﻟﻰ ﺃﻥ ﻴﺜﺒﺕ ﺍﻟﻌﻜﺱ ،ﺃﻱ ﺘﻜﺭﺭ ﺇﺩﺨﺎل ﺍﻟﻌﻨﺎﺼـﺭ ،ﺘﻘـﺎﺭﻥ
ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺩﺨل ﻤﻊ ﻤﻥ ﺍﻋﺘﺒﺭﺘﻪ ﺍﻷﻁﻭل ﻓﺈﻥ ﻜﺎﻥ ﺃﻁﻭل ﻤﻨﻪ ﺘﺠﻌﻠﻪ ﻴﺤل ﻤﻜﺎﻨﻪ ،ﻭﻫﻜﺫﺍ ﺤﺘﻰ ﻨﻬﺎﻴﺔ
ﺍﻟﻤﺠﻤﻭﻋﺔ.
ﻫﻭ ﺍﻟﻤﺘﺤﻭل ﺍﻟﺫﻱ ﻨﺤﺘﻔﻅ ﻓﻴﻪ ﺒﺎﻟﻌﻨﺼﺭ ﺍﻷﻜﺒﺭ. kmax ﻫﻭ ﻋﻨﺼﺭ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﻤﺩﺨل ،ﻭ k ﻟﻴﻜﻥ
ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ:
ﻼ ﻟﻨﻬﺎﻳﺔ اﻟﻤﺠﻤﻮﻋﺔ
اﺳﺘﺨﺪﻣﻨﺎ اﻟﻌﺪد 999دﻟﻴ ً
k ﺍﻗﺭﺃ
kmax Å k
14
ﺘﺩﺭﻴﺏ :ﺍﺨﺘﺒﺭ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﻴﺩﻭﻴﹸﺎ ﻓﻲ ﺤﺎﻻﺕ ﻤﺠﻤﻭﻋﺎﺕ ﻤﺨﺘﻠﻔﺔ) .ﻻ ﺘﻨﺱ ﺍﺨﺘﺒﺎﺭ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺤﺩﻴﺔ:
ﺤﺎﻟﺔ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﻋﻨﺼﺭ ﻭﺍﺤﺩ ،ﻭ ﺤﺎﻟﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﺨﺎﻟﻴﺔ ﺤﻴﺙ ﺍﻟﺩﺨل ﻫﻨﺎ ﻴﻘﺘﺼﺭ ﻓﻘـﻁ ﻋﻠـﻰ
ﻨﻬﺎﻴﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺃﻱ.(999
15
ﻋﻨﺩ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﺩﻨﻰ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ ﻨﻜﻭﻥ ﻗﺩ ﺤﺼﻠﻨﺎ ﻋﻠﻰ ﺨﻭﺍﺭﺯﻤﻴﺔ ﻜﺎﻤﻠﺔ ﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ ﺨﻭﺍﺭﺯﻤﻴـﺔ -3
ﺇﻥ ﻫﺫﺍ ﺍﻹﻁﺎﺭ ﺍﻟﻌﺎﻡ ﻫﺎﻡ ﺠﺩﹰﺍ ﻭﻫﻭ ﺍﻷﺴﺎﺱ ﻟﻜل ﺍﻟﺒﺭﻤﺠﺔ .ﻭﻟﻜﻨﻙ ﺘﻘﻭل ﻟﻲ ﻓﻬﻤﺘﻪ ﻭﺍﻨﺘﻬﻰ ﺍﻷﻤﺭ!
ﺃﻭ ﹰﻻ :ﻴﺠﺏ ﺃﻥ ﺘﻤﺎﺭﺴﻪ ﻋﻠﻰ ﻨﺤ ٍﻭ ﻤﺴﺘﻤﺭ ،ﻋﺒﺭ ﺤل ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﺌل ﺍﻟﺘﻲ ﺘﺒﺭﻤﺠﻬﺎ ،ﺤﺘﻰ ﺒﻌﺩ ﺘﻌﻠﻤﻙ
ﻟﻠﻐﺎﺕ ﺒﺭﻤﺠﺔ ﻓﻌﻠﻴﺔ ،ﻟﻴﺘﺭﺴﺦ ﻭﻴﺼﺒﺢ ﺠﺯﺀﹰﺍ ﻤﻥ ﺸﺨﺼﻴﺘﻙ ﺍﻟﺒﺭﻤﺠﻴﺔ.
ﺜﺎﻨﻴ ﹰﺎ :ﻟﻨﺭﻯ ﻫل ﺃﺩﺭﻜﻨﺎ ﺒﺩﻗﺔ ﻫﺫﻩ ﺍﻟﻤﻔﺎﻫﻴﻡ ،ﺘﻤﻌﻥ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺓ "ﻋﻨﺩ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﺩﻨﻰ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ"،
ﻤﺎ ﻫﻲ ﺃﺩﻨﻰ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ؟ ﻭﻋﻥ ﺃﻱ ﻤﺴﺘﻭﻴﺎﺕ ﻨﺘﺤﺩﺙ...؟ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ ﻓﻲ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴـﺎﺕ...ﺃﻡ
ﻓﻲ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻤﻌﻴﻨﺔ...؟
ﺇﻥ ﺍﻟﻬﺩﻑ ﺍﻟﻨﻬﺎﺌﻲ ﻫﻭ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺒﺭﻤﺠﺔ ﻴﻘﻭﻡ ﺍﻟﺤﺎﺴﻭﺏ ﺒﺘﻨﻔﻴﺫﻩ ﻟﺘﺤﻘﻴﻕ ﺍﻟﻭﻅﺎﺌﻑ ﺍﻟﻤﻁﻠﻭﺒﺔ
ﻓﻲ ﺍﻟﻤﺴﺄﻟﺔ ﺍﻟﺘﻲ ﻨﺒﺭﻤﺠﻬﺎ .ﻭﻗﺩ ﺍﺨﺘﺭﻨﺎ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ ،ﻭ ﺘﺭﻜﻴﺯﻨﺎ ﺴﻴﻜﻭﻥ ﻋﻠﻰ ﺘﻠﻙ
ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺘﺤﻘﻕ ﻟﻨﺎ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ .ﻭﻟﻜﻥ ﻫﺫﻩ ﺍﻟﻠﻐﺎﺕ ﺘﺨﺘﻠﻑ ﻓﻲ ﻤﺴﺘﻭﻯ )ﻏﻨﻰ( ﺍﻟﻭﻅـﺎﺌﻑ
ﺍﻟﺫﻱ ﺘﻘﺩﻤﻪ .ﻭﻤﻌﺭﻓﺘﻨﺎ ﺒﺎﻟﻭﻅﺎﺌﻑ ﺍﻟﺘﻲ ﺘﻘﺩﻤﻬﺎ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺍﻟﺒﺭﻤﺠﺔ ﻴﺤﺩﺩ ﻟﻨـﺎ ﺍﻟﻤـﺴﺘﻭﻯ
ﺍﻷﺩﻨﻰ ﻟﻠﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ ﺍﻟﺫﻱ ﻨﺴﻌﻰ ﺇﻟﻴﻪ.
16
ﻟﻘﺩ ﻋﺒﺭﻨﺎ ﻋﻥ ﺍﻟﺤل ﺒﻁﺭﻴﻘﺔ ﻁﺒﻴﻌﻴﺔ ﺒﻠﻐﺔ ﺨﻭﺍﺭﺯﻤﻴﺔ .ﻭﻟﻜﻥ ﻤﺎ ﻫﻭ ﺨﺎﺭﺝ ﻤﺎ ﻋﺭﻓﻨﺎﻩ ﻫﻭ ﻓﻲ ﺘﻌﻠﻴﻤﺔ
rÅ( d ﻋﻠﻰ m )ﺒﺎﻗﻲ ﻗﺴﻤﺔ ﺍﻹﺴﻨﺎﺩ:
ﻓﻘﺩ ﻴﻜﻭﻥ ﺤﺴﺎﺏ ﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﻤﺘﺎﺡ ﻜﻌﻤﻠﻴﺔ ﺃﺴﺎﺴﻴﺔ ،ﻤﺜل ﺍﻟﺠﻤﻊ ﻭﺍﻟﻁﺭﺡ ،ﻭﺒﺎﻟﺘﺎﻟﻲ ﻨﻜﻭﻥ ﻗﺩ ﻭﺼﻠﻨﺎ
m : pascal ﺇﻟﻰ ﺃﺩﻨﻰ ﻤﺴﺘﻭﻯ .ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻫﺫﻩ ﺍﻟﻌﻤﻠﻴﺔ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﻤﻌﻅﻡ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ :ﻓـﻲ
.m % d : Java ﻭ C ،ﻭﻓﻲ mod d
ﻭﻟﻜﻥ ﻤﺎﺫﺍ ﺴﻨﻔﻌل ﺇﻥ ﻟﻡ ﻴﻜﻥ ﻟﺩﻴﻨﺎ ﻋﻤﻠﻴﺔ ﺍﻟﺒﺎﻗﻲ؟ ﻫﻨﺎ ﺍﻟﻤﻘﺼﻭﺩ ﺒﺎﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ ﺇﻟﻰ ﺃﺩﻨﻰ ﻤﺴﺘﻭﻯ.
ﻨﺼﺒﺢ ﺃﻤﺎﻡ ﻤﺴﺄﻟﺔ ﺠﺯﺌﻴﺔ ﻗﺎﺌﻤﺔ ﺒﺫﺍﺘﻬﺎ ﻫﻲ ﺤﺴﺎﺏ ﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ.
r ﻭﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ n ﻋﻠﻰ ،dﻨﺎﺘﺞ ﺍﻟﻘﺴﻤﺔ m ﻭﻫﺫﻩ ﻫﻲ ﺨﻭﺍﺭﺯﻤﻴﺔ ﻗﺴﻤﺔ ﺍﻟﻌﺩﺩ
nÅ0
ﺃﻜﺒﺭ ﺃﻭ ﻴﺴﺎﻭﻱ (dﻜﺭﺭ r ﻤﺎﺩﺍﻡ )
r Å r -d
nÅn+1
ﻭﻫﻨﺎ ﻨﺩﺭﻙ ﻓﻜﺭﺓ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ ،ﺒﻭﻀﻊ ﻜﺘﻠﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﻤﻜﺎﻥ ﻋﻤﻠﻴﺔ ﺍﻹﺴﻨﺎﺩ.
m ﺍﻗﺭﺃ
dÅ1
dÅd+1
r ﺸﺭﺡ ﺘﻔﺼﻴﻠﻲ ﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﻗﺴﻤﺔ ﺍﻟﻌﺩﺩ mﻋﻠﻰ ،dﻨﺎﺘﺞ ﺍﻟﻘﺴﻤﺔ nﻭﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ
d ﺍﻟﻌﺩﺩ ﺍﻟﻘﺎﺴﻡ )ﺍﻟﻤﻘﺴﻭﻡ ﻋﻠﻴﻪ(: m ﺍﻟﻌﺩﺩ ﺍﻟﻤﻘﺴﻭﻡ:
r ﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ: n ﺤﺎﺼل ﺍﻟﻘﺴﻤﺔ:
m = n*d + r ﺍﻟﻌﻼﻗﺔ ﺍﻟﺭﻴﺎﻀﻴﺔ:
17
ﻤﺜﺎل:
30 24 m ﺍﻟﻌﺩﺩ ﺍﻟﻤﻘﺴﻭﻡ:
5 7 d ﺍﻟﻌﺩﺩ ﺍﻟﻤﻘﺴﻭﻡ ﻋﻠﻴﻪ:
6 3 n ﺤﺎﺼل ﺍﻟﻘﺴﻤﺔ:
0 3 r ﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ:
30 = 6 x 5 + 0 24 = 3 x 7 + 3 m = n*d + r ﺍﻟﻌﻼﻗﺔ ﺍﻟﺭﻴﺎﻀﻴﺔ:
ﺍﻗﺘﺼﺭﺕ ﺃﻤﺜﻠﺘﻨﺎ ﻋﻠﻰ ﻨﻤﻁ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﻤﺘﺤﻭﻻﺕ ﻫﻭ ﻨﻤﻁ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ،ﻻ ﻴﺘﻐﻴﺭ ﺸﻲﺀ ﻋﻠـﻰ
ﻤﺴﺘﻭﻯ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺤل ﻤﻊ ﻤﺘﺤﻭﻻﺕ ﻤﻥ ﻨﻤﻁ ﺃﻋﺩﺍﺩ ﺤﻘﻴﻘﻴﺔ ،ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻤﻌﻁﻴـﺎﺕ ﺍﻟﻤـﺴﺄﻟﺔ
ﻭﺤﻠﻬﺎ ﻴﺘﻁﻠﺏ ﺫﻟﻙ .ﻭﺇﻟﻴﻙ ﻤﺴﺄﻟﺔ ﻨﻤﻭﺫﺠﻴﺔ ﻭﻤﺄﻟﻭﻓﺔ ﺤﺴﺎﺒﻴﹰﺎ ﻟﺩﻴﻙ.
ﺃﻋﺩﺍﺩ ﺤﻘﻴﻘﻴﺔ ) aﻻ ﺘﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ(. a, b, c ﺍﻟﻤﻌﻁﻴﺎﺕ :ﺃﻤﺜﺎل ﺍﻟﻤﻌﺎﺩﻟﺔ
ﺍﻟﺤﻘﻴﻘﻴﺔ ﺍﻟﺘﻲ ﺘﺤﻘﻕ ﺍﻟﻤﻌﺎﺩﻟﺔ. x ﺍﻟﻨﺘﺎﺌﺞ ﺍﻟﻤﻁﻠﻭﺒﺔ :ﺍﻟﻘﻴﻡ
ﺍﻟﻁﺭﻴﻘﺔ:
ﻴﻜﻭﻥ ﺍﻟﺤل: delta ( .ﻭﺒﺤﺴﺏ ﻗﻴﻤﺔ ∆ )delta = b2 - 4*a*c ﻨﺤﺴﺏ ﻤﻌﻴﻥ ﺍﻟﻤﻌﺎﺩﻟﺔ
: ∆ > 0ﻴﻭﺠﺩ ﺠﺫﺭﺍﻥ ﺤﻘﻴﻘﻴﺎﻥ )(x1, x2
: ∆ = 0ﻴﻭﺠﺩ ﺠﺫﺭ ﺤﻘﻴﻘﻲ )(x0
: ∆ < 0ﻻ ﻴﻭﺠﺩ ﺤل ﺤﻘﻴﻘﻲ
18
ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ
2
)( a.x + b.x + c = 0
a, b, c ﺍﻗﺭﺃ rÅm
∆ Å b2 - 4*b*c
ﺍﻟﺨﻼﺼﺔ
ﻴﻌﺘﺒﺭ ﻫﺫﺍ ﺍﻟﻔﺼل ﻫﻭ ﺍﻷﺴﺎﺱ ﻟﺘﻌﻠﻡ ﻤﺒﺎﺩﺉ ﺍﻟﺒﺭﻤﺠﺔ ﺒﺸﻜل ﻗﻭﻱ ﻭﺭﺍﺴﺦ.
ﺘﻌﻠﻤﻨﺎ ﻓﻴﻪ ﺃﻨﻪ ﻴﻤﻜﻥ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺤل ﻟﻤﺴﺄﻟﺔ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ )ﺒﺭﻤﺠﺔ ﺍﻟﺤﺎﺴﻭﺏ( ﺒﻠﻐﺔ ﻁﺒﻴﻌﻴـﺔ
.pseudoﻋﺭﻓﻨﺎ ﻓﻴﻬﺎ ﺨﻤـﺱ ﺘﻌﻠﻴﻤـﺎﺕ code ﻭﻟﻜﻥ ﻤﺅﻁﺭﺓ ﻭﻤﻬﻴﻜﻠﺔ ﺃﺴﻤﻴﻨﺎﻫﺎ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ
ﺃﺴﺎﺴﻴﺔ ﻜﺎﻓﻴﺔ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻠﻰ ﻨﺤﻭ ﻻ ﻟﺒﺱ ﻓﻴﻪ ﻋﻥ ﻁﺭﻴﻘﺘﻨﺎ ﻟﻠﺤل )ﺨﻭﺍﺭﺯﻤﻴﺘﻨﺎ(.
ﻤﻨﻬﺠﻴﺘﻨﺎ ﻓﻲ ﺍﻟﺤل ﻫﻭ ﺍﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ ﻭﺍﻟﺘﻌﺒﻴﺭ ﻋﻨﻪ ﺒﺒﻨﻰ ﺘﺤﻜﻡ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ.
ﺒﺄﻨﻪ ﻤﻥ ﺍﻟﻤﻤﻜـﻥ ﻜﺘﺎﺒـﺔ ﺍﻟﺒـﺭﺍﻤﺞ Jacopini ﻭ Bohm ﻭﻗﺩ ﺒﺭﻫﻨﺕ ﺍﻷﺒﺤﺎﺙ ﺍﻟﺘﻲ ﻗﺎﻡ ﺒﻬﺎ ﻜل ﻤﻥ
)ﺍﻟﻤﺴﺎﺭ ﺍﻟﻌﺎﺩﻱ ﺃﻱ Sequence structure ﺒﺎﺴﺘﺨﺩﺍﻡ ﺜﻼﺜﺔ ﺒﻨﻰ ﻟﻠﺘﺤﻜﻡ ﻓﻘﻁ ﻭﻫﻲ :ﺍﻟﺒﻨﻴﺔ ﺍﻟﺘﺴﻠﺴﻠﻴﺔ
ﻭﺒﻨﻴﺔ ﺍﻟﺘﻜﺭﺍﺭ .repetition structure Selection structure ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ( ﻭﺒﻨﻴﺔ ﺍﻻﺨﺘﻴﺎﺭ
ﻤﻥ ﺒﻴﻥ ﺒﻨﻰ ﺍﻟﺘﺤﻜﻡ ﺍﻷﺴﺎﺴﻴﺔ. Goto ﻻﺤﻅ ﺃﻨﻪ ﻻ ﻭﺠﻭﺩ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺯ
ﻟﺘﺼﺒﺢ ﺒﺎﻟﺘـﺎﻟﻲ Goto ﺒﺭﻫﻨﺕ ﻫﺫﻩ ﺍﻷﺒﺤﺎﺙ ﺃﻨﻪ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺞ ﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺃﻴﺔ ﺘﻌﻠﻴﻤﺔ
ﻫﻲ ﺍﻟﺘﺤﺩﻱ ﺍﻟﺫﻱ ﻭﺍﺠﻪ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻓﻲ ﺃﺴﻠﻭﺏ Goto ﻋﻤﻠﻴﺔ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺎﺕ
ﻜﺘﺎﺒﺘﻬﻡ ﻟﺒﺭﺍﻤﺠﻬﻡ )ﺍﻟﺫﻴﻥ ﺍﻋﺘﺎﺩﻭﺍ ﻁﺭﻴﻘﺔ ﺍﻟﺘﻔﻜﻴﺭ ﻭﻓﻕ ﺁﻟﻴﺔ ﺘﻨﻔﻴﺫ ﺍﻟﺤﺎﺴﻭﺏ( .ﻭﻟﻜﻥ ﻟﻡ ﻴﺘﻡ ﺍﻟﺤـﺩﻴﺙ
ﻋﻥ ﺃﺴﻠﻭﺏ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ ﺒﺸﻜل ﺠﺩﻱ ﺇﻻ ﻓﻲ ﻓﺘﺭﺓ ﺍﻟﺴﺒﻌﻴﻨﺎﺕ .ﻭﻟﻘﺩ ﺃﻅﻬﺭ ﻫﺫﺍ ﺍﻷﺴﻠﻭﺏ ﻨﺘﺎﺌﺞ
19
ﺠﻴﺩﺓ ﺠﺩﺍ ً ،ﺤﻴﺙ ﻻﺤﻅﺕ ﻤﺠﻤﻭﻋﺎﺕ ﺘﻁﻭﻴﺭ ﺍﻟﺒﺭﺍﻤﺞ ﻭﺠﻭﺩ ﺇﻤﻜﺎﻨﻴـﺎﺕ ﻟﺨﻔـﺽ ﺯﻤـﻥ ﺘﻁـﻭﻴﺭ
ﺞ .ﻴﻌﻭﺩ ﺍﻟﻔﻀل ﻓﻲ ﺫﻟﻙ ﺇﻟﻰ ﻜﻭﻥ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤًﻬﻴﻜﻠﺔ ﺒـﺭﺍﻤﺞ ﻭﺍﻀـﺤﺔ ﻭﺴـﻬﻠﺔ ﺍﻟﻔﺤـﺹ
ﺍﻟﺒﺭﺍﻤ ً
ﻭﺍﻟﺘﻌﺩﻴل ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺘﺯﺍﻴﺩ ﺇﻤﻜﺎﻨﻴﺔ ﺨﻠﻭﻫﺎ ﻤﻥ ﺍﻟﻌﻴﻭﺏ ﺒﺎﻟﺩﺭﺠﺔ ﺍﻷﻭﻟﻰ.
ﺃﻭ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺼﻨﺩﻭﻗﻲ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺨﻭﺍﺭﺯﻤﻴـﺔ ،ﻭﻗـﺩ flowchart ﻴﺴﺘﺨﺩﻡ ﺃﻴﻀﹰﺎ ﻤﺨﻁﻁ ﺍﻟﺘﺩﻓﻕ
ﺃﺩﺭﺠﻨﺎ ﺸﻜﻠﻪ ﺍﻟﻌﺎﻡ .ﻭﻫﻭ ﺘﻤﺜﻴل ﺒﻴﺎﻨﻲ ﻟﻠﺨﻭﺍﺭﺯﻤﻴﺔ ﺃﻭ ﻟﺠﺯﺀ ﻤﻨﻬﺎ ﻭﻴﺭﺴﻡ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺒﻌﺽ ﺍﻟﺭﻤـﻭﺯ
ﻥ ﺨﺎﺼﺔ ﺒﻬﺎ ﻤﺜل ﺍﻟﻤﺴﺘﻁﻴﻼﺕ ،ﺍﻟﻤﻌﻴﻨﺎﺕ ،ﺍﻷﺸﻜﺎل ﺍﻟﺒﻴﻀﻭﻴﺔ ﻭﺍﻟﺩﻭﺍﺌﺭ ﺍﻟﺼﻐﻴﺭﺓ .ﻴﺘﻡ
ﺍﻟﺘﻲ ﻟﻬﺎ ﻤﻌﺎ ٍ
ﺍﻟﻭﺼل ﻤﺎ ﺒﻴﻥ ﺍﻟﺭﻤﻭﺯ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﺒﻭﺍﺴﻁﺔ ﺃﺴﻬﻡ ﺘﺤﺩﺩ ﺠﻬﺔ ﺇﻨﺘﻘﺎل ﺍﻟﺘﺤﻜﻡ ).(flowlines
ﺘﻤﺎﺜل ﺍﻟﻤﺨﻁﻁﺎﺕ ﺍﻟﺼﻨﺩﻭﻗﻴﺔ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻓﻲ ﻜﻭﻨﻬﺎ ﻤﻔﻴﺩﺓ ﻓﻲ ﻋﻤﻠﻴـﺔ ﺘﻁـﻭﻴﺭ ﻭﺘﻤﺜﻴـل
ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ،ﻟﻜﻥ ﻴﻔﻀل ﻤﻌﻅﻡ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻋﻠﻰ ﺍﻟﻤﺨﻁﻁﺎﺕ ﺍﻟﺼﻨﺩﻭﻗﻴﺔ ﺍﻟﺘﻲ
ﺘﺒﻴﻥ ﺒﻭﻀﻭﺡ ﻜﻴﻔﻴﺔ ﺍﻨﺘﻘﺎل ﺍﻟﺘﺤﻜﻡ ﻀﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﺒﺭ ﺍﻟﺒﻨﻰ ﺍﻟﺜﻼﺜﺔ ﺍﻷﺴﺎﺴﻴﺔ ،ﻭﺘﺠﻨﺒﻬﻡ ﺃﻱ ﺇﻴﺤﺎﺀ
ﺍﻟﺘﻲ ﻗﺩ ﺘﻭﺤﻲ ﺒﻬﺎ "ﺍﻷﺴﻬﻡ" ﺍﻟﺭﺍﺠﻌﺔ ﻓﻲ ﻤﺨﻁﻁﺎﺕ ﺍﻟﺘﺩﻓﻕ ﺍﻟﺒﻴﺎﻨﻴﺔ. Goto ﺒﻔﻜﺭﺓ
ﺍﻵﻥ ﻭﻗﺩ ﺃﺼﺒﺤﺕ ﺘﻌﺒﺭ ﻋﻥ ﺍﻟﺤل ﻭﻓﻕ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ،ﺴـﺘﺠﺩ ﺃﻥ ﺍﻟﻁﺭﻴـﻕ ﻏـﺩﺕ ﻗـﺼﻴﺭﺓ
ﻟﻼﻨﺘﻘﺎل ﺒﺎﻟﺤل ﻋﻠﻰ ﻨﺤﻭ ﺸﻔﺎﻑ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﻓﻌﻠﻲ ﻗﺎﺒل ﻟﻠﺘﻨﻔﻴﺫ ﺒﻠﻐﺔ ﺒﺭﻤﺠﺔ ﻤﻬﻴﻜﻠﺔ ﻤـﻥ ﺍﻟﻠﻐـﺎﺕ
ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ.
20