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

ходы БЕЛЫХ ИСЧЕРПАНЫ

Это происходило потому, что оператор с меткой аа4 запоминал в с[УРОВЕНЬ1 значение йзятой ладьи только при первом превращении пещки (в ферзя). При последующих же трех превращениях пещки (в ладью, слона и коня) этот оператор записывал в с[УРОВЕНЬ] каждый раз ноль. В результате ладья белых исчезала с доски навсегда и ие восстанавливалась уже перед следующей пробой хода черными.

Для исправления этой ощибки в процедуре ВЫПОЛНЕНИЕ ХОДА операторы с метками аа2-ааб были помещены перед оператором с меткой aal, а перед ними был вставлен условный оператор

if q[ypOBEHb]=-1 tlien goto aal;

IV. Исправление операторов взятия на проходе

При попытке решения задач со взятием пешки на проходе с помощью программы А. Белла (после подстановки в нее операторов с метками ер1, ер2, ерЗ и ер4, описанных в разделе «Взятие пешки на проходе») было обнаружено, что операторы с метками ерЗ и ер4 опубликованы в алгоритме 50 неправильно. Эти операторы должны в действительности иметь следующий вид.

ерЗ: if qTyPOBEHb] = l ЛНА= НА ПРОХОДЕ1УРОВЕНЬ-1] then begin с[УРОВЕНЬ]:=-1;

ДОСКА ЧУЖИХ!!! НА<32 then HA-f8 else НА-8]: = О . end;

ер4: if с[УРОВЕНЬ]=-1 then

begin ДОСКА ЧУЖИХ[ОТ]:=0;

ДОСКА ЧУЖИХЫ ОТ<32 then 0T-f8 else ОТ-8]: = 1 end else

ДОСКА ЧУЖИJqOT]:=c[УPOBEHЬ];

Полезно также заметить, что операторы раздела «Взятие пешки на проходе» вставляются в программу следующим образом:

1) операторы с меткой «ер/:» - на место метки «epi:»;

2) операторы с меткой «ер2:» - на место строки ер2: if ЧУЖАЯ Д0СКА1ТАБЛИЦА ПЕШЕК[1]]==0 then

3) операторы с меткой «ерЗ:» - на место метки «ерЗ:»;

4) операторы с меткой <аер4:» в процедуру ВЫПОЛНЕНИЕ ХОДА на место строк

ер4:

ЬЬЗ: ДОСКА ЧУЖИХ[ОТ1: = с1УРОВЕНЬ];

а в процедуру ВОЗВРАТ ХОДА -на место строки

ер4: ДОСКА ЧУЖИХ[ОТ]:=с1УРОВЕНЬ];

V. Исправление операторов рокировки

Первая ошибка в операторах рокировки состояла в том, что в процедуре ВОЗВРАТ ХОДА алгоритма 50 А. Белла не были предусмотрены операторы возврата короля в исходное положение, если возвращаемый ход был рокировкой. В результате программа алгоритма 50 работала правильно тогда, когда рокировка выполнялась на первом ходе белых или тогда, когда рокировка не сопровождалась матом королю противника. Если же рокировка выполнялась на втором ходе белых (Б2) и сопровождалась матом,, то черные должны были взять назад свой первый ход (41), чтобы испробовать другую защиту от первого хода белых. Но для этого должна была выполняться процедура ВОЗВРАТ ХОДА для возврата второго хода белых (Б2). Поскольку при этом возвращаемый ход белых был рокировкой, то процедура ВОЗВРАТ ХОДА не мог-



ла восстановить исходное положение на доске и оставляла рокированного короля на ИОВОМ его месте, возвращая в исходное положение только ладью.

Так, например, программа алгоритма 50 не дала правильного решения в указанной ниже задаче № 6 типа Валодао-таск из еженедельника «64».

Для исправления этой ошибки в ведущую часть (после метки «НАЧАЛО:») программы алгоритма 50CJ перед оператором goto 41 ПРОДОЛЖЕНИЕ; был вставлен пустой оператор ВОЗВРАТ КОРОЛЯ БЕЛЫХ: СМ СВИДЕТЕЛЬСТВО К АЛГОРИТМУ 50CJ:; а перед оператором goto Б1 ПРОДОЛЖЕНИЕ; вставлен оператор ВОЗВРАТ КОРОЛЯ ЧЕРНЫХ: СМ СВИДЕТЕЛЬСТВО К АЛГОРИТМУ 50CJ:;

В случае использования данной программы для решения задач с рокировкой в начало программы (например, после описания процедуры ВОЗВРАТ ХОДА) нужно вставить описание

procedure ВОЗВРАТ КОРОЛЯ (р,НА,ПОЛЯ.ДОСКА); integer р,НА; integer array ПОЛЯДОСКА;

if СПИСОЩрЧ-2]<0 Д CnnCORIp-f 61=-НА then begin ПОЛЯ[1]: = НА; Д0СКА1НА]:=6;

ДОСКА[1Г CHHCOKIp-f 2]=-(HA-f3) then HA-f2 else HA-2]:=0 end ВОЗВРАТ КОРОЛЯ; Первый из вышеуказанных пустых операторов нужно заменить обращением

ВОЗВРАТ КОРОЛЯ(Б2,5,ПОЛЯ БЕЛЫХ,ДОСКА БЕЛЫХ); я второй - обращением

