Главная Промышленная автоматика. Ниже приводится самый маленький из полученных квадратов четного порядка: 13 3 2 16 8 10 11 5 12 6 7 9 1 15 14 4 Подтверждение к алгоритму 118 Г. Тачер (Thacher Н. С. «САСМ», 1962, № 12) Тело процедуры magicodd было проверено на машине LGP-30 с использованием дартмутского транслятора с языка АЛГОЛ-60. Не было, найдено никаких синтаксических ошибок. Процедлфа составляла магические квадраты нечетного порядка удовлетворительно. Для порядков не выше девятого время работы процедуры было следующим (включая вывод на флексорайтер): Порядок Время, с 3 17i 5 422 7 804 9 1285 Для ,/=3 магический квадрат имеет вид 4 3 8 9 5 1 2 7 6 Расчт етм ПЕР¥ [И] Данный алгоритм описывает итерационную процедуру для расчета сети ПЕРТ, позволяющую использовать произвольно зшорядоченные операции и номера событий. При исследовании сетей ПЕРТ соблюдается правило: в матрице размером пХп, строки которой означают предшествующие, а столбцы - последующие события, элемент с индексами (i,/) представляет собой время операции, требующееся для перехода от события i к событию /. Элементарными преобразованиями в общем случае матрица превращается в верхнюю треугольную матрицу. Верхняя треугольная матрица результанта хорошо упорядочена (т. е. любое время операции в данном столбце не зависит от времен операций в столбцах, стоящих справа от данного). Такая точная манипуляция в общем случае требует много машинного времени. При прямой оценке, не требующей ссвокупностп зле-.ментарных преобразований, можно рассчитывать сеть со значительно меньшими затратами времени. Входные параметры: птах - общее количество операций; i и I - номера предшествующего и посяедующегс событий соответственно; te - соответствующее ожидаемое время каждой операции; st - время начала работы; етах - общее количество событий. Выходные параметры: г - массив, содержащий номера событий; начальное значение мае» сива г несущественно; es - наиболее ранний срок начала события; at - наиболее поздний срок окончания события; етах-общее количество событий. Размерность массивов te,i,j[l:nmax], at,es,r[l:emax]. procedure pert (nmax,i,j,te,st) dataresult: (emax) result: (r,es,at); value nmax.st; real st; Integer nmax.emax; array te,es,at; integer array i,j,r; begin real a,x; integer n,e,s,t,k; procedure scan(e,t,r); integer e,t; integer array r; comment Задается количество событий e-1, содержащихся-в массиве г до вьшолнения процедуры scan, и номер события in или ]п, содержащийся в t. Процедура scan (scan - просмотр) просматривает массив г, определяя, нужно ли добавлять номер события к массиву г или нет. Если нужно, то номер события становится элементом Ге, а t заменяется на е. Если же не нужно, то номер события заменяется на к; begin integer к; if е 1 then for к:=е-1 step -1 until 1 do if t=r[k]then begin t:=k; go to out end k; r[e]:=t; t:=e; e:=e + l; end scan; e: = l; for n: = l step 1 until nmax do begin scan(e,j[n],r); scan(e,i[n],r) end n; comment Далее в зависимости от значения s будем вычислять либо время операции ate и переносить его значения в вектор наиболее ранних сроков ese, либо будем вычислять at без какого-либо переноса. В последнем случае будут получены наиболее поздние сроки окончания; етах:=е-1; s:=l; a:=st; k:=emax; for e:=l step 1 until emax do at[e]:=a; for n:=l step 1 until nmax do * if r[i[n]]>0 then begin * if s=2 then go to b2; x:abs(at[in]])+te[n]; • nol: no2: end pert; go to if x>abs(at[]"[n]]) then nol eise no2; x: = abs(at[i[n]])-te[n]; if x<abs(at[][n]]) then at[j[n]]:=-x; end n; for e:=l step 1 until emax do if r[e]<0 then begin if at[e] <0 then begin r[e]:=abs(r[e]); k:=k+l; at[e]:=-abs(at[e]) end if at end else begin if at[e]<0 then go to s3; r[e]:=-r[e]; k:=k-1 end e; if kO then go to s2; if 8=2 then go to g2; s:=2; for n:=l step 1 until nmax do begin t:=i [n]; i [n] :=j [n]; j [n] :=t end n; a:=0; for e: == 1 step 1 until emax do begin es[e]:=at[e]; r[e]:=abs(rre]); if at[e]>a then a:=at[e] end e; go to si; for e:=l step 1 until emax do r[e]:=abs(r[e]) Свидетельство к алгоритму 1196 Алгоритм 1196 отличается от алгоритма 119а только тем, что в заголовке процедуры pert параметр г перенесен из входных в выходные параметры, а параметр етах отнесен как к входным, так и к выходным параметрам. Соответствующие изменения внесены и в пояснительный текст к процедуре pert. Алгоритм 1196 был транслирован в системе ТА-1М на машине М-220 и дал правильные результаты, для следующих задач из работы Латтернера [28]. Задача 1. [28, с. 81]. (См. рис. 1.) Задавались параметры птах==Ь, st=0, етах=Ъ и
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 |