В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
BlazeySpace01
BlazeySpace01
15.08.2021 12:02 •  Информатика

Дан массив целых чисел (n=15), заполненный случайным образом числами из промежутка [-20,50]. − удалить из него все элементы, в которых есть цифра 5. − вставить число k после всех элементов, кратных своему номеру (k вводить с клавиатуры). − поменять местами первый положительный и последний отрицательный элементы. на паскале)

Показать ответ
Ответ:
aisultankubashev
aisultankubashev
07.07.2020 21:47
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) > 0)
end;

procedure DeleteAll5(var A: Mas);
// Удаляет из массива А все элементы, содержащие цифру 5
var
  i, j: integer;
begin
  i := 1;  // текущая позиция в массиве
  j := n;  // количество непросмотренных элементов
  while j > 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 <= n do
  begin
    j := Fold(A, i);
    if j > 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 <= n do
  begin
    if A[i] > 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 >= 1 do
  begin
    if A[i] < 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 > 0 then begin
    j := GetLastNeg(M);
    if j > 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
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота