You are on page 1of 20

‫ﺨﻭﺍﺭﺯﻤﻴﺔ ﺤل ﻤﺴﺄﻟﺔ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ‬

‫‪Algorithm‬‬

‫ﻤﻘﺩﻤﺔ‬
‫ل ﻟﻠﻤﺴﺄﻟﺔ ﺍﻟﻤﻁﺭﻭﺤـﺔ‪ .‬ﻭﻫـﺫﺍ‬
‫ﻗﺒل ﻜﺘﺎﺒﺔ ﺃﻱ ﺒﺭﻨﺎﻤﺞ ﻟﺤل ﻤﺴﺄﻟﺔ ﻤﺎ‪ ،‬ﻴﺠﺏ ﺃﻥ ﻴﺘﻭﻓﺭ ﻟﺩﻴﻨﺎ ﻓﻬ ‪‬ﻡ ﺸﺎﻤ ٌ‬
‫ﻴﺘﻀﻤﻥ ﺘﺤﺩﻴﺩ ﻭﺘﻭﺼﻴﻑ ﺍﻟﻤﻌﻁﻴﺎﺕ ﺍﻟﺘﻲ ﻨﻌﺘﻤﺩ ﻋﻠﻴﻬﺎ ﺃﻭ ﻨﻨﻁﻠﻕ ﻤﻨﻬﺎ‪ ،‬ﻭﺍﻟﻨﺘﺎﺌﺞ ﺍﻟﺘﻲ ﻨﺭﻴﺩ ﺍﻟﻭﺼﻭل‬
‫ﺇﻟﻴﻬﺎ‪ .‬ﺒل ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻨﺘﺒﻊ ﺃﺴﻠﻭﺒﹰﺎ ﻤﻨﻬﺠﻴﹰﺎ ﻟﻠﺤل‪ ،‬ﻭﻨﻌﺒﺭ ﻋﻥ ﻫﺫﺍ ﺍﻟﺤل ﺒﻁﺭﻴﻘﺔ ﻤﺅﻁﺭﺓ ﻤﻬﻴﻜﻠﺔ ﻻ‬
‫ﻟﺒﺱ ﻓﻴﻬﺎ ﻜﺎﻓﻴﺔ ﻟﺘﻨﻘﻠﻨﺎ ﻓﻴﻤﺎ ﺒﻌﺩ ﺇﻟﻰ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻤﻌﻴﻨﺔ ﺩﻭﻥ ﻋﻨﺎﺀ ﻜﺒﻴﺭ‪.‬‬

‫‪ .1‬ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ‬
‫ﻴﺘﻡ ﺤل ﺃﻱ ﻤﺴﺄﻟﺔ ﺒﺭﻤﺠﻴﺔ ﻤﻥ ﺨﻼل ﺘﻨﻔﻴﺫ ﺴﻠﺴﻠﺔ ﻤﻥ ﺍﻷﻓﻌﺎل ﻭﻓﻕ ﺘﺭﺘﻴﺏ ﻤﻌﻴﻥ‪ ،‬ﺇﻨﻬﺎ ﺨﻁﺔ ﺍﻟﺤل‪،‬‬
‫ﻭﻨﻁﻠﻕ ﻋﻠﻴﻬﺎ ﺘﺴﻤﻴﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ‪ ،Algorithm‬ﻭﺘﺘﻀﻤﻥ ﺨﻁﻭﺍﺕ ﺤل ﻤﺴﺄﻟﺔ ﻋﺒﺭ ﺘﺤﺩﻴﺩ‪:‬‬
‫‪ -1‬ﺍﻷﻓﻌﺎل ﺍﻟﻭﺍﺠﺏ ﺘﻨﻔﻴﺫﻫﺎ‪.‬‬
‫‪ -2‬ﺍﻟﺘﺭﺘﻴﺏ ﺍﻟﻭﺍﺠﺏ ﺇﺘﺒﺎﻋﻪ ﻤﻥ ﺃﺠل ﺘﻨﻔﻴﺫ ﺍﻷﻓﻌﺎل ﺍﻟﺴﺎﺒﻘﺔ‪.‬‬

‫ﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﺍﻷﻓﻌﺎل ﻭﺘﺭﺘﻴﺏ ﺍﻟﺘﻨﻔﻴﺫ ﻤﻭﺼﻔﹰﺎ ﻋﻠﻰ ﻭﺠ ٍﻪ ﻻ ﻴﺩﻋﻭ ﺇﻟﻰ ﺍﻟﻠـﺒﺱ ﺃﻭ ﺍﻟﺘﺄﻭﻴـل‪ ،‬ﻭﺃﻥ‬
‫ﻼ ﻟﻼﻨﺘﻘﺎل ﻟﺒﺭﻨﺎﻤﺞ ﻟﻠﺘﻨﻔﻴﺫ ﻤﻥ ﻗﺒل ﺍﻟﺤﺎﺴﻭﺏ‪.‬‬
‫ﻴﻜﻭﻥ ﻗﺎﺒ ﹸ‬

‫ﺃﺼل ﻜﻠﻤﺔ ﺨﻭﺍﺭﺯﻤﻴﺔ‪:‬‬


‫‪780‬‬ ‫ﻴﻌﻭﺩ ﺃﺼل ﻜﻠﻤﺔ ﺨﻭﺍﺭﺯﻤﻴﺔ ﻨﺴﺒ ﹰﺔ ﺇﻟﻰ ﺍﻟﻌﺎﻟﻡ ﻤﺤﻤﺩ ﺒﻥ ﻤﻭﺴﻰ ﺍﻟﺨﻭﺍﺭﺯﻤﻲ ﻋﺎﺵ ﻓﻲ ﺍﻟﺤﻘﺒـﺔ‬
‫ﻤﻴﻼﺩﻱ ﻓﻲ ﻋﺼﺭ ﺍﻟﺨﻠﻴﻔﺔ ﺍﻟﻌﺒﺎﺴﻲ ﺍﻟﻤﺄﻤﻭﻥ‪.‬‬ ‫‪847‬‬ ‫–‬
‫ﺍﻟﺨﻭﺍﺭﺯﻤﻲ ﻋﺎﻟﻡ ﻓﻲ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﻭﺍﻟﻔﻠﻙ ﺘﺭﻙ ﺒﺼﻤﺎﺘﻪ ﻋﻠﻰ ﻨﺤ ِﻭ ﻤﺘﻤﻴﺯ‪ :‬ﻭﻀﻊ ﻤﺒﺎﺩﺉ ﻋﻠﻡ ﺍﻟﺠﺒﺭ‬
‫ﻤﻌﻅﻡ ﻟﻐـﺎﺕ ﺍﻟﻌـﺎﻟﻡ‪ ،‬ﺃﻤـﺎ ﻜﻠﻤـﺔ‬ ‫‪algebra‬‬ ‫ﻓﻲ ﻜﺘﺎﺏ "ﺍﻟﺠﺒﺭ ﻭﺍﻟﻤﻘﺎﺒﻠﺔ" ﻭﻤﻨﻪ ﺩﺨﻠﺕ ﻜﻠﻤﺔ ﺍﻟﺠﺒﺭ‬
‫ﻓﺠﺎﺀﺕ ﺒﻌﺩ ﺘﺭﺠﻤﺔ ﻜﺘﺎﺏ ﻫﺎﻡ ﻟﻪ ﻓﻲ ﺍﻟﺤﺴﺎﺏ ﻴﻀﻊ ﻓﻴﻪ ﺨﻁﻭﺍﺕ ﺍﻟﺤﺴﺎﺒﺎﺕ‬ ‫‪algorithmt‬‬ ‫ﺨﻭﺍﺭﺯﻤﻴﺔ‬
‫ﻟﺠﺩﺍﻭل ﺍﻟﻀﺭﺏ ﻭﺍﻟﻘﺴﻤﺔ ﻭﻋﺩﺩﹰﺍ ﻤﻥ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺏ ﺍﻟﻌﺸﺭﻴﺔ‪ ،‬ﺃﺨﺫﺕ ﺘﺭﺠﻤﺔ ﺍﻟﻜﺘﺎﺏ ﺇﻟﻰ ﺍﻟﻼﺘﻴﻨﻴﺔ‬
‫‪ . ”Algoritmi‬ﺇﻥ ﻜﻠﻤﺔ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺘﻲ ﻅﻬﺭﺕ ﻤﻨﺫ ﻗﺭﻭﻥ ﻋﺩﻴـﺩﺓ‪،‬‬ ‫“‪de Nemero Indriun‬‬ ‫ﺍﻻﺴﻡ‬
‫ﻋﺎﺩﺕ ﻟﺘﺄﺨﺫ ﺍﻟﺼﺩﺍﺭﺓ ﻓﻲ ﻋﺼﺭ ﺍﻟﺒﺭﻤﺠﺔ‪ ،‬ﻟﺘﻌﺒﺭ ﻋﻥ ﺨﻁﻭﺍﺕ ﻭﺁﻟﻴﺎﺕ ﺤل ﻤﺴﺄﻟﺔ ﺘﻤﻬﻴﺩﹰﺍ ﻟﺒﺭﻤﺠﺘﻬﺎ‬
‫ﺤﺎﺴﻭﺒﻴﹰﺎ‪.‬‬

