*process source attributes xref or(!); pat: Proc Options(main); Dcl (HBOUND,MAX,RIGHT) Builtin; Dcl SYSPRINT Print; Dcl N Bin Fixed(31) Init(5); Dcl pd Char(500) Var; Dcl fact(0:10) Bin Fixed(31); Dcl pt(0:500) Bin Fixed(31); Call mk_fact(fact); Call Pascal(n,'U',pt); Call show('Pascal upper triangular matrix'); Call Pascal(n,'L',pt); Call show('Pascal lower triangular matrix'); Call Pascal(n,'S',pt); Call show('Pascal symmetric matrix' ); Pascal: proc(n,which,dd); Dcl n Bin Fixed(31); Dcl which Char(1); Dcl (i,j,k) Bin Fixed(31); Dcl dd(0:500) Bin Fixed(31); k=0; dd(0)=0; do i=0 To n-1; Do j=0 To n-1; k+=1; Select(which); When('U') dd(k)=comb((j), (i)); When('L') dd(k)=comb((i), (j)); When('S') dd(k)=comb((i+j),(i)); Otherwise; End; dd(0)=max(dd(0),dd(k)); End; End; End; mk_fact: Proc(f); Dcl f(0:*) Bin Fixed(31); Dcl i Bin Fixed(31); f(0)=1; Do i=1 To hbound(f); f(i)=f(i-1)*i; End; End; comb: proc(x,y) Returns(pic'z9'); Dcl (x,y) Bin Fixed(31); Dcl (j,z) Bin Fixed(31); Dcl res Pic'Z9'; Select; When(x=y) res=1; When(y>x) res=0; Otherwise Do; If x-y