Заменить в массиве серию, длина которой меньше/равна/больше k, на один нулевой элемент - PascalABC.NET

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

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

Дано число k и целочисленный массив размера N. Заменить серию, длина которой меньше1|равна2|больше3 k, на один нулевой элемент. Из трёх программок найденных слепил в одну,но возникли ошибки в 1-ом пункте выводит нули,в 2-ом и 3-ем пункте выводит то что я вводил в начале программы.А должно считать...
Листинг программы
  1. program var3_30;
  2. uses crt;
  3. var
  4. a: array [1..40] of integer;
  5. b: array [1..20] of integer;
  6. c: array [1..20] of integer;
  7. k, temp, m, n, i, j, key: integer;
  8. begin
  9. writeln('1 - Заменить серию, длина которой меньше k, на один нулевой элемент');
  10. writeln('2 - Заменить серию, длина которой равна k, на один нулевой элемент');
  11. writeln('3 - Заменить серию, длина которой больше k, на один нулевой элемент');
  12. readln(key);
  13. writeln('Введите k ');
  14. readln(k);
  15. writeln('Введите размер массива');
  16. readln(n);
  17. writeln('Введите значения массива');
  18. for i := 1 to n do
  19. begin
  20. write('a[', i, ']=');
  21. readln(a[i]);
  22. b[i] := i;
  23. end;
  24. case Key of
  25. 1:
  26. begin
  27. temp := 0;
  28. m := 0;
  29. // формируем из исходного массива A[] два с длиной серий B[] и значением серий C[]
  30. for i := 2 to n do
  31. begin
  32. inc(temp);
  33. if a[i] <> a[i - 1] then
  34. begin
  35. inc(m);
  36. b[m] := temp;
  37. c[m] := a[i - 1];
  38. temp := 0;
  39. end;
  40. end;
  41. inc(temp);
  42. inc(m);
  43. b[m] := temp;
  44. c[m] := a[i];
  45. // складываем массив A[] согласно задания.
  46. for i := 1 to m do
  47. begin
  48. if b[i]<k then
  49. begin
  50. b[i] := 1;
  51. c[i] := 0;
  52. end;
  53. end;
  54. temp := 0;
  55. for i := 1 to m do
  56. begin
  57. for j := 1 to b[i] do
  58. begin
  59. inc(temp);
  60. a[temp] := c[i];
  61. end;
  62. end;
  63. Writeln;
  64. Writeln('Ответ');
  65. Write(' A[]: '); for i := 1 to temp do Write(a[i], ' ');
  66. end;
  67. 2:
  68. begin
  69. temp := 0;
  70. m := 0;
  71. // формируем из исходного массива A[] два с длиной серий B[] и значением серий C[]
  72. for i := 2 to n do
  73. begin
  74. inc(temp);
  75. if a[i] <> a[i - 1] then
  76. begin
  77. inc(m);
  78. b[m] := temp;
  79. c[m] := a[i - 1];
  80. temp := 0;
  81. end;
  82. end;
  83. inc(temp);
  84. inc(m);
  85. b[m] := temp;
  86. c[m] := a[i];
  87. // складываем массив A[] согласно задания.
  88. for i := 1 to m do
  89. begin
  90. if b[i] = k then
  91. begin
  92. b[i] := 1;
  93. c[i] := 0;
  94. end;
  95. end;
  96. temp := 0;
  97. for i := 1 to m do
  98. begin
  99. for j := 1 to b[i] do
  100. begin
  101. inc(temp);
  102. a[temp] := c[i];
  103. end;
  104. end;
  105. Writeln;
  106. Writeln('Ответ');
  107. Write(' A[]: '); for i := 1 to temp do Write(a[i], ' ');
  108. end;
  109. 3:
  110. begin
  111. temp := 0;
  112. m := 0;
  113. // формируем из исходного массива A[] два с длиной серий B[] и значением серий C[]
  114. for i := 2 to n do
  115. begin
  116. inc(temp);
  117. if a[i] <> a[i - 1] then
  118. begin
  119. inc(m);
  120. b[m] := temp;
  121. c[m] := a[i - 1];
  122. temp := 0;
  123. end;
  124. end;
  125. inc(temp);
  126. inc(m);
  127. b[m] := temp;
  128. C[m] := a[i];
  129. // складываем массив A[] согласно задания.
  130. for i := 1 to m do
  131. begin
  132. if b[i] > k then
  133. begin
  134. b[i] := 1;
  135. c[i] := 0;
  136. end;
  137. end;
  138. temp := 0;
  139. for i := 1 to m do
  140. begin
  141. for j := 1 to b[i] do
  142. begin
  143. inc(temp);
  144. a[temp] := c[i];
  145. end;
  146. end;
  147. Writeln;
  148. Writeln('Ответ');
  149. Write(' A[]: ');
  150. for i := 1 to temp do Write(a[i], ' ');
  151. end;
  152. end;
  153. end.

Решение задачи: «Заменить в массиве серию, длина которой меньше/равна/больше k, на один нулевой элемент»

textual
Листинг программы
  1. const
  2.   nmax = 100;
  3.  
  4. type
  5.   mas = array[1..nmax] of integer;
  6.  
  7. var
  8.   k, n, i, switch: integer;
  9.   A, B: mas;
  10.  
  11. procedure Zamena(var A: mas; var n: integer; k, switch: integer);
  12. var
  13.   i, j, r, count: integer;
  14. begin
  15.   i := 1;count := 1;
  16.   while i <= n do
  17.   begin
  18.     if (i <> n) and (A[i] = A[i + 1]) then inc(count)
  19.       else
  20.     begin
  21.       if ((switch = 1) and (count < k)) or ((switch = 2) and (count = k))
  22.          or ((switch = 3) and (count > k)) then
  23.       begin
  24.         for r := 1 to count - 1 do
  25.         begin
  26.           dec(n);
  27.           for j := i - count + 1 to n do
  28.             A[j] := A[j + 1];
  29.         end;
  30.         A[i - count + 1] := 0;
  31.         count := 1;
  32.       end;
  33.     end;
  34.     inc(i);
  35.   end;
  36. end;
  37.  
  38. begin
  39.   repeat
  40.     write('Введите количество элементов: ');
  41.     readln(n);
  42.   until (n > 0) and (n < nmax);
  43.   writeln('Введите ', n, ' чисел');
  44.   for i := 1 to n do
  45.     read(A[i]);
  46.   writeln('1 - Заменить  серию, длина которой меньше k, на один нулевой элемент');
  47.   writeln('2 - Заменить  серию, длина которой равна k, на один нулевой элемент');
  48.   writeln('3 - Заменить  серию, длина которой больше k, на один нулевой элемент');
  49.   repeat
  50.     write('Выберете действие: ');
  51.     readln(switch);
  52.   until (switch >= 1) and (switch <= 3);
  53.   write('Введите значение k: ');readln(k);
  54.   Zamena(A, n, k, switch);
  55.   for i := 1 to n do
  56.     write(A[i], ' ');
  57. end.

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

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

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


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

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

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

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

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

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