В массиве М каждый элемент равен: 0, 1, 2. Переставить элементы массива так, чтобы сначала располагались все единицы, затем все двойки и, наконец, все нули — Pascal(Паскаль)

Program PascalGuru;

Uses Crt;

Type
  om = array [1 .. 256] of Integer;

Var
  A { данный целочисленный массив } : om;
  i, { индекс массива, номер элемента массива }
  N, { длина массива, количество элементов в массиве }
  s0, { количество нулей }
  s1, { количество единиц }
  s2 { количество двоек }
    : Integer;

Procedure print_om(x { массив для печати }
  : om; k { длина массива }
  : Integer);
{ Печатает на экран монитора все элементы массива в строчку.
  Начало массива '(', его окончание ')'
}

var
  j: Integer; { номер элемента массива }

begin
  Write('(');
  for j := 1 to k do
    if j <> k then
      write(x[j], ', ')
    else
      write(x[j]);
  WriteLn(')');
end;

Begin
  ClrScr;
  s0 := 0; { инициализация переменной }
  s1 := 0;
  s2 := 0;
  { Ввод массива }
  Write('Сколько элементов в массиве: ');
  ReadLn(N);

  WriteLn;
  WriteLn('Введите элементы массива: ');

  for i := 1 to N do
  begin
    Write(i, ') ');
    ReadLn(A[i]);
    case A[i] of
      0:
        Inc(s0);
      1:
        Inc(s1);
      2:
        Inc(s2);
    else
      begin
        WriteLn;
        WriteLn('Неверен ввод данных');
        WriteLn('Прекращаю работу');
        ReadLn;
        Exit;
      end;
    end;
  end;
  WriteLn;

  print_om(A, N);

  { Подсчет количества нулей, единиц и двоек в массиве, а
    также выход из программы, если неверно введены данные
  }

  { Заполнение старого массива так, чтобы сначала шли все
    единицы, затем все двойки и, наконец, все нули
  }
  for i := 1 to s1 do
    A[i] := 1;
  for i := s1 + 1 to s1 + s2 do
    A[i] := 2;
  for i := s1 + s2 + 1 to N do
    A[i] := 0;

  { Вывод на экран получившегося массива
  }
  WriteLn;
  WriteLn('После перестановки элементов массив станет таким: ');
  WriteLn;
  print_om(A, N);

  ReadLn;

End.

Leave a Comment

+ 38 = 43