Удалить из массива все серии, длина которых равна K - Turbo Pascal
Формулировка задачи:
Здравствуйте!
прошу помочь с выполнением первого пункта задачи...Начало положено. Но не корректно выводит. Условие: Задан целочисленный массив размера N. Удалить из массива все серии, длина которых равна K. Серия - группа подряд идущих одинаковых элементов, длина серии - количество этих элементов. При удалении остальные элементы сместись вперед, а в конце дописать нули. Отсортировать отрицательные элементы исходного массива по убыванию. спасибо!
Листинг программы
- const
- MaxN=100+1;
- var
- a: array[1..MaxN] of integer;
- i, j, k, n: integer;
- len : integer;
- curr: integer;
- begin
- randomize;
- write('Размер массива от 1 до ', MaxN-1, ':');
- readln(n);
- writeln('Исходный массив:');
- for i:=1 to n do begin
- a[i]:=random(15)-3;
- write(a[i]:4);end;
- a[n+1] := MaxInt;
- writeln;
- write('Введите длину серий k=');
- readln(k);
- curr := a[1];
- len := 1;
- for i:= 2 to n+1 do
- begin
- if a[i]=curr then
- inc(len)
- else
- begin
- if len<=k then
- begin
- while len>0 do
- begin
- inc(j);
- a[j]:=curr;
- dec(len);
- end;
- end;
- curr:=a[i];
- len := 1;
- end;
- end;
- for i:= j+1 to n do
- a[i] := 0;
- writeln('Сжатый массив:');
- for i:=1 to n do
- write(a[i]:4);
- writeln;
- readln
- end.
Решение задачи: «Удалить из массива все серии, длина которых равна 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
- массив, в котором хранятся элементы. Примечание: Вложенных списков в этом коде нет.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д