Удалить из массива все серии, длина которых равна K - Turbo Pascal

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

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

Здравствуйте! прошу помочь с выполнением первого пункта задачи...Начало положено. Но не корректно выводит. Условие: Задан целочисленный массив размера N. Удалить из массива все серии, длина которых равна K. Серия - группа подряд идущих одинаковых элементов, длина серии - количество этих элементов. При удалении остальные элементы сместись вперед, а в конце дописать нули. Отсортировать отрицательные элементы исходного массива по убыванию. спасибо!
Листинг программы
  1. const
  2. MaxN=100+1;
  3. var
  4. a: array[1..MaxN] of integer;
  5. i, j, k, n: integer;
  6. len : integer;
  7. curr: integer;
  8. begin
  9. randomize;
  10. write('Размер массива от 1 до ', MaxN-1, ':');
  11. readln(n);
  12. writeln('Исходный массив:');
  13. for i:=1 to n do begin
  14. a[i]:=random(15)-3;
  15. write(a[i]:4);end;
  16. a[n+1] := MaxInt;
  17. writeln;
  18. write('Введите длину серий k=');
  19. readln(k);
  20. curr := a[1];
  21. len := 1;
  22. for i:= 2 to n+1 do
  23. begin
  24. if a[i]=curr then
  25. inc(len)
  26. else
  27. begin
  28. if len<=k then
  29. begin
  30. while len>0 do
  31. begin
  32. inc(j);
  33. a[j]:=curr;
  34. dec(len);
  35. end;
  36. end;
  37. curr:=a[i];
  38. len := 1;
  39. end;
  40. end;
  41. for i:= j+1 to n do
  42. a[i] := 0;
  43. writeln('Сжатый массив:');
  44. for i:=1 to n do
  45. write(a[i]:4);
  46. writeln;
  47. readln
  48. end.

Решение задачи: «Удалить из массива все серии, длина которых равна K»

textual
Листинг программы
  1. uses crt;
  2. const nmax=30;
  3. var a:array[1..nmax] of integer;
  4.     n,i,j,k,p,s,q,x:integer;
  5. begin
  6. clrscr;
  7. repeat
  8. write('Размер массива до ',nmax,' n=');
  9. readln(n);
  10. until n in [1..nmax];
  11. writeln('Введите элементы массива, целые положительные и отрицательные числа:');
  12. for i:=1 to n do
  13.  begin
  14.   write('a[',i,']=');
  15.   readln(a[i]);
  16.  end;
  17. clrscr;
  18. writeln('Исходный массив:');
  19. for i:=1 to n do
  20. write(a[i]:4);
  21. writeln;
  22. write('Введите длину серий k=');
  23. readln(k);
  24. i:=2;
  25. x:=0;//количество удалений
  26. while i<=n do
  27. if a[i]=a[i-1] then
  28.  begin
  29.   j:=i;s:=1;p:=i-1;
  30.   while(j<=n) and(a[j]=a[j-1]) do
  31.    begin
  32.     s:=s+1;
  33.     j:=j+1;
  34.    end;
  35.   if s=k then
  36.   for j:=1 to s do
  37.    begin
  38.     for q:=p to n-1 do
  39.     a[q]:=a[q+1];
  40.     n:=n-1;
  41.     x:=x+1;
  42.    end
  43.   else i:=i+s;
  44.  end
  45. else i:=i+1;
  46. if n=0 then write('Все элементы удалены')
  47. else
  48.  begin
  49.   writeln('Массив после сжатия:');
  50.   for i:=1 to x do
  51.    begin
  52.     n:=n+1;
  53.     a[n]:=0;
  54.    end;
  55.   for i:=1 to n do
  56.   write(a[i]:3);
  57.  end;
  58. readln
  59. end.

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

Этот код написан на Turbo Pascal и выполняет следующие действия:

  1. Запрашивает у пользователя размер массива nmax и количество серий k, которые нужно удалить.
  2. Вводит элементы массива.
  3. Выводит исходный массив.
  4. Удаляет все серии, длина которых равна k.
  5. Выводит массив после удаления.
  6. Если после удаления остались элементы, выводит сообщение Все элементы удалены.
  7. Если массив пуст, выводит сообщение Все элементы удалены. Переменные в коде:
    • nmax - максимальное количество элементов в массиве.
    • n - текущее количество элементов в массиве.
    • i, j, k, p, s, q, x - счетчики и переменные для отслеживания серий.
    • a - массив, в котором хранятся элементы. Примечание: Вложенных списков в этом коде нет.

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


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

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

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы