Данмассив целых чисел (n=15),заполненный случайным образом числами из интервала

Дан
массив целых чисел (n=15),
заполненный случайным образом числами из интервала [-20,50].




удалить из него все элементы, в которых есть цифра 5.



воткнуть число k
после всех элементов, кратных собственному номеру (k вводить с клавиатуры).




поменять местами 1-ый положительный и заключительный отрицательный элементы.
На паскале)

Задать свой вопрос
1 ответ
Const
  n = 15;
  Flag = 111;

type
  Mas = array[1..n] of integer;

procedure ShiftLeft(var A: Mas; nPos: integer);
// Элементы массива A, начиная с номера nPos, сдвигаются на один к началу массива
// Заключительный элемент массива заносится значением 111
var
  i: integer;
begin
  for i := nPos to n - 1 do
    A[i] := A[i + 1];
  A[n] := Flag
end;

procedure ShiftRight(var A: Mas; nPos: integer);
// Элементы массива A, начиная с номера nPos, сдвигаются на один к концу массива
// Заключительный элемент массива пропадает, элемент с номером nPos заносится значением 111
var
  i: integer;
begin
  for i := n downto nPos + 1 do
    A[i] := A[i - 1];
  A[nPos] := Flag
end;

function Contains5(p: integer): Boolean;
// Возвращает true, если в числе p есть хоть одна цифра 5
// Возвращает false в неприятном случае
var
  s: string;
begin
  Str(p, s);
  Contains5 := (Pos('5', s) gt; 0)
end;

procedure DeleteAll5(var A: Mas);
// Устраняет из массива А все элементы, содержащие цифру 5
var
  i, j: integer;
begin
  i := 1;  // текущая позиция в массиве
  j := n;  // количество непросмотренных частей
  while j gt; 0 do
  begin
    if Contains5(A[i]) then
      ShiftLeft(A, i)
    else
      i := i + 1;
    j := j - 1
  end;
end;

function Fold(var A: Mas; pStart: integer): integer;
// Отдаёт номер элемента в массиве А, значение которого кратно его номеру
// pStart - номер элемента, с которого начинается просмотр
// Если такового элемента не найдено, ворачивается ноль.
var
  i: integer;
begin
  for i := pStart to n do
    if A[i] mod i = 0 then begin
      Fold := i;
      Exit
    end;
  Fold := 0
end;

procedure InsertK(var A: Mas; k: integer);
// После всех элементов массива, кратных собственному номеру,
// вставляет значение k, сдвигая оставшиеся элементы
// к концу массива
var
  i, j: integer;
begin
  i := 1;
  while i lt;= n do
  begin
    j := Fold(A, i);
    if j gt; 0 then begin
      ShiftRight(A, j);
      A[j] := k;
      i := j + 1
    end
    else
      i := n + 1
  end
end;

function GetFirstPos(var A: Mas): integer;
// Возвращает номер первого положительного элемента в массиве А
// Отдаёт ноль, если таких частей нет.
var
  i: integer;
begin
  i:=1;
  while i lt;= n do
  begin
    if A[i] gt; 0 then begin
      GetFirstPos := i;
      Exit
    end
    else
      i := i + 1
  end;
  GetFirstPos := 0
end;

function GetLastNeg(var A: Mas): integer;
// Возвращает номер последнего по порядку отрицательного элемента в массиве А
// Отдаёт ноль, если таких частей нет.
var
  i: integer;
begin
  i:=n;
  while i gt;= 1 do
  begin
    if A[i] lt; 0 then begin
      GetLastNeg := i;
      Exit
    end
    else
      i := i - 1
  end;
  GetLastNeg := 0
end;

procedure Swap(var A: Mas; p: integer; q: integer);
// Размен местами частей массива A[p] и A[q]
var
  s: integer;
begin
  s := A[p]; A[p] := A[q]; A[q] := s
end;

var
  M: Mas;
  k, i, j: integer;

begin
  // Инициализация массива
  Randomize;
  writeln('Начальный массив');
  for i := 1 to n do
  begin
    M[i] := random(70) - 20;
    write(M[i]:4)
  end;
  writeln;
  DeleteAll5(M); // Удаление частей, содержащих цифру 5
  writeln('После удаления элементов, содержащих цифру 5');
  for i := 1 to n do
    write(M[i]:4);
  writeln;
  writeln('Введите значение k');
  readln(k);
  InsertK(M, k);
  writeln('После вставки значения k');
  for i := 1 to n do
    write(M[i]:4);
  writeln;
  i := GetFirstPos(M);
  if i gt; 0 then begin
    j := GetLastNeg(M);
    if j gt; 0 then begin
      Swap(M, i, j);
      writeln('После размена местами пары частей');
      for i := 1 to n do
        write(M[i]:4);
      writeln;
    end
  end
end.

Тестовое решение:

Начальный массив
  -2  -5  43  12  13   5  -7   9  27   5  47  45  28  34  21
После удаления частей, содержащих цифру 5
  -2  43  12  13  -7   9  27  47  28  34  21 111 111 111 111
Введите значение k
222
После вставки значения k
 222 222  -2  43  12  13 222  -7 222   9  27  47  28  34  21
После размена местами пары частей
  -7 222  -2  43  12  13 222 222 222   9  27  47  28  34  21


, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт