Сжать массив, удалив из него все элементы, модуль которых находится в интервале - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д