Главная Промышленная автоматика. p: = q: = n-n-=-4X4; r: = true; for a:=l step 1 until n2-1 do begin beta(l,a-l,a,r); alpha(a,n2-l,a, true); x[n2,a]: = if q then nn-aXn+n2-fl else nn-aXn + n2; alpha(n2 +l,n,~l q); q:=~1 q; r:= I r end a; alpha(1,п2-1,п2,"П p); alpha(п2+2,п,п2, false); gamma(l,n2-l,n2+l,p); gamma(n2+2,n,n2+1, true); q:=:p; r:= true; /* for a:=n2 + 2 step 1 until n do begin beta(l,n-a,a,q); x[n-a + l,a]:=aXn-a+1; beta{n-a+2,n2-1,a, true); if 1 r then begin x[n2,a]:=nn-aXn+n2; x[n2+l,a]:=aXn-n2 + ] end else for b:=n2,n2 + l do x[b,a]: = nn-aXn + n-b + 1; beta(ii2 + 2,a-l,a,~~lr); alpha(a,n,a, t-rue); q:=~lq; r:=~ г * end a; for а:=п2,п2-Ы do for b:=n2,n2+l do x[b,a]: = if p then aXn-n+b else nn-aXn + n-b + 1; if ~~1 p then begin for а:=п2,п2+1 do x[n2-l,a]:=aXn-n2+2; for b: = n2,n2 + l do x[b,n2+2]:=nXn2-2Xn+b end end magiceven; Свидетельство к алгоритму 1176 Алгоритм 1176 является стереотипным переизданием алгоритма 117а. Свидетельство к алгоритму 117а Алгоритм 117а получен в результате исправления, сокращения,, оптимизации и ординарной переработки алгоритма 117 (Colli-son D. М. «САСМ», 1962, № 8). Кроме ошибки, указанной в нижеследующем подтверждении П. Наура, была обнаружена еще одна синтаксическая ошибка, заключавшаяся в том, что между условием if г then .и else стоял оператор цикла, что не допускается «Пересмотренным сообщением об АЛГОЛе-60» [14]. Для исправления указанное условие было заменено на if~~lr then с соответствующей перестановкой подоператоров этого условного оператора. Переводы «Подтверждений и замечаний к алгоритмам 117 и 118» помещены после алгоритма 1186. Перевод «Подтверждения к алгорит- мам 117 и 118» К- Басворта (Bosworth К. М. «САСМ», 1963, 3) здесь не привадится, поскольку оно не дает новой информации. Более подробно о магических квадратах см. в справочнике О. В. Мантурова и др. [6] и в работе М. М. Постникова [7]. Алгоритм 117а транслирован для /г=4 и 6 и получены правильные результаты. Для /г=4 магический квадрат имеет вид 1 12 8 13 15 6 10 3 14 7 И 2 4 9 5 16 Следует заметить, что порядок элементов в вышеприведенном ма-тическом квадрате отличается от порядка, указанного в «Подтверждении» Д. Коллисона, приведенного ниже вслед за алгоритмом 1186. АЛГОРИТМ 1186 Магический квадрат нечетного порядка [Z] Процедура magicodd {magic - магический, odd - нечетный) по данному размеру я (чисел) стороны квадрата определяет числа от 1 до rfi, образующие «магический квадрат*, и запоминает их в массиве х[1:пхп], где п - нечетное число, не меньшее трех. Литература та же, что и для алгоритма 1176. procedure magicodd (n) result: (x) value n; integer n; integer an ay x; begin integer i,j,k; for i: = l step 1 until n do for j: = l step 1 until n do x[i,j]:=0; i:=(n-t-l)--2; j: = n; for k: = l step 1 until nXn do begin if к[1,]]фО then begin i:=i-1; ]:=]-2; if i<l then i:=i + n; if j<l then j:=j-fn end; x[i,jl:=k; i:=i-t-I; if i>n then i:=i-n; з:=з + 1; if j>n then j:=j-n end к end magicodd; Свидетельство к алгоритму 1186 Алгоритм 1186 является стереотипным переизданием алгоритма 118а. . Алгоритм-118а получен в результате ординарной переработки алгоритма 118 (Со Ills on D. М. «САСМ», 1962, № 8). Алгоритм 118а транслирован для /г=3, 5, 9 и получены правлль-ные результаты. Магический квадрат пятого порядка имеет вид 11 Ш 4 23 17 18 12 6 5 24 25 19 13 7 1 2 21 20 14 8 - 9 3 22 16 15 Подтверждение к алгоритмаа? 117 и 118 П. Наур (Naur Р. «САСМ», 1963, № 1) В процедуре magiceveit необходимо следующее исправление: в теле процедзфы beta левая квадратная скобка ... then [п/г... долл<на быть заменена на круглую. С этой поправкой алгоритм был успешно проверен в системе QIER ALGOL. Были получены квадраты четных порядков от 4 до 20 и проверены на «магичность» по строкам и столбцам. Алгоритм содержит И пар лишних скобок (10 из которых находятся в условных выражениях), и..если присваивание значений пере-менны-м п2 и пп поместить сразу после «end gamma;», то внутренний блок становится излишним. Процедура magcodd прошла на kauinne без поправок и выдала несколько квадратов. Время работы следующее. Процедура . Размер квадрата Время, с magicodd 9 . 0.6 19 2.5 magiceven 10 0.9 20 2.3 Подтверждение к алгоритмам 117 и 118 Д. Коллисон Со 11 is on D. М. «САСМ», 1962, № g) Оба алгоритма были проверены и прохронометрированы при помощи специальной АЛГОЛ-программы с транслятором Elliott ALGOL на машине National Elliott 803. Процедура для нечетных порядков оказалась более медленной. Процедура Размер квадрата Время, с Нечетный пор.чдок Э 10 19 45 Четный порядок 10 7 20 23 Поскольку В алгоритмах используются разные методы и процедура для четного порядка длинная, то было решено не объединять их вместе. 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.4414 |