!begin !real begins, ends; !integer i, jj, kk, n1, n2, n3, n4, n5; !integer n6, n7, n8, n9, n10, n11, ij, ik, i1; !real x, y, z, norm, t3, estimate; !real one, two, three, four; !real !array e[1 : 4]; !Boolean fail; !end | **** !begin !comment David Huxtable's prog which fails to compile on optimising; !library A6; !integer !array A[1:9]; !integer i; !procedure get(A); !integer !array A; !begin !integer i; !for i := 1 !step 1 !until 9 !do A[i] := read(20); !end; open(20); !for i := 1 !step 1 !until 1 !do get (A); !for i := 1 !step 1 !until 9 !do write(30, format ({ndd}), A[i]); close(30); !end | 1,2,3,4,5,6,7,8,9, | || 'real' 'procedure' readx(device); 'integer' device; 'KDF9' 12/9/14/0; {device}; JSP294; 'EXIT'; !ALGOL; 1,2,3,4,5,6,7,8,9, | **** !begin !library A1, A5, A15; !integer i; !real !array a[17:107], b[17:107], c[17:107]; !integer form; !procedure silly(x); !real x; !begin !real !array z[1:17]; x := x + 1.0; !end; form := format({ndddddddds}); open(30); !for i := 17 !step 3 !until 23 !do !begin a[i] := sqrt(b[i] * c[i]); write(30, form, a[i]); silly(a[i]); !end; close(30); !end **** !begin !comment pentomino, 130968; !library A0, A12, A6; !comment A1, A4, A5, A12, A15; !integer solution count, max solution count; !integer piece number, piece count, place count; !integer board length, board width, board area; !integer i, j, k, position; !integer printer, reader; !integer form1p12e; !integer form1p1e; !integer form6p2; !integer form2p9; !integer form2id; !integer form3id; form1p12e := format({s+d.ddddddddddd�+nd}); form1p1e := format({+d.d�+nd}); form6p2 := format({snnnnnd.dd}); form2p9 := format({+nd.ddddddddds}); form2id := format({nd}); form3id := format({ndd}); printer := 30; open(printer); reader := 20; open(reader); max solution count := read(reader); newline(printer,1); writetext(printer,{The _ first _ }); write(printer, form2id, max solution count); writetext(printer,{ _ solutions:}); newline(printer,3); board length := read(reader); board width := read(reader); piece count := read(reader); place count := read(reader); board area := board length � (board width - 1); !begin !integer !array board [-39 : 100]; !integer !array place, index [1 : piece count]; !integer !array information [1 : 8 � place count]; !boolean !array unused [1 : piece count]; !procedure print solution; !begin !integer i, j; writetext(printer,{{c}print _solution: {c}}); writetext(printer,{{c}board _ length = }); write(printer, form3id, board length); newline(printer,1); writetext(printer,{{c}board _ width = }); write(printer, form3id, board width); newline(printer,1); writetext(printer,{{c}piece _ count = }); write(printer, form3id, piece count); newline(printer,1); writetext(printer,{{c}place _ count = }); write(printer, form3id, place count); newline(printer,1); solution count := solution count + 1; !if solution count > max solution count !then !begin writetext(printer,{{c}solution _ count = }); write(printer, form3id, solution count); newline(printer,3); !goto END OF RUN; !end; writetext(printer,{ _ }); !for j := 1 !step 1 !until 2 � board length !do !begin writetext(printer,{-}); writetext(printer,{ _ }) !end; !comment write(printer,form6p2,time); newline(printer,1); !for i := 0 !step board length !until board area !do !begin writetext(printer,{I}); !for j := 1 !step 1 !until board length - 1 !do !begin writetext(printer,{ _ _ _ }); !if board[i + j] � board[i + j + 1] !then writetext(printer,{I}) !else writetext(printer,{ _ }) !end; writetext(printer,{ _ _ _ }); writetext(printer,{I}); newline(printer,1); writetext(printer,{ _ }); !if i < board area !then !begin !for j := 1 !step 1 !until board length !do !begin !if board[i + j] � board[i + j + board length] !then !begin writetext(printer,{-}); writetext(printer,{ _ }); writetext(printer,{-}); writetext(printer,{ _ }) !end !else writetext(printer,{ _ _ _ _ }) !end !end !else !for j := 1 !step 1 !until 2 � board length !do !begin writetext(printer,{-}); writetext(printer,{ _ }) !end; newline(printer,1) !end; newline(printer,2); !end print solution; !procedure up (field, column); !value field, column; !integer field, column; !begin !integer i, j, k, r, w, piece, count; piece number := piece number + 1; !comment writetext(printer,{ piece_ number}); !comment write(printer, format({nddddc}), piece number); !for piece := 1 !step 1 !until piece count !do !if unused[piece] !then !begin unused[piece] := !false; board[field] := piece; count := place[piece] - 1; !for i := 0 !step 1 !until count !do !begin w := index[piece] + 4 � i; !if board[information[w] + field] = 0 !then !begin !if board[information[w + 1] + field] = 0 !then !begin !if board[information[w + 2] + field] = 0 !then !begin !if board[information[w + 3] + field] = 0 !then !begin !for j := 0, 1, 2, 3 !do board[information[w + j] + field] := piece; !if piece number = piece count !then print solution !else !begin !for k := column !step 1 !until board length !do !for r := 0 !step board length !until board area !do !if board[r + k] = 0 !then !goto NEXT; NEXT: up (r + k, k) !end; !for j := 0, 1, 2, 3 !do board[information[w + j] + field] := 0 !end !end !end !end !end; unused[piece] := !true !end; board[field] := 0; DOWN: piece number := piece number - 1 !end up; position := 1; !for i := 1 !step 1 !until piece count !do !begin j := read(reader); !comment stone piece number, is not used; index[i] := position; place[i] := read(reader); !for j := 1 !step 1 !until place[i] !do !begin !for k := 0 !step 1 !until 3 !do information[position + k] := read(reader); position := position + 4 !end !end; !for i := - 39 !step 1 !until 0, + 61 !step 1 !until 100 !do board[i] := - 1; !for i := 1 !step 1 !until 60 !do board[i] := 0; !for i := 1 !step 1 !until piece count !do unused[i] := !true; solution count := piece number := 0; up (1, 1); END OF RUN: !end ; close(reader); close(printer); !end **** 'begin' 'library' A0, A6; 'comment' program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); 'comment' extra parameter to intint makes it work; 'real' 'procedure' f(x, y); 'value' x,y; 'real' x,y; f:= x + x + y + y; 'real' 'procedure' int(a, b, f); 'comment' integrates f(x) over range a to b; 'value' a, b; 'real' a, b; 'real' 'procedure' f; 'begin' 'comment' adding extra parameter makes it work; 'real' 'procedure' intint(a, b, fa, fb, d); 'value' a, b, fa, fb, d; 'real' a, b, fa, fb; 'integer' d; 'begin' 'real' c, fc, ff; c := (a + b) * 0.5; fc := f(c); ff := (fa + 4.0*fc + fb); 'comment' answer is good enough if simrule no better than trapezoidal; 'if' abs( (fa + fb)*3.0 - ff ) < 0.001 'then' intint := ff * (b - a) * 0.16666666667 'else' intint := intint(a, c, fa, fc, d-1) + intint(c, b, fc, fb, d-1); 'end'; int := intint(a, b, f(a), f(b), 5); 'end'; 'real' 'procedure' intfy(x); 'comment' integral 0 to x of ff(x,y) dy; 'value' x; 'real' x; 'begin' 'real' 'procedure' fx(y); 'value' y; 'real' y; fx := f(x,y); intfy := int(0, x, fx); 'end'; 'real' 'procedure' minitest(x); 'value' x; 'real' x; 'begin' minitest := x*x*x; 'end'; 'real' answer, pi; 'integer' ii; writetext(30, {minitest_0_to_2_x^3 _ = _ }); answer := int(0, 2, minitest); output(30, answer); writetext(30, {Now _ for _ the _ square _ root _}); output(30, sqrt(answer)); pi := answer*arctan(1.0); writetext(30, {This _ is _ the _ value _ of _ pi _ calculated _ using _ arctan _ }); output(30, pi); answer := sin(pi/6.0); writetext(30, {sin _ pi/6 _ which _ should _ be _ a _ half _ }); output(30, answer); answer := cos(pi/6.0); writetext(30, {cos _ pi/6 _ which _ should _ be _ a _ the _ same _ as _ the _ next _ result _ }); output(30, answer); writetext(30, {should _ be _ same _ as _ the _ previous _ }); answer := sqrt(3.0)/2.0; output(30, answer); writetext(30, {Now _ square _ it _ to _ get _ 3/4 _ }); output(30, answer^2); ii := 3; writetext(30, {3^3 _ = _ }); output(30, ii^ii); writetext(30, {Integer _ divide _ 3 _ squared _ by _ 2 _ }); output(30, ii^2 % 2); writetext(30, {Calculate _ e _ using _ exp _ }); answer := exp(1.0); output(30, answer); writetext(30, {... _ and _ take _ its _ log _ }); output(30, ln(answer)); writetext(30, {{c}fulltest_0_to_1_triangle_ = _}); answer := int(0, 1, intfy); output(30, answer); writetext(30, {Testing _ exponentiation: _ 2 ^ 4 _ = _}); answer := 4.0; output(30, 2^answer); writetext(30, {Testing _ exponentiation: _ 2 ^ 4.0 _ = _}); output(30, 2.0^answer); 'end' **** 'begin' 'comment' Hello World + a bit; 'library' A0, A1, A4, A5,A12, A13, A14, A15; 'comment' Replace A6 by A1, A5, A15 for the genuine output routine; 'comment' The read(20) facility is in A4; 'real' x; open(30); writetext(30, {Hello _ World{c}}); x := 1.23; output(30, x); writetext(30, {What {s} a _ 'real' _ 'procedure' _ this {s} is {c}}); open(20); 'for' x := read(20) 'while' x < 9998.0 'do' output(30, x); close(20); close(30); 'end' **** !begin !comment JAZ164, R743, Outer Planets; !library A0, A1, A4, A5, A15; !integer form1p12e; !integer form1p1e; !integer form7p1; !integer form2p9; !integer k,t; !real a,k2,x; !boolean fi; !array y,ya,z,za[1:15],m[0:5],e[1:60],d[1:33]; !array ownd[1:5,1:5],ownr[1:5]; !real !procedure f(k); !integer k; !begin !integer i,j,i3,j3; !real p; !if k � 1 !then !goto A; !for i:= 1 !step 1 !until 4 !do !begin i3:= 3�i; !for j:= i+1 !step 1 !until 5 !do !begin j3:= 3�j; p:= (y[i3-2] - y[j3-2]) !up 2 + (y[i3-1] - y[j3-1]) !up 2 + (y[i3] - y[j3]) !up 2; ownd[i,j]:= ownd[j,i]:= 1/p/sqrt(p) !end !end ; !for i:= 1 !step 1 !until 5 !do !begin i3:= 3�i; ownd[i,i]:= 0; p:= y[i3-2] !up 2 + y[i3-1] !up 2 + y[i3] !up 2; ownr[i]:= 1/p/sqrt(p) !end ; A: i:= (k - 1) � 3 + 1; f:= k2 � (- m[0] � y[k] � ownr[i] + SUM(j,1,5,m[j]�((y[3�(j-i)+k]-y[k])�ownd[i,j]-y[3�(j-i)+k]�ownr[j]))) !end f; !procedure RK3n(x,a,b,y,ya,z,za,fxyj,j,e,d,fi,n); !value b,fi,n; !integer j,n; !real x,a,b,fxyj; !boolean fi; !array y,ya,z,za,e,d; !begin !integer jj; !real xl,h,hmin,int,hl,absh,fhm,discry,discrz,toly,tolz,mu,mu1,fhy,fhz; !boolean last,first,reject; !array yl,zl,k0,k1,k2,k3,k4,k5[1:n],ee[1:4�n]; !if fi !then !begin d[3]:= a; !for jj:= 1 !step 1 !until n !do !begin d[jj+3]:= ya[jj]; d[n+jj+3]:= za[jj] !end !end ; d[1]:= 0; xl:= d[3]; !for jj:= 1 !step 1 !until n !do !begin yl[jj]:= d[jj+3]; zl[jj]:= d[n+jj+3] !end ; !if fi !then d[2]:= b - d[3]; absh:= h:= abs(d[2]); !if b - xl < 0 !then h:= - h; int:= abs(b - xl); hmin:= int � e[1] + e[2]; !for jj:= 2 !step 1 !until 2�n !do !begin hl:= int � e[2�jj-1] + e[2�jj]; !if hl < hmin !then hmin:= hl !end ; !for jj:= 1 !step 1 !until 4�n !do ee[jj]:= e[jj]/int; first:= reject:= !true ; !if fi !then !begin last:= !true ; !goto nstep !end ; test: absh:= abs(h); !if absh < hmin !then !begin h:= !if h > 0 !then hmin !else - hmin; absh:= hmin !end ; !if h >= b - xl _e_q_v h >= 0 !then !begin d[2]:= h; last:= !true ; h:= b - xl; absh:= abs(h) !end !else last:= !false ; nstep: !if reject !then !begin x:= xl; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj]; !for j:= 1 !step 1 !until n !do k0[j]:= fxyj � h !end !else !begin fhy:= h/hl; !for jj:= 1 !step 1 !until n !do k0[jj]:= k5[jj] � fhy !end ; x:= xl + .27639 32022 50021 � h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] � .27639 32022 50021 + k0[jj] � .03819 66011 25011) � h; !for j:= 1 !step 1 !until n !do k1[j]:= fxyj � h; x:= xl + .72360 67977 49979 � h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] � .72360 67977 49979 + k1[jj] � .26180 33988 74989) � h; !for j:= 1 !step 1 !until n !do k2[j]:= fxyj � h; x:= xl + h � .5; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] � .5 + k0[jj] � .04687 5 + k1[jj] � .07982 41558 39840 - k2[jj] � .00169 91558 39840) � h; !for j:= 1 !step 1 !until n !do k4[j]:= fxyj � h; x:= !if last !then b !else xl + h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] + k0[jj] � .30901 69943 74947 + k2[jj] � .19098 30056 25053) � h; !for j:= 1 !step 1 !until n !do k3[j]:= fxyj � h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] + k0[jj] � .08333 33333 33333 + k1[jj] � .30150 28323 95825 + k2[jj] � .11516 38342 70842) � h; !for j:= 1 !step 1 !until n !do k5[j]:= fxyj � h; reject:= !false ; fhm:= 0; !for jj:= 1 !step 1 !until n !do !begin discry:= abs((- k0[jj] � .5 + k1[jj] � 1.80901 69943 74947 + k2[jj] � .69098 30056 25053 - k4[jj] � 2) � h); discrz:= abs((k0[jj] - k3[jj]) � 2 - (k1[jj] + k2[jj]) � 10 + k4[jj] � 16 + k5[jj] � 4); toly:= absh � (abs(zl[jj]) � ee[2�jj-1] + ee[2�jj]); tolz:= abs(k0[jj]) � ee[2�(jj+n)-1] + absh � ee[2�(jj+n)]; reject:= discry > toly _o_r discrz > tolz _o_r reject; fhy:= discry/toly; fhz:= discrz/tolz; !if fhz > fhy !then fhy:= fhz; !if fhy > fhm !then fhm:= fhy !end ; mu:= 1/(1 + fhm) + .45; !if reject !then !begin !if absh <= hmin !then !begin d[1]:= d[1] + 1; !for jj:= 1 !step 1 !until n !do !begin y[jj]:= yl[jj]; z[jj]:= zl[jj] !end ; first:= !true ; !goto next !end ; h:= mu � h; !goto test !end rej; !if first !then !begin first:= !false ; hl:= h; h:= mu � h; !goto acc !end ; fhy:= mu � h/hl + mu - mu1; hl:= h; h:= fhy � h; acc: mu1:= mu; !for jj:= 1 !step 1 !until n !do z[jj]:= zl[jj] + (k0[jj] + k3[jj]) � .08333 33333 33333 + (k1[jj] + k2[jj]) � .41666 66666 66667; next: !if b � x !then !begin xl:= x; !for jj:= 1 !step 1 !until n !do !begin yl[jj]:= y[jj]; zl[jj]:= z[jj] !end ; !goto test !end ; !if !not last !then d[2]:= h; d[3]:= x; !for jj:= 1 !step 1 !until n !do !begin d[jj+3]:= y[jj]; d[n+jj+3]:= z[jj] !end !end RK3n; !procedure TYP(x); !array x; !begin !integer k; writetext(10, {{c}}); writetext(10,{T _ = _ }); !comment ABSFIXT; write(10,form7p1,t+a); writetext(10, {{cc}}); !for k:= 1 !step 1 !until 5 !do !begin !if k=1 !then writetext(10,{J _ _ _ }) !else !if k=2 !then writetext(10,{S _ _ _ }) !else !if k=3 !then writetext(10,{U _ _ _ }) !else !if k=4 !then writetext(10,{N _ _ _ }) !else writetext(10,{P _ _ _ }); write(10,form2p9,x[3�k-2]); write(10,form2p9,x[3�k-1]); write(10,form2p9,x[3�k]); writetext(10, {{c}}) !end !end TYP; !real !procedure SUM(i,a,b,xi); !value b; !integer i,a,b; !real xi; !begin !real s; s:= 0; !for i:= a !step 1 !until b !do s:= s + xi; SUM:= s !end SUM; form1p12e := format({s+d.ddddddddddd�+nd}); form1p1e := format({+d.d�+nd}); form7p1 := format({snnnnnnd.d}); form2p9 := format({+nd.ddddddddds}); open(10); open(20); a:= read(20); !for k:= 1 !step 1 !until 15 !do !begin ya[k]:= read(20); za[k]:= read(20); !end ; !for k:= 0 !step 1 !until 5 !do m[k]:= read(20); k2:= read(20); e[1]:= read(20); !for k:= 2 !step 1 !until 60 !do e[k]:= e[1]; writetext(10,{JAZ164, _ R743, _ Outer _ Planets}); writetext(10, {{cc}}); !for k:= 1 !step 1 !until 15 !do !begin write(10,form1p12e,ya[k]); write(10,form1p12e,za[k]); writetext(10, {{c}}) !end ; !for k:= 0 !step 1 !until 5 !do !begin writetext(10, {{c}}); write(10,form1p12e,m[k]) !end ; writetext(10, {{cc}}); write(10,form1p12e,k2); writetext(10, {{cc}}); writetext(10,{eps _ = _ }); write(10,form1p1e,e[1]); writetext(10, {{c}}); t:= 0; TYP(ya); fi:= !true ; !for t:= 500,1000 !do !begin RK3n(x,0,t,y,ya,z,za,f(k),k,e,d,fi,15); fi:= !false ; TYP(y) !end ; close(20); close(10); !end ******** | 99, 10, 6, 12, 63, 1, 1, -9, 1, 11, 2, 2, 2, 1, 2, 3, 4, 10, 20, 30, 40, 3, 4, 1, 10, 20, 21, 1, 11, 20, 21, -10, -9, -8, 2, 10, 11, 12, 2, 4, 4, 1, 11, 21, 22, 1, -9, -19, -18, 10, 11, 12, 22, -10, -9, -8, -18, 5, 4, 1, 11, 21, 2, 1, -9, -19, 2, 1, 2, -8, 12, 10, -10, 1, 2, 6, 4, 1, 2, 12, 22, 1, 2, -8, -18, 1, 2, 10, 20, 1, 2, -10, -20, 7, 4, 1, 11, 12, 22, 1, -9, -8, -18, 10, 11, 21, 22, -10, -9, -19, -18, 8, 8, 1, 11, 12, 13, 1, -9, -8, -7, 1, 2, 12, 13, 1, 2, -8, -7, 10, 20, 21, 31, 10, 20, 19, 29, 10, 11, 21, 31, 10, 9, 19, 29, 9, 8, 1, -9, 2, 12, 1, 11, 2, -8, 10, 11, 21, 12, -10, -9, -19, -8, 1, 11, 21, 12, 1, -9, -19, -8, 1, 11, -9, 12, 1, 11, -9, -8, 10, 8, 1, 2, 3, 12, 1, 2, 3, -8, 10, 20, 30, 11, -10, -20, -30, -9, 1, 11, 21, -9, 1, -9, -19, 11, 11, 1, 2, 3, -9, 1, 2, 3, 11, 8, 1, 2, 3, 13, 1, 2, 3, -7, 10, 20, 30, 1, -10, -20, -30, 1, 1, 11, 21, 31, 1, -9, -19, -29, 10, 1, 2, 3, -10, 1, 2, 3, 12, 8, 1, 2, 11, 12, 1, 2, -9, -8, 1, 2, 10, 11, 1, 2, -10, -9, 1, 10, 11, 20, 1, 10, 11, 21, 1, -10, -9, -20, 1, -10, -9, -19, | ******* !begin !library A1, A4, A5, A15; !comment this is program 1; !procedure chk(v, s); !value v; !real v; !string s; !begin writetext(30, s); output(30, v); !end; chk(2430000.5, {2430000.5 _ = _}); chk(+0.342947415189�+1, {+0.342947415189�+1 _ = _}); chk(-0.557160570446�-2, {-0.557160570446�-2 _ = _}); chk(+0.335386959711�+1, {+0.335386959711�+1 _ = _}); chk(+0.505696783289�-2, {+0.505696783289�-2 _ = _}); chk(+0.135494901715�+1, {+0.135494901715�+1 _ = _}); chk(+0.230578543901�-2, {+0.230578543901�-2 _ = _}); chk(+0.664145542550�+1, {+0.664145542550�+1 _ = _}); chk(-0.415570776342�-2, {-0.415570776342�-2 _ = _}); chk(+0.597156957878�+1, {+0.597156957878�+1 _ = _}); chk(+0.365682722812�-2, {+0.365682722812�-2 _ = _}); chk(+0.218231499728�+1, {+0.218231499728�+1 _ = _}); chk(+0.169143213293�-2, {+0.169143213293�-2 _ = _}); chk(+0.112630437207�+2, {+0.112630437207�+2 _ = _}); chk(-0.325325669158�-2, {-0.325325669158�-2 _ = _}); chk(+0.146952576794�+2, {+0.146952576794�+2 _ = _}); chk(+0.189706021964�-2, {+0.189706021964�-2 _ = _}); chk(+0.627960525067�+1, {+0.627960525067�+1 _ = _}); chk(+0.877265322780�-3, {+0.877265322780�-3 _ = _}); chk(-0.301552268759�+2, {-0.301552268759�+2 _ = _}); chk(-0.240476254170�-3, {-0.240476254170�-3 _ = _}); chk(+0.165699966404�+1, {+0.165699966404�+1 _ = _}); chk(-0.287659532608�-2, {-0.287659532608�-2 _ = _}); chk(+0.143785752721�+1, {+0.143785752721�+1 _ = _}); chk(-0.117219543175�-2, {-0.117219543175�-2 _ = _}); chk(-0.211238353380�+2, {-0.211238353380�+2 _ = _}); chk(-0.176860753121�-2, {-0.176860753121�-2 _ = _}); chk(+0.284465098142�+2, {+0.284465098142�+2 _ = _}); chk(-0.216393453025�-2, {-0.216393453025�-2 _ = _}); chk(+0.153882659679�+2, {+0.153882659679�+2 _ = _}); chk(-0.148647893090�-3, {-0.148647893090�-3 _ = _}); chk(+0.100000597682�+1, {+0.100000597682�+1 _ = _}); chk(+0.954786104043�-3, {+0.954786104043�-3 _ = _}); chk(+0.285583733151�-3, {+0.285583733151�-3 _ = _}); chk(+0.437273164546�-4, {+0.437273164546�-4 _ = _}); chk(+0.517759138449�-4, {+0.517759138449�-4 _ = _}); chk(+0.277777777778�-5, {+0.277777777778�-5 _ = _}); chk(+0.295912208286�-3, {+0.295912208286�-3 _ = _}); chk(+0.10�-3, {+0.10�-3 _ = _}); close(30); !end ************* !begin !comment pentomino, temporary dud; !library A0, A1, A4, A5, A15; !procedure newline (device, number); !value device, number; !integer device, number; !for number : = number !step -1 !until 1 !do writetext(device, {{c}}); !procedure main; !begin !integer solution count, max solution count; !integer piece number, piece count, place count; !integer board length, board width, board area; !integer i, j, k, position; !integer printer, reader; !integer form1p12e; !integer form1p1e; !integer form6p2; !integer form2p9; !integer form2id; !integer form3id; form1p12e := format({s+d.ddddddddddd�+nd}); form1p1e := format({+d.d�+nd}); form6p2 := format({snnnnnd.dd}); form2p9 := format({+nd.ddddddddds}); form2id := format({nd}); form3id := format({ndd}); printer : = 30; open(printer); reader := 20; open(reader); max solution count := read(reader); newline(printer,1); writetext(printer,{The _ first _ }); write(printer, form2id, max solution count); writetext(printer,{ _ solutions:}); newline(printer,3); board length := read(reader); board width := read(reader); piece count := read(reader); place count := read(reader); board area := board length � (board width - 1); !begin !integer !array board [-39 : 100]; !integer !array place, index [1 : piece count]; !integer !array information [1 : 8 � place count]; !boolean !array unused [1 : piece count]; !procedure print solution; !begin !integer i, j; writetext(printer,{{c}print _solution: {c}}); writetext(printer,{{c}board _ length = }); write(printer, form3id, board length); newline(printer,1); writetext(printer,{{c}board _ width = }); write(printer, form3id, board width); newline(printer,1); writetext(printer,{{c}piece _ count = }); write(printer, form3id, piece count); newline(printer,1); writetext(printer,{{c}place _ count = }); write(printer, form3id, place count); newline(printer,1); solution count := solution count + 1; !if solution count > max solution count !then !begin writetext(printer,{{c}solution _ count = }); write(printer, form3id, solution count); newline(printer,3); !go to END OF RUN; !end; writetext(printer,{ _ }); !for j := 1 !step 1 !until 2 � board length !do !begin writetext(printer,{-}); writetext(printer,{ _ }) !end; !comment write(printer,form6p2,time); newline(printer,1); !for i := 0 !step board length !until board area !do !begin writetext(printer,{I}); !for j := 1 !step 1 !until board length - 1 !do !begin writetext(printer,{ _ _ _ }); !if board[i + j] � board[i + j + 1] !then writetext(printer,{I}) !else writetext(printer,{ _ }) !end; writetext(printer,{ _ _ _ }); writetext(printer,{I}); newline(printer,1); writetext(printer,{ _ }); !if i < board area !then !begin !for j := 1 !step 1 !until board length !do !begin !if board[i + j] � board[i + j + board length] !then !begin writetext(printer,{-}); writetext(printer,{ _ }); writetext(printer,{-}); writetext(printer,{ _ }) !end !else writetext(printer,{ _ _ _ _ }) !end !end !else !for j := 1 !step 1 !until 2 � board length !do !begin writetext(printer,{-}); writetext(printer,{ _ }) !end; newline(printer,1) !end; newline(printer,2); !end print solution; !procedure up (field, column); !value field, column; !integer field, column; !begin !integer i, j, k, r, w, piece, count; piece number := piece number + 1; writetext(printer,{ piece_ number}); write(printer, format({nddddc}), piece number); !for piece := 1 !step 1 !until piece count !do !if unused[piece] !then !begin unused[piece] := !false; board[field] := piece; count := place[piece] - 1; !for i := 0 !step 1 !until count !do !begin w := index[piece] + 4 � i; !if board[information[w] + field] = 0 !then !begin !if board[information[w + 1] + field] = 0 !then !begin !if board[information[w + 2] + field] = 0 !then !begin !if board[information[w + 3] + field] = 0 !then !begin !for j := 0, 1, 2, 3 !do board[information[w + j] + field] := piece; !if piece number = piece count !then print solution !else !begin !for k := column !step 1 !until board length !do !for r := 0 !step board length !until board area !do !if board[r + k] = 0 !then 'go to' NEXT; NEXT: up (r + k, k) !end; !for j := 0, 1, 2, 3 !do board[information[w + j] + field] := 0 !end !end !end !end !end; unused[piece] := !true !end; board[field] := 0; DOWN: piece number := piece number - 1 !end up; position := 1; !for i := 1 !step 1 !until piece count !do !begin j := read(reader); !comment stone piece number, is not used; index[i] := position; place[i] := read(reader); !for j := 1 !step 1 !until place[i] !do !begin !for k := 0 !step 1 !until 3 !do information[position + k] := read(reader); position := position + 4 !end !end; !for i := - 39 !step 1 !until 0, + 61 !step 1 !until 100 !do board[i] := - 1; !for i := 1 !step 1 !until 60 !do board[i] := 0; !for i := 1 !step 1 !until piece count !do unused[i] := !true; solution count := piece number := 0; up (1, 1); END OF RUN: !end ; close(reader); close(printer); !end ; !procedure TRACE(i); !value i; !integer i; !KDF9 1/0/0/0; {i}; =V0P244; JSP287; !EXIT; !ALGOL; main; TRACE(77); !end| **** !begin !comment TRACE test; !library A0, A1, A15; !procedure TRACE(i); !value i; !integer i; !KDF9 1/0/0/0; {i}; =V0P244; JSP987; DUD; !EXIT; !ALGOL; !procedure newline (device, number); !value device, number; !integer device, number; !for number := number !step -1 !until 1 !do writetext(device, {{c}}); !integer i,j,k; TRACE(123); newline(30,3); i := 99; j := i; k := i+j; !end **** !begin !comment pentomino, 130968; !library A0, A1, A4, A5, A15; !procedure newline (device, number); !value device, number; !integer device, number; !for number := number !step -1 !until 1 !do writetext(device, {{c}}); !integer solution count, max solution count; !integer piece number, piece count, place count; !integer board length, board width, board area; !integer i, j, k, position; !integer printer, reader; !integer form1p12e; !integer form1p1e; !integer form6p2; !integer form2p9; !integer form2id; !integer form3id; form1p12e := format({s+d.ddddddddddd�+nd}); form1p1e := format({+d.d�+nd}); form6p2 := format({snnnnnd.dd}); form2p9 := format({+nd.ddddddddds}); form2id := format({nd}); form3id := format({ndd}); printer := 30; open(printer); reader := 20; open(reader); max solution count := read(reader); newline(printer,1); writetext(printer,{The _ first _ }); write(printer, form2id, max solution count); writetext(printer,{ _ solutions:}); newline(printer,3); board length := read(reader); board width := read(reader); piece count := read(reader); place count := read(reader); board area := board length � (board width - 1); !begin !integer !array board [-39 : 100]; !integer !array place, index [1 : piece count]; !integer !array information [1 : 8 � place count]; !boolean !array unused [1 : piece count]; !procedure print solution; !begin !integer i, j; writetext(printer,{{c}print _solution: {c}}); writetext(printer,{{c}board _ length = }); write(printer, form3id, board length); newline(printer,1); writetext(printer,{{c}board _ width = }); write(printer, form3id, board width); newline(printer,1); writetext(printer,{{c}piece _ count = }); write(printer, form3id, piece count); newline(printer,1); writetext(printer,{{c}place _ count = }); write(printer, form3id, place count); newline(printer,1); solution count := solution count + 1; !if solution count > max solution count !then !begin writetext(printer,{{c}solution _ count = }); write(printer, form3id, solution count); newline(printer,3); !goto END OF RUN; !end; writetext(printer,{ _ }); !for j := 1 !step 1 !until 2 � board length !do !begin writetext(printer,{-}); writetext(printer,{ _ }) !end; !comment write(printer,form6p2,time); newline(printer,1); !for i := 0 !step board length !until board area !do !begin writetext(printer,{I}); !for j := 1 !step 1 !until board length - 1 !do !begin writetext(printer,{ _ _ _ }); !if board[i + j] � board[i + j + 1] !then writetext(printer,{I}) !else writetext(printer,{ _ }) !end; writetext(printer,{ _ _ _ }); writetext(printer,{I}); newline(printer,1); writetext(printer,{ _ }); !if i < board area !then !begin !for j := 1 !step 1 !until board length !do !begin !if board[i + j] � board[i + j + board length] !then !begin writetext(printer,{-}); writetext(printer,{ _ }); writetext(printer,{-}); writetext(printer,{ _ }) !end !else writetext(printer,{ _ _ _ _ }) !end !end !else !for j := 1 !step 1 !until 2 � board length !do !begin writetext(printer,{-}); writetext(printer,{ _ }) !end; newline(printer,1) !end; newline(printer,2); !end print solution; !procedure up (field, column); !value field, column; !integer field, column; !begin !integer i, j, k, r, w, piece, count; piece number := piece number + 1; writetext(printer,{ piece_ number}); write(printer, format({nddddc}), piece number); !for piece := 1 !step 1 !until piece count !do !if unused[piece] !then !begin unused[piece] := !false; board[field] := piece; count := place[piece] - 1; !for i := 0 !step 1 !until count !do !begin w := index[piece] + 4 � i; !if board[information[w] + field] = 0 !then !begin !if board[information[w + 1] + field] = 0 !then !begin !if board[information[w + 2] + field] = 0 !then !begin !if board[information[w + 3] + field] = 0 !then !begin !for j := 0, 1, 2, 3 !do board[information[w + j] + field] := piece; !if piece number = piece count !then print solution !else !begin !for k := column !step 1 !until board length !do !for r := 0 !step board length !until board area !do !if board[r + k] = 0 !then !goto NEXT; NEXT: up (r + k, k) !end; !for j := 0, 1, 2, 3 !do board[information[w + j] + field] := 0 !end !end !end !end !end; unused[piece] := !true !end; board[field] := 0; DOWN: piece number := piece number - 1 !end up; position := 1; !for i := 1 !step 1 !until piece count !do !begin j := read(reader); !comment stone piece number, is not used; index[i] := position; place[i] := read(reader); !for j := 1 !step 1 !until place[i] !do !begin !for k := 0 !step 1 !until 3 !do information[position + k] := read(reader); position := position + 4 !end !end; !for i := - 39 !step 1 !until 0, + 61 !step 1 !until 100 !do board[i] := - 1; !for i := 1 !step 1 !until 60 !do board[i] := 0; !for i := 1 !step 1 !until piece count !do unused[i] := !true; solution count := piece number := 0; up (1, 1); END OF RUN: !end ; close(reader); close(printer); !end **** !begin !comment JAZ164, extract; !library A0, A1, A4, A5, A15; !real !procedure num; !KDF9 1/0/0/1; V0 = B22645050 30200000; V0; !EXIT; !ALGOL; !integer !procedure fmt; !KDF9 1/0/0/1; V0 = B00000777 04170140; V0; !EXIT; !ALGOL; open(30); write(30, fmt, num); writetext(30, {{c}}); close(30); !end ******** !begin !library A0, A6; !comment A1, A4, A5, A15; !integer i,j,k; !real x,y,z; !array A[1:10]; open(20); !for i := 1 !step 1 !until 10 !do A[i]:=read(20); !for i := 1 !step 1 !until 10 !do output(30,A[i]); !end **** !begin !library A6; 'comment' A0, A1, A4, A5, A15; !integer i,j,k; !real x,y,z; !array A[1:10]; x := y ^10.0; open(20); !for i := 0 !step 1 !until 10 !do !begin x:=read(20); output(30,x); !end; !end @ data possibly **** !begin !library A1, A4, A5, A14, A15; !comment this is program 2; !real x; open(20); open(30); !for x := read(20) !while x != 0 !do !begin copytext(20, 30, {ab}); writetext(30,{ _ = _ }); output(30, x); !end; close(30); close(20); !end *********** !begin !comment JAZ164, R743, Outer Planets -- only ASCII chars and newline; !library A0, A1, A4, A5, A12, A15; !integer form1p12e; !integer form1p1e; !integer form7p1; !integer form2p9; !integer k,t; !real a,k2,x; !boolean fi; !array y,ya,z,za[1:15],m[0:5],e[1:60],d[1:33]; !array ownd[1:5,1:5],ownr[1:5]; !real !procedure f(k); !integer k; !begin !integer i,j,i3,j3; !real p; !if k # 1 !then !goto A; !for i:= 1 !step 1 !until 4 !do !begin i3:= 3*i; !for j:= i+1 !step 1 !until 5 !do !begin j3:= 3*j; p:= (y[i3-2] - y[j3-2]) ^ 2 + (y[i3-1] - y[j3-1]) ^ 2 + (y[i3] - y[j3]) ^ 2; ownd[i,j]:= ownd[j,i]:= 1/p/sqrt(p) !end !end ; !for i:= 1 !step 1 !until 5 !do !begin i3:= 3*i; ownd[i,i]:= 0; p:= y[i3-2] ^ 2 + y[i3-1] ^ 2 + y[i3] ^ 2; ownr[i]:= 1/p/sqrt(p) !end ; A: i:= (k - 1) % 3 + 1; f:= k2 * (- m[0] * y[k] * ownr[i] + SUM(j,1,5,m[j]*((y[3*(j-i)+k]-y[k])*ownd[i,j]-y[3*(j-i)+k]*ownr[j]))) !end f; !procedure RK3n(x,a,b,y,ya,z,za,fxyj,j,e,d,fi,n); !value b,fi,n; !integer j,n; !real x,a,b,fxyj; !boolean fi; !array y,ya,z,za,e,d; !begin !integer jj; !real xl,h,hmin,int,hl,absh,fhm,discry,discrz,toly,tolz,mu,mu1,fhy,fhz; !boolean last,first,reject; !array yl,zl,k0,k1,k2,k3,k4,k5[1:n],ee[1:4*n]; !if fi !then !begin d[3]:= a; !for jj:= 1 !step 1 !until n !do !begin d[jj+3]:= ya[jj]; d[n+jj+3]:= za[jj] !end !end ; d[1]:= 0; xl:= d[3]; !for jj:= 1 !step 1 !until n !do !begin yl[jj]:= d[jj+3]; zl[jj]:= d[n+jj+3] !end ; !if fi !then d[2]:= b - d[3]; absh:= h:= abs(d[2]); !if b - xl < 0 !then h:= - h; int:= abs(b - xl); hmin:= int * e[1] + e[2]; !for jj:= 2 !step 1 !until 2*n !do !begin hl:= int * e[2*jj-1] + e[2*jj]; !if hl < hmin !then hmin:= hl !end ; !for jj:= 1 !step 1 !until 4*n !do ee[jj]:= e[jj]/int; first:= reject:= !true ; !if fi !then !begin last:= !true ; !goto nstep !end ; test: absh:= abs(h); !if absh < hmin !then !begin h:= !if h > 0 !then hmin !else - hmin; absh:= hmin !end ; !if h >= b - xl !eqv h >= 0 !then !begin d[2]:= h; last:= !true ; h:= b - xl; absh:= abs(h) !end !else last:= !false ; nstep: !if reject !then !begin x:= xl; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj]; !for j:= 1 !step 1 !until n !do k0[j]:= fxyj * h !end !else !begin fhy:= h/hl; !for jj:= 1 !step 1 !until n !do k0[jj]:= k5[jj] * fhy !end ; x:= xl + .27639 32022 50021 * h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] * .27639 32022 50021 + k0[jj] * .03819 66011 25011) * h; !for j:= 1 !step 1 !until n !do k1[j]:= fxyj * h; x:= xl + .72360 67977 49979 * h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] * .72360 67977 49979 + k1[jj] * .26180 33988 74989) * h; !for j:= 1 !step 1 !until n !do k2[j]:= fxyj * h; x:= xl + h * .5; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] * .5 + k0[jj] * .04687 5 + k1[jj] * .07982 41558 39840 - k2[jj] * .00169 91558 39840) * h; !for j:= 1 !step 1 !until n !do k4[j]:= fxyj * h; x:= !if last !then b !else xl + h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] + k0[jj] * .30901 69943 74947 + k2[jj] * .19098 30056 25053) * h; !for j:= 1 !step 1 !until n !do k3[j]:= fxyj * h; !for jj:= 1 !step 1 !until n !do y[jj]:= yl[jj] + (zl[jj] + k0[jj] * .08333 33333 33333 + k1[jj] * .30150 28323 95825 + k2[jj] * .11516 38342 70842) * h; !for j:= 1 !step 1 !until n !do k5[j]:= fxyj * h; reject:= !false ; fhm:= 0; !for jj:= 1 !step 1 !until n !do !begin discry:= abs((- k0[jj] * .5 + k1[jj] * 1.80901 69943 74947 + k2[jj] * .69098 30056 25053 - k4[jj] * 2) * h); discrz:= abs((k0[jj] - k3[jj]) * 2 - (k1[jj] + k2[jj]) * 10 + k4[jj] * 16 + k5[jj] * 4); toly:= absh * (abs(zl[jj]) * ee[2*jj-1] + ee[2*jj]); tolz:= abs(k0[jj]) * ee[2*(jj+n)-1] + absh * ee[2*(jj+n)]; reject:= discry > toly !or discrz > tolz !or reject; fhy:= discry/toly; fhz:= discrz/tolz; !if fhz > fhy !then fhy:= fhz; !if fhy > fhm !then fhm:= fhy !end ; mu:= 1/(1 + fhm) + .45; !if reject !then !begin !if absh <= hmin !then !begin d[1]:= d[1] + 1; !for jj:= 1 !step 1 !until n !do !begin y[jj]:= yl[jj]; z[jj]:= zl[jj] !end ; first:= !true ; !goto next !end ; h:= mu * h; !goto test !end rej; !if first !then !begin first:= !false ; hl:= h; h:= mu * h; !goto acc !end ; fhy:= mu * h/hl + mu - mu1; hl:= h; h:= fhy * h; acc: mu1:= mu; !for jj:= 1 !step 1 !until n !do z[jj]:= zl[jj] + (k0[jj] + k3[jj]) * .08333 33333 33333 + (k1[jj] + k2[jj]) * .41666 66666 66667; next: !if b # x !then !begin xl:= x; !for jj:= 1 !step 1 !until n !do !begin yl[jj]:= y[jj]; zl[jj]:= z[jj] !end ; !goto test !end ; !if !not last !then d[2]:= h; d[3]:= x; !for jj:= 1 !step 1 !until n !do !begin d[jj+3]:= y[jj]; d[n+jj+3]:= z[jj] !end !end RK3n; !procedure TYP(x); !array x; !begin !integer k; newline(30, 1); writetext(30,{T _ = _ }); !comment ABSFIXT; write(30,form7p1,t+a); newline(30, 2); !for k:= 1 !step 1 !until 5 !do !begin !if k=1 !then writetext(30,{J _ _ _ }) !else !if k=2 !then writetext(30,{S _ _ _ }) !else !if k=3 !then writetext(30,{U _ _ _ }) !else !if k=4 !then writetext(30,{N _ _ _ }) !else writetext(30,{P _ _ _ }); write(30,form2p9,x[3*k-2]); write(30,form2p9,x[3*k-1]); write(30,form2p9,x[3*k]); newline(30, 1) !end !end TYP; !real !procedure SUM(i,a,b,xi); !value b; !integer i,a,b; !real xi; !begin !real s; s:= 0; !for i:= a !step 1 !until b !do s:= s + xi; SUM:= s !end SUM; form1p12e := format({s+d.ddddddddddd~+nd}); form1p1e := format({+d.d~+nd}); form7p1 := format({snnnnnnd.d}); form2p9 := format({+nd.ddddddddds}); open(30); open(20); a:= read(20); !for k:= 1 !step 1 !until 15 !do !begin ya[k]:= read(20); za[k]:= read(20); !end ; !for k:= 0 !step 1 !until 5 !do m[k]:= read(20); k2:= read(20); e[1]:= read(20); !for k:= 2 !step 1 !until 60 !do e[k]:= e[1]; writetext(30,{JAZ164, _ R743, _ Outer _ Planets}); newline(30, 2); !for k:= 1 !step 1 !until 15 !do !begin write(30,form1p12e,ya[k]); write(30,form1p12e,za[k]); newline(30, 1) !end ; !for k:= 0 !step 1 !until 5 !do !begin newline(30, 1); write(30,form1p12e,m[k]) !end ; newline(30, 2); write(30,form1p12e,k2); newline(30, 2); writetext(30,{eps _ = _ }); write(30,form1p1e,e[1]); newline(30, 1); t:= 0; TYP(ya); fi:= !true ; !for t:= 500,1000 !do !begin RK3n(x,0,t,y,ya,z,za,f(k),k,e,d,fi,15); fi:= !false ; TYP(y) !end ; close(20); close(30); !end **** 'begin' !library A0, A1, A4, A5,A12, A13, A14, A15; 'integer' i; writetext(30, {Hello _ World!{c}}); open(20); i := read(20); write(30, format({+ndddc}), i); newline(30,1); writetext(30, { First _[s_] line _[s_] of _[s_] output _[c_]incomplete _[s_] line}); writetext(30, { This _[s_] should _[s_] be _[s_] a _[s_] very _[s_] long _[s_] line.}); writetext(30, { This _[s_] should _[s_] be _[s_] a _[s_] very, _[s_] very _[s_] long _[s_] line.}); writetext(30, { This _[s_] should _[s_] be _[s_] a _[s_] very, _[s_] very, _[s_] very _[s_] long _[s_] line.}); writetext(30, { This _[s_] should _[s_] be _[s_] a _[s_] very, _[s_] very, _[s_] very, _[s_] very, _[s_] very _[s_] long _[s_] line._[c_]}); close(20); close(30); 'end' **** 'begin' !library A0, A1, A4, A5,A12, A13, A14, A15; 'integer' i; writetext(30, {Hello _ World!{c}}); open(20); i := read(20); write(30, format({+ndddc}), i); copytext(20, 30, {;;}); newline(30,1); writetext(30, { ;First _[s_] line _[s_] of _[s_] output _[c_]incomplete _[s_] line This _[s_] should _[s_] be _[s_] a _[s_] very _[s_] long _[s_] line. This _[s_] should _[s_] be _[s_] a _[s_] very, _[s_] very _[s_] long _[s_] line. This _[s_] should _[s_] be _[s_] a _[s_] very, _[s_] very, _[s_] very _[s_] long _[s_] line. This _[s_] should _[s_] be _[s_] a _[s_] very, _[s_] very, _[s_] very, _[s_] very, _[s_] very _[s_] long _[s_] line._[c_]}); close(20); close(30); 'end' **** !begin !library A0, A1, A4, A5, A15; !comment eigenvalues of a real symmetric matrix by the QR method. Algorithm 253, P.A. Businger, CACM 8 (1965) 217. ; !integer n; open(20); open(30); n := read(20); !begin !integer i,j; !real !array a[1:n,1:n], b[1:n,1:n]; !procedure symmetric QR1(n,g); !value n; !integer n; !array g; !begin !comment uses Householders's method and the QR algorithm to find all n eigenvalues of the real symmetric matrix whose lower triangular part is given in the array g[1:n,1:n]. The computed eigenvalues are stored as the diagonal elements g[i,i]. The original contents of the lower triangular part of g are lost during the computation whereas the strictly upper triagular part of g is left untouched. ; !real !procedure sum(i,m,n,a); !value m,n; !integer i,m,n; !real a; !begin !real s; s:= 0; !for i:= m !step 1 !until n !do s:= s + a; sum:= s !end sum; !real !procedure max (a,b); !value a,b; !real a,b; max:= !if a > b !then a !else b; !procedure Housholder tridiagonalization 1(n,g,a,bq,norm); !value n; !integer n; !array g,a,bq; !real norm; !comment nonlocal real procedure sum, max; !comment reduces the given real symmetric n by n matrix g to tridiagonal form using n - 2 elementary orthogonal trans-formations (I-2ww') = (I-gamma uu'). Only the lower triangular part of g need be given. The diagonal elements and the squares of the subdiagonal elements of the reduced matrix are stored in a[1:n] and bq[1:n-1] respectively. norm is set equal to the infinity norm of the reduced matrix. The columns of the strictly lower triagular part of g are replaced by the nonzero portions of the vectors u. ; !begin !integer i,j,k; !real t,absb,alpha,beta,gamma,sigma; !array p[2:n]; norm:= absb:= 0; !for k:= 1 !step 1 !until n - 2 !do !begin a[k]:= g[k,k]; sigma:= bq[k]:= sum(i,k+1,n,g[i,k]^2); t:= absb + abs(a[k]); absb:= sqrt(sigma); norm:= max(norm,t+absb); !if sigma � 0 !then !begin alpha:= g[k+1,k]; beta:= !if alpha < 0 !then absb !else - absb; gamma:= 1 / (sigma-alpha�beta); g[k+1,k]:= alpha - beta; !for i:= k + 1 !step 1 !until n !do p[i]:= gamma � (sum(j,k+1,i,g[i,j]�g[j,k]) + sum(j,i+1,n,g[j,i]�g[j,k])); t:= 0.5 � gamma � sum(i,k+1,n,g[i,k]�p[i]); !for i:= k + 1 !step 1 !until n !do p[i]:= p[i] - t�g[i,k]; !for i:= k + 1 !step 1 !until n !do !for j:= k + 1 !step 1 !until i !do g[i,j]:= g[i,j] - g[i,k]�p[j] - p[i]�g[j,k] !end !end k; a[n-1]:= g[n-1,n-1]; bq[n-1]:= g[n,n-1]^2; a[n]:= g[n,n]; t:= abs(g[n,n-1]); norm:= max(norm,absb+abs(a[n-1])+t); norm:= max(norm,t+abs(a[n])) !end Housholder tridiagonalization 1; !integer i,k,m,m1; !real norm,epsq,lambda,mu,sq1,sq2,u,pq,gamma,t; !array a[1:n],bq[0:n-1]; Housholder tridiagonalization 1(n,g,a,bq,norm); epsq:= 3.25�-24�norm^2; !comment The tolerance used in the QR iteration depends on the square of the relative machine precision. Here 3.25�-24 is used, which is appropriate for a machine with a 39-bit mantissa, like KDF9. ; mu:= 0; m:= n; inspect: !if m = 0 !then !goto return !else i:= k:= m1:= m - 1; bq[0]:= 0; !if bq[k] _< epsq !then !begin g[m,m]:= a[m]; mu:= 0; m:= k; !goto inspect !end ; !for i:= i - 1 !while bq[i] > epsq !do k:= i; !if k = m1 !then !begin !comment treat 2 � 2 block separately; mu:= a[m1]�a[m] - bq[m1]; sq1:= a[m1] + a[m]; sq2:= sqrt((a[m1]-a[m])^2+4�bq[m1]); lambda:= 0.5�(!if sq1_>0 !then sq1+sq2 !else sq1-sq2); g[m1,m1]:= lambda; g[m,m]:= mu / lambda; mu:= 0; m:= m - 2; !goto inspect !end ; lambda:= !if abs(a[m]-mu) < 0.5�abs(a[m]) !then a[m] + 0.5�sqrt(bq[m1]) !else 0.0; mu:= a[m]; sq1:= sq2:= u:= 0; !for i:= k !step 1 !until m1 !do !begin !comment shortcut single QR iteration; gamma:= a[i] - lambda - u; pq:= !if sq1 � 1 !then gamma^2/(1-sq1) !else (1-sq2)�bq[i-1]; t:= pq + bq[i]; bq[i-1]:= sq1 � t; sq2:= sq1; sq1:= bq[i] / t; u:= sq1 � (gamma+a[i+1]-lambda); a[i]:= gamma + u + lambda !end i; gamma:= a[m] - lambda - u; bq[m1]:= sq1 � (!if sq1�1 !then gamma^2/(1-sq1) !else (1-sq2)�bq[m1]); a[m]:= gamma + lambda; !goto inspect; return: !end symmetric QR 1; !for i:= 1 !step 1 !until n !do !for j:= 1 !step 1 !until i !do b[i,j] := read(20); !for i:= 1 !step 1 !until n !do !for j:= 1 !step 1 !until i !do a[i,j] := b[i,j]; symmetric QR 1(n,a); !for i:= 1 !step 1 !until n !do !begin write(30, format({nds}), i); write(30, format({+d.ddddddddd�+ddc}), a[i,i]) !end ; write(30, format({+d.ddddddddd�+dd}), a[1,1]+a[2,2]); writetext(30, { _ should _ equal _ }); write(30, format({+d.ddddddddd�+dd}), b[1,1]+b[n,n]); writetext(30, { _ and _ }); write(30, format({+d.ddddddddd�+ddc}), a[n-1,n-1]+a[n,n]); !end ; close(20); close(30); !end **** _b_e_g_i_n _l_i_b_r_a_r_y A0, A1, A4, A5,A12, A13, A14, A15; _i_n_t_e_g_e_r i; writetext(30, _[Hello _ World!_[c_]_]); writetext(30, _[More _ of _ Bill's _ Latin-1_[c_]_]); writetext(30, _[� _ for _ subscript _ 10_[c_]_]); writetext(30, _[_< _ for _ le_[c_]_]); writetext(30, _[_> _ for _ ge_[c_]_]); writetext(30, _[� _ for _ multiplication_[c_]_]); writetext(30, _[� _ for _ #_[c_]_]); writetext(30, _[� _ for _ integer _ division_[c_]_]); writetext(30, _[This _ line _ ends _ with _ a _ star _ *._[c_]_]); _e_n_d **** 'begin' 'comment' T89; 'library' A0, A6; 'real' i, j; 'array' a[1 : 2, 1 : 3]; 'real' 'procedure' gps(i, n, z, v); 'real' i, n, z, v; 'begin' 'for' i := 1 'step' 1 'until' n 'do' z := v; gps := 1 'end'; output(30, gps(j, 3.0, i, gps(i, 2.0, a[i, j], i + j))); 'for' i := 1 'step' 1 'until' 2 'do' 'for' j := 1 'step' 1 'until' 3 'do' 'if' a[i, j] != i + j 'then' output(30, 11 * i + j) 'end' **** !begin !library A0, A1,A5,A15; !real w, x, y, epsilon, delta; epsilon := (1.0 / (2.0 ^ 39)) / 2.0; delta := 1.0 / 1.01037 / 10.0; writetext(30, {{s}delta{s}={s}}); output(30, delta); writetext(30, {{c}}); writetext(30, {{s}epsilon{s}={s}1/2 !up 40{s}={s}}); output(30, epsilon); writetext(30, {{c}}); x := 3.14159265359 / 4.0; w := x - epsilon; y := x + epsilon; output(30, w); writetext(30, {{ss}}); output(30, sin(w)); writetext(30, {{ss}}); output(30, cos(w)); writetext(30, {{ss}}); output(30, sin(w)/cos(w)); writetext(30, {{ss}}); output(30, arctan(sin(w)/cos(w))); writetext(30, {{ss}}); output(30, (arctan(sin(w)/cos(w)) - w) / epsilon); writetext(30, {{c}}); output(30, x); writetext(30, {{ss}}); output(30, sin(x)); writetext(30, {{ss}}); output(30, cos(x)); writetext(30, {{ss}}); output(30, sin(x)/cos(x)); writetext(30, {{ss}}); output(30, arctan(sin(x)/cos(x))); writetext(30, {{ss}}); output(30, (arctan(sin(x)/cos(x)) - x) / epsilon); writetext(30, {{c}}); output(30, y); writetext(30, {{ss}}); output(30, sin(y)); writetext(30, {{ss}}); output(30, cos(y)); writetext(30, {{ss}}); output(30, sin(y)/cos(y)); writetext(30, {{ss}}); output(30, arctan(sin(y)/cos(y))); writetext(30, {{ss}}); output(30, (arctan(sin(y)/cos(y)) - y) / epsilon); writetext(30, {{c}}); !end ******************************** !begin !library A0, A1, A4, A5, A15; !integer i, j; 'comment' program from Bill; !real x; open(10); writetext(10, {Hello_World.{c}}); open(20); L: i := read(20); write(10, format({-ndddddddddds}), i); x := read(20); write(10, format({-d.dddsdddsddd~+ndc}), x); !if i = 0 !then writetext(10, {Farewell,_Cruel_World.{c}}) !else !goto L; close(20); close(10); !end **** 'begin' 'library' A0, A1, A5, A4; 'comment' just output; 'real' res; 'integer' f; f := format({#d.ddd~+ddc}); open(20); res := read(20); close(20); write(30, f, res); 'end' **** 'begin' 'library' A0, A1, A5, A14; 'comment' just output; 'real' res; 'integer' f; f := format({d.ddd~+ddc}); res := 12.345; write(30, f, res); open(20); copytext(20, 30, {;;}); close(20); 'end' **** 'begin' 'comment' T55; 'library' A0, A1, A5, A4; 'integer' 'array' eq[1 : 9]; 'integer' i; 'real' x, y; 'procedure' print eq; 'for' i := 1 'step' 1 'until' 9 'do' output(30, eq[i]); 'procedure' test(a, b, c); 'value' a, b, c; 'real' a, b, c; 'begin' 'procedure' inc(a, b, i); 'value' a, b, i; 'real' a, b; 'integer' i; 'if' a < b 'then' eq[i] := eq[i] + 1 'else' 'if' a = b 'then' eq[i + 1] := eq[i + 1] + 1 'else' eq[i + 2] := eq[i + 2] + 1; inc(a, b, 1); inc(b, c, 4); inc(c, a, 7) 'end'; open(20); 'for' i := 1 'step' 1 'until' 9 'do' eq[i] := 0; i := 1; 'for' x := 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.40, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.50, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.60, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.70, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.80, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.90, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1.00 'do' 'begin' y := read(20); test(x, y, i / 100); i := i + 1 'end'; printeq; i := 1; 'for' x := 100.01, 100.02, 100.03, 100.04, 100.05, 100.06, 100.07, 100.08, 100.09, 100.10, 100.11, 100.12, 100.13, 100.14, 100.15, 100.16, 100.17, 100.18, 100.19, 100.20, 100.21, 100.22, 100.23, 100.24, 100.25, 100.26, 100.27, 100.28, 100.29, 100.30, 100.31, 100.32, 100.33, 100.34, 100.35, 100.36, 100.37, 100.38, 100.39, 100.40, 100.41, 100.42, 100.43, 100.44, 100.45, 100.46, 100.47, 100.48, 100.49, 100.50, 100.51, 100.52, 100.53, 100.54, 100.55, 100.56, 100.57, 100.58, 100.59, 100.60, 100.61, 100.62, 100.63, 100.64, 100.65, 100.66, 100.67, 100.68, 100.69, 100.70, 100.71, 100.72, 100.73, 100.74, 100.75, 100.76, 100.77, 100.78, 100.79, 100.80, 100.81, 100.82, 100.83, 100.84, 100.85, 100.86, 100.87, 100.88, 100.89, 100.90, 100.91, 100.92, 100.93, 100.94, 100.95, 100.96, 100.97, 100.98, 100.99, 101.00 'do' 'begin' y := read(20); test(x, y, 100 + i / 100); i := i + 1 'end'; printeq; i := 1; 'for' x := 10000.01,10000.02,10000.03,10000.04,10000.05, 10000.06,10000.07,10000.08,10000.09,10000.10, 10000.11,10000.12,10000.13,10000.14,10000.15, 10000.16,10000.17,10000.18,10000.19,10000.20, 10000.21,10000.22,10000.23,10000.24,10000.25, 10000.26,10000.27,10000.28,10000.29,10000.30, 10000.31,10000.32,10000.33,10000.34,10000.35, 10000.36,10000.37,10000.38,10000.39,10000.40, 10000.41,10000.42,10000.43,10000.44,10000.45, 10000.46,10000.47,10000.48,10000.49,10000.50, 10000.51,10000.52,10000.53,10000.54,10000.55, 10000.56,10000.57,10000.58,10000.59,10000.60, 10000.61,10000.62,10000.63,10000.64,10000.65, 10000.66,10000.67,10000.68,10000.69,10000.70, 10000.71,10000.72,10000.73,10000.74,10000.75, 10000.76,10000.77,10000.78,10000.79,10000.80, 10000.81,10000.82,10000.83,10000.84,10000.85, 10000.86,10000.87,10000.88,10000.89,10000.90, 10000.91,10000.92,10000.93,10000.94,10000.95, 10000.96,10000.97,10000.98,10000.99,10001.00 'do' 'begin' y := read(20); test(x, y, 10000 + i / 100); i := i + 1 'end'; printeq; i := 2; 'for' x := 0.33333333333333333333, 0.12500000000000000000, 0.06666666666666666667, 0.04166666666666666667, 0.02857142857142857143, 0.02083333333333333333, 0.01587301587301587302, 0.01250000000000000000, 0.01010101010101010101, 0.00833333333333333333, 0.00699300699300699301, 0.00595238095238095238, 0.00512820512820512821, 0.00446428571428571429, 0.00392156862745098039, 0.00347222222222222222, 0.00309597523219814241, 0.00277777777777777778, 0.00250626566416040100, 0.00227272727272727273, 0.00207039337474120083, 0.00189393939393939394, 0.00173913043478260870, 0.00160256410256410256, 0.00148148148148148148, 0.00137362637362637363, 0.00127713920817369093, 0.00119047619047619048, 0.00111234705228031146, 0.00104166666666666667, 0.00097751710654936461, 0.00091911764705882353, 0.00086580086580086580, 0.00081699346405228758, 0.00077220077220077220, 0.00073099415204678363, 0.00069300069300069300, 0.00065789473684210526, 0.00062539086929330832, 0.00059523809523809524, 0.00056721497447532615, 0.00054112554112554113, 0.00051679586563307494, 0.00049407114624505929, 0.00047281323877068558, 0.00045289855072463768, 0.00043421623968736431, 0.00041666666666666667, 0.00040016006402561024, 0.00038461538461538462, 0.00036995930447650758, 0.00035612535612535613, 0.00034305317324185249, 0.00033068783068783069, 0.00031897926634768740, 0.00030788177339901478, 0.00029735355337496283, 0.00028735632183908046, 0.00027785495971103084, 0.00026881720430107527, 0.00026021337496747333, 0.00025201612903225806, 0.00024420024420024420, 0.00023674242424242424, 0.00022962112514351320, 0.00022281639928698752, 0.00021630975556997621, 0.00021008403361344538, 0.00020412329046744234, 0.00019841269841269841, 0.00019293845263360988, 0.00018768768768768769, 0.00018264840182648402, 0.00017780938833570413, 0.00017316017316017316, 0.00016869095816464238, 0.00016439256945586060, 0.00016025641025641026, 0.00015627441787779341, 0.00015243902439024390, 0.00014874312063067083, 0.00014518002322880372, 0.00014174344436569809, 0.00013842746400885936, 0.00013522650439486139, 0.00013213530655391121, 0.00012914890869172155, 0.00012626262626262626, 0.00012347203358439313, 0.00012077294685990338, 0.00011816140848398913, 0.00011563367252543941, 0.00011318619128466327, 0.00011081560283687943, 0.00010851871947911015, 0.00010629251700680272, 0.00010413412475268145, 0.00010204081632653061, 0.00010001000100010001 'do' 'begin' y := read(20); test(x, y, 1 / ( i * i - 1 ) ); i := i + 1 'end'; printeq; close(20); 'end' **** 'begin' 'library' A0, A1, A5, A15; 'comment' DavidHu/manorboy - modified to do Hello World first; 'integer' 'procedure' A(k, x1, x2, x3, x4, x5); 'value' k; 'integer' k, x1, x2,x3,x4,x5; 'begin' 'integer' 'procedure' B; 'begin' k := k - 1 ; B := A := A(k, B, x1, x2, x3, x4); 'end'; 'if' k <= 0 'then' A := x4 + x5 'else' B; 'end'; 'integer' res; writetext(30, {Hello _ World {cc}}); writetext(30, {Here _ goes _ with _ Man _ or _ Boy {c}}); res := A(10, 1, -1, -1, 1, 0); output(30, res); res := res * res; 'end' **** 'begin' 'comment' T75; 'library' A0; !comment A15; !procedure writetext(dv, s); !value dv; !integer dv; !string s; !KDF9 12/9/14/0; {s}; {dv}; JSP288; !EXIT; P288; ( write text ); ERASE; (+ ignore device number for new ); 2; SETB30; =Y0M2; (+ always output on stream 30 for now ); SETAY0; M2; +; DUP; PERM; NOT; NEG; JSP700; =I15; C0TOQ15; Q15; SET8; OUT; EXIT1; !ALGOL; !comment A1; !procedure open(dv); !value dv; !integer dv; !KDF9 2/0/0/0; {dv}; JSP293; !EXIT; P293V40; ( Open ); V0 = Q 0/AV1/AV40; SET20; NEV; J1=Z; EXIT1; (+ interim version only devs 20 and 30 allowed ); 1; V0; =Q15; SET2; SET5; OUT; =C15; (+ Max amount of data is 320 chars ); PREQ15; PARQ15; C15; SET6; OUT; I15; =RM15; M-I15; Q15; =V0P295; EXIT1; P295V2; ( General Character and Basic Symbol Handling ); 4; (+ initialise basic symbol fetch ); ERASE; EXIT1; (+ assume dv = 20 ); 6; ZERO; SET6; SET5; J109P299; (+ fetch basic symbol ); 8; ZERO; SET8; SET5; J109P299; (+ freeze basic symbol fetch ); 10; SET10; SET5; J109P299; (+ retain basic symbol ); 3; (+ initialise character fetch ); ERASE; (+ assume dv = 20 ); V0; DUP; JP299=Z; =Q15; EXIT1; 5; J52C15NZ; (+ fetch character ); M+I15; SET-48; =C15; 52; SET6; =+C15; M0M15; SHLC15; SETB77; AND; EXIT1; 7; (+ freeze character fetch ); Q15; =V0; EXIT1; (+++ previous 12; SET12; SET5; J108P299; (+ initialise basic symbol output ); 14; ZERO; SET14; SET5; J108P299; (+ output basic symbol ); 16; SET16; SET5; J108P299; (+ freeze basic symbol output ); 18; SET18; SET5; J108P299; (+ output editing symbol ); +++); 12; ERASE; (+ initialise basic symbol output - ignore device number ); SETB177615; =V1; (+ opening string quote ); M2TOQ8; (+ keep stack pointer ); EXIT1; V2 = Q B256/B120240/0; (+ space, tab, page?? newline?? ); 18; SHL+8; =C8; (+ output editing symbol ); V2; SHLC8; SHL-40; (+ drop through to output basic symbol ); 14; V1; DUP; (+ output basic symbol ); NOT; SHL-40; J141=Z; (+ J if word not full ); =Y0M2Q; ZERO; NOT; 141;SHL+8; OR; =V1; C0TOQ8; (+ mystery use of J116C8Z in P291 ); EXIT1; 16; SETB235; JS14; (+ freeze basic symbol output ); V1; NOT; ZERO; 161;ERASE; ZERO; SHLD+8; DUP; J161=Z; (+ remove dummies at start of word ); SHLD-8; ERASE; NOT; =Y0M2Q; (+ partial word to buffer ); M8; SETAY0; +; (+ closing string quote to use writetext ); JS2P288; M8TOQ2; (+ put the stack pointer back ); EXIT1; (+ stolen from KQX ); 20; ERASE; 1; (Fetch BS from string address in M14); J189C13NZ; M0M14Q; =V8; SET6; =C13; 189; V8; ZERO; SHLD+8; REV; =V8; DC13; SETB236; J20=; SETB240; J20=; SETB256; J20=; EXIT1; (+ unimplemented ); 9; SET9; SET5; J108P299; (+ retain character ); 11; SET11; SET5; J108P299; (+ initialise character output ); 13; SET13; SET5; J108P299; (+ output character ); 15; ZERO; SET15; SET5; J108P299; (+ freeze character output ); 116;SET116; SET5; J108P299; (+ output characters with automatic case management ); !ALGOL; !procedure close(dv); !value dv; !integer dv; !KDF9 2/0/0/0; {dv}; JSP292; !EXIT; (+ P292 is missing from KQX9101, so it is in runtime2.txt ); !ALGOL; !comment A4; !real !procedure read(dv); !value dv; !integer dv; !KDF9 12/9/14/0; {dv}; JSP294; !EXIT; P294V1; ( Read Number ); V1=F0.1; JS3P295; (+ initialise character fetch ); SETB2014; =V0; ZERO; 1; ERASE; JS5P295; SETB35; J2=; SETB36; J3=; SETB37; J4=; SETB20; -; DUP; J1=Z; (+ skip non-digits ); ZERO; 5; ERASE; 51; JS5P295; SETB20; -; DUP; J5=Z; (+ non-digits terminate ); REV; SET10; �D; CONT; +; J51; 3; SETB6000; = V0; 2; ERASE; ZERO; J51; 6; SETB17; NEV; J7=Z; (+ decimal point ); SET47; FLOAT; 8; V0; SHC-12; �F; ; (+ incorporate sign ); J7P295; (+ freeze character fetch and exit ); 4; ERASE; ZERO; (+ starts with decimal point ); 7; SET47; FLOAT; SETB2014; SHC-12; ZERO; ZERO; (+ N1/2 rubbish, N3 multiplier of previous digit, N4 accumulated number ); 9; ERASE; ERASE; 10; V1; �F; DUP; PERM; JS5P295; SETB20; -; DUP; J9=Z; (+ terminator ); SET47; FLOAT; �F; +F; REV; J10; 11; ERASE; ERASE; REV; ERASE; J8; !ALGOL; !real !procedure read boolean(dv); !value dv; !integer dv; !KDF9 12/9/14/0; {dv}; SET4; SET99; JP299; !EXIT; !ALGOL; 'comment' A5 -- Genuine library A5; 'procedure' write(device,form,value); 'value' device,form,value; 'real' value; 'integer' device,form; 'KDF9' 12/9/14/0; {value}; {form}; {device}; JSP291; 'EXIT'; P291V28; (PROCEDURE WRITE); V1=B1212121212121212; V2=B2020202020202020; V3=B2030446722743250; (1.024 TO 1I.P.); V4=B175/8; (1000/1024 TO 1I.P.); V5=B1463 1463 1463 1463; (.8 TO 1I.P.); V6=B2400 0000 0000 0000; (10/8 TO 1I.P.); V7=Q0/3/3; (INITIAL SPACES/SIGN/EXP SIGN); V8=B0013573716200001; (FORMAT/DS/ZS/DPM/APM/;/C/NDP); V9=B0314631463146315; (.1); V10=B0024365605075341; (.01); V11=B0000150667056544; (.0001); V12=B0000000005274617; (.00000001); V13=B12; (10); V14=B144; (100); V15=B23420; (10000); V16=B575360400; (100000000); V20=Q12/11/1; (S/F/E); V25=B0000 0003 7777 7775; V26=B0000 0001 7777 7777; 101; PERM; 102; =V21; 103; =V22; JS12P295; ZERO; =V28; V21; ZERO; SHLD+24; REV; ZERO; SHLD+4; =C10; ZERO; SHLD+2; =I10; ZERO; SHLD+5; NEG; =C7; ZERO; SHLD+4; =C11; ZERO; SHLD+2; =M10; ZERO; SHLD+4; =M7; SHC+3; =I7; DUP; ZERO; REV; SHLDC7; BITS; NEG; NOT; =I11; BITS; =M11; V22; I13=+1; DUP; J5>=Z; NEGF; I13=-1; I10; J5!=Z; SET135; JS100; 1; JS80; 70; M7; SHC-2; J95=Z; 117; M14; I11; +; DUP; =M15; M13; REV; -; J7=Z; M13; NOT; J6!=Z; SET5; SHA+43; M13; NOT; NEG; =M13; ZERO; NOT; =TR; J10; 6; ERASE; ZERO; J12; 7; SET4; =RC15; ZERO; NOT; NEG; SHC-2; M13; 8; SHC-1; DUP; J9>=Z; REV; V9M15; x; REV; 9; M+I15; DC15; J8C15NZ; ERASE; SHA-4; 10; +; 11; DUP; SHL-43; SET10; -; J113LTZ; STR; SET10; %D; M+I14; M10; J12NEZ; M13; NOT; NEG; C11; NEV; J110=Z; J110TR; SET1; =+M13; 110; M14; M11; -; J71GEZ; 12; ZERO; DUP; =TR; NOT; NEG; M13; SET4; =RC15; 13; SHC-1; DUP; J14GEZ; REV; V13M15; xD; CONT; REV; 14; M+I15; DC15; J13C15NZ; ERASE; xD; SHAD+4; REV; ERASE; DUP; =V0; JS90; =V23; =V24; I10; NEG; NOT; SHL-1; J15NEZ; SETB20; M7; OR; =M7; 15; I11; M11; +; C11; -; ZERO; =RM15; I11; NOT; NEG; NOT; NEG; =M13; J18LEZ; M14; C11; -; NOT; NEG; DUP; J32LTZ; I11; +; 72; =C15; 18; SET8; =RC11; M+I11; SET24; =C13; SHL+24; $16; DUP; J17LTZ; SHL+1; DC13; J16C13NZS; ERASE; SET136; J74; 113; J12NTR; J6; 32; I11; +; DUP; J72>=Z; ERASE; ZERO; J72; 17; DC13; SHL+1; J73C13Z; C0TOQ14; SET8; =RC12; 19; DUP; J21=Z; ZERO; J26; 31; ZERO; V23M11; DC11; SHAD-6; =V23M11; J25C11NZ; M-I11; SET8; =C11; 25; SHL+1; M7; SETB10; AND; J27!=Z; SETB77; SHL+42; J26!=; ERASE; ZERO; J26; 27; SETB77; SHL+42; J30!=; M13; J96=Z; ERASE; ZERO; J26; 96; ERASE; M7; SHL-4; J98=Z; M+I15; J29; 30; M7; SHL-4; J26=Z; M15; J26=Z; ERASE; ERASE; SET138; J74; 28; ERASE; M15; DUP; =+C10; NEG; =+C7; I10; J35=Z; I13; J34=Z; SETB13; =M13; J77LEZ; 68; M10; J75=Z; V0; J64=Z; C0TOQ13; M14; DUP; J37>=Z; NEG; DC13; 37; JS90; NOT; J78!=Z; ZERO; REV; SHAD-12; NOT; J79!=Z; ZERO; SHLD+7; JS40; SETB12; JS14P295; SETB77; J51=; C13; J38=Z; SETB230; JS14P295; 57; I7; SHL-2; J63!=Z; I7; =C7; J60C7Z; 59; SET2; JS18P295; DC7; J59C7NZ; 60; M7; SHC-2; J62>=Z; V27; DUP; =C14; J62=Z; SETB216; JS14P295; 43; I10; J44=Z; SHA-27; REV; 92; REV; EXIT1; 100; =V28; EXIT1; 'ALGOL'; 'integer' 'procedure' format(lay out); 'string' lay out; 'KDF9' 12/9/14/6; (FORMAT); V2=B0013573703034671; V5=B4321221604215035; V6=B4720000000000000; {lay out}; DUP; =V1; =RM14; SET2; SHC-8; =V0; Q0TOQ15; SET24; DUP; =C12; SHA-1; =C11; Q0TOQ13; IM0TOQ12; IM0TOQ11; Q12TOQ10; Q0TOQ9; ZERO; JS27; SETB215; J32#; ERASE; J2; 1; REV; DUP; SHA+2; +; SHA+1; +; 2; JS27; DUP; SET10; -; J112); DC11; 12; PERM; DUP; PERM; OR; REV; CAB; (1nsert 01git in .1eld lay 0ut); 13; ERASE; SHL+1; DC12; J32C12Z; (EFC>24); I10; J4#Z; (DPM); DC10; J4C10NZ; (NOP); J32; 14; (+-#); SHC-4; DUP; SHL+46; REV; SHL-44; ROUND; (1=+, /=-, 3=#); I12; J15#Z; (EXH); C12; SET24; -; J31#Z; (SFC=0); I11; J31#Z; (fi-st sign); =I11; J4; 15; (EXP SIGN); SET3; C12; -; J31#Z; M11; J31#Z; = M11; J4; 16; I10; J31#Z; (DPH); ERASE; I10=+1; J4; 17; (zero); J12C9NZ; C11; SET12; -; J31=Z; DC9; J12; 18; (subten); I12; J31#Z; I10; J31=Z; I12=+1; ERASE; OR; DUP; =V4; SHLC10; SHL+24; BITS; NEG; NOT; J34#Z; SET3; =C12; J3; 19; (;); I9; J31#Z; I9=+1; DC9; ERASE; J4; 20; (c); M10; SHL-2; J31#Z; DC9; ZERO; NOT; NEG; =+M10; ERASE; J4; 21; (p); M10; J31#Z; DC9; SET4; =M10; ERASE; J4; 22; SETB70; (s); J24#; ERASE; ERASE; 23; NOT; NEG; DUP; DUP; SHL-4; J4=Z; NEG; NOT; =V3; DC15; ZERO; DUP; NOT; NEG; CAB; J13; 24; PERM; ERASE; 25; =V3; DC15; ZERO; DUP; NOT; NEG; CAB; J5; 26; REV; DUP; J25=Z; J32; 39; ERASE; 27; ZERO; V0; 28; ZERO; SHLD+8; PERM; OR; DUP; J29=Z; =V0; SETB236; J39=; SETB240; J39=; SETB256; J39=; EXIT1; 29; ERASE; M0M14Q; J28; 30; ERASE; 31; ERASE; 32; ERASE; 33; ERASE; 34; V0P299; JS12P295; SETAV5; =RM14; 35; JS1P295; SETB235; J36=; JS14P295; J35; 36; ERASE; V1; =RM14; 37; JS1P295; SETB235; J38=; JS14P295; J37; 38; JS16P295; V2; J9; 'ALGOL'; 'procedure' output(device,value); 'value' device,value; 'real' value; 'integer' device; 'KDF9' 12/9/14/0; {value}; V0; {device}; JSP291; 'EXIT'; V0=B0013573703034651; 'ALGOL'; 'procedure' write boolean(device,boolean); 'value' device,boolean; 'integer' device; 'boolean' boolean; 'KDF9' 12/9/14/0; {boolean}; {device}; (write boolean); JS12P295; J2 0; 'end'; 'end'; writetext(30, {Hello _ World{c}}); x := 123; output(30, x); writetext(30, {What {s} a _ 'real' _ 'procedure' _ this {s} is {c}}); 'end' **** 'begin' 'comment' progam to investigate formal procedure calls; 'procedure' call2f(i, p1, ip2); 'value' i; 'integer' i; 'procedure' p1; 'integer' 'procedure' ip2; 'begin' 'integer' loc; loc := ip2(4); p1(5, loc); 'end' call2f; 'procedure' act1(i, j); 'value' i, j; 'integer' i, j; 'begin' i := 1; 'end' act1; 'integer' 'procedure' act2(j); 'value' j; 'integer' j; 'begin' j := 2; 'end' act2; call2f(22, act1, act2); 'end' **** 'begin' 'comment' DavidHu/firstOpt; 'procedure' onetwothree(i); 'value' i; 'integer' i; 'begin' 'integer' 'array' a[1:10]; 'integer' index; 'for' index := 0 'step' 1 'until' 10 'do' a[index] := 0; a[5]:= a[10] + 2.0; 'end'; 'procedure' four(i); 'value' i; 'integer' i; 'begin' 'integer' 'array' a[1:10]; 'integer' index; 'for' index := 0 'step' 1 'until' 10 'do' a[index] := 0; a[5]:= a[10] + 2.0; 'end'; 'integer' j, index; 'array' aa[1:10]; index := 1000; 'for' index := 0 'step' 1 'until' 10 'do' 'begin' 'comment' 'for' j := 0 'step' 1 'until' 10 'do' 'begin' 'comment' aa[index] := 0; 'comment' aa[j] := 10; 'comment' 'end'; 'end'; aa[5]:= aa[10] + 2.0; 'end' **** 'begin' 'comment' DavidHu/first; 'procedure' onetwothree(i); 'value' i; 'integer' i; 'begin'; j := i; 'end'; 'boolean' a12345678; 'integer' j; onetwothree(j); 'end' **** 'begin' 'comment' DavidHu/namechain; 'integer' 'procedure' p(i); 'integer' i; 'begin' p := f(i); p := f(i); p := f(i); p := f(i); p := f(i); p := f(i); p := f(i); 'end' p; 'integer' 'procedure' f (n); 'integer' n; 'begin' f := n; 'end' p; 'integer' j; j:= f( j + p(10)); j:= f( j + p(10)); j:= f( j + p(10)); j:= f( j + p(10)); 'comment' signs that we have floater if we do any more; j:= f( j + p(10)); 'comment' j:= f( j + p(10)); 'comment' j:= f( j + p(10)); 'comment' j:= f( j + p(10)); 'comment' j:= f( j + p(10)); 'comment' j:= f( j + p(10)); 'end' **** 'begin' 'comment' DavidHu/firstfor; 'procedure' onetwothree(i); 'value' i; 'integer' i; 'begin'; j := i; 'end'; 'boolean' a12345678; 'integer' j, k; 'for' k:=0 'step' 1 'until' k < 4 'do' 'begin' 'integer' loop; onetwothree(k); 'end'; 'end' **** 'begin' 'comment' DavidHu/HoGrammar; 'procedure' jim( p); 'integer' p; 'begin' 'real' jinx; 'end'; 'procedure' james ( nI, vR); 'value' vR; 'integer' nI; 'real' vR; 'begin' nI := vR; 'end'; 'real' x; 'real' y; 'real' z; 'integer' i; 'integer' j; 'integer' k; 'boolean' a; 'boolean' b; 'boolean' c; 'begin' 'real' x; 'real' y; 'real' z; 'integer' i; 'integer' j; 'integer' k; 'boolean' a; 'boolean' b; 'boolean' c; 'begin' 'switch' Sw := label1; 'comment' ,label2; label1: i:=10; j:=100; c := (-0.1 < 0); label2: 'goto' Sw[1]; 'end'; 'end'; 'begin' 'real' x; 'real' y; 'real' z; 'integer' i; 'integer' j; 'integer' k; 'boolean' a; 'boolean' b; 'boolean' c; 'begin' i:=10; j:=100; z := -0.1; 'begin' 'array' p[1:i,0:j]; 'array' q[1:i,0:j]; 'array' r[1:i,0:j]; 'integer' 'array' fred[0:'if' z < 0 'then' 1 'else' 4:20]; y := fred[i]; z := p[2,3]; 'end'; 'end'; james( x, 1000); b := (i+j+k - x) < (x+y+z ); x := x- y - z; 'end'; 'end' **** 'begin' 'comment' DavidHu/grammarTest; 'procedure' jim( p); 'integer' p; 'begin' 'real' jinx; 'end'; 'procedure' james ( nI, vR); 'value' vR; 'integer' nI; 'real' vR; 'begin' nI := vR; 'end'; 'real' x,y,z; 'integer' i,j,k; 'boolean' a,b,c; 'begin' 'real' x,y,z; 'integer' i,j,k; 'boolean' a,b,c; 'begin' 'switch' Sw := i,j; i:=10; j:=100; c := (-0.1 < 0); k := Sw[0]; 'end'; 'end'; 'begin' 'real' x,y,z; 'integer' i,j,k; 'boolean' a,b,c; 'begin' i:=10; j:=100; z := -0.1; 'begin' 'array' p,q,r[1:i,0:j]; 'integer' 'array' fred[0:'if' z < 0 'then' 1 'else' 4:20]; y := fred[i]; z := p[2,3]; 'end'; 'end'; james( b, 1000); b := (i+j+k - x) < (x+y+z ); x := x- y - z; 'end'; 'end' **** 'begin' 'comment' DavidHu/procsPlusCode; 'real' x; x := 0; 'begin' 'procedure' P1( x); 'real' x; 'begin' 'integer' i; x :=0; 'end'; 'real' 'procedure' P2( x); 'real' x; 'begin' 'integer' i; x :=0; P2 := x; 'end'; 'integer' 'procedure' P3( x); 'real' x; 'begin' 'integer' i; x :=0; P3 := x; 'end'; 'boolean' 'procedure' P4( x); 'real' x; 'begin' 'integer' i; x :=0; P4 := x> 0; 'end'; 'end'; 'end' **** 'begin' 'comment' progam to investigate formal procedure calls; 'integer' 'procedure' iz; 'KDF9' 0/0/0/0; ZERO; 'EXIT'; 'ALGOL'; 'procedure' call2f(i, p1, ip2); 'value' i; 'integer' i; 'procedure' p1; 'integer' 'procedure' ip2; 'begin' 'integer' 'procedure' inner(ii); 'value' ii; 'integer' ii; inner := ii + ip2(ii); 'integer' loc; loc := ip2(4); p1(5, iz); 'end' call2f; 'procedure' act2(i, j); 'value' i, j; 'integer' i, j; 'begin' i := 1; 'end' act2; 'integer' 'procedure' iact1(j); 'value' j; 'integer' j; 'begin' iact1 := 2; 'end' iact1; call2f(22, act2, iact1); 'end' **** 'begin' 'comment' DavidHu/arraytest; 'begin' 'comment' 'real' xyz; 'comment' 'array' peter[6:7]; 'switch' S := 20, 30, 40; 'procedure' jimmy(a); 'string' a; 'begin' 'procedure' nest(i); 'integer' i; 'begin' i := 0; 'end'; nest(100); 'end'; 'integer' anne; 'array' fred[1:3,2:4]; 'real' 'procedure' jim(x,i,b,a, p, l )switch:(sw); 'value' x, i, b,a; 'real' x; 'integer' i; 'boolean' b; 'integer' 'array' a; 'integer' 'procedure' p; 'label' l; 'switch' sw; 'begin' 'boolean' 'procedure' nested( x); 'real' x; 'begin' x := 100; 'end'; nested(x); x := S[1]; 'end'; 'begin' 'integer' 'array' ken[0:100]; 'boolean' 'array' boo[1:99]; 'real' x; next: jim(x, x,x); jimmy({string}); 'goto' next; 'end'; 'end'; 'end' **** 'begin' 'comment' DavidHu/etcparam; 'real' 'procedure' A(k, x1, x2, x3, x4, x5); 'value' k, x2, x3; 'integer' k; 'label' x1; 'switch' x2; 'integer' 'array' x3; 'integer' 'array' x4; 'integer' x5; 'begin' 'real' 'procedure' B; 'begin' k := k - 1 ; 'end'; 'goto' x1; 'goto' x2[1]; x3[1] := x4[1]; B; 'end'; 'integer' i,j,k1; 'real' z; 'begin' 'switch' Town := Bath, Exeter, 'if' i >0 'then' Exeter 'else' Bath; 'comment'; 'switch' Village := Exeter, Bath; 'integer' 'array' fred[1:i]; Exeter: A(10, Town[1], Town, fred, fred, 0); Bath: 'goto' Town[fred['if' i >= 0 'then' i 'else' i+1 ]]; 'comment'; i := fred[ 'if' i = 0 'then' 10 'else' 150]; 'comment'; i := (i+j) + 2 - (i+j); z := -118.7 +260 / z -130 / z^2; 'end'; 'end' **** 'begin' 'integer' i, j; 'procedure' open(dv); 'value' dv; 'integer' dv; 'begin' dv := 0; 'end' open; 'real' 'procedure' read(dv); 'value' dv; 'integer' dv; 'begin' read := 0; 'end' open; open(20); i := read(20); 'for' j:=1 'step' 1 'until' i 'do' output(30, j); 'end' **** FAIL 00/02 after "undeclared identifier outpu t" 'begin' 'comment' David's formalproc; 'integer' 'procedure' onetwothree(formal); 'integer' 'procedure' formal; 'begin'; onetwothree := formal(10); 'end'; 'integer' 'procedure' actual(i); 'value' i; 'integer' i; 'begin' actual := i; 'end'; 'integer' result; result := onetwothree(actual); 'end' **** 'begin' 'comment' Knuth's manorboy all integer; 'integer' 'procedure' A(k, x1, x2, x3, x4, x5); 'value' k; 'integer' k; 'integer' x1, x2,x3,x4,x5; 'begin' 'integer' 'procedure' B; 'begin' 'comment'; k := k - 1 ; B := A := A(k, B, x1, x2, x3, x4); 'end'; 'if' k <= 0 'then' A := x4 + x5 'else' B; 'end'; A(10, 1, -1, -1, 1, 0); 'end' **** 'begin' 'comment' progam to investigate formal procedure calls; 'integer' 'procedure' iabs(x); 'value' x; 'integer' x; 'comment' 2; 'KDF9' 0/0/0/0; {x}; ABS; 'EXIT'; 'ALGOL'; 'procedure' call2f(i, p1, ip2); 'value' i; 'integer' i; 'comment' 3; 'procedure' p1; 'comment' 97; 'integer' 'procedure' ip2; 'comment' 98; 'begin' 'integer' 'procedure' inner(ii); 'value' ii; 'integer' ii; 'comment' 4; inner := ii + ip2(ii); 'comment' this is a bit hard; 'integer' loc; loc := ip2(4) + inner(7);; p1(5, iabs(loc)); 'end' call2f; 'procedure' act2(i, j); 'value' i, j; 'integer' i, j; 'comment' 5; 'begin' i := 1; 'end' act2; 'integer' 'procedure' iact1(j); 'value' j; 'integer' j; 'comment' 6; 'begin' iact1 := 2; 'end' iact1; call2f(22, act2, iact1); 'end' **** 'begin' 'comment' David's test for the Les Hodges version of KAB20; 'integer' iabc; 'integer' j; 'comment' was a comma seperated list; 'procedure' open(dv); 'value' dv; 'integer' dv; 'begin' 'real' x; x := 3.14159; dv := 1234567; 'end' open; 'real' 'procedure' read(dv); 'value' dv; 'integer' dv; 'KDF9' 1/0/0/0; ZERO; ={dv}; ZERO; 'ALGOL'; open(20); iabc := read(20); 'begin' 'integer' j; 'integer' jim; 'for' j:=1 'step' 1 'until' iabc 'do' 'begin' jim := read(1); 'end'; 'end'; 'end' **** 'begin' 'real' 'procedure' proc1(a); 'value' a; 'real' a; 'begin' proc1 := proc2(0.0); 'end' proc1; 'real' 'procedure' proc2(a); 'value' a; 'real' a; 'begin' proc2 := proc3(0.0); 'end' proc2; 'real' 'procedure' proc3(a); 'value' a; 'real' a; 'begin' proc3 := proc1(0.0); 'end' proc3; proc1(0); 'end' **** 'begin' 'comment' second attempt at first; 'procedure' onetwothree(i); 'value' i; 'integer' i; 'begin'; 'begin' 'real' abc; 'own' 'real' 'array' ken[1:100]; i := (i + i) + ( i + i); i := ken[50]; 'end'; 'end'; 'boolean' a12345678; 'integer' j; 'switch' sw := 'if' j = 0 'then' L1 'else' L2, L1; 'comment'; 'array' ar[1:10,1:10]; L1: ; 'begin' 'real' 'array' fred[1:j]; j := ar[j,j]; 'begin' 'real' c,b,a; 'real' 'array' fred[10:j]; 'goto' sw[2]; j := fred[j]; onetwothree(j); c := c + (a-b)^4 - c / (a-b) + a/b; 'end'; ar[1,2] := ar[3,4]; 'end'; L2: 'comment'; j := ar[1,j]; 'end' **** 'begin' 'real' 'procedure' proc1(a); 'value' a; 'real' a; 'begin' proc1 := proc2(0.0); 'end' proc1; 'real' 'procedure' proc2(a); 'value' a; 'real' a; 'begin' proc2 := proc1(0.0); 'end' proc2; proc1(0); 'end' **** 'begin' 'comment' all sorts of proc calls; 'real' 'procedure' abs(x); 'value' x; 'real' x; 'KDF9' 0/0/0/0; {x}; ABSF; 'EXIT'; 'ALGOL'; 'integer' 'procedure' onetwothree(formal); 'integer' 'procedure' formal; 'begin'; onetwothree := formal(10); 'end'; 'integer' 'procedure' actual(i); 'value' i; 'integer' i; 'begin' actual := i; 'end'; 'integer' result; 'real' 'procedure' threepars(i,j,x); 'value' i, j, x; 'integer' i,j; 'real' x; 'begin' threepars := i + j + actual(123); 'end'; 'procedure' test; 'begin' 'integer' k; k := abs(threepars(1, 2, 11.11)); 'end'; test; result := onetwothree(actual); 'end' **** 'begin' 'comment' formalproc; 'real' 'procedure' onetwothree(formal); 'real' 'procedure' formal; 'begin'; onetwothree := formal(10); 'end'; 'procedure' nopars; 'begin' 'real' x; x := 13; 'end'; 'real' 'procedure' actual(i); 'value' i; 'real' i; 'begin' actual := i; 'end'; 'real' result; result := onetwothree(actual); nopars; 'end' **** 'begin' 'comment' formalproc; 'integer' 'procedure' onetwothree(formal); 'integer' 'procedure' formal; 'begin'; onetwothree := formal(10); 'end'; 'integer' 'procedure' actual(i); 'value' i; 'integer' i; 'begin' actual := i; 'end'; 'integer' result; result := onetwothree(actual); 'end' **** 'begin' 'comment' etcparams; 'real' 'procedure' A(k, x1, x2, x3, x4, x5); 'value' k, x2, x3; 'integer' k; 'label' x1; 'switch' x2; 'integer' 'array' x3; 'integer' 'array' x4; 'integer' x5; 'begin' 'real' 'procedure' B; 'begin' k := k - 1 ; 'end'; 'goto' x1; 'goto' x2[1]; x3[1] := x4[1]; 'goto' stop; 'goto' veryend; B; stop: 'end'; 'integer' i,j,k1; 'real' z; 'begin' 'switch' Town := Bath, Exeter, 'if' i >0 'then' Exeter 'else' Bath; 'comment'; 'switch' Village := Exeter, Bath; 'integer' 'array' fred[1:i]; Exeter: A(10, Town[1], Town, fred, fred, 0); Bath: 'goto' Town[fred['if' i >= 0 'then' i 'else' i+1 ]]; 'comment'; i := fred[ 'if' i = 0 'then' 10 'else' 150]; 'comment'; i := (i+j) + 2 - (i+j); z := -118.7 +260 / z -130 / z^(+2); 'end'; veryend: 'end' **** 'begin' 'comment' DHu's second test; 'procedure' onetwothree(i); 'value' i; 'integer' i; 'begin' i := 0; 'end'; 'real' x,y; 'begin' 'integer' i; 'end'; 'if' y = 0 'then' x := (x+2) + (x+2) 'else' y := x:= 23.0 + 1.0; y := 0.0; 'end' **** 'begin' 'real' 'procedure' abs(x); 'value' x; 'real' x; 'KDF9' 0/0/0/0; {x}; ABSF; 'EXIT'; 'ALGOL'; 'real' 'procedure' veryveryveryslowabs(x); 'value' x; 'real' x; 'begin' veryveryveryslowabs := 'if' x<0 'then' -x 'else' x; 'end'; 'begin' 'integer' i, j, k123456789; 'for' i:= 1 'step' 1 'until' 99 'do' j := i + 1; 'end'; 'end' **** 'begin' 'real' 'procedure' abs(x1); 'value' x1; 'real' x1; 'KDF9' 0/0/0/0; {x1}; ABSF; 'EXIT'; 'ALGOL'; 'real' 'procedure' veryveryveryslowabs(x); 'value' x; 'real' x; 'begin' veryveryveryslowabs := 'if' x<0 'then' -x 'else' x; 'end'; 'begin' 'integer' i, j, k123456789; 'for' i:= 1 'step' 1 'until' 99 'do' j := i + 1; 'end'; 'end' **** 'begin' 'comment' David Hu's "first"; 'procedure' one(i); 'value' i; 'integer' i; 'begin'; j := i; 'end'; 'integer' j; one(j); 'end' **** 'begin' 'comment' David Hus procsPlusCode; 'real' x; x := 0; 'begin' 'procedure' P1( x); 'real' x; 'begin' 'integer' i; x :=0; 'end'; 'real' 'procedure' P2( x); 'real' x; 'begin' 'integer' i; x :=0; P2 := x; 'end'; 'integer' 'procedure' P3( x); 'real' x; 'begin' 'integer' i; x :=0; P3 := x; 'end'; 'boolean' 'procedure' P4( x); 'real' x; 'begin' 'integer' i; x :=0; P4 := x> 0; 'end'; 'end'; 'end' **** 'begin' 'comment' David Hus grammarTest; 'procedure' jim( p); 'integer' p; 'begin' 'real' jinx; 'end'; 'procedure' james ( nI, vR); 'value' vR; 'integer' nI; 'real' vR; 'begin' nI := vR; 'end'; 'real' x,y,z; 'integer' i,j,k; 'boolean' a,b,c; 'begin' 'real' x,y,z; 'integer' i,j,k; 'boolean' a,b,c; 'begin' 'switch' Sw := i,j; i:=10; j:=100; c := (-0.1 < 0); k := Sw[0]; 'end'; 'end'; 'begin' 'real' x,y,z; 'integer' i,j,k; 'boolean' a,b,c; 'begin' i:=10; j:=100; z := -0.1; 'begin' 'array' p,q,r[1:i,0:j]; 'integer' 'array' fred[0:'if' z < 0 'then' 1 'else' 4:20]; y := fred[i]; z := p[2,3]; 'end'; 'end'; james( b, 1000); b := (i+j+k - x) < (x+y+z ); x := x- y - z; 'end'; 'end' **** 'begin' 'integer' i, j, k; i:= 0; 'comment' 'for' j := 1 'step' 1 'until' 7 'do' ; 'if' i = 0 'then' k := i * j; 'end' **** 'begin' 'real' 'procedure' abs(x); 'value' x; 'real' x; 'KDF9' 0/0/0/0; {x}; ABSF; 'EXIT'; 'ALGOL'; 'begin' 'integer' i, j, k; 'for' i:= 1 'step' 1 'until' 99 'do' j := i + 1; 'end'; 'end' **** 'begin' 'comment' program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); 'real' 'procedure' abs(x); 'value' x; 'real' x; 'KDF9' 0/0/0/0; {x}; ABSF; 'EXIT'; 'ALGOL'; 'real' 'procedure' f(x, y); 'value' x,y; 'real' x,y; f:= x�x + y�y; 'real' 'procedure' int(a, b, f); 'comment' integrates f(x) over range a to b; 'value' a, b; 'real' a, b; 'real' 'procedure' f; 'begin' 'real' 'procedure' intint(a, b, fa, fb); 'value' a, b, fa, fb; 'real' a, b, fa, fb; 'begin' 'real' c, fc, ff; c := (a + b) / 2; fc := f(c); ff := (fa + 4�fc + fb)/6; 'comment' answer is good enough if simrule no better than trapezoidal; 'if' abs( (fa + fb)/2 - ff ) < 0.001 'then' intint := ff � (b - a) 'else' intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); 'end'; int := intint(a, b, f(a), f(b)); 'end'; 'real' 'procedure' intfy(x); 'comment' integral 0 to x of f(x,y) dy; 'value' x; 'real' x; 'begin' 'real' 'procedure' fx(y); 'value' y; 'real' y; fx := f(x,y); intfy := int(0, x, fx); 'end'; 'real' answer; answer := int(0, 1, intfy); 'end' **** 'begin' 'integer' i, j; 'procedure' open(dv); 'value' dv; 'integer' dv; 'begin' dv := 0; 'end' open; 'real' 'procedure' read(dv); 'value' dv; 'integer' dv; 'KDF9' 1/0/0/0; ZERO; ={dv}; ZERO; 'EXIT'; 'ALGOL'; 'procedure' output(dv, i); 'value' dv, i; 'integer' dv, i; 'KDF9' 1/0/0/0; {dv}; {i}; JS789P295; 'EXIT'; 'ALGOL'; open(20); i := read(20); 'for' j:=1 'step' 1 'until' i 'do' output(30, j); 'end' **** 'begin' 'integer' i, j, k; 'comment' no longer FAILS Tape format error; 'comment' now fails 18/22; 'integer' 'procedure' nopars; 'KDF9' 1/0/0/0; ZERO; =Q15; ZERO; 'EXIT'; 'ALGOL'; i:= 0; 'for' j := 1 'step' 1 'until' i 'do' 'if' i = 0 'then' k := i + j; 'end' **** 'begin' 'integer' i, j, k; 'comment' no longer FAILS Tape format error; 'comment' now fails 18/22; 'procedure' nopars; 'begin' 'end' nopars; i:= 0; 'for' j := 1 'step' 1 'until' 7 'do' 'if' i = 0 'then' k := i + j; 'end' **** 'begin' 'begin' 'end' 'end' **** 'begin' 'integer' i, j; i := j; 'end' **** 'begin' 'real' b; 'begin' 'real' x; 'begin' 'boolean' b; 'end'; 'begin' 'begin' 'real' y; 'begin' 'integer' i; i:= i +1; 'end';'end';'end';'end'; 'end' **** 'begin' 'comment' Knuth's Man or Boy program; 'procedure' output(dv, i); 'value' dv, i; 'integer' dv, i; 'KDF9' 1/0/0/0; {dv}; {i}; MRWDQ0; 'EXIT'; 'ALGOL'; 'real' 'procedure' A(k, x1, x2, x3, x4, x5); 'value' k; 'integer' k, x1, x2, x3, x4, x5; 'begin' 'real' 'procedure' B; 'begin' k := k - 1; B := A := A(k, B, x1, x2, x3, x4); 'end'; 'if' k <= 0 'then' A := x4 + x5 'else' B; 'end'; output(30, A(10, 1, -1, -1, 1, 0)); 'end' **** 'begin' 'procedure' writetext(dv, s); 'value' dv; 'integer' dv; 'string' s; 'KDF9' 1/1/1/1; {dv}; {s}; JS22P295; MRWDQ0; 'EXIT'; 'ALGOL'; 'switch' S := l1, l2; 'switch' S2 := S[p(1)], S[p(p(1))]; 'integer' i; 'integer' 'procedure' p(i); 'integer' i; 'begin' p := i; 'end'; 'goto' l2; i := 0; l1: l2: writetext(30, {Labels _ were _ a _ bad _ idea{c}}); i := i+1; 'goto' S2[i]; 'end' **** l0:'begin' 'switch' S := l1, l2, l0; 'switch' S2 := S[p(2)], S[p(p(2))]; 'integer' 'procedure' p(i); 'integer' i; 'begin' p := i + i; 'end'; 'goto' l2; l1: l2: writetext(30, {Labels _ were _ a _ bad _ idea{c}}); 'goto' S2[1]; 'end'; **** 'begin' 'comment' Knuth's monorboy; 'real' 'procedure' A(k, x1, x2, x3, x4, x5); 'value' k; 'integer' k, x1, x2, x3, x4, x5; 'begin' 'real' 'procedure' B; 'begin' k := k - 1; B := A := A(k, B, x1, x2, x3, x4); 'end'; 'if' k <= 0 'then' A := x4 + x5 'else' B; 'end'; A(10, 1, -1, -1, 1, 0); 'end' **** 'begin' 'comment' test to explore level parameters; 'real' 'procedure' abs(z); 'value' z; 'real' z; 'KDF9' 0/0/0/0; {z}; ABSF; 'EXIT'; 'ALGOL'; 'real' 'procedure' p0(x); 'value' x; 'real' x; 'begin' 'real' 'procedure' p1(x, y); 'value' x, y; 'real' x, y; p1 := x + y; p0 := x + p1(x, x)' 'end'; 'begin' 'integer' i, j; 'real' qqqqq; 'for' i:= -3 'step' 1 'until' +3 'do' qqqqq := p0(abs(i)); 'end'; 'end' **** 'begin' 'procedure' T(x); 'value' x; 'integer' x; 'KDF9' 7/5/0/2; ZERO; DUP; DUP; =V1; =V2; SET1; +; ={x}; 'ALGOL'; T(100); 'end' **** 'begin' 'comment' invalid progam to investigate FAILS 00N in KAB01; 'integer' 'procedure' iabs(x) 'value' x; 'integer' x; 'KDF9' 0/0/0/0; {x}; ABS; 'EXIT'; 'ALGOL'; 'integer' res; res := iabs(-9); 'end' **** 'begin' 'comment' progam to investigate formal procedure calls; 'integer' 'procedure' iz; 'KDF9' 0/0/0/0; ZERO; 'EXIT'; 'ALGOL'; 'procedure' call2f(i, p1, ip2); 'value' i; 'integer' i; 'procedure' p1; 'integer' 'procedure' ip2; 'begin' 'integer' 'procedure' inner(ii); 'value' ii; 'integer' ii; inner := ii + ip2(ii); 'integer' loc; loc := ip2(4); p1(5, iz); 'end' call2f; 'procedure' act2(i, j); 'value' i, j; 'integer' i, j; 'begin' i := 1; 'end' act2; 'integer' 'procedure' iact1(j); 'value' j; 'integer' j; 'begin' iact1 := 2; 'end' iact1; call2f(22, act2, iact1); 'end' **** 'begin' 'library' A0, A6; 'comment' program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); 'real' 'procedure' f(x, y); 'value' x,y; 'real' x,y; f:= x + x + y + y; 'real' 'procedure' int(a, b, f); 'comment' integrates f(x) over range a to b; 'value' a, b; 'real' a, b; 'real' 'procedure' f; 'begin' 'real' 'procedure' intint(a, b, fa, fb); 'value' a, b, fa, fb; 'real' a, b, fa, fb; 'begin' 'real' c, fc, ff; c := (a + b) * 0.5; fc := f(c); ff := (fa + 4.0*fc + fb); 'comment' answer is good enough if simrule no better than trapezoidal; 'if' abs( (fa + fb)*3.0 - ff ) < 0.1 'then' intint := ff * (b - a) * 0.16666666667 'else' intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); 'end'; int := intint(a, b, f(a), f(b)); 'end'; 'real' 'procedure' minitest(x); 'value' x; 'real' x; 'begin' minitest := x*x*x; 'end'; 'real' answer; writetext(30, {minitest_0_to_2_x^3{c}}); answer := int(0, 2, minitest); output(30, answer); output(30, answer*100); 'end' **** Output from Whetstone Algol MINITEST 0 TO 2 X**3 0.0000 - 2.0000 0.0000 - 1.0000 0.0000 - 0.5000 0.0000 - 0.2500 0.2500 - 0.5000 0.5000 - 1.0000 0.5000 - 0.7500 0.5000 - 0.6250 0.6250 - 0.7500 0.7500 - 1.0000 0.7500 - 0.8750 0.8750 - 1.0000 1.0000 - 2.0000 1.0000 - 1.5000 1.0000 - 1.2500 1.0000 - 1.1250 1.1250 - 1.2500 1.2500 - 1.5000 1.2500 - 1.3750 1.3750 - 1.5000 1.5000 - 2.0000 1.5000 - 1.7500 1.5000 - 1.6250 1.6250 - 1.7500 1.7500 - 2.0000 1.7500 - 1.8750 1.8750 - 2.0000 +4.0000 0000 009 �+ 0; +4.0000 0000 008 �+ 2; RAN/EL/000M02S/000M02S **** 'begin' 'library' A0, A6; 'comment' testing I/O; 'real' x; open(20); open(30); 'for' x := read(20) 'while' x < 1000000 'do' output(30, x); close(20); close(30); 'end' **** 'begin' 'comment' 'library' A0; 'comment' program to integrate f(x,y) over triangle (0,0), (1,0), (1,1); 'comment' using Jensen's device -- David Ho; 'real' x, y; 'real' 'procedure' f(x, y); 'value' x,y; 'real' x,y; f:= x + x + y + y; 'real' 'procedure' int(a, b, x, f); 'comment' integrates f(x) over range a to b; 'value' a, b; 'real' a, b, x, f; 'begin' 'real' 'procedure' intint(a, b, fa, fb); 'value' a, b, fa, fb; 'real' a, b, fa, fb; 'begin' 'real' c, fc, ff; x := c := (a + b) / 2; fc := f; ff := (fa + 4*fc + fb)/6; 'comment' answer is good enough if simrule no better than trapezoidal; 'if' abs( (fa + fb)/2 - ff ) < 0.001 'then' intint := ff * (b - a) 'else' intint := intint(a, c, fa, fc) + intint(c, b, fc, fb); 'end'; 'real' fa; x := a; fa := f; x := b; int := intint(a, b, fa, f); 'end'; 'real' answer; 'real' 'procedure' minitest(x); 'value' x; 'real' x; 'begin' minitest := x*x*x; 'end'; writetext(30, {minitest_0_to_2_x^3{c}}); answer := int(0, 2, x, minitest(x)); output(30, answer); output(30, answer*100); 'comment' writetext(30, {fulltest_0_to_1_triangle_=_}); 'comment' answer := int(0, 1, x, int(0, x, y, f(x,y))); 'comment' output(30, answer*100); 'end' **** 'begin' 'comment' T54; 'library' A0, A6; 'integer' 'procedure' tsign(x); 'value' x; 'real' x; tsign := 'if' x > 0 'then' 1 'else' 'if' x < 0 'then' - 1 'else' 0; 'integer' 'procedure' tentier(x); 'value' x; 'real' x; tentier := x - .5; 'real' 'procedure' tabs(x); 'value' x; 'real' x; tabs := 'if' x < 0 'then' - x 'else' x; 'real' x; 'for' x := - 100, - 100.1, - 99.4, - .4, - .1, 0, .1, .4, .6, 300 'do' 'if' tsign(x) != sign(x) 'or' tentier(x) != entier(x) 'or' tabs(x) != abs(x) 'then' output(30, x) 'end' **** Results: Walgol RAN/EL/000M01S/000M09S SIZE 73 RAN/EL/000M01S/000M01S Kalgol -100.10 -099.40 -0.4000 -0.1000 FINISHED ENDS 0 Conclusion: Simple execution test, Walgol passes Kalgol execution fails on real equality Poor test, but worked in 1970! ****************** 'begin' 'comment' T51; 'library' A0, A6; 'array' a0[1 : 10], a1[1 : 10], a2[1 : 10], a3[1 : 10], a4[1 : 10], a5[1 : 10], a6[1 : 10], a7[1 : 10], a8[1 : 10], a9[1 : 10], a10[1 : 10], a11[1 : 10], a12[1 : 10], a13[1 : 10], a14[1 : 10], a15[1 : 10], a16[1 : 10], a17[1 : 10], a18[1 : 10], a19[1 : 10], a20[1 : 10], a21[1 : 10], a22[1 : 10], a23[1 : 10], a24[1 : 10], a25[1 : 10], a26[1 : 10], a27[1 : 10], a28[1 : 10], a29[1 : 10], a30[1 : 10], a31[1 : 10], a32[1 : 10], a33[1 : 10], a34[1 : 10], a35[1 : 10], a36[1 : 10], a37[1 : 10], a38[1 : 10], a39[1 : 10], a40[1 : 10], a41[1 : 10], a42[1 : 10], a43[1 : 10], a44[1 : 10], a45[1 : 10], a46[1 : 10], a47[1 : 10], a48[1 : 10], a49[1 : 10], a50[1 : 10], a51[1 : 10], a52[1 : 10], a53[1 : 10], a54[1 : 10], a55[1 : 10], a56[1 : 10], a57[1 : 10], a58[1 : 10], a59[1 : 10]; a0[1] := 1.0; a1[1] := 1.0; a2[1] := 1.0; a3[1] := 1.0; a4[1] := 1.0; a5[1] := 1.0; a6[1] := 1.0; a7[1] := 1.0; a8[1] := 1.0; a9[1] := 1.0; a10[1] := 1.0; a11[1] := 1.0; a12[1] := 1.0; a13[1] := 1.0; a14[1] := 1.0; a15[1] := 1.0; a16[1] := 1.0; a17[1] := 1.0; a18[1] := 1.0; a19[1] := 1.0; a20[1] := 1.0; a21[1] := 1.0; a22[1] := 1.0; a23[1] := 1.0; a24[1] := 1.0; a25[1] := 1.0; a26[1] := 1.0; a27[1] := 1.0; a28[1] := 1.0; a29[1] := 1.0; a30[1] := 1.0; a31[1] := 1.0; a32[1] := 1.0; a33[1] := 1.0; a34[1] := 1.0; a35[1] := 1.0; a36[1] := 1.0; a37[1] := 1.0; a38[1] := 1.0; a39[1] := 1.0; a40[1] := 1.0; a41[1] := 1.0; a42[1] := 1.0; a43[1] := 1.0; a44[1] := 1.0; a45[1] := 1.0; a46[1] := 1.0; a47[1] := 1.0; a48[1] := 1.0; a49[1] := 1.0; a50[1] := 1.0; a51[1] := 1.0; a52[1] := 1.0; a53[1] := 1.0; a54[1] := 1.0; a55[1] := 1.0; a56[1] := 1.0; a57[1] := 1.0; a58[1] := 1.0; a59[1] := 1.0; output(30, a0[1] + a1[1] + a2[1] + a3[1] + a4[1] + a5[1] + a6[1] + a7[1] + a8[1] + a9[1] + a10[1] + a11[1] + a12[1] + a13[1] + a14[1] + a15[1] + a16[1] + a17[1] + a18[1] + a19[1] + a20[1] + a21[1] + a22[1] + a23[1] + a24[1] + a25[1] + a26[1] + a27[1] + a28[1] + a29[1] + a30[1] + a31[1] + a32[1] + a33[1] + a34[1] + a35[1] + a36[1] + a37[1] + a38[1] + a39[1] + a40[1] + a41[1] + a42[1] + a43[1] + a44[1] + a45[1] + a46[1] + a47[1] + a48[1] + a49[1] + a50[1] + a51[1] + a52[1] + a53[1] + a54[1] + a55[1] + a56[1] + a57[1] + a58[1] + a59[1]); 'end' **************************** @ Results: Walgol RAN/EL/000M04S/000M36S SIZE 341 +5.9999 9999 956 <+ 1; RAN/EL/000M01S/000M01S Kalgol FAIL 00320 LINE 00148 IDEN OUTPUTP 0'ALGOL'S( Conclusion: Walgol passes but 1970 result produced rounded result! Kalgol fails, unclear why! Worked in 1970, and earlier this year! **********