Заменить в массиве серию, длина которой меньше/равна/больше k, на один нулевой элемент - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Дано число k и целочисленный массив размера N. Заменить серию, длина которой меньше1|равна2|больше3 k, на один нулевой элемент. Из трёх программок найденных слепил в одну,но возникли ошибки в 1-ом пункте выводит нули,в 2-ом и 3-ем пункте выводит то что я вводил в начале программы.А должно считать...

Решение задачи: «Заменить в массиве серию, длина которой меньше/равна/больше k, на один нулевой элемент»

textual
Листинг программы
const
  nmax = 100;
 
type
  mas = array[1..nmax] of integer;
 
var
  k, n, i, switch: integer;
  A, B: mas;
 
procedure Zamena(var A: mas; var n: integer; k, switch: integer);
var
  i, j, r, count: integer;
begin
  i := 1;count := 1;
  while i <= n do
  begin
    if (i <> n) and (A[i] = A[i + 1]) then inc(count)
      else
    begin
      if ((switch = 1) and (count < k)) or ((switch = 2) and (count = k)) 
         or ((switch = 3) and (count > k)) then
      begin
        for r := 1 to count - 1 do
        begin
          dec(n);
          for j := i - count + 1 to n do
            A[j] := A[j + 1];
        end;
        A[i - count + 1] := 0;
        count := 1;
      end;
    end;
    inc(i);
  end;
end;
 
begin
  repeat
    write('Введите количество элементов: ');
    readln(n);
  until (n > 0) and (n < nmax);
  writeln('Введите ', n, ' чисел');
  for i := 1 to n do
    read(A[i]);
  writeln('1 - Заменить  серию, длина которой меньше k, на один нулевой элемент');
  writeln('2 - Заменить  серию, длина которой равна k, на один нулевой элемент');
  writeln('3 - Заменить  серию, длина которой больше k, на один нулевой элемент');
  repeat
    write('Выберете действие: ');
    readln(switch);
  until (switch >= 1) and (switch <= 3);
  write('Введите значение k: ');readln(k);
  Zamena(A, n, k, switch);
  for i := 1 to n do
    write(A[i], ' ');
end.

Объяснение кода листинга программы

  1. В начале кода объявлены следующие переменные:
    • nmax - максимальное количество элементов в массиве (100)
    • mas - тип массива (array[1..nmax] of integer)
    • k, n, i, switch - целочисленные переменные
    • A, B - массивы
    • Zamena - процедура замены элементов в массиве
  2. Далее, в процедуре Zamena, определены следующие переменные:
    • i, j, r, count - целочисленные переменные для выполнения замены элементов
  3. В основной части кода происходит следующее:
    • Пользователю предлагается ввести количество элементов массива (n).
    • Пользователю предлагается ввести n чисел в массив A.
    • Пользователю предлагается выбрать действие: замена серии элементов длиной меньше k, равной k или большей k на нулевой элемент.
    • Пользователю предлагается ввести значение k.
    • Вызывается процедура Zamena для выполнения замены элементов в массиве A.
    • Выводится массив A с помощью цикла for i := 1 to n do write(A[i], ' ')
  4. Процедура Zamena выполняет замену элементов в массиве следующим образом:
    • Переменная count инициализируется единицей.
    • В цикле while i <= n выполняется проверка: если текущий элемент не последний в массиве и равен следующему элементу, то увеличивается счетчик count.
    • Если условие выполняется, то в цикле for r := 1 to count - 1 выполняется замена элементов: уменьшается значение n, а затем в цикле for j := i - count + 1 to n выполняется перестановка элементов, начиная с i - count + 1 до n.
    • Затем, значение A[i - count + 1] заменяется на ноль, значение count устанавливается равным единице и выполняется выход из цикла.
  5. Код заканчивается оператором readln() для чтения введенных пользователем данных и закрытия программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы