Главная Промышленная автоматика.

4. После оператора цикла с меткой ОЧИСТКА ДОСОК были вставлены операторы

ВВОД ЧИСЛА ХОДОВ: input(s); ss:=2Xs;

назначение которых очевидно. В следующем далее операторе цикла число 5 было заменено на 7.

Указание 3. При расширении программы для задач на мат в п ходов эти операторы остаются такими же, как они здесь приведены, но вышеупомянутое число 7 нужно заменить на ss-1-l.

5. Для обеспечения обхода участка программы, работающего только при решении трехходовок, ниже метки НАЧАЛО перед заголовком цикла

for Б2:=РУБЕЖ ХОДОВ[2]4-2 step 1 until РУБЕЖ ХОДОВ[3] do

был вставлен оператор

if 8=2 then go to последний ход;

6. Для ликвидации опасности возникновения пата не только на первом, но и на втором ходе оператор

возможен ПАТ:= true;

после заголовка цикла (ниже метки НАЧАЛО)

for Б1:=3 step 1 until РУБЕЖ ХОДОВ [1] do был заменен оператором

возможен nAT[l]:=true; Еще ниже после заголовка цикла

for Б2: = РУБЕЖ XOДOB[2]-f2 step 1 until РУБЕЖ ХОДОВ[3] do

оператор

возможен пат:= false;

был заменен операторами

возможен пат[1]:= false; возможен пат[2]:= true;

7. Окончание программы, начиная с метки ЕСТЬ ли ША.Х черным, было заменено нижеприведенными операторами. Для облегчения дальнейшего усовершенствования программы операторы снабженыздесь дополнительными комментариями, которые пользователь перед вставлением данного отрывка в программу (для задач до трех ходов) может, очевидно, опустить.

for 42: = РУБЕЖ XOДOB[3]-f2 step 1 until РУБЕЖ ХОДОВ[4] do begin

выполнение хода (42, доска черных, ДОСКА белых,

ПОЛЯ черных, ПОЛЯ белых, 42 продолжение); comment 4. См. ниже указание 4; последний ХОД:

for ББ:=рубеж ХОДОВ [ss-2]-f2 step 1 until рубеж Х0Д0В[88-1] do begin возможен ПАТ[5-1]:= false; выполнение хода(ББ,доска белых,ДОСКА черных, ПОЛЯ белых, ПОЛЯ черных, ББ продолжение); есть ЛИ шах черным: п:=рубеж ХОДОВ [ss];

ОБЗОР ХОДОВ (ПОЛЯ БЕЛЫХ, ДОСКА БЕЛЫХ, ДОСКА

черных, п, ШАХ черным); go to ББ продолжение; ШАХ черным:

for ЧЧ:=РУБЕЖ ХОДOB[88-l]-f 2 step 1 until

РУБЕЖ ХОДОВ[88] do

begin выполнение хода (ЧЧ,ДОСКА черных, доска белых, ПОЛЯ черных, ПОЛЯ белых, ЧЧ продолжение); УШЛИ от шаха: уровень: = ss;

возврат XOДA(CПИCOK[if q[yPOBEHb]--1 then ЧЧ-f 2 else ЧЧ-f 1], ДОСКА черных, ДОСКА белых, ПОЛЯ черных); go to бб продолжение; ЧЧ продолжение: уровень:=ss



end ЧЧ;

ЧЕРНЫЕ БЕРУТ НАЗАД СБОИ ПРЕДЫДУЩИЙ ХОД: УРОВЕНЬ: = ss-l;

ВОЗВРАТ ХОДА(СПИСОК[»! q[yPOBEHb]=-1 then " •

ББ+2 else ББ+1], ДОСКА БЕЛЫХ, ДОСКА ЧЕРНЫХ, ПОЛЯ БЕЛЫХ); ВОЗВРАТ КОРОЛЯ(ББ, 5, ПОЛЯ БЕЛЫХ, ДОСКА БЕЛЫХ); go to if S = 2 then 41 ПРОДОЛЖЕНИЕ else 42 ПРОДОЛЖЕНИЕ; comment 5. См. ниже указание 5;

ББ ПРОДОЛЖЕНИЕ: УРОВЕНЬ: =ss-l; •

end ББ;

if s=2 then go to БЕЛЫЕ БЕРУТ НАЗАД СВОИ ПЕРВЫЙ ХОД; comment 6. См. ниже указание 6; БЕЛЫЕ БЕРУТ НАЗАД СВОЙ ВТОРОЙ ХОД: УРОВЕНЬ: =4; ВОЗВРАТ ХОДА (СПИСОК [if q[yPOBEHb]=-1 then Ч2+2 else 42+1], ДОСКА ЧЕРНЫХ, ДОСКА БЕЛЫХ, ПОЛЯ ЧЕРНЫХ); ВОЗВРАТ КОРОЛЯ(42, 61, ПОЛЯ 4ЕРНЫХ, ДОСКА 4ЕРНЫХ); go to Б2 ПРОДОЛЖЕНИЕ; 42 ПРОДОЛЖЕНИЕ: УРОВЕНЬ: = 4 end 42;

