1-11 класс
  • 1-11 класс
  • 1 класс
  • 2 класс
  • 3 класс
  • 4 класс
  • 5 класс
  • 6 класс
  • 7 класс
  • 8 класс
  • 9 класс
  • 10 класс
  • 11 класс
Выберите класс
Предметы
(Сам и контр)
Задание 1 Вариант 1 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)
Босова, Босова, Аквилянов
11 класс
Автор
Босова, Босова, Аквилянов

Задание 1 Вариант 1 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)

Задача

РЕШЕНИЕ ЗАДАЧ ПО ОБРАБОТКЕ ОДНОМЕРНЫХ МАССИВОВ
ВАРИАНТ 1
1. Напишите программу. Одномерный массив А[1..N] заполнен 0 и 1, расположенными в произвольном порядке. Переформируйте массив так, чтобы сначала шли элементы, равные 0, а затем — 1. Предусмотрите вывод исходного и переформированного массивов на экран.
Запишите текст программы.
program s5_v1_1;
const
n = 20;
var
a: array[1..n] of integer;
i, k, c: integer;
begin
writeln(‘Ввод массива’);
randomize;
for i := 1 to n do
begin
a[i] := random(2);//получается массив из 1 и 0
write(a[i], ‘ ‘)
end;
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.
Ввод массива
0 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1
Вывод массива
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Вариант проще. Подсчитать количество 0, написать их в начале массива, затем дописать его 1.
k := 0;
for i := 1 to n do
if a[i] = 0 then k:=k+1;
for i := 1 to k do
a[i] := 0;
for i := k + 1 to n do
a[i] := 1;

Подробный ответ

Нужно переставить элементы одномерного массива так, чтобы сначала шли все нули, а затем все единицы. Удобно сначала посчитать количество нулей, а потом заполнить массив: первые $$k$$ элементов сделать равными $$0$$, остальные — равными $$1$$.

program s5_v1_1;
const
  n = 20;
var
  a: array[1..n] of integer;
  i, k: integer;
begin
  writeln(‘Ввод массива’);
  randomize;
  for i := 1 to n do
  begin
    a[i] := random(2);
    write(a[i], ‘ ‘);
  end;
  writeln;

  k := 0;
  for i := 1 to n do
    if a[i] = 0 then
      k := k + 1;

  for i := 1 to k do
    a[i] := 0;
  for i := k + 1 to n do
    a[i] := 1;

  writeln(‘Вывод массива’);
  for i := 1 to n do
    write(a[i], ‘ ‘);
end.

Возможен и другой вариант решения — перестановка элементов на месте, но способ с подсчётом нулей проще и понятнее.

Ответ

Программа приведена выше.



Общая оценка
4 / 5
Другие учебники
Другие предметы