Заменить в массиве серию, длина которой меньше/равна/больше k, на один нулевой элемент - PascalABC.NET
Формулировка задачи:
Дано число k и целочисленный массив размера N. Заменить серию, длина которой меньше1|равна2|больше3 k, на один нулевой элемент.
Из трёх программок найденных слепил в одну,но возникли ошибки
в 1-ом пункте выводит нули,в 2-ом и 3-ем пункте выводит то что я вводил в начале программы.А должно считать...
Листинг программы
- program var3_30;
- uses crt;
- var
- a: array [1..40] of integer;
- b: array [1..20] of integer;
- c: array [1..20] of integer;
- k, temp, m, n, i, j, key: integer;
- begin
- writeln('1 - Заменить серию, длина которой меньше k, на один нулевой элемент');
- writeln('2 - Заменить серию, длина которой равна k, на один нулевой элемент');
- writeln('3 - Заменить серию, длина которой больше k, на один нулевой элемент');
- readln(key);
- writeln('Введите k ');
- readln(k);
- writeln('Введите размер массива');
- readln(n);
- writeln('Введите значения массива');
- for i := 1 to n do
- begin
- write('a[', i, ']=');
- readln(a[i]);
- b[i] := i;
- end;
- case Key of
- 1:
- begin
- temp := 0;
- m := 0;
- // формируем из исходного массива A[] два с длиной серий B[] и значением серий C[]
- for i := 2 to n do
- begin
- inc(temp);
- if a[i] <> a[i - 1] then
- begin
- inc(m);
- b[m] := temp;
- c[m] := a[i - 1];
- temp := 0;
- end;
- end;
- inc(temp);
- inc(m);
- b[m] := temp;
- c[m] := a[i];
- // складываем массив A[] согласно задания.
- for i := 1 to m do
- begin
- if b[i]<k then
- begin
- b[i] := 1;
- c[i] := 0;
- end;
- end;
- temp := 0;
- for i := 1 to m do
- begin
- for j := 1 to b[i] do
- begin
- inc(temp);
- a[temp] := c[i];
- end;
- end;
- Writeln;
- Writeln('Ответ');
- Write(' A[]: '); for i := 1 to temp do Write(a[i], ' ');
- end;
- 2:
- begin
- temp := 0;
- m := 0;
- // формируем из исходного массива A[] два с длиной серий B[] и значением серий C[]
- for i := 2 to n do
- begin
- inc(temp);
- if a[i] <> a[i - 1] then
- begin
- inc(m);
- b[m] := temp;
- c[m] := a[i - 1];
- temp := 0;
- end;
- end;
- inc(temp);
- inc(m);
- b[m] := temp;
- c[m] := a[i];
- // складываем массив A[] согласно задания.
- for i := 1 to m do
- begin
- if b[i] = k then
- begin
- b[i] := 1;
- c[i] := 0;
- end;
- end;
- temp := 0;
- for i := 1 to m do
- begin
- for j := 1 to b[i] do
- begin
- inc(temp);
- a[temp] := c[i];
- end;
- end;
- Writeln;
- Writeln('Ответ');
- Write(' A[]: '); for i := 1 to temp do Write(a[i], ' ');
- end;
- 3:
- begin
- temp := 0;
- m := 0;
- // формируем из исходного массива A[] два с длиной серий B[] и значением серий C[]
- for i := 2 to n do
- begin
- inc(temp);
- if a[i] <> a[i - 1] then
- begin
- inc(m);
- b[m] := temp;
- c[m] := a[i - 1];
- temp := 0;
- end;
- end;
- inc(temp);
- inc(m);
- b[m] := temp;
- C[m] := a[i];
- // складываем массив A[] согласно задания.
- for i := 1 to m do
- begin
- if b[i] > k then
- begin
- b[i] := 1;
- c[i] := 0;
- end;
- end;
- temp := 0;
- for i := 1 to m do
- begin
- for j := 1 to b[i] do
- begin
- inc(temp);
- a[temp] := c[i];
- end;
- end;
- Writeln;
- Writeln('Ответ');
- Write(' A[]: ');
- for i := 1 to temp do Write(a[i], ' ');
- end;
- end;
- end.
Решение задачи: «Заменить в массиве серию, длина которой меньше/равна/больше 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() для чтения введенных пользователем данных и закрытия программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д