 
Вопрос задан 27.06.2019 в 06:34.
Предмет Информатика.
Спрашивает Бабич Борис.
Дан массив целых чисел (n=15), заполненный случайным образом числами из промежутка [-20,50]. −
удалить из него все элементы, в которых есть цифра 5.− вставить число k после всех элементов, кратных своему номеру (k вводить с клавиатуры).− поменять местами первый положительный и последний отрицательный элементы.На паскале) 0
        0
         0
        0
    Ответы на вопрос
 
        Отвечает Сысолятина Мария.
                
     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
                                        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
                    0
                Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
	- 
			Математика 
- 
			Литература 
- 
			Алгебра 
- 
			Русский язык 
- 
			Геометрия 
- 
			Английский язык 
- 
			Химия 
- 
			Физика 
- 
			Биология 
- 
			Другие предметы 
- 
			История 
- 
			Обществознание 
- 
			Окружающий мир 
- 
			География 
- 
			Українська мова 
- 
			Информатика 
- 
			Українська література 
- 
			Қазақ тiлi 
- 
			Экономика 
- 
			Музыка 
- 
			Право 
- 
			Беларуская мова 
- 
			Французский язык 
- 
			Немецкий язык 
- 
			МХК 
- 
			ОБЖ 
- 
			Психология 
- 
			Физкультура и спорт 
- 
			Астрономия 
- 
			Кыргыз тили 
- 
			Оʻzbek tili 
 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			