Заменить в массиве серию, длина которой меньше/равна/больше 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.
Объяснение кода листинга программы
- В начале кода объявлены следующие переменные:
- nmax - максимальное количество элементов в массиве (100)
- mas - тип массива (array[1..nmax] of integer)
- k, n, i, switch - целочисленные переменные
- A, B - массивы
- Zamena - процедура замены элементов в массиве
- Далее, в процедуре Zamena, определены следующие переменные:
- i, j, r, count - целочисленные переменные для выполнения замены элементов
- В основной части кода происходит следующее:
- Пользователю предлагается ввести количество элементов массива (n).
- Пользователю предлагается ввести n чисел в массив A.
- Пользователю предлагается выбрать действие: замена серии элементов длиной меньше k, равной k или большей k на нулевой элемент.
- Пользователю предлагается ввести значение k.
- Вызывается процедура Zamena для выполнения замены элементов в массиве A.
- Выводится массив A с помощью цикла for i := 1 to n do write(A[i], ' ')
- Процедура 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 устанавливается равным единице и выполняется выход из цикла.
- Код заканчивается оператором readln() для чтения введенных пользователем данных и закрытия программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д