Удаление элементов массива С
Есть динамический массив, из которого нужно удалить все положительные числа после первого отрицательного. Возникла проблема с удалением элементов, код работает странно.
#include <stdio.h>
#include <math.h>
#include <malloc.h>
int main()
{
int n = 10;
float x, h, a;
float *r;
r = (float*)malloc(n * sizeof(float));
h = 2.2;
a = 3.2;
x = 4.1;
int f = 0;
for (int i = 0; i<n; i++)
{
r[i] = cos(i*h) - cos(a*x+i*h);
if (r[i] < 0 && f == 0) f = i+1; // f - индекс первого положительного элемента
}
for (int i = 0; i<n; i++)
{
printf("%f ", r[i]);
}
int k = n;
for (int i = f; i < k; i++)
{
if (r[i] > 0)
{
k--;
for (int j = i; j<k; j++) r[i] = r[i+1];
float *tmp = realloc(r, (k) * sizeof(float));
r = tmp;
}
}
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Сначала сжимаем массив, потом один раз реаллоцируем
int cnt = 0;
for (int i = f; i < n; i++)
if (r[i] <= 0)
r[i - cnt] = r[i];
else
cnt++;
if(cnt) {
float *tmp = realloc(r, (n - cnt) * sizeof(float));
r = tmp;
}
Ещё не учитывается случай, когда отрицательных значений нет вообще.