code 36021; procedure SNDREMEZ(N,M,S,G,EM); value N,M;integer N,M; integer array S; array G,EM; comment SNDREMEZ EXCHANGES ATMOST N+1 NUMBERS ,GIVEN IN INTEGER ARRAY S[0:N], WITH NUMBERS OUT OF THE REFERENCE SET 0,...M, UNDER THE CONDITIONS: I. THE ALTERNANCE PROPERTY OF THE FUNCTIONVALUES G[S[J]], J=0,...N IS PRESERVED. II. !G[S[J]]!>=!EM[0]!,J=0,...N. III. THE FIRST INDEX K , WITH G[K]=INFINITY NORM OF G, IS ONE OF THE RESULTING NUMBERS S[0],...S[N]. IN ARRAY G[0:M] ONE MUST GIVE ERROR FUNCTION VALUES. MOREOVER, EM[1]:=INFINITY NORM OF G, THE PROCEDURE INFNRMVEC IS USED; begin integer S0,SN,SJP1,I,J,K,UP,INDEXMAX,LOW,NM1; real MAX,MSJP1,HI,HJ,HE,ABSE,H; INDEX MAX:=S0:=SJP1:=S[0]; HE:=EM[0];LOW:=S0+1; MAX:=MSJP1:=ABSE:=ABS(HE); NM1:=N-1; for J:= 0 step 1 until NM1 do begin UP:= S[J+1]-1; H:= INFNRMVEC(LOW,UP,I,G); if H > MAX then begin MAX:= H; INDEX MAX:= I end; if H > ABSE then begin if HE * G[I] > 0 then begin S[J]:= if MSJP1 < H then I else SJP1; SJP1:= S[J+1]; MSJP1:= ABSE end else begin S[J]:= SJP1; SJP1:= I; MSJP1:= H end end else begin S[J]:=SJP1; SJP1:=S[J+1]; MSJP1:= ABSE end; HE:=-HE;LOW:=UP+2; end FOR J; SN:= S[N]; S[N]:= SJP1; HI:=INFNRMVEC(0,S0-1,I,G); HJ:=INFNRMVEC(SN+1,M,J,G); if J > M then J:=M; if HI > HJ then begin if HI > MAX then begin MAX:= HI; INDEXMAX:= I end; if SIGN(G[I]) = SIGN(G[S[0]]) then begin if HI > ABS(G[S[0]]) then begin S[0]:= I; if G[J]/G[S[N]] > 1 then S[N]:=J end end else if HI > ABS(G[S[N]]) then begin S[N]:= if G[J]/G[S[NM1]] > 1 then J else S[NM1]; for K:= NM1 step -1 until 1 do S[K]:= S[K-1]; S[0]:= I end end else begin if HJ > MAX then begin MAX:= HJ; INDEXMAX:= J end; if SIGN(G[J]) = SIGN(G[S[N]]) then begin if HJ > ABS(G[S[N]]) then begin S[N]:= J; if G[I]/G[S[0]] > 1 then S[0]:=I end end else if HJ > ABS(G[S[0]]) then begin S[0]:= if G[I]/G[S[1]] > 1 then I else S[1]; for K:= 1 step 1 until NM 1 do S[K]:= S[K+1]; S[N]:= J end end RANDGEBIEDEN; EM[1]:=MAX; end SNDREMEZ; eop