‫‪1‬‬
‫)‪(Pseudo Code‬‬ ‫‪ .2‬ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‬
‫ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﻟﻐﺔ ﻤﺼﻁﻨﻌﺔ ﺒﻤﻌﻨﻰ ﺃﻨﻬﺎ ﻟﻐﺔ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺒﺭﺍﻤﺞ ﻭﻟﻜﻨﻬﺎ ﻟﻴﺴﺕ‬
‫ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻓﻌﻠﻴﺔ‪ .‬ﺘﺴﺎﻋﺩ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻋﻠﻰ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪ :‬ﺨﻁﻭﺍﺕ ﺍﻟﺤل‪ ،‬ﻭﻤﺴﺎﺭ ﺃﻭ‬
‫ﺘﺴﻠﺴل ﺘﻨﻔﻴﺫﻫﺎ‪.‬‬
‫ﺴﻨﻘﻭﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل ﺒﻌﺭﺽ ﻟﻐﺔ ﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﺘﻔﻴﺩﻨﺎ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺭ ﺒﺸﻜل "ﻁﺒﻴﻌﻲ" ﻋﻥ ﺨﻁﻭﺍﺘﻨـﺎ‬
‫ﻭﻤﺴﺎﺭﻨﺎ ﻟﺤل ﻤﺴﺄﻟﺔ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ‪.‬‬
‫ﺘﺸﺒﻪ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻟﻐﺔ ﺘﻔﻜﻴﺭﻨﺎ ﻓﻲ ﻟﻐﺘﻨﺎ ﺍﻟﻤﺘﺩﺍﻭﻟﺔ‪ ،‬ﻓﻬﻲ ﻟﻐﺔ ﻤﺒﺴﻁﺔ ﻭﻤﻔﻬﻭﻤﺔ‪ ،‬ﻭﻟﻜﻥ ﻤﺅﻁﺭﺓ‬
‫ﻭﻤﻬﻴﻜﻠﺔ‪ ،‬ﺴﺘﺴﻬل ﻟﻨﺎ ﻓﻴﻤﺎ ﺒﻌﺩ ﺍﻻﻨﺘﻘﺎل ﺇﻟﻰ ﻟﻐﺔ ﺒﺭﻤﺠﻴﺔ ﻓﻌﻠﻴﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ‪.‬‬
‫‪:pseudo code‬‬ ‫ﻤﻌﻨﻰ ﻜﻠﻤﺔ‬
‫ﻓﻲ ﺍﻹﻨﻜﻠﻴﺯﻴﺔ ﻓﻲ ﺴﻴﺎﻕ ﻋﻠﻭﻡ ﺍﻟﺤﺎﺴﻭﺏ ﻟﻠﺩﻻﻟﺔ ﻋﻠﻰ ﺍﻟﺘﺭﻤﻴﺯ ﻟﻠﺤﺎﺴـﻭﺏ ﺃﻭ‬ ‫‪code‬‬ ‫ﺘﺴﺘﺨﺩﻡ ﻜﻠﻤﺔ‬
‫)ﺸـﺒﻪ ﺃﻭ ﻗﺭﻴـﺏ‬ ‫‪pseudo code‬‬ ‫ﻟﻜل ﻤﺎ ﻫﻭ ﺘﻌﻠﻴﻤﺎﺕ ﻟﻐﺎﺕ ﺒﺭﻤﺠﺔ‪ ،‬ﻭﻤﻥ ﻫﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺼﻁﻠﺢ‬
‫ﺍﻟﺘﺭﻤﻴﺯ( ﻟﻠﺩﻻﻟﺔ ﺃﻨﻬﺎ ﻟﻐﺔ ﻗﺭﻴﺒﺔ ﺃﻭ ﺸﺒﻴﻬﺔ ﺒﻠﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ‪.‬‬
‫ﻻ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺤﺎﺴﺏ‪ ،‬ﻟﻜﻨﻬﺎ ﺘﺴﺎﻋﺩ ﺍﻟﻤﺒـﺭﻤﺞ ﻜﺜﻴـﺭﹰﺍ‬
‫ﻋﻠﻰ ﺍﻟﺘﻔﻜﻴﺭ ﺒﺒﺭﻨﺎﻤﺠﻪ ﻗﺒل ﻤﺤﺎﻭﻟﺔ ﻜﺘﺎﺒﺘﻪ ﺒﺄﻴﺔ ﻟﻐﺔ ﺒﺭﻤﺠﺔ‪.‬‬

‫)‪(Pseudo Code‬‬ ‫‪ .3‬ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻷﺴﺎﺴﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‬


‫ﻴﻤﻜﻥ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻥ ﺨﻁﻭﺍﺕ ﻭﻤﺴﺎﺭ ﺤل ﻤﺴﺄﻟﺔ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ ﺃﻭ ﺘﻭﺼﻴﻑ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺒﻭﺍﺴـﻁﺔ‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﻤﺴﺔ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ -1‬ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﺭﺍﺀﺓ ﺃﻭ ﺇﺩﺨﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ‬
‫‪ -2‬ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ ﺃﻭ ﺇﻅﻬﺎﺭ ﺍﻟﻨﺘﺎﺌﺞ‬
‫‪ -3‬ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ ﺃﻭ ﻭﻀﻊ ﻗﻴﻡ ﻓﻲ ﻤﺘﺤﻭل‬
‫‪ -4‬ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ‬
‫‪ -5‬ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻜﺭﺍﺭﻴﺔ‬
‫ﻻﺤﻅ ﺃﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻫﻲ ﺘﺠﺭﻴﺩ ﻭﻨﻅﺭﺓ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ ﻟﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﻴﻘـﻭﻡ ﺒـﻪ ﺍﻟﺤﺎﺴـﻭﺏ‪،‬‬
‫ﻓﺎﻟﺘﻌﻠﻴﻤﺎﺕ ‪ -1‬ﻭ ‪ -2‬ﻫﻲ ﻟﻠﺩﺨل ﻭﺍﻟﺨﺭﺝ‪ .‬ﻭﺍﻟﺘﻌﻠﻴﻤﺔ ‪ -3‬ﻟﻠﺘﻌﺎﻤل ﻤـﻊ ﺍﻟﻤﺘﺤـﻭﻻﺕ ﺃﻱ ﺨﺎﻨـﺎﺕ‬
‫ﺍﻟﺫﺍﻜﺭﺓ‪ .‬ﺃﻤﺎ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ -4‬ﻭ ‪ -5‬ﻓﻬﻲ ﻟﻠﺘﺤﻜﻡ ﺒﻤﺴﺎﺭ ﺍﻟﺘﻨﻔﻴﺫ‪ ،‬ﻭﻜﻤﺎ ﻋﺭﻓﻨـﺎ ﻤـﻥ ﻤﺒـﺎﺩﺉ ﻋﻤـل‬
‫ﺍﻟﺤﺎﺴﻭﺏ ﺃﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻫﻭ ﻀﻤﻨﻴﹰﺎ ﺘﺴﻠﺴﻠﻲ‪ ،‬ﻓﺈﺫﺍ ﺃﺭﺩﻨﺎ ﺘﻐﻴﻴﺭ ﺘﺴﻠﺴل ﺍﻟﺘﻨﻔﻴﺫ ﻓﻬﺎﺘﺎﻥ ﺍﻟﺘﻌﻠﻴﻤﻴﺘﺎﻥ‬
‫ﻫﻤﺎ ﺍﻟﻭﺴﻴﻠﺔ‪.‬‬

‫‪2‬‬
‫ﺴﻨﺒﺩﺃ ﺍﻵﻥ ﺒﺸﺭﺡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻷﺴﺎﺴﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪ ،‬ﻟﻨﺴﺘﻭﻋﺏ ﺠﻴﺩﹰﺍ ﻋﻤﺎ ﺘﻌﺒﺭ ﻓﻌﻠﻴﹰﺎ ﺒـﺸﻜل‬
‫ﺩﻗﻴﻕ‪.‬‬
‫ﻭﺴﻨﺴﺘﺨﺩﻡ ﻜﻠﻤﺔ ﻤﺘﺤﻭل ﻭﺨﺎﻨﺔ ﺫﺍﻜﺭﺓ ﻟﻨﻔﺱ ﺍﻟﺩﻻﻟﺔ‪ .‬ﻭﻓﻲ ﺃﻤﺜﻠﺘﻨﺎ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل ﺴـﻴﻜﻭﻥ ﻤﻌﻅـﻡ‬
‫ﺍﺴﺘﺨﺩﺍﻤﻨﺎ ﻟﻤﺘﺤﻭﻻﺕ ﻋﺩﺩﻴﺔ ﺼﺤﻴﺤﺔ )‪.(integer‬‬

‫ﺒﺜﻼﺜﻴﺔ‪ :‬ﺍﺴﻡ ﺘﻌﺭﻴﻑ ‪ ،identifier‬ﻨﻤﻁ ‪ ،type‬ﺨﺎﻨـﺔ ﺫﺍﻜـﺭﺓ ﻴـﺸﻐﻠﻬﺎ‬ ‫‪variable‬‬ ‫ﻴﻌﺭ‪‬ﻑ ﺍﻟﻤﺘﺤﻭل‬
‫‪.memory allocation‬‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﺃﺴﺎﺴﻴﺔ ﻟﻠﺘﻌﺒﻴﺭ ﻋـﻥ ﺃﻱ ﺤـل ﻟﻤـﺴﺄﻟﺔ‬ ‫‪5‬‬ ‫ﻭﻟﻨﺭﻜﺯ ﻤﻌﹰﺎ ‪ ،‬ﺃﻟﻴﺱ ﺭﺍﺌﻌﹰﺎ ﺃﻥ ﻨﺩﺭﻙ ﺃﻨﻪ ﻴﻜﻔﻴﻨﺎ‬
‫ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ‪.‬‬

‫‪ -1‬ﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﺭﺍﺀﺓ‬
‫ﻫﻲ ﺇﻋﻁﺎﺀ ﻗﻴﻤﺔ ﻤﻥ ﺍﻟﺩﺨل )ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ( ﻟﻭﻀﻌﻬﺎ ﻓﻲ ﺨﺎﻨﺔ ﺫﺍﻜﺭﺓ‪.‬‬
‫ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ‪:‬‬
‫ﻨﻌﻁﻲ ﺸﻜ ﹰ‬
‫ﺍﻗﺭﺃ ﻤﺘﺤﻭل ﺃﻭ ﻤﺘﺤﻭﻻﺕ‬
‫ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺃﻤﺭ ﻴﻘﻭل ﺨﺫ ﺍﻟﻘﻴﻤﺔ )ﺍﻟﻘﻴﻡ( ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﺩﺨل ﻭﻀﻌﻬﺎ ﻓﻲ ﺨﺎﻨﺔ )ﺨﺎﻨﺎﺕ( ﺫﺍﻜﺭﺓ‬
‫ﺍﻟﻤﺘﺤﻭل )ﺍﻟﻤﺘﺤﻭﻻﺕ(‪.‬‬
‫ﺃﻤﺜﻠﺔ‪:‬‬
‫‪N‬‬ ‫ﺍﻗﺭﺃ‬
‫‪N‬‬ ‫ﻀﻊ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﺘﹸﻌﻁﻰ ﻤﻥ ﺍﻟﺩﺨل ﻓﻲ ﺨﺎﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ‬

‫‪a, b, c‬‬ ‫ﺍﻗﺭﺃ‬


‫‪a, b, c‬‬ ‫ﻀﻊ ﺍﻟﻘﻴﻡ ﺍﻟﺘﻲ ﺘﹸﻌﻁﻰ ﻤﻥ ﺍﻟﺩﺨل ﻓﻲ ﺨﺎﻨﺎﺕ ﺍﻟﺫﺍﻜﺭﺓ‬

‫ﻴﺠﺏ ﺍﻟﺘﻨﻭﻴﻪ ﺃﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺤﺎﺴﻭﺏ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﺭﺍﺀﺓ ﻴﻜﻭﻥ ﺒﺎﻨﺘﻅﺎﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺤﺘﻰ ﻴﺩﺨل ﻗﻴﻡ ﻭﻴـﻀﻐﻁ‬
‫ﻤﻔﺘﺎﺡ ﺍﻹﺩﺨﺎل ‪.Enter‬‬

‫‪ -2‬ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ‬
‫ﻭﻫﻲ ﺇﻅﻬﺎﺭ ﻗﻴﻡ ﻤﻌﻴﻨﺔ ﻋﻠﻰ ﻭﺤﺩﺓ ﺍﻟﺨﺭﺝ )ﺍﻟﺸﺎﺸﺔ(‬
‫ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ‪:‬‬
‫ﻨﻌﻁﻲ ﺸﻜ ﹰ‬
‫ﺍﻜﺘﺏ ﺼﻴﻐﺔ ﺃﻭ ﺘﻌﺒﻴﺭ‬

‫‪3‬‬
‫‪ (formula‬ﻫﻲ ﺘﺭﻜﻴﺏ ﻤﻥ ﻤﺘﺤﻭﻻﺕ ﻭ ﺜﻭﺍﺒﺕ ﻭ ﻋﻤﻠﻴـﺎﺕ ﺃﻭ‬ ‫)‪, expression‬‬ ‫ﻭﺍﻟﺼﻴﻐﺔ ﺃﻭ ﺍﻟﺘﻌﺒﻴﺭ‬
‫ﻻ ﻓﻘﻁ ﺃﻭ ﺜﺎﺒﺘﹰﺎ ﻓﻘﻁ‪.‬‬
‫ﺘﻭﺍﺒﻊ‪ ،‬ﻭﻓﻲ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺒﺴﻴﻁﺔ ﻴﻜﻭﻥ ﺍﻟﺘﻌﺒﻴﺭ ﻤﺘﺤﻭ ﹰ‬

‫ﺇﺫﻥ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ ﻫﻲ ﺃﻤﺭ ﻴﻘﻭل ﺃﻅﻬﺭ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻠﻰ ﻭﺤﺩﺓ ﺍﻟﺨﺭﺝ‪.‬‬
‫ﻭﻜﻤﺎ ﻓﻲ ﺘﻌﻠﻴﻤﺔ ﺍﻟﺩﺨل ﻴﻤﻜﻥ ﺃﻥ ﻨﻁﻠﺏ ﻤﻥ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ ﺍﻅﻬﺎﺭ ﺃﻜﺜﺭ ﻤﻥ ﻗﻴﻤﺔ )ﻋﺩﺓ ﺼﻴﻎ(‪.‬‬

‫ﺃﻤﺜﻠﺔ‪:‬‬
‫‪N‬‬ ‫ﺍﻜﺘﺏ‬
‫ﻋﻠﻰ ﺍﻟﺨﺭﺝ‪.‬‬ ‫‪N‬‬ ‫ﺃﻅﻬﺭ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺨﺎﻨﺔ ﺍﻟﺫﺍﻜﺭﺓ‬

‫‪a, b, c‬‬ ‫ﺍﻜﺘﺏ‬


‫‪a, b, c‬‬ ‫ﺃﻅﻬﺭ ﺍﻟﻘﻴﻡ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺨﺎﻨﺎﺕ ﺍﻟﺫﺍﻜﺭﺓ‬

‫‪N*2‬‬ ‫ﺍﻜﺘﺏ‬
‫ﻭ ﺃﻅﻬﺭﻫﺎ ﻋﻠﻰ ﺍﻟﺨﺭﺝ‪.‬‬ ‫‪N*2‬‬ ‫ﺍﺤﺴﺏ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺭ‬
‫ﻓﺴﻴﻅﻬﺭ ﻋﻠﻰ ﺍﻟﺨﺭﺝ ﺍﻟﻘﻴﻤﺔ ‪.12‬‬ ‫‪6‬‬ ‫ﺘﺴﺎﻭﻱ‬ ‫‪N‬‬ ‫ﻓﺈﻥ ﻜﺎﻨﺕ‬

‫‪20‬‬ ‫ﺍﻜﺘﺏ‬

‫ﺍﻜﺘﺏ “‪” Programming is going well‬‬

‫ﻭﻫﻤﺎ ﻤﺜﺎﻻﻥ ﻋﻥ ﻜﺘﺎﺒﺔ ﺜﻭﺍﺒﺕ‪ ،‬ﺍﻷﻭل ﻋﺩﺩﻱ ﻭﺍﻟﺜﺎﻨﻲ ﻨﺼﻲ )ﺴﻠﺴﻠﺔ ﺤﺭﻭﻑ(‪.‬‬

‫“ ‪“The result is‬‬ ‫‪, 2*N‬‬ ‫ﺍﻜﺘﺏ‬


‫ﺘﻤﻠﻙ ﺍﻟﻘﻴﻤﺔ ‪ ،6‬ﺴ‪‬ﺘﻅﻬﺭ ﺘﻌﻠﻴﻤﺔ ﺍﻟﻜﺘﺎﺒﺔ ﻤﺎ ﻴﻠﻲ‪:‬‬ ‫‪N‬‬ ‫ﻭﻓﻲ ﺤﺎﻟﺔ‬
‫‪The result =12‬‬

‫)‪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‬‬

