Показать сообщение отдельно
Старый 18.11.2012, 15:04   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070