Главная  Полное построение алгоритма 

[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] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117]

-., Л.

Вьфр нтльшго поля (1,)

Инии.ш/изоидя доски

Иниидплизпи,и!Г переменных,


(ф(онтие

Рис. 2.1.17. Окончательная блок-схема алгоритма «тур коня».

С его помощью фактически найти тур коня. Или модифицируйте алгоритм и найдите тур коня с помощью какой-либо другой стратегии. Уверяем вас, что это сделать можно!



PROGRaPI knight (OUTPUT.input.TAPE3iSNPUT.TAPr6":eU"PUT»

С ПРОГРАММА СТРОИТ ТУР КОНЯ. СТРАТЕГИЯ ПЕРЕМЕЩЕНИЯ

С НА С/1ЕДУЮШ,УЮ ПОЗКЦИЮ-ПО ЧАСОВОЙ СТРЕЛКЕ.

С нАЧАльг:дя позиция счетывАЕТСЯ. с

с ОПИСАНИЕ ГЕРЕМЕННЫХ

с D3SRP{I,J> =Н ОЗНАЧАЕТ, что ПОЛЕ В СТРОКЕ I

с и СТОЛБЦЕ J БЫЛО N-ЫМ ПОАШ Б ТУРЕ КОНЯ.

с =0--НА nO/iE ЕЩЕНЕ К0ДИ/1И.

с =99-ПОЛЕ НАХОДИТСЯ ВНЕ ДОСКИ (ЧТОБЫ

с . УДЕРЖАТЬ коня в ПРЕДЕЛАХ ДОСКЮ.

с 1К0-.-Е<К) К-ОЕ ПОЛЕ, 1$К$е, НА КОТОРОЕ ИОЖЕТ ПОЙТИ

С ;чо>/Е((.) конь с ДДНМОГО ПОЛЯ,

с I.J ТЕКУЩЕЕ П0Я0ЖЕН11Е КОНЯ,

с INEXT.JNEXT ВОЗМОЖНОЕ СЛЕДУ!СЩ,ЕЕ ПОЛЕ ДЛЯ ХОДА. INTEGER BOARD(12.12).IR0VE(e>iJN0VE(e»

DATA lnoVEIl>.l«O/e(2).IH0t/EIS).lHOI/E<i>>ilI-i0>/El5)«IfWVE(«t» + lM0VE(7blH0tfE(e>/-z.-1.1.2.2.1.-l.-S/ СДТА JI4OVE(l>iJM0vE(Z).J?iO\/E(5).JM0Vt(%(v0K0vE(5bJFiCVEtSI»

♦ Ji40VE(7)«JflOVE(E)/i,2.a.l.-li»2,-2i-l/

С ВЫЕРнТЬ КАЧАЛЬНУ-ЧЗ ПОЗИЦИЮ

P.EADtS.lOOO) IIKlTsJINIT lOOo F0R.4AT(2I2>

С янициляизйРОВАть доску с

ей гоо I к 1.J2

00 100 J = j.ia

BOARD(I.J) - о

IF ( I .Lf. 3 oO?1. r oGT. 10 .CR,

♦ J ,.T. 3 .CR. J .CT, iO > GQARSdaJI = 99

IBB COMTINUE

£00 CONTIWUE

С ИНИЦИАЛИЗИРОВАТЬ ПЕРЕМЕННЫЕ. С i

к = 1

BOARDlIIwITiJINIT) 1 I = UNIT J = JiniT

N = 2

С ПРОЗЕРКТЬ, HE ОКОНЧЕН №1 ТУР.

500 IF < К .GT. 8 1 GOTO 500 с ПРОВЕРИТЬ, МОЖНО ЛИ СДЕЛАТЬ ХОД НА ПОЛЕ К

INEXT = 1Ч.1М0УЕ(К> JNEXT = JtJHOtftCK)

IF ( BCAROdNEXTtJfEKTl .N£. О I 60T0 «00

С ТОГДА(ПОЙТИ КА НОВОЕ ПОЛЕ И ПСЯУЧйГо HOEOZ ЗКАЧЕК1ТЕ Ql,J;)

BOSROtlWEXT.JNEXT) = N N i N*l

0 = JNEXT

1 = INEXT К = J SOTO SOO

С ИНАЧЕ (испытать СЛЕДУЮЩЕЕ ПОЛЕ)

*0о К 3 К*1

GOTO 300

с ТУР ЗАКОНЧЕН, РАСПЕЧАТАТЬ ДОСКУ К ЧИСЛО ХСДОВ

500 N = N-1

WRITE(6.2000>((BOARD(l,J).J=3,10l.l=3«10)»N гООо FORMAT(SHlBOAftD 1S. ,0(BI10/1. .iiH THERE UEREi!3.5HW0VtSI STOP ENO

Рис. 2.1.18. Реализация алгоритма «тур коня» на Фортране. (Текст в операторе 2000: «Доска: ...было ...ходов».)



Структурное программирование сверху-вниз: дополнительные соображения

Мы не собираемся утверждать, что структурное программирование сверху-вниз исчерпывается тем, что было сказано в предыдущем разделе. Оно включает достаточно много других аспектов, один из которых можно выразить лозунгом «Упрощай структуры управления».

IF в

THEN


THEN

ELSE THEN


WHILE D DOSS

ELSE

Рис. 2.1.19. Структуры управления для блок-схем с рис. 2.1.4, с и б.

Другие аспекты - это требование соответствующей документации, наглядной записи программных операторов с использованием отступов в начале строк, разбиения программы на обозримые части.

Рекомендуется, например, составлять программные модули так, чтобы их распечатка не превышала одной-двух страниц. Страница - это смысловая ед>птица, котору.ю можно представить себе в любой момент как единое целое и которая сводит к минимуму необходимость переворачивать страницы при прослеживании передач управления в программе.

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



[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] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117]

0.0012