‫‪ ،x=3 y=0‬ﺘﻔﺴﻴﺭ؟(‪.‬‬ ‫) ﻫل ﺘﻌﺭﻑ ﺸﻜل ﺍﻹﻅﻬﺎﺭ ﻤﻥ ﺃﺠل ﻗﻴﻤﺔ ﺍﻟﺩﺨل ‪ ،3‬ﺍﻟﺠﻭﺍﺏ‪:‬‬

‫‪ -4‬ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ‬
‫ﻭﻓﻴﻬﺎ ﺘﺘﺤﺩﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺘﻨﻔﻴﺫ ﺒﻨﺎ ًﺀ ﻋﻠﻰ ﺍﺨﺘﺒﺎﺭ ﺸﺭﻁ‪ ،‬ﻭﺘﺭﺩ ﺒﺄﺤﺩ ﺍﻟﺸﻜﻠﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ‪:‬‬
‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻟﺒﺴﻴﻁﺔ ﺃﻭ ﺍﻟﺘﻨﻔﻴﺫ ﺒﺸﺭﻁ‪.‬‬ ‫‪-1‬‬

‫ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻻﺨﺘﻴﺎﺭﻴﺔ ﺃﻭ ﺍﻟﺘﻨﻔﻴﺫ ﺒﺎﺨﺘﻴﺎﺭ ﺒﻴﻥ ﻤﺴﺎﺭﻴﻥ ﻭﻓﻘﹰﺎ ﻟﻠﺸﺭﻁ‪.‬‬ ‫‪-2‬‬

‫‪5‬‬
‫‪ 1-4‬ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ ﺍﻟﺒﺴﻴﻁﺔ‬
‫ﻼ ﻨﻅﺎﻤﻴﹰﺎ ﻟﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ‪:‬‬
‫ﻨﻌﻁﻲ ﺸﻜ ﹰ‬

‫ﺷﺮط‬ ‫ﺻﺢ‬ ‫ﺇﺫﺍ ) ﺸﺭﻁ( ﻨﻔﱢﺫ‬


‫ﻣﺠﻤﻮﻋﺔ ﺗﻌﻠﻴﻤﺎت‬
‫ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺧﻄﺄ‬

‫ﻭﻓﻲ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻴﺠﺭﻱ ﺍﺨﺘﺒﺎﺭ ﺍﻟﺸﺭﻁ‬


‫ﻓﺈﻥ ﻜﺎﻥ ﻤﺤﻘﻘ ﹰﺎ )ﺼﺤﻴﺤ ﹰﺎ(‪ :‬ﺘﹸﻨﻔﱠﺫ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ) ﺒﺎﻟﻁﺒﻊ ﻴﻤﻜﻥ ﺃﻥ ﺘﻘﺘﺼﺭ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﻋﻠﻰ ﺘﻌﻠﻴﻤﺔ ﻭﺍﺤﺩﺓ ﻜﻤﺎ ﻓﻲ ﺃﻤﺜﻠﺘﻨﺎ ﺍﻟﻤﺒﺴﻁﺔ(‪.‬‬
‫ﻭﺇﻥ ﻟﻡ ﻴﻜﻥ ﺍﻟﺸﺭﻁ ﻤﺤﻘﻘ ﹰﺎ‪ :‬ﺒﺎﻟﻁﺒﻊ ﻟﻥ ﺘﻨﻔﱠﺫ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ ،‬ﻭﺴﻴﻨﺘﻘل ﺍﻟﺘﻨﻔﻴـﺫ ﺇﻟـﻰ ﺍﻟﺘﻌﻠﻴﻤـﺔ‬
‫ﺍﻟﺘﺎﻟﻴﺔ‪ ،‬ﺒﻌﺩ ﻜﺎﻤل ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺸﺭﻁﻴﺔ‪ .‬ﺃﻟﻡ ﻨﻘل ﺃﻥ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻫﻭ ﻀﻤﻨﻴﹰﺎ ﺘﺴﻠﺴﻠﻲ‪.‬‬

‫ﻤﺎ ﻤﻌﻨﻰ ﺸﺭﻁ؟‬


‫ﺍﻟﺸﺭﻁ ﻫﻭ ﺍﻟﻤﻌﻨﻰ ﺍﻟﻤﺄﻟﻭﻑ ﻟﺩﻴﻙ‪ ،‬ﺃﻱ ﺃﻤﺭ ﻴﻤﻜﻥ ﺍﻟﺒﺕ ﺒﺸﺄﻨﻪ‪ :‬ﻤﺤﻘﻕ ﺃﻭ ﻏﻴـﺭ ﻤﺤﻘـﻕ )ﺼـﺢ ﺃﻭ‬
‫ﺍﻟﺘﻌﺭﻴﻑ ﺍﻟﺘﺎﻟﻲ‪:‬‬ ‫‪condition‬‬ ‫ﺨﻁﺄ( )ﻨﻌﻡ ﺃﻭ ﻻ(‪ .‬ﻭﻴﻤﻜﻥ ﺃﻥ ﻨﻌﻁﻲ ﺍﻟﺸﺭﻁ‬
‫ﺃﻱ ﺼﻴﻐﺔ ﺘﹸﻘﻴ‪‬ﻡ ﺒﺼﺢ ﺃﻭ ﺨﻁﺄ‪ ،‬ﻭﻫﻲ ﻏﺎﻟﺒﹰﺎ ﺘﺘﻀﻤﻥ ﺍﻟﻤﻘﺎﺭﻨﺔ )ﺍﻟﺘـﺭﺍﺠﺢ ﺃﻭ ﺍﻟﻤـﺴﺎﻭﺍﺓ ( ‪ :‬ﺃﻜﺒـﺭ‪،‬‬
‫‪ ،‬ﺃﻭ ‪:‬‬ ‫‪and‬‬ ‫ﺃﺼﻐﺭ‪ ،‬ﻴﺴﺎﻭﻱ‪ .‬ﻜﻤﺎ ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻀﻤﻥ ﺃﺩﻭﺍﺕ ﺍﻟﺘﺭﻜﻴﺏ )ﺍﻟﻌﻁﻑ( ﺍﻟﻤﻨﻁﻘـﻲ‪ ) :‬ﻭ ‪:‬‬
‫‪ ،‬ﻻ‪.(not :‬‬ ‫‪or‬‬

‫ﻤﺜﺎل‪: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‬‬ ‫ﻭﺇﻻ‬
‫ﺘﻌﻠﻴﻤﺎﺕ‪2-‬‬ ‫ﻤﺠﻤﻭﻋﺔ‬

‫ﻓﻲ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻴﺠﺭﻱ ﺍﻻﺨﺘﻴﺎﺭ ﺒﻴﻥ ﻤﺴﺎﺭﻱ ﺘﻨﻔﻴﺫ‪ :‬ﺇﻤﺎ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﺘﻌﻠﻴﻤﺎﺕ‪ 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‬‬ ‫ﻤﺎﺩﺍﻡ )‬

‫‪7,” x ”, i ,” = ”, 7*i‬‬ ‫ﺍﻜﺘﺏ‬

‫‪i Å i +1‬‬

‫ﻻ ﻴﺘﺯﺍﻴﺩ ﻤﻊ ﺘﻨﻔﻴﺫ ﺍﻟﺘﻜﺭﺍﺭ‪ ،‬ﻤﺜل ﺤﺎﻟـﺔ ‪ i‬ﻓـﻲ ﻤﺜﺎﻟﻨـﺎ‪،‬‬


