Удалить из массива все серии, длина которых равна K - Turbo Pascal
Формулировка задачи:
Здравствуйте!
прошу помочь с выполнением первого пункта задачи...Начало положено. Но не корректно выводит. Условие: Задан целочисленный массив размера N. Удалить из массива все серии, длина которых равна K. Серия - группа подряд идущих одинаковых элементов, длина серии - количество этих элементов. При удалении остальные элементы сместись вперед, а в конце дописать нули. Отсортировать отрицательные элементы исходного массива по убыванию. спасибо!
Решение задачи: «Удалить из массива все серии, длина которых равна K»
textual
Листинг программы
uses crt;
const nmax=30;
var a:array[1..nmax] of integer;
n,i,j,k,p,s,q,x:integer;
begin
clrscr;
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите элементы массива, целые положительные и отрицательные числа:');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
clrscr;
writeln('Исходный массив:');
for i:=1 to n do
write(a[i]:4);
writeln;
write('Введите длину серий k=');
readln(k);
i:=2;
x:=0;//количество удалений
while i<=n do
if a[i]=a[i-1] then
begin
j:=i;s:=1;p:=i-1;
while(j<=n) and(a[j]=a[j-1]) do
begin
s:=s+1;
j:=j+1;
end;
if s=k then
for j:=1 to s do
begin
for q:=p to n-1 do
a[q]:=a[q+1];
n:=n-1;
x:=x+1;
end
else i:=i+s;
end
else i:=i+1;
if n=0 then write('Все элементы удалены')
else
begin
writeln('Массив после сжатия:');
for i:=1 to x do
begin
n:=n+1;
a[n]:=0;
end;
for i:=1 to n do
write(a[i]:3);
end;
readln
end.
Объяснение кода листинга программы
Этот код написан на Turbo Pascal и выполняет следующие действия:
- Запрашивает у пользователя размер массива
nmaxи количество серийk, которые нужно удалить. - Вводит элементы массива.
- Выводит исходный массив.
- Удаляет все серии, длина которых равна
k. - Выводит массив после удаления.
- Если после удаления остались элементы, выводит сообщение
Все элементы удалены. - Если массив пуст, выводит сообщение
Все элементы удалены. Переменные в коде:nmax- максимальное количество элементов в массиве.n- текущее количество элементов в массиве.i,j,k,p,s,q,x- счетчики и переменные для отслеживания серий.a- массив, в котором хранятся элементы. Примечание: Вложенных списков в этом коде нет.