Задание 2 Вариант 2 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)
Запишите текст программы.
program s5_v2_2;
const
n = 20;
var
a: array[1..n] of integer;
i, k, c: integer;
begin
writeln(‘Ввод ‘);
//массив из 0,1,2 по желанию можно сделать любой с 0
for i := 1 to n do
a[i] := random(3);
//вывод исходного массива
for i := 1 to n do
write(a[i], ‘ ‘);
writeln;
k := 1;
for i := 1 to n do
if (a[i] < > 0) then //если встретился не 0
if(i < > k) then
begin //перестановка
c := a[i];
a[i] := a[k];
a[k] := c;
k := k + 1
end
else k := k + 1;//если i и k совпадают
writeln(‘Вывод массива’);
for i := 1 to n do
write(a[i], ‘ ‘)
end.
Нужно пройти по массиву один раз и сдвигать все ненулевые элементы в начало. Для этого удобно хранить номер позиции, куда должен попасть следующий ненулевой элемент, в переменной $$k$$.
Если текущий элемент $$a[i] \ne 0$$ и его позиция не совпадает с $$k$$, то меняем элементы местами $$a[i]$$ и $$a[k]$$. После этого увеличиваем $$k$$. Если $$i = k$$, то перестановка не нужна, но $$k$$ всё равно увеличивается.
program s5_v2_2;
const
n = 20;
var
a: array[1..n] of integer;
i, k, c: integer;
begin
writeln(‘Ввод’);
for i := 1 to n do
a[i] := random(3);for i := 1 to n do
write(a[i], ‘ ‘);
writeln;k := 1;
for i := 1 to n do
if a[i] <> 0 then
if i <> k then
begin
c := a[i];
a[i] := a[k];
a[k] := c;
k := k + 1
end
else k := k + 1;writeln(‘Вывод массива’);
for i := 1 to n do
write(a[i], ‘ ‘);
end.
Ответ: программа, которая переставляет элементы массива так, чтобы сначала шли все ненулевые, а затем все нули.