‫ﻓﻲ ﻜﺜﻴﺭ ﻤﻥ ﺤﺎﻻﺕ ﺍﻟﺘﻜﺭﺍﺭ ﻨﺴﺘﺨﺩﻡ ﻤﺘﺤﻭ ﹰ‬
‫ﻨﺴﻤﻲ ﻤﺜل ﻫﺫﺍ ﺍﻟﻤﺘﺤﻭل ﻋﺩﺍﺩ )ﻴﻌ ‪‬ﺩ ﻤﺭﺍﺕ ﺍﻟﺘﻜﺭﺍﺭ(‪ ،‬ﻭﺒﻤﺎ ﺃﻥ ﺍﻟﺘﻜﺭﺍﺭ ﻫﻭ ﺤﻠﻘﺔ ﻨﺴﻤﻴﻪ ﺃﻴﻀﹰﺎ ﻋﺩﺍﺩ‬
‫ﺍﻟﺤﻠﻘﺔ ﺍﻟﺘﻜﺭﺍﺭﻴﺔ‪.‬‬

‫ﻤﺜﺎل‪:2‬‬
‫ﺘﹸﻌﻁﻰ ﻜﺩﺨل‪.‬‬ ‫‪M‬‬ ‫ﺤﻴﺙ‬ ‫‪1, 2, 3,...M‬‬ ‫ﺍﻟﻤﻁﻠﻭﺏ ﺤﺴﺎﺏ ﻤﺠﻤﻭﻉ ﺍﻷﻋﺩﺍﺩ‬
‫ﺍﻵﻥ ﻭﻗﺩ ﺍﻜﺘﻤﻠﺕ ﻟﺩﻴﻨﺎ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻷﺴﺎﺴﻴﺔ‪ ،‬ﻭﻗﺩ ﺍﺩﻋﻴﻨﺎ ﺃﻨﻬﺎ ﻜﺎﻓﻴﺔ ﻟﻨﻌﺒﺭ ﻋﻥ ﺤـل ﺃﻱ‬
‫ﻤﺴﺄﻟﺔ‪ ،‬ﻟﻨﺒﺩﺃ ﺍﻟﺘﻔﻜﻴﺭ ﺒﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺤل ﺒﻬﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪.‬‬
‫ﺍﻟﻤﻬﻡ ﺃﻥ ﻨﺒﺩﺃ ﺒﺘﻭﺼﻴﻑ ﺍﻟﻤﺴﺄﻟﺔ ﺠﻴﺩﺍﹰ‪ ،‬ﻭﻴﻜﻭﻥ ﺫﻟﻙ ﺒﺘﺤﺩﻴﺩ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺍﻟﻨﺘﺎﺌﺞ ﺒﺸﻜل ﺩﻗﻴﻕ‪ ،‬ﻭﻴﻜﻭﻥ‬
‫ﻻ ﺇﻟﻰ ﺍﻟﻨﺘﺎﺌﺞ‪.‬‬
‫ﺍﻟﺤل )ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ( ﺒﻤﺤﺎﻭﻟﺔ ﺒﻨﺎﺀ ﺍﻟﺨﻁﻭﺍﺕ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ ﻭﺼﻭ ﹰ‬

‫‪1, 2, 3,...M‬‬ ‫ﺍﻟﻤﻁﻠﻭﺏ ﺤﺴﺎﺏ ﻤﺠﻤﻭﻉ ﺍﻷﻋﺩﺍﺩ‬


‫ﺘﹸﻌﻁﻰ ﻜﺩﺨل‪.‬‬ ‫‪M‬‬ ‫ﺤﻴﺙ‬
‫ﻋﺩﺩ ﺼﺤﻴﺢ ﻤﻭﺠﺏ‪.‬‬ ‫‪M‬‬ ‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪:‬‬
‫‪.‬‬ ‫‪S‬‬ ‫ﻻ‬
‫ﻭﻟﻨﺠﻌل ﻟﻬﺫﺍ ﺍﻟﻤﺠﻤﻭﻉ ﻤﺘﺤﻭ ﹰ‬ ‫‪1, 2, 3,...M‬‬ ‫ﺍﻟﻨﺘﺎﺌﺞ‪ :‬ﻤﺠﻤﻭﻉ ﺍﻷﻋﺩﺍﺩ‬
‫‪S=1+2+...+M‬‬ ‫ﻫﻲ‪:‬‬ ‫‪M‬‬ ‫ﻭ‬ ‫‪S‬‬ ‫ﺍﻟﻌﻼﻗﺔ ﺒﻴﻥ‬

‫‪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=3‬‬ ‫ﺘﺩﺭﻴﺏ‪ :‬ﺍﺨﺘﺒﺭ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﻋﻠﻰ ﻗﻴﻡ ﺍﻟﺩﺨل ‪:‬‬


‫‪M‬‬ ‫‪S‬‬ ‫‪i‬‬ ‫ﺘﻜﺭﺍﺭ‬ ‫ﺸﺭﻁ ‪i < M‬‬
‫‪3‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫ﺼﺢ‬
‫‪3‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫ﺼﺢ‬
‫‪3‬‬ ‫‪6‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫ﺨﻁﺄ‬
‫ﺍﻟﺨﺭﺝ ﺃﻭ ﺍﻟﻨﺘﻴﺠﺔ‪S = 6 :‬‬

‫ﻤﻼﺤﻅﺔ ﻫﺎﻤﺔ ﺠﺩﹰﺍ‪:‬‬


‫ﺇﻥ ﻜﺎﻥ ﺍﻟﺸﺭﻁ ﻤﺤﻘﻘﹰﺎ ﺩﺍﺌﻤﺎﹰ‪ ،‬ﺃﻱ ﻜﺎﻥ ﺼﺤﻴﺤﹰﺎ ﻭﻻ ﻴﺘﻐﻴﺭ ﻓﻲ ﻤﺘﺤﻭﻻﺘﻪ ﺸﻲﺀ‪ ،‬ﻓﻤﺎﺫﺍ ﻴﺤﺼل؟؟؟ ﺇﻨﻬﺎ‬
‫ﺃﻜﺒﺭ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺒﺭﻤﺠﻴﺔ‪ ،‬ﻨﺩﺨل ﺒﺤﻠﻘﺔ ﻻﻨﻬﺎﺌﻴﺔ‪ ،‬ﺃﻱ ﻴﺴﺘﻤﺭ ﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺒـﻼ‬
‫ﺘﻭﻗﻑ‪ .‬ﻓﻜﻴﻑ ﻨﻨﺘﺒﻪ ﺇﻟﻰ ﻤﺜل ﻫﺫﺍ ﺍﻟﺨﻁﺄ؟‬
‫ﺇﻥ ﻟﻡ ﺘﻜﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺘﺤﻤل ﻓﻲ ﻁﻴﺎﺘﻬﺎ ﺃﻱ ﺘﻌﺩﻴل ﻋﻠﻰ ﺃﻱ ﻤﻥ ﺍﻟﻤﺘﺤـﻭﻻﺕ ﺍﻟﻤـﻀﻤﻨﺔ‬
‫ﺒﺎﻟﺸﺭﻁ ﻓﻬﻨﺎﻙ ﺤﺘﻤﹰﺎ ﺤﻠﻘﺔ ﻻ ﻨﻬﺎﺌﻴﺔ‪.‬‬

‫ﺃﻜﺒﺭ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺒﺭﻤﺠﻴﺔ‪ ،‬ﻨﺩﺨل ﺒﺤﻠﻘﺔ ﻻﻨﻬﺎﺌﻴﺔ‪ ،‬ﺃﻱ ﻴﺴﺘﻤﺭ ﺘﻜﺭﺍﺭ ﺘﻨﻔﻴﺫ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤـﺎﺕ ﺒـﻼ‬
‫ﺘﻭﻗﻑ‪.‬ﻨﻨﺘﺒﻪ ﺇﻟﻰ ﻤﺜل ﻫﺫﺍ ﺍﻟﺨﻁﺄ ﺇﻥ ﻟﻡ ﺘﻜﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺘﺤﻤل ﻓﻲ ﻁﻴﺎﺘﻬﺎ ﺃﻱ ﺘﻌﺩﻴل ﻋﻠـﻰ‬
‫ﺃﻱ ﻤﻥ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﻀﻤﻨﺔ ﺒﺎﻟﺸﺭﻁ ﻓﻬﻨﺎﻙ ﺤﺘﻤﹰﺎ ﺤﻠﻘﺔ ﻻ ﻨﻬﺎﺌﻴﺔ‪.‬‬
‫‪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‬‬

‫( ﻜﺭﺭ‬ ‫‪i≤M‬‬ ‫ﻤﺎﺩﺍﻡ )‬


‫‪S←S+i‬‬
‫‪i ← 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‬‬ ‫ﺍﻗﺭﺃ‬

‫( ﻜﺭﺭ‬ ‫‪b‬‬ ‫ﻻ ﻴﺴﺎﻭﻱ‬ ‫‪a‬‬ ‫ﻤﺎﺩﺍﻡ )‬

‫ﺇﺫﺍ )‪ ( a > b‬ﻨﻔﱢﺫ‬


‫‪aÅa-b‬‬
‫ﻭﺇﻻ‬
‫‪bÅb-a‬‬

‫‪gÅa‬‬
‫‪g‬‬ ‫ﺍﻜﺘﺏ‬
‫ﺇﻨﻬﺎ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺭﺍﺌﻌﺔ ﻭﺒﺴﻴﻁﺔ‪ ،‬ﻭﺍﺴﺘﺨﺩﻤﻨﺎ ﻓﻴﻬﺎ ﺠﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻷﺴﺎﺴـﻴﺔ )ﺩﺨـل‪،‬‬
‫ﺨﺭﺝ‪ ،‬ﺇﺴﻨﺎﺩ‪ ،‬ﺘﻌﻠﻴﻤﺔ ﺸﺭﻁﻴﺔ‪ ،‬ﺘﻌﻠﻴﻤﺔ ﺘﻜﺭﺍﺭﻴﺔ(‪.‬‬

‫ﺒﺎﻟﺘﻌﻠﻴﻤﺔ ‪g Å b‬؟‬ ‫‪gÅa‬‬ ‫ﺴﺅﺍل‪ :‬ﻫل ﺘﺘﻐﻴﺭ ﺍﻟﻨﺘﻴﺠﺔ ﺇﺫﺍ ﻏﻴﺭﻨﺎ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ‬
‫ﻻ ﺘﻐﻴﻴﺭ‪ ،‬ﻷﻥ ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺘﻠﻲ ﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﻜﺭﺍﺭ‪ ،‬ﺍﻟﺘﻲ ﻻ ﻨﻨﺘﻘل ﺇﻟﻰ ﻤﺎ ﺒﻌﺩﻫﺎ ﺇﻻ ﺒﻌﺩ ﻋـﺩﻡ ﺘﺤﻘـﻕ‬
‫ﻤﺘﺴﺎﻭﻴﺘﺎﻥ‬ ‫‪b‬‬ ‫ﻭ‬ ‫‪a‬‬ ‫(‪ .‬ﻭﺒﺎﻟﺘﺎﻟﻲ ﻋﻨﺩ ﻭﺼﻭﻟﻨﺎ ﺇﻟﻰ ﺘﻌﻠﻴﻤﺔ ﺍﻹﺴﻨﺎﺩ‪ ،‬ﺘﻜﻭﻥ ﻗﻴﻤﺔ‬ ‫‪b‬‬ ‫ﺍﻟﺸﺭﻁ )‪ a‬ﻻ ﺘﺴﺎﻭﻱ‬
‫ﺒﺎﻟﻀﺭﻭﺭﺓ‪.‬‬

‫ﻤﺜﺎل‪ :2‬ﺤﺴﺎﺏ ﺍﻟﻌﺩﺩ ﺍﻷﻜﺒﺭ ﺒﻴﻥ ﻤﺠﻤﻭﻋﺔ ﺃﻋﺩﺍﺩ ﻴﺩﺨﻠﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ‬


‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ :‬ﻤﺠﻤﻭﻋﺔ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺘﻲ ﻴﺠﺭﻱ ﺇﺩﺨﺎﻟﻬﺎ‬
‫ﺍﻟﻨﺘﻴﺠﺔ‪ :‬ﺍﻟﻌﺩﺩ ﺍﻷﻜﺒﺭ‪.‬‬
‫ﻟﻨﺘﺄﻤل ﻗﻠﻴﻼﹰ‪ ،‬ﻫل ﺍﻟﻤﺴﺄﻟﺔ ﻤﻭﺼﻔﺔ ﺠﻴﺩﺍﹰ؟ ﻤﺎ ﺍﻟﻤﻘﺼﻭﺩ ﺒﻤﺠﻤﻭﻋﺔ؟ ﻤﺎ ﻫﻭ ﻋﺩﺩ ﻋﻨﺎﺼﺭ ﺍﻟﻤﺠﻤﻭﻋـﺔ؟‬
‫ﺃﻭ ﻜﻴﻑ ﻟﻨﺎ ﺃﻥ ﻨﻌﺭﻑ ﺃﻥ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻲ ﻴﺠﺭﻱ ﺇﺩﺨﺎﻟﻬﺎ ﻗﺩ ﺍﻨﺘﻬﺕ؟‬
‫ﻻ ﻋﺩﺩ ﺍﻟﻌﻨﺎﺼﺭ‪ ،‬ﺜﻡ ﺍﻟﻌﻨﺎﺼﺭ‪ .‬ﺃﻭ ﻨﻘـﻭﻡ ﺒﺈﺩﺨـﺎل‬
‫ﺇﺫﻥ‪ ،‬ﻟﺘﺤﺩﻴﺩ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﺘﻲ ﻨﺩﺨﻠﻬﺎ‪ ،‬ﻨﻌﻁﻲ ﺃﻭ ﹰ‬
‫ﺍﻟﻌﻨﺎﺼﺭ ﻭﻨﺼﻁﻠﺢ ﻋﻠﻰ ﺭﻤﺯ ﻴﺩل ﻋﻠﻰ ﻨﻬﺎﻴﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ )ﻋﻨﺼﺭ ﻏﻴﺭ ﻤﺄﻟﻭﻑ ﻤﺜل ‪.(999‬‬
‫ﻟﻨﻔﻜﺭ ﻤﻌﹰﺎ ﺒﺎﻟﺨﻭﺍﺭﺯﻤﻴﺔ‪ :‬ﺃﺭﺠﻭ ﺃﻻ ﺘﺒﺩﺃ ﺍﻟﺘﻔﻜﻴـﺭ ﺒﺤـل ﻤـﺴﺄﻟﺔ ﺒﻭﺍﺴـﻁﺔ ﺍﻟﺤﺎﺴـﻭﺏ‪ ،‬ﻻ ﺒﻠﻐـﺔ‬
‫ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪ ،‬ﻭﻗﻁﻌﹸﺎ ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒل ﻻ ﺘﻔﻜﺭ ﺒﻠﻐﺔ ﺒﺭﻤﺠﺔ ﻤﻌﻴﻨﺔ‪ ،‬ﺒل ﺩﻉ ﺘﻔﻜﻴﺭﻙ ﺍﻟﻁﺒﻴﻌﻲ ﺍﻟﺤﺩﺴﻲ‬

‫‪13‬‬
‫ﻴﺘﻠﻤﺱ ﻭﻴﺘﺨﻴل ﺍﻟﻤﺴﺄﻟﺔ ﻭﺍﺭﺴﻡ ﻭﺸﻁﺏ ﻋﻠﻰ ﻤﺴﻭﺩﺘﻙ ﻭﺍﻟﻤﻬﻡ ﺠﺩﹰﺍ ﺃﻥ ﺘﻜﻭﻥ ﻗﺎﺩﺭﹰﺍ ﻋﻠﻰ ﺤل ﺍﻟﻤﺴﺄﻟﺔ‬
‫ﻴﺩﻭﻴﹰﺎ )ﻓﻲ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺒﺴﻴﻁﺔ(‪ ،‬ﺘﺫﻜﺭ ﻟﻥ ﻴﻘﺩﻡ ﺍﻟﺤﺎﺴﻭﺏ ﺍﻟﺤل‪ .‬ﻨﺅﻜﺩ ﻟﻙ ﺃﻥ ﺘﻔﻜﻴﺭﻙ ﺍﻟﻌﺎﺩﻱ ﻟﻠﺤـل‬
‫ﻴﻤﻜﻥ ﺒﺠﻬﺩ ﻗﻠﻴل ﺼﻴﺎﻏﺘﻪ ﺒﻠﻐﺔ ﺨﻭﺍﺭﺯﻤﻴﺔ‪ ،‬ﺴﻴﻤﻜﻥ ﻓﻴﻤﺎ ﺒﻌﺩ ﻨﻘﻠﻬﺎ ﺒﺠﻬﺩ ﻗﻠﻴل ﺃﻴﻀﹰﺎ ﺇﻟﻰ ﺃﻴـﺔ ﻟﻐـﺔ‬
‫ﺒﺭﻤﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ‪.‬‬
‫ﻓﻔﻲ ﻤﺴﺄﻟﺘﻨﺎ ﻫﻨﺎ‪ ،‬ﺘﺨﻴل ﺃﻨﻙ ﺘﺭﻴﺩ ﻤﻌﺭﻓﺔ ﺍﻟﺸﺨﺹ ﺍﻷﻁﻭل ﺒﻴﻥ ﻤﺠﻤﻭﻋﺔ ﺃﺸﺨﺎﺹ ﻴـﺭﺩﻭﻥ ﺇﻟـﻰ‬
‫ﻏﺭﻓﺘﻙ ﺒﺎﻟﺘﺘﺎﻟﻲ‪ ،‬ﻭ ﺒﺎﻟﻁﺒﻊ ﻻ ﻴﻤﻜﻥ ﻟﻐﺭﻓﺘﻙ ﺃﻥ ﺘﺴﺘﻭﻋﺏ ﺇﻻ ﻋﺩﺩًﹰﺍ ﻤﺤﺩﺩﻭ ﺠﺩﹰﺍ ﻤﻥ ﺍﻟﻤﺠﻤﻭﻋﺔ‪ ،‬ﺃﻱ‬
‫ﻻ ﺘﺴﺘﻁﻴﻊ ﺍﻟﻨﻅﺭ ﺇﻟﻴﻬﻡ ﺠﻤﻴﻌﹰﺎ ﻟﺘﻘﻭل ﺒﻨﻅﺭﺓ ﺨﺎﻁﻔﺔ ﻫﺫﺍ ﻫﻭ ﺍﻷﻁﻭل‪.‬‬
‫ﺍﻟﺤل ﻫﻭ ﻜﺎﻟﺘﺎﻟﻲ‪ ،‬ﺘﺩﺨل ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل‪ ،‬ﺘﻌﺘﺒﺭﻩ ﺍﻷﻁﻭل ﺇﻟﻰ ﺃﻥ ﻴﺜﺒﺕ ﺍﻟﻌﻜﺱ‪ ،‬ﺃﻱ ﺘﻜﺭﺭ‬
‫ﺇﺩﺨﺎل ﺍﻟﻌﻨﺎﺼﺭ‪ ،‬ﺘﻘﺎﺭﻥ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺩﺨل ﻤﻊ ﻤﻥ ﺍﻋﺘﺒﺭﺘﻪ ﺍﻷﻁﻭل ﻓﺈﻥ ﻜﺎﻥ ﺃﻁﻭل ﻤﻨﻪ‬
‫ﺘﺠﻌﻠﻪ ﻴﺤل ﻤﻜﺎﻨﻪ‪ ،‬ﻭﻫﻜﺫﺍ ﺤﺘﻰ ﻨﻬﺎﻴﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ‪.‬‬

‫ﺇﻨﻬﺎ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ‪ ،‬ﻭﻤﺎ ﻋﻠﻴﻨﺎ ﺇﻻ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻤﺎ ﻜﺘﺒﻨﺎﻩ ﺒﺨﻁﻭﺍﺕ ﻤﺤﺩﺩﺓ‪ ،‬ﻭﺒﻬﻴﻜﻠﻴﺔ ﻭﺍﻀﺤﺔ ﻭﺩﻗﻴﻘـﺔ ﻻ‬
‫ﻟﺒﺱ ﻓﻴﻬﺎ‪ ،‬ﺒﻌﺩ ﺃﻥ ﻨﺤﺩﺩ ﺍﻟﻤﺘﺤﻭﻻﺕ ﺍﻟﻤﻌﺒﺭﺓ ﻋﻤﺎ ﻨﻌﺎﻟﺠﻪ‪.‬‬
‫ﺘﺩﺨل ﺍﻟﻌﻨﺼﺭ ﺍﻷﻭل‪ ،‬ﺘﻌﺘﺒﺭﻩ ﺍﻷﻁﻭل ﺇﻟﻰ ﺃﻥ ﻴﺜﺒﺕ ﺍﻟﻌﻜﺱ‪ ،‬ﺃﻱ ﺘﻜﺭﺭ ﺇﺩﺨﺎل ﺍﻟﻌﻨﺎﺼـﺭ‪ ،‬ﺘﻘـﺎﺭﻥ‬
‫ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺩﺨل ﻤﻊ ﻤﻥ ﺍﻋﺘﺒﺭﺘﻪ ﺍﻷﻁﻭل ﻓﺈﻥ ﻜﺎﻥ ﺃﻁﻭل ﻤﻨﻪ ﺘﺠﻌﻠﻪ ﻴﺤل ﻤﻜﺎﻨﻪ‪ ،‬ﻭﻫﻜﺫﺍ ﺤﺘﻰ ﻨﻬﺎﻴﺔ‬
‫ﺍﻟﻤﺠﻤﻭﻋﺔ‪.‬‬
‫ﻫﻭ ﺍﻟﻤﺘﺤﻭل ﺍﻟﺫﻱ ﻨﺤﺘﻔﻅ ﻓﻴﻪ ﺒﺎﻟﻌﻨﺼﺭ ﺍﻷﻜﺒﺭ‪.‬‬ ‫‪kmax‬‬ ‫ﻫﻭ ﻋﻨﺼﺭ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﻤﺩﺨل‪ ،‬ﻭ‬ ‫‪k‬‬ ‫ﻟﻴﻜﻥ‬
‫ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ‪:‬‬
‫ﻼ ﻟﻨﻬﺎﻳﺔ اﻟﻤﺠﻤﻮﻋﺔ‬
‫اﺳﺘﺨﺪﻣﻨﺎ اﻟﻌﺪد ‪ 999‬دﻟﻴ ً‬
‫‪k‬‬ ‫ﺍﻗﺭﺃ‬
‫‪kmax Å k‬‬

‫( ﻜﺭﺭ‬ ‫‪999‬‬ ‫ﻻ ﻴﺴﺎﻭﻱ‬ ‫‪k‬‬ ‫ﻤﺎﺩﺍﻡ )‬


‫إذا آﺎن اﻟﻌﺪد اﻷآﺒﺮ هﻮ ‪ 999‬ﻓﺎﻟﻤﺠﻤﻮﻋﺔ‬
‫ﺧﺎﻟﻴﺔ ﻓﻼ ﻧﻜﺘﺐ ﻧﺘﻴﺠﺔ‬
‫ﺇﺫﺍ )‪ ( k > kmax‬ﻨﻔﱢﺫ‬
‫‪kmax Å k‬‬
‫‪k‬‬ ‫ﺍﻗﺭﺃ‬

‫( ﻨﻔﱢﺫ‬ ‫‪999‬‬ ‫ﻻ ﻴﺴﺎﻭﻱ‬ ‫‪kmax‬‬ ‫ﺇﺫﺍ )‬


‫ﺍﻜﺘﺏ ‪”max= ”, kmax‬‬

‫‪14‬‬
‫ﺘﺩﺭﻴﺏ‪ :‬ﺍﺨﺘﺒﺭ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﻴﺩﻭﻴﹸﺎ ﻓﻲ ﺤﺎﻻﺕ ﻤﺠﻤﻭﻋﺎﺕ ﻤﺨﺘﻠﻔﺔ‪) .‬ﻻ ﺘﻨﺱ ﺍﺨﺘﺒﺎﺭ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺤﺩﻴﺔ‪:‬‬
‫ﺤﺎﻟﺔ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﻋﻨﺼﺭ ﻭﺍﺤﺩ‪ ،‬ﻭ ﺤﺎﻟﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﺨﺎﻟﻴﺔ ﺤﻴﺙ ﺍﻟﺩﺨل ﻫﻨﺎ ﻴﻘﺘﺼﺭ ﻓﻘـﻁ ﻋﻠـﻰ‬
‫ﻨﻬﺎﻴﺔ ﺍﻟﻤﺠﻤﻭﻋﺔ ﺃﻱ‪.(999‬‬

‫‪ .4‬ﺍﺴﺘﺨﺩﺍﻡ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻓﻲ ﺍﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ )ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ(‬


‫ﻓﻲ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﺘﻜﻭﻥ ﺍﻟﻤﺴﺄﻟﺔ ﻓﻴﻬﺎ ﺒﺴﻴﻁﺔ‪ ،‬ﻴﻤﻜﻥ ﺍﻟﺘﻌﺒﻴﺭ ﺒﺎﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻷﺴﺎﺴﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‬
‫ﻋﻥ ﺍﻟﺤل‪ ،‬ﻭﻴﻤﻜﻥ ﺒﺎﻟﺘﺎﻟﻲ ﻨﻘﻠﻪ ﻤﺒﺎﺸﺭ ﹰﺓ ﺘﻘﺭﻴﺒﹰﺎ ﺇﻟﻰ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ‪ .‬ﺃﻤﺎ ﻓـﻲ ﺍﻟﻤـﺴﺎﺌل‬
‫ﺍﻟﻤﻌﻘﺩﺓ ﻭﺍﻟﻁﻭﻴﻠﺔ‪ ،‬ﻓﻼ ﺒﺩ ﻤﻥ ﺍﻟﻘﻴﺎﻡ ﺒﺒﻨﺎﺀ ﺍﻟﺤل ﺘﺩﺭﻴﺠﻴﹰﺎ‪ .‬ﻭﺫﻟﻙ ﺒﺎﻋﺘﻤﺎﺩ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﻨﺎﺯﻟﻴﺔ ﻓﻲ ﺘﻌﺒﻴﺭﻨﺎ‬
‫ﻋﻥ ﺍﻟﺤل‪ ،‬ﻨﻘﻭﻡ ﺒﺘﺠﺯﺌﺔ ﺍﻟﺤل ﺍﻟﻤﻘﺘﺭﺡ ﺇﻟﻰ ﺨﻁﻭﺍﺕ ﺘﻤﺜل ﺍﻟﻭﻅﺎﺌﻑ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻥ ﺍﻟﺤـل‬
‫)ﺍﻟﺒﺭﻨﺎﻤﺞ( ﺍﻟﻘﻴﺎﻡ ﺒﻪ‪ ،‬ﺜﻡ ﻴﻌﺎﺩ ﺍﻟﻨﻅﺭ ﻓﻲ ﻜل ﻭﻅﻴﻔﺔ ﻤﻌﻘﺩﺓ ﻭﻜﺄﻨﻬﺎ ﻤﺴﺄﻟﺔ ﺘﺘﻁﻠﺏ ﺤﻼﹰ‪ ،‬ﻭﻫﻲ ﺒﺩﻭﺭﻫﺎ‬
‫ﺘﺘﺄﻟﻑ ﻤﻥ ﻋﺩﺓ ﺨﻁﻭﺍﺕ ﺠﺯﺌﻴﺔ‪ ،‬ﻭﻫﻜﺫﺍ‪ ....‬ﻭﺒﻬﺫﻩ ﺍﻵﻟﻴﺔ ﻴﻜﺭﺭ ﻫﺫﺍ ﺍﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﻭﺍﻟﻲ ﺤﺘﻰ ﻨـﺼل‬
‫ﺇﻟﻰ ﺨﻁﻭﺍﺕ ﻗﺎﺒﻠﺔ ﻟﻠﺘﺤﻘﻴﻕ ﻤﺒﺎﺸﺭ ﹰﺓ ﺒﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪.‬‬
‫ﻤﺜﺎل ﻋﻥ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻷﺴﺎﺴﻴﺔ ﺜﻡ ﺍﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ‪:‬‬
‫ﺍﻟﻤﺩﺨل‪.‬‬ ‫‪M‬‬ ‫ﺤﺘﻰ‬ ‫‪1‬‬ ‫ﻟﻨﺼﻑ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺤﺴﺎﺏ ﻤﺠﻤﻭﻉ ﺍﻷﻋﺩﺍﺩ ﻤﻥ‬
‫ﺨﻁﻭﺍﺕ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﻌﺎﻤﺔ‪:‬‬

‫ﺇﺩﺨﺎل ﺍﻟﻤﻌﻁﻴﺎﺕ‪.‬‬ ‫‪-1‬‬ ‫‪M‬‬ ‫ﺍﻗﺭﺃ‬


‫ﺤﺴﺎﺏ ﺍﻟﻨﺘﺎﺌﺞ‪.‬‬ ‫‪-2‬‬ ‫‪SÅ0‬‬
‫‪iÅ1‬‬
‫ﺇﻅﻬﺎﺭ ﺍﻟﻨﺘﺎﺌﺞ‬ ‫‪-3‬‬
‫( ﻜﺭﺭ‬ ‫‪i≤M‬‬ ‫ﻤﺎﺩﺍﻡ )‬
‫ﺇﻟﻰ‪:‬‬ ‫‪2‬‬ ‫ﻴﻤﻜﻥ ﺃﻥ ﻨﻘﺴﻡ ﺍﻟﺨﻁﻭﺓ‬
‫‪SÅS+I‬‬
‫‪ -1-2‬ﺇﺴﻨﺎﺩ ﺍﻟﻘﻴﻡ ﺍﻟﺒﺩﺍﺌﻴﺔ ﻟﻠﻤﺘﺤﻭﻻﺕ‪.‬‬ ‫‪i Å i +1‬‬

‫‪ -2-2‬ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﺤﺴﺎﺒﻴﺔ‪.‬‬ ‫‪S‬‬ ‫ﺍﻜﺘﺏ‬

‫ﻤﻨﻬﺠﻴﺔ ﺤل ﺍﻟﻤﺴﺎﺌل ﻭﺍﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ ﻭﺍﻟﺘﻌﺒﻴﺭ ﺒﻠﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪:‬‬


‫‪ -1‬ﻓﻬﻡ ﺍﻟﻤﺴﺄﻟﺔ ﻭﺘﺤﻠﻴﻠﻬﺎ ﺒﺩﻗﺔ‪ ،‬ﺃﻱ ﻤﻌﺭﻓﺔ ﺍﻟﻤﻌﻁﻴﺎﺕ )ﺃﻭ ﺍﻟﻤﺩﺨﻼﺕ( ﺍﻟﻤﻁﻠﻭﺏ ﻤﻌﺎﻟﺠﺘﻬـﺎ ﻭﺍﻟﻨﺘـﺎﺌﺞ )ﺃﻭ‬
‫ﺍﻟﻤﺨﺭﺠﺎﺕ( ﺍﻟﻤﻁﻠﻭﺏ ﺍﻟﺤﺼﻭل ﻋﻠﻴﻬﺎ‪ ،‬ﻭﺼﻴﺎﻏﺔ ﻫﺫﻩ ﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﺒﻭﻀﻭﺡ ﻤﺎ ﺃﻤﻜﻥ‪ .‬ﻭﻴﻤﻜـﻥ ﺍﺴـﺘﺨﺩﺍﻡ‬
‫ﺼِﻑ ﺍﻟﻌﻼﻗﺔ ﺒﻴﻥ ﺍﻟﻨﺘﺎﺌﺞ ﻭﺍﻟﻤﻌﻁﻴﺎﺕ )ﺇﻥ ﻭﺠﺩﺕ ﻫﺫﻩ ﺍﻟﻌﻼﻗﺎﺕ(‪.‬‬‫ﺍﻟﻌﻼﻗﺎﺕ ﺍﻟﺭﻴﺎﻀﻴﺔ ﺍﻟﺘﻲ ﺘﻭ َ‬
‫‪ -2‬ﻭﻀﻊ ﺘﺼﻭﺭ ﻟﺤل ﺍﻟﻤﺴﺄﻟﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﻨﺎﺯﻟﻴﺔ‪ ،‬ﺃﻱ ﻜﺘﺎﺒﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴـﺔ ﺘـﺩﺭﻴﺠﻴﹰﺎ ﺒﻁﺭﻴﻘـﺔ‬
‫ﺍﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ ﻭﺍﺴﺘﺨﺩﺍﻡ ﻫﻴﺎﻜل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻷﺴﺎﺴﻴﺔ )ﺍﻟﺘﻔﺭﻉ ﺍﻟـﺸﺭﻁﻲ‪ ،‬ﺍﻟﺘﻜـﺭﺍﺭ( ﺤـﻴﻥ ﺍﻟﺤﺎﺠـﺔ‪،‬‬
‫ﻭﺍﺴﺘﻌﻤﺎل ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺴﻴﻁﺔ ﻋﻨﺩ ﺍﻟﻭﺼﻭل ﺇﻟﻴﻬﺎ )ﻗﺭﺍﺀﺓ‪ ،‬ﻜﺘﺎﺒﺔ‪ ،‬ﺇﺴﻨﺎﺩ(‪.‬‬

‫‪15‬‬
‫ﻋﻨﺩ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﺩﻨﻰ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ ﻨﻜﻭﻥ ﻗﺩ ﺤﺼﻠﻨﺎ ﻋﻠﻰ ﺨﻭﺍﺭﺯﻤﻴﺔ ﻜﺎﻤﻠﺔ ﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ ﺨﻭﺍﺭﺯﻤﻴـﺔ‬ ‫‪-3‬‬

‫ﻤﻔﺼﻠﺔ‪ ،‬ﻴﻤﻜﻥ ﻨﻘﻠﻬﺎ ﺇﻟﻰ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻤﻥ ﻗﺒﻠﻨﺎ‪.‬‬

‫ﺇﻥ ﻫﺫﺍ ﺍﻹﻁﺎﺭ ﺍﻟﻌﺎﻡ ﻫﺎﻡ ﺠﺩﹰﺍ ﻭﻫﻭ ﺍﻷﺴﺎﺱ ﻟﻜل ﺍﻟﺒﺭﻤﺠﺔ‪ .‬ﻭﻟﻜﻨﻙ ﺘﻘﻭل ﻟﻲ ﻓﻬﻤﺘﻪ ﻭﺍﻨﺘﻬﻰ ﺍﻷﻤﺭ!‬
‫ﺃﻭ ﹰﻻ‪ :‬ﻴﺠﺏ ﺃﻥ ﺘﻤﺎﺭﺴﻪ ﻋﻠﻰ ﻨﺤ ٍﻭ ﻤﺴﺘﻤﺭ‪ ،‬ﻋﺒﺭ ﺤل ﺠﻤﻴﻊ ﺍﻟﻤﺴﺎﺌل ﺍﻟﺘﻲ ﺘﺒﺭﻤﺠﻬﺎ‪ ،‬ﺤﺘﻰ ﺒﻌﺩ ﺘﻌﻠﻤﻙ‬
‫ﻟﻠﻐﺎﺕ ﺒﺭﻤﺠﺔ ﻓﻌﻠﻴﺔ‪ ،‬ﻟﻴﺘﺭﺴﺦ ﻭﻴﺼﺒﺢ ﺠﺯﺀﹰﺍ ﻤﻥ ﺸﺨﺼﻴﺘﻙ ﺍﻟﺒﺭﻤﺠﻴﺔ‪.‬‬
‫ﺜﺎﻨﻴ ﹰﺎ‪ :‬ﻟﻨﺭﻯ ﻫل ﺃﺩﺭﻜﻨﺎ ﺒﺩﻗﺔ ﻫﺫﻩ ﺍﻟﻤﻔﺎﻫﻴﻡ‪ ،‬ﺘﻤﻌﻥ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺓ "ﻋﻨﺩ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺃﺩﻨﻰ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ"‪،‬‬
‫ﻤﺎ ﻫﻲ ﺃﺩﻨﻰ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ؟ ﻭﻋﻥ ﺃﻱ ﻤﺴﺘﻭﻴﺎﺕ ﻨﺘﺤﺩﺙ‪...‬؟ ﺍﻟﻤﺴﺘﻭﻴﺎﺕ ﻓﻲ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴـﺎﺕ‪...‬ﺃﻡ‬
‫ﻓﻲ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﻤﻌﻴﻨﺔ‪...‬؟‬
‫ﺇﻥ ﺍﻟﻬﺩﻑ ﺍﻟﻨﻬﺎﺌﻲ ﻫﻭ ﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ ﺒﻠﻐﺔ ﺒﺭﻤﺠﺔ ﻴﻘﻭﻡ ﺍﻟﺤﺎﺴﻭﺏ ﺒﺘﻨﻔﻴﺫﻩ ﻟﺘﺤﻘﻴﻕ ﺍﻟﻭﻅﺎﺌﻑ ﺍﻟﻤﻁﻠﻭﺒﺔ‬
‫ﻓﻲ ﺍﻟﻤﺴﺄﻟﺔ ﺍﻟﺘﻲ ﻨﺒﺭﻤﺠﻬﺎ‪ .‬ﻭﻗﺩ ﺍﺨﺘﺭﻨﺎ ﻟﻐﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ‪ ،‬ﻭ ﺘﺭﻜﻴﺯﻨﺎ ﺴﻴﻜﻭﻥ ﻋﻠﻰ ﺘﻠﻙ‬
‫ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺘﺤﻘﻕ ﻟﻨﺎ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ‪ .‬ﻭﻟﻜﻥ ﻫﺫﻩ ﺍﻟﻠﻐﺎﺕ ﺘﺨﺘﻠﻑ ﻓﻲ ﻤﺴﺘﻭﻯ )ﻏﻨﻰ( ﺍﻟﻭﻅـﺎﺌﻑ‬
‫ﺍﻟﺫﻱ ﺘﻘﺩﻤﻪ‪ .‬ﻭﻤﻌﺭﻓﺘﻨﺎ ﺒﺎﻟﻭﻅﺎﺌﻑ ﺍﻟﺘﻲ ﺘﻘﺩﻤﻬﺎ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺍﻟﺒﺭﻤﺠﺔ ﻴﺤﺩﺩ ﻟﻨـﺎ ﺍﻟﻤـﺴﺘﻭﻯ‬
‫ﺍﻷﺩﻨﻰ ﻟﻠﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ ﺍﻟﺫﻱ ﻨﺴﻌﻰ ﺇﻟﻴﻪ‪.‬‬

‫‪m‬‬ ‫ﻤﺜﺎل‪ :‬ﺇﻴﺠﺎﺩ ﺠﻤﻴﻊ ﺍﻟﻘﻭﺍﺴﻡ ‪ d‬ﻟﻠﻌﺩﺩ ﺍﻟﺼﺤﻴﺢ ﺍﻟﻤﻭﺠﺏ‬


‫ﺍﻟﺘﻲ ﺘﻘﺴﻡ ‪.m‬‬ ‫‪d‬‬ ‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪ :‬ﺍﻟﻌﺩﺩ ﺍﻟﺼﺤﻴﺢ ﺍﻟﻤﻭﺠﺏ ‪ .m‬ﺍﻟﻨﺘﺎﺌﺞ‪ :‬ﺍﻷﻋﺩﺍﺩ‬
‫ﻴﺴﺎﻭﻱ ﺍﻟﺼﻔﺭ‪.‬‬ ‫‪d‬‬ ‫ﻋﻠﻰ‬ ‫‪m‬‬ ‫ﺇﺫﺍ ﻜﺎﻥ ﺒﺎﻗﻲ ﻗﺴﻤﺔ‬ ‫‪m‬‬ ‫ﺃﻨﻪ ﻗﺎﺴﻡ ﻟﻠﻌﺩﺩ‬ ‫‪d‬‬ ‫ﺍﻟﻁﺭﻴﻘﺔ‪ :‬ﻨﻘﻭل ﻋﻥ ﻋﺩﺩ‬
‫ﻭﺍﻟﻌﺩﺩ ﻨﻔﺴﻪ‪.‬‬ ‫‪1‬‬ ‫ﻭﺤﺴﺏ ﻫﺫﺍ ﺍﻟﺘﻌﺭﻴﻑ ﻫﻨﺎﻙ ﻗﺎﺴﻤﺎﻥ ﺒﺩﻴﻬﻴﺎﻥ‪ :‬ﺍﻟﻌﺩﺩ‬
‫ﺃﻥ ﻴﻜﻭﻥ ﻗﺎﺴﻤﹰﺎ ﻟﻪ‪.‬‬ ‫‪m‬‬ ‫ﺃﻜﺒﺭ ﻤﻥ‬ ‫‪d‬‬ ‫ﻻ ﻴﻤﻜﻥ ﻟﻌﺩﺩ ﺃﻜﺒﺭ‬
‫ﻓﺈﻥ‬ ‫‪m-1‬‬ ‫‪... ،3 ،‬ﻋﻠﻰ ﺍﻟﺘﻭﺍﻟﻲ ﺤﺘﻰ‬ ‫‪2‬‬ ‫ﻭﺒﺎﻟﺘﺎﻟﻲ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ ﺒﻜل ﺒﺴﺎﻁﺔ ﻫﻲ ﺘﺠﺭﻴﺏ ﺍﻷﻋﺩﺍﺩ ﻤﻥ‬
‫ﻋﻠﻴﻬﺎ ﺼﻔﺭﹰﺍ ﺘﻜﻭﻥ ﻗﺎﺴﻤﹰﺎ ﻟﻠﻌﺩﺩ ‪.m‬‬ ‫‪m‬‬ ‫ﻜﺎﻥ ﺒﺎﻗﻲ ﻗﺴﻤﺔ‬
‫ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ‪:‬‬
‫‪m‬‬ ‫ﺍﻗﺭﺃ‬
‫‪dÅ1‬‬
‫( ﻜﺭﺭ‬ ‫‪m‬‬ ‫ﺃﺼﻐﺭ ﺃﻭ ﻴﺴﺎﻭﻱ‬ ‫‪d‬‬ ‫ﻤﺎﺩﺍﻡ )‬
‫‪rÅ‬‬ ‫(‬ ‫‪d‬‬ ‫ﻋﻠﻰ‬ ‫‪m‬‬ ‫)ﺒﺎﻗﻲ ﻗﺴﻤﺔ‬
‫ﺇﺫﺍ )‪ r‬ﻴﺴﺎﻭﻱ ‪ (0‬ﻨﻔﱢﺫ‬
‫‪d‬‬ ‫ﺍﻜﺘﺏ‬
‫‪dÅd+1‬‬

‫‪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‬‬

‫( ﻜﺭﺭ‬ ‫‪m‬‬ ‫ﺃﺼﻐﺭ ﺃﻭ ﻴﺴﺎﻭﻱ‬ ‫‪d‬‬ ‫ﻤﺎﺩﺍﻡ )‬


‫‪r Å( d‬‬ ‫ﻋﻠﻰ‬ ‫‪m‬‬ ‫)ﺒﺎﻗﻲ ﻗﺴﻤﺔ‬

‫ﺇﺫﺍ )‪ r‬ﻴﺴﺎﻭﻱ ‪ (0‬ﻨﻔﱢﺫ‬


‫‪d‬‬ ‫ﺍﻜﺘﺏ‬

‫‪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‬‬ ‫ﺍﻟﻌﻼﻗﺔ ﺍﻟﺭﻴﺎﻀﻴﺔ‪:‬‬

‫‪n, r‬‬ ‫ﺍﻟﻨﺘﺎﺌﺞ‪:‬‬ ‫‪m, d‬‬ ‫ﺍﻟﻤﻌﻁﻴﺎﺕ‪:‬‬


‫‪.‬‬ ‫‪d‬‬ ‫ﺍﻟﻌﺩﺩ‬ ‫‪m‬‬ ‫ﺘﺤﺘﻭﻱ ‪m‬؟ ﻨﻌﺩ ﻜﻡ ﻤﺭﺓ ﻨﺴﺘﻁﻴﻊ ﺃﻥ ﻨﻁﺭﺡ ﻤﻥ‬ ‫‪d‬‬ ‫ﻓﻜﺭﺓ ﺍﻟﺤل‪ :‬ﻜﻡ‬
‫ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺔ‪:‬‬
‫‪rÅm‬‬
‫‪nÅ0‬‬
‫ﺃﻜﺒﺭ ﻤﻥ ‪ (d‬ﻜﺭﺭ‬ ‫‪r‬‬ ‫ﻤﺎﺩﺍﻡ )‬
‫‪r Å r -d‬‬
‫‪nÅn+1‬‬

‫ﺍﻗﺘﺼﺭﺕ ﺃﻤﺜﻠﺘﻨﺎ ﻋﻠﻰ ﻨﻤﻁ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﻤﺘﺤﻭﻻﺕ ﻫﻭ ﻨﻤﻁ ﺍﻷﻋﺩﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ‪ ،‬ﻻ ﻴﺘﻐﻴﺭ ﺸﻲﺀ ﻋﻠـﻰ‬
‫ﻤﺴﺘﻭﻯ ﺨﻭﺍﺭﺯﻤﻴﺔ ﺍﻟﺤل ﻤﻊ ﻤﺘﺤﻭﻻﺕ ﻤﻥ ﻨﻤﻁ ﺃﻋﺩﺍﺩ ﺤﻘﻴﻘﻴﺔ‪ ،‬ﻓﻲ ﺤﺎل ﻜﺎﻨﺕ ﻤﻌﻁﻴـﺎﺕ ﺍﻟﻤـﺴﺄﻟﺔ‬
‫ﻭﺤﻠﻬﺎ ﻴﺘﻁﻠﺏ ﺫﻟﻙ‪ .‬ﻭﺇﻟﻴﻙ ﻤﺴﺄﻟﺔ ﻨﻤﻭﺫﺠﻴﺔ ﻭﻤﺄﻟﻭﻓﺔ ﺤﺴﺎﺒﻴﹰﺎ ﻟﺩﻴﻙ‪.‬‬

‫ﻤﺜﺎل‪ :‬ﺤل ﻤﻌﺎﺩﻟﺔ ﻤﻥ ﺍﻟﺩﺭﺠﺔ ﺍﻟﺜﺎﻨﻴﺔ‬


‫)‪( a.x2 + b.x + c = 0‬‬

‫ﺃﻋﺩﺍﺩ ﺤﻘﻴﻘﻴﺔ )‪ 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‬‬

