Сжать массив, удалив из него все элементы, модуль которых находится в интервале - C (СИ)

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

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

Привет всем, помогите поймать ошибку в коде, пожалуйста. Задача: Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,Ь]. Освободившиеся в конце массива элементы заполнить нулями.
Листинг программы
  1. for (i=0; i < n; i++)
  2. {
  3. if ((arr[i] >= a) && (arr[i] <= b))
  4. {
  5. arr[i] = arr[i+1];
  6. i--;
  7. }
  8. };
Глаза замылились, не могу понять, почему программа начинает зацикливаться на этом шаге, другие вроде выполняются адекватно...

Решение задачи: «Сжать массив, удалив из него все элементы, модуль которых находится в интервале»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void print_array(const char * msg, int * a, unsigned count) {
  5.     printf("%s {", msg);
  6.     if (count > 0) printf("%d", *a);
  7.     for (++a; count > 1; ++a, --count) printf(", %d", *a);
  8.     printf("}\n");
  9. }
  10.  
  11. int main() {
  12.     int a = 3, b = 8, i, j, t;
  13.     int arr[]  = { 10, 3, 2, 1, -4, 3, 22, 11, -14 };
  14.     unsigned n = sizeof(arr) / sizeof(*arr);
  15.     print_array("BEFORE ", arr, n);
  16.     for (i = 0, j = 0; i < n; ++i) {
  17.         t = abs(arr[i]);
  18.         if (t < a || t > b) arr[j++] = arr[i];
  19.     }
  20.     while (j < n) arr[j++] = 0;
  21.     print_array(" AFTER ", arr, n);
  22.     return 0;
  23. }

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


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

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

13   голосов , оценка 3.538 из 5

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

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

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