Сжать массив, удалив из него все элементы, модуль которых находится в интервале - C (СИ)
Формулировка задачи:
Привет всем, помогите поймать ошибку в коде, пожалуйста.
Задача: Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а,Ь]. Освободившиеся
в конце массива элементы заполнить нулями.
Глаза замылились, не могу понять, почему программа начинает зацикливаться на этом шаге, другие вроде выполняются адекватно...
for (i=0; i < n; i++) { if ((arr[i] >= a) && (arr[i] <= b)) { arr[i] = arr[i+1]; i--; } };
Решение задачи: «Сжать массив, удалив из него все элементы, модуль которых находится в интервале»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> void print_array(const char * msg, int * a, unsigned count) { printf("%s {", msg); if (count > 0) printf("%d", *a); for (++a; count > 1; ++a, --count) printf(", %d", *a); printf("}\n"); } int main() { int a = 3, b = 8, i, j, t; int arr[] = { 10, 3, 2, 1, -4, 3, 22, 11, -14 }; unsigned n = sizeof(arr) / sizeof(*arr); print_array("BEFORE ", arr, n); for (i = 0, j = 0; i < n; ++i) { t = abs(arr[i]); if (t < a || t > b) arr[j++] = arr[i]; } while (j < n) arr[j++] = 0; print_array(" AFTER ", arr, n); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д