‫ﺇﺫﺍ ) ‪ ( ∆ > 0‬ﻨﻔﱢﺫ‬


‫‪x1Å (−b − ∆ ) / 2a‬‬
‫‪x2 Å‬‬ ‫‪(−b + ∆ ) / 2a‬‬
‫ﺍﻜﺘﺏ ‪”x1=”, x1,” x2=”, x2‬‬
‫ﺇﺫﺍ ) ‪ ( ∆ = 0‬ﻨﻔﱢﺫ‬
‫)‪x0 Å -b /(2*a‬‬
‫ﺍﻜﺘﺏ ‪”x0=”, x0‬‬
‫ﺇﺫﺍ ) ‪ ( ∆ < 0‬ﻨﻔﱢﺫ‬
‫ﺍﻜﺘﺏ ”‪” no real solution‬‬

‫ﺍﻟﺨﻼﺼﺔ‬
‫ﻴﻌﺘﺒﺭ ﻫﺫﺍ ﺍﻟﻔﺼل ﻫﻭ ﺍﻷﺴﺎﺱ ﻟﺘﻌﻠﻡ ﻤﺒﺎﺩﺉ ﺍﻟﺒﺭﻤﺠﺔ ﺒﺸﻜل ﻗﻭﻱ ﻭﺭﺍﺴﺦ‪.‬‬
‫ﺘﻌﻠﻤﻨﺎ ﻓﻴﻪ ﺃﻨﻪ ﻴﻤﻜﻥ ﺍﻟﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺤل ﻟﻤﺴﺄﻟﺔ ﺒﻭﺍﺴﻁﺔ ﺍﻟﺤﺎﺴﻭﺏ )ﺒﺭﻤﺠﺔ ﺍﻟﺤﺎﺴﻭﺏ( ﺒﻠﻐﺔ ﻁﺒﻴﻌﻴـﺔ‬
‫‪ .pseudo‬ﻋﺭﻓﻨﺎ ﻓﻴﻬﺎ ﺨﻤـﺱ ﺘﻌﻠﻴﻤـﺎﺕ‬ ‫‪code‬‬ ‫ﻭﻟﻜﻥ ﻤﺅﻁﺭﺓ ﻭﻤﻬﻴﻜﻠﺔ ﺃﺴﻤﻴﻨﺎﻫﺎ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‬
‫ﺃﺴﺎﺴﻴﺔ ﻜﺎﻓﻴﺔ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻠﻰ ﻨﺤﻭ ﻻ ﻟﺒﺱ ﻓﻴﻪ ﻋﻥ ﻁﺭﻴﻘﺘﻨﺎ ﻟﻠﺤل )ﺨﻭﺍﺭﺯﻤﻴﺘﻨﺎ(‪.‬‬

‫ﻤﻨﻬﺠﻴﺘﻨﺎ ﻓﻲ ﺍﻟﺤل ﻫﻭ ﺍﻟﺘﺒﺴﻴﻁ ﺍﻟﻤﺘﺘﺎﻟﻲ ﻭﺍﻟﺘﻌﺒﻴﺭ ﻋﻨﻪ ﺒﺒﻨﻰ ﺘﺤﻜﻡ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤﻬﻴﻜﻠﺔ‪.‬‬
‫ﺒﺄﻨﻪ ﻤﻥ ﺍﻟﻤﻤﻜـﻥ ﻜﺘﺎﺒـﺔ ﺍﻟﺒـﺭﺍﻤﺞ‬ ‫‪Jacopini‬‬ ‫ﻭ‬ ‫‪Bohm‬‬ ‫ﻭﻗﺩ ﺒﺭﻫﻨﺕ ﺍﻷﺒﺤﺎﺙ ﺍﻟﺘﻲ ﻗﺎﻡ ﺒﻬﺎ ﻜل ﻤﻥ‬
‫)ﺍﻟﻤﺴﺎﺭ ﺍﻟﻌﺎﺩﻱ ﺃﻱ‬ ‫‪Sequence‬‬ ‫‪structure‬‬ ‫ﺒﺎﺴﺘﺨﺩﺍﻡ ﺜﻼﺜﺔ ﺒﻨﻰ ﻟﻠﺘﺤﻜﻡ ﻓﻘﻁ ﻭﻫﻲ‪ :‬ﺍﻟﺒﻨﻴﺔ ﺍﻟﺘﺴﻠﺴﻠﻴﺔ‬
‫ﻭﺒﻨﻴﺔ ﺍﻟﺘﻜﺭﺍﺭ ‪.repetition structure‬‬ ‫‪Selection structure‬‬ ‫ﺘﻨﻔﻴﺫ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ( ﻭﺒﻨﻴﺔ ﺍﻻﺨﺘﻴﺎﺭ‬

‫ﻤﻥ ﺒﻴﻥ ﺒﻨﻰ ﺍﻟﺘﺤﻜﻡ ﺍﻷﺴﺎﺴﻴﺔ‪.‬‬ ‫‪Goto‬‬ ‫ﻻﺤﻅ ﺃﻨﻪ ﻻ ﻭﺠﻭﺩ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻘﻔﺯ‬
‫ﻟﺘﺼﺒﺢ ﺒﺎﻟﺘـﺎﻟﻲ‬ ‫‪Goto‬‬ ‫ﺒﺭﻫﻨﺕ ﻫﺫﻩ ﺍﻷﺒﺤﺎﺙ ﺃﻨﻪ ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﻜﺘﺎﺒﺔ ﺒﺭﺍﻤﺞ ﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺃﻴﺔ ﺘﻌﻠﻴﻤﺔ‬
‫ﻫﻲ ﺍﻟﺘﺤﺩﻱ ﺍﻟﺫﻱ ﻭﺍﺠﻪ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻓﻲ ﺃﺴﻠﻭﺏ‬ ‫‪Goto‬‬ ‫ﻋﻤﻠﻴﺔ ﻜﺘﺎﺒﺔ ﺍﻟﺒﺭﺍﻤﺞ ﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺘﻌﻠﻴﻤﺎﺕ‬
‫ﻜﺘﺎﺒﺘﻬﻡ ﻟﺒﺭﺍﻤﺠﻬﻡ )ﺍﻟﺫﻴﻥ ﺍﻋﺘﺎﺩﻭﺍ ﻁﺭﻴﻘﺔ ﺍﻟﺘﻔﻜﻴﺭ ﻭﻓﻕ ﺁﻟﻴﺔ ﺘﻨﻔﻴﺫ ﺍﻟﺤﺎﺴﻭﺏ(‪ .‬ﻭﻟﻜﻥ ﻟﻡ ﻴﺘﻡ ﺍﻟﺤـﺩﻴﺙ‬
‫ﻋﻥ ﺃﺴﻠﻭﺏ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﻤ‪‬ﻬﻴﻜﻠﺔ ﺒﺸﻜل ﺠﺩﻱ ﺇﻻ ﻓﻲ ﻓﺘﺭﺓ ﺍﻟﺴﺒﻌﻴﻨﺎﺕ‪ .‬ﻭﻟﻘﺩ ﺃﻅﻬﺭ ﻫﺫﺍ ﺍﻷﺴﻠﻭﺏ ﻨﺘﺎﺌﺞ‬

‫‪19‬‬
‫ﺠﻴﺩﺓ ﺠﺩﺍ ً‪ ،‬ﺤﻴﺙ ﻻﺤﻅﺕ ﻤﺠﻤﻭﻋﺎﺕ ﺘﻁﻭﻴﺭ ﺍﻟﺒﺭﺍﻤﺞ ﻭﺠﻭﺩ ﺇﻤﻜﺎﻨﻴـﺎﺕ ﻟﺨﻔـﺽ ﺯﻤـﻥ ﺘﻁـﻭﻴﺭ‬
‫ﺞ‪ .‬ﻴﻌﻭﺩ ﺍﻟﻔﻀل ﻓﻲ ﺫﻟﻙ ﺇﻟﻰ ﻜﻭﻥ ﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻤًﻬﻴﻜﻠﺔ ﺒـﺭﺍﻤﺞ ﻭﺍﻀـﺤﺔ ﻭﺴـﻬﻠﺔ ﺍﻟﻔﺤـﺹ‬
‫ﺍﻟﺒﺭﺍﻤ ً‬
‫ﻭﺍﻟﺘﻌﺩﻴل ﺒﺎﻹﻀﺎﻓﺔ ﺇﻟﻰ ﺘﺯﺍﻴﺩ ﺇﻤﻜﺎﻨﻴﺔ ﺨﻠﻭﻫﺎ ﻤﻥ ﺍﻟﻌﻴﻭﺏ ﺒﺎﻟﺩﺭﺠﺔ ﺍﻷﻭﻟﻰ‪.‬‬

‫ﺃﻭ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺼﻨﺩﻭﻗﻲ ﻟﻠﺘﻌﺒﻴﺭ ﻋﻥ ﺍﻟﺨﻭﺍﺭﺯﻤﻴـﺔ‪ ،‬ﻭﻗـﺩ‬ ‫‪flowchart‬‬ ‫ﻴﺴﺘﺨﺩﻡ ﺃﻴﻀﹰﺎ ﻤﺨﻁﻁ ﺍﻟﺘﺩﻓﻕ‬
‫ﺃﺩﺭﺠﻨﺎ ﺸﻜﻠﻪ ﺍﻟﻌﺎﻡ‪ .‬ﻭﻫﻭ ﺘﻤﺜﻴل ﺒﻴﺎﻨﻲ ﻟﻠﺨﻭﺍﺭﺯﻤﻴﺔ ﺃﻭ ﻟﺠﺯﺀ ﻤﻨﻬﺎ ﻭﻴ‪‬ﺭﺴﻡ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺒﻌﺽ ﺍﻟﺭﻤـﻭﺯ‬
‫ﻥ ﺨﺎﺼﺔ ﺒﻬﺎ ﻤﺜل ﺍﻟﻤﺴﺘﻁﻴﻼﺕ ‪ ،‬ﺍﻟﻤﻌﻴﻨﺎﺕ‪ ،‬ﺍﻷﺸﻜﺎل ﺍﻟﺒﻴﻀﻭﻴﺔ ﻭﺍﻟﺩﻭﺍﺌﺭ ﺍﻟﺼﻐﻴﺭﺓ‪ .‬ﻴﺘﻡ‬
‫ﺍﻟﺘﻲ ﻟﻬﺎ ﻤﻌﺎ ٍ‬
‫ﺍﻟﻭﺼل ﻤﺎ ﺒﻴﻥ ﺍﻟﺭﻤﻭﺯ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﺒﻭﺍﺴﻁﺔ ﺃﺴﻬﻡ ﺘﺤﺩﺩ ﺠﻬﺔ ﺇﻨﺘﻘﺎل ﺍﻟﺘﺤﻜﻡ )‪.(flowlines‬‬
‫ﺘﻤﺎﺜل ﺍﻟﻤﺨﻁﻁﺎﺕ ﺍﻟﺼﻨﺩﻭﻗﻴﺔ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻓﻲ ﻜﻭﻨﻬﺎ ﻤﻔﻴﺩﺓ ﻓﻲ ﻋﻤﻠﻴـﺔ ﺘﻁـﻭﻴﺭ ﻭﺘﻤﺜﻴـل‬
‫ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪ ،‬ﻟﻜﻥ ﻴﻔﻀل ﻤﻌﻅﻡ ﺍﻟﻤﺒﺭﻤﺠﻴﻥ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ ﻋﻠﻰ ﺍﻟﻤﺨﻁﻁﺎﺕ ﺍﻟﺼﻨﺩﻭﻗﻴﺔ ﺍﻟﺘﻲ‬
‫ﺘﺒﻴﻥ ﺒﻭﻀﻭﺡ ﻜﻴﻔﻴﺔ ﺍﻨﺘﻘﺎل ﺍﻟﺘﺤﻜﻡ ﻀﻤﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻋﺒﺭ ﺍﻟﺒﻨﻰ ﺍﻟﺜﻼﺜﺔ ﺍﻷﺴﺎﺴﻴﺔ‪ ،‬ﻭﺘﺠﻨﺒﻬﻡ ﺃﻱ ﺇﻴﺤﺎﺀ‬
‫ﺍﻟﺘﻲ ﻗﺩ ﺘﻭﺤﻲ ﺒﻬﺎ "ﺍﻷﺴﻬﻡ" ﺍﻟﺭﺍﺠﻌﺔ ﻓﻲ ﻤﺨﻁﻁﺎﺕ ﺍﻟﺘﺩﻓﻕ ﺍﻟﺒﻴﺎﻨﻴﺔ‪.‬‬ ‫‪Goto‬‬ ‫ﺒﻔﻜﺭﺓ‬

‫ﺍﻵﻥ ﻭﻗﺩ ﺃﺼﺒﺤﺕ ﺘﻌﺒﺭ ﻋﻥ ﺍﻟﺤل ﻭﻓﻕ ﻟﻐﺔ ﺍﻟﺨﻭﺍﺭﺯﻤﻴﺎﺕ‪ ،‬ﺴـﺘﺠﺩ ﺃﻥ ﺍﻟﻁﺭﻴـﻕ ﻏـﺩﺕ ﻗـﺼﻴﺭﺓ‬
‫ﻟﻼﻨﺘﻘﺎل ﺒﺎﻟﺤل ﻋﻠﻰ ﻨﺤﻭ ﺸﻔﺎﻑ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﻓﻌﻠﻲ ﻗﺎﺒل ﻟﻠﺘﻨﻔﻴﺫ ﺒﻠﻐﺔ ﺒﺭﻤﺠﺔ ﻤﻬﻴﻜﻠﺔ ﻤـﻥ ﺍﻟﻠﻐـﺎﺕ‬
‫ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻭﻯ‪.‬‬

‫‪20‬‬

You might also like