Цитата:
Сообщение от Tenken
прошу прощения на паскале
|
Тогда, прошу прощения, но, например, так:
Код:
Const
N=24;
Type
Ar=Array[1..N+1] of Integer;
Var
A:Ar;
i:Integer;
b:boolean;
Procedure Work_with_Array(B:Ar;var B1:Ar; Var Bb:boolean);
var
bb1:boolean;
Ib,Jb:Byte;
Sum,D:Integer;
begin
Sum:=0;
bb1:=true;
Jb:=0;
For Ib:=1 to N-1 do
begin
Inc(Sum,B[Ib]);
If B[Ib]>B[Ib+1] then bb1:=false;
If (B[Ib]>0) and (Jb=0) then Jb:=Ib;
end;
If bb1 then
begin
Inc(Sum,B[N]);
For Ib:=N downto Jb+1 do B[Ib+1]:=B[Ib];
B[Jb+1]:=Sum;
end
else
For Ib:=1 to N-1 do
For Jb:=1 to N-Ib do
If B[Jb]>B[Jb+1] then
begin
D:=B[Jb];
B[Jb]:=B[Jb+1];
B[Jb+1]:=D;
end;
B1:=B;
bb:=bb1;
end;
Begin
Randomize;
Writeln('Var_1 (ordered array)');
Writeln;
Writeln('Initial array:');
For i:=1 to N do
begin
A[i]:=i-(N div 4);
Write(A[i]:4);
end;
Writeln;
Writeln('Array after processing:');
Work_with_Array(A,A,b);
If b then
For i:=1 to N+1 do Write(A[i]:4);
Writeln;
Writeln;
Writeln;
Writeln('Var_2 (disordered array)');
Writeln;
Writeln('Initial array:');
For i:=1 to N do
begin
A[i]:=-(N div 4)+Random(N);
Write(A[i]:4);
end;
Writeln;
Writeln('Array after processing:');
Work_with_Array(A,A,b);
If not(b) then
For i:=1 to N do Write(A[i]:4);
Readln;
End.