п: = РУБЕЖ Х0Д0В[41; if ВОЗМОЖЕН ПАТ[2] then НЕ MAT2 ЛИ ЭТО:

begin ОБЗОР ХОДОВ (ПОЛЯ БЕЛЫХ, ДОСКА БЕЛЫХ, ДОСКА ЧЕРНЫХ, п, ЧЕРНЫЕ БЕРУТ НАЗАД СВОЙ ПЕРВЫЙ ХОД); ЭТО ПАТ НА ВТОРОМ ХОДЕ: go to Б2 ПРОДОЛЖЕНИЕ end;

•ЧЕРНЫЕ БЕРУТ НАЗАД СВОИ ПЕРВЫЙ ХОД: УРОВЕНЬ: = 3;

ВОЗВРАТ XOДA(CПИCOK[if q[yPOBEHb]=-1 then Б2+2 else Б2+1], ДОСКА БЕЛЫХ, ДОСКА ЧЕРНЫХ, ПОЛЯ БЕЛЫХ);

ВОЗВРАТ КОРОЛЯ(Б2. 5, ПОЛЯ БЕЛЫХ, ДОСКА БЕЛЫХ);

go to 41 ПРОДОЛЖЕНИЕ; Б2 ПРОДОЛЖЕНИЕ: УРОВЕНЬ: =3

end Б2;

БЕЛЫЕ БЕРУТ НАЗАД СВОИ ПЕРВЫЙ ХОД: УРОВЕНЬ: =2; •

ВОЗВРАТ XOДA(CПИCOK[if q[yPOBEHb]=-1 then Ч1+2 else Ч1 + 1], ДОСКА ЧЕРНЫХ, ДОСКА БЕЛЫХ, ПОЛЯ ЧЕРНЫХ);

ВОЗВРАТ КОРОЛЯ (41, 61, ПОЛЯ 4ЕРНЫХ, ДОСКА ЧЕРНЫХ);

go to Б1 ПРОДОЛЖЕНИЕ; 41 ПРОДОЛЖЕНИЕ: УРОВЕНЬ:=2

end 41;

п: = РУБЕЖ ХОДОВ[2]; if ВОЗМОЖЕН ПАТ[1 then НЕ MAT1 ЛИ ЭТО:

begin ОБЗОР ХОДОВ (ПОЛЯ БЕЛЫХ, ДОСКА БЕЛЫХ, ДОСКА ЧЕРНЫХ, п, MAT1); ЭТО ПАТ НА ПЕРВОМ ХОДЕ: go to Б1 ПРОДОЛЖЕНИЕ end;

output (7/,Т,РЕШЕНИЕ,7); go to ОТВЕТ; MATl: output (7/VT,MAT HA ПЕРВОМ ХОДЕ,7); -ОТВЕТ: ПЕЧАТЬ ПОЗИЦИИ; ОДНО РЕШЕНИЕ НАЙДЕНО: go to КОНЕЦ; Б1 ПРОДОЛЖЕНИЕ: УРОВЕНЬ: = 1

end Б1;

output (7/,Т,ХОДЫ БЕЛЫХ ИСЧЕРПАНЫ,7); go to КОНЕЦ;

ОШИБКА: output(7/,T,*nEPBbIM ХОДОМ БЕРЕТСЯ КОРОЛЬ ЧЕРНЫХ,/); КОНЕЦ: end

2. Указания изменений к программе для решения четырехходовок

Ниже приводится содержание тех указаний, на которые делались ссылки в комментариях вышеприведенного окончания программы.



Указание 4. Для программы решения задач на мат до четырех ходов вслед sai comment 4 должны следовать операторы

if s = 3 tlien go to ПОСЛЕДНИЙ ХОД;

for Б3: = РУБЕЖ ХОДОВ[4]--2 step 1 until РУБЕЖ Х0Д0В[5] do begin ВОЗМОЖЕН ПАТ[2]:= false; ВОЗМОЖЕН ПАТ[3]:= true; ВЫПОЛНЕНИЕ ХОДА(БЗ, ДОСКА БЕЛЫХ, ДОСКА ЧЕРНЫХ, ПОЛЯ

БЕЛЫХ, ПОЛЯ ЧЕРНЫХ, БЗ ПРОДОЛЖЕНИЕ); for ЧЗ: = РУБЕЖ ХОДОВ[5]--2 step 1 until РУБЕЖ ХОДОВ[6] do begin

ВЫПОЛНЕНИЕ ХОДА (43, ДОСКА ЧЕРНЫХ, ДОСКА БЕЛЫХ, ПОЛЯ ЧЕРНЫХ, ПОЛЯ БЕЛЫХ, 43 ПРОДОЛЖЕНИЕ); Далее в четырехходовой программе б)дут следовать операторы, которые ничем, не отличаются от операторов вышеприведенного окончания трехходовой программы, начиная с метки ПОСЛЕДНИЙ ХОД и кончая оператором ВОЗВРАТ КОРОЛЯ(ББ, 5, ПОЛЯ БЕЛЫХ, ДОСКА БЕЛЫХ) включительно.

Указание 5. В программе для задач на мат до четырех ходов оператор, предшествующий comment 5, должен и.меть вид

go to if s=2 then 41 ПРОДОЛЖЕНИЕ else

if s=3 then 42 ПРОДОЛЖЕНИЕ else 43 ПРОДОЛЖЕНИЕ; Две строки, следующие за comm.ent 5 будут такими же, как и в трехходовой программе.

Указание 6. В програм-ме для задач до четырех ходов между примечанием comment 6 и меткой БЕЛЫЕ БЕРУТ НАЗАД СВОИ ВТОРОЙ ХОД должны находиться операторы

if s = 3 then go to БЕЛЫЕ БЕРУТ НАЗАД СВОЙ ВТОРОЙ ХОД; БЕЛЫЕ БЕРУТ НАЗАД СВОЙ ТРЕТИЙ ХОД: УРОВЕНЬ: = 6; ВОЗВРАТ ХОДА (СПИСОК [if q [УРОВЕНЬ] =-1 then

43-f2 else 43+1], ДОСКА 4ЕРИЫХ, ДОСКА БЕЛЫХ,

ПОЛЯ ЧЕРНЫХ);

ВОЗВРАТ КОРОЛЖЧЗ, 61, ПОЛЯ ЧЕРНЫХ, ДОСКА 4ЕРНЫХ); go to БЗ ПРОДОЛЖЕНИЕ; 43 ПРОДОЛЖЕНИЕ: УРОВЕНЬ: =6 . . • end 43; п: = РУБЕЖ Х0Д0В[6]; if ВОЗМОЖЕН ПАТ[3 then НЕ МАТЗ ЛИ ЭТО: begin ОБЗОР ХОДОВ (ПОЛЯ БЕЛЫХ, ДОСКА БЕЛЫХ, ДОСКА 4ЕРНЫХ, п, 4ЕРНЫЕ БЕРУТ НАЗАД СВОИ ВТОРОЙ ХОД); это ПАТ ИА ТРЕТЬЕМ ХОДЕ: go to БЗ ПРОДОЛЖЕНИЕ end;

ЧЕРНЫЕ БЕРУТ НАЗАД СВОЙ ВТОРОЙ ХОД: УРОВЕНЬ: =5;

ВОЗВРАТ XOflA(CnHCOK[if q[yPOBEHb]=-1 then Б3-ь2 else БЗ-f 1],

ДОСКА БЕЛЫХ, ДОСКА 4ЕРНЫХ, ПОЛЯ БЕЛЫХ); ВОЗВРАТ КОРОЛЯ (БЗ, 5, ПОЛЯ БЕЛЫХ. ДОСКА БЕЛЫХ); go to 42 ПРОДОЛЖЕНИЕ; БЗ ПРОДОЛЖЕНИЕ: УРОВЕНЬ: = 5 end БЗ;

Дальнейшие операторы четырехходовой программы не будут отличаться от операторов, трехходовой программы, начиная с метки БЕЛЫЕ БЕРУТ НАЗАД СВОЙ ВТОРОЙ ХОД и до конца.

Сравшш изменения при переходе от дб)хходобой программы к трехходовой с изменениями при переходе от трехходовой к четырехходовой, читатель легко может уловить закономерность и, если пожелает, то дальнейшее усложнение программы-(с целью решения задач на пять и более ходов) сможет )же производить и сам безновых зтазаний, даже не вникая глубоко в существо алгорит.ма *.

* В настоящее время (авг)ст 1976) автором данного подтверждения написана И-уже отлажена на машине БЭСМ-6 нерекурсивная А.ЛГОЛ-программа, решающая лю-б)то шахматн)то задачу на мат в п ,\одов. Однако публикация этой программы предполагается только в следующем выпуске данной серии, поскольку перед ее изданием желательно провести в ней еще ряд мелких усовершенствований и составить подробное и ясное пояснение работы ее операторов. Эта программа работает в два, три раза= быстрее, чем- программа алгоритма 50CJ, и имеет перед последней еще и ряд др)тих-преим)ществ.





0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41

0.0017