Главная Полное построение алгоритма [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 |