ВОЗВРАТ КОРОЛЯ(Ч1,61.ПОЛЯ ЧЕРНЫХ,ДОСКА ЧЕРНЫХ); Вторая ошибка в операторах рокировки алгоритма 50 состояла в том, что в отрывке программы, приведенном в дополнении 2 к алгоритму 50CJ, запрет рокировки не был предусмотрен для тех случаев, когда между королем и ладьей имеются фигуры противника. Для исправления этой ошибки оператор РОКИРОВКА БЕЛЫХ: if -1 КОРОТКАЯ РОКИРОВКА БЕЛЫХ у ДОСКА БЕЛЫХ[6]0у ДОСКА БЕЛЫХ117]0 then goto ДЛИННАЯ БЕЛЫХ; был заменен в алгоритме 50CJ оператором

РОКИРОВКА БЕЛЫХ: if-) КОРОТКАЯ РОКИРОВКА БЕЛЫХ \/

ДОСКА БЕЛЫХ[6]т0\/ ДОСКА БЕЛЫХ17]0\/ ДОСКА ЧЕРНЫХ! 6] О \/ДОСКА ЧЕРНЫХ17]0 then goto ДЛИННАЯ БЕЛЫХ;

Аналогичные исправления были сделаны для операторов с метками ДЛИННАЯ БЕЛЫХ, РОКИРОВКА ЧЕРНЫХ и ДЛИННАЯ ЧЕРНЫХ.

Третья ошибка в операторах рокировки алгоритма 50 состояла в том. что в вышеуказанном отрывке программы перед обращением ОБЗОР ХОДОВ (ПОЛЯ БЁЛЫХ,ДОСКА БЕЛЫХ,ДОСКА ЧЕРНЫХ,п,

НЕ ВОЗМОЖНА КОРОТКАЯ ЧЕРНЫХ); был пропущен оператор

ДОСКА ЧЕРНЫХ162]:= ДОСКА 4EPHbIXf63]:=6;

VI. Результаты отладки алгоритма 50CJ

После внесения вышеуказанных исправлений программа алгоритма 50CJ была транслирована на машине БЭСМ-6 в системе БЭСМ-АЛГОЛ в трех вариантах:

A) без операторов взятия пешки на проходе и без операторов рокировки; Б) с операторами взятия на проходе, но без операторов рокировки;

B) с операторами взятия яа проходе и с операторами рокировки.



и с ее помощью, кроме двух задач, шрпведениых А. Беллом, были рещены еще и все 10 задач на мат в два хода, публиковавщиеся в газете «Вечерняя Москва» с декабря 1972 г. 1П0 февраль 1973 г. под рубрикой «Конкурс - 26». Эти за,дачи следующие.

1. Белые: Kpd6, Of3, Лс2. Черные: Kpd4.

2. Белые: Кре4, Фц4, Лс8, Kd5. Черные: Kpd6, g5.

3. Белые: Kpg2, ФП, Лd8, Ch2, а4. Черные: КрЬ7, Са7.

4. Белые: КреЗ, Фе4, Ле7. Черные: Kpel, ЛЬ8, Са8, сЗ.

5. Белые: Kpf2, Ф!6, Ch7. Черные: Kpg4, g5.

6. Белые: Kpd2, Феб, ЛЬ5. Черные: Kpd4, ЛА8, Kf7.

7. Белые: Kpbl, ФdЗ, Ла8, Лс6,.е6. Черные: КрЬ7, КЬ8.

8. Белые: Кр18, ФЬ4, Ла5, е5. Черные: Kpd7, Сс8, с7.

9. Белые: Кра2, ФЬ2, ЛЬ5, Са7. Черные: Краб, ЛЬ7, g6.

10. Белые: Кра8, Фео, Сс8, d7, h5. Черные: Kpf7, h6.

Время (в секундах), затраченное на рещение этих десяти задач (всеми тремя вариантами программы) и на исследование их однозначности, приведено в табл. 29.

Для проведения исследования задачи на однозначность решения достаточно удалить из программы строку

ОДНО РЕШЕНИЕ НАЙДЕНО: goto КОНЕЦ; после чего програ.мма печатает все решения, возможные в данной задаче, и затем текст ХОДЫ БЕЛЫХ ИСЧЕРПАНЫ.

Т аблида 29

Номер задачи

Ключевой ход

Время решения [с] »

Время исследования [с]

Вариант А

Вариант Б

Вариант В

7.10

7.12

7.54

38.38

Kpf5

40.32

41.06

44.04

44.56

31.14

31.82

34.00

140.54

38.84

39.56

42.56

209.24

20.02

20.48

22.00

34.70

115.00

118.02

126.00

201.68

30.00

30.62

32.74

108.98

39.90

41.02

43.84

56.06

102.36

104.42

111.28

261.26

24.76

25.50

27.44

30.92

-редние значения

44.94

45.96

49.14

112.63

Поскольку время решения задачи данной программой существенно зависит от того, в какой последовательности вводятся в память машины значения фигур и зани-viacMbix ими полей, то при решении вышеуказанных задач строго выдерживался один и тот .же порядок: фигуры вводи.т1Ись в порядке возрастания номеров, занимаемых ими полей. В о-бщем случае время, затрачиваемое на .решение задач, ие может служите характеристикой их сложности. Такой характеристикой скорее может служить машинное вре.мя, затрачиваемое на исследование однозначности решения.





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 42 